diff --git a/.changeset/create-app-1696937840.md b/.changeset/create-app-1696937840.md new file mode 100644 index 0000000000..b50d431d4b --- /dev/null +++ b/.changeset/create-app-1696937840.md @@ -0,0 +1,5 @@ +--- +'@backstage/create-app': patch +--- + +Bumped create-app version. diff --git a/.changeset/dirty-doors-wave.md b/.changeset/dirty-doors-wave.md new file mode 100644 index 0000000000..aad6e8f414 --- /dev/null +++ b/.changeset/dirty-doors-wave.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-backend': patch +--- + +Add examples for `github:issues:label` scaffolder action & improve related tests diff --git a/.changeset/early-toes-develop.md b/.changeset/early-toes-develop.md new file mode 100644 index 0000000000..3262ff0b98 --- /dev/null +++ b/.changeset/early-toes-develop.md @@ -0,0 +1,11 @@ +--- +'@backstage/plugin-techdocs-backend': minor +'@backstage/plugin-techdocs-node': minor +--- + +Allow prepared directory clean up for custom preparers + +When using custom preparer for TechDocs, the `preparedDir` might +end up taking disk space. This requires all custom preparers to +implement a new method `shouldCleanPreparedDirectory` which indicates +whether the prepared directory should be cleaned after generation. diff --git a/.changeset/eight-spiders-fold.md b/.changeset/eight-spiders-fold.md new file mode 100644 index 0000000000..e4d35cd11d --- /dev/null +++ b/.changeset/eight-spiders-fold.md @@ -0,0 +1,7 @@ +--- +'@backstage/cli': minor +--- + +Update typescript-eslint to 6.7.x, adding compatibility with TypeScript 5.2. + +This includes a major update on typescript-eslint, you can see the details in the [release notes](https://typescript-eslint.io/blog/announcing-typescript-eslint-v6/). diff --git a/.changeset/eight-suns-tan.md b/.changeset/eight-suns-tan.md new file mode 100644 index 0000000000..4b8634a9e1 --- /dev/null +++ b/.changeset/eight-suns-tan.md @@ -0,0 +1,5 @@ +--- +'@backstage/frontend-plugin-api': minor +--- + +Extension attachment point is now configured via `attachTo: { id, input }` instead of `at: 'id/input'`. diff --git a/.changeset/empty-schools-check.md b/.changeset/empty-schools-check.md new file mode 100644 index 0000000000..c69bbaabb3 --- /dev/null +++ b/.changeset/empty-schools-check.md @@ -0,0 +1,6 @@ +--- +'@backstage/frontend-plugin-api': minor +'@backstage/frontend-app-api': minor +--- + +Removed support for the new `useRouteRef`. diff --git a/.changeset/five-hornets-provide.md b/.changeset/five-hornets-provide.md new file mode 100644 index 0000000000..a422c5fbc8 --- /dev/null +++ b/.changeset/five-hornets-provide.md @@ -0,0 +1,5 @@ +--- +'@backstage/frontend-app-api': patch +--- + +The app will now reject any extensions that attach to nonexistent inputs. diff --git a/.changeset/flat-rules-rush.md b/.changeset/flat-rules-rush.md new file mode 100644 index 0000000000..a95772bb6f --- /dev/null +++ b/.changeset/flat-rules-rush.md @@ -0,0 +1,19 @@ +--- +'@backstage/plugin-catalog-backend-module-gitlab': patch +--- + +fix: use REST API to get root group memberships for GitLab SaaS users listing + +This API is the only one that shows `email` field for enterprise users and +allows to filter out bot users not using a license using the `is_using_seat` +field. + +We also added the annotation `gitlab.com/saml-external-uid` taking the value +of `group_saml_identity.extern_uid` of the `groups/:group-id/members` endpoint +response. This is useful in case you want to create a `SignInResolver` that +references the user with the id of your identity provider (e.g. OneLogin). + +ref: + +https://docs.gitlab.com/ee/user/enterprise_user/#get-users-email-addresses-through-the-api +https://docs.gitlab.com/ee/api/members.html#limitations diff --git a/.changeset/fuzzy-pillows-remain.md b/.changeset/fuzzy-pillows-remain.md new file mode 100644 index 0000000000..59e3dd7896 --- /dev/null +++ b/.changeset/fuzzy-pillows-remain.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-techdocs': patch +--- + +Improved `DocsTable` to display pagination controls dynamically, appearing only when needed. diff --git a/.changeset/healthy-laws-divide.md b/.changeset/healthy-laws-divide.md new file mode 100644 index 0000000000..4ab29e6426 --- /dev/null +++ b/.changeset/healthy-laws-divide.md @@ -0,0 +1,5 @@ +--- +'@backstage/frontend-app-api': patch +--- + +Implement `toString()` and `toJSON()` for extension instances. diff --git a/.changeset/heavy-ladybugs-leave.md b/.changeset/heavy-ladybugs-leave.md new file mode 100644 index 0000000000..5af2324260 --- /dev/null +++ b/.changeset/heavy-ladybugs-leave.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-newrelic': patch +--- + +Fixed sorting and searching in the NewRelic table. diff --git a/.changeset/khaki-tools-tease.md b/.changeset/khaki-tools-tease.md new file mode 100644 index 0000000000..e4383c9e33 --- /dev/null +++ b/.changeset/khaki-tools-tease.md @@ -0,0 +1,11 @@ +--- +'@backstage/plugin-scaffolder-backend': minor +--- + +Updated `publish:gitlab` action properties to support additional Gitlab project settings: + +- general project settings provided by gitlab project create API (new `settings` property) +- branch level settings to create additional branches and make them protected (new `branches` property) +- project level environment variables settings (new `projectVariables` property) + +Marked existed properties `repoVisibility` and `topics` as deprecated, as they are covered by `settings` property. diff --git a/.changeset/large-balloons-brush.md b/.changeset/large-balloons-brush.md new file mode 100644 index 0000000000..0dcada12bf --- /dev/null +++ b/.changeset/large-balloons-brush.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-auth-node': minor +--- + +**BREAKING**: The recently introduced `ProxyAuthenticator.initialize()` method is no longer `async` to match the way the OAuth equivalent is implemented. diff --git a/.changeset/little-ligers-cheat.md b/.changeset/little-ligers-cheat.md new file mode 100644 index 0000000000..30b4238c59 --- /dev/null +++ b/.changeset/little-ligers-cheat.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder': patch +--- + +Make entity picker more reliable with only one available entity diff --git a/.changeset/loud-hotels-hunt.md b/.changeset/loud-hotels-hunt.md new file mode 100644 index 0000000000..b977d2c1d9 --- /dev/null +++ b/.changeset/loud-hotels-hunt.md @@ -0,0 +1,22 @@ +--- +'@backstage/plugin-catalog-backend-module-incremental-ingestion': patch +'@backstage/plugin-catalog-backend-module-github': patch +'@backstage/plugin-catalog-backend-module-gitlab': patch +'@backstage/plugin-analytics-module-ga': patch +'@backstage/integration-react': patch +'@backstage/core-components': patch +'@backstage/core-plugin-api': patch +'@backstage/backend-common': patch +'@backstage/plugin-catalog-backend': patch +'@backstage/plugin-cicd-statistics': patch +'@backstage/catalog-model': patch +'@backstage/config-loader': patch +'@backstage/plugin-catalog-react': patch +'@backstage/integration': patch +'@backstage/plugin-tech-radar': patch +'@backstage/errors': patch +'@backstage/plugin-catalog': patch +'@backstage/plugin-ilert': patch +--- + +Removed some unused dependencies diff --git a/.changeset/many-pianos-bow.md b/.changeset/many-pianos-bow.md new file mode 100644 index 0000000000..6c4e3be47f --- /dev/null +++ b/.changeset/many-pianos-bow.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-adr': patch +--- + +Fix icon alignment in `AdrSearchResultListItem` diff --git a/.changeset/nasty-needles-hear.md b/.changeset/nasty-needles-hear.md new file mode 100644 index 0000000000..32a9d0dfb7 --- /dev/null +++ b/.changeset/nasty-needles-hear.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-common': patch +--- + +Added `/testUtils` entry point, with a utility for mocking resolve package paths as returned by `resolvePackagePath`. diff --git a/.changeset/nice-ghosts-build.md b/.changeset/nice-ghosts-build.md new file mode 100644 index 0000000000..abdad08c3b --- /dev/null +++ b/.changeset/nice-ghosts-build.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-kubernetes-node': minor +'@backstage/plugin-kubernetes-backend': patch +--- + +A new plugin has been introduced to house the extension points for Kubernetes backend plugin; at the moment only the `KubernetesObjectsProviderExtensionPoint` is present. The `kubernetes-backend` plugin was modified to use this new extension point. diff --git a/.changeset/nine-flies-move.md b/.changeset/nine-flies-move.md new file mode 100644 index 0000000000..0e7bca2836 --- /dev/null +++ b/.changeset/nine-flies-move.md @@ -0,0 +1,6 @@ +--- +'@techdocs/cli': minor +'@backstage/plugin-techdocs-node': minor +--- + +Add possibility to use a mkdocs config file with a different name than `mkdocs. with the serve command using the `--mkdocs-config-file-name` argument diff --git a/.changeset/odd-pants-sleep.md b/.changeset/odd-pants-sleep.md new file mode 100644 index 0000000000..ad0b95d973 --- /dev/null +++ b/.changeset/odd-pants-sleep.md @@ -0,0 +1,7 @@ +--- +'@backstage/plugin-codescene': patch +'@backstage/plugin-graphiql': patch +'@backstage/plugin-ilert': patch +--- + +Internal refactor to avoid using the deprecated `.icon.svg` extension. diff --git a/.changeset/olive-geese-rest.md b/.changeset/olive-geese-rest.md new file mode 100644 index 0000000000..547fb828d8 --- /dev/null +++ b/.changeset/olive-geese-rest.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-jenkins-backend': patch +--- + +Added support for the [new backend system](https://backstage.io/docs/backend-system/) diff --git a/.changeset/perfect-shrimps-attend.md b/.changeset/perfect-shrimps-attend.md new file mode 100644 index 0000000000..b530d0e2a2 --- /dev/null +++ b/.changeset/perfect-shrimps-attend.md @@ -0,0 +1,5 @@ +--- +'@backstage/core-components': patch +--- + +Fixed overflowing messages in `WarningPanel`. diff --git a/.changeset/plenty-toys-cheer.md b/.changeset/plenty-toys-cheer.md new file mode 100644 index 0000000000..3c16002632 --- /dev/null +++ b/.changeset/plenty-toys-cheer.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-search-react': patch +'@backstage/plugin-graphiql': patch +--- + +Updated `/alpha` exports to use new `attachTo` option. diff --git a/.changeset/pre.json b/.changeset/pre.json index d767fe77f0..d6534f2b5a 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -246,52 +246,84 @@ "@backstage/plugin-vault-backend": "0.3.8", "@backstage/plugin-xcmetrics": "0.2.43", "@backstage/e2e-test-utils": "0.0.0", - "@backstage/plugin-kubernetes-react": "0.0.0" + "@backstage/plugin-kubernetes-react": "0.0.0", + "@backstage/plugin-auth-backend-module-microsoft-provider": "0.0.0", + "@backstage/plugin-catalog-backend-module-github-org": "0.0.0", + "@backstage/plugin-kubernetes-cluster": "0.0.0", + "@backstage/plugin-kubernetes-node": "0.0.0" }, "changesets": [ "angry-badgers-beg", + "angry-clocks-exercise", "big-spies-beam", "breezy-dryers-thank", + "calm-carpets-kiss", "calm-scissors-rescue", "chatty-papayas-care", "clean-forks-love", "cold-bees-jam", "cold-seas-repeat", + "create-app-1696937840", + "dirty-doors-wave", "dull-bugs-build", "dull-dolls-explode", "dull-experts-kiss", "dull-laws-camp", + "early-toes-develop", "eight-melons-cough", + "eight-spiders-fold", + "eight-suns-tan", "eighty-actors-type", + "empty-schools-check", "fair-frogs-enjoy", + "flat-pandas-tan", + "flat-rules-rush", "four-jars-protect", "four-onions-clap", "four-pans-sin", + "fresh-badgers-study", "fresh-kangaroos-tap", + "fuzzy-pillows-remain", "gentle-elephants-fold", "gentle-spies-deny", + "great-walls-brake", "happy-books-smoke", + "healthy-laws-divide", "heavy-forks-tie", + "heavy-ladybugs-leave", "itchy-bobcats-fly", "itchy-monkeys-reply", "itchy-rabbits-exist", + "khaki-tools-tease", + "large-balloons-brush", "large-comics-knock", "late-papayas-push", "lazy-doors-wink", "lemon-cups-wait", "lemon-masks-greet", + "little-ligers-cheat", + "loud-hotels-hunt", "lovely-coins-occur", "lovely-fans-sniff", + "many-pianos-bow", "many-swans-eat", "mean-dancers-burn", + "metal-peas-beam", "moody-lobsters-rescue", + "nasty-needles-hear", "nervous-hounds-sleep", "nice-clocks-smash", "nice-dancers-explain", + "nice-ghosts-build", + "nine-flies-move", "nine-garlics-attend", + "odd-pants-sleep", "olive-cars-rescue", + "olive-geese-rest", "perfect-pumas-protect", + "perfect-shrimps-attend", "plenty-llamas-double", + "plenty-toys-cheer", "polite-cooks-perform", "polite-donuts-fail", "polite-trainers-grin", @@ -301,31 +333,58 @@ "purple-chefs-wait", "purple-forks-fetch", "quick-weeks-explode", + "rare-pants-reply", "red-bees-try", + "red-geese-clean", + "renovate-7d08f6a", "renovate-a1c52e8", + "rotten-rings-confess", + "serious-pants-lie", + "serious-penguins-tease", + "short-terms-check", "shy-clouds-reflect", "shy-seas-sip", "silent-years-bake", "silly-swans-invent", + "six-weeks-raise", + "slow-dodos-remember", + "small-books-deliver", "small-pugs-build", + "smooth-rings-mate", "spicy-chairs-film", + "spicy-poets-sell", "spotty-badgers-wash", + "stale-eagles-reply", + "stale-stingrays-explode", + "strange-dodos-film", "strong-falcons-tickle", "stupid-drinks-trade", "stupid-eagles-shave", + "swift-steaks-fetch", + "tame-trainers-visit", "tasty-avocados-hope", "tasty-doors-switch", "ten-seals-wait", + "tender-pears-work", "thirty-coins-sneeze", "tiny-garlics-cheer", "twelve-clouds-design", + "twelve-days-walk", + "twenty-bags-sin", + "twenty-carrots-smile", + "two-dingos-dream", + "two-terms-play", + "unlucky-experts-breathe", + "violet-apes-beam", "violet-beers-cross", "warm-drinks-argue", "wet-olives-wave", "wet-timers-chew", "wicked-rings-flash", "wild-jobs-greet", + "wild-queens-grab", "yellow-numbers-own", - "yellow-rings-invent" + "yellow-rings-invent", + "young-toes-knock" ] } diff --git a/.changeset/rare-pants-reply.md b/.changeset/rare-pants-reply.md new file mode 100644 index 0000000000..d37192048c --- /dev/null +++ b/.changeset/rare-pants-reply.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-auth-backend-module-gcp-iap-provider': minor +--- + +**BREAKING** `gcpIapAuthenticator.initialize()` is no longer `async` diff --git a/.changeset/renovate-7d08f6a.md b/.changeset/renovate-7d08f6a.md new file mode 100644 index 0000000000..4e8111f1b3 --- /dev/null +++ b/.changeset/renovate-7d08f6a.md @@ -0,0 +1,5 @@ +--- +'@backstage/config-loader': patch +--- + +Updated dependency `typescript-json-schema` to `^0.61.0`. diff --git a/.changeset/rotten-rings-confess.md b/.changeset/rotten-rings-confess.md new file mode 100644 index 0000000000..8948a90347 --- /dev/null +++ b/.changeset/rotten-rings-confess.md @@ -0,0 +1,9 @@ +--- +'@backstage/plugin-newrelic-dashboard': minor +--- + +Changes in `newrelic-dashboard` plugin: + +- Make DashboardSnapshotList component public +- Settle discrepancies in the exported API +- Deprecate DashboardSnapshotComponent diff --git a/.changeset/serious-pants-lie.md b/.changeset/serious-pants-lie.md new file mode 100644 index 0000000000..e67f01dd53 --- /dev/null +++ b/.changeset/serious-pants-lie.md @@ -0,0 +1,21 @@ +--- +'@backstage/cli': patch +--- + +Support for the `.icon.svg` extension has been deprecated and will be removed in the future. The implementation of this extension is too tied to a particular version of MUI and the SVGO, and it makes it harder to evolve the build system. We may introduce the ability to reintroduce this kind of functionality in the future through configuration for use in internal plugins, but for now we're forced to remove it. + +To migrate existing code, rename the `.icon.svg` file to `.tsx` and replace the `` element with `` from MUI and add necessary imports. For example: + +```tsx +import React from 'react'; +import SvgIcon from '@material-ui/core/SvgIcon'; +import { IconComponent } from '@backstage/core-plugin-api'; + +export const CodeSceneIcon = (props: SvgIconProps) => ( + + + + + +); +``` diff --git a/.changeset/silly-chefs-allow.md b/.changeset/silly-chefs-allow.md new file mode 100644 index 0000000000..6a1ff5dc09 --- /dev/null +++ b/.changeset/silly-chefs-allow.md @@ -0,0 +1,5 @@ +--- +'@backstage/frontend-plugin-api': patch +--- + +Added `createExtensionOverrides` which can be used to install a collection of extensions in an app that will replace any existing ones. diff --git a/.changeset/small-books-deliver.md b/.changeset/small-books-deliver.md new file mode 100644 index 0000000000..0d09f7ae1c --- /dev/null +++ b/.changeset/small-books-deliver.md @@ -0,0 +1,5 @@ +--- +'@backstage/frontend-app-api': patch +--- + +Updates for `at` -> `attachTo` refactor. diff --git a/.changeset/smooth-rings-mate.md b/.changeset/smooth-rings-mate.md new file mode 100644 index 0000000000..f46ef2cb5c --- /dev/null +++ b/.changeset/smooth-rings-mate.md @@ -0,0 +1,5 @@ +--- +'@backstage/theme': patch +--- + +Added support for string `fontSize` values (e.g. `"2.5rem"`) in themes in addition to numbers. Also added an optional `fontFamily` prop for header typography variants to allow further customization. diff --git a/.changeset/spicy-poets-sell.md b/.changeset/spicy-poets-sell.md new file mode 100644 index 0000000000..4bebd71344 --- /dev/null +++ b/.changeset/spicy-poets-sell.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-jenkins': patch +--- + +Extend EntityJenkinsContent to receive columns as prop diff --git a/.changeset/stale-eagles-reply.md b/.changeset/stale-eagles-reply.md new file mode 100644 index 0000000000..4584355a59 --- /dev/null +++ b/.changeset/stale-eagles-reply.md @@ -0,0 +1,6 @@ +--- +'@backstage/config-loader': patch +'@backstage/backend-app-api': patch +--- + +Added `watch` option to configuration loaders that can be used to disable file watching by setting it to `false`. diff --git a/.changeset/strange-dodos-film.md b/.changeset/strange-dodos-film.md new file mode 100644 index 0000000000..78b9119a2b --- /dev/null +++ b/.changeset/strange-dodos-film.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-github-org': minor +--- + +Added `catalogModuleGithubOrgEntityProvider` to ingest users and teams from multiple Github organizations. diff --git a/.changeset/swift-steaks-fetch.md b/.changeset/swift-steaks-fetch.md new file mode 100644 index 0000000000..80b23e7658 --- /dev/null +++ b/.changeset/swift-steaks-fetch.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-auth-backend-module-microsoft-provider': minor +'@backstage/plugin-auth-backend': patch +--- + +Migrated the Microsoft auth provider to new `@backstage/plugin-auth-backend-module-microsoft-provider` module package. diff --git a/.changeset/tame-trainers-visit.md b/.changeset/tame-trainers-visit.md new file mode 100644 index 0000000000..5315f3e1d5 --- /dev/null +++ b/.changeset/tame-trainers-visit.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-github': patch +--- + +Removed `catalogModuleGithubOrgEntityProvider`. Import from `@backstage/plugin-catalog-backend-module-github-org` instead. diff --git a/.changeset/tender-experts-yell.md b/.changeset/tender-experts-yell.md new file mode 100644 index 0000000000..a4d321073b --- /dev/null +++ b/.changeset/tender-experts-yell.md @@ -0,0 +1,5 @@ +--- +'@backstage/frontend-app-api': minor +--- + +Added support for installing `ExtensionOverrides` via `createApp` options. As part of this change the `plugins` option has been renamed to `features`, and the `pluginLoader` has been renamed to `featureLoader`. diff --git a/.changeset/tender-pears-work.md b/.changeset/tender-pears-work.md new file mode 100644 index 0000000000..7770e4c087 --- /dev/null +++ b/.changeset/tender-pears-work.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder': patch +--- + +`RepoUrlPickerRepoName` now correctly handles value changes in allowed repos. diff --git a/.changeset/twenty-bags-sin.md b/.changeset/twenty-bags-sin.md new file mode 100644 index 0000000000..797fd5bfef --- /dev/null +++ b/.changeset/twenty-bags-sin.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-tech-insights': patch +--- + +Export `ScorecardInfo` and `ScorecardsList` components to be able to use manually queried check results directly. diff --git a/.changeset/twenty-carrots-smile.md b/.changeset/twenty-carrots-smile.md new file mode 100644 index 0000000000..873af7dcd3 --- /dev/null +++ b/.changeset/twenty-carrots-smile.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-backend': patch +--- + +Add examples for `publish:Azure` scaffolder action. diff --git a/.changeset/two-terms-play.md b/.changeset/two-terms-play.md new file mode 100644 index 0000000000..6c7edc01db --- /dev/null +++ b/.changeset/two-terms-play.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-github-issues': patch +--- + +Filters out entities that belonged to a different github instance other than the one configured by the plugin diff --git a/.changeset/unlucky-experts-breathe.md b/.changeset/unlucky-experts-breathe.md new file mode 100644 index 0000000000..018b1826d2 --- /dev/null +++ b/.changeset/unlucky-experts-breathe.md @@ -0,0 +1,5 @@ +--- +'@backstage/frontend-app-api': patch +--- + +Added support for the existing routing system. diff --git a/.changeset/violet-apes-beam.md b/.changeset/violet-apes-beam.md new file mode 100644 index 0000000000..544dcf72b2 --- /dev/null +++ b/.changeset/violet-apes-beam.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-newrelic-dashboard': patch +--- + +Fixed React Warning: "Each child in a list should have a unique 'key' prop" during the rendering of `EntityNewRelicDashboardCard` diff --git a/.changeset/wild-queens-grab.md b/.changeset/wild-queens-grab.md new file mode 100644 index 0000000000..287dc0482e --- /dev/null +++ b/.changeset/wild-queens-grab.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-playlist': patch +--- + +Updated Playlist read me with additional screenshots diff --git a/.changeset/young-toes-knock.md b/.changeset/young-toes-knock.md new file mode 100644 index 0000000000..6371dec193 --- /dev/null +++ b/.changeset/young-toes-knock.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-opencost': patch +--- + +Fix for broken image reference. diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index cb8101e1b1..e788a6fe95 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -13,6 +13,7 @@ yarn.lock @backstage/maintainers @backst /docs/features/techdocs @backstage/techdocs-maintainers /docs/plugins/integrating-search-into-plugins.md @backstage/discoverability-maintainers /packages/cli/src/commands/onboard @backstage/sharks +/packages/backend-openapi-utils @backstage/maintainers @backstage/reviewers @backstage/openapi-tooling-maintainers /packages/techdocs-cli @backstage/techdocs-maintainers /packages/techdocs-cli-embedded-app @backstage/techdocs-maintainers /plugins/adr @backstage/maintainers @backstage/reviewers @kuangp diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index dbf2dc6705..12c19075a6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -18,7 +18,7 @@ jobs: strategy: fail-fast: false matrix: - node-version: [18.x] + node-version: [18.x, 20.x] env: CI: true @@ -49,7 +49,7 @@ jobs: strategy: fail-fast: false matrix: - node-version: [18.x] + node-version: [18.x, 20.x] env: CI: true @@ -139,7 +139,7 @@ jobs: strategy: fail-fast: false matrix: - node-version: [18.x] + node-version: [18.x, 20.x] name: Test ${{ matrix.node-version }} services: diff --git a/.github/workflows/deploy_packages.yml b/.github/workflows/deploy_packages.yml index 91b25fb323..2329101eb0 100644 --- a/.github/workflows/deploy_packages.yml +++ b/.github/workflows/deploy_packages.yml @@ -14,7 +14,7 @@ jobs: strategy: fail-fast: false matrix: - node-version: [18.x] + node-version: [18.x, 20.x] services: postgres13: diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 6fe4ab0f9e..7d20a77f07 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -34,7 +34,7 @@ jobs: persist-credentials: false - name: 'Run analysis' - uses: ossf/scorecard-action@08b4669551908b1024bb425080c797723083c031 # v2.2.0 + uses: ossf/scorecard-action@483ef80eb98fb506c348f7d62e28055e49fe2398 # v2.3.0 with: results_file: results.sarif results_format: sarif @@ -61,6 +61,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: 'Upload to code-scanning' - uses: github/codeql-action/upload-sarif@ddccb873888234080b77e9bc2d4764d5ccaaccf9 # v2.21.9 + uses: github/codeql-action/upload-sarif@2cb752a87e96af96708ab57187ab6372ee1973ab # v2.22.0 with: sarif_file: results.sarif diff --git a/ADOPTERS.md b/ADOPTERS.md index ba96296610..b5e19106b7 100644 --- a/ADOPTERS.md +++ b/ADOPTERS.md @@ -260,4 +260,5 @@ _You can do this by using the [Adopter form](https://info.backstage.spotify.com/ | [Localiza&Co](https://www.localiza.com/) | [Augusto Amormino](https://github.com/augustoamormino), [Jonas Soares](https://github.com/jonaopower), [Alexandre Amormino](https://github.com/alexandreamormino), [Greg Almeida](https://github.com/sephh) | We're excited to announce our adoption of Backstage as our Internal Developer Portal! Our mission is to elevate the Developer Experience by streaming information access. Backstage will serve as the ultimate hub for developer resources, including documentation, tools, software insights, and metrics. Through Backstage, we're simplifying processes, offering software templates to empowered and efficient development journey, enhancing self-service capabilities with the embedded all best practices. | | [V2 Digital](https://v2.digital) | [Joe Patterson](https://github.com/jrwpatterson)| We will be using it to be a corporate dashboard plus our software catalog. | | [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. | diff --git a/OWNERS.md b/OWNERS.md index 135d617203..caf5bc4d14 100644 --- a/OWNERS.md +++ b/OWNERS.md @@ -22,12 +22,14 @@ Team: @backstage/catalog-maintainers Scope: The catalog plugin and catalog model -| Name | Organization | Team | GitHub | Discord | -| -------------- | ------------ | --------- | ---------------------------------------- | ---------------- | -| Rickard Dybeck | Spotify | Chipmunks | [alde](http://github.com/alde) | rdybeck#8083 | -| Mike Blockley | Spotify | Chipmunks | [mikeyhc](http://github.com/mikeyhc) | mikey-spot#5363 | -| Elon Jefferson | Spotify | Chipmunks | [Edje-C](http://github.com/Edje-C) | elon-spotty#6086 | -| Nurit Izrailov | Spotify | Chipmunks | [nuritizra](http://github.com/nuritizra) | - | +| Name | Organization | Team | GitHub | Discord | +| --------------- | ------------ | --------- | ----------------------------------------- | ------------------- | +| Rickard Dybeck | Spotify | Chipmunks | [alde](https://github.com/alde) | `rdybeck#8083` | +| Mike Blockley | Spotify | Chipmunks | [mikeyhc](https://github.com/mikeyhc) | `mikey-spot#5363` | +| Elon Jefferson | Spotify | Chipmunks | [Edje-C](https://github.com/Edje-C) | `elon-spotty#6086 ` | +| Nurit Izrailov | Spotify | Chipmunks | [nuritizra](https://github.com/nuritizra) | - | +| Hunter Dougless | Spotify | Chipmunks | [hntrdglss](https://github.com/hntrdglss) | `hntrdglss#1849` | +| Seve Kim | Spotify | Chipmunks | [sevedkim](https://github.com/sevedkim) | `seve#9951` | ### Discoverability @@ -118,6 +120,17 @@ Scope: Tooling for frontend and backend schema-first OpenAPI development. | -------------- | ------------ | --------------------------------------- | ------------- | | Aramis Sennyey | Spotify | [sennyeya](https://github.com/sennyeya) | `Aramis#7984` | +### Scaffolder + +Team: @backstage/scaffolder-maintainers + +Scope: The Scaffolder frontend and backend plugins, and related tooling. + +| Name | Organization | GitHub | Discord | +| ------------------- | -------------- | ------------------------------------- | ---------------- | +| Bogdan Nechyporenko | Bol.com | [acierto](https://github.com/acierto) | `bogdan_haarlem` | +| Paul Cowan | frontendrescue | [dagda1](https://github.com/dadga1) | `dagda1` | + ## Sponsors | Name | Organization | GitHub | Email | diff --git a/docs/assets/plugins/create-plugin_types.png b/docs/assets/plugins/create-plugin_types.png new file mode 100644 index 0000000000..ea45d1cdd1 Binary files /dev/null and b/docs/assets/plugins/create-plugin_types.png differ diff --git a/docs/assets/my-plugin_screenshot.png b/docs/assets/plugins/my-plugin_screenshot.png similarity index 100% rename from docs/assets/my-plugin_screenshot.png rename to docs/assets/plugins/my-plugin_screenshot.png diff --git a/docs/features/software-catalog/extending-the-model.md b/docs/features/software-catalog/extending-the-model.md index 52ef565837..fec924fa91 100644 --- a/docs/features/software-catalog/extending-the-model.md +++ b/docs/features/software-catalog/extending-the-model.md @@ -447,6 +447,9 @@ want to have an isomorphic package that houses these types. Within the Backstage main repo the package naming pattern of `-common` is used for isomorphic packages, and you may choose to adopt this pattern as well. +You can generate an isomorphic plugin package by running:`yarn new --select plugin-common` +or you can run `yarn new` and then select "plugin-common" from the list of options + There's at this point no existing templates for generating isomorphic plugins using the `@backstage/cli`. Perhaps the simplest wat to get started right now is to copy the contents of one of the existing packages in the main repository, diff --git a/docs/features/techdocs/addons.md b/docs/features/techdocs/addons.md index a41995c260..2e17891917 100644 --- a/docs/features/techdocs/addons.md +++ b/docs/features/techdocs/addons.md @@ -65,7 +65,7 @@ page in your `App.tsx`: // packages/app/src/App.tsx import { TechDocsReaderPage } from '@backstage/plugin-techdocs'; -import { TechDocsAddons } from '@backstage/plugin-techdocs-react/alpha'; +import { TechDocsAddons } from '@backstage/plugin-techdocs-react'; import { ReportIssue } from '@backstage/plugin-techdocs-module-addons-contrib'; // ... @@ -99,7 +99,7 @@ is very similar; instead of adding the `` registry under a import { EntityLayout } from '@backstage/plugin-catalog'; import { EntityTechdocsContent } from '@backstage/plugin-techdocs'; -import { TechDocsAddons } from '@backstage/plugin-techdocs-react/alpha'; +import { TechDocsAddons } from '@backstage/plugin-techdocs-react'; import { ReportIssue } from '@backstage/plugin-techdocs-module-addons-contrib'; // ... @@ -146,7 +146,7 @@ an Addon, follow these steps: import { createTechDocsAddonExtension, TechDocsAddonLocations, -} from '@backstage/plugin-techdocs-react/alpha'; +} from '@backstage/plugin-techdocs-react'; import { CatGifComponent, CatGifComponentProps } from './addons'; // ... @@ -179,7 +179,7 @@ provided by the Addon framework. // plugins/your-plugin/src/addons/MakeAllImagesCatGifs.tsx import React, { useEffect } from 'react'; -import { useShadowRootElements } from '@backstage/plugin-techdocs-react/alpha'; +import { useShadowRootElements } from '@backstage/plugin-techdocs-react'; // This is a normal react component; in order to make it an Addon, you would // still create and provide it via your plugin as described above. The only diff --git a/docs/features/techdocs/cli.md b/docs/features/techdocs/cli.md index 87eb67d04a..9704b9b21b 100644 --- a/docs/features/techdocs/cli.md +++ b/docs/features/techdocs/cli.md @@ -95,6 +95,7 @@ Options: --preview-app-bundle-path Preview documentation using a web app other than the included one. --preview-app-port Port where the preview will be served. Can only be used with "--preview-app-bundle-path". (default: "3000") + -c, --mkdocs-config-file-name Yaml file to use as config by mkdocs. -v --verbose Enable verbose output. (default: false) -h, --help display help for command ``` diff --git a/docs/local-dev/cli-build-system.md b/docs/local-dev/cli-build-system.md index 06aec945b9..61e24863fe 100644 --- a/docs/local-dev/cli-build-system.md +++ b/docs/local-dev/cli-build-system.md @@ -484,30 +484,29 @@ of the build system, including the bundling, tests, builds, and type checking. Loaders are always selected based on the file extension. The following is a list of all supported file extensions: -| Extension | Exports | Purpose | -| ----------- | --------------- | -------------------------------------------------------------------------------------- | -| `.ts` | Script Module | TypeScript | -| `.tsx` | Script Module | TypeScript and XML | -| `.js` | Script Module | JavaScript | -| `.jsx` | Script Module | JavaScript and XML | -| `.mjs` | Script Module | ECMAScript Module | -| `.cjs` | Script Module | CommonJS Module | -| `.json` | JSON Data | JSON Data | -| `.yml` | JSON Data | YAML Data | -| `.yaml` | JSON Data | YAML Data | -| `.css` | classes | Style sheet | -| `.eot` | URL Path | Font | -| `.ttf` | URL Path | Font | -| `.woff2` | URL Path | Font | -| `.woff` | URL Path | Font | -| `.bmp` | URL Path | Image | -| `.gif` | URL Path | Image | -| `.jpeg` | URL Path | Image | -| `.jpg` | URL Path | Image | -| `.png` | URL Path | Image | -| `.svg` | URL Path | Image | -| `.md` | URL Path | Markdown File | -| `.icon.svg` | React Component | SVG converted into a [Material UI SvgIcon](https://mui.com/material-ui/icons/#svgicon) | +| Extension | Exports | Purpose | +| --------- | ------------- | ------------------ | +| `.ts` | Script Module | TypeScript | +| `.tsx` | Script Module | TypeScript and XML | +| `.js` | Script Module | JavaScript | +| `.jsx` | Script Module | JavaScript and XML | +| `.mjs` | Script Module | ECMAScript Module | +| `.cjs` | Script Module | CommonJS Module | +| `.json` | JSON Data | JSON Data | +| `.yml` | JSON Data | YAML Data | +| `.yaml` | JSON Data | YAML Data | +| `.css` | classes | Style sheet | +| `.eot` | URL Path | Font | +| `.ttf` | URL Path | Font | +| `.woff2` | URL Path | Font | +| `.woff` | URL Path | Font | +| `.bmp` | URL Path | Image | +| `.gif` | URL Path | Image | +| `.jpeg` | URL Path | Image | +| `.jpg` | URL Path | Image | +| `.png` | URL Path | Image | +| `.svg` | URL Path | Image | +| `.md` | URL Path | Markdown File | ## Jest Configuration diff --git a/docs/plugins/create-a-plugin.md b/docs/plugins/create-a-plugin.md index cbd789c757..481b610e4e 100644 --- a/docs/plugins/create-a-plugin.md +++ b/docs/plugins/create-a-plugin.md @@ -8,7 +8,7 @@ A Backstage Plugin adds functionality to Backstage. ## Create a Plugin -To create a new plugin, make sure you've run `yarn install` and installed +To create a new frontend plugin, make sure you've run `yarn install` and installed dependencies, then run the following on your command line (a shortcut to invoking the [`backstage-cli new --select plugin`](../local-dev/cli-commands.md#new)) @@ -18,7 +18,7 @@ from the root of your project. yarn new --select plugin ``` -![](../assets/getting-started/create-plugin_output.png) +![Example of output when creating a new plugin](../assets/getting-started/create-plugin_output.png) This will create a new Backstage Plugin based on the ID that was provided. It will be built and added to the Backstage App automatically. @@ -27,7 +27,7 @@ will be built and added to the Backstage App automatically. > should be able to see the default page for your new plugin directly by > navigating to `http://localhost:3000/my-plugin`. -![](../assets/my-plugin_screenshot.png) +![Example of new plugin running in browser](../assets/plugins/my-plugin_screenshot.png) You can also serve the plugin in isolation by running `yarn start` in the plugin directory. Or by using the yarn workspace command, for example: @@ -39,3 +39,11 @@ yarn workspace @backstage/plugin-my-plugin start # Also supports --check 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 plugin's `dev/` directory. + +### Other Plugin Library Package Types + +There are other plugin library package types that you can chose from. To be able to +select the type when you create a new plugin just run: `yarn new`. You'll then be asked +what type of plugin you wish to create like this: + +![List of available plugin types to pick from](../assets/plugins/create-plugin_types.png) diff --git a/docs/plugins/index.md b/docs/plugins/index.md index a582556311..755c1b8a7d 100644 --- a/docs/plugins/index.md +++ b/docs/plugins/index.md @@ -12,7 +12,7 @@ development tool as a plugin in Backstage. By following strong [design guidelines](../dls/design.md) we ensure the overall user experience stays consistent between plugins. -![plugin](../assets/my-plugin_screenshot.png) +![plugin](../assets/plugins/my-plugin_screenshot.png) ## Creating a plugin diff --git a/docs/plugins/testing.md b/docs/plugins/testing.md index 2fa086c444..3a7da2d410 100644 --- a/docs/plugins/testing.md +++ b/docs/plugins/testing.md @@ -18,11 +18,11 @@ Running all tests: yarn test -Running an individual test (e.g. `MyComponent.test.js`): +Running an individual test (e.g. `MyComponent.test.tsx`): yarn test MyComponent -To run both `MyComponent.test.js` and `MyControl.test.js` suite of tests: +To run both `MyComponent.test.tsx` and `MyControl.test.tsx` suite of tests: yarn test MyCo @@ -32,9 +32,9 @@ working on. ## Naming Test Files -Tests should be named `[filename].test.js`. +Tests should be named `[filename].test.ts`, or `[filename].test.tsx` if it contains JSX (as is the case for a lot of React tests, e.g. components). -For example, the tests for **`Link.js`** exist in the file **`Link.test.js`**. +For example, the tests for **`Link.tsx`** exist in the file **`Link.test.tsx`**. ## Third-Party Dependencies @@ -183,9 +183,9 @@ data then it actually does it. this way both tests fail if the data loading part breaks and the next developer immediately know the problem is that the data loading is broken, not that the loading indicator is broken. -# Examples +## Examples -## Utility Functions +### Utility Functions A utility function is a function with no side effects. It takes in arguments and returns a result or displays an error or console message, like so: @@ -241,12 +241,12 @@ it('Works with midCharIx', () => { }); ``` -## Non-React Classes +### Non-React Classes Testing a JavaScript object which is _not_ a React component follows a lot of the same principles as testing objects in other languages. -### API Testing Principles +#### API Testing Principles Testing an API involves verifying four things: @@ -255,7 +255,7 @@ Testing an API involves verifying four things: 3. Server response is translated into an expected JavaScript object. 4. Server errors are handled gracefully. -### Mocking API Calls +#### Mocking API Calls [Mocking in Jest](https://facebook.github.io/jest/docs/en/mock-functions.html) involves wrapping existing functions (like an API call function) with an @@ -263,52 +263,46 @@ alternative. For example: -**`./MyApi.js`** +**`./MyApi.ts`** ```ts -export { - fetchSomethingFromServer: () => { - // Live production call to a URI. Must be avoided during testing! - return fetch('blah'); - } -}; -``` - -**`./__mocks__/MyApi.js`** - -```ts -export { - fetchSomethingFromServer: () => { - // Simulate a production call, but avoid jest and just use a promise - return Promise.resolve('some result object simulating server data here'); - } +export async function fetchSomethingFromServer() { + // Live production call to a URI. Must be avoided during testing! + return fetch('blah'); } ``` -**`./MyApi.test.js`** +**`./__mocks__/MyApi.ts`** ```ts -/* eslint-disable import/first */ +export async function fetchSomethingFromServer() { + // Simulate a production call response + return 'some result object simulating server data here'; +} +``` -jest.mock('./MyApi'); // Instruct Jest to swap all future imports of './MyApi.js' to './__mocks__/MyApi.js' +**`./MyApi.test.ts`** -import MyApi from './MyApi'; // Will actually return the contents of the file in the __mocks__ folder now +```ts +// This import will actually return the contents of the file in the +// __mocks__ folder now, due to the jest.mock line below +import { fetchSomethingFromServer } from './MyApi'; -it('loads data', done => { - MyApi.fetchSomethingFromServer().then(result => { - expect(result).toBe('some result object simulating server data here'); - done(); - }); +// This instructs Jest to swap all imports of './MyApi.ts' to +// './__mocks__/MyApi.ts' - this gets automatically hoisted to the top +// of the file +jest.mock('./MyApi'); + +it('loads data', async () => { + await expect(fetchSomethingFromServer()).resolves.toBe( + 'some result object simulating server data here', + ); }); ``` -Note: make sure you disable the eslint `'import/first'` rule at the top of the -file since technically you are not allowed by the default settings to have an -import after the `jest.mock` call. +### React Components -## React Components - -### Working with the React Lifecycle +#### Working with the React Lifecycle The [React lifecycle](https://reactjs.org/docs/state-and-lifecycle.html) is asynchronous. @@ -317,7 +311,7 @@ When you call `setState` or update the `props` of a component, there are several asynchronous stages that must occur before a rerender. Note the following example: -```jsx +```tsx class MyComponent extends Component { load() { this.setState({loading: true}); @@ -350,7 +344,7 @@ For more information: - [React lifecycle](https://reactjs.org/docs/state-and-lifecycle.html) -### Accessing `store`, `theme`, routing, browser history, etc. +#### Accessing `store`, `theme`, routing, browser history, etc The Backstage application has several core providers at its root. To run your test wrapped in a "sample" Backstage application, you can use our utility @@ -369,6 +363,6 @@ functions: Note: wrapping in the test application **requires** you to do a `find()` or `dive()` since the wrapped component is now the application. -# Debugging Jest Tests +## Debugging Jest Tests You can find it [here](https://backstage.io/docs/local-dev/cli-build-system#debugging-jest-tests) diff --git a/docs/releases/v1.19.0-next.2-changelog.md b/docs/releases/v1.19.0-next.2-changelog.md new file mode 100644 index 0000000000..3ac5fcfb48 --- /dev/null +++ b/docs/releases/v1.19.0-next.2-changelog.md @@ -0,0 +1,3142 @@ +# Release v1.19.0-next.2 + +## @backstage/cli@0.23.0-next.2 + +### Minor Changes + +- 8defbd5434: Update typescript-eslint to 6.7.x, adding compatibility with TypeScript 5.2. + + This includes a major update on typescript-eslint, you can see the details in the [release notes](https://typescript-eslint.io/blog/announcing-typescript-eslint-v6/). + +### Patch Changes + +- 2ef6522552: Support for the `.icon.svg` extension has been deprecated and will be removed in the future. The implementation of this extension is too tied to a particular version of MUI and the SVGO, and it makes it harder to evolve the build system. We may introduce the ability to reintroduce this kind of functionality in the future through configuration for use in internal plugins, but for now we're forced to remove it. + + To migrate existing code, rename the `.icon.svg` file to `.tsx` and replace the `` element with `` from MUI and add necessary imports. For example: + + ```tsx + import React from 'react'; + import SvgIcon from '@material-ui/core/SvgIcon'; + import { IconComponent } from '@backstage/core-plugin-api'; + + export const CodeSceneIcon = (props: SvgIconProps) => ( + + + + + + ); + ``` + +- Updated dependencies + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/config-loader@1.5.1-next.1 + - @backstage/integration@1.7.1-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/cli-common@0.1.13-next.0 + - @backstage/cli-node@0.1.5-next.1 + - @backstage/config@1.1.1-next.0 + - @backstage/eslint-plugin@0.1.3 + - @backstage/release-manifests@0.0.10 + - @backstage/types@1.1.1 + +## @backstage/core-app-api@1.11.0-next.2 + +### Minor Changes + +- c9d9bfeca2: URL encode some well known unsafe characters in `RouteResolver` (and therefore `useRouteRef`) + +### Patch Changes + +- acca17e91a: Wrap entire app in ``, enabling support for using translations outside plugins. +- Updated dependencies + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.5 + +## @backstage/frontend-app-api@0.2.0-next.2 + +### Minor Changes + +- 4461d87d5a: Removed support for the new `useRouteRef`. + +### Patch Changes + +- 5072824817: Implement `toString()` and `toJSON()` for extension instances. +- 06432f900c: Updates for `at` -> `attachTo` refactor. +- 1718ec75b7: Added support for the existing routing system. +- Updated dependencies + - @backstage/frontend-plugin-api@0.2.0-next.2 + - @backstage/core-app-api@1.11.0-next.2 + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/plugin-graphiql@0.2.55-next.2 + - @backstage/theme@0.4.3-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.5 + +## @backstage/frontend-plugin-api@0.2.0-next.2 + +### Minor Changes + +- 06432f900c: Extension attachment point is now configured via `attachTo: { id, input }` instead of `at: 'id/input'`. +- 4461d87d5a: Removed support for the new `useRouteRef`. + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/types@1.1.1 + +## @techdocs/cli@1.6.0-next.2 + +### Minor Changes + +- d06b30b050: Add possibility to use a mkdocs config file with a different name than `mkdocs. with the serve command using the `--mkdocs-config-file-name\` argument + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-techdocs-node@1.9.0-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/cli-common@0.1.13-next.0 + - @backstage/config@1.1.1-next.0 + +## @backstage/plugin-auth-backend-module-gcp-iap-provider@0.2.0-next.2 + +### Minor Changes + +- 6f142d5356: **BREAKING** `gcpIapAuthenticator.initialize()` is no longer `async` + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.4.0-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/types@1.1.1 + +## @backstage/plugin-auth-backend-module-microsoft-provider@0.1.0-next.0 + +### Minor Changes + +- 2d8f7e82c1: Migrated the Microsoft auth provider to new `@backstage/plugin-auth-backend-module-microsoft-provider` module package. + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-auth-node@0.4.0-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + +## @backstage/plugin-auth-node@0.4.0-next.2 + +### Minor Changes + +- 6f142d5356: **BREAKING**: The recently introduced `ProxyAuthenticator.initialize()` method is no longer `async` to match the way the OAuth equivalent is implemented. + +### Patch Changes + +- 8b8b1d23ae: Fixed cookie persisted scope not returned in OAuth refresh handler response. +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/catalog-client@1.4.5-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + +## @backstage/plugin-catalog-backend-module-github-org@0.1.0-next.0 + +### Minor Changes + +- c101e683d5: Added `catalogModuleGithubOrgEntityProvider` to ingest users and teams from multiple Github organizations. + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-catalog-backend-module-github@0.4.4-next.2 + - @backstage/backend-tasks@0.5.11-next.2 + - @backstage/plugin-catalog-node@1.4.7-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 + +## @backstage/plugin-kubernetes-node@0.1.0-next.0 + +### Minor Changes + +- cbb0e3c3f4: A new plugin has been introduced to house the extension points for Kubernetes backend plugin; at the moment only the `KubernetesObjectsProviderExtensionPoint` is present. The `kubernetes-backend` plugin was modified to use this new extension point. + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-kubernetes-common@0.7.0-next.1 + - @backstage/backend-plugin-api@0.6.6-next.2 + +## @backstage/plugin-newrelic-dashboard@0.3.0-next.2 + +### Minor Changes + +- d7eba6cab4: Changes in `newrelic-dashboard` plugin: + + - Make DashboardSnapshotList component public + - Settle discrepancies in the exported API + - Deprecate DashboardSnapshotComponent + +### Patch Changes + +- 5194a51a1c: Fixed React Warning: "Each child in a list should have a unique 'key' prop" during the rendering of `EntityNewRelicDashboardCard` +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/errors@1.2.3-next.0 + +## @backstage/plugin-scaffolder-backend@1.18.0-next.2 + +### Minor Changes + +- dea0aafda7: Updated `publish:gitlab` action properties to support additional Gitlab project settings: + + - general project settings provided by gitlab project create API (new `settings` property) + - branch level settings to create additional branches and make them protected (new `branches` property) + - project level environment variables settings (new `projectVariables` property) + + Marked existed properties `repoVisibility` and `topics` as deprecated, as they are covered by `settings` property. + +### Patch Changes + +- 7dd82cc07e: Add examples for `github:issues:label` scaffolder action & improve related tests +- 733ddf7130: Add examples for `publish:Azure` scaffolder action. +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-auth-node@0.4.0-next.2 + - @backstage/plugin-catalog-backend@1.14.0-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/integration@1.7.1-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-tasks@0.5.11-next.2 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.3-next.2 + - @backstage/plugin-catalog-node@1.4.7-next.2 + - @backstage/plugin-permission-node@0.7.17-next.2 + - @backstage/plugin-scaffolder-node@0.2.6-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/catalog-client@1.4.5-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.0.17-next.0 + - @backstage/plugin-permission-common@0.7.9-next.0 + - @backstage/plugin-scaffolder-common@1.4.2-next.0 + +## @backstage/plugin-techdocs-backend@1.8.0-next.2 + +### Minor Changes + +- 344cfbcfbc: Allow prepared directory clean up for custom preparers + + When using custom preparer for TechDocs, the `preparedDir` might + end up taking disk space. This requires all custom preparers to + implement a new method `shouldCleanPreparedDirectory` which indicates + whether the prepared directory should be cleaned after generation. + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-techdocs-node@1.9.0-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/integration@1.7.1-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/plugin-search-backend-module-techdocs@0.1.10-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/catalog-client@1.4.5-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-catalog-common@1.0.17-next.0 + - @backstage/plugin-permission-common@0.7.9-next.0 + - @backstage/plugin-search-common@1.2.7-next.0 + +## @backstage/plugin-techdocs-node@1.9.0-next.2 + +### Minor Changes + +- 344cfbcfbc: Allow prepared directory clean up for custom preparers + + When using custom preparer for TechDocs, the `preparedDir` might + end up taking disk space. This requires all custom preparers to + implement a new method `shouldCleanPreparedDirectory` which indicates + whether the prepared directory should be cleaned after generation. + +- d06b30b050: Add possibility to use a mkdocs config file with a different name than `mkdocs. with the serve command using the `--mkdocs-config-file-name\` argument + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/integration@1.7.1-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/integration-aws-node@0.1.7-next.0 + - @backstage/plugin-search-common@1.2.7-next.0 + +## @backstage/app-defaults@1.4.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-app-api@1.11.0-next.2 + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/theme@0.4.3-next.0 + - @backstage/plugin-permission-react@0.4.16-next.1 + +## @backstage/backend-app-api@0.5.6-next.2 + +### Patch Changes + +- 74491c9602: Moved `HostDiscovery` from `@backstage/backend-common`. +- a4617c422a: Added `watch` option to configuration loaders that can be used to disable file watching by setting it to `false`. +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-auth-node@0.4.0-next.2 + - @backstage/config-loader@1.5.1-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-tasks@0.5.11-next.2 + - @backstage/plugin-permission-node@0.7.17-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/cli-common@0.1.13-next.0 + - @backstage/cli-node@0.1.5-next.1 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + +## @backstage/backend-common@0.19.8-next.2 + +### Patch Changes + +- 74491c9602: The `HostDiscovery` export has been deprecated, import it from `@backstage/backend-app-api` instead. +- b95d66d4ea: Properly close write stream when writing temporary archive for processing zip-based `.readTree()` responses. +- 0b55f773a7: Removed some unused dependencies +- 4c39e38f1e: Added `/testUtils` entry point, with a utility for mocking resolve package paths as returned by `resolvePackagePath`. +- a250ad775f: Removed `mock-fs` dev dependency. +- Updated dependencies + - @backstage/config-loader@1.5.1-next.1 + - @backstage/integration@1.7.1-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-app-api@0.5.6-next.2 + - @backstage/backend-dev-utils@0.1.2-next.0 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/cli-common@0.1.13-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/integration-aws-node@0.1.7-next.0 + - @backstage/types@1.1.1 + +## @backstage/backend-defaults@0.2.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/backend-app-api@0.5.6-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + +## @backstage/backend-openapi-utils@0.0.5-next.0 + +### Patch Changes + +- 7c83975531: Adds new public utility types for common OpenAPI values, like request and response shapes and parameters available on an endpoint. + + **deprecated** `internal` namespace + The internal namespace will continue to be exported but now uses OpenAPI format for path parameters. You should use the new utility types. + +- Updated dependencies + - @backstage/errors@1.2.3-next.0 + +## @backstage/backend-plugin-api@0.6.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.4.0-next.2 + - @backstage/backend-tasks@0.5.11-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-permission-common@0.7.9-next.0 + +## @backstage/backend-tasks@0.5.11-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + +## @backstage/backend-test-utils@0.2.7-next.2 + +### Patch Changes + +- a250ad775f: Added `createMockDirectory()` to help out with file system mocking in tests. +- 74491c9602: Updated to import `HostDiscovery` from `@backstage/backend-app-api`. +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-auth-node@0.4.0-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-app-api@0.5.6-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + +## @backstage/catalog-client@1.4.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/errors@1.2.3-next.0 + +## @backstage/catalog-model@1.4.3-next.0 + +### Patch Changes + +- 0b55f773a7: Removed some unused dependencies +- Updated dependencies + - @backstage/errors@1.2.3-next.0 + - @backstage/types@1.1.1 + +## @backstage/cli-node@0.1.5-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.3-next.0 + - @backstage/cli-common@0.1.13-next.0 + - @backstage/types@1.1.1 + +## @backstage/config@1.1.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.3-next.0 + - @backstage/types@1.1.1 + +## @backstage/config-loader@1.5.1-next.1 + +### Patch Changes + +- 0b55f773a7: Removed some unused dependencies +- 30c553c1d2: Updated dependency `typescript-json-schema` to `^0.61.0`. +- a4617c422a: Added `watch` option to configuration loaders that can be used to disable file watching by setting it to `false`. +- Updated dependencies + - @backstage/errors@1.2.3-next.0 + - @backstage/cli-common@0.1.13-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + +## @backstage/core-components@0.13.6-next.2 + +### Patch Changes + +- 0b55f773a7: Removed some unused dependencies +- 8a15360bb4: Fixed overflowing messages in `WarningPanel`. +- Updated dependencies + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/theme@0.4.3-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/version-bridge@1.0.5 + +## @backstage/core-plugin-api@1.7.0-next.1 + +### Patch Changes + +- 0b55f773a7: Removed some unused dependencies +- Updated dependencies + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.5 + +## @backstage/create-app@0.5.6-next.2 + +### Patch Changes + +- Bumped create-app version. +- Updated dependencies + - @backstage/cli-common@0.1.13-next.0 + +## @backstage/dev-utils@1.0.22-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-app-api@1.11.0-next.2 + - @backstage/integration-react@1.1.20-next.2 + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/theme@0.4.3-next.0 + - @backstage/app-defaults@1.4.4-next.2 + - @backstage/test-utils@1.4.4-next.2 + +## @backstage/errors@1.2.3-next.0 + +### Patch Changes + +- 0b55f773a7: Removed some unused dependencies +- Updated dependencies + - @backstage/types@1.1.1 + +## @backstage/integration@1.7.1-next.1 + +### Patch Changes + +- 0b55f773a7: Removed some unused dependencies +- Updated dependencies + - @backstage/config@1.1.1-next.0 + +## @backstage/integration-aws-node@0.1.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.3-next.0 + - @backstage/config@1.1.1-next.0 + +## @backstage/integration-react@1.1.20-next.2 + +### Patch Changes + +- 0b55f773a7: Removed some unused dependencies +- Updated dependencies + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/integration@1.7.1-next.1 + - @backstage/config@1.1.1-next.0 + +## @backstage/repo-tools@0.3.5-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/errors@1.2.3-next.0 + - @backstage/cli-common@0.1.13-next.0 + - @backstage/cli-node@0.1.5-next.1 + +## @backstage/test-utils@1.4.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-app-api@1.11.0-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/theme@0.4.3-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-permission-common@0.7.9-next.0 + - @backstage/plugin-permission-react@0.4.16-next.1 + +## @backstage/theme@0.4.3-next.0 + +### Patch Changes + +- 5ad5344756: Added support for string `fontSize` values (e.g. `"2.5rem"`) in themes in addition to numbers. Also added an optional `fontFamily` prop for header typography variants to allow further customization. + +## @backstage/plugin-adr@0.6.8-next.2 + +### Patch Changes + +- 499e34656e: Fix icon alignment in `AdrSearchResultListItem` +- Updated dependencies + - @backstage/frontend-plugin-api@0.2.0-next.2 + - @backstage/integration-react@1.1.20-next.2 + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/plugin-search-react@1.7.1-next.2 + - @backstage/theme@0.4.3-next.0 + - @backstage/plugin-adr-common@0.2.16-next.1 + - @backstage/plugin-search-common@1.2.7-next.0 + +## @backstage/plugin-adr-backend@0.4.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/integration@1.7.1-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/catalog-client@1.4.5-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-adr-common@0.2.16-next.1 + - @backstage/plugin-search-common@1.2.7-next.0 + +## @backstage/plugin-adr-common@0.2.16-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/integration@1.7.1-next.1 + - @backstage/plugin-search-common@1.2.7-next.0 + +## @backstage/plugin-airbrake@0.3.25-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/theme@0.4.3-next.0 + - @backstage/dev-utils@1.0.22-next.2 + - @backstage/test-utils@1.4.4-next.2 + +## @backstage/plugin-airbrake-backend@0.3.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 + +## @backstage/plugin-allure@0.1.41-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/theme@0.4.3-next.0 + +## @backstage/plugin-analytics-module-ga@0.1.34-next.2 + +### Patch Changes + +- 0b55f773a7: Removed some unused dependencies +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/theme@0.4.3-next.0 + - @backstage/config@1.1.1-next.0 + +## @backstage/plugin-analytics-module-ga4@0.1.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/theme@0.4.3-next.0 + - @backstage/config@1.1.1-next.0 + +## @backstage/plugin-analytics-module-newrelic-browser@0.0.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/config@1.1.1-next.0 + +## @backstage/plugin-apache-airflow@0.2.16-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + +## @backstage/plugin-api-docs@0.9.12-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/plugin-catalog@1.14.0-next.2 + - @backstage/theme@0.4.3-next.0 + +## @backstage/plugin-apollo-explorer@0.1.16-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/theme@0.4.3-next.0 + +## @backstage/plugin-app-backend@0.3.54-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/config-loader@1.5.1-next.1 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-app-node@0.1.6-next.2 + +## @backstage/plugin-app-node@0.1.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.6.6-next.2 + +## @backstage/plugin-auth-backend@0.19.3-next.2 + +### Patch Changes + +- 2d8f7e82c1: Migrated the Microsoft auth provider to new `@backstage/plugin-auth-backend-module-microsoft-provider` module package. +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-auth-node@0.4.0-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/errors@1.2.3-next.0 + - @backstage/plugin-auth-backend-module-gcp-iap-provider@0.2.0-next.2 + - @backstage/plugin-auth-backend-module-microsoft-provider@0.1.0-next.0 + - @backstage/plugin-auth-backend-module-github-provider@0.1.3-next.2 + - @backstage/plugin-auth-backend-module-gitlab-provider@0.1.3-next.2 + - @backstage/plugin-auth-backend-module-oauth2-provider@0.1.3-next.2 + - @backstage/plugin-catalog-node@1.4.7-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/catalog-client@1.4.5-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-auth-backend-module-google-provider@0.1.3-next.2 + +## @backstage/plugin-auth-backend-module-github-provider@0.1.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-auth-node@0.4.0-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + +## @backstage/plugin-auth-backend-module-gitlab-provider@0.1.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-auth-node@0.4.0-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + +## @backstage/plugin-auth-backend-module-google-provider@0.1.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.4.0-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + +## @backstage/plugin-auth-backend-module-oauth2-provider@0.1.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-auth-node@0.4.0-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + +## @backstage/plugin-azure-devops@0.3.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/theme@0.4.3-next.0 + - @backstage/plugin-azure-devops-common@0.3.1 + +## @backstage/plugin-azure-devops-backend@0.4.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-azure-devops-common@0.3.1 + +## @backstage/plugin-azure-sites@0.1.14-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/theme@0.4.3-next.0 + - @backstage/plugin-azure-sites-common@0.1.1 + +## @backstage/plugin-azure-sites-backend@0.1.16-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-azure-sites-common@0.1.1 + +## @backstage/plugin-badges@0.2.49-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/theme@0.4.3-next.0 + +## @backstage/plugin-badges-backend@0.3.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-auth-node@0.4.0-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/catalog-client@1.4.5-next.0 + - @backstage/config@1.1.1-next.0 + +## @backstage/plugin-bazaar@0.2.17-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/cli@0.23.0-next.2 + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/plugin-catalog@1.14.0-next.2 + - @backstage/theme@0.4.3-next.0 + - @backstage/catalog-client@1.4.5-next.0 + +## @backstage/plugin-bazaar-backend@0.3.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-auth-node@0.4.0-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 + +## @backstage/plugin-bitbucket-cloud-common@0.2.13-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.7.1-next.1 + +## @backstage/plugin-bitrise@0.1.52-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/theme@0.4.3-next.0 + +## @backstage/plugin-catalog@1.14.0-next.2 + +### Patch Changes + +- 0b55f773a7: Removed some unused dependencies +- Updated dependencies + - @backstage/frontend-plugin-api@0.2.0-next.2 + - @backstage/integration-react@1.1.20-next.2 + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/plugin-search-react@1.7.1-next.2 + - @backstage/theme@0.4.3-next.0 + - @backstage/catalog-client@1.4.5-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.0.17-next.0 + - @backstage/plugin-scaffolder-common@1.4.2-next.0 + - @backstage/plugin-search-common@1.2.7-next.0 + +## @backstage/plugin-catalog-backend@1.14.0-next.2 + +### Patch Changes + +- 0b55f773a7: Removed some unused dependencies +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-auth-node@0.4.0-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/integration@1.7.1-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-openapi-utils@0.0.5-next.0 + - @backstage/backend-tasks@0.5.11-next.2 + - @backstage/plugin-catalog-node@1.4.7-next.2 + - @backstage/plugin-permission-node@0.7.17-next.2 + - @backstage/plugin-search-backend-module-catalog@0.1.10-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/catalog-client@1.4.5-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.0.17-next.0 + - @backstage/plugin-events-node@0.2.15-next.2 + - @backstage/plugin-permission-common@0.7.9-next.0 + +## @backstage/plugin-catalog-backend-module-aws@0.2.9-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/integration@1.7.1-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/plugin-kubernetes-common@0.7.0-next.1 + - @backstage/backend-tasks@0.5.11-next.2 + - @backstage/plugin-catalog-node@1.4.7-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/integration-aws-node@0.1.7-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.0.17-next.0 + +## @backstage/plugin-catalog-backend-module-azure@0.1.25-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/integration@1.7.1-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-tasks@0.5.11-next.2 + - @backstage/plugin-catalog-node@1.4.7-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.0.17-next.0 + +## @backstage/plugin-catalog-backend-module-bitbucket@0.2.21-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/integration@1.7.1-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/plugin-catalog-node@1.4.7-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-bitbucket-cloud-common@0.2.13-next.1 + +## @backstage/plugin-catalog-backend-module-bitbucket-cloud@0.1.21-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/integration@1.7.1-next.1 + - @backstage/backend-tasks@0.5.11-next.2 + - @backstage/plugin-catalog-node@1.4.7-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/catalog-client@1.4.5-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-bitbucket-cloud-common@0.2.13-next.1 + - @backstage/plugin-catalog-common@1.0.17-next.0 + - @backstage/plugin-events-node@0.2.15-next.2 + +## @backstage/plugin-catalog-backend-module-bitbucket-server@0.1.19-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/integration@1.7.1-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-tasks@0.5.11-next.2 + - @backstage/plugin-catalog-node@1.4.7-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 + +## @backstage/plugin-catalog-backend-module-gcp@0.1.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-kubernetes-common@0.7.0-next.1 + - @backstage/backend-tasks@0.5.11-next.2 + - @backstage/plugin-catalog-node@1.4.7-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 + +## @backstage/plugin-catalog-backend-module-gerrit@0.1.22-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/integration@1.7.1-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-tasks@0.5.11-next.2 + - @backstage/plugin-catalog-node@1.4.7-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 + +## @backstage/plugin-catalog-backend-module-github@0.4.4-next.2 + +### Patch Changes + +- 0b55f773a7: Removed some unused dependencies +- c101e683d5: Removed `catalogModuleGithubOrgEntityProvider`. Import from `@backstage/plugin-catalog-backend-module-github-org` instead. +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-catalog-backend@1.14.0-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/integration@1.7.1-next.1 + - @backstage/backend-tasks@0.5.11-next.2 + - @backstage/plugin-catalog-node@1.4.7-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/catalog-client@1.4.5-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-catalog-common@1.0.17-next.0 + - @backstage/plugin-events-node@0.2.15-next.2 + +## @backstage/plugin-catalog-backend-module-gitlab@0.3.3-next.2 + +### Patch Changes + +- 4f70fdfc93: fix: use REST API to get root group memberships for GitLab SaaS users listing + + This API is the only one that shows `email` field for enterprise users and + allows to filter out bot users not using a license using the `is_using_seat` + field. + + We also added the annotation `gitlab.com/saml-external-uid` taking the value + of `group_saml_identity.extern_uid` of the `groups/:group-id/members` endpoint + response. This is useful in case you want to create a `SignInResolver` that + references the user with the id of your identity provider (e.g. OneLogin). + + ref: + + + + +- 0b55f773a7: Removed some unused dependencies + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/integration@1.7.1-next.1 + - @backstage/backend-tasks@0.5.11-next.2 + - @backstage/plugin-catalog-node@1.4.7-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 + +## @backstage/plugin-catalog-backend-module-incremental-ingestion@0.4.10-next.2 + +### Patch Changes + +- 0b55f773a7: Removed some unused dependencies +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-catalog-backend@1.14.0-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-tasks@0.5.11-next.2 + - @backstage/plugin-catalog-node@1.4.7-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-events-node@0.2.15-next.2 + - @backstage/plugin-permission-common@0.7.9-next.0 + +## @backstage/plugin-catalog-backend-module-ldap@0.5.21-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-tasks@0.5.11-next.2 + - @backstage/plugin-catalog-node@1.4.7-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.0.17-next.0 + +## @backstage/plugin-catalog-backend-module-msgraph@0.5.13-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/backend-tasks@0.5.11-next.2 + - @backstage/plugin-catalog-node@1.4.7-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-catalog-common@1.0.17-next.0 + +## @backstage/plugin-catalog-backend-module-openapi@0.1.23-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-catalog-backend@1.14.0-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/integration@1.7.1-next.1 + - @backstage/plugin-catalog-node@1.4.7-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.0.17-next.0 + +## @backstage/plugin-catalog-backend-module-puppetdb@0.1.11-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-tasks@0.5.11-next.2 + - @backstage/plugin-catalog-node@1.4.7-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + +## @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-node@1.4.7-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/plugin-catalog-common@1.0.17-next.0 + - @backstage/plugin-scaffolder-common@1.4.2-next.0 + +## @backstage/plugin-catalog-backend-module-unprocessed@0.3.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.4.0-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/backend-plugin-api@0.6.6-next.2 + +## @backstage/plugin-catalog-common@1.0.17-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-permission-common@0.7.9-next.0 + - @backstage/plugin-search-common@1.2.7-next.0 + +## @backstage/plugin-catalog-graph@0.2.37-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/theme@0.4.3-next.0 + - @backstage/catalog-client@1.4.5-next.0 + - @backstage/types@1.1.1 + +## @backstage/plugin-catalog-graphql@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 + +## @backstage/plugin-catalog-import@0.10.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/integration-react@1.1.20-next.2 + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/integration@1.7.1-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/catalog-client@1.4.5-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-catalog-common@1.0.17-next.0 + +## @backstage/plugin-catalog-node@1.4.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/catalog-client@1.4.5-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.0.17-next.0 + +## @backstage/plugin-catalog-react@1.8.5-next.2 + +### Patch Changes + +- 0b55f773a7: Removed some unused dependencies +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/integration@1.7.1-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/theme@0.4.3-next.0 + - @backstage/catalog-client@1.4.5-next.0 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.5 + - @backstage/plugin-catalog-common@1.0.17-next.0 + - @backstage/plugin-permission-common@0.7.9-next.0 + - @backstage/plugin-permission-react@0.4.16-next.1 + +## @backstage/plugin-catalog-unprocessed-entities@0.1.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/errors@1.2.3-next.0 + - @backstage/theme@0.4.3-next.0 + +## @backstage/plugin-cicd-statistics@0.1.27-next.2 + +### Patch Changes + +- 0b55f773a7: Removed some unused dependencies +- Updated dependencies + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + +## @backstage/plugin-cicd-statistics-module-gitlab@0.1.21-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/plugin-cicd-statistics@0.1.27-next.2 + - @backstage/catalog-model@1.4.3-next.0 + +## @backstage/plugin-circleci@0.3.25-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/theme@0.4.3-next.0 + +## @backstage/plugin-cloudbuild@0.3.25-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/theme@0.4.3-next.0 + +## @backstage/plugin-code-climate@0.1.25-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/theme@0.4.3-next.0 + +## @backstage/plugin-code-coverage@0.2.18-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/theme@0.4.3-next.0 + - @backstage/config@1.1.1-next.0 + +## @backstage/plugin-code-coverage-backend@0.2.20-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-auth-node@0.4.0-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/integration@1.7.1-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/catalog-client@1.4.5-next.0 + - @backstage/config@1.1.1-next.0 + +## @backstage/plugin-codescene@0.1.18-next.2 + +### Patch Changes + +- 9c9a9100b0: Internal refactor to avoid using the deprecated `.icon.svg` extension. +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/theme@0.4.3-next.0 + - @backstage/config@1.1.1-next.0 + +## @backstage/plugin-config-schema@0.1.46-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/theme@0.4.3-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + +## @backstage/plugin-cost-insights@0.12.14-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/theme@0.4.3-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-cost-insights-common@0.1.2 + +## @backstage/plugin-devtools@0.1.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/theme@0.4.3-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-devtools-common@0.1.5-next.0 + - @backstage/plugin-permission-react@0.4.16-next.1 + +## @backstage/plugin-devtools-backend@0.2.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-auth-node@0.4.0-next.2 + - @backstage/config-loader@1.5.1-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/plugin-permission-node@0.7.17-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/cli-common@0.1.13-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-devtools-common@0.1.5-next.0 + - @backstage/plugin-permission-common@0.7.9-next.0 + +## @backstage/plugin-devtools-common@0.1.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/types@1.1.1 + - @backstage/plugin-permission-common@0.7.9-next.0 + +## @backstage/plugin-dynatrace@7.0.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/theme@0.4.3-next.0 + +## @backstage/plugin-entity-feedback@0.2.8-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/theme@0.4.3-next.0 + - @backstage/plugin-entity-feedback-common@0.1.3 + +## @backstage/plugin-entity-feedback-backend@0.2.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-auth-node@0.4.0-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/catalog-client@1.4.5-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-entity-feedback-common@0.1.3 + +## @backstage/plugin-entity-validation@0.1.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/theme@0.4.3-next.0 + - @backstage/catalog-client@1.4.5-next.0 + - @backstage/plugin-catalog-common@1.0.17-next.0 + +## @backstage/plugin-events-backend@0.2.15-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-events-node@0.2.15-next.2 + +## @backstage/plugin-events-backend-module-aws-sqs@0.2.9-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/backend-tasks@0.5.11-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-events-node@0.2.15-next.2 + +## @backstage/plugin-events-backend-module-azure@0.1.16-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/plugin-events-node@0.2.15-next.2 + +## @backstage/plugin-events-backend-module-bitbucket-cloud@0.1.16-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/plugin-events-node@0.2.15-next.2 + +## @backstage/plugin-events-backend-module-gerrit@0.1.16-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/plugin-events-node@0.2.15-next.2 + +## @backstage/plugin-events-backend-module-github@0.1.16-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-events-node@0.2.15-next.2 + +## @backstage/plugin-events-backend-module-gitlab@0.1.16-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-events-node@0.2.15-next.2 + +## @backstage/plugin-events-backend-test-utils@0.1.16-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.2.15-next.2 + +## @backstage/plugin-events-node@0.2.15-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.6.6-next.2 + +## @backstage/plugin-explore@0.4.11-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.2.0-next.2 + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/plugin-search-react@1.7.1-next.2 + - @backstage/theme@0.4.3-next.0 + - @backstage/plugin-explore-common@0.0.2 + - @backstage/plugin-explore-react@0.0.32-next.1 + - @backstage/plugin-search-common@1.2.7-next.0 + +## @backstage/plugin-explore-backend@0.0.16-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-search-backend-module-explore@0.1.10-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-explore-common@0.0.2 + - @backstage/plugin-search-common@1.2.7-next.0 + +## @backstage/plugin-explore-react@0.0.32-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/plugin-explore-common@0.0.2 + +## @backstage/plugin-firehydrant@0.2.9-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/theme@0.4.3-next.0 + +## @backstage/plugin-fossa@0.2.57-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/theme@0.4.3-next.0 + +## @backstage/plugin-gcalendar@0.3.19-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/theme@0.4.3-next.0 + +## @backstage/plugin-gcp-projects@0.3.42-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/theme@0.4.3-next.0 + +## @backstage/plugin-git-release-manager@0.3.38-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/integration@1.7.1-next.1 + - @backstage/theme@0.4.3-next.0 + +## @backstage/plugin-github-actions@0.6.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/integration-react@1.1.20-next.2 + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/integration@1.7.1-next.1 + - @backstage/theme@0.4.3-next.0 + +## @backstage/plugin-github-deployments@0.1.56-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/integration-react@1.1.20-next.2 + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/integration@1.7.1-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/theme@0.4.3-next.0 + +## @backstage/plugin-github-issues@0.2.14-next.2 + +### Patch Changes + +- 7bd0a8ab3c: Filters out entities that belonged to a different github instance other than the one configured by the plugin +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/integration@1.7.1-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/theme@0.4.3-next.0 + +## @backstage/plugin-github-pull-requests-board@0.1.19-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/integration@1.7.1-next.1 + - @backstage/theme@0.4.3-next.0 + +## @backstage/plugin-gitops-profiles@0.3.41-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/theme@0.4.3-next.0 + - @backstage/config@1.1.1-next.0 + +## @backstage/plugin-gocd@0.1.31-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/theme@0.4.3-next.0 + +## @backstage/plugin-graphiql@0.2.55-next.2 + +### Patch Changes + +- 9c9a9100b0: Internal refactor to avoid using the deprecated `.icon.svg` extension. +- 06432f900c: Updated `/alpha` exports to use new `attachTo` option. +- Updated dependencies + - @backstage/frontend-plugin-api@0.2.0-next.2 + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/theme@0.4.3-next.0 + +## @backstage/plugin-graphql-backend@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 + +## @backstage/plugin-graphql-voyager@0.1.8-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/theme@0.4.3-next.0 + +## @backstage/plugin-home@0.5.9-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-app-api@1.11.0-next.2 + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/theme@0.4.3-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-home-react@0.1.4-next.2 + +## @backstage/plugin-home-react@0.1.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + +## @backstage/plugin-ilert@0.2.14-next.2 + +### Patch Changes + +- 0b55f773a7: Removed some unused dependencies +- 9c9a9100b0: Internal refactor to avoid using the deprecated `.icon.svg` extension. +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/theme@0.4.3-next.0 + +## @backstage/plugin-jenkins@0.8.7-next.2 + +### Patch Changes + +- 1a05cf34f6: Extend EntityJenkinsContent to receive columns as prop +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/theme@0.4.3-next.0 + - @backstage/plugin-jenkins-common@0.1.20-next.0 + +## @backstage/plugin-jenkins-backend@0.2.9-next.2 + +### Patch Changes + +- 930ac236d8: Added support for the [new backend system](https://backstage.io/docs/backend-system/) +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-auth-node@0.4.0-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/errors@1.2.3-next.0 + - @backstage/plugin-catalog-node@1.4.7-next.2 + - @backstage/plugin-permission-node@0.7.17-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/catalog-client@1.4.5-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-jenkins-common@0.1.20-next.0 + - @backstage/plugin-permission-common@0.7.9-next.0 + +## @backstage/plugin-jenkins-common@0.1.20-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-common@1.0.17-next.0 + - @backstage/plugin-permission-common@0.7.9-next.0 + +## @backstage/plugin-kafka@0.3.25-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/theme@0.4.3-next.0 + - @backstage/config@1.1.1-next.0 + +## @backstage/plugin-kafka-backend@0.3.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 + +## @backstage/plugin-kubernetes@0.11.0-next.2 + +### Patch Changes + +- 95518765ee: Add Kubernetes cluster plugin. Viewing Kubernetes clusters as an Admin from Backstage +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/plugin-kubernetes-react@0.1.0-next.1 + - @backstage/theme@0.4.3-next.0 + - @backstage/plugin-kubernetes-common@0.7.0-next.1 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + +## @backstage/plugin-kubernetes-backend@0.12.3-next.2 + +### Patch Changes + +- cbb0e3c3f4: A new plugin has been introduced to house the extension points for Kubernetes backend plugin; at the moment only the `KubernetesObjectsProviderExtensionPoint` is present. The `kubernetes-backend` plugin was modified to use this new extension point. +- 95518765ee: Add Kubernetes cluster plugin. Viewing Kubernetes clusters as an Admin from Backstage +- 5dac12e435: The kubernetes APIs invokes Authentication Strategies when Backstage-Kubernetes-Authorization-X-X headers are provided, this enable the possibility to invoke strategies that executes additional steps to get a kubernetes token like on pinniped or custom strategies +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-auth-node@0.4.0-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/errors@1.2.3-next.0 + - @backstage/plugin-kubernetes-node@0.1.0-next.0 + - @backstage/plugin-kubernetes-common@0.7.0-next.1 + - @backstage/plugin-catalog-node@1.4.7-next.2 + - @backstage/plugin-permission-node@0.7.17-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/catalog-client@1.4.5-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/integration-aws-node@0.1.7-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-permission-common@0.7.9-next.0 + +## @backstage/plugin-kubernetes-cluster@0.0.1-next.0 + +### Patch Changes + +- 95518765ee: Add Kubernetes cluster plugin. Viewing Kubernetes clusters as an Admin from Backstage +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/plugin-kubernetes-react@0.1.0-next.1 + - @backstage/theme@0.4.3-next.0 + - @backstage/plugin-kubernetes-common@0.7.0-next.1 + - @backstage/config@1.1.1-next.0 + +## @backstage/plugin-kubernetes-common@0.7.0-next.1 + +### Patch Changes + +- 5dac12e435: The kubernetes APIs invokes Authentication Strategies when Backstage-Kubernetes-Authorization-X-X headers are provided, this enable the possibility to invoke strategies that executes additional steps to get a kubernetes token like on pinniped or custom strategies +- Updated dependencies + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/errors@1.2.3-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-permission-common@0.7.9-next.0 + +## @backstage/plugin-kubernetes-react@0.1.0-next.1 + +### Patch Changes + +- 95518765ee: Add Kubernetes cluster plugin. Viewing Kubernetes clusters as an Admin from Backstage +- 5dac12e435: The kubernetes APIs invokes Authentication Strategies when Backstage-Kubernetes-Authorization-X-X headers are provided, this enable the possibility to invoke strategies that executes additional steps to get a kubernetes token like on pinniped or custom strategies +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/errors@1.2.3-next.0 + - @backstage/plugin-kubernetes-common@0.7.0-next.1 + - @backstage/types@1.1.1 + +## @backstage/plugin-lighthouse@0.4.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/theme@0.4.3-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-lighthouse-common@0.1.4-next.0 + +## @backstage/plugin-lighthouse-backend@0.3.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/backend-tasks@0.5.11-next.2 + - @backstage/plugin-catalog-node@1.4.7-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/catalog-client@1.4.5-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-lighthouse-common@0.1.4-next.0 + +## @backstage/plugin-lighthouse-common@0.1.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.1.1-next.0 + +## @backstage/plugin-linguist@0.1.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/theme@0.4.3-next.0 + - @backstage/plugin-linguist-common@0.1.2 + +## @backstage/plugin-linguist-backend@0.5.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-auth-node@0.4.0-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-tasks@0.5.11-next.2 + - @backstage/plugin-catalog-node@1.4.7-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/catalog-client@1.4.5-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-linguist-common@0.1.2 + +## @backstage/plugin-microsoft-calendar@0.1.8-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/theme@0.4.3-next.0 + +## @backstage/plugin-newrelic@0.3.41-next.2 + +### Patch Changes + +- ce50a15506: Fixed sorting and searching in the NewRelic table. +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/theme@0.4.3-next.0 + +## @backstage/plugin-nomad@0.1.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/theme@0.4.3-next.0 + - @backstage/config@1.1.1-next.0 + +## @backstage/plugin-nomad-backend@0.1.8-next.2 + +### Patch Changes + +- 6822918c50: Added support for the [new backend system](https://backstage.io/docs/backend-system/) +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 + +## @backstage/plugin-octopus-deploy@0.2.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/theme@0.4.3-next.0 + +## @backstage/plugin-opencost@0.2.1-next.2 + +### Patch Changes + +- 777b9a16a4: Fix for broken image reference. +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/theme@0.4.3-next.0 + +## @backstage/plugin-org@0.6.15-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/theme@0.4.3-next.0 + +## @backstage/plugin-org-react@0.1.14-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/theme@0.4.3-next.0 + - @backstage/catalog-client@1.4.5-next.0 + +## @backstage/plugin-pagerduty@0.6.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/theme@0.4.3-next.0 + - @backstage/plugin-home-react@0.1.4-next.2 + +## @backstage/plugin-periskop@0.1.23-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/theme@0.4.3-next.0 + +## @backstage/plugin-periskop-backend@0.2.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 + +## @backstage/plugin-permission-backend@0.5.29-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-auth-node@0.4.0-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/plugin-permission-node@0.7.17-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-permission-common@0.7.9-next.0 + +## @backstage/plugin-permission-backend-module-allow-all-policy@0.1.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-auth-node@0.4.0-next.2 + - @backstage/plugin-permission-node@0.7.17-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/plugin-permission-common@0.7.9-next.0 + +## @backstage/plugin-permission-common@0.7.9-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.3-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + +## @backstage/plugin-permission-node@0.7.17-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-auth-node@0.4.0-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-permission-common@0.7.9-next.0 + +## @backstage/plugin-permission-react@0.4.16-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-permission-common@0.7.9-next.0 + +## @backstage/plugin-playlist@0.1.17-next.2 + +### Patch Changes + +- 65498193e8: Updated Playlist read me with additional screenshots +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/plugin-search-react@1.7.1-next.2 + - @backstage/theme@0.4.3-next.0 + - @backstage/plugin-catalog-common@1.0.17-next.0 + - @backstage/plugin-permission-common@0.7.9-next.0 + - @backstage/plugin-permission-react@0.4.16-next.1 + - @backstage/plugin-playlist-common@0.1.11-next.0 + +## @backstage/plugin-playlist-backend@0.3.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-auth-node@0.4.0-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/errors@1.2.3-next.0 + - @backstage/plugin-permission-node@0.7.17-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/catalog-client@1.4.5-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-permission-common@0.7.9-next.0 + - @backstage/plugin-playlist-common@0.1.11-next.0 + +## @backstage/plugin-playlist-common@0.1.11-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.7.9-next.0 + +## @backstage/plugin-proxy-backend@0.4.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 + +## @backstage/plugin-puppetdb@0.1.8-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/theme@0.4.3-next.0 + +## @backstage/plugin-rollbar@0.4.25-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/theme@0.4.3-next.0 + +## @backstage/plugin-rollbar-backend@0.1.51-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/config@1.1.1-next.0 + +## @backstage/plugin-scaffolder@1.15.1-next.2 + +### Patch Changes + +- ff2ab02690: Make entity picker more reliable with only one available entity +- 83e4a42ccd: Display log visibility button on the template panel +- 4c70fe497d: `RepoUrlPickerRepoName` now correctly handles value changes in allowed repos. +- Updated dependencies + - @backstage/integration-react@1.1.20-next.2 + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/integration@1.7.1-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/theme@0.4.3-next.0 + - @backstage/catalog-client@1.4.5-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.0.17-next.0 + - @backstage/plugin-permission-react@0.4.16-next.1 + - @backstage/plugin-scaffolder-common@1.4.2-next.0 + - @backstage/plugin-scaffolder-react@1.5.6-next.2 + +## @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/integration@1.7.1-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/plugin-scaffolder-node@0.2.6-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + +## @backstage/plugin-scaffolder-backend-module-cookiecutter@0.2.30-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/integration@1.7.1-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/plugin-scaffolder-node@0.2.6-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + +## @backstage/plugin-scaffolder-backend-module-gitlab@0.2.9-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.7.1-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/plugin-scaffolder-node@0.2.6-next.2 + - @backstage/config@1.1.1-next.0 + +## @backstage/plugin-scaffolder-backend-module-rails@0.4.23-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/integration@1.7.1-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/plugin-scaffolder-node@0.2.6-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + +## @backstage/plugin-scaffolder-backend-module-sentry@0.1.14-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.3-next.0 + - @backstage/plugin-scaffolder-node@0.2.6-next.2 + - @backstage/config@1.1.1-next.0 + +## @backstage/plugin-scaffolder-backend-module-yeoman@0.2.27-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.2.6-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + +## @backstage/plugin-scaffolder-common@1.4.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-permission-common@0.7.9-next.0 + +## @backstage/plugin-scaffolder-node@0.2.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/integration@1.7.1-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/types@1.1.1 + - @backstage/plugin-scaffolder-common@1.4.2-next.0 + +## @backstage/plugin-scaffolder-react@1.5.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/theme@0.4.3-next.0 + - @backstage/catalog-client@1.4.5-next.0 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.5 + - @backstage/plugin-scaffolder-common@1.4.2-next.0 + +## @backstage/plugin-search@1.4.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.2.0-next.2 + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/plugin-search-react@1.7.1-next.2 + - @backstage/theme@0.4.3-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.5 + - @backstage/plugin-search-common@1.2.7-next.0 + +## @backstage/plugin-search-backend@1.4.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-auth-node@0.4.0-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-openapi-utils@0.0.5-next.0 + - @backstage/plugin-permission-node@0.7.17-next.2 + - @backstage/plugin-search-backend-node@1.2.10-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-permission-common@0.7.9-next.0 + - @backstage/plugin-search-common@1.2.7-next.0 + +## @backstage/plugin-search-backend-module-catalog@0.1.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-tasks@0.5.11-next.2 + - @backstage/plugin-catalog-node@1.4.7-next.2 + - @backstage/plugin-search-backend-node@1.2.10-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/catalog-client@1.4.5-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-catalog-common@1.0.17-next.0 + - @backstage/plugin-permission-common@0.7.9-next.0 + - @backstage/plugin-search-common@1.2.7-next.0 + +## @backstage/plugin-search-backend-module-elasticsearch@1.3.9-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-search-backend-node@1.2.10-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/integration-aws-node@0.1.7-next.0 + - @backstage/plugin-search-common@1.2.7-next.0 + +## @backstage/plugin-search-backend-module-explore@0.1.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/backend-tasks@0.5.11-next.2 + - @backstage/plugin-search-backend-node@1.2.10-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-explore-common@0.0.2 + - @backstage/plugin-search-common@1.2.7-next.0 + +## @backstage/plugin-search-backend-module-pg@0.5.15-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-search-backend-node@1.2.10-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-search-common@1.2.7-next.0 + +## @backstage/plugin-search-backend-module-techdocs@0.1.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-techdocs-node@1.9.0-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/backend-tasks@0.5.11-next.2 + - @backstage/plugin-catalog-node@1.4.7-next.2 + - @backstage/plugin-search-backend-node@1.2.10-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/catalog-client@1.4.5-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-catalog-common@1.0.17-next.0 + - @backstage/plugin-permission-common@0.7.9-next.0 + - @backstage/plugin-search-common@1.2.7-next.0 + +## @backstage/plugin-search-backend-node@1.2.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-tasks@0.5.11-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-permission-common@0.7.9-next.0 + - @backstage/plugin-search-common@1.2.7-next.0 + +## @backstage/plugin-search-common@1.2.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/types@1.1.1 + - @backstage/plugin-permission-common@0.7.9-next.0 + +## @backstage/plugin-search-react@1.7.1-next.2 + +### Patch Changes + +- 06432f900c: Updated `/alpha` exports to use new `attachTo` option. +- Updated dependencies + - @backstage/frontend-plugin-api@0.2.0-next.2 + - @backstage/frontend-app-api@0.2.0-next.2 + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/theme@0.4.3-next.0 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.5 + - @backstage/plugin-search-common@1.2.7-next.0 + +## @backstage/plugin-sentry@0.5.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/theme@0.4.3-next.0 + +## @backstage/plugin-shortcuts@0.3.15-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/theme@0.4.3-next.0 + - @backstage/types@1.1.1 + +## @backstage/plugin-sonarqube@0.7.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/theme@0.4.3-next.0 + - @backstage/plugin-sonarqube-react@0.1.9-next.1 + +## @backstage/plugin-sonarqube-backend@0.2.8-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 + +## @backstage/plugin-sonarqube-react@0.1.9-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + +## @backstage/plugin-splunk-on-call@0.4.14-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/theme@0.4.3-next.0 + +## @backstage/plugin-stack-overflow@0.1.21-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/plugin-search-react@1.7.1-next.2 + - @backstage/theme@0.4.3-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-home-react@0.1.4-next.2 + - @backstage/plugin-search-common@1.2.7-next.0 + +## @backstage/plugin-stack-overflow-backend@0.2.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-search-common@1.2.7-next.0 + +## @backstage/plugin-stackstorm@0.1.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/theme@0.4.3-next.0 + +## @backstage/plugin-tech-insights@0.3.17-next.2 + +### Patch Changes + +- 21f409d776: Export `ScorecardInfo` and `ScorecardsList` components to be able to use manually queried check results directly. +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/theme@0.4.3-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-tech-insights-common@0.2.12 + +## @backstage/plugin-tech-insights-backend@0.5.20-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-tasks@0.5.11-next.2 + - @backstage/plugin-tech-insights-node@0.4.12-next.2 + - @backstage/catalog-client@1.4.5-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-tech-insights-common@0.2.12 + +## @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.38-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/plugin-tech-insights-node@0.4.12-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-tech-insights-common@0.2.12 + +## @backstage/plugin-tech-insights-node@0.4.12-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/backend-tasks@0.5.11-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-tech-insights-common@0.2.12 + +## @backstage/plugin-tech-radar@0.6.9-next.2 + +### Patch Changes + +- 0b55f773a7: Removed some unused dependencies +- Updated dependencies + - @backstage/frontend-plugin-api@0.2.0-next.2 + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/theme@0.4.3-next.0 + +## @backstage/plugin-techdocs@1.7.1-next.2 + +### Patch Changes + +- 3605370af6: Improved `DocsTable` to display pagination controls dynamically, appearing only when needed. +- Updated dependencies + - @backstage/frontend-plugin-api@0.2.0-next.2 + - @backstage/integration-react@1.1.20-next.2 + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/integration@1.7.1-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/plugin-search-react@1.7.1-next.2 + - @backstage/theme@0.4.3-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-search-common@1.2.7-next.0 + - @backstage/plugin-techdocs-react@1.1.12-next.2 + +## @backstage/plugin-techdocs-addons-test-utils@1.0.22-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-app-api@1.11.0-next.2 + - @backstage/plugin-techdocs@1.7.1-next.2 + - @backstage/integration-react@1.1.20-next.2 + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/plugin-catalog@1.14.0-next.2 + - @backstage/plugin-search-react@1.7.1-next.2 + - @backstage/theme@0.4.3-next.0 + - @backstage/test-utils@1.4.4-next.2 + - @backstage/plugin-techdocs-react@1.1.12-next.2 + +## @backstage/plugin-techdocs-module-addons-contrib@1.1.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/integration-react@1.1.20-next.2 + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/integration@1.7.1-next.1 + - @backstage/theme@0.4.3-next.0 + - @backstage/plugin-techdocs-react@1.1.12-next.2 + +## @backstage/plugin-techdocs-react@1.1.12-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/version-bridge@1.0.5 + +## @backstage/plugin-todo@0.2.28-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/theme@0.4.3-next.0 + +## @backstage/plugin-todo-backend@0.3.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/integration@1.7.1-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-openapi-utils@0.0.5-next.0 + - @backstage/plugin-catalog-node@1.4.7-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/catalog-client@1.4.5-next.0 + - @backstage/config@1.1.1-next.0 + +## @backstage/plugin-user-settings@0.7.11-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-app-api@1.11.0-next.2 + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/theme@0.4.3-next.0 + - @backstage/types@1.1.1 + +## @backstage/plugin-user-settings-backend@0.2.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-auth-node@0.4.0-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/types@1.1.1 + +## @backstage/plugin-vault@0.1.20-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/theme@0.4.3-next.0 + +## @backstage/plugin-vault-backend@0.3.11-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-tasks@0.5.11-next.2 + - @backstage/config@1.1.1-next.0 + +## @backstage/plugin-xcmetrics@0.2.44-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/theme@0.4.3-next.0 + +## example-app@0.2.88-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/cli@0.23.0-next.2 + - @backstage/frontend-app-api@0.2.0-next.2 + - @backstage/core-app-api@1.11.0-next.2 + - @backstage/plugin-techdocs@1.7.1-next.2 + - @backstage/plugin-newrelic@0.3.41-next.2 + - @backstage/plugin-scaffolder@1.15.1-next.2 + - @backstage/integration-react@1.1.20-next.2 + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/plugin-tech-radar@0.6.9-next.2 + - @backstage/plugin-catalog@1.14.0-next.2 + - @backstage/plugin-adr@0.6.8-next.2 + - @backstage/plugin-graphiql@0.2.55-next.2 + - @backstage/plugin-search-react@1.7.1-next.2 + - @backstage/plugin-newrelic-dashboard@0.3.0-next.2 + - @backstage/plugin-kubernetes-cluster@0.0.1-next.0 + - @backstage/plugin-kubernetes@0.11.0-next.2 + - @backstage/theme@0.4.3-next.0 + - @backstage/plugin-jenkins@0.8.7-next.2 + - @backstage/plugin-tech-insights@0.3.17-next.2 + - @backstage/plugin-playlist@0.1.17-next.2 + - @backstage/app-defaults@1.4.4-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-airbrake@0.3.25-next.2 + - @backstage/plugin-apache-airflow@0.2.16-next.2 + - @backstage/plugin-api-docs@0.9.12-next.2 + - @backstage/plugin-azure-devops@0.3.7-next.2 + - @backstage/plugin-azure-sites@0.1.14-next.2 + - @backstage/plugin-badges@0.2.49-next.2 + - @backstage/plugin-catalog-common@1.0.17-next.0 + - @backstage/plugin-catalog-graph@0.2.37-next.2 + - @backstage/plugin-catalog-import@0.10.1-next.2 + - @backstage/plugin-catalog-unprocessed-entities@0.1.4-next.2 + - @backstage/plugin-circleci@0.3.25-next.2 + - @backstage/plugin-cloudbuild@0.3.25-next.2 + - @backstage/plugin-code-coverage@0.2.18-next.2 + - @backstage/plugin-cost-insights@0.12.14-next.2 + - @backstage/plugin-devtools@0.1.5-next.2 + - @backstage/plugin-dynatrace@7.0.5-next.2 + - @backstage/plugin-entity-feedback@0.2.8-next.2 + - @backstage/plugin-explore@0.4.11-next.2 + - @backstage/plugin-gcalendar@0.3.19-next.2 + - @backstage/plugin-gcp-projects@0.3.42-next.2 + - @backstage/plugin-github-actions@0.6.6-next.2 + - @backstage/plugin-gocd@0.1.31-next.2 + - @backstage/plugin-home@0.5.9-next.2 + - @backstage/plugin-kafka@0.3.25-next.2 + - @backstage/plugin-lighthouse@0.4.10-next.2 + - @backstage/plugin-linguist@0.1.10-next.2 + - @backstage/plugin-linguist-common@0.1.2 + - @backstage/plugin-microsoft-calendar@0.1.8-next.2 + - @backstage/plugin-nomad@0.1.6-next.2 + - @backstage/plugin-octopus-deploy@0.2.7-next.2 + - @backstage/plugin-org@0.6.15-next.2 + - @backstage/plugin-pagerduty@0.6.6-next.2 + - @backstage/plugin-permission-react@0.4.16-next.1 + - @backstage/plugin-puppetdb@0.1.8-next.2 + - @backstage/plugin-rollbar@0.4.25-next.2 + - @backstage/plugin-scaffolder-react@1.5.6-next.2 + - @backstage/plugin-search@1.4.1-next.2 + - @backstage/plugin-search-common@1.2.7-next.0 + - @backstage/plugin-sentry@0.5.10-next.2 + - @backstage/plugin-shortcuts@0.3.15-next.2 + - @backstage/plugin-stack-overflow@0.1.21-next.2 + - @backstage/plugin-stackstorm@0.1.7-next.2 + - @backstage/plugin-techdocs-module-addons-contrib@1.1.1-next.2 + - @backstage/plugin-techdocs-react@1.1.12-next.2 + - @backstage/plugin-todo@0.2.28-next.2 + - @backstage/plugin-user-settings@0.7.11-next.2 + +## example-app-next@0.0.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/cli@0.23.0-next.2 + - @backstage/frontend-plugin-api@0.2.0-next.2 + - @backstage/frontend-app-api@0.2.0-next.2 + - @backstage/core-app-api@1.11.0-next.2 + - @backstage/plugin-techdocs@1.7.1-next.2 + - @backstage/plugin-newrelic@0.3.41-next.2 + - @backstage/plugin-scaffolder@1.15.1-next.2 + - @backstage/integration-react@1.1.20-next.2 + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/plugin-tech-radar@0.6.9-next.2 + - @backstage/plugin-catalog@1.14.0-next.2 + - @backstage/plugin-adr@0.6.8-next.2 + - @backstage/plugin-graphiql@0.2.55-next.2 + - @backstage/plugin-search-react@1.7.1-next.2 + - @backstage/plugin-newrelic-dashboard@0.3.0-next.2 + - @backstage/plugin-kubernetes@0.11.0-next.2 + - @backstage/theme@0.4.3-next.0 + - @backstage/plugin-jenkins@0.8.7-next.2 + - @backstage/plugin-tech-insights@0.3.17-next.2 + - @backstage/plugin-playlist@0.1.17-next.2 + - @backstage/app-defaults@1.4.4-next.2 + - app-next-example-plugin@0.0.2-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-airbrake@0.3.25-next.2 + - @backstage/plugin-apache-airflow@0.2.16-next.2 + - @backstage/plugin-api-docs@0.9.12-next.2 + - @backstage/plugin-azure-devops@0.3.7-next.2 + - @backstage/plugin-azure-sites@0.1.14-next.2 + - @backstage/plugin-badges@0.2.49-next.2 + - @backstage/plugin-catalog-common@1.0.17-next.0 + - @backstage/plugin-catalog-graph@0.2.37-next.2 + - @backstage/plugin-catalog-import@0.10.1-next.2 + - @backstage/plugin-catalog-unprocessed-entities@0.1.4-next.2 + - @backstage/plugin-circleci@0.3.25-next.2 + - @backstage/plugin-cloudbuild@0.3.25-next.2 + - @backstage/plugin-code-coverage@0.2.18-next.2 + - @backstage/plugin-cost-insights@0.12.14-next.2 + - @backstage/plugin-devtools@0.1.5-next.2 + - @backstage/plugin-dynatrace@7.0.5-next.2 + - @backstage/plugin-entity-feedback@0.2.8-next.2 + - @backstage/plugin-explore@0.4.11-next.2 + - @backstage/plugin-gcalendar@0.3.19-next.2 + - @backstage/plugin-gcp-projects@0.3.42-next.2 + - @backstage/plugin-github-actions@0.6.6-next.2 + - @backstage/plugin-gocd@0.1.31-next.2 + - @backstage/plugin-home@0.5.9-next.2 + - @backstage/plugin-kafka@0.3.25-next.2 + - @backstage/plugin-lighthouse@0.4.10-next.2 + - @backstage/plugin-linguist@0.1.10-next.2 + - @backstage/plugin-linguist-common@0.1.2 + - @backstage/plugin-microsoft-calendar@0.1.8-next.2 + - @backstage/plugin-octopus-deploy@0.2.7-next.2 + - @backstage/plugin-org@0.6.15-next.2 + - @backstage/plugin-pagerduty@0.6.6-next.2 + - @backstage/plugin-permission-react@0.4.16-next.1 + - @backstage/plugin-puppetdb@0.1.8-next.2 + - @backstage/plugin-rollbar@0.4.25-next.2 + - @backstage/plugin-scaffolder-react@1.5.6-next.2 + - @backstage/plugin-search@1.4.1-next.2 + - @backstage/plugin-search-common@1.2.7-next.0 + - @backstage/plugin-sentry@0.5.10-next.2 + - @backstage/plugin-shortcuts@0.3.15-next.2 + - @backstage/plugin-stack-overflow@0.1.21-next.2 + - @backstage/plugin-stackstorm@0.1.7-next.2 + - @backstage/plugin-techdocs-module-addons-contrib@1.1.1-next.2 + - @backstage/plugin-techdocs-react@1.1.12-next.2 + - @backstage/plugin-todo@0.2.28-next.2 + - @backstage/plugin-user-settings@0.7.11-next.2 + +## app-next-example-plugin@0.0.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.2.0-next.2 + - @backstage/core-components@0.13.6-next.2 + +## example-backend@0.2.88-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-nomad-backend@0.1.8-next.2 + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-scaffolder-backend@1.18.0-next.2 + - @backstage/plugin-techdocs-backend@1.8.0-next.2 + - @backstage/plugin-auth-node@0.4.0-next.2 + - @backstage/plugin-catalog-backend@1.14.0-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/integration@1.7.1-next.1 + - @backstage/plugin-kubernetes-backend@0.12.3-next.2 + - @backstage/plugin-jenkins-backend@0.2.9-next.2 + - @backstage/plugin-auth-backend@0.19.3-next.2 + - @backstage/backend-tasks@0.5.11-next.2 + - @backstage/plugin-adr-backend@0.4.3-next.2 + - @backstage/plugin-app-backend@0.3.54-next.2 + - @backstage/plugin-azure-devops-backend@0.4.3-next.2 + - @backstage/plugin-azure-sites-backend@0.1.16-next.2 + - @backstage/plugin-badges-backend@0.3.3-next.2 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.3-next.2 + - @backstage/plugin-catalog-node@1.4.7-next.2 + - @backstage/plugin-code-coverage-backend@0.2.20-next.2 + - @backstage/plugin-devtools-backend@0.2.3-next.2 + - @backstage/plugin-entity-feedback-backend@0.2.3-next.2 + - @backstage/plugin-events-backend@0.2.15-next.2 + - @backstage/plugin-explore-backend@0.0.16-next.2 + - @backstage/plugin-graphql-backend@0.1.44-next.2 + - @backstage/plugin-kafka-backend@0.3.3-next.2 + - @backstage/plugin-lighthouse-backend@0.3.3-next.2 + - @backstage/plugin-linguist-backend@0.5.3-next.2 + - @backstage/plugin-permission-backend@0.5.29-next.2 + - @backstage/plugin-permission-node@0.7.17-next.2 + - @backstage/plugin-playlist-backend@0.3.10-next.2 + - @backstage/plugin-proxy-backend@0.4.3-next.2 + - @backstage/plugin-rollbar-backend@0.1.51-next.2 + - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.7-next.2 + - @backstage/plugin-scaffolder-backend-module-rails@0.4.23-next.2 + - @backstage/plugin-search-backend@1.4.6-next.2 + - @backstage/plugin-search-backend-module-catalog@0.1.10-next.2 + - @backstage/plugin-search-backend-module-elasticsearch@1.3.9-next.2 + - @backstage/plugin-search-backend-module-explore@0.1.10-next.2 + - @backstage/plugin-search-backend-module-pg@0.5.15-next.2 + - @backstage/plugin-search-backend-module-techdocs@0.1.10-next.2 + - @backstage/plugin-search-backend-node@1.2.10-next.2 + - @backstage/plugin-tech-insights-backend@0.5.20-next.2 + - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.38-next.2 + - @backstage/plugin-tech-insights-node@0.4.12-next.2 + - @backstage/plugin-todo-backend@0.3.4-next.2 + - example-app@0.2.88-next.2 + - @backstage/catalog-client@1.4.5-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-catalog-backend-module-unprocessed@0.3.3-next.2 + - @backstage/plugin-events-node@0.2.15-next.2 + - @backstage/plugin-permission-common@0.7.9-next.0 + - @backstage/plugin-search-common@1.2.7-next.0 + +## example-backend-next@0.0.16-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-nomad-backend@0.1.8-next.2 + - @backstage/plugin-scaffolder-backend@1.18.0-next.2 + - @backstage/plugin-techdocs-backend@1.8.0-next.2 + - @backstage/plugin-auth-node@0.4.0-next.2 + - @backstage/plugin-catalog-backend@1.14.0-next.2 + - @backstage/plugin-kubernetes-backend@0.12.3-next.2 + - @backstage/plugin-jenkins-backend@0.2.9-next.2 + - @backstage/backend-defaults@0.2.6-next.2 + - @backstage/backend-tasks@0.5.11-next.2 + - @backstage/plugin-adr-backend@0.4.3-next.2 + - @backstage/plugin-app-backend@0.3.54-next.2 + - @backstage/plugin-azure-devops-backend@0.4.3-next.2 + - @backstage/plugin-badges-backend@0.3.3-next.2 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.3-next.2 + - @backstage/plugin-devtools-backend@0.2.3-next.2 + - @backstage/plugin-entity-feedback-backend@0.2.3-next.2 + - @backstage/plugin-lighthouse-backend@0.3.3-next.2 + - @backstage/plugin-linguist-backend@0.5.3-next.2 + - @backstage/plugin-permission-backend@0.5.29-next.2 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.3-next.2 + - @backstage/plugin-permission-node@0.7.17-next.2 + - @backstage/plugin-playlist-backend@0.3.10-next.2 + - @backstage/plugin-proxy-backend@0.4.3-next.2 + - @backstage/plugin-search-backend@1.4.6-next.2 + - @backstage/plugin-search-backend-module-catalog@0.1.10-next.2 + - @backstage/plugin-search-backend-module-explore@0.1.10-next.2 + - @backstage/plugin-search-backend-module-techdocs@0.1.10-next.2 + - @backstage/plugin-search-backend-node@1.2.10-next.2 + - @backstage/plugin-sonarqube-backend@0.2.8-next.2 + - @backstage/plugin-todo-backend@0.3.4-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/plugin-catalog-backend-module-unprocessed@0.3.3-next.2 + - @backstage/plugin-permission-common@0.7.9-next.0 + +## @backstage/backend-plugin-manager@0.0.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-auth-node@0.4.0-next.2 + - @backstage/plugin-catalog-backend@1.14.0-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-tasks@0.5.11-next.2 + - @backstage/plugin-events-backend@0.2.15-next.2 + - @backstage/plugin-permission-node@0.7.17-next.2 + - @backstage/plugin-scaffolder-node@0.2.6-next.2 + - @backstage/plugin-search-backend-node@1.2.10-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/cli-common@0.1.13-next.0 + - @backstage/cli-node@0.1.5-next.1 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-events-node@0.2.15-next.2 + - @backstage/plugin-permission-common@0.7.9-next.0 + - @backstage/plugin-search-common@1.2.7-next.0 + +## e2e-test@0.2.8-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/create-app@0.5.6-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/cli-common@0.1.13-next.0 + +## techdocs-cli-embedded-app@0.2.87-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/cli@0.23.0-next.2 + - @backstage/core-app-api@1.11.0-next.2 + - @backstage/plugin-techdocs@1.7.1-next.2 + - @backstage/integration-react@1.1.20-next.2 + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog@1.14.0-next.2 + - @backstage/theme@0.4.3-next.0 + - @backstage/app-defaults@1.4.4-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/test-utils@1.4.4-next.2 + - @backstage/plugin-techdocs-react@1.1.12-next.2 + +## @internal/plugin-todo-list@1.0.18-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/theme@0.4.3-next.0 + +## @internal/plugin-todo-list-backend@1.0.18-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-auth-node@0.4.0-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 + +## @internal/plugin-todo-list-common@1.0.14-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.7.9-next.0 diff --git a/microsite/data/plugins/litmus.yaml b/microsite/data/plugins/litmus.yaml new file mode 100644 index 0000000000..d27bc4c7d7 --- /dev/null +++ b/microsite/data/plugins/litmus.yaml @@ -0,0 +1,10 @@ +--- +title: Litmus +author: litmuschaos.io +authorUrl: https://github.com/litmuschaos/backstage-plugin +category: Chaos Engineering +description: This plugin lets you view the status of Litmus resources and launch Chaos Experiments directly inside Backstage. +documentation: https://github.com/litmuschaos/backstage-plugin/blob/master/README.md +iconUrl: https://raw.githubusercontent.com/cncf/artwork/master/projects/litmus/icon/color/litmus-icon-color.svg +npmPackageName: 'backstage-plugin-litmus' +addedDate: '2023-10-06' diff --git a/microsite/data/plugins/pulumi.yaml b/microsite/data/plugins/pulumi.yaml index ea97bcdef3..0177b7df0d 100644 --- a/microsite/data/plugins/pulumi.yaml +++ b/microsite/data/plugins/pulumi.yaml @@ -3,7 +3,7 @@ title: Pulumi author: Pulumi authorUrl: https://www.pulumi.com category: Infrastructure -description: View Pulumi stack information in Backstage. +description: Use Pulumi scaffolder actions and view Pulumi stack information in Backstage. documentation: https://github.com/pulumi/pulumi-backstage-plugin iconUrl: https://www.pulumi.com/logos/brand/avatar-on-white.png npmPackageName: '@pulumi/backstage-plugin-pulumi' diff --git a/microsite/docusaurus.config.js b/microsite/docusaurus.config.js index 1879e35e72..83a5d3ac3d 100644 --- a/microsite/docusaurus.config.js +++ b/microsite/docusaurus.config.js @@ -73,6 +73,7 @@ module.exports = { // Replace all HTML comments with emtpy strings as these are not supported by MDXv2. return fileContent.replace(//gs, ''); }, + format: 'md', }, webpack: { jsLoader: isServer => ({ diff --git a/microsite/package.json b/microsite/package.json index 720179093a..3f266c189e 100644 --- a/microsite/package.json +++ b/microsite/package.json @@ -17,28 +17,28 @@ "docusaurus": "docusaurus" }, "devDependencies": { - "@docusaurus/module-type-aliases": "0.0.0-5591", + "@docusaurus/module-type-aliases": "0.0.0-5703", "@spotify/prettier-config": "^14.0.0", "@tsconfig/docusaurus": "^1.0.6", "@types/luxon": "^3.0.0", "@types/webpack-env": "^1.18.0", "js-yaml": "^4.1.0", "prettier": "^2.6.2", - "typescript": "^4.9.4", + "typescript": "~5.0.0", "yaml-loader": "^0.8.0" }, "prettier": "@spotify/prettier-config", "dependencies": { - "@docusaurus/core": "0.0.0-5591", - "@docusaurus/plugin-client-redirects": "0.0.0-5591", - "@docusaurus/preset-classic": "0.0.0-5591", + "@docusaurus/core": "0.0.0-5703", + "@docusaurus/plugin-client-redirects": "0.0.0-5703", + "@docusaurus/preset-classic": "0.0.0-5703", "@swc/core": "^1.3.46", "clsx": "^1.1.1", "docusaurus-plugin-sass": "^0.2.3", "luxon": "^3.0.0", "prism-react-renderer": "^1.3.5", - "react": "^17.0.2", - "react-dom": "^17.0.2", + "react": "^18.0.0", + "react-dom": "^18.0.0", "sass": "^1.57.1", "swc-loader": "^0.2.3" } diff --git a/microsite/yarn.lock b/microsite/yarn.lock index 27b077b8da..9edcca323c 100644 --- a/microsite/yarn.lock +++ b/microsite/yarn.lock @@ -5,111 +5,126 @@ __metadata: version: 6 cacheKey: 8 -"@algolia/autocomplete-core@npm:1.8.2": - version: 1.8.2 - resolution: "@algolia/autocomplete-core@npm:1.8.2" +"@algolia/autocomplete-core@npm:1.9.3": + version: 1.9.3 + resolution: "@algolia/autocomplete-core@npm:1.9.3" dependencies: - "@algolia/autocomplete-shared": 1.8.2 - checksum: 03c164d8ce685e8b690734364a2e8653a7ebaf9b49ccbea5f94236b1231d66ed6771010406a0b00a2ce884b767712d71903a7d124ec11f35a87006d1456da762 + "@algolia/autocomplete-plugin-algolia-insights": 1.9.3 + "@algolia/autocomplete-shared": 1.9.3 + checksum: ce78048568660184a4fa3c6548f344a7f5ce0ba45d4cfc233f9756b6d4f360afd5ae3a18efefcd27a626d3a0d6cf22d9cba3e21b217afae62b8e9d11bc4960da languageName: node linkType: hard -"@algolia/autocomplete-preset-algolia@npm:1.8.2": - version: 1.8.2 - resolution: "@algolia/autocomplete-preset-algolia@npm:1.8.2" +"@algolia/autocomplete-plugin-algolia-insights@npm:1.9.3": + version: 1.9.3 + resolution: "@algolia/autocomplete-plugin-algolia-insights@npm:1.9.3" dependencies: - "@algolia/autocomplete-shared": 1.8.2 + "@algolia/autocomplete-shared": 1.9.3 + peerDependencies: + search-insights: ">= 1 < 3" + checksum: 030695bf692021c27f52a3d4931efed23032796e326d4ae7957ae91b51c36a10dc2d885fb043909e853f961c994b8e9ff087f50bb918cfa075370562251a199f + languageName: node + linkType: hard + +"@algolia/autocomplete-preset-algolia@npm:1.9.3": + version: 1.9.3 + resolution: "@algolia/autocomplete-preset-algolia@npm:1.9.3" + dependencies: + "@algolia/autocomplete-shared": 1.9.3 peerDependencies: "@algolia/client-search": ">= 4.9.1 < 6" algoliasearch: ">= 4.9.1 < 6" - checksum: f968b0f9d0ad9e75d3e1cfe35a02816ed01d83eb3d702bb8d4297bb9abf542991659c4a16c6ea323eea9268f189e85f58fcb109de76e6c4a9f58a0d63812c92e + checksum: 1ab3273d3054b348eed286ad1a54b21807846326485507b872477b827dc688006d4f14233cebd0bf49b2932ec8e29eca6d76e48a3c9e9e963b25153b987549c0 languageName: node linkType: hard -"@algolia/autocomplete-shared@npm:1.8.2": - version: 1.8.2 - resolution: "@algolia/autocomplete-shared@npm:1.8.2" - checksum: 1ec17deb594c41e983643cfd888e3590963aa7207ef6a67859c49a8f4835340493ba3b025b8b617b488365730ba9817ad58ee44a610c172332446e560fb68780 +"@algolia/autocomplete-shared@npm:1.9.3": + version: 1.9.3 + resolution: "@algolia/autocomplete-shared@npm:1.9.3" + peerDependencies: + "@algolia/client-search": ">= 4.9.1 < 6" + algoliasearch: ">= 4.9.1 < 6" + checksum: 06014c8b08d30c452de079f48c0235d8fa09904bf511da8dc1b7e491819940fd4ff36b9bf65340242b2e157a26799a3b9aea01feee9c5bf67be3c48d7dff43d7 languageName: node linkType: hard -"@algolia/cache-browser-local-storage@npm:4.17.0": - version: 4.17.0 - resolution: "@algolia/cache-browser-local-storage@npm:4.17.0" +"@algolia/cache-browser-local-storage@npm:4.20.0": + version: 4.20.0 + resolution: "@algolia/cache-browser-local-storage@npm:4.20.0" dependencies: - "@algolia/cache-common": 4.17.0 - checksum: cca4bd274a93ff4b47895b7396666294297e650ae8f9f50cc1a1dfe70d4bcf9bd1c5dbc15027f4b42c51693d1d0b996fa6c53b95462f3e31d44f4f4b76384a48 + "@algolia/cache-common": 4.20.0 + checksum: b9ca7e190ab77ddf4d30d22223345f69fc89899aa6887ee716e4ffcef14c8c9d28b782cb7cc96a0f04eed95a989878a6feca5b9aa6add0cd1846222c3308bb65 languageName: node linkType: hard -"@algolia/cache-common@npm:4.17.0": - version: 4.17.0 - resolution: "@algolia/cache-common@npm:4.17.0" - checksum: cbf8d6ca4ee653f2bef6665eb36b7afee2d4031abe5444cd121d60614189f2c96d0e00cfef990cbe68d318dbcef9b38f5df70476f9088ef43f8c83d69d0802b8 +"@algolia/cache-common@npm:4.20.0": + version: 4.20.0 + resolution: "@algolia/cache-common@npm:4.20.0" + checksum: a46377de8a309feea109aae1283fc9157c73766a4c51e3085870a1fc49f6e33698814379f3bbdf475713fa0663dace86fc90f0466e64469b1b885a0538abace4 languageName: node linkType: hard -"@algolia/cache-in-memory@npm:4.17.0": - version: 4.17.0 - resolution: "@algolia/cache-in-memory@npm:4.17.0" +"@algolia/cache-in-memory@npm:4.20.0": + version: 4.20.0 + resolution: "@algolia/cache-in-memory@npm:4.20.0" dependencies: - "@algolia/cache-common": 4.17.0 - checksum: 95d8a831d86da4971b62ddfa3a0bad991dc78d2482b47e409ab3e81a88e2d1e020287f36900a71caee7ef76c8730609e74bad10f3a7fa0fa7fd7fe1ece68a29e + "@algolia/cache-common": 4.20.0 + checksum: 3d67dcfae431605c8b9b1502f14865722f13b97b2822e1e3ed53bbf7bf66a120a825ccf5ed03476ebdf4aa15482dad5bfc6c2c93d81f07f862c373c689f49317 languageName: node linkType: hard -"@algolia/client-account@npm:4.17.0": - version: 4.17.0 - resolution: "@algolia/client-account@npm:4.17.0" +"@algolia/client-account@npm:4.20.0": + version: 4.20.0 + resolution: "@algolia/client-account@npm:4.20.0" dependencies: - "@algolia/client-common": 4.17.0 - "@algolia/client-search": 4.17.0 - "@algolia/transporter": 4.17.0 - checksum: 5ba40c348c07c059e303857a726a163256a159ca4ca9419f3c6eb80ef979838b375614674cf778fd35faaecd5e51c91811e19e9d5fabc3c421182dfc9464b798 + "@algolia/client-common": 4.20.0 + "@algolia/client-search": 4.20.0 + "@algolia/transporter": 4.20.0 + checksum: b59e9c7a324bbfba4abdab3f41d333522eb1abce7dab74e69d297acd9ee2a3c60e82e5e9db42e6a46b5ea26a35728533e6e4ff846c631b588ceb73d14dcbc5fb languageName: node linkType: hard -"@algolia/client-analytics@npm:4.17.0": - version: 4.17.0 - resolution: "@algolia/client-analytics@npm:4.17.0" +"@algolia/client-analytics@npm:4.20.0": + version: 4.20.0 + resolution: "@algolia/client-analytics@npm:4.20.0" dependencies: - "@algolia/client-common": 4.17.0 - "@algolia/client-search": 4.17.0 - "@algolia/requester-common": 4.17.0 - "@algolia/transporter": 4.17.0 - checksum: 6cddb0bc8fb2f7ce46c0f051f282a9ecb22333f32e43274bbec61228bcb040af87029b759ab300c9f1af90e4b4a08adf7b4899faf13ab94426a43823c39e951a + "@algolia/client-common": 4.20.0 + "@algolia/client-search": 4.20.0 + "@algolia/requester-common": 4.20.0 + "@algolia/transporter": 4.20.0 + checksum: 0be4120ab72162e0640e49eedddff81bfc2c590e9a9322d1788b8c01e06fdabcaaaa9cd75b5b516e502deb888d3ba2285ac5e1c3bb91fc9eb552a24a716dc6e3 languageName: node linkType: hard -"@algolia/client-common@npm:4.17.0": - version: 4.17.0 - resolution: "@algolia/client-common@npm:4.17.0" +"@algolia/client-common@npm:4.20.0": + version: 4.20.0 + resolution: "@algolia/client-common@npm:4.20.0" dependencies: - "@algolia/requester-common": 4.17.0 - "@algolia/transporter": 4.17.0 - checksum: 05791d5483e16a0776a1fb16f42a8e62c67be844e82ff506b5ed82669367f6ea5fba79bcffa90ff4af2039bd8fb16db395edc4c0b1e0c11c050de8a118642180 + "@algolia/requester-common": 4.20.0 + "@algolia/transporter": 4.20.0 + checksum: 88a27b5f8bba38349e1dbe47634e2ee159a413ff1a3baf6a65fbf244835f8d368e9f0a5ccce8bfe94ec405b38608be5bed45bcb140517f3aba6fe3b7045db373 languageName: node linkType: hard -"@algolia/client-personalization@npm:4.17.0": - version: 4.17.0 - resolution: "@algolia/client-personalization@npm:4.17.0" +"@algolia/client-personalization@npm:4.20.0": + version: 4.20.0 + resolution: "@algolia/client-personalization@npm:4.20.0" dependencies: - "@algolia/client-common": 4.17.0 - "@algolia/requester-common": 4.17.0 - "@algolia/transporter": 4.17.0 - checksum: 01e08bd8919d30469bfb01acd221528b3a25b56ac5a4754353e87d73643fe85e0126b1ab070bdb2b6d442fc260f4f781b95cbd5c1363fca5ba37a0a2bf6292b2 + "@algolia/client-common": 4.20.0 + "@algolia/requester-common": 4.20.0 + "@algolia/transporter": 4.20.0 + checksum: ddb92ebe135564e03db6ac75da7fdc1c7500a0deffb7e41d5a02a413216a06daea008f8062dab606ba8af4c3c34e550354f48e6ea7b048882c385d915643799a languageName: node linkType: hard -"@algolia/client-search@npm:4.17.0": - version: 4.17.0 - resolution: "@algolia/client-search@npm:4.17.0" +"@algolia/client-search@npm:4.20.0": + version: 4.20.0 + resolution: "@algolia/client-search@npm:4.20.0" dependencies: - "@algolia/client-common": 4.17.0 - "@algolia/requester-common": 4.17.0 - "@algolia/transporter": 4.17.0 - checksum: ca6aedd67e69112e3a86086e48de4f38b9d127c2e606b345de58a528dd2d2016e70783cf446dfa669036c69ffbd0616f27b180cacb6ab0fafe85065b2b8d323f + "@algolia/client-common": 4.20.0 + "@algolia/requester-common": 4.20.0 + "@algolia/transporter": 4.20.0 + checksum: 9fb6624dab6753f336f3207ee2af3558baeec4772ef739b6f6ed6a754c366e2e8d62cbf1cf8b28d5f763bec276a0a5fc36db2bf6f53a707890a411afcf550e92 languageName: node linkType: hard @@ -120,55 +135,55 @@ __metadata: languageName: node linkType: hard -"@algolia/logger-common@npm:4.17.0": - version: 4.17.0 - resolution: "@algolia/logger-common@npm:4.17.0" - checksum: e6359266544ed9d9eab8d4217c126a8209f74fbd1e407f2249b886915a521e89e419dc6401a65389523f3bdffb3880c0a95578c3c437653f941ddb1095c37e08 +"@algolia/logger-common@npm:4.20.0": + version: 4.20.0 + resolution: "@algolia/logger-common@npm:4.20.0" + checksum: 06ed28f76b630c8e7597534b15138ab6f71c10dfc6e13f1fb1b76965b39c88fd1d9cb3fe6bb9d046de6533ebcbe5ad92e751bc36fabe98ceda39d1d5f47bb637 languageName: node linkType: hard -"@algolia/logger-console@npm:4.17.0": - version: 4.17.0 - resolution: "@algolia/logger-console@npm:4.17.0" +"@algolia/logger-console@npm:4.20.0": + version: 4.20.0 + resolution: "@algolia/logger-console@npm:4.20.0" dependencies: - "@algolia/logger-common": 4.17.0 - checksum: b58790af42258a586a2584154674dbe13802e05602ff000ce9c34cadc2b5d29a3d41af150bde3f29aa5711a468d56d4c7fd16a72a350243e81af794bfadab213 + "@algolia/logger-common": 4.20.0 + checksum: 721dffe37563e2998d4c361f09a05736b4baa141bfb7da25d50f890ba8257ac99845dd94b43d0d6db38e2fdab96508a726e184a00e5b1e83ef18a16da6fc716c languageName: node linkType: hard -"@algolia/requester-browser-xhr@npm:4.17.0": - version: 4.17.0 - resolution: "@algolia/requester-browser-xhr@npm:4.17.0" +"@algolia/requester-browser-xhr@npm:4.20.0": + version: 4.20.0 + resolution: "@algolia/requester-browser-xhr@npm:4.20.0" dependencies: - "@algolia/requester-common": 4.17.0 - checksum: 374247cf30887be1c4649d0cdee5b9bbd59c9bc663122e14e157c70978a87a58e8708956bc4b58fbe9ad5b31ee1014a097322f748d27ad9b9de051943f1ebba2 + "@algolia/requester-common": 4.20.0 + checksum: 669790c7dfd491318976b9d61d98d9785880d7385ba33669f3f8b9c66ea88320bcded82d34f58b5df74b2cb8beb62ef48a28d39117f7997be84348c9fa7f6132 languageName: node linkType: hard -"@algolia/requester-common@npm:4.17.0": - version: 4.17.0 - resolution: "@algolia/requester-common@npm:4.17.0" - checksum: 13ace23f53fc88677d896ae4506f04a5defd17f69b9611571e19dd45c91fda74a71acd27f799f55f88d550264b8f4477831d9ff546ffeb7257e35ec4ee983ca8 +"@algolia/requester-common@npm:4.20.0": + version: 4.20.0 + resolution: "@algolia/requester-common@npm:4.20.0" + checksum: 8580ffd2be146bbdb5d4a57668bba4a5014f406cb2e5c65f596db6babab46c48d30c6e4732034ee1f987970aa27dcdab567959d654fa5fa74c4bcaf98312a724 languageName: node linkType: hard -"@algolia/requester-node-http@npm:4.17.0": - version: 4.17.0 - resolution: "@algolia/requester-node-http@npm:4.17.0" +"@algolia/requester-node-http@npm:4.20.0": + version: 4.20.0 + resolution: "@algolia/requester-node-http@npm:4.20.0" dependencies: - "@algolia/requester-common": 4.17.0 - checksum: 9d5e9c90e300737620be2cb21dbdc3ffe9f37453893b62f3e1fce2678abb0e1bd8b95735ddffc25ab79692539ecf6dbcb7eb9e8f7cf405d73521d416ebfb39ca + "@algolia/requester-common": 4.20.0 + checksum: 7857114b59c67e0d22e8a7ff3f755d11534a1602a4fc80802d3b35802777880a4980420914ea4a6e3e21198f5bacb95906289ce1bb9372458bf6a60a723bee59 languageName: node linkType: hard -"@algolia/transporter@npm:4.17.0": - version: 4.17.0 - resolution: "@algolia/transporter@npm:4.17.0" +"@algolia/transporter@npm:4.20.0": + version: 4.20.0 + resolution: "@algolia/transporter@npm:4.20.0" dependencies: - "@algolia/cache-common": 4.17.0 - "@algolia/logger-common": 4.17.0 - "@algolia/requester-common": 4.17.0 - checksum: 1864bf9ccdf63f5090a89f44358c30317f549b4dc37dd8ce446383ca217c1a9737ab2749ca92394a320574690ea04134ae600c2a3f1f9d393549a5124079c2a6 + "@algolia/cache-common": 4.20.0 + "@algolia/logger-common": 4.20.0 + "@algolia/requester-common": 4.20.0 + checksum: f834d5c8fcb7dfa9b7044cb81e9fab44a32f9dd0c3868a0f85fe0de4f4d27ad11fdc9c3c78541bc944c2593f4be56517a8ce593309d062b8a46ca0d6fcb5dcbc languageName: node linkType: hard @@ -182,551 +197,357 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.16.0, @babel/code-frame@npm:^7.18.6, @babel/code-frame@npm:^7.21.4, @babel/code-frame@npm:^7.8.3": - version: 7.21.4 - resolution: "@babel/code-frame@npm:7.21.4" +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.16.0, @babel/code-frame@npm:^7.22.13, @babel/code-frame@npm:^7.8.3": + version: 7.22.13 + resolution: "@babel/code-frame@npm:7.22.13" dependencies: - "@babel/highlight": ^7.18.6 - checksum: e5390e6ec1ac58dcef01d4f18eaf1fd2f1325528661ff6d4a5de8979588b9f5a8e852a54a91b923846f7a5c681b217f0a45c2524eb9560553160cd963b7d592c + "@babel/highlight": ^7.22.13 + chalk: ^2.4.2 + checksum: 22e342c8077c8b77eeb11f554ecca2ba14153f707b85294fcf6070b6f6150aae88a7b7436dd88d8c9289970585f3fe5b9b941c5aa3aa26a6d5a8ef3f292da058 languageName: node linkType: hard -"@babel/compat-data@npm:^7.17.7, @babel/compat-data@npm:^7.20.5, @babel/compat-data@npm:^7.21.4": - version: 7.21.4 - resolution: "@babel/compat-data@npm:7.21.4" - checksum: 5f8b98c66f2ffba9f3c3a82c0cf354c52a0ec5ad4797b370dc32bdcd6e136ac4febe5e93d76ce76e175632e2dbf6ce9f46319aa689fcfafa41b6e49834fa4b66 +"@babel/compat-data@npm:^7.22.20, @babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.22.9": + version: 7.22.20 + resolution: "@babel/compat-data@npm:7.22.20" + checksum: efedd1d18878c10fde95e4d82b1236a9aba41395ef798cbb651f58dbf5632dbff475736c507b8d13d4c8f44809d41c0eb2ef0d694283af9ba5dd8339b6dab451 languageName: node linkType: hard -"@babel/core@npm:^7.19.6, @babel/core@npm:^7.20.12": - version: 7.21.4 - resolution: "@babel/core@npm:7.21.4" +"@babel/core@npm:^7.19.6, @babel/core@npm:^7.22.9": + version: 7.23.0 + resolution: "@babel/core@npm:7.23.0" dependencies: "@ampproject/remapping": ^2.2.0 - "@babel/code-frame": ^7.21.4 - "@babel/generator": ^7.21.4 - "@babel/helper-compilation-targets": ^7.21.4 - "@babel/helper-module-transforms": ^7.21.2 - "@babel/helpers": ^7.21.0 - "@babel/parser": ^7.21.4 - "@babel/template": ^7.20.7 - "@babel/traverse": ^7.21.4 - "@babel/types": ^7.21.4 - convert-source-map: ^1.7.0 + "@babel/code-frame": ^7.22.13 + "@babel/generator": ^7.23.0 + "@babel/helper-compilation-targets": ^7.22.15 + "@babel/helper-module-transforms": ^7.23.0 + "@babel/helpers": ^7.23.0 + "@babel/parser": ^7.23.0 + "@babel/template": ^7.22.15 + "@babel/traverse": ^7.23.0 + "@babel/types": ^7.23.0 + convert-source-map: ^2.0.0 debug: ^4.1.0 gensync: ^1.0.0-beta.2 - json5: ^2.2.2 - semver: ^6.3.0 - checksum: a3beebb2cc79908a02f27a07dc381bcb34e8ecc58fa99f568ad0934c49e12111fc977ee9c5b51eb7ea2da66f63155d37c4dd96b6472eaeecfc35843ccb56bf3d + json5: ^2.2.3 + semver: ^6.3.1 + checksum: cebd9b48dbc970a7548522f207f245c69567e5ea17ebb1a4e4de563823cf20a01177fe8d2fe19b6e1461361f92fa169fd0b29f8ee9d44eeec84842be1feee5f2 languageName: node linkType: hard -"@babel/generator@npm:^7.21.1, @babel/generator@npm:^7.21.4": - version: 7.21.4 - resolution: "@babel/generator@npm:7.21.4" +"@babel/generator@npm:^7.22.9, @babel/generator@npm:^7.23.0": + version: 7.23.0 + resolution: "@babel/generator@npm:7.23.0" dependencies: - "@babel/types": ^7.21.4 + "@babel/types": ^7.23.0 "@jridgewell/gen-mapping": ^0.3.2 "@jridgewell/trace-mapping": ^0.3.17 jsesc: ^2.5.1 - checksum: 9ffbb526a53bb8469b5402f7b5feac93809b09b2a9f82fcbfcdc5916268a65dae746a1f2479e03ba4fb0776facd7c892191f63baa61ab69b2cfdb24f7b92424d + checksum: 8efe24adad34300f1f8ea2add420b28171a646edc70f2a1b3e1683842f23b8b7ffa7e35ef0119294e1901f45bfea5b3dc70abe1f10a1917ccdfb41bed69be5f1 languageName: node linkType: hard -"@babel/helper-annotate-as-pure@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/helper-annotate-as-pure@npm:7.18.6" +"@babel/helper-annotate-as-pure@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-annotate-as-pure@npm:7.22.5" dependencies: - "@babel/types": ^7.18.6 - checksum: 88ccd15ced475ef2243fdd3b2916a29ea54c5db3cd0cfabf9d1d29ff6e63b7f7cd1c27264137d7a40ac2e978b9b9a542c332e78f40eb72abe737a7400788fc1b + "@babel/types": ^7.22.5 + checksum: 53da330f1835c46f26b7bf4da31f7a496dee9fd8696cca12366b94ba19d97421ce519a74a837f687749318f94d1a37f8d1abcbf35e8ed22c32d16373b2f6198d languageName: node linkType: hard -"@babel/helper-builder-binary-assignment-operator-visitor@npm:^7.18.6": - version: 7.18.9 - resolution: "@babel/helper-builder-binary-assignment-operator-visitor@npm:7.18.9" +"@babel/helper-builder-binary-assignment-operator-visitor@npm:^7.22.5": + version: 7.22.15 + resolution: "@babel/helper-builder-binary-assignment-operator-visitor@npm:7.22.15" dependencies: - "@babel/helper-explode-assignable-expression": ^7.18.6 - "@babel/types": ^7.18.9 - checksum: b4bc214cb56329daff6cc18a7f7a26aeafb55a1242e5362f3d47fe3808421f8c7cd91fff95d6b9b7ccb67e14e5a67d944e49dbe026942bfcbfda19b1c72a8e72 + "@babel/types": ^7.22.15 + checksum: 639c697a1c729f9fafa2dd4c9af2e18568190299b5907bd4c2d0bc818fcbd1e83ffeecc2af24327a7faa7ac4c34edd9d7940510a5e66296c19bad17001cf5c7a languageName: node linkType: hard -"@babel/helper-compilation-targets@npm:^7.17.7, @babel/helper-compilation-targets@npm:^7.18.9, @babel/helper-compilation-targets@npm:^7.20.7, @babel/helper-compilation-targets@npm:^7.21.4": - version: 7.21.4 - resolution: "@babel/helper-compilation-targets@npm:7.21.4" +"@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: - "@babel/compat-data": ^7.21.4 - "@babel/helper-validator-option": ^7.21.0 - browserslist: ^4.21.3 + "@babel/compat-data": ^7.22.9 + "@babel/helper-validator-option": ^7.22.15 + browserslist: ^4.21.9 lru-cache: ^5.1.1 - semver: ^6.3.0 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: bf9c7d3e7e6adff9222c05d898724cd4ee91d7eb9d52222c7ad2a22955620c2872cc2d9bdf0e047df8efdb79f4e3af2a06b53f509286145feccc4d10ddc318be + semver: ^6.3.1 + checksum: ce85196769e091ae54dd39e4a80c2a9df1793da8588e335c383d536d54f06baf648d0a08fc873044f226398c4ded15c4ae9120ee18e7dfd7c639a68e3cdc9980 languageName: node linkType: hard -"@babel/helper-create-class-features-plugin@npm:^7.18.6, @babel/helper-create-class-features-plugin@npm:^7.21.0": - version: 7.21.4 - resolution: "@babel/helper-create-class-features-plugin@npm:7.21.4" +"@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: - "@babel/helper-annotate-as-pure": ^7.18.6 - "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-function-name": ^7.21.0 - "@babel/helper-member-expression-to-functions": ^7.21.0 - "@babel/helper-optimise-call-expression": ^7.18.6 - "@babel/helper-replace-supers": ^7.20.7 - "@babel/helper-skip-transparent-expression-wrappers": ^7.20.0 - "@babel/helper-split-export-declaration": ^7.18.6 + "@babel/helper-annotate-as-pure": ^7.22.5 + "@babel/helper-environment-visitor": ^7.22.5 + "@babel/helper-function-name": ^7.22.5 + "@babel/helper-member-expression-to-functions": ^7.22.15 + "@babel/helper-optimise-call-expression": ^7.22.5 + "@babel/helper-replace-supers": ^7.22.9 + "@babel/helper-skip-transparent-expression-wrappers": ^7.22.5 + "@babel/helper-split-export-declaration": ^7.22.6 + semver: ^6.3.1 peerDependencies: "@babel/core": ^7.0.0 - checksum: 9123ca80a4894aafdb1f0bc08e44f6be7b12ed1fbbe99c501b484f9b1a17ff296b6c90c18c222047d53c276f07f17b4de857946fa9d0aa207023b03e4cc716f2 + checksum: 52c500d8d164abb3a360b1b7c4b8fff77bc4a5920d3a2b41ae6e1d30617b0dc0b972c1f5db35b1752007e04a748908b4a99bc872b73549ae837e87dcdde005a3 languageName: node linkType: hard -"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.20.5": - version: 7.20.5 - resolution: "@babel/helper-create-regexp-features-plugin@npm:7.20.5" +"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.22.5": + version: 7.22.15 + resolution: "@babel/helper-create-regexp-features-plugin@npm:7.22.15" dependencies: - "@babel/helper-annotate-as-pure": ^7.18.6 - regexpu-core: ^5.2.1 + "@babel/helper-annotate-as-pure": ^7.22.5 + regexpu-core: ^5.3.1 + semver: ^6.3.1 peerDependencies: "@babel/core": ^7.0.0 - checksum: 7f29c3cb7447cca047b0d394f8ab98e4923d00e86a7afa56e5df9770c48ec107891505d2d1f06b720ecc94ed24bf58d90986cc35fe4a43b549eb7b7a5077b693 + checksum: 0243b8d4854f1dc8861b1029a46d3f6393ad72f366a5a08e36a4648aa682044f06da4c6e87a456260e1e1b33c999f898ba591a0760842c1387bcc93fbf2151a6 languageName: node linkType: hard -"@babel/helper-define-polyfill-provider@npm:^0.3.3": - version: 0.3.3 - resolution: "@babel/helper-define-polyfill-provider@npm:0.3.3" +"@babel/helper-define-polyfill-provider@npm:^0.4.2": + version: 0.4.2 + resolution: "@babel/helper-define-polyfill-provider@npm:0.4.2" dependencies: - "@babel/helper-compilation-targets": ^7.17.7 - "@babel/helper-plugin-utils": ^7.16.7 + "@babel/helper-compilation-targets": ^7.22.6 + "@babel/helper-plugin-utils": ^7.22.5 debug: ^4.1.1 lodash.debounce: ^4.0.8 resolve: ^1.14.2 - semver: ^6.1.2 peerDependencies: - "@babel/core": ^7.4.0-0 - checksum: 8e3fe75513302e34f6d92bd67b53890e8545e6c5bca8fe757b9979f09d68d7e259f6daea90dc9e01e332c4f8781bda31c5fe551c82a277f9bc0bec007aed497c + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: 1f6dec0c5d0876d278fe15b71238eccc5f74c4e2efa2c78aaafa8bc2cc96336b8e68d94cd1a78497356c96e8b91b8c1f4452179820624d1702aee2f9832e6569 languageName: node linkType: hard -"@babel/helper-environment-visitor@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/helper-environment-visitor@npm:7.18.9" - checksum: b25101f6162ddca2d12da73942c08ad203d7668e06663df685634a8fde54a98bc015f6f62938e8554457a592a024108d45b8f3e651fd6dcdb877275b73cc4420 +"@babel/helper-environment-visitor@npm:^7.22.20, @babel/helper-environment-visitor@npm:^7.22.5": + version: 7.22.20 + resolution: "@babel/helper-environment-visitor@npm:7.22.20" + checksum: d80ee98ff66f41e233f36ca1921774c37e88a803b2f7dca3db7c057a5fea0473804db9fb6729e5dbfd07f4bed722d60f7852035c2c739382e84c335661590b69 languageName: node linkType: hard -"@babel/helper-explode-assignable-expression@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/helper-explode-assignable-expression@npm:7.18.6" +"@babel/helper-function-name@npm:^7.22.5, @babel/helper-function-name@npm:^7.23.0": + version: 7.23.0 + resolution: "@babel/helper-function-name@npm:7.23.0" dependencies: - "@babel/types": ^7.18.6 - checksum: 225cfcc3376a8799023d15dc95000609e9d4e7547b29528c7f7111a0e05493ffb12c15d70d379a0bb32d42752f340233c4115bded6d299bc0c3ab7a12be3d30f + "@babel/template": ^7.22.15 + "@babel/types": ^7.23.0 + checksum: e44542257b2d4634a1f979244eb2a4ad8e6d75eb6761b4cfceb56b562f7db150d134bc538c8e6adca3783e3bc31be949071527aa8e3aab7867d1ad2d84a26e10 languageName: node linkType: hard -"@babel/helper-function-name@npm:^7.18.9, @babel/helper-function-name@npm:^7.19.0, @babel/helper-function-name@npm:^7.21.0": - version: 7.21.0 - resolution: "@babel/helper-function-name@npm:7.21.0" +"@babel/helper-hoist-variables@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-hoist-variables@npm:7.22.5" dependencies: - "@babel/template": ^7.20.7 - "@babel/types": ^7.21.0 - checksum: d63e63c3e0e3e8b3138fa47b0cd321148a300ef12b8ee951196994dcd2a492cc708aeda94c2c53759a5c9177fffaac0fd8778791286746f72a000976968daf4e + "@babel/types": ^7.22.5 + checksum: 394ca191b4ac908a76e7c50ab52102669efe3a1c277033e49467913c7ed6f7c64d7eacbeabf3bed39ea1f41731e22993f763b1edce0f74ff8563fd1f380d92cc languageName: node linkType: hard -"@babel/helper-hoist-variables@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/helper-hoist-variables@npm:7.18.6" +"@babel/helper-member-expression-to-functions@npm:^7.22.15": + version: 7.23.0 + resolution: "@babel/helper-member-expression-to-functions@npm:7.23.0" dependencies: - "@babel/types": ^7.18.6 - checksum: fd9c35bb435fda802bf9ff7b6f2df06308a21277c6dec2120a35b09f9de68f68a33972e2c15505c1a1a04b36ec64c9ace97d4a9e26d6097b76b4396b7c5fa20f + "@babel/types": ^7.23.0 + checksum: 494659361370c979ada711ca685e2efe9460683c36db1b283b446122596602c901e291e09f2f980ecedfe6e0f2bd5386cb59768285446530df10c14df1024e75 languageName: node linkType: hard -"@babel/helper-member-expression-to-functions@npm:^7.20.7, @babel/helper-member-expression-to-functions@npm:^7.21.0": - version: 7.21.0 - resolution: "@babel/helper-member-expression-to-functions@npm:7.21.0" +"@babel/helper-module-imports@npm:^7.22.15, @babel/helper-module-imports@npm:^7.22.5": + version: 7.22.15 + resolution: "@babel/helper-module-imports@npm:7.22.15" dependencies: - "@babel/types": ^7.21.0 - checksum: 49cbb865098195fe82ba22da3a8fe630cde30dcd8ebf8ad5f9a24a2b685150c6711419879cf9d99b94dad24cff9244d8c2a890d3d7ec75502cd01fe58cff5b5d + "@babel/types": ^7.22.15 + checksum: ecd7e457df0a46f889228f943ef9b4a47d485d82e030676767e6a2fdcbdaa63594d8124d4b55fd160b41c201025aec01fc27580352b1c87a37c9c6f33d116702 languageName: node linkType: hard -"@babel/helper-module-imports@npm:^7.18.6, @babel/helper-module-imports@npm:^7.21.4": - version: 7.21.4 - resolution: "@babel/helper-module-imports@npm:7.21.4" +"@babel/helper-module-transforms@npm:^7.22.5, @babel/helper-module-transforms@npm:^7.23.0": + version: 7.23.0 + resolution: "@babel/helper-module-transforms@npm:7.23.0" dependencies: - "@babel/types": ^7.21.4 - checksum: bd330a2edaafeb281fbcd9357652f8d2666502567c0aad71db926e8499c773c9ea9c10dfaae30122452940326d90c8caff5c649ed8e1bf15b23f858758d3abc6 - languageName: node - linkType: hard - -"@babel/helper-module-transforms@npm:^7.18.6, @babel/helper-module-transforms@npm:^7.20.11, @babel/helper-module-transforms@npm:^7.21.2": - version: 7.21.2 - resolution: "@babel/helper-module-transforms@npm:7.21.2" - dependencies: - "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-module-imports": ^7.18.6 - "@babel/helper-simple-access": ^7.20.2 - "@babel/helper-split-export-declaration": ^7.18.6 - "@babel/helper-validator-identifier": ^7.19.1 - "@babel/template": ^7.20.7 - "@babel/traverse": ^7.21.2 - "@babel/types": ^7.21.2 - checksum: 8a1c129a4f90bdf97d8b6e7861732c9580f48f877aaaafbc376ce2482febebcb8daaa1de8bc91676d12886487603f8c62a44f9e90ee76d6cac7f9225b26a49e1 - languageName: node - linkType: hard - -"@babel/helper-optimise-call-expression@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/helper-optimise-call-expression@npm:7.18.6" - dependencies: - "@babel/types": ^7.18.6 - checksum: e518fe8418571405e21644cfb39cf694f30b6c47b10b006609a92469ae8b8775cbff56f0b19732343e2ea910641091c5a2dc73b56ceba04e116a33b0f8bd2fbd - languageName: node - linkType: hard - -"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.16.7, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.18.9, @babel/helper-plugin-utils@npm:^7.19.0, @babel/helper-plugin-utils@npm:^7.20.2, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3": - version: 7.20.2 - resolution: "@babel/helper-plugin-utils@npm:7.20.2" - checksum: f6cae53b7fdb1bf3abd50fa61b10b4470985b400cc794d92635da1e7077bb19729f626adc0741b69403d9b6e411cddddb9c0157a709cc7c4eeb41e663be5d74b - languageName: node - linkType: hard - -"@babel/helper-remap-async-to-generator@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/helper-remap-async-to-generator@npm:7.18.9" - dependencies: - "@babel/helper-annotate-as-pure": ^7.18.6 - "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-wrap-function": ^7.18.9 - "@babel/types": ^7.18.9 + "@babel/helper-environment-visitor": ^7.22.20 + "@babel/helper-module-imports": ^7.22.15 + "@babel/helper-simple-access": ^7.22.5 + "@babel/helper-split-export-declaration": ^7.22.6 + "@babel/helper-validator-identifier": ^7.22.20 peerDependencies: "@babel/core": ^7.0.0 - checksum: 4be6076192308671b046245899b703ba090dbe7ad03e0bea897bb2944ae5b88e5e85853c9d1f83f643474b54c578d8ac0800b80341a86e8538264a725fbbefec + checksum: 6e2afffb058cf3f8ce92f5116f710dda4341c81cfcd872f9a0197ea594f7ce0ab3cb940b0590af2fe99e60d2e5448bfba6bca8156ed70a2ed4be2adc8586c891 languageName: node linkType: hard -"@babel/helper-replace-supers@npm:^7.18.6, @babel/helper-replace-supers@npm:^7.20.7": - version: 7.20.7 - resolution: "@babel/helper-replace-supers@npm:7.20.7" +"@babel/helper-optimise-call-expression@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-optimise-call-expression@npm:7.22.5" dependencies: - "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-member-expression-to-functions": ^7.20.7 - "@babel/helper-optimise-call-expression": ^7.18.6 - "@babel/template": ^7.20.7 - "@babel/traverse": ^7.20.7 - "@babel/types": ^7.20.7 - checksum: b8e0087c9b0c1446e3c6f3f72b73b7e03559c6b570e2cfbe62c738676d9ebd8c369a708cf1a564ef88113b4330750a50232ee1131d303d478b7a5e65e46fbc7c + "@babel/types": ^7.22.5 + checksum: c70ef6cc6b6ed32eeeec4482127e8be5451d0e5282d5495d5d569d39eb04d7f1d66ec99b327f45d1d5842a9ad8c22d48567e93fc502003a47de78d122e355f7c languageName: node linkType: hard -"@babel/helper-simple-access@npm:^7.20.2": - version: 7.20.2 - resolution: "@babel/helper-simple-access@npm:7.20.2" +"@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.20.2, @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 + languageName: node + linkType: hard + +"@babel/helper-remap-async-to-generator@npm:^7.22.5, @babel/helper-remap-async-to-generator@npm:^7.22.9": + version: 7.22.20 + resolution: "@babel/helper-remap-async-to-generator@npm:7.22.20" dependencies: - "@babel/types": ^7.20.2 - checksum: ad1e96ee2e5f654ffee2369a586e5e8d2722bf2d8b028a121b4c33ebae47253f64d420157b9f0a8927aea3a9e0f18c0103e74fdd531815cf3650a0a4adca11a1 + "@babel/helper-annotate-as-pure": ^7.22.5 + "@babel/helper-environment-visitor": ^7.22.20 + "@babel/helper-wrap-function": ^7.22.20 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 2fe6300a6f1b58211dffa0aed1b45d4958506d096543663dba83bd9251fe8d670fa909143a65b45e72acb49e7e20fbdb73eae315d9ddaced467948c3329986e7 languageName: node linkType: hard -"@babel/helper-skip-transparent-expression-wrappers@npm:^7.20.0": - version: 7.20.0 - resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.20.0" +"@babel/helper-replace-supers@npm:^7.22.5, @babel/helper-replace-supers@npm:^7.22.9": + version: 7.22.20 + resolution: "@babel/helper-replace-supers@npm:7.22.20" dependencies: - "@babel/types": ^7.20.0 - checksum: 34da8c832d1c8a546e45d5c1d59755459ffe43629436707079989599b91e8c19e50e73af7a4bd09c95402d389266731b0d9c5f69e372d8ebd3a709c05c80d7dd + "@babel/helper-environment-visitor": ^7.22.20 + "@babel/helper-member-expression-to-functions": ^7.22.15 + "@babel/helper-optimise-call-expression": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: a0008332e24daedea2e9498733e3c39b389d6d4512637e000f96f62b797e702ee24a407ccbcd7a236a551590a38f31282829a8ef35c50a3c0457d88218cae639 languageName: node linkType: hard -"@babel/helper-split-export-declaration@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/helper-split-export-declaration@npm:7.18.6" +"@babel/helper-simple-access@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-simple-access@npm:7.22.5" dependencies: - "@babel/types": ^7.18.6 - checksum: c6d3dede53878f6be1d869e03e9ffbbb36f4897c7cc1527dc96c56d127d834ffe4520a6f7e467f5b6f3c2843ea0e81a7819d66ae02f707f6ac057f3d57943a2b + "@babel/types": ^7.22.5 + checksum: fe9686714caf7d70aedb46c3cce090f8b915b206e09225f1e4dbc416786c2fdbbee40b38b23c268b7ccef749dd2db35f255338fb4f2444429874d900dede5ad2 languageName: node linkType: hard -"@babel/helper-string-parser@npm:^7.19.4": - version: 7.19.4 - resolution: "@babel/helper-string-parser@npm:7.19.4" - checksum: b2f8a3920b30dfac81ec282ac4ad9598ea170648f8254b10f475abe6d944808fb006aab325d3eb5a8ad3bea8dfa888cfa6ef471050dae5748497c110ec060943 - languageName: node - linkType: hard - -"@babel/helper-validator-identifier@npm:^7.18.6, @babel/helper-validator-identifier@npm:^7.19.1": - version: 7.19.1 - resolution: "@babel/helper-validator-identifier@npm:7.19.1" - checksum: 0eca5e86a729162af569b46c6c41a63e18b43dbe09fda1d2a3c8924f7d617116af39cac5e4cd5d431bb760b4dca3c0970e0c444789b1db42bcf1fa41fbad0a3a - languageName: node - linkType: hard - -"@babel/helper-validator-option@npm:^7.18.6, @babel/helper-validator-option@npm:^7.21.0": - version: 7.21.0 - resolution: "@babel/helper-validator-option@npm:7.21.0" - checksum: 8ece4c78ffa5461fd8ab6b6e57cc51afad59df08192ed5d84b475af4a7193fc1cb794b59e3e7be64f3cdc4df7ac78bf3dbb20c129d7757ae078e6279ff8c2f07 - languageName: node - linkType: hard - -"@babel/helper-wrap-function@npm:^7.18.9": - version: 7.20.5 - resolution: "@babel/helper-wrap-function@npm:7.20.5" +"@babel/helper-skip-transparent-expression-wrappers@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.22.5" dependencies: - "@babel/helper-function-name": ^7.19.0 - "@babel/template": ^7.18.10 - "@babel/traverse": ^7.20.5 - "@babel/types": ^7.20.5 - checksum: 11a6fc28334368a193a9cb3ad16f29cd7603bab958433efc82ebe59fa6556c227faa24f07ce43983f7a85df826f71d441638442c4315e90a554fe0a70ca5005b + "@babel/types": ^7.22.5 + checksum: 1012ef2295eb12dc073f2b9edf3425661e9b8432a3387e62a8bc27c42963f1f216ab3124228015c748770b2257b4f1fda882ca8fa34c0bf485e929ae5bc45244 languageName: node linkType: hard -"@babel/helpers@npm:^7.21.0": - version: 7.21.0 - resolution: "@babel/helpers@npm:7.21.0" +"@babel/helper-split-export-declaration@npm:^7.22.6": + version: 7.22.6 + resolution: "@babel/helper-split-export-declaration@npm:7.22.6" dependencies: - "@babel/template": ^7.20.7 - "@babel/traverse": ^7.21.0 - "@babel/types": ^7.21.0 - checksum: 9370dad2bb665c551869a08ac87c8bdafad53dbcdce1f5c5d498f51811456a3c005d9857562715151a0f00b2e912ac8d89f56574f837b5689f5f5072221cdf54 + "@babel/types": ^7.22.5 + checksum: e141cace583b19d9195f9c2b8e17a3ae913b7ee9b8120246d0f9ca349ca6f03cb2c001fd5ec57488c544347c0bb584afec66c936511e447fd20a360e591ac921 languageName: node linkType: hard -"@babel/highlight@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/highlight@npm:7.18.6" +"@babel/helper-string-parser@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-string-parser@npm:7.22.5" + checksum: 836851ca5ec813077bbb303acc992d75a360267aa3b5de7134d220411c852a6f17de7c0d0b8c8dcc0f567f67874c00f4528672b2a4f1bc978a3ada64c8c78467 + languageName: node + linkType: hard + +"@babel/helper-validator-identifier@npm:^7.22.20": + version: 7.22.20 + resolution: "@babel/helper-validator-identifier@npm:7.22.20" + checksum: 136412784d9428266bcdd4d91c32bcf9ff0e8d25534a9d94b044f77fe76bc50f941a90319b05aafd1ec04f7d127cd57a179a3716009ff7f3412ef835ada95bdc + languageName: node + linkType: hard + +"@babel/helper-validator-option@npm:^7.22.15": + version: 7.22.15 + resolution: "@babel/helper-validator-option@npm:7.22.15" + checksum: 68da52b1e10002a543161494c4bc0f4d0398c8fdf361d5f7f4272e95c45d5b32d974896d44f6a0ea7378c9204988879d73613ca683e13bd1304e46d25ff67a8d + languageName: node + linkType: hard + +"@babel/helper-wrap-function@npm:^7.22.20": + version: 7.22.20 + resolution: "@babel/helper-wrap-function@npm:7.22.20" dependencies: - "@babel/helper-validator-identifier": ^7.18.6 - chalk: ^2.0.0 + "@babel/helper-function-name": ^7.22.5 + "@babel/template": ^7.22.15 + "@babel/types": ^7.22.19 + checksum: 221ed9b5572612aeb571e4ce6a256f2dee85b3c9536f1dd5e611b0255e5f59a3d0ec392d8d46d4152149156a8109f92f20379b1d6d36abb613176e0e33f05fca + languageName: node + linkType: hard + +"@babel/helpers@npm:^7.23.0": + version: 7.23.1 + resolution: "@babel/helpers@npm:7.23.1" + dependencies: + "@babel/template": ^7.22.15 + "@babel/traverse": ^7.23.0 + "@babel/types": ^7.23.0 + checksum: acfc345102045c24ea2a4d60e00dcf8220e215af3add4520e2167700661338e6a80bd56baf44bb764af05ec6621101c9afc315dc107e18c61fa6da8acbdbb893 + languageName: node + linkType: hard + +"@babel/highlight@npm:^7.22.13": + version: 7.22.20 + resolution: "@babel/highlight@npm:7.22.20" + dependencies: + "@babel/helper-validator-identifier": ^7.22.20 + chalk: ^2.4.2 js-tokens: ^4.0.0 - checksum: 92d8ee61549de5ff5120e945e774728e5ccd57fd3b2ed6eace020ec744823d4a98e242be1453d21764a30a14769ecd62170fba28539b211799bbaf232bbb2789 + checksum: 84bd034dca309a5e680083cd827a766780ca63cef37308404f17653d32366ea76262bd2364b2d38776232f2d01b649f26721417d507e8b4b6da3e4e739f6d134 languageName: node linkType: hard -"@babel/parser@npm:^7.20.7, @babel/parser@npm:^7.21.2, @babel/parser@npm:^7.21.4": - version: 7.21.4 - resolution: "@babel/parser@npm:7.21.4" +"@babel/parser@npm:^7.22.15, @babel/parser@npm:^7.22.7, @babel/parser@npm:^7.23.0": + version: 7.23.0 + resolution: "@babel/parser@npm:7.23.0" bin: parser: ./bin/babel-parser.js - checksum: de610ecd1bff331766d0c058023ca11a4f242bfafefc42caf926becccfb6756637d167c001987ca830dd4b34b93c629a4cef63f8c8c864a8564cdfde1989ac77 + checksum: 453fdf8b9e2c2b7d7b02139e0ce003d1af21947bbc03eb350fb248ee335c9b85e4ab41697ddbdd97079698de825a265e45a0846bb2ed47a2c7c1df833f42a354 languageName: node linkType: hard -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.18.6" +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.22.15": + version: 7.22.15 + resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.22.15" dependencies: - "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-plugin-utils": ^7.22.5 peerDependencies: "@babel/core": ^7.0.0 - checksum: 845bd280c55a6a91d232cfa54eaf9708ec71e594676fe705794f494bb8b711d833b752b59d1a5c154695225880c23dbc9cab0e53af16fd57807976cd3ff41b8d + checksum: 8910ca21a7ec7c06f7b247d4b86c97c5aa15ef321518f44f6f490c5912fdf82c605aaa02b90892e375d82ccbedeadfdeadd922c1b836c9dd4c596871bf654753 languageName: node linkType: hard -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.20.7": - version: 7.20.7 - resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.20.7" +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.22.15": + version: 7.22.15 + resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.22.15" dependencies: - "@babel/helper-plugin-utils": ^7.20.2 - "@babel/helper-skip-transparent-expression-wrappers": ^7.20.0 - "@babel/plugin-proposal-optional-chaining": ^7.20.7 + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/helper-skip-transparent-expression-wrappers": ^7.22.5 + "@babel/plugin-transform-optional-chaining": ^7.22.15 peerDependencies: "@babel/core": ^7.13.0 - checksum: d610f532210bee5342f5b44a12395ccc6d904e675a297189bc1e401cc185beec09873da523466d7fec34ae1574f7a384235cba1ccc9fe7b89ba094167897c845 + checksum: fbefedc0da014c37f1a50a8094ce7dbbf2181ae93243f23d6ecba2499b5b20196c2124d6a4dfe3e9e0125798e80593103e456352a4beb4e5c6f7c75efb80fdac languageName: node linkType: hard -"@babel/plugin-proposal-async-generator-functions@npm:^7.20.7": - version: 7.20.7 - resolution: "@babel/plugin-proposal-async-generator-functions@npm:7.20.7" - dependencies: - "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-plugin-utils": ^7.20.2 - "@babel/helper-remap-async-to-generator": ^7.18.9 - "@babel/plugin-syntax-async-generators": ^7.8.4 +"@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" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 111109ee118c9e69982f08d5e119eab04190b36a0f40e22e873802d941956eee66d2aa5a15f5321e51e3f9aa70a91136451b987fe15185ef8cc547ac88937723 - languageName: node - linkType: hard - -"@babel/plugin-proposal-class-properties@npm:^7.18.6": - 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-class-static-block@npm:^7.21.0": - version: 7.21.0 - resolution: "@babel/plugin-proposal-class-static-block@npm:7.21.0" - dependencies: - "@babel/helper-create-class-features-plugin": ^7.21.0 - "@babel/helper-plugin-utils": ^7.20.2 - "@babel/plugin-syntax-class-static-block": ^7.14.5 - peerDependencies: - "@babel/core": ^7.12.0 - checksum: 236c0ad089e7a7acab776cc1d355330193314bfcd62e94e78f2df35817c6144d7e0e0368976778afd6b7c13e70b5068fa84d7abbf967d4f182e60d03f9ef802b - languageName: node - linkType: hard - -"@babel/plugin-proposal-dynamic-import@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-proposal-dynamic-import@npm:7.18.6" - dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - "@babel/plugin-syntax-dynamic-import": ^7.8.3 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 96b1c8a8ad8171d39e9ab106be33bde37ae09b22fb2c449afee9a5edf3c537933d79d963dcdc2694d10677cb96da739cdf1b53454e6a5deab9801f28a818bb2f - languageName: node - linkType: hard - -"@babel/plugin-proposal-export-namespace-from@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/plugin-proposal-export-namespace-from@npm:7.18.9" - dependencies: - "@babel/helper-plugin-utils": ^7.18.9 - "@babel/plugin-syntax-export-namespace-from": ^7.8.3 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 84ff22bacc5d30918a849bfb7e0e90ae4c5b8d8b65f2ac881803d1cf9068dffbe53bd657b0e4bc4c20b4db301b1c85f1e74183cf29a0dd31e964bd4e97c363ef - languageName: node - linkType: hard - -"@babel/plugin-proposal-json-strings@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-proposal-json-strings@npm:7.18.6" - dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - "@babel/plugin-syntax-json-strings": ^7.8.3 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 25ba0e6b9d6115174f51f7c6787e96214c90dd4026e266976b248a2ed417fe50fddae72843ffb3cbe324014a18632ce5648dfac77f089da858022b49fd608cb3 - languageName: node - linkType: hard - -"@babel/plugin-proposal-logical-assignment-operators@npm:^7.20.7": - version: 7.20.7 - resolution: "@babel/plugin-proposal-logical-assignment-operators@npm:7.20.7" - dependencies: - "@babel/helper-plugin-utils": ^7.20.2 - "@babel/plugin-syntax-logical-assignment-operators": ^7.10.4 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: cdd7b8136cc4db3f47714d5266f9e7b592a2ac5a94a5878787ce08890e97c8ab1ca8e94b27bfeba7b0f2b1549a026d9fc414ca2196de603df36fb32633bbdc19 - languageName: node - linkType: hard - -"@babel/plugin-proposal-nullish-coalescing-operator@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-proposal-nullish-coalescing-operator@npm:7.18.6" - dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 949c9ddcdecdaec766ee610ef98f965f928ccc0361dd87cf9f88cf4896a6ccd62fce063d4494778e50da99dea63d270a1be574a62d6ab81cbe9d85884bf55a7d - languageName: node - linkType: hard - -"@babel/plugin-proposal-numeric-separator@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-proposal-numeric-separator@npm:7.18.6" - dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - "@babel/plugin-syntax-numeric-separator": ^7.10.4 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: f370ea584c55bf4040e1f78c80b4eeb1ce2e6aaa74f87d1a48266493c33931d0b6222d8cee3a082383d6bb648ab8d6b7147a06f974d3296ef3bc39c7851683ec - languageName: node - linkType: hard - -"@babel/plugin-proposal-object-rest-spread@npm:^7.20.7": - version: 7.20.7 - resolution: "@babel/plugin-proposal-object-rest-spread@npm:7.20.7" - dependencies: - "@babel/compat-data": ^7.20.5 - "@babel/helper-compilation-targets": ^7.20.7 - "@babel/helper-plugin-utils": ^7.20.2 - "@babel/plugin-syntax-object-rest-spread": ^7.8.3 - "@babel/plugin-transform-parameters": ^7.20.7 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 1329db17009964bc644484c660eab717cb3ca63ac0ab0f67c651a028d1bc2ead51dc4064caea283e46994f1b7221670a35cbc0b4beb6273f55e915494b5aa0b2 - languageName: node - linkType: hard - -"@babel/plugin-proposal-optional-catch-binding@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-proposal-optional-catch-binding@npm:7.18.6" - dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - "@babel/plugin-syntax-optional-catch-binding": ^7.8.3 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 7b5b39fb5d8d6d14faad6cb68ece5eeb2fd550fb66b5af7d7582402f974f5bc3684641f7c192a5a57e0f59acfae4aada6786be1eba030881ddc590666eff4d1e - languageName: node - linkType: hard - -"@babel/plugin-proposal-optional-chaining@npm:^7.20.7, @babel/plugin-proposal-optional-chaining@npm:^7.21.0": - version: 7.21.0 - resolution: "@babel/plugin-proposal-optional-chaining@npm:7.21.0" - dependencies: - "@babel/helper-plugin-utils": ^7.20.2 - "@babel/helper-skip-transparent-expression-wrappers": ^7.20.0 - "@babel/plugin-syntax-optional-chaining": ^7.8.3 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 11c5449e01b18bb8881e8e005a577fa7be2fe5688e2382c8822d51f8f7005342a301a46af7b273b1f5645f9a7b894c428eee8526342038a275ef6ba4c8d8d746 - languageName: node - linkType: hard - -"@babel/plugin-proposal-private-methods@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-proposal-private-methods@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: 22d8502ee96bca99ad2c8393e8493e2b8d4507576dd054490fd8201a36824373440106f5b098b6d821b026c7e72b0424ff4aeca69ed5f42e48f029d3a156d5ad - languageName: node - linkType: hard - -"@babel/plugin-proposal-private-property-in-object@npm:^7.21.0": - version: 7.21.0 - resolution: "@babel/plugin-proposal-private-property-in-object@npm:7.21.0" - dependencies: - "@babel/helper-annotate-as-pure": ^7.18.6 - "@babel/helper-create-class-features-plugin": ^7.21.0 - "@babel/helper-plugin-utils": ^7.20.2 - "@babel/plugin-syntax-private-property-in-object": ^7.14.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: add881a6a836635c41d2710551fdf777e2c07c0b691bf2baacc5d658dd64107479df1038680d6e67c468bfc6f36fb8920025d6bac2a1df0a81b867537d40ae78 - languageName: node - linkType: hard - -"@babel/plugin-proposal-unicode-property-regex@npm:^7.18.6, @babel/plugin-proposal-unicode-property-regex@npm:^7.4.4": - version: 7.18.6 - resolution: "@babel/plugin-proposal-unicode-property-regex@npm:7.18.6" - dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.18.6 - "@babel/helper-plugin-utils": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: a8575ecb7ff24bf6c6e94808d5c84bb5a0c6dd7892b54f09f4646711ba0ee1e1668032b3c43e3e1dfec2c5716c302e851ac756c1645e15882d73df6ad21ae951 + checksum: d97745d098b835d55033ff3a7fb2b895b9c5295b08a5759e4f20df325aa385a3e0bc9bd5ad8f2ec554a44d4e6525acfc257b8c5848a1345cb40f26a30e277e91 languageName: node linkType: hard @@ -785,14 +606,36 @@ __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" +"@babel/plugin-syntax-import-assertions@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-syntax-import-assertions@npm:7.22.5" dependencies: - "@babel/helper-plugin-utils": ^7.19.0 + "@babel/helper-plugin-utils": ^7.22.5 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 6a86220e0aae40164cd3ffaf80e7c076a1be02a8f3480455dddbae05fda8140f429290027604df7a11b3f3f124866e8a6d69dbfa1dda61ee7377b920ad144d5b + checksum: 2b8b5572db04a7bef1e6cd20debf447e4eef7cb012616f5eceb8fa3e23ce469b8f76ee74fd6d1e158ba17a8f58b0aec579d092fb67c5a30e83ccfbc5754916c1 + languageName: node + linkType: hard + +"@babel/plugin-syntax-import-attributes@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-syntax-import-attributes@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 197b3c5ea2a9649347f033342cb222ab47f4645633695205c0250c6bf2af29e643753b8bb24a2db39948bef08e7c540babfd365591eb57fc110cb30b425ffc47 + languageName: node + linkType: hard + +"@babel/plugin-syntax-import-meta@npm:^7.10.4": + version: 7.10.4 + resolution: "@babel/plugin-syntax-import-meta@npm:7.10.4" + dependencies: + "@babel/helper-plugin-utils": ^7.10.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 166ac1125d10b9c0c430e4156249a13858c0366d38844883d75d27389621ebe651115cb2ceb6dc011534d5055719fa1727b59f39e1ab3ca97820eef3dcab5b9b languageName: node linkType: hard @@ -807,14 +650,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-jsx@npm:^7.18.6, @babel/plugin-syntax-jsx@npm:^7.21.4": - version: 7.21.4 - resolution: "@babel/plugin-syntax-jsx@npm:7.21.4" +"@babel/plugin-syntax-jsx@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-syntax-jsx@npm:7.22.5" dependencies: - "@babel/helper-plugin-utils": ^7.20.2 + "@babel/helper-plugin-utils": ^7.22.5 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: bb7309402a1d4e155f32aa0cf216e1fa8324d6c4cfd248b03280028a015a10e46b6efd6565f515f8913918a3602b39255999c06046f7d4b8a5106be2165d724a + checksum: 8829d30c2617ab31393d99cec2978e41f014f4ac6f01a1cecf4c4dd8320c3ec12fdc3ce121126b2d8d32f6887e99ca1a0bad53dedb1e6ad165640b92b24980ce languageName: node linkType: hard @@ -906,291 +749,480 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-typescript@npm:^7.20.0": - version: 7.20.0 - resolution: "@babel/plugin-syntax-typescript@npm:7.20.0" +"@babel/plugin-syntax-typescript@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-syntax-typescript@npm:7.22.5" dependencies: - "@babel/helper-plugin-utils": ^7.19.0 + "@babel/helper-plugin-utils": ^7.22.5 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 6189c0b5c32ba3c9a80a42338bd50719d783b20ef29b853d4f03929e971913d3cefd80184e924ae98ad6db09080be8fe6f1ffde9a6db8972523234f0274d36f7 + checksum: 8ab7718fbb026d64da93681a57797d60326097fd7cb930380c8bffd9eb101689e90142c760a14b51e8e69c88a73ba3da956cb4520a3b0c65743aee5c71ef360a languageName: node linkType: hard -"@babel/plugin-transform-arrow-functions@npm:^7.20.7": - version: 7.20.7 - resolution: "@babel/plugin-transform-arrow-functions@npm:7.20.7" - dependencies: - "@babel/helper-plugin-utils": ^7.20.2 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: b43cabe3790c2de7710abe32df9a30005eddb2050dadd5d122c6872f679e5710e410f1b90c8f99a2aff7b614cccfecf30e7fd310236686f60d3ed43fd80b9847 - languageName: node - linkType: hard - -"@babel/plugin-transform-async-to-generator@npm:^7.20.7": - version: 7.20.7 - resolution: "@babel/plugin-transform-async-to-generator@npm:7.20.7" - dependencies: - "@babel/helper-module-imports": ^7.18.6 - "@babel/helper-plugin-utils": ^7.20.2 - "@babel/helper-remap-async-to-generator": ^7.18.9 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: fe9ee8a5471b4317c1b9ea92410ace8126b52a600d7cfbfe1920dcac6fb0fad647d2e08beb4fd03c630eb54430e6c72db11e283e3eddc49615c68abd39430904 - languageName: node - linkType: hard - -"@babel/plugin-transform-block-scoped-functions@npm:^7.18.6": +"@babel/plugin-syntax-unicode-sets-regex@npm:^7.18.6": version: 7.18.6 - resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.18.6" - dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 0a0df61f94601e3666bf39f2cc26f5f7b22a94450fb93081edbed967bd752ce3f81d1227fefd3799f5ee2722171b5e28db61379234d1bb85b6ec689589f99d7e - languageName: node - linkType: hard - -"@babel/plugin-transform-block-scoping@npm:^7.21.0": - version: 7.21.0 - resolution: "@babel/plugin-transform-block-scoping@npm:7.21.0" - dependencies: - "@babel/helper-plugin-utils": ^7.20.2 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 15aacaadbecf96b53a750db1be4990b0d89c7f5bc3e1794b63b49fb219638c1fd25d452d15566d7e5ddf5b5f4e1a0a0055c35c1c7aee323c7b114bf49f66f4b0 - languageName: node - linkType: hard - -"@babel/plugin-transform-classes@npm:^7.21.0": - version: 7.21.0 - resolution: "@babel/plugin-transform-classes@npm:7.21.0" - dependencies: - "@babel/helper-annotate-as-pure": ^7.18.6 - "@babel/helper-compilation-targets": ^7.20.7 - "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-function-name": ^7.21.0 - "@babel/helper-optimise-call-expression": ^7.18.6 - "@babel/helper-plugin-utils": ^7.20.2 - "@babel/helper-replace-supers": ^7.20.7 - "@babel/helper-split-export-declaration": ^7.18.6 - globals: ^11.1.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 088ae152074bd0e90f64659169255bfe50393e637ec8765cb2a518848b11b0299e66b91003728fd0a41563a6fdc6b8d548ece698a314fd5447f5489c22e466b7 - languageName: node - linkType: hard - -"@babel/plugin-transform-computed-properties@npm:^7.20.7": - version: 7.20.7 - resolution: "@babel/plugin-transform-computed-properties@npm:7.20.7" - dependencies: - "@babel/helper-plugin-utils": ^7.20.2 - "@babel/template": ^7.20.7 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: be70e54bda8b469146459f429e5f2bd415023b87b2d5af8b10e48f465ffb02847a3ed162ca60378c004b82db848e4d62e90010d41ded7e7176b6d8d1c2911139 - languageName: node - linkType: hard - -"@babel/plugin-transform-destructuring@npm:^7.21.3": - version: 7.21.3 - resolution: "@babel/plugin-transform-destructuring@npm:7.21.3" - dependencies: - "@babel/helper-plugin-utils": ^7.20.2 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 43ebbe0bfa20287e34427be7c2200ce096c20913775ea75268fb47fe0e55f9510800587e6052c42fe6dffa0daaad95dd465c3e312fd1ef9785648384c45417ac - languageName: node - linkType: hard - -"@babel/plugin-transform-dotall-regex@npm:^7.18.6, @babel/plugin-transform-dotall-regex@npm:^7.4.4": - version: 7.18.6 - resolution: "@babel/plugin-transform-dotall-regex@npm:7.18.6" + resolution: "@babel/plugin-syntax-unicode-sets-regex@npm:7.18.6" dependencies: "@babel/helper-create-regexp-features-plugin": ^7.18.6 "@babel/helper-plugin-utils": ^7.18.6 peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: cbe5d7063eb8f8cca24cd4827bc97f5641166509e58781a5f8aa47fb3d2d786ce4506a30fca2e01f61f18792783a5cb5d96bf5434c3dd1ad0de8c9cc625a53da + "@babel/core": ^7.0.0 + checksum: a651d700fe63ff0ddfd7186f4ebc24447ca734f114433139e3c027bc94a900d013cf1ef2e2db8430425ba542e39ae160c3b05f06b59fd4656273a3df97679e9c languageName: node linkType: hard -"@babel/plugin-transform-duplicate-keys@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/plugin-transform-duplicate-keys@npm:7.18.9" +"@babel/plugin-transform-arrow-functions@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-arrow-functions@npm:7.22.5" dependencies: - "@babel/helper-plugin-utils": ^7.18.9 + "@babel/helper-plugin-utils": ^7.22.5 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 220bf4a9fec5c4d4a7b1de38810350260e8ea08481bf78332a464a21256a95f0df8cd56025f346238f09b04f8e86d4158fafc9f4af57abaef31637e3b58bd4fe + checksum: 35abb6c57062802c7ce8bd96b2ef2883e3124370c688bbd67609f7d2453802fb73944df8808f893b6c67de978eb2bcf87bbfe325e46d6f39b5fcb09ece11d01a languageName: node linkType: hard -"@babel/plugin-transform-exponentiation-operator@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.18.6" +"@babel/plugin-transform-async-generator-functions@npm:^7.22.15": + version: 7.22.15 + resolution: "@babel/plugin-transform-async-generator-functions@npm:7.22.15" dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor": ^7.18.6 - "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-environment-visitor": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/helper-remap-async-to-generator": ^7.22.9 + "@babel/plugin-syntax-async-generators": ^7.8.4 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 7f70222f6829c82a36005508d34ddbe6fd0974ae190683a8670dd6ff08669aaf51fef2209d7403f9bd543cb2d12b18458016c99a6ed0332ccedb3ea127b01229 + checksum: fad98786b446ce63bde0d14a221e2617eef5a7bbca62b49d96f16ab5e1694521234cfba6145b830fbf9af16d60a8a3dbf148e8694830bd91796fe333b0599e73 languageName: node linkType: hard -"@babel/plugin-transform-for-of@npm:^7.21.0": - version: 7.21.0 - resolution: "@babel/plugin-transform-for-of@npm:7.21.0" +"@babel/plugin-transform-async-to-generator@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-async-to-generator@npm:7.22.5" dependencies: - "@babel/helper-plugin-utils": ^7.20.2 + "@babel/helper-module-imports": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/helper-remap-async-to-generator": ^7.22.5 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2f3f86ca1fab2929fcda6a87e4303d5c635b5f96dc9a45fd4ca083308a3020c79ac33b9543eb4640ef2b79f3586a00ab2d002a7081adb9e9d7440dce30781034 + checksum: b95f23f99dcb379a9f0a1c2a3bbea3f8dc0e1b16dc1ac8b484fe378370169290a7a63d520959a9ba1232837cf74a80e23f6facbe14fd42a3cda6d3c2d7168e62 languageName: node linkType: hard -"@babel/plugin-transform-function-name@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/plugin-transform-function-name@npm:7.18.9" +"@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: - "@babel/helper-compilation-targets": ^7.18.9 - "@babel/helper-function-name": ^7.18.9 - "@babel/helper-plugin-utils": ^7.18.9 + "@babel/helper-plugin-utils": ^7.22.5 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 62dd9c6cdc9714704efe15545e782ee52d74dc73916bf954b4d3bee088fb0ec9e3c8f52e751252433656c09f744b27b757fc06ed99bcde28e8a21600a1d8e597 + checksum: 416b1341858e8ca4e524dee66044735956ced5f478b2c3b9bc11ec2285b0c25d7dbb96d79887169eb938084c95d0a89338c8b2fe70d473bd9dc92e5d9db1732c languageName: node linkType: hard -"@babel/plugin-transform-literals@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/plugin-transform-literals@npm:7.18.9" +"@babel/plugin-transform-block-scoping@npm:^7.22.15": + version: 7.23.0 + resolution: "@babel/plugin-transform-block-scoping@npm:7.23.0" dependencies: - "@babel/helper-plugin-utils": ^7.18.9 + "@babel/helper-plugin-utils": ^7.22.5 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 3458dd2f1a47ac51d9d607aa18f3d321cbfa8560a985199185bed5a906bb0c61ba85575d386460bac9aed43fdd98940041fae5a67dff286f6f967707cff489f8 + checksum: 0cfe925cc3b5a3ad407e2253fab3ceeaa117a4b291c9cb245578880872999bca91bd83ffa0128ae9ca356330702e1ef1dcb26804f28d2cef678239caf629f73e languageName: node linkType: hard -"@babel/plugin-transform-member-expression-literals@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-member-expression-literals@npm:7.18.6" +"@babel/plugin-transform-class-properties@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-class-properties@npm:7.22.5" dependencies: - "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-create-class-features-plugin": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 35a3d04f6693bc6b298c05453d85ee6e41cc806538acb6928427e0e97ae06059f97d2f07d21495fcf5f70d3c13a242e2ecbd09d5c1fcb1b1a73ff528dcb0b695 + checksum: b830152dfc2ff2f647f0abe76e6251babdfbef54d18c4b2c73a6bf76b1a00050a5d998dac80dc901a48514e95604324943a9dd39317073fe0928b559e0e0c579 languageName: node linkType: hard -"@babel/plugin-transform-modules-amd@npm:^7.20.11": - version: 7.20.11 - resolution: "@babel/plugin-transform-modules-amd@npm:7.20.11" +"@babel/plugin-transform-class-static-block@npm:^7.22.11": + version: 7.22.11 + resolution: "@babel/plugin-transform-class-static-block@npm:7.22.11" dependencies: - "@babel/helper-module-transforms": ^7.20.11 - "@babel/helper-plugin-utils": ^7.20.2 + "@babel/helper-create-class-features-plugin": ^7.22.11 + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/plugin-syntax-class-static-block": ^7.14.5 + peerDependencies: + "@babel/core": ^7.12.0 + checksum: 69f040506fad66f1c6918d288d0e0edbc5c8a07c8b4462c1184ad2f9f08995d68b057126c213871c0853ae0c72afc60ec87492049dfacb20902e32346a448bcb + languageName: node + linkType: hard + +"@babel/plugin-transform-classes@npm:^7.22.15": + version: 7.22.15 + resolution: "@babel/plugin-transform-classes@npm:7.22.15" + dependencies: + "@babel/helper-annotate-as-pure": ^7.22.5 + "@babel/helper-compilation-targets": ^7.22.15 + "@babel/helper-environment-visitor": ^7.22.5 + "@babel/helper-function-name": ^7.22.5 + "@babel/helper-optimise-call-expression": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/helper-replace-supers": ^7.22.9 + "@babel/helper-split-export-declaration": ^7.22.6 + globals: ^11.1.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 23665c1c20c8f11c89382b588fb9651c0756d130737a7625baeaadbd3b973bc5bfba1303bedffa8fb99db1e6d848afb01016e1df2b69b18303e946890c790001 + checksum: d3f4d0c107dd8a3557ea3575cc777fab27efa92958b41e4a9822f7499725c1f554beae58855de16ddec0a7b694e45f59a26cea8fbde4275563f72f09c6e039a0 languageName: node linkType: hard -"@babel/plugin-transform-modules-commonjs@npm:^7.21.2": - version: 7.21.2 - resolution: "@babel/plugin-transform-modules-commonjs@npm:7.21.2" +"@babel/plugin-transform-computed-properties@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-computed-properties@npm:7.22.5" dependencies: - "@babel/helper-module-transforms": ^7.21.2 - "@babel/helper-plugin-utils": ^7.20.2 - "@babel/helper-simple-access": ^7.20.2 + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/template": ^7.22.5 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 65aa06e3e3792f39b99eb5f807034693ff0ecf80438580f7ae504f4c4448ef04147b1889ea5e6f60f3ad4a12ebbb57c6f1f979a249dadbd8d11fe22f4441918b + checksum: c2a77a0f94ec71efbc569109ec14ea2aa925b333289272ced8b33c6108bdbb02caf01830ffc7e49486b62dec51911924d13f3a76f1149f40daace1898009e131 languageName: node linkType: hard -"@babel/plugin-transform-modules-systemjs@npm:^7.20.11": - version: 7.20.11 - resolution: "@babel/plugin-transform-modules-systemjs@npm:7.20.11" +"@babel/plugin-transform-destructuring@npm:^7.22.15": + version: 7.23.0 + resolution: "@babel/plugin-transform-destructuring@npm:7.23.0" dependencies: - "@babel/helper-hoist-variables": ^7.18.6 - "@babel/helper-module-transforms": ^7.20.11 - "@babel/helper-plugin-utils": ^7.20.2 - "@babel/helper-validator-identifier": ^7.19.1 + "@babel/helper-plugin-utils": ^7.22.5 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 4546c47587f88156d66c7eb7808e903cf4bb3f6ba6ac9bc8e3af2e29e92eb9f0b3f44d52043bfd24eb25fa7827fd7b6c8bfeac0cac7584e019b87e1ecbd0e673 + checksum: cd6dd454ccc2766be551e4f8a04b1acc2aa539fa19e5c7501c56cc2f8cc921dd41a7ffb78455b4c4b2f954fcab8ca4561ba7c9c7bd5af9f19465243603d18cc3 languageName: node linkType: hard -"@babel/plugin-transform-modules-umd@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-modules-umd@npm:7.18.6" +"@babel/plugin-transform-dotall-regex@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-dotall-regex@npm:7.22.5" dependencies: - "@babel/helper-module-transforms": ^7.18.6 - "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-create-regexp-features-plugin": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: c3b6796c6f4579f1ba5ab0cdcc73910c1e9c8e1e773c507c8bb4da33072b3ae5df73c6d68f9126dab6e99c24ea8571e1563f8710d7c421fac1cde1e434c20153 + checksum: 409b658d11e3082c8f69e9cdef2d96e4d6d11256f005772425fb230cc48fd05945edbfbcb709dab293a1a2f01f9c8a5bb7b4131e632b23264039d9f95864b453 languageName: node linkType: hard -"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.20.5": - version: 7.20.5 - resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.20.5" +"@babel/plugin-transform-duplicate-keys@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-duplicate-keys@npm:7.22.5" dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.20.5 - "@babel/helper-plugin-utils": ^7.20.2 + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: bb1280fbabaab6fab2ede585df34900712698210a3bd413f4df5bae6d8c24be36b496c92722ae676a7a67d060a4624f4d6c23b923485f906bfba8773c69f55b4 + languageName: node + linkType: hard + +"@babel/plugin-transform-dynamic-import@npm:^7.22.11": + version: 7.22.11 + resolution: "@babel/plugin-transform-dynamic-import@npm:7.22.11" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/plugin-syntax-dynamic-import": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 78fc9c532210bf9e8f231747f542318568ac360ee6c27e80853962c984283c73da3f8f8aebe83c2096090a435b356b092ed85de617a156cbe0729d847632be45 + languageName: node + linkType: hard + +"@babel/plugin-transform-exponentiation-operator@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.22.5" + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: f2d660c1b1d51ad5fec1cd5ad426a52187204068c4158f8c4aa977b31535c61b66898d532603eef21c15756827be8277f724c869b888d560f26d7fe848bb5eae + languageName: node + linkType: hard + +"@babel/plugin-transform-export-namespace-from@npm:^7.22.11": + version: 7.22.11 + resolution: "@babel/plugin-transform-export-namespace-from@npm:7.22.11" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/plugin-syntax-export-namespace-from": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 73af5883a321ed56a4bfd43c8a7de0164faebe619287706896fc6ee2f7a4e69042adaa1338c0b8b4bdb9f7e5fdceb016fb1d40694cb43ca3b8827429e8aac4bf + languageName: node + linkType: hard + +"@babel/plugin-transform-for-of@npm:^7.22.15": + version: 7.22.15 + resolution: "@babel/plugin-transform-for-of@npm:7.22.15" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: f395ae7bce31e14961460f56cf751b5d6e37dd27d7df5b1f4e49fec1c11b6f9cf71991c7ffbe6549878591e87df0d66af798cf26edfa4bfa6b4c3dba1fb2f73a + languageName: node + linkType: hard + +"@babel/plugin-transform-function-name@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-function-name@npm:7.22.5" + dependencies: + "@babel/helper-compilation-targets": ^7.22.5 + "@babel/helper-function-name": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: cff3b876357999cb8ae30e439c3ec6b0491a53b0aa6f722920a4675a6dd5b53af97a833051df4b34791fe5b3dd326ccf769d5c8e45b322aa50ee11a660b17845 + languageName: node + linkType: hard + +"@babel/plugin-transform-json-strings@npm:^7.22.11": + version: 7.22.11 + resolution: "@babel/plugin-transform-json-strings@npm:7.22.11" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/plugin-syntax-json-strings": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 50665e5979e66358c50e90a26db53c55917f78175127ac2fa05c7888d156d418ffb930ec0a109353db0a7c5f57c756ce01bfc9825d24cbfd2b3ec453f2ed8cba + languageName: node + linkType: hard + +"@babel/plugin-transform-literals@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-literals@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: ec37cc2ffb32667af935ab32fe28f00920ec8a1eb999aa6dc6602f2bebd8ba205a558aeedcdccdebf334381d5c57106c61f52332045730393e73410892a9735b + languageName: node + linkType: hard + +"@babel/plugin-transform-logical-assignment-operators@npm:^7.22.11": + version: 7.22.11 + resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.22.11" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/plugin-syntax-logical-assignment-operators": ^7.10.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: c664e9798e85afa7f92f07b867682dee7392046181d82f5d21bae6f2ca26dfe9c8375cdc52b7483c3fc09a983c1989f60eff9fbc4f373b0c0a74090553d05739 + languageName: node + linkType: hard + +"@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: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: ec4b0e07915ddd4fda0142fd104ee61015c208608a84cfa13643a95d18760b1dc1ceb6c6e0548898b8c49e5959a994e46367260176dbabc4467f729b21868504 + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-amd@npm:^7.22.5": + version: 7.23.0 + resolution: "@babel/plugin-transform-modules-amd@npm:7.23.0" + dependencies: + "@babel/helper-module-transforms": ^7.23.0 + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 5d92875170a37b8282d4bcd805f55829b8fab0f9c8d08b53d32a7a0bfdc62b868e489b52d329ae768ecafc0c993eed0ad7a387baa673ac33211390a9f833ab5d + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-commonjs@npm:^7.22.15, @babel/plugin-transform-modules-commonjs@npm:^7.23.0": + version: 7.23.0 + resolution: "@babel/plugin-transform-modules-commonjs@npm:7.23.0" + dependencies: + "@babel/helper-module-transforms": ^7.23.0 + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/helper-simple-access": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 7fb25997194053e167c4207c319ff05362392da841bd9f42ddb3caf9c8798a5d203bd926d23ddf5830fdf05eddc82c2810f40d1287e3a4f80b07eff13d1024b5 + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-systemjs@npm:^7.22.11": + version: 7.23.0 + resolution: "@babel/plugin-transform-modules-systemjs@npm:7.23.0" + dependencies: + "@babel/helper-hoist-variables": ^7.22.5 + "@babel/helper-module-transforms": ^7.23.0 + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/helper-validator-identifier": ^7.22.20 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 2d481458b22605046badea2317d5cc5c94ac3031c2293e34c96f02063f5b02af0979c4da6a8fbc67cc249541575dc9c6d710db6b919ede70b7337a22d9fd57a7 + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-umd@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-modules-umd@npm:7.22.5" + dependencies: + "@babel/helper-module-transforms": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 46622834c54c551b231963b867adbc80854881b3e516ff29984a8da989bd81665bd70e8cba6710345248e97166689310f544aee1a5773e262845a8f1b3e5b8b4 + languageName: node + linkType: hard + +"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.22.5" + dependencies: + "@babel/helper-create-regexp-features-plugin": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 peerDependencies: "@babel/core": ^7.0.0 - checksum: 528c95fb1087e212f17e1c6456df041b28a83c772b9c93d2e407c9d03b72182b0d9d126770c1d6e0b23aab052599ceaf25ed6a2c0627f4249be34a83f6fae853 + checksum: 3ee564ddee620c035b928fdc942c5d17e9c4b98329b76f9cefac65c111135d925eb94ed324064cd7556d4f5123beec79abea1d4b97d1c8a2a5c748887a2eb623 languageName: node linkType: hard -"@babel/plugin-transform-new-target@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-new-target@npm:7.18.6" +"@babel/plugin-transform-new-target@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-new-target@npm:7.22.5" dependencies: - "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-plugin-utils": ^7.22.5 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: bd780e14f46af55d0ae8503b3cb81ca86dcc73ed782f177e74f498fff934754f9e9911df1f8f3bd123777eed7c1c1af4d66abab87c8daae5403e7719a6b845d1 + checksum: 6b72112773487a881a1d6ffa680afde08bad699252020e86122180ee7a88854d5da3f15d9bca3331cf2e025df045604494a8208a2e63b486266b07c14e2ffbf3 languageName: node linkType: hard -"@babel/plugin-transform-object-super@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-object-super@npm:7.18.6" +"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.22.11": + version: 7.22.11 + resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.22.11" dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - "@babel/helper-replace-supers": ^7.18.6 + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 0fcb04e15deea96ae047c21cb403607d49f06b23b4589055993365ebd7a7d7541334f06bf9642e90075e66efce6ebaf1eb0ef066fbbab802d21d714f1aac3aef + checksum: 167babecc8b8fe70796a7b7d34af667ebbf43da166c21689502e5e8cc93180b7a85979c77c9f64b7cce431b36718bd0a6df9e5e0ffea4ae22afb22cfef886372 languageName: node linkType: hard -"@babel/plugin-transform-parameters@npm:^7.20.7, @babel/plugin-transform-parameters@npm:^7.21.3": - version: 7.21.3 - resolution: "@babel/plugin-transform-parameters@npm:7.21.3" +"@babel/plugin-transform-numeric-separator@npm:^7.22.11": + version: 7.22.11 + resolution: "@babel/plugin-transform-numeric-separator@npm:7.22.11" dependencies: - "@babel/helper-plugin-utils": ^7.20.2 + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/plugin-syntax-numeric-separator": ^7.10.4 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: c92128d7b1fcf54e2cab186c196bbbf55a9a6de11a83328dc2602649c9dc6d16ef73712beecd776cd49bfdc624b5f56740f4a53568d3deb9505ec666bc869da3 + checksum: af064d06a4a041767ec396a5f258103f64785df290e038bba9f0ef454e6c914f2ac45d862bbdad8fac2c7ad47fa4e95356f29053c60c100a0160b02a995fe2a3 languageName: node linkType: hard -"@babel/plugin-transform-property-literals@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-property-literals@npm:7.18.6" +"@babel/plugin-transform-object-rest-spread@npm:^7.22.15": + version: 7.22.15 + resolution: "@babel/plugin-transform-object-rest-spread@npm:7.22.15" dependencies: - "@babel/helper-plugin-utils": ^7.18.6 + "@babel/compat-data": ^7.22.9 + "@babel/helper-compilation-targets": ^7.22.15 + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/plugin-syntax-object-rest-spread": ^7.8.3 + "@babel/plugin-transform-parameters": ^7.22.15 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 1c16e64de554703f4b547541de2edda6c01346dd3031d4d29e881aa7733785cd26d53611a4ccf5353f4d3e69097bb0111c0a93ace9e683edd94fea28c4484144 + checksum: 62197a6f12289c1c1bd57f3bed9f0f765ca32390bfe91e0b5561dd94dd9770f4480c4162dec98da094bc0ba99d2c2ebba68de47c019454041b0b7a68ba2ec66d + languageName: node + linkType: hard + +"@babel/plugin-transform-object-super@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-object-super@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/helper-replace-supers": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: b71887877d74cb64dbccb5c0324fa67e31171e6a5311991f626650e44a4083e5436a1eaa89da78c0474fb095d4ec322d63ee778b202d33aa2e4194e1ed8e62d7 + languageName: node + linkType: hard + +"@babel/plugin-transform-optional-catch-binding@npm:^7.22.11": + version: 7.22.11 + resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.22.11" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/plugin-syntax-optional-catch-binding": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: f17abd90e1de67c84d63afea29c8021c74abb2794d3a6eeafb0bbe7372d3db32aefca386e392116ec63884537a4a2815d090d26264d259bacc08f6e3ed05294c + languageName: node + linkType: hard + +"@babel/plugin-transform-optional-chaining@npm:^7.22.15": + version: 7.23.0 + resolution: "@babel/plugin-transform-optional-chaining@npm:7.23.0" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/helper-skip-transparent-expression-wrappers": ^7.22.5 + "@babel/plugin-syntax-optional-chaining": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: f702634f2b97e5260dbec0d4bde05ccb6f4d96d7bfa946481aeacfa205ca846cb6e096a38312f9d51fdbdac1f258f211138c5f7075952e46a5bf8574de6a1329 + languageName: node + linkType: hard + +"@babel/plugin-transform-parameters@npm:^7.22.15": + version: 7.22.15 + resolution: "@babel/plugin-transform-parameters@npm:7.22.15" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 541188bb7d1876cad87687b5c7daf90f63d8208ae83df24acb1e2b05020ad1c78786b2723ca4054a83fcb74fb6509f30c4cacc5b538ee684224261ad5fb047c1 + languageName: node + linkType: hard + +"@babel/plugin-transform-private-methods@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-private-methods@npm:7.22.5" + dependencies: + "@babel/helper-create-class-features-plugin": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 321479b4fcb6d3b3ef622ab22fd24001e43d46e680e8e41324c033d5810c84646e470f81b44cbcbef5c22e99030784f7cac92f1829974da7a47a60a7139082c3 + languageName: node + linkType: hard + +"@babel/plugin-transform-private-property-in-object@npm:^7.22.11": + version: 7.22.11 + resolution: "@babel/plugin-transform-private-property-in-object@npm:7.22.11" + dependencies: + "@babel/helper-annotate-as-pure": ^7.22.5 + "@babel/helper-create-class-features-plugin": ^7.22.11 + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/plugin-syntax-private-property-in-object": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 4d029d84901e53c46dead7a46e2990a7bc62470f4e4ca58a0d063394f86652fd58fe4eea1eb941da3669cd536b559b9d058b342b59300026346b7a2a51badac8 + languageName: node + linkType: hard + +"@babel/plugin-transform-property-literals@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-property-literals@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 796176a3176106f77fcb8cd04eb34a8475ce82d6d03a88db089531b8f0453a2fb8b0c6ec9a52c27948bc0ea478becec449893741fc546dfc3930ab927e3f9f2e languageName: node linkType: hard @@ -1205,218 +1237,230 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-react-display-name@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-react-display-name@npm:7.18.6" +"@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: - "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-plugin-utils": ^7.22.5 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 51c087ab9e41ef71a29335587da28417536c6f816c292e092ffc0e0985d2f032656801d4dd502213ce32481f4ba6c69402993ffa67f0818a07606ff811e4be49 + checksum: a12bfd1e4e93055efca3ace3c34722571bda59d9740dca364d225d9c6e3ca874f134694d21715c42cc63d79efd46db9665bd4a022998767f9245f1e29d5d204d languageName: node linkType: hard -"@babel/plugin-transform-react-jsx-development@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-react-jsx-development@npm:7.18.6" +"@babel/plugin-transform-react-jsx-development@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-react-jsx-development@npm:7.22.5" dependencies: - "@babel/plugin-transform-react-jsx": ^7.18.6 + "@babel/plugin-transform-react-jsx": ^7.22.5 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: ec9fa65db66f938b75c45e99584367779ac3e0af8afc589187262e1337c7c4205ea312877813ae4df9fb93d766627b8968d74ac2ba702e4883b1dbbe4953ecee + checksum: 36bc3ff0b96bb0ef4723070a50cfdf2e72cfd903a59eba448f9fe92fea47574d6f22efd99364413719e1f3fb3c51b6c9b2990b87af088f8486a84b2a5f9e4560 languageName: node linkType: hard -"@babel/plugin-transform-react-jsx@npm:^7.18.6": - version: 7.19.0 - resolution: "@babel/plugin-transform-react-jsx@npm:7.19.0" +"@babel/plugin-transform-react-jsx@npm:^7.22.15, @babel/plugin-transform-react-jsx@npm:^7.22.5": + version: 7.22.15 + resolution: "@babel/plugin-transform-react-jsx@npm:7.22.15" dependencies: - "@babel/helper-annotate-as-pure": ^7.18.6 - "@babel/helper-module-imports": ^7.18.6 - "@babel/helper-plugin-utils": ^7.19.0 - "@babel/plugin-syntax-jsx": ^7.18.6 - "@babel/types": ^7.19.0 + "@babel/helper-annotate-as-pure": ^7.22.5 + "@babel/helper-module-imports": ^7.22.15 + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/plugin-syntax-jsx": ^7.22.5 + "@babel/types": ^7.22.15 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: d7d6f0b8f24b1f6b7cf8062c4e91c59af82489a993e51859bd49c2d62a2d2b77fd40b02a9a1d0e6d874cf4ce56a05fa3564b964587d00c94ebc62593524052ec + checksum: 3899054e89550c3a0ef041af7c47ee266e2e934f498ee80fefeda778a6aa177b48aa8b4d2a8bf5848de977fec564571699ab952d9fa089c4c19b45ddb121df09 languageName: node linkType: hard -"@babel/plugin-transform-react-pure-annotations@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-react-pure-annotations@npm:7.18.6" +"@babel/plugin-transform-react-pure-annotations@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-react-pure-annotations@npm:7.22.5" dependencies: - "@babel/helper-annotate-as-pure": ^7.18.6 - "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-annotate-as-pure": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 97c4873d409088f437f9084d084615948198dd87fc6723ada0e7e29c5a03623c2f3e03df3f52e7e7d4d23be32a08ea00818bff302812e48713c706713bd06219 + checksum: 092021c4f404e267002099ec20b3f12dd730cb90b0d83c5feed3dc00dbe43b9c42c795a18e7c6c7d7bddea20c7dd56221b146aec81b37f2e7eb5137331c61120 languageName: node linkType: hard -"@babel/plugin-transform-regenerator@npm:^7.20.5": - version: 7.20.5 - resolution: "@babel/plugin-transform-regenerator@npm:7.20.5" +"@babel/plugin-transform-regenerator@npm:^7.22.10": + version: 7.22.10 + resolution: "@babel/plugin-transform-regenerator@npm:7.22.10" dependencies: - "@babel/helper-plugin-utils": ^7.20.2 - regenerator-transform: ^0.15.1 + "@babel/helper-plugin-utils": ^7.22.5 + regenerator-transform: ^0.15.2 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 13164861e71fb23d84c6270ef5330b03c54d5d661c2c7468f28e21c4f8598558ca0c8c3cb1d996219352946e849d270a61372bc93c8fbe9676e78e3ffd0dea07 + checksum: e13678d62d6fa96f11cb8b863f00e8693491e7adc88bfca3f2820f80cbac8336e7dec3a596eee6a1c4663b7ececc3564f2cd7fb44ed6d4ce84ac2bb7f39ecc6e languageName: node linkType: hard -"@babel/plugin-transform-reserved-words@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-reserved-words@npm:7.18.6" +"@babel/plugin-transform-reserved-words@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-reserved-words@npm:7.22.5" dependencies: - "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-plugin-utils": ^7.22.5 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 0738cdc30abdae07c8ec4b233b30c31f68b3ff0eaa40eddb45ae607c066127f5fa99ddad3c0177d8e2832e3a7d3ad115775c62b431ebd6189c40a951b867a80c + checksum: 3ffd7dbc425fe8132bfec118b9817572799cab1473113a635d25ab606c1f5a2341a636c04cf6b22df3813320365ed5a965b5eeb3192320a10e4cc2c137bd8bfc languageName: node linkType: hard -"@babel/plugin-transform-runtime@npm:^7.21.0": - version: 7.21.4 - resolution: "@babel/plugin-transform-runtime@npm:7.21.4" +"@babel/plugin-transform-runtime@npm:^7.22.9": + version: 7.22.15 + resolution: "@babel/plugin-transform-runtime@npm:7.22.15" dependencies: - "@babel/helper-module-imports": ^7.21.4 - "@babel/helper-plugin-utils": ^7.20.2 - babel-plugin-polyfill-corejs2: ^0.3.3 - babel-plugin-polyfill-corejs3: ^0.6.0 - babel-plugin-polyfill-regenerator: ^0.4.1 - semver: ^6.3.0 + "@babel/helper-module-imports": ^7.22.15 + "@babel/helper-plugin-utils": ^7.22.5 + babel-plugin-polyfill-corejs2: ^0.4.5 + babel-plugin-polyfill-corejs3: ^0.8.3 + babel-plugin-polyfill-regenerator: ^0.5.2 + semver: ^6.3.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 7e2e6b0d6f9762fde58738829e4d3b5e13dc88ccc1463e4eee83c8d8f50238eeb8e3699923f5ad4d7edf597515f74d67fbb14eb330225075fc7733b547e22145 + checksum: 7edf20b13d02f856276221624abf3b8084daa3f265a6e5c70ee0d0c63087fcf726dc8756a9c8bb3d25a1ce8697ab66ec8cdd15be992c21aed9971cb5bfe80a5b languageName: node linkType: hard -"@babel/plugin-transform-shorthand-properties@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-shorthand-properties@npm:7.18.6" +"@babel/plugin-transform-shorthand-properties@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-shorthand-properties@npm:7.22.5" dependencies: - "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-plugin-utils": ^7.22.5 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: b8e4e8acc2700d1e0d7d5dbfd4fdfb935651913de6be36e6afb7e739d8f9ca539a5150075a0f9b79c88be25ddf45abb912fe7abf525f0b80f5b9d9860de685d7 + checksum: a5ac902c56ea8effa99f681340ee61bac21094588f7aef0bc01dff98246651702e677552fa6d10e548c4ac22a3ffad047dd2f8c8f0540b68316c2c203e56818b languageName: node linkType: hard -"@babel/plugin-transform-spread@npm:^7.20.7": - version: 7.20.7 - resolution: "@babel/plugin-transform-spread@npm:7.20.7" +"@babel/plugin-transform-spread@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-spread@npm:7.22.5" dependencies: - "@babel/helper-plugin-utils": ^7.20.2 - "@babel/helper-skip-transparent-expression-wrappers": ^7.20.0 + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/helper-skip-transparent-expression-wrappers": ^7.22.5 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 8ea698a12da15718aac7489d4cde10beb8a3eea1f66167d11ab1e625033641e8b328157fd1a0b55dd6531933a160c01fc2e2e61132a385cece05f26429fd0cc2 + checksum: 5587f0deb60b3dfc9b274e269031cc45ec75facccf1933ea2ea71ced9fd3ce98ed91bb36d6cd26817c14474b90ed998c5078415f0eab531caf301496ce24c95c languageName: node linkType: hard -"@babel/plugin-transform-sticky-regex@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-sticky-regex@npm:7.18.6" +"@babel/plugin-transform-sticky-regex@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-sticky-regex@npm:7.22.5" dependencies: - "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-plugin-utils": ^7.22.5 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 68ea18884ae9723443ffa975eb736c8c0d751265859cd3955691253f7fee37d7a0f7efea96c8a062876af49a257a18ea0ed5fea0d95a7b3611ce40f7ee23aee3 + checksum: 63b2c575e3e7f96c32d52ed45ee098fb7d354b35c2223b8c8e76840b32cc529ee0c0ceb5742fd082e56e91e3d82842a367ce177e82b05039af3d602c9627a729 languageName: node linkType: hard -"@babel/plugin-transform-template-literals@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/plugin-transform-template-literals@npm:7.18.9" +"@babel/plugin-transform-template-literals@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-template-literals@npm:7.22.5" dependencies: - "@babel/helper-plugin-utils": ^7.18.9 + "@babel/helper-plugin-utils": ^7.22.5 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 3d2fcd79b7c345917f69b92a85bdc3ddd68ce2c87dc70c7d61a8373546ccd1f5cb8adc8540b49dfba08e1b82bb7b3bbe23a19efdb2b9c994db2db42906ca9fb2 + checksum: 27e9bb030654cb425381c69754be4abe6a7c75b45cd7f962cd8d604b841b2f0fb7b024f2efc1c25cc53f5b16d79d5e8cfc47cacbdaa983895b3aeefa3e7e24ff languageName: node linkType: hard -"@babel/plugin-transform-typeof-symbol@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/plugin-transform-typeof-symbol@npm:7.18.9" +"@babel/plugin-transform-typeof-symbol@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-typeof-symbol@npm:7.22.5" dependencies: - "@babel/helper-plugin-utils": ^7.18.9 + "@babel/helper-plugin-utils": ^7.22.5 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: e754e0d8b8a028c52e10c148088606e3f7a9942c57bd648fc0438e5b4868db73c386a5ed47ab6d6f0594aae29ee5ffc2ffc0f7ebee7fae560a066d6dea811cd4 + checksum: 82a53a63ffc3010b689ca9a54e5f53b2718b9f4b4a9818f36f9b7dba234f38a01876680553d2716a645a61920b5e6e4aaf8d4a0064add379b27ca0b403049512 languageName: node linkType: hard -"@babel/plugin-transform-typescript@npm:^7.21.3": - version: 7.21.3 - resolution: "@babel/plugin-transform-typescript@npm:7.21.3" +"@babel/plugin-transform-typescript@npm:^7.22.15": + version: 7.22.15 + resolution: "@babel/plugin-transform-typescript@npm:7.22.15" dependencies: - "@babel/helper-annotate-as-pure": ^7.18.6 - "@babel/helper-create-class-features-plugin": ^7.21.0 - "@babel/helper-plugin-utils": ^7.20.2 - "@babel/plugin-syntax-typescript": ^7.20.0 + "@babel/helper-annotate-as-pure": ^7.22.5 + "@babel/helper-create-class-features-plugin": ^7.22.15 + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/plugin-syntax-typescript": ^7.22.5 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: c16fd577bf43f633deb76fca2a8527d8ae25968c8efdf327c1955472c3e0257e62992473d1ad7f9ee95379ce2404699af405ea03346055adadd3478ad0ecd117 + checksum: c5d96cdbf0e1512707aa1c1e3ac6b370a25fd9c545d26008ce44eb13a47bd7fd67a1eb799c98b5ccc82e33a345fda55c0055e1fe3ed97646ed405dd13020b226 languageName: node linkType: hard -"@babel/plugin-transform-unicode-escapes@npm:^7.18.10": - version: 7.18.10 - resolution: "@babel/plugin-transform-unicode-escapes@npm:7.18.10" +"@babel/plugin-transform-unicode-escapes@npm:^7.22.10": + version: 7.22.10 + resolution: "@babel/plugin-transform-unicode-escapes@npm:7.22.10" dependencies: - "@babel/helper-plugin-utils": ^7.18.9 + "@babel/helper-plugin-utils": ^7.22.5 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: f5baca55cb3c11bc08ec589f5f522d85c1ab509b4d11492437e45027d64ae0b22f0907bd1381e8d7f2a436384bb1f9ad89d19277314242c5c2671a0f91d0f9cd + checksum: 807f40ed1324c8cb107c45358f1903384ca3f0ef1d01c5a3c5c9b271c8d8eec66936a3dcc8d75ddfceea9421420368c2e77ae3adef0a50557e778dfe296bf382 languageName: node linkType: hard -"@babel/plugin-transform-unicode-regex@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-unicode-regex@npm:7.18.6" +"@babel/plugin-transform-unicode-property-regex@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.22.5" dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.18.6 - "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-create-regexp-features-plugin": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: d9e18d57536a2d317fb0b7c04f8f55347f3cfacb75e636b4c6fa2080ab13a3542771b5120e726b598b815891fc606d1472ac02b749c69fd527b03847f22dc25e + checksum: 2495e5f663cb388e3d888b4ba3df419ac436a5012144ac170b622ddfc221f9ea9bdba839fa2bc0185cb776b578030666406452ec7791cbf0e7a3d4c88ae9574c languageName: node linkType: hard -"@babel/preset-env@npm:^7.19.4, @babel/preset-env@npm:^7.20.2": - version: 7.21.4 - resolution: "@babel/preset-env@npm:7.21.4" +"@babel/plugin-transform-unicode-regex@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-unicode-regex@npm:7.22.5" dependencies: - "@babel/compat-data": ^7.21.4 - "@babel/helper-compilation-targets": ^7.21.4 - "@babel/helper-plugin-utils": ^7.20.2 - "@babel/helper-validator-option": ^7.21.0 - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": ^7.18.6 - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": ^7.20.7 - "@babel/plugin-proposal-async-generator-functions": ^7.20.7 - "@babel/plugin-proposal-class-properties": ^7.18.6 - "@babel/plugin-proposal-class-static-block": ^7.21.0 - "@babel/plugin-proposal-dynamic-import": ^7.18.6 - "@babel/plugin-proposal-export-namespace-from": ^7.18.9 - "@babel/plugin-proposal-json-strings": ^7.18.6 - "@babel/plugin-proposal-logical-assignment-operators": ^7.20.7 - "@babel/plugin-proposal-nullish-coalescing-operator": ^7.18.6 - "@babel/plugin-proposal-numeric-separator": ^7.18.6 - "@babel/plugin-proposal-object-rest-spread": ^7.20.7 - "@babel/plugin-proposal-optional-catch-binding": ^7.18.6 - "@babel/plugin-proposal-optional-chaining": ^7.21.0 - "@babel/plugin-proposal-private-methods": ^7.18.6 - "@babel/plugin-proposal-private-property-in-object": ^7.21.0 - "@babel/plugin-proposal-unicode-property-regex": ^7.18.6 + "@babel/helper-create-regexp-features-plugin": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 6b5d1404c8c623b0ec9bd436c00d885a17d6a34f3f2597996343ddb9d94f6379705b21582dfd4cec2c47fd34068872e74ab6b9580116c0566b3f9447e2a7fa06 + languageName: node + linkType: hard + +"@babel/plugin-transform-unicode-sets-regex@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.22.5" + dependencies: + "@babel/helper-create-regexp-features-plugin": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: c042070f980b139547f8b0179efbc049ac5930abec7fc26ed7a41d89a048d8ab17d362200e204b6f71c3c20d6991a0e74415e1a412a49adc8131c2a40c04822e + languageName: node + linkType: hard + +"@babel/preset-env@npm:^7.19.4, @babel/preset-env@npm:^7.22.9": + version: 7.22.20 + resolution: "@babel/preset-env@npm:7.22.20" + dependencies: + "@babel/compat-data": ^7.22.20 + "@babel/helper-compilation-targets": ^7.22.15 + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/helper-validator-option": ^7.22.15 + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": ^7.22.15 + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": ^7.22.15 + "@babel/plugin-proposal-private-property-in-object": 7.21.0-placeholder-for-preset-env.2 "@babel/plugin-syntax-async-generators": ^7.8.4 "@babel/plugin-syntax-class-properties": ^7.12.13 "@babel/plugin-syntax-class-static-block": ^7.14.5 "@babel/plugin-syntax-dynamic-import": ^7.8.3 "@babel/plugin-syntax-export-namespace-from": ^7.8.3 - "@babel/plugin-syntax-import-assertions": ^7.20.0 + "@babel/plugin-syntax-import-assertions": ^7.22.5 + "@babel/plugin-syntax-import-attributes": ^7.22.5 + "@babel/plugin-syntax-import-meta": ^7.10.4 "@babel/plugin-syntax-json-strings": ^7.8.3 "@babel/plugin-syntax-logical-assignment-operators": ^7.10.4 "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 @@ -1426,153 +1470,175 @@ __metadata: "@babel/plugin-syntax-optional-chaining": ^7.8.3 "@babel/plugin-syntax-private-property-in-object": ^7.14.5 "@babel/plugin-syntax-top-level-await": ^7.14.5 - "@babel/plugin-transform-arrow-functions": ^7.20.7 - "@babel/plugin-transform-async-to-generator": ^7.20.7 - "@babel/plugin-transform-block-scoped-functions": ^7.18.6 - "@babel/plugin-transform-block-scoping": ^7.21.0 - "@babel/plugin-transform-classes": ^7.21.0 - "@babel/plugin-transform-computed-properties": ^7.20.7 - "@babel/plugin-transform-destructuring": ^7.21.3 - "@babel/plugin-transform-dotall-regex": ^7.18.6 - "@babel/plugin-transform-duplicate-keys": ^7.18.9 - "@babel/plugin-transform-exponentiation-operator": ^7.18.6 - "@babel/plugin-transform-for-of": ^7.21.0 - "@babel/plugin-transform-function-name": ^7.18.9 - "@babel/plugin-transform-literals": ^7.18.9 - "@babel/plugin-transform-member-expression-literals": ^7.18.6 - "@babel/plugin-transform-modules-amd": ^7.20.11 - "@babel/plugin-transform-modules-commonjs": ^7.21.2 - "@babel/plugin-transform-modules-systemjs": ^7.20.11 - "@babel/plugin-transform-modules-umd": ^7.18.6 - "@babel/plugin-transform-named-capturing-groups-regex": ^7.20.5 - "@babel/plugin-transform-new-target": ^7.18.6 - "@babel/plugin-transform-object-super": ^7.18.6 - "@babel/plugin-transform-parameters": ^7.21.3 - "@babel/plugin-transform-property-literals": ^7.18.6 - "@babel/plugin-transform-regenerator": ^7.20.5 - "@babel/plugin-transform-reserved-words": ^7.18.6 - "@babel/plugin-transform-shorthand-properties": ^7.18.6 - "@babel/plugin-transform-spread": ^7.20.7 - "@babel/plugin-transform-sticky-regex": ^7.18.6 - "@babel/plugin-transform-template-literals": ^7.18.9 - "@babel/plugin-transform-typeof-symbol": ^7.18.9 - "@babel/plugin-transform-unicode-escapes": ^7.18.10 - "@babel/plugin-transform-unicode-regex": ^7.18.6 - "@babel/preset-modules": ^0.1.5 - "@babel/types": ^7.21.4 - babel-plugin-polyfill-corejs2: ^0.3.3 - babel-plugin-polyfill-corejs3: ^0.6.0 - babel-plugin-polyfill-regenerator: ^0.4.1 - core-js-compat: ^3.25.1 - semver: ^6.3.0 + "@babel/plugin-syntax-unicode-sets-regex": ^7.18.6 + "@babel/plugin-transform-arrow-functions": ^7.22.5 + "@babel/plugin-transform-async-generator-functions": ^7.22.15 + "@babel/plugin-transform-async-to-generator": ^7.22.5 + "@babel/plugin-transform-block-scoped-functions": ^7.22.5 + "@babel/plugin-transform-block-scoping": ^7.22.15 + "@babel/plugin-transform-class-properties": ^7.22.5 + "@babel/plugin-transform-class-static-block": ^7.22.11 + "@babel/plugin-transform-classes": ^7.22.15 + "@babel/plugin-transform-computed-properties": ^7.22.5 + "@babel/plugin-transform-destructuring": ^7.22.15 + "@babel/plugin-transform-dotall-regex": ^7.22.5 + "@babel/plugin-transform-duplicate-keys": ^7.22.5 + "@babel/plugin-transform-dynamic-import": ^7.22.11 + "@babel/plugin-transform-exponentiation-operator": ^7.22.5 + "@babel/plugin-transform-export-namespace-from": ^7.22.11 + "@babel/plugin-transform-for-of": ^7.22.15 + "@babel/plugin-transform-function-name": ^7.22.5 + "@babel/plugin-transform-json-strings": ^7.22.11 + "@babel/plugin-transform-literals": ^7.22.5 + "@babel/plugin-transform-logical-assignment-operators": ^7.22.11 + "@babel/plugin-transform-member-expression-literals": ^7.22.5 + "@babel/plugin-transform-modules-amd": ^7.22.5 + "@babel/plugin-transform-modules-commonjs": ^7.22.15 + "@babel/plugin-transform-modules-systemjs": ^7.22.11 + "@babel/plugin-transform-modules-umd": ^7.22.5 + "@babel/plugin-transform-named-capturing-groups-regex": ^7.22.5 + "@babel/plugin-transform-new-target": ^7.22.5 + "@babel/plugin-transform-nullish-coalescing-operator": ^7.22.11 + "@babel/plugin-transform-numeric-separator": ^7.22.11 + "@babel/plugin-transform-object-rest-spread": ^7.22.15 + "@babel/plugin-transform-object-super": ^7.22.5 + "@babel/plugin-transform-optional-catch-binding": ^7.22.11 + "@babel/plugin-transform-optional-chaining": ^7.22.15 + "@babel/plugin-transform-parameters": ^7.22.15 + "@babel/plugin-transform-private-methods": ^7.22.5 + "@babel/plugin-transform-private-property-in-object": ^7.22.11 + "@babel/plugin-transform-property-literals": ^7.22.5 + "@babel/plugin-transform-regenerator": ^7.22.10 + "@babel/plugin-transform-reserved-words": ^7.22.5 + "@babel/plugin-transform-shorthand-properties": ^7.22.5 + "@babel/plugin-transform-spread": ^7.22.5 + "@babel/plugin-transform-sticky-regex": ^7.22.5 + "@babel/plugin-transform-template-literals": ^7.22.5 + "@babel/plugin-transform-typeof-symbol": ^7.22.5 + "@babel/plugin-transform-unicode-escapes": ^7.22.10 + "@babel/plugin-transform-unicode-property-regex": ^7.22.5 + "@babel/plugin-transform-unicode-regex": ^7.22.5 + "@babel/plugin-transform-unicode-sets-regex": ^7.22.5 + "@babel/preset-modules": 0.1.6-no-external-plugins + "@babel/types": ^7.22.19 + babel-plugin-polyfill-corejs2: ^0.4.5 + babel-plugin-polyfill-corejs3: ^0.8.3 + babel-plugin-polyfill-regenerator: ^0.5.2 + core-js-compat: ^3.31.0 + semver: ^6.3.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 1e328674c4b39e985fa81e5a8eee9aaab353dea4ff1f28f454c5e27a6498c762e25d42e827f5bfc9d7acf6c9b8bc317b5283aa7c83d9fd03c1a89e5c08f334f9 + checksum: 99357a5cb30f53bacdc0d1cd6dff0f052ea6c2d1ba874d969bba69897ef716e87283e84a59dc52fb49aa31fd1b6f55ed756c64c04f5678380700239f6030b881 languageName: node linkType: hard -"@babel/preset-modules@npm:^0.1.5": - version: 0.1.5 - resolution: "@babel/preset-modules@npm:0.1.5" +"@babel/preset-modules@npm:0.1.6-no-external-plugins": + version: 0.1.6-no-external-plugins + resolution: "@babel/preset-modules@npm:0.1.6-no-external-plugins" dependencies: "@babel/helper-plugin-utils": ^7.0.0 - "@babel/plugin-proposal-unicode-property-regex": ^7.4.4 - "@babel/plugin-transform-dotall-regex": ^7.4.4 "@babel/types": ^7.4.4 esutils: ^2.0.2 peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 8430e0e9e9d520b53e22e8c4c6a5a080a12b63af6eabe559c2310b187bd62ae113f3da82ba33e9d1d0f3230930ca702843aae9dd226dec51f7d7114dc1f51c10 + "@babel/core": ^7.0.0-0 || ^8.0.0-0 <8.0.0 + checksum: 4855e799bc50f2449fb5210f78ea9e8fd46cf4f242243f1e2ed838e2bd702e25e73e822e7f8447722a5f4baa5e67a8f7a0e403f3e7ce04540ff743a9c411c375 languageName: node linkType: hard -"@babel/preset-react@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/preset-react@npm:7.18.6" +"@babel/preset-react@npm:^7.18.6, @babel/preset-react@npm:^7.22.5": + version: 7.22.15 + resolution: "@babel/preset-react@npm:7.22.15" dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - "@babel/helper-validator-option": ^7.18.6 - "@babel/plugin-transform-react-display-name": ^7.18.6 - "@babel/plugin-transform-react-jsx": ^7.18.6 - "@babel/plugin-transform-react-jsx-development": ^7.18.6 - "@babel/plugin-transform-react-pure-annotations": ^7.18.6 + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/helper-validator-option": ^7.22.15 + "@babel/plugin-transform-react-display-name": ^7.22.5 + "@babel/plugin-transform-react-jsx": ^7.22.15 + "@babel/plugin-transform-react-jsx-development": ^7.22.5 + "@babel/plugin-transform-react-pure-annotations": ^7.22.5 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 540d9cf0a0cc0bb07e6879994e6fb7152f87dafbac880b56b65e2f528134c7ba33e0cd140b58700c77b2ebf4c81fa6468fed0ba391462d75efc7f8c1699bb4c3 + checksum: c3ef99dfa2e9f57d2e08603e883aa20f47630a826c8e413888a93ae6e0084b5016871e463829be125329d40a1ba0a89f7c43d77b6dab52083c225cb43e63d10e languageName: node linkType: hard -"@babel/preset-typescript@npm:^7.18.6, @babel/preset-typescript@npm:^7.21.0": - version: 7.21.4 - resolution: "@babel/preset-typescript@npm:7.21.4" +"@babel/preset-typescript@npm:^7.18.6, @babel/preset-typescript@npm:^7.22.5": + version: 7.23.0 + resolution: "@babel/preset-typescript@npm:7.23.0" dependencies: - "@babel/helper-plugin-utils": ^7.20.2 - "@babel/helper-validator-option": ^7.21.0 - "@babel/plugin-syntax-jsx": ^7.21.4 - "@babel/plugin-transform-modules-commonjs": ^7.21.2 - "@babel/plugin-transform-typescript": ^7.21.3 + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/helper-validator-option": ^7.22.15 + "@babel/plugin-syntax-jsx": ^7.22.5 + "@babel/plugin-transform-modules-commonjs": ^7.23.0 + "@babel/plugin-transform-typescript": ^7.22.15 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 83b2f2bf7be3a970acd212177525f58bbb1f2e042b675a47d021a675ae27cf00b6b6babfaf3ae5c980592c9ed1b0712e5197796b691905d25c99f9006478ea06 + checksum: 3d5fce83e83f11c07e0ea13542bca181abb3b482b8981ec9c64e6add9d7beed3c54d063dc4bc9fd383165c71114a245abef89a289680833c5a8552fe3e7c4407 languageName: node linkType: hard -"@babel/runtime-corejs3@npm:^7.21.0": - version: 7.21.0 - resolution: "@babel/runtime-corejs3@npm:7.21.0" - dependencies: - core-js-pure: ^3.25.1 - regenerator-runtime: ^0.13.11 - checksum: a47927671672b1e1644771458f804e03802303eeffcafd55f85cb121d3d3ca33032cc2fe68e086e3de6923049343d0aa599fc3eb3ad5749e30646e2a2ef6f11d +"@babel/regjsgen@npm:^0.8.0": + version: 0.8.0 + resolution: "@babel/regjsgen@npm:0.8.0" + checksum: 89c338fee774770e5a487382170711014d49a68eb281e74f2b5eac88f38300a4ad545516a7786a8dd5702e9cf009c94c2f582d200f077ac5decd74c56b973730 languageName: node linkType: hard -"@babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.10.3, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.8.4": - version: 7.21.0 - resolution: "@babel/runtime@npm:7.21.0" +"@babel/runtime-corejs3@npm:^7.22.6": + version: 7.23.1 + resolution: "@babel/runtime-corejs3@npm:7.23.1" dependencies: - regenerator-runtime: ^0.13.11 - checksum: 7b33e25bfa9e0e1b9e8828bb61b2d32bdd46b41b07ba7cb43319ad08efc6fda8eb89445193e67d6541814627df0ca59122c0ea795e412b99c5183a0540d338ab + core-js-pure: ^3.30.2 + regenerator-runtime: ^0.14.0 + checksum: 5d52b0cc8b5d243e67cf29c584d15acdc0c89b64de4a3fe1cb8a83b84b64a5621802e36931f93ca696cb637884abd11c8514615d890a4edf057ec4464f73915d languageName: node linkType: hard -"@babel/template@npm:^7.18.10, @babel/template@npm:^7.20.7": - version: 7.20.7 - resolution: "@babel/template@npm:7.20.7" +"@babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.10.3, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.22.6, @babel/runtime@npm:^7.8.4": + version: 7.23.1 + resolution: "@babel/runtime@npm:7.23.1" dependencies: - "@babel/code-frame": ^7.18.6 - "@babel/parser": ^7.20.7 - "@babel/types": ^7.20.7 - checksum: 2eb1a0ab8d415078776bceb3473d07ab746e6bb4c2f6ca46ee70efb284d75c4a32bb0cd6f4f4946dec9711f9c0780e8e5d64b743208deac6f8e9858afadc349e + regenerator-runtime: ^0.14.0 + checksum: 0cd0d43e6e7dc7f9152fda8c8312b08321cda2f56ef53d6c22ebdd773abdc6f5d0a69008de90aa41908d00e2c1facb24715ff121274e689305c858355ff02c70 languageName: node linkType: hard -"@babel/traverse@npm:^7.20.5, @babel/traverse@npm:^7.20.7, @babel/traverse@npm:^7.21.0, @babel/traverse@npm:^7.21.2, @babel/traverse@npm:^7.21.4": - version: 7.21.4 - resolution: "@babel/traverse@npm:7.21.4" +"@babel/template@npm:^7.22.15, @babel/template@npm:^7.22.5": + version: 7.22.15 + resolution: "@babel/template@npm:7.22.15" dependencies: - "@babel/code-frame": ^7.21.4 - "@babel/generator": ^7.21.4 - "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-function-name": ^7.21.0 - "@babel/helper-hoist-variables": ^7.18.6 - "@babel/helper-split-export-declaration": ^7.18.6 - "@babel/parser": ^7.21.4 - "@babel/types": ^7.21.4 + "@babel/code-frame": ^7.22.13 + "@babel/parser": ^7.22.15 + "@babel/types": ^7.22.15 + checksum: 1f3e7dcd6c44f5904c184b3f7fe280394b191f2fed819919ffa1e529c259d5b197da8981b6ca491c235aee8dbad4a50b7e31304aa531271cb823a4a24a0dd8fd + languageName: node + linkType: hard + +"@babel/traverse@npm:^7.22.8, @babel/traverse@npm:^7.23.0": + version: 7.23.0 + resolution: "@babel/traverse@npm:7.23.0" + dependencies: + "@babel/code-frame": ^7.22.13 + "@babel/generator": ^7.23.0 + "@babel/helper-environment-visitor": ^7.22.20 + "@babel/helper-function-name": ^7.23.0 + "@babel/helper-hoist-variables": ^7.22.5 + "@babel/helper-split-export-declaration": ^7.22.6 + "@babel/parser": ^7.23.0 + "@babel/types": ^7.23.0 debug: ^4.1.0 globals: ^11.1.0 - checksum: f22f067c2d9b6497abf3d4e53ea71f3aa82a21f2ed434dd69b8c5767f11f2a4c24c8d2f517d2312c9e5248e5c69395fdca1c95a2b3286122c75f5783ddb6f53c + checksum: 0b17fae53269e1af2cd3edba00892bc2975ad5df9eea7b84815dab07dfec2928c451066d51bc65b4be61d8499e77db7e547ce69ef2a7b0eca3f96269cb43a0b0 languageName: node linkType: hard -"@babel/types@npm:^7.18.6, @babel/types@npm:^7.18.9, @babel/types@npm:^7.19.0, @babel/types@npm:^7.20.0, @babel/types@npm:^7.20.2, @babel/types@npm:^7.20.5, @babel/types@npm:^7.20.7, @babel/types@npm:^7.21.0, @babel/types@npm:^7.21.2, @babel/types@npm:^7.21.4, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": - version: 7.21.4 - resolution: "@babel/types@npm:7.21.4" +"@babel/types@npm:^7.20.0, @babel/types@npm:^7.22.15, @babel/types@npm:^7.22.19, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": + version: 7.23.0 + resolution: "@babel/types@npm:7.23.0" dependencies: - "@babel/helper-string-parser": ^7.19.4 - "@babel/helper-validator-identifier": ^7.19.1 + "@babel/helper-string-parser": ^7.22.5 + "@babel/helper-validator-identifier": ^7.22.20 to-fast-properties: ^2.0.0 - checksum: 587bc55a91ce003b0f8aa10d70070f8006560d7dc0360dc0406d306a2cb2a10154e2f9080b9c37abec76907a90b330a536406cb75e6bdc905484f37b75c73219 + checksum: 215fe04bd7feef79eeb4d33374b39909ce9cad1611c4135a4f7fdf41fe3280594105af6d7094354751514625ea92d0875aba355f53e86a92600f290e77b0e604 languageName: node linkType: hard @@ -1590,25 +1656,26 @@ __metadata: languageName: node linkType: hard -"@docsearch/css@npm:3.3.4": - version: 3.3.4 - resolution: "@docsearch/css@npm:3.3.4" - checksum: 56e3ae677423fa4cf508ffb964d0616862a4af22affad308f47edf5c1ad097a2b21187c53d240f83463c4e7add3cd60e3630022a68e2089bb3066bfbaded64a0 +"@docsearch/css@npm:3.5.2": + version: 3.5.2 + resolution: "@docsearch/css@npm:3.5.2" + checksum: d1d60dd230dd48f896755f21bd20b59583ba844212d7d336953ae48d389baaf868bdf83320fb734a4ed679c3f95b15d620cf3764cd538f6941cae239f8c9d35d languageName: node linkType: hard -"@docsearch/react@npm:^3.3.3": - version: 3.3.4 - resolution: "@docsearch/react@npm:3.3.4" +"@docsearch/react@npm:^3.5.2": + version: 3.5.2 + resolution: "@docsearch/react@npm:3.5.2" dependencies: - "@algolia/autocomplete-core": 1.8.2 - "@algolia/autocomplete-preset-algolia": 1.8.2 - "@docsearch/css": 3.3.4 - algoliasearch: ^4.0.0 + "@algolia/autocomplete-core": 1.9.3 + "@algolia/autocomplete-preset-algolia": 1.9.3 + "@docsearch/css": 3.5.2 + algoliasearch: ^4.19.1 peerDependencies: "@types/react": ">= 16.8.0 < 19.0.0" react: ">= 16.8.0 < 19.0.0" react-dom: ">= 16.8.0 < 19.0.0" + search-insights: ">= 1 < 3" peerDependenciesMeta: "@types/react": optional: true @@ -1616,35 +1683,37 @@ __metadata: optional: true react-dom: optional: true - checksum: 50f122f08c543711fffe8ba3b507311a01defef6db5d47401bd2b5c7759512357fa26d2a88a68b50916b9084fd922f7340ad03e479b4d60ac2e22b4a198dc06d + search-insights: + optional: true + checksum: 4b4584c2c73fc18cbd599047538896450974e134c2c74f19eb202db0ce8e6c3c49c6f65ed6ade61c796d476d3cbb55d6be58df62bc9568a0c72d88e42fca1d16 languageName: node linkType: hard -"@docusaurus/core@npm:0.0.0-5591": - version: 0.0.0-5591 - resolution: "@docusaurus/core@npm:0.0.0-5591" +"@docusaurus/core@npm:0.0.0-5703": + version: 0.0.0-5703 + resolution: "@docusaurus/core@npm:0.0.0-5703" dependencies: - "@babel/core": ^7.20.12 - "@babel/generator": ^7.21.1 + "@babel/core": ^7.22.9 + "@babel/generator": ^7.22.9 "@babel/plugin-syntax-dynamic-import": ^7.8.3 - "@babel/plugin-transform-runtime": ^7.21.0 - "@babel/preset-env": ^7.20.2 - "@babel/preset-react": ^7.18.6 - "@babel/preset-typescript": ^7.21.0 - "@babel/runtime": ^7.21.0 - "@babel/runtime-corejs3": ^7.21.0 - "@babel/traverse": ^7.21.2 - "@docusaurus/cssnano-preset": 0.0.0-5591 - "@docusaurus/logger": 0.0.0-5591 - "@docusaurus/mdx-loader": 0.0.0-5591 + "@babel/plugin-transform-runtime": ^7.22.9 + "@babel/preset-env": ^7.22.9 + "@babel/preset-react": ^7.22.5 + "@babel/preset-typescript": ^7.22.5 + "@babel/runtime": ^7.22.6 + "@babel/runtime-corejs3": ^7.22.6 + "@babel/traverse": ^7.22.8 + "@docusaurus/cssnano-preset": 0.0.0-5703 + "@docusaurus/logger": 0.0.0-5703 + "@docusaurus/mdx-loader": 0.0.0-5703 "@docusaurus/react-loadable": 5.5.2 - "@docusaurus/utils": 0.0.0-5591 - "@docusaurus/utils-common": 0.0.0-5591 - "@docusaurus/utils-validation": 0.0.0-5591 + "@docusaurus/utils": 0.0.0-5703 + "@docusaurus/utils-common": 0.0.0-5703 + "@docusaurus/utils-validation": 0.0.0-5703 "@slorber/static-site-generator-webpack-plugin": ^4.0.7 "@svgr/webpack": ^6.5.1 - autoprefixer: ^10.4.13 - babel-loader: ^9.1.2 + autoprefixer: ^10.4.14 + babel-loader: ^9.1.3 babel-plugin-dynamic-import-node: ^2.3.3 boxen: ^6.2.1 chalk: ^4.1.2 @@ -1654,25 +1723,25 @@ __metadata: combine-promises: ^1.1.0 commander: ^5.1.0 copy-webpack-plugin: ^11.0.0 - core-js: ^3.29.0 - css-loader: ^6.7.3 + core-js: ^3.31.1 + css-loader: ^6.8.1 css-minimizer-webpack-plugin: ^4.2.2 cssnano: ^5.1.15 del: ^6.1.1 detect-port: ^1.5.1 escape-html: ^1.0.3 - eta: ^2.0.1 + eta: ^2.2.0 file-loader: ^6.2.0 - fs-extra: ^11.1.0 - html-minifier-terser: ^7.1.0 - html-tags: ^3.2.0 - html-webpack-plugin: ^5.5.0 + fs-extra: ^11.1.1 + html-minifier-terser: ^7.2.0 + html-tags: ^3.3.1 + html-webpack-plugin: ^5.5.3 import-fresh: ^3.3.0 leven: ^3.1.0 lodash: ^4.17.21 - mini-css-extract-plugin: ^2.7.3 - postcss: ^8.4.21 - postcss-loader: ^7.0.2 + mini-css-extract-plugin: ^2.7.6 + postcss: ^8.4.26 + postcss-loader: ^7.3.3 prompts: ^2.4.2 react-dev-utils: ^12.0.1 react-helmet-async: ^1.3.0 @@ -1682,92 +1751,94 @@ __metadata: react-router-config: ^5.1.1 react-router-dom: ^5.3.4 rtl-detect: ^1.0.4 - semver: ^7.3.8 + semver: ^7.5.4 serve-handler: ^6.1.5 shelljs: ^0.8.5 - terser-webpack-plugin: ^5.3.7 - tslib: ^2.5.0 + terser-webpack-plugin: ^5.3.9 + tslib: ^2.6.0 update-notifier: ^6.0.2 url-loader: ^4.1.1 wait-on: ^7.0.1 - webpack: ^5.76.0 - webpack-bundle-analyzer: ^4.8.0 - webpack-dev-server: ^4.11.1 - webpack-merge: ^5.8.0 + webpack: ^5.88.1 + webpack-bundle-analyzer: ^4.9.0 + webpack-dev-server: ^4.15.1 + webpack-merge: ^5.9.0 webpackbar: ^5.0.2 peerDependencies: - react: ^16.8.4 || ^17.0.0 - react-dom: ^16.8.4 || ^17.0.0 + react: ^18.0.0 + react-dom: ^18.0.0 bin: docusaurus: bin/docusaurus.mjs - checksum: 95dc10c721c1ec9b4912b772fc21f7ed79a4d27e3ab50c5acf30a86609ac8c4b544639fa6590705a3fac82ed72d3ae9b4b197d2db432d1af45d55b21bace6994 + checksum: 0e2912a09964778db626dc190317badb074f2f5e09157b8070f281eff69ce2e89846529584ce9bf6e6898293409c353adc80572484aceda1d2136aa2b0b334ca languageName: node linkType: hard -"@docusaurus/cssnano-preset@npm:0.0.0-5591": - version: 0.0.0-5591 - resolution: "@docusaurus/cssnano-preset@npm:0.0.0-5591" +"@docusaurus/cssnano-preset@npm:0.0.0-5703": + version: 0.0.0-5703 + resolution: "@docusaurus/cssnano-preset@npm:0.0.0-5703" dependencies: cssnano-preset-advanced: ^5.3.10 - postcss: ^8.4.21 - postcss-sort-media-queries: ^4.3.0 - tslib: ^2.5.0 - checksum: 256397caffd2c3d993b8a1e37b9a4f02b8baf4d78ff86df368e47d8e61c5933fc1258e26edac5a1823db0472896196e6a88f16f85cc81834f6a5edb04dfb4bf9 + postcss: ^8.4.26 + postcss-sort-media-queries: ^4.4.1 + tslib: ^2.6.0 + checksum: 5f6e2a69765fb18de7d8f5e3037bf4f08695034762fca092229ae0ba9a40e9b76048914ffbf6b1d339d496e23580f47aa419f51f446c98fca0ba8d500a06e396 languageName: node linkType: hard -"@docusaurus/logger@npm:0.0.0-5591": - version: 0.0.0-5591 - resolution: "@docusaurus/logger@npm:0.0.0-5591" +"@docusaurus/logger@npm:0.0.0-5703": + version: 0.0.0-5703 + resolution: "@docusaurus/logger@npm:0.0.0-5703" dependencies: chalk: ^4.1.2 - tslib: ^2.5.0 - checksum: 0a59f232fec86170e9fbdca3f6bf7805ed0a38f1c83ff96aabdeb310c1de357c89db540e55d007086f76da701d0ffe89b283959856668894e8e2bae983f141b4 + tslib: ^2.6.0 + checksum: 9ee30b054388e5a618876316df50b73a7c4c8300ce205ace3c09f689a1a38b85d51891a1f0613341fd038a0d06290f0675d64c3e9e5b87f1eee3cb76fd45b55c languageName: node linkType: hard -"@docusaurus/mdx-loader@npm:0.0.0-5591": - version: 0.0.0-5591 - resolution: "@docusaurus/mdx-loader@npm:0.0.0-5591" +"@docusaurus/mdx-loader@npm:0.0.0-5703": + version: 0.0.0-5703 + resolution: "@docusaurus/mdx-loader@npm:0.0.0-5703" dependencies: - "@babel/parser": ^7.21.2 - "@babel/traverse": ^7.21.2 - "@docusaurus/logger": 0.0.0-5591 - "@docusaurus/utils": 0.0.0-5591 - "@docusaurus/utils-validation": 0.0.0-5591 + "@babel/parser": ^7.22.7 + "@babel/traverse": ^7.22.8 + "@docusaurus/logger": 0.0.0-5703 + "@docusaurus/utils": 0.0.0-5703 + "@docusaurus/utils-validation": 0.0.0-5703 "@mdx-js/mdx": ^2.1.5 + "@slorber/remark-comment": ^1.0.0 escape-html: ^1.0.3 estree-util-value-to-estree: ^2.1.0 file-loader: ^6.2.0 - fs-extra: ^11.1.0 + fs-extra: ^11.1.1 hastscript: ^7.1.0 image-size: ^1.0.2 mdast-util-mdx: ^2.0.0 - mdast-util-to-string: ^3.0.0 + mdast-util-to-string: ^3.2.0 rehype-raw: ^6.1.1 - remark-comment: ^1.0.0 remark-directive: ^2.0.1 remark-emoji: ^2.2.0 + remark-frontmatter: ^5.0.0 remark-gfm: ^3.0.1 stringify-object: ^3.3.0 - tslib: ^2.5.0 + tslib: ^2.6.0 unified: ^10.1.2 unist-util-visit: ^2.0.3 url-loader: ^4.1.1 - webpack: ^5.76.0 + vfile: ^5.3.7 + webpack: ^5.88.1 peerDependencies: - react: ^16.8.4 || ^17.0.0 - react-dom: ^16.8.4 || ^17.0.0 - checksum: 919c5f0a0d815674bbf8777ba4ce758d26bb13f046e772d11b7f688b183a31d58bb9ba55d8a484f181996ea16f9f967529337ab98bc62b9d6c806d4dde374d15 + react: ^18.0.0 + react-dom: ^18.0.0 + checksum: d57b08d7d676b9246be129af06a803fc55162359578e486456cb96a2372809c2093ef4115c926cf8e8be35e285b35d3ea444d808d46afb78edf66b49f58474fb languageName: node linkType: hard -"@docusaurus/module-type-aliases@npm:0.0.0-5591": - version: 0.0.0-5591 - resolution: "@docusaurus/module-type-aliases@npm:0.0.0-5591" +"@docusaurus/module-type-aliases@npm:0.0.0-5703": + version: 0.0.0-5703 + resolution: "@docusaurus/module-type-aliases@npm:0.0.0-5703" dependencies: "@docusaurus/react-loadable": 5.5.2 - "@docusaurus/types": 0.0.0-5591 + "@docusaurus/types": 0.0.0-5703 "@types/history": ^4.7.11 "@types/react": "*" "@types/react-router-config": "*" @@ -1777,207 +1848,208 @@ __metadata: peerDependencies: react: "*" react-dom: "*" - checksum: 9009e4f6edbfd274b42f5a0c2821c90606103404ec7df9e916940799ee8e810605549178d6a3e7ad6531554402d60a3db822268c88ddbff119a5c10f85f833d4 + checksum: b0dbf719f3c6510b6706f36310b185bdf8a8a2ab5d3b0b76f8962b08d3b1a86783c3f4c23455c03d528500871f0a18ede4e03a0df8c7a44096b91097a5ffda7d languageName: node linkType: hard -"@docusaurus/plugin-client-redirects@npm:0.0.0-5591": - version: 0.0.0-5591 - resolution: "@docusaurus/plugin-client-redirects@npm:0.0.0-5591" +"@docusaurus/plugin-client-redirects@npm:0.0.0-5703": + version: 0.0.0-5703 + resolution: "@docusaurus/plugin-client-redirects@npm:0.0.0-5703" dependencies: - "@docusaurus/core": 0.0.0-5591 - "@docusaurus/logger": 0.0.0-5591 - "@docusaurus/utils": 0.0.0-5591 - "@docusaurus/utils-common": 0.0.0-5591 - "@docusaurus/utils-validation": 0.0.0-5591 - eta: ^2.0.1 - fs-extra: ^11.1.0 + "@docusaurus/core": 0.0.0-5703 + "@docusaurus/logger": 0.0.0-5703 + "@docusaurus/utils": 0.0.0-5703 + "@docusaurus/utils-common": 0.0.0-5703 + "@docusaurus/utils-validation": 0.0.0-5703 + eta: ^2.2.0 + fs-extra: ^11.1.1 lodash: ^4.17.21 - tslib: ^2.5.0 + tslib: ^2.6.0 peerDependencies: - react: ^16.8.4 || ^17.0.0 - react-dom: ^16.8.4 || ^17.0.0 - checksum: 9e06448d280e3642fbe6ae02586c430c1245410e225a6f14f35c815d9cf13734b8793266267777b0f49eef968cd30d8247542b4521f3bdde0d5bebbfdd4a757c + react: ^18.0.0 + react-dom: ^18.0.0 + checksum: ac246eeb75028acd6a1d8804572fb89bac5575facf82c35ca3c8441d916980c183f5342a768d31cccc95f2034657bd25cfda24d480a2b8b4abdd693a51d9754e languageName: node linkType: hard -"@docusaurus/plugin-content-blog@npm:0.0.0-5591": - version: 0.0.0-5591 - resolution: "@docusaurus/plugin-content-blog@npm:0.0.0-5591" +"@docusaurus/plugin-content-blog@npm:0.0.0-5703": + version: 0.0.0-5703 + resolution: "@docusaurus/plugin-content-blog@npm:0.0.0-5703" dependencies: - "@docusaurus/core": 0.0.0-5591 - "@docusaurus/logger": 0.0.0-5591 - "@docusaurus/mdx-loader": 0.0.0-5591 - "@docusaurus/types": 0.0.0-5591 - "@docusaurus/utils": 0.0.0-5591 - "@docusaurus/utils-common": 0.0.0-5591 - "@docusaurus/utils-validation": 0.0.0-5591 + "@docusaurus/core": 0.0.0-5703 + "@docusaurus/logger": 0.0.0-5703 + "@docusaurus/mdx-loader": 0.0.0-5703 + "@docusaurus/types": 0.0.0-5703 + "@docusaurus/utils": 0.0.0-5703 + "@docusaurus/utils-common": 0.0.0-5703 + "@docusaurus/utils-validation": 0.0.0-5703 cheerio: ^1.0.0-rc.12 feed: ^4.2.2 - fs-extra: ^11.1.0 + fs-extra: ^11.1.1 lodash: ^4.17.21 reading-time: ^1.5.0 - tslib: ^2.5.0 + srcset: ^4.0.0 + tslib: ^2.6.0 unist-util-visit: ^2.0.3 utility-types: ^3.10.0 - webpack: ^5.76.0 + webpack: ^5.88.1 peerDependencies: - react: ^16.8.4 || ^17.0.0 - react-dom: ^16.8.4 || ^17.0.0 - checksum: 61014344725c5bb003b1ef0e460d9287501f69d7a475b1650ddaffdd5a1609db244f766b1b0a2188f4db1a68f0ddd4dfd3ac6abcd20ed17446fa6294e35bea96 + react: ^18.0.0 + react-dom: ^18.0.0 + checksum: 46e4a4fac407a8014ce0918933a476b03adca3d3b7e76b27a87bf0eeeb446f20e25db60b292f743652f3ad88232824f7a1541fcb7d27bcdbf9cb6d1c94e9a1b5 languageName: node linkType: hard -"@docusaurus/plugin-content-docs@npm:0.0.0-5591": - version: 0.0.0-5591 - resolution: "@docusaurus/plugin-content-docs@npm:0.0.0-5591" +"@docusaurus/plugin-content-docs@npm:0.0.0-5703": + version: 0.0.0-5703 + resolution: "@docusaurus/plugin-content-docs@npm:0.0.0-5703" dependencies: - "@docusaurus/core": 0.0.0-5591 - "@docusaurus/logger": 0.0.0-5591 - "@docusaurus/mdx-loader": 0.0.0-5591 - "@docusaurus/module-type-aliases": 0.0.0-5591 - "@docusaurus/types": 0.0.0-5591 - "@docusaurus/utils": 0.0.0-5591 - "@docusaurus/utils-validation": 0.0.0-5591 - "@types/react-router-config": ^5.0.6 + "@docusaurus/core": 0.0.0-5703 + "@docusaurus/logger": 0.0.0-5703 + "@docusaurus/mdx-loader": 0.0.0-5703 + "@docusaurus/module-type-aliases": 0.0.0-5703 + "@docusaurus/types": 0.0.0-5703 + "@docusaurus/utils": 0.0.0-5703 + "@docusaurus/utils-validation": 0.0.0-5703 + "@types/react-router-config": ^5.0.7 combine-promises: ^1.1.0 - fs-extra: ^11.1.0 + fs-extra: ^11.1.1 import-fresh: ^3.3.0 js-yaml: ^4.1.0 lodash: ^4.17.21 - tslib: ^2.5.0 + tslib: ^2.6.0 utility-types: ^3.10.0 - webpack: ^5.76.0 + webpack: ^5.88.1 peerDependencies: - react: ^16.8.4 || ^17.0.0 - react-dom: ^16.8.4 || ^17.0.0 - checksum: 837fa1d6a0e5238ec8d9422a7de2da19380059edfd50946243bbc93f43f813336cd220a2f521e1efc99261218ab3cccaaf64c0977bdbaa14ed09f95924347476 + react: ^18.0.0 + react-dom: ^18.0.0 + checksum: b08fbbac78f76ca68fc4a8ba488f41709733727e073d5f2d1e671dab484c4d37729a657305b315052369292ec7ae83c32992e551eda1d0990c035aa84fecbac6 languageName: node linkType: hard -"@docusaurus/plugin-content-pages@npm:0.0.0-5591": - version: 0.0.0-5591 - resolution: "@docusaurus/plugin-content-pages@npm:0.0.0-5591" +"@docusaurus/plugin-content-pages@npm:0.0.0-5703": + version: 0.0.0-5703 + resolution: "@docusaurus/plugin-content-pages@npm:0.0.0-5703" dependencies: - "@docusaurus/core": 0.0.0-5591 - "@docusaurus/mdx-loader": 0.0.0-5591 - "@docusaurus/types": 0.0.0-5591 - "@docusaurus/utils": 0.0.0-5591 - "@docusaurus/utils-validation": 0.0.0-5591 - fs-extra: ^11.1.0 - tslib: ^2.5.0 - webpack: ^5.76.0 + "@docusaurus/core": 0.0.0-5703 + "@docusaurus/mdx-loader": 0.0.0-5703 + "@docusaurus/types": 0.0.0-5703 + "@docusaurus/utils": 0.0.0-5703 + "@docusaurus/utils-validation": 0.0.0-5703 + fs-extra: ^11.1.1 + tslib: ^2.6.0 + webpack: ^5.88.1 peerDependencies: - react: ^16.8.4 || ^17.0.0 - react-dom: ^16.8.4 || ^17.0.0 - checksum: 74bfbc522fc60d0830b47a0100a0afd66d21d290047432414e9bd94db21d61805b883fc155f6c9ee965023f6153d7fb09b9219386f9140cda52540c40028942f + react: ^18.0.0 + react-dom: ^18.0.0 + checksum: 9d0b904259c625d82175fa3fdeae89de8503f409a7dc47c9077f35d25f72fcf76a0a6392f5e790c3bf2604896e1aa0fced00386b9df553f6ba01247ccadd6503 languageName: node linkType: hard -"@docusaurus/plugin-debug@npm:0.0.0-5591": - version: 0.0.0-5591 - resolution: "@docusaurus/plugin-debug@npm:0.0.0-5591" +"@docusaurus/plugin-debug@npm:0.0.0-5703": + version: 0.0.0-5703 + resolution: "@docusaurus/plugin-debug@npm:0.0.0-5703" dependencies: - "@docusaurus/core": 0.0.0-5591 - "@docusaurus/types": 0.0.0-5591 - "@docusaurus/utils": 0.0.0-5591 - fs-extra: ^11.1.0 - react-json-view: ^1.21.3 - tslib: ^2.5.0 + "@docusaurus/core": 0.0.0-5703 + "@docusaurus/types": 0.0.0-5703 + "@docusaurus/utils": 0.0.0-5703 + "@microlink/react-json-view": ^1.22.2 + fs-extra: ^11.1.1 + tslib: ^2.6.0 peerDependencies: - react: ^16.8.4 || ^17.0.0 - react-dom: ^16.8.4 || ^17.0.0 - checksum: f42bc6e5139e9aff99eab24a506f74fd9b0ef3baecf46fadb0596ead8167d58c4ba92b86a9e665d00bedaccbfeb7c483c02ef4f1c5de49cc966e457e624c0b45 + react: ^18.0.0 + react-dom: ^18.0.0 + checksum: b9bf04c27144dc797fa25cae6df95f5a8b15c888993194bf1b0fae06ce6ae55cf338270b7a914ef07d6551addd6261e628a465c4f277a4e13753c207e533557d languageName: node linkType: hard -"@docusaurus/plugin-google-analytics@npm:0.0.0-5591": - version: 0.0.0-5591 - resolution: "@docusaurus/plugin-google-analytics@npm:0.0.0-5591" +"@docusaurus/plugin-google-analytics@npm:0.0.0-5703": + version: 0.0.0-5703 + resolution: "@docusaurus/plugin-google-analytics@npm:0.0.0-5703" dependencies: - "@docusaurus/core": 0.0.0-5591 - "@docusaurus/types": 0.0.0-5591 - "@docusaurus/utils-validation": 0.0.0-5591 - tslib: ^2.5.0 + "@docusaurus/core": 0.0.0-5703 + "@docusaurus/types": 0.0.0-5703 + "@docusaurus/utils-validation": 0.0.0-5703 + tslib: ^2.6.0 peerDependencies: - react: ^16.8.4 || ^17.0.0 - react-dom: ^16.8.4 || ^17.0.0 - checksum: 7c8b9bdb182b0eff01d6f85eb01cc6ffeb3325cb0c154187230328484669f346fa998dfa25bc474f9b03551c6351a2da76f31d68f2c7ce742382d579a32e89e7 + react: ^18.0.0 + react-dom: ^18.0.0 + checksum: ad98ea301caa4908197a3c460ae88dd5598c1485d8643708e8fb3f757ae3bf854efc1b5a1ab9c8ba15371c3a989704d7f9fdb55dd25d1d1b81936526068a877b languageName: node linkType: hard -"@docusaurus/plugin-google-gtag@npm:0.0.0-5591": - version: 0.0.0-5591 - resolution: "@docusaurus/plugin-google-gtag@npm:0.0.0-5591" +"@docusaurus/plugin-google-gtag@npm:0.0.0-5703": + version: 0.0.0-5703 + resolution: "@docusaurus/plugin-google-gtag@npm:0.0.0-5703" dependencies: - "@docusaurus/core": 0.0.0-5591 - "@docusaurus/types": 0.0.0-5591 - "@docusaurus/utils-validation": 0.0.0-5591 + "@docusaurus/core": 0.0.0-5703 + "@docusaurus/types": 0.0.0-5703 + "@docusaurus/utils-validation": 0.0.0-5703 "@types/gtag.js": ^0.0.12 - tslib: ^2.5.0 + tslib: ^2.6.0 peerDependencies: - react: ^16.8.4 || ^17.0.0 - react-dom: ^16.8.4 || ^17.0.0 - checksum: 38daa81f7d499c819bf6221a9ba36d71e10f98f2c2e6b5adbcfcfbfc3f54e32df8315c98f381c9107f40ebe7aa9f7074dd16de6f925501f712dae73de3272133 + react: ^18.0.0 + react-dom: ^18.0.0 + checksum: 9fbdbc0569f1ff634c357d197c1442da17c4a09c03163640db1d1bde0be8612dd432e494a4f02eb43ac58dd7df2cbd335911fdb7fa315a9de95e173090daf5dc languageName: node linkType: hard -"@docusaurus/plugin-google-tag-manager@npm:0.0.0-5591": - version: 0.0.0-5591 - resolution: "@docusaurus/plugin-google-tag-manager@npm:0.0.0-5591" +"@docusaurus/plugin-google-tag-manager@npm:0.0.0-5703": + version: 0.0.0-5703 + resolution: "@docusaurus/plugin-google-tag-manager@npm:0.0.0-5703" dependencies: - "@docusaurus/core": 0.0.0-5591 - "@docusaurus/types": 0.0.0-5591 - "@docusaurus/utils-validation": 0.0.0-5591 - tslib: ^2.5.0 + "@docusaurus/core": 0.0.0-5703 + "@docusaurus/types": 0.0.0-5703 + "@docusaurus/utils-validation": 0.0.0-5703 + tslib: ^2.6.0 peerDependencies: - react: ^16.8.4 || ^17.0.0 - react-dom: ^16.8.4 || ^17.0.0 - checksum: afc7e93de44fbee69183e285fc429cc406c184e28a8b8f3f774ee33d88a1edf6c12449bf3ad731d36b475b3915b5692925bd2cb48127ab92402cde6ff4442584 + react: ^18.0.0 + react-dom: ^18.0.0 + checksum: 3ed2c6eb05087db3877ffe98cc6eca59be80889411e3cdbd981ac4d951a5efa269a1011a39a94c997d93474fd916e3634905a6537e10575e5d5a954a9bb00c5d languageName: node linkType: hard -"@docusaurus/plugin-sitemap@npm:0.0.0-5591": - version: 0.0.0-5591 - resolution: "@docusaurus/plugin-sitemap@npm:0.0.0-5591" +"@docusaurus/plugin-sitemap@npm:0.0.0-5703": + version: 0.0.0-5703 + resolution: "@docusaurus/plugin-sitemap@npm:0.0.0-5703" dependencies: - "@docusaurus/core": 0.0.0-5591 - "@docusaurus/logger": 0.0.0-5591 - "@docusaurus/types": 0.0.0-5591 - "@docusaurus/utils": 0.0.0-5591 - "@docusaurus/utils-common": 0.0.0-5591 - "@docusaurus/utils-validation": 0.0.0-5591 - fs-extra: ^11.1.0 + "@docusaurus/core": 0.0.0-5703 + "@docusaurus/logger": 0.0.0-5703 + "@docusaurus/types": 0.0.0-5703 + "@docusaurus/utils": 0.0.0-5703 + "@docusaurus/utils-common": 0.0.0-5703 + "@docusaurus/utils-validation": 0.0.0-5703 + fs-extra: ^11.1.1 sitemap: ^7.1.1 - tslib: ^2.5.0 + tslib: ^2.6.0 peerDependencies: - react: ^16.8.4 || ^17.0.0 - react-dom: ^16.8.4 || ^17.0.0 - checksum: cf9b5397699e3f7ff4d3fef175dfdfa66820ffd40a4892991634423331d19849da8f0d78bc453b5e964ff25a9705d4ad1e9dd0dcdc27b8520c6108594c491fc1 + react: ^18.0.0 + react-dom: ^18.0.0 + checksum: 1afbd2e3575ae09428fb4c53a2563e313c3e1a2323c79bdc256779c56f8d796c2c94473d055d6d7a97d477f06e35f0922bed441f7c3e1467feeb5329e1f7761b languageName: node linkType: hard -"@docusaurus/preset-classic@npm:0.0.0-5591": - version: 0.0.0-5591 - resolution: "@docusaurus/preset-classic@npm:0.0.0-5591" +"@docusaurus/preset-classic@npm:0.0.0-5703": + version: 0.0.0-5703 + resolution: "@docusaurus/preset-classic@npm:0.0.0-5703" dependencies: - "@docusaurus/core": 0.0.0-5591 - "@docusaurus/plugin-content-blog": 0.0.0-5591 - "@docusaurus/plugin-content-docs": 0.0.0-5591 - "@docusaurus/plugin-content-pages": 0.0.0-5591 - "@docusaurus/plugin-debug": 0.0.0-5591 - "@docusaurus/plugin-google-analytics": 0.0.0-5591 - "@docusaurus/plugin-google-gtag": 0.0.0-5591 - "@docusaurus/plugin-google-tag-manager": 0.0.0-5591 - "@docusaurus/plugin-sitemap": 0.0.0-5591 - "@docusaurus/theme-classic": 0.0.0-5591 - "@docusaurus/theme-common": 0.0.0-5591 - "@docusaurus/theme-search-algolia": 0.0.0-5591 - "@docusaurus/types": 0.0.0-5591 + "@docusaurus/core": 0.0.0-5703 + "@docusaurus/plugin-content-blog": 0.0.0-5703 + "@docusaurus/plugin-content-docs": 0.0.0-5703 + "@docusaurus/plugin-content-pages": 0.0.0-5703 + "@docusaurus/plugin-debug": 0.0.0-5703 + "@docusaurus/plugin-google-analytics": 0.0.0-5703 + "@docusaurus/plugin-google-gtag": 0.0.0-5703 + "@docusaurus/plugin-google-tag-manager": 0.0.0-5703 + "@docusaurus/plugin-sitemap": 0.0.0-5703 + "@docusaurus/theme-classic": 0.0.0-5703 + "@docusaurus/theme-common": 0.0.0-5703 + "@docusaurus/theme-search-algolia": 0.0.0-5703 + "@docusaurus/types": 0.0.0-5703 peerDependencies: - react: ^16.8.4 || ^17.0.0 - react-dom: ^16.8.4 || ^17.0.0 - checksum: 3e613a95622482510f3fdad017ceabcdf0d25d82560af665b536803d4fb746cd4e849fbe02304f60099a3e09845003bb433bedeb1b3fcde13b93522e775350f1 + react: ^18.0.0 + react-dom: ^18.0.0 + checksum: d4c2e6e02b828b248351819410fe03e94a4b4fd8489e398b60d128ba8f173548f8353a3875ff0347179ee59e84df7e3e9e1e5b0be24b84f015c8c02b650eb80c languageName: node linkType: hard @@ -1993,161 +2065,160 @@ __metadata: languageName: node linkType: hard -"@docusaurus/theme-classic@npm:0.0.0-5591": - version: 0.0.0-5591 - resolution: "@docusaurus/theme-classic@npm:0.0.0-5591" +"@docusaurus/theme-classic@npm:0.0.0-5703": + version: 0.0.0-5703 + resolution: "@docusaurus/theme-classic@npm:0.0.0-5703" dependencies: - "@docusaurus/core": 0.0.0-5591 - "@docusaurus/mdx-loader": 0.0.0-5591 - "@docusaurus/module-type-aliases": 0.0.0-5591 - "@docusaurus/plugin-content-blog": 0.0.0-5591 - "@docusaurus/plugin-content-docs": 0.0.0-5591 - "@docusaurus/plugin-content-pages": 0.0.0-5591 - "@docusaurus/theme-common": 0.0.0-5591 - "@docusaurus/theme-translations": 0.0.0-5591 - "@docusaurus/types": 0.0.0-5591 - "@docusaurus/utils": 0.0.0-5591 - "@docusaurus/utils-common": 0.0.0-5591 - "@docusaurus/utils-validation": 0.0.0-5591 + "@docusaurus/core": 0.0.0-5703 + "@docusaurus/mdx-loader": 0.0.0-5703 + "@docusaurus/module-type-aliases": 0.0.0-5703 + "@docusaurus/plugin-content-blog": 0.0.0-5703 + "@docusaurus/plugin-content-docs": 0.0.0-5703 + "@docusaurus/plugin-content-pages": 0.0.0-5703 + "@docusaurus/theme-common": 0.0.0-5703 + "@docusaurus/theme-translations": 0.0.0-5703 + "@docusaurus/types": 0.0.0-5703 + "@docusaurus/utils": 0.0.0-5703 + "@docusaurus/utils-common": 0.0.0-5703 + "@docusaurus/utils-validation": 0.0.0-5703 "@mdx-js/react": ^2.1.5 clsx: ^1.2.1 - copy-text-to-clipboard: ^3.0.1 + copy-text-to-clipboard: ^3.2.0 infima: 0.2.0-alpha.43 lodash: ^4.17.21 nprogress: ^0.2.0 - postcss: ^8.4.21 - prism-react-renderer: ^1.3.5 + postcss: ^8.4.26 + prism-react-renderer: ^2.1.0 prismjs: ^1.29.0 react-router-dom: ^5.3.4 - rtlcss: ^4.0.0 - tslib: ^2.5.0 + rtlcss: ^4.1.0 + tslib: ^2.6.0 utility-types: ^3.10.0 peerDependencies: - react: ^16.8.4 || ^17.0.0 - react-dom: ^16.8.4 || ^17.0.0 - checksum: 1bcfdb13c932e02dbd292b9a3215fff039dbf317f0cedf3d88aa365e15d5a2653f23c3e284930d33263bc6bf2887578140affa752c146a2395acb75818db64bf + react: ^18.0.0 + react-dom: ^18.0.0 + checksum: ba078e06a07bbcc4a474f67938760852146e0cb612e44bc81b22879d374372eeea076de6e46e9f955dd351f37dadd98ced2e70b6b8a476b88684fae40855ecb9 languageName: node linkType: hard -"@docusaurus/theme-common@npm:0.0.0-5591": - version: 0.0.0-5591 - resolution: "@docusaurus/theme-common@npm:0.0.0-5591" +"@docusaurus/theme-common@npm:0.0.0-5703": + version: 0.0.0-5703 + resolution: "@docusaurus/theme-common@npm:0.0.0-5703" dependencies: - "@docusaurus/mdx-loader": 0.0.0-5591 - "@docusaurus/module-type-aliases": 0.0.0-5591 - "@docusaurus/plugin-content-blog": 0.0.0-5591 - "@docusaurus/plugin-content-docs": 0.0.0-5591 - "@docusaurus/plugin-content-pages": 0.0.0-5591 - "@docusaurus/utils": 0.0.0-5591 - "@docusaurus/utils-common": 0.0.0-5591 + "@docusaurus/mdx-loader": 0.0.0-5703 + "@docusaurus/module-type-aliases": 0.0.0-5703 + "@docusaurus/plugin-content-blog": 0.0.0-5703 + "@docusaurus/plugin-content-docs": 0.0.0-5703 + "@docusaurus/plugin-content-pages": 0.0.0-5703 + "@docusaurus/utils": 0.0.0-5703 + "@docusaurus/utils-common": 0.0.0-5703 "@types/history": ^4.7.11 "@types/react": "*" "@types/react-router-config": "*" clsx: ^1.2.1 parse-numeric-range: ^1.3.0 - prism-react-renderer: ^1.3.5 - tslib: ^2.5.0 - use-sync-external-store: ^1.2.0 + prism-react-renderer: ^2.1.0 + tslib: ^2.6.0 utility-types: ^3.10.0 peerDependencies: - react: ^16.8.4 || ^17.0.0 - react-dom: ^16.8.4 || ^17.0.0 - checksum: bd941e6eac23310748aa70a35c41ad6e9123ea93ed0b872d6beb3313df847827dc5490000cc443d83d31157841cbf4d58fc2f844c743b3cf2fe6ccc7d1507deb + react: ^18.0.0 + react-dom: ^18.0.0 + checksum: f9b23318dbb504bcce0992de475f1ab32860620523dfe749bfdb00ac8e7fc75be705fd5177db2ce893ed269de40cef7f6a7290d44a12c6a160d9461bbca05552 languageName: node linkType: hard -"@docusaurus/theme-search-algolia@npm:0.0.0-5591": - version: 0.0.0-5591 - resolution: "@docusaurus/theme-search-algolia@npm:0.0.0-5591" +"@docusaurus/theme-search-algolia@npm:0.0.0-5703": + version: 0.0.0-5703 + resolution: "@docusaurus/theme-search-algolia@npm:0.0.0-5703" dependencies: - "@docsearch/react": ^3.3.3 - "@docusaurus/core": 0.0.0-5591 - "@docusaurus/logger": 0.0.0-5591 - "@docusaurus/plugin-content-docs": 0.0.0-5591 - "@docusaurus/theme-common": 0.0.0-5591 - "@docusaurus/theme-translations": 0.0.0-5591 - "@docusaurus/utils": 0.0.0-5591 - "@docusaurus/utils-validation": 0.0.0-5591 - algoliasearch: ^4.15.0 - algoliasearch-helper: ^3.12.0 + "@docsearch/react": ^3.5.2 + "@docusaurus/core": 0.0.0-5703 + "@docusaurus/logger": 0.0.0-5703 + "@docusaurus/plugin-content-docs": 0.0.0-5703 + "@docusaurus/theme-common": 0.0.0-5703 + "@docusaurus/theme-translations": 0.0.0-5703 + "@docusaurus/utils": 0.0.0-5703 + "@docusaurus/utils-validation": 0.0.0-5703 + algoliasearch: ^4.18.0 + algoliasearch-helper: ^3.13.3 clsx: ^1.2.1 - eta: ^2.0.1 - fs-extra: ^11.1.0 + eta: ^2.2.0 + fs-extra: ^11.1.1 lodash: ^4.17.21 - tslib: ^2.5.0 + tslib: ^2.6.0 utility-types: ^3.10.0 peerDependencies: - react: ^16.8.4 || ^17.0.0 - react-dom: ^16.8.4 || ^17.0.0 - checksum: 7493eb67c7ba056aee42880006cd0587d81e05f81177f93d6f57f43f9af12cd2c9e6bed7b804c19a66fa6f192c5b6ccbbf9e16f923a48abe6c6a6a72d65bd5c1 + react: ^18.0.0 + react-dom: ^18.0.0 + checksum: 2e8ccc603126634488332ae108f9ac9ad3d2e1e46b5abef48720f2a25ae5cfc93850301d4ea30a6dc66034877b6abedd31229f622c6fd181347c3c14f7ba3c66 languageName: node linkType: hard -"@docusaurus/theme-translations@npm:0.0.0-5591": - version: 0.0.0-5591 - resolution: "@docusaurus/theme-translations@npm:0.0.0-5591" +"@docusaurus/theme-translations@npm:0.0.0-5703": + version: 0.0.0-5703 + resolution: "@docusaurus/theme-translations@npm:0.0.0-5703" dependencies: - fs-extra: ^11.1.0 - tslib: ^2.5.0 - checksum: 6dd8647d1db2a97c77f3aa0d5f6935bad21df97f26d20d0a08916717335f50e72193c2bd7417043c9fb5fb4d9c19140f1408c854df5ef92ff6210bcc8e55f917 + fs-extra: ^11.1.1 + tslib: ^2.6.0 + checksum: 1f952386982008e2e7b07d6b95b1a902a57891321ae2670f13f391a541944ec2c82f5e03d3ed2c459a17113387a51cb5efe824d03037a3cc0b25251451287d1d languageName: node linkType: hard -"@docusaurus/types@npm:0.0.0-5591": - version: 0.0.0-5591 - resolution: "@docusaurus/types@npm:0.0.0-5591" +"@docusaurus/types@npm:0.0.0-5703": + version: 0.0.0-5703 + resolution: "@docusaurus/types@npm:0.0.0-5703" dependencies: "@types/history": ^4.7.11 "@types/react": "*" commander: ^5.1.0 - joi: ^17.8.3 + joi: ^17.9.2 react-helmet-async: ^1.3.0 utility-types: ^3.10.0 - webpack: ^5.76.0 - webpack-merge: ^5.8.0 + webpack: ^5.88.1 + webpack-merge: ^5.9.0 peerDependencies: - react: ^16.8.4 || ^17.0.0 - react-dom: ^16.8.4 || ^17.0.0 - checksum: 6ea7a688f7cef509e0f3b5ab2a9bb9fb0841ffd033d82438b989a70344655a7420b456f5172be9aa13740316212970e4d9d3bc355eb5fd4c9b27c635baeb149a + react: ^18.0.0 + react-dom: ^18.0.0 + checksum: 46ca6a27c8a0d1b69f744375ee2c24be2deed20c2801231a462b2e37b7a6e1f73ab17b6a5506e05f628957be8be74e4cd960780b9986c8fa4ac1757bd8c74231 languageName: node linkType: hard -"@docusaurus/utils-common@npm:0.0.0-5591": - version: 0.0.0-5591 - resolution: "@docusaurus/utils-common@npm:0.0.0-5591" +"@docusaurus/utils-common@npm:0.0.0-5703": + version: 0.0.0-5703 + resolution: "@docusaurus/utils-common@npm:0.0.0-5703" dependencies: - tslib: ^2.5.0 + tslib: ^2.6.0 peerDependencies: "@docusaurus/types": "*" peerDependenciesMeta: "@docusaurus/types": optional: true - checksum: 6c21dac13338854bfaebef0a98b1c76a95f29cc16ae6cd43fac0734dbc16cec0df058339af7ebb6ca3dc3cd2ad2a21f4bbff221c9cf7ae5012a88bfc4b28f4d9 + checksum: 8f70f176a99bcbbde22abd759621087ad555e7967cddf85662402f6d55c84d5f44cc1a90bf4e64670fc75b6db646dca4f573b3656a1718d1596d60e0e6c2d23a languageName: node linkType: hard -"@docusaurus/utils-validation@npm:0.0.0-5591": - version: 0.0.0-5591 - resolution: "@docusaurus/utils-validation@npm:0.0.0-5591" +"@docusaurus/utils-validation@npm:0.0.0-5703": + version: 0.0.0-5703 + resolution: "@docusaurus/utils-validation@npm:0.0.0-5703" dependencies: - "@docusaurus/logger": 0.0.0-5591 - "@docusaurus/utils": 0.0.0-5591 - joi: ^17.8.3 + "@docusaurus/logger": 0.0.0-5703 + "@docusaurus/utils": 0.0.0-5703 + joi: ^17.9.2 js-yaml: ^4.1.0 - tslib: ^2.5.0 - checksum: 987acdce5ae5ce4c5bd78258201809889209d7293b063eb38888637452c80ecff72d12d84a7ce7fc49f52d61ca2a79c61006f3562b4180e379a1777b9d76493a + tslib: ^2.6.0 + checksum: e0d6df549644d8e732daf5407ce110dbccba17dcf84fe1a80091119675d2ce515e26bf6612fefa60b7df2c65dbaeee7ceb1a9f2b947a3705fe1efc7c229794e2 languageName: node linkType: hard -"@docusaurus/utils@npm:0.0.0-5591": - version: 0.0.0-5591 - resolution: "@docusaurus/utils@npm:0.0.0-5591" +"@docusaurus/utils@npm:0.0.0-5703": + version: 0.0.0-5703 + resolution: "@docusaurus/utils@npm:0.0.0-5703" dependencies: - "@docusaurus/logger": 0.0.0-5591 + "@docusaurus/logger": 0.0.0-5703 "@svgr/webpack": ^6.5.1 escape-string-regexp: ^4.0.0 file-loader: ^6.2.0 - fs-extra: ^11.1.0 + fs-extra: ^11.1.1 github-slugger: ^1.5.0 globby: ^11.1.0 gray-matter: ^4.0.3 @@ -2156,15 +2227,15 @@ __metadata: micromatch: ^4.0.5 resolve-pathname: ^3.0.0 shelljs: ^0.8.5 - tslib: ^2.5.0 + tslib: ^2.6.0 url-loader: ^4.1.1 - webpack: ^5.76.0 + webpack: ^5.88.1 peerDependencies: "@docusaurus/types": "*" peerDependenciesMeta: "@docusaurus/types": optional: true - checksum: 287d991f7a1924df744ed3a5c0d505a5b903b8bd43df39aac3c45fcc139639fb5b7827d12e4e00787126ad216006483723390141eb283ab733e4b6de819f5cd5 + checksum: 91f53b17393e29fadb01c039f5394fc257c54bd7d80068f3a3e8a5e52d635d2e3de9fe781340de2ff4eaf691a2d4104865291c05c22ffc8b48a0894f588f3a9e languageName: node linkType: hard @@ -2239,13 +2310,13 @@ __metadata: languageName: node linkType: hard -"@jridgewell/source-map@npm:^0.3.2": - version: 0.3.2 - resolution: "@jridgewell/source-map@npm:0.3.2" +"@jridgewell/source-map@npm:^0.3.3": + version: 0.3.5 + resolution: "@jridgewell/source-map@npm:0.3.5" dependencies: "@jridgewell/gen-mapping": ^0.3.0 "@jridgewell/trace-mapping": ^0.3.9 - checksum: 1b83f0eb944e77b70559a394d5d3b3f98a81fcc186946aceb3ef42d036762b52ef71493c6c0a3b7c1d2f08785f53ba2df1277fe629a06e6109588ff4cdcf7482 + checksum: 1ad4dec0bdafbade57920a50acec6634f88a0eb735851e0dda906fa9894e7f0549c492678aad1a10f8e144bfe87f238307bf2a914a1bc85b7781d345417e9f6f languageName: node linkType: hard @@ -2310,6 +2381,21 @@ __metadata: languageName: node linkType: hard +"@microlink/react-json-view@npm:^1.22.2": + version: 1.22.2 + resolution: "@microlink/react-json-view@npm:1.22.2" + dependencies: + flux: ~4.0.1 + react-base16-styling: ~0.6.0 + react-lifecycles-compat: ~3.0.4 + react-textarea-autosize: ~8.3.2 + peerDependencies: + react: ">= 15" + react-dom: ">= 15" + checksum: 7cc31fcc06f6bac2062aedda565e55a03e1275f5b810f0efee27de8ea60967713f3a13859a16ba775b9b3e8782c044928cf3faee48902a19ce1c58d7ecc6e8d0 + languageName: node + linkType: hard + "@nodelib/fs.scandir@npm:2.1.5": version: 2.1.5 resolution: "@nodelib/fs.scandir@npm:2.1.5" @@ -2428,6 +2514,17 @@ __metadata: languageName: node linkType: hard +"@slorber/remark-comment@npm:^1.0.0": + version: 1.0.0 + resolution: "@slorber/remark-comment@npm:1.0.0" + dependencies: + micromark-factory-space: ^1.0.0 + micromark-util-character: ^1.1.0 + micromark-util-symbol: ^1.0.1 + checksum: c96f1533d09913c57381859966f10a706afd8eb680923924af1c451f3b72f22c31e394028d7535131c10f8682d3c60206da95c50fb4f016fbbd04218c853cc88 + languageName: node + linkType: hard + "@slorber/static-site-generator-webpack-plugin@npm:^4.0.7": version: 4.0.7 resolution: "@slorber/static-site-generator-webpack-plugin@npm:4.0.7" @@ -2604,90 +2701,90 @@ __metadata: languageName: node linkType: hard -"@swc/core-darwin-arm64@npm:1.3.90": - version: 1.3.90 - resolution: "@swc/core-darwin-arm64@npm:1.3.90" +"@swc/core-darwin-arm64@npm:1.3.92": + version: 1.3.92 + resolution: "@swc/core-darwin-arm64@npm:1.3.92" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@swc/core-darwin-x64@npm:1.3.90": - version: 1.3.90 - resolution: "@swc/core-darwin-x64@npm:1.3.90" +"@swc/core-darwin-x64@npm:1.3.92": + version: 1.3.92 + resolution: "@swc/core-darwin-x64@npm:1.3.92" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@swc/core-linux-arm-gnueabihf@npm:1.3.90": - version: 1.3.90 - resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.90" +"@swc/core-linux-arm-gnueabihf@npm:1.3.92": + version: 1.3.92 + resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.92" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@swc/core-linux-arm64-gnu@npm:1.3.90": - version: 1.3.90 - resolution: "@swc/core-linux-arm64-gnu@npm:1.3.90" +"@swc/core-linux-arm64-gnu@npm:1.3.92": + version: 1.3.92 + resolution: "@swc/core-linux-arm64-gnu@npm:1.3.92" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-arm64-musl@npm:1.3.90": - version: 1.3.90 - resolution: "@swc/core-linux-arm64-musl@npm:1.3.90" +"@swc/core-linux-arm64-musl@npm:1.3.92": + version: 1.3.92 + resolution: "@swc/core-linux-arm64-musl@npm:1.3.92" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@swc/core-linux-x64-gnu@npm:1.3.90": - version: 1.3.90 - resolution: "@swc/core-linux-x64-gnu@npm:1.3.90" +"@swc/core-linux-x64-gnu@npm:1.3.92": + version: 1.3.92 + resolution: "@swc/core-linux-x64-gnu@npm:1.3.92" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-x64-musl@npm:1.3.90": - version: 1.3.90 - resolution: "@swc/core-linux-x64-musl@npm:1.3.90" +"@swc/core-linux-x64-musl@npm:1.3.92": + version: 1.3.92 + resolution: "@swc/core-linux-x64-musl@npm:1.3.92" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@swc/core-win32-arm64-msvc@npm:1.3.90": - version: 1.3.90 - resolution: "@swc/core-win32-arm64-msvc@npm:1.3.90" +"@swc/core-win32-arm64-msvc@npm:1.3.92": + version: 1.3.92 + resolution: "@swc/core-win32-arm64-msvc@npm:1.3.92" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@swc/core-win32-ia32-msvc@npm:1.3.90": - version: 1.3.90 - resolution: "@swc/core-win32-ia32-msvc@npm:1.3.90" +"@swc/core-win32-ia32-msvc@npm:1.3.92": + version: 1.3.92 + resolution: "@swc/core-win32-ia32-msvc@npm:1.3.92" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@swc/core-win32-x64-msvc@npm:1.3.90": - version: 1.3.90 - resolution: "@swc/core-win32-x64-msvc@npm:1.3.90" +"@swc/core-win32-x64-msvc@npm:1.3.92": + version: 1.3.92 + resolution: "@swc/core-win32-x64-msvc@npm:1.3.92" conditions: os=win32 & cpu=x64 languageName: node linkType: hard "@swc/core@npm:^1.3.46": - version: 1.3.90 - resolution: "@swc/core@npm:1.3.90" + version: 1.3.92 + resolution: "@swc/core@npm:1.3.92" dependencies: - "@swc/core-darwin-arm64": 1.3.90 - "@swc/core-darwin-x64": 1.3.90 - "@swc/core-linux-arm-gnueabihf": 1.3.90 - "@swc/core-linux-arm64-gnu": 1.3.90 - "@swc/core-linux-arm64-musl": 1.3.90 - "@swc/core-linux-x64-gnu": 1.3.90 - "@swc/core-linux-x64-musl": 1.3.90 - "@swc/core-win32-arm64-msvc": 1.3.90 - "@swc/core-win32-ia32-msvc": 1.3.90 - "@swc/core-win32-x64-msvc": 1.3.90 + "@swc/core-darwin-arm64": 1.3.92 + "@swc/core-darwin-x64": 1.3.92 + "@swc/core-linux-arm-gnueabihf": 1.3.92 + "@swc/core-linux-arm64-gnu": 1.3.92 + "@swc/core-linux-arm64-musl": 1.3.92 + "@swc/core-linux-x64-gnu": 1.3.92 + "@swc/core-linux-x64-musl": 1.3.92 + "@swc/core-win32-arm64-msvc": 1.3.92 + "@swc/core-win32-ia32-msvc": 1.3.92 + "@swc/core-win32-x64-msvc": 1.3.92 "@swc/counter": ^0.1.1 "@swc/types": ^0.1.5 peerDependencies: @@ -2716,7 +2813,7 @@ __metadata: peerDependenciesMeta: "@swc/helpers": optional: true - checksum: f8ced5187068dc73445c135065c6492f0ac559d0f7720c2482aa9663c87bd015f3d2abef6ee7b2f817280a5e8dd0946c59cce7e1499180644fbc948a9e3823ab + checksum: 88c0c62ff790e896180862c341be8bae98baf0a5c5e87f2f04f49e14b8c4fba460d6b352618b4dda066c8ae6bf152cd843eab25837f38128175208b8c0635721 languageName: node linkType: hard @@ -2973,6 +3070,15 @@ __metadata: languageName: node linkType: hard +"@types/mdast@npm:^4.0.0": + version: 4.0.1 + resolution: "@types/mdast@npm:4.0.1" + dependencies: + "@types/unist": "*" + checksum: 3d8fe54a6fb747376c4cc2f05c319730a5737b77844d8ea58d2d696417fa933cd270c20e197f531fc1b4be5e340dc416129f8b4f5fa2f0d2d0cf51850928340a + languageName: node + linkType: hard + "@types/mdx@npm:^2.0.0": version: 2.0.5 resolution: "@types/mdx@npm:2.0.5" @@ -3022,6 +3128,13 @@ __metadata: languageName: node linkType: hard +"@types/prismjs@npm:^1.26.0": + version: 1.26.1 + resolution: "@types/prismjs@npm:1.26.1" + checksum: ef34b2f47e34645760a48fc351e5926c330810a724c64838bfc30b7317c6038ea66abd19fe9c713002679d6f2faa97d90d432869e512dcb660d9a791c150595a + languageName: node + linkType: hard + "@types/prop-types@npm:*": version: 15.7.5 resolution: "@types/prop-types@npm:15.7.5" @@ -3043,14 +3156,14 @@ __metadata: languageName: node linkType: hard -"@types/react-router-config@npm:*, @types/react-router-config@npm:^5.0.6": - version: 5.0.6 - resolution: "@types/react-router-config@npm:5.0.6" +"@types/react-router-config@npm:*, @types/react-router-config@npm:^5.0.7": + version: 5.0.8 + resolution: "@types/react-router-config@npm:5.0.8" dependencies: "@types/history": ^4.7.11 "@types/react": "*" - "@types/react-router": "*" - checksum: e32a7b19d14c1c07e2c06630207bc4ecf86a01585b832bf3c0756c9eaca312b5839bc8d50e8d744738ea50e7bbde0be3b1fd14a6a9398159d36bce33aff7f280 + "@types/react-router": ^5.1.0 + checksum: afbd96e526fcdd19a3c8604912496a5a7ecfdcd848632a003ef8af69701ca74f14451e4fac93d265b678ca07c82ec4a103126f64c040a4aefa1a8172619be2bd languageName: node linkType: hard @@ -3065,13 +3178,13 @@ __metadata: languageName: node linkType: hard -"@types/react-router@npm:*": - version: 5.1.19 - resolution: "@types/react-router@npm:5.1.19" +"@types/react-router@npm:*, @types/react-router@npm:^5.1.0": + version: 5.1.20 + resolution: "@types/react-router@npm:5.1.20" dependencies: "@types/history": ^4.7.11 "@types/react": "*" - checksum: 3536c3dec7af1f12fed2bea246eb143bd893ee66d4e58c1d3fe734cbd67d8a0aedac0bba9255c58fc69dbd32ae17ad280d6866916aee32653a705178e4a544dc + checksum: 128764143473a5e9457ddc715436b5d49814b1c214dde48939b9bef23f0e77f52ffcdfa97eb8d3cc27e2c229869c0cdd90f637d887b62f2c9f065a87d6425419 languageName: node linkType: hard @@ -3137,7 +3250,14 @@ __metadata: languageName: node linkType: hard -"@types/unist@npm:*, @types/unist@npm:^2.0.0": +"@types/unist@npm:*, @types/unist@npm:^3.0.0": + version: 3.0.0 + resolution: "@types/unist@npm:3.0.0" + checksum: e9d21a8fb5e332be0acef29192d82632875b2ef3e700f1bc64fdfc1520189542de85c3d4f3bcfbc2f4afdb210f4c23f68061f3fbf10744e920d4f18430d19f49 + languageName: node + linkType: hard + +"@types/unist@npm:^2.0.0": version: 2.0.6 resolution: "@types/unist@npm:2.0.6" checksum: 25cb860ff10dde48b54622d58b23e66214211a61c84c0f15f88d38b61aa1b53d4d46e42b557924a93178c501c166aa37e28d7f6d994aba13d24685326272d5db @@ -3151,12 +3271,12 @@ __metadata: languageName: node linkType: hard -"@types/ws@npm:^8.5.1": - version: 8.5.3 - resolution: "@types/ws@npm:8.5.3" +"@types/ws@npm:^8.5.5": + version: 8.5.6 + resolution: "@types/ws@npm:8.5.6" dependencies: "@types/node": "*" - checksum: 0ce46f850d41383fcdc2149bcacc86d7232fa7a233f903d2246dff86e31701a02f8566f40af5f8b56d1834779255c04ec6ec78660fe0f9b2a69cf3d71937e4ae + checksum: 7addb0c5fa4e7713d5209afb8a90f1852b12c02cb537395adf7a05fbaf21205dc5f7c110fd5ad6f3dbf147112cbff33fb11d8633059cb344f0c14f595b1ea1fb languageName: node linkType: hard @@ -3358,12 +3478,12 @@ __metadata: languageName: node linkType: hard -"acorn-import-assertions@npm:^1.7.6": - version: 1.8.0 - resolution: "acorn-import-assertions@npm:1.8.0" +"acorn-import-assertions@npm:^1.9.0": + version: 1.9.0 + resolution: "acorn-import-assertions@npm:1.9.0" peerDependencies: acorn: ^8 - checksum: 5c4cf7c850102ba7ae0eeae0deb40fb3158c8ca5ff15c0bca43b5c47e307a1de3d8ef761788f881343680ea374631ae9e9615ba8876fee5268dbe068c98bcba6 + checksum: 944fb2659d0845c467066bdcda2e20c05abe3aaf11972116df457ce2627628a81764d800dd55031ba19de513ee0d43bb771bc679cc0eda66dc8b4fade143bc0c languageName: node linkType: hard @@ -3383,12 +3503,12 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.0.0, acorn@npm:^8.0.4, acorn@npm:^8.5.0, acorn@npm:^8.7.1": - version: 8.8.2 - resolution: "acorn@npm:8.8.2" +"acorn@npm:^8.0.0, acorn@npm:^8.0.4, acorn@npm:^8.7.1, acorn@npm:^8.8.2": + version: 8.10.0 + resolution: "acorn@npm:8.10.0" bin: acorn: bin/acorn - checksum: f790b99a1bf63ef160c967e23c46feea7787e531292bb827126334612c234ed489a0dc2c7ba33156416f0ffa8d25bf2b0fdb7f35c2ba60eb3e960572bece4001 + checksum: 538ba38af0cc9e5ef983aee196c4b8b4d87c0c94532334fa7e065b2c8a1f85863467bb774231aae91613fcda5e68740c15d97b1967ae3394d20faddddd8af61d languageName: node linkType: hard @@ -3487,36 +3607,36 @@ __metadata: languageName: node linkType: hard -"algoliasearch-helper@npm:^3.12.0": - version: 3.12.0 - resolution: "algoliasearch-helper@npm:3.12.0" +"algoliasearch-helper@npm:^3.13.3": + version: 3.14.2 + resolution: "algoliasearch-helper@npm:3.14.2" dependencies: "@algolia/events": ^4.0.1 peerDependencies: algoliasearch: ">= 3.1 < 6" - checksum: 177ead2a04c60f1005a9ccac4096714cd992f0f158b91791deb719765f9a94ea67efc782f29cf5182e9a8ce75bcf7461bb8bf8bab9846b5fa1b9ed1f8a2b902f + checksum: d66444b25fe8ee64675bb660ff1980870751818cb4a29c57bda6ca410372f2bfa031a455dcd5981941736db89d8294187c5b3bc1ce2a2567c6e43657ccd208b8 languageName: node linkType: hard -"algoliasearch@npm:^4.0.0, algoliasearch@npm:^4.15.0": - version: 4.17.0 - resolution: "algoliasearch@npm:4.17.0" +"algoliasearch@npm:^4.18.0, algoliasearch@npm:^4.19.1": + version: 4.20.0 + resolution: "algoliasearch@npm:4.20.0" dependencies: - "@algolia/cache-browser-local-storage": 4.17.0 - "@algolia/cache-common": 4.17.0 - "@algolia/cache-in-memory": 4.17.0 - "@algolia/client-account": 4.17.0 - "@algolia/client-analytics": 4.17.0 - "@algolia/client-common": 4.17.0 - "@algolia/client-personalization": 4.17.0 - "@algolia/client-search": 4.17.0 - "@algolia/logger-common": 4.17.0 - "@algolia/logger-console": 4.17.0 - "@algolia/requester-browser-xhr": 4.17.0 - "@algolia/requester-common": 4.17.0 - "@algolia/requester-node-http": 4.17.0 - "@algolia/transporter": 4.17.0 - checksum: 982fd46519283ea769142aebb24eb15a0f8090a8211159c60772d0333bbb7f4dec1edcc72fc79223aa87ebf2a970d9d12b5735236f47fc3b5c5b07dd2eb24e35 + "@algolia/cache-browser-local-storage": 4.20.0 + "@algolia/cache-common": 4.20.0 + "@algolia/cache-in-memory": 4.20.0 + "@algolia/client-account": 4.20.0 + "@algolia/client-analytics": 4.20.0 + "@algolia/client-common": 4.20.0 + "@algolia/client-personalization": 4.20.0 + "@algolia/client-search": 4.20.0 + "@algolia/logger-common": 4.20.0 + "@algolia/logger-console": 4.20.0 + "@algolia/requester-browser-xhr": 4.20.0 + "@algolia/requester-common": 4.20.0 + "@algolia/requester-node-http": 4.20.0 + "@algolia/transporter": 4.20.0 + checksum: 078954944452f57d2e3b47c6ed4905caf797814324a4d5068a8b6685d434a885977a3e607714c5fb6eb29c7c3e717b3ee9cb01c8b2320e2c7bd73bcd8d42e70f languageName: node linkType: hard @@ -3678,13 +3798,13 @@ __metadata: languageName: node linkType: hard -"autoprefixer@npm:^10.4.12, autoprefixer@npm:^10.4.13": - version: 10.4.14 - resolution: "autoprefixer@npm:10.4.14" +"autoprefixer@npm:^10.4.12, autoprefixer@npm:^10.4.14": + version: 10.4.16 + resolution: "autoprefixer@npm:10.4.16" dependencies: - browserslist: ^4.21.5 - caniuse-lite: ^1.0.30001464 - fraction.js: ^4.2.0 + browserslist: ^4.21.10 + caniuse-lite: ^1.0.30001538 + fraction.js: ^4.3.6 normalize-range: ^0.1.2 picocolors: ^1.0.0 postcss-value-parser: ^4.2.0 @@ -3692,7 +3812,7 @@ __metadata: postcss: ^8.1.0 bin: autoprefixer: bin/autoprefixer - checksum: e9f18e664a4e4a54a8f4ec5f6b49ed228ec45afaa76efcae361c93721795dc5ab644f36d2fdfc0dea446b02a8067b9372f91542ea431994399e972781ed46d95 + checksum: 45fad7086495048dacb14bb7b00313e70e135b5d8e8751dcc60548889400763705ab16fc2d99ea628b44c3472698fb0e39598f595ba28409c965ab159035afde languageName: node linkType: hard @@ -3706,16 +3826,16 @@ __metadata: languageName: node linkType: hard -"babel-loader@npm:^9.1.2": - version: 9.1.2 - resolution: "babel-loader@npm:9.1.2" +"babel-loader@npm:^9.1.3": + version: 9.1.3 + resolution: "babel-loader@npm:9.1.3" dependencies: - find-cache-dir: ^3.3.2 + find-cache-dir: ^4.0.0 schema-utils: ^4.0.0 peerDependencies: "@babel/core": ^7.12.0 webpack: ">=5" - checksum: f0edb8e157f9806b810ba3f2c8ca8fa489d377ae5c2b7b00c2ace900a6925641ce4ec520b9c12f70e37b94aa5366e7003e0f6271b26821643e109966ce741cb7 + checksum: b168dde5b8cf11206513371a79f86bb3faa7c714e6ec9fffd420876b61f3d7f5f4b976431095ef6a14bc4d324505126deb91045fd41e312ba49f4deaa166fe28 languageName: node linkType: hard @@ -3728,39 +3848,39 @@ __metadata: languageName: node linkType: hard -"babel-plugin-polyfill-corejs2@npm:^0.3.3": - version: 0.3.3 - resolution: "babel-plugin-polyfill-corejs2@npm:0.3.3" +"babel-plugin-polyfill-corejs2@npm:^0.4.5": + version: 0.4.5 + resolution: "babel-plugin-polyfill-corejs2@npm:0.4.5" dependencies: - "@babel/compat-data": ^7.17.7 - "@babel/helper-define-polyfill-provider": ^0.3.3 - semver: ^6.1.1 + "@babel/compat-data": ^7.22.6 + "@babel/helper-define-polyfill-provider": ^0.4.2 + semver: ^6.3.1 peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 7db3044993f3dddb3cc3d407bc82e640964a3bfe22de05d90e1f8f7a5cb71460011ab136d3c03c6c1ba428359ebf635688cd6205e28d0469bba221985f5c6179 + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: 33a8e06aa54e2858d211c743d179f0487b03222f9ca1bfd7c4865bca243fca942a3358cb75f6bb894ed476cbddede834811fbd6903ff589f055821146f053e1a languageName: node linkType: hard -"babel-plugin-polyfill-corejs3@npm:^0.6.0": - version: 0.6.0 - resolution: "babel-plugin-polyfill-corejs3@npm:0.6.0" +"babel-plugin-polyfill-corejs3@npm:^0.8.3": + version: 0.8.4 + resolution: "babel-plugin-polyfill-corejs3@npm:0.8.4" dependencies: - "@babel/helper-define-polyfill-provider": ^0.3.3 - core-js-compat: ^3.25.1 + "@babel/helper-define-polyfill-provider": ^0.4.2 + core-js-compat: ^3.32.2 peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 470bb8c59f7c0912bd77fe1b5a2e72f349b3f65bbdee1d60d6eb7e1f4a085c6f24b2dd5ab4ac6c2df6444a96b070ef6790eccc9edb6a2668c60d33133bfb62c6 + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: 7243241a5b978b1335d51bcbd1248d6c4df88f6b3726706e71e0392f111c59bbf01118c85bb0ed42dce65e90e8fc768d19eda0a81a321cbe54abd3df9a285dc8 languageName: node linkType: hard -"babel-plugin-polyfill-regenerator@npm:^0.4.1": - version: 0.4.1 - resolution: "babel-plugin-polyfill-regenerator@npm:0.4.1" +"babel-plugin-polyfill-regenerator@npm:^0.5.2": + version: 0.5.2 + resolution: "babel-plugin-polyfill-regenerator@npm:0.5.2" dependencies: - "@babel/helper-define-polyfill-provider": ^0.3.3 + "@babel/helper-define-polyfill-provider": ^0.4.2 peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: ab0355efbad17d29492503230387679dfb780b63b25408990d2e4cf421012dae61d6199ddc309f4d2409ce4e9d3002d187702700dd8f4f8770ebbba651ed066c + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: d962200f604016a9a09bc9b4aaf60a3db7af876bb65bcefaeac04d44ac9d9ec4037cf24ce117760cc141d7046b6394c7eb0320ba9665cb4a2ee64df2be187c93 languageName: node linkType: hard @@ -3768,10 +3888,10 @@ __metadata: version: 0.0.0-use.local resolution: "backstage-microsite@workspace:." dependencies: - "@docusaurus/core": 0.0.0-5591 - "@docusaurus/module-type-aliases": 0.0.0-5591 - "@docusaurus/plugin-client-redirects": 0.0.0-5591 - "@docusaurus/preset-classic": 0.0.0-5591 + "@docusaurus/core": 0.0.0-5703 + "@docusaurus/module-type-aliases": 0.0.0-5703 + "@docusaurus/plugin-client-redirects": 0.0.0-5703 + "@docusaurus/preset-classic": 0.0.0-5703 "@spotify/prettier-config": ^14.0.0 "@swc/core": ^1.3.46 "@tsconfig/docusaurus": ^1.0.6 @@ -3783,11 +3903,11 @@ __metadata: luxon: ^3.0.0 prettier: ^2.6.2 prism-react-renderer: ^1.3.5 - react: ^17.0.2 - react-dom: ^17.0.2 + react: ^18.0.0 + react-dom: ^18.0.0 sass: ^1.57.1 swc-loader: ^0.2.3 - typescript: ^4.9.4 + typescript: ~5.0.0 yaml-loader: ^0.8.0 languageName: unknown linkType: soft @@ -3933,17 +4053,17 @@ __metadata: languageName: node linkType: hard -"browserslist@npm:^4.0.0, browserslist@npm:^4.14.5, browserslist@npm:^4.18.1, browserslist@npm:^4.21.3, browserslist@npm:^4.21.4, browserslist@npm:^4.21.5": - version: 4.21.5 - resolution: "browserslist@npm:4.21.5" +"browserslist@npm:^4.0.0, browserslist@npm:^4.14.5, browserslist@npm:^4.18.1, browserslist@npm:^4.21.10, browserslist@npm:^4.21.4, browserslist@npm:^4.21.9, browserslist@npm:^4.22.1": + version: 4.22.1 + resolution: "browserslist@npm:4.22.1" dependencies: - caniuse-lite: ^1.0.30001449 - electron-to-chromium: ^1.4.284 - node-releases: ^2.0.8 - update-browserslist-db: ^1.0.10 + caniuse-lite: ^1.0.30001541 + electron-to-chromium: ^1.4.535 + node-releases: ^2.0.13 + update-browserslist-db: ^1.0.13 bin: browserslist: cli.js - checksum: 9755986b22e73a6a1497fd8797aedd88e04270be33ce66ed5d85a1c8a798292a65e222b0f251bafa1c2522261e237d73b08b58689d4920a607e5a53d56dc4706 + checksum: 7e6b10c53f7dd5d83fd2b95b00518889096382539fed6403829d447e05df4744088de46a571071afb447046abc3c66ad06fbc790e70234ec2517452e32ffd862 languageName: node linkType: hard @@ -4069,10 +4189,10 @@ __metadata: languageName: node linkType: hard -"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001449, caniuse-lite@npm:^1.0.30001464": - version: 1.0.30001481 - resolution: "caniuse-lite@npm:1.0.30001481" - checksum: 8200a043c191b4fd4fe0beda37a58fd61869c895ab93f87bdd0420e5927453f48434d716ce9da8552ff6c3ecc4dcd1366354cda3a134f3cc844af741574a7cab +"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001538, caniuse-lite@npm:^1.0.30001541": + version: 1.0.30001546 + resolution: "caniuse-lite@npm:1.0.30001546" + checksum: d3ef82f5ee94743002c5b2dd61c84342debcc94b2d5907b64ade3514ecfc4f20bbe86a6bc453fd6436d5fbcf6582e07405d7c2077565675a71c83adc238a11fa languageName: node linkType: hard @@ -4083,7 +4203,7 @@ __metadata: languageName: node linkType: hard -"chalk@npm:^2.0.0": +"chalk@npm:^2.4.2": version: 2.4.2 resolution: "chalk@npm:2.4.2" dependencies: @@ -4375,10 +4495,10 @@ __metadata: languageName: node linkType: hard -"commondir@npm:^1.0.1": - version: 1.0.1 - resolution: "commondir@npm:1.0.1" - checksum: 59715f2fc456a73f68826285718503340b9f0dd89bfffc42749906c5cf3d4277ef11ef1cca0350d0e79204f00f1f6d83851ececc9095dc88512a697ac0b9bdcb +"common-path-prefix@npm:^3.0.0": + version: 3.0.0 + resolution: "common-path-prefix@npm:3.0.0" + checksum: fdb3c4f54e51e70d417ccd950c07f757582de800c0678ca388aedefefc84982039f346f9fd9a1252d08d2da9e9ef4019f580a1d1d3a10da031e4bb3c924c5818 languageName: node linkType: hard @@ -4480,10 +4600,10 @@ __metadata: languageName: node linkType: hard -"convert-source-map@npm:^1.7.0": - version: 1.9.0 - resolution: "convert-source-map@npm:1.9.0" - checksum: dc55a1f28ddd0e9485ef13565f8f756b342f9a46c4ae18b843fe3c30c675d058d6a4823eff86d472f187b176f0adf51ea7b69ea38be34be4a63cbbf91b0593c8 +"convert-source-map@npm:^2.0.0": + version: 2.0.0 + resolution: "convert-source-map@npm:2.0.0" + checksum: 63ae9933be5a2b8d4509daca5124e20c14d023c820258e484e32dc324d34c2754e71297c94a05784064ad27615037ef677e3f0c00469fb55f409d2bb21261035 languageName: node linkType: hard @@ -4501,10 +4621,10 @@ __metadata: languageName: node linkType: hard -"copy-text-to-clipboard@npm:^3.0.1": - version: 3.0.1 - resolution: "copy-text-to-clipboard@npm:3.0.1" - checksum: 4c301b9a65c8bf337e26a74d28849096651697fac829a364c463df81ba5ddfeea0741214f9f1232832fffd229ebd5659d3abcccea3fe54d7010a22e515cc38bc +"copy-text-to-clipboard@npm:^3.2.0": + version: 3.2.0 + resolution: "copy-text-to-clipboard@npm:3.2.0" + checksum: df7115c197a166d51f59e4e20ab2a68a855ae8746d25ff149b5465c694d9a405c7e6684b73a9f87ba8d653070164e229c15dfdb9fd77c30be1ff0da569661060 languageName: node linkType: hard @@ -4524,26 +4644,26 @@ __metadata: languageName: node linkType: hard -"core-js-compat@npm:^3.25.1": - version: 3.26.1 - resolution: "core-js-compat@npm:3.26.1" +"core-js-compat@npm:^3.31.0, core-js-compat@npm:^3.32.2": + version: 3.33.0 + resolution: "core-js-compat@npm:3.33.0" dependencies: - browserslist: ^4.21.4 - checksum: f222bce0002eae405327d68286e1d566037e8ac21906a47d7ecd15858adca7b12e82140db11dc43c8cc1fc066c5306120f3c27bfb2d7dbc2d20a72a2d90d38dc + browserslist: ^4.22.1 + checksum: 83ae54008c09b8e0ae3c59457039866c342c7e28b0d30eebb638a5b51c01432e63fe97695c90645cbc6a8b073a4f9a8b0e75f0818bbf8b4b054e01f4c17d3181 languageName: node linkType: hard -"core-js-pure@npm:^3.25.1": - version: 3.26.1 - resolution: "core-js-pure@npm:3.26.1" - checksum: d88c40e5e29e413c11d1ef991a8d5b6a63f00bd94707af0f649d3fc18b3524108b202f4ae75ce77620a1557d1ba340bc3362b4f25d590eccc37cf80fc75f7cd4 +"core-js-pure@npm:^3.30.2": + version: 3.33.0 + resolution: "core-js-pure@npm:3.33.0" + checksum: d47084a4de9a0cef9779eccd3ac9f435cf9fd7aa71794150cd4c6b305036bcc392d94766d4a7b6456bdd08faba7752d55c2ec40185bda161c3563081c9fa1e17 languageName: node linkType: hard -"core-js@npm:^3.29.0": - version: 3.30.1 - resolution: "core-js@npm:3.30.1" - checksum: 6d4a00b488694d4c715c424e15dfef31433ac7aa395c39c518a0cfacec918ada1c716fed74682033197e0164e23bbf38bfd598ee9a239c4aaa590ab1ba862ac8 +"core-js@npm:^3.31.1": + version: 3.33.0 + resolution: "core-js@npm:3.33.0" + checksum: dd62217935ac281faf6f833bb306fb891162919fcf9c1f0c975b1b91e82ac09a940f5deb5950bbb582739ceef716e8bd7e4f9eab8328932fb029d3bc2ecb2881 languageName: node linkType: hard @@ -4554,18 +4674,6 @@ __metadata: languageName: node linkType: hard -"cosmiconfig-typescript-loader@npm:^4.3.0": - version: 4.3.0 - resolution: "cosmiconfig-typescript-loader@npm:4.3.0" - peerDependencies: - "@types/node": "*" - cosmiconfig: ">=7" - ts-node: ">=10" - typescript: ">=3" - checksum: ea61dfd8e112cf2bb18df0ef89280bd3ae3dd5b997b4a9fc22bbabdc02513aadfbc6d4e15e922b6a9a5d987e9dad42286fa38caf77a9b8dcdbe7d4ce1c9db4fb - languageName: node - linkType: hard - "cosmiconfig@npm:^6.0.0": version: 6.0.0 resolution: "cosmiconfig@npm:6.0.0" @@ -4592,15 +4700,20 @@ __metadata: languageName: node linkType: hard -"cosmiconfig@npm:^8.1.3": - version: 8.1.3 - resolution: "cosmiconfig@npm:8.1.3" +"cosmiconfig@npm:^8.2.0": + version: 8.3.6 + resolution: "cosmiconfig@npm:8.3.6" dependencies: - import-fresh: ^3.2.1 + import-fresh: ^3.3.0 js-yaml: ^4.1.0 - parse-json: ^5.0.0 + parse-json: ^5.2.0 path-type: ^4.0.0 - checksum: b3d277bc3a8a9e649bf4c3fc9740f4c52bf07387481302aa79839f595045368903bf26ea24a8f7f7b8b180bf46037b027c5cb63b1391ab099f3f78814a147b2b + peerDependencies: + typescript: ">=4.9.5" + peerDependenciesMeta: + typescript: + optional: true + checksum: dc339ebea427898c9e03bf01b56ba7afbac07fc7d2a2d5a15d6e9c14de98275a9565da949375aee1809591c152c0a3877bb86dbeaf74d5bd5aaa79955ad9e7a0 languageName: node linkType: hard @@ -4642,21 +4755,21 @@ __metadata: languageName: node linkType: hard -"css-loader@npm:^6.7.3": - version: 6.7.3 - resolution: "css-loader@npm:6.7.3" +"css-loader@npm:^6.8.1": + version: 6.8.1 + resolution: "css-loader@npm:6.8.1" dependencies: icss-utils: ^5.1.0 - postcss: ^8.4.19 + postcss: ^8.4.21 postcss-modules-extract-imports: ^3.0.0 - postcss-modules-local-by-default: ^4.0.0 + postcss-modules-local-by-default: ^4.0.3 postcss-modules-scope: ^3.0.0 postcss-modules-values: ^4.0.0 postcss-value-parser: ^4.2.0 semver: ^7.3.8 peerDependencies: webpack: ^5.0.0 - checksum: 473cc32b6c837c2848e2051ad1ba331c1457449f47442e75a8c480d9891451434ada241f7e3de2347e57de17fcd84610b3bcfc4a9da41102cdaedd1e17902d31 + checksum: 7c1784247bdbe76dc5c55fb1ac84f1d4177a74c47259942c9cfdb7a8e6baef11967a0bc85ac285f26bd26d5059decb848af8154a03fdb4f4894f41212f45eef3 languageName: node linkType: hard @@ -5011,6 +5124,15 @@ __metadata: languageName: node linkType: hard +"devlop@npm:^1.0.0": + version: 1.1.0 + resolution: "devlop@npm:1.1.0" + dependencies: + dequal: ^2.0.0 + checksum: d2ff650bac0bb6ef08c48f3ba98640bb5fec5cce81e9957eb620408d1bab1204d382a45b785c6b3314dc867bb0684936b84c6867820da6db97cbb5d3c15dd185 + languageName: node + linkType: hard + "diff@npm:^5.0.0": version: 5.1.0 resolution: "diff@npm:5.1.0" @@ -5173,10 +5295,10 @@ __metadata: languageName: node linkType: hard -"electron-to-chromium@npm:^1.4.284": - version: 1.4.374 - resolution: "electron-to-chromium@npm:1.4.374" - checksum: baa53f70401a8fdd3dbf2396d5dfff2f0a8be12c6fefe362ed8608ff045db4e78322cc5b8acac0bd2d94de7850eba83509b3bfda38b4b67e575273b4c4824e5b +"electron-to-chromium@npm:^1.4.535": + version: 1.4.544 + resolution: "electron-to-chromium@npm:1.4.544" + checksum: 78e88e4c56fc4faaa9a405de5e0b51305531e9cdf2c71bcc9296c2c59fb68001472e5b924f8701c873bc855ab5174cf0340642712d7af05c1d8e92356529397e languageName: node linkType: hard @@ -5224,13 +5346,13 @@ __metadata: languageName: node linkType: hard -"enhanced-resolve@npm:^5.13.0": - version: 5.13.0 - resolution: "enhanced-resolve@npm:5.13.0" +"enhanced-resolve@npm:^5.15.0": + version: 5.15.0 + resolution: "enhanced-resolve@npm:5.15.0" dependencies: graceful-fs: ^4.2.4 tapable: ^2.2.0 - checksum: 76d6844c4393d76beed5b3ce6cf5a98dee3ad5c84a9887f49ccde1224e3b7af201dfbd5a57ebf2b49f623b74883df262d50ff480d3cc02fc2881fc58b84e1bbe + checksum: fbd8cdc9263be71cc737aa8a7d6c57b43d6aa38f6cc75dde6fcd3598a130cc465f979d2f4d01bb3bf475acb43817749c79f8eef9be048683602ca91ab52e4f11 languageName: node linkType: hard @@ -5437,10 +5559,10 @@ __metadata: languageName: node linkType: hard -"eta@npm:^2.0.1": - version: 2.0.1 - resolution: "eta@npm:2.0.1" - checksum: 595e18e762925561929a43d06493c8b46ef66dfa967dfcde7050acb016182d0bad87a19177384c93f04ffc87e918429688e07fc428c8691ff50cdfcb197f938a +"eta@npm:^2.2.0": + version: 2.2.0 + resolution: "eta@npm:2.2.0" + checksum: 6a09631481d4f26a9662a1eb736a65cc1cbc48e24935e6ff5d83a83b0cb509ea56d588d66d7c087d590601dc59bdabdac2356936b1b789d020eb0cf2d8304d54 languageName: node linkType: hard @@ -5592,6 +5714,15 @@ __metadata: languageName: node linkType: hard +"fault@npm:^2.0.0": + version: 2.0.1 + resolution: "fault@npm:2.0.1" + dependencies: + format: ^0.2.0 + checksum: c9b30f47d95769177130a9409976a899ed31eb598450fbad5b0d39f2f5f56d5f4a9ff9257e0bee8407cb0fc3ce37165657888c6aa6d78472e403893104329b72 + languageName: node + linkType: hard + "faye-websocket@npm:^0.11.3": version: 0.11.4 resolution: "faye-websocket@npm:0.11.4" @@ -5684,14 +5815,13 @@ __metadata: languageName: node linkType: hard -"find-cache-dir@npm:^3.3.2": - version: 3.3.2 - resolution: "find-cache-dir@npm:3.3.2" +"find-cache-dir@npm:^4.0.0": + version: 4.0.0 + resolution: "find-cache-dir@npm:4.0.0" dependencies: - commondir: ^1.0.1 - make-dir: ^3.0.2 - pkg-dir: ^4.1.0 - checksum: 1e61c2e64f5c0b1c535bd85939ae73b0e5773142713273818cc0b393ee3555fb0fd44e1a5b161b8b6c3e03e98c2fcc9c227d784850a13a90a8ab576869576817 + common-path-prefix: ^3.0.0 + pkg-dir: ^7.0.0 + checksum: 52a456a80deeb27daa3af6e06059b63bdb9cc4af4d845fc6d6229887e505ba913cd56000349caa60bc3aa59dacdb5b4c37903d4ba34c75102d83cab330b70d2f languageName: node linkType: hard @@ -5704,16 +5834,6 @@ __metadata: languageName: node linkType: hard -"find-up@npm:^4.0.0": - version: 4.1.0 - resolution: "find-up@npm:4.1.0" - dependencies: - locate-path: ^5.0.0 - path-exists: ^4.0.0 - checksum: 4c172680e8f8c1f78839486e14a43ef82e9decd0e74145f40707cc42e7420506d5ec92d9a11c22bd2c48fb0c384ea05dd30e10dd152fefeec6f2f75282a8b844 - languageName: node - linkType: hard - "find-up@npm:^5.0.0": version: 5.0.0 resolution: "find-up@npm:5.0.0" @@ -5724,15 +5844,25 @@ __metadata: languageName: node linkType: hard -"flux@npm:^4.0.1": - version: 4.0.3 - resolution: "flux@npm:4.0.3" +"find-up@npm:^6.3.0": + version: 6.3.0 + resolution: "find-up@npm:6.3.0" + dependencies: + locate-path: ^7.1.0 + path-exists: ^5.0.0 + checksum: 9a21b7f9244a420e54c6df95b4f6fc3941efd3c3e5476f8274eb452f6a85706e7a6a90de71353ee4f091fcb4593271a6f92810a324ec542650398f928783c280 + languageName: node + linkType: hard + +"flux@npm:~4.0.1": + version: 4.0.4 + resolution: "flux@npm:4.0.4" dependencies: fbemitter: ^3.0.0 fbjs: ^3.0.1 peerDependencies: react: ^15.0.2 || ^16.0.0 || ^17.0.0 - checksum: 6b3f5150bcce481ce5bc09e54dbe4bf2a052f9fbc04c1de64f8d816adc4f90ad7955d9aed0022c7b6a2ed11b809ac40527bb50c2cd89c23d42f56694abe20748 + checksum: 8fa5c2f9322258de3e331f67c6f1078a7f91c4dec9dbe8a54c4b8a80eed19a4f91889028b768668af4a796e8f2ee75e461e1571b8615432a3920ae95cc4ff794 languageName: node linkType: hard @@ -5795,6 +5925,13 @@ __metadata: languageName: node linkType: hard +"format@npm:^0.2.0": + version: 0.2.2 + resolution: "format@npm:0.2.2" + checksum: 646a60e1336250d802509cf24fb801e43bd4a70a07510c816fa133aa42cdbc9c21e66e9cc0801bb183c5b031c9d68be62e7fbb6877756e52357850f92aa28799 + languageName: node + linkType: hard + "forwarded@npm:0.2.0": version: 0.2.0 resolution: "forwarded@npm:0.2.0" @@ -5802,10 +5939,10 @@ __metadata: languageName: node linkType: hard -"fraction.js@npm:^4.2.0": - version: 4.2.0 - resolution: "fraction.js@npm:4.2.0" - checksum: 8c76a6e21dedea87109d6171a0ac77afa14205794a565d71cb10d2925f629a3922da61bf45ea52dbc30bce4d8636dc0a27213a88cbd600eab047d82f9a3a94c5 +"fraction.js@npm:^4.3.6": + version: 4.3.6 + resolution: "fraction.js@npm:4.3.6" + checksum: e96ae77e64ebfd442d3a5a01a3f0637b0663fc2440bcf2841b3ad9341ba24c81fb2e3e7142e43ef7d088558c6b3f8609df135b201adc7a1c674aea6a71384162 languageName: node linkType: hard @@ -5816,7 +5953,7 @@ __metadata: languageName: node linkType: hard -"fs-extra@npm:^11.1.0": +"fs-extra@npm:^11.1.1": version: 11.1.1 resolution: "fs-extra@npm:11.1.1" dependencies: @@ -6333,7 +6470,7 @@ __metadata: languageName: node linkType: hard -"html-minifier-terser@npm:^7.1.0": +"html-minifier-terser@npm:^7.2.0": version: 7.2.0 resolution: "html-minifier-terser@npm:7.2.0" dependencies: @@ -6350,10 +6487,10 @@ __metadata: languageName: node linkType: hard -"html-tags@npm:^3.2.0": - version: 3.2.0 - resolution: "html-tags@npm:3.2.0" - checksum: a0c9e96ac26c84adad9cc66d15d6711a17f60acda8d987218f1d4cbaacd52864939b230e635cce5a1179f3ddab2a12b9231355617dfbae7945fcfec5e96d2041 +"html-tags@npm:^3.3.1": + version: 3.3.1 + resolution: "html-tags@npm:3.3.1" + checksum: b4ef1d5a76b678e43cce46e3783d563607b1d550cab30b4f511211564574770aa8c658a400b100e588bc60b8234e59b35ff72c7851cc28f3b5403b13a2c6cbce languageName: node linkType: hard @@ -6364,9 +6501,9 @@ __metadata: languageName: node linkType: hard -"html-webpack-plugin@npm:^5.5.0": - version: 5.5.0 - resolution: "html-webpack-plugin@npm:5.5.0" +"html-webpack-plugin@npm:^5.5.3": + version: 5.5.3 + resolution: "html-webpack-plugin@npm:5.5.3" dependencies: "@types/html-minifier-terser": ^6.0.0 html-minifier-terser: ^6.0.2 @@ -6375,7 +6512,7 @@ __metadata: tapable: ^2.0.0 peerDependencies: webpack: ^5.20.0 - checksum: f3d84d0df71fe2f5bac533cc74dce41ab058558cdcc6ff767d166a2abf1cf6fb8491d54d60ddbb34e95c00394e379ba52e0468e0284d1d0cc6a42987056e8219 + checksum: ccf685195739c372ad641bbd0c9100a847904f34eedc7aff3ece7856cd6c78fd3746d2d615af1bb71e5727993fe711b89e9b744f033ed3fde646540bf5d5e954 languageName: node linkType: hard @@ -6906,6 +7043,13 @@ __metadata: languageName: node linkType: hard +"is-plain-object@npm:^5.0.0": + version: 5.0.0 + resolution: "is-plain-object@npm:5.0.0" + checksum: e32d27061eef62c0847d303125440a38660517e586f2f3db7c9d179ae5b6674ab0f469d519b2e25c147a1a3bc87156d0d5f4d8821e0ce4a9ee7fe1fcf11ce45c + languageName: node + linkType: hard + "is-reference@npm:^3.0.0": version: 3.0.1 resolution: "is-reference@npm:3.0.1" @@ -7031,16 +7175,25 @@ __metadata: languageName: node linkType: hard -"joi@npm:^17.7.0, joi@npm:^17.8.3": - version: 17.9.2 - resolution: "joi@npm:17.9.2" +"jiti@npm:^1.18.2": + version: 1.20.0 + resolution: "jiti@npm:1.20.0" + bin: + jiti: bin/jiti.js + checksum: 7924062b5675142e3e272a27735be84b7bfc0a0eb73217fc2dcafa034f37c4f7b4b9ffc07dd98bcff0f739a8811ce1544db205ae7e97b1c86f0df92c65ce3c72 + languageName: node + linkType: hard + +"joi@npm:^17.7.0, joi@npm:^17.9.2": + version: 17.11.0 + resolution: "joi@npm:17.11.0" dependencies: "@hapi/hoek": ^9.0.0 "@hapi/topo": ^5.0.0 "@sideway/address": ^4.1.3 "@sideway/formula": ^3.0.1 "@sideway/pinpoint": ^2.0.0 - checksum: 8c3709849293411c524e5a679dba7b42598a29a663478941767b8d5b06288611dece58803c468a2c7320cc2429a3e71e3d94337fe47aefcf6c22174dbd90b601 + checksum: 3a4e9ecba345cdafe585e7ed8270a44b39718e11dff3749aa27e0001a63d578b75100c062be28e6f48f960b594864034e7a13833f33fbd7ad56d5ce6b617f9bf languageName: node linkType: hard @@ -7120,7 +7273,7 @@ __metadata: languageName: node linkType: hard -"json5@npm:^2.1.2, json5@npm:^2.2.2": +"json5@npm:^2.1.2, json5@npm:^2.2.3": version: 2.2.3 resolution: "json5@npm:2.2.3" bin: @@ -7172,7 +7325,7 @@ __metadata: languageName: node linkType: hard -"klona@npm:^2.0.4, klona@npm:^2.0.6": +"klona@npm:^2.0.4": version: 2.0.6 resolution: "klona@npm:2.0.6" checksum: ac9ee3732e42b96feb67faae4d27cf49494e8a3bf3fa7115ce242fe04786788e0aff4741a07a45a2462e2079aa983d73d38519c85d65b70ef11447bbc3c58ce7 @@ -7254,15 +7407,6 @@ __metadata: languageName: node linkType: hard -"locate-path@npm:^5.0.0": - version: 5.0.0 - resolution: "locate-path@npm:5.0.0" - dependencies: - p-locate: ^4.1.0 - checksum: 83e51725e67517287d73e1ded92b28602e3ae5580b301fe54bfb76c0c723e3f285b19252e375712316774cf52006cb236aed5704692c32db0d5d089b69696e30 - languageName: node - linkType: hard - "locate-path@npm:^6.0.0": version: 6.0.0 resolution: "locate-path@npm:6.0.0" @@ -7272,6 +7416,15 @@ __metadata: languageName: node linkType: hard +"locate-path@npm:^7.1.0": + version: 7.2.0 + resolution: "locate-path@npm:7.2.0" + dependencies: + p-locate: ^6.0.0 + checksum: c1b653bdf29beaecb3d307dfb7c44d98a2a98a02ebe353c9ad055d1ac45d6ed4e1142563d222df9b9efebc2bcb7d4c792b507fad9e7150a04c29530b7db570f8 + languageName: node + linkType: hard + "lodash.curry@npm:^4.0.1": version: 4.1.1 resolution: "lodash.curry@npm:4.1.1" @@ -7286,6 +7439,20 @@ __metadata: languageName: node linkType: hard +"lodash.escape@npm:^4.0.1": + version: 4.0.1 + resolution: "lodash.escape@npm:4.0.1" + checksum: fcb54f457497256964d619d5cccbd80a961916fca60df3fe0fa3e7f052715c2944c0ed5aefb4f9e047d127d44aa2d55555f3350cb42c6549e9e293fb30b41e7f + languageName: node + linkType: hard + +"lodash.flatten@npm:^4.4.0": + version: 4.4.0 + resolution: "lodash.flatten@npm:4.4.0" + checksum: 0ac34a393d4b795d4b7421153d27c13ae67e08786c9cbb60ff5b732210d46f833598eee3fb3844bb10070e8488efe390ea53bb567377e0cb47e9e630bf0811cb + languageName: node + linkType: hard + "lodash.flow@npm:^3.3.0": version: 3.5.0 resolution: "lodash.flow@npm:3.5.0" @@ -7293,6 +7460,13 @@ __metadata: languageName: node linkType: hard +"lodash.invokemap@npm:^4.6.0": + version: 4.6.0 + resolution: "lodash.invokemap@npm:4.6.0" + checksum: 646ceebbefbcb6da301f8c2868254680fd0bcdc6ada470495d9ae49c9c32938829c1b38a38c95d0258409a9655f85db404b16e648381c7450b7ed3d9c52d8808 + languageName: node + linkType: hard + "lodash.memoize@npm:^4.1.2": version: 4.1.2 resolution: "lodash.memoize@npm:4.1.2" @@ -7300,6 +7474,13 @@ __metadata: languageName: node linkType: hard +"lodash.pullall@npm:^4.2.0": + version: 4.2.0 + resolution: "lodash.pullall@npm:4.2.0" + checksum: 7a5fbaedf186ec197ce1e0b9ba1d88a89773ebaf6a8291c7d273838cac59cb3b339cf36ef00e94172862ee84d2304c38face161846f08f5581d0553dcbdcd090 + languageName: node + linkType: hard + "lodash.uniq@npm:^4.5.0": version: 4.5.0 resolution: "lodash.uniq@npm:4.5.0" @@ -7307,6 +7488,13 @@ __metadata: languageName: node linkType: hard +"lodash.uniqby@npm:^4.7.0": + version: 4.7.0 + resolution: "lodash.uniqby@npm:4.7.0" + checksum: 659264545a95726d1493123345aad8cbf56e17810fa9a0b029852c6d42bc80517696af09d99b23bef1845d10d95e01b8b4a1da578f22aeba7a30d3e0022a4938 + languageName: node + linkType: hard + "lodash@npm:^4.17.20, lodash@npm:^4.17.21": version: 4.17.21 resolution: "lodash@npm:4.17.21" @@ -7380,15 +7568,6 @@ __metadata: languageName: node linkType: hard -"make-dir@npm:^3.0.2": - version: 3.1.0 - resolution: "make-dir@npm:3.1.0" - dependencies: - semver: ^6.0.0 - checksum: 484200020ab5a1fdf12f393fe5f385fc8e4378824c940fba1729dcd198ae4ff24867bc7a5646331e50cead8abff5d9270c456314386e629acec6dff4b8016b78 - languageName: node - linkType: hard - "make-fetch-happen@npm:^10.0.3": version: 10.2.1 resolution: "make-fetch-happen@npm:10.2.1" @@ -7485,6 +7664,40 @@ __metadata: languageName: node linkType: hard +"mdast-util-from-markdown@npm:^2.0.0": + version: 2.0.0 + resolution: "mdast-util-from-markdown@npm:2.0.0" + dependencies: + "@types/mdast": ^4.0.0 + "@types/unist": ^3.0.0 + decode-named-character-reference: ^1.0.0 + devlop: ^1.0.0 + mdast-util-to-string: ^4.0.0 + micromark: ^4.0.0 + micromark-util-decode-numeric-character-reference: ^2.0.0 + micromark-util-decode-string: ^2.0.0 + micromark-util-normalize-identifier: ^2.0.0 + micromark-util-symbol: ^2.0.0 + micromark-util-types: ^2.0.0 + unist-util-stringify-position: ^4.0.0 + checksum: 4e8d8a46b4b588486c41b80c39da333a91593bc8d60cd7421c6cd3c22003b8e5a62478292fb7bc97b9255b6301a2250cca32340ef43c309156e215453c5b92be + languageName: node + linkType: hard + +"mdast-util-frontmatter@npm:^2.0.0": + version: 2.0.1 + resolution: "mdast-util-frontmatter@npm:2.0.1" + dependencies: + "@types/mdast": ^4.0.0 + devlop: ^1.0.0 + escape-string-regexp: ^5.0.0 + mdast-util-from-markdown: ^2.0.0 + mdast-util-to-markdown: ^2.0.0 + micromark-extension-frontmatter: ^2.0.0 + checksum: 86a7c8d9eb183be2621d6d9134b9d33df2a3647e3255f68a9796e2425e25643ffae00a501e36c57d9c10973087b94aa5a2ffd865d33cdd274cc9b88cd2d90a2e + languageName: node + linkType: hard + "mdast-util-gfm-autolink-literal@npm:^1.0.0": version: 1.0.3 resolution: "mdast-util-gfm-autolink-literal@npm:1.0.3" @@ -7624,6 +7837,16 @@ __metadata: languageName: node linkType: hard +"mdast-util-phrasing@npm:^4.0.0": + version: 4.0.0 + resolution: "mdast-util-phrasing@npm:4.0.0" + dependencies: + "@types/mdast": ^4.0.0 + unist-util-is: ^6.0.0 + checksum: 95d5d8e18d5ea6dbfe2ee4ed1045961372efae9077e5c98e10bfef7025ee3fd9449f9a82840068ff50aa98fa43af0a0a14898ae10b5e46e96edde01e2797df34 + languageName: node + linkType: hard + "mdast-util-to-hast@npm:^12.1.0": version: 12.3.0 resolution: "mdast-util-to-hast@npm:12.3.0" @@ -7656,7 +7879,23 @@ __metadata: languageName: node linkType: hard -"mdast-util-to-string@npm:^3.0.0, mdast-util-to-string@npm:^3.1.0": +"mdast-util-to-markdown@npm:^2.0.0": + version: 2.1.0 + resolution: "mdast-util-to-markdown@npm:2.1.0" + dependencies: + "@types/mdast": ^4.0.0 + "@types/unist": ^3.0.0 + longest-streak: ^3.0.0 + mdast-util-phrasing: ^4.0.0 + mdast-util-to-string: ^4.0.0 + micromark-util-decode-string: ^2.0.0 + unist-util-visit: ^5.0.0 + zwitch: ^2.0.0 + checksum: 3a2cf3957e23b34e2e092e6e76ae72ee0b8745955bd811baba6814cf3a3d916c3fd52264b4b58f3bb3d512a428f84a1e998b6fc7e28434e388a9ae8fb6a9c173 + languageName: node + linkType: hard + +"mdast-util-to-string@npm:^3.0.0, mdast-util-to-string@npm:^3.1.0, mdast-util-to-string@npm:^3.2.0": version: 3.2.0 resolution: "mdast-util-to-string@npm:3.2.0" dependencies: @@ -7665,6 +7904,15 @@ __metadata: languageName: node linkType: hard +"mdast-util-to-string@npm:^4.0.0": + version: 4.0.0 + resolution: "mdast-util-to-string@npm:4.0.0" + dependencies: + "@types/mdast": ^4.0.0 + checksum: 35489fb5710d58cbc2d6c8b6547df161a3f81e0f28f320dfb3548a9393555daf07c310c0c497708e67ed4dfea4a06e5655799e7d631ca91420c288b4525d6c29 + languageName: node + linkType: hard + "mdn-data@npm:2.0.14": version: 2.0.14 resolution: "mdn-data@npm:2.0.14" @@ -7740,6 +7988,30 @@ __metadata: languageName: node linkType: hard +"micromark-core-commonmark@npm:^2.0.0": + version: 2.0.0 + resolution: "micromark-core-commonmark@npm:2.0.0" + dependencies: + decode-named-character-reference: ^1.0.0 + devlop: ^1.0.0 + micromark-factory-destination: ^2.0.0 + micromark-factory-label: ^2.0.0 + micromark-factory-space: ^2.0.0 + micromark-factory-title: ^2.0.0 + micromark-factory-whitespace: ^2.0.0 + micromark-util-character: ^2.0.0 + micromark-util-chunked: ^2.0.0 + micromark-util-classify-character: ^2.0.0 + micromark-util-html-tag-name: ^2.0.0 + micromark-util-normalize-identifier: ^2.0.0 + micromark-util-resolve-all: ^2.0.0 + micromark-util-subtokenize: ^2.0.0 + micromark-util-symbol: ^2.0.0 + micromark-util-types: ^2.0.0 + checksum: 9c12fb580cf4ce71f60872043bd2794efe129f44d7b2b73afa155bbc0a66b7bc35655ba8cef438a6bd068441837ed3b6dc6ad7e5a18f815462c1750793e03a42 + languageName: node + linkType: hard + "micromark-extension-directive@npm:^2.0.0": version: 2.2.0 resolution: "micromark-extension-directive@npm:2.2.0" @@ -7755,6 +8027,18 @@ __metadata: languageName: node linkType: hard +"micromark-extension-frontmatter@npm:^2.0.0": + version: 2.0.0 + resolution: "micromark-extension-frontmatter@npm:2.0.0" + dependencies: + fault: ^2.0.0 + micromark-util-character: ^2.0.0 + micromark-util-symbol: ^2.0.0 + micromark-util-types: ^2.0.0 + checksum: f68032df38c00ae47de15b63bcd72515bfcce39de4a9262a3a1ac9c5990f253f8e41bdc65fd17ec4bb3d144c32529ce0829571331e4901a9a413f1a53785d1e8 + languageName: node + linkType: hard + "micromark-extension-gfm-autolink-literal@npm:^1.0.0": version: 1.0.3 resolution: "micromark-extension-gfm-autolink-literal@npm:1.0.3" @@ -7933,6 +8217,17 @@ __metadata: languageName: node linkType: hard +"micromark-factory-destination@npm:^2.0.0": + version: 2.0.0 + resolution: "micromark-factory-destination@npm:2.0.0" + dependencies: + micromark-util-character: ^2.0.0 + micromark-util-symbol: ^2.0.0 + micromark-util-types: ^2.0.0 + checksum: d36e65ed1c072ff4148b016783148ba7c68a078991154625723e24bda3945160268fb91079fb28618e1613c2b6e70390a8ddc544c45410288aa27b413593071a + languageName: node + linkType: hard + "micromark-factory-label@npm:^1.0.0": version: 1.0.2 resolution: "micromark-factory-label@npm:1.0.2" @@ -7945,6 +8240,18 @@ __metadata: languageName: node linkType: hard +"micromark-factory-label@npm:^2.0.0": + version: 2.0.0 + resolution: "micromark-factory-label@npm:2.0.0" + dependencies: + devlop: ^1.0.0 + micromark-util-character: ^2.0.0 + micromark-util-symbol: ^2.0.0 + micromark-util-types: ^2.0.0 + checksum: c021dbd0ed367610d35f2bae21209bc804d1a6d1286ffce458fd6a717f4d7fe581a7cba7d5c2d7a63757c44eb927c80d6a571d6ea7969fae1b48ab6461d109c4 + languageName: node + linkType: hard + "micromark-factory-mdx-expression@npm:^1.0.0": version: 1.0.7 resolution: "micromark-factory-mdx-expression@npm:1.0.7" @@ -7971,6 +8278,16 @@ __metadata: languageName: node linkType: hard +"micromark-factory-space@npm:^2.0.0": + version: 2.0.0 + resolution: "micromark-factory-space@npm:2.0.0" + dependencies: + micromark-util-character: ^2.0.0 + micromark-util-types: ^2.0.0 + checksum: 4ffdcdc2f759887bbb356500cb460b3915ecddcb5d85c3618d7df68ad05d13ed02b1153ee1845677b7d8126df8f388288b84fcf0d943bd9c92bcc71cd7222e37 + languageName: node + linkType: hard + "micromark-factory-title@npm:^1.0.0": version: 1.0.2 resolution: "micromark-factory-title@npm:1.0.2" @@ -7984,6 +8301,18 @@ __metadata: languageName: node linkType: hard +"micromark-factory-title@npm:^2.0.0": + version: 2.0.0 + resolution: "micromark-factory-title@npm:2.0.0" + dependencies: + micromark-factory-space: ^2.0.0 + micromark-util-character: ^2.0.0 + micromark-util-symbol: ^2.0.0 + micromark-util-types: ^2.0.0 + checksum: 39e1ac23af3554e6e652e56065579bc7faf21ade7b8704b29c175871b4152b7109b790bb3cae0f7e088381139c6bac9553b8400772c3d322e4fa635f813a3578 + languageName: node + linkType: hard + "micromark-factory-whitespace@npm:^1.0.0": version: 1.0.0 resolution: "micromark-factory-whitespace@npm:1.0.0" @@ -7996,6 +8325,18 @@ __metadata: languageName: node linkType: hard +"micromark-factory-whitespace@npm:^2.0.0": + version: 2.0.0 + resolution: "micromark-factory-whitespace@npm:2.0.0" + dependencies: + micromark-factory-space: ^2.0.0 + micromark-util-character: ^2.0.0 + micromark-util-symbol: ^2.0.0 + micromark-util-types: ^2.0.0 + checksum: 9587c2546d1a58b4d5472b42adf05463f6212d0449455285662d63cd8eaed89c6b159ac82713fcee5f9dd88628c24307d9533cccd8971a2f3f4d48702f8f850a + languageName: node + linkType: hard + "micromark-util-character@npm:^1.0.0, micromark-util-character@npm:^1.1.0": version: 1.1.0 resolution: "micromark-util-character@npm:1.1.0" @@ -8006,6 +8347,16 @@ __metadata: languageName: node linkType: hard +"micromark-util-character@npm:^2.0.0": + version: 2.0.1 + resolution: "micromark-util-character@npm:2.0.1" + dependencies: + micromark-util-symbol: ^2.0.0 + micromark-util-types: ^2.0.0 + checksum: 318d6e16fdcbe9d89e18b8e7796568d986abbb10a9f3037b7ac9b92a236bcc962f3cd380e26a7c49df40fd1d9ca33eb546268956345b662f4c4ca4962c7695f2 + languageName: node + linkType: hard + "micromark-util-chunked@npm:^1.0.0": version: 1.0.0 resolution: "micromark-util-chunked@npm:1.0.0" @@ -8015,6 +8366,15 @@ __metadata: languageName: node linkType: hard +"micromark-util-chunked@npm:^2.0.0": + version: 2.0.0 + resolution: "micromark-util-chunked@npm:2.0.0" + dependencies: + micromark-util-symbol: ^2.0.0 + checksum: 324f95cccdae061332a8241936eaba6ef0782a1e355bac5c607ad2564fd3744929be7dc81651315a2921535747a33243e6a5606bcb64b7a56d49b6d74ea1a3d4 + languageName: node + linkType: hard + "micromark-util-classify-character@npm:^1.0.0": version: 1.0.0 resolution: "micromark-util-classify-character@npm:1.0.0" @@ -8026,6 +8386,17 @@ __metadata: languageName: node linkType: hard +"micromark-util-classify-character@npm:^2.0.0": + version: 2.0.0 + resolution: "micromark-util-classify-character@npm:2.0.0" + dependencies: + micromark-util-character: ^2.0.0 + micromark-util-symbol: ^2.0.0 + micromark-util-types: ^2.0.0 + checksum: 086e52904deffebb793fb1c08c94aabb8901f76958142dfc3a6282890ebaa983b285e69bd602b9d507f1b758ed38e75a994d2ad9fbbefa7de2584f67a16af405 + languageName: node + linkType: hard + "micromark-util-combine-extensions@npm:^1.0.0": version: 1.0.0 resolution: "micromark-util-combine-extensions@npm:1.0.0" @@ -8036,6 +8407,16 @@ __metadata: languageName: node linkType: hard +"micromark-util-combine-extensions@npm:^2.0.0": + version: 2.0.0 + resolution: "micromark-util-combine-extensions@npm:2.0.0" + dependencies: + micromark-util-chunked: ^2.0.0 + micromark-util-types: ^2.0.0 + checksum: 107c47700343f365b4ed81551e18bc3458b573c500e56ac052b2490bd548adc475216e41d2271633a8867fac66fc22ba3e0a2d74a31ed79b9870ca947eb4e3ba + languageName: node + linkType: hard + "micromark-util-decode-numeric-character-reference@npm:^1.0.0": version: 1.0.0 resolution: "micromark-util-decode-numeric-character-reference@npm:1.0.0" @@ -8045,6 +8426,15 @@ __metadata: languageName: node linkType: hard +"micromark-util-decode-numeric-character-reference@npm:^2.0.0": + version: 2.0.0 + resolution: "micromark-util-decode-numeric-character-reference@npm:2.0.0" + dependencies: + micromark-util-symbol: ^2.0.0 + checksum: 705715a2dd6f10d85c69371b4176a0b2fec5811a14f7d26f66f358ac5adebb12975f79597b1a1a184a6dcf6799319f7cf8eb91398e47c1faa2cab2c84f155b78 + languageName: node + linkType: hard + "micromark-util-decode-string@npm:^1.0.0": version: 1.0.2 resolution: "micromark-util-decode-string@npm:1.0.2" @@ -8057,6 +8447,18 @@ __metadata: languageName: node linkType: hard +"micromark-util-decode-string@npm:^2.0.0": + version: 2.0.0 + resolution: "micromark-util-decode-string@npm:2.0.0" + dependencies: + decode-named-character-reference: ^1.0.0 + micromark-util-character: ^2.0.0 + micromark-util-decode-numeric-character-reference: ^2.0.0 + micromark-util-symbol: ^2.0.0 + checksum: a75daf32a4a6b549e9f19b4d833ebfeb09a32a9a1f9ce50f35dec6b6a3e4f9f121f49024ba7f9c91c55ebe792f7c7a332fc9604795181b6a612637df0df5b959 + languageName: node + linkType: hard + "micromark-util-encode@npm:^1.0.0": version: 1.0.1 resolution: "micromark-util-encode@npm:1.0.1" @@ -8064,6 +8466,13 @@ __metadata: languageName: node linkType: hard +"micromark-util-encode@npm:^2.0.0": + version: 2.0.0 + resolution: "micromark-util-encode@npm:2.0.0" + checksum: 853a3f33fce72aaf4ffa60b7f2b6fcfca40b270b3466e1b96561b02185d2bd8c01dd7948bc31a24ac014f4cc854e545ca9a8e9cf7ea46262f9d24c9e88551c66 + languageName: node + linkType: hard + "micromark-util-events-to-acorn@npm:^1.0.0": version: 1.2.1 resolution: "micromark-util-events-to-acorn@npm:1.2.1" @@ -8086,6 +8495,13 @@ __metadata: languageName: node linkType: hard +"micromark-util-html-tag-name@npm:^2.0.0": + version: 2.0.0 + resolution: "micromark-util-html-tag-name@npm:2.0.0" + checksum: d786d4486f93eb0ac5b628779809ca97c5dc60f3c9fc03eb565809831db181cf8cb7f05f9ac76852f3eb35461af0f89fa407b46f3a03f4f97a96754d8dc540d8 + languageName: node + linkType: hard + "micromark-util-normalize-identifier@npm:^1.0.0": version: 1.0.0 resolution: "micromark-util-normalize-identifier@npm:1.0.0" @@ -8095,6 +8511,15 @@ __metadata: languageName: node linkType: hard +"micromark-util-normalize-identifier@npm:^2.0.0": + version: 2.0.0 + resolution: "micromark-util-normalize-identifier@npm:2.0.0" + dependencies: + micromark-util-symbol: ^2.0.0 + checksum: b36da2d3fd102053dadd953ce5c558328df12a63a8ac0e5aad13d4dda8e43b6a5d4a661baafe0a1cd8a260bead4b4a8e6e0e74193dd651e8484225bd4f4e68aa + languageName: node + linkType: hard + "micromark-util-resolve-all@npm:^1.0.0": version: 1.0.0 resolution: "micromark-util-resolve-all@npm:1.0.0" @@ -8104,6 +8529,15 @@ __metadata: languageName: node linkType: hard +"micromark-util-resolve-all@npm:^2.0.0": + version: 2.0.0 + resolution: "micromark-util-resolve-all@npm:2.0.0" + dependencies: + micromark-util-types: ^2.0.0 + checksum: 31fe703b85572cb3f598ebe32750e59516925c7ff1f66cfe6afaebe0771a395a9eaa770787f2523d3c46082ea80e6c14f83643303740b3d650af7c96ebd30ccc + languageName: node + linkType: hard + "micromark-util-sanitize-uri@npm:^1.0.0, micromark-util-sanitize-uri@npm:^1.1.0": version: 1.1.0 resolution: "micromark-util-sanitize-uri@npm:1.1.0" @@ -8115,6 +8549,17 @@ __metadata: languageName: node linkType: hard +"micromark-util-sanitize-uri@npm:^2.0.0": + version: 2.0.0 + resolution: "micromark-util-sanitize-uri@npm:2.0.0" + dependencies: + micromark-util-character: ^2.0.0 + micromark-util-encode: ^2.0.0 + micromark-util-symbol: ^2.0.0 + checksum: ea4c28bbffcf2430e9aff2d18554296789a8b0a1f54ac24020d1dde76624a7f93e8f2a83e88cd5a846b6d2c4287b71b1142d1b89fa7f1b0363a9b33711a141fe + languageName: node + linkType: hard + "micromark-util-subtokenize@npm:^1.0.0": version: 1.0.2 resolution: "micromark-util-subtokenize@npm:1.0.2" @@ -8127,6 +8572,18 @@ __metadata: languageName: node linkType: hard +"micromark-util-subtokenize@npm:^2.0.0": + version: 2.0.0 + resolution: "micromark-util-subtokenize@npm:2.0.0" + dependencies: + devlop: ^1.0.0 + micromark-util-chunked: ^2.0.0 + micromark-util-symbol: ^2.0.0 + micromark-util-types: ^2.0.0 + checksum: 77d9c7d59c05a20468d49ce2a3640e9cb268c083ccad02322f26c84e1094c25b44f4b8139ef0a247ca11a4fef7620c5bf82fbffd98acdb2989e79cbe7bd8f1db + languageName: node + linkType: hard + "micromark-util-symbol@npm:^1.0.0, micromark-util-symbol@npm:^1.0.1": version: 1.0.1 resolution: "micromark-util-symbol@npm:1.0.1" @@ -8134,6 +8591,13 @@ __metadata: languageName: node linkType: hard +"micromark-util-symbol@npm:^2.0.0": + version: 2.0.0 + resolution: "micromark-util-symbol@npm:2.0.0" + checksum: fa4a05bff575d9fbf0ad96a1013003e3bb6087ed6b34b609a141b6c0d2137b57df594aca409a95f4c5fda199f227b56a7d8b1f82cea0768df161d8a3a3660764 + languageName: node + linkType: hard + "micromark-util-types@npm:^1.0.0, micromark-util-types@npm:^1.0.1": version: 1.0.2 resolution: "micromark-util-types@npm:1.0.2" @@ -8141,6 +8605,13 @@ __metadata: languageName: node linkType: hard +"micromark-util-types@npm:^2.0.0": + version: 2.0.0 + resolution: "micromark-util-types@npm:2.0.0" + checksum: 819fef3ab5770c37893d2a60381fb2694396c8d22803b6e103c830c3a1bc1490363c2b0470bb2acaaddad776dfbc2fc1fcfde39cb63c4f54d95121611672e3d0 + languageName: node + linkType: hard + "micromark@npm:^3.0.0": version: 3.1.0 resolution: "micromark@npm:3.1.0" @@ -8166,6 +8637,31 @@ __metadata: languageName: node linkType: hard +"micromark@npm:^4.0.0": + version: 4.0.0 + resolution: "micromark@npm:4.0.0" + dependencies: + "@types/debug": ^4.0.0 + debug: ^4.0.0 + decode-named-character-reference: ^1.0.0 + devlop: ^1.0.0 + micromark-core-commonmark: ^2.0.0 + micromark-factory-space: ^2.0.0 + micromark-util-character: ^2.0.0 + micromark-util-chunked: ^2.0.0 + micromark-util-combine-extensions: ^2.0.0 + micromark-util-decode-numeric-character-reference: ^2.0.0 + micromark-util-encode: ^2.0.0 + micromark-util-normalize-identifier: ^2.0.0 + micromark-util-resolve-all: ^2.0.0 + micromark-util-sanitize-uri: ^2.0.0 + micromark-util-subtokenize: ^2.0.0 + micromark-util-symbol: ^2.0.0 + micromark-util-types: ^2.0.0 + checksum: b84ab5ab1a0b28c063c52e9c2c9d7d44b954507235c10c9492d66e0b38f7de24bf298f914a1fbdf109f2a57a88cf0412de217c84cfac5fd60e3e42a74dbac085 + languageName: node + linkType: hard + "micromatch@npm:^4.0.2, micromatch@npm:^4.0.4, micromatch@npm:^4.0.5": version: 4.0.5 resolution: "micromatch@npm:4.0.5" @@ -8238,14 +8734,14 @@ __metadata: languageName: node linkType: hard -"mini-css-extract-plugin@npm:^2.7.3": - version: 2.7.5 - resolution: "mini-css-extract-plugin@npm:2.7.5" +"mini-css-extract-plugin@npm:^2.7.6": + version: 2.7.6 + resolution: "mini-css-extract-plugin@npm:2.7.6" dependencies: schema-utils: ^4.0.0 peerDependencies: webpack: ^5.0.0 - checksum: afc37cdfb765e8826a1babbab3cd8a99ffc4eaeabb6c013a6b3c80801e44ebc37d930b98c6f66168bb8cd545fcb2e8fc2630d72b4501a1bb8add1547c2534a53 + checksum: be6f7cefc6275168eb0a6b8fe977083a18c743c9612c9f00e6c1a62c3393ca7960e93fba1a7ebb09b75f36a0204ad087d772c1ef574bc29c90c0e8175a3c0b83 languageName: node linkType: hard @@ -8499,10 +8995,10 @@ __metadata: languageName: node linkType: hard -"node-releases@npm:^2.0.8": - version: 2.0.10 - resolution: "node-releases@npm:2.0.10" - checksum: d784ecde25696a15d449c4433077f5cce620ed30a1656c4abf31282bfc691a70d9618bae6868d247a67914d1be5cc4fde22f65a05f4398cdfb92e0fc83cadfbc +"node-releases@npm:^2.0.13": + version: 2.0.13 + resolution: "node-releases@npm:2.0.13" + checksum: 17ec8f315dba62710cae71a8dad3cd0288ba943d2ece43504b3b1aa8625bf138637798ab470b1d9035b0545996f63000a8a926e0f6d35d0996424f8b6d36dda3 languageName: node linkType: hard @@ -8683,7 +9179,7 @@ __metadata: languageName: node linkType: hard -"p-limit@npm:^2.0.0, p-limit@npm:^2.2.0": +"p-limit@npm:^2.0.0": version: 2.3.0 resolution: "p-limit@npm:2.3.0" dependencies: @@ -8701,6 +9197,15 @@ __metadata: languageName: node linkType: hard +"p-limit@npm:^4.0.0": + version: 4.0.0 + resolution: "p-limit@npm:4.0.0" + dependencies: + yocto-queue: ^1.0.0 + checksum: 01d9d70695187788f984226e16c903475ec6a947ee7b21948d6f597bed788e3112cc7ec2e171c1d37125057a5f45f3da21d8653e04a3a793589e12e9e80e756b + languageName: node + linkType: hard + "p-locate@npm:^3.0.0": version: 3.0.0 resolution: "p-locate@npm:3.0.0" @@ -8710,15 +9215,6 @@ __metadata: languageName: node linkType: hard -"p-locate@npm:^4.1.0": - version: 4.1.0 - resolution: "p-locate@npm:4.1.0" - dependencies: - p-limit: ^2.2.0 - checksum: 513bd14a455f5da4ebfcb819ef706c54adb09097703de6aeaa5d26fe5ea16df92b48d1ac45e01e3944ce1e6aa2a66f7f8894742b8c9d6e276e16cd2049a2b870 - languageName: node - linkType: hard - "p-locate@npm:^5.0.0": version: 5.0.0 resolution: "p-locate@npm:5.0.0" @@ -8728,6 +9224,15 @@ __metadata: languageName: node linkType: hard +"p-locate@npm:^6.0.0": + version: 6.0.0 + resolution: "p-locate@npm:6.0.0" + dependencies: + p-limit: ^4.0.0 + checksum: 2bfe5234efa5e7a4e74b30a5479a193fdd9236f8f6b4d2f3f69e3d286d9a7d7ab0c118a2a50142efcf4e41625def635bd9332d6cbf9cc65d85eb0718c579ab38 + languageName: node + linkType: hard + "p-map@npm:^4.0.0": version: 4.0.0 resolution: "p-map@npm:4.0.0" @@ -8801,7 +9306,7 @@ __metadata: languageName: node linkType: hard -"parse-json@npm:^5.0.0": +"parse-json@npm:^5.0.0, parse-json@npm:^5.2.0": version: 5.2.0 resolution: "parse-json@npm:5.2.0" dependencies: @@ -8877,6 +9382,13 @@ __metadata: languageName: node linkType: hard +"path-exists@npm:^5.0.0": + version: 5.0.0 + resolution: "path-exists@npm:5.0.0" + checksum: 8ca842868cab09423994596eb2c5ec2a971c17d1a3cb36dbf060592c730c725cd524b9067d7d2a1e031fef9ba7bd2ac6dc5ec9fb92aa693265f7be3987045254 + languageName: node + linkType: hard + "path-is-absolute@npm:^1.0.0": version: 1.0.1 resolution: "path-is-absolute@npm:1.0.1" @@ -8960,12 +9472,12 @@ __metadata: languageName: node linkType: hard -"pkg-dir@npm:^4.1.0": - version: 4.2.0 - resolution: "pkg-dir@npm:4.2.0" +"pkg-dir@npm:^7.0.0": + version: 7.0.0 + resolution: "pkg-dir@npm:7.0.0" dependencies: - find-up: ^4.0.0 - checksum: 9863e3f35132bf99ae1636d31ff1e1e3501251d480336edb1c211133c8d58906bed80f154a1d723652df1fda91e01c7442c2eeaf9dc83157c7ae89087e43c8d6 + find-up: ^6.3.0 + checksum: 94298b20a446bfbbd66604474de8a0cdd3b8d251225170970f15d9646f633e056c80520dd5b4c1d1050c9fed8f6a9e5054b141c93806439452efe72e57562c03 languageName: node linkType: hard @@ -9063,25 +9575,17 @@ __metadata: languageName: node linkType: hard -"postcss-loader@npm:^7.0.2": - version: 7.2.4 - resolution: "postcss-loader@npm:7.2.4" +"postcss-loader@npm:^7.3.3": + version: 7.3.3 + resolution: "postcss-loader@npm:7.3.3" dependencies: - cosmiconfig: ^8.1.3 - cosmiconfig-typescript-loader: ^4.3.0 - klona: ^2.0.6 + cosmiconfig: ^8.2.0 + jiti: ^1.18.2 semver: ^7.3.8 peerDependencies: postcss: ^7.0.0 || ^8.0.1 - ts-node: ">=10" - typescript: ">=4" webpack: ^5.0.0 - peerDependenciesMeta: - ts-node: - optional: true - typescript: - optional: true - checksum: d75de64f6629a2d76b1c1e9ad5022cae9b589472d8d091e21105d93a0f09a4c80f08fe10323d41ddf2fbda157910a03df3c538ce8fccf974b179d0762b408fa3 + checksum: c724044d6ae56334535c26bb4efc9c151431d44d60bc8300157c760747281a242757d8dab32db72738434531175b38a408cb0b270bb96207c07584dcfcd899ff languageName: node linkType: hard @@ -9180,16 +9684,16 @@ __metadata: languageName: node linkType: hard -"postcss-modules-local-by-default@npm:^4.0.0": - version: 4.0.0 - resolution: "postcss-modules-local-by-default@npm:4.0.0" +"postcss-modules-local-by-default@npm:^4.0.3": + version: 4.0.3 + resolution: "postcss-modules-local-by-default@npm:4.0.3" dependencies: icss-utils: ^5.0.0 postcss-selector-parser: ^6.0.2 postcss-value-parser: ^4.1.0 peerDependencies: postcss: ^8.1.0 - checksum: 6cf570badc7bc26c265e073f3ff9596b69bb954bc6ac9c5c1b8cba2995b80834226b60e0a3cbb87d5f399dbb52e6466bba8aa1d244f6218f99d834aec431a69d + checksum: 2f8083687f3d6067885f8863dd32dbbb4f779cfcc7e52c17abede9311d84faf6d3ed8760e7c54c6380281732ae1f78e5e56a28baf3c271b33f450a11c9e30485 languageName: node linkType: hard @@ -9370,7 +9874,7 @@ __metadata: languageName: node linkType: hard -"postcss-sort-media-queries@npm:^4.3.0": +"postcss-sort-media-queries@npm:^4.4.1": version: 4.4.1 resolution: "postcss-sort-media-queries@npm:4.4.1" dependencies: @@ -9420,14 +9924,14 @@ __metadata: languageName: node linkType: hard -"postcss@npm:^8.4.17, postcss@npm:^8.4.19, postcss@npm:^8.4.21": - version: 8.4.23 - resolution: "postcss@npm:8.4.23" +"postcss@npm:^8.4.17, postcss@npm:^8.4.21, postcss@npm:^8.4.26": + version: 8.4.31 + resolution: "postcss@npm:8.4.31" dependencies: nanoid: ^3.3.6 picocolors: ^1.0.0 source-map-js: ^1.0.2 - checksum: 8bb9d1b2ea6e694f8987d4f18c94617971b2b8d141602725fedcc2222fdc413b776a6e1b969a25d627d7b2681ca5aabb56f59e727ef94072e1b6ac8412105a2f + checksum: 1d8611341b073143ad90486fcdfeab49edd243377b1f51834dc4f6d028e82ce5190e4f11bb2633276864503654fb7cab28e67abdc0fbf9d1f88cad4a0ff0beea languageName: node linkType: hard @@ -9466,6 +9970,18 @@ __metadata: languageName: node linkType: hard +"prism-react-renderer@npm:^2.1.0": + version: 2.1.0 + resolution: "prism-react-renderer@npm:2.1.0" + dependencies: + "@types/prismjs": ^1.26.0 + clsx: ^1.2.1 + peerDependencies: + react: ">=16.0.0" + checksum: 61b4eb22bdbf01005a0d7ec2a24a27b69e28f124a1fbbfc2adb4d7d41a7929ea94d5ce506a361dd5a230728402f02595d521d9a5286d74ec9b34be0896c513a5 + languageName: node + linkType: hard + "prismjs@npm:^1.29.0": version: 1.29.0 resolution: "prismjs@npm:1.29.0" @@ -9662,7 +10178,7 @@ __metadata: languageName: node linkType: hard -"react-base16-styling@npm:^0.6.0": +"react-base16-styling@npm:~0.6.0": version: 0.6.0 resolution: "react-base16-styling@npm:0.6.0" dependencies: @@ -9706,16 +10222,15 @@ __metadata: languageName: node linkType: hard -"react-dom@npm:^17.0.2": - version: 17.0.2 - resolution: "react-dom@npm:17.0.2" +"react-dom@npm:^18.0.0": + version: 18.2.0 + resolution: "react-dom@npm:18.2.0" dependencies: loose-envify: ^1.1.0 - object-assign: ^4.1.1 - scheduler: ^0.20.2 + scheduler: ^0.23.0 peerDependencies: - react: 17.0.2 - checksum: 1c1eaa3bca7c7228d24b70932e3d7c99e70d1d04e13bb0843bbf321582bc25d7961d6b8a6978a58a598af2af496d1cedcfb1bf65f6b0960a0a8161cb8dab743c + react: ^18.2.0 + checksum: 7d323310bea3a91be2965f9468d552f201b1c27891e45ddc2d6b8f717680c95a75ae0bc1e3f5cf41472446a2589a75aed4483aee8169287909fcd59ad149e8cc languageName: node linkType: hard @@ -9756,22 +10271,7 @@ __metadata: languageName: node linkType: hard -"react-json-view@npm:^1.21.3": - version: 1.21.3 - resolution: "react-json-view@npm:1.21.3" - dependencies: - flux: ^4.0.1 - react-base16-styling: ^0.6.0 - react-lifecycles-compat: ^3.0.4 - react-textarea-autosize: ^8.3.2 - peerDependencies: - react: ^17.0.0 || ^16.3.0 || ^15.5.4 - react-dom: ^17.0.0 || ^16.3.0 || ^15.5.4 - checksum: 5718bcd9210ad5b06eb9469cf8b9b44be9498845a7702e621343618e8251f26357e6e1c865532cf170db6165df1cb30202787e057309d8848c220bc600ec0d1a - languageName: node - linkType: hard - -"react-lifecycles-compat@npm:^3.0.4": +"react-lifecycles-compat@npm:~3.0.4": version: 3.0.4 resolution: "react-lifecycles-compat@npm:3.0.4" checksum: a904b0fc0a8eeb15a148c9feb7bc17cec7ef96e71188280061fc340043fd6d8ee3ff233381f0e8f95c1cf926210b2c4a31f38182c8f35ac55057e453d6df204f @@ -9838,26 +10338,25 @@ __metadata: languageName: node linkType: hard -"react-textarea-autosize@npm:^8.3.2": - version: 8.4.0 - resolution: "react-textarea-autosize@npm:8.4.0" +"react-textarea-autosize@npm:~8.3.2": + version: 8.3.4 + resolution: "react-textarea-autosize@npm:8.3.4" dependencies: "@babel/runtime": ^7.10.2 use-composed-ref: ^1.3.0 use-latest: ^1.2.1 peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 055fb51b74e1ab6b286490cfcd8ed77a760f6fc90706053b5dfcb138199d02c56289a1060a1daf9f3ae37ffd66f73e9553f026d0fad446bc2243b713acf48e05 + checksum: 87360d4392276d4e87511a73be9b0634b8bcce8f4f648cf659334d993f25ad3d4062f468f1e1944fc614123acae4299580aad00b760c6a96cec190e076f847f5 languageName: node linkType: hard -"react@npm:^17.0.2": - version: 17.0.2 - resolution: "react@npm:17.0.2" +"react@npm:^18.0.0": + version: 18.2.0 + resolution: "react@npm:18.2.0" dependencies: loose-envify: ^1.1.0 - object-assign: ^4.1.1 - checksum: b254cc17ce3011788330f7bbf383ab653c6848902d7936a87b09d835d091e3f295f7e9dd1597c6daac5dc80f90e778c8230218ba8ad599f74adcc11e33b9d61b + checksum: 88e38092da8839b830cda6feef2e8505dec8ace60579e46aa5490fc3dc9bba0bd50336507dc166f43e3afc1c42939c09fe33b25fae889d6f402721dcd78fca1b languageName: node linkType: hard @@ -9937,33 +10436,33 @@ __metadata: languageName: node linkType: hard -"regenerator-runtime@npm:^0.13.11": - version: 0.13.11 - resolution: "regenerator-runtime@npm:0.13.11" - checksum: 27481628d22a1c4e3ff551096a683b424242a216fee44685467307f14d58020af1e19660bf2e26064de946bad7eff28950eae9f8209d55723e2d9351e632bbb4 +"regenerator-runtime@npm:^0.14.0": + version: 0.14.0 + resolution: "regenerator-runtime@npm:0.14.0" + checksum: 1c977ad82a82a4412e4f639d65d22be376d3ebdd30da2c003eeafdaaacd03fc00c2320f18120007ee700900979284fc78a9f00da7fb593f6e6eeebc673fba9a3 languageName: node linkType: hard -"regenerator-transform@npm:^0.15.1": - version: 0.15.1 - resolution: "regenerator-transform@npm:0.15.1" +"regenerator-transform@npm:^0.15.2": + version: 0.15.2 + resolution: "regenerator-transform@npm:0.15.2" dependencies: "@babel/runtime": ^7.8.4 - checksum: 2d15bdeadbbfb1d12c93f5775493d85874dbe1d405bec323da5c61ec6e701bc9eea36167483e1a5e752de9b2df59ab9a2dfff6bf3784f2b28af2279a673d29a4 + checksum: 20b6f9377d65954980fe044cfdd160de98df415b4bff38fbade67b3337efaf078308c4fed943067cd759827cc8cfeca9cb28ccda1f08333b85d6a2acbd022c27 languageName: node linkType: hard -"regexpu-core@npm:^5.2.1": - version: 5.2.2 - resolution: "regexpu-core@npm:5.2.2" +"regexpu-core@npm:^5.3.1": + version: 5.3.2 + resolution: "regexpu-core@npm:5.3.2" dependencies: + "@babel/regjsgen": ^0.8.0 regenerate: ^1.4.2 regenerate-unicode-properties: ^10.1.0 - regjsgen: ^0.7.1 regjsparser: ^0.9.1 unicode-match-property-ecmascript: ^2.0.0 unicode-match-property-value-ecmascript: ^2.1.0 - checksum: 87c56815e20d213848d38f6b047ba52f0d632f36e791b777f59327e8d350c0743b27cc25feab64c0eadc9fe9959dde6b1261af71108a9371b72c8c26beda05ef + checksum: 95bb97088419f5396e07769b7de96f995f58137ad75fac5811fb5fe53737766dfff35d66a0ee66babb1eb55386ef981feaef392f9df6d671f3c124812ba24da2 languageName: node linkType: hard @@ -9985,13 +10484,6 @@ __metadata: languageName: node linkType: hard -"regjsgen@npm:^0.7.1": - version: 0.7.1 - resolution: "regjsgen@npm:0.7.1" - checksum: 7cac399921c58db8e16454869283ff66871531180218064fa938ac05c11c2976792a00706c3c78bbc625e1d793ca373065ea90564e06189a751a7b4ae33acadc - languageName: node - linkType: hard - "regjsparser@npm:^0.9.1": version: 0.9.1 resolution: "regjsparser@npm:0.9.1" @@ -10021,17 +10513,6 @@ __metadata: languageName: node linkType: hard -"remark-comment@npm:^1.0.0": - version: 1.0.0 - resolution: "remark-comment@npm:1.0.0" - dependencies: - micromark-factory-space: ^1.0.0 - micromark-util-character: ^1.1.0 - micromark-util-symbol: ^1.0.1 - checksum: bb455a7a2ec88fe6927a5c585c2c61de9d2a178cec4f8ec9289a6549e07d835a026a0a8e29a27b125eedca04b3174cebd61d0cc30991b7d3d04b3a5bfc37fcd3 - languageName: node - linkType: hard - "remark-directive@npm:^2.0.1": version: 2.0.1 resolution: "remark-directive@npm:2.0.1" @@ -10055,6 +10536,18 @@ __metadata: languageName: node linkType: hard +"remark-frontmatter@npm:^5.0.0": + version: 5.0.0 + resolution: "remark-frontmatter@npm:5.0.0" + dependencies: + "@types/mdast": ^4.0.0 + mdast-util-frontmatter: ^2.0.0 + micromark-extension-frontmatter: ^2.0.0 + unified: ^11.0.0 + checksum: b36e11d528d1d0172489c74ce7961bb6073f7272e71ea1349f765fc79c4246a758aef949174d371a088c48e458af776fcfbb3b043c49cd1120ca8239aeafe16a + languageName: node + linkType: hard + "remark-gfm@npm:^3.0.1": version: 3.0.1 resolution: "remark-gfm@npm:3.0.1" @@ -10229,9 +10722,9 @@ __metadata: languageName: node linkType: hard -"rtlcss@npm:^4.0.0": - version: 4.1.0 - resolution: "rtlcss@npm:4.1.0" +"rtlcss@npm:^4.1.0": + version: 4.1.1 + resolution: "rtlcss@npm:4.1.1" dependencies: escalade: ^3.1.1 picocolors: ^1.0.0 @@ -10239,7 +10732,7 @@ __metadata: strip-json-comments: ^3.1.1 bin: rtlcss: bin/rtlcss.js - checksum: 778b0efb98f0e3a9e9cc2f3a1438887ae8248adf9e7e606361c88e86186cf1eb69d91e9476383b954c40f78bafeb3ce75e32d5fe36059901e07e4e6542ba8b6d + checksum: dcf37d76265b5c84d610488afa68a2506d008f95feac968b35ccae9aa49e7019ae0336a80363303f8f8bbf60df3ecdeb60413548b049114a24748319b68aefde languageName: node linkType: hard @@ -10317,15 +10810,15 @@ __metadata: linkType: hard "sass@npm:^1.57.1": - version: 1.66.1 - resolution: "sass@npm:1.66.1" + version: 1.69.2 + resolution: "sass@npm:1.69.2" dependencies: chokidar: ">=3.0.0 <4.0.0" immutable: ^4.0.0 source-map-js: ">=0.6.2 <2.0.0" bin: sass: sass.js - checksum: 74fc11d0fcd5e16c5331b57dd59865705a299c64e89f2b99646869caeb011dc8d0b6144a6c74a90c264e9ef70654207dbf44fc9b7e3393f8bd14809b904c8a52 + checksum: 25c6aaf993a40ce33e66c6c3a25690ce573a3c890024ba3dea5416a17c7db6ec39542d4b4e62c2c429005737630d6b48ab841f99fd534ac1b441f37d2c34e0c4 languageName: node linkType: hard @@ -10336,13 +10829,12 @@ __metadata: languageName: node linkType: hard -"scheduler@npm:^0.20.2": - version: 0.20.2 - resolution: "scheduler@npm:0.20.2" +"scheduler@npm:^0.23.0": + version: 0.23.0 + resolution: "scheduler@npm:0.23.0" dependencies: loose-envify: ^1.1.0 - object-assign: ^4.1.1 - checksum: c4b35cf967c8f0d3e65753252d0f260271f81a81e427241295c5a7b783abf4ea9e905f22f815ab66676f5313be0a25f47be582254db8f9241b259213e999b8fc + checksum: d79192eeaa12abef860c195ea45d37cbf2bbf5f66e3c4dcd16f54a7da53b17788a70d109ee3d3dde1a0fd50e6a8fc171f4300356c5aee4fc0171de526bf35f8a languageName: node linkType: hard @@ -10357,14 +10849,14 @@ __metadata: languageName: node linkType: hard -"schema-utils@npm:^3.0.0, schema-utils@npm:^3.1.1, schema-utils@npm:^3.1.2": - version: 3.1.2 - resolution: "schema-utils@npm:3.1.2" +"schema-utils@npm:^3.0.0, schema-utils@npm:^3.1.1, schema-utils@npm:^3.2.0": + version: 3.3.0 + resolution: "schema-utils@npm:3.3.0" dependencies: "@types/json-schema": ^7.0.8 ajv: ^6.12.5 ajv-keywords: ^3.5.2 - checksum: 39683edfe3beff018cdb1ae4fa296fc55cea13a080aa2b4d9351895cd64b22ba4d87e2e548c2a2ac1bc76e60980670adb0f413a58104479f1a0c12e5663cb8ca + checksum: ea56971926fac2487f0757da939a871388891bc87c6a82220d125d587b388f1704788f3706e7f63a7b70e49fc2db974c41343528caea60444afd5ce0fe4b85c0 languageName: node linkType: hard @@ -10415,7 +10907,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:^6.0.0, semver@npm:^6.1.1, semver@npm:^6.1.2, semver@npm:^6.3.0": +"semver@npm:^6.3.1": version: 6.3.1 resolution: "semver@npm:6.3.1" bin: @@ -10424,14 +10916,14 @@ __metadata: languageName: node linkType: hard -"semver@npm:^7.3.2, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8": - version: 7.3.8 - resolution: "semver@npm:7.3.8" +"semver@npm:^7.3.2, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8, semver@npm:^7.5.4": + version: 7.5.4 + resolution: "semver@npm:7.5.4" dependencies: lru-cache: ^6.0.0 bin: semver: bin/semver.js - checksum: ba9c7cbbf2b7884696523450a61fee1a09930d888b7a8d7579025ad93d459b2d1949ee5bbfeb188b2be5f4ac163544c5e98491ad6152df34154feebc2cc337c1 + checksum: 12d8ad952fa353b0995bf180cdac205a4068b759a140e5d3c608317098b3575ac2f1e09182206bf2eb26120e1c0ed8fb92c48c592f6099680de56bb071423ca3 languageName: node linkType: hard @@ -10606,14 +11098,14 @@ __metadata: languageName: node linkType: hard -"sirv@npm:^1.0.7": - version: 1.0.19 - resolution: "sirv@npm:1.0.19" +"sirv@npm:^2.0.3": + version: 2.0.3 + resolution: "sirv@npm:2.0.3" dependencies: "@polka/url": ^1.0.0-next.20 mrmime: ^1.0.0 - totalist: ^1.0.0 - checksum: c943cfc61baf85f05f125451796212ec35d4377af4da90ae8ec1fa23e6d7b0b4d9c74a8fbf65af83c94e669e88a09dc6451ba99154235eead4393c10dda5b07c + totalist: ^3.0.0 + checksum: e2dfd4c97735a6ad6d842d0eec2cd9e3919ff0e46f0d228248c5753ad4b70b832711e77e1259c031c439cdb08303cc54d923685c92b0e890145cc733af7c5568 languageName: node linkType: hard @@ -10770,6 +11262,13 @@ __metadata: languageName: node linkType: hard +"srcset@npm:^4.0.0": + version: 4.0.0 + resolution: "srcset@npm:4.0.0" + checksum: aceb898c9281101ef43bfbf96bf04dfae828e1bf942a45df6fad74ae9f8f0a425f4bca1480e0d22879beb40dd2bc6947e0e1e5f4d307a714666196164bc5769d + languageName: node + linkType: hard + "ssri@npm:^9.0.0": version: 9.0.1 resolution: "ssri@npm:9.0.1" @@ -11031,15 +11530,15 @@ __metadata: languageName: node linkType: hard -"terser-webpack-plugin@npm:^5.3.7": - version: 5.3.7 - resolution: "terser-webpack-plugin@npm:5.3.7" +"terser-webpack-plugin@npm:^5.3.7, terser-webpack-plugin@npm:^5.3.9": + version: 5.3.9 + resolution: "terser-webpack-plugin@npm:5.3.9" dependencies: "@jridgewell/trace-mapping": ^0.3.17 jest-worker: ^27.4.5 schema-utils: ^3.1.1 serialize-javascript: ^6.0.1 - terser: ^5.16.5 + terser: ^5.16.8 peerDependencies: webpack: ^5.1.0 peerDependenciesMeta: @@ -11049,21 +11548,21 @@ __metadata: optional: true uglify-js: optional: true - checksum: 095e699fdeeb553cdf2c6f75f983949271b396d9c201d7ae9fc633c45c1c1ad14c7257ef9d51ccc62213dd3e97f875870ba31550f6d4f1b6674f2615562da7f7 + checksum: 41705713d6f9cb83287936b21e27c658891c78c4392159f5148b5623f0e8c48559869779619b058382a4c9758e7820ea034695e57dc7c474b4962b79f553bc5f languageName: node linkType: hard -"terser@npm:^5.10.0, terser@npm:^5.15.1, terser@npm:^5.16.5": - version: 5.17.1 - resolution: "terser@npm:5.17.1" +"terser@npm:^5.10.0, terser@npm:^5.15.1, terser@npm:^5.16.8": + version: 5.21.0 + resolution: "terser@npm:5.21.0" dependencies: - "@jridgewell/source-map": ^0.3.2 - acorn: ^8.5.0 + "@jridgewell/source-map": ^0.3.3 + acorn: ^8.8.2 commander: ^2.20.0 source-map-support: ~0.5.20 bin: terser: bin/terser - checksum: 69b0e80e3c4084db2819de4d6ae8a2ba79f2fcd7ed6df40fe4b602ec7bfd8e889cc63c7d5268f30990ffecbf6eeda18f857adad9386fe2c2331b398d58ed855c + checksum: 130f1567af1ffa4ddb067651bb284a01b45b5c83e82b3a072a5ff94b0b00ac35090f89c8714631a4a45972f65187bc149fc7144380611f437e1e3d9e174b136b languageName: node linkType: hard @@ -11118,10 +11617,10 @@ __metadata: languageName: node linkType: hard -"totalist@npm:^1.0.0": - version: 1.1.0 - resolution: "totalist@npm:1.1.0" - checksum: dfab80c7104a1d170adc8c18782d6c04b7df08352dec452191208c66395f7ef2af7537ddfa2cf1decbdcfab1a47afbbf0dec6543ea191da98c1c6e1599f86adc +"totalist@npm:^3.0.0": + version: 3.0.1 + resolution: "totalist@npm:3.0.1" + checksum: 5132d562cf88ff93fd710770a92f31dbe67cc19b5c6ccae2efc0da327f0954d211bbfd9456389655d726c624f284b4a23112f56d1da931ca7cfabbe1f45e778a languageName: node linkType: hard @@ -11146,10 +11645,10 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.5.0": - version: 2.5.0 - resolution: "tslib@npm:2.5.0" - checksum: ae3ed5f9ce29932d049908ebfdf21b3a003a85653a9a140d614da6b767a93ef94f460e52c3d787f0e4f383546981713f165037dc2274df212ea9f8a4541004e1 +"tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.6.0": + version: 2.6.2 + resolution: "tslib@npm:2.6.2" + checksum: 329ea56123005922f39642318e3d1f0f8265d1e7fcb92c633e0809521da75eeaca28d2cf96d7248229deb40e5c19adf408259f4b9640afd20d13aecc1430f3ad languageName: node linkType: hard @@ -11186,23 +11685,23 @@ __metadata: languageName: node linkType: hard -"typescript@npm:^4.9.4": - version: 4.9.5 - resolution: "typescript@npm:4.9.5" +"typescript@npm:~5.0.0": + version: 5.0.4 + resolution: "typescript@npm:5.0.4" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: ee000bc26848147ad423b581bd250075662a354d84f0e06eb76d3b892328d8d4440b7487b5a83e851b12b255f55d71835b008a66cbf8f255a11e4400159237db + checksum: 82b94da3f4604a8946da585f7d6c3025fff8410779e5bde2855ab130d05e4fd08938b9e593b6ebed165bda6ad9292b230984f10952cf82f0a0ca07bbeaa08172 languageName: node linkType: hard -"typescript@patch:typescript@^4.9.4#~builtin": - version: 4.9.5 - resolution: "typescript@patch:typescript@npm%3A4.9.5#~builtin::version=4.9.5&hash=a1c5e5" +"typescript@patch:typescript@~5.0.0#~builtin": + version: 5.0.4 + resolution: "typescript@patch:typescript@npm%3A5.0.4#~builtin::version=5.0.4&hash=a1c5e5" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 2eee5c37cad4390385db5db5a8e81470e42e8f1401b0358d7390095d6f681b410f2c4a0c496c6ff9ebd775423c7785cdace7bcdad76c7bee283df3d9718c0f20 + checksum: 6a1fe9a77bb9c5176ead919cc4a1499ee63e46b4e05bf667079f11bf3a8f7887f135aa72460a4c3b016e6e6bb65a822cb8689a6d86cbfe92d22cc9f501f09213 languageName: node linkType: hard @@ -11259,6 +11758,21 @@ __metadata: languageName: node linkType: hard +"unified@npm:^11.0.0": + version: 11.0.3 + resolution: "unified@npm:11.0.3" + dependencies: + "@types/unist": ^3.0.0 + bail: ^2.0.0 + devlop: ^1.0.0 + extend: ^3.0.0 + is-plain-obj: ^4.0.0 + trough: ^2.0.0 + vfile: ^6.0.0 + checksum: 402d6b397b98f8966993faca0e1480f5f1825cc44df6a5236b75ab099f14b10ed808e578155c3f535e60676c12ee3f52346ca08d64343a72181d7a6b4d32011d + languageName: node + linkType: hard + "unique-filename@npm:^2.0.0": version: 2.0.1 resolution: "unique-filename@npm:2.0.1" @@ -11309,6 +11823,15 @@ __metadata: languageName: node linkType: hard +"unist-util-is@npm:^6.0.0": + version: 6.0.0 + resolution: "unist-util-is@npm:6.0.0" + dependencies: + "@types/unist": ^3.0.0 + checksum: f630a925126594af9993b091cf807b86811371e465b5049a6283e08537d3e6ba0f7e248e1e7dab52cfe33f9002606acef093441137181b327f6fe504884b20e2 + languageName: node + linkType: hard + "unist-util-position-from-estree@npm:^1.0.0, unist-util-position-from-estree@npm:^1.1.0": version: 1.1.2 resolution: "unist-util-position-from-estree@npm:1.1.2" @@ -11346,6 +11869,15 @@ __metadata: languageName: node linkType: hard +"unist-util-stringify-position@npm:^4.0.0": + version: 4.0.0 + resolution: "unist-util-stringify-position@npm:4.0.0" + dependencies: + "@types/unist": ^3.0.0 + checksum: e2e7aee4b92ddb64d314b4ac89eef7a46e4c829cbd3ee4aee516d100772b490eb6b4974f653ba0717a0071ca6ea0770bf22b0a2ea62c65fcba1d071285e96324 + languageName: node + linkType: hard + "unist-util-visit-parents@npm:^3.0.0": version: 3.1.1 resolution: "unist-util-visit-parents@npm:3.1.1" @@ -11366,6 +11898,16 @@ __metadata: languageName: node linkType: hard +"unist-util-visit-parents@npm:^6.0.0": + version: 6.0.1 + resolution: "unist-util-visit-parents@npm:6.0.1" + dependencies: + "@types/unist": ^3.0.0 + unist-util-is: ^6.0.0 + checksum: 08927647c579f63b91aafcbec9966dc4a7d0af1e5e26fc69f4e3e6a01215084835a2321b06f3cbe7bf7914a852830fc1439f0fc3d7153d8804ac3ef851ddfa20 + languageName: node + linkType: hard + "unist-util-visit@npm:^2.0.3": version: 2.0.3 resolution: "unist-util-visit@npm:2.0.3" @@ -11388,6 +11930,17 @@ __metadata: languageName: node linkType: hard +"unist-util-visit@npm:^5.0.0": + version: 5.0.0 + resolution: "unist-util-visit@npm:5.0.0" + dependencies: + "@types/unist": ^3.0.0 + unist-util-is: ^6.0.0 + unist-util-visit-parents: ^6.0.0 + checksum: 9ec42e618e7e5d0202f3c191cd30791b51641285732767ee2e6bcd035931032e3c1b29093f4d7fd0c79175bbc1f26f24f26ee49770d32be76f8730a652a857e6 + languageName: node + linkType: hard + "universalify@npm:^2.0.0": version: 2.0.0 resolution: "universalify@npm:2.0.0" @@ -11402,9 +11955,9 @@ __metadata: languageName: node linkType: hard -"update-browserslist-db@npm:^1.0.10": - version: 1.0.11 - resolution: "update-browserslist-db@npm:1.0.11" +"update-browserslist-db@npm:^1.0.13": + version: 1.0.13 + resolution: "update-browserslist-db@npm:1.0.13" dependencies: escalade: ^3.1.1 picocolors: ^1.0.0 @@ -11412,7 +11965,7 @@ __metadata: browserslist: ">= 4.21.0" bin: update-browserslist-db: cli.js - checksum: b98327518f9a345c7cad5437afae4d2ae7d865f9779554baf2a200fdf4bac4969076b679b1115434bd6557376bdd37ca7583d0f9b8f8e302d7d4cc1e91b5f231 + checksum: 1e47d80182ab6e4ad35396ad8b61008ae2a1330221175d0abd37689658bdb61af9b705bfc41057fd16682474d79944fb2d86767c5ed5ae34b6276b9bed353322 languageName: node linkType: hard @@ -11499,15 +12052,6 @@ __metadata: languageName: node linkType: hard -"use-sync-external-store@npm:^1.2.0": - version: 1.2.0 - resolution: "use-sync-external-store@npm:1.2.0" - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 5c639e0f8da3521d605f59ce5be9e094ca772bd44a4ce7322b055a6f58eeed8dda3c94cabd90c7a41fb6fa852210092008afe48f7038792fd47501f33299116a - languageName: node - linkType: hard - "util-deprecate@npm:^1.0.1, util-deprecate@npm:^1.0.2, util-deprecate@npm:~1.0.1": version: 1.0.2 resolution: "util-deprecate@npm:1.0.2" @@ -11593,7 +12137,17 @@ __metadata: languageName: node linkType: hard -"vfile@npm:^5.0.0": +"vfile-message@npm:^4.0.0": + version: 4.0.2 + resolution: "vfile-message@npm:4.0.2" + dependencies: + "@types/unist": ^3.0.0 + unist-util-stringify-position: ^4.0.0 + checksum: 964e7e119f4c0e0270fc269119c41c96da20afa01acb7c9809a88365c8e0c64aa692fafbd952669382b978002ecd7ad31ef4446d85e8a22cdb62f6df20186c2d + languageName: node + linkType: hard + +"vfile@npm:^5.0.0, vfile@npm:^5.3.7": version: 5.3.7 resolution: "vfile@npm:5.3.7" dependencies: @@ -11605,6 +12159,17 @@ __metadata: languageName: node linkType: hard +"vfile@npm:^6.0.0": + version: 6.0.1 + resolution: "vfile@npm:6.0.1" + dependencies: + "@types/unist": ^3.0.0 + unist-util-stringify-position: ^4.0.0 + vfile-message: ^4.0.0 + checksum: 05ccee73aeb00402bc8a5d0708af299e9f4a33f5132805449099295085e3ca3b0d018328bad9ff44cf2e6f4cd364f1d558d3fb9b394243a25b2739207edcb0ed + languageName: node + linkType: hard + "wait-on@npm:^7.0.1": version: 7.0.1 resolution: "wait-on@npm:7.0.1" @@ -11653,23 +12218,30 @@ __metadata: languageName: node linkType: hard -"webpack-bundle-analyzer@npm:^4.8.0": - version: 4.8.0 - resolution: "webpack-bundle-analyzer@npm:4.8.0" +"webpack-bundle-analyzer@npm:^4.9.0": + version: 4.9.1 + resolution: "webpack-bundle-analyzer@npm:4.9.1" dependencies: "@discoveryjs/json-ext": 0.5.7 acorn: ^8.0.4 acorn-walk: ^8.0.0 - chalk: ^4.1.0 commander: ^7.2.0 + escape-string-regexp: ^4.0.0 gzip-size: ^6.0.0 - lodash: ^4.17.20 + is-plain-object: ^5.0.0 + lodash.debounce: ^4.0.8 + lodash.escape: ^4.0.1 + lodash.flatten: ^4.4.0 + lodash.invokemap: ^4.6.0 + lodash.pullall: ^4.2.0 + lodash.uniqby: ^4.7.0 opener: ^1.5.2 - sirv: ^1.0.7 + picocolors: ^1.0.0 + sirv: ^2.0.3 ws: ^7.3.1 bin: webpack-bundle-analyzer: lib/bin/analyzer.js - checksum: acd86f68abb2bcb1a240043c6e2d8e53079499363afed94b96c0ec1abcc4fca2b7a7cbeeb5e13027d02a993c6ea8153194c69e7697faf47528bdaff1e2ce297e + checksum: 7e891c28d5a903242893e55ecc714fa01d7ad6bedade143235c07091b235915349812fa048968462781d59187507962f38b6c61ed7d25fb836ba0ac0ee919a39 languageName: node linkType: hard @@ -11688,9 +12260,9 @@ __metadata: languageName: node linkType: hard -"webpack-dev-server@npm:^4.11.1": - version: 4.13.3 - resolution: "webpack-dev-server@npm:4.13.3" +"webpack-dev-server@npm:^4.15.1": + version: 4.15.1 + resolution: "webpack-dev-server@npm:4.15.1" dependencies: "@types/bonjour": ^3.5.9 "@types/connect-history-api-fallback": ^1.3.5 @@ -11698,7 +12270,7 @@ __metadata: "@types/serve-index": ^1.9.1 "@types/serve-static": ^1.13.10 "@types/sockjs": ^0.3.33 - "@types/ws": ^8.5.1 + "@types/ws": ^8.5.5 ansi-html-community: ^0.0.8 bonjour-service: ^1.0.11 chokidar: ^3.5.3 @@ -11731,17 +12303,17 @@ __metadata: optional: true bin: webpack-dev-server: bin/webpack-dev-server.js - checksum: d019844d3bc384676921afadfbd0a95fd06e475f2d43604789a4a8f42f79a8fb37e745f15f47f352630046dd6c6c9694051a7552b34a056c59d3a601e74d6320 + checksum: cd0063b068d2b938fd76c412d555374186ac2fa84bbae098265212ed50a5c15d6f03aa12a5a310c544a242943eb58c0bfde4c296d5c36765c182f53799e1bc71 languageName: node linkType: hard -"webpack-merge@npm:^5.8.0": - version: 5.8.0 - resolution: "webpack-merge@npm:5.8.0" +"webpack-merge@npm:^5.9.0": + version: 5.9.0 + resolution: "webpack-merge@npm:5.9.0" dependencies: clone-deep: ^4.0.1 wildcard: ^2.0.0 - checksum: 88786ab91013f1bd2a683834ff381be81c245a4b0f63304a5103e90f6653f44dab496a0768287f8531761f8ad957d1f9f3ccb2cb55df0de1bd9ee343e079da26 + checksum: 64fe2c23aacc5f19684452a0e84ec02c46b990423aee6fcc5c18d7d471155bd14e9a6adb02bd3656eb3e0ac2532c8e97d69412ad14c97eeafe32fa6d10050872 languageName: node linkType: hard @@ -11752,9 +12324,9 @@ __metadata: languageName: node linkType: hard -"webpack@npm:^5.76.0": - version: 5.81.0 - resolution: "webpack@npm:5.81.0" +"webpack@npm:^5.88.1": + version: 5.88.2 + resolution: "webpack@npm:5.88.2" dependencies: "@types/eslint-scope": ^3.7.3 "@types/estree": ^1.0.0 @@ -11762,10 +12334,10 @@ __metadata: "@webassemblyjs/wasm-edit": ^1.11.5 "@webassemblyjs/wasm-parser": ^1.11.5 acorn: ^8.7.1 - acorn-import-assertions: ^1.7.6 + acorn-import-assertions: ^1.9.0 browserslist: ^4.14.5 chrome-trace-event: ^1.0.2 - enhanced-resolve: ^5.13.0 + enhanced-resolve: ^5.15.0 es-module-lexer: ^1.2.1 eslint-scope: 5.1.1 events: ^3.2.0 @@ -11775,7 +12347,7 @@ __metadata: loader-runner: ^4.2.0 mime-types: ^2.1.27 neo-async: ^2.6.2 - schema-utils: ^3.1.2 + schema-utils: ^3.2.0 tapable: ^2.1.1 terser-webpack-plugin: ^5.3.7 watchpack: ^2.4.0 @@ -11785,7 +12357,7 @@ __metadata: optional: true bin: webpack: bin/webpack.js - checksum: 1a6eecaffac3226d80f4e8f330b32e0ff117d9dafd8700166d230afbc171d68ea1ff55a9939fa789307f7b9d11881889ccb8e6cd79d4ccbaeef916788ce73fdb + checksum: 79476a782da31a21f6dd38fbbd06b68da93baf6a62f0d08ca99222367f3b8668f5a1f2086b7bb78e23172e31fa6df6fa7ab09b25e827866c4fc4dc2b30443ce2 languageName: node linkType: hard @@ -12002,6 +12574,13 @@ __metadata: languageName: node linkType: hard +"yocto-queue@npm:^1.0.0": + version: 1.0.0 + resolution: "yocto-queue@npm:1.0.0" + checksum: 2cac84540f65c64ccc1683c267edce396b26b1e931aa429660aefac8fbe0188167b7aee815a3c22fa59a28a58d898d1a2b1825048f834d8d629f4c2a5d443801 + languageName: node + linkType: hard + "zwitch@npm:^2.0.0": version: 2.0.4 resolution: "zwitch@npm:2.0.4" diff --git a/package.json b/package.json index 7b7d962780..bad49ab55f 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,7 @@ "jest-haste-map@^29.4.3": "patch:jest-haste-map@npm%3A29.4.3#./.yarn/patches/jest-haste-map-npm-29.4.3-19b03fcef3.patch", "mock-fs@^5.2.0": "patch:mock-fs@npm%3A5.2.0#./.yarn/patches/mock-fs-npm-5.2.0-5103a7b507.patch" }, - "version": "1.19.0-next.1", + "version": "1.19.0-next.2", "dependencies": { "@backstage/errors": "workspace:^", "@manypkg/get-packages": "^1.1.3" diff --git a/packages/app-defaults/CHANGELOG.md b/packages/app-defaults/CHANGELOG.md index 573ef62905..ce6bdb23fa 100644 --- a/packages/app-defaults/CHANGELOG.md +++ b/packages/app-defaults/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/app-defaults +## 1.4.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-app-api@1.11.0-next.2 + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/theme@0.4.3-next.0 + - @backstage/plugin-permission-react@0.4.16-next.1 + ## 1.4.4-next.1 ### Patch Changes diff --git a/packages/app-defaults/package.json b/packages/app-defaults/package.json index b583443902..79b0c14b17 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.4-next.1", + "version": "1.4.4-next.2", "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 22136e2b59..10874da64a 100644 --- a/packages/app-next-example-plugin/CHANGELOG.md +++ b/packages/app-next-example-plugin/CHANGELOG.md @@ -1,5 +1,13 @@ # app-next-example-plugin +## 0.0.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.2.0-next.2 + - @backstage/core-components@0.13.6-next.2 + ## 0.0.2-next.1 ### Patch Changes diff --git a/packages/app-next-example-plugin/package.json b/packages/app-next-example-plugin/package.json index ad797aaeb7..6304dcd028 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.2-next.1", + "version": "0.0.2-next.2", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/packages/app-next/CHANGELOG.md b/packages/app-next/CHANGELOG.md index b9aa117f5b..3195255f36 100644 --- a/packages/app-next/CHANGELOG.md +++ b/packages/app-next/CHANGELOG.md @@ -1,5 +1,82 @@ # example-app-next +## 0.0.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/cli@0.23.0-next.2 + - @backstage/frontend-plugin-api@0.2.0-next.2 + - @backstage/frontend-app-api@0.2.0-next.2 + - @backstage/core-app-api@1.11.0-next.2 + - @backstage/plugin-techdocs@1.7.1-next.2 + - @backstage/plugin-newrelic@0.3.41-next.2 + - @backstage/plugin-scaffolder@1.15.1-next.2 + - @backstage/integration-react@1.1.20-next.2 + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/plugin-tech-radar@0.6.9-next.2 + - @backstage/plugin-catalog@1.14.0-next.2 + - @backstage/plugin-adr@0.6.8-next.2 + - @backstage/plugin-graphiql@0.2.55-next.2 + - @backstage/plugin-search-react@1.7.1-next.2 + - @backstage/plugin-newrelic-dashboard@0.3.0-next.2 + - @backstage/plugin-kubernetes@0.11.0-next.2 + - @backstage/theme@0.4.3-next.0 + - @backstage/plugin-jenkins@0.8.7-next.2 + - @backstage/plugin-tech-insights@0.3.17-next.2 + - @backstage/plugin-playlist@0.1.17-next.2 + - @backstage/app-defaults@1.4.4-next.2 + - app-next-example-plugin@0.0.2-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-airbrake@0.3.25-next.2 + - @backstage/plugin-apache-airflow@0.2.16-next.2 + - @backstage/plugin-api-docs@0.9.12-next.2 + - @backstage/plugin-azure-devops@0.3.7-next.2 + - @backstage/plugin-azure-sites@0.1.14-next.2 + - @backstage/plugin-badges@0.2.49-next.2 + - @backstage/plugin-catalog-common@1.0.17-next.0 + - @backstage/plugin-catalog-graph@0.2.37-next.2 + - @backstage/plugin-catalog-import@0.10.1-next.2 + - @backstage/plugin-catalog-unprocessed-entities@0.1.4-next.2 + - @backstage/plugin-circleci@0.3.25-next.2 + - @backstage/plugin-cloudbuild@0.3.25-next.2 + - @backstage/plugin-code-coverage@0.2.18-next.2 + - @backstage/plugin-cost-insights@0.12.14-next.2 + - @backstage/plugin-devtools@0.1.5-next.2 + - @backstage/plugin-dynatrace@7.0.5-next.2 + - @backstage/plugin-entity-feedback@0.2.8-next.2 + - @backstage/plugin-explore@0.4.11-next.2 + - @backstage/plugin-gcalendar@0.3.19-next.2 + - @backstage/plugin-gcp-projects@0.3.42-next.2 + - @backstage/plugin-github-actions@0.6.6-next.2 + - @backstage/plugin-gocd@0.1.31-next.2 + - @backstage/plugin-home@0.5.9-next.2 + - @backstage/plugin-kafka@0.3.25-next.2 + - @backstage/plugin-lighthouse@0.4.10-next.2 + - @backstage/plugin-linguist@0.1.10-next.2 + - @backstage/plugin-linguist-common@0.1.2 + - @backstage/plugin-microsoft-calendar@0.1.8-next.2 + - @backstage/plugin-octopus-deploy@0.2.7-next.2 + - @backstage/plugin-org@0.6.15-next.2 + - @backstage/plugin-pagerduty@0.6.6-next.2 + - @backstage/plugin-permission-react@0.4.16-next.1 + - @backstage/plugin-puppetdb@0.1.8-next.2 + - @backstage/plugin-rollbar@0.4.25-next.2 + - @backstage/plugin-scaffolder-react@1.5.6-next.2 + - @backstage/plugin-search@1.4.1-next.2 + - @backstage/plugin-search-common@1.2.7-next.0 + - @backstage/plugin-sentry@0.5.10-next.2 + - @backstage/plugin-shortcuts@0.3.15-next.2 + - @backstage/plugin-stack-overflow@0.1.21-next.2 + - @backstage/plugin-stackstorm@0.1.7-next.2 + - @backstage/plugin-techdocs-module-addons-contrib@1.1.1-next.2 + - @backstage/plugin-techdocs-react@1.1.12-next.2 + - @backstage/plugin-todo@0.2.28-next.2 + - @backstage/plugin-user-settings@0.7.11-next.2 + ## 0.0.2-next.1 ### Patch Changes diff --git a/packages/app-next/package.json b/packages/app-next/package.json index 50ebf77ec2..b7fc704476 100644 --- a/packages/app-next/package.json +++ b/packages/app-next/package.json @@ -1,6 +1,6 @@ { "name": "example-app-next", - "version": "0.0.2-next.1", + "version": "0.0.2-next.2", "private": true, "backstage": { "role": "frontend" @@ -89,7 +89,6 @@ "app-next-example-plugin": "workspace:^", "history": "^5.0.0", "lodash": "^4.17.21", - "prop-types": "^15.7.2", "react": "^17.0.2", "react-dom": "^17.0.2", "react-router": "^6.3.0", diff --git a/packages/app-next/src/App.tsx b/packages/app-next/src/App.tsx index d844939cf2..01353feb4f 100644 --- a/packages/app-next/src/App.tsx +++ b/packages/app-next/src/App.tsx @@ -49,7 +49,7 @@ TODO: /* app.tsx */ const app = createApp({ - plugins: [graphiqlPlugin, pagesPlugin, techRadarPlugin], + features: [graphiqlPlugin, pagesPlugin, techRadarPlugin], // bindRoutes({ bind }) { // bind(catalogPlugin.externalRoutes, { // createComponent: scaffolderPlugin.routes.root, diff --git a/packages/app-next/src/examples/pagesPlugin.tsx b/packages/app-next/src/examples/pagesPlugin.tsx index 290c6b118e..1ec1cfa5a1 100644 --- a/packages/app-next/src/examples/pagesPlugin.tsx +++ b/packages/app-next/src/examples/pagesPlugin.tsx @@ -19,9 +19,8 @@ import { Link } from '@backstage/core-components'; import { createPageExtension, createPlugin, - useRouteRef, } from '@backstage/frontend-plugin-api'; -import { createRouteRef } from '@backstage/core-plugin-api'; +import { useRouteRef, createRouteRef } from '@backstage/core-plugin-api'; import { Route, Routes } from 'react-router-dom'; const indexRouteRef = createRouteRef({ id: 'index' }); diff --git a/packages/app/CHANGELOG.md b/packages/app/CHANGELOG.md index 7b14d026a0..dc7635f51a 100644 --- a/packages/app/CHANGELOG.md +++ b/packages/app/CHANGELOG.md @@ -1,5 +1,82 @@ # example-app +## 0.2.88-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/cli@0.23.0-next.2 + - @backstage/frontend-app-api@0.2.0-next.2 + - @backstage/core-app-api@1.11.0-next.2 + - @backstage/plugin-techdocs@1.7.1-next.2 + - @backstage/plugin-newrelic@0.3.41-next.2 + - @backstage/plugin-scaffolder@1.15.1-next.2 + - @backstage/integration-react@1.1.20-next.2 + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/plugin-tech-radar@0.6.9-next.2 + - @backstage/plugin-catalog@1.14.0-next.2 + - @backstage/plugin-adr@0.6.8-next.2 + - @backstage/plugin-graphiql@0.2.55-next.2 + - @backstage/plugin-search-react@1.7.1-next.2 + - @backstage/plugin-newrelic-dashboard@0.3.0-next.2 + - @backstage/plugin-kubernetes-cluster@0.0.1-next.0 + - @backstage/plugin-kubernetes@0.11.0-next.2 + - @backstage/theme@0.4.3-next.0 + - @backstage/plugin-jenkins@0.8.7-next.2 + - @backstage/plugin-tech-insights@0.3.17-next.2 + - @backstage/plugin-playlist@0.1.17-next.2 + - @backstage/app-defaults@1.4.4-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-airbrake@0.3.25-next.2 + - @backstage/plugin-apache-airflow@0.2.16-next.2 + - @backstage/plugin-api-docs@0.9.12-next.2 + - @backstage/plugin-azure-devops@0.3.7-next.2 + - @backstage/plugin-azure-sites@0.1.14-next.2 + - @backstage/plugin-badges@0.2.49-next.2 + - @backstage/plugin-catalog-common@1.0.17-next.0 + - @backstage/plugin-catalog-graph@0.2.37-next.2 + - @backstage/plugin-catalog-import@0.10.1-next.2 + - @backstage/plugin-catalog-unprocessed-entities@0.1.4-next.2 + - @backstage/plugin-circleci@0.3.25-next.2 + - @backstage/plugin-cloudbuild@0.3.25-next.2 + - @backstage/plugin-code-coverage@0.2.18-next.2 + - @backstage/plugin-cost-insights@0.12.14-next.2 + - @backstage/plugin-devtools@0.1.5-next.2 + - @backstage/plugin-dynatrace@7.0.5-next.2 + - @backstage/plugin-entity-feedback@0.2.8-next.2 + - @backstage/plugin-explore@0.4.11-next.2 + - @backstage/plugin-gcalendar@0.3.19-next.2 + - @backstage/plugin-gcp-projects@0.3.42-next.2 + - @backstage/plugin-github-actions@0.6.6-next.2 + - @backstage/plugin-gocd@0.1.31-next.2 + - @backstage/plugin-home@0.5.9-next.2 + - @backstage/plugin-kafka@0.3.25-next.2 + - @backstage/plugin-lighthouse@0.4.10-next.2 + - @backstage/plugin-linguist@0.1.10-next.2 + - @backstage/plugin-linguist-common@0.1.2 + - @backstage/plugin-microsoft-calendar@0.1.8-next.2 + - @backstage/plugin-nomad@0.1.6-next.2 + - @backstage/plugin-octopus-deploy@0.2.7-next.2 + - @backstage/plugin-org@0.6.15-next.2 + - @backstage/plugin-pagerduty@0.6.6-next.2 + - @backstage/plugin-permission-react@0.4.16-next.1 + - @backstage/plugin-puppetdb@0.1.8-next.2 + - @backstage/plugin-rollbar@0.4.25-next.2 + - @backstage/plugin-scaffolder-react@1.5.6-next.2 + - @backstage/plugin-search@1.4.1-next.2 + - @backstage/plugin-search-common@1.2.7-next.0 + - @backstage/plugin-sentry@0.5.10-next.2 + - @backstage/plugin-shortcuts@0.3.15-next.2 + - @backstage/plugin-stack-overflow@0.1.21-next.2 + - @backstage/plugin-stackstorm@0.1.7-next.2 + - @backstage/plugin-techdocs-module-addons-contrib@1.1.1-next.2 + - @backstage/plugin-techdocs-react@1.1.12-next.2 + - @backstage/plugin-todo@0.2.28-next.2 + - @backstage/plugin-user-settings@0.7.11-next.2 + ## 0.2.88-next.1 ### Patch Changes diff --git a/packages/app/package.json b/packages/app/package.json index 6e06d2ca03..b8ecc84b9d 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -1,6 +1,6 @@ { "name": "example-app", - "version": "0.2.88-next.1", + "version": "0.2.88-next.2", "private": true, "backstage": { "role": "frontend" @@ -94,7 +94,6 @@ "@roadiehq/backstage-plugin-github-pull-requests": "^2.2.7", "@roadiehq/backstage-plugin-travis-ci": "^2.0.5", "history": "^5.0.0", - "prop-types": "^15.7.2", "react": "^17.0.2", "react-dom": "^17.0.2", "react-router": "^6.3.0", diff --git a/packages/backend-app-api/CHANGELOG.md b/packages/backend-app-api/CHANGELOG.md index cf24e558fd..dc81b18678 100644 --- a/packages/backend-app-api/CHANGELOG.md +++ b/packages/backend-app-api/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/backend-app-api +## 0.5.6-next.2 + +### Patch Changes + +- 74491c9602: Moved `HostDiscovery` from `@backstage/backend-common`. +- a4617c422a: Added `watch` option to configuration loaders that can be used to disable file watching by setting it to `false`. +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-auth-node@0.4.0-next.2 + - @backstage/config-loader@1.5.1-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-tasks@0.5.11-next.2 + - @backstage/plugin-permission-node@0.7.17-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/cli-common@0.1.13-next.0 + - @backstage/cli-node@0.1.5-next.1 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + ## 0.5.5-next.1 ### Patch Changes diff --git a/packages/backend-app-api/api-report.md b/packages/backend-app-api/api-report.md index ecfbc1fe7d..e478a91bb7 100644 --- a/packages/backend-app-api/api-report.md +++ b/packages/backend-app-api/api-report.md @@ -204,6 +204,7 @@ export function loadBackendConfig(options: { remote?: LoadConfigOptionsRemote; argv: string[]; additionalConfigs?: AppConfig[]; + watch?: boolean; }): Promise<{ config: Config; }>; diff --git a/packages/backend-app-api/package.json b/packages/backend-app-api/package.json index 24959ff290..c83a4acfd7 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.5-next.1", + "version": "0.5.6-next.2", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { @@ -87,7 +87,6 @@ "@types/node-forge": "^1.3.0", "@types/stoppable": "^1.1.0", "http-errors": "^2.0.0", - "mock-fs": "^5.2.0", "supertest": "^6.1.3" }, "configSchema": "config.d.ts", diff --git a/packages/backend-app-api/src/alpha/featureDiscoveryServiceFactory.test.ts b/packages/backend-app-api/src/alpha/featureDiscoveryServiceFactory.test.ts index 448f1a8ff7..92f34bb94f 100644 --- a/packages/backend-app-api/src/alpha/featureDiscoveryServiceFactory.test.ts +++ b/packages/backend-app-api/src/alpha/featureDiscoveryServiceFactory.test.ts @@ -14,28 +14,31 @@ * limitations under the License. */ -import mockFs from 'mock-fs'; -import { resolve as resolvePath, dirname } from 'path'; -import { startTestBackend, mockServices } from '@backstage/backend-test-utils'; +import { + startTestBackend, + mockServices, + createMockDirectory, +} from '@backstage/backend-test-utils'; import { featureDiscoveryServiceFactory } from './featureDiscoveryServiceFactory'; -const rootDir = dirname(process.argv[1]); +const mockDir = createMockDirectory(); +process.argv[1] = mockDir.path; + +const pluginApiPath = require.resolve('@backstage/backend-plugin-api'); describe('featureDiscoveryServiceFactory', () => { beforeEach(() => { - mockFs({ - [rootDir]: { - 'package.json': JSON.stringify({ - name: 'example-app', - dependencies: { - 'detected-plugin': '0.0.0', - 'detected-module': '0.0.0', - 'detected-plugin-with-alpha': '0.0.0', - 'detected-library': '0.0.0', - }, - }), - }, - [resolvePath(rootDir, 'node_modules/detected-plugin')]: { + mockDir.setContent({ + 'package.json': JSON.stringify({ + name: 'example-app', + dependencies: { + 'detected-plugin': '0.0.0', + 'detected-module': '0.0.0', + 'detected-plugin-with-alpha': '0.0.0', + 'detected-library': '0.0.0', + }, + }), + 'node_modules/detected-plugin': { 'package.json': JSON.stringify({ name: 'detected-plugin', main: 'index.js', @@ -44,7 +47,7 @@ describe('featureDiscoveryServiceFactory', () => { }, }), 'index.js': ` - const { createBackendPlugin, coreServices } = require('@backstage/backend-plugin-api'); + const { createBackendPlugin, coreServices } = require('${pluginApiPath}'); exports.default = createBackendPlugin({ pluginId: 'detected', register(env) { @@ -58,7 +61,7 @@ describe('featureDiscoveryServiceFactory', () => { }); `, }, - [resolvePath(rootDir, 'node_modules/detected-module')]: { + 'node_modules/detected-module': { 'package.json': JSON.stringify({ name: 'detected-module', main: 'index.js', @@ -67,7 +70,7 @@ describe('featureDiscoveryServiceFactory', () => { }, }), 'index.js': ` - const { createBackendModule, coreServices } = require('@backstage/backend-plugin-api'); + const { createBackendModule, coreServices } = require('${pluginApiPath}'); exports.default = createBackendModule({ pluginId: 'detected', moduleId: 'derp', @@ -82,7 +85,7 @@ describe('featureDiscoveryServiceFactory', () => { }); `, }, - [resolvePath(rootDir, 'node_modules/detected-plugin-with-alpha')]: { + 'node_modules/detected-plugin-with-alpha': { 'package.json': JSON.stringify({ name: 'detected-plugin-with-alpha', main: 'index.js', @@ -101,7 +104,7 @@ describe('featureDiscoveryServiceFactory', () => { }), 'index.js': `exports.default = undefined;`, 'alpha.js': ` - const { createBackendPlugin, coreServices } = require('@backstage/backend-plugin-api'); + const { createBackendPlugin, coreServices } = require('${pluginApiPath}'); exports.default = createBackendPlugin({ pluginId: 'detected-alpha', register(env) { @@ -115,7 +118,7 @@ describe('featureDiscoveryServiceFactory', () => { }); `, }, - [resolvePath(rootDir, 'node_modules/detected-library')]: { + 'node_modules/detected-library': { 'package.json': JSON.stringify({ name: 'detected-library', main: 'index.js', @@ -124,7 +127,7 @@ describe('featureDiscoveryServiceFactory', () => { }, }), 'index.js': ` - const { createServiceFactory, createServiceRef, coreServices } = require('@backstage/backend-plugin-api'); + const { createServiceFactory, createServiceRef, coreServices } = require('${pluginApiPath}'); exports.default = createServiceFactory({ service: createServiceRef({ id: 'test', scope: 'root' }), deps: { logger: coreServices.rootLogger }, @@ -138,10 +141,6 @@ describe('featureDiscoveryServiceFactory', () => { }); }); - afterEach(() => { - mockFs.restore(); - }); - it('should detect plugin and module packages when "all" is specified', async () => { const mock = mockServices.rootLogger.mock({ child: () => mock }); diff --git a/packages/backend-app-api/src/config/config.ts b/packages/backend-app-api/src/config/config.ts index 7367767870..8ecc015b66 100644 --- a/packages/backend-app-api/src/config/config.ts +++ b/packages/backend-app-api/src/config/config.ts @@ -72,6 +72,7 @@ export async function loadBackendConfig(options: { remote?: LoadConfigOptionsRemote; argv: string[]; additionalConfigs?: AppConfig[]; + watch?: boolean; }): Promise<{ config: Config }> { const args = parseArgs(options.argv); @@ -89,30 +90,35 @@ export async function loadBackendConfig(options: { configRoot: paths.targetRoot, configTargets: configTargets, remote: options.remote, - watch: { - onChange(newConfigs) { - console.info( - `Reloaded config from ${newConfigs.map(c => c.context).join(', ')}`, - ); - const configsToMerge = [...newConfigs]; - if (options.additionalConfigs) { - configsToMerge.push(...options.additionalConfigs); - } - config.setConfig(ConfigReader.fromConfigs(configsToMerge)); - }, - stopSignal: new Promise(resolve => { - if (currentCancelFunc) { - currentCancelFunc(); - } - currentCancelFunc = resolve; + watch: + options.watch ?? true + ? { + onChange(newConfigs) { + console.info( + `Reloaded config from ${newConfigs + .map(c => c.context) + .join(', ')}`, + ); + const configsToMerge = [...newConfigs]; + if (options.additionalConfigs) { + configsToMerge.push(...options.additionalConfigs); + } + config.setConfig(ConfigReader.fromConfigs(configsToMerge)); + }, + stopSignal: new Promise(resolve => { + if (currentCancelFunc) { + currentCancelFunc(); + } + currentCancelFunc = resolve; - // TODO(Rugvip): We keep this here for now to avoid breaking the old system - // since this is re-used in backend-common - if (module.hot) { - module.hot.addDisposeHandler(resolve); - } - }), - }, + // TODO(Rugvip): We keep this here for now to avoid breaking the old system + // since this is re-used in backend-common + if (module.hot) { + module.hot.addDisposeHandler(resolve); + } + }), + } + : undefined, }); console.info( `Loaded config from ${appConfigs.map(c => c.context).join(', ')}`, diff --git a/packages/backend-common/CHANGELOG.md b/packages/backend-common/CHANGELOG.md index 05aecf893b..5a84733f86 100644 --- a/packages/backend-common/CHANGELOG.md +++ b/packages/backend-common/CHANGELOG.md @@ -1,5 +1,26 @@ # @backstage/backend-common +## 0.19.8-next.2 + +### Patch Changes + +- 74491c9602: The `HostDiscovery` export has been deprecated, import it from `@backstage/backend-app-api` instead. +- b95d66d4ea: Properly close write stream when writing temporary archive for processing zip-based `.readTree()` responses. +- 0b55f773a7: Removed some unused dependencies +- 4c39e38f1e: Added `/testUtils` entry point, with a utility for mocking resolve package paths as returned by `resolvePackagePath`. +- a250ad775f: Removed `mock-fs` dev dependency. +- Updated dependencies + - @backstage/config-loader@1.5.1-next.1 + - @backstage/integration@1.7.1-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-app-api@0.5.6-next.2 + - @backstage/backend-dev-utils@0.1.2-next.0 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/cli-common@0.1.13-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/integration-aws-node@0.1.7-next.0 + - @backstage/types@1.1.1 + ## 0.19.7-next.1 ### Patch Changes diff --git a/packages/backend-common/api-report.md b/packages/backend-common/api-report.md index d6ac25326f..f4d430ccbd 100644 --- a/packages/backend-common/api-report.md +++ b/packages/backend-common/api-report.md @@ -546,6 +546,7 @@ export function loadBackendConfig(options: { remote?: LoadConfigOptionsRemote; additionalConfigs?: AppConfig[]; argv: string[]; + watch?: boolean; }): Promise; // @public (undocumented) diff --git a/packages/backend-common/package.json b/packages/backend-common/package.json index a163311128..0191c67a55 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.7-next.1", + "version": "0.19.8-next.2", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { @@ -10,6 +10,7 @@ "exports": { ".": "./src/index.ts", "./alpha": "./src/alpha.ts", + "./testUtils": "./src/testUtils.ts", "./package.json": "./package.json" }, "typesVersions": { @@ -17,6 +18,9 @@ "alpha": [ "src/alpha.ts" ], + "testUtils": [ + "src/testUtils.ts" + ], "package.json": [ "package.json" ] @@ -90,15 +94,10 @@ "logform": "^2.3.2", "luxon": "^3.0.0", "minimatch": "^5.0.0", - "minimist": "^1.2.5", - "morgan": "^1.10.0", "mysql2": "^2.2.5", "node-fetch": "^2.6.7", - "node-forge": "^1.3.1", "pg": "^8.3.0", "raw-body": "^2.4.1", - "selfsigned": "^2.0.0", - "stoppable": "^1.1.0", "tar": "^6.1.12", "uuid": "^8.3.2", "winston": "^3.2.1", @@ -124,12 +123,7 @@ "@types/concat-stream": "^2.0.0", "@types/fs-extra": "^9.0.3", "@types/http-errors": "^2.0.0", - "@types/minimist": "^1.2.0", - "@types/morgan": "^1.9.0", - "@types/node-forge": "^1.3.0", "@types/pg": "^8.6.6", - "@types/recursive-readdir": "^2.2.0", - "@types/stoppable": "^1.1.0", "@types/supertest": "^2.0.8", "@types/tar": "^6.1.1", "@types/webpack-env": "^1.15.2", @@ -139,7 +133,6 @@ "http-errors": "^2.0.0", "msw": "^1.0.0", "mysql2": "^2.2.5", - "recursive-readdir": "^2.2.2", "supertest": "^6.1.3" }, "files": [ diff --git a/packages/backend-common/src/config.ts b/packages/backend-common/src/config.ts index 53b438de5d..b452d8db70 100644 --- a/packages/backend-common/src/config.ts +++ b/packages/backend-common/src/config.ts @@ -36,6 +36,7 @@ export async function loadBackendConfig(options: { remote?: LoadConfigOptionsRemote; additionalConfigs?: AppConfig[]; argv: string[]; + watch?: boolean; }): Promise { const secretEnumerator = await createConfigSecretEnumerator({ logger: options.logger, diff --git a/packages/backend-common/src/paths.ts b/packages/backend-common/src/paths.ts index c8a8849d6c..4ec8e01bc4 100644 --- a/packages/backend-common/src/paths.ts +++ b/packages/backend-common/src/paths.ts @@ -18,6 +18,12 @@ import { isChildPath } from '@backstage/cli-common'; import { NotAllowedError } from '@backstage/errors'; import { resolve as resolvePath } from 'path'; +/** @internal */ +export const packagePathMocks = new Map< + string, + (paths: string[]) => string | undefined +>(); + /** * Resolve a path relative to the root of a package directory. * Additional path arguments are resolved relative to the package dir. @@ -29,6 +35,14 @@ import { resolve as resolvePath } from 'path'; * @public */ export function resolvePackagePath(name: string, ...paths: string[]) { + const mockedResolve = packagePathMocks.get(name); + if (mockedResolve) { + const resolved = mockedResolve(paths); + if (resolved) { + return resolved; + } + } + const req = typeof __non_webpack_require__ === 'undefined' ? require diff --git a/packages/backend-common/src/testUtils.ts b/packages/backend-common/src/testUtils.ts new file mode 100644 index 0000000000..9616ab1701 --- /dev/null +++ b/packages/backend-common/src/testUtils.ts @@ -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 { packagePathMocks } from './paths'; +import { posix as posixPath, resolve as resolvePath } from 'path'; + +/** @public */ +export interface PackagePathResolutionOverride { + /** Restores the normal behavior of resolvePackagePath */ + restore(): void; +} + +/** @public */ +export interface OverridePackagePathResolutionOptions { + /** The name of the package to mock the resolved path of */ + packageName: string; + + /** A replacement for the root package path */ + path?: string; + + /** + * Replacements for package sub-paths, each key must be an exact match of the posix-style path + * that is being resolved within the package. + * + * For example, code calling `resolvePackagePath('x', 'foo', 'bar')` would match only the following + * configuration: `overridePackagePathResolution({ packageName: 'x', paths: { 'foo/bar': baz } })` + */ + paths?: { [path in string]: string | (() => string) }; +} + +/** + * This utility helps you override the paths returned by `resolvePackagePath` for a given package. + * + * @public + */ +export function overridePackagePathResolution( + options: OverridePackagePathResolutionOptions, +): PackagePathResolutionOverride { + const name = options.packageName; + + if (packagePathMocks.has(name)) { + throw new Error( + `Tried to override resolution for '${name}' more than once for package '${name}'`, + ); + } + + packagePathMocks.set(name, paths => { + const joinedPath = posixPath.join(...paths); + const localResolver = options.paths?.[joinedPath]; + if (localResolver) { + return typeof localResolver === 'function' + ? localResolver() + : localResolver; + } + if (options.path) { + return resolvePath(options.path, ...paths); + } + return undefined; + }); + + return { + restore() { + packagePathMocks.delete(name); + }, + }; +} diff --git a/packages/backend-common/testUtils-api-report.md b/packages/backend-common/testUtils-api-report.md new file mode 100644 index 0000000000..9dbdade10e --- /dev/null +++ b/packages/backend-common/testUtils-api-report.md @@ -0,0 +1,26 @@ +## API Report File for "@backstage/backend-common" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts +// @public +export function overridePackagePathResolution( + options: OverridePackagePathResolutionOptions, +): PackagePathResolutionOverride; + +// @public (undocumented) +export interface OverridePackagePathResolutionOptions { + packageName: string; + path?: string; + paths?: { + [path in string]: string | (() => string); + }; +} + +// @public (undocumented) +export interface PackagePathResolutionOverride { + restore(): void; +} + +// (No @packageDocumentation comment for this package) +``` diff --git a/packages/backend-defaults/CHANGELOG.md b/packages/backend-defaults/CHANGELOG.md index 885ea4ced9..c4e9ef1026 100644 --- a/packages/backend-defaults/CHANGELOG.md +++ b/packages/backend-defaults/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/backend-defaults +## 0.2.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/backend-app-api@0.5.6-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + ## 0.2.5-next.1 ### Patch Changes diff --git a/packages/backend-defaults/package.json b/packages/backend-defaults/package.json index 00472e0a7d..9b901f0e74 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.5-next.1", + "version": "0.2.6-next.2", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend-next/CHANGELOG.md b/packages/backend-next/CHANGELOG.md index 8760f6cff2..b09af35602 100644 --- a/packages/backend-next/CHANGELOG.md +++ b/packages/backend-next/CHANGELOG.md @@ -1,5 +1,44 @@ # example-backend-next +## 0.0.16-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-nomad-backend@0.1.8-next.2 + - @backstage/plugin-scaffolder-backend@1.18.0-next.2 + - @backstage/plugin-techdocs-backend@1.8.0-next.2 + - @backstage/plugin-auth-node@0.4.0-next.2 + - @backstage/plugin-catalog-backend@1.14.0-next.2 + - @backstage/plugin-kubernetes-backend@0.12.3-next.2 + - @backstage/plugin-jenkins-backend@0.2.9-next.2 + - @backstage/backend-defaults@0.2.6-next.2 + - @backstage/backend-tasks@0.5.11-next.2 + - @backstage/plugin-adr-backend@0.4.3-next.2 + - @backstage/plugin-app-backend@0.3.54-next.2 + - @backstage/plugin-azure-devops-backend@0.4.3-next.2 + - @backstage/plugin-badges-backend@0.3.3-next.2 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.3-next.2 + - @backstage/plugin-devtools-backend@0.2.3-next.2 + - @backstage/plugin-entity-feedback-backend@0.2.3-next.2 + - @backstage/plugin-lighthouse-backend@0.3.3-next.2 + - @backstage/plugin-linguist-backend@0.5.3-next.2 + - @backstage/plugin-permission-backend@0.5.29-next.2 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.3-next.2 + - @backstage/plugin-permission-node@0.7.17-next.2 + - @backstage/plugin-playlist-backend@0.3.10-next.2 + - @backstage/plugin-proxy-backend@0.4.3-next.2 + - @backstage/plugin-search-backend@1.4.6-next.2 + - @backstage/plugin-search-backend-module-catalog@0.1.10-next.2 + - @backstage/plugin-search-backend-module-explore@0.1.10-next.2 + - @backstage/plugin-search-backend-module-techdocs@0.1.10-next.2 + - @backstage/plugin-search-backend-node@1.2.10-next.2 + - @backstage/plugin-sonarqube-backend@0.2.8-next.2 + - @backstage/plugin-todo-backend@0.3.4-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/plugin-catalog-backend-module-unprocessed@0.3.3-next.2 + - @backstage/plugin-permission-common@0.7.9-next.0 + ## 0.0.16-next.1 ### Patch Changes diff --git a/packages/backend-next/package.json b/packages/backend-next/package.json index 3e5b4f8057..f057b87523 100644 --- a/packages/backend-next/package.json +++ b/packages/backend-next/package.json @@ -1,6 +1,6 @@ { "name": "example-backend-next", - "version": "0.0.16-next.1", + "version": "0.0.16-next.2", "main": "dist/index.cjs.js", "types": "src/index.ts", "license": "Apache-2.0", @@ -38,6 +38,7 @@ "@backstage/plugin-catalog-backend-module-unprocessed": "workspace:^", "@backstage/plugin-devtools-backend": "workspace:^", "@backstage/plugin-entity-feedback-backend": "workspace:^", + "@backstage/plugin-jenkins-backend": "workspace:^", "@backstage/plugin-kubernetes-backend": "workspace:^", "@backstage/plugin-lighthouse-backend": "workspace:^", "@backstage/plugin-linguist-backend": "workspace:^", diff --git a/packages/backend-next/src/index.ts b/packages/backend-next/src/index.ts index 1b4867c05e..bdfbc2c26b 100644 --- a/packages/backend-next/src/index.ts +++ b/packages/backend-next/src/index.ts @@ -29,6 +29,7 @@ backend.add( backend.add(import('@backstage/plugin-catalog-backend/alpha')); backend.add(import('@backstage/plugin-devtools-backend')); backend.add(import('@backstage/plugin-entity-feedback-backend')); +backend.add(import('@backstage/plugin-jenkins-backend')); backend.add(import('@backstage/plugin-kubernetes-backend/alpha')); backend.add(import('@backstage/plugin-lighthouse-backend')); backend.add(import('@backstage/plugin-linguist-backend')); diff --git a/packages/backend-openapi-utils/CHANGELOG.md b/packages/backend-openapi-utils/CHANGELOG.md index 65c508997b..9061bfe90b 100644 --- a/packages/backend-openapi-utils/CHANGELOG.md +++ b/packages/backend-openapi-utils/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/backend-openapi-utils +## 0.0.5-next.0 + +### Patch Changes + +- 7c83975531: Adds new public utility types for common OpenAPI values, like request and response shapes and parameters available on an endpoint. + + **deprecated** `internal` namespace + The internal namespace will continue to be exported but now uses OpenAPI format for path parameters. You should use the new utility types. + +- Updated dependencies + - @backstage/errors@1.2.3-next.0 + ## 0.0.4 ### Patch Changes diff --git a/packages/backend-openapi-utils/catalog-info.yaml b/packages/backend-openapi-utils/catalog-info.yaml index ab0a4be883..abb8977130 100644 --- a/packages/backend-openapi-utils/catalog-info.yaml +++ b/packages/backend-openapi-utils/catalog-info.yaml @@ -7,4 +7,4 @@ metadata: spec: lifecycle: experimental type: backstage-node-library - owner: maintainers + owner: openapi-tooling-maintainers diff --git a/packages/backend-openapi-utils/package.json b/packages/backend-openapi-utils/package.json index 8fa83bd584..54428236af 100644 --- a/packages/backend-openapi-utils/package.json +++ b/packages/backend-openapi-utils/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-openapi-utils", "description": "OpenAPI typescript support.", - "version": "0.0.4", + "version": "0.0.5-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/packages/backend-plugin-api/CHANGELOG.md b/packages/backend-plugin-api/CHANGELOG.md index ce19f9a798..4e656538c8 100644 --- a/packages/backend-plugin-api/CHANGELOG.md +++ b/packages/backend-plugin-api/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/backend-plugin-api +## 0.6.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.4.0-next.2 + - @backstage/backend-tasks@0.5.11-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-permission-common@0.7.9-next.0 + ## 0.6.5-next.1 ### Patch Changes diff --git a/packages/backend-plugin-api/package.json b/packages/backend-plugin-api/package.json index 8374a002b8..c733d394c3 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.5-next.1", + "version": "0.6.6-next.2", "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 6e1499eb1b..3603dd0dc8 100644 --- a/packages/backend-plugin-manager/CHANGELOG.md +++ b/packages/backend-plugin-manager/CHANGELOG.md @@ -1,5 +1,28 @@ # @backstage/backend-plugin-manager +## 0.0.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-auth-node@0.4.0-next.2 + - @backstage/plugin-catalog-backend@1.14.0-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-tasks@0.5.11-next.2 + - @backstage/plugin-events-backend@0.2.15-next.2 + - @backstage/plugin-permission-node@0.7.17-next.2 + - @backstage/plugin-scaffolder-node@0.2.6-next.2 + - @backstage/plugin-search-backend-node@1.2.10-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/cli-common@0.1.13-next.0 + - @backstage/cli-node@0.1.5-next.1 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-events-node@0.2.15-next.2 + - @backstage/plugin-permission-common@0.7.9-next.0 + - @backstage/plugin-search-common@1.2.7-next.0 + ## 0.0.2-next.1 ### Patch Changes diff --git a/packages/backend-plugin-manager/package.json b/packages/backend-plugin-manager/package.json index 67697981a1..5653513b80 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.2-next.1", + "version": "0.0.2-next.2", "private": true, "main": "src/index.ts", "types": "src/index.ts", @@ -55,7 +55,6 @@ "@backstage/backend-test-utils": "workspace:^", "@backstage/cli": "workspace:^", "@backstage/config-loader": "workspace:^", - "mock-fs": "^5.2.0", "wait-for-expect": "^3.0.2" }, "files": [ diff --git a/packages/backend-plugin-manager/src/manager/plugin-manager.test.ts b/packages/backend-plugin-manager/src/manager/plugin-manager.test.ts index 093776e5b0..4aabd2c072 100644 --- a/packages/backend-plugin-manager/src/manager/plugin-manager.test.ts +++ b/packages/backend-plugin-manager/src/manager/plugin-manager.test.ts @@ -20,10 +20,9 @@ import { coreServices, createServiceFactory, } from '@backstage/backend-plugin-api'; -import mockFs, { directory, symlink } from 'mock-fs'; import * as path from 'path'; import * as url from 'url'; - +import fs from 'fs'; import { BackendDynamicPlugin, BaseDynamicPlugin, @@ -43,11 +42,13 @@ import { ConfigSources } from '@backstage/config-loader'; import { Logs, MockedLogger, LogContent } from '../__testUtils__/testUtils'; import { PluginScanner } from '../scanner/plugin-scanner'; import { findPaths } from '@backstage/cli-common'; +import { createMockDirectory } from '@backstage/backend-test-utils'; describe('backend-plugin-manager', () => { + const mockDir = createMockDirectory(); + describe('loadPlugins', () => { afterEach(() => { - mockFs.restore(); jest.resetModules(); }); @@ -56,7 +57,7 @@ describe('backend-plugin-manager', () => { packageManifest: ScannedPluginManifest; indexFile?: { retativePath: string[]; - content?: string; + content: string; }; expectedLogs?(location: URL): { errors?: LogContent[]; @@ -354,17 +355,13 @@ describe('backend-plugin-manager', () => { }, ])('$name', async (tc: TestCase): Promise => { const plugin: ScannedPluginPackage = { - location: url.pathToFileURL( - path.resolve(`/node_modules/jest-tests/${randomUUID()}`), - ), + location: url.pathToFileURL(mockDir.resolve(randomUUID())), manifest: tc.packageManifest, }; const mockedFiles = { [path.join(url.fileURLToPath(plugin.location), 'package.json')]: - mockFs.file({ - content: JSON.stringify(plugin), - }), + JSON.stringify(plugin), }; if (tc.indexFile) { mockedFiles[ @@ -372,11 +369,9 @@ describe('backend-plugin-manager', () => { url.fileURLToPath(plugin.location), ...tc.indexFile.retativePath, ) - ] = mockFs.file({ - content: tc.indexFile.content, - }); + ] = tc.indexFile.content; } - mockFs(mockedFiles); + mockDir.setContent(mockedFiles); const logger = new MockedLogger(); const pluginManager = new (PluginManager as any)(logger, [plugin], { @@ -440,8 +435,11 @@ describe('backend-plugin-manager', () => { }); describe('dynamicPluginsServiceFactory', () => { + const otherMockDir = createMockDirectory(); + afterEach(() => { - mockFs.restore(); + mockDir.clear(); + otherMockDir.clear(); jest.resetModules(); }); @@ -449,14 +447,16 @@ describe('backend-plugin-manager', () => { const logger = new MockedLogger(); const rootLogger = new MockedLogger(); - mockFs({ - [findPaths(__dirname).resolveTargetRoot('package.json')]: mockFs.load( + mockDir.setContent({ + 'package.json': fs.readFileSync( findPaths(__dirname).resolveTargetRoot('package.json'), ), - '/somewhere/dynamic-plugins-root/a-dynamic-plugin': symlink({ - path: '/somewhere-else/a-dynamic-plugin', - }), - '/somewhere-else/a-dynamic-plugin': directory({}), + 'dynamic-plugins-root': {}, + 'dynamic-plugins-root/a-dynamic-plugin': ctx => + ctx.symlink(otherMockDir.resolve('a-dynamic-plugin')), + }); + otherMockDir.setContent({ + 'a-dynamic-plugin': {}, }); const fromConfigSpier = jest.spyOn(PluginManager, 'fromConfig'); @@ -468,7 +468,7 @@ describe('backend-plugin-manager', () => { .mockImplementation(async () => [ { location: url.pathToFileURL( - path.resolve('/somewhere/dynamic-plugins-root/a-dynamic-plugin'), + mockDir.resolve('dynamic-plugins-root/a-dynamic-plugin'), ), manifest: { name: 'test', @@ -533,11 +533,11 @@ describe('backend-plugin-manager', () => { expect(scanRootSpier).toHaveBeenCalled(); expect(mockedModuleLoader.bootstrap).toHaveBeenCalledWith( findPaths(__dirname).targetRoot, - [path.resolve('/somewhere-else/a-dynamic-plugin')], + [fs.realpathSync(otherMockDir.resolve('a-dynamic-plugin'))], ); expect(mockedModuleLoader.load).toHaveBeenCalledWith( - path.resolve( - '/somewhere/dynamic-plugins-root/a-dynamic-plugin/dist/index.cjs.js', + mockDir.resolve( + 'dynamic-plugins-root/a-dynamic-plugin/dist/index.cjs.js', ), ); }); diff --git a/packages/backend-plugin-manager/src/scanner/plugin-scanner.test.ts b/packages/backend-plugin-manager/src/scanner/plugin-scanner.test.ts index 6a36a377f5..d4ab8940c9 100644 --- a/packages/backend-plugin-manager/src/scanner/plugin-scanner.test.ts +++ b/packages/backend-plugin-manager/src/scanner/plugin-scanner.test.ts @@ -15,13 +15,18 @@ */ import { PluginScanner } from './plugin-scanner'; -import mockFs from 'mock-fs'; import { JsonObject } from '@backstage/types'; import { Logs, MockedLogger } from '../__testUtils__/testUtils'; import { ConfigReader } from '@backstage/config'; import path from 'path'; import * as url from 'url'; import { ScannedPluginPackage } from './types'; +import { + MockDirectoryContent, + createMockDirectory, +} from '@backstage/backend-test-utils'; + +const mockDir = createMockDirectory(); describe('plugin-scanner', () => { const env = process.env; @@ -30,7 +35,7 @@ describe('plugin-scanner', () => { }); afterEach(() => { - mockFs.restore(); + mockDir.clear(); process.env = env; }); @@ -61,85 +66,77 @@ describe('plugin-scanner', () => { }, { name: 'valid config with relative root directory path', - backstageRoot: '/backstageRoot', + backstageRoot: mockDir.resolve('backstageRoot'), fileSystem: { - '/backstageRoot': mockFs.directory({ - items: { - 'dist-dynamic': mockFs.directory(), - }, - }), + backstageRoot: { + 'dist-dynamic': {}, + }, }, config: { dynamicPlugins: { rootDirectory: 'dist-dynamic', }, }, - expectedRootDirectory: path.resolve('/backstageRoot/dist-dynamic'), + expectedRootDirectory: mockDir.resolve('backstageRoot/dist-dynamic'), }, { name: 'valid config with absolute root directory path inside the backstage root', - backstageRoot: '/backstageRoot', + backstageRoot: mockDir.resolve('backstageRoot'), fileSystem: { - '/backstageRoot': mockFs.directory({ - items: { - 'dist-dynamic': mockFs.directory(), - }, - }), + backstageRoot: { + 'dist-dynamic': {}, + }, }, config: { dynamicPlugins: { - rootDirectory: '/backstageRoot/dist-dynamic', + rootDirectory: mockDir.resolve('backstageRoot/dist-dynamic'), }, }, - expectedRootDirectory: path.resolve('/backstageRoot/dist-dynamic'), + expectedRootDirectory: mockDir.resolve('backstageRoot/dist-dynamic'), }, { name: 'valid config with absolute root directory path outside the backstage root', - backstageRoot: '/backstageRoot', + backstageRoot: mockDir.resolve('backstageRoot'), fileSystem: { - '/somewhere': mockFs.directory({ - items: { - 'dist-dynamic': mockFs.directory(), - }, - }), + somewhere: { + 'dist-dynamic': {}, + }, }, config: { dynamicPlugins: { - rootDirectory: '/somewhere/dist-dynamic', + rootDirectory: mockDir.resolve('somewhere/dist-dynamic'), }, }, - expectedError: `Dynamic plugins under '${path.resolve( - '/somewhere/dist-dynamic', - )}' cannot access backstage modules in '${path.resolve( - '/backstageRoot/node_modules', + expectedError: `Dynamic plugins under '${mockDir.resolve( + 'somewhere/dist-dynamic', + )}' cannot access backstage modules in '${mockDir.resolve( + 'backstageRoot/node_modules', )}'. -Please add '${path.resolve( - '/backstageRoot/node_modules', +Please add '${mockDir.resolve( + 'backstageRoot/node_modules', )}' to the 'NODE_PATH' when running the backstage backend.`, }, { name: 'valid config with absolute root directory path outside the backstage root but with backstage root included in NODE_PATH', - backstageRoot: '/backstageRoot', + backstageRoot: mockDir.resolve('backstageRoot'), fileSystem: { - '/somewhere': mockFs.directory({ - items: { - 'dist-dynamic': mockFs.directory(), - }, - }), + somewhere: { + 'dist-dynamic': {}, + }, }, config: { dynamicPlugins: { - rootDirectory: '/somewhere/dist-dynamic', + rootDirectory: mockDir.resolve('somewhere/dist-dynamic'), }, }, environment: { - NODE_PATH: `${path.resolve('/somewhere-else')}${ + NODE_PATH: `${mockDir.resolve('somewhere-else')}${ path.delimiter - }${path.resolve('/backstageRoot', 'node_modules')}${ + }${mockDir.resolve('backstageRoot', 'node_modules')}${ path.delimiter - }${path.resolve('anywhere-else')}`, + }${mockDir.resolve('anywhere-else')}`, }, - expectedRootDirectory: path.resolve('/somewhere/dist-dynamic'), + expectedRootDirectory: mockDir.resolve('somewhere/dist-dynamic'), }, { name: 'invalid config: dynamicPlugins not an object', @@ -186,13 +183,11 @@ Please add '${path.resolve( }, { name: 'valid config pointing to a file instead of a directory', - backstageRoot: '/backstageRoot', + backstageRoot: mockDir.resolve('backstageRoot'), fileSystem: { - '/backstageRoot': mockFs.directory({ - items: { - 'dist-dynamic': mockFs.file(), - }, - }), + backstageRoot: { + 'dist-dynamic': '', + }, }, config: { dynamicPlugins: { @@ -218,7 +213,7 @@ Please add '${path.resolve( ); } if (tc.fileSystem) { - mockFs(tc.fileSystem); + mockDir.setContent(tc.fileSystem); } if (tc.expectedError) { /* eslint-disable-next-line jest/no-conditional-expect */ @@ -240,7 +235,7 @@ Please add '${path.resolve( type TestCase = { name: string; preferAlpha?: boolean; - fileSystem?: any; + fileSystem?: MockDirectoryContent; expectedLogs?: Logs; expectedPluginPackages?: ScannedPluginPackage[]; expectedError?: string; @@ -261,31 +256,23 @@ Please add '${path.resolve( { name: 'manifest found in directory', fileSystem: { - '/backstageRoot': mockFs.directory({ - items: { - 'dist-dynamic': mockFs.directory({ - items: { - 'test-backend-plugin': mockFs.directory({ - items: { - 'package.json': mockFs.file({ - content: JSON.stringify({ - name: 'test-backend-plugin-dynamic', - version: '0.0.0', - main: 'dist/index.cjs.js', - backstage: { role: 'backend-plugin' }, - }), - }), - }, - }), - }, - }), + backstageRoot: { + 'dist-dynamic': { + 'test-backend-plugin': { + 'package.json': JSON.stringify({ + name: 'test-backend-plugin-dynamic', + version: '0.0.0', + main: 'dist/index.cjs.js', + backstage: { role: 'backend-plugin' }, + }), + }, }, - }), + }, }, expectedPluginPackages: [ { location: url.pathToFileURL( - path.resolve('/backstageRoot/dist-dynamic/test-backend-plugin'), + mockDir.resolve('backstageRoot/dist-dynamic/test-backend-plugin'), ), manifest: { name: 'test-backend-plugin-dynamic', @@ -299,38 +286,29 @@ Please add '${path.resolve( { name: 'backend plugin found in symlink', fileSystem: { - '/backstageRoot': mockFs.directory({ - items: { - 'dist-dynamic': mockFs.directory({ - items: { - 'test-backend-plugin': mockFs.symlink({ - path: '/somewhere-else/test-backend-plugin-target', - }), - }, + backstageRoot: { + 'dist-dynamic': { + 'test-backend-plugin': ctx => + ctx.symlink( + mockDir.resolve('somewhere-else/test-backend-plugin-target'), + ), + }, + }, + 'somewhere-else': { + 'test-backend-plugin-target': { + 'package.json': JSON.stringify({ + name: 'test-backend-plugin-dynamic', + version: '0.0.0', + main: 'dist/index.cjs.js', + backstage: { role: 'backend-plugin' }, }), }, - }), - '/somewhere-else': mockFs.directory({ - items: { - 'test-backend-plugin-target': mockFs.directory({ - items: { - 'package.json': mockFs.file({ - content: JSON.stringify({ - name: 'test-backend-plugin-dynamic', - version: '0.0.0', - main: 'dist/index.cjs.js', - backstage: { role: 'backend-plugin' }, - }), - }), - }, - }), - }, - }), + }, }, expectedPluginPackages: [ { location: url.pathToFileURL( - path.resolve('/backstageRoot/dist-dynamic/test-backend-plugin'), + mockDir.resolve('backstageRoot/dist-dynamic/test-backend-plugin'), ), manifest: { name: 'test-backend-plugin-dynamic', @@ -344,22 +322,18 @@ Please add '${path.resolve( { name: 'ignored folder child: not a directory', fileSystem: { - '/backstageRoot': mockFs.directory({ - items: { - 'dist-dynamic': mockFs.directory({ - items: { - 'test-backend-plugin': mockFs.file({}), - }, - }), + backstageRoot: { + 'dist-dynamic': { + 'test-backend-plugin': '', }, - }), + }, }, expectedPluginPackages: [], expectedLogs: { infos: [ { - message: `skipping '${path.resolve( - '/backstageRoot/dist-dynamic/test-backend-plugin', + message: `skipping '${mockDir.resolve( + 'backstageRoot/dist-dynamic/test-backend-plugin', )}' since it is not a directory`, }, ], @@ -368,29 +342,24 @@ Please add '${path.resolve( { name: 'ignored folder child symlink: target is not a directory', fileSystem: { - '/backstageRoot': mockFs.directory({ - items: { - 'dist-dynamic': mockFs.directory({ - items: { - 'test-backend-plugin': mockFs.symlink({ - path: '/somewhere-else/test-backend-plugin-target', - }), - }, - }), + backstageRoot: { + 'dist-dynamic': { + 'test-backend-plugin': ctx => + ctx.symlink( + mockDir.resolve('somewhere-else/test-backend-plugin-target'), + ), }, - }), - '/somewhere-else': mockFs.directory({ - items: { - 'test-backend-plugin-target': mockFs.file({}), - }, - }), + }, + 'somewhere-else': { + 'test-backend-plugin-target': '', + }, }, expectedPluginPackages: [], expectedLogs: { infos: [ { - message: `skipping '${path.resolve( - '/backstageRoot/dist-dynamic/test-backend-plugin', + message: `skipping '${mockDir.resolve( + 'backstageRoot/dist-dynamic/test-backend-plugin', )}' since it is not a directory`, }, ], @@ -400,42 +369,30 @@ Please add '${path.resolve( name: 'alpha manifest available but not preferred', preferAlpha: false, fileSystem: { - '/backstageRoot': mockFs.directory({ - items: { - 'dist-dynamic': mockFs.directory({ - items: { - 'test-backend-plugin': mockFs.directory({ - items: { - 'package.json': mockFs.file({ - content: JSON.stringify({ - name: 'test-backend-plugin-dynamic', - version: '0.0.0', - main: 'dist/index.cjs.js', - backstage: { role: 'backend-plugin' }, - }), - }), - alpha: mockFs.directory({ - items: { - 'package.json': mockFs.file({ - content: JSON.stringify({ - name: 'test-backend-plugin-dynamic', - version: '0.0.0', - main: '../dist/alpha.cjs.js', - }), - }), - }, - }), - }, + backstageRoot: { + 'dist-dynamic': { + 'test-backend-plugin': { + 'package.json': JSON.stringify({ + name: 'test-backend-plugin-dynamic', + version: '0.0.0', + main: 'dist/index.cjs.js', + backstage: { role: 'backend-plugin' }, + }), + alpha: { + 'package.json': JSON.stringify({ + name: 'test-backend-plugin-dynamic', + version: '0.0.0', + main: '../dist/alpha.cjs.js', }), }, - }), + }, }, - }), + }, }, expectedPluginPackages: [ { location: url.pathToFileURL( - path.resolve('/backstageRoot/dist-dynamic/test-backend-plugin'), + mockDir.resolve('backstageRoot/dist-dynamic/test-backend-plugin'), ), manifest: { name: 'test-backend-plugin-dynamic', @@ -450,43 +407,31 @@ Please add '${path.resolve( name: 'alpha manifest preferred and found in directory', preferAlpha: true, fileSystem: { - '/backstageRoot': mockFs.directory({ - items: { - 'dist-dynamic': mockFs.directory({ - items: { - 'test-backend-plugin': mockFs.directory({ - items: { - 'package.json': mockFs.file({ - content: JSON.stringify({ - name: 'test-backend-plugin-dynamic', - version: '0.0.0', - main: 'dist/index.cjs.js', - backstage: { role: 'backend-plugin' }, - }), - }), - alpha: mockFs.directory({ - items: { - 'package.json': mockFs.file({ - content: JSON.stringify({ - name: 'test-backend-plugin-dynamic', - version: '0.0.0', - main: '../dist/alpha.cjs.js', - }), - }), - }, - }), - }, + backstageRoot: { + 'dist-dynamic': { + 'test-backend-plugin': { + 'package.json': JSON.stringify({ + name: 'test-backend-plugin-dynamic', + version: '0.0.0', + main: 'dist/index.cjs.js', + backstage: { role: 'backend-plugin' }, + }), + alpha: { + 'package.json': JSON.stringify({ + name: 'test-backend-plugin-dynamic', + version: '0.0.0', + main: '../dist/alpha.cjs.js', }), }, - }), + }, }, - }), + }, }, expectedPluginPackages: [ { location: url.pathToFileURL( - path.resolve( - '/backstageRoot/dist-dynamic/test-backend-plugin/alpha', + mockDir.resolve( + 'backstageRoot/dist-dynamic/test-backend-plugin/alpha', ), ), manifest: { @@ -502,32 +447,24 @@ Please add '${path.resolve( name: 'alpha manifest preferred but skipped because not a directory', preferAlpha: true, fileSystem: { - '/backstageRoot': mockFs.directory({ - items: { - 'dist-dynamic': mockFs.directory({ - items: { - 'test-backend-plugin': mockFs.directory({ - items: { - 'package.json': mockFs.file({ - content: JSON.stringify({ - name: 'test-backend-plugin-dynamic', - version: '0.0.0', - main: 'dist/index.cjs.js', - backstage: { role: 'backend-plugin' }, - }), - }), - alpha: mockFs.file({}), - }, - }), - }, - }), + backstageRoot: { + 'dist-dynamic': { + 'test-backend-plugin': { + 'package.json': JSON.stringify({ + name: 'test-backend-plugin-dynamic', + version: '0.0.0', + main: 'dist/index.cjs.js', + backstage: { role: 'backend-plugin' }, + }), + alpha: '', + }, }, - }), + }, }, expectedPluginPackages: [ { location: url.pathToFileURL( - path.resolve('/backstageRoot/dist-dynamic/test-backend-plugin'), + mockDir.resolve('backstageRoot/dist-dynamic/test-backend-plugin'), ), manifest: { name: 'test-backend-plugin-dynamic', @@ -540,8 +477,8 @@ Please add '${path.resolve( expectedLogs: { warns: [ { - message: `skipping '${path.resolve( - '/backstageRoot/dist-dynamic/test-backend-plugin/alpha', + message: `skipping '${mockDir.resolve( + 'backstageRoot/dist-dynamic/test-backend-plugin/alpha', )}' since it is not a directory`, }, ], @@ -551,40 +488,28 @@ Please add '${path.resolve( name: 'invalid alpha package.json', preferAlpha: true, fileSystem: { - '/backstageRoot': mockFs.directory({ - items: { - 'dist-dynamic': mockFs.directory({ - items: { - 'test-backend-plugin': mockFs.directory({ - items: { - 'package.json': mockFs.file({ - content: JSON.stringify({ - name: 'test-backend-plugin-dynamic', - version: '0.0.0', - main: 'dist/index.cjs.js', - backstage: { role: 'backend-plugin' }, - }), - }), - alpha: mockFs.directory({ - items: { - 'package.json': mockFs.file({ - content: "invalid json content, 1, '", - }), - }, - }), - }, - }), + backstageRoot: { + 'dist-dynamic': { + 'test-backend-plugin': { + 'package.json': JSON.stringify({ + name: 'test-backend-plugin-dynamic', + version: '0.0.0', + main: 'dist/index.cjs.js', + backstage: { role: 'backend-plugin' }, + }), + alpha: { + 'package.json': "invalid json content, 1, '", }, - }), + }, }, - }), + }, }, expectedPluginPackages: [], expectedLogs: { errors: [ { - message: `failed to load dynamic plugin manifest from '${path.resolve( - '/backstageRoot/dist-dynamic/test-backend-plugin/alpha', + message: `failed to load dynamic plugin manifest from '${mockDir.resolve( + 'backstageRoot/dist-dynamic/test-backend-plugin/alpha', )}'`, meta: { name: 'SyntaxError', @@ -597,28 +522,20 @@ Please add '${path.resolve( { name: 'invalid package.json', fileSystem: { - '/backstageRoot': mockFs.directory({ - items: { - 'dist-dynamic': mockFs.directory({ - items: { - 'test-backend-plugin': mockFs.directory({ - items: { - 'package.json': mockFs.file({ - content: "invalid json content, 1, '", - }), - }, - }), - }, - }), + backstageRoot: { + 'dist-dynamic': { + 'test-backend-plugin': { + 'package.json': "invalid json content, 1, '", + }, }, - }), + }, }, expectedPluginPackages: [], expectedLogs: { errors: [ { - message: `failed to load dynamic plugin manifest from '${path.resolve( - '/backstageRoot/dist-dynamic/test-backend-plugin', + message: `failed to load dynamic plugin manifest from '${mockDir.resolve( + 'backstageRoot/dist-dynamic/test-backend-plugin', )}'`, meta: { name: 'SyntaxError', @@ -631,32 +548,24 @@ Please add '${path.resolve( { name: 'missing backstage role in package.json', fileSystem: { - '/backstageRoot': mockFs.directory({ - items: { - 'dist-dynamic': mockFs.directory({ - items: { - 'test-backend-plugin': mockFs.directory({ - items: { - 'package.json': mockFs.file({ - content: JSON.stringify({ - name: 'test-backend-plugin-dynamic', - version: '0.0.0', - main: 'dist/index.cjs.js', - }), - }), - }, - }), - }, - }), + backstageRoot: { + 'dist-dynamic': { + 'test-backend-plugin': { + 'package.json': JSON.stringify({ + name: 'test-backend-plugin-dynamic', + version: '0.0.0', + main: 'dist/index.cjs.js', + }), + }, }, - }), + }, }, expectedPluginPackages: [], expectedLogs: { errors: [ { - message: `failed to load dynamic plugin manifest from '${path.resolve( - '/backstageRoot/dist-dynamic/test-backend-plugin', + message: `failed to load dynamic plugin manifest from '${mockDir.resolve( + 'backstageRoot/dist-dynamic/test-backend-plugin', )}'`, meta: { name: 'Error', @@ -669,32 +578,24 @@ Please add '${path.resolve( { name: 'missing main field in package.json', fileSystem: { - '/backstageRoot': mockFs.directory({ - items: { - 'dist-dynamic': mockFs.directory({ - items: { - 'test-backend-plugin': mockFs.directory({ - items: { - 'package.json': mockFs.file({ - content: JSON.stringify({ - name: 'test-backend-plugin-dynamic', - version: '0.0.0', - backstage: { role: 'backend-plugin' }, - }), - }), - }, - }), - }, - }), + backstageRoot: { + 'dist-dynamic': { + 'test-backend-plugin': { + 'package.json': JSON.stringify({ + name: 'test-backend-plugin-dynamic', + version: '0.0.0', + backstage: { role: 'backend-plugin' }, + }), + }, }, - }), + }, }, expectedPluginPackages: [], expectedLogs: { errors: [ { - message: `failed to load dynamic plugin manifest from '${path.resolve( - '/backstageRoot/dist-dynamic/test-backend-plugin', + message: `failed to load dynamic plugin manifest from '${mockDir.resolve( + 'backstageRoot/dist-dynamic/test-backend-plugin', )}'`, meta: { name: 'Error', @@ -706,7 +607,7 @@ Please add '${path.resolve( }, ])('$name', async (tc: TestCase): Promise => { const logger = new MockedLogger(); - const backstageRoot = '/backstageRoot'; + const backstageRoot = mockDir.resolve('backstageRoot'); async function toTest(): Promise { const pluginScanner = new PluginScanner( new ConfigReader( @@ -725,7 +626,7 @@ Please add '${path.resolve( return await pluginScanner.scanRoot(); } if (tc.fileSystem) { - mockFs(tc.fileSystem); + mockDir.setContent(tc.fileSystem); } if (tc.expectedError) { /* eslint-disable-next-line jest/no-conditional-expect */ diff --git a/packages/backend-tasks/CHANGELOG.md b/packages/backend-tasks/CHANGELOG.md index bd1284aaf5..2dfa563592 100644 --- a/packages/backend-tasks/CHANGELOG.md +++ b/packages/backend-tasks/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/backend-tasks +## 0.5.11-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + ## 0.5.10-next.1 ### Patch Changes diff --git a/packages/backend-tasks/package.json b/packages/backend-tasks/package.json index 9a42aab169..a1fe6497b2 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.10-next.1", + "version": "0.5.11-next.2", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend-tasks/src/tasks/TaskWorker.test.ts b/packages/backend-tasks/src/tasks/TaskWorker.test.ts index efad4e649b..45eb7d1003 100644 --- a/packages/backend-tasks/src/tasks/TaskWorker.test.ts +++ b/packages/backend-tasks/src/tasks/TaskWorker.test.ts @@ -371,7 +371,14 @@ describe('TaskWorker', () => { await worker.persistTask(settings3); const row3 = (await knex(DB_TASKS_TABLE))[0]; - expect(row3.next_run_start_at).toStrictEqual(row2.next_run_start_at); + // The new timestamp can basically be 0 or a minute depending on how the + // initialDelayDuration falls right on a cron boundary. This kinda + // contrived check removes a test flakiness based on wall clock time. + expect( + Math.abs( + +new Date(row3.next_run_start_at) - +new Date(row2.next_run_start_at), + ), + ).toBeLessThanOrEqual(60_000); await knex.destroy(); }, diff --git a/packages/backend-test-utils/CHANGELOG.md b/packages/backend-test-utils/CHANGELOG.md index 5bd1c6d498..c3b92ebf4f 100644 --- a/packages/backend-test-utils/CHANGELOG.md +++ b/packages/backend-test-utils/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/backend-test-utils +## 0.2.7-next.2 + +### Patch Changes + +- a250ad775f: Added `createMockDirectory()` to help out with file system mocking in tests. +- 74491c9602: Updated to import `HostDiscovery` from `@backstage/backend-app-api`. +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-auth-node@0.4.0-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-app-api@0.5.6-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + ## 0.2.6-next.1 ### Patch Changes diff --git a/packages/backend-test-utils/api-report.md b/packages/backend-test-utils/api-report.md index a477f70298..ac012e2f69 100644 --- a/packages/backend-test-utils/api-report.md +++ b/packages/backend-test-utils/api-report.md @@ -54,9 +54,24 @@ export interface MockDirectory { // @public export type MockDirectoryContent = { - [name in string]: MockDirectoryContent | string | Buffer; + [name in string]: + | MockDirectoryContent + | string + | Buffer + | MockDirectoryContentCallback; }; +// @public +export type MockDirectoryContentCallback = ( + ctx: MockDirectoryContentCallbackContext, +) => void; + +// @public +export interface MockDirectoryContentCallbackContext { + path: string; + symlink(target: string): void; +} + // @public export interface MockDirectoryContentOptions { path?: string; diff --git a/packages/backend-test-utils/package.json b/packages/backend-test-utils/package.json index 691f0a921b..edcb5b7414 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.6-next.1", + "version": "0.2.7-next.2", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend-test-utils/src/filesystem/MockDirectory.test.ts b/packages/backend-test-utils/src/filesystem/MockDirectory.test.ts index 9e3efdaec0..fd22f09432 100644 --- a/packages/backend-test-utils/src/filesystem/MockDirectory.test.ts +++ b/packages/backend-test-utils/src/filesystem/MockDirectory.test.ts @@ -91,7 +91,7 @@ describe('createMockDirectory', () => { mockDir.addContent({ 'b.txt': 'b', - b: { + [mockDir.resolve('b')]: { 'c.txt': 'c', }, }); @@ -119,6 +119,20 @@ describe('createMockDirectory', () => { }); }); + it('should be able to use callback for more detailed file system operations', () => { + mockDir.setContent({ + 'a.txt': 'a', + 'b.txt': ctx => ctx.symlink('./a.txt'), + 'c.txt': ctx => fs.copyFileSync(mockDir.resolve('a.txt'), ctx.path), + }); + + expect(mockDir.content()).toEqual({ + 'a.txt': 'a', + 'b.txt': 'a', + 'c.txt': 'a', + }); + }); + it('should read content from sub dirs', () => { mockDir.setContent({ 'a.txt': 'a', diff --git a/packages/backend-test-utils/src/filesystem/MockDirectory.ts b/packages/backend-test-utils/src/filesystem/MockDirectory.ts index 20345e4ff9..b066b9acd5 100644 --- a/packages/backend-test-utils/src/filesystem/MockDirectory.ts +++ b/packages/backend-test-utils/src/filesystem/MockDirectory.ts @@ -30,6 +30,28 @@ import { const tmpdirMarker = Symbol('os-tmpdir-mock'); +/** + * A context that allows for more advanced file system operations when writing mock directory content. + * + * @public + */ +export interface MockDirectoryContentCallbackContext { + /** Absolute path to the location of this piece of content on the filesystem */ + path: string; + + /** Creates a symbolic link at the current location */ + symlink(target: string): void; +} + +/** + * A callback that allows for more advanced file system operations when writing mock directory content. + * + * @public + */ +export type MockDirectoryContentCallback = ( + ctx: MockDirectoryContentCallbackContext, +) => void; + /** * The content of a mock directory represented by a nested object structure. * @@ -54,7 +76,11 @@ const tmpdirMarker = Symbol('os-tmpdir-mock'); * @public */ export type MockDirectoryContent = { - [name in string]: MockDirectoryContent | string | Buffer; + [name in string]: + | MockDirectoryContent + | string + | Buffer + | MockDirectoryContentCallback; }; /** @@ -178,6 +204,11 @@ type MockEntry = | { type: 'dir'; path: string; + } + | { + type: 'callback'; + path: string; + callback: MockDirectoryContentCallback; }; /** @internal */ @@ -214,10 +245,18 @@ class MockDirectoryImpl { } if (entry.type === 'dir') { - fs.ensureDirSync(fullPath, { mode: 0o777 }); + fs.ensureDirSync(fullPath); } else if (entry.type === 'file') { - fs.ensureDirSync(dirname(fullPath), { mode: 0o777 }); - fs.writeFileSync(fullPath, entry.content, { mode: 0o666 }); + fs.ensureDirSync(dirname(fullPath)); + fs.writeFileSync(fullPath, entry.content); + } else if (entry.type === 'callback') { + fs.ensureDirSync(dirname(fullPath)); + entry.callback({ + path: fullPath, + symlink(target: string) { + fs.symlinkSync(target, fullPath); + }, + }); } } } @@ -279,19 +318,20 @@ class MockDirectoryImpl { const entries: MockEntry[] = []; function traverse(node: MockDirectoryContent[string], path: string) { - const trimmedPath = path.startsWith('/') ? path.slice(1) : path; // trim leading slash if (typeof node === 'string') { entries.push({ type: 'file', - path: trimmedPath, + path, content: Buffer.from(node, 'utf8'), }); } else if (node instanceof Buffer) { - entries.push({ type: 'file', path: trimmedPath, content: node }); + entries.push({ type: 'file', path, content: node }); + } else if (typeof node === 'function') { + entries.push({ type: 'callback', path, callback: node }); } else { - entries.push({ type: 'dir', path: trimmedPath }); + entries.push({ type: 'dir', path }); for (const [name, child] of Object.entries(node)) { - traverse(child, `${trimmedPath}/${name}`); + traverse(child, path ? `${path}/${name}` : name); } } } diff --git a/packages/backend-test-utils/src/filesystem/index.ts b/packages/backend-test-utils/src/filesystem/index.ts index 0a4d8c7d00..e18b0b55b8 100644 --- a/packages/backend-test-utils/src/filesystem/index.ts +++ b/packages/backend-test-utils/src/filesystem/index.ts @@ -20,4 +20,6 @@ export { type MockDirectoryOptions, type MockDirectoryContent, type MockDirectoryContentOptions, + type MockDirectoryContentCallback, + type MockDirectoryContentCallbackContext, } from './MockDirectory'; diff --git a/packages/backend/CHANGELOG.md b/packages/backend/CHANGELOG.md index 07105a0417..088f05cfd1 100644 --- a/packages/backend/CHANGELOG.md +++ b/packages/backend/CHANGELOG.md @@ -1,5 +1,64 @@ # example-backend +## 0.2.88-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-nomad-backend@0.1.8-next.2 + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-scaffolder-backend@1.18.0-next.2 + - @backstage/plugin-techdocs-backend@1.8.0-next.2 + - @backstage/plugin-auth-node@0.4.0-next.2 + - @backstage/plugin-catalog-backend@1.14.0-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/integration@1.7.1-next.1 + - @backstage/plugin-kubernetes-backend@0.12.3-next.2 + - @backstage/plugin-jenkins-backend@0.2.9-next.2 + - @backstage/plugin-auth-backend@0.19.3-next.2 + - @backstage/backend-tasks@0.5.11-next.2 + - @backstage/plugin-adr-backend@0.4.3-next.2 + - @backstage/plugin-app-backend@0.3.54-next.2 + - @backstage/plugin-azure-devops-backend@0.4.3-next.2 + - @backstage/plugin-azure-sites-backend@0.1.16-next.2 + - @backstage/plugin-badges-backend@0.3.3-next.2 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.3-next.2 + - @backstage/plugin-catalog-node@1.4.7-next.2 + - @backstage/plugin-code-coverage-backend@0.2.20-next.2 + - @backstage/plugin-devtools-backend@0.2.3-next.2 + - @backstage/plugin-entity-feedback-backend@0.2.3-next.2 + - @backstage/plugin-events-backend@0.2.15-next.2 + - @backstage/plugin-explore-backend@0.0.16-next.2 + - @backstage/plugin-graphql-backend@0.1.44-next.2 + - @backstage/plugin-kafka-backend@0.3.3-next.2 + - @backstage/plugin-lighthouse-backend@0.3.3-next.2 + - @backstage/plugin-linguist-backend@0.5.3-next.2 + - @backstage/plugin-permission-backend@0.5.29-next.2 + - @backstage/plugin-permission-node@0.7.17-next.2 + - @backstage/plugin-playlist-backend@0.3.10-next.2 + - @backstage/plugin-proxy-backend@0.4.3-next.2 + - @backstage/plugin-rollbar-backend@0.1.51-next.2 + - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.7-next.2 + - @backstage/plugin-scaffolder-backend-module-rails@0.4.23-next.2 + - @backstage/plugin-search-backend@1.4.6-next.2 + - @backstage/plugin-search-backend-module-catalog@0.1.10-next.2 + - @backstage/plugin-search-backend-module-elasticsearch@1.3.9-next.2 + - @backstage/plugin-search-backend-module-explore@0.1.10-next.2 + - @backstage/plugin-search-backend-module-pg@0.5.15-next.2 + - @backstage/plugin-search-backend-module-techdocs@0.1.10-next.2 + - @backstage/plugin-search-backend-node@1.2.10-next.2 + - @backstage/plugin-tech-insights-backend@0.5.20-next.2 + - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.38-next.2 + - @backstage/plugin-tech-insights-node@0.4.12-next.2 + - @backstage/plugin-todo-backend@0.3.4-next.2 + - example-app@0.2.88-next.2 + - @backstage/catalog-client@1.4.5-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-catalog-backend-module-unprocessed@0.3.3-next.2 + - @backstage/plugin-events-node@0.2.15-next.2 + - @backstage/plugin-permission-common@0.7.9-next.0 + - @backstage/plugin-search-common@1.2.7-next.0 + ## 0.2.88-next.1 ### Patch Changes diff --git a/packages/backend/package.json b/packages/backend/package.json index 8519a5ed71..71670273e1 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -1,6 +1,6 @@ { "name": "example-backend", - "version": "0.2.88-next.1", + "version": "0.2.88-next.2", "main": "dist/index.cjs.js", "types": "src/index.ts", "license": "Apache-2.0", @@ -81,7 +81,7 @@ "@gitbeaker/node": "^35.1.0", "@octokit/rest": "^19.0.3", "@opentelemetry/api": "^1.4.1", - "@opentelemetry/exporter-prometheus": "^0.39.1", + "@opentelemetry/exporter-prometheus": "^0.43.0", "@opentelemetry/sdk-metrics": "^1.13.0", "azure-devops-node-api": "^11.0.1", "better-sqlite3": "^8.0.0", diff --git a/packages/catalog-client/CHANGELOG.md b/packages/catalog-client/CHANGELOG.md index 06231c6c7a..71593b5a33 100644 --- a/packages/catalog-client/CHANGELOG.md +++ b/packages/catalog-client/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/catalog-client +## 1.4.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/errors@1.2.3-next.0 + ## 1.4.4 ### Patch Changes diff --git a/packages/catalog-client/package.json b/packages/catalog-client/package.json index b7fcdb549e..2be748fbce 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.4", + "version": "1.4.5-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/packages/catalog-model/CHANGELOG.md b/packages/catalog-model/CHANGELOG.md index 3972ea9761..a6b3715d28 100644 --- a/packages/catalog-model/CHANGELOG.md +++ b/packages/catalog-model/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/catalog-model +## 1.4.3-next.0 + +### Patch Changes + +- 0b55f773a7: Removed some unused dependencies +- Updated dependencies + - @backstage/errors@1.2.3-next.0 + - @backstage/types@1.1.1 + ## 1.4.2 ### Patch Changes diff --git a/packages/catalog-model/package.json b/packages/catalog-model/package.json index cb6dbb6f31..58097decec 100644 --- a/packages/catalog-model/package.json +++ b/packages/catalog-model/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/catalog-model", "description": "Types and validators that help describe the model of a Backstage Catalog", - "version": "1.4.2", + "version": "1.4.3-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -45,13 +45,10 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/config": "workspace:^", "@backstage/errors": "workspace:^", "@backstage/types": "workspace:^", "ajv": "^8.10.0", - "json-schema": "^0.4.0", - "lodash": "^4.17.21", - "uuid": "^8.0.0" + "lodash": "^4.17.21" }, "devDependencies": { "@backstage/cli": "workspace:^", diff --git a/packages/cli-node/CHANGELOG.md b/packages/cli-node/CHANGELOG.md index ab16a5d036..2d896f3e7b 100644 --- a/packages/cli-node/CHANGELOG.md +++ b/packages/cli-node/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/cli-node +## 0.1.5-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.3-next.0 + - @backstage/cli-common@0.1.13-next.0 + - @backstage/types@1.1.1 + ## 0.1.5-next.0 ### Patch Changes diff --git a/packages/cli-node/package.json b/packages/cli-node/package.json index a1062c2783..1190d134f5 100644 --- a/packages/cli-node/package.json +++ b/packages/cli-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/cli-node", "description": "Node.js library for Backstage CLIs", - "version": "0.1.5-next.0", + "version": "0.1.5-next.1", "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 d9d7c426e3..da412a58a1 100644 --- a/packages/cli/CHANGELOG.md +++ b/packages/cli/CHANGELOG.md @@ -1,5 +1,45 @@ # @backstage/cli +## 0.23.0-next.2 + +### Minor Changes + +- 8defbd5434: Update typescript-eslint to 6.7.x, adding compatibility with TypeScript 5.2. + + This includes a major update on typescript-eslint, you can see the details in the [release notes](https://typescript-eslint.io/blog/announcing-typescript-eslint-v6/). + +### Patch Changes + +- 2ef6522552: Support for the `.icon.svg` extension has been deprecated and will be removed in the future. The implementation of this extension is too tied to a particular version of MUI and the SVGO, and it makes it harder to evolve the build system. We may introduce the ability to reintroduce this kind of functionality in the future through configuration for use in internal plugins, but for now we're forced to remove it. + + To migrate existing code, rename the `.icon.svg` file to `.tsx` and replace the `` element with `` from MUI and add necessary imports. For example: + + ```tsx + import React from 'react'; + import SvgIcon from '@material-ui/core/SvgIcon'; + import { IconComponent } from '@backstage/core-plugin-api'; + + export const CodeSceneIcon = (props: SvgIconProps) => ( + + + + + + ); + ``` + +- Updated dependencies + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/config-loader@1.5.1-next.1 + - @backstage/integration@1.7.1-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/cli-common@0.1.13-next.0 + - @backstage/cli-node@0.1.5-next.1 + - @backstage/config@1.1.1-next.0 + - @backstage/eslint-plugin@0.1.3 + - @backstage/release-manifests@0.0.10 + - @backstage/types@1.1.1 + ## 0.23.0-next.1 ### Patch Changes diff --git a/packages/cli/asset-types/asset-types.d.ts b/packages/cli/asset-types/asset-types.d.ts index a1c053dc54..2d288fd0e3 100644 --- a/packages/cli/asset-types/asset-types.d.ts +++ b/packages/cli/asset-types/asset-types.d.ts @@ -60,10 +60,40 @@ declare module '*.yaml' { export default src; } +/** + * @deprecated support for .icon.svg extensions are being removed, inline the SVG elements in a MUI SvgIcon instead. + * @example + * ```tsx + * import SvgIcon from '@material-ui/core/SvgIcon'; + * + * const MyIcon = () => ( + * + * + * + * + * + * ) + * ``` + */ declare module '*.icon.svg' { import { ComponentType } from 'react'; import { SvgIconProps } from '@material-ui/core'; + /** + * @deprecated support for .icon.svg extensions are being removed, inline the SVG elements in a MUI SvgIcon instead. + * @example + * ```tsx + * import SvgIcon from '@material-ui/core/SvgIcon'; + * + * const MyIcon = () => ( + * + * + * + * + * + * ) + * ``` + */ const Icon: ComponentType; export default Icon; } diff --git a/packages/cli/package.json b/packages/cli/package.json index ee1eb52a2c..36aee311f7 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.23.0-next.1", + "version": "0.23.0-next.2", "publishConfig": { "access": "public" }, @@ -66,8 +66,8 @@ "@swc/jest": "^0.2.22", "@types/jest": "^29.0.0", "@types/webpack-env": "^1.15.2", - "@typescript-eslint/eslint-plugin": "^5.9.0", - "@typescript-eslint/parser": "^5.9.0", + "@typescript-eslint/eslint-plugin": "6.7.2", + "@typescript-eslint/parser": "^6.7.2", "@yarnpkg/lockfile": "^1.1.0", "@yarnpkg/parsers": "^3.0.0-rc.4", "bfj": "^7.0.2", diff --git a/packages/cli/src/lib/builder/plugins.ts b/packages/cli/src/lib/builder/plugins.ts index e68758c1c8..1c1dd1b1e2 100644 --- a/packages/cli/src/lib/builder/plugins.ts +++ b/packages/cli/src/lib/builder/plugins.ts @@ -37,7 +37,7 @@ type ForwardFileImportsOptions = { * path `dist/MyComponent/my-image.png`. The import itself will stay, but be resolved, * resulting in something like `import ImageUrl from './MyComponent/my-image.png'` */ -export function forwardFileImports(options: ForwardFileImportsOptions): Plugin { +export function forwardFileImports(options: ForwardFileImportsOptions) { const filter = createFilter(options.include, options.exclude); // We collect the absolute paths to all files we want to bundle into the @@ -131,5 +131,5 @@ export function forwardFileImports(options: ForwardFileImportsOptions): Plugin { return { ...inputOptions, external }; }, - }; + } satisfies Plugin; } diff --git a/packages/cli/src/lib/svgrTemplate.ts b/packages/cli/src/lib/svgrTemplate.ts index b583004f81..5407dc4c62 100644 --- a/packages/cli/src/lib/svgrTemplate.ts +++ b/packages/cli/src/lib/svgrTemplate.ts @@ -34,6 +34,8 @@ export function svgrTemplate( ${imports} import SvgIcon from '@material-ui/core/SvgIcon'; +console.log('DEPRECATION WARNING: The .icon.svg extension is deprecated, inline the SVG elements in a MUI SvgIcon instead.', Object.assign(new Error(), {name: 'Warning'}).stack); + ${interfaces} const ${name} = (${props}) => React.createElement(SvgIcon, ${props}, ${jsx.children}); diff --git a/packages/config-loader/CHANGELOG.md b/packages/config-loader/CHANGELOG.md index 1ee39cb9c6..8e25cf28fa 100644 --- a/packages/config-loader/CHANGELOG.md +++ b/packages/config-loader/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/config-loader +## 1.5.1-next.1 + +### Patch Changes + +- 0b55f773a7: Removed some unused dependencies +- 30c553c1d2: Updated dependency `typescript-json-schema` to `^0.61.0`. +- a4617c422a: Added `watch` option to configuration loaders that can be used to disable file watching by setting it to `false`. +- Updated dependencies + - @backstage/errors@1.2.3-next.0 + - @backstage/cli-common@0.1.13-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + ## 1.5.1-next.0 ### Patch Changes diff --git a/packages/config-loader/api-report.md b/packages/config-loader/api-report.md index 8cd469d4d7..9f55a27bf7 100644 --- a/packages/config-loader/api-report.md +++ b/packages/config-loader/api-report.md @@ -27,6 +27,8 @@ export interface BaseConfigSourcesOptions { rootDir?: string; // (undocumented) substitutionFunc?: EnvFunc; + // (undocumented) + watch?: boolean; } // @public @@ -142,6 +144,7 @@ export class FileConfigSource implements ConfigSource { export interface FileConfigSourceOptions { path: string; substitutionFunc?: EnvFunc; + watch?: boolean; } // @public @deprecated diff --git a/packages/config-loader/package.json b/packages/config-loader/package.json index fb17d00378..3ddd84fdb5 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.1-next.0", + "version": "1.5.1-next.1", "publishConfig": { "access": "public", "main": "dist/index.cjs.js", @@ -47,17 +47,14 @@ "lodash": "^4.17.21", "minimist": "^1.2.5", "node-fetch": "^2.6.7", - "typescript-json-schema": "^0.55.0", - "yaml": "^2.0.0", - "yup": "^0.32.9" + "typescript-json-schema": "^0.61.0", + "yaml": "^2.0.0" }, "devDependencies": { "@backstage/backend-test-utils": "workspace:^", "@backstage/cli": "workspace:^", "@types/json-schema-merge-allof": "^0.6.0", "@types/mock-fs": "^4.10.0", - "@types/yup": "^0.29.13", - "mock-fs": "^5.2.0", "msw": "^1.0.0", "zen-observable": "^0.10.0" }, diff --git a/packages/config-loader/src/loader.test.ts b/packages/config-loader/src/loader.test.ts index 9554e8767e..a8299962b7 100644 --- a/packages/config-loader/src/loader.test.ts +++ b/packages/config-loader/src/loader.test.ts @@ -16,15 +16,62 @@ import { AppConfig } from '@backstage/config'; import { loadConfig } from './loader'; -import mockFs from 'mock-fs'; import fs from 'fs-extra'; import { rest } from 'msw'; import { setupServer } from 'msw/node'; -import { resolve as resolvePath, sep } from 'path'; - -const root = resolvePath('/'); +import { createMockDirectory } from '@backstage/backend-test-utils'; describe('loadConfig', () => { + const mockDir = createMockDirectory({ + content: { + 'app-config.yaml': ` + app: + title: Example App + sessionKey: + $file: secrets/session-key.txt + escaped: \$\${Escaped} + `, + 'app-config2.yaml': ` + app: + title: Example App 2 + sessionKey: + $file: secrets/session-key.txt + escaped: \$\${Escaped} + `, + 'app-config.development.yaml': ` + app: + sessionKey: development-key + backend: + $include: ./included.yaml + other: + $include: secrets/included.yaml + `, + 'secrets/session-key.txt': 'abc123', + 'secrets/included.yaml': ` + secret: + $file: session-key.txt + `, + 'included.yaml': ` + foo: + bar: token \${MY_SECRET} + `, + 'app-config.substitute.yaml': ` + app: + someConfig: + $include: \${SUBSTITUTE_ME}.yaml + noSubstitute: + $file: \$\${ESCAPE_ME}.txt + `, + 'substituted.yaml': ` + secret: + $file: secrets/\${SUBSTITUTE_ME}.txt + `, + 'secrets/substituted.txt': '123abc', + '${ESCAPE_ME}.txt': 'notSubstituted', + 'empty.yaml': '# just a comment', + }, + }); + const server = setupServer(); const initialLoaderHandler = rest.get( `https://some.domain.io/app-config.yaml`, @@ -61,58 +108,9 @@ describe('loadConfig', () => { beforeEach(() => { process.env.MY_SECRET = 'is-secret'; process.env.SUBSTITUTE_ME = 'substituted'; - - mockFs({ - '/root/app-config.yaml': ` - app: - title: Example App - sessionKey: - $file: secrets/session-key.txt - escaped: \$\${Escaped} - `, - '/root/app-config2.yaml': ` - app: - title: Example App 2 - sessionKey: - $file: secrets/session-key.txt - escaped: \$\${Escaped} - `, - '/root/app-config.development.yaml': ` - app: - sessionKey: development-key - backend: - $include: ./included.yaml - other: - $include: secrets/included.yaml - `, - '/root/secrets/session-key.txt': 'abc123', - '/root/secrets/included.yaml': ` - secret: - $file: session-key.txt - `, - '/root/included.yaml': ` - foo: - bar: token \${MY_SECRET} - `, - '/root/app-config.substitute.yaml': ` - app: - someConfig: - $include: \${SUBSTITUTE_ME}.yaml - noSubstitute: - $file: \$\${ESCAPE_ME}.txt - `, - '/root/substituted.yaml': ` - secret: - $file: secrets/\${SUBSTITUTE_ME}.txt - `, - '/root/secrets/substituted.txt': '123abc', - '/root/${ESCAPE_ME}.txt': 'notSubstituted', - '/root/empty.yaml': '# just a comment', - }); }); afterEach(() => { - mockFs.restore(); server.resetHandlers(); }); @@ -121,7 +119,7 @@ describe('loadConfig', () => { it('load config from default path', async () => { await expect( loadConfig({ - configRoot: '/root', + configRoot: mockDir.path, configTargets: [], }), ).resolves.toEqual({ @@ -135,7 +133,7 @@ describe('loadConfig', () => { escaped: '${Escaped}', }, }, - path: `${root}root${sep}app-config.yaml`, + path: mockDir.resolve('app-config.yaml'), }, ], }); @@ -148,7 +146,7 @@ describe('loadConfig', () => { await expect( loadConfig({ - configRoot: '/root', + configRoot: mockDir.path, configTargets: [{ url: configUrl }], remote: { reloadIntervalSeconds: 30, @@ -173,10 +171,10 @@ describe('loadConfig', () => { it('loads config with secrets from two different files', async () => { await expect( loadConfig({ - configRoot: '/root', + configRoot: mockDir.path, configTargets: [ - { path: '/root/app-config.yaml' }, - { path: '/root/app-config2.yaml' }, + { path: mockDir.resolve('app-config.yaml') }, + { path: mockDir.resolve('app-config2.yaml') }, ], }), ).resolves.toEqual({ @@ -190,7 +188,7 @@ describe('loadConfig', () => { escaped: '${Escaped}', }, }, - path: '/root/app-config.yaml', + path: mockDir.resolve('app-config.yaml'), }, { context: 'app-config2.yaml', @@ -201,7 +199,7 @@ describe('loadConfig', () => { escaped: '${Escaped}', }, }, - path: '/root/app-config2.yaml', + path: mockDir.resolve('app-config2.yaml'), }, ], }); @@ -210,8 +208,8 @@ describe('loadConfig', () => { it('loads config with secrets from single file', async () => { await expect( loadConfig({ - configRoot: '/root', - configTargets: [{ path: '/root/app-config.yaml' }], + configRoot: mockDir.path, + configTargets: [{ path: mockDir.resolve('app-config.yaml') }], }), ).resolves.toEqual({ appConfigs: [ @@ -224,7 +222,7 @@ describe('loadConfig', () => { escaped: '${Escaped}', }, }, - path: '/root/app-config.yaml', + path: mockDir.resolve('app-config.yaml'), }, ], }); @@ -233,10 +231,10 @@ describe('loadConfig', () => { it('loads development config with secrets', async () => { await expect( loadConfig({ - configRoot: '/root', + configRoot: mockDir.path, configTargets: [ - { path: '/root/app-config.yaml' }, - { path: '/root/app-config.development.yaml' }, + { path: mockDir.resolve('app-config.yaml') }, + { path: mockDir.resolve('app-config.development.yaml') }, ], }), ).resolves.toEqual({ @@ -250,7 +248,7 @@ describe('loadConfig', () => { escaped: '${Escaped}', }, }, - path: '/root/app-config.yaml', + path: mockDir.resolve('app-config.yaml'), }, { context: 'app-config.development.yaml', @@ -267,7 +265,7 @@ describe('loadConfig', () => { secret: 'abc123', }, }, - path: '/root/app-config.development.yaml', + path: mockDir.resolve('app-config.development.yaml'), }, ], }); @@ -276,8 +274,10 @@ describe('loadConfig', () => { it('loads deep substituted config', async () => { await expect( loadConfig({ - configRoot: '/root', - configTargets: [{ path: '/root/app-config.substitute.yaml' }], + configRoot: mockDir.path, + configTargets: [ + { path: mockDir.resolve('app-config.substitute.yaml') }, + ], }), ).resolves.toEqual({ appConfigs: [ @@ -291,7 +291,7 @@ describe('loadConfig', () => { noSubstitute: 'notSubstituted', }, }, - path: '/root/app-config.substitute.yaml', + path: mockDir.resolve('app-config.substitute.yaml'), }, ], }); @@ -303,7 +303,7 @@ describe('loadConfig', () => { await expect( loadConfig({ - configRoot: '/root', + configRoot: mockDir.path, configTargets: [], watch: { onChange: onChange.resolve, @@ -321,12 +321,12 @@ describe('loadConfig', () => { escaped: '${Escaped}', }, }, - path: `${root}root${sep}app-config.yaml`, + path: mockDir.resolve('app-config.yaml'), }, ], }); - await fs.writeJson('/root/app-config.yaml', { + await fs.writeJson(mockDir.resolve('app-config.yaml'), { app: { title: 'New Title', }, @@ -339,7 +339,7 @@ describe('loadConfig', () => { title: 'New Title', }, }, - path: `${root}root${sep}app-config.yaml`, + path: mockDir.resolve('app-config.yaml'), }, ]); @@ -352,8 +352,10 @@ describe('loadConfig', () => { await expect( loadConfig({ - configRoot: '/root', - configTargets: [{ path: '/root/app-config.development.yaml' }], + configRoot: mockDir.path, + configTargets: [ + { path: mockDir.resolve('app-config.development.yaml') }, + ], watch: { onChange: onChange.resolve, stopSignal: stopSignal.promise, @@ -376,14 +378,14 @@ describe('loadConfig', () => { secret: 'abc123', }, }, - path: '/root/app-config.development.yaml', + path: mockDir.resolve('app-config.development.yaml'), }, ], }); // session-key is indirectly included in app-config.development.yaml // via included.yaml - await fs.writeFile('/root/secrets/session-key.txt', 'abc234'); + await fs.writeFile(mockDir.resolve('secrets/session-key.txt'), 'abc234'); await expect(onChange.promise).resolves.toEqual([ { @@ -401,7 +403,7 @@ describe('loadConfig', () => { secret: 'abc234', }, }, - path: '/root/app-config.development.yaml', + path: mockDir.resolve('app-config.development.yaml'), }, ]); @@ -417,7 +419,7 @@ describe('loadConfig', () => { const configUrl = 'https://some.domain.io/app-config.yaml'; await expect( loadConfig({ - configRoot: '/root', + configRoot: mockDir.path, configTargets: [{ url: configUrl }], watch: { onChange: onChange.resolve, @@ -464,7 +466,7 @@ describe('loadConfig', () => { const stopSignal = defer(); await loadConfig({ - configRoot: '/root', + configRoot: mockDir.path, configTargets: [], watch: { onChange: () => { @@ -476,7 +478,7 @@ describe('loadConfig', () => { stopSignal.resolve(); - await fs.writeJson('/root/app-config.yaml', { + await fs.writeJson(mockDir.resolve('app-config.yaml'), { app: { title: 'New Title', }, @@ -487,8 +489,8 @@ describe('loadConfig', () => { it('handles empty files gracefully', async () => { await expect( loadConfig({ - configRoot: '/root', - configTargets: [{ path: '/root/empty.yaml' }], + configRoot: mockDir.path, + configTargets: [{ path: mockDir.resolve('empty.yaml') }], }), ).resolves.toEqual({ appConfigs: [], diff --git a/packages/config-loader/src/loader.ts b/packages/config-loader/src/loader.ts index 8b6fd2a953..55cf123f11 100644 --- a/packages/config-loader/src/loader.ts +++ b/packages/config-loader/src/loader.ts @@ -107,6 +107,7 @@ export async function loadConfig( remote: options.remote && { reloadInterval: { seconds: options.remote.reloadIntervalSeconds }, }, + watch: Boolean(options.watch), rootDir: options.configRoot, argv: options.configTargets.flatMap(t => [ '--config', diff --git a/packages/config-loader/src/schema/collect.test.ts b/packages/config-loader/src/schema/collect.test.ts index 2754f788dd..f513253619 100644 --- a/packages/config-loader/src/schema/collect.test.ts +++ b/packages/config-loader/src/schema/collect.test.ts @@ -14,10 +14,16 @@ * limitations under the License. */ -import mockFs from 'mock-fs'; +import { createMockDirectory } from '@backstage/backend-test-utils'; import { collectConfigSchemas } from './collect'; import path from 'path'; +// cwd must be restored +const origDir = process.cwd(); +afterAll(() => { + process.chdir(origDir); +}); + const mockSchema = { type: 'object', properties: { @@ -28,25 +34,15 @@ const mockSchema = { }, }; -// Gotta make sure this is in the compiler cache before we start mocking the filesystem -require('typescript-json-schema'); - -// We need to load in actual TS libraries when using mock-fs. -// This lookup is to allow the `typescript` dependency to exist either -// at top level or inside node_modules of typescript-json-schema -const typescriptModuleDir = path.dirname( - require.resolve('typescript/package.json', { - paths: [require.resolve('typescript-json-schema')], - }), -); - describe('collectConfigSchemas', () => { + const mockDir = createMockDirectory(); + afterEach(() => { - mockFs.restore(); + mockDir.clear(); }); it('should not find any schemas without packages', async () => { - mockFs({ + mockDir.setContent({ 'lerna.json': JSON.stringify({ packages: ['packages/*'], }), @@ -56,7 +52,7 @@ describe('collectConfigSchemas', () => { }); it('should find schema in a local package', async () => { - mockFs({ + mockDir.setContent({ node_modules: { a: { 'package.json': JSON.stringify({ @@ -66,6 +62,7 @@ describe('collectConfigSchemas', () => { }, }, }); + process.chdir(mockDir.path); await expect(collectConfigSchemas(['a'], [])).resolves.toEqual([ { @@ -76,7 +73,7 @@ describe('collectConfigSchemas', () => { }); it('should find schema at explicit package path', async () => { - mockFs({ + mockDir.setContent({ root: { 'package.json': JSON.stringify({ name: 'root', @@ -84,6 +81,7 @@ describe('collectConfigSchemas', () => { }), }, }); + process.chdir(mockDir.path); await expect( collectConfigSchemas([], [path.join('root', 'package.json')]), @@ -96,7 +94,7 @@ describe('collectConfigSchemas', () => { }); it('should find schema in transitive dependencies and explicit path', async () => { - mockFs({ + mockDir.setContent({ root: { 'package.json': JSON.stringify({ name: 'root', @@ -152,6 +150,7 @@ describe('collectConfigSchemas', () => { }, }, }); + process.chdir(mockDir.path); await expect( collectConfigSchemas(['a'], [path.join('root', 'package.json')]), @@ -178,7 +177,7 @@ describe('collectConfigSchemas', () => { }); it('should schema of different types', async () => { - mockFs({ + mockDir.setContent({ node_modules: { a: { 'package.json': JSON.stringify({ @@ -198,15 +197,16 @@ describe('collectConfigSchemas', () => { name: 'c', configSchema: 'schema.d.ts', }), - 'schema.d.ts': `export interface Config { + 'schema.d.ts': ` + export interface Config { /** @visibility secret */ tsKey: string - }`, + } + `, }, }, - // TypeScript compilation needs to load some real files inside the typescript dir - [typescriptModuleDir]: (mockFs as any).load(typescriptModuleDir), }); + process.chdir(mockDir.path); await expect(collectConfigSchemas(['a', 'b', 'c'], [])).resolves.toEqual([ { @@ -235,7 +235,7 @@ describe('collectConfigSchemas', () => { }); it('should load schema from different package versions', async () => { - mockFs({ + mockDir.setContent({ node_modules: { a: { 'package.json': JSON.stringify({ @@ -275,6 +275,7 @@ describe('collectConfigSchemas', () => { }, }, }); + process.chdir(mockDir.path); await expect(collectConfigSchemas(['a'], [])).resolves.toEqual([ { @@ -303,7 +304,7 @@ describe('collectConfigSchemas', () => { }); it('should not allow unknown schema file types', async () => { - mockFs({ + mockDir.setContent({ node_modules: { a: { 'package.json': JSON.stringify({ @@ -314,6 +315,7 @@ describe('collectConfigSchemas', () => { }, }, }); + process.chdir(mockDir.path); await expect(collectConfigSchemas(['a'], [])).rejects.toThrow( 'Config schema files must be .json or .d.ts, got schema.yaml', @@ -321,7 +323,7 @@ describe('collectConfigSchemas', () => { }); it('should reject typescript config declaration without a Config type', async () => { - mockFs({ + mockDir.setContent({ node_modules: { a: { 'package.json': JSON.stringify({ @@ -331,9 +333,8 @@ describe('collectConfigSchemas', () => { 'schema.d.ts': `export interface NotConfig {}`, }, }, - // TypeScript compilation needs to load some real files inside the typescript dir - [typescriptModuleDir]: (mockFs as any).load(typescriptModuleDir), }); + process.chdir(mockDir.path); await expect(collectConfigSchemas(['a'], [])).rejects.toThrow( `Invalid schema in ${path.join( diff --git a/packages/config-loader/src/schema/load.test.ts b/packages/config-loader/src/schema/load.test.ts index d84bb3871b..525565f3d5 100644 --- a/packages/config-loader/src/schema/load.test.ts +++ b/packages/config-loader/src/schema/load.test.ts @@ -14,16 +14,24 @@ * limitations under the License. */ -import mockFs from 'mock-fs'; +import { createMockDirectory } from '@backstage/backend-test-utils'; import { loadConfigSchema } from './load'; +// cwd must be restored +const origDir = process.cwd(); +afterAll(() => { + process.chdir(origDir); +}); + describe('loadConfigSchema', () => { + const mockDir = createMockDirectory(); + afterEach(() => { - mockFs.restore(); + mockDir.clear(); }); it('should load schema from packages or data', async () => { - mockFs({ + mockDir.setContent({ node_modules: { a: { 'package.json': JSON.stringify({ @@ -53,6 +61,7 @@ describe('loadConfigSchema', () => { }, }, }); + process.chdir(mockDir.path); const schema = await loadConfigSchema({ dependencies: ['a'], @@ -119,7 +128,7 @@ describe('loadConfigSchema', () => { describe('should consider schema', () => { it('when filtering simple config', async () => { - mockFs({ + mockDir.setContent({ 'package.json': JSON.stringify({ name: 'a', configSchema: { @@ -131,6 +140,7 @@ describe('loadConfigSchema', () => { }, }), }); + process.chdir(mockDir.path); const schema = await loadConfigSchema({ packagePaths: ['package.json'], @@ -156,7 +166,7 @@ describe('loadConfigSchema', () => { }); it('when filtering nested config', async () => { - mockFs({ + mockDir.setContent({ 'package.json': JSON.stringify({ name: 'a', configSchema: { @@ -185,6 +195,7 @@ describe('loadConfigSchema', () => { }, }), }); + process.chdir(mockDir.path); const schema = await loadConfigSchema({ packagePaths: ['package.json'], @@ -244,7 +255,7 @@ describe('loadConfigSchema', () => { }); it('when filtering config with required values', async () => { - mockFs({ + mockDir.setContent({ 'package.json': JSON.stringify({ name: 'a', configSchema: { @@ -261,6 +272,7 @@ describe('loadConfigSchema', () => { }, }), }); + process.chdir(mockDir.path); const schema = await loadConfigSchema({ packagePaths: ['package.json'], diff --git a/packages/config-loader/src/sources/ConfigSources.ts b/packages/config-loader/src/sources/ConfigSources.ts index d60e9d53e9..43123f87ea 100644 --- a/packages/config-loader/src/sources/ConfigSources.ts +++ b/packages/config-loader/src/sources/ConfigSources.ts @@ -71,6 +71,7 @@ export interface ClosableConfig extends Config { * @public */ export interface BaseConfigSourcesOptions { + watch?: boolean; rootDir?: string; remote?: Pick; substitutionFunc?: SubstitutionFunc; @@ -159,6 +160,7 @@ export class ConfigSources { }); } return FileConfigSource.create({ + watch: options.watch, path: arg.target, substitutionFunc: options.substitutionFunc, }); @@ -170,6 +172,7 @@ export class ConfigSources { argSources.push( FileConfigSource.create({ + watch: options.watch, path: defaultPath, substitutionFunc: options.substitutionFunc, }), @@ -177,6 +180,7 @@ export class ConfigSources { if (fs.pathExistsSync(localPath)) { argSources.push( FileConfigSource.create({ + watch: options.watch, path: localPath, substitutionFunc: options.substitutionFunc, }), diff --git a/packages/config-loader/src/sources/FileConfigSource.ts b/packages/config-loader/src/sources/FileConfigSource.ts index 1de0fbf2d8..74266de227 100644 --- a/packages/config-loader/src/sources/FileConfigSource.ts +++ b/packages/config-loader/src/sources/FileConfigSource.ts @@ -39,6 +39,11 @@ export interface FileConfigSourceOptions { */ path: string; + /** + * Set to `false` to disable file watching, defaults to `true`. + */ + watch?: boolean; + /** * A substitution function to use instead of the default environment substitution. */ @@ -89,10 +94,12 @@ export class FileConfigSource implements ConfigSource { readonly #path: string; readonly #substitutionFunc?: SubstitutionFunc; + readonly #watch?: boolean; private constructor(options: FileConfigSourceOptions) { this.#path = options.path; this.#substitutionFunc = options.substitutionFunc; + this.#watch = options.watch ?? true; } // Work is duplicated across each read, in practice that should not @@ -104,20 +111,27 @@ export class FileConfigSource implements ConfigSource { const signal = options?.signal; const configFileName = basename(this.#path); - // Keep track of watched paths, since this is simpler than resetting the watcher - const watchedPaths = new Array(); - const watcher = chokidar.watch(this.#path, { - usePolling: process.env.NODE_ENV === 'test', - }); + let watchedPaths: Array | null = null; + let watcher: FSWatcher | null = null; + + if (this.#watch) { + // Keep track of watched paths, since this is simpler than resetting the watcher + watchedPaths = new Array(); + watcher = chokidar.watch(this.#path, { + usePolling: process.env.NODE_ENV === 'test', + }); + } const dir = dirname(this.#path); const transformer = createConfigTransformer({ substitutionFunc: this.#substitutionFunc, readFile: async path => { const fullPath = resolvePath(dir, path); - // Any files discovered while reading this config should be watched too - watcher.add(fullPath); - watchedPaths.push(fullPath); + if (watcher && watchedPaths) { + // Any files discovered while reading this config should be watched too + watcher.add(fullPath); + watchedPaths.push(fullPath); + } const data = await readFile(fullPath); if (data === undefined) { @@ -131,12 +145,15 @@ export class FileConfigSource implements ConfigSource { // This is the entry point for reading the file, called initially and on change const readConfigFile = async (): Promise => { - // We clear the watched files every time we initiate a new read - watcher.unwatch(watchedPaths); - watchedPaths.length = 0; + if (watcher && watchedPaths) { + // We clear the watched files every time we initiate a new read + watcher.unwatch(watchedPaths); + watchedPaths.length = 0; + + watcher.add(this.#path); + watchedPaths.push(this.#path); + } - watcher.add(this.#path); - watchedPaths.push(this.#path); const content = await readFile(this.#path); if (content === undefined) { throw new NotFoundError(`Config file "${this.#path}" does not exist`); @@ -157,18 +174,20 @@ export class FileConfigSource implements ConfigSource { const onAbort = () => { signal?.removeEventListener('abort', onAbort); - watcher.close(); + if (watcher) watcher.close(); }; signal?.addEventListener('abort', onAbort); yield { configs: await readConfigFile() }; - for (;;) { - const event = await this.#waitForEvent(watcher, signal); - if (event === 'abort') { - return; + if (watcher) { + for (;;) { + const event = await this.#waitForEvent(watcher, signal); + if (event === 'abort') { + return; + } + yield { configs: await readConfigFile() }; } - yield { configs: await readConfigFile() }; } } diff --git a/packages/config/CHANGELOG.md b/packages/config/CHANGELOG.md index a5dfb07366..8f0f5202f4 100644 --- a/packages/config/CHANGELOG.md +++ b/packages/config/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/config +## 1.1.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.3-next.0 + - @backstage/types@1.1.1 + ## 1.1.0 ### Minor Changes diff --git a/packages/config/package.json b/packages/config/package.json index d917df849b..538429e569 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/config", "description": "Config API used by Backstage core, backend, and CLI", - "version": "1.1.0", + "version": "1.1.1-next.0", "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 20c6013ee0..35bbee7183 100644 --- a/packages/core-app-api/CHANGELOG.md +++ b/packages/core-app-api/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/core-app-api +## 1.11.0-next.2 + +### Minor Changes + +- c9d9bfeca2: URL encode some well known unsafe characters in `RouteResolver` (and therefore `useRouteRef`) + +### Patch Changes + +- acca17e91a: Wrap entire app in ``, enabling support for using translations outside plugins. +- Updated dependencies + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.5 + ## 1.10.1-next.1 ### Patch Changes diff --git a/packages/core-app-api/package.json b/packages/core-app-api/package.json index 5852076136..e3332998df 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.10.1-next.1", + "version": "1.11.0-next.2", "publishConfig": { "access": "public" }, diff --git a/packages/core-components/CHANGELOG.md b/packages/core-components/CHANGELOG.md index 1cab780f55..b6a2f05cd1 100644 --- a/packages/core-components/CHANGELOG.md +++ b/packages/core-components/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/core-components +## 0.13.6-next.2 + +### Patch Changes + +- 0b55f773a7: Removed some unused dependencies +- 8a15360bb4: Fixed overflowing messages in `WarningPanel`. +- Updated dependencies + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/theme@0.4.3-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/version-bridge@1.0.5 + ## 0.13.6-next.1 ### Patch Changes diff --git a/packages/core-components/package.json b/packages/core-components/package.json index 155f0a09c4..1a5067b874 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.6-next.1", + "version": "0.13.6-next.2", "publishConfig": { "access": "public", "main": "dist/index.esm.js", @@ -61,7 +61,6 @@ "linkifyjs": "4.1.1", "lodash": "^4.17.21", "pluralize": "^8.0.0", - "prop-types": "^15.7.2", "qs": "^6.9.4", "rc-progress": "3.5.1", "react-helmet": "6.1.0", diff --git a/packages/core-components/src/components/WarningPanel/WarningPanel.tsx b/packages/core-components/src/components/WarningPanel/WarningPanel.tsx index 7e8248115f..f4dc298b1e 100644 --- a/packages/core-components/src/components/WarningPanel/WarningPanel.tsx +++ b/packages/core-components/src/components/WarningPanel/WarningPanel.tsx @@ -69,6 +69,9 @@ export type WarningPanelClassKey = const useStyles = makeStyles( theme => ({ + content: { + lineBreak: 'anywhere', + }, panel: { backgroundColor: ({ severity }: WarningProps) => getWarningBackgroundColor( @@ -168,6 +171,7 @@ export function WarningPanel(props: WarningProps) { > } + classes={{ content: classes.content }} className={classes.summary} > diff --git a/packages/core-plugin-api/CHANGELOG.md b/packages/core-plugin-api/CHANGELOG.md index d206487074..3c1516c646 100644 --- a/packages/core-plugin-api/CHANGELOG.md +++ b/packages/core-plugin-api/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/core-plugin-api +## 1.7.0-next.1 + +### Patch Changes + +- 0b55f773a7: Removed some unused dependencies +- Updated dependencies + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.5 + ## 1.7.0-next.0 ### Minor Changes diff --git a/packages/core-plugin-api/package.json b/packages/core-plugin-api/package.json index 64fdd00915..bc81e292cb 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.7.0-next.0", + "version": "1.7.0-next.1", "publishConfig": { "access": "public" }, @@ -51,9 +51,7 @@ "@backstage/version-bridge": "workspace:^", "@types/react": "^16.13.1 || ^17.0.0", "history": "^5.0.0", - "i18next": "^22.4.15", - "prop-types": "^15.7.2", - "zen-observable": "^0.10.0" + "i18next": "^22.4.15" }, "peerDependencies": { "react": "^16.13.1 || ^17.0.0", @@ -68,10 +66,7 @@ "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/react-hooks": "^8.0.0", - "@testing-library/user-event": "^14.0.0", - "@types/prop-types": "^15.7.3", - "@types/zen-observable": "^0.8.0", - "msw": "^1.0.0" + "@testing-library/user-event": "^14.0.0" }, "files": [ "dist" diff --git a/packages/create-app/CHANGELOG.md b/packages/create-app/CHANGELOG.md index fed5a6b936..2ad4280db0 100644 --- a/packages/create-app/CHANGELOG.md +++ b/packages/create-app/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/create-app +## 0.5.6-next.2 + +### Patch Changes + +- Bumped create-app version. +- Updated dependencies + - @backstage/cli-common@0.1.13-next.0 + ## 0.5.6-next.1 ### Patch Changes diff --git a/packages/create-app/package.json b/packages/create-app/package.json index 6ae88a8e4c..467ceb1cfe 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.6-next.1", + "version": "0.5.6-next.2", "publishConfig": { "access": "public" }, @@ -42,6 +42,7 @@ "recursive-readdir": "^2.2.2" }, "devDependencies": { + "@backstage/backend-test-utils": "workspace:^", "@backstage/cli": "workspace:^", "@types/command-exists": "^1.2.0", "@types/fs-extra": "^9.0.1", diff --git a/packages/create-app/src/createApp.test.ts b/packages/create-app/src/createApp.test.ts index 7cb9733567..844d2aee1b 100644 --- a/packages/create-app/src/createApp.test.ts +++ b/packages/create-app/src/createApp.test.ts @@ -15,13 +15,13 @@ */ import inquirer from 'inquirer'; -import mockFs from 'mock-fs'; import path from 'path'; import { Command } from 'commander'; import * as tasks from './lib/tasks'; import createApp from './createApp'; import { findPaths } from '@backstage/cli-common'; import { tmpdir } from 'os'; +import { createMockDirectory } from '@backstage/backend-test-utils'; jest.mock('./lib/tasks'); @@ -40,16 +40,7 @@ const moveAppMock = jest.spyOn(tasks, 'moveAppTask'); const buildAppMock = jest.spyOn(tasks, 'buildAppTask'); describe('command entrypoint', () => { - beforeEach(() => { - mockFs({ - [`${__dirname}/package.json`]: '', // required by `findPaths(__dirname)` - 'templates/': mockFs.load(path.resolve(__dirname, '../templates/')), - }); - }); - - afterEach(() => { - mockFs.restore(); - }); + const mockDir = createMockDirectory({ mockOsTmpDir: true }); beforeEach(() => { promptMock.mockResolvedValueOnce({ @@ -62,6 +53,7 @@ describe('command entrypoint', () => { }); afterEach(() => { + mockDir.clear(); jest.resetAllMocks(); }); @@ -75,7 +67,6 @@ describe('command entrypoint', () => { findPaths(__dirname).resolveTarget( 'packages', 'create-app', - 'src', 'templates', 'default-app', ), @@ -97,7 +88,6 @@ describe('command entrypoint', () => { findPaths(__dirname).resolveTarget( 'packages', 'create-app', - 'src', 'templates', 'default-app', ), diff --git a/packages/create-app/src/lib/tasks.test.ts b/packages/create-app/src/lib/tasks.test.ts index 68afdc9222..e122374004 100644 --- a/packages/create-app/src/lib/tasks.test.ts +++ b/packages/create-app/src/lib/tasks.test.ts @@ -15,9 +15,8 @@ */ import fs from 'fs-extra'; -import mockFs from 'mock-fs'; import child_process from 'child_process'; -import path, { resolve as resolvePath } from 'path'; +import { resolve as resolvePath } from 'path'; import os from 'os'; import { Task, @@ -29,6 +28,7 @@ import { tryInitGitRepository, readGitConfig, } from './tasks'; +import { createMockDirectory } from '@backstage/backend-test-utils'; jest.spyOn(Task, 'log').mockReturnValue(undefined); jest.spyOn(Task, 'error').mockReturnValue(undefined); @@ -101,21 +101,33 @@ describe('tasks', () => { ) => void >; + const mockDir = createMockDirectory(); + + const realChdir = process.chdir; + // If anyone calls chdir then make it resolve within the tmpdir + const mockChdir = jest.spyOn(process, 'chdir'); + beforeEach(() => { - mockFs({ - 'projects/my-module.ts': '', - 'projects/dir/my-file.txt': '', - 'tmp/mockApp/.gitignore': '', - 'tmp/mockApp/package.json': '', - 'tmp/mockApp/packages/app/package.json': '', - // load templates into mock filesystem - 'templates/': mockFs.load(path.resolve(__dirname, '../../templates/')), + mockDir.setContent({ + projects: { + 'my-module.ts': '', + 'dir/my-file.txt': '', + }, + 'tmp/mockApp': { + '.gitignore': '', + 'package.json': '', + 'packages/app/package.json': '', + }, }); + realChdir(mockDir.path); + mockChdir.mockImplementation((dir: string) => + realChdir(mockDir.resolve(dir)), + ); }); afterEach(() => { mockExec.mockRestore(); - mockFs.restore(); + mockChdir.mockReset(); }); describe('checkAppExistsTask', () => { @@ -164,8 +176,6 @@ describe('tasks', () => { describe('buildAppTask', () => { it('should change to `appDir` and run `yarn install` and `yarn tsc`', async () => { - const mockChdir = jest.spyOn(process, 'chdir'); - // requires callback implementation to support `promisify` wrapper // https://stackoverflow.com/a/60579617/10044859 mockExec.mockImplementation((_command, callback) => { @@ -199,8 +209,6 @@ describe('tasks', () => { }); it('should error out on incorrect yarn version', async () => { - const mockChdir = jest.spyOn(process, 'chdir'); - // requires callback implementation to support `promisify` wrapper // https://stackoverflow.com/a/60579617/10044859 mockExec.mockImplementation((_command, callback) => { @@ -265,7 +273,7 @@ describe('tasks', () => { describe('templatingTask', () => { it('should generate a project populating context parameters', async () => { - const templateDir = 'templates/default-app'; + const templateDir = resolvePath(__dirname, '../../templates/default-app'); const destinationDir = 'templatedApp'; const context = { name: 'SuperCoolBackstageInstance', diff --git a/packages/dev-utils/CHANGELOG.md b/packages/dev-utils/CHANGELOG.md index 300d3dad2f..3869ee9281 100644 --- a/packages/dev-utils/CHANGELOG.md +++ b/packages/dev-utils/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/dev-utils +## 1.0.22-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-app-api@1.11.0-next.2 + - @backstage/integration-react@1.1.20-next.2 + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/theme@0.4.3-next.0 + - @backstage/app-defaults@1.4.4-next.2 + - @backstage/test-utils@1.4.4-next.2 + ## 1.0.22-next.1 ### Patch Changes diff --git a/packages/dev-utils/package.json b/packages/dev-utils/package.json index dec37f3cea..172b66132e 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.22-next.1", + "version": "1.0.22-next.2", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/packages/e2e-test/CHANGELOG.md b/packages/e2e-test/CHANGELOG.md index 4c47b33e86..846f7e62a4 100644 --- a/packages/e2e-test/CHANGELOG.md +++ b/packages/e2e-test/CHANGELOG.md @@ -1,5 +1,14 @@ # e2e-test +## 0.2.8-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/create-app@0.5.6-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/cli-common@0.1.13-next.0 + ## 0.2.8-next.1 ### Patch Changes diff --git a/packages/e2e-test/package.json b/packages/e2e-test/package.json index 8b1499446a..9d5654098d 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.8-next.1", + "version": "0.2.8-next.2", "private": true, "backstage": { "role": "cli" diff --git a/packages/e2e-test/src/commands/run.ts b/packages/e2e-test/src/commands/run.ts index 5d373b24cf..a9256695ec 100644 --- a/packages/e2e-test/src/commands/run.ts +++ b/packages/e2e-test/src/commands/run.ts @@ -427,6 +427,8 @@ async function dropClientDatabases(client: string) { async function testBackendStart(appDir: string, ...args: string[]) { const child = spawnPiped(['yarn', 'workspace', 'backend', 'start', ...args], { cwd: appDir, + // Windows does not like piping stdin here, the child process will hang when requiring the 'process' module + stdio: ['ignore', 'pipe', 'pipe'], env: { ...process.env, GITHUB_TOKEN: 'abc', diff --git a/packages/errors/CHANGELOG.md b/packages/errors/CHANGELOG.md index 689b3617fc..2568ca095e 100644 --- a/packages/errors/CHANGELOG.md +++ b/packages/errors/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/errors +## 1.2.3-next.0 + +### Patch Changes + +- 0b55f773a7: Removed some unused dependencies +- Updated dependencies + - @backstage/types@1.1.1 + ## 1.2.2 ### Patch Changes diff --git a/packages/errors/package.json b/packages/errors/package.json index 8d274be401..c064765aca 100644 --- a/packages/errors/package.json +++ b/packages/errors/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/errors", "description": "Common utilities for error handling within Backstage", - "version": "1.2.2", + "version": "1.2.3-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,7 +34,6 @@ }, "dependencies": { "@backstage/types": "workspace:^", - "cross-fetch": "^3.1.5", "serialize-error": "^8.0.1" }, "devDependencies": { diff --git a/packages/frontend-app-api/CHANGELOG.md b/packages/frontend-app-api/CHANGELOG.md index 90d7ba70d2..12983fdcd6 100644 --- a/packages/frontend-app-api/CHANGELOG.md +++ b/packages/frontend-app-api/CHANGELOG.md @@ -1,5 +1,27 @@ # @backstage/frontend-app-api +## 0.2.0-next.2 + +### Minor Changes + +- 4461d87d5a: Removed support for the new `useRouteRef`. + +### Patch Changes + +- 5072824817: Implement `toString()` and `toJSON()` for extension instances. +- 06432f900c: Updates for `at` -> `attachTo` refactor. +- 1718ec75b7: Added support for the existing routing system. +- Updated dependencies + - @backstage/frontend-plugin-api@0.2.0-next.2 + - @backstage/core-app-api@1.11.0-next.2 + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/plugin-graphiql@0.2.55-next.2 + - @backstage/theme@0.4.3-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.5 + ## 0.2.0-next.1 ### Patch Changes diff --git a/packages/frontend-app-api/api-report.md b/packages/frontend-app-api/api-report.md index 2e77ef904b..a576d4cfe4 100644 --- a/packages/frontend-app-api/api-report.md +++ b/packages/frontend-app-api/api-report.md @@ -7,13 +7,16 @@ import { BackstagePlugin } from '@backstage/frontend-plugin-api'; import { Config } from '@backstage/config'; import { ConfigApi } from '@backstage/core-plugin-api'; import { ExtensionDataRef } from '@backstage/frontend-plugin-api'; +import { ExtensionOverrides } from '@backstage/frontend-plugin-api'; import { JSX as JSX_2 } from 'react'; // @public (undocumented) export function createApp(options: { - plugins: BackstagePlugin[]; + features?: (BackstagePlugin | ExtensionOverrides)[]; configLoader?: () => Promise; - pluginLoader?: (ctx: { config: ConfigApi }) => Promise; + featureLoader?: (ctx: { + config: ConfigApi; + }) => Promise<(BackstagePlugin | ExtensionOverrides)[]>; }): { createRoot(): JSX_2.Element; }; diff --git a/packages/frontend-app-api/package.json b/packages/frontend-app-api/package.json index 5fb84070d4..6b4b3be10c 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.2.0-next.1", + "version": "0.2.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -42,6 +42,7 @@ "@backstage/plugin-graphiql": "workspace:^", "@backstage/theme": "workspace:^", "@backstage/types": "workspace:^", + "@backstage/version-bridge": "workspace:^", "@material-ui/core": "^4.12.4", "@material-ui/icons": "^4.11.3", "@types/react": "^16.13.1 || ^17.0.0", diff --git a/packages/frontend-app-api/src/extensions/Core.tsx b/packages/frontend-app-api/src/extensions/Core.tsx index 4cb21a8702..ec00059bf8 100644 --- a/packages/frontend-app-api/src/extensions/Core.tsx +++ b/packages/frontend-app-api/src/extensions/Core.tsx @@ -22,11 +22,14 @@ import { export const Core = createExtension({ id: 'core', - at: 'root', + attachTo: { id: 'root', input: 'default' }, inputs: { apis: createExtensionInput({ api: coreExtensionData.apiFactory, }), + themes: createExtensionInput({ + theme: coreExtensionData.theme, + }), }, output: {}, factory() {}, diff --git a/packages/frontend-app-api/src/extensions/CoreLayout.tsx b/packages/frontend-app-api/src/extensions/CoreLayout.tsx index 0c5c0446fc..9b0b8b25d1 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', - at: 'root', + attachTo: { id: 'root', input: 'default' }, inputs: { nav: createExtensionInput( { diff --git a/packages/frontend-app-api/src/extensions/CoreNav.tsx b/packages/frontend-app-api/src/extensions/CoreNav.tsx index 71ab71a6aa..3406c1d637 100644 --- a/packages/frontend-app-api/src/extensions/CoreNav.tsx +++ b/packages/frontend-app-api/src/extensions/CoreNav.tsx @@ -19,9 +19,9 @@ import { createExtension, coreExtensionData, createExtensionInput, - useRouteRef, NavTarget, } from '@backstage/frontend-plugin-api'; +import { useRouteRef } from '@backstage/core-plugin-api'; import { makeStyles } from '@material-ui/core'; import { Sidebar, @@ -66,14 +66,14 @@ const SidebarLogo = () => { const SidebarNavItem = (props: NavTarget) => { const { icon: Icon, title, routeRef } = props; - const to = useRouteRef(routeRef)(); + const to = useRouteRef(routeRef)({}); // TODO: Support opening modal, for example, the search one return ; }; export const CoreNav = createExtension({ id: 'core.nav', - at: 'core.layout/nav', + attachTo: { id: 'core.layout', input: 'nav' }, inputs: { items: createExtensionInput({ target: coreExtensionData.navTarget, diff --git a/packages/frontend-app-api/src/extensions/CoreRoutes.tsx b/packages/frontend-app-api/src/extensions/CoreRoutes.tsx index 5c79b56f43..5006a87cac 100644 --- a/packages/frontend-app-api/src/extensions/CoreRoutes.tsx +++ b/packages/frontend-app-api/src/extensions/CoreRoutes.tsx @@ -24,7 +24,7 @@ import { useRoutes } from 'react-router-dom'; export const CoreRoutes = createExtension({ id: 'core.routes', - at: 'core.layout/content', + attachTo: { id: 'core.layout', input: 'content' }, inputs: { routes: createExtensionInput({ path: coreExtensionData.routePath, diff --git a/packages/frontend-app-api/src/routing/RoutingContext.tsx b/packages/frontend-app-api/src/routing/RoutingContext.tsx deleted file mode 100644 index 237c8aa5df..0000000000 --- a/packages/frontend-app-api/src/routing/RoutingContext.tsx +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright 2023 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { RouteRef } from '@backstage/core-plugin-api'; -import React, { createContext, ReactNode } from 'react'; - -export interface RoutingContextType { - resolve( - routeRef: RouteRef, - options: { pathname: string }, - ): (() => string) | undefined; -} - -export const RoutingContext = createContext({ - resolve: () => () => '', -}); - -export class RouteResolver { - constructor(private readonly routePaths: Map) {} - - resolve(anyRouteRef: RouteRef<{}>): (() => string) | undefined { - const basePath = this.routePaths.get(anyRouteRef); - if (!basePath) { - return undefined; - } - return () => basePath; - } -} - -export function RoutingProvider(props: { - routePaths: Map; - children?: ReactNode; -}) { - return ( - - {props.children} - - ); -} diff --git a/packages/frontend-app-api/src/routing/extractRouteInfoFromInstanceTree.test.ts b/packages/frontend-app-api/src/routing/extractRouteInfoFromInstanceTree.test.ts new file mode 100644 index 0000000000..17c224ab45 --- /dev/null +++ b/packages/frontend-app-api/src/routing/extractRouteInfoFromInstanceTree.test.ts @@ -0,0 +1,531 @@ +/* + * Copyright 2020 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import React from 'react'; +import { + BackstagePlugin, + RouteRef, + createRouteRef, +} from '@backstage/core-plugin-api'; +import { extractRouteInfoFromInstanceTree } from './extractRouteInfoFromInstanceTree'; +import { + Extension, + coreExtensionData, + createExtension, + createExtensionInput, + createPlugin, +} from '@backstage/frontend-plugin-api'; +import { createInstances } from '../wiring/createApp'; +import { MockConfigApi } from '@backstage/test-utils'; + +const ref1 = createRouteRef({ id: 'page1' }); +const ref2 = createRouteRef({ id: 'page2' }); +const ref3 = createRouteRef({ id: 'page3' }); +const ref4 = createRouteRef({ id: 'page4' }); +const ref5 = createRouteRef({ id: 'page5' }); +const refOrder = [ref1, ref2, ref3, ref4, ref5]; + +function createTestExtension(options: { + id: string; + parent?: string; + path?: string; + routeRef?: RouteRef; +}) { + return createExtension({ + id: options.id, + attachTo: options.parent + ? { id: options.parent, input: 'children' } + : { id: 'core.routes', input: 'routes' }, + output: { + element: coreExtensionData.reactElement, + path: coreExtensionData.routePath.optional(), + routeRef: coreExtensionData.routeRef.optional(), + }, + inputs: { + children: createExtensionInput({ + element: coreExtensionData.reactElement, + }), + }, + factory({ bind }) { + bind({ + path: options.path, + routeRef: options.routeRef, + element: React.createElement('div'), + }); + }, + }); +} + +function routeInfoFromExtensions(extensions: Extension[]) { + const plugin = createPlugin({ + id: 'test', + extensions, + }); + const { rootInstances } = createInstances({ + config: new MockConfigApi({}), + features: [plugin], + }); + + return extractRouteInfoFromInstanceTree(rootInstances); +} + +function sortedEntries(map: Map): [RouteRef, T][] { + return Array.from(map).sort( + ([a], [b]) => refOrder.indexOf(a) - refOrder.indexOf(b), + ); +} + +function routeObj( + path: string, + refs: RouteRef[], + children: any[] = [], + type: 'mounted' | 'gathered' = 'mounted', + backstagePlugin?: BackstagePlugin, +) { + return { + path: path, + caseSensitive: false, + element: type, + routeRefs: new Set(refs), + children: [ + { + path: '*', + caseSensitive: false, + element: 'match-all', + routeRefs: new Set(), + plugins: new Set(), + }, + ...children, + ], + plugins: backstagePlugin ? new Set([backstagePlugin]) : new Set(), + }; +} + +describe('discovery', () => { + it('should collect routes', () => { + const info = routeInfoFromExtensions([ + createTestExtension({ + id: 'nothing', + path: 'nothing', + }), + createTestExtension({ + id: 'page1', + path: 'foo', + routeRef: ref1, + }), + createTestExtension({ + id: 'page2', + parent: 'page1', + path: 'bar/:id', + routeRef: ref2, + }), + createTestExtension({ + id: 'page3', + parent: 'page2', + path: 'baz', + routeRef: ref3, + }), + createTestExtension({ + id: 'page4', + path: 'divsoup', + routeRef: ref4, + }), + createTestExtension({ + id: 'page5', + parent: 'page1', + path: 'blop', + routeRef: ref5, + }), + ]); + + expect(sortedEntries(info.routePaths)).toEqual([ + [ref1, 'foo'], + [ref2, 'bar/:id'], + [ref3, 'baz'], + [ref4, 'divsoup'], + [ref5, 'blop'], + ]); + expect(sortedEntries(info.routeParents)).toEqual([ + [ref1, undefined], + [ref2, ref1], + [ref3, ref2], + [ref4, undefined], + [ref5, ref1], + ]); + expect(info.routeObjects).toEqual([ + routeObj('nothing', []), + routeObj( + 'foo', + [ref1], + [ + routeObj( + 'bar/:id', + [ref2], + [routeObj('baz', [ref3], undefined, undefined, expect.any(Object))], + undefined, + expect.any(Object), + ), + routeObj('blop', [ref5], undefined, undefined, expect.any(Object)), + ], + undefined, + expect.any(Object), + ), + routeObj('divsoup', [ref4], undefined, undefined, expect.any(Object)), + ]); + }); + + it('should handle all react router Route patterns', () => { + const info = routeInfoFromExtensions([ + createTestExtension({ + id: 'page1', + path: 'foo', + routeRef: ref1, + }), + createTestExtension({ + id: 'page2', + parent: 'page1', + path: 'bar/:id', + routeRef: ref2, + }), + createTestExtension({ + id: 'page3', + path: 'baz', + routeRef: ref3, + }), + createTestExtension({ + id: 'page4', + parent: 'page3', + path: 'divsoup', + routeRef: ref4, + }), + createTestExtension({ + id: 'page5', + parent: 'page3', + path: 'blop', + routeRef: ref5, + }), + ]); + + expect(sortedEntries(info.routePaths)).toEqual([ + [ref1, 'foo'], + [ref2, 'bar/:id'], + [ref3, 'baz'], + [ref4, 'divsoup'], + [ref5, 'blop'], + ]); + expect(sortedEntries(info.routeParents)).toEqual([ + [ref1, undefined], + [ref2, ref1], + [ref3, undefined], + [ref4, ref3], + [ref5, ref3], + ]); + }); + + it('should strip leading slashes in route paths', () => { + const info = routeInfoFromExtensions([ + createTestExtension({ + id: 'page1', + path: '/foo', + routeRef: ref1, + }), + createTestExtension({ + id: 'page2', + parent: 'page1', + path: '/bar/:id', + routeRef: ref2, + }), + createTestExtension({ + id: 'page3', + path: '/baz', + routeRef: ref3, + }), + createTestExtension({ + id: 'page4', + parent: 'page3', + path: '/divsoup', + routeRef: ref4, + }), + createTestExtension({ + id: 'page5', + parent: 'page3', + path: '/blop', + routeRef: ref5, + }), + ]); + + expect(sortedEntries(info.routePaths)).toEqual([ + [ref1, 'foo'], + [ref2, 'bar/:id'], + [ref3, 'baz'], + [ref4, 'divsoup'], + [ref5, 'blop'], + ]); + expect(sortedEntries(info.routeParents)).toEqual([ + [ref1, undefined], + [ref2, ref1], + [ref3, undefined], + [ref4, ref3], + [ref5, ref3], + ]); + }); + + it('should use the route aggregator key to bind child routes to the same path', () => { + const info = routeInfoFromExtensions([ + createTestExtension({ + id: 'foo', + path: 'foo', + }), + createTestExtension({ + id: 'page1', + parent: 'foo', + routeRef: ref1, + }), + createTestExtension({ + id: 'fooChild', + parent: 'foo', + }), + createTestExtension({ + id: 'page2', + parent: 'fooChild', + routeRef: ref2, + }), + createTestExtension({ + id: 'fooEmpty', + parent: 'foo', + }), + createTestExtension({ + id: 'page3', + path: 'bar', + routeRef: ref3, + }), + createTestExtension({ + id: 'page3Child', + parent: 'page3', + path: '', + }), + createTestExtension({ + id: 'page4', + parent: 'page3Child', + routeRef: ref4, + }), + createTestExtension({ + id: 'page5', + parent: 'page4', + routeRef: ref5, + }), + ]); + + expect(sortedEntries(info.routePaths)).toEqual([ + [ref1, 'foo'], + [ref2, 'foo'], + [ref3, 'bar'], + [ref4, ''], + [ref5, ''], + ]); + expect(sortedEntries(info.routeParents)).toEqual([ + [ref1, undefined], + [ref2, undefined], + [ref3, undefined], + [ref4, ref3], + [ref5, ref3], + ]); + expect(info.routeObjects).toEqual([ + routeObj('foo', [ref1, ref2], [], 'mounted', expect.any(Object)), + routeObj( + 'bar', + [ref3], + [routeObj('', [ref4, ref5], [], 'mounted', expect.any(Object))], + 'mounted', + expect.any(Object), + ), + ]); + }); + + it('should use the route aggregator but stop when encountering explicit path', () => { + const info = routeInfoFromExtensions([ + createTestExtension({ + id: 'page1', + path: 'foo', + routeRef: ref1, + }), + createTestExtension({ + id: 'page1Child', + parent: 'page1', + path: 'bar', + }), + createTestExtension({ + id: 'page2', + parent: 'page1Child', + routeRef: ref2, + }), + createTestExtension({ + id: 'page3', + parent: 'page2', + path: 'baz', + routeRef: ref3, + }), + createTestExtension({ + id: 'page4', + parent: 'page3', + path: '/blop', + routeRef: ref4, + }), + createTestExtension({ + id: 'page5', + parent: 'page2', + routeRef: ref5, + }), + ]); + + expect(sortedEntries(info.routePaths)).toEqual([ + [ref1, 'foo'], + [ref2, 'bar'], + [ref3, 'baz'], + [ref4, 'blop'], + [ref5, 'bar'], + ]); + expect(sortedEntries(info.routeParents)).toEqual([ + [ref1, undefined], + [ref2, ref1], + [ref3, ref2], + [ref4, ref3], + [ref5, ref1], + ]); + expect(info.routeObjects).toEqual([ + routeObj( + 'foo', + [ref1], + [ + routeObj( + 'bar', + [ref2, ref5], + [ + routeObj( + 'baz', + [ref3], + [ + routeObj( + 'blop', + [ref4], + undefined, + undefined, + expect.any(Object), + ), + ], + undefined, + expect.any(Object), + ), + ], + 'mounted', + expect.any(Object), + ), + ], + undefined, + expect.any(Object), + ), + ]); + }); + + it('should account for loose route paths', () => { + const info = routeInfoFromExtensions([ + createTestExtension({ + id: 'r', + path: 'r', + }), + createTestExtension({ + id: 'page1', + parent: 'r', + path: 'x', + routeRef: ref1, + }), + createTestExtension({ + id: 'y', + path: 'y', + parent: 'r', + }), + createTestExtension({ + id: 'page2', + parent: 'y', + path: '1', + routeRef: ref2, + }), + createTestExtension({ + id: 'page3', + parent: 'page2', + path: 'a', + routeRef: ref3, + }), + createTestExtension({ + id: 'page4', + parent: 'page2', + path: 'b', + routeRef: ref4, + }), + ]); + + expect(sortedEntries(info.routePaths)).toEqual([ + [ref1, 'r/x'], + [ref2, 'r/y/1'], + [ref3, 'a'], + [ref4, 'b'], + ]); + expect(sortedEntries(info.routeParents)).toEqual([ + [ref1, undefined], + [ref2, undefined], + [ref3, ref2], + [ref4, ref2], + ]); + expect(info.routeObjects).toEqual([ + routeObj( + 'r', + [], + [ + routeObj('x', [ref1], [], 'mounted', expect.any(Object)), + routeObj( + 'y', + [], + [ + routeObj( + '1', + [ref2], + [ + routeObj( + 'a', + [ref3], + undefined, + 'mounted', + expect.any(Object), + ), + routeObj( + 'b', + [ref4], + undefined, + 'mounted', + expect.any(Object), + ), + ], + 'mounted', + expect.any(Object), + ), + ], + 'mounted', + ), + ], + ), + ]); + }); +}); diff --git a/packages/frontend-app-api/src/routing/extractRouteInfoFromInstanceTree.ts b/packages/frontend-app-api/src/routing/extractRouteInfoFromInstanceTree.ts new file mode 100644 index 0000000000..30305b0d2c --- /dev/null +++ b/packages/frontend-app-api/src/routing/extractRouteInfoFromInstanceTree.ts @@ -0,0 +1,159 @@ +/* + * 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 { RouteRef } from '@backstage/core-plugin-api'; +import { coreExtensionData } from '@backstage/frontend-plugin-api'; +import { ExtensionInstance } from '../wiring/createExtensionInstance'; +// eslint-disable-next-line @backstage/no-relative-monorepo-imports +import { BackstageRouteObject } from '../../../core-app-api/src/routing/types'; +import { toLegacyPlugin } from '../wiring/createApp'; + +// 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. +// The route resolver then takes care of selecting the most specific match in order to find +// mount points that are as deep in the routing tree as possible. +export const MATCH_ALL_ROUTE: BackstageRouteObject = { + caseSensitive: false, + path: '*', + element: 'match-all', // These elements aren't used, so we add in a bit of debug information + routeRefs: new Set(), + plugins: new Set(), +}; + +// Joins a list of paths together, avoiding trailing and duplicate slashes +export function joinPaths(...paths: string[]): string { + const normalized = paths.join('/').replace(/\/\/+/g, '/'); + if (normalized !== '/' && normalized.endsWith('/')) { + return normalized.slice(0, -1); + } + return normalized; +} + +export function extractRouteInfoFromInstanceTree(roots: ExtensionInstance[]): { + routePaths: Map; + routeParents: Map; + routeObjects: BackstageRouteObject[]; +} { + // This tracks the route path for each route ref, the value is the route path relative to the parent ref + const routePaths = new Map(); + // This tracks the parents of each route ref. To find the full path of any route ref you traverse + // upwards in this tree and substitute each route ref for its route path along then way. + const routeParents = new Map(); + // This route object tree is passed to react-router in order to be able to look up the current route + // ref or extension/source based on our current location. + const routeObjects = new Array(); + + function visit( + current: ExtensionInstance, + collectedPath?: string, + foundRefForCollectedPath: boolean = false, + parentRef?: RouteRef, + candidateParentRef?: RouteRef, + parentObj?: BackstageRouteObject, + ) { + const routePath = current + .getData(coreExtensionData.routePath) + ?.replace(/^\//, ''); + const routeRef = current.getData(coreExtensionData.routeRef); + const parentChildren = parentObj?.children ?? routeObjects; + let currentObj = parentObj; + + let newCollectedPath = collectedPath; + let newFoundRefForCollectedPath = foundRefForCollectedPath; + + let newParentRef = parentRef; + let newCandidateParentRef = candidateParentRef; + + // Whenever a route path is encountered, a new node is created in the routing tree. + if (routePath !== undefined) { + currentObj = { + path: routePath, + element: 'mounted', + routeRefs: new Set(), + caseSensitive: false, + children: [MATCH_ALL_ROUTE], + plugins: new Set(), + }; + parentChildren.push(currentObj); + + // Each route path that we discover creates a new node in the routing tree, at that point + // we also switch out our candidate parent ref to be the active one. + newParentRef = candidateParentRef; + newCandidateParentRef = undefined; + + // We need to collect and concatenate route paths until the path has been assigned a route ref: + // Once we find a route ref the collection starts over from an empty path, that way each route + // path assignment only contains the diff from the parent ref. + if (newFoundRefForCollectedPath) { + newCollectedPath = routePath; + newFoundRefForCollectedPath = false; + } else { + newCollectedPath = collectedPath + ? joinPaths(collectedPath, routePath) + : routePath; + } + } + + // Whenever a route ref is encountered, we need to give it a route path and position in the ref tree. + if (routeRef) { + const routeRefId = (routeRef as any).id; // TODO: properly + if (routeRefId !== current.id) { + throw new Error( + `Route ref '${routeRefId}' must have the same ID as extension '${current.id}'`, + ); + } + + // The first route ref we find after encountering a route path is selected to be used as the + // parent ref further down the tree. We don't start using this candidate ref until we encounter + // another route path though, at which point we repeat the process and select another candidate. + if (!newCandidateParentRef) { + newCandidateParentRef = routeRef; + } + + // Check if we've encountered any route paths since the closest route ref, in that case we assign + // that path to this and following route refs until we encounter another route path. + if (newCollectedPath !== undefined) { + routePaths.set(routeRef, newCollectedPath); + newFoundRefForCollectedPath = true; + } + + routeParents.set(routeRef, newParentRef); + currentObj?.routeRefs.add(routeRef); + if (current.source) { + currentObj?.plugins.add(toLegacyPlugin(current.source)); + } + } + + for (const children of current.attachments.values()) { + for (const child of children) { + visit( + child, + newCollectedPath, + newFoundRefForCollectedPath, + newParentRef, + newCandidateParentRef, + currentObj, + ); + } + } + } + + for (const root of roots) { + visit(root); + } + + return { routePaths, routeParents, routeObjects }; +} diff --git a/packages/frontend-app-api/src/wiring/createApp.test.tsx b/packages/frontend-app-api/src/wiring/createApp.test.tsx index f6172f5a4b..81937405fe 100644 --- a/packages/frontend-app-api/src/wiring/createApp.test.tsx +++ b/packages/frontend-app-api/src/wiring/createApp.test.tsx @@ -16,6 +16,8 @@ import { createExtension, + createExtensionInput, + createExtensionOverrides, createPageExtension, createPlugin, createThemeExtension, @@ -25,6 +27,14 @@ import { screen } from '@testing-library/react'; import { MockConfigApi, renderWithEffects } from '@backstage/test-utils'; import React from 'react'; import { createRouteRef } from '@backstage/core-plugin-api'; +import { createExtensionInstance } from './createExtensionInstance'; + +const extBaseConfig = { + id: 'test', + attachTo: { id: 'root', input: 'default' }, + output: {}, + factory() {}, +}; describe('createInstances', () => { it('throws an error when a root extension is parametrized', () => { @@ -32,33 +42,31 @@ describe('createInstances', () => { app: { extensions: [ { - root: { - at: '', - }, + root: {}, }, ], }, }); - const plugins = [ + const features = [ createPlugin({ id: 'plugin', extensions: [], }), ]; - expect(() => createInstances({ config, plugins })).toThrow( + expect(() => createInstances({ config, features })).toThrow( "A 'root' extension configuration was detected, but the root extension is not configurable", ); }); it('throws an error when a root extension is overridden', () => { const config = new MockConfigApi({}); - const plugins = [ + const features = [ createPlugin({ id: 'plugin', extensions: [ createExtension({ id: 'root', - at: 'core.routes/route', + attachTo: { id: 'core.routes', input: 'route' }, inputs: {}, output: {}, factory() {}, @@ -66,7 +74,7 @@ describe('createInstances', () => { ], }), ]; - expect(() => createInstances({ config, plugins })).toThrow( + expect(() => createInstances({ config, features })).toThrow( "The following plugin(s) are overriding the 'root' extension which is forbidden: plugin", ); }); @@ -98,12 +106,32 @@ describe('createInstances', () => { extensions: [ExtensionA, ExtensionB, ExtensionB], }); - const plugins = [PluginA, PluginB]; + const features = [PluginA, PluginB]; - expect(() => createInstances({ config, plugins })).toThrow( + expect(() => createInstances({ config, features })).toThrow( "The following extensions are duplicated: The extension 'A' was provided 2 time(s) by the plugin 'A' and 1 time(s) by the plugin 'B', The extension 'B' was provided 2 time(s) by the plugin 'B'", ); }); + + it('throws an error when duplicated extension overrides are detected', () => { + expect(() => + createInstances({ + config: new MockConfigApi({}), + features: [ + createExtensionOverrides({ + extensions: [ + createExtension({ ...extBaseConfig, id: 'a' }), + createExtension({ ...extBaseConfig, id: 'a' }), + createExtension({ ...extBaseConfig, id: 'b' }), + ], + }), + createExtensionOverrides({ + extensions: [createExtension({ ...extBaseConfig, id: 'b' })], + }), + ], + }), + ).toThrow('The following extensions had duplicate overrides: a, b'); + }); }); describe('createApp', () => { @@ -115,7 +143,7 @@ describe('createApp', () => { extensions: [{ 'themes.light': false }, { 'themes.dark': false }], }, }), - plugins: [ + features: [ createPlugin({ id: 'test', extensions: [ @@ -134,4 +162,118 @@ describe('createApp', () => { await expect(screen.findByText('Derp')).resolves.toBeInTheDocument(); }); + + it('should log an app', () => { + const { rootInstances } = createInstances({ + config: new MockConfigApi({}), + features: [], + }); + const root = createExtensionInstance({ + extension: createExtension({ + id: 'root', + attachTo: { id: '', input: '' }, + inputs: { + children: createExtensionInput({}), + }, + output: {}, + factory() {}, + }), + config: undefined, + attachments: new Map([['children', rootInstances]]), + }); + + expect(String(root)).toMatchInlineSnapshot(` + " + children [ + + themes [ + + + ] + + + content [ + + ] + nav [ + + ] + + ] + " + `); + }); + + it('should serialize an app as JSON', () => { + const { rootInstances } = createInstances({ + config: new MockConfigApi({}), + features: [], + }); + const root = createExtensionInstance({ + extension: createExtension({ + id: 'root', + attachTo: { id: '', input: '' }, + inputs: { + children: createExtensionInput({}), + }, + output: {}, + factory() {}, + }), + config: undefined, + attachments: new Map([['children', rootInstances]]), + }); + + expect(JSON.parse(JSON.stringify(root))).toMatchInlineSnapshot(` + { + "attachments": { + "children": [ + { + "attachments": { + "themes": [ + { + "id": "themes.light", + "output": [ + "core.theme", + ], + }, + { + "id": "themes.dark", + "output": [ + "core.theme", + ], + }, + ], + }, + "id": "core", + }, + { + "attachments": { + "content": [ + { + "id": "core.routes", + "output": [ + "core.reactElement", + ], + }, + ], + "nav": [ + { + "id": "core.nav", + "output": [ + "core.reactElement", + ], + }, + ], + }, + "id": "core.layout", + "output": [ + "core.reactElement", + ], + }, + ], + }, + "id": "root", + } + `); + }); }); diff --git a/packages/frontend-app-api/src/wiring/createApp.tsx b/packages/frontend-app-api/src/wiring/createApp.tsx index deb19d919d..873e774ad8 100644 --- a/packages/frontend-app-api/src/wiring/createApp.tsx +++ b/packages/frontend-app-api/src/wiring/createApp.tsx @@ -20,6 +20,7 @@ import { BackstagePlugin, coreExtensionData, ExtensionDataRef, + ExtensionOverrides, } from '@backstage/frontend-plugin-api'; import { Core } from '../extensions/Core'; import { CoreRoutes } from '../extensions/CoreRoutes'; @@ -34,7 +35,6 @@ import { mergeExtensionParameters, readAppExtensionParameters, } from './parameters'; -import { RoutingProvider } from '../routing/RoutingContext'; import { AnyApiFactory, ApiHolder, @@ -52,7 +52,7 @@ import { identityApiRef, AppTheme, } from '@backstage/core-plugin-api'; -import { getAvailablePlugins } from './discovery'; +import { getAvailableFeatures } from './discovery'; import { ApiFactoryRegistry, ApiProvider, @@ -74,6 +74,8 @@ import { defaultConfigLoaderSync } from '../../../core-app-api/src/app/defaultCo // eslint-disable-next-line @backstage/no-relative-monorepo-imports import { overrideBaseUrlConfigs } from '../../../core-app-api/src/app/overrideBaseUrlConfigs'; // eslint-disable-next-line @backstage/no-relative-monorepo-imports +import { RoutingProvider } from '../../../core-app-api/src/routing/RoutingProvider'; +// eslint-disable-next-line @backstage/no-relative-monorepo-imports import { apis as defaultApis, components as defaultComponents, @@ -82,6 +84,8 @@ import { import { BrowserRouter, Route } from 'react-router-dom'; import { SidebarItem } from '@backstage/core-components'; import { DarkTheme, LightTheme } from '../extensions/themes'; +import { extractRouteInfoFromInstanceTree } from '../routing/extractRouteInfoFromInstanceTree'; +import { getOrCreateGlobalSingleton } from '@backstage/version-bridge'; /** @public */ export interface ExtensionTreeNode { @@ -101,9 +105,9 @@ export interface ExtensionTree { export function createExtensionTree(options: { config: Config; }): ExtensionTree { - const plugins = getAvailablePlugins(); + const features = getAvailableFeatures(); const { instances } = createInstances({ - plugins, + features, config: options.config, }); @@ -169,7 +173,7 @@ export function createExtensionTree(options: { * @internal */ export function createInstances(options: { - plugins: BackstagePlugin[]; + features: (BackstagePlugin | ExtensionOverrides)[]; config: Config; }) { const builtinExtensions = [ @@ -184,7 +188,7 @@ export function createInstances(options: { // pull in default extension instance from discovered packages // apply config to adjust default extension instances and add more const extensionParams = mergeExtensionParameters({ - sources: options.plugins, + features: options.features, builtinExtensions, parameters: readAppExtensionParameters(options.config), }); @@ -198,8 +202,8 @@ export function createInstances(options: { Map >(); for (const instanceParams of extensionParams) { - const [extensionId, pointId = 'default'] = instanceParams.at.split('/'); - + const extensionId = instanceParams.attachTo.id; + const pointId = instanceParams.attachTo.input; let pointMap = attachmentMap.get(extensionId); if (!pointMap) { pointMap = new Map(); @@ -257,9 +261,11 @@ export function createInstances(options: { /** @public */ export function createApp(options: { - plugins: BackstagePlugin[]; + features?: (BackstagePlugin | ExtensionOverrides)[]; configLoader?: () => Promise; - pluginLoader?: (ctx: { config: ConfigApi }) => Promise; + featureLoader?: (ctx: { + config: ConfigApi; + }) => Promise<(BackstagePlugin | ExtensionOverrides)[]>; }): { createRoot(): JSX.Element; } { @@ -270,18 +276,22 @@ export function createApp(options: { overrideBaseUrlConfigs(defaultConfigLoaderSync()), ); - const discoveredPlugins = getAvailablePlugins(); - const loadedPlugins = (await options.pluginLoader?.({ config })) ?? []; - const allPlugins = Array.from( - new Set([...discoveredPlugins, ...options.plugins, ...loadedPlugins]), + const discoveredFeatures = getAvailableFeatures(); + const loadedFeatures = (await options.featureLoader?.({ config })) ?? []; + const allFeatures = Array.from( + new Set([ + ...discoveredFeatures, + ...(options.features ?? []), + ...loadedFeatures, + ]), ); const { rootInstances } = createInstances({ - plugins: allPlugins, + features: allFeatures, config, }); - const routePaths = extractRouteInfoFromInstanceTree(rootInstances); + const routeInfo = extractRouteInfoFromInstanceTree(rootInstances); const coreInstance = rootInstances.find(({ id }) => id === 'core'); if (!coreInstance) { @@ -290,7 +300,11 @@ export function createApp(options: { const apiHolder = createApiHolder(coreInstance, config); - const appContext = createLegacyAppContext(allPlugins); + const appContext = createLegacyAppContext( + allFeatures.filter( + (f): f is BackstagePlugin => f.$$type === '@backstage/BackstagePlugin', + ), + ); const rootElements = rootInstances .map(e => ( @@ -304,7 +318,7 @@ export function createApp(options: { - + {/* TODO: set base path using the logic from AppRouter */} {rootElements} @@ -328,25 +342,40 @@ export function createApp(options: { }; } -function toLegacyPlugin(plugin: BackstagePlugin): LegacyBackstagePlugin { +// 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); }; - return { + + legacy = { getId(): string { return plugin.id; }, - get routes(): never { - throw new Error(errorMsg); + get routes() { + return {}; }, - get externalRoutes(): never { - throw new Error(errorMsg); + get externalRoutes() { + return {}; }, getApis: notImplemented, getFeatureFlags: notImplemented, provide: notImplemented, }; + + legacyPluginStore.set(plugin, legacy); + return legacy; } function createLegacyAppContext(plugins: BackstagePlugin[]): AppContext { @@ -458,38 +487,3 @@ function createApiHolder( return new ApiResolver(factoryRegistry); } - -/** @internal */ -export function extractRouteInfoFromInstanceTree( - roots: ExtensionInstance[], -): Map { - const results = new Map(); - - function visit(current: ExtensionInstance, basePath: string) { - const routePath = current.getData(coreExtensionData.routePath) ?? ''; - const routeRef = current.getData(coreExtensionData.routeRef); - - // TODO: join paths in a more robust way - const fullPath = basePath + routePath; - if (routeRef) { - const routeRefId = (routeRef as any).id; // TODO: properly - if (routeRefId !== current.id) { - throw new Error( - `Route ref '${routeRefId}' must have the same ID as extension '${current.id}'`, - ); - } - results.set(routeRef, fullPath); - } - - for (const children of current.attachments.values()) { - for (const child of children) { - visit(child, fullPath); - } - } - } - - for (const root of roots) { - visit(root, ''); - } - return results; -} diff --git a/packages/frontend-app-api/src/wiring/createExtensionInstance.test.ts b/packages/frontend-app-api/src/wiring/createExtensionInstance.test.ts index 12e109874a..6e69e99cb7 100644 --- a/packages/frontend-app-api/src/wiring/createExtensionInstance.test.ts +++ b/packages/frontend-app-api/src/wiring/createExtensionInstance.test.ts @@ -28,7 +28,7 @@ const inputMirrorDataRef = createExtensionDataRef('mirror'); const simpleExtension = createExtension({ id: 'core.test', - at: 'ignored', + attachTo: { id: 'ignored', input: 'ignored' }, output: { test: testDataRef, other: otherDataRef.optional(), @@ -101,7 +101,7 @@ describe('createExtensionInstance', () => { config: undefined, extension: createExtension({ id: 'core.test', - at: 'ignored', + attachTo: { id: 'ignored', input: 'ignored' }, inputs: { optionalSingletonPresent: createExtensionInput( { @@ -166,7 +166,7 @@ describe('createExtensionInstance', () => { config: { other: 'not-a-number' }, extension: createExtension({ id: 'core.test', - at: 'ignored', + attachTo: { id: 'ignored', input: 'ignored' }, output: {}, factory() { const error = new Error('NOPE'); @@ -188,7 +188,7 @@ describe('createExtensionInstance', () => { config: undefined, extension: createExtension({ id: 'core.test', - at: 'ignored', + attachTo: { id: 'ignored', input: 'ignored' }, output: { test1: testDataRef, test2: testDataRef, @@ -211,7 +211,7 @@ describe('createExtensionInstance', () => { config: undefined, extension: createExtension({ id: 'core.test', - at: 'ignored', + attachTo: { id: 'ignored', input: 'ignored' }, output: { test: testDataRef, }, @@ -232,7 +232,7 @@ describe('createExtensionInstance', () => { config: undefined, extension: createExtension({ id: 'core.test', - at: 'ignored', + attachTo: { id: 'ignored', input: 'ignored' }, inputs: { singleton: createExtensionInput( { @@ -250,6 +250,92 @@ describe('createExtensionInstance', () => { ); }); + it('should refuse to create an instance with undeclared inputs', () => { + expect(() => + createExtensionInstance({ + attachments: new Map([ + [ + 'declared', + [ + createExtensionInstance({ + attachments: new Map(), + config: { output: 'many1' }, + extension: simpleExtension, + }), + ], + ], + [ + 'undeclared', + [ + createExtensionInstance({ + attachments: new Map(), + config: { output: 'many1' }, + extension: simpleExtension, + }), + ], + ], + ]), + config: undefined, + extension: createExtension({ + id: 'core.test', + attachTo: { id: 'ignored', input: 'ignored' }, + inputs: { + declared: createExtensionInput({ + test: testDataRef, + }), + }, + output: {}, + factory() {}, + }), + }), + ).toThrow( + "Failed to instantiate extension 'core.test', received undeclared input 'undeclared' from extension 'core.test'", + ); + }); + + it('should refuse to create an instance with multiple undeclared inputs', () => { + expect(() => + createExtensionInstance({ + attachments: new Map([ + [ + 'undeclared1', + [ + createExtensionInstance({ + attachments: new Map(), + config: { output: 'many1' }, + extension: simpleExtension, + }), + ], + ], + [ + 'undeclared2', + [ + createExtensionInstance({ + attachments: new Map(), + config: { output: 'many1' }, + extension: simpleExtension, + }), + createExtensionInstance({ + attachments: new Map(), + config: { output: 'many1' }, + extension: simpleExtension, + }), + ], + ], + ]), + config: undefined, + extension: createExtension({ + id: 'core.test', + attachTo: { id: 'ignored', input: 'ignored' }, + output: {}, + factory() {}, + }), + }), + ).toThrow( + "Failed to instantiate extension 'core.test', received undeclared inputs 'undeclared1' from extension 'core.test' and 'undeclared2' from extensions 'core.test', 'core.test'", + ); + }); + it('should refuse to create an instance with multiple inputs for required singleton', () => { expect(() => createExtensionInstance({ @@ -273,7 +359,7 @@ describe('createExtensionInstance', () => { config: undefined, extension: createExtension({ id: 'core.test', - at: 'ignored', + attachTo: { id: 'ignored', input: 'ignored' }, inputs: { singleton: createExtensionInput( { @@ -314,7 +400,7 @@ describe('createExtensionInstance', () => { config: undefined, extension: createExtension({ id: 'core.test', - at: 'ignored', + attachTo: { id: 'ignored', input: 'ignored' }, inputs: { singleton: createExtensionInput( { @@ -350,7 +436,7 @@ describe('createExtensionInstance', () => { config: undefined, extension: createExtension({ id: 'core.test', - at: 'ignored', + attachTo: { id: 'ignored', input: 'ignored' }, inputs: { singleton: createExtensionInput( { diff --git a/packages/frontend-app-api/src/wiring/createExtensionInstance.ts b/packages/frontend-app-api/src/wiring/createExtensionInstance.ts index afa3cbfefc..5a325dc0a0 100644 --- a/packages/frontend-app-api/src/wiring/createExtensionInstance.ts +++ b/packages/frontend-app-api/src/wiring/createExtensionInstance.ts @@ -36,6 +36,8 @@ export interface ExtensionInstance { * Maps input names to the actual instances given to them. */ readonly attachments: Map; + + readonly source?: BackstagePlugin; } function resolveInputData( @@ -58,6 +60,24 @@ function resolveInputs( inputMap: AnyExtensionInputMap, attachments: Map, ) { + const undeclaredAttachments = Array.from(attachments.entries()).filter( + ([inputName]) => inputMap[inputName] === undefined, + ); + if (undeclaredAttachments.length > 0) { + throw new Error( + `received undeclared input${ + undeclaredAttachments.length > 1 ? 's' : '' + } ${undeclaredAttachments + .map( + ([k, exts]) => + `'${k}' from extension${exts.length > 1 ? 's' : ''} '${exts + .map(e => e.id) + .join("', '")}'`, + ) + .join(' and ')}`, + ); + } + return mapValues(inputMap, (input, inputName) => { const attachedInstances = attachments.get(inputName) ?? []; if (input.config.singleton) { @@ -88,6 +108,68 @@ function resolveInputs( }); } +function indent(str: string) { + return str.replace(/^/gm, ' '); +} + +class ExtensionInstanceImpl implements ExtensionInstance { + readonly $$type = '@backstage/ExtensionInstance'; + + readonly id: string; + readonly #extensionData: Map; + readonly attachments: Map; + readonly source?: BackstagePlugin; + + constructor( + id: string, + extensionData: Map, + attachments: Map, + source: BackstagePlugin | undefined, + ) { + this.id = id; + this.#extensionData = extensionData; + this.attachments = attachments; + this.source = source; + } + + getData(ref: ExtensionDataRef): T | undefined { + return this.#extensionData.get(ref.id) as T | undefined; + } + + toJSON() { + return { + id: this.id, + output: + this.#extensionData.size > 0 + ? [...this.#extensionData.keys()] + : undefined, + attachments: + this.attachments.size > 0 + ? Object.fromEntries(this.attachments) + : undefined, + }; + } + + toString() { + const out = + this.#extensionData.size > 0 + ? ` out=[${[...this.#extensionData.keys()].join(', ')}]` + : ''; + + if (this.attachments.size === 0) { + return `<${this.id}${out} />`; + } + + return [ + `<${this.id}${out}>`, + ...[...this.attachments.entries()].map(([k, v]) => + indent([`${k} [`, ...v.map(e => indent(e.toString())), `]`].join('\n')), + ), + ``, + ].join('\n'); + } +} + /** @internal */ export function createExtensionInstance(options: { extension: Extension; @@ -135,13 +217,10 @@ export function createExtensionInstance(options: { ); } - return { - $$type: '@backstage/ExtensionInstance', - id: options.extension.id, - getData(ref: ExtensionDataRef): T | undefined { - return extensionData.get(ref.id) as T | undefined; - }, - + return new ExtensionInstanceImpl( + options.extension.id, + extensionData, attachments, - }; + source, + ); } diff --git a/packages/frontend-app-api/src/wiring/discovery.test.ts b/packages/frontend-app-api/src/wiring/discovery.test.ts index 5f1c4df718..54294bbd45 100644 --- a/packages/frontend-app-api/src/wiring/discovery.test.ts +++ b/packages/frontend-app-api/src/wiring/discovery.test.ts @@ -15,25 +15,25 @@ */ import { createPlugin } from '@backstage/frontend-plugin-api'; -import { getAvailablePlugins } from './discovery'; +import { getAvailableFeatures } from './discovery'; const globalSpy = jest.fn(); Object.defineProperty(global, '__@backstage/discovered__', { get: globalSpy, }); -describe('getAvailablePlugins', () => { +describe('getAvailableFeatures', () => { afterEach(jest.resetAllMocks); it('should discover nothing with undefined global', () => { - expect(getAvailablePlugins()).toEqual([]); + expect(getAvailableFeatures()).toEqual([]); }); it('should discover nothing with empty global', () => { globalSpy.mockReturnValue({ modules: [], }); - expect(getAvailablePlugins()).toEqual([]); + expect(getAvailableFeatures()).toEqual([]); }); it('should discover a plugin', () => { @@ -41,24 +41,24 @@ describe('getAvailablePlugins', () => { globalSpy.mockReturnValue({ modules: [{ default: testPlugin }], }); - expect(getAvailablePlugins()).toEqual([testPlugin]); + expect(getAvailableFeatures()).toEqual([testPlugin]); }); it('should ignore garbage', () => { globalSpy.mockReturnValueOnce({ modules: [{ default: null }] }); - expect(getAvailablePlugins()).toEqual([]); + expect(getAvailableFeatures()).toEqual([]); globalSpy.mockReturnValueOnce({ modules: [{ default: undefined }] }); - expect(getAvailablePlugins()).toEqual([]); + expect(getAvailableFeatures()).toEqual([]); globalSpy.mockReturnValueOnce({ modules: [{ default: Symbol() }] }); - expect(getAvailablePlugins()).toEqual([]); + expect(getAvailableFeatures()).toEqual([]); globalSpy.mockReturnValueOnce({ modules: [{ default: () => {} }] }); - expect(getAvailablePlugins()).toEqual([]); + expect(getAvailableFeatures()).toEqual([]); globalSpy.mockReturnValueOnce({ modules: [{ default: 0 }] }); - expect(getAvailablePlugins()).toEqual([]); + expect(getAvailableFeatures()).toEqual([]); globalSpy.mockReturnValueOnce({ modules: [{ default: false }] }); - expect(getAvailablePlugins()).toEqual([]); + expect(getAvailableFeatures()).toEqual([]); globalSpy.mockReturnValueOnce({ modules: [{ default: true }] }); - expect(getAvailablePlugins()).toEqual([]); + expect(getAvailableFeatures()).toEqual([]); }); it('should discover multiple plugins', () => { @@ -72,7 +72,7 @@ describe('getAvailablePlugins', () => { { default: test3Plugin }, ], }); - expect(getAvailablePlugins()).toEqual([ + expect(getAvailableFeatures()).toEqual([ test1Plugin, test2Plugin, test3Plugin, diff --git a/packages/frontend-app-api/src/wiring/discovery.ts b/packages/frontend-app-api/src/wiring/discovery.ts index 6d0b9282ea..14786c93d9 100644 --- a/packages/frontend-app-api/src/wiring/discovery.ts +++ b/packages/frontend-app-api/src/wiring/discovery.ts @@ -14,7 +14,10 @@ * limitations under the License. */ -import { BackstagePlugin } from '@backstage/frontend-plugin-api'; +import { + BackstagePlugin, + ExtensionOverrides, +} from '@backstage/frontend-plugin-api'; interface DiscoveryGlobal { modules: Array<{ name: string; default: unknown }>; @@ -23,19 +26,27 @@ interface DiscoveryGlobal { /** * @public */ -export function getAvailablePlugins(): BackstagePlugin[] { +export function getAvailableFeatures(): ( + | BackstagePlugin + | ExtensionOverrides +)[] { const discovered = ( window as { '__@backstage/discovered__'?: DiscoveryGlobal } )['__@backstage/discovered__']; return ( - discovered?.modules.map(m => m.default).filter(isBackstagePlugin) ?? [] + discovered?.modules.map(m => m.default).filter(isBackstageFeature) ?? [] ); } -function isBackstagePlugin(obj: unknown): obj is BackstagePlugin { +function isBackstageFeature( + obj: unknown, +): obj is BackstagePlugin | ExtensionOverrides { if (obj !== null && typeof obj === 'object' && '$$type' in obj) { - return obj.$$type === '@backstage/BackstagePlugin'; + return ( + obj.$$type === '@backstage/BackstagePlugin' || + obj.$$type === '@backstage/ExtensionOverrides' + ); } return false; } diff --git a/packages/frontend-app-api/src/wiring/parameters.test.ts b/packages/frontend-app-api/src/wiring/parameters.test.ts index 10b0e2fc6f..4ee420f667 100644 --- a/packages/frontend-app-api/src/wiring/parameters.test.ts +++ b/packages/frontend-app-api/src/wiring/parameters.test.ts @@ -15,7 +15,11 @@ */ import { ConfigReader } from '@backstage/config'; -import { createPlugin, Extension } from '@backstage/frontend-plugin-api'; +import { + createExtensionOverrides, + createPlugin, + Extension, +} from '@backstage/frontend-plugin-api'; import { JsonValue } from '@backstage/types'; import { expandShorthandExtensionParameters, @@ -23,10 +27,14 @@ import { readAppExtensionParameters, } from './parameters'; -function makeExt(id: string, status: 'disabled' | 'enabled' = 'enabled') { +function makeExt( + id: string, + status: 'disabled' | 'enabled' = 'enabled', + attachId: string = 'root', +) { return { id, - at: 'root', + attachTo: { id: attachId, input: 'default' }, disabled: status === 'disabled', } as Extension; } @@ -35,7 +43,7 @@ describe('mergeExtensionParameters', () => { it('should filter out disabled extension instances', () => { expect( mergeExtensionParameters({ - sources: [], + features: [], builtinExtensions: [makeExt('a', 'disabled')], parameters: [], }), @@ -47,13 +55,13 @@ describe('mergeExtensionParameters', () => { const b = makeExt('b'); expect( mergeExtensionParameters({ - sources: [], + features: [], builtinExtensions: [a, b], parameters: [], }), ).toEqual([ - { extension: a, at: 'root' }, - { extension: b, at: 'root' }, + { extension: a, attachTo: { id: 'root', input: 'default' } }, + { extension: b, attachTo: { id: 'root', input: 'default' } }, ]); }); @@ -63,18 +71,22 @@ describe('mergeExtensionParameters', () => { const pluginA = createPlugin({ id: 'test', extensions: [a] }); expect( mergeExtensionParameters({ - sources: [pluginA], + features: [pluginA], builtinExtensions: [b], parameters: [ { id: 'b', - at: 'derp', + attachTo: { id: 'derp', input: 'default' }, }, ], }), ).toEqual([ - { extension: a, at: 'root', source: pluginA }, - { extension: b, at: 'derp' }, + { + extension: a, + attachTo: { id: 'root', input: 'default' }, + source: pluginA, + }, + { extension: b, attachTo: { id: 'derp', input: 'default' } }, ]); }); @@ -84,7 +96,7 @@ describe('mergeExtensionParameters', () => { const plugin = createPlugin({ id: 'test', extensions: [a, b] }); expect( mergeExtensionParameters({ - sources: [plugin], + features: [plugin], builtinExtensions: [], parameters: [ { @@ -102,8 +114,18 @@ describe('mergeExtensionParameters', () => { ], }), ).toEqual([ - { extension: a, at: 'root', source: plugin, config: { foo: { bar: 1 } } }, - { extension: b, at: 'root', source: plugin, config: { foo: { qux: 3 } } }, + { + extension: a, + attachTo: { id: 'root', input: 'default' }, + source: plugin, + config: { foo: { bar: 1 } }, + }, + { + extension: b, + attachTo: { id: 'root', input: 'default' }, + source: plugin, + config: { foo: { qux: 3 } }, + }, ]); }); @@ -112,7 +134,7 @@ describe('mergeExtensionParameters', () => { const b = makeExt('b', 'disabled'); expect( mergeExtensionParameters({ - sources: [createPlugin({ id: 'empty', extensions: [] })], + features: [createPlugin({ id: 'empty', extensions: [] })], builtinExtensions: [a, b], parameters: [ { @@ -126,10 +148,65 @@ describe('mergeExtensionParameters', () => { ], }), ).toEqual([ - { extension: b, at: 'root' }, - { extension: a, at: 'root' }, + { extension: b, attachTo: { id: 'root', input: 'default' } }, + { extension: a, attachTo: { id: 'root', input: 'default' } }, ]); }); + + it('should apply extension overrides', () => { + const a = makeExt('a'); + const b = makeExt('b'); + const plugin = createPlugin({ id: 'test', extensions: [a, b] }); + const aOverride = makeExt('a', 'enabled', 'other'); + const bOverride = makeExt('b', 'disabled', 'other'); + const cOverride = makeExt('c'); + + const result = mergeExtensionParameters({ + features: [ + plugin, + createExtensionOverrides({ + extensions: [aOverride, bOverride, cOverride], + }), + ], + builtinExtensions: [], + parameters: [], + }); + + expect(result.length).toBe(2); + expect(result[0].extension).toBe(aOverride); + expect(result[0].attachTo).toEqual({ id: 'other', input: 'default' }); + expect(result[0].config).toEqual(undefined); + expect(result[0].source).toBe(plugin); + + expect(result[1]).toEqual({ + extension: cOverride, + attachTo: { id: 'root', input: 'default' }, + config: undefined, + source: undefined, + }); + }); + + it('should use order from configuration when rather than overrides', () => { + const a = makeExt('a', 'disabled'); + const b = makeExt('b', 'disabled'); + const c = makeExt('c', 'disabled'); + const aOverride = makeExt('c', 'disabled'); + const bOverride = makeExt('b', 'disabled'); + const cOverride = makeExt('a', 'disabled'); + + const result = mergeExtensionParameters({ + features: [ + createPlugin({ id: 'test', extensions: [a, b, c] }), + createExtensionOverrides({ + extensions: [cOverride, bOverride, aOverride], + }), + ], + builtinExtensions: [], + parameters: ['b', 'c', 'a'].map(id => ({ id, disabled: false })), + }); + + expect(result.map(r => r.extension.id)).toEqual(['b', 'c', 'a']); + }); }); describe('readAppExtensionParameters', () => { @@ -315,14 +392,18 @@ describe('expandShorthandExtensionParameters', () => { expect(() => run({ 'core.router': { id: 'some.id' } }), ).toThrowErrorMatchingInlineSnapshot( - `"Invalid extension configuration at app.extensions[1][core.router].id, unknown parameter; expected one of 'at', 'disabled', 'config'"`, + `"Invalid extension configuration at app.extensions[1][core.router].id, unknown parameter; expected one of 'attachTo', 'disabled', 'config'"`, ); }); - it('supports object at', () => { - expect(run({ 'core.router': { at: 'other.root/inputs' } })).toEqual({ + it('supports object attachTo', () => { + expect( + run({ + 'core.router': { attachTo: { id: 'other.root', input: 'inputs' } }, + }), + ).toEqual({ id: 'core.router', - at: 'other.root/inputs', + attachTo: { id: 'other.root', input: 'inputs' }, }); expect(() => run({ @@ -331,7 +412,7 @@ describe('expandShorthandExtensionParameters', () => { }, }), ).toThrowErrorMatchingInlineSnapshot( - `"Invalid extension configuration at app.extensions[1][core.router].id, unknown parameter; expected one of 'at', 'disabled', 'config'"`, + `"Invalid extension configuration at app.extensions[1][core.router].id, unknown parameter; expected one of 'attachTo', 'disabled', 'config'"`, ); }); @@ -369,7 +450,7 @@ describe('expandShorthandExtensionParameters', () => { expect(() => run({ 'core.router': { foo: { settings: true } } }), ).toThrowErrorMatchingInlineSnapshot( - `"Invalid extension configuration at app.extensions[1][core.router].foo, unknown parameter; expected one of 'at', 'disabled', 'config'"`, + `"Invalid extension configuration at app.extensions[1][core.router].foo, unknown parameter; expected one of 'attachTo', 'disabled', 'config'"`, ); }); }); diff --git a/packages/frontend-app-api/src/wiring/parameters.ts b/packages/frontend-app-api/src/wiring/parameters.ts index efe0fbf678..e81d5f74cb 100644 --- a/packages/frontend-app-api/src/wiring/parameters.ts +++ b/packages/frontend-app-api/src/wiring/parameters.ts @@ -15,17 +15,23 @@ */ import { Config } from '@backstage/config'; -import { BackstagePlugin, Extension } from '@backstage/frontend-plugin-api'; +import { + BackstagePlugin, + Extension, + ExtensionOverrides, +} from '@backstage/frontend-plugin-api'; +// eslint-disable-next-line @backstage/no-relative-monorepo-imports +import { toInternalExtensionOverrides } from '../../../frontend-plugin-api/src/wiring/createExtensionOverrides'; import { JsonValue } from '@backstage/types'; export interface ExtensionParameters { id: string; - at?: string; + attachTo?: { id: string; input: string }; disabled?: boolean; config?: unknown; } -const knownExtensionParameters = ['at', 'disabled', 'config']; +const knownExtensionParameters = ['attachTo', 'disabled', 'config']; // Since we'll never merge arrays in config the config reader context // isn't too much of a help. Fall back to manual config reading logic @@ -143,15 +149,33 @@ export function expandShorthandExtensionParameters( throw new Error(errorMsg('value must be a boolean or object', id)); } - const at = value.at; + const attachTo = value.attachTo as { id: string; input: string } | undefined; const disabled = value.disabled; const config = value.config; - if (at !== undefined && typeof at !== 'string') { - throw new Error(errorMsg('must be a string', id, 'at')); - } else if (disabled !== undefined && typeof disabled !== 'boolean') { + if (attachTo !== undefined) { + if ( + attachTo === null || + typeof attachTo !== 'object' || + Array.isArray(attachTo) + ) { + throw new Error(errorMsg('must be an object', id, 'attachTo')); + } + if (typeof attachTo.id !== 'string' || attachTo.id === '') { + throw new Error( + errorMsg('must be a non-empty string', id, 'attachTo.id'), + ); + } + if (typeof attachTo.input !== 'string' || attachTo.input === '') { + throw new Error( + errorMsg('must be a non-empty string', id, 'attachTo.input'), + ); + } + } + if (disabled !== undefined && typeof disabled !== 'boolean') { throw new Error(errorMsg('must be a boolean', id, 'disabled')); - } else if ( + } + if ( config !== undefined && (typeof config !== 'object' || config === null || Array.isArray(config)) ) { @@ -175,7 +199,7 @@ export function expandShorthandExtensionParameters( return { id, - at, + attachTo, disabled, config, }; @@ -184,21 +208,32 @@ export function expandShorthandExtensionParameters( export interface ExtensionInstanceParameters { extension: Extension; source?: BackstagePlugin; - at: string; + attachTo: { id: string; input: string }; config?: unknown; } /** @internal */ export function mergeExtensionParameters(options: { - sources: BackstagePlugin[]; + features: (BackstagePlugin | ExtensionOverrides)[]; builtinExtensions: Extension[]; parameters: Array; }): ExtensionInstanceParameters[] { - const { sources, builtinExtensions, parameters } = options; + const { builtinExtensions, parameters } = options; - const pluginExtensions = sources.flatMap(source => { + const plugins = options.features.filter( + (f): f is BackstagePlugin => f.$$type === '@backstage/BackstagePlugin', + ); + const overrides = options.features.filter( + (f): f is ExtensionOverrides => + f.$$type === '@backstage/ExtensionOverrides', + ); + + const pluginExtensions = plugins.flatMap(source => { return source.extensions.map(extension => ({ ...extension, source })); }); + const overrideExtensions = overrides.flatMap( + override => toInternalExtensionOverrides(override).extensions, + ); // Prevent root override if (pluginExtensions.some(({ id }) => id === 'root')) { @@ -212,12 +247,33 @@ export function mergeExtensionParameters(options: { ); } - const overrides = [ + if (overrideExtensions.some(({ id }) => id === 'root')) { + throw new Error( + `An extension override is overriding the 'root' extension which is forbidden`, + ); + } + const overrideExtensionIds = overrideExtensions.map(({ id }) => id); + if (overrideExtensionIds.length !== new Set(overrideExtensionIds).size) { + const counts = new Map(); + for (const id of overrideExtensionIds) { + counts.set(id, (counts.get(id) ?? 0) + 1); + } + const duplicated = Array.from(counts.entries()) + .filter(([, count]) => count > 1) + .map(([id]) => id); + throw new Error( + `The following extensions had duplicate overrides: ${duplicated.join( + ', ', + )}`, + ); + } + + const configuredExtensions = [ ...pluginExtensions.map(({ source, ...extension }) => ({ extension, params: { source, - at: extension.at, + attachTo: extension.attachTo, disabled: extension.disabled, config: undefined as unknown, }, @@ -226,15 +282,40 @@ export function mergeExtensionParameters(options: { extension, params: { source: undefined, - at: extension.at, + attachTo: extension.attachTo, disabled: extension.disabled, config: undefined as unknown, }, })), ]; + // Install all extension overrides + for (const extension of overrideExtensions) { + // Check if our override is overriding an extension that already exists + const index = configuredExtensions.findIndex( + e => e.extension.id === extension.id, + ); + if (index !== -1) { + // Only implementation, attachment point and default disabled status are overridden, the source is kept + configuredExtensions[index].extension = extension; + configuredExtensions[index].params.attachTo = extension.attachTo; + configuredExtensions[index].params.disabled = extension.disabled; + } else { + // Add the extension as a new one when not overriding an existing one + configuredExtensions.push({ + extension, + params: { + source: undefined, + attachTo: extension.attachTo, + disabled: extension.disabled, + config: undefined, + }, + }); + } + } + const duplicatedExtensionIds = new Set(); - const duplicatedExtensionData = overrides.reduce< + const duplicatedExtensionData = configuredExtensions.reduce< Record> >((data, { extension, params }) => { const extensionId = extension.id; @@ -278,13 +359,13 @@ export function mergeExtensionParameters(options: { ); } - const existingIndex = overrides.findIndex( + const existingIndex = configuredExtensions.findIndex( e => e.extension.id === extensionId, ); if (existingIndex !== -1) { - const existing = overrides[existingIndex]; - if (overrideParam.at) { - existing.params.at = overrideParam.at; + const existing = configuredExtensions[existingIndex]; + if (overrideParam.attachTo) { + existing.params.attachTo = overrideParam.attachTo; } if (overrideParam.config) { // TODO: merge config? @@ -296,8 +377,8 @@ export function mergeExtensionParameters(options: { existing.params.disabled = Boolean(overrideParam.disabled); if (!existing.params.disabled) { // bump - overrides.splice(existingIndex, 1); - overrides.push(existing); + configuredExtensions.splice(existingIndex, 1); + configuredExtensions.push(existing); } } } else { @@ -305,11 +386,11 @@ export function mergeExtensionParameters(options: { } } - return overrides + return configuredExtensions .filter(override => !override.params.disabled) .map(param => ({ extension: param.extension, - at: param.params.at, + attachTo: param.params.attachTo, source: param.params.source, config: param.params.config, })); diff --git a/packages/frontend-plugin-api/CHANGELOG.md b/packages/frontend-plugin-api/CHANGELOG.md index 2295989418..056ff0b143 100644 --- a/packages/frontend-plugin-api/CHANGELOG.md +++ b/packages/frontend-plugin-api/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/frontend-plugin-api +## 0.2.0-next.2 + +### Minor Changes + +- 06432f900c: Extension attachment point is now configured via `attachTo: { id, input }` instead of `at: 'id/input'`. +- 4461d87d5a: Removed support for the new `useRouteRef`. + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/types@1.1.1 + ## 0.1.1-next.1 ### Patch Changes diff --git a/packages/frontend-plugin-api/api-report.md b/packages/frontend-plugin-api/api-report.md index e28d7d5993..36de6114e6 100644 --- a/packages/frontend-plugin-api/api-report.md +++ b/packages/frontend-plugin-api/api-report.md @@ -136,7 +136,10 @@ export interface CreateExtensionOptions< TConfig, > { // (undocumented) - at: string; + attachTo: { + id: string; + input: string; + }; // (undocumented) configSchema?: PortableSchema; // (undocumented) @@ -156,6 +159,11 @@ export interface CreateExtensionOptions< output: TOutput; } +// @public (undocumented) +export function createExtensionOverrides( + options: ExtensionOverridesOptions, +): ExtensionOverrides; + // @public export function createNavItemExtension(options: { id: string; @@ -182,7 +190,10 @@ export function createPageExtension< } ) & { id: string; - at?: string; + attachTo?: { + id: string; + input: string; + }; disabled?: boolean; inputs?: TInputs; routeRef?: RouteRef; @@ -209,7 +220,10 @@ export interface Extension { // (undocumented) $$type: '@backstage/Extension'; // (undocumented) - at: string; + attachTo: { + id: string; + input: string; + }; // (undocumented) configSchema?: PortableSchema; // (undocumented) @@ -304,6 +318,18 @@ export type ExtensionInputValues< >; }; +// @public (undocumented) +export interface ExtensionOverrides { + // (undocumented) + $$type: '@backstage/ExtensionOverrides'; +} + +// @public (undocumented) +export interface ExtensionOverridesOptions { + // (undocumented) + extensions: Extension[]; +} + // @public (undocumented) export type NavTarget = { title: string; @@ -324,7 +350,4 @@ export type PortableSchema = { parse: (input: unknown) => TOutput; schema: JsonObject; }; - -// @public (undocumented) -export function useRouteRef(routeRef: RouteRef): () => string; ``` diff --git a/packages/frontend-plugin-api/package.json b/packages/frontend-plugin-api/package.json index 7785b03b7d..a46bf181e4 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.1.1-next.1", + "version": "0.2.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/packages/frontend-plugin-api/src/extensions/createApiExtension.test.ts b/packages/frontend-plugin-api/src/extensions/createApiExtension.test.ts index 7426edb766..e90c0b6b85 100644 --- a/packages/frontend-plugin-api/src/extensions/createApiExtension.test.ts +++ b/packages/frontend-plugin-api/src/extensions/createApiExtension.test.ts @@ -33,7 +33,7 @@ describe('createApiExtension', () => { expect(extension).toEqual({ $$type: '@backstage/Extension', id: 'apis.test', - at: 'core/apis', + attachTo: { id: 'core', input: 'apis' }, disabled: false, configSchema: undefined, inputs: {}, @@ -67,7 +67,7 @@ describe('createApiExtension', () => { expect(extension).toEqual({ $$type: '@backstage/Extension', id: 'apis.test', - at: 'core/apis', + attachTo: { id: 'core', input: 'apis' }, disabled: false, configSchema: undefined, inputs: {}, diff --git a/packages/frontend-plugin-api/src/extensions/createApiExtension.ts b/packages/frontend-plugin-api/src/extensions/createApiExtension.ts index a142a5af61..8e5a9e9f33 100644 --- a/packages/frontend-plugin-api/src/extensions/createApiExtension.ts +++ b/packages/frontend-plugin-api/src/extensions/createApiExtension.ts @@ -51,7 +51,7 @@ export function createApiExtension< return createExtension({ id: `apis.${apiRef.id}`, - at: 'core/apis', + attachTo: { id: 'core', input: 'apis' }, inputs: extensionInputs, configSchema, output: { diff --git a/packages/frontend-plugin-api/src/extensions/createNavItemExtension.tsx b/packages/frontend-plugin-api/src/extensions/createNavItemExtension.tsx index 8c55531866..f208c975b7 100644 --- a/packages/frontend-plugin-api/src/extensions/createNavItemExtension.tsx +++ b/packages/frontend-plugin-api/src/extensions/createNavItemExtension.tsx @@ -31,7 +31,7 @@ export function createNavItemExtension(options: { const { id, routeRef, title, icon } = options; return createExtension({ id, - at: 'core.nav/items', + attachTo: { id: 'core.nav', input: 'items' }, configSchema: createSchemaFromZod(z => z.object({ title: z.string().default(title), diff --git a/packages/frontend-plugin-api/src/extensions/createPageExtension.test.tsx b/packages/frontend-plugin-api/src/extensions/createPageExtension.test.tsx index 7de6ee3253..125bf3495d 100644 --- a/packages/frontend-plugin-api/src/extensions/createPageExtension.test.tsx +++ b/packages/frontend-plugin-api/src/extensions/createPageExtension.test.tsx @@ -35,7 +35,7 @@ describe('createPageExtension', () => { ).toEqual({ $$type: '@backstage/Extension', id: 'test', - at: 'core.routes/routes', + attachTo: { id: 'core.routes', input: 'routes' }, configSchema: expect.anything(), disabled: false, inputs: {}, @@ -50,7 +50,7 @@ describe('createPageExtension', () => { expect( createPageExtension({ id: 'test', - at: 'other/place', + attachTo: { id: 'other', input: 'place' }, disabled: true, configSchema, inputs: { @@ -63,7 +63,7 @@ describe('createPageExtension', () => { ).toEqual({ $$type: '@backstage/Extension', id: 'test', - at: 'other/place', + attachTo: { id: 'other', input: 'place' }, configSchema: expect.anything(), disabled: true, inputs: { @@ -88,7 +88,7 @@ describe('createPageExtension', () => { ).toEqual({ $$type: '@backstage/Extension', id: 'test', - at: 'core.routes/routes', + attachTo: { id: 'core.routes', input: 'routes' }, configSchema: expect.anything(), disabled: false, inputs: {}, diff --git a/packages/frontend-plugin-api/src/extensions/createPageExtension.tsx b/packages/frontend-plugin-api/src/extensions/createPageExtension.tsx index 5460fb518d..712c55f896 100644 --- a/packages/frontend-plugin-api/src/extensions/createPageExtension.tsx +++ b/packages/frontend-plugin-api/src/extensions/createPageExtension.tsx @@ -44,7 +44,7 @@ export function createPageExtension< } ) & { id: string; - at?: string; + attachTo?: { id: string; input: string }; disabled?: boolean; inputs?: TInputs; routeRef?: RouteRef; @@ -63,7 +63,7 @@ export function createPageExtension< return createExtension({ id: options.id, - at: options.at ?? 'core.routes/routes', + attachTo: options.attachTo ?? { id: 'core.routes', input: 'routes' }, disabled: options.disabled, output: { element: coreExtensionData.reactElement, diff --git a/packages/frontend-plugin-api/src/extensions/createThemeExtension.ts b/packages/frontend-plugin-api/src/extensions/createThemeExtension.ts index 5c13dd199e..38763688a4 100644 --- a/packages/frontend-plugin-api/src/extensions/createThemeExtension.ts +++ b/packages/frontend-plugin-api/src/extensions/createThemeExtension.ts @@ -21,7 +21,7 @@ import { AppTheme } from '@backstage/core-plugin-api'; export function createThemeExtension(theme: AppTheme) { return createExtension({ id: `themes.${theme.id}`, - at: 'core/themes', + attachTo: { id: 'core', input: 'themes' }, output: { theme: coreExtensionData.theme, }, diff --git a/packages/frontend-plugin-api/src/index.ts b/packages/frontend-plugin-api/src/index.ts index 4e1a383899..512723b5d4 100644 --- a/packages/frontend-plugin-api/src/index.ts +++ b/packages/frontend-plugin-api/src/index.ts @@ -24,4 +24,3 @@ export * from './components'; export * from './extensions'; export * from './schema'; export * from './wiring'; -export * from './routing'; diff --git a/packages/frontend-plugin-api/src/routing/useRouteRef.ts b/packages/frontend-plugin-api/src/routing/useRouteRef.ts deleted file mode 100644 index ad1c16ea8e..0000000000 --- a/packages/frontend-plugin-api/src/routing/useRouteRef.ts +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright 2023 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { RouteRef } from '@backstage/core-plugin-api'; -// eslint-disable-next-line @backstage/no-forbidden-package-imports -import { RoutingContext } from '@backstage/frontend-app-api/src/routing/RoutingContext'; -import { useContext, useMemo } from 'react'; -import { useLocation } from 'react-router-dom'; - -/** @public */ -export function useRouteRef(routeRef: RouteRef): () => string { - const { pathname } = useLocation(); - const resolver = useContext(RoutingContext); - - const routeFunc = useMemo( - () => resolver && resolver.resolve(routeRef, { pathname }), - [resolver, routeRef, pathname], - ); - - if (!routeFunc) { - throw new Error(`Failed to resolve routeRef ${routeRef}`); - } - - return routeFunc; -} diff --git a/packages/frontend-plugin-api/src/wiring/createExtension.test.ts b/packages/frontend-plugin-api/src/wiring/createExtension.test.ts index 6f4a21399d..757bcd7e3d 100644 --- a/packages/frontend-plugin-api/src/wiring/createExtension.test.ts +++ b/packages/frontend-plugin-api/src/wiring/createExtension.test.ts @@ -26,7 +26,7 @@ describe('createExtension', () => { it('should create an extension with a simple output', () => { const extension = createExtension({ id: 'test', - at: 'root', + attachTo: { id: 'root', input: 'default' }, output: { foo: stringData, }, @@ -56,7 +56,7 @@ describe('createExtension', () => { it('should create an extension with a some optional output', () => { const extension = createExtension({ id: 'test', - at: 'root', + attachTo: { id: 'root', input: 'default' }, output: { foo: stringData, bar: stringData.optional(), @@ -94,7 +94,7 @@ describe('createExtension', () => { it('should create an extension with input', () => { const extension = createExtension({ id: 'test', - at: 'root', + attachTo: { id: 'root', input: 'default' }, inputs: { mixed: createExtensionInput({ required: stringData, diff --git a/packages/frontend-plugin-api/src/wiring/createExtension.ts b/packages/frontend-plugin-api/src/wiring/createExtension.ts index dd365a87d8..01d4962965 100644 --- a/packages/frontend-plugin-api/src/wiring/createExtension.ts +++ b/packages/frontend-plugin-api/src/wiring/createExtension.ts @@ -80,7 +80,7 @@ export interface CreateExtensionOptions< TConfig, > { id: string; - at: string; + attachTo: { id: string; input: string }; disabled?: boolean; inputs?: TInputs; output: TOutput; @@ -97,7 +97,7 @@ export interface CreateExtensionOptions< export interface Extension { $$type: '@backstage/Extension'; id: string; - at: string; + attachTo: { id: string; input: string }; disabled: boolean; inputs: AnyExtensionInputMap; output: AnyExtensionDataMap; diff --git a/packages/frontend-plugin-api/src/wiring/createExtensionOverrides.test.ts b/packages/frontend-plugin-api/src/wiring/createExtensionOverrides.test.ts new file mode 100644 index 0000000000..fa430a7834 --- /dev/null +++ b/packages/frontend-plugin-api/src/wiring/createExtensionOverrides.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 { createExtension } from './createExtension'; +import { + createExtensionOverrides, + toInternalExtensionOverrides, +} from './createExtensionOverrides'; + +describe('createExtensionOverrides', () => { + it('should create overrides without extensions', () => { + expect(createExtensionOverrides({ extensions: [] })).toMatchInlineSnapshot(` + { + "$$type": "@backstage/ExtensionOverrides", + "extensions": [], + "version": "v1", + } + `); + }); + + it('should create overrides with extensions', () => { + expect( + createExtensionOverrides({ + extensions: [ + createExtension({ + id: 'a', + attachTo: { id: 'core', input: 'apis' }, + output: {}, + factory() {}, + }), + ], + }), + ).toMatchInlineSnapshot(` + { + "$$type": "@backstage/ExtensionOverrides", + "extensions": [ + { + "$$type": "@backstage/Extension", + "attachTo": { + "id": "core", + "input": "apis", + }, + "disabled": false, + "factory": [Function], + "id": "a", + "inputs": {}, + "output": {}, + }, + ], + "version": "v1", + } + `); + }); + + it('should convert to internal overrides', () => { + const overrides = createExtensionOverrides({ + extensions: [ + createExtension({ + id: 'a', + attachTo: { id: 'core', input: 'apis' }, + output: {}, + factory() {}, + }), + ], + }); + const internal = toInternalExtensionOverrides(overrides); + expect(internal).toBe(overrides); + }); +}); diff --git a/packages/frontend-plugin-api/src/wiring/createExtensionOverrides.ts b/packages/frontend-plugin-api/src/wiring/createExtensionOverrides.ts new file mode 100644 index 0000000000..2c64229eb9 --- /dev/null +++ b/packages/frontend-plugin-api/src/wiring/createExtensionOverrides.ts @@ -0,0 +1,62 @@ +/* + * 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 { Extension } from './createExtension'; + +/** @public */ +export interface ExtensionOverridesOptions { + extensions: Extension[]; +} + +/** @public */ +export interface ExtensionOverrides { + $$type: '@backstage/ExtensionOverrides'; +} + +/** @internal */ +export interface InternalExtensionOverrides extends ExtensionOverrides { + version: string; + extensions: Extension[]; +} + +/** @public */ +export function createExtensionOverrides( + options: ExtensionOverridesOptions, +): ExtensionOverrides { + return { + $$type: '@backstage/ExtensionOverrides', + version: 'v1', + extensions: options.extensions, + } as InternalExtensionOverrides; +} + +/** @internal */ +export function toInternalExtensionOverrides( + overrides: ExtensionOverrides, +): InternalExtensionOverrides { + const internal = overrides as InternalExtensionOverrides; + if (internal.$$type !== '@backstage/ExtensionOverrides') { + throw new Error( + `Invalid translation resource, bad type '${internal.$$type}'`, + ); + } + if (internal.version !== 'v1') { + throw new Error( + `Invalid translation resource, bad version '${internal.version}'`, + ); + } + return internal; +} diff --git a/packages/frontend-plugin-api/src/wiring/createPlugin.test.ts b/packages/frontend-plugin-api/src/wiring/createPlugin.test.ts index b14838c17a..07841b3a9a 100644 --- a/packages/frontend-plugin-api/src/wiring/createPlugin.test.ts +++ b/packages/frontend-plugin-api/src/wiring/createPlugin.test.ts @@ -30,7 +30,7 @@ const nameExtensionDataRef = createExtensionDataRef('name'); const TechRadarPage = createExtension({ id: 'plugin.techradar.page', - at: 'test.output/names', + attachTo: { id: 'test.output', input: 'names' }, output: { name: nameExtensionDataRef, }, @@ -41,7 +41,7 @@ const TechRadarPage = createExtension({ const CatalogPage = createExtension({ id: 'plugin.catalog.page', - at: 'test.output/names', + attachTo: { id: 'test.output', input: 'names' }, output: { name: nameExtensionDataRef, }, @@ -55,7 +55,7 @@ const CatalogPage = createExtension({ const TechDocsAddon = createExtension({ id: 'plugin.techdocs.addon.example', - at: 'plugin.techdocs.page/addons', + attachTo: { id: 'plugin.techdocs.page', input: 'addons' }, output: { name: nameExtensionDataRef, }, @@ -69,7 +69,7 @@ const TechDocsAddon = createExtension({ const TechDocsPage = createExtension({ id: 'plugin.techdocs.page', - at: 'test.output/names', + attachTo: { id: 'test.output', input: 'names' }, inputs: { addons: createExtensionInput({ name: nameExtensionDataRef, @@ -85,7 +85,7 @@ const TechDocsPage = createExtension({ const outputExtension = createExtension({ id: 'test.output', - at: 'root', + attachTo: { id: 'root', input: 'default' }, inputs: { names: createExtensionInput({ name: nameExtensionDataRef, @@ -104,14 +104,14 @@ const outputExtension = createExtension({ }); function createTestAppRoot({ - plugins, + features, config = {}, }: { - plugins: BackstagePlugin[]; + features: BackstagePlugin[]; config: JsonObject; }) { return createApp({ - plugins: plugins, + features, configLoader: async () => new MockConfigApi(config), }).createRoot(); } @@ -132,7 +132,7 @@ describe('createPlugin', () => { await renderWithEffects( createTestAppRoot({ - plugins: [plugin], + features: [plugin], config: { app: { extensions: [{ 'core.layout': false }] } }, }), ); @@ -157,7 +157,7 @@ describe('createPlugin', () => { await renderWithEffects( createTestAppRoot({ - plugins: [plugin], + features: [plugin], config: { app: { extensions: [ diff --git a/packages/frontend-plugin-api/src/wiring/index.ts b/packages/frontend-plugin-api/src/wiring/index.ts index b7f0acefd9..4e4104de97 100644 --- a/packages/frontend-plugin-api/src/wiring/index.ts +++ b/packages/frontend-plugin-api/src/wiring/index.ts @@ -38,3 +38,8 @@ export { type BackstagePlugin, type PluginOptions, } from './createPlugin'; +export { + createExtensionOverrides, + type ExtensionOverrides, + type ExtensionOverridesOptions, +} from './createExtensionOverrides'; diff --git a/packages/integration-aws-node/CHANGELOG.md b/packages/integration-aws-node/CHANGELOG.md index e62b3ff7fe..e1004246ff 100644 --- a/packages/integration-aws-node/CHANGELOG.md +++ b/packages/integration-aws-node/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/integration-aws-node +## 0.1.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.3-next.0 + - @backstage/config@1.1.1-next.0 + ## 0.1.6 ### Patch Changes diff --git a/packages/integration-aws-node/package.json b/packages/integration-aws-node/package.json index cfe691b85c..38948f03ad 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.6", + "version": "0.1.7-next.0", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/integration-react/CHANGELOG.md b/packages/integration-react/CHANGELOG.md index 8ef2df3709..9374887da8 100644 --- a/packages/integration-react/CHANGELOG.md +++ b/packages/integration-react/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/integration-react +## 1.1.20-next.2 + +### Patch Changes + +- 0b55f773a7: Removed some unused dependencies +- Updated dependencies + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/integration@1.7.1-next.1 + - @backstage/config@1.1.1-next.0 + ## 1.1.20-next.1 ### Patch Changes diff --git a/packages/integration-react/package.json b/packages/integration-react/package.json index 55e15f9b22..4f25bc3578 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.20-next.1", + "version": "1.1.20-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -31,15 +31,11 @@ }, "dependencies": { "@backstage/config": "workspace:^", - "@backstage/core-components": "workspace:^", "@backstage/core-plugin-api": "workspace:^", "@backstage/integration": "workspace:^", - "@backstage/theme": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.61", - "@types/react": "^16.13.1 || ^17.0.0", - "react-use": "^17.2.4" + "@types/react": "^16.13.1 || ^17.0.0" }, "peerDependencies": { "react": "^16.13.1 || ^17.0.0", @@ -48,12 +44,11 @@ }, "devDependencies": { "@backstage/cli": "workspace:^", + "@backstage/core-components": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", "@testing-library/dom": "^8.0.0", "@testing-library/jest-dom": "^5.10.1", - "@testing-library/react": "^12.1.3", - "@testing-library/user-event": "^14.0.0", "msw": "^1.0.0" }, "files": [ diff --git a/packages/integration/CHANGELOG.md b/packages/integration/CHANGELOG.md index 961e6eb869..93332a6b23 100644 --- a/packages/integration/CHANGELOG.md +++ b/packages/integration/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/integration +## 1.7.1-next.1 + +### Patch Changes + +- 0b55f773a7: Removed some unused dependencies +- Updated dependencies + - @backstage/config@1.1.1-next.0 + ## 1.7.1-next.0 ### Patch Changes diff --git a/packages/integration/package.json b/packages/integration/package.json index ab78c07edf..45d9474336 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.1-next.0", + "version": "1.7.1-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -35,7 +35,6 @@ "dependencies": { "@azure/identity": "^3.2.1", "@backstage/config": "workspace:^", - "@backstage/errors": "workspace:^", "@octokit/auth-app": "^4.0.0", "@octokit/rest": "^19.0.3", "cross-fetch": "^3.1.5", diff --git a/packages/repo-tools/CHANGELOG.md b/packages/repo-tools/CHANGELOG.md index 0864fd7347..fc5cae179c 100644 --- a/packages/repo-tools/CHANGELOG.md +++ b/packages/repo-tools/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/repo-tools +## 0.3.5-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/errors@1.2.3-next.0 + - @backstage/cli-common@0.1.13-next.0 + - @backstage/cli-node@0.1.5-next.1 + ## 0.3.5-next.0 ### Patch Changes diff --git a/packages/repo-tools/package.json b/packages/repo-tools/package.json index 8fc04fce71..304df34bec 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.3.5-next.0", + "version": "0.3.5-next.1", "publishConfig": { "access": "public" }, diff --git a/packages/techdocs-cli-embedded-app/CHANGELOG.md b/packages/techdocs-cli-embedded-app/CHANGELOG.md index 45494ccba1..f54090b226 100644 --- a/packages/techdocs-cli-embedded-app/CHANGELOG.md +++ b/packages/techdocs-cli-embedded-app/CHANGELOG.md @@ -1,5 +1,24 @@ # techdocs-cli-embedded-app +## 0.2.87-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/cli@0.23.0-next.2 + - @backstage/core-app-api@1.11.0-next.2 + - @backstage/plugin-techdocs@1.7.1-next.2 + - @backstage/integration-react@1.1.20-next.2 + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog@1.14.0-next.2 + - @backstage/theme@0.4.3-next.0 + - @backstage/app-defaults@1.4.4-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/test-utils@1.4.4-next.2 + - @backstage/plugin-techdocs-react@1.1.12-next.2 + ## 0.2.87-next.1 ### Patch Changes diff --git a/packages/techdocs-cli-embedded-app/package.json b/packages/techdocs-cli-embedded-app/package.json index 21eee41e19..55e78486cf 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.87-next.1", + "version": "0.2.87-next.2", "private": true, "backstage": { "role": "frontend" diff --git a/packages/techdocs-cli/CHANGELOG.md b/packages/techdocs-cli/CHANGELOG.md index abafa808fc..a6592085bb 100644 --- a/packages/techdocs-cli/CHANGELOG.md +++ b/packages/techdocs-cli/CHANGELOG.md @@ -1,5 +1,20 @@ # @techdocs/cli +## 1.6.0-next.2 + +### Minor Changes + +- d06b30b050: Add possibility to use a mkdocs config file with a different name than `mkdocs. with the serve command using the `--mkdocs-config-file-name` argument + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-techdocs-node@1.9.0-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/cli-common@0.1.13-next.0 + - @backstage/config@1.1.1-next.0 + ## 1.5.2-next.1 ### Patch Changes diff --git a/packages/techdocs-cli/cli-report.md b/packages/techdocs-cli/cli-report.md index 5f148daf24..890718b0d2 100644 --- a/packages/techdocs-cli/cli-report.md +++ b/packages/techdocs-cli/cli-report.md @@ -106,6 +106,7 @@ Options: -v --verbose --preview-app-bundle-path --preview-app-port + -c, --mkdocs-config-file-name -h, --help ``` diff --git a/packages/techdocs-cli/package.json b/packages/techdocs-cli/package.json index 14120ab801..516a7d108e 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.5.2-next.1", + "version": "1.6.0-next.2", "publishConfig": { "access": "public" }, diff --git a/packages/techdocs-cli/src/commands/index.ts b/packages/techdocs-cli/src/commands/index.ts index 3321bb7f43..10a00da513 100644 --- a/packages/techdocs-cli/src/commands/index.ts +++ b/packages/techdocs-cli/src/commands/index.ts @@ -285,6 +285,10 @@ export function registerCommands(program: Command) { 'Port for the preview app to be served on', defaultPreviewAppPort, ) + .option( + '-c, --mkdocs-config-file-name ', + 'Mkdocs config file name', + ) .hook('preAction', command => { if ( command.opts().previewAppPort !== defaultPreviewAppPort && diff --git a/packages/techdocs-cli/src/commands/serve/serve.ts b/packages/techdocs-cli/src/commands/serve/serve.ts index 9e2e521546..5fcf1787d3 100644 --- a/packages/techdocs-cli/src/commands/serve/serve.ts +++ b/packages/techdocs-cli/src/commands/serve/serve.ts @@ -65,11 +65,13 @@ export default async function serve(opts: OptionValues) { const mkdocsExpectedDevAddr = opts.docker ? mkdocsDockerAddr : mkdocsLocalAddr; + const mkdocsConfigFileName = opts.mkdocsConfigFileName; + const siteName = opts.siteName; - const { path: mkdocsYmlPath, configIsTemporary } = await getMkdocsYml( - './', - opts.siteName, - ); + const { path: mkdocsYmlPath, configIsTemporary } = await getMkdocsYml('./', { + name: siteName, + mkdocsConfigFileName, + }); let mkdocsServerHasStarted = false; const mkdocsLogFunc: LogFunc = data => { @@ -104,6 +106,7 @@ export default async function serve(opts: OptionValues) { useDocker: opts.docker, stdoutLogFunc: mkdocsLogFunc, stderrLogFunc: mkdocsLogFunc, + mkdocsConfigFileName: mkdocsYmlPath, }); // Wait until mkdocs server has started so that Backstage starts with docs loaded diff --git a/packages/techdocs-cli/src/lib/mkdocsServer.ts b/packages/techdocs-cli/src/lib/mkdocsServer.ts index 5ca7e47573..42409acb46 100644 --- a/packages/techdocs-cli/src/lib/mkdocsServer.ts +++ b/packages/techdocs-cli/src/lib/mkdocsServer.ts @@ -25,6 +25,7 @@ export const runMkdocsServer = async (options: { dockerOptions?: string[]; stdoutLogFunc?: LogFunc; stderrLogFunc?: LogFunc; + mkdocsConfigFileName?: string; }): Promise => { const port = options.port ?? '8000'; const useDocker = options.useDocker ?? true; @@ -51,6 +52,9 @@ export const runMkdocsServer = async (options: { 'serve', '--dev-addr', `0.0.0.0:${port}`, + ...(options.mkdocsConfigFileName + ? ['--config-file', options.mkdocsConfigFileName] + : []), ], { stdoutLogFunc: options.stdoutLogFunc, @@ -59,8 +63,19 @@ export const runMkdocsServer = async (options: { ); } - return await run('mkdocs', ['serve', '--dev-addr', `127.0.0.1:${port}`], { - stdoutLogFunc: options.stdoutLogFunc, - stderrLogFunc: options.stderrLogFunc, - }); + return await run( + 'mkdocs', + [ + 'serve', + '--dev-addr', + `127.0.0.1:${port}`, + ...(options.mkdocsConfigFileName + ? ['--config-file', options.mkdocsConfigFileName] + : []), + ], + { + stdoutLogFunc: options.stdoutLogFunc, + stderrLogFunc: options.stderrLogFunc, + }, + ); }; diff --git a/packages/test-utils/CHANGELOG.md b/packages/test-utils/CHANGELOG.md index 4cab843d01..9b9b90f838 100644 --- a/packages/test-utils/CHANGELOG.md +++ b/packages/test-utils/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/test-utils +## 1.4.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-app-api@1.11.0-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/theme@0.4.3-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-permission-common@0.7.9-next.0 + - @backstage/plugin-permission-react@0.4.16-next.1 + ## 1.4.4-next.1 ### Patch Changes diff --git a/packages/test-utils/package.json b/packages/test-utils/package.json index b972a6a824..14bda275e7 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.4-next.1", + "version": "1.4.4-next.2", "publishConfig": { "access": "public" }, diff --git a/packages/theme/CHANGELOG.md b/packages/theme/CHANGELOG.md index 445bc6055a..cf7d552883 100644 --- a/packages/theme/CHANGELOG.md +++ b/packages/theme/CHANGELOG.md @@ -1,5 +1,11 @@ # @backstage/theme +## 0.4.3-next.0 + +### Patch Changes + +- 5ad5344756: Added support for string `fontSize` values (e.g. `"2.5rem"`) in themes in addition to numbers. Also added an optional `fontFamily` prop for header typography variants to allow further customization. + ## 0.4.2 ### Patch Changes diff --git a/packages/theme/api-report.md b/packages/theme/api-report.md index d6380ee6e8..4ab05e8770 100644 --- a/packages/theme/api-report.md +++ b/packages/theme/api-report.md @@ -117,32 +117,38 @@ export type BackstageTypography = { htmlFontSize: number; fontFamily: string; h1: { - fontSize: number; + fontFamily?: string; + fontSize: number | string; fontWeight: number; marginBottom: number; }; h2: { - fontSize: number; + fontFamily?: string; + fontSize: number | string; fontWeight: number; marginBottom: number; }; h3: { - fontSize: number; + fontFamily?: string; + fontSize: number | string; fontWeight: number; marginBottom: number; }; h4: { - fontSize: number; + fontFamily?: string; + fontSize: number | string; fontWeight: number; marginBottom: number; }; h5: { - fontSize: number; + fontFamily?: string; + fontSize: number | string; fontWeight: number; marginBottom: number; }; h6: { - fontSize: number; + fontFamily?: string; + fontSize: number | string; fontWeight: number; marginBottom: number; }; diff --git a/packages/theme/package.json b/packages/theme/package.json index 98be3baddd..2129067042 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.2", + "version": "0.4.3-next.0", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/packages/theme/src/base/createBaseThemeOptions.ts b/packages/theme/src/base/createBaseThemeOptions.ts index bca56114d7..f0c8ab5fe9 100644 --- a/packages/theme/src/base/createBaseThemeOptions.ts +++ b/packages/theme/src/base/createBaseThemeOptions.ts @@ -57,7 +57,7 @@ export function createBaseThemeOptions( throw new Error(`${defaultPageTheme} is not defined in pageTheme.`); } - const defaultTypography = { + const defaultTypography: BackstageTypography = { htmlFontSize, fontFamily, h1: { diff --git a/packages/theme/src/base/types.ts b/packages/theme/src/base/types.ts index 3e34a0abb7..d62d944741 100644 --- a/packages/theme/src/base/types.ts +++ b/packages/theme/src/base/types.ts @@ -124,32 +124,38 @@ export type BackstageTypography = { htmlFontSize: number; fontFamily: string; h1: { - fontSize: number; + fontFamily?: string; + fontSize: number | string; fontWeight: number; marginBottom: number; }; h2: { - fontSize: number; + fontFamily?: string; + fontSize: number | string; fontWeight: number; marginBottom: number; }; h3: { - fontSize: number; + fontFamily?: string; + fontSize: number | string; fontWeight: number; marginBottom: number; }; h4: { - fontSize: number; + fontFamily?: string; + fontSize: number | string; fontWeight: number; marginBottom: number; }; h5: { - fontSize: number; + fontFamily?: string; + fontSize: number | string; fontWeight: number; marginBottom: number; }; h6: { - fontSize: number; + fontFamily?: string; + fontSize: number | string; fontWeight: number; marginBottom: number; }; diff --git a/plugins/adr-backend/CHANGELOG.md b/plugins/adr-backend/CHANGELOG.md index e2acb92554..44743f856a 100644 --- a/plugins/adr-backend/CHANGELOG.md +++ b/plugins/adr-backend/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-adr-backend +## 0.4.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/integration@1.7.1-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/catalog-client@1.4.5-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-adr-common@0.2.16-next.1 + - @backstage/plugin-search-common@1.2.7-next.0 + ## 0.4.2-next.1 ### Patch Changes diff --git a/plugins/adr-backend/package.json b/plugins/adr-backend/package.json index 580e3064af..444e238158 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.2-next.1", + "version": "0.4.3-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/adr-common/CHANGELOG.md b/plugins/adr-common/CHANGELOG.md index 961562e016..32ac484e17 100644 --- a/plugins/adr-common/CHANGELOG.md +++ b/plugins/adr-common/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-adr-common +## 0.2.16-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/integration@1.7.1-next.1 + - @backstage/plugin-search-common@1.2.7-next.0 + ## 0.2.16-next.0 ### Patch Changes diff --git a/plugins/adr-common/package.json b/plugins/adr-common/package.json index 5e8e236b42..d1c32a852a 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.16-next.0", + "version": "0.2.16-next.1", "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 950e2c7ca3..a52862b7f7 100644 --- a/plugins/adr/CHANGELOG.md +++ b/plugins/adr/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-adr +## 0.6.8-next.2 + +### Patch Changes + +- 499e34656e: Fix icon alignment in `AdrSearchResultListItem` +- Updated dependencies + - @backstage/frontend-plugin-api@0.2.0-next.2 + - @backstage/integration-react@1.1.20-next.2 + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/plugin-search-react@1.7.1-next.2 + - @backstage/theme@0.4.3-next.0 + - @backstage/plugin-adr-common@0.2.16-next.1 + - @backstage/plugin-search-common@1.2.7-next.0 + ## 0.6.8-next.1 ### Patch Changes diff --git a/plugins/adr/package.json b/plugins/adr/package.json index 94d8250993..6624bf38d5 100644 --- a/plugins/adr/package.json +++ b/plugins/adr/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-adr", - "version": "0.6.8-next.1", + "version": "0.6.8-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/adr/src/search/AdrSearchResultListItem.tsx b/plugins/adr/src/search/AdrSearchResultListItem.tsx index 118333a439..eebf74861d 100644 --- a/plugins/adr/src/search/AdrSearchResultListItem.tsx +++ b/plugins/adr/src/search/AdrSearchResultListItem.tsx @@ -33,6 +33,9 @@ import { ResultHighlight } from '@backstage/plugin-search-common'; import { HighlightedSearchResultText } from '@backstage/plugin-search-react'; const useStyles = makeStyles({ + item: { + display: 'flex', + }, flexContainer: { flexWrap: 'wrap', }, @@ -66,59 +69,63 @@ export function AdrSearchResultListItem(props: AdrSearchResultListItemProps) { return ( <> - + {icon && {icon}} - - {highlight?.fields.title ? ( - - ) : ( - result.title - )} - - } - secondary={ - - {highlight?.fields.text ? ( - - ) : ( - result.text - )} - - } - /> - - + + {highlight?.fields.title ? ( + + ) : ( + result.title + )} + + } + secondary={ + + {highlight?.fields.text ? ( + + ) : ( + result.text + )} + + } /> - {result.status && ( - - )} - {result.date && } - + + + {result.status && ( + + )} + {result.date && ( + + )} + + diff --git a/plugins/airbrake-backend/CHANGELOG.md b/plugins/airbrake-backend/CHANGELOG.md index ba6e94f7eb..948861944a 100644 --- a/plugins/airbrake-backend/CHANGELOG.md +++ b/plugins/airbrake-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-airbrake-backend +## 0.3.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 + ## 0.3.2-next.1 ### Patch Changes diff --git a/plugins/airbrake-backend/package.json b/plugins/airbrake-backend/package.json index e7bbcc9310..cccacd8197 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.2-next.1", + "version": "0.3.3-next.2", "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 712f785b2e..f930cc50df 100644 --- a/plugins/airbrake/CHANGELOG.md +++ b/plugins/airbrake/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-airbrake +## 0.3.25-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/theme@0.4.3-next.0 + - @backstage/dev-utils@1.0.22-next.2 + - @backstage/test-utils@1.4.4-next.2 + ## 0.3.25-next.1 ### Patch Changes diff --git a/plugins/airbrake/package.json b/plugins/airbrake/package.json index 003da7d232..65a5706ae8 100644 --- a/plugins/airbrake/package.json +++ b/plugins/airbrake/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-airbrake", - "version": "0.3.25-next.1", + "version": "0.3.25-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/allure/CHANGELOG.md b/plugins/allure/CHANGELOG.md index 956f4d79fa..591036d45e 100644 --- a/plugins/allure/CHANGELOG.md +++ b/plugins/allure/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-allure +## 0.1.41-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/theme@0.4.3-next.0 + ## 0.1.41-next.1 ### Patch Changes diff --git a/plugins/allure/package.json b/plugins/allure/package.json index fde188d1c8..dec5815989 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.41-next.1", + "version": "0.1.41-next.2", "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 251990d5c3..05f2a97e4a 100644 --- a/plugins/analytics-module-ga/CHANGELOG.md +++ b/plugins/analytics-module-ga/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-analytics-module-ga +## 0.1.34-next.2 + +### Patch Changes + +- 0b55f773a7: Removed some unused dependencies +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/theme@0.4.3-next.0 + - @backstage/config@1.1.1-next.0 + ## 0.1.34-next.1 ### Patch Changes diff --git a/plugins/analytics-module-ga/package.json b/plugins/analytics-module-ga/package.json index 86f0a4204e..c06717bb68 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.34-next.1", + "version": "0.1.34-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -36,7 +36,6 @@ "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.61", - "prop-types": "^15.7.2", "react-ga": "^3.3.0", "react-use": "^17.2.4" }, diff --git a/plugins/analytics-module-ga4/CHANGELOG.md b/plugins/analytics-module-ga4/CHANGELOG.md index d79ec11dea..d50658a59f 100644 --- a/plugins/analytics-module-ga4/CHANGELOG.md +++ b/plugins/analytics-module-ga4/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-analytics-module-ga4 +## 0.1.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/theme@0.4.3-next.0 + - @backstage/config@1.1.1-next.0 + ## 0.1.5-next.1 ### Patch Changes diff --git a/plugins/analytics-module-ga4/package.json b/plugins/analytics-module-ga4/package.json index ab9611f5e8..e719aa88d9 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.5-next.1", + "version": "0.1.5-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/analytics-module-newrelic-browser/CHANGELOG.md b/plugins/analytics-module-newrelic-browser/CHANGELOG.md index 7bfaf1c262..b22d4e64fc 100644 --- a/plugins/analytics-module-newrelic-browser/CHANGELOG.md +++ b/plugins/analytics-module-newrelic-browser/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-analytics-module-newrelic-browser +## 0.0.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/config@1.1.1-next.0 + ## 0.0.3-next.1 ### Patch Changes diff --git a/plugins/analytics-module-newrelic-browser/package.json b/plugins/analytics-module-newrelic-browser/package.json index c27be5f94e..d3c29f0e6c 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.3-next.1", + "version": "0.0.3-next.2", "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 4c0f6a418d..cd7d737b8e 100644 --- a/plugins/apache-airflow/CHANGELOG.md +++ b/plugins/apache-airflow/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-apache-airflow +## 0.2.16-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + ## 0.2.16-next.1 ### Patch Changes diff --git a/plugins/apache-airflow/package.json b/plugins/apache-airflow/package.json index 28f8f81ab0..7a0c7cbcc2 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.16-next.1", + "version": "0.2.16-next.2", "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 021c55b807..609a552a55 100644 --- a/plugins/api-docs/CHANGELOG.md +++ b/plugins/api-docs/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-api-docs +## 0.9.12-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/plugin-catalog@1.14.0-next.2 + - @backstage/theme@0.4.3-next.0 + ## 0.9.12-next.1 ### Patch Changes diff --git a/plugins/api-docs/package.json b/plugins/api-docs/package.json index f257d85d82..c115ac4444 100644 --- a/plugins/api-docs/package.json +++ b/plugins/api-docs/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-api-docs", "description": "A Backstage plugin that helps represent API entities in the frontend", - "version": "0.9.12-next.1", + "version": "0.9.12-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/api-docs/src/setupTests.ts b/plugins/api-docs/src/setupTests.ts index a41fe2eeb4..9bcfe5e887 100644 --- a/plugins/api-docs/src/setupTests.ts +++ b/plugins/api-docs/src/setupTests.ts @@ -16,6 +16,10 @@ import '@testing-library/jest-dom'; +Object.defineProperty(global, 'TextEncoder', { + value: require('util').TextEncoder, +}); + Object.defineProperty(global, 'TextDecoder', { value: require('util').TextDecoder, }); diff --git a/plugins/apollo-explorer/CHANGELOG.md b/plugins/apollo-explorer/CHANGELOG.md index 869e487cff..5b7905e69f 100644 --- a/plugins/apollo-explorer/CHANGELOG.md +++ b/plugins/apollo-explorer/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-apollo-explorer +## 0.1.16-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/theme@0.4.3-next.0 + ## 0.1.16-next.1 ### Patch Changes diff --git a/plugins/apollo-explorer/package.json b/plugins/apollo-explorer/package.json index 6c7eb11c50..95f743f130 100644 --- a/plugins/apollo-explorer/package.json +++ b/plugins/apollo-explorer/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-apollo-explorer", - "version": "0.1.16-next.1", + "version": "0.1.16-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/app-backend/CHANGELOG.md b/plugins/app-backend/CHANGELOG.md index d54709fbc2..7478189eba 100644 --- a/plugins/app-backend/CHANGELOG.md +++ b/plugins/app-backend/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-app-backend +## 0.3.54-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/config-loader@1.5.1-next.1 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-app-node@0.1.6-next.2 + ## 0.3.53-next.1 ### Patch Changes diff --git a/plugins/app-backend/package.json b/plugins/app-backend/package.json index 0c0ecc8f60..a8425c5186 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.53-next.1", + "version": "0.3.54-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -69,7 +69,6 @@ "@backstage/cli": "workspace:^", "@backstage/types": "workspace:^", "@types/supertest": "^2.0.8", - "mock-fs": "^5.2.0", "msw": "^1.0.0", "node-fetch": "^2.6.7", "supertest": "^6.1.3" diff --git a/plugins/app-backend/src/lib/assets/findStaticAssets.test.ts b/plugins/app-backend/src/lib/assets/findStaticAssets.test.ts index 6527c28ea4..0d5cd277cf 100644 --- a/plugins/app-backend/src/lib/assets/findStaticAssets.test.ts +++ b/plugins/app-backend/src/lib/assets/findStaticAssets.test.ts @@ -14,40 +14,40 @@ * limitations under the License. */ -import mockFs from 'mock-fs'; +import { createMockDirectory } from '@backstage/backend-test-utils'; import { findStaticAssets } from './findStaticAssets'; describe('findStaticAssets', () => { + const mockDir = createMockDirectory(); + afterEach(() => { - mockFs.restore(); + mockDir.clear(); }); it('should find assets', async () => { - mockFs({ - '/test': { - 'a.js': 'alert("hello")', - 'a.js.map': '', - 'b.js': 'b', - 'b.js.map': '', - js: { - 'd.js': 'd', - 'd.js.map': '', - x: { + mockDir.setContent({ + 'a.js': 'alert("hello")', + 'a.js.map': '', + 'b.js': 'b', + 'b.js.map': '', + js: { + 'd.js': 'd', + 'd.js.map': '', + x: { + 'e.map': '', + y: { 'e.map': '', - y: { + z: { + 'e.js': 'e', 'e.map': '', - z: { - 'e.js': 'e', - 'e.map': '', - }, }, }, }, - styles: { 'c.css': 'body { color: red; }' }, }, + styles: { 'c.css': 'body { color: red; }' }, }); - const assets = await findStaticAssets('/test'); + const assets = await findStaticAssets(mockDir.path); expect(assets.length).toBe(5); expect(assets.map(a => a.path)).toEqual( expect.arrayContaining([ diff --git a/plugins/app-backend/src/service/appPlugin.test.ts b/plugins/app-backend/src/service/appPlugin.test.ts index 09061b287d..647697c204 100644 --- a/plugins/app-backend/src/service/appPlugin.test.ts +++ b/plugins/app-backend/src/service/appPlugin.test.ts @@ -14,33 +14,36 @@ * limitations under the License. */ -import mockFs from 'mock-fs'; -import { resolve as resolvePath } from 'path'; import fetch from 'node-fetch'; -import { mockServices, startTestBackend } from '@backstage/backend-test-utils'; +import { + createMockDirectory, + mockServices, + startTestBackend, +} from '@backstage/backend-test-utils'; import { appPlugin } from './appPlugin'; import { createRootLogger } from '@backstage/backend-common'; +import { overridePackagePathResolution } from '@backstage/backend-common/testUtils'; + +const mockDir = createMockDirectory(); +overridePackagePathResolution({ + packageName: 'app', + path: mockDir.path, +}); // Make sure root logger is initialized ahead of FS mock createRootLogger(); describe('appPlugin', () => { beforeEach(() => { - mockFs({ - [resolvePath(process.cwd(), 'node_modules/app')]: { - 'package.json': '{}', - dist: { - static: {}, - 'index.html': 'winning', - }, + mockDir.setContent({ + 'package.json': '{}', + dist: { + static: {}, + 'index.html': 'winning', }, }); }); - afterEach(() => { - mockFs.restore(); - }); - it('boots', async () => { const { server } = await startTestBackend({ features: [ diff --git a/plugins/app-node/CHANGELOG.md b/plugins/app-node/CHANGELOG.md index d1d2284dce..b6bb4d4425 100644 --- a/plugins/app-node/CHANGELOG.md +++ b/plugins/app-node/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-app-node +## 0.1.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.6.6-next.2 + ## 0.1.5-next.1 ### Patch Changes diff --git a/plugins/app-node/package.json b/plugins/app-node/package.json index 5e21650501..f25333588a 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.5-next.1", + "version": "0.1.6-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/auth-backend-module-gcp-iap-provider/CHANGELOG.md b/plugins/auth-backend-module-gcp-iap-provider/CHANGELOG.md index 8c14e20d07..4c57589972 100644 --- a/plugins/auth-backend-module-gcp-iap-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-gcp-iap-provider/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-auth-backend-module-gcp-iap-provider +## 0.2.0-next.2 + +### Minor Changes + +- 6f142d5356: **BREAKING** `gcpIapAuthenticator.initialize()` is no longer `async` + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.4.0-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/types@1.1.1 + ## 0.1.2-next.1 ### 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 7e9cd78fa4..65f4c1c0ed 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.1.2-next.1", + "version": "0.2.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/auth-backend-module-gcp-iap-provider/src/authenticator.test.ts b/plugins/auth-backend-module-gcp-iap-provider/src/authenticator.test.ts index 51efbe1a04..5f90d3a379 100644 --- a/plugins/auth-backend-module-gcp-iap-provider/src/authenticator.test.ts +++ b/plugins/auth-backend-module-gcp-iap-provider/src/authenticator.test.ts @@ -29,7 +29,7 @@ jest.mock('./helpers', () => ({ describe('GcpIapProvider', () => { it('should find default JWT header', async () => { - const ctx = await gcpIapAuthenticator.initialize({ + const ctx = gcpIapAuthenticator.initialize({ config: mockServices.rootConfig({ data: { audience: 'my-audience' } }), }); await expect( @@ -50,7 +50,7 @@ describe('GcpIapProvider', () => { it('should find custom JWT header', async () => { const jwtHeader = 'x-custom-header'; - const ctx = await gcpIapAuthenticator.initialize({ + const ctx = gcpIapAuthenticator.initialize({ config: mockServices.rootConfig({ data: { audience: 'my-audience', jwtHeader }, }), @@ -70,7 +70,7 @@ describe('GcpIapProvider', () => { }); it('should throw if header is missing', async () => { - const ctx = await gcpIapAuthenticator.initialize({ + const ctx = gcpIapAuthenticator.initialize({ config: mockServices.rootConfig({ data: { audience: 'my-audience' }, }), diff --git a/plugins/auth-backend-module-gcp-iap-provider/src/authenticator.ts b/plugins/auth-backend-module-gcp-iap-provider/src/authenticator.ts index ca104ded86..9bb68fcbb3 100644 --- a/plugins/auth-backend-module-gcp-iap-provider/src/authenticator.ts +++ b/plugins/auth-backend-module-gcp-iap-provider/src/authenticator.ts @@ -29,7 +29,7 @@ export const gcpIapAuthenticator = createProxyAuthenticator({ defaultProfileTransform: async (result: GcpIapResult) => { return { profile: { email: result.iapToken.email } }; }, - async initialize({ config }) { + initialize({ config }) { const audience = config.getString('audience'); const jwtHeader = config.getOptionalString('jwtHeader') ?? DEFAULT_IAP_JWT_HEADER; diff --git a/plugins/auth-backend-module-github-provider/CHANGELOG.md b/plugins/auth-backend-module-github-provider/CHANGELOG.md index d98d330281..4bebdabd8b 100644 --- a/plugins/auth-backend-module-github-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-github-provider/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-auth-backend-module-github-provider +## 0.1.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-auth-node@0.4.0-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + ## 0.1.2-next.1 ### Patch Changes diff --git a/plugins/auth-backend-module-github-provider/package.json b/plugins/auth-backend-module-github-provider/package.json index 25563c32c5..a9bcc1f21f 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.2-next.1", + "version": "0.1.3-next.2", "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 cafc7ec1a4..eca91f503e 100644 --- a/plugins/auth-backend-module-gitlab-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-gitlab-provider/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-auth-backend-module-gitlab-provider +## 0.1.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-auth-node@0.4.0-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + ## 0.1.2-next.1 ### Patch Changes diff --git a/plugins/auth-backend-module-gitlab-provider/package.json b/plugins/auth-backend-module-gitlab-provider/package.json index e039faf1a2..375b386fb8 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.2-next.1", + "version": "0.1.3-next.2", "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 974a3c1dfe..c06c8dfee0 100644 --- a/plugins/auth-backend-module-google-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-google-provider/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-auth-backend-module-google-provider +## 0.1.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.4.0-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + ## 0.1.2-next.1 ### Patch Changes diff --git a/plugins/auth-backend-module-google-provider/package.json b/plugins/auth-backend-module-google-provider/package.json index 46adb1148e..74a6688e7c 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.2-next.1", + "version": "0.1.3-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/auth-backend-module-microsoft-provider/.eslintrc.js b/plugins/auth-backend-module-microsoft-provider/.eslintrc.js new file mode 100644 index 0000000000..e2a53a6ad2 --- /dev/null +++ b/plugins/auth-backend-module-microsoft-provider/.eslintrc.js @@ -0,0 +1 @@ +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/auth-backend-module-microsoft-provider/CHANGELOG.md b/plugins/auth-backend-module-microsoft-provider/CHANGELOG.md new file mode 100644 index 0000000000..c9b6227920 --- /dev/null +++ b/plugins/auth-backend-module-microsoft-provider/CHANGELOG.md @@ -0,0 +1,14 @@ +# @backstage/plugin-auth-backend-module-microsoft-provider + +## 0.1.0-next.0 + +### Minor Changes + +- 2d8f7e82c1: Migrated the Microsoft auth provider to new `@backstage/plugin-auth-backend-module-microsoft-provider` module package. + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-auth-node@0.4.0-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 diff --git a/plugins/auth-backend-module-microsoft-provider/README.md b/plugins/auth-backend-module-microsoft-provider/README.md new file mode 100644 index 0000000000..5154f1644b --- /dev/null +++ b/plugins/auth-backend-module-microsoft-provider/README.md @@ -0,0 +1,8 @@ +# Auth Module: Microsoft Provider + +This module provides an Microsoft auth provider implementation for `@backstage/plugin-auth-backend`. + +## Links + +- [Repository](https://gitlab.com/backstage/backstage/tree/master/plugins/auth-backend-module-microsoft-provider) +- [Backstage Project Homepage](https://backstage.io) diff --git a/plugins/auth-backend-module-microsoft-provider/api-report.md b/plugins/auth-backend-module-microsoft-provider/api-report.md new file mode 100644 index 0000000000..60192c5cbc --- /dev/null +++ b/plugins/auth-backend-module-microsoft-provider/api-report.md @@ -0,0 +1,29 @@ +## API Report File for "@backstage/plugin-auth-backend-module-microsoft-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 authModuleMicrosoftProvider: () => BackendFeature; + +// @public (undocumented) +export const microsoftAuthenticator: OAuthAuthenticator< + PassportOAuthAuthenticatorHelper, + PassportProfile +>; + +// @public +export namespace microsoftSignInResolvers { + const emailMatchingUserEntityAnnotation: SignInResolverFactory< + OAuthAuthenticatorResult, + unknown + >; +} +``` diff --git a/plugins/auth-backend-module-microsoft-provider/catalog-info.yaml b/plugins/auth-backend-module-microsoft-provider/catalog-info.yaml new file mode 100644 index 0000000000..1742fc9ed6 --- /dev/null +++ b/plugins/auth-backend-module-microsoft-provider/catalog-info.yaml @@ -0,0 +1,10 @@ +apiVersion: backstage.io/v1alpha1 +kind: Component +metadata: + name: backstage-plugin-auth-backend-module-microsoft-provider + title: '@backstage/plugin-auth-backend-module-microsoft-provider' + description: The microsoft-provider backend module for the auth plugin. +spec: + lifecycle: experimental + type: backstage-backend-plugin-module + owner: maintainers diff --git a/plugins/auth-backend-module-microsoft-provider/config.d.ts b/plugins/auth-backend-module-microsoft-provider/config.d.ts new file mode 100644 index 0000000000..5f1fa958e5 --- /dev/null +++ b/plugins/auth-backend-module-microsoft-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 */ + microsoft?: { + [authEnv: string]: { + clientId: string; + /** + * @visibility secret + */ + tenantId: string; + clientSecret: string; + callbackUrl?: string; + }; + }; + }; + }; +} diff --git a/plugins/auth-backend-module-microsoft-provider/dev/index.ts b/plugins/auth-backend-module-microsoft-provider/dev/index.ts new file mode 100644 index 0000000000..e701470af8 --- /dev/null +++ b/plugins/auth-backend-module-microsoft-provider/dev/index.ts @@ -0,0 +1,26 @@ +/* + * 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'; +import authPlugin from '@backstage/plugin-auth-backend'; +import { authModuleMicrosoftProvider } from '../src'; + +const backend = createBackend(); + +backend.add(authPlugin); +backend.add(authModuleMicrosoftProvider); + +backend.start(); diff --git a/plugins/auth-backend-module-microsoft-provider/package.json b/plugins/auth-backend-module-microsoft-provider/package.json new file mode 100644 index 0000000000..8555af2cbe --- /dev/null +++ b/plugins/auth-backend-module-microsoft-provider/package.json @@ -0,0 +1,45 @@ +{ + "name": "@backstage/plugin-auth-backend-module-microsoft-provider", + "description": "The microsoft-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-microsoft": "^1.0.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-microsoft-provider/src/authenticator.ts b/plugins/auth-backend-module-microsoft-provider/src/authenticator.ts new file mode 100644 index 0000000000..bf2d7fcaba --- /dev/null +++ b/plugins/auth-backend-module-microsoft-provider/src/authenticator.ts @@ -0,0 +1,74 @@ +/* + * 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 MicrosoftStrategy } from 'passport-microsoft'; +import { + createOAuthAuthenticator, + PassportOAuthAuthenticatorHelper, + PassportOAuthDoneCallback, + PassportProfile, +} from '@backstage/plugin-auth-node'; + +/** @public */ +export const microsoftAuthenticator = createOAuthAuthenticator({ + defaultProfileTransform: + PassportOAuthAuthenticatorHelper.defaultProfileTransform, + initialize({ callbackUrl, config }) { + const clientId = config.getString('clientId'); + const clientSecret = config.getString('clientSecret'); + const tenantId = config.getString('tenantId'); + + return PassportOAuthAuthenticatorHelper.from( + new MicrosoftStrategy( + { + clientID: clientId, + clientSecret: clientSecret, + callbackURL: callbackUrl, + tenant: tenantId, + scope: ['user.read'], + }, + ( + 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-microsoft-provider/src/index.ts b/plugins/auth-backend-module-microsoft-provider/src/index.ts new file mode 100644 index 0000000000..ae4fbf5926 --- /dev/null +++ b/plugins/auth-backend-module-microsoft-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 gitlab-provider backend module for the auth plugin. + * + * @packageDocumentation + */ + +export { microsoftAuthenticator } from './authenticator'; +export { authModuleMicrosoftProvider } from './module'; +export { microsoftSignInResolvers } from './resolvers'; diff --git a/plugins/auth-backend-module-microsoft-provider/src/module.test.ts b/plugins/auth-backend-module-microsoft-provider/src/module.test.ts new file mode 100644 index 0000000000..ee7ed8f7f3 --- /dev/null +++ b/plugins/auth-backend-module-microsoft-provider/src/module.test.ts @@ -0,0 +1,81 @@ +/* + * 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 authPlugin from '@backstage/plugin-auth-backend'; +import { decodeOAuthState } from '@backstage/plugin-auth-node'; +import request from 'supertest'; +import { authModuleMicrosoftProvider } from './module'; + +describe('authModuleMicrosoftProvider', () => { + it('should start', async () => { + const { server } = await startTestBackend({ + features: [ + authPlugin, + authModuleMicrosoftProvider, + mockServices.rootConfig.factory({ + data: { + app: { + baseUrl: 'http://localhost:3000', + }, + auth: { + providers: { + microsoft: { + development: { + clientId: 'my-client-id', + clientSecret: 'my-client-secret', + tenantId: 'my-tenant-id', + }, + }, + }, + }, + }, + }), + ], + }); + + const agent = request.agent(server); + + const res = await agent.get('/api/auth/microsoft/start?env=development'); + + expect(res.status).toEqual(302); + + const nonceCookie = agent.jar.getCookie('microsoft-nonce', { + domain: 'localhost', + path: '/api/auth/microsoft/handler', + script: false, + secure: false, + }); + expect(nonceCookie).toBeDefined(); + + const startUrl = new URL(res.get('location')); + expect(startUrl.origin).toBe('https://login.microsoftonline.com'); + expect(startUrl.pathname).toBe('/my-tenant-id/oauth2/v2.0/authorize'); + expect(Object.fromEntries(startUrl.searchParams)).toEqual({ + prompt: 'consent', + response_type: 'code', + scope: 'user.read', + client_id: 'my-client-id', + redirect_uri: `http://localhost:${server.port()}/api/auth/microsoft/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-microsoft-provider/src/module.ts b/plugins/auth-backend-module-microsoft-provider/src/module.ts new file mode 100644 index 0000000000..4d5c5968a2 --- /dev/null +++ b/plugins/auth-backend-module-microsoft-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 { microsoftAuthenticator } from './authenticator'; +import { microsoftSignInResolvers } from './resolvers'; + +/** @public */ +export const authModuleMicrosoftProvider = createBackendModule({ + pluginId: 'auth', + moduleId: 'microsoft-provider', + register(reg) { + reg.registerInit({ + deps: { + providers: authProvidersExtensionPoint, + }, + async init({ providers }) { + providers.registerProvider({ + providerId: 'microsoft', + factory: createOAuthProviderFactory({ + authenticator: microsoftAuthenticator, + signInResolverFactories: { + ...microsoftSignInResolvers, + ...commonSignInResolvers, + }, + }), + }); + }, + }); + }, +}); diff --git a/plugins/auth-backend-module-microsoft-provider/src/resolvers.ts b/plugins/auth-backend-module-microsoft-provider/src/resolvers.ts new file mode 100644 index 0000000000..7ef4a57175 --- /dev/null +++ b/plugins/auth-backend-module-microsoft-provider/src/resolvers.ts @@ -0,0 +1,53 @@ +/* + * 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 { + OAuthAuthenticatorResult, + createSignInResolverFactory, + PassportProfile, + SignInInfo, +} from '@backstage/plugin-auth-node'; + +/** + * Available sign-in resolvers for the Microsoft auth provider. + * + * @public + */ +export namespace microsoftSignInResolvers { + /** + * Looks up the user by matching their Microsoft username to the entity name. + */ + export const emailMatchingUserEntityAnnotation = createSignInResolverFactory({ + create() { + return async ( + info: SignInInfo>, + ctx, + ) => { + const { profile } = info; + + if (!profile.email) { + throw new Error('Microsoft profile contained no email'); + } + + return ctx.signInWithCatalogUser({ + annotations: { + 'microsoft.com/email': profile.email, + }, + }); + }; + }, + }); +} diff --git a/plugins/techdocs-node/src/testUtils/types.ts b/plugins/auth-backend-module-microsoft-provider/src/types.d.ts similarity index 65% rename from plugins/techdocs-node/src/testUtils/types.ts rename to plugins/auth-backend-module-microsoft-provider/src/types.d.ts index b58e004ab8..ca6ae9ac40 100644 --- a/plugins/techdocs-node/src/testUtils/types.ts +++ b/plugins/auth-backend-module-microsoft-provider/src/types.d.ts @@ -14,11 +14,12 @@ * limitations under the License. */ -export interface IStorageFilesMock { - emptyFiles(): void; - fileExists(targetPath: string): boolean; - readFile(targetPath: string): Buffer; - writeFile(targetPath: string, sourcePath: string): void; - writeFile(targetPath: string, sourceBuffer: Buffer): void; - writeFile(targetPath: string, source: string | Buffer): void; +declare module 'passport-microsoft' { + 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-oauth2-provider/CHANGELOG.md b/plugins/auth-backend-module-oauth2-provider/CHANGELOG.md index f2437a2e73..2588afe13a 100644 --- a/plugins/auth-backend-module-oauth2-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-oauth2-provider/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-auth-backend-module-oauth2-provider +## 0.1.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-auth-node@0.4.0-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + ## 0.1.2-next.1 ### Patch Changes diff --git a/plugins/auth-backend-module-oauth2-provider/package.json b/plugins/auth-backend-module-oauth2-provider/package.json index 3e53ba5954..1f610405a0 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.2-next.1", + "version": "0.1.3-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/auth-backend/CHANGELOG.md b/plugins/auth-backend/CHANGELOG.md index f2eadd6c3d..8f00fb0e9a 100644 --- a/plugins/auth-backend/CHANGELOG.md +++ b/plugins/auth-backend/CHANGELOG.md @@ -1,5 +1,27 @@ # @backstage/plugin-auth-backend +## 0.19.3-next.2 + +### Patch Changes + +- 2d8f7e82c1: Migrated the Microsoft auth provider to new `@backstage/plugin-auth-backend-module-microsoft-provider` module package. +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-auth-node@0.4.0-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/errors@1.2.3-next.0 + - @backstage/plugin-auth-backend-module-gcp-iap-provider@0.2.0-next.2 + - @backstage/plugin-auth-backend-module-microsoft-provider@0.1.0-next.0 + - @backstage/plugin-auth-backend-module-github-provider@0.1.3-next.2 + - @backstage/plugin-auth-backend-module-gitlab-provider@0.1.3-next.2 + - @backstage/plugin-auth-backend-module-oauth2-provider@0.1.3-next.2 + - @backstage/plugin-catalog-node@1.4.7-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/catalog-client@1.4.5-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-auth-backend-module-google-provider@0.1.3-next.2 + ## 0.19.2-next.1 ### Patch Changes diff --git a/plugins/auth-backend/api-report.md b/plugins/auth-backend/api-report.md index 6372c2ee60..41536f2a3f 100644 --- a/plugins/auth-backend/api-report.md +++ b/plugins/auth-backend/api-report.md @@ -538,9 +538,9 @@ export const providers: Readonly<{ | undefined, ) => AuthProviderFactory_2; resolvers: Readonly<{ - emailLocalPartMatchingUserEntityName: () => SignInResolver; - emailMatchingUserEntityProfileEmail: () => SignInResolver; - emailMatchingUserEntityAnnotation(): SignInResolver; + emailMatchingUserEntityProfileEmail: () => SignInResolver_2; + emailLocalPartMatchingUserEntityName: () => SignInResolver_2; + emailMatchingUserEntityAnnotation: () => SignInResolver_2; }>; }>; oauth2: Readonly<{ diff --git a/plugins/auth-backend/config.d.ts b/plugins/auth-backend/config.d.ts index e719468ac1..f8953e1588 100644 --- a/plugins/auth-backend/config.d.ts +++ b/plugins/auth-backend/config.d.ts @@ -179,18 +179,6 @@ export interface Config { }; }; /** @visibility frontend */ - microsoft?: { - [authEnv: string]: { - clientId: string; - /** - * @visibility secret - */ - clientSecret: string; - tenantId: string; - callbackUrl?: string; - }; - }; - /** @visibility frontend */ onelogin?: { [authEnv: string]: { clientId: string; diff --git a/plugins/auth-backend/package.json b/plugins/auth-backend/package.json index 398814564e..355c8eb554 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.19.2-next.1", + "version": "0.19.3-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -42,6 +42,7 @@ "@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-microsoft-provider": "workspace:^", "@backstage/plugin-auth-backend-module-oauth2-provider": "workspace:^", "@backstage/plugin-auth-node": "workspace:^", "@backstage/plugin-catalog-node": "workspace:^", diff --git a/plugins/auth-backend/src/providers/microsoft/__testUtils__/fake.test.ts b/plugins/auth-backend/src/providers/microsoft/__testUtils__/fake.test.ts deleted file mode 100644 index dee37f0f6b..0000000000 --- a/plugins/auth-backend/src/providers/microsoft/__testUtils__/fake.test.ts +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright 2023 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import { FakeMicrosoftAPI } from './fake'; - -describe('FakeMicrosoftAPI', () => { - const api = new FakeMicrosoftAPI(); - - describe('#token', () => { - it('exchanges auth codes', () => { - const { access_token } = api.token( - new URLSearchParams({ - grant_type: 'authorization_code', - code: api.generateAuthCode('User.Read'), - }), - ); - - expect(api.tokenHasScope(access_token, 'User.Read')).toBe(true); - }); - - it('supports scopes for the first requested audience only', () => { - const { access_token } = api.token( - new URLSearchParams({ - grant_type: 'authorization_code', - code: api.generateAuthCode('someaudience/somescope User.Read'), - }), - ); - - expect(api.tokenHasScope(access_token, 'User.Read')).toBe(false); - }); - - it('special openid scopes do not count towards the 1-audience limit', () => { - const { access_token } = api.token( - new URLSearchParams({ - grant_type: 'authorization_code', - code: api.generateAuthCode('openid offline_access User.Read'), - }), - ); - - expect(api.tokenHasScope(access_token, 'User.Read')).toBe(true); - }); - - it('refreshes tokens', () => { - const { access_token } = api.token( - new URLSearchParams({ - grant_type: 'refresh_token', - refresh_token: api.generateRefreshToken( - 'email openid profile User.Read', - ), - }), - ); - - expect( - api.tokenHasScope(access_token, 'email openid profile User.Read'), - ).toBe(true); - }); - it('requires `openid` scope for ID token', () => { - const { id_token } = api.token( - new URLSearchParams({ - grant_type: 'authorization_code', - code: api.generateAuthCode('User.Read'), - }), - ); - - expect(id_token).toBeUndefined(); - }); - it('requires `offline_access` scope for refresh token', () => { - const { refresh_token } = api.token( - new URLSearchParams({ - grant_type: 'authorization_code', - code: api.generateAuthCode('User.Read'), - }), - ); - - expect(refresh_token).toBeUndefined(); - }); - }); -}); diff --git a/plugins/auth-backend/src/providers/microsoft/__testUtils__/fake.ts b/plugins/auth-backend/src/providers/microsoft/__testUtils__/fake.ts deleted file mode 100644 index 9b3ca09c57..0000000000 --- a/plugins/auth-backend/src/providers/microsoft/__testUtils__/fake.ts +++ /dev/null @@ -1,126 +0,0 @@ -/* - * Copyright 2023 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import { decodeJwt } from 'jose'; - -type Claims = { aud: string; scp: string }; - -export class FakeMicrosoftAPI { - generateAccessToken(scope: string): string { - return this.tokenWithClaims(this.allClaimsForScope(scope)).access_token; - } - generateAuthCode(scope: string): string { - return this.encodeClaims(this.allClaimsForScope(scope)); - } - generateRefreshToken(scope: string): string { - return this.encodeClaims(this.allClaimsForScope(scope)); - } - token(formData: URLSearchParams): { - access_token: string; - scope: string; - refresh_token?: string; - id_token?: string; - } { - const scopeParameter = formData.get('scope'); - const claims = - (scopeParameter && this.allClaimsForScope(scopeParameter)) ?? - formData.get('grant_type') === 'refresh_token' - ? this.decodeClaims(formData.get('refresh_token')!) - : this.decodeClaims(formData.get('code')!); - return { - ...this.tokenWithClaims(claims), - ...(this.hasScope(claims, 'offline_access') && { - refresh_token: this.encodeClaims(claims), - }), - ...(this.hasScope(claims, 'openid') && { - id_token: 'header.e30K.microsoft', - }), - }; - } - tokenHasScope(token: string, scope: string): boolean { - const { aud, scp } = decodeJwt(token); - return this.hasScope({ aud: aud as string, scp: scp as string }, scope); - } - private tokenWithClaims(claims: Claims): { - access_token: string; - scope: string; - } { - const filteredClaims = { - ...claims, - scp: claims.scp - .split(' ') - .filter(s => s !== 'offline_access') - .join(' '), - }; - return { - access_token: `header.${Buffer.from( - JSON.stringify(filteredClaims), - ).toString('base64')}.signature`, - scope: this.scopeFromClaims(filteredClaims), - }; - } - private allClaimsForScope(scope: string): Claims { - const scopes = scope.split(' ').map(this.parseScope); - const firstAudience = scopes - .map(({ aud }) => aud) - .find(aud => aud !== 'openid'); - return { - aud: firstAudience ?? '00000003-0000-0000-c000-000000000000', - scp: scopes - .filter(({ aud }) => aud === 'openid' || aud === firstAudience) - .map(({ scp }) => scp) - .join(' '), - }; - } - // auth codes and refresh tokens in this fake system are base64-encoded JSON - // strings of claims - private encodeClaims(claims: Claims): string { - return Buffer.from(JSON.stringify(claims)).toString('base64'); - } - private decodeClaims(encoded: string): Claims { - return JSON.parse(Buffer.from(encoded, 'base64').toString()); - } - private hasScope(claims: Claims, scope: string): boolean { - return this.scopeFromClaims(claims).includes(scope); - } - private parseScope(s: string): Claims { - if (s.includes('/')) { - const [aud, scp] = s.split('/'); - return { aud, scp }; - } - switch (s) { - case 'email': - case 'openid': - case 'offline_access': - case 'profile': { - return { aud: 'openid', scp: s }; - } - default: - return { aud: '00000003-0000-0000-c000-000000000000', scp: s }; - } - } - private scopeFromClaims(claims: Claims): string { - return claims.scp - .split(' ') - .map(this.parseScope) - .map(({ aud, scp }) => - aud === 'openid' || - claims.aud === '00000003-0000-0000-c000-000000000000' - ? scp - : `${claims.aud}/${scp}`, - ) - .join(' '); - } -} diff --git a/plugins/auth-backend/src/providers/microsoft/provider.test.ts b/plugins/auth-backend/src/providers/microsoft/provider.test.ts deleted file mode 100644 index 7bbfd085d6..0000000000 --- a/plugins/auth-backend/src/providers/microsoft/provider.test.ts +++ /dev/null @@ -1,450 +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 { microsoft } from './provider'; -import { getVoidLogger } from '@backstage/backend-common'; -import { setupRequestMockHandlers } from '@backstage/backend-test-utils'; -import { ConfigReader } from '@backstage/config'; -import { rest } from 'msw'; -import { setupServer } from 'msw/node'; -import { AuthProviderRouteHandlers, AuthResolverContext } from '../types'; -import express from 'express'; -import crypto from 'crypto'; -import { FakeMicrosoftAPI } from './__testUtils__/fake'; - -describe('MicrosoftAuthProvider', () => { - const nonce = 'AAAAAAAAAAAAAAAAAAAAAA=='; // 16 bytes of zeros in base64 - const state = Buffer.from( - `nonce=${encodeURIComponent(nonce)}&env=development`, - ).toString('hex'); - const mockBackstageToken = `header.${Buffer.from( - JSON.stringify({ sub: 'user:default/mock' }), - 'utf8', - ).toString('base64')}.backstage`; - - const server = setupServer(); - const microsoftApi = new FakeMicrosoftAPI(); - let provider: AuthProviderRouteHandlers; - let response: jest.Mocked; - - setupRequestMockHandlers(server); - - beforeEach(() => { - provider = microsoft.create({ - signIn: { - resolver: microsoft.resolvers.emailMatchingUserEntityAnnotation(), - }, - })({ - providerId: 'microsoft', - baseUrl: 'http://backstage.test/api/auth', - appUrl: 'http://backstage.test', - isOriginAllowed: _ => true, - globalConfig: { - baseUrl: 'http://backstage.test/api/auth', - appUrl: 'http://backstage.test', - isOriginAllowed: _ => true, - }, - config: new ConfigReader({ - development: { - tenantId: 'tenantId', - clientId: 'clientId', - clientSecret: 'clientSecret', - }, - }), - logger: getVoidLogger(), - resolverContext: { - issueToken: jest.fn(), - findCatalogUser: jest.fn(), - signInWithCatalogUser: async _ => ({ - token: mockBackstageToken, - }), - } as AuthResolverContext, - }) as AuthProviderRouteHandlers; - - server.use( - rest.post( - 'https://login.microsoftonline.com/tenantId/oauth2/v2.0/token', - async (req, res, ctx) => { - return res( - ctx.json({ - ...microsoftApi.token(new URLSearchParams(await req.text())), - token_type: 'Bearer', - expires_in: 123, - ext_expires_in: 123, - }), - ); - }, - ), - rest.get('https://graph.microsoft.com/v1.0/me/', (req, res, ctx) => { - if ( - !microsoftApi.tokenHasScope( - req.headers.get('authorization')!.replace(/^Bearer /, ''), - 'User.Read', - ) - ) { - return res(ctx.status(403)); - } - return res( - ctx.json({ - id: 'conrad', - displayName: 'Conrad', - surname: 'Ribas', - givenName: 'Francisco', - mail: 'conrad@example.com', - }), - ); - }), - rest.get( - 'https://graph.microsoft.com/v1.0/me/photos/*', - async (req, res, ctx) => { - if ( - !microsoftApi.tokenHasScope( - req.headers.get('authorization')!.replace(/^Bearer /, ''), - 'User.Read', - ) - ) { - return res(ctx.status(403)); - } - const imageBuffer = new Uint8Array([104, 111, 119, 100, 121]).buffer; - return res( - ctx.set('Content-Length', imageBuffer.byteLength.toString()), - ctx.set('Content-Type', 'image/jpeg'), - ctx.body(imageBuffer), - ); - }, - ), - ); - response = { - cookie: jest.fn(), - end: jest.fn(), - json: jest.fn(), - setHeader: jest.fn(), - status: jest.fn(), - } as unknown as jest.Mocked; - response.status.mockReturnValue(response); - }); - - describe('#start', () => { - const randomBytes = jest.spyOn( - crypto, - 'randomBytes', - ) as unknown as jest.MockedFunction<(size: number) => Buffer>; - - afterEach(() => { - randomBytes.mockRestore(); - }); - - it('redirects to authorize URL', async () => { - randomBytes.mockReturnValue(Buffer.from(nonce, 'base64')); - - await provider.start( - { - query: { - env: 'development', - scope: 'email openid profile User.Read', - }, - } as unknown as express.Request, - response, - ); - - expect(response.setHeader).toHaveBeenCalledWith( - 'Location', - 'https://login.microsoftonline.com/tenantId/oauth2/v2.0/authorize' + - '?response_type=code' + - `&redirect_uri=${encodeURIComponent( - 'http://backstage.test/api/auth/microsoft/handler/frame', - )}` + - `&scope=${encodeURIComponent('email openid profile User.Read')}` + - `&state=${state}` + - '&client_id=clientId', - ); - }); - }); - - describe('#handle', () => { - it('returns provider info and profile with photo data', async () => { - await provider.frameHandler( - { - query: { - env: 'development', - code: microsoftApi.generateAuthCode( - 'email openid profile User.Read', - ), - state, - }, - cookies: { - 'microsoft-nonce': nonce, - }, - } as unknown as express.Request, - response, - ); - - expect(response.end).toHaveBeenCalledWith( - expect.stringContaining( - encodeURIComponent( - JSON.stringify({ - type: 'authorization_response', - response: { - providerInfo: { - accessToken: microsoftApi.generateAccessToken( - 'email openid profile User.Read', - ), - scope: 'email openid profile User.Read', - expiresInSeconds: 123, - idToken: 'header.e30K.microsoft', - }, - profile: { - email: 'conrad@example.com', - picture: 'data:image/jpeg;base64,aG93ZHk=', - displayName: 'Conrad', - }, - backstageIdentity: { - token: mockBackstageToken, - identity: { - type: 'user', - userEntityRef: 'user:default/mock', - ownershipEntityRefs: [], - }, - }, - }, - }), - ), - ), - ); - }); - - it('returns access token for non-microsoft graph scope', async () => { - await provider.frameHandler( - { - query: { - env: 'development', - code: microsoftApi.generateAuthCode('aks-audience/user.read'), - state, - }, - cookies: { - 'microsoft-nonce': nonce, - }, - } as unknown as express.Request, - response, - ); - - expect(response.end).toHaveBeenCalledWith( - expect.stringContaining( - encodeURIComponent( - JSON.stringify({ - type: 'authorization_response', - response: { - providerInfo: { - accessToken: microsoftApi.generateAccessToken( - 'aks-audience/user.read', - ), - scope: 'aks-audience/user.read', - expiresInSeconds: 123, - }, - profile: {}, - }, - }), - ), - ), - ); - }); - - it('sets refresh token', async () => { - await provider.frameHandler( - { - query: { - env: 'development', - code: microsoftApi.generateAuthCode( - 'email offline_access openid profile User.Read', - ), - state, - }, - cookies: { - 'microsoft-nonce': nonce, - }, - } as unknown as express.Request, - response, - ); - - expect(response.cookie).toHaveBeenCalledWith( - 'microsoft-refresh-token', - microsoftApi.generateRefreshToken( - 'email offline_access openid profile User.Read', - ), - { - domain: 'backstage.test', - httpOnly: true, - maxAge: 86400000000, - path: '/api/auth/microsoft', - sameSite: 'lax', - secure: false, - }, - ); - }); - - it('omits photo data when fetching it fails', async () => { - server.use( - rest.get('https://graph.microsoft.com/v1.0/me/photos/*', (_, res) => - res.networkError('remote hung up'), - ), - ); - - await provider.frameHandler( - { - query: { - env: 'development', - code: microsoftApi.generateAuthCode( - 'email openid profile User.Read', - ), - state, - }, - cookies: { - 'microsoft-nonce': nonce, - }, - } as unknown as express.Request, - response, - ); - - expect(response.end).toHaveBeenCalledWith( - expect.stringContaining( - encodeURIComponent( - JSON.stringify({ - type: 'authorization_response', - response: { - providerInfo: { - accessToken: microsoftApi.generateAccessToken( - 'email openid profile User.Read', - ), - scope: 'email openid profile User.Read', - expiresInSeconds: 123, - idToken: 'header.e30K.microsoft', - }, - profile: { - email: 'conrad@example.com', - displayName: 'Conrad', - }, - backstageIdentity: { - token: mockBackstageToken, - identity: { - type: 'user', - userEntityRef: 'user:default/mock', - ownershipEntityRefs: [], - }, - }, - }, - }), - ), - ), - ); - }); - }); - - describe('#refresh', () => { - it('returns provider info and profile with photo data', async () => { - await provider.refresh!( - { - query: { - env: 'development', - scope: 'email openid profile User.Read', - }, - header: jest.fn(_ => 'XMLHttpRequest'), - cookies: { - 'microsoft-refresh-token': microsoftApi.generateRefreshToken( - 'email openid profile User.Read', - ), - }, - get: jest.fn(), - } as unknown as express.Request, - response, - ); - - expect(response.json).toHaveBeenCalledWith( - expect.objectContaining({ - providerInfo: { - accessToken: microsoftApi.generateAccessToken( - 'email openid profile User.Read', - ), - scope: 'email openid profile User.Read', - expiresInSeconds: 123, - idToken: 'header.e30K.microsoft', - }, - profile: { - email: 'conrad@example.com', - picture: 'data:image/jpeg;base64,aG93ZHk=', - displayName: 'Conrad', - }, - }), - ); - }); - - it('returns access token for non-microsoft graph scope', async () => { - await provider.refresh!( - { - query: { - env: 'development', - scope: 'aks-audience/user.read', - }, - header: jest.fn(_ => 'XMLHttpRequest'), - cookies: { - 'microsoft-refresh-token': microsoftApi.generateRefreshToken( - 'aks-audience/user.read', - ), - }, - get: jest.fn(), - } as unknown as express.Request, - response, - ); - - expect(response.json).toHaveBeenCalledWith({ - providerInfo: { - accessToken: microsoftApi.generateAccessToken( - 'aks-audience/user.read', - ), - expiresInSeconds: 123, - scope: 'aks-audience/user.read', - }, - profile: {}, - }); - }); - - it('returns backstage identity', async () => { - await provider.refresh!( - { - query: { - env: 'development', - scope: 'email openid profile User.Read', - }, - header: jest.fn(_ => 'XMLHttpRequest'), - cookies: { - 'microsoft-refresh-token': microsoftApi.generateRefreshToken( - 'email openid profile User.Read', - ), - }, - get: jest.fn(), - } as unknown as express.Request, - response, - ); - - expect(response.json).toHaveBeenCalledWith( - expect.objectContaining({ - backstageIdentity: expect.objectContaining({ - token: mockBackstageToken, - }), - }), - ); - }); - }); -}); diff --git a/plugins/auth-backend/src/providers/microsoft/provider.ts b/plugins/auth-backend/src/providers/microsoft/provider.ts index 8fc8459f10..8947c7432b 100644 --- a/plugins/auth-backend/src/providers/microsoft/provider.ts +++ b/plugins/auth-backend/src/providers/microsoft/provider.ts @@ -14,218 +14,25 @@ * limitations under the License. */ -import express from 'express'; -import passport from 'passport'; -import { Strategy as MicrosoftStrategy } from 'passport-microsoft'; -import { - encodeState, - OAuthAdapter, - OAuthEnvironmentHandler, - OAuthHandlers, - OAuthProviderOptions, - OAuthRefreshRequest, - OAuthResponse, - OAuthResult, - OAuthStartRequest, -} from '../../lib/oauth'; -import { - executeFetchUserProfileStrategy, - executeFrameHandlerStrategy, - executeRedirectStrategy, - executeRefreshTokenStrategy, - makeProfileInfo, - PassportDoneCallback, -} from '../../lib/passport'; -import { - AuthHandler, - OAuthStartResponse, - SignInResolver, - AuthResolverContext, -} from '../types'; +import { SignInResolver, AuthHandler } from '../types'; +import { OAuthResult } from '../../lib/oauth'; import { createAuthProviderIntegration } from '../createAuthProviderIntegration'; import { - commonByEmailLocalPartResolver, - commonByEmailResolver, -} from '../resolvers'; -import { LoggerService } from '@backstage/backend-plugin-api'; -import fetch from 'node-fetch'; -import { decodeJwt } from 'jose'; -import { Profile as PassportProfile } from 'passport'; -import { BACKSTAGE_SESSION_EXPIRATION } from '../../lib/session'; - -type PrivateInfo = { - refreshToken: string; -}; - -type Options = OAuthProviderOptions & { - signInResolver?: SignInResolver; - authHandler: AuthHandler; - logger: LoggerService; - resolverContext: AuthResolverContext; - authorizationUrl?: string; - tokenUrl?: string; -}; - -export class MicrosoftAuthProvider implements OAuthHandlers { - private readonly _strategy: MicrosoftStrategy; - private readonly signInResolver?: SignInResolver; - private readonly authHandler: AuthHandler; - private readonly logger: LoggerService; - private readonly resolverContext: AuthResolverContext; - - constructor(options: Options) { - this.signInResolver = options.signInResolver; - this.authHandler = options.authHandler; - this.logger = options.logger; - this.resolverContext = options.resolverContext; - - this._strategy = new MicrosoftStrategy( - { - clientID: options.clientId, - clientSecret: options.clientSecret, - callbackURL: options.callbackUrl, - authorizationURL: options.authorizationUrl, - tokenURL: options.tokenUrl, - passReqToCallback: false, - skipUserProfile: ( - accessToken: string, - done: (err: unknown, skip: boolean) => void, - ) => { - done(null, this.skipUserProfile(accessToken)); - }, - }, - ( - accessToken: any, - refreshToken: any, - params: any, - fullProfile: passport.Profile, - done: PassportDoneCallback, - ) => { - done(undefined, { fullProfile, accessToken, params }, { refreshToken }); - }, - ); - } - - private skipUserProfile = (accessToken: string): boolean => { - const { aud, scp } = decodeJwt(accessToken); - const hasGraphReadScope = - aud === '00000003-0000-0000-c000-000000000000' && - (scp as string) - .split(' ') - .map(s => s.toLowerCase()) - .includes('user.read'); - return !hasGraphReadScope; - }; - - async start(req: OAuthStartRequest): Promise { - return await executeRedirectStrategy(req, this._strategy, { - 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, - ); - - return { - response: await this.handleResult({ - params, - accessToken, - ...(!this.skipUserProfile(accessToken) && { - fullProfile: await executeFetchUserProfileStrategy( - this._strategy, - accessToken, - ), - }), - }), - refreshToken, - }; - } - - private async handleResult(result: { - fullProfile?: PassportProfile; - params: { - id_token?: string; - scope: string; - expires_in: number; - }; - accessToken: string; - refreshToken?: string; - }): Promise { - let profile = {}; - if (result.fullProfile) { - const photo = await this.getUserPhoto(result.accessToken); - result.fullProfile.photos = photo ? [{ value: photo }] : undefined; - ({ profile } = await this.authHandler( - result as OAuthResult, - this.resolverContext, - )); - } - - const expiresInSeconds = - result.params.expires_in === undefined - ? BACKSTAGE_SESSION_EXPIRATION - : Math.min(result.params.expires_in, BACKSTAGE_SESSION_EXPIRATION); - - return { - providerInfo: { - accessToken: result.accessToken, - scope: result.params.scope, - expiresInSeconds, - ...{ idToken: result.params.id_token }, - }, - profile, - ...(result.fullProfile && - this.signInResolver && { - backstageIdentity: await this.signInResolver( - { result: result as OAuthResult, profile }, - this.resolverContext, - ), - }), - }; - } - - private async getUserPhoto(accessToken: string): Promise { - try { - const res = await fetch( - 'https://graph.microsoft.com/v1.0/me/photos/48x48/$value', - { - headers: { - Authorization: `Bearer ${accessToken}`, - }, - }, - ); - const data = await res.buffer(); - - return `data:image/jpeg;base64,${data.toString('base64')}`; - } catch (error) { - this.logger.warn( - `Could not retrieve user profile photo from Microsoft Graph API: ${error}`, - ); - return undefined; - } - } -} + commonSignInResolvers, + createOAuthProviderFactory, +} from '@backstage/plugin-auth-node'; +import { + adaptLegacyOAuthHandler, + adaptLegacyOAuthSignInResolver, + adaptOAuthSignInResolverToLegacy, +} from '../../lib/legacy'; +import { + microsoftAuthenticator, + microsoftSignInResolvers, +} from '@backstage/plugin-auth-backend-module-microsoft-provider'; /** - * Auth provider integration for Microsoft auth + * Auth provider integration for GitLab auth * * @public */ @@ -241,75 +48,21 @@ export const microsoft = createAuthProviderIntegration({ * 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, logger, resolverContext }) => - OAuthEnvironmentHandler.mapConfig(config, envConfig => { - const clientId = envConfig.getString('clientId'); - const clientSecret = envConfig.getString('clientSecret'); - const tenantId = envConfig.getString('tenantId'); - - const customCallbackUrl = envConfig.getOptionalString('callbackUrl'); - const callbackUrl = - customCallbackUrl || - `${globalConfig.baseUrl}/${providerId}/handler/frame`; - const authorizationUrl = `https://login.microsoftonline.com/${tenantId}/oauth2/v2.0/authorize`; - const tokenUrl = `https://login.microsoftonline.com/${tenantId}/oauth2/v2.0/token`; - - const authHandler: AuthHandler = options?.authHandler - ? options.authHandler - : async ({ fullProfile, params }) => ({ - profile: makeProfileInfo(fullProfile ?? {}, params.id_token), - }); - - const provider = new MicrosoftAuthProvider({ - clientId, - clientSecret, - callbackUrl, - authorizationUrl, - tokenUrl, - authHandler, - signInResolver: options?.signIn?.resolver, - logger, - resolverContext, - }); - - return OAuthAdapter.fromConfig(globalConfig, provider, { - providerId, - callbackUrl, - }); - }); - }, - 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 `microsoft.com/email` annotation. - */ - emailMatchingUserEntityAnnotation(): SignInResolver { - return async (info, ctx) => { - const { profile } = info; - - if (!profile.email) { - throw new Error('Microsoft profile contained no email'); - } - - return ctx.signInWithCatalogUser({ - annotations: { - 'microsoft.com/email': profile.email, - }, - }); - }; - }, + return createOAuthProviderFactory({ + authenticator: microsoftAuthenticator, + profileTransform: adaptLegacyOAuthHandler(options?.authHandler), + signInResolver: adaptLegacyOAuthSignInResolver(options?.signIn?.resolver), + }); }, + resolvers: adaptOAuthSignInResolverToLegacy({ + emailLocalPartMatchingUserEntityName: + commonSignInResolvers.emailLocalPartMatchingUserEntityName(), + emailMatchingUserEntityProfileEmail: + commonSignInResolvers.emailMatchingUserEntityProfileEmail(), + emailMatchingUserEntityAnnotation: + microsoftSignInResolvers.emailMatchingUserEntityAnnotation(), + }), }); diff --git a/plugins/auth-node/CHANGELOG.md b/plugins/auth-node/CHANGELOG.md index 2dcd93dc51..9c5bf12cac 100644 --- a/plugins/auth-node/CHANGELOG.md +++ b/plugins/auth-node/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-auth-node +## 0.4.0-next.2 + +### Minor Changes + +- 6f142d5356: **BREAKING**: The recently introduced `ProxyAuthenticator.initialize()` method is no longer `async` to match the way the OAuth equivalent is implemented. + +### Patch Changes + +- 8b8b1d23ae: Fixed cookie persisted scope not returned in OAuth refresh handler response. +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/catalog-client@1.4.5-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + ## 0.3.2-next.1 ### Patch Changes diff --git a/plugins/auth-node/api-report.md b/plugins/auth-node/api-report.md index a782847d7a..a01de2cf46 100644 --- a/plugins/auth-node/api-report.md +++ b/plugins/auth-node/api-report.md @@ -550,7 +550,7 @@ export interface ProxyAuthenticator { // (undocumented) defaultProfileTransform: ProfileTransform; // (undocumented) - initialize(ctx: { config: Config }): Promise; + initialize(ctx: { config: Config }): TContext; } // @public (undocumented) diff --git a/plugins/auth-node/package.json b/plugins/auth-node/package.json index 91ae1b5e6a..9174e91d4c 100644 --- a/plugins/auth-node/package.json +++ b/plugins/auth-node/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-node", - "version": "0.3.2-next.1", + "version": "0.4.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/auth-node/src/proxy/types.ts b/plugins/auth-node/src/proxy/types.ts index 969b022abb..0f52feaac4 100644 --- a/plugins/auth-node/src/proxy/types.ts +++ b/plugins/auth-node/src/proxy/types.ts @@ -21,7 +21,7 @@ import { ProfileTransform } from '../types'; /** @public */ export interface ProxyAuthenticator { defaultProfileTransform: ProfileTransform; - initialize(ctx: { config: Config }): Promise; + initialize(ctx: { config: Config }): TContext; authenticate( options: { req: Request }, ctx: TContext, diff --git a/plugins/azure-devops-backend/CHANGELOG.md b/plugins/azure-devops-backend/CHANGELOG.md index f38133089c..7303ae4de7 100644 --- a/plugins/azure-devops-backend/CHANGELOG.md +++ b/plugins/azure-devops-backend/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-azure-devops-backend +## 0.4.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-azure-devops-common@0.3.1 + ## 0.4.2-next.1 ### Patch Changes diff --git a/plugins/azure-devops-backend/package.json b/plugins/azure-devops-backend/package.json index 1da72ae8dc..7a81effc70 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.2-next.1", + "version": "0.4.3-next.2", "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 eee90fe4b2..c136b8c5c7 100644 --- a/plugins/azure-devops/CHANGELOG.md +++ b/plugins/azure-devops/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-azure-devops +## 0.3.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/theme@0.4.3-next.0 + - @backstage/plugin-azure-devops-common@0.3.1 + ## 0.3.7-next.1 ### Patch Changes diff --git a/plugins/azure-devops/package.json b/plugins/azure-devops/package.json index f47811bf58..90615005ee 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.7-next.1", + "version": "0.3.7-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/azure-sites-backend/CHANGELOG.md b/plugins/azure-sites-backend/CHANGELOG.md index fe92430af1..08309c6073 100644 --- a/plugins/azure-sites-backend/CHANGELOG.md +++ b/plugins/azure-sites-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-azure-sites-backend +## 0.1.16-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-azure-sites-common@0.1.1 + ## 0.1.15-next.1 ### Patch Changes diff --git a/plugins/azure-sites-backend/package.json b/plugins/azure-sites-backend/package.json index d1c9c6c2b7..5063a671d2 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.15-next.1", + "version": "0.1.16-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/azure-sites/CHANGELOG.md b/plugins/azure-sites/CHANGELOG.md index 3f044f2243..c4746dba08 100644 --- a/plugins/azure-sites/CHANGELOG.md +++ b/plugins/azure-sites/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-azure-sites +## 0.1.14-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/theme@0.4.3-next.0 + - @backstage/plugin-azure-sites-common@0.1.1 + ## 0.1.14-next.1 ### Patch Changes diff --git a/plugins/azure-sites/package.json b/plugins/azure-sites/package.json index d7a4826be1..99dd46a36a 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.14-next.1", + "version": "0.1.14-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/badges-backend/CHANGELOG.md b/plugins/badges-backend/CHANGELOG.md index 3081811eca..40fa6773f0 100644 --- a/plugins/badges-backend/CHANGELOG.md +++ b/plugins/badges-backend/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-badges-backend +## 0.3.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-auth-node@0.4.0-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/catalog-client@1.4.5-next.0 + - @backstage/config@1.1.1-next.0 + ## 0.3.2-next.1 ### Patch Changes diff --git a/plugins/badges-backend/package.json b/plugins/badges-backend/package.json index 4137092f17..e539075ff2 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.2-next.1", + "version": "0.3.3-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/badges/CHANGELOG.md b/plugins/badges/CHANGELOG.md index c20dd1af3e..75de6d7e62 100644 --- a/plugins/badges/CHANGELOG.md +++ b/plugins/badges/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-badges +## 0.2.49-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/theme@0.4.3-next.0 + ## 0.2.49-next.1 ### Patch Changes diff --git a/plugins/badges/package.json b/plugins/badges/package.json index d0565cdaf9..ef2e6c7ce8 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.49-next.1", + "version": "0.2.49-next.2", "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 3f3bfb6eaf..8561a42918 100644 --- a/plugins/bazaar-backend/CHANGELOG.md +++ b/plugins/bazaar-backend/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-bazaar-backend +## 0.3.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-auth-node@0.4.0-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 + ## 0.3.2-next.1 ### Patch Changes diff --git a/plugins/bazaar-backend/package.json b/plugins/bazaar-backend/package.json index 28358525ee..ff466356ce 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.2-next.1", + "version": "0.3.3-next.2", "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 d7c48b8802..28af791ac4 100644 --- a/plugins/bazaar/CHANGELOG.md +++ b/plugins/bazaar/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-bazaar +## 0.2.17-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/cli@0.23.0-next.2 + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/plugin-catalog@1.14.0-next.2 + - @backstage/theme@0.4.3-next.0 + - @backstage/catalog-client@1.4.5-next.0 + ## 0.2.17-next.1 ### Patch Changes diff --git a/plugins/bazaar/package.json b/plugins/bazaar/package.json index 4a6ac9530d..46b012d4b4 100644 --- a/plugins/bazaar/package.json +++ b/plugins/bazaar/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-bazaar", - "version": "0.2.17-next.1", + "version": "0.2.17-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/bitbucket-cloud-common/CHANGELOG.md b/plugins/bitbucket-cloud-common/CHANGELOG.md index 439fda1b41..c7fc10f98f 100644 --- a/plugins/bitbucket-cloud-common/CHANGELOG.md +++ b/plugins/bitbucket-cloud-common/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-bitbucket-cloud-common +## 0.2.13-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.7.1-next.1 + ## 0.2.13-next.0 ### Patch Changes diff --git a/plugins/bitbucket-cloud-common/package.json b/plugins/bitbucket-cloud-common/package.json index 5a109f3fb5..63c197ecbd 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.13-next.0", + "version": "0.2.13-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/bitrise/CHANGELOG.md b/plugins/bitrise/CHANGELOG.md index 6a1c85393c..814ef241c2 100644 --- a/plugins/bitrise/CHANGELOG.md +++ b/plugins/bitrise/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-bitrise +## 0.1.52-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/theme@0.4.3-next.0 + ## 0.1.52-next.1 ### Patch Changes diff --git a/plugins/bitrise/package.json b/plugins/bitrise/package.json index bc88d84191..b0bca55062 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.52-next.1", + "version": "0.1.52-next.2", "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 cba33bfb38..8db117460c 100644 --- a/plugins/catalog-backend-module-aws/CHANGELOG.md +++ b/plugins/catalog-backend-module-aws/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-catalog-backend-module-aws +## 0.2.9-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/integration@1.7.1-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/plugin-kubernetes-common@0.7.0-next.1 + - @backstage/backend-tasks@0.5.11-next.2 + - @backstage/plugin-catalog-node@1.4.7-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/integration-aws-node@0.1.7-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.0.17-next.0 + ## 0.2.8-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-aws/package.json b/plugins/catalog-backend-module-aws/package.json index c4891dd2b7..246def8c94 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.2.8-next.1", + "version": "0.2.9-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-azure/CHANGELOG.md b/plugins/catalog-backend-module-azure/CHANGELOG.md index 6d1613bf1e..57cfff7cb2 100644 --- a/plugins/catalog-backend-module-azure/CHANGELOG.md +++ b/plugins/catalog-backend-module-azure/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-catalog-backend-module-azure +## 0.1.25-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/integration@1.7.1-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-tasks@0.5.11-next.2 + - @backstage/plugin-catalog-node@1.4.7-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.0.17-next.0 + ## 0.1.24-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-azure/package.json b/plugins/catalog-backend-module-azure/package.json index f8849b4925..f7353a1f37 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.24-next.1", + "version": "0.1.25-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md b/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md index 4a989d8214..bfd363123a 100644 --- a/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md +++ b/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-catalog-backend-module-bitbucket-cloud +## 0.1.21-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/integration@1.7.1-next.1 + - @backstage/backend-tasks@0.5.11-next.2 + - @backstage/plugin-catalog-node@1.4.7-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/catalog-client@1.4.5-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-bitbucket-cloud-common@0.2.13-next.1 + - @backstage/plugin-catalog-common@1.0.17-next.0 + - @backstage/plugin-events-node@0.2.15-next.2 + ## 0.1.20-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-bitbucket-cloud/package.json b/plugins/catalog-backend-module-bitbucket-cloud/package.json index 40f83d3717..5f8acc82ca 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.20-next.1", + "version": "0.1.21-next.2", "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 db98df3fc1..4501171eda 100644 --- a/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md +++ b/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-catalog-backend-module-bitbucket-server +## 0.1.19-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/integration@1.7.1-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-tasks@0.5.11-next.2 + - @backstage/plugin-catalog-node@1.4.7-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 + ## 0.1.18-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-bitbucket-server/package.json b/plugins/catalog-backend-module-bitbucket-server/package.json index d86127555f..1e937da6ea 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.18-next.1", + "version": "0.1.19-next.2", "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 756ad9f1dd..ffca76bddc 100644 --- a/plugins/catalog-backend-module-bitbucket/CHANGELOG.md +++ b/plugins/catalog-backend-module-bitbucket/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-catalog-backend-module-bitbucket +## 0.2.21-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/integration@1.7.1-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/plugin-catalog-node@1.4.7-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-bitbucket-cloud-common@0.2.13-next.1 + ## 0.2.20-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-bitbucket/package.json b/plugins/catalog-backend-module-bitbucket/package.json index 41827dc369..a85596ea32 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.20-next.1", + "version": "0.2.21-next.2", "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 0b50b8bf3b..e9509a5d02 100644 --- a/plugins/catalog-backend-module-gcp/CHANGELOG.md +++ b/plugins/catalog-backend-module-gcp/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-catalog-backend-module-gcp +## 0.1.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-kubernetes-common@0.7.0-next.1 + - @backstage/backend-tasks@0.5.11-next.2 + - @backstage/plugin-catalog-node@1.4.7-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 + ## 0.1.5-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-gcp/package.json b/plugins/catalog-backend-module-gcp/package.json index dc3ae7395d..cf297b186d 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.5-next.1", + "version": "0.1.6-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-gerrit/CHANGELOG.md b/plugins/catalog-backend-module-gerrit/CHANGELOG.md index cbfd993b9f..a6b8cb8167 100644 --- a/plugins/catalog-backend-module-gerrit/CHANGELOG.md +++ b/plugins/catalog-backend-module-gerrit/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-catalog-backend-module-gerrit +## 0.1.22-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/integration@1.7.1-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-tasks@0.5.11-next.2 + - @backstage/plugin-catalog-node@1.4.7-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 + ## 0.1.21-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-gerrit/package.json b/plugins/catalog-backend-module-gerrit/package.json index 9690978a3b..d4baf186d0 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.21-next.1", + "version": "0.1.22-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-github-org/.eslintrc.js b/plugins/catalog-backend-module-github-org/.eslintrc.js new file mode 100644 index 0000000000..e2a53a6ad2 --- /dev/null +++ b/plugins/catalog-backend-module-github-org/.eslintrc.js @@ -0,0 +1 @@ +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/catalog-backend-module-github-org/CHANGELOG.md b/plugins/catalog-backend-module-github-org/CHANGELOG.md new file mode 100644 index 0000000000..7dbac7fcc5 --- /dev/null +++ b/plugins/catalog-backend-module-github-org/CHANGELOG.md @@ -0,0 +1,17 @@ +# @backstage/plugin-catalog-backend-module-github-org + +## 0.1.0-next.0 + +### Minor Changes + +- c101e683d5: Added `catalogModuleGithubOrgEntityProvider` to ingest users and teams from multiple Github organizations. + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-catalog-backend-module-github@0.4.4-next.2 + - @backstage/backend-tasks@0.5.11-next.2 + - @backstage/plugin-catalog-node@1.4.7-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 diff --git a/plugins/catalog-backend-module-github-org/README.md b/plugins/catalog-backend-module-github-org/README.md new file mode 100644 index 0000000000..6b03dc299d --- /dev/null +++ b/plugins/catalog-backend-module-github-org/README.md @@ -0,0 +1,5 @@ +# @backstage/plugin-catalog-backend-module-github-org + +The github-org backend module for the catalog plugin. + +_This plugin was created through the Backstage CLI_ diff --git a/plugins/catalog-backend-module-github-org/api-report.md b/plugins/catalog-backend-module-github-org/api-report.md new file mode 100644 index 0000000000..e39c98182c --- /dev/null +++ b/plugins/catalog-backend-module-github-org/api-report.md @@ -0,0 +1,30 @@ +## API Report File for "@backstage/plugin-catalog-backend-module-github-org" + +> 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 { ExtensionPoint } from '@backstage/backend-plugin-api'; +import { GithubMultiOrgEntityProvider } from '@backstage/plugin-catalog-backend-module-github'; +import { TeamTransformer } from '@backstage/plugin-catalog-backend-module-github'; +import { UserTransformer } from '@backstage/plugin-catalog-backend-module-github'; + +// @public +const catalogModuleGithubOrgEntityProvider: () => BackendFeature; +export default catalogModuleGithubOrgEntityProvider; + +export { GithubMultiOrgEntityProvider }; + +// @public +export interface GithubOrgEntityProviderTransformsExtensionPoint { + setTeamTransformer(transformer: TeamTransformer): void; + setUserTransformer(transformer: UserTransformer): void; +} + +// @public +export const githubOrgEntityProviderTransformsExtensionPoint: ExtensionPoint; + +export { TeamTransformer }; + +export { UserTransformer }; +``` diff --git a/plugins/catalog-backend-module-github-org/catalog-info.yaml b/plugins/catalog-backend-module-github-org/catalog-info.yaml new file mode 100644 index 0000000000..a785727e76 --- /dev/null +++ b/plugins/catalog-backend-module-github-org/catalog-info.yaml @@ -0,0 +1,10 @@ +apiVersion: backstage.io/v1alpha1 +kind: Component +metadata: + name: backstage-plugin-catalog-backend-module-github-org + title: '@backstage/plugin-catalog-backend-module-github-org' + description: A Backstage catalog backend module that ingests users and teams from multiple Github organizations +spec: + lifecycle: experimental + type: backstage-backend-plugin-module + owner: catalog-maintainers diff --git a/plugins/catalog-backend-module-github-org/package.json b/plugins/catalog-backend-module-github-org/package.json new file mode 100644 index 0000000000..d970f3013a --- /dev/null +++ b/plugins/catalog-backend-module-github-org/package.json @@ -0,0 +1,41 @@ +{ + "name": "@backstage/plugin-catalog-backend-module-github-org", + "description": "The github-org backend module for the catalog 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/backend-tasks": "workspace:^", + "@backstage/config": "workspace:^", + "@backstage/plugin-catalog-backend-module-github": "workspace:^", + "@backstage/plugin-catalog-node": "workspace:^" + }, + "devDependencies": { + "@backstage/backend-test-utils": "workspace:^", + "@backstage/cli": "workspace:^", + "luxon": "^3.0.0" + }, + "files": [ + "dist" + ] +} diff --git a/plugins/catalog-backend-module-github-org/src/index.ts b/plugins/catalog-backend-module-github-org/src/index.ts new file mode 100644 index 0000000000..03d22b1a79 --- /dev/null +++ b/plugins/catalog-backend-module-github-org/src/index.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. + */ + +/** + * The github-org backend module for the catalog plugin. + * + * @packageDocumentation + */ +export { + catalogModuleGithubOrgEntityProvider as default, + type GithubOrgEntityProviderTransformsExtensionPoint, + githubOrgEntityProviderTransformsExtensionPoint, +} from './module'; +/** + * + * TODO(djamaile): GithubMultiOrgEntityProvider should be mirgated over to this module. + * Afterwards, mark it as deprecated in catalog-backend-module-github and export them there from this module. + */ +export { + GithubMultiOrgEntityProvider, + type TeamTransformer, + type UserTransformer, +} from '@backstage/plugin-catalog-backend-module-github'; diff --git a/plugins/catalog-backend-module-github/src/module/catalogModuleGithubOrgEntityProvider.test.ts b/plugins/catalog-backend-module-github-org/src/module.test.ts similarity index 96% rename from plugins/catalog-backend-module-github/src/module/catalogModuleGithubOrgEntityProvider.test.ts rename to plugins/catalog-backend-module-github-org/src/module.test.ts index 1b8b115a96..9f8e9119d9 100644 --- a/plugins/catalog-backend-module-github/src/module/catalogModuleGithubOrgEntityProvider.test.ts +++ b/plugins/catalog-backend-module-github-org/src/module.test.ts @@ -19,7 +19,7 @@ import { mockServices, startTestBackend } from '@backstage/backend-test-utils'; import { EntityProvider } from '@backstage/plugin-catalog-node'; import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node/alpha'; import { Duration } from 'luxon'; -import { catalogModuleGithubOrgEntityProvider } from './catalogModuleGithubOrgEntityProvider'; +import { catalogModuleGithubOrgEntityProvider } from './module'; describe('catalogModuleGithubOrgEntityProvider', () => { it('should register provider at the catalog extension point', async () => { diff --git a/plugins/catalog-backend-module-github/src/module/catalogModuleGithubOrgEntityProvider.ts b/plugins/catalog-backend-module-github-org/src/module.ts similarity index 97% rename from plugins/catalog-backend-module-github/src/module/catalogModuleGithubOrgEntityProvider.ts rename to plugins/catalog-backend-module-github-org/src/module.ts index 4838be54e1..e510464bb7 100644 --- a/plugins/catalog-backend-module-github/src/module/catalogModuleGithubOrgEntityProvider.ts +++ b/plugins/catalog-backend-module-github-org/src/module.ts @@ -35,7 +35,7 @@ import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node/ /** * Interface for {@link githubOrgEntityProviderTransformsExtensionPoint}. * - * @alpha + * @public */ export interface GithubOrgEntityProviderTransformsExtensionPoint { /** @@ -52,9 +52,9 @@ export interface GithubOrgEntityProviderTransformsExtensionPoint { } /** - * Extension point for runtime configuration of {@link catalogModuleGithubOrgEntityProvider}. + * Extension point for runtime configuration of catalogModuleGithubOrgEntityProvider. * - * @alpha + * @public */ export const githubOrgEntityProviderTransformsExtensionPoint = createExtensionPoint({ @@ -64,7 +64,7 @@ export const githubOrgEntityProviderTransformsExtensionPoint = /** * Registers the `GithubMultiOrgEntityProvider` with the catalog processing extension point. * - * @alpha + * @public */ export const catalogModuleGithubOrgEntityProvider = createBackendModule({ pluginId: 'catalog', diff --git a/plugins/catalog-backend-module-github/CHANGELOG.md b/plugins/catalog-backend-module-github/CHANGELOG.md index 1cb45ad261..b5d563617c 100644 --- a/plugins/catalog-backend-module-github/CHANGELOG.md +++ b/plugins/catalog-backend-module-github/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/plugin-catalog-backend-module-github +## 0.4.4-next.2 + +### Patch Changes + +- 0b55f773a7: Removed some unused dependencies +- c101e683d5: Removed `catalogModuleGithubOrgEntityProvider`. Import from `@backstage/plugin-catalog-backend-module-github-org` instead. +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-catalog-backend@1.14.0-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/integration@1.7.1-next.1 + - @backstage/backend-tasks@0.5.11-next.2 + - @backstage/plugin-catalog-node@1.4.7-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/catalog-client@1.4.5-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-catalog-common@1.0.17-next.0 + - @backstage/plugin-events-node@0.2.15-next.2 + ## 0.4.3-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-github/alpha-api-report.md b/plugins/catalog-backend-module-github/alpha-api-report.md index 3bf72c449b..cd5344f728 100644 --- a/plugins/catalog-backend-module-github/alpha-api-report.md +++ b/plugins/catalog-backend-module-github/alpha-api-report.md @@ -4,25 +4,10 @@ ```ts import { BackendFeature } from '@backstage/backend-plugin-api'; -import { ExtensionPoint } from '@backstage/backend-plugin-api'; -import { TeamTransformer } from '@backstage/plugin-catalog-backend-module-github'; -import { UserTransformer } from '@backstage/plugin-catalog-backend-module-github'; // @alpha const catalogModuleGithubEntityProvider: () => BackendFeature; export default catalogModuleGithubEntityProvider; -// @alpha -export const catalogModuleGithubOrgEntityProvider: () => BackendFeature; - -// @alpha -export interface GithubOrgEntityProviderTransformsExtensionPoint { - setTeamTransformer(transformer: TeamTransformer): void; - setUserTransformer(transformer: UserTransformer): void; -} - -// @alpha -export const githubOrgEntityProviderTransformsExtensionPoint: ExtensionPoint; - // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/catalog-backend-module-github/package.json b/plugins/catalog-backend-module-github/package.json index 8f22af5f62..0d3bc4191b 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.3-next.1", + "version": "0.4.4-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -51,13 +51,11 @@ "@backstage/catalog-client": "workspace:^", "@backstage/catalog-model": "workspace:^", "@backstage/config": "workspace:^", - "@backstage/errors": "workspace:^", "@backstage/integration": "workspace:^", "@backstage/plugin-catalog-backend": "workspace:^", "@backstage/plugin-catalog-common": "workspace:^", "@backstage/plugin-catalog-node": "workspace:^", "@backstage/plugin-events-node": "workspace:^", - "@backstage/types": "workspace:^", "@octokit/graphql": "^5.0.0", "@octokit/rest": "^19.0.3", "git-url-parse": "^13.0.0", diff --git a/plugins/catalog-backend-module-github/src/module/index.ts b/plugins/catalog-backend-module-github/src/module/index.ts index 7e8a214ca3..9c9331763c 100644 --- a/plugins/catalog-backend-module-github/src/module/index.ts +++ b/plugins/catalog-backend-module-github/src/module/index.ts @@ -15,8 +15,3 @@ */ export { catalogModuleGithubEntityProvider as default } from './catalogModuleGithubEntityProvider'; -export { - catalogModuleGithubOrgEntityProvider, - githubOrgEntityProviderTransformsExtensionPoint, - type GithubOrgEntityProviderTransformsExtensionPoint, -} from './catalogModuleGithubOrgEntityProvider'; diff --git a/plugins/catalog-backend-module-gitlab/CHANGELOG.md b/plugins/catalog-backend-module-gitlab/CHANGELOG.md index 6a3633aa8a..790320f5db 100644 --- a/plugins/catalog-backend-module-gitlab/CHANGELOG.md +++ b/plugins/catalog-backend-module-gitlab/CHANGELOG.md @@ -1,5 +1,35 @@ # @backstage/plugin-catalog-backend-module-gitlab +## 0.3.3-next.2 + +### Patch Changes + +- 4f70fdfc93: fix: use REST API to get root group memberships for GitLab SaaS users listing + + This API is the only one that shows `email` field for enterprise users and + allows to filter out bot users not using a license using the `is_using_seat` + field. + + We also added the annotation `gitlab.com/saml-external-uid` taking the value + of `group_saml_identity.extern_uid` of the `groups/:group-id/members` endpoint + response. This is useful in case you want to create a `SignInResolver` that + references the user with the id of your identity provider (e.g. OneLogin). + + ref: + + https://docs.gitlab.com/ee/user/enterprise_user/#get-users-email-addresses-through-the-api + https://docs.gitlab.com/ee/api/members.html#limitations + +- 0b55f773a7: Removed some unused dependencies +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/integration@1.7.1-next.1 + - @backstage/backend-tasks@0.5.11-next.2 + - @backstage/plugin-catalog-node@1.4.7-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 + ## 0.3.2-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-gitlab/package.json b/plugins/catalog-backend-module-gitlab/package.json index b3fc853c26..d5a8069460 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.2-next.1", + "version": "0.3.3-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -50,10 +50,8 @@ "@backstage/backend-tasks": "workspace:^", "@backstage/catalog-model": "workspace:^", "@backstage/config": "workspace:^", - "@backstage/errors": "workspace:^", "@backstage/integration": "workspace:^", "@backstage/plugin-catalog-node": "workspace:^", - "@backstage/types": "workspace:^", "lodash": "^4.17.21", "node-fetch": "^2.6.7", "uuid": "^8.0.0", diff --git a/plugins/catalog-backend-module-gitlab/src/lib/client.test.ts b/plugins/catalog-backend-module-gitlab/src/lib/client.test.ts index dad126e3e4..99f6e7869b 100644 --- a/plugins/catalog-backend-module-gitlab/src/lib/client.test.ts +++ b/plugins/catalog-backend-module-gitlab/src/lib/client.test.ts @@ -421,7 +421,7 @@ describe('GitLabClient', () => { user: { id: 'gid://gitlab/User/1', username: 'user1', - commitEmail: 'user1@example.com', + publicEmail: 'user1@example.com', name: 'user1', state: 'active', webUrl: 'user1.com', @@ -525,7 +525,7 @@ describe('GitLabClient', () => { user: { id: 'gid://gitlab/User/1', username: 'user1', - commitEmail: 'user1@example.com', + publicEmail: 'user1@example.com', name: 'user1', state: 'active', webUrl: 'user1.com', @@ -538,7 +538,7 @@ describe('GitLabClient', () => { user: { id: 'gid://gitlab/User/2', username: 'user2', - commitEmail: 'user2@example.com', + publicEmail: 'user2@example.com', name: 'user2', state: 'active', webUrl: 'user2.com', @@ -772,7 +772,7 @@ describe('GitLabClient', () => { user: { id: 'gid://gitlab/User/1', username: 'user1', - commitEmail: 'user1@example.com', + publicEmail: 'user1@example.com', name: 'user1', state: 'active', webUrl: 'user1.com', diff --git a/plugins/catalog-backend-module-gitlab/src/lib/client.ts b/plugins/catalog-backend-module-gitlab/src/lib/client.ts index daf82245e8..722f079a21 100644 --- a/plugins/catalog-backend-module-gitlab/src/lib/client.ts +++ b/plugins/catalog-backend-module-gitlab/src/lib/client.ts @@ -91,6 +91,22 @@ export class GitLabClient { }); } + async listSaaSUsers( + groupPath: string, + options?: CommonListOptions, + ): Promise> { + return this.pagedRequest( + `/groups/${encodeURIComponent(groupPath)}/members`, + { + ...options, + show_seat_info: true, + }, + ).then(resp => { + resp.items = resp.items.filter(user => user.is_using_seat); + return resp; + }); + } + async listGroups( options?: CommonListOptions, ): Promise> { @@ -205,7 +221,7 @@ export class GitLabClient { user { id username - commitEmail + publicEmail name state webUrl @@ -240,7 +256,7 @@ export class GitLabClient { const formattedUserResponse = { id: Number(userItem.user.id.replace(/^gid:\/\/gitlab\/User\//, '')), username: userItem.user.username, - email: userItem.user.commitEmail, + email: userItem.user.publicEmail, name: userItem.user.name, state: userItem.user.state, web_url: userItem.user.webUrl, diff --git a/plugins/catalog-backend-module-gitlab/src/lib/types.ts b/plugins/catalog-backend-module-gitlab/src/lib/types.ts index a339ac57e4..946317a11a 100644 --- a/plugins/catalog-backend-module-gitlab/src/lib/types.ts +++ b/plugins/catalog-backend-module-gitlab/src/lib/types.ts @@ -39,12 +39,17 @@ export type GitLabProject = { export type GitLabUser = { id: number; username: string; - email: string; + email?: string; name: string; state: string; web_url: string; avatar_url: string; groups?: GitLabGroup[]; + group_saml_identity?: GitLabGroupSamlIdentity; +}; + +export type GitLabGroupSamlIdentity = { + extern_uid: string; }; export type GitLabGroup = { @@ -64,7 +69,7 @@ export type GitLabGroupMembersResponse = { user: { id: string; username: string; - commitEmail: string; + publicEmail: string; name: string; state: string; webUrl: string; diff --git a/plugins/catalog-backend-module-gitlab/src/providers/GitlabOrgDiscoveryEntityProvider.test.ts b/plugins/catalog-backend-module-gitlab/src/providers/GitlabOrgDiscoveryEntityProvider.test.ts index ce00510140..ad930ea23d 100644 --- a/plugins/catalog-backend-module-gitlab/src/providers/GitlabOrgDiscoveryEntityProvider.test.ts +++ b/plugins/catalog-backend-module-gitlab/src/providers/GitlabOrgDiscoveryEntityProvider.test.ts @@ -548,46 +548,6 @@ describe('GitlabOrgDiscoveryEntityProvider', () => { }), ), ), - graphql - .link('https://gitlab.com/api/graphql') - .query('getGroupMembers', async (_, res, ctx) => - res( - ctx.data({ - group: { - groupMembers: { - nodes: [ - { - user: { - id: 'gid://gitlab/User/12', - username: 'testuser1', - commitEmail: 'testuser1@example.com', - state: 'active', - name: 'Test User 1', - webUrl: 'https://gitlab.com/testuser1', - avatarUrl: 'https://secure.gravatar.com/', - }, - }, - { - user: { - id: 'gid://gitlab/User/34', - username: 'testuser2', - commitEmail: 'testuser2@example.com', - state: 'active', - name: 'Test User 2', - webUrl: 'https://gitlab.com/testuser2', - avatarUrl: 'https://secure.gravatar.com/', - }, - }, - ], - pageInfo: { - endCursor: 'end', - hasNextPage: false, - }, - }, - }, - }), - ), - ), graphql .link('https://gitlab.com/api/graphql') .query('getGroupMembers', async (req, res, ctx) => @@ -608,6 +568,67 @@ describe('GitlabOrgDiscoveryEntityProvider', () => { }), ), ), + rest.get( + `https://gitlab.com/api/v4/groups/group1/members`, + (_req, res, ctx) => { + const response = [ + { + access_level: 30, + created_at: '2023-07-17T08:58:34.984Z', + expires_at: null, + id: 12, + username: 'testuser1', + name: 'Test User 1', + state: 'active', + avatar_url: 'https://secure.gravatar.com/', + web_url: 'https://gitlab.com/testuser1', + email: 'testuser1@example.com', + group_saml_identity: { + provider: 'group_saml', + extern_uid: '51', + saml_provider_id: 1, + }, + is_using_seat: true, + membership_state: 'active', + }, + { + access_level: 30, + created_at: '2023-07-19T08:58:34.984Z', + expires_at: null, + id: 34, + username: 'testuser2', + name: 'Test User 2', + state: 'active', + avatar_url: 'https://secure.gravatar.com/', + web_url: 'https://gitlab.com/testuser2', + email: 'testuser2@example.com', + group_saml_identity: { + provider: 'group_saml', + extern_uid: '52', + saml_provider_id: 1, + }, + is_using_seat: true, + membership_state: 'active', + }, + { + access_level: 50, + created_at: '2023-07-15T08:58:34.984Z', + expires_at: '2023-10-26', + id: 54, + username: 'group_100_bot_23dc8057bef66e05181f39be4652577c', + name: 'Token Bot', + state: 'active', + avatar_url: 'https://secure.gravatar.com/', + web_url: + 'https://gitlab.com/group_100_bot_23dc8057bef66e05181f39be4652577c', + group_saml_identity: null, + is_using_seat: false, + membership_state: 'active', + }, + ]; + return res(ctx.json(response)); + }, + ), ); await provider.connect(entityProviderConnection); @@ -630,11 +651,12 @@ describe('GitlabOrgDiscoveryEntityProvider', () => { 'backstage.io/managed-by-origin-location': 'url:https://gitlab.com/testuser1', 'gitlab.com/user-login': 'https://gitlab.com/testuser1', + 'gitlab.com/saml-external-uid': '51', }, name: 'testuser1', }, spec: { - memberOf: ['group2', 'group3'], + memberOf: ['group2'], profile: { displayName: 'Test User 1', email: 'testuser1@example.com', @@ -655,11 +677,12 @@ describe('GitlabOrgDiscoveryEntityProvider', () => { 'backstage.io/managed-by-origin-location': 'url:https://gitlab.com/testuser2', 'gitlab.com/user-login': 'https://gitlab.com/testuser2', + 'gitlab.com/saml-external-uid': '52', }, name: 'testuser2', }, spec: { - memberOf: ['group2', 'group3'], + memberOf: ['group3'], profile: { displayName: 'Test User 2', email: 'testuser2@example.com', diff --git a/plugins/catalog-backend-module-gitlab/src/providers/GitlabOrgDiscoveryEntityProvider.ts b/plugins/catalog-backend-module-gitlab/src/providers/GitlabOrgDiscoveryEntityProvider.ts index fcf6a33a22..732f9f9fac 100644 --- a/plugins/catalog-backend-module-gitlab/src/providers/GitlabOrgDiscoveryEntityProvider.ts +++ b/plugins/catalog-backend-module-gitlab/src/providers/GitlabOrgDiscoveryEntityProvider.ts @@ -193,12 +193,14 @@ export class GitlabOrgDiscoveryEntityProvider implements EntityProvider { }); } else { groups = (await client.listDescendantGroups(this.config.group)).items; - users = ( - await client.getGroupMembers(this.config.group.split('/')[0], [ - 'DIRECT', - 'DESCENDANTS', - ]) - ).items; + const rootGroup = this.config.group.split('/')[0]; + users = paginated( + options => client.listSaaSUsers(rootGroup, options), + { + page: 1, + per_page: 100, + }, + ); } const idMappedUser: { [userId: number]: GitLabUser } = {}; @@ -332,6 +334,10 @@ export class GitlabOrgDiscoveryEntityProvider implements EntityProvider { const annotations: { [annotationName: string]: string } = {}; annotations[`${host}/user-login`] = user.web_url; + if (user?.group_saml_identity?.extern_uid) { + annotations[`${host}/saml-external-uid`] = + user.group_saml_identity.extern_uid; + } const entity: UserEntity = { apiVersion: 'backstage.io/v1alpha1', diff --git a/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md b/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md index 870514fc08..cf18c6dddc 100644 --- a/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md +++ b/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-catalog-backend-module-incremental-ingestion +## 0.4.10-next.2 + +### Patch Changes + +- 0b55f773a7: Removed some unused dependencies +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-catalog-backend@1.14.0-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-tasks@0.5.11-next.2 + - @backstage/plugin-catalog-node@1.4.7-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-events-node@0.2.15-next.2 + - @backstage/plugin-permission-common@0.7.9-next.0 + ## 0.4.9-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-incremental-ingestion/package.json b/plugins/catalog-backend-module-incremental-ingestion/package.json index 1d0709b7da..1aa470dcc3 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.9-next.1", + "version": "0.4.10-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -60,13 +60,11 @@ "express": "^4.17.1", "express-promise-router": "^4.1.0", "knex": "^2.0.0", - "lodash": "^4.17.21", "luxon": "^3.0.0", "uuid": "^8.3.2", "winston": "^3.2.1" }, "devDependencies": { - "@backstage/backend-app-api": "workspace:^", "@backstage/backend-defaults": "workspace:^", "@backstage/backend-test-utils": "workspace:^", "@backstage/cli": "workspace:^" diff --git a/plugins/catalog-backend-module-ldap/CHANGELOG.md b/plugins/catalog-backend-module-ldap/CHANGELOG.md index cdf7473ff9..cb7b48d509 100644 --- a/plugins/catalog-backend-module-ldap/CHANGELOG.md +++ b/plugins/catalog-backend-module-ldap/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-catalog-backend-module-ldap +## 0.5.21-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-tasks@0.5.11-next.2 + - @backstage/plugin-catalog-node@1.4.7-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.0.17-next.0 + ## 0.5.20-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-ldap/package.json b/plugins/catalog-backend-module-ldap/package.json index d38d746563..ac8693251f 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.20-next.1", + "version": "0.5.21-next.2", "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 7d7f6f3039..b759abb9ab 100644 --- a/plugins/catalog-backend-module-msgraph/CHANGELOG.md +++ b/plugins/catalog-backend-module-msgraph/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-catalog-backend-module-msgraph +## 0.5.13-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/backend-tasks@0.5.11-next.2 + - @backstage/plugin-catalog-node@1.4.7-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-catalog-common@1.0.17-next.0 + ## 0.5.12-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-msgraph/package.json b/plugins/catalog-backend-module-msgraph/package.json index 112d0b7c34..d02dddcaea 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.12-next.1", + "version": "0.5.13-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-openapi/CHANGELOG.md b/plugins/catalog-backend-module-openapi/CHANGELOG.md index b103bd920d..90fe155927 100644 --- a/plugins/catalog-backend-module-openapi/CHANGELOG.md +++ b/plugins/catalog-backend-module-openapi/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-catalog-backend-module-openapi +## 0.1.23-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-catalog-backend@1.14.0-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/integration@1.7.1-next.1 + - @backstage/plugin-catalog-node@1.4.7-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.0.17-next.0 + ## 0.1.22-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-openapi/package.json b/plugins/catalog-backend-module-openapi/package.json index 52659c8d03..2230782402 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.22-next.1", + "version": "0.1.23-next.2", "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 7e74c43039..67e1696141 100644 --- a/plugins/catalog-backend-module-puppetdb/CHANGELOG.md +++ b/plugins/catalog-backend-module-puppetdb/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-catalog-backend-module-puppetdb +## 0.1.11-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-tasks@0.5.11-next.2 + - @backstage/plugin-catalog-node@1.4.7-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + ## 0.1.10-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-puppetdb/package.json b/plugins/catalog-backend-module-puppetdb/package.json index 3ec71d1042..381d1fcfb4 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.10-next.1", + "version": "0.1.11-next.2", "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 1be951bf47..2dc4e82d31 100644 --- a/plugins/catalog-backend-module-scaffolder-entity-model/CHANGELOG.md +++ b/plugins/catalog-backend-module-scaffolder-entity-model/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-catalog-backend-module-scaffolder-entity-model +## 0.1.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-node@1.4.7-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/plugin-catalog-common@1.0.17-next.0 + - @backstage/plugin-scaffolder-common@1.4.2-next.0 + ## 0.1.2-next.1 ### 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 35f573ec1e..b49a308146 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.2-next.1", + "version": "0.1.3-next.2", "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 2c229f113e..21b25797bc 100644 --- a/plugins/catalog-backend-module-unprocessed/CHANGELOG.md +++ b/plugins/catalog-backend-module-unprocessed/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-catalog-backend-module-unprocessed +## 0.3.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.4.0-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/backend-plugin-api@0.6.6-next.2 + ## 0.3.2-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-unprocessed/package.json b/plugins/catalog-backend-module-unprocessed/package.json index 2a923fdf87..5c45699175 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.2-next.1", + "version": "0.3.3-next.2", "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 6e74d0d408..ca34451992 100644 --- a/plugins/catalog-backend/CHANGELOG.md +++ b/plugins/catalog-backend/CHANGELOG.md @@ -1,5 +1,29 @@ # @backstage/plugin-catalog-backend +## 1.14.0-next.2 + +### Patch Changes + +- 0b55f773a7: Removed some unused dependencies +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-auth-node@0.4.0-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/integration@1.7.1-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-openapi-utils@0.0.5-next.0 + - @backstage/backend-tasks@0.5.11-next.2 + - @backstage/plugin-catalog-node@1.4.7-next.2 + - @backstage/plugin-permission-node@0.7.17-next.2 + - @backstage/plugin-search-backend-module-catalog@0.1.10-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/catalog-client@1.4.5-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.0.17-next.0 + - @backstage/plugin-events-node@0.2.15-next.2 + - @backstage/plugin-permission-common@0.7.9-next.0 + ## 1.14.0-next.1 ### Patch Changes diff --git a/plugins/catalog-backend/package.json b/plugins/catalog-backend/package.json index 45826a1f39..49f4d7a7b1 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.14.0-next.1", + "version": "1.14.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -60,16 +60,13 @@ "@backstage/plugin-events-node": "workspace:^", "@backstage/plugin-permission-common": "workspace:^", "@backstage/plugin-permission-node": "workspace:^", - "@backstage/plugin-scaffolder-common": "workspace:^", "@backstage/plugin-search-backend-module-catalog": "workspace:^", - "@backstage/plugin-search-common": "workspace:^", "@backstage/types": "workspace:^", "@opentelemetry/api": "^1.3.0", "@types/express": "^4.17.6", "codeowners-utils": "^1.0.2", "core-js": "^3.6.5", "express": "^4.17.1", - "express-promise-router": "^4.1.0", "fast-json-stable-stringify": "^2.1.0", "fs-extra": "10.1.0", "git-url-parse": "^13.0.0", @@ -91,7 +88,6 @@ "@backstage/backend-test-utils": "workspace:^", "@backstage/cli": "workspace:^", "@backstage/plugin-permission-common": "workspace:^", - "@backstage/plugin-search-backend-node": "workspace:^", "@types/core-js": "^2.5.4", "@types/git-url-parse": "^9.0.0", "@types/lodash": "^4.14.151", diff --git a/plugins/catalog-backend/src/modules/core/PlaceholderProcessor.test.ts b/plugins/catalog-backend/src/modules/core/PlaceholderProcessor.test.ts index f5e494f514..2ce7975e41 100644 --- a/plugins/catalog-backend/src/modules/core/PlaceholderProcessor.test.ts +++ b/plugins/catalog-backend/src/modules/core/PlaceholderProcessor.test.ts @@ -372,7 +372,7 @@ describe('PlaceholderProcessor', () => { () => {}, ), ).rejects.toThrow( - /^Placeholder \$text could not form a URL out of \.\/a\/b\/catalog-info\.yaml and \.\.\/c\/catalog-info\.yaml, TypeError \[ERR_INVALID_URL\]/, + /^Placeholder \$text could not form a URL out of \.\/a\/b\/catalog-info\.yaml and \.\.\/c\/catalog-info\.yaml, TypeError/, ); expect(reader.readUrl).not.toHaveBeenCalled(); diff --git a/plugins/catalog-common/CHANGELOG.md b/plugins/catalog-common/CHANGELOG.md index b33835b2b6..e3ad0c858f 100644 --- a/plugins/catalog-common/CHANGELOG.md +++ b/plugins/catalog-common/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-catalog-common +## 1.0.17-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-permission-common@0.7.9-next.0 + - @backstage/plugin-search-common@1.2.7-next.0 + ## 1.0.16 ### Patch Changes diff --git a/plugins/catalog-common/package.json b/plugins/catalog-common/package.json index ce78ffd5f0..35529e2cd1 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.16", + "version": "1.0.17-next.0", "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 a9fc8ea29d..2dfa6dffe4 100644 --- a/plugins/catalog-graph/CHANGELOG.md +++ b/plugins/catalog-graph/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-catalog-graph +## 0.2.37-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/theme@0.4.3-next.0 + - @backstage/catalog-client@1.4.5-next.0 + - @backstage/types@1.1.1 + ## 0.2.37-next.1 ### Patch Changes diff --git a/plugins/catalog-graph/package.json b/plugins/catalog-graph/package.json index 77cdee4476..3c58eebd3f 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.37-next.1", + "version": "0.2.37-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-graph/src/components/CatalogGraphPage/CatalogGraphPage.test.tsx b/plugins/catalog-graph/src/components/CatalogGraphPage/CatalogGraphPage.test.tsx index 2e215e75f9..f2360b678d 100644 --- a/plugins/catalog-graph/src/components/CatalogGraphPage/CatalogGraphPage.test.tsx +++ b/plugins/catalog-graph/src/components/CatalogGraphPage/CatalogGraphPage.test.tsx @@ -34,7 +34,44 @@ jest.mock('react-router-dom', () => ({ useNavigate: () => navigate, })); -describe('', () => { +/* + The tests in this file have been disabled for the following error: + + TypeError: Cannot read properties of null (reading 'document') + + at document (../../../node_modules/d3-drag/src/nodrag.js:5:19) + at SVGSVGElement.mousedowned (../../../node_modules/d3-zoom/src/zoom.js:279:16) + at SVGSVGElement.call (../../../node_modules/d3-selection/src/selection/on.js:3:14) + at SVGSVGElement.callTheUserObjectsOperation (../../../node_modules/jsdom/lib/jsdom/living/generated/EventListener.js:26:30) + at innerInvokeEventListeners (../../../node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:350:25) + at invokeEventListeners (../../../node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:286:3) + at SVGElementImpl._dispatch (../../../node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:233:9) + at SVGElementImpl.dispatchEvent (../../../node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:104:17) + at SVGElement.dispatchEvent (../../../node_modules/jsdom/lib/jsdom/living/generated/EventTarget.js:241:34) + at ../../../node_modules/@testing-library/user-event/dist/cjs/event/dispatchEvent.js:47:43 + at cb (../../../node_modules/@testing-library/react/dist/pure.js:66:16) + at batchedUpdates$1 (../../../node_modules/react-dom/cjs/react-dom.development.js:22380:12) + at act (../../../node_modules/react-dom/cjs/react-dom-test-utils.development.js:1042:14) + at Object.eventWrapper (../../../node_modules/@testing-library/react/dist/pure.js:65:26) + at Object.wrapEvent (../../../node_modules/@testing-library/user-event/dist/cjs/event/wrapEvent.js:29:24) + at Object.dispatchEvent (../../../node_modules/@testing-library/user-event/dist/cjs/event/dispatchEvent.js:47:22) + at Object.dispatchUIEvent (../../../node_modules/@testing-library/user-event/dist/cjs/event/dispatchEvent.js:24:26) + at Mouse.down (../../../node_modules/@testing-library/user-event/dist/cjs/system/pointer/mouse.js:83:34) + at PointerHost.press (../../../node_modules/@testing-library/user-event/dist/cjs/system/pointer/index.js:39:24) + at pointerAction (../../../node_modules/@testing-library/user-event/dist/cjs/pointer/index.js:59:43) + at Object.pointer (../../../node_modules/@testing-library/user-event/dist/cjs/pointer/index.js:35:15) + at ../../../node_modules/@testing-library/react/dist/pure.js:59:16 + + This has started happening after upgrading to the later version of @testing-library/user-event, and the d3-drag library + where it happens seems to be unmaintained. Skipping for now. + + https://github.com/d3/d3-drag/issues/79#issuecomment-1631409544 + + https://github.com/d3/d3-drag/issues/89 +*/ + +// eslint-disable-next-line jest/no-disabled-tests +describe.skip('', () => { let wrapper: JSX.Element; const entityC = { apiVersion: 'a', diff --git a/plugins/catalog-graph/src/components/EntityRelationsGraph/EntityRelationsGraph.test.tsx b/plugins/catalog-graph/src/components/EntityRelationsGraph/EntityRelationsGraph.test.tsx index 2556cd06d7..0ba9a3375a 100644 --- a/plugins/catalog-graph/src/components/EntityRelationsGraph/EntityRelationsGraph.test.tsx +++ b/plugins/catalog-graph/src/components/EntityRelationsGraph/EntityRelationsGraph.test.tsx @@ -29,7 +29,44 @@ import userEvent from '@testing-library/user-event'; import React, { FunctionComponent } from 'react'; import { EntityRelationsGraph } from './EntityRelationsGraph'; -describe('', () => { +/* + The tests in this file have been disabled for the following error: + + TypeError: Cannot read properties of null (reading 'document') + + at document (../../../node_modules/d3-drag/src/nodrag.js:5:19) + at SVGSVGElement.mousedowned (../../../node_modules/d3-zoom/src/zoom.js:279:16) + at SVGSVGElement.call (../../../node_modules/d3-selection/src/selection/on.js:3:14) + at SVGSVGElement.callTheUserObjectsOperation (../../../node_modules/jsdom/lib/jsdom/living/generated/EventListener.js:26:30) + at innerInvokeEventListeners (../../../node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:350:25) + at invokeEventListeners (../../../node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:286:3) + at SVGElementImpl._dispatch (../../../node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:233:9) + at SVGElementImpl.dispatchEvent (../../../node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:104:17) + at SVGElement.dispatchEvent (../../../node_modules/jsdom/lib/jsdom/living/generated/EventTarget.js:241:34) + at ../../../node_modules/@testing-library/user-event/dist/cjs/event/dispatchEvent.js:47:43 + at cb (../../../node_modules/@testing-library/react/dist/pure.js:66:16) + at batchedUpdates$1 (../../../node_modules/react-dom/cjs/react-dom.development.js:22380:12) + at act (../../../node_modules/react-dom/cjs/react-dom-test-utils.development.js:1042:14) + at Object.eventWrapper (../../../node_modules/@testing-library/react/dist/pure.js:65:26) + at Object.wrapEvent (../../../node_modules/@testing-library/user-event/dist/cjs/event/wrapEvent.js:29:24) + at Object.dispatchEvent (../../../node_modules/@testing-library/user-event/dist/cjs/event/dispatchEvent.js:47:22) + at Object.dispatchUIEvent (../../../node_modules/@testing-library/user-event/dist/cjs/event/dispatchEvent.js:24:26) + at Mouse.down (../../../node_modules/@testing-library/user-event/dist/cjs/system/pointer/mouse.js:83:34) + at PointerHost.press (../../../node_modules/@testing-library/user-event/dist/cjs/system/pointer/index.js:39:24) + at pointerAction (../../../node_modules/@testing-library/user-event/dist/cjs/pointer/index.js:59:43) + at Object.pointer (../../../node_modules/@testing-library/user-event/dist/cjs/pointer/index.js:35:15) + at ../../../node_modules/@testing-library/react/dist/pure.js:59:16 + + This has started happening after upgrading to the later version of @testing-library/user-event, and the d3-drag library + where it happens seems to be unmaintained. Skipping for now. + + https://github.com/d3/d3-drag/issues/79#issuecomment-1631409544 + + https://github.com/d3/d3-drag/issues/89 +*/ + +// eslint-disable-next-line jest/no-disabled-tests +describe.skip('', () => { let Wrapper: FunctionComponent>; const entities: { [ref: string]: Entity } = { 'b:d/c': { diff --git a/plugins/catalog-graphql/CHANGELOG.md b/plugins/catalog-graphql/CHANGELOG.md index e34136f8eb..867d52cb4b 100644 --- a/plugins/catalog-graphql/CHANGELOG.md +++ b/plugins/catalog-graphql/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-catalog-graphql +## 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 diff --git a/plugins/catalog-graphql/package.json b/plugins/catalog-graphql/package.json index e853f308f3..6a020732cf 100644 --- a/plugins/catalog-graphql/package.json +++ b/plugins/catalog-graphql/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-graphql", "description": "An experimental Backstage catalog GraphQL module", - "version": "0.3.23", + "version": "0.3.24-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-import/CHANGELOG.md b/plugins/catalog-import/CHANGELOG.md index 97a6070230..2043cca0f4 100644 --- a/plugins/catalog-import/CHANGELOG.md +++ b/plugins/catalog-import/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-catalog-import +## 0.10.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/integration-react@1.1.20-next.2 + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/integration@1.7.1-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/catalog-client@1.4.5-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-catalog-common@1.0.17-next.0 + ## 0.10.1-next.1 ### Patch Changes diff --git a/plugins/catalog-import/package.json b/plugins/catalog-import/package.json index a982b13373..3650482d77 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.1-next.1", + "version": "0.10.1-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-node/CHANGELOG.md b/plugins/catalog-node/CHANGELOG.md index 0126011e83..a60a3e21aa 100644 --- a/plugins/catalog-node/CHANGELOG.md +++ b/plugins/catalog-node/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-catalog-node +## 1.4.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/catalog-client@1.4.5-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.0.17-next.0 + ## 1.4.6-next.1 ### Patch Changes diff --git a/plugins/catalog-node/package.json b/plugins/catalog-node/package.json index 61e9823ea6..cbc17219c5 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.4.6-next.1", + "version": "1.4.7-next.2", "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 467f134119..3e65e4b55c 100644 --- a/plugins/catalog-react/CHANGELOG.md +++ b/plugins/catalog-react/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/plugin-catalog-react +## 1.8.5-next.2 + +### Patch Changes + +- 0b55f773a7: Removed some unused dependencies +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/integration@1.7.1-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/theme@0.4.3-next.0 + - @backstage/catalog-client@1.4.5-next.0 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.5 + - @backstage/plugin-catalog-common@1.0.17-next.0 + - @backstage/plugin-permission-common@0.7.9-next.0 + - @backstage/plugin-permission-react@0.4.16-next.1 + ## 1.8.5-next.1 ### Patch Changes diff --git a/plugins/catalog-react/package.json b/plugins/catalog-react/package.json index 637f83fcee..356159d2e6 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.8.5-next.1", + "version": "1.8.5-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -64,7 +64,6 @@ "@react-hookz/web": "^23.0.0", "@types/react": "^16.13.1 || ^17.0.0", "classnames": "^2.2.6", - "jwt-decode": "^3.1.0", "lodash": "^4.17.21", "material-ui-popup-state": "^1.9.3", "qs": "^6.9.4", @@ -88,7 +87,6 @@ "@testing-library/react": "^12.1.3", "@testing-library/react-hooks": "^8.0.0", "@testing-library/user-event": "^14.0.0", - "@types/jwt-decode": "^3.1.0", "@types/zen-observable": "^0.8.0", "react-test-renderer": "^16.13.1" }, diff --git a/plugins/catalog-unprocessed-entities/CHANGELOG.md b/plugins/catalog-unprocessed-entities/CHANGELOG.md index 612c02a9a1..f42483fc92 100644 --- a/plugins/catalog-unprocessed-entities/CHANGELOG.md +++ b/plugins/catalog-unprocessed-entities/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-catalog-unprocessed-entities +## 0.1.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/errors@1.2.3-next.0 + - @backstage/theme@0.4.3-next.0 + ## 0.1.4-next.1 ### Patch Changes diff --git a/plugins/catalog-unprocessed-entities/package.json b/plugins/catalog-unprocessed-entities/package.json index 735cb05f8d..bcc89f39de 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.4-next.1", + "version": "0.1.4-next.2", "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 648fa4d7a4..2286652eb8 100644 --- a/plugins/catalog/CHANGELOG.md +++ b/plugins/catalog/CHANGELOG.md @@ -1,5 +1,26 @@ # @backstage/plugin-catalog +## 1.14.0-next.2 + +### Patch Changes + +- 0b55f773a7: Removed some unused dependencies +- Updated dependencies + - @backstage/frontend-plugin-api@0.2.0-next.2 + - @backstage/integration-react@1.1.20-next.2 + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/plugin-search-react@1.7.1-next.2 + - @backstage/theme@0.4.3-next.0 + - @backstage/catalog-client@1.4.5-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.0.17-next.0 + - @backstage/plugin-scaffolder-common@1.4.2-next.0 + - @backstage/plugin-search-common@1.2.7-next.0 + ## 1.14.0-next.1 ### Patch Changes diff --git a/plugins/catalog/package.json b/plugins/catalog/package.json index f779220669..6b26ffa9f3 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.14.0-next.1", + "version": "1.14.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -67,7 +67,6 @@ "history": "^5.0.0", "lodash": "^4.17.21", "pluralize": "^8.0.0", - "react-helmet": "6.1.0", "react-use": "^17.2.4", "zen-observable": "^0.10.0" }, diff --git a/plugins/cicd-statistics-module-gitlab/CHANGELOG.md b/plugins/cicd-statistics-module-gitlab/CHANGELOG.md index a1952616bb..8821eeab83 100644 --- a/plugins/cicd-statistics-module-gitlab/CHANGELOG.md +++ b/plugins/cicd-statistics-module-gitlab/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-cicd-statistics-module-gitlab +## 0.1.21-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/plugin-cicd-statistics@0.1.27-next.2 + - @backstage/catalog-model@1.4.3-next.0 + ## 0.1.21-next.1 ### Patch Changes diff --git a/plugins/cicd-statistics-module-gitlab/package.json b/plugins/cicd-statistics-module-gitlab/package.json index afdd1cd758..d2997056fc 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.21-next.1", + "version": "0.1.21-next.2", "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 4abb69de10..7d07199028 100644 --- a/plugins/cicd-statistics/CHANGELOG.md +++ b/plugins/cicd-statistics/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-cicd-statistics +## 0.1.27-next.2 + +### Patch Changes + +- 0b55f773a7: Removed some unused dependencies +- Updated dependencies + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + ## 0.1.27-next.1 ### Patch Changes diff --git a/plugins/cicd-statistics/package.json b/plugins/cicd-statistics/package.json index 60668da35a..744963d55c 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.27-next.1", + "version": "0.1.27-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -50,7 +50,6 @@ "humanize-duration": "^3.27.0", "lodash": "^4.17.21", "luxon": "^3.0.0", - "prop-types": "^15.7.2", "react-use": "^17.3.1", "recharts": "^2.5.0" }, diff --git a/plugins/circleci/CHANGELOG.md b/plugins/circleci/CHANGELOG.md index 38e797dc35..7a25c01f56 100644 --- a/plugins/circleci/CHANGELOG.md +++ b/plugins/circleci/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-circleci +## 0.3.25-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/theme@0.4.3-next.0 + ## 0.3.25-next.1 ### Patch Changes diff --git a/plugins/circleci/package.json b/plugins/circleci/package.json index c1c4c07004..ae5d0d2665 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.25-next.1", + "version": "0.3.25-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/cloudbuild/CHANGELOG.md b/plugins/cloudbuild/CHANGELOG.md index 3affd61ba7..c1ac4d0747 100644 --- a/plugins/cloudbuild/CHANGELOG.md +++ b/plugins/cloudbuild/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-cloudbuild +## 0.3.25-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/theme@0.4.3-next.0 + ## 0.3.25-next.1 ### Patch Changes diff --git a/plugins/cloudbuild/package.json b/plugins/cloudbuild/package.json index d09f2372ab..ba7c42fe23 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.25-next.1", + "version": "0.3.25-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/code-climate/CHANGELOG.md b/plugins/code-climate/CHANGELOG.md index 9e32befc60..5f97316244 100644 --- a/plugins/code-climate/CHANGELOG.md +++ b/plugins/code-climate/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-code-climate +## 0.1.25-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/theme@0.4.3-next.0 + ## 0.1.25-next.1 ### Patch Changes diff --git a/plugins/code-climate/package.json b/plugins/code-climate/package.json index 800c97652f..d186a6a321 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.25-next.1", + "version": "0.1.25-next.2", "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 817fe0d57d..c7fb955e9f 100644 --- a/plugins/code-coverage-backend/CHANGELOG.md +++ b/plugins/code-coverage-backend/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-code-coverage-backend +## 0.2.20-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-auth-node@0.4.0-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/integration@1.7.1-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/catalog-client@1.4.5-next.0 + - @backstage/config@1.1.1-next.0 + ## 0.2.19-next.1 ### Patch Changes diff --git a/plugins/code-coverage-backend/package.json b/plugins/code-coverage-backend/package.json index 761fccda23..3c07f28eb8 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.19-next.1", + "version": "0.2.20-next.2", "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 3801f63f61..06a29ca4cc 100644 --- a/plugins/code-coverage/CHANGELOG.md +++ b/plugins/code-coverage/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-code-coverage +## 0.2.18-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/theme@0.4.3-next.0 + - @backstage/config@1.1.1-next.0 + ## 0.2.18-next.1 ### Patch Changes diff --git a/plugins/code-coverage/package.json b/plugins/code-coverage/package.json index f47a44221a..779fd21aef 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.18-next.1", + "version": "0.2.18-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/codescene/CHANGELOG.md b/plugins/codescene/CHANGELOG.md index 15f34acaf0..aed76f3c8b 100644 --- a/plugins/codescene/CHANGELOG.md +++ b/plugins/codescene/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-codescene +## 0.1.18-next.2 + +### Patch Changes + +- 9c9a9100b0: Internal refactor to avoid using the deprecated `.icon.svg` extension. +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/theme@0.4.3-next.0 + - @backstage/config@1.1.1-next.0 + ## 0.1.18-next.1 ### Patch Changes diff --git a/plugins/codescene/README.md b/plugins/codescene/README.md index fa44506964..bbfb58e68f 100644 --- a/plugins/codescene/README.md +++ b/plugins/codescene/README.md @@ -2,8 +2,6 @@ [CodeScene](https://codescene.com/) is a multi-purpose tool bridging code, business and people. See hidden risks and social patterns in your code. Prioritize and reduce technical debt. -![codescene-logo](./src/assets/codescene.icon.svg) - The CodeScene Backstage Plugin exposes a page component that will list the existing projects and their analysis data on your CodeScene instance. ![screenshot](./docs/codescene-plugin-screenshot.png) diff --git a/plugins/codescene/dev/index.tsx b/plugins/codescene/dev/index.tsx index 28ef638131..e6074f74fc 100644 --- a/plugins/codescene/dev/index.tsx +++ b/plugins/codescene/dev/index.tsx @@ -20,11 +20,13 @@ import { CodeScenePage, CodeSceneProjectDetailsPage, } from '../src/plugin'; +import { CodeSceneIcon } from '../src'; createDevApp() .registerPlugin(codescenePlugin) .addPage({ element: , + icon: CodeSceneIcon, title: 'Root Page', path: '/codescene', }) diff --git a/plugins/codescene/package.json b/plugins/codescene/package.json index c57a9c53af..0ced12ecac 100644 --- a/plugins/codescene/package.json +++ b/plugins/codescene/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-codescene", - "version": "0.1.18-next.1", + "version": "0.1.18-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/codescene/src/CodeSceneIcon.tsx b/plugins/codescene/src/CodeSceneIcon.tsx new file mode 100644 index 0000000000..ac694126da --- /dev/null +++ b/plugins/codescene/src/CodeSceneIcon.tsx @@ -0,0 +1,31 @@ +/* + * 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 SvgIcon from '@material-ui/core/SvgIcon'; +import { IconComponent } from '@backstage/core-plugin-api'; + +/** + * @public + */ +export const CodeSceneIcon: IconComponent = () => ( + + + + + + +); diff --git a/plugins/codescene/src/assets/codescene.icon.svg b/plugins/codescene/src/assets/codescene.icon.svg deleted file mode 100644 index e8102a4116..0000000000 --- a/plugins/codescene/src/assets/codescene.icon.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/plugins/codescene/src/index.ts b/plugins/codescene/src/index.ts index 355ff4eb31..301b4377a7 100644 --- a/plugins/codescene/src/index.ts +++ b/plugins/codescene/src/index.ts @@ -18,11 +18,4 @@ export { CodeScenePage, CodeSceneProjectDetailsPage, } from './plugin'; -import CodeSceneIconComponent from './assets/codescene.icon.svg'; -import { IconComponent } from '@backstage/core-plugin-api'; - -/** - * @public - */ -export const CodeSceneIcon: IconComponent = - CodeSceneIconComponent as IconComponent; +export { CodeSceneIcon } from './CodeSceneIcon'; diff --git a/plugins/config-schema/CHANGELOG.md b/plugins/config-schema/CHANGELOG.md index 2c2ac53154..0b1a03c5e5 100644 --- a/plugins/config-schema/CHANGELOG.md +++ b/plugins/config-schema/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-config-schema +## 0.1.46-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/theme@0.4.3-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + ## 0.1.46-next.1 ### Patch Changes diff --git a/plugins/config-schema/package.json b/plugins/config-schema/package.json index c623a59dfa..e6230122e2 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.46-next.1", + "version": "0.1.46-next.2", "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 a51c19f324..08dc64071e 100644 --- a/plugins/cost-insights/CHANGELOG.md +++ b/plugins/cost-insights/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-cost-insights +## 0.12.14-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/theme@0.4.3-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-cost-insights-common@0.1.2 + ## 0.12.14-next.1 ### Patch Changes diff --git a/plugins/cost-insights/package.json b/plugins/cost-insights/package.json index c204616fe4..bd985a9d74 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.14-next.1", + "version": "0.12.14-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/devtools-backend/CHANGELOG.md b/plugins/devtools-backend/CHANGELOG.md index 7fc9c01be5..16de7b7e6f 100644 --- a/plugins/devtools-backend/CHANGELOG.md +++ b/plugins/devtools-backend/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-devtools-backend +## 0.2.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-auth-node@0.4.0-next.2 + - @backstage/config-loader@1.5.1-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/plugin-permission-node@0.7.17-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/cli-common@0.1.13-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-devtools-common@0.1.5-next.0 + - @backstage/plugin-permission-common@0.7.9-next.0 + ## 0.2.2-next.1 ### Patch Changes diff --git a/plugins/devtools-backend/package.json b/plugins/devtools-backend/package.json index f5311f9cf3..865bbae714 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.2-next.1", + "version": "0.2.3-next.2", "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 4e1f15afcf..48688e77de 100644 --- a/plugins/devtools-common/CHANGELOG.md +++ b/plugins/devtools-common/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-devtools-common +## 0.1.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/types@1.1.1 + - @backstage/plugin-permission-common@0.7.9-next.0 + ## 0.1.4 ### Patch Changes diff --git a/plugins/devtools-common/package.json b/plugins/devtools-common/package.json index bde9934ffa..7f1aa0f93f 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.4", + "version": "0.1.5-next.0", "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 b858ff2c61..a585b7bde7 100644 --- a/plugins/devtools/CHANGELOG.md +++ b/plugins/devtools/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-devtools +## 0.1.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/theme@0.4.3-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-devtools-common@0.1.5-next.0 + - @backstage/plugin-permission-react@0.4.16-next.1 + ## 0.1.5-next.1 ### Patch Changes diff --git a/plugins/devtools/package.json b/plugins/devtools/package.json index 62ba643765..382e403a74 100644 --- a/plugins/devtools/package.json +++ b/plugins/devtools/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-devtools", - "version": "0.1.5-next.1", + "version": "0.1.5-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/dynatrace/CHANGELOG.md b/plugins/dynatrace/CHANGELOG.md index dc1c8cd54d..71b6670ab6 100644 --- a/plugins/dynatrace/CHANGELOG.md +++ b/plugins/dynatrace/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-dynatrace +## 7.0.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/theme@0.4.3-next.0 + ## 7.0.5-next.1 ### Patch Changes diff --git a/plugins/dynatrace/package.json b/plugins/dynatrace/package.json index 83395cabb8..2cde98bff9 100644 --- a/plugins/dynatrace/package.json +++ b/plugins/dynatrace/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-dynatrace", - "version": "7.0.5-next.1", + "version": "7.0.5-next.2", "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 8c0b27d2aa..3f7cac2902 100644 --- a/plugins/entity-feedback-backend/CHANGELOG.md +++ b/plugins/entity-feedback-backend/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-entity-feedback-backend +## 0.2.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-auth-node@0.4.0-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/catalog-client@1.4.5-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-entity-feedback-common@0.1.3 + ## 0.2.2-next.1 ### Patch Changes diff --git a/plugins/entity-feedback-backend/package.json b/plugins/entity-feedback-backend/package.json index 320748501f..8fe5048e4b 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.2-next.1", + "version": "0.2.3-next.2", "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 c5ead7f611..a88d2edb3f 100644 --- a/plugins/entity-feedback/CHANGELOG.md +++ b/plugins/entity-feedback/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-entity-feedback +## 0.2.8-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/theme@0.4.3-next.0 + - @backstage/plugin-entity-feedback-common@0.1.3 + ## 0.2.8-next.1 ### Patch Changes diff --git a/plugins/entity-feedback/package.json b/plugins/entity-feedback/package.json index b04e438e34..cc5f0231af 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.8-next.1", + "version": "0.2.8-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/entity-validation/CHANGELOG.md b/plugins/entity-validation/CHANGELOG.md index 0cb48bd911..1c4d966583 100644 --- a/plugins/entity-validation/CHANGELOG.md +++ b/plugins/entity-validation/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-entity-validation +## 0.1.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/theme@0.4.3-next.0 + - @backstage/catalog-client@1.4.5-next.0 + - @backstage/plugin-catalog-common@1.0.17-next.0 + ## 0.1.10-next.1 ### Patch Changes diff --git a/plugins/entity-validation/package.json b/plugins/entity-validation/package.json index 5f8368aeb0..910198c057 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.10-next.1", + "version": "0.1.10-next.2", "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 c45de40839..3f162afd2e 100644 --- a/plugins/events-backend-module-aws-sqs/CHANGELOG.md +++ b/plugins/events-backend-module-aws-sqs/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-events-backend-module-aws-sqs +## 0.2.9-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/backend-tasks@0.5.11-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-events-node@0.2.15-next.2 + ## 0.2.8-next.1 ### Patch Changes diff --git a/plugins/events-backend-module-aws-sqs/package.json b/plugins/events-backend-module-aws-sqs/package.json index c9825edbff..8ca4e27abf 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.8-next.1", + "version": "0.2.9-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend-module-azure/CHANGELOG.md b/plugins/events-backend-module-azure/CHANGELOG.md index 4883d87b10..bd0ca38f85 100644 --- a/plugins/events-backend-module-azure/CHANGELOG.md +++ b/plugins/events-backend-module-azure/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-events-backend-module-azure +## 0.1.16-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/plugin-events-node@0.2.15-next.2 + ## 0.1.15-next.1 ### Patch Changes diff --git a/plugins/events-backend-module-azure/package.json b/plugins/events-backend-module-azure/package.json index 18d712e5c4..87c95c0dbe 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.15-next.1", + "version": "0.1.16-next.2", "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 21b4e7e6ca..813824f84b 100644 --- a/plugins/events-backend-module-bitbucket-cloud/CHANGELOG.md +++ b/plugins/events-backend-module-bitbucket-cloud/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-events-backend-module-bitbucket-cloud +## 0.1.16-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/plugin-events-node@0.2.15-next.2 + ## 0.1.15-next.1 ### Patch Changes diff --git a/plugins/events-backend-module-bitbucket-cloud/package.json b/plugins/events-backend-module-bitbucket-cloud/package.json index 5d6563e8b6..b3217dc782 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.15-next.1", + "version": "0.1.16-next.2", "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 aa368e48e4..a5b9334e3a 100644 --- a/plugins/events-backend-module-gerrit/CHANGELOG.md +++ b/plugins/events-backend-module-gerrit/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-events-backend-module-gerrit +## 0.1.16-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/plugin-events-node@0.2.15-next.2 + ## 0.1.15-next.1 ### Patch Changes diff --git a/plugins/events-backend-module-gerrit/package.json b/plugins/events-backend-module-gerrit/package.json index 9b05753c42..e23ade8c7b 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.15-next.1", + "version": "0.1.16-next.2", "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 16979ed40b..cfac727ae8 100644 --- a/plugins/events-backend-module-github/CHANGELOG.md +++ b/plugins/events-backend-module-github/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-events-backend-module-github +## 0.1.16-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-events-node@0.2.15-next.2 + ## 0.1.15-next.1 ### Patch Changes diff --git a/plugins/events-backend-module-github/package.json b/plugins/events-backend-module-github/package.json index c6cce93bda..7a7d0f8a29 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.15-next.1", + "version": "0.1.16-next.2", "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 24f8a1c574..a2dc5c06e0 100644 --- a/plugins/events-backend-module-gitlab/CHANGELOG.md +++ b/plugins/events-backend-module-gitlab/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-events-backend-module-gitlab +## 0.1.16-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-events-node@0.2.15-next.2 + ## 0.1.15-next.1 ### Patch Changes diff --git a/plugins/events-backend-module-gitlab/package.json b/plugins/events-backend-module-gitlab/package.json index 7e7ca5eb31..bc5708a589 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.15-next.1", + "version": "0.1.16-next.2", "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 6df0dc6a05..ced0c8f8ce 100644 --- a/plugins/events-backend-test-utils/CHANGELOG.md +++ b/plugins/events-backend-test-utils/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-events-backend-test-utils +## 0.1.16-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.2.15-next.2 + ## 0.1.15-next.1 ### Patch Changes diff --git a/plugins/events-backend-test-utils/package.json b/plugins/events-backend-test-utils/package.json index 9d09d999f4..79e512f16c 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.15-next.1", + "version": "0.1.16-next.2", "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 9810584a6b..618bbfaeb1 100644 --- a/plugins/events-backend/CHANGELOG.md +++ b/plugins/events-backend/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-events-backend +## 0.2.15-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-events-node@0.2.15-next.2 + ## 0.2.14-next.1 ### Patch Changes diff --git a/plugins/events-backend/package.json b/plugins/events-backend/package.json index 03028ae833..d06abe1d69 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.14-next.1", + "version": "0.2.15-next.2", "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 607651ad73..de950928af 100644 --- a/plugins/events-node/CHANGELOG.md +++ b/plugins/events-node/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-events-node +## 0.2.15-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.6.6-next.2 + ## 0.2.14-next.1 ### Patch Changes diff --git a/plugins/events-node/package.json b/plugins/events-node/package.json index 762b5237b0..1918c7f247 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.14-next.1", + "version": "0.2.15-next.2", "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 8c1c37256d..95d2fead77 100644 --- a/plugins/example-todo-list-backend/CHANGELOG.md +++ b/plugins/example-todo-list-backend/CHANGELOG.md @@ -1,5 +1,16 @@ # @internal/plugin-todo-list-backend +## 1.0.18-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-auth-node@0.4.0-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 + ## 1.0.18-next.1 ### Patch Changes diff --git a/plugins/example-todo-list-backend/package.json b/plugins/example-todo-list-backend/package.json index 3a3a38a5c4..d8ad84d67a 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.18-next.1", + "version": "1.0.18-next.2", "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 af2dba54e0..ad0c7d91e9 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.14-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.7.9-next.0 + ## 1.0.13 ### Patch Changes diff --git a/plugins/example-todo-list-common/package.json b/plugins/example-todo-list-common/package.json index 257f19e1c7..f2c852921c 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.13", + "version": "1.0.14-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/example-todo-list/CHANGELOG.md b/plugins/example-todo-list/CHANGELOG.md index 04243ee26a..f23c1769d3 100644 --- a/plugins/example-todo-list/CHANGELOG.md +++ b/plugins/example-todo-list/CHANGELOG.md @@ -1,5 +1,14 @@ # @internal/plugin-todo-list +## 1.0.18-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/theme@0.4.3-next.0 + ## 1.0.18-next.1 ### Patch Changes diff --git a/plugins/example-todo-list/package.json b/plugins/example-todo-list/package.json index 589689a59c..93e16f2fd0 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.18-next.1", + "version": "1.0.18-next.2", "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 4e27d8f124..1e49ebec92 100644 --- a/plugins/explore-backend/CHANGELOG.md +++ b/plugins/explore-backend/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-explore-backend +## 0.0.16-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-search-backend-module-explore@0.1.10-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-explore-common@0.0.2 + - @backstage/plugin-search-common@1.2.7-next.0 + ## 0.0.15-next.1 ### Patch Changes diff --git a/plugins/explore-backend/package.json b/plugins/explore-backend/package.json index 1e8a4a456b..72c461a539 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.15-next.1", + "version": "0.0.16-next.2", "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 6d45e9a689..499e04120f 100644 --- a/plugins/explore-react/CHANGELOG.md +++ b/plugins/explore-react/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-explore-react +## 0.0.32-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/plugin-explore-common@0.0.2 + ## 0.0.32-next.0 ### Patch Changes diff --git a/plugins/explore-react/package.json b/plugins/explore-react/package.json index 9282573a38..629f1453c4 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.32-next.0", + "version": "0.0.32-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/explore/CHANGELOG.md b/plugins/explore/CHANGELOG.md index 480d85437d..687cad7d4c 100644 --- a/plugins/explore/CHANGELOG.md +++ b/plugins/explore/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-explore +## 0.4.11-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.2.0-next.2 + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/plugin-search-react@1.7.1-next.2 + - @backstage/theme@0.4.3-next.0 + - @backstage/plugin-explore-common@0.0.2 + - @backstage/plugin-explore-react@0.0.32-next.1 + - @backstage/plugin-search-common@1.2.7-next.0 + ## 0.4.11-next.1 ### Patch Changes diff --git a/plugins/explore/package.json b/plugins/explore/package.json index 0462d60884..8653182e69 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.11-next.1", + "version": "0.4.11-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/firehydrant/CHANGELOG.md b/plugins/firehydrant/CHANGELOG.md index b1694c6717..8bb37cc531 100644 --- a/plugins/firehydrant/CHANGELOG.md +++ b/plugins/firehydrant/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-firehydrant +## 0.2.9-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/theme@0.4.3-next.0 + ## 0.2.9-next.1 ### Patch Changes diff --git a/plugins/firehydrant/package.json b/plugins/firehydrant/package.json index 31848ee464..2115b5500c 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.9-next.1", + "version": "0.2.9-next.2", "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 68a526db00..e22cf6629c 100644 --- a/plugins/fossa/CHANGELOG.md +++ b/plugins/fossa/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-fossa +## 0.2.57-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/theme@0.4.3-next.0 + ## 0.2.57-next.1 ### Patch Changes diff --git a/plugins/fossa/package.json b/plugins/fossa/package.json index 7fbe7e5570..d90743fab7 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.57-next.1", + "version": "0.2.57-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/gcalendar/CHANGELOG.md b/plugins/gcalendar/CHANGELOG.md index 3e479c9bc4..0a64fd7019 100644 --- a/plugins/gcalendar/CHANGELOG.md +++ b/plugins/gcalendar/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-gcalendar +## 0.3.19-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/theme@0.4.3-next.0 + ## 0.3.19-next.1 ### Patch Changes diff --git a/plugins/gcalendar/package.json b/plugins/gcalendar/package.json index be9b02d4cc..5ebf5eadd0 100644 --- a/plugins/gcalendar/package.json +++ b/plugins/gcalendar/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-gcalendar", - "version": "0.3.19-next.1", + "version": "0.3.19-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/gcp-projects/CHANGELOG.md b/plugins/gcp-projects/CHANGELOG.md index 69584e9c89..c5c8d88264 100644 --- a/plugins/gcp-projects/CHANGELOG.md +++ b/plugins/gcp-projects/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-gcp-projects +## 0.3.42-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/theme@0.4.3-next.0 + ## 0.3.42-next.1 ### Patch Changes diff --git a/plugins/gcp-projects/package.json b/plugins/gcp-projects/package.json index 888f2c7a16..c0272400e3 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.42-next.1", + "version": "0.3.42-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/git-release-manager/CHANGELOG.md b/plugins/git-release-manager/CHANGELOG.md index 10c0d6770a..7471d15867 100644 --- a/plugins/git-release-manager/CHANGELOG.md +++ b/plugins/git-release-manager/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-git-release-manager +## 0.3.38-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/integration@1.7.1-next.1 + - @backstage/theme@0.4.3-next.0 + ## 0.3.38-next.1 ### Patch Changes diff --git a/plugins/git-release-manager/package.json b/plugins/git-release-manager/package.json index 869d39633d..f7d82005cd 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.38-next.1", + "version": "0.3.38-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/git-release-manager/src/plugin.test.ts b/plugins/git-release-manager/src/plugin.test.ts index b293ea05eb..055482dd7b 100644 --- a/plugins/git-release-manager/src/plugin.test.ts +++ b/plugins/git-release-manager/src/plugin.test.ts @@ -18,15 +18,15 @@ import * as plugin from './plugin'; describe('git-release-manager', () => { it('should export plugin & friends', () => { - expect(Object.keys(plugin)).toMatchInlineSnapshot(` + expect(Object.keys(plugin).sort()).toMatchInlineSnapshot(` [ - "gitReleaseManagerApiRef", - "constants", - "helpers", - "components", - "testHelpers", - "gitReleaseManagerPlugin", "GitReleaseManagerPage", + "components", + "constants", + "gitReleaseManagerApiRef", + "gitReleaseManagerPlugin", + "helpers", + "testHelpers", ] `); }); diff --git a/plugins/github-actions/CHANGELOG.md b/plugins/github-actions/CHANGELOG.md index e4bea23a68..9c57b8914b 100644 --- a/plugins/github-actions/CHANGELOG.md +++ b/plugins/github-actions/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-github-actions +## 0.6.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/integration-react@1.1.20-next.2 + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/integration@1.7.1-next.1 + - @backstage/theme@0.4.3-next.0 + ## 0.6.6-next.1 ### Patch Changes diff --git a/plugins/github-actions/package.json b/plugins/github-actions/package.json index fa273363c9..6ed67be839 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.6-next.1", + "version": "0.6.6-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/github-deployments/CHANGELOG.md b/plugins/github-deployments/CHANGELOG.md index 637bb2ca7f..37f8d61176 100644 --- a/plugins/github-deployments/CHANGELOG.md +++ b/plugins/github-deployments/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-github-deployments +## 0.1.56-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/integration-react@1.1.20-next.2 + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/integration@1.7.1-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/theme@0.4.3-next.0 + ## 0.1.56-next.1 ### Patch Changes diff --git a/plugins/github-deployments/package.json b/plugins/github-deployments/package.json index edd3b6ff0e..3e6f9f111f 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.56-next.1", + "version": "0.1.56-next.2", "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 e6a848c39d..c79e8c21eb 100644 --- a/plugins/github-issues/CHANGELOG.md +++ b/plugins/github-issues/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-github-issues +## 0.2.14-next.2 + +### Patch Changes + +- 7bd0a8ab3c: Filters out entities that belonged to a different github instance other than the one configured by the plugin +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/integration@1.7.1-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/theme@0.4.3-next.0 + ## 0.2.14-next.1 ### Patch Changes diff --git a/plugins/github-issues/package.json b/plugins/github-issues/package.json index 0a18bb22b9..7afbeb9d65 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.14-next.1", + "version": "0.2.14-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/github-issues/src/api/githubIssuesApi.test.ts b/plugins/github-issues/src/api/githubIssuesApi.test.ts index e960d3123b..f3c1b29675 100644 --- a/plugins/github-issues/src/api/githubIssuesApi.test.ts +++ b/plugins/github-issues/src/api/githubIssuesApi.test.ts @@ -21,9 +21,22 @@ jest.mock('octokit', () => ({ import { ConfigApi, ErrorApi } from '@backstage/core-plugin-api'; import { ForwardedError } from '@backstage/errors'; -import { createFilterByClause, githubIssuesApi } from './githubIssuesApi'; -import type { GithubIssuesFilters } from './githubIssuesApi'; +import { + createFilterByClause, + githubIssuesApi, + Repository, + GithubIssuesFilters, +} from './githubIssuesApi'; +function entityRepository( + name: string, + locationHostname: string = 'github.com', +): Repository { + return { + locationHostname, + name, + }; +} function getFragment( filterBy = '', orderBy = 'field: UPDATED_AT, direction: DESC', @@ -110,7 +123,26 @@ describe('githubIssuesApi', () => { it('should call GitHub API with correct query with fragment for each repo', async () => { await api.fetchIssuesByRepoFromGithub( - ['mrwolny/yo-yo', 'mrwolny/yoyo', 'mrwolny/yo.yo'], + [ + entityRepository('mrwolny/yo-yo'), + entityRepository('mrwolny/yoyo'), + entityRepository('mrwolny/yo.yo'), + ], + 10, + ); + + expect(mockGraphQLQuery).toHaveBeenCalledTimes(1); + expect(mockGraphQLQuery).toHaveBeenCalledWith(getFragment()); + }); + + it("should only fetch data for entities hosted in the same GitHub instance as the plugin's config", async () => { + await api.fetchIssuesByRepoFromGithub( + [ + entityRepository('mrwolny/yo-yo'), + entityRepository('mrwolny/yoyo'), + entityRepository('mrwolny/yo.yo'), + entityRepository('mrwolny/another-repo', 'enterprise.github.com'), // This one should be filtered out + ], 10, ); @@ -120,7 +152,11 @@ describe('githubIssuesApi', () => { it('should call Github API with the correct filterBy and orderBy clauses', async () => { await api.fetchIssuesByRepoFromGithub( - ['mrwolny/yo-yo', 'mrwolny/yoyo', 'mrwolny/yo.yo'], + [ + entityRepository('mrwolny/yo-yo'), + entityRepository('mrwolny/yoyo'), + entityRepository('mrwolny/yo.yo'), + ], 10, { filterBy: { @@ -231,7 +267,7 @@ describe('githubIssuesApi', () => { ); const data = await api.fetchIssuesByRepoFromGithub( - ['mrwolny/yo-yo', 'mrwolny/notfound'], + [entityRepository('mrwolny/yo-yo'), entityRepository('mrwolny/notfound')], 10, ); @@ -301,7 +337,7 @@ describe('githubIssuesApi', () => { ); const data = await api.fetchIssuesByRepoFromGithub( - ['mrwolny/notfound'], + [entityRepository('mrwolny/notfound')], 10, ); @@ -341,7 +377,10 @@ describe('githubIssuesApi', () => { mockErrorApi as unknown as ErrorApi, ); - await api.fetchIssuesByRepoFromGithub(['mrwolny/notfound'], 10); + await api.fetchIssuesByRepoFromGithub( + [entityRepository('mrwolny/notfound')], + 10, + ); expect(mockErrorApi.post).toHaveBeenCalledTimes(1); expect(mockErrorApi.post).toHaveBeenCalledWith( diff --git a/plugins/github-issues/src/api/githubIssuesApi.ts b/plugins/github-issues/src/api/githubIssuesApi.ts index 32331ef6b1..d7b39989d8 100644 --- a/plugins/github-issues/src/api/githubIssuesApi.ts +++ b/plugins/github-issues/src/api/githubIssuesApi.ts @@ -24,6 +24,11 @@ import { import { readGithubIntegrationConfigs } from '@backstage/integration'; import { ForwardedError } from '@backstage/errors'; +/** @internal */ +export type Repository = { + name: string; + locationHostname: string; +}; /** @internal */ export type Assignee = { avatarUrl: string; @@ -116,9 +121,10 @@ export const githubIssuesApi = ( let octokit: Octokit; const getOctokit = async () => { - const baseUrl = readGithubIntegrationConfigs( + const githubConfig = readGithubIntegrationConfigs( configApi.getOptionalConfigArray('integrations.github') ?? [], - )[0].apiBaseUrl; + )[0]; + const baseUrl = githubConfig.apiBaseUrl; const token = await githubAuthApi.getAccessToken(['repo']); @@ -126,11 +132,11 @@ export const githubIssuesApi = ( octokit = new Octokit({ auth: token, ...(baseUrl && { baseUrl }) }); } - return octokit.graphql; + return { graphql: octokit.graphql, hostname: githubConfig.host }; }; const fetchIssuesByRepoFromGithub = async ( - repos: Array, + repos: Array, itemsPerRepo: number, { filterBy, @@ -140,30 +146,35 @@ export const githubIssuesApi = ( }, }: GithubIssuesByRepoOptions = {}, ): Promise => { - const graphql = await getOctokit(); + const { graphql, hostname } = await getOctokit(); const safeNames: Array = []; + const repositories = repos + // only tries to fetch issues from repositories that are hosted on the same GitHub instance as the octokit + .filter(repo => repo.locationHostname === hostname) + .map(repo => { + const [owner, name] = repo.name.split('/'); - const repositories = repos.map(repo => { - const [owner, name] = repo.split('/'); + const safeNameRegex = /-|\./gi; + let safeName = name.replace(safeNameRegex, ''); - const safeNameRegex = /-|\./gi; - let safeName = name.replace(safeNameRegex, ''); + while (safeNames.includes(safeName)) { + safeName += 'x'; + } - while (safeNames.includes(safeName)) { - safeName += 'x'; - } + safeNames.push(safeName); - safeNames.push(safeName); - - return { - safeName, - name, - owner, - }; - }); + return { + safeName, + name, + owner, + }; + }); let issuesByRepo: IssuesByRepo = {}; try { + if (repositories.length === 0) { + throw new Error(`No repositories found for ${hostname}`); + } issuesByRepo = await graphql( createIssueByRepoQuery(repositories, itemsPerRepo, { filterBy, diff --git a/plugins/github-issues/src/components/GithubIssues/GithubIssues.test.tsx b/plugins/github-issues/src/components/GithubIssues/GithubIssues.test.tsx index 3f9e829de9..bf3cac7423 100644 --- a/plugins/github-issues/src/components/GithubIssues/GithubIssues.test.tsx +++ b/plugins/github-issues/src/components/GithubIssues/GithubIssues.test.tsx @@ -68,6 +68,8 @@ const entityComponent = { metadata: { annotations: { 'github.com/project-slug': 'backstage/backstage', + 'backstage.io/source-location': + 'url:https://github.com/backstage/backstage', }, name: 'backstage', }, diff --git a/plugins/github-issues/src/hooks/useEntityGithubRepositories.ts b/plugins/github-issues/src/hooks/useEntityGithubRepositories.ts index f3fab72090..b9763298e6 100644 --- a/plugins/github-issues/src/hooks/useEntityGithubRepositories.ts +++ b/plugins/github-issues/src/hooks/useEntityGithubRepositories.ts @@ -14,10 +14,15 @@ * limitations under the License. */ -import { Entity, stringifyEntityRef } from '@backstage/catalog-model'; +import { + Entity, + stringifyEntityRef, + getEntitySourceLocation, +} from '@backstage/catalog-model'; import { useApi } from '@backstage/core-plugin-api'; import { catalogApiRef, useEntity } from '@backstage/plugin-catalog-react'; import { useCallback, useEffect, useState } from 'react'; +import { Repository } from '../api'; const GITHUB_PROJECT_SLUG_ANNOTATION = 'github.com/project-slug'; @@ -25,18 +30,28 @@ export const getProjectNameFromEntity = (entity: Entity): string => { return entity?.metadata.annotations?.[GITHUB_PROJECT_SLUG_ANNOTATION] ?? ''; }; +export const getHostnameFromEntity = (entity: Entity): string => { + const { target } = getEntitySourceLocation(entity); + return new URL(target).hostname; +}; + export function useEntityGithubRepositories() { const { entity } = useEntity(); const catalogApi = useApi(catalogApiRef); - const [repositories, setRepositories] = useState([]); + const [repositories, setRepositories] = useState([]); const getRepositoriesNames = useCallback(async () => { if (entity.kind === 'Component' || entity.kind === 'API') { const entityName = getProjectNameFromEntity(entity); - + const locationHostname = getHostnameFromEntity(entity); if (entityName) { - setRepositories([entityName]); + setRepositories([ + { + name: entityName, + locationHostname, + }, + ]); } return; @@ -49,11 +64,26 @@ export function useEntityGithubRepositories() { }, }); - const entitiesNames: string[] = entitiesList.items.map(componentEntity => - getProjectNameFromEntity(componentEntity), + const repositoryEntities: Repository[] = entitiesList.items.reduce( + (acc: Repository[], componentEntity: Entity) => { + const entityName = getProjectNameFromEntity(componentEntity); + const entityLocationHostname = getHostnameFromEntity(componentEntity); + if ( + entityName && + !acc.some((it: Repository) => it.name === entityName) && + entityName.length + ) { + acc.push({ + name: entityName, + locationHostname: entityLocationHostname, + }); + } + return acc; + }, + [], ); - setRepositories([...new Set(entitiesNames)].filter(name => name.length)); + setRepositories(repositoryEntities); }, [catalogApi, entity]); useEffect(() => { diff --git a/plugins/github-issues/src/hooks/useGetIssuesByRepoFromGithub.ts b/plugins/github-issues/src/hooks/useGetIssuesByRepoFromGithub.ts index 8ec5f3ec65..0b5bad7f57 100644 --- a/plugins/github-issues/src/hooks/useGetIssuesByRepoFromGithub.ts +++ b/plugins/github-issues/src/hooks/useGetIssuesByRepoFromGithub.ts @@ -16,10 +16,14 @@ import { useApi } from '@backstage/core-plugin-api'; import useAsyncRetry from 'react-use/lib/useAsyncRetry'; -import { githubIssuesApiRef, GithubIssuesByRepoOptions } from '../api'; +import { + Repository, + githubIssuesApiRef, + GithubIssuesByRepoOptions, +} from '../api'; export const useGetIssuesByRepoFromGithub = ( - repos: Array, + repos: Array, itemsPerRepo: number, options?: GithubIssuesByRepoOptions, ) => { diff --git a/plugins/github-pull-requests-board/CHANGELOG.md b/plugins/github-pull-requests-board/CHANGELOG.md index cf06af7c0c..3dd30fd68e 100644 --- a/plugins/github-pull-requests-board/CHANGELOG.md +++ b/plugins/github-pull-requests-board/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-github-pull-requests-board +## 0.1.19-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/integration@1.7.1-next.1 + - @backstage/theme@0.4.3-next.0 + ## 0.1.19-next.1 ### Patch Changes diff --git a/plugins/github-pull-requests-board/package.json b/plugins/github-pull-requests-board/package.json index b7d320931b..b06b02d418 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.19-next.1", + "version": "0.1.19-next.2", "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 7783bf960b..fbcdded7dd 100644 --- a/plugins/gitops-profiles/CHANGELOG.md +++ b/plugins/gitops-profiles/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-gitops-profiles +## 0.3.41-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/theme@0.4.3-next.0 + - @backstage/config@1.1.1-next.0 + ## 0.3.41-next.1 ### Patch Changes diff --git a/plugins/gitops-profiles/package.json b/plugins/gitops-profiles/package.json index d254a70390..420d23e5b4 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.41-next.1", + "version": "0.3.41-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/gocd/CHANGELOG.md b/plugins/gocd/CHANGELOG.md index 33c2d9bd14..6b952b9a74 100644 --- a/plugins/gocd/CHANGELOG.md +++ b/plugins/gocd/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-gocd +## 0.1.31-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/theme@0.4.3-next.0 + ## 0.1.31-next.1 ### Patch Changes diff --git a/plugins/gocd/package.json b/plugins/gocd/package.json index 9da32e57b1..0830d098d7 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.31-next.1", + "version": "0.1.31-next.2", "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 0663cb0755..b39dd16f2c 100644 --- a/plugins/graphiql/CHANGELOG.md +++ b/plugins/graphiql/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-graphiql +## 0.2.55-next.2 + +### Patch Changes + +- 9c9a9100b0: Internal refactor to avoid using the deprecated `.icon.svg` extension. +- 06432f900c: Updated `/alpha` exports to use new `attachTo` option. +- Updated dependencies + - @backstage/frontend-plugin-api@0.2.0-next.2 + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/theme@0.4.3-next.0 + ## 0.2.55-next.1 ### Patch Changes diff --git a/plugins/graphiql/api-report.md b/plugins/graphiql/api-report.md index 984b90ae88..4c760c33b7 100644 --- a/plugins/graphiql/api-report.md +++ b/plugins/graphiql/api-report.md @@ -79,6 +79,4 @@ export class GraphQLEndpoints implements GraphQLBrowseApi { // @public (undocumented) export const Router: () => React_2.JSX.Element; - -// (No @packageDocumentation comment for this package) ``` diff --git a/plugins/graphiql/dev/index.tsx b/plugins/graphiql/dev/index.tsx index 163b4d0512..5d7bff5f32 100644 --- a/plugins/graphiql/dev/index.tsx +++ b/plugins/graphiql/dev/index.tsx @@ -21,9 +21,9 @@ import { errorApiRef, IconComponent, } from '@backstage/core-plugin-api'; -import GraphiQLIcon from '../src/assets/graphiql.icon.svg'; import { graphiqlPlugin, + GraphiQLIcon, GraphQLEndpoints, graphQlBrowseApiRef, GraphiQLPage, diff --git a/plugins/graphiql/package.json b/plugins/graphiql/package.json index d0ce3982a6..5ac45c0f42 100644 --- a/plugins/graphiql/package.json +++ b/plugins/graphiql/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-graphiql", "description": "Backstage plugin for browsing GraphQL APIs", - "version": "0.2.55-next.1", + "version": "0.2.55-next.2", "publishConfig": { "access": "public" }, diff --git a/plugins/graphiql/src/GraphiQLIcon.tsx b/plugins/graphiql/src/GraphiQLIcon.tsx new file mode 100644 index 0000000000..c48c47bc09 --- /dev/null +++ b/plugins/graphiql/src/GraphiQLIcon.tsx @@ -0,0 +1,44 @@ +/* + * 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 SvgIcon from '@material-ui/core/SvgIcon'; +import { IconComponent } from '@backstage/core-plugin-api'; + +/** + * @public + */ +export const GraphiQLIcon: IconComponent = () => ( + + + + + + + + + + + + + + + + + + + +); diff --git a/plugins/graphiql/src/alpha.tsx b/plugins/graphiql/src/alpha.tsx index 9cd956fc1a..0a27f6151b 100644 --- a/plugins/graphiql/src/alpha.tsx +++ b/plugins/graphiql/src/alpha.tsx @@ -30,8 +30,8 @@ import { graphQlBrowseApiRef, GraphQLEndpoints, GraphQLEndpoint, + GraphiQLIcon, } from '@backstage/plugin-graphiql'; -import GraphiQLIcon from './assets/graphiql.icon.svg'; import { createApiFactory, createRouteRef, @@ -86,7 +86,7 @@ export function createEndpointExtension(options: { }) { return createExtension({ id: `apis.plugin.graphiql.browse.${options.id}`, - at: 'apis.plugin.graphiql.browse/endpoints', + attachTo: { id: 'apis.plugin.graphiql.browse', input: 'endpoints' }, configSchema: options.configSchema, disabled: options.disabled ?? false, output: { diff --git a/plugins/graphiql/src/assets/graphiql.icon.svg b/plugins/graphiql/src/assets/graphiql.icon.svg deleted file mode 100644 index e16f0e307c..0000000000 --- a/plugins/graphiql/src/assets/graphiql.icon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/plugins/graphiql/src/index.ts b/plugins/graphiql/src/index.ts index 284b78fa35..d7326134ff 100644 --- a/plugins/graphiql/src/index.ts +++ b/plugins/graphiql/src/index.ts @@ -20,18 +20,12 @@ * @packageDocumentation */ -import GraphiQLIconComponent from './assets/graphiql.icon.svg'; -import { IconComponent } from '@backstage/core-plugin-api'; - export { graphiqlPlugin, graphiqlPlugin as plugin, GraphiQLPage, } from './plugin'; +export { GraphiQLIcon } from './GraphiQLIcon'; export { GraphiQLPage as Router } from './components'; export * from './lib/api'; export * from './route-refs'; - -/** @public */ -export const GraphiQLIcon: IconComponent = - GraphiQLIconComponent as IconComponent; diff --git a/plugins/graphql-backend/CHANGELOG.md b/plugins/graphql-backend/CHANGELOG.md index c3991bd3a2..182d8840b0 100644 --- a/plugins/graphql-backend/CHANGELOG.md +++ b/plugins/graphql-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-graphql-backend +## 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 diff --git a/plugins/graphql-backend/package.json b/plugins/graphql-backend/package.json index 7ba1b47881..f0c1fd2bb0 100644 --- a/plugins/graphql-backend/package.json +++ b/plugins/graphql-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-graphql-backend", "description": "An experimental Backstage backend plugin for GraphQL", - "version": "0.1.43-next.1", + "version": "0.1.44-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/graphql-voyager/CHANGELOG.md b/plugins/graphql-voyager/CHANGELOG.md index 5331c0a7fc..85b1cf7dae 100644 --- a/plugins/graphql-voyager/CHANGELOG.md +++ b/plugins/graphql-voyager/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-graphql-voyager +## 0.1.8-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/theme@0.4.3-next.0 + ## 0.1.8-next.1 ### Patch Changes diff --git a/plugins/graphql-voyager/package.json b/plugins/graphql-voyager/package.json index bc62c158ac..2a41a7ebfc 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.8-next.1", + "version": "0.1.8-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/home-react/CHANGELOG.md b/plugins/home-react/CHANGELOG.md index 2c2fce8504..63f73232fe 100644 --- a/plugins/home-react/CHANGELOG.md +++ b/plugins/home-react/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-home-react +## 0.1.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + ## 0.1.4-next.1 ### Patch Changes diff --git a/plugins/home-react/package.json b/plugins/home-react/package.json index f6e9655849..3083d45682 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.4-next.1", + "version": "0.1.4-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/home/CHANGELOG.md b/plugins/home/CHANGELOG.md index 2d826ed5d0..1f0a83c1c9 100644 --- a/plugins/home/CHANGELOG.md +++ b/plugins/home/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-home +## 0.5.9-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-app-api@1.11.0-next.2 + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/theme@0.4.3-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-home-react@0.1.4-next.2 + ## 0.5.9-next.1 ### Patch Changes diff --git a/plugins/home/package.json b/plugins/home/package.json index 17c17cffe3..dee7336e9a 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.9-next.1", + "version": "0.5.9-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/ilert/CHANGELOG.md b/plugins/ilert/CHANGELOG.md index 31cace8de8..1960cff7b1 100644 --- a/plugins/ilert/CHANGELOG.md +++ b/plugins/ilert/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-ilert +## 0.2.14-next.2 + +### Patch Changes + +- 0b55f773a7: Removed some unused dependencies +- 9c9a9100b0: Internal refactor to avoid using the deprecated `.icon.svg` extension. +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/theme@0.4.3-next.0 + ## 0.2.14-next.1 ### Patch Changes diff --git a/plugins/ilert/api-report.md b/plugins/ilert/api-report.md index 821a3a6bd0..da752d4c16 100644 --- a/plugins/ilert/api-report.md +++ b/plugins/ilert/api-report.md @@ -810,6 +810,4 @@ export type UserRole = | 'STAKEHOLDER' | 'ACCOUNT_OWNER' | 'RESPONDER'; - -// (No @packageDocumentation comment for this package) ``` diff --git a/plugins/ilert/package.json b/plugins/ilert/package.json index f84a79375d..75bd7eeed0 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.14-next.1", + "version": "0.2.14-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -44,7 +44,6 @@ "@types/react": "^16.13.1 || ^17.0.0", "humanize-duration": "^3.26.0", "luxon": "^3.0.0", - "prop-types": "^15.7.2", "react-use": "^17.2.4" }, "peerDependencies": { diff --git a/plugins/ilert/src/ILertIcon.tsx b/plugins/ilert/src/ILertIcon.tsx new file mode 100644 index 0000000000..ffe1ae0877 --- /dev/null +++ b/plugins/ilert/src/ILertIcon.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 React from 'react'; +import SvgIcon from '@material-ui/core/SvgIcon'; +import { IconComponent } from '@backstage/core-plugin-api'; + +/** + * @public + */ +export const ILertIcon: IconComponent = () => ( + + + + + + + + + + +); diff --git a/plugins/ilert/src/assets/ilert.icon.svg b/plugins/ilert/src/assets/ilert.icon.svg deleted file mode 100644 index 5109286355..0000000000 --- a/plugins/ilert/src/assets/ilert.icon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/plugins/ilert/src/index.ts b/plugins/ilert/src/index.ts index 5fcf42011b..39e3dac9ec 100644 --- a/plugins/ilert/src/index.ts +++ b/plugins/ilert/src/index.ts @@ -20,9 +20,6 @@ * @packageDocumentation */ -import ILertIconComponent from './assets/ilert.icon.svg'; -import { IconComponent } from '@backstage/core-plugin-api'; - export { ilertPlugin, ilertPlugin as plugin, @@ -35,9 +32,7 @@ export { isPluginApplicableToEntity as isILertAvailable, ILertCard, } from './components'; +export { ILertIcon } from './ILertIcon'; export * from './api'; export * from './route-refs'; export * from './types'; - -/** @public */ -export const ILertIcon: IconComponent = ILertIconComponent as IconComponent; diff --git a/plugins/jenkins-backend/CHANGELOG.md b/plugins/jenkins-backend/CHANGELOG.md index b0aeddb339..e93668b500 100644 --- a/plugins/jenkins-backend/CHANGELOG.md +++ b/plugins/jenkins-backend/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-jenkins-backend +## 0.2.9-next.2 + +### Patch Changes + +- 930ac236d8: Added support for the [new backend system](https://backstage.io/docs/backend-system/) +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-auth-node@0.4.0-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/errors@1.2.3-next.0 + - @backstage/plugin-catalog-node@1.4.7-next.2 + - @backstage/plugin-permission-node@0.7.17-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/catalog-client@1.4.5-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-jenkins-common@0.1.20-next.0 + - @backstage/plugin-permission-common@0.7.9-next.0 + ## 0.2.8-next.1 ### Patch Changes diff --git a/plugins/jenkins-backend/README.md b/plugins/jenkins-backend/README.md index 133b9f42e2..d6f8fa5472 100644 --- a/plugins/jenkins-backend/README.md +++ b/plugins/jenkins-backend/README.md @@ -8,6 +8,20 @@ This is the backend half of the 2 Jenkins plugins and is responsible for: - finding the appropriate job(s) on that instance for an entity - connecting to Jenkins and gathering data to present to the frontend +## New Backend System + +The jenkins backend plugin has support for the [new backend system](https://backstage.io/docs/backend-system/), here's how you can set that up: + +In your `packages/backend/src/index.ts` make the following changes: + +```diff + import { createBackend } from '@backstage/backend-defaults'; + const backend = createBackend(); + // ... other feature additions + backend.add(import('@backstage/plugin-jenkins-backend')); + backend.start(); +``` + ## Integrating into a backstage instance This plugin needs to be added to an existing backstage instance. diff --git a/plugins/jenkins-backend/api-report.md b/plugins/jenkins-backend/api-report.md index fd1365547d..28dafa70bf 100644 --- a/plugins/jenkins-backend/api-report.md +++ b/plugins/jenkins-backend/api-report.md @@ -3,6 +3,7 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts +import { BackendFeature } from '@backstage/backend-plugin-api'; import { CatalogApi } from '@backstage/catalog-client'; import { CompoundEntityRef } from '@backstage/catalog-model'; import { Config } from '@backstage/config'; @@ -79,6 +80,10 @@ export interface JenkinsInstanceConfig { username: string; } +// @public +const jenkinsPlugin: () => BackendFeature; +export default jenkinsPlugin; + // @public (undocumented) export interface RouterOptions { // (undocumented) diff --git a/plugins/jenkins-backend/package.json b/plugins/jenkins-backend/package.json index 12fe2debe1..02c9c8bf21 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.2.8-next.1", + "version": "0.2.9-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -31,11 +31,13 @@ }, "dependencies": { "@backstage/backend-common": "workspace:^", + "@backstage/backend-plugin-api": "workspace:^", "@backstage/catalog-client": "workspace:^", "@backstage/catalog-model": "workspace:^", "@backstage/config": "workspace:^", "@backstage/errors": "workspace:^", "@backstage/plugin-auth-node": "workspace:^", + "@backstage/plugin-catalog-node": "workspace:^", "@backstage/plugin-jenkins-common": "workspace:^", "@backstage/plugin-permission-common": "workspace:^", "@backstage/plugin-permission-node": "workspace:^", diff --git a/plugins/jenkins-backend/src/index.ts b/plugins/jenkins-backend/src/index.ts index c55335c52d..4d01566a60 100644 --- a/plugins/jenkins-backend/src/index.ts +++ b/plugins/jenkins-backend/src/index.ts @@ -21,3 +21,4 @@ */ export * from './service'; +export { jenkinsPlugin as default } from './plugin'; diff --git a/plugins/jenkins-backend/src/plugin.test.tsx b/plugins/jenkins-backend/src/plugin.test.tsx new file mode 100644 index 0000000000..22ef6de078 --- /dev/null +++ b/plugins/jenkins-backend/src/plugin.test.tsx @@ -0,0 +1,22 @@ +/* + * 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 { jenkinsPlugin } from './plugin'; + +describe('jenkins', () => { + it('should export the jenkins plugin', () => { + expect(jenkinsPlugin).toBeDefined(); + }); +}); diff --git a/plugins/jenkins-backend/src/plugin.ts b/plugins/jenkins-backend/src/plugin.ts new file mode 100644 index 0000000000..8da26d62aa --- /dev/null +++ b/plugins/jenkins-backend/src/plugin.ts @@ -0,0 +1,64 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { loggerToWinstonLogger } from '@backstage/backend-common'; +import { + createBackendPlugin, + coreServices, +} from '@backstage/backend-plugin-api'; +import { DefaultJenkinsInfoProvider } from './service/jenkinsInfoProvider'; +import { createRouter } from './service/router'; +import { catalogServiceRef } from '@backstage/plugin-catalog-node/alpha'; + +/** + * Jenkins backend plugin + * + * @public + */ +export const jenkinsPlugin = createBackendPlugin({ + pluginId: 'jenkins', + register(env) { + env.registerInit({ + deps: { + logger: coreServices.logger, + permissions: coreServices.permissions, + httpRouter: coreServices.httpRouter, + config: coreServices.rootConfig, + catalogClient: catalogServiceRef, + }, + async init({ logger, permissions, httpRouter, config, catalogClient }) { + const winstonLogger = loggerToWinstonLogger(logger); + const jenkinsInfoProvider = DefaultJenkinsInfoProvider.fromConfig({ + config, + catalog: catalogClient, + }); + httpRouter.use( + await createRouter({ + permissions, + /** + * Logger for logging purposes + */ + logger: winstonLogger, + /** + * Info provider to be able to get all necessary information for the APIs + */ + jenkinsInfoProvider, + }), + ); + }, + }); + }, +}); diff --git a/plugins/jenkins-common/CHANGELOG.md b/plugins/jenkins-common/CHANGELOG.md index 4fa915f473..816bc32b02 100644 --- a/plugins/jenkins-common/CHANGELOG.md +++ b/plugins/jenkins-common/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-jenkins-common +## 0.1.20-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-common@1.0.17-next.0 + - @backstage/plugin-permission-common@0.7.9-next.0 + ## 0.1.19 ### Patch Changes diff --git a/plugins/jenkins-common/package.json b/plugins/jenkins-common/package.json index 4bf522dadd..bf9dd8f344 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.19", + "version": "0.1.20-next.0", "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 c7b92cbcdd..9874ab8bfc 100644 --- a/plugins/jenkins/CHANGELOG.md +++ b/plugins/jenkins/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-jenkins +## 0.8.7-next.2 + +### Patch Changes + +- 1a05cf34f6: Extend EntityJenkinsContent to receive columns as prop +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/theme@0.4.3-next.0 + - @backstage/plugin-jenkins-common@0.1.20-next.0 + ## 0.8.7-next.1 ### Patch Changes diff --git a/plugins/jenkins/README.md b/plugins/jenkins/README.md index 73602e3464..d61c057237 100644 --- a/plugins/jenkins/README.md +++ b/plugins/jenkins/README.md @@ -7,6 +7,7 @@ Website: [https://jenkins.io/](https://jenkins.io/) Build details Job builds records +Modify Table Columns ## Setup 1. If you have a standalone app (you didn't clone this repo), then do @@ -105,3 +106,29 @@ spec: - View all builds of a particular job - shows average build time for successful builds +## Modify Columns of EntityJenkinsContent + +- now you can pass down column props to show the columns/metadata as per your use case. + +```tsx +export const generatedColumns: TableColumn[] = [ + { + title: 'Timestamp', + field: 'lastBuild.timestamp', + render: (row: Partial) => ( + <> + + {` + ${new Date(row.lastBuild?.timestamp).toLocaleDateString()} + ${new Date(row.lastBuild?.timestamp).toLocaleTimeString()} + `} + + + ), + }, +] + +// ... + +// ... +``` diff --git a/plugins/jenkins/api-report.md b/plugins/jenkins/api-report.md index 1a8e6ac220..c1b8ad2b81 100644 --- a/plugins/jenkins/api-report.md +++ b/plugins/jenkins/api-report.md @@ -15,9 +15,12 @@ import { InfoCardVariants } from '@backstage/core-components'; import { JSX as JSX_2 } from 'react'; import { default as React_2 } from 'react'; import { RouteRef } from '@backstage/core-plugin-api'; +import { TableColumn } from '@backstage/core-components'; // @public (undocumented) -export const EntityJenkinsContent: () => JSX_2.Element; +export const EntityJenkinsContent: (props: { + columns?: TableColumn[] | undefined; +}) => JSX_2.Element; // @public (undocumented) export const EntityJobRunsTable: () => JSX_2.Element; @@ -55,7 +58,6 @@ export interface JenkinsApi { entity: CompoundEntityRef; jobFullName: string; }): Promise; - // Warning: (ae-forgotten-export) The symbol "Project" needs to be exported by the entry point index.d.ts getProjects(options: { entity: CompoundEntityRef; filter: { @@ -132,8 +134,28 @@ export const LatestRunCard: (props: { // @public (undocumented) export const LEGACY_JENKINS_ANNOTATION = 'jenkins.io/github-folder'; +// @public (undocumented) +export interface Project { + // (undocumented) + displayName: string; + // (undocumented) + fullDisplayName: string; + // (undocumented) + fullName: string; + // (undocumented) + inQueue: string; + // (undocumented) + lastBuild: Build; + // (undocumented) + onRestartClick: () => Promise; + // (undocumented) + status: string; +} + // Warning: (ae-missing-release-tag) "Router" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) -export const Router: () => React_2.JSX.Element; +export const Router: (props: { + columns?: TableColumn[]; +}) => React_2.JSX.Element; ``` diff --git a/plugins/jenkins/package.json b/plugins/jenkins/package.json index cfbac50ae5..3db1402ffd 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.8.7-next.1", + "version": "0.8.7-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/jenkins/src/api/JenkinsApi.ts b/plugins/jenkins/src/api/JenkinsApi.ts index 3d4017dec5..1f6e7ec294 100644 --- a/plugins/jenkins/src/api/JenkinsApi.ts +++ b/plugins/jenkins/src/api/JenkinsApi.ts @@ -81,6 +81,7 @@ export interface Job { builds: JobBuild[]; } +/** @public */ export interface Project { // standard Jenkins lastBuild: Build; diff --git a/plugins/jenkins/src/api/index.ts b/plugins/jenkins/src/api/index.ts index af1829c0b4..32c98ae5a6 100644 --- a/plugins/jenkins/src/api/index.ts +++ b/plugins/jenkins/src/api/index.ts @@ -16,4 +16,4 @@ export { JenkinsClient, jenkinsApiRef } from './JenkinsApi'; -export type { JenkinsApi } from './JenkinsApi'; +export type { JenkinsApi, Project } from './JenkinsApi'; diff --git a/plugins/jenkins/src/assets/dynamic-columns.png b/plugins/jenkins/src/assets/dynamic-columns.png new file mode 100644 index 0000000000..1a85257403 Binary files /dev/null and b/plugins/jenkins/src/assets/dynamic-columns.png differ diff --git a/plugins/jenkins/src/components/BuildsPage/lib/CITable/CITable.tsx b/plugins/jenkins/src/components/BuildsPage/lib/CITable/CITable.tsx index 2dab02156f..1f5d272c61 100644 --- a/plugins/jenkins/src/components/BuildsPage/lib/CITable/CITable.tsx +++ b/plugins/jenkins/src/components/BuildsPage/lib/CITable/CITable.tsx @@ -13,251 +13,15 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { Link, Progress, Table, TableColumn } from '@backstage/core-components'; -import { alertApiRef, useApi, useRouteRef } from '@backstage/core-plugin-api'; -import { useEntityPermission } from '@backstage/plugin-catalog-react/alpha'; -import { Box, IconButton, Tooltip, Typography } from '@material-ui/core'; +import { Table, TableColumn } from '@backstage/core-components'; +import { Box, Typography } from '@material-ui/core'; import RetryIcon from '@material-ui/icons/Replay'; -import VisibilityIcon from '@material-ui/icons/Visibility'; -import HistoryIcon from '@material-ui/icons/History'; -import { default as React, useState } from 'react'; +import { default as React } from 'react'; import { Project } from '../../../../api/JenkinsApi'; import JenkinsLogo from '../../../../assets/JenkinsLogo.svg'; -import { buildRouteRef, jobRunsRouteRef } from '../../../../plugin'; import { useBuilds } from '../../../useBuilds'; -import { JenkinsRunStatus } from '../Status'; -import { jenkinsExecutePermission } from '@backstage/plugin-jenkins-common'; - -const FailCount = ({ count }: { count: number }): JSX.Element | null => { - if (count !== 0) { - return <>{count} failed; - } - return null; -}; - -const SkippedCount = ({ count }: { count: number }): JSX.Element | null => { - if (count !== 0) { - return <>{count} skipped; - } - return null; -}; - -const FailSkippedWidget = ({ - skipped, - failed, -}: { - skipped: number; - failed: number; -}): JSX.Element | null => { - if (skipped === 0 && failed === 0) { - return null; - } - - if (skipped !== 0 && failed !== 0) { - return ( - <> - {' '} - (, ) - - ); - } - - if (failed !== 0) { - return ( - <> - {' '} - () - - ); - } - - if (skipped !== 0) { - return ( - <> - {' '} - () - - ); - } - - return null; -}; - -const generatedColumns: TableColumn[] = [ - { - title: 'Timestamp', - defaultSort: 'desc', - hidden: true, - field: 'lastBuild.timestamp', - }, - { - title: 'Build', - field: 'fullName', - highlight: true, - render: (row: Partial) => { - const LinkWrapper = () => { - const routeLink = useRouteRef(buildRouteRef); - if (!row.fullName || !row.lastBuild?.number) { - return ( - <> - {row.fullName || - row.fullDisplayName || - row.displayName || - 'Unknown'} - - ); - } - - return ( - - {row.fullDisplayName} - - ); - }; - - return ; - }, - }, - { - title: 'Source', - field: 'lastBuild.source.branchName', - render: (row: Partial) => ( - <> - - - {row.lastBuild?.source?.branchName} - - - {row.lastBuild?.source?.commit?.hash} - - ), - }, - { - title: 'Status', - field: 'status', - render: (row: Partial) => { - return ( - - - - ); - }, - }, - { - title: 'Last Run Duration', - align: 'center', - render: (row: Partial) => ( - <> - - {row?.lastBuild?.duration - ? (row?.lastBuild?.duration / 1000) - .toFixed(1) - .toString() - .concat(' s') - : ''}{' '} - - - ), - }, - { - title: 'Tests', - sorting: false, - render: (row: Partial) => { - return ( - <> - - {row.lastBuild?.tests && ( - - {row.lastBuild?.tests.passed} / {row.lastBuild?.tests.total}{' '} - passed - - - )} - - {!row.lastBuild?.tests && 'n/a'} - - - ); - }, - }, - { - title: 'Actions', - sorting: false, - render: (row: Partial) => { - const ActionWrapper = () => { - const [isLoadingRebuild, setIsLoadingRebuild] = useState(false); - const { allowed, loading } = useEntityPermission( - jenkinsExecutePermission, - ); - - const alertApi = useApi(alertApiRef); - const jobRunsLink = useRouteRef(jobRunsRouteRef); - - const onRebuild = async () => { - if (row.onRestartClick) { - setIsLoadingRebuild(true); - try { - await row.onRestartClick(); - alertApi.post({ - message: 'Jenkins re-build has successfully executed', - severity: 'success', - display: 'transient', - }); - } catch (e) { - alertApi.post({ - message: `Jenkins re-build has failed. Error: ${e.message}`, - severity: 'error', - }); - } finally { - setIsLoadingRebuild(false); - } - } - }; - - return ( -
- {row.lastBuild?.url && ( - - - - - - )} - {isLoadingRebuild && } - {!isLoadingRebuild && ( - - - - - - )} - - - - - - - -
- ); - }; - return ; - }, - width: '10%', - }, -]; +import { columnFactories } from './columns'; +import { defaultCITableColumns } from './presets'; type Props = { loading: boolean; @@ -268,6 +32,7 @@ type Props = { total: number; pageSize: number; onChangePageSize: (pageSize: number) => void; + columns: TableColumn[]; }; export const CITableView = ({ @@ -278,6 +43,7 @@ export const CITableView = ({ projects, onChangePage, onChangePageSize, + columns, total, }: Props) => { const projectsInPage = projects?.slice( @@ -308,20 +74,31 @@ export const CITableView = ({ Projects } - columns={generatedColumns} + columns={ + columns && columns.length !== 0 ? columns : defaultCITableColumns + } /> ); }; -export const CITable = () => { +type CITableProps = { + columns?: TableColumn[]; +}; + +export const CITable = ({ columns }: CITableProps) => { const [tableProps, { setPage, retry, setPageSize }] = useBuilds(); return ( [])} retry={retry} onChangePageSize={setPageSize} onChangePage={setPage} /> ); }; + +CITable.columns = columnFactories; + +CITable.defaultCITableColumns = defaultCITableColumns; diff --git a/plugins/jenkins/src/components/BuildsPage/lib/CITable/columns.tsx b/plugins/jenkins/src/components/BuildsPage/lib/CITable/columns.tsx new file mode 100644 index 0000000000..733a60c1b2 --- /dev/null +++ b/plugins/jenkins/src/components/BuildsPage/lib/CITable/columns.tsx @@ -0,0 +1,251 @@ +/* + * 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 { Link, Progress, TableColumn } from '@backstage/core-components'; +import { alertApiRef, useApi, useRouteRef } from '@backstage/core-plugin-api'; +import { useEntityPermission } from '@backstage/plugin-catalog-react/alpha'; +import { Box, IconButton, Tooltip, Typography } from '@material-ui/core'; +import RetryIcon from '@material-ui/icons/Replay'; +import VisibilityIcon from '@material-ui/icons/Visibility'; +import { default as React, useState } from 'react'; +import { Project } from '../../../../api/JenkinsApi'; +import { buildRouteRef } from '../../../../plugin'; +import { JenkinsRunStatus } from '../Status'; +import { jenkinsExecutePermission } from '@backstage/plugin-jenkins-common'; + +const FailCount = ({ count }: { count: number }): JSX.Element | null => { + if (count !== 0) { + return <>{count} failed; + } + return null; +}; + +const SkippedCount = ({ count }: { count: number }): JSX.Element | null => { + if (count !== 0) { + return <>{count} skipped; + } + return null; +}; + +const FailSkippedWidget = ({ + skipped, + failed, +}: { + skipped: number; + failed: number; +}): JSX.Element | null => { + if (skipped === 0 && failed === 0) { + return null; + } + + if (skipped !== 0 && failed !== 0) { + return ( + <> + {' '} + (, ) + + ); + } + + if (failed !== 0) { + return ( + <> + {' '} + () + + ); + } + + if (skipped !== 0) { + return ( + <> + {' '} + () + + ); + } + + return null; +}; + +export const columnFactories = Object.freeze({ + createTimestampColumn(): TableColumn { + return { + title: 'Timestamp', + defaultSort: 'desc', + hidden: true, + field: 'lastBuild.timestamp', + }; + }, + + createBuildColumn(): TableColumn { + return { + title: 'Build', + field: 'fullName', + highlight: true, + render: (row: Partial) => { + const LinkWrapper = () => { + const routeLink = useRouteRef(buildRouteRef); + if (!row.fullName || !row.lastBuild?.number) { + return ( + <> + {row.fullName || + row.fullDisplayName || + row.displayName || + 'Unknown'} + + ); + } + + return ( + + {row.fullDisplayName} + + ); + }; + + return ; + }, + }; + }, + + createSourceColumn(): TableColumn { + return { + title: 'Source', + field: 'lastBuild.source.branchName', + render: (row: Partial) => ( + <> + + + {row.lastBuild?.source?.branchName} + + + + {row.lastBuild?.source?.commit?.hash} + + + ), + }; + }, + + createStatusColumn(): TableColumn { + return { + title: 'Status', + field: 'status', + render: (row: Partial) => { + return ( + + + + ); + }, + }; + }, + + createTestColumn(): TableColumn { + return { + title: 'Tests', + sorting: false, + render: (row: Partial) => { + return ( + <> + + {row.lastBuild?.tests && ( + + {row.lastBuild?.tests.passed} / {row.lastBuild?.tests.total}{' '} + passed + + + )} + + {!row.lastBuild?.tests && 'n/a'} + + + ); + }, + }; + }, + + createActionsColumn(): TableColumn { + return { + title: 'Actions', + sorting: false, + render: (row: Partial) => { + const ActionWrapper = () => { + const [isLoadingRebuild, setIsLoadingRebuild] = useState(false); + const { allowed, loading } = useEntityPermission( + jenkinsExecutePermission, + ); + + const alertApi = useApi(alertApiRef); + + const onRebuild = async () => { + if (row.onRestartClick) { + setIsLoadingRebuild(true); + try { + await row.onRestartClick(); + alertApi.post({ + message: 'Jenkins re-build has successfully executed', + severity: 'success', + display: 'transient', + }); + } catch (e) { + alertApi.post({ + message: `Jenkins re-build has failed. Error: ${e.message}`, + severity: 'error', + }); + } finally { + setIsLoadingRebuild(false); + } + } + }; + + return ( +
+ {row.lastBuild?.url && ( + + + + + + )} + {isLoadingRebuild && } + {!isLoadingRebuild && ( + + + + + + )} +
+ ); + }; + return ; + }, + width: '10%', + }; + }, +}); diff --git a/plugins/jenkins/src/components/BuildsPage/lib/CITable/presets.ts b/plugins/jenkins/src/components/BuildsPage/lib/CITable/presets.ts new file mode 100644 index 0000000000..7c0dda9970 --- /dev/null +++ b/plugins/jenkins/src/components/BuildsPage/lib/CITable/presets.ts @@ -0,0 +1,28 @@ +/* + * 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 { Project } from '../../../../api'; +import { columnFactories } from './columns'; +import { TableColumn } from '@backstage/core-components'; + +export const defaultCITableColumns: TableColumn[] = [ + columnFactories.createTimestampColumn(), + columnFactories.createSourceColumn(), + columnFactories.createBuildColumn(), + columnFactories.createTestColumn(), + columnFactories.createStatusColumn(), + columnFactories.createActionsColumn(), +]; diff --git a/plugins/jenkins/src/components/Router.tsx b/plugins/jenkins/src/components/Router.tsx index 39adf6c2b1..30ce999f31 100644 --- a/plugins/jenkins/src/components/Router.tsx +++ b/plugins/jenkins/src/components/Router.tsx @@ -15,7 +15,10 @@ */ import { Entity } from '@backstage/catalog-model'; -import { MissingAnnotationEmptyState } from '@backstage/core-components'; +import { + MissingAnnotationEmptyState, + TableColumn, +} from '@backstage/core-components'; import { useEntity } from '@backstage/plugin-catalog-react'; import React from 'react'; import { Route, Routes } from 'react-router-dom'; @@ -24,24 +27,27 @@ import { buildRouteRef, jobRunsRouteRef } from '../plugin'; import { CITable } from './BuildsPage/lib/CITable'; import { DetailedViewPage } from './BuildWithStepsPage/'; import { JobRunsTable } from './JobRunsTable'; +import { Project } from '../api'; /** @public */ export const isJenkinsAvailable = (entity: Entity) => Boolean(entity.metadata.annotations?.[JENKINS_ANNOTATION]) || Boolean(entity.metadata.annotations?.[LEGACY_JENKINS_ANNOTATION]); -export const Router = () => { +export const Router = (props: { columns?: TableColumn[] }) => { const { entity } = useEntity(); if (!isJenkinsAvailable(entity)) { return ; } + const columns = props.columns; + return ( - } /> - } /> + } /> } /> + } /> ); }; diff --git a/plugins/kafka-backend/CHANGELOG.md b/plugins/kafka-backend/CHANGELOG.md index bccda7319f..79183bce97 100644 --- a/plugins/kafka-backend/CHANGELOG.md +++ b/plugins/kafka-backend/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-kafka-backend +## 0.3.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 + ## 0.3.2-next.1 ### Patch Changes diff --git a/plugins/kafka-backend/package.json b/plugins/kafka-backend/package.json index d965258859..64aa68be19 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.2-next.1", + "version": "0.3.3-next.2", "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 adb941bc3f..d3f967dc0c 100644 --- a/plugins/kafka/CHANGELOG.md +++ b/plugins/kafka/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-kafka +## 0.3.25-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/theme@0.4.3-next.0 + - @backstage/config@1.1.1-next.0 + ## 0.3.25-next.1 ### Patch Changes diff --git a/plugins/kafka/package.json b/plugins/kafka/package.json index 5e699b3bcc..3c3e5b34bf 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.25-next.1", + "version": "0.3.25-next.2", "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 cef2f97198..1f3532632b 100644 --- a/plugins/kubernetes-backend/CHANGELOG.md +++ b/plugins/kubernetes-backend/CHANGELOG.md @@ -1,5 +1,28 @@ # @backstage/plugin-kubernetes-backend +## 0.12.3-next.2 + +### Patch Changes + +- cbb0e3c3f4: A new plugin has been introduced to house the extension points for Kubernetes backend plugin; at the moment only the `KubernetesObjectsProviderExtensionPoint` is present. The `kubernetes-backend` plugin was modified to use this new extension point. +- 95518765ee: Add Kubernetes cluster plugin. Viewing Kubernetes clusters as an Admin from Backstage +- 5dac12e435: The kubernetes APIs invokes Authentication Strategies when Backstage-Kubernetes-Authorization-X-X headers are provided, this enable the possibility to invoke strategies that executes additional steps to get a kubernetes token like on pinniped or custom strategies +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-auth-node@0.4.0-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/errors@1.2.3-next.0 + - @backstage/plugin-kubernetes-node@0.1.0-next.0 + - @backstage/plugin-kubernetes-common@0.7.0-next.1 + - @backstage/plugin-catalog-node@1.4.7-next.2 + - @backstage/plugin-permission-node@0.7.17-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/catalog-client@1.4.5-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/integration-aws-node@0.1.7-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-permission-common@0.7.9-next.0 + ## 0.12.2-next.1 ### Patch Changes diff --git a/plugins/kubernetes-backend/api-report.md b/plugins/kubernetes-backend/api-report.md index 158b917a48..3828cdf19f 100644 --- a/plugins/kubernetes-backend/api-report.md +++ b/plugins/kubernetes-backend/api-report.md @@ -6,16 +6,18 @@ import { CatalogApi } from '@backstage/catalog-client'; import { Config } from '@backstage/config'; import type { CustomResourceMatcher } from '@backstage/plugin-kubernetes-common'; +import { CustomResourcesByEntity } from '@backstage/plugin-kubernetes-node'; import { Duration } from 'luxon'; import { Entity } from '@backstage/catalog-model'; import express from 'express'; import type { FetchResponse } from '@backstage/plugin-kubernetes-common'; import type { JsonObject } from '@backstage/types'; import type { KubernetesFetchError } from '@backstage/plugin-kubernetes-common'; +import { KubernetesObjectsByEntity } from '@backstage/plugin-kubernetes-node'; +import { KubernetesObjectsProvider } from '@backstage/plugin-kubernetes-node'; import { KubernetesRequestAuth } from '@backstage/plugin-kubernetes-common'; import type { KubernetesRequestBody } from '@backstage/plugin-kubernetes-common'; import { Logger } from 'winston'; -import type { ObjectsByEntityResponse } from '@backstage/plugin-kubernetes-common'; import { PermissionEvaluator } from '@backstage/plugin-permission-common'; import { PluginEndpointDiscovery } from '@backstage/backend-common'; import { RequestHandler } from 'http-proxy-middleware'; @@ -101,11 +103,7 @@ export interface CustomResource extends ObjectToFetch { objectType: 'customresources'; } -// @public (undocumented) -export interface CustomResourcesByEntity extends KubernetesObjectsByEntity { - // (undocumented) - customResources: CustomResourceMatcher[]; -} +export { CustomResourcesByEntity }; // @public (undocumented) export const DEFAULT_OBJECTS: ObjectToFetch[]; @@ -316,25 +314,9 @@ export interface KubernetesFetcher { ): Promise; } -// @public (undocumented) -export interface KubernetesObjectsByEntity { - // (undocumented) - auth: KubernetesRequestAuth; - // (undocumented) - entity: Entity; -} +export { KubernetesObjectsByEntity }; -// @public (undocumented) -export interface KubernetesObjectsProvider { - // (undocumented) - getCustomResourcesByEntity( - customResourcesByEntity: CustomResourcesByEntity, - ): Promise; - // (undocumented) - getKubernetesObjectsByEntity( - kubernetesObjectsByEntity: KubernetesObjectsByEntity, - ): Promise; -} +export { KubernetesObjectsProvider }; // @public (undocumented) export interface KubernetesObjectsProviderOptions { diff --git a/plugins/kubernetes-backend/package.json b/plugins/kubernetes-backend/package.json index e0df3aa94b..a7c15b8c1c 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.12.2-next.1", + "version": "0.12.3-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -61,6 +61,7 @@ "@backstage/plugin-auth-node": "workspace:^", "@backstage/plugin-catalog-node": "workspace:^", "@backstage/plugin-kubernetes-common": "workspace:^", + "@backstage/plugin-kubernetes-node": "workspace:^", "@backstage/plugin-permission-common": "workspace:^", "@backstage/plugin-permission-node": "workspace:^", "@backstage/types": "workspace:^", @@ -86,10 +87,10 @@ "yn": "^4.0.0" }, "devDependencies": { + "@backstage/backend-app-api": "workspace:^", "@backstage/backend-test-utils": "workspace:^", "@backstage/cli": "workspace:^", "@types/aws4": "^1.5.1", - "mock-fs": "^5.2.0", "msw": "^1.0.0", "supertest": "^6.1.3", "ws": "^8.13.0" diff --git a/plugins/kubernetes-backend/src/auth/ServiceAccountStrategy.test.ts b/plugins/kubernetes-backend/src/auth/ServiceAccountStrategy.test.ts index b6b9d0efb8..3a98652c37 100644 --- a/plugins/kubernetes-backend/src/auth/ServiceAccountStrategy.test.ts +++ b/plugins/kubernetes-backend/src/auth/ServiceAccountStrategy.test.ts @@ -13,8 +13,37 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import { createMockDirectory } from '@backstage/backend-test-utils'; import { ServiceAccountStrategy } from './ServiceAccountStrategy'; -import mockFs from 'mock-fs'; + +const mockDir = createMockDirectory({ + content: { + 'token.txt': 'in-cluster-token', + }, +}); + +jest.mock('@kubernetes/client-node', () => ({ + KubeConfig: class { + #loaded = false; + loadFromCluster() { + this.#loaded = true; + } + getCurrentUser() { + if (!this.#loaded) { + throw new Error('loadFromCluster not called'); + } + return { + authProvider: { + config: { + get tokenFile() { + return mockDir.resolve('token.txt'); + }, + }, + }, + }; + } + }, +})); describe('ServiceAccountStrategy', () => { describe('#getCredential', () => { @@ -32,16 +61,9 @@ describe('ServiceAccountStrategy', () => { token: 'from config', }); }); - describe('when serviceAccountToken is absent from config', () => { - afterEach(() => { - mockFs.restore(); - }); + describe('when serviceAccountToken is absent from config', () => { it('reads in-cluster token', async () => { - mockFs({ - '/var/run/secrets/kubernetes.io/serviceaccount/token': - 'in-cluster-token', - }); const strategy = new ServiceAccountStrategy(); const credential = await strategy.getCredential({ diff --git a/plugins/kubernetes-backend/src/plugin.ts b/plugins/kubernetes-backend/src/plugin.ts index e2523b4ecd..83dbae15a0 100644 --- a/plugins/kubernetes-backend/src/plugin.ts +++ b/plugins/kubernetes-backend/src/plugin.ts @@ -22,14 +22,43 @@ import { import { catalogServiceRef } from '@backstage/plugin-catalog-node/alpha'; import { KubernetesBuilder } from '@backstage/plugin-kubernetes-backend'; +import { + KubernetesObjectsProviderExtensionPoint, + kubernetesObjectsProviderExtensionPoint, + KubernetesObjectsProvider, +} from '@backstage/plugin-kubernetes-node'; + +class ObjectsProvider implements KubernetesObjectsProviderExtensionPoint { + private objectsProvider: KubernetesObjectsProvider | undefined; + + getObjectsProvider() { + return this.objectsProvider; + } + + addObjectsProvider(provider: KubernetesObjectsProvider) { + if (this.objectsProvider) { + throw new Error( + 'Multiple Kubernetes objects provider is not supported at this time', + ); + } + this.objectsProvider = provider; + } +} /** * This is the backend plugin that provides the Kubernetes integration. * @alpha */ + export const kubernetesPlugin = createBackendPlugin({ pluginId: 'kubernetes', register(env) { + const extensionPoint = new ObjectsProvider(); + env.registerExtensionPoint( + kubernetesObjectsProviderExtensionPoint, + extensionPoint, + ); + env.registerInit({ deps: { http: coreServices.httpRouter, @@ -46,7 +75,9 @@ export const kubernetesPlugin = createBackendPlugin({ config, catalogApi, permissions, - }).build(); + }) + .setObjectsProvider(extensionPoint.getObjectsProvider()) + .build(); http.use(router); }, }); diff --git a/plugins/kubernetes-backend/src/routes/resourceRoutes.test.ts b/plugins/kubernetes-backend/src/routes/resourceRoutes.test.ts index 753be36fb0..b8254d781c 100644 --- a/plugins/kubernetes-backend/src/routes/resourceRoutes.test.ts +++ b/plugins/kubernetes-backend/src/routes/resourceRoutes.test.ts @@ -14,23 +14,64 @@ * limitations under the License. */ -import { errorHandler } from '@backstage/backend-common'; -import express from 'express'; import request from 'supertest'; -import Router from 'express-promise-router'; -import { addResourceRoutesToRouter } from './resourcesRoutes'; +import { mockServices, startTestBackend } from '@backstage/backend-test-utils'; +import { ExtendedHttpServer } from '@backstage/backend-app-api'; +import { kubernetesObjectsProviderExtensionPoint } from '@backstage/plugin-kubernetes-node'; +import { createBackendModule } from '@backstage/backend-plugin-api'; import { Entity } from '@backstage/catalog-model'; describe('resourcesRoutes', () => { - let app: express.Express; + let app: ExtendedHttpServer; - beforeAll(() => { - app = express(); - app.use(express.json()); - const router = Router(); - addResourceRoutesToRouter( - router, - { + beforeAll(async () => { + const objectsProviderMock = { + getKubernetesObjectsByEntity: jest.fn().mockImplementation(args => { + if (args.entity.metadata.name === 'inject500') { + return Promise.reject(new Error('some internal error')); + } + + return Promise.resolve({ + items: [ + { + clusterOne: { + pods: [ + { + metadata: { + name: 'pod1', + }, + }, + ], + }, + }, + ], + }); + }), + getCustomResourcesByEntity: jest.fn().mockImplementation(args => { + if (args.entity.metadata.name === 'inject500') { + return Promise.reject(new Error('some internal error')); + } + + return Promise.resolve({ + items: [ + { + clusterOne: { + pods: [ + { + metadata: { + name: 'pod1', + }, + }, + ], + }, + }, + ], + }); + }), + }; + + jest.mock('@backstage/catalog-client', () => ({ + CatalogClient: jest.fn().mockImplementation(() => ({ getEntityByRef: jest.fn().mockImplementation(entityRef => { if (entityRef.name === 'noentity') { return Promise.resolve(undefined); @@ -43,61 +84,50 @@ describe('resourcesRoutes', () => { }, } as Entity); }), - } as any, - { - getKubernetesObjectsByEntity: jest.fn().mockImplementation(args => { - if (args.entity.metadata.name === 'inject500') { - return Promise.reject(new Error('some internal error')); - } + })), + })); - return Promise.resolve({ - items: [ - { - clusterOne: { - pods: [ - { - metadata: { - name: 'pod1', - }, - }, - ], - }, + const { server } = await startTestBackend({ + features: [ + mockServices.rootConfig.factory({ + data: { + kubernetes: { + serviceLocatorMethod: { + type: 'multiTenant', }, - ], - }); + clusterLocatorMethods: [ + { + type: 'config', + clusters: [], + }, + ], + }, + }, }), - getCustomResourcesByEntity: jest.fn().mockImplementation(args => { - if (args.entity.metadata.name === 'inject500') { - return Promise.reject(new Error('some internal error')); - } + import('@backstage/plugin-kubernetes-backend/alpha'), + createBackendModule({ + pluginId: 'kubernetes', + moduleId: 'testObjectsProvider', + register(env) { + env.registerInit({ + deps: { extension: kubernetesObjectsProviderExtensionPoint }, + async init({ extension }) { + extension.addObjectsProvider(objectsProviderMock); + }, + }); + }, + }), + ], + }); - return Promise.resolve({ - items: [ - { - clusterOne: { - pods: [ - { - metadata: { - name: 'pod1', - }, - }, - ], - }, - }, - ], - }); - }), - } as any, - ); - app.use('/', router); - app.use(errorHandler()); + app = server; }); describe('POST /resources/workloads/query', () => { // eslint-disable-next-line jest/expect-expect it('200 happy path', async () => { await request(app) - .post('/resources/workloads/query') + .post('/api/kubernetes/resources/workloads/query') .send({ entityRef: 'kind:namespacec/someComponent', auth: { @@ -125,7 +155,7 @@ describe('resourcesRoutes', () => { // eslint-disable-next-line jest/expect-expect it('400 when missing entity ref', async () => { await request(app) - .post('/resources/workloads/query') + .post('/api/kubernetes/resources/workloads/query') .send({ auth: { google: 'something', @@ -137,7 +167,7 @@ describe('resourcesRoutes', () => { error: { name: 'InputError', message: 'entity is a required field' }, request: { method: 'POST', - url: '/resources/workloads/query', + url: '/api/kubernetes/resources/workloads/query', }, response: { statusCode: 400 }, }); @@ -145,7 +175,7 @@ describe('resourcesRoutes', () => { // eslint-disable-next-line jest/expect-expect it('400 when bad entity ref', async () => { await request(app) - .post('/resources/workloads/query') + .post('/api/kubernetes/resources/workloads/query') .send({ entityRef: 'ffff', auth: { @@ -162,7 +192,7 @@ describe('resourcesRoutes', () => { }, request: { method: 'POST', - url: '/resources/workloads/query', + url: '/api/kubernetes/resources/workloads/query', }, response: { statusCode: 400 }, }); @@ -170,7 +200,7 @@ describe('resourcesRoutes', () => { // eslint-disable-next-line jest/expect-expect it('400 when no entity in catalog', async () => { await request(app) - .post('/resources/workloads/query') + .post('/api/kubernetes/resources/workloads/query') .send({ entityRef: 'noentity:noentity', auth: { @@ -186,7 +216,7 @@ describe('resourcesRoutes', () => { }, request: { method: 'POST', - url: '/resources/workloads/query', + url: '/api/kubernetes/resources/workloads/query', }, response: { statusCode: 400 }, }); @@ -194,7 +224,7 @@ describe('resourcesRoutes', () => { // eslint-disable-next-line jest/expect-expect it('401 when no Auth header', async () => { await request(app) - .post('/resources/workloads/query') + .post('/api/kubernetes/resources/workloads/query') .send({ entityRef: 'component:someComponent', auth: { @@ -206,7 +236,7 @@ describe('resourcesRoutes', () => { error: { name: 'AuthenticationError', message: 'No Backstage token' }, request: { method: 'POST', - url: '/resources/workloads/query', + url: '/api/kubernetes/resources/workloads/query', }, response: { statusCode: 401 }, }); @@ -214,7 +244,7 @@ describe('resourcesRoutes', () => { // eslint-disable-next-line jest/expect-expect it('401 when invalid Auth header', async () => { await request(app) - .post('/resources/workloads/query') + .post('/api/kubernetes/resources/workloads/query') .send({ entityRef: 'component:someComponent', auth: { @@ -227,7 +257,7 @@ describe('resourcesRoutes', () => { error: { name: 'AuthenticationError', message: 'No Backstage token' }, request: { method: 'POST', - url: '/resources/workloads/query', + url: '/api/kubernetes/resources/workloads/query', }, response: { statusCode: 401 }, }); @@ -235,7 +265,7 @@ describe('resourcesRoutes', () => { // eslint-disable-next-line jest/expect-expect it('500 handle gracefully', async () => { await request(app) - .post('/resources/workloads/query') + .post('/api/kubernetes/resources/workloads/query') .send({ entityRef: 'inject500:inject500/inject500', auth: { @@ -249,7 +279,10 @@ describe('resourcesRoutes', () => { name: 'Error', message: 'some internal error', }, - request: { method: 'POST', url: '/resources/workloads/query' }, + request: { + method: 'POST', + url: '/api/kubernetes/resources/workloads/query', + }, response: { statusCode: 500 }, }); }); @@ -258,7 +291,7 @@ describe('resourcesRoutes', () => { // eslint-disable-next-line jest/expect-expect it('200 happy path', async () => { await request(app) - .post('/resources/custom/query') + .post('/api/kubernetes/resources/custom/query') .send({ entityRef: 'component:someComponent', auth: { @@ -293,7 +326,7 @@ describe('resourcesRoutes', () => { // eslint-disable-next-line jest/expect-expect it('400 when missing custom resources', async () => { await request(app) - .post('/resources/custom/query') + .post('/api/kubernetes/resources/custom/query') .send({ entityRef: 'component:someComponent', auth: { @@ -309,7 +342,7 @@ describe('resourcesRoutes', () => { }, request: { method: 'POST', - url: '/resources/custom/query', + url: '/api/kubernetes/resources/custom/query', }, response: { statusCode: 400 }, }); @@ -317,7 +350,7 @@ describe('resourcesRoutes', () => { // eslint-disable-next-line jest/expect-expect it('400 when custom resources not array', async () => { await request(app) - .post('/resources/custom/query') + .post('/api/kubernetes/resources/custom/query') .send({ entityRef: 'component:someComponent', auth: { @@ -334,7 +367,7 @@ describe('resourcesRoutes', () => { }, request: { method: 'POST', - url: '/resources/custom/query', + url: '/api/kubernetes/resources/custom/query', }, response: { statusCode: 400 }, }); @@ -342,7 +375,7 @@ describe('resourcesRoutes', () => { // eslint-disable-next-line jest/expect-expect it('400 when custom resources empty', async () => { await request(app) - .post('/resources/custom/query') + .post('/api/kubernetes/resources/custom/query') .send({ entityRef: 'component:someComponent', auth: { @@ -359,7 +392,7 @@ describe('resourcesRoutes', () => { }, request: { method: 'POST', - url: '/resources/custom/query', + url: '/api/kubernetes/resources/custom/query', }, response: { statusCode: 400 }, }); @@ -367,7 +400,7 @@ describe('resourcesRoutes', () => { // eslint-disable-next-line jest/expect-expect it('400 when missing entity ref', async () => { await request(app) - .post('/resources/custom/query') + .post('/api/kubernetes/resources/custom/query') .send({ auth: { google: 'something', @@ -386,7 +419,7 @@ describe('resourcesRoutes', () => { error: { name: 'InputError', message: 'entity is a required field' }, request: { method: 'POST', - url: '/resources/custom/query', + url: '/api/kubernetes/resources/custom/query', }, response: { statusCode: 400 }, }); @@ -394,7 +427,7 @@ describe('resourcesRoutes', () => { // eslint-disable-next-line jest/expect-expect it('400 when bad entity ref', async () => { await request(app) - .post('/resources/custom/query') + .post('/api/kubernetes/resources/custom/query') .send({ entityRef: 'ffff', auth: { @@ -418,7 +451,7 @@ describe('resourcesRoutes', () => { }, request: { method: 'POST', - url: '/resources/custom/query', + url: '/api/kubernetes/resources/custom/query', }, response: { statusCode: 400 }, }); @@ -426,7 +459,7 @@ describe('resourcesRoutes', () => { // eslint-disable-next-line jest/expect-expect it('400 when no entity in catalog', async () => { await request(app) - .post('/resources/custom/query') + .post('/api/kubernetes/resources/custom/query') .send({ entityRef: 'noentity:noentity', auth: { @@ -449,7 +482,7 @@ describe('resourcesRoutes', () => { }, request: { method: 'POST', - url: '/resources/custom/query', + url: '/api/kubernetes/resources/custom/query', }, response: { statusCode: 400 }, }); @@ -457,7 +490,7 @@ describe('resourcesRoutes', () => { // eslint-disable-next-line jest/expect-expect it('401 when no Auth header', async () => { await request(app) - .post('/resources/custom/query') + .post('/api/kubernetes/resources/custom/query') .send({ entityRef: 'component:someComponent', auth: { @@ -476,7 +509,7 @@ describe('resourcesRoutes', () => { error: { name: 'AuthenticationError', message: 'No Backstage token' }, request: { method: 'POST', - url: '/resources/custom/query', + url: '/api/kubernetes/resources/custom/query', }, response: { statusCode: 401 }, }); @@ -484,7 +517,7 @@ describe('resourcesRoutes', () => { // eslint-disable-next-line jest/expect-expect it('401 when invalid Auth header', async () => { await request(app) - .post('/resources/custom/query') + .post('/api/kubernetes/resources/custom/query') .send({ entityRef: 'component:someComponent', auth: { @@ -504,7 +537,7 @@ describe('resourcesRoutes', () => { error: { name: 'AuthenticationError', message: 'No Backstage token' }, request: { method: 'POST', - url: '/resources/custom/query', + url: '/api/kubernetes/resources/custom/query', }, response: { statusCode: 401 }, }); @@ -512,7 +545,7 @@ describe('resourcesRoutes', () => { // eslint-disable-next-line jest/expect-expect it('500 handle gracefully', async () => { await request(app) - .post('/resources/custom/query') + .post('/api/kubernetes/resources/custom/query') .send({ entityRef: 'inject500:inject500/inject500', auth: { @@ -533,7 +566,10 @@ describe('resourcesRoutes', () => { name: 'Error', message: 'some internal error', }, - request: { method: 'POST', url: '/resources/custom/query' }, + request: { + method: 'POST', + url: '/api/kubernetes/resources/custom/query', + }, response: { statusCode: 500 }, }); }); diff --git a/plugins/kubernetes-backend/src/routes/resourcesRoutes.ts b/plugins/kubernetes-backend/src/routes/resourcesRoutes.ts index 2b2a48f707..0468799908 100644 --- a/plugins/kubernetes-backend/src/routes/resourcesRoutes.ts +++ b/plugins/kubernetes-backend/src/routes/resourcesRoutes.ts @@ -21,7 +21,7 @@ import { import { CatalogApi } from '@backstage/catalog-client'; import { InputError, AuthenticationError } from '@backstage/errors'; import express, { Request } from 'express'; -import { KubernetesObjectsProvider } from '../types/types'; +import { KubernetesObjectsProvider } from '@backstage/plugin-kubernetes-node'; import { getBearerTokenFromAuthorizationHeader } from '@backstage/plugin-auth-node'; export const addResourceRoutesToRouter = ( diff --git a/plugins/kubernetes-backend/src/service/KubernetesBuilder.ts b/plugins/kubernetes-backend/src/service/KubernetesBuilder.ts index 9ac1bf6e5d..b05db36398 100644 --- a/plugins/kubernetes-backend/src/service/KubernetesBuilder.ts +++ b/plugins/kubernetes-backend/src/service/KubernetesBuilder.ts @@ -47,13 +47,13 @@ import { CustomResource, KubernetesClustersSupplier, KubernetesFetcher, - KubernetesObjectsProvider, KubernetesObjectsProviderOptions, KubernetesObjectTypes, KubernetesServiceLocator, ObjectsByEntityRequest, ServiceLocatorMethod, } from '../types/types'; +import { KubernetesObjectsProvider } from '@backstage/plugin-kubernetes-node'; import { DEFAULT_OBJECTS, KubernetesFanOutHandler, diff --git a/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts b/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts index f2f1c6d38f..02f7ab86df 100644 --- a/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts +++ b/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts @@ -25,8 +25,6 @@ import { FetchResponseWrapper, ObjectToFetch, CustomResource, - CustomResourcesByEntity, - KubernetesObjectsByEntity, } from '../types/types'; import { AuthenticationStrategy, KubernetesCredential } from '../auth/types'; import { @@ -46,6 +44,10 @@ import { CurrentResourceUsage, PodStatus, } from '@kubernetes/client-node'; +import { + CustomResourcesByEntity, + KubernetesObjectsByEntity, +} from '@backstage/plugin-kubernetes-node'; /** * diff --git a/plugins/kubernetes-backend/src/service/KubernetesFetcher.test.ts b/plugins/kubernetes-backend/src/service/KubernetesFetcher.test.ts index 2cecbbeaec..574a1475fd 100644 --- a/plugins/kubernetes-backend/src/service/KubernetesFetcher.test.ts +++ b/plugins/kubernetes-backend/src/service/KubernetesFetcher.test.ts @@ -26,8 +26,17 @@ import { rest, } from 'msw'; import { setupServer } from 'msw/node'; -import { setupRequestMockHandlers } from '@backstage/backend-test-utils'; -import mockFs from 'mock-fs'; +import { + createMockDirectory, + setupRequestMockHandlers, +} from '@backstage/backend-test-utils'; +import { Config } from '@kubernetes/client-node'; + +const mockCertDir = createMockDirectory({ + content: { + 'ca.crt': 'MOCKCA', + }, +}); const OBJECTS_TO_FETCH = new Set([ { @@ -728,13 +737,7 @@ describe('KubernetesFetcher', () => { expect(agent.options.ca).toBeUndefined(); }); describe('with a CA file on disk', () => { - afterEach(() => { - mockFs.restore(); - }); it('should trust contents of specified caFile', async () => { - mockFs({ - '/path/to/ca.crt': 'MOCKCA', - }); worker.use( rest.get('https://localhost:9999/api/v1/pods', (req, res, ctx) => res( @@ -752,7 +755,7 @@ describe('KubernetesFetcher', () => { name: 'cluster1', url: 'https://localhost:9999', authMetadata: {}, - caFile: '/path/to/ca.crt', + caFile: mockCertDir.resolve('ca.crt'), }, credential: { type: 'bearer token', token: 'token' }, objectTypesToFetch: new Set([ @@ -899,17 +902,18 @@ describe('KubernetesFetcher', () => { describe('Backstage running on k8s', () => { const initialHost = process.env.KUBERNETES_SERVICE_HOST; const initialPort = process.env.KUBERNETES_SERVICE_PORT; + const initialCaPath = Config.SERVICEACCOUNT_CA_PATH; + afterEach(() => { process.env.KUBERNETES_SERVICE_HOST = initialHost; process.env.KUBERNETES_SERVICE_PORT = initialPort; - mockFs.restore(); + Config.SERVICEACCOUNT_CA_PATH = initialCaPath; }); + it('makes in-cluster requests when cluster details has no token', async () => { process.env.KUBERNETES_SERVICE_HOST = '10.10.10.10'; process.env.KUBERNETES_SERVICE_PORT = '443'; - mockFs({ - '/var/run/secrets/kubernetes.io/serviceaccount/ca.crt': '', - }); + Config.SERVICEACCOUNT_CA_PATH = mockCertDir.resolve('ca.crt'); worker.use( rest.get('https://10.10.10.10/api/v1/pods', (req, res, ctx) => res( diff --git a/plugins/kubernetes-backend/src/types/index.ts b/plugins/kubernetes-backend/src/types/index.ts index db229eae34..c8413c1aa9 100644 --- a/plugins/kubernetes-backend/src/types/index.ts +++ b/plugins/kubernetes-backend/src/types/index.ts @@ -15,3 +15,9 @@ */ export * from './types'; + +export type { + CustomResourcesByEntity, + KubernetesObjectsByEntity, + KubernetesObjectsProvider, +} from '@backstage/plugin-kubernetes-node'; diff --git a/plugins/kubernetes-backend/src/types/types.ts b/plugins/kubernetes-backend/src/types/types.ts index 3767791589..9236711758 100644 --- a/plugins/kubernetes-backend/src/types/types.ts +++ b/plugins/kubernetes-backend/src/types/types.ts @@ -21,9 +21,7 @@ import type { CustomResourceMatcher, FetchResponse, KubernetesFetchError, - KubernetesRequestAuth, KubernetesRequestBody, - ObjectsByEntityResponse, } from '@backstage/plugin-kubernetes-common'; import { Config } from '@backstage/config'; import { KubernetesCredential } from '../auth/types'; @@ -229,33 +227,3 @@ export interface KubernetesObjectsProviderOptions { * @public */ export type ObjectsByEntityRequest = KubernetesRequestBody; - -/** - * - * @public - */ -export interface KubernetesObjectsByEntity { - entity: Entity; - auth: KubernetesRequestAuth; -} - -/** - * - * @public - */ -export interface CustomResourcesByEntity extends KubernetesObjectsByEntity { - customResources: CustomResourceMatcher[]; -} - -/** - * - * @public - */ -export interface KubernetesObjectsProvider { - getKubernetesObjectsByEntity( - kubernetesObjectsByEntity: KubernetesObjectsByEntity, - ): Promise; - getCustomResourcesByEntity( - customResourcesByEntity: CustomResourcesByEntity, - ): Promise; -} diff --git a/plugins/kubernetes-cluster/CHANGELOG.md b/plugins/kubernetes-cluster/CHANGELOG.md new file mode 100644 index 0000000000..9e0961f3f7 --- /dev/null +++ b/plugins/kubernetes-cluster/CHANGELOG.md @@ -0,0 +1,17 @@ +# @backstage/plugin-kubernetes-cluster + +## 0.0.1-next.0 + +### Patch Changes + +- 95518765ee: Add Kubernetes cluster plugin. Viewing Kubernetes clusters as an Admin from Backstage +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/plugin-kubernetes-react@0.1.0-next.1 + - @backstage/theme@0.4.3-next.0 + - @backstage/plugin-kubernetes-common@0.7.0-next.1 + - @backstage/config@1.1.1-next.0 diff --git a/plugins/kubernetes-cluster/package.json b/plugins/kubernetes-cluster/package.json index 2e1c8d8309..bd528c5b5c 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.0", + "version": "0.0.1-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 4bd84d3ca7..c95c8afa61 100644 --- a/plugins/kubernetes-common/CHANGELOG.md +++ b/plugins/kubernetes-common/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-kubernetes-common +## 0.7.0-next.1 + +### Patch Changes + +- 5dac12e435: The kubernetes APIs invokes Authentication Strategies when Backstage-Kubernetes-Authorization-X-X headers are provided, this enable the possibility to invoke strategies that executes additional steps to get a kubernetes token like on pinniped or custom strategies +- Updated dependencies + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/errors@1.2.3-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-permission-common@0.7.9-next.0 + ## 0.7.0-next.0 ### Minor Changes diff --git a/plugins/kubernetes-common/package.json b/plugins/kubernetes-common/package.json index baf24cea5d..2a6cddc520 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.0-next.0", + "version": "0.7.0-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/kubernetes-node/.eslintrc.js b/plugins/kubernetes-node/.eslintrc.js new file mode 100644 index 0000000000..e2a53a6ad2 --- /dev/null +++ b/plugins/kubernetes-node/.eslintrc.js @@ -0,0 +1 @@ +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/kubernetes-node/CHANGELOG.md b/plugins/kubernetes-node/CHANGELOG.md new file mode 100644 index 0000000000..6aa0b7be7f --- /dev/null +++ b/plugins/kubernetes-node/CHANGELOG.md @@ -0,0 +1,14 @@ +# @backstage/plugin-kubernetes-node + +## 0.1.0-next.0 + +### Minor Changes + +- cbb0e3c3f4: A new plugin has been introduced to house the extension points for Kubernetes backend plugin; at the moment only the `KubernetesObjectsProviderExtensionPoint` is present. The `kubernetes-backend` plugin was modified to use this new extension point. + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-kubernetes-common@0.7.0-next.1 + - @backstage/backend-plugin-api@0.6.6-next.2 diff --git a/plugins/kubernetes-node/README.md b/plugins/kubernetes-node/README.md new file mode 100644 index 0000000000..afdc299bce --- /dev/null +++ b/plugins/kubernetes-node/README.md @@ -0,0 +1,5 @@ +# @backstage/plugin-kubernetes-node + +Welcome to the Node.js library package for the kubernetes plugin! + +_This plugin was created through the Backstage CLI_ diff --git a/plugins/kubernetes-node/api-report.md b/plugins/kubernetes-node/api-report.md new file mode 100644 index 0000000000..d2981b32d1 --- /dev/null +++ b/plugins/kubernetes-node/api-report.md @@ -0,0 +1,47 @@ +## API Report File for "@backstage/plugin-kubernetes-node" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts +import { CustomResourceMatcher } from '@backstage/plugin-kubernetes-common'; +import { Entity } from '@backstage/catalog-model'; +import { ExtensionPoint } from '@backstage/backend-plugin-api'; +import { KubernetesObjectsProvider as KubernetesObjectsProvider_2 } from '@backstage/plugin-kubernetes-node'; +import { KubernetesRequestAuth } from '@backstage/plugin-kubernetes-common'; +import { ObjectsByEntityResponse } from '@backstage/plugin-kubernetes-common'; + +// @public (undocumented) +export interface CustomResourcesByEntity extends KubernetesObjectsByEntity { + // (undocumented) + customResources: CustomResourceMatcher[]; +} + +// @public (undocumented) +export interface KubernetesObjectsByEntity { + // (undocumented) + auth: KubernetesRequestAuth; + // (undocumented) + entity: Entity; +} + +// @public (undocumented) +export interface KubernetesObjectsProvider { + // (undocumented) + getCustomResourcesByEntity( + customResourcesByEntity: CustomResourcesByEntity, + ): Promise; + // (undocumented) + getKubernetesObjectsByEntity( + kubernetesObjectsByEntity: KubernetesObjectsByEntity, + ): Promise; +} + +// @public +export interface KubernetesObjectsProviderExtensionPoint { + // (undocumented) + addObjectsProvider(provider: KubernetesObjectsProvider_2): void; +} + +// @public +export const kubernetesObjectsProviderExtensionPoint: ExtensionPoint; +``` diff --git a/plugins/kubernetes-node/catalog-info.yaml b/plugins/kubernetes-node/catalog-info.yaml new file mode 100644 index 0000000000..ad04818e49 --- /dev/null +++ b/plugins/kubernetes-node/catalog-info.yaml @@ -0,0 +1,10 @@ +apiVersion: backstage.io/v1alpha1 +kind: Component +metadata: + name: backstage-plugin-kubernetes-node + title: '@backstage/plugin-kubernetes-node' + description: Node.js library for the kubernetes plugin +spec: + lifecycle: experimental + type: backstage-node-library + owner: kubernetes-maintainers diff --git a/plugins/kubernetes-node/package.json b/plugins/kubernetes-node/package.json new file mode 100644 index 0000000000..433fadf2f2 --- /dev/null +++ b/plugins/kubernetes-node/package.json @@ -0,0 +1,35 @@ +{ + "name": "@backstage/plugin-kubernetes-node", + "description": "Node.js library for the kubernetes 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": "node-library" + }, + "scripts": { + "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:^" + }, + "files": [ + "dist" + ], + "dependencies": { + "@backstage/backend-plugin-api": "workspace:^", + "@backstage/catalog-model": "workspace:^", + "@backstage/plugin-kubernetes-common": "workspace:^" + } +} diff --git a/plugins/kubernetes-node/src/extensions.ts b/plugins/kubernetes-node/src/extensions.ts new file mode 100644 index 0000000000..152622cf96 --- /dev/null +++ b/plugins/kubernetes-node/src/extensions.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 { createExtensionPoint } from '@backstage/backend-plugin-api'; +import { KubernetesObjectsProvider } from '@backstage/plugin-kubernetes-node'; + +/** + * The interface for {@link kubernetesObjectsProviderExtensionPoint}. + * + * @public + */ +export interface KubernetesObjectsProviderExtensionPoint { + addObjectsProvider(provider: KubernetesObjectsProvider): void; +} + +/** + * An extension point the exposes the ability to configure a objects provider. + * + * @public + */ +export const kubernetesObjectsProviderExtensionPoint = + createExtensionPoint({ + id: 'kubernetes.objects-provider', + }); diff --git a/plugins/kubernetes-node/src/index.ts b/plugins/kubernetes-node/src/index.ts new file mode 100644 index 0000000000..09ea4123ce --- /dev/null +++ b/plugins/kubernetes-node/src/index.ts @@ -0,0 +1,37 @@ +/* + * 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. + */ + +/** + * Node.js library for the kubernetes plugin. + * + * @packageDocumentation + */ + +// In this package you might for example export functions that +// help other plugins or modules interact with your plugin. + +/** + * Node.js library for the kubernetes plugin. + * + * @packageDocumentation + */ + +export { + kubernetesObjectsProviderExtensionPoint, + type KubernetesObjectsProviderExtensionPoint, +} from './extensions'; + +export * from './types'; diff --git a/plugins/kubernetes-node/src/setupTests.ts b/plugins/kubernetes-node/src/setupTests.ts new file mode 100644 index 0000000000..4b9026cde5 --- /dev/null +++ b/plugins/kubernetes-node/src/setupTests.ts @@ -0,0 +1,16 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +export {}; diff --git a/packages/frontend-plugin-api/src/routing/index.ts b/plugins/kubernetes-node/src/types/index.ts similarity index 93% rename from packages/frontend-plugin-api/src/routing/index.ts rename to plugins/kubernetes-node/src/types/index.ts index 4506538fa0..34ed8a9604 100644 --- a/packages/frontend-plugin-api/src/routing/index.ts +++ b/plugins/kubernetes-node/src/types/index.ts @@ -14,4 +14,4 @@ * limitations under the License. */ -export { useRouteRef } from './useRouteRef'; +export * from './types'; diff --git a/plugins/kubernetes-node/src/types/types.ts b/plugins/kubernetes-node/src/types/types.ts new file mode 100644 index 0000000000..182f3ecfeb --- /dev/null +++ b/plugins/kubernetes-node/src/types/types.ts @@ -0,0 +1,53 @@ +/* + * 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 { + CustomResourceMatcher, + KubernetesRequestAuth, + ObjectsByEntityResponse, +} from '@backstage/plugin-kubernetes-common'; + +/** + * + * @public + */ + +export interface KubernetesObjectsProvider { + getKubernetesObjectsByEntity( + kubernetesObjectsByEntity: KubernetesObjectsByEntity, + ): Promise; + getCustomResourcesByEntity( + customResourcesByEntity: CustomResourcesByEntity, + ): Promise; +} + +/** + * + * @public + */ + +export interface KubernetesObjectsByEntity { + entity: Entity; + auth: KubernetesRequestAuth; +} +/** + * + * @public + */ + +export interface CustomResourcesByEntity extends KubernetesObjectsByEntity { + customResources: CustomResourceMatcher[]; +} diff --git a/plugins/kubernetes-react/CHANGELOG.md b/plugins/kubernetes-react/CHANGELOG.md index f7ed7bb39d..bd2c4759de 100644 --- a/plugins/kubernetes-react/CHANGELOG.md +++ b/plugins/kubernetes-react/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-kubernetes-react +## 0.1.0-next.1 + +### Patch Changes + +- 95518765ee: Add Kubernetes cluster plugin. Viewing Kubernetes clusters as an Admin from Backstage +- 5dac12e435: The kubernetes APIs invokes Authentication Strategies when Backstage-Kubernetes-Authorization-X-X headers are provided, this enable the possibility to invoke strategies that executes additional steps to get a kubernetes token like on pinniped or custom strategies +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/errors@1.2.3-next.0 + - @backstage/plugin-kubernetes-common@0.7.0-next.1 + - @backstage/types@1.1.1 + ## 0.1.0-next.0 ### Minor Changes diff --git a/plugins/kubernetes-react/package.json b/plugins/kubernetes-react/package.json index e708e9e455..1264719bab 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.0-next.0", + "version": "0.1.0-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/kubernetes/CHANGELOG.md b/plugins/kubernetes/CHANGELOG.md index 55fda1b465..58016d750a 100644 --- a/plugins/kubernetes/CHANGELOG.md +++ b/plugins/kubernetes/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-kubernetes +## 0.11.0-next.2 + +### Patch Changes + +- 95518765ee: Add Kubernetes cluster plugin. Viewing Kubernetes clusters as an Admin from Backstage +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/plugin-kubernetes-react@0.1.0-next.1 + - @backstage/theme@0.4.3-next.0 + - @backstage/plugin-kubernetes-common@0.7.0-next.1 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + ## 0.11.0-next.1 ### Minor Changes diff --git a/plugins/kubernetes/package.json b/plugins/kubernetes/package.json index 8ed59595c2..972200ebca 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.0-next.1", + "version": "0.11.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/lighthouse-backend/CHANGELOG.md b/plugins/lighthouse-backend/CHANGELOG.md index 32c2b599dd..ae3bc3ec7b 100644 --- a/plugins/lighthouse-backend/CHANGELOG.md +++ b/plugins/lighthouse-backend/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-lighthouse-backend +## 0.3.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/backend-tasks@0.5.11-next.2 + - @backstage/plugin-catalog-node@1.4.7-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/catalog-client@1.4.5-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-lighthouse-common@0.1.4-next.0 + ## 0.3.2-next.1 ### Patch Changes diff --git a/plugins/lighthouse-backend/package.json b/plugins/lighthouse-backend/package.json index bd337e185a..9f7c582060 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.2-next.1", + "version": "0.3.3-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/lighthouse-common/CHANGELOG.md b/plugins/lighthouse-common/CHANGELOG.md index ddeffb94b3..16133e9d52 100644 --- a/plugins/lighthouse-common/CHANGELOG.md +++ b/plugins/lighthouse-common/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-lighthouse-common +## 0.1.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.1.1-next.0 + ## 0.1.3 ### Patch Changes diff --git a/plugins/lighthouse-common/package.json b/plugins/lighthouse-common/package.json index 086ee6cccd..e3cab60d5e 100644 --- a/plugins/lighthouse-common/package.json +++ b/plugins/lighthouse-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-lighthouse-common", "description": "Common functionalities for lighthouse, to be shared between lighthouse and lighthouse-backend plugin", - "version": "0.1.3", + "version": "0.1.4-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 4ae227281a..a462393423 100644 --- a/plugins/lighthouse/CHANGELOG.md +++ b/plugins/lighthouse/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-lighthouse +## 0.4.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/theme@0.4.3-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-lighthouse-common@0.1.4-next.0 + ## 0.4.10-next.1 ### Patch Changes diff --git a/plugins/lighthouse/package.json b/plugins/lighthouse/package.json index 1b81e64511..1f43ab2d03 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.10-next.1", + "version": "0.4.10-next.2", "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 5bc5640704..ccdcf24842 100644 --- a/plugins/linguist-backend/CHANGELOG.md +++ b/plugins/linguist-backend/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-linguist-backend +## 0.5.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-auth-node@0.4.0-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-tasks@0.5.11-next.2 + - @backstage/plugin-catalog-node@1.4.7-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/catalog-client@1.4.5-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-linguist-common@0.1.2 + ## 0.5.2-next.1 ### Patch Changes diff --git a/plugins/linguist-backend/package.json b/plugins/linguist-backend/package.json index 99ce86abd8..954eb5c634 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.2-next.1", + "version": "0.5.3-next.2", "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 b5f72d53ba..003e1b6d80 100644 --- a/plugins/linguist/CHANGELOG.md +++ b/plugins/linguist/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-linguist +## 0.1.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/theme@0.4.3-next.0 + - @backstage/plugin-linguist-common@0.1.2 + ## 0.1.10-next.1 ### Patch Changes diff --git a/plugins/linguist/package.json b/plugins/linguist/package.json index 4bdc89ce29..88b5cf6d05 100644 --- a/plugins/linguist/package.json +++ b/plugins/linguist/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-linguist", - "version": "0.1.10-next.1", + "version": "0.1.10-next.2", "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 1b1942ce6f..fc3a2c86b1 100644 --- a/plugins/microsoft-calendar/CHANGELOG.md +++ b/plugins/microsoft-calendar/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-microsoft-calendar +## 0.1.8-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/theme@0.4.3-next.0 + ## 0.1.8-next.1 ### Patch Changes diff --git a/plugins/microsoft-calendar/package.json b/plugins/microsoft-calendar/package.json index 63ce1d7dfa..3cbd22c06d 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.8-next.1", + "version": "0.1.8-next.2", "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 c667e3594c..8b9e3b4555 100644 --- a/plugins/newrelic-dashboard/CHANGELOG.md +++ b/plugins/newrelic-dashboard/CHANGELOG.md @@ -1,5 +1,25 @@ # @backstage/plugin-newrelic-dashboard +## 0.3.0-next.2 + +### Minor Changes + +- d7eba6cab4: Changes in `newrelic-dashboard` plugin: + + - Make DashboardSnapshotList component public + - Settle discrepancies in the exported API + - Deprecate DashboardSnapshotComponent + +### Patch Changes + +- 5194a51a1c: Fixed React Warning: "Each child in a list should have a unique 'key' prop" during the rendering of `EntityNewRelicDashboardCard` +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/errors@1.2.3-next.0 + ## 0.2.18-next.1 ### Patch Changes diff --git a/plugins/newrelic-dashboard/api-report.md b/plugins/newrelic-dashboard/api-report.md index ce7b8d5b7e..283523d781 100644 --- a/plugins/newrelic-dashboard/api-report.md +++ b/plugins/newrelic-dashboard/api-report.md @@ -11,12 +11,22 @@ import { JSX as JSX_2 } from 'react'; import { RouteRef } from '@backstage/core-plugin-api'; // @public +export const DashboardSnapshot: (props: { + guid: string; + name: string; + permalink: string; +}) => JSX_2.Element; + +// @public @deprecated export const DashboardSnapshotComponent: (props: { guid: string; name: string; permalink: string; }) => JSX_2.Element; +// @public +export const DashboardSnapshotList: (props: { guid: string }) => JSX_2.Element; + // @public (undocumented) export const EntityNewRelicDashboardCard: () => JSX_2.Element; diff --git a/plugins/newrelic-dashboard/package.json b/plugins/newrelic-dashboard/package.json index af5003dc1a..e1dbfbfa5f 100644 --- a/plugins/newrelic-dashboard/package.json +++ b/plugins/newrelic-dashboard/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-newrelic-dashboard", - "version": "0.2.18-next.1", + "version": "0.3.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/newrelic-dashboard/src/components/NewRelicDashboard/DashboardEntityList.tsx b/plugins/newrelic-dashboard/src/components/NewRelicDashboard/DashboardEntityList.tsx index 6c89f3eb80..8d87a54ca0 100644 --- a/plugins/newrelic-dashboard/src/components/NewRelicDashboard/DashboardEntityList.tsx +++ b/plugins/newrelic-dashboard/src/components/NewRelicDashboard/DashboardEntityList.tsx @@ -69,9 +69,9 @@ export const DashboardEntityList = () => { <>No Dashboard Pages found with the specified Dashboard GUID )} {value?.getDashboardEntity?.data.actor.entitySearch.results.entities?.map( - (entityResult: ResultEntity) => { + (entityResult: ResultEntity, index: number) => { return ( - + diff --git a/plugins/newrelic-dashboard/src/index.ts b/plugins/newrelic-dashboard/src/index.ts index ba87b8a514..bbdfb70190 100644 --- a/plugins/newrelic-dashboard/src/index.ts +++ b/plugins/newrelic-dashboard/src/index.ts @@ -18,6 +18,8 @@ export { newRelicDashboardPlugin, EntityNewRelicDashboardCard, EntityNewRelicDashboardContent, + DashboardSnapshot, + DashboardSnapshotList, DashboardSnapshotComponent, } from './plugin'; export { isNewRelicDashboardAvailable } from './Router'; diff --git a/plugins/newrelic-dashboard/src/plugin.ts b/plugins/newrelic-dashboard/src/plugin.ts index 51be731ca7..360f1cb911 100644 --- a/plugins/newrelic-dashboard/src/plugin.ts +++ b/plugins/newrelic-dashboard/src/plugin.ts @@ -52,7 +52,7 @@ export const newRelicDashboardPlugin = createPlugin({ /** @public */ export const EntityNewRelicDashboardContent = newRelicDashboardPlugin.provide( createComponentExtension({ - name: 'EntityNewRelicDashboardPage', + name: 'EntityNewRelicDashboardContent', component: { lazy: () => import('./Router').then(m => m.Router), }, @@ -62,7 +62,7 @@ export const EntityNewRelicDashboardContent = newRelicDashboardPlugin.provide( /** @public */ export const EntityNewRelicDashboardCard = newRelicDashboardPlugin.provide( createComponentExtension({ - name: 'EntityNewRelicDashboardListComponent', + name: 'EntityNewRelicDashboardCard', component: { lazy: () => import('./components/NewRelicDashboard/DashboardEntityList').then( @@ -80,9 +80,9 @@ export const EntityNewRelicDashboardCard = newRelicDashboardPlugin.provide( * * @public */ -export const DashboardSnapshotComponent = newRelicDashboardPlugin.provide( +export const DashboardSnapshot = newRelicDashboardPlugin.provide( createComponentExtension({ - name: 'DashboardSnapshotComponent', + name: 'DashboardSnapshot', component: { lazy: () => import( @@ -91,3 +91,33 @@ export const DashboardSnapshotComponent = newRelicDashboardPlugin.provide( }, }), ); + +/** + * Render dashboard snapshots from Newrelic in backstage. Use dashboards which have the tag `isDashboardPage: true` + * + * @deprecated + * Use DashboardSnapshot export name instead + * + * @public + */ +export const DashboardSnapshotComponent = DashboardSnapshot; + +/** + * Render a dashboard snapshots list from Newrelic in backstage. Use dashboards which have the tag `isDashboardPage: true` + * + * @remarks + * This can be helpful for rendering dashboards outside of Entity Catalog. + * + * @public + */ +export const DashboardSnapshotList = newRelicDashboardPlugin.provide( + createComponentExtension({ + name: 'DashboardSnapshotList', + component: { + lazy: () => + import( + './components/NewRelicDashboard/DashboardSnapshotList/DashboardSnapshotList' + ).then(m => m.DashboardSnapshotList), + }, + }), +); diff --git a/plugins/newrelic/CHANGELOG.md b/plugins/newrelic/CHANGELOG.md index a0d122a18c..5274857950 100644 --- a/plugins/newrelic/CHANGELOG.md +++ b/plugins/newrelic/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-newrelic +## 0.3.41-next.2 + +### Patch Changes + +- ce50a15506: Fixed sorting and searching in the NewRelic table. +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/theme@0.4.3-next.0 + ## 0.3.41-next.1 ### Patch Changes diff --git a/plugins/newrelic/package.json b/plugins/newrelic/package.json index da63717dda..0826cf6637 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.41-next.1", + "version": "0.3.41-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/newrelic/src/components/NewRelicFetchComponent/NewRelicFetchComponent.tsx b/plugins/newrelic/src/components/NewRelicFetchComponent/NewRelicFetchComponent.tsx index 0cd1c3b14c..85183916bd 100644 --- a/plugins/newrelic/src/components/NewRelicFetchComponent/NewRelicFetchComponent.tsx +++ b/plugins/newrelic/src/components/NewRelicFetchComponent/NewRelicFetchComponent.tsx @@ -22,16 +22,56 @@ import { newRelicApiRef, NewRelicApplications } from '../../api'; import { Progress, Table, TableColumn } from '@backstage/core-components'; import { useApi } from '@backstage/core-plugin-api'; +const sortNumeric = + (field: F) => + (a: { [key in F]: number }, b: { [key in F]: number }) => { + return a[field] - b[field]; + }; + +type NewRelicTableData = { + name: string; + responseTime: number; + throughput: number; + errorRate: number; + instanceCount: number; + apdexScore: number; +}; + export const NewRelicAPMTable = ({ applications }: NewRelicApplications) => { - const columns: TableColumn[] = [ - { title: 'Application', field: 'name' }, - { title: 'Response Time (ms)', field: 'responseTime' }, - { title: 'Throughput (rpm)', field: 'throughput' }, - { title: 'Error Rate (%)', field: 'errorRate' }, - { title: 'Instance Count', field: 'instanceCount' }, - { title: 'Apdex', field: 'apdexScore' }, + const columns: TableColumn[] = [ + { title: 'Application', field: 'name', searchable: true }, + { + title: 'Response Time (ms)', + field: 'responseTime', + customSort: sortNumeric('responseTime'), + searchable: false, + }, + { + title: 'Throughput (rpm)', + field: 'throughput', + customSort: sortNumeric('throughput'), + searchable: false, + }, + { + title: 'Error Rate (%)', + field: 'errorRate', + customSort: sortNumeric('errorRate'), + searchable: false, + }, + { + title: 'Instance Count', + field: 'instanceCount', + customSort: sortNumeric('instanceCount'), + searchable: false, + }, + { + title: 'Apdex', + field: 'apdexScore', + customSort: sortNumeric('apdexScore'), + searchable: false, + }, ]; - const data = applications.map(app => { + const data: Array = applications.map(app => { const { name, application_summary: applicationSummary } = app; const { response_time: responseTime, diff --git a/plugins/nomad-backend/CHANGELOG.md b/plugins/nomad-backend/CHANGELOG.md index a5186f75f8..f5ceaf5b9e 100644 --- a/plugins/nomad-backend/CHANGELOG.md +++ b/plugins/nomad-backend/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-nomad-backend +## 0.1.8-next.2 + +### Patch Changes + +- 6822918c50: Added support for the [new backend system](https://backstage.io/docs/backend-system/) +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 + ## 0.1.7-next.1 ### Patch Changes diff --git a/plugins/nomad-backend/package.json b/plugins/nomad-backend/package.json index 7873f846ba..caff96aa11 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.7-next.1", + "version": "0.1.8-next.2", "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 15f8fca004..e16f5ea02c 100644 --- a/plugins/nomad/CHANGELOG.md +++ b/plugins/nomad/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-nomad +## 0.1.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/theme@0.4.3-next.0 + - @backstage/config@1.1.1-next.0 + ## 0.1.6-next.1 ### Patch Changes diff --git a/plugins/nomad/package.json b/plugins/nomad/package.json index 5a3964cdc1..803051303b 100644 --- a/plugins/nomad/package.json +++ b/plugins/nomad/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-nomad", - "version": "0.1.6-next.1", + "version": "0.1.6-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/octopus-deploy/CHANGELOG.md b/plugins/octopus-deploy/CHANGELOG.md index b9d7dc084f..9ac914a653 100644 --- a/plugins/octopus-deploy/CHANGELOG.md +++ b/plugins/octopus-deploy/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-octopus-deploy +## 0.2.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/theme@0.4.3-next.0 + ## 0.2.7-next.1 ### Patch Changes diff --git a/plugins/octopus-deploy/package.json b/plugins/octopus-deploy/package.json index 5e0bf27520..08f086f46f 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.7-next.1", + "version": "0.2.7-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/opencost/CHANGELOG.md b/plugins/opencost/CHANGELOG.md index 60edb74ed8..24625e7f2d 100644 --- a/plugins/opencost/CHANGELOG.md +++ b/plugins/opencost/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-opencost +## 0.2.1-next.2 + +### Patch Changes + +- 777b9a16a4: Fix for broken image reference. +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/theme@0.4.3-next.0 + ## 0.2.1-next.1 ### Patch Changes diff --git a/plugins/opencost/README.md b/plugins/opencost/README.md index 39c5e7ee2e..05c63206a2 100644 --- a/plugins/opencost/README.md +++ b/plugins/opencost/README.md @@ -28,7 +28,7 @@ and ``` -3. Add link to OpenCost to your sidebar +3. Import the `MoneyIcon` and add link to OpenCost to your sidebar ```typescript // packages/app/src/components/Root/Root.tsx diff --git a/plugins/opencost/package.json b/plugins/opencost/package.json index d733276152..0728dcea04 100644 --- a/plugins/opencost/package.json +++ b/plugins/opencost/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-opencost", - "version": "0.2.1-next.1", + "version": "0.2.1-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/opencost/src/components/OpenCostPage/OpenCostPage.tsx b/plugins/opencost/src/components/OpenCostPage/OpenCostPage.tsx index bd60fa0c35..4062eca155 100644 --- a/plugins/opencost/src/components/OpenCostPage/OpenCostPage.tsx +++ b/plugins/opencost/src/components/OpenCostPage/OpenCostPage.tsx @@ -17,6 +17,7 @@ import React from 'react'; import { Grid } from '@material-ui/core'; import { Header, Page, Content } from '@backstage/core-components'; import { OpenCostReport } from '../OpenCostReport'; +import logo from '../../images/pig.png'; export const OpenCostPage = () => ( @@ -25,12 +26,7 @@ export const OpenCostPage = () => ( subtitle="Open source Kubernetes cloud cost monitoring" > - OpenCost + OpenCost diff --git a/plugins/org-react/CHANGELOG.md b/plugins/org-react/CHANGELOG.md index 2d5f4fbd7e..8f1a3bcaf0 100644 --- a/plugins/org-react/CHANGELOG.md +++ b/plugins/org-react/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-org-react +## 0.1.14-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/theme@0.4.3-next.0 + - @backstage/catalog-client@1.4.5-next.0 + ## 0.1.14-next.1 ### Patch Changes diff --git a/plugins/org-react/package.json b/plugins/org-react/package.json index 28876a6700..a07ad079be 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.14-next.1", + "version": "0.1.14-next.2", "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 6ede70db1b..ff34eae200 100644 --- a/plugins/org/CHANGELOG.md +++ b/plugins/org/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-org +## 0.6.15-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/theme@0.4.3-next.0 + ## 0.6.15-next.1 ### Patch Changes diff --git a/plugins/org/package.json b/plugins/org/package.json index 4f01b5fa09..a3e31e1ebd 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.15-next.1", + "version": "0.6.15-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/pagerduty/CHANGELOG.md b/plugins/pagerduty/CHANGELOG.md index d37d6b4033..92721d7cc8 100644 --- a/plugins/pagerduty/CHANGELOG.md +++ b/plugins/pagerduty/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-pagerduty +## 0.6.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/theme@0.4.3-next.0 + - @backstage/plugin-home-react@0.1.4-next.2 + ## 0.6.6-next.1 ### Patch Changes diff --git a/plugins/pagerduty/package.json b/plugins/pagerduty/package.json index 4ade1d9224..e4ed8f1e7d 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.6-next.1", + "version": "0.6.6-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/periskop-backend/CHANGELOG.md b/plugins/periskop-backend/CHANGELOG.md index c4b41389b6..d0653d6836 100644 --- a/plugins/periskop-backend/CHANGELOG.md +++ b/plugins/periskop-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-periskop-backend +## 0.2.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 + ## 0.2.2-next.1 ### Patch Changes diff --git a/plugins/periskop-backend/package.json b/plugins/periskop-backend/package.json index ff276b7a55..91a7ee4ebd 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.2-next.1", + "version": "0.2.3-next.2", "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 7030b94dfc..32cccbb745 100644 --- a/plugins/periskop/CHANGELOG.md +++ b/plugins/periskop/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-periskop +## 0.1.23-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/theme@0.4.3-next.0 + ## 0.1.23-next.1 ### Patch Changes diff --git a/plugins/periskop/package.json b/plugins/periskop/package.json index 9d47082842..1344b2ec37 100644 --- a/plugins/periskop/package.json +++ b/plugins/periskop/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-periskop", - "version": "0.1.23-next.1", + "version": "0.1.23-next.2", "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 127e39e251..ad8d765829 100644 --- a/plugins/permission-backend-module-policy-allow-all/CHANGELOG.md +++ b/plugins/permission-backend-module-policy-allow-all/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-permission-backend-module-allow-all-policy +## 0.1.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-auth-node@0.4.0-next.2 + - @backstage/plugin-permission-node@0.7.17-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/plugin-permission-common@0.7.9-next.0 + ## 0.1.2-next.1 ### 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 2b309e852c..0dc2e20689 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.2-next.1", + "version": "0.1.3-next.2", "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 d3419ba508..679e235598 100644 --- a/plugins/permission-backend/CHANGELOG.md +++ b/plugins/permission-backend/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-permission-backend +## 0.5.29-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-auth-node@0.4.0-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/plugin-permission-node@0.7.17-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-permission-common@0.7.9-next.0 + ## 0.5.28-next.1 ### Patch Changes diff --git a/plugins/permission-backend/package.json b/plugins/permission-backend/package.json index 2709204635..a3bd75e6db 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.28-next.1", + "version": "0.5.29-next.2", "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 f39e4455ec..56af3e310e 100644 --- a/plugins/permission-common/CHANGELOG.md +++ b/plugins/permission-common/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-permission-common +## 0.7.9-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.3-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + ## 0.7.8 ### Patch Changes diff --git a/plugins/permission-common/package.json b/plugins/permission-common/package.json index 050b696aef..c08d962e4a 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.8", + "version": "0.7.9-next.0", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/plugins/permission-node/CHANGELOG.md b/plugins/permission-node/CHANGELOG.md index e387547156..05af5694ca 100644 --- a/plugins/permission-node/CHANGELOG.md +++ b/plugins/permission-node/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-permission-node +## 0.7.17-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-auth-node@0.4.0-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-permission-common@0.7.9-next.0 + ## 0.7.16-next.1 ### Patch Changes diff --git a/plugins/permission-node/package.json b/plugins/permission-node/package.json index 9f57f44886..6aee34ad50 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.16-next.1", + "version": "0.7.17-next.2", "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 0df727d454..6db19085fb 100644 --- a/plugins/permission-react/CHANGELOG.md +++ b/plugins/permission-react/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-permission-react +## 0.4.16-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-permission-common@0.7.9-next.0 + ## 0.4.16-next.0 ### Patch Changes diff --git a/plugins/permission-react/package.json b/plugins/permission-react/package.json index 7e79128739..31a8de1c4e 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.16-next.0", + "version": "0.4.16-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/playlist-backend/CHANGELOG.md b/plugins/playlist-backend/CHANGELOG.md index c7f001ae4b..503f4a1796 100644 --- a/plugins/playlist-backend/CHANGELOG.md +++ b/plugins/playlist-backend/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-playlist-backend +## 0.3.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-auth-node@0.4.0-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/errors@1.2.3-next.0 + - @backstage/plugin-permission-node@0.7.17-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/catalog-client@1.4.5-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-permission-common@0.7.9-next.0 + - @backstage/plugin-playlist-common@0.1.11-next.0 + ## 0.3.9-next.1 ### Patch Changes diff --git a/plugins/playlist-backend/package.json b/plugins/playlist-backend/package.json index 319206e6c6..193ecd3fe0 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.9-next.1", + "version": "0.3.10-next.2", "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 b6d6eb8990..cc3cd85cb8 100644 --- a/plugins/playlist-common/CHANGELOG.md +++ b/plugins/playlist-common/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-playlist-common +## 0.1.11-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.7.9-next.0 + ## 0.1.10 ### Patch Changes diff --git a/plugins/playlist-common/package.json b/plugins/playlist-common/package.json index f31094c5a6..08b0b8bb32 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.10", + "version": "0.1.11-next.0", "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 301f289b8c..9682635f51 100644 --- a/plugins/playlist/CHANGELOG.md +++ b/plugins/playlist/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-playlist +## 0.1.17-next.2 + +### Patch Changes + +- 65498193e8: Updated Playlist read me with additional screenshots +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/plugin-search-react@1.7.1-next.2 + - @backstage/theme@0.4.3-next.0 + - @backstage/plugin-catalog-common@1.0.17-next.0 + - @backstage/plugin-permission-common@0.7.9-next.0 + - @backstage/plugin-permission-react@0.4.16-next.1 + - @backstage/plugin-playlist-common@0.1.11-next.0 + ## 0.1.17-next.1 ### Patch Changes diff --git a/plugins/playlist/README.md b/plugins/playlist/README.md index 25caa02742..1e81d07e56 100644 --- a/plugins/playlist/README.md +++ b/plugins/playlist/README.md @@ -154,6 +154,10 @@ playlist: ![Create New Playlist example](./docs/playlist-create-new.png) +### Duplicate Playlist Error + +![Duplicate Playlist Error example](./docs/playlist-duplicate-error.png) + ### Edit Existing Playlist ![Edit Existing Playlist example](./docs/playlist-edit-existing.png) @@ -166,6 +170,10 @@ playlist: ![Add to Playlist from Entity example](./docs/playlist-add-from-entity.png) +### Delete Playlist + +![Delete Playlist example](./docs/playlist-delete.png) + ## Links - [playlist-backend](../playlist-backend) provides the backend API for this frontend. diff --git a/plugins/playlist/docs/playlist-delete.png b/plugins/playlist/docs/playlist-delete.png new file mode 100644 index 0000000000..7e9ec7d996 Binary files /dev/null and b/plugins/playlist/docs/playlist-delete.png differ diff --git a/plugins/playlist/docs/playlist-duplicate-error.png b/plugins/playlist/docs/playlist-duplicate-error.png new file mode 100644 index 0000000000..8d2bec2588 Binary files /dev/null and b/plugins/playlist/docs/playlist-duplicate-error.png differ diff --git a/plugins/playlist/package.json b/plugins/playlist/package.json index 10a3c651ed..f29ab8d9aa 100644 --- a/plugins/playlist/package.json +++ b/plugins/playlist/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-playlist", - "version": "0.1.17-next.1", + "version": "0.1.17-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/proxy-backend/CHANGELOG.md b/plugins/proxy-backend/CHANGELOG.md index 22dae797a3..a4059a1828 100644 --- a/plugins/proxy-backend/CHANGELOG.md +++ b/plugins/proxy-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-proxy-backend +## 0.4.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 + ## 0.4.2-next.1 ### Patch Changes diff --git a/plugins/proxy-backend/package.json b/plugins/proxy-backend/package.json index 9b21073dc7..28f8d3ea5f 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.2-next.1", + "version": "0.4.3-next.2", "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 5d9dc0be04..98680eed03 100644 --- a/plugins/puppetdb/CHANGELOG.md +++ b/plugins/puppetdb/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-puppetdb +## 0.1.8-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/theme@0.4.3-next.0 + ## 0.1.8-next.1 ### Patch Changes diff --git a/plugins/puppetdb/package.json b/plugins/puppetdb/package.json index ad23b77a8f..ade623c022 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.8-next.1", + "version": "0.1.8-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/rollbar-backend/CHANGELOG.md b/plugins/rollbar-backend/CHANGELOG.md index 6d4b6b309e..b6a0bb6a79 100644 --- a/plugins/rollbar-backend/CHANGELOG.md +++ b/plugins/rollbar-backend/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-rollbar-backend +## 0.1.51-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/config@1.1.1-next.0 + ## 0.1.50-next.1 ### Patch Changes diff --git a/plugins/rollbar-backend/package.json b/plugins/rollbar-backend/package.json index 019f851d04..b58241b5e2 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.50-next.1", + "version": "0.1.51-next.2", "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 69c38eead1..cc3f2e564d 100644 --- a/plugins/rollbar/CHANGELOG.md +++ b/plugins/rollbar/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-rollbar +## 0.4.25-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/theme@0.4.3-next.0 + ## 0.4.25-next.1 ### Patch Changes diff --git a/plugins/rollbar/package.json b/plugins/rollbar/package.json index 5a5159ceb6..6f31b48dc8 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.25-next.1", + "version": "0.4.25-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-backend-module-confluence-to-markdown/CHANGELOG.md b/plugins/scaffolder-backend-module-confluence-to-markdown/CHANGELOG.md index 366698d2e6..7344084491 100644 --- a/plugins/scaffolder-backend-module-confluence-to-markdown/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-confluence-to-markdown/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-scaffolder-backend-module-confluence-to-markdown +## 0.2.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/integration@1.7.1-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/plugin-scaffolder-node@0.2.6-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + ## 0.2.6-next.1 ### 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 bb996d7da8..dcdfc51f93 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.6-next.1", + "version": "0.2.7-next.2", "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 8a4dc42f44..4373cf9a1a 100644 --- a/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-scaffolder-backend-module-cookiecutter +## 0.2.30-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/integration@1.7.1-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/plugin-scaffolder-node@0.2.6-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + ## 0.2.29-next.1 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-cookiecutter/package.json b/plugins/scaffolder-backend-module-cookiecutter/package.json index 908f907f13..68bbd40294 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.29-next.1", + "version": "0.2.30-next.2", "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 3cd1812ca7..950fd2edb5 100644 --- a/plugins/scaffolder-backend-module-gitlab/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-gitlab/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-scaffolder-backend-module-gitlab +## 0.2.9-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.7.1-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/plugin-scaffolder-node@0.2.6-next.2 + - @backstage/config@1.1.1-next.0 + ## 0.2.8-next.1 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-gitlab/package.json b/plugins/scaffolder-backend-module-gitlab/package.json index 89d755f1dd..aa57094af4 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.8-next.1", + "version": "0.2.9-next.2", "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 c51d36eb64..e8ee3e7d35 100644 --- a/plugins/scaffolder-backend-module-rails/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-rails/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-scaffolder-backend-module-rails +## 0.4.23-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/integration@1.7.1-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/plugin-scaffolder-node@0.2.6-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + ## 0.4.22-next.1 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-rails/package.json b/plugins/scaffolder-backend-module-rails/package.json index c58fb6a035..fad98d5216 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.22-next.1", + "version": "0.4.23-next.2", "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 e07feaa885..55de9576e5 100644 --- a/plugins/scaffolder-backend-module-sentry/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-sentry/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-scaffolder-backend-module-sentry +## 0.1.14-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.3-next.0 + - @backstage/plugin-scaffolder-node@0.2.6-next.2 + - @backstage/config@1.1.1-next.0 + ## 0.1.13-next.1 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-sentry/package.json b/plugins/scaffolder-backend-module-sentry/package.json index 366f7a9126..53613c14b6 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.13-next.1", + "version": "0.1.14-next.2", "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 a24ec57bb3..41522939e6 100644 --- a/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-scaffolder-backend-module-yeoman +## 0.2.27-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.2.6-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + ## 0.2.26-next.1 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-yeoman/package.json b/plugins/scaffolder-backend-module-yeoman/package.json index cd4350f681..8f17f30e7c 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.26-next.1", + "version": "0.2.27-next.2", "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 50fda07ce7..f468e42f72 100644 --- a/plugins/scaffolder-backend/CHANGELOG.md +++ b/plugins/scaffolder-backend/CHANGELOG.md @@ -1,5 +1,41 @@ # @backstage/plugin-scaffolder-backend +## 1.18.0-next.2 + +### Minor Changes + +- dea0aafda7: Updated `publish:gitlab` action properties to support additional Gitlab project settings: + + - general project settings provided by gitlab project create API (new `settings` property) + - branch level settings to create additional branches and make them protected (new `branches` property) + - project level environment variables settings (new `projectVariables` property) + + Marked existed properties `repoVisibility` and `topics` as deprecated, as they are covered by `settings` property. + +### Patch Changes + +- 7dd82cc07e: Add examples for `github:issues:label` scaffolder action & improve related tests +- 733ddf7130: Add examples for `publish:Azure` scaffolder action. +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-auth-node@0.4.0-next.2 + - @backstage/plugin-catalog-backend@1.14.0-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/integration@1.7.1-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-tasks@0.5.11-next.2 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.3-next.2 + - @backstage/plugin-catalog-node@1.4.7-next.2 + - @backstage/plugin-permission-node@0.7.17-next.2 + - @backstage/plugin-scaffolder-node@0.2.6-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/catalog-client@1.4.5-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.0.17-next.0 + - @backstage/plugin-permission-common@0.7.9-next.0 + - @backstage/plugin-scaffolder-common@1.4.2-next.0 + ## 1.18.0-next.1 ### Minor Changes diff --git a/plugins/scaffolder-backend/api-report.md b/plugins/scaffolder-backend/api-report.md index 17e13131cf..ba7576b1bb 100644 --- a/plugins/scaffolder-backend/api-report.md +++ b/plugins/scaffolder-backend/api-report.md @@ -679,6 +679,36 @@ export function createPublishGitlabAction(options: { gitAuthorEmail?: string | undefined; setUserAsOwner?: boolean | undefined; topics?: string[] | undefined; + settings?: + | { + path?: string | undefined; + auto_devops_enabled?: boolean | undefined; + ci_config_path?: string | undefined; + description?: string | undefined; + topics?: string[] | undefined; + visibility?: 'internal' | 'private' | 'public' | undefined; + } + | undefined; + branches?: + | { + name: string; + protect?: boolean | undefined; + create?: boolean | undefined; + ref?: string | undefined; + }[] + | undefined; + projectVariables?: + | { + key: string; + value: string; + description?: string | undefined; + variable_type?: string | undefined; + protected?: boolean | undefined; + masked?: boolean | undefined; + raw?: boolean | undefined; + environment_scope?: string | undefined; + }[] + | undefined; }, JsonObject >; diff --git a/plugins/scaffolder-backend/package.json b/plugins/scaffolder-backend/package.json index cab9abae96..1c87b1f289 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.18.0-next.1", + "version": "1.18.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -107,13 +107,11 @@ "@types/fs-extra": "^9.0.1", "@types/git-url-parse": "^9.0.0", "@types/libsodium-wrappers": "^0.7.10", - "@types/mock-fs": "^4.13.0", "@types/nunjucks": "^3.1.4", "@types/supertest": "^2.0.8", "@types/zen-observable": "^0.8.0", "esbuild": "^0.19.0", "jest-when": "^3.1.0", - "mock-fs": "^5.2.0", "msw": "^1.0.0", "supertest": "^6.1.3", "wait-for-expect": "^3.0.2", diff --git a/plugins/scaffolder-backend/src/lib/files/deserializeDirectoryContents.test.ts b/plugins/scaffolder-backend/src/lib/files/deserializeDirectoryContents.test.ts index c272e04205..e374e0d713 100644 --- a/plugins/scaffolder-backend/src/lib/files/deserializeDirectoryContents.test.ts +++ b/plugins/scaffolder-backend/src/lib/files/deserializeDirectoryContents.test.ts @@ -14,29 +14,25 @@ * limitations under the License. */ -import mockFs from 'mock-fs'; +import { createMockDirectory } from '@backstage/backend-test-utils'; import { deserializeDirectoryContents } from './deserializeDirectoryContents'; import { serializeDirectoryContents } from './serializeDirectoryContents'; describe('deserializeDirectoryContents', () => { - beforeEach(() => { - mockFs({ - root: {}, - }); - }); + const mockDir = createMockDirectory(); - afterEach(() => { - mockFs.restore(); + beforeEach(() => { + mockDir.clear(); }); it('deserializes contents into a directory', async () => { - await deserializeDirectoryContents('root', [ + await deserializeDirectoryContents(mockDir.path, [ { path: 'a.txt', content: Buffer.from('a', 'utf8'), }, ]); - await expect(serializeDirectoryContents('root')).resolves.toEqual([ + await expect(serializeDirectoryContents(mockDir.path)).resolves.toEqual([ { path: 'a.txt', content: Buffer.from('a', 'utf8'), @@ -47,7 +43,7 @@ describe('deserializeDirectoryContents', () => { }); it('deserializes contents into a deep directory structure', async () => { - await deserializeDirectoryContents('root', [ + await deserializeDirectoryContents(mockDir.path, [ { path: 'a.txt', content: Buffer.from('a', 'utf8'), @@ -61,7 +57,7 @@ describe('deserializeDirectoryContents', () => { content: Buffer.from('c', 'utf8'), }, ]); - await expect(serializeDirectoryContents('root')).resolves.toEqual([ + await expect(serializeDirectoryContents(mockDir.path)).resolves.toEqual([ { path: 'a.txt', content: Buffer.from('a', 'utf8'), diff --git a/plugins/scaffolder-backend/src/lib/files/serializeDirectoryContents.test.ts b/plugins/scaffolder-backend/src/lib/files/serializeDirectoryContents.test.ts index a22ea85301..afc1b755ff 100644 --- a/plugins/scaffolder-backend/src/lib/files/serializeDirectoryContents.test.ts +++ b/plugins/scaffolder-backend/src/lib/files/serializeDirectoryContents.test.ts @@ -14,13 +14,11 @@ * limitations under the License. */ +import { createMockDirectory } from '@backstage/backend-test-utils'; import { serializeDirectoryContents } from './serializeDirectoryContents'; -import mockFs from 'mock-fs'; describe('serializeDirectoryContents', () => { - afterEach(() => { - mockFs.restore(); - }); + const mockDir = createMockDirectory(); it('should list files in this directory', async () => { await expect(serializeDirectoryContents(__dirname)).resolves.toEqual( @@ -54,25 +52,23 @@ describe('serializeDirectoryContents', () => { }); it('should list files in a mock directory', async () => { - mockFs({ - root: { - 'a.txt': 'a', - b: { - 'b1.txt': 'b1', - 'b2.txt': 'b2', - }, - c: { - c1: { - 'c11.txt': 'c11', - c11: { - 'c111.txt': 'c111', - }, + mockDir.setContent({ + 'a.txt': 'a', + b: { + 'b1.txt': 'b1', + 'b2.txt': 'b2', + }, + c: { + c1: { + 'c11.txt': 'c11', + c11: { + 'c111.txt': 'c111', }, }, }, }); - await expect(serializeDirectoryContents('root')).resolves.toEqual([ + await expect(serializeDirectoryContents(mockDir.path)).resolves.toEqual([ { path: 'a.txt', executable: false, @@ -107,16 +103,12 @@ describe('serializeDirectoryContents', () => { }); it('should ignore symlinked files', async () => { - mockFs({ - root: { - 'a.txt': 'some text', - sym: mockFs.symlink({ - path: './a.txt', - }), - }, + mockDir.setContent({ + 'a.txt': 'some text', + sym: ctx => ctx.symlink('./a.txt'), }); - await expect(serializeDirectoryContents('root')).resolves.toEqual([ + await expect(serializeDirectoryContents(mockDir.path)).resolves.toEqual([ { path: 'a.txt', executable: false, @@ -127,18 +119,14 @@ describe('serializeDirectoryContents', () => { }); it('should pick up broken symlinks', async () => { - mockFs({ - root: { - 'b.txt': mockFs.symlink({ - path: './a.txt', - }), - }, + mockDir.setContent({ + 'b.txt': ctx => ctx.symlink('./a.txt'), }); - await expect(serializeDirectoryContents('root')).resolves.toEqual([ + await expect(serializeDirectoryContents(mockDir.path)).resolves.toEqual([ { path: 'b.txt', - executable: false, + executable: true, symlink: true, content: Buffer.from('./a.txt', 'utf8'), }, @@ -146,19 +134,15 @@ describe('serializeDirectoryContents', () => { }); it('should ignore symlinked folder files', async () => { - mockFs({ - root: { - 'a.txt': 'some text', - linkme: { - 'b.txt': 'lols', - }, - sym: mockFs.symlink({ - path: './linkme', - }), + mockDir.setContent({ + 'a.txt': 'some text', + linkme: { + 'b.txt': 'lols', }, + sym: ctx => ctx.symlink('./linkme'), }); - await expect(serializeDirectoryContents('root')).resolves.toEqual([ + await expect(serializeDirectoryContents(mockDir.path)).resolves.toEqual([ { path: 'a.txt', executable: false, @@ -175,16 +159,14 @@ describe('serializeDirectoryContents', () => { }); it('should ignore gitignored files', async () => { - mockFs({ - root: { - '.gitignore': '*.txt', - 'a.txt': 'a', - 'a.log': 'a', - }, + mockDir.setContent({ + '.gitignore': '*.txt', + 'a.txt': 'a', + 'a.log': 'a', }); await expect( - serializeDirectoryContents('root', { + serializeDirectoryContents(mockDir.path, { gitignore: true, }), ).resolves.toEqual([ @@ -204,26 +186,24 @@ describe('serializeDirectoryContents', () => { }); it('should use custom glob patterns', async () => { - mockFs({ - root: { - '.a': 'a', - 'a.log': 'a', - 'a.txt': 'a', - b: { - '.b': 'b', - 'b.log': 'b', - 'b.txt': 'b', - }, - c: { - '.c': 'c', - 'c.log': 'c', - 'c.txt': 'c', - }, + mockDir.setContent({ + '.a': 'a', + 'a.log': 'a', + 'a.txt': 'a', + b: { + '.b': 'b', + 'b.log': 'b', + 'b.txt': 'b', + }, + c: { + '.c': 'c', + 'c.log': 'c', + 'c.txt': 'c', }, }); await expect( - serializeDirectoryContents('root', { + serializeDirectoryContents(mockDir.path, { gitignore: true, globPatterns: ['**/*.txt', '*/.?', '*/*.log', '!c/**/.*', '!b/*.log'], }).then(files => files.sort((a, b) => a.path.localeCompare(b.path))), diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/debug/log.examples.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/debug/log.examples.test.ts index a7f5a1804a..901f3e5011 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/debug/log.examples.test.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/debug/log.examples.test.ts @@ -15,44 +15,41 @@ */ import { getVoidLogger } from '@backstage/backend-common'; -import mockFs from 'mock-fs'; -import os from 'os'; import { Writable } from 'stream'; import { createDebugLogAction } from './log'; import { join } from 'path'; import yaml from 'yaml'; import { examples } from './log.examples'; +import { createMockDirectory } from '@backstage/backend-test-utils'; describe('debug:log examples', () => { const logStream = { write: jest.fn(), } as jest.Mocked> as jest.Mocked; - const mockTmpDir = os.tmpdir(); + const mockDir = createMockDirectory(); + const workspacePath = mockDir.resolve('workspace'); + const mockContext = { input: {}, baseUrl: 'somebase', - workspacePath: mockTmpDir, + workspacePath, logger: getVoidLogger(), logStream, output: jest.fn(), - createTemporaryDirectory: jest.fn().mockResolvedValue(mockTmpDir), + createTemporaryDirectory: jest.fn(), }; const action = createDebugLogAction(); beforeEach(() => { - mockFs({ - [`${mockContext.workspacePath}/README.md`]: '', - [`${mockContext.workspacePath}/a-directory/index.md`]: '', + mockDir.setContent({ + [`${workspacePath}/README.md`]: '', + [`${workspacePath}/a-directory/index.md`]: '', }); jest.resetAllMocks(); }); - afterEach(() => { - mockFs.restore(); - }); - it('should log message', async () => { const context = { ...mockContext, diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/debug/log.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/debug/log.test.ts index 6b7ad8816f..d6fc5174b3 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/debug/log.test.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/debug/log.test.ts @@ -15,43 +15,40 @@ */ import { getVoidLogger } from '@backstage/backend-common'; -import mockFs from 'mock-fs'; -import os from 'os'; import { Writable } from 'stream'; import { createDebugLogAction } from './log'; import { join } from 'path'; import yaml from 'yaml'; +import { createMockDirectory } from '@backstage/backend-test-utils'; describe('debug:log', () => { const logStream = { write: jest.fn(), } as jest.Mocked> as jest.Mocked; - const mockTmpDir = os.tmpdir(); + const mockDir = createMockDirectory(); + const workspacePath = mockDir.resolve('workspace'); + const mockContext = { input: {}, baseUrl: 'somebase', - workspacePath: mockTmpDir, + workspacePath, logger: getVoidLogger(), logStream, output: jest.fn(), - createTemporaryDirectory: jest.fn().mockResolvedValue(mockTmpDir), + createTemporaryDirectory: jest.fn(), }; const action = createDebugLogAction(); beforeEach(() => { - mockFs({ + mockDir.setContent({ [`${mockContext.workspacePath}/README.md`]: '', [`${mockContext.workspacePath}/a-directory/index.md`]: '', }); jest.resetAllMocks(); }); - afterEach(() => { - mockFs.restore(); - }); - it('should do nothing', async () => { await action.handler(mockContext); diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/debug/wait.examples.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/debug/wait.examples.test.ts index 595ae7c3b6..5242943aa9 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/debug/wait.examples.test.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/debug/wait.examples.test.ts @@ -15,12 +15,11 @@ */ import { getVoidLogger } from '@backstage/backend-common'; -import mockFs from 'mock-fs'; import { createWaitAction } from './wait'; import { Writable } from 'stream'; -import os from 'os'; import { examples } from './wait.examples'; import yaml from 'yaml'; +import { createMockDirectory } from '@backstage/backend-test-utils'; describe('debug:wait examples', () => { const action = createWaitAction(); @@ -29,25 +28,23 @@ describe('debug:wait examples', () => { write: jest.fn(), } as jest.Mocked> as jest.Mocked; - const mockTmpDir = os.tmpdir(); + const mockDir = createMockDirectory(); + const workspacePath = mockDir.resolve('workspace'); + const mockContext = { input: {}, baseUrl: 'somebase', - workspacePath: mockTmpDir, + workspacePath, logger: getVoidLogger(), logStream, output: jest.fn(), - createTemporaryDirectory: jest.fn().mockResolvedValue(mockTmpDir), + createTemporaryDirectory: jest.fn(), }; beforeEach(() => { jest.resetAllMocks(); }); - afterEach(() => { - mockFs.restore(); - }); - it('should wait for specified period of seconds', async () => { const context = { ...mockContext, @@ -56,6 +53,7 @@ describe('debug:wait examples', () => { const start = new Date().getTime(); await action.handler(context); const end = new Date().getTime(); - expect(end - start).toBeGreaterThanOrEqual(50); + expect(end - start).toBeGreaterThanOrEqual(45); + expect(end - start).toBeLessThanOrEqual(55); }); }); diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/debug/wait.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/debug/wait.test.ts index 0d4cdaba4b..6f80604a6d 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/debug/wait.test.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/debug/wait.test.ts @@ -15,10 +15,9 @@ */ import { getVoidLogger } from '@backstage/backend-common'; -import mockFs from 'mock-fs'; import { createWaitAction } from './wait'; import { Writable } from 'stream'; -import os from 'os'; +import { createMockDirectory } from '@backstage/backend-test-utils'; describe('debug:wait', () => { const action = createWaitAction(); @@ -27,25 +26,23 @@ describe('debug:wait', () => { write: jest.fn(), } as jest.Mocked> as jest.Mocked; - const mockTmpDir = os.tmpdir(); + const mockDir = createMockDirectory(); + const workspacePath = mockDir.resolve('workspace'); + const mockContext = { input: {}, baseUrl: 'somebase', - workspacePath: mockTmpDir, + workspacePath, logger: getVoidLogger(), logStream, output: jest.fn(), - createTemporaryDirectory: jest.fn().mockResolvedValue(mockTmpDir), + createTemporaryDirectory: jest.fn(), }; beforeEach(() => { jest.resetAllMocks(); }); - afterEach(() => { - mockFs.restore(); - }); - it('should wait for specified period of time', async () => { const context = { ...mockContext, diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/template.examples.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/template.examples.test.ts index 43bed5a048..a1c8381178 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/template.examples.test.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/template.examples.test.ts @@ -14,10 +14,8 @@ * limitations under the License. */ -import os from 'os'; import { join as joinPath, sep as pathSep } from 'path'; import fs from 'fs-extra'; -import mockFs from 'mock-fs'; import { getVoidLogger, resolvePackagePath, @@ -33,6 +31,7 @@ import { } from '@backstage/plugin-scaffolder-node'; import { examples } from './template.examples'; import yaml from 'yaml'; +import { createMockDirectory } from '@backstage/backend-test-utils'; jest.mock('@backstage/plugin-scaffolder-node', () => ({ ...jest.requireActual('@backstage/plugin-scaffolder-node'), @@ -45,16 +44,6 @@ type FetchTemplateInput = ReturnType< ? U : never; -const realFiles = Object.fromEntries( - [ - resolvePackagePath( - '@backstage/plugin-scaffolder-backend', - 'assets', - 'nunjucks.js.txt', - ), - ].map(k => [k, mockFs.load(k)]), -); - const aBinaryFile = fs.readFileSync( resolvePackagePath( '@backstage/plugin-scaffolder-backend', @@ -69,14 +58,8 @@ const mockFetchContents = fetchContents as jest.MockedFunction< describe('fetch:template examples', () => { let action: TemplateAction; - const workspacePath = os.tmpdir(); - const createTemporaryDirectory: jest.MockedFunction< - ActionContext['createTemporaryDirectory'] - > = jest.fn(() => - Promise.resolve( - joinPath(workspacePath, `${createTemporaryDirectory.mock.calls.length}`), - ), - ); + const mockDir = createMockDirectory(); + const workspacePath = mockDir.resolve('workspace'); const logger = getVoidLogger(); @@ -90,24 +73,20 @@ describe('fetch:template examples', () => { logStream: new PassThrough(), logger, workspacePath, - createTemporaryDirectory, + + async createTemporaryDirectory() { + return fs.mkdtemp(mockDir.resolve('tmp-')); + }, }); beforeEach(() => { - mockFs({ - ...realFiles, - }); - + mockDir.clear(); action = createFetchTemplateAction({ reader: Symbol('UrlReader') as unknown as UrlReader, integrations: Symbol('Integrations') as unknown as ScmIntegrations, }); }); - afterEach(() => { - mockFs.restore(); - }); - describe('handler', () => { describe('with valid input', () => { let context: ActionContext; @@ -116,13 +95,13 @@ describe('fetch:template examples', () => { context = mockContext(yaml.parse(examples[0].example).steps[0].input); mockFetchContents.mockImplementation(({ outputPath }) => { - mockFs({ - ...realFiles, + mockDir.setContent({ [outputPath]: { - 'an-executable.sh': mockFs.file({ - content: '#!/usr/bin/env bash', - mode: parseInt('100755', 8), - }), + 'an-executable.sh': ctx => + fs.writeFileSync(ctx.path, '#!/usr/bin/env bash', { + encoding: 'utf8', + mode: parseInt('100755', 8), + }), 'empty-dir-${{ values.count }}': {}, 'static.txt': 'static content', '${{ values.name }}.txt': 'static content', @@ -132,12 +111,8 @@ describe('fetch:template examples', () => { }, '.${{ values.name }}': '${{ values.itemList | dump }}', 'a-binary-file.png': aBinaryFile, - symlink: mockFs.symlink({ - path: 'a-binary-file.png', - }), - brokenSymlink: mockFs.symlink({ - path: './not-a-real-file.txt', - }), + symlink: ctx => ctx.symlink('a-binary-file.png'), + brokenSymlink: ctx => ctx.symlink('./not-a-real-file.txt'), }, }); @@ -212,7 +187,11 @@ describe('fetch:template examples', () => { await expect( fs.realpath(`${workspacePath}/target/symlink`), - ).resolves.toBe(joinPath(workspacePath, 'target', 'a-binary-file.png')); + ).resolves.toBe( + fs.realpathSync( + joinPath(workspacePath, 'target', 'a-binary-file.png'), + ), + ); }); it('copies broken symlinks as-is without processing them', async () => { diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/template.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/template.test.ts index 95f8c7b954..d396a00c26 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/template.test.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/template.test.ts @@ -19,10 +19,8 @@ jest.mock('@backstage/plugin-scaffolder-node', () => { return { ...actual, fetchContents: jest.fn() }; }); -import os from 'os'; import { join as joinPath, sep as pathSep } from 'path'; import fs from 'fs-extra'; -import mockFs from 'mock-fs'; import { getVoidLogger, resolvePackagePath, @@ -36,6 +34,7 @@ import { ActionContext, TemplateAction, } from '@backstage/plugin-scaffolder-node'; +import { createMockDirectory } from '@backstage/backend-test-utils'; type FetchTemplateInput = ReturnType< typeof createFetchTemplateAction @@ -43,16 +42,6 @@ type FetchTemplateInput = ReturnType< ? U : never; -const realFiles = Object.fromEntries( - [ - resolvePackagePath( - '@backstage/plugin-scaffolder-backend', - 'assets', - 'nunjucks.js.txt', - ), - ].map(k => [k, mockFs.load(k)]), -); - const aBinaryFile = fs.readFileSync( resolvePackagePath( '@backstage/plugin-scaffolder-backend', @@ -67,14 +56,8 @@ const mockFetchContents = fetchContents as jest.MockedFunction< describe('fetch:template', () => { let action: TemplateAction; - const workspacePath = os.tmpdir(); - const createTemporaryDirectory: jest.MockedFunction< - ActionContext['createTemporaryDirectory'] - > = jest.fn(() => - Promise.resolve( - joinPath(workspacePath, `${createTemporaryDirectory.mock.calls.length}`), - ), - ); + const mockDir = createMockDirectory(); + const workspacePath = mockDir.resolve('workspace'); const logger = getVoidLogger(); @@ -95,24 +78,21 @@ describe('fetch:template', () => { logStream: new PassThrough(), logger, workspacePath, - createTemporaryDirectory, + async createTemporaryDirectory() { + return fs.mkdtemp(mockDir.resolve('tmp-')); + }, }); beforeEach(() => { - mockFs({ - ...realFiles, + mockDir.setContent({ + workspace: {}, }); - action = createFetchTemplateAction({ reader: Symbol('UrlReader') as unknown as UrlReader, integrations: Symbol('Integrations') as unknown as ScmIntegrations, }); }); - afterEach(() => { - mockFs.restore(); - }); - it(`returns a TemplateAction with the id 'fetch:template'`, () => { expect(action.id).toEqual('fetch:template'); }); @@ -190,8 +170,7 @@ describe('fetch:template', () => { }); mockFetchContents.mockImplementation(({ outputPath }) => { - mockFs({ - ...realFiles, + mockDir.setContent({ [outputPath]: { '{% if values.showDummyFile %}dummy-file.txt{% else %}{% endif %}': 'dummy file', @@ -282,13 +261,8 @@ describe('fetch:template', () => { }); mockFetchContents.mockImplementation(({ outputPath }) => { - mockFs({ - ...realFiles, + mockDir.setContent({ [outputPath]: { - 'an-executable.sh': mockFs.file({ - content: '#!/usr/bin/env bash', - mode: parseInt('100755', 8), - }), 'empty-dir-${{ values.count }}': {}, 'static.txt': 'static content', '${{ values.name }}.txt': 'static content', @@ -298,12 +272,13 @@ describe('fetch:template', () => { }, '.${{ values.name }}': '${{ values.itemList | dump }}', 'a-binary-file.png': aBinaryFile, - symlink: mockFs.symlink({ - path: 'a-binary-file.png', - }), - brokenSymlink: mockFs.symlink({ - path: './not-a-real-file.txt', - }), + 'an-executable.sh': ctx => + fs.writeFileSync(ctx.path, '#!/usr/bin/env bash', { + encoding: 'utf-8', + mode: parseInt('100755', 8), + }), + symlink: ctx => ctx.symlink('a-binary-file.png'), + brokenSymlink: ctx => ctx.symlink('./not-a-real-file.txt'), }, }); @@ -378,7 +353,11 @@ describe('fetch:template', () => { await expect( fs.realpath(`${workspacePath}/target/symlink`), - ).resolves.toBe(joinPath(workspacePath, 'target', 'a-binary-file.png')); + ).resolves.toBe( + fs.realpathSync( + joinPath(workspacePath, 'target', 'a-binary-file.png'), + ), + ); }); it('copies broken symlinks as-is without processing them', async () => { @@ -408,8 +387,7 @@ describe('fetch:template', () => { }); mockFetchContents.mockImplementation(({ outputPath }) => { - mockFs({ - ...realFiles, + mockDir.setContent({ [outputPath]: { processed: { 'templated-content-${{ values.name }}.txt': '${{ values.count }}', @@ -458,8 +436,7 @@ describe('fetch:template', () => { }); mockFetchContents.mockImplementation(({ outputPath }) => { - mockFs({ - ...realFiles, + mockDir.setContent({ [outputPath]: { processed: { 'templated-content-${{ values.name }}.txt': '${{ values.count }}', @@ -509,8 +486,7 @@ describe('fetch:template', () => { }); mockFetchContents.mockImplementation(({ outputPath }) => { - mockFs({ - ...realFiles, + mockDir.setContent({ [outputPath]: { '{{ cookiecutter.name }}.txt': 'static content', subdir: { @@ -564,8 +540,7 @@ describe('fetch:template', () => { }); mockFetchContents.mockImplementation(({ outputPath }) => { - mockFs({ - ...realFiles, + mockDir.setContent({ [outputPath]: { 'empty-dir-${{ values.count }}': {}, 'static.txt': 'static content', @@ -646,8 +621,7 @@ describe('fetch:template', () => { }); mockFetchContents.mockImplementation(({ outputPath }) => { - mockFs({ - ...realFiles, + mockDir.setContent({ [outputPath]: { '${{ values.name }}.njk': '${{ values.name }}: ${{ values.count }}', '${{ values.name }}.txt.jinja2': @@ -687,8 +661,7 @@ describe('fetch:template', () => { }); mockFetchContents.mockImplementation(({ outputPath }) => { - mockFs({ - ...realFiles, + mockDir.setContent({ [joinPath(workspacePath, 'target')]: { 'static-content.txt': 'static-content', }, @@ -703,10 +676,6 @@ describe('fetch:template', () => { await action.handler(context); }); - afterEach(() => { - mockFs.restore(); - }); - it('overwrites existing file', async () => { await expect( fs.readFile(`${workspacePath}/target/static-content.txt`, 'utf-8'), @@ -728,8 +697,7 @@ describe('fetch:template', () => { }); mockFetchContents.mockImplementation(({ outputPath }) => { - mockFs({ - ...realFiles, + mockDir.setContent({ [joinPath(workspacePath, 'target')]: { 'static-content.txt': 'static-content', }, diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/filesystem/delete.examples.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/filesystem/delete.examples.test.ts index 10994e3824..023f049ebc 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/filesystem/delete.examples.test.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/filesystem/delete.examples.test.ts @@ -18,18 +18,17 @@ import { createFilesystemDeleteAction } from './delete'; import { getVoidLogger } from '@backstage/backend-common'; import { PassThrough } from 'stream'; import { resolve as resolvePath } from 'path'; -import * as os from 'os'; -import mockFs from 'mock-fs'; import fs from 'fs-extra'; import yaml from 'yaml'; import { examples } from './delete.examples'; - -const root = os.platform() === 'win32' ? 'C:\\rootDir' : '/rootDir'; -const workspacePath = resolvePath(root, 'my-workspace'); +import { createMockDirectory } from '@backstage/backend-test-utils'; describe('fs:delete examples', () => { const action = createFilesystemDeleteAction(); + const mockDir = createMockDirectory(); + const workspacePath = resolvePath(mockDir.path, 'workspace'); + const files: string[] = yaml.parse(examples[0].example).steps[0].input.files; const mockContext = { @@ -46,7 +45,7 @@ describe('fs:delete examples', () => { beforeEach(() => { jest.restoreAllMocks(); - mockFs({ + mockDir.setContent({ [workspacePath]: { [files[0]]: 'hello', [files[1]]: 'world', @@ -57,10 +56,6 @@ describe('fs:delete examples', () => { }); }); - afterEach(() => { - mockFs.restore(); - }); - it('should call fs.rm with the correct values', async () => { files.forEach(file => { const filePath = resolvePath(workspacePath, file); diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/filesystem/delete.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/filesystem/delete.test.ts index 713de5b0ad..2a4f45b862 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/filesystem/delete.test.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/filesystem/delete.test.ts @@ -14,20 +14,19 @@ * limitations under the License. */ -import * as os from 'os'; -import mockFs from 'mock-fs'; import { resolve as resolvePath } from 'path'; import { createFilesystemDeleteAction } from './delete'; import { getVoidLogger } from '@backstage/backend-common'; import { PassThrough } from 'stream'; import fs from 'fs-extra'; - -const root = os.platform() === 'win32' ? 'C:\\rootDir' : '/rootDir'; -const workspacePath = resolvePath(root, 'my-workspace'); +import { createMockDirectory } from '@backstage/backend-test-utils'; describe('fs:delete', () => { const action = createFilesystemDeleteAction(); + const mockDir = createMockDirectory(); + const workspacePath = resolvePath(mockDir.path, 'workspace'); + const mockContext = { input: { files: ['unit-test-a.js', 'unit-test-b.js'], @@ -42,7 +41,7 @@ describe('fs:delete', () => { beforeEach(() => { jest.restoreAllMocks(); - mockFs({ + mockDir.setContent({ [workspacePath]: { 'unit-test-a.js': 'hello', 'unit-test-b.js': 'world', @@ -53,10 +52,6 @@ describe('fs:delete', () => { }); }); - afterEach(() => { - mockFs.restore(); - }); - it('should throw an error when files is not an array', async () => { await expect( action.handler({ diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/filesystem/rename.examples.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/filesystem/rename.examples.test.ts index 5139469959..cbb0fa0d0b 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/filesystem/rename.examples.test.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/filesystem/rename.examples.test.ts @@ -14,8 +14,6 @@ * limitations under the License. */ -import * as os from 'os'; -import mockFs from 'mock-fs'; import { resolve as resolvePath } from 'path'; import { createFilesystemRenameAction } from './rename'; import { getVoidLogger } from '@backstage/backend-common'; @@ -23,15 +21,16 @@ import { PassThrough } from 'stream'; import fs from 'fs-extra'; import yaml from 'yaml'; import { examples } from './rename.examples'; - -const root = os.platform() === 'win32' ? 'C:\\rootDir' : '/rootDir'; -const workspacePath = resolvePath(root, 'my-workspace'); +import { createMockDirectory } from '@backstage/backend-test-utils'; describe('fs:rename examples', () => { const action = createFilesystemRenameAction(); const files: { from: string; to: string }[] = yaml.parse(examples[0].example) .steps[0].input.files; + const mockDir = createMockDirectory(); + const workspacePath = resolvePath(mockDir.path, 'workspace'); + const mockContext = { input: { files: files, @@ -46,7 +45,7 @@ describe('fs:rename examples', () => { beforeEach(() => { jest.restoreAllMocks(); - mockFs({ + mockDir.setContent({ [workspacePath]: { [files[0].from]: 'hello', [files[1].from]: 'world', @@ -59,10 +58,6 @@ describe('fs:rename examples', () => { }); }); - afterEach(() => { - mockFs.restore(); - }); - it('should call fs.move with the correct values', async () => { mockContext.input.files.forEach(file => { const filePath = resolvePath(workspacePath, file.from); diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/filesystem/rename.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/filesystem/rename.test.ts index 6804c9f5a9..d37e967f43 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/filesystem/rename.test.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/filesystem/rename.test.ts @@ -14,20 +14,19 @@ * limitations under the License. */ -import * as os from 'os'; -import mockFs from 'mock-fs'; import { resolve as resolvePath } from 'path'; import { createFilesystemRenameAction } from './rename'; import { getVoidLogger } from '@backstage/backend-common'; import { PassThrough } from 'stream'; import fs from 'fs-extra'; - -const root = os.platform() === 'win32' ? 'C:\\rootDir' : '/rootDir'; -const workspacePath = resolvePath(root, 'my-workspace'); +import { createMockDirectory } from '@backstage/backend-test-utils'; describe('fs:rename', () => { const action = createFilesystemRenameAction(); + const mockDir = createMockDirectory(); + const workspacePath = resolvePath(mockDir.path, 'workspace'); + const mockInputFiles = [ { from: 'unit-test-a.js', @@ -56,7 +55,7 @@ describe('fs:rename', () => { beforeEach(() => { jest.restoreAllMocks(); - mockFs({ + mockDir.setContent({ [workspacePath]: { 'unit-test-a.js': 'hello', 'unit-test-b.js': 'world', @@ -68,10 +67,6 @@ describe('fs:rename', () => { }); }); - afterEach(() => { - mockFs.restore(); - }); - it('should throw an error when files is not an array', async () => { await expect( action.handler({ diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubIssuesLabel.examples.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubIssuesLabel.examples.test.ts new file mode 100644 index 0000000000..9d74d53c6d --- /dev/null +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubIssuesLabel.examples.test.ts @@ -0,0 +1,120 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { TemplateAction } from '@backstage/plugin-scaffolder-node'; +import { getVoidLogger } from '@backstage/backend-common'; +import { ConfigReader } from '@backstage/config'; +import { + DefaultGithubCredentialsProvider, + GithubCredentialsProvider, + ScmIntegrations, +} from '@backstage/integration'; +import { PassThrough } from 'stream'; +import { createGithubIssuesLabelAction } from './githubIssuesLabel'; +import yaml from 'yaml'; +import { examples } from './githubIssuesLabel.examples'; +import { getOctokitOptions } from './helpers'; + +jest.mock('./helpers', () => { + return { + getOctokitOptions: jest.fn(), + }; +}); + +const mockOctokit = { + rest: { + issues: { + addLabels: jest.fn(), + }, + }, +}; +jest.mock('octokit', () => ({ + Octokit: class { + constructor() { + return mockOctokit; + } + }, +})); + +describe('github:issues:label examples', () => { + const config = new ConfigReader({ + integrations: { + github: [ + { host: 'github.com', token: 'tokenlols' }, + { host: 'ghe.github.com' }, + ], + }, + }); + + const getOctokitOptionsMock = getOctokitOptions as jest.Mock; + const integrations = ScmIntegrations.fromConfig(config); + let githubCredentialsProvider: GithubCredentialsProvider; + let action: TemplateAction; + + const mockContext = { + workspacePath: 'lol', + logger: getVoidLogger(), + logStream: new PassThrough(), + output: jest.fn(), + createTemporaryDirectory: jest.fn(), + }; + + beforeEach(() => { + jest.resetAllMocks(); + githubCredentialsProvider = + DefaultGithubCredentialsProvider.fromIntegrations(integrations); + action = createGithubIssuesLabelAction({ + integrations, + githubCredentialsProvider, + }); + }); + + afterEach(jest.resetAllMocks); + + it('should call the githubApi for adding labels without token', async () => { + await action.handler({ + ...mockContext, + input: yaml.parse(examples[0].example).steps[0].input, + }); + + expect(mockOctokit.rest.issues.addLabels).toHaveBeenCalledWith({ + owner: 'owner', + repo: 'repo', + issue_number: '1', + labels: ['bug'], + }); + + expect(getOctokitOptionsMock.mock.calls[0][0].token).toBeUndefined(); + }); + + it('should call the githubApi for adding labels with token', async () => { + await action.handler({ + ...mockContext, + input: yaml.parse(examples[1].example).steps[0].input, + }); + + expect(mockOctokit.rest.issues.addLabels).toHaveBeenCalledWith({ + owner: 'owner', + repo: 'repo', + issue_number: '1', + labels: ['bug', 'documentation'], + }); + + expect(getOctokitOptionsMock.mock.calls[0][0].token).toEqual( + 'gph_YourGitHubToken', + ); + }); +}); diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubIssuesLabel.examples.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubIssuesLabel.examples.ts new file mode 100644 index 0000000000..e0f631df7b --- /dev/null +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubIssuesLabel.examples.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 { TemplateExample } from '@backstage/plugin-scaffolder-node'; +import yaml from 'yaml'; + +export const examples: TemplateExample[] = [ + { + description: 'Add labels to pull request or issue', + example: yaml.stringify({ + steps: [ + { + action: 'github:issues:label', + name: 'Add labels to pull request or issue', + input: { + repoUrl: 'github.com?repo=repo&owner=owner', + number: '1', + labels: ['bug'], + }, + }, + ], + }), + }, + { + description: 'Add labels to pull request or issue with specific token', + example: yaml.stringify({ + steps: [ + { + action: 'github:issues:label', + name: 'Add labels to pull request or issue with token', + input: { + repoUrl: 'github.com?repo=repo&owner=owner', + number: '1', + labels: ['bug', 'documentation'], + token: 'gph_YourGitHubToken', + }, + }, + ], + }), + }, +]; diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubIssuesLabel.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubIssuesLabel.test.ts index a1a0274304..3da16e677a 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubIssuesLabel.test.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubIssuesLabel.test.ts @@ -24,6 +24,13 @@ import { ConfigReader } from '@backstage/config'; import { getVoidLogger } from '@backstage/backend-common'; import { TemplateAction } from '@backstage/plugin-scaffolder-node'; import { PassThrough } from 'stream'; +import { getOctokitOptions } from './helpers'; + +jest.mock('./helpers', () => { + return { + getOctokitOptions: jest.fn(), + }; +}); const mockOctokit = { rest: { @@ -50,6 +57,7 @@ describe('github:issues:label', () => { }, }); + const getOctokitOptionsMock = getOctokitOptions as jest.Mock; const integrations = ScmIntegrations.fromConfig(config); let githubCredentialsProvider: GithubCredentialsProvider; let action: TemplateAction; @@ -85,5 +93,22 @@ describe('github:issues:label', () => { issue_number: '1', labels: ['label1', 'label2'], }); + expect(getOctokitOptionsMock.mock.calls[0][0].token).toBeUndefined(); + }); + + it('should call the githubApi for adding labels with token', async () => { + await action.handler({ + ...mockContext, + input: { ...mockContext.input, token: 'gph_YourGitHubToken' }, + }); + expect(mockOctokit.rest.issues.addLabels).toHaveBeenCalledWith({ + owner: 'owner', + repo: 'repo', + issue_number: '1', + labels: ['label1', 'label2'], + }); + expect(getOctokitOptionsMock.mock.calls[0][0].token).toEqual( + 'gph_YourGitHubToken', + ); }); }); diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubIssuesLabel.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubIssuesLabel.ts index 2dad0aa33a..73a65ffb14 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubIssuesLabel.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubIssuesLabel.ts @@ -23,6 +23,7 @@ import { assertError, InputError } from '@backstage/errors'; import { Octokit } from 'octokit'; import { getOctokitOptions } from './helpers'; import { parseRepoUrl } from '../publish/util'; +import { examples } from './githubIssuesLabel.examples'; /** * Adds labels to a pull request or issue on GitHub @@ -42,6 +43,7 @@ export function createGithubIssuesLabelAction(options: { }>({ id: 'github:issues:label', description: 'Adds labels to a pull request or issue on GitHub.', + examples, schema: { input: { type: 'object', diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/azure.examples.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/azure.examples.test.ts new file mode 100644 index 0000000000..e4fd18ef59 --- /dev/null +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/azure.examples.test.ts @@ -0,0 +1,121 @@ +/* + * 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 yaml from 'yaml'; +import { ConfigReader } from '@backstage/config'; +import { createPublishAzureAction } from './azure'; +import { ScmIntegrations } from '@backstage/integration'; +import { getVoidLogger } from '@backstage/backend-common'; +import { WebApi } from 'azure-devops-node-api'; +import { PassThrough } from 'stream'; +import { initRepoAndPush } from '../helpers'; +import { examples } from './azure.examples'; + +jest.mock('azure-devops-node-api', () => ({ + WebApi: jest.fn(), + getPersonalAccessTokenHandler: jest.fn().mockReturnValue(() => {}), +})); + +jest.mock('../helpers', () => { + return { + initRepoAndPush: jest.fn().mockResolvedValue({ + commitHash: '220f19cc36b551763d157f1b5e4a4b446165dbd6', + }), + commitAndPushRepo: jest.fn().mockResolvedValue({ + commitHash: '220f19cc36b551763d157f1b5e4a4b446165dbd6', + }), + }; +}); + +describe('publish:azure examples', () => { + const config = new ConfigReader({ + integrations: { + azure: [ + { + host: 'dev.azure.com', + credentials: [{ personalAccessToken: 'tokenlols' }], + }, + ], + }, + }); + + const integrations = ScmIntegrations.fromConfig(config); + const action = createPublishAzureAction({ integrations, config }); + const mockContext = { + workspacePath: 'lol', + logger: getVoidLogger(), + logStream: new PassThrough(), + output: jest.fn(), + createTemporaryDirectory: jest.fn(), + }; + + const mockGitClient = { + createRepository: jest.fn(), + }; + const mockGitApi = { + getGitApi: jest.fn().mockReturnValue(mockGitClient), + }; + + (WebApi as unknown as jest.Mock).mockImplementation(() => mockGitApi); + + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('should call initRepoAndPush with the correct values', async () => { + mockGitClient.createRepository.mockResolvedValue({ + remoteUrl: 'https://dev.azure.com/organization/project/_git/repo', + id: '709e891c-dee7-4f91-b963-534713c0737f', + }); + + await action.handler({ + ...mockContext, + input: yaml.parse(examples[0].example).steps[0].input, + }); + + expect(initRepoAndPush).toHaveBeenCalledWith({ + dir: mockContext.workspacePath, + remoteUrl: 'https://dev.azure.com/organization/project/_git/repo', + defaultBranch: 'master', + auth: { username: 'notempty', password: 'tokenlols' }, + logger: mockContext.logger, + commitMessage: 'initial commit', + gitAuthorInfo: {}, + }); + }); + + it('should call initRepoAndPush with a changed default branch', async () => { + mockGitClient.createRepository.mockResolvedValue({ + remoteUrl: 'https://dev.azure.com/organization/project/_git/repo', + id: '709e891c-dee7-4f91-b963-534713c0737f', + }); + + await action.handler({ + ...mockContext, + input: yaml.parse(examples[2].example).steps[0].input, + }); + + expect(initRepoAndPush).toHaveBeenCalledWith({ + dir: mockContext.workspacePath, + remoteUrl: 'https://dev.azure.com/organization/project/_git/repo', + defaultBranch: 'main', + auth: { username: 'notempty', password: 'tokenlols' }, + logger: mockContext.logger, + commitMessage: 'initial commit', + gitAuthorInfo: {}, + }); + }); +}); diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/azure.examples.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/azure.examples.ts new file mode 100644 index 0000000000..48b57c410d --- /dev/null +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/azure.examples.ts @@ -0,0 +1,73 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { TemplateExample } from '@backstage/plugin-scaffolder-node'; +import yaml from 'yaml'; + +export const examples: TemplateExample[] = [ + { + description: + 'Initializes a git repository of the content in the workspace, and publishes it to Azure.', + example: yaml.stringify({ + steps: [ + { + id: 'publish', + action: 'publish:azure', + name: 'Publish to Azure', + input: { + repoUrl: + 'dev.azure.com?organization=organization&owner=project&repo=repo', + }, + }, + ], + }), + }, + { + description: 'Add a description.', + example: yaml.stringify({ + steps: [ + { + id: 'publish', + action: 'publish:azure', + name: 'Publish to Azure', + input: { + repoUrl: + 'dev.azure.com?organization=organization&owner=project&repo=repo', + description: 'Initialize a git repository', + }, + }, + ], + }), + }, + { + description: 'Change the default branch.', + example: yaml.stringify({ + steps: [ + { + id: 'publish', + action: 'publish:azure', + name: 'Publish to Azure', + input: { + repoUrl: + 'dev.azure.com?organization=organization&owner=project&repo=repo', + description: 'Initialize a git repository', + defaultBranch: 'main', + }, + }, + ], + }), + }, +]; diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/azure.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/azure.ts index b6c0226163..a7df154687 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/azure.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/azure.ts @@ -29,6 +29,7 @@ import { import { getRepoSourceDirectory, parseRepoUrl } from './util'; import { createTemplateAction } from '@backstage/plugin-scaffolder-node'; import { Config } from '@backstage/config'; +import { examples } from './azure.examples'; /** * Creates a new action that initializes a git repository of the content in the workspace @@ -52,6 +53,7 @@ export function createPublishAzureAction(options: { gitAuthorEmail?: string; }>({ id: 'publish:azure', + examples, description: 'Initializes a git repository of the content in the workspace, and publishes it to Azure.', schema: { diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/githubPullRequest.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/githubPullRequest.test.ts index b6987335f9..a1f3712a9d 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/githubPullRequest.test.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/githubPullRequest.test.ts @@ -24,21 +24,17 @@ import { ActionContext, TemplateAction, } from '@backstage/plugin-scaffolder-node'; -import mockFs from 'mock-fs'; -import os from 'os'; -import { resolve as resolvePath } from 'path'; +import fs from 'fs-extra'; import { Writable } from 'stream'; import { createPublishGithubPullRequestAction, OctokitWithPullRequestPluginClient, } from './githubPullRequest'; +import { createMockDirectory } from '@backstage/backend-test-utils'; // Make sure root logger is initialized ahead of FS mock createRootLogger(); -const root = os.platform() === 'win32' ? 'C:\\root' : '/root'; -const workspacePath = resolvePath(root, 'my-workspace'); - type GithubPullRequestActionInput = ReturnType< typeof createPublishGithubPullRequestAction > extends TemplateAction @@ -54,7 +50,12 @@ describe('createPublishGithubPullRequestAction', () => { }; }; + const mockDir = createMockDirectory(); + const workspacePath = mockDir.resolve('workspace'); + beforeEach(() => { + mockDir.clear(); + const integrations = ScmIntegrations.fromConfig(new ConfigReader({})); fakeClient = { createPullRequest: jest.fn(async (_: any) => { @@ -92,7 +93,6 @@ describe('createPublishGithubPullRequestAction', () => { }); afterEach(() => { - mockFs.restore(); jest.resetAllMocks(); }); @@ -132,7 +132,7 @@ describe('createPublishGithubPullRequestAction', () => { draft: true, }; - mockFs({ + mockDir.setContent({ [workspacePath]: { 'file.txt': 'Hello there!' }, }); @@ -197,7 +197,7 @@ describe('createPublishGithubPullRequestAction', () => { draft: true, }; - mockFs({ + mockDir.setContent({ [workspacePath]: { 'file.txt': 'Hello there!' }, }); @@ -261,7 +261,7 @@ describe('createPublishGithubPullRequestAction', () => { sourcePath: 'source', }; - mockFs({ + mockDir.setContent({ [workspacePath]: { source: { 'foo.txt': 'Hello there!' }, irrelevant: { 'bar.txt': 'Nothing to see here' }, @@ -323,7 +323,7 @@ describe('createPublishGithubPullRequestAction', () => { description: 'This PR is really good', }; - mockFs({ + mockDir.setContent({ [workspacePath]: { 'file.txt': 'Hello there!' }, }); @@ -385,7 +385,7 @@ describe('createPublishGithubPullRequestAction', () => { teamReviewers: ['team-foo'], }; - mockFs({ [workspacePath]: {} }); + mockDir.setContent({ [workspacePath]: {} }); ctx = { createTemporaryDirectory: jest.fn(), @@ -437,7 +437,7 @@ describe('createPublishGithubPullRequestAction', () => { description: 'This PR is really good', }; - mockFs({ [workspacePath]: {} }); + mockDir.setContent({ [workspacePath]: {} }); ctx = { createTemporaryDirectory: jest.fn(), @@ -469,11 +469,9 @@ describe('createPublishGithubPullRequestAction', () => { description: 'This PR is really good', }; - mockFs({ + mockDir.setContent({ [workspacePath]: { - Makefile: mockFs.symlink({ - path: '../../nothing/yet', - }), + Makefile: c => c.symlink('../../nothing/yet'), }, }); @@ -523,12 +521,13 @@ describe('createPublishGithubPullRequestAction', () => { description: 'This PR is really good', }; - mockFs({ + mockDir.setContent({ [workspacePath]: { - 'hello.sh': mockFs.file({ - content: 'echo Hello there!', - mode: 0o100755, - }), + 'hello.sh': c => + fs.writeFileSync(c.path, 'echo Hello there!', { + encoding: 'utf8', + mode: 0o100755, + }), }, }); @@ -588,12 +587,13 @@ describe('createPublishGithubPullRequestAction', () => { description: 'This PR is really good', }; - mockFs({ + mockDir.setContent({ [workspacePath]: { - 'hello.sh': mockFs.file({ - content: 'echo Hello there!', - mode: 0o100775, - }), + 'hello.sh': c => + fs.writeFileSync(c.path, 'echo Hello there!', { + encoding: 'utf8', + mode: 0o100775, + }), }, }); @@ -654,7 +654,7 @@ describe('createPublishGithubPullRequestAction', () => { commitMessage: 'Create my new app, but in the commit message', }; - mockFs({ + mockDir.setContent({ [workspacePath]: { 'file.txt': 'Hello there!' }, }); diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.examples.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.examples.ts index ac259866e3..b20fcf52e9 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.examples.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.examples.ts @@ -68,4 +68,79 @@ export const examples: TemplateExample[] = [ ], }), }, + { + description: 'Initializes a git repository with additional settings.', + example: yaml.stringify({ + steps: [ + { + id: 'publish', + action: 'publish:gitlab', + name: 'Publish to GitLab', + input: { + repoUrl: 'gitlab.com?repo=project_name&owner=group_name', + settings: { + ci_config_path: '.gitlab-ci.yml', + visibility: 'public', + }, + }, + }, + ], + }), + }, + { + description: 'Initializes a git repository with branches settings', + example: yaml.stringify({ + steps: [ + { + id: 'publish', + action: 'publish:gitlab', + name: 'Publish to GitLab', + input: { + repoUrl: 'gitlab.com?repo=project_name&owner=group_name', + branches: [ + { + name: 'dev', + create: true, + protected: true, + ref: 'master', + }, + { + name: 'master', + protected: true, + }, + ], + }, + }, + ], + }), + }, + { + description: 'Initializes a git repository with environment variables', + example: yaml.stringify({ + steps: [ + { + id: 'publish', + action: 'publish:gitlab', + name: 'Publish to GitLab', + input: { + repoUrl: 'gitlab.com?repo=project_name&owner=group_name', + projectVariables: [ + { + key: 'key1', + value: 'value1', + protected: true, + masked: false, + }, + { + key: 'key2', + value: 'value2', + protected: true, + masked: false, + }, + ], + }, + }, + ], + }), + }, ]; diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.test.ts index dc8e3eb0ee..b2f3dc6480 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.test.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.test.ts @@ -45,6 +45,15 @@ const mockGitlabClient = { ProjectMembers: { add: jest.fn(), }, + Branches: { + create: jest.fn(), + }, + ProtectedBranches: { + protect: jest.fn(), + }, + ProjectVariables: { + create: jest.fn(), + }, }; jest.mock('@gitbeaker/node', () => ({ Gitlab: class { @@ -77,6 +86,73 @@ describe('publish:gitlab', () => { input: { repoUrl: 'gitlab.com?repo=repo&owner=owner', repoVisibility: 'private' as const, + settings: { + ci_config_path: '.gitlab-ci.yml', + }, + }, + workspacePath: 'lol', + logger: getVoidLogger(), + logStream: new PassThrough(), + output: jest.fn(), + createTemporaryDirectory: jest.fn(), + }; + const mockContextWithSettings = { + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + repoVisibility: 'private' as const, + topics: ['topic'], + settings: { + ci_config_path: '.gitlab-ci.yml', + visibility: 'internal' as const, + topics: ['topic1', 'topic2'], + }, + }, + workspacePath: 'lol', + logger: getVoidLogger(), + logStream: new PassThrough(), + output: jest.fn(), + createTemporaryDirectory: jest.fn(), + }; + const mockContextWithBranches = { + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + repoVisibility: 'private' as const, + branches: [ + { + name: 'dev', + create: true, + ref: 'master', + protect: true, + }, + { + name: 'stage', + create: true, + }, + { + name: 'perf', + protect: true, + }, + ], + }, + workspacePath: 'lol', + logger: getVoidLogger(), + logStream: new PassThrough(), + output: jest.fn(), + createTemporaryDirectory: jest.fn(), + }; + const mockContextWithVariables = { + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + repoVisibility: 'private' as const, + projectVariables: [ + { + key: 'key', + value: 'value', + description: 'description', + protected: true, + masked: true, + }, + ], }, workspacePath: 'lol', logger: getVoidLogger(), @@ -146,6 +222,8 @@ describe('publish:gitlab', () => { name: 'bob', visibility: 'private', }); + expect(mockGitlabClient.Branches.create).not.toHaveBeenCalled(); + expect(mockGitlabClient.ProtectedBranches.protect).not.toHaveBeenCalled(); }); it('should call the correct Gitlab APIs when the owner is an organization', async () => { @@ -162,7 +240,10 @@ describe('publish:gitlab', () => { namespace_id: 1234, name: 'repo', visibility: 'private', + ci_config_path: '.gitlab-ci.yml', }); + expect(mockGitlabClient.Branches.create).not.toHaveBeenCalled(); + expect(mockGitlabClient.ProtectedBranches.protect).not.toHaveBeenCalled(); }); it('should call the correct Gitlab APIs when the owner is not an organization', async () => { @@ -179,7 +260,103 @@ describe('publish:gitlab', () => { namespace_id: 12345, name: 'repo', visibility: 'private', + ci_config_path: '.gitlab-ci.yml', }); + expect(mockGitlabClient.Branches.create).not.toHaveBeenCalled(); + expect(mockGitlabClient.ProtectedBranches.protect).not.toHaveBeenCalled(); + }); + + it('should call the correct Gitlab APIs when using project settings with override of visibility and topics', async () => { + mockGitlabClient.Users.current.mockResolvedValue({ id: 12345 }); + mockGitlabClient.Namespaces.show.mockResolvedValue({ id: 1234 }); + mockGitlabClient.Projects.create.mockResolvedValue({ + http_url_to_repo: 'http://mockurl.git', + }); + + await action.handler(mockContextWithSettings); + + expect(mockGitlabClient.Namespaces.show).toHaveBeenCalledWith('owner'); + expect(mockGitlabClient.Projects.create).toHaveBeenCalledWith({ + namespace_id: 1234, + name: 'repo', + visibility: 'internal', + topics: ['topic1', 'topic2'], + ci_config_path: '.gitlab-ci.yml', + }); + expect(mockGitlabClient.Branches.create).not.toHaveBeenCalled(); + expect(mockGitlabClient.ProtectedBranches.protect).not.toHaveBeenCalled(); + }); + + it('should call the correct Gitlab APIs for branches and protectd branches when branch settings provided', async () => { + mockGitlabClient.Users.current.mockResolvedValue({ id: 12345 }); + mockGitlabClient.Namespaces.show.mockResolvedValue({ id: 1234 }); + mockGitlabClient.Projects.create.mockResolvedValue({ + id: 123456, + http_url_to_repo: 'http://mockurl.git', + }); + + await action.handler(mockContextWithBranches); + + expect(mockGitlabClient.Namespaces.show).toHaveBeenCalledWith('owner'); + expect(mockGitlabClient.Projects.create).toHaveBeenCalledWith({ + namespace_id: 1234, + name: 'repo', + visibility: 'private', + }); + expect(mockGitlabClient.Branches.create).toHaveBeenCalledTimes(2); + expect(mockGitlabClient.ProtectedBranches.protect).toHaveBeenCalledTimes(2); + + expect(mockGitlabClient.Branches.create).toHaveBeenCalledWith( + 123456, + 'dev', + 'master', + ); + expect(mockGitlabClient.Branches.create).toHaveBeenCalledWith( + 123456, + 'stage', + 'master', + ); + + expect(mockGitlabClient.ProtectedBranches.protect).toHaveBeenCalledWith( + 123456, + 'dev', + ); + expect(mockGitlabClient.ProtectedBranches.protect).toHaveBeenCalledWith( + 123456, + 'perf', + ); + }); + + it('should call the correct Gitlab APIs for variables when their configuration is provided', async () => { + mockGitlabClient.Users.current.mockResolvedValue({ id: 12345 }); + mockGitlabClient.Namespaces.show.mockResolvedValue({ id: 1234 }); + mockGitlabClient.Projects.create.mockResolvedValue({ + id: 123456, + http_url_to_repo: 'http://mockurl.git', + }); + + await action.handler(mockContextWithVariables); + + expect(mockGitlabClient.Namespaces.show).toHaveBeenCalledWith('owner'); + expect(mockGitlabClient.Projects.create).toHaveBeenCalledWith({ + namespace_id: 1234, + name: 'repo', + visibility: 'private', + }); + + expect(mockGitlabClient.ProjectVariables.create).toHaveBeenCalledWith( + 123456, + { + key: 'key', + value: 'value', + description: 'description', + variable_type: 'env_var', + protected: true, + masked: true, + raw: false, + environment_scope: '*', + }, + ); }); it('should call initRepoAndPush with the correct values', async () => { diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.ts index 25f78452a4..6d86841a20 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.ts @@ -38,6 +38,7 @@ export function createPublishGitlabAction(options: { return createTemplateAction<{ repoUrl: string; defaultBranch?: string; + /** @deprecated in favour of settings.visibility field */ repoVisibility?: 'private' | 'internal' | 'public'; sourcePath?: string; token?: string; @@ -45,7 +46,32 @@ export function createPublishGitlabAction(options: { gitAuthorName?: string; gitAuthorEmail?: string; setUserAsOwner?: boolean; + /** @deprecated in favour of settings.topics field */ topics?: string[]; + settings?: { + path?: string; + auto_devops_enabled?: boolean; + ci_config_path?: string; + description?: string; + topics?: string[]; + visibility?: 'private' | 'internal' | 'public'; + }; + branches?: Array<{ + name: string; + protect?: boolean; + create?: boolean; + ref?: string; + }>; + projectVariables?: Array<{ + key: string; + value: string; + description?: string; + variable_type?: string; + protected?: boolean; + masked?: boolean; + raw?: boolean; + environment_scope?: string; + }>; }>({ id: 'publish:gitlab', description: @@ -63,6 +89,7 @@ export function createPublishGitlabAction(options: { }, repoVisibility: { title: 'Repository Visibility', + description: `Sets the visibility of the repository. The default value is 'private'. (deprecated, use settings.visibility instead)`, type: 'string', enum: ['private', 'public', 'internal'], }, @@ -105,12 +132,135 @@ export function createPublishGitlabAction(options: { }, topics: { title: 'Topic labels', - description: 'Topic labels to apply on the repository.', + description: + 'Topic labels to apply on the repository. (deprecated, use settings.topics instead)', type: 'array', items: { type: 'string', }, }, + settings: { + title: 'Project settings', + description: + 'Additional project settings, based on https://docs.gitlab.com/ee/api/projects.html#create-project attributes', + type: 'object', + properties: { + path: { + title: 'Project path', + description: + 'Repository name for new project. Generated based on name if not provided (generated as lowercase with dashes).', + type: 'string', + }, + auto_devops_enabled: { + title: 'Auto DevOps enabled', + description: 'Enable Auto DevOps for this project', + type: 'boolean', + }, + ci_config_path: { + title: 'CI config path', + description: 'Custom CI config path for this project', + type: 'string', + }, + description: { + title: 'Project description', + description: 'Short project description', + type: 'string', + }, + topics: { + title: 'Topic labels', + description: 'Topic labels to apply on the repository', + type: 'array', + items: { + type: 'string', + }, + }, + visibility: { + title: 'Project visibility', + description: + 'The visibility of the project. Can be private, internal, or public. The default value is private.', + type: 'string', + enum: ['private', 'public', 'internal'], + }, + }, + }, + branches: { + title: 'Project branches settings', + type: 'array', + items: { + type: 'object', + required: ['name'], + properties: { + name: { + title: 'Branch name', + type: 'string', + }, + protect: { + title: 'Should branch be protected', + description: `Will mark branch as protected. The default value is 'false'`, + type: 'boolean', + }, + create: { + title: 'Should branch be created', + description: `If branch does not exist, it will be created from provided ref. The default value is 'false'`, + type: 'boolean', + }, + ref: { + title: 'Branch reference', + description: `Branch reference to create branch from. The default value is 'master'`, + type: 'string', + }, + }, + }, + }, + projectVariables: { + title: 'Project variables', + description: + 'Project variables settings based on Gitlab Project Environments API - https://docs.gitlab.com/ee/api/project_level_variables.html#create-a-variable', + type: 'array', + items: { + type: 'object', + required: ['key', 'value'], + properties: { + key: { + title: 'Variable key', + description: + 'The key of a variable; must have no more than 255 characters; only A-Z, a-z, 0-9, and _ are allowed', + type: 'string', + }, + value: { + title: 'Variable value', + description: 'The value of a variable', + type: 'string', + }, + description: { + title: 'Variable description', + description: `The description of the variable. The default value is 'null'`, + type: 'string', + }, + variable_type: { + title: 'Variable type', + description: `The type of a variable. The default value is 'env_var'`, + type: 'string', + enum: ['env_var', 'file'], + }, + protected: { + title: 'Variable protection', + description: `Whether the variable is protected. The default value is 'false'`, + type: 'boolean', + }, + raw: { + title: 'Variable raw', + description: `Whether the variable is in raw format. The default value is 'false'`, + type: 'boolean', + }, + environment_scope: { + title: 'Variable environment scope', + description: `The environment_scope of the variable. The default value is '*'`, + type: 'string', + }, + }, + }, + }, }, }, output: { @@ -145,6 +295,9 @@ export function createPublishGitlabAction(options: { gitAuthorEmail, setUserAsOwner = false, topics = [], + settings = {}, + branches = [], + projectVariables = [], } = ctx.input; const { owner, repo, host } = parseRepoUrl(repoUrl, integrations); @@ -204,6 +357,7 @@ export function createPublishGitlabAction(options: { name: repo, visibility: repoVisibility, ...(topics.length ? { topics } : {}), + ...(Object.keys(settings).length ? { ...settings } : {}), }); // When setUserAsOwner is true the input token is expected to come from an unprivileged user GitLab @@ -247,6 +401,66 @@ export function createPublishGitlabAction(options: { gitAuthorInfo, }); + if (branches) { + for (const branch of branches) { + const { + name, + protect = false, + create = false, + ref = 'master', + } = branch; + + if (create) { + try { + await client.Branches.create(projectId, name, ref); + } catch (e) { + throw new InputError( + `Branch creation failed for ${name}. ${printGitlabError(e)}`, + ); + } + ctx.logger.info( + `Branch ${name} created for ${projectId} with ref ${ref}`, + ); + } + + if (protect) { + try { + await client.ProtectedBranches.protect(projectId, name); + } catch (e) { + throw new InputError( + `Branch protection failed for ${name}. ${printGitlabError(e)}`, + ); + } + ctx.logger.info(`Branch ${name} protected for ${projectId}`); + } + } + } + + if (projectVariables) { + for (const variable of projectVariables) { + const variableWithDefaults = Object.assign(variable, { + variable_type: variable.variable_type ?? 'env_var', + protected: variable.protected ?? false, + masked: variable.masked ?? false, + raw: variable.raw ?? false, + environment_scope: variable.environment_scope ?? '*', + }); + + try { + await client.ProjectVariables.create( + projectId, + variableWithDefaults, + ); + } catch (e) { + throw new InputError( + `Environment variable creation failed for ${ + variableWithDefaults.key + }. ${printGitlabError(e)}`, + ); + } + } + } + ctx.output('commitHash', commitResult?.commitHash); ctx.output('remoteUrl', remoteUrl); ctx.output('repoContentsUrl', repoContentsUrl); @@ -254,3 +468,7 @@ export function createPublishGitlabAction(options: { }, }); } + +function printGitlabError(error: any): string { + return JSON.stringify({ code: error.code, message: error.description }); +} diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlabMergeRequest.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlabMergeRequest.test.ts index 6445d243b5..71a2273aed 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlabMergeRequest.test.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlabMergeRequest.test.ts @@ -17,18 +17,13 @@ import { createRootLogger, getRootLogger } from '@backstage/backend-common'; import { ConfigReader } from '@backstage/config'; import { ScmIntegrations } from '@backstage/integration'; import { TemplateAction } from '@backstage/plugin-scaffolder-node'; -import mockFs from 'mock-fs'; -import os from 'os'; -import { resolve as resolvePath } from 'path'; import { Writable } from 'stream'; import { createPublishGitlabMergeRequestAction } from './gitlabMergeRequest'; +import { createMockDirectory } from '@backstage/backend-test-utils'; // Make sure root logger is initialized ahead of FS mock createRootLogger(); -const root = os.platform() === 'win32' ? 'C:\\root' : '/root'; -const workspacePath = resolvePath(root, 'my-workspace'); - const mockGitlabClient = { Namespaces: { show: jest.fn(), @@ -79,7 +74,12 @@ jest.mock('@gitbeaker/node', () => ({ describe('createGitLabMergeRequest', () => { let instance: TemplateAction; + const mockDir = createMockDirectory(); + const workspacePath = mockDir.resolve('workspace'); + beforeEach(() => { + mockDir.clear(); + const config = new ConfigReader({ integrations: { gitlab: [ @@ -100,10 +100,6 @@ describe('createGitLabMergeRequest', () => { instance = createPublishGitlabMergeRequestAction({ integrations }); }); - afterEach(() => { - mockFs.restore(); - }); - describe('createGitLabMergeRequestWithSpecifiedTargetBranch', () => { it('removeSourceBranch is false by default when not passed in options', async () => { const input = { @@ -114,7 +110,7 @@ describe('createGitLabMergeRequest', () => { description: 'This MR is really good', targetPath: 'Subdirectory', }; - mockFs({ + mockDir.setContent({ [workspacePath]: { source: { 'foo.txt': 'Hello there!' }, irrelevant: { 'bar.txt': 'Nothing to see here' }, @@ -156,7 +152,7 @@ describe('createGitLabMergeRequest', () => { description: 'This MR is really good', targetPath: 'Subdirectory', }; - mockFs({ + mockDir.setContent({ [workspacePath]: { source: { 'foo.txt': 'Hello there!' }, irrelevant: { 'bar.txt': 'Nothing to see here' }, @@ -200,7 +196,7 @@ describe('createGitLabMergeRequest', () => { removeSourceBranch: true, targetPath: 'Subdirectory', }; - mockFs({ + mockDir.setContent({ [workspacePath]: { source: { 'foo.txt': 'Hello there!' }, irrelevant: { 'bar.txt': 'Nothing to see here' }, @@ -235,7 +231,7 @@ describe('createGitLabMergeRequest', () => { removeSourceBranch: false, targetPath: 'Subdirectory', }; - mockFs({ + mockDir.setContent({ [workspacePath]: { source: { 'foo.txt': 'Hello there!' }, irrelevant: { 'bar.txt': 'Nothing to see here' }, @@ -276,7 +272,7 @@ describe('createGitLabMergeRequest', () => { targetPath: 'Subdirectory', assignee: 'John Smith', }; - mockFs({ + mockDir.setContent({ [workspacePath]: { source: { 'foo.txt': 'Hello there!' }, irrelevant: { 'bar.txt': 'Nothing to see here' }, @@ -316,7 +312,7 @@ describe('createGitLabMergeRequest', () => { targetPath: 'Subdirectory', assingnee: 'John Doe', }; - mockFs({ + mockDir.setContent({ [workspacePath]: { source: { 'foo.txt': 'Hello there!' }, irrelevant: { 'bar.txt': 'Nothing to see here' }, @@ -356,7 +352,7 @@ describe('createGitLabMergeRequest', () => { removeSourceBranch: false, targetPath: 'Subdirectory', }; - mockFs({ + mockDir.setContent({ [workspacePath]: { source: { 'foo.txt': 'Hello there!' }, irrelevant: { 'bar.txt': 'Nothing to see here' }, @@ -395,7 +391,7 @@ describe('createGitLabMergeRequest', () => { targetPath: 'Subdirectory', assignee: 'Unknown', }; - mockFs({ + mockDir.setContent({ [workspacePath]: { source: { 'foo.txt': 'Hello there!' }, irrelevant: { 'bar.txt': 'Nothing to see here' }, @@ -431,7 +427,7 @@ describe('createGitLabMergeRequest', () => { branchName: 'new-mr', description: 'This MR is really good', }; - mockFs({ + mockDir.setContent({ [workspacePath]: { source: { 'foo.txt': 'Hello there!' }, irrelevant: { 'bar.txt': 'Nothing to see here' }, @@ -480,7 +476,7 @@ describe('createGitLabMergeRequest', () => { description: 'This MR is really good', targetPath: 'source', }; - mockFs({ + mockDir.setContent({ [workspacePath]: { source: { 'foo.txt': 'Hello there!' }, irrelevant: { 'bar.txt': 'Nothing to see here' }, @@ -523,7 +519,7 @@ describe('createGitLabMergeRequest', () => { commitAction: 'create', targetPath: 'source', }; - mockFs({ + mockDir.setContent({ [workspacePath]: { source: { 'foo.txt': 'Hello there!' }, irrelevant: { 'bar.txt': 'Nothing to see here' }, @@ -565,7 +561,7 @@ describe('createGitLabMergeRequest', () => { commitAction: 'update', targetPath: 'source', }; - mockFs({ + mockDir.setContent({ [workspacePath]: { source: { 'foo.txt': 'Hello there!' }, irrelevant: { 'bar.txt': 'Nothing to see here' }, @@ -607,7 +603,7 @@ describe('createGitLabMergeRequest', () => { commitAction: 'delete', targetPath: 'source', }; - mockFs({ + mockDir.setContent({ [workspacePath]: { source: { 'foo.txt': 'Hello there!' }, irrelevant: { 'bar.txt': 'Nothing to see here' }, @@ -652,7 +648,7 @@ describe('createGitLabMergeRequest', () => { commitAction: 'create', }; - mockFs({ + mockDir.setContent({ [workspacePath]: { source: { 'foo.txt': 'Hello there!' }, irrelevant: { 'bar.txt': 'Nothing to see here' }, @@ -697,7 +693,7 @@ describe('createGitLabMergeRequest', () => { commitAction: 'create', }; - mockFs({ + mockDir.setContent({ [workspacePath]: { source: { 'foo.txt': 'Hello there!' }, irrelevant: { 'bar.txt': 'Nothing to see here' }, diff --git a/plugins/scaffolder-backend/src/scaffolder/tasks/NunjucksWorkflowRunner.test.ts b/plugins/scaffolder-backend/src/scaffolder/tasks/NunjucksWorkflowRunner.test.ts index d94a8eac69..6907f8cc2c 100644 --- a/plugins/scaffolder-backend/src/scaffolder/tasks/NunjucksWorkflowRunner.test.ts +++ b/plugins/scaffolder-backend/src/scaffolder/tasks/NunjucksWorkflowRunner.test.ts @@ -14,10 +14,7 @@ * limitations under the License. */ -import mockFs from 'mock-fs'; -import * as winston from 'winston'; - -import { getVoidLogger, resolvePackagePath } from '@backstage/backend-common'; +import { getVoidLogger } from '@backstage/backend-common'; import { NunjucksWorkflowRunner } from './NunjucksWorkflowRunner'; import { TemplateActionRegistry } from '../actions'; import { ScmIntegrations } from '@backstage/integration'; @@ -36,19 +33,7 @@ import { PermissionEvaluator, } from '@backstage/plugin-permission-common'; import { RESOURCE_TYPE_SCAFFOLDER_ACTION } from '@backstage/plugin-scaffolder-common/alpha'; - -// The Stream module is lazy loaded, so make sure it's in the module cache before mocking fs -void winston.transports.Stream; - -const realFiles = Object.fromEntries( - [ - resolvePackagePath( - '@backstage/plugin-scaffolder-backend', - 'assets', - 'nunjucks.js.txt', - ), - ].map(k => [k, mockFs.load(k)]), -); +import { createMockDirectory } from '@backstage/backend-test-utils'; describe('DefaultWorkflowRunner', () => { const logger = getVoidLogger(); @@ -56,6 +41,8 @@ describe('DefaultWorkflowRunner', () => { let runner: NunjucksWorkflowRunner; let fakeActionHandler: jest.Mock; + const mockDir = createMockDirectory(); + const mockedPermissionApi: jest.Mocked = { authorizeConditional: jest.fn(), } as unknown as jest.Mocked; @@ -84,11 +71,7 @@ describe('DefaultWorkflowRunner', () => { }); beforeEach(() => { - winston.format.simple(); // put logform in the require.cache before mocking fs - mockFs({ - '/tmp': mockFs.directory(), - ...realFiles, - }); + mockDir.clear(); jest.resetAllMocks(); actionRegistry = new TemplateActionRegistry(); @@ -148,16 +131,12 @@ describe('DefaultWorkflowRunner', () => { runner = new NunjucksWorkflowRunner({ actionRegistry, integrations, - workingDirectory: '/tmp', + workingDirectory: mockDir.path, logger, permissions: mockedPermissionApi, }); }); - afterEach(() => { - mockFs.restore(); - }); - it('should throw an error if the action does not exist', async () => { const task = createMockTaskWithSpec({ apiVersion: 'scaffolder.backstage.io/v1beta3', diff --git a/plugins/scaffolder-common/CHANGELOG.md b/plugins/scaffolder-common/CHANGELOG.md index bf11adfc0e..523ce514d6 100644 --- a/plugins/scaffolder-common/CHANGELOG.md +++ b/plugins/scaffolder-common/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-scaffolder-common +## 1.4.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-permission-common@0.7.9-next.0 + ## 1.4.1 ### Patch Changes diff --git a/plugins/scaffolder-common/package.json b/plugins/scaffolder-common/package.json index f1a2a45fe0..5fe72348c1 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.1", + "version": "1.4.2-next.0", "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 c3a17eaf61..0d95cd77cc 100644 --- a/plugins/scaffolder-node/CHANGELOG.md +++ b/plugins/scaffolder-node/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-scaffolder-node +## 0.2.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/integration@1.7.1-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/types@1.1.1 + - @backstage/plugin-scaffolder-common@1.4.2-next.0 + ## 0.2.5-next.1 ### Patch Changes diff --git a/plugins/scaffolder-node/package.json b/plugins/scaffolder-node/package.json index b46d4207c5..fd49db0371 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.5-next.1", + "version": "0.2.6-next.2", "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 77ef8b2d45..eb20d79d2a 100644 --- a/plugins/scaffolder-react/CHANGELOG.md +++ b/plugins/scaffolder-react/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-scaffolder-react +## 1.5.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/theme@0.4.3-next.0 + - @backstage/catalog-client@1.4.5-next.0 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.5 + - @backstage/plugin-scaffolder-common@1.4.2-next.0 + ## 1.5.6-next.1 ### Patch Changes diff --git a/plugins/scaffolder-react/package.json b/plugins/scaffolder-react/package.json index 9722c366c4..8483ce0842 100644 --- a/plugins/scaffolder-react/package.json +++ b/plugins/scaffolder-react/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-react", "description": "A frontend library that helps other Backstage plugins interact with the Scaffolder", - "version": "1.5.6-next.1", + "version": "1.5.6-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder/CHANGELOG.md b/plugins/scaffolder/CHANGELOG.md index 75417547a2..f32e05eed7 100644 --- a/plugins/scaffolder/CHANGELOG.md +++ b/plugins/scaffolder/CHANGELOG.md @@ -1,5 +1,29 @@ # @backstage/plugin-scaffolder +## 1.15.1-next.2 + +### Patch Changes + +- ff2ab02690: Make entity picker more reliable with only one available entity +- 83e4a42ccd: Display log visibility button on the template panel +- 4c70fe497d: `RepoUrlPickerRepoName` now correctly handles value changes in allowed repos. +- Updated dependencies + - @backstage/integration-react@1.1.20-next.2 + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/integration@1.7.1-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/theme@0.4.3-next.0 + - @backstage/catalog-client@1.4.5-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.0.17-next.0 + - @backstage/plugin-permission-react@0.4.16-next.1 + - @backstage/plugin-scaffolder-common@1.4.2-next.0 + - @backstage/plugin-scaffolder-react@1.5.6-next.2 + ## 1.15.1-next.1 ### Patch Changes diff --git a/plugins/scaffolder/package.json b/plugins/scaffolder/package.json index 841e6d61d6..03389f3fa0 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.15.1-next.1", + "version": "1.15.1-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.tsx b/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.tsx index 0f698919d5..0d45fe771c 100644 --- a/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.tsx +++ b/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.tsx @@ -123,11 +123,17 @@ export const EntityPicker = (props: EntityPickerProps) => { [onChange, formData, defaultKind, defaultNamespace, allowArbitraryValues], ); + // Since free solo can be enabled, attempt to parse as a full entity ref first, then fall + // back to the given value. + const selectedEntity = + entities?.find(e => stringifyEntityRef(e) === formData) ?? + (allowArbitraryValues && formData ? getLabel(formData) : ''); + useEffect(() => { - if (entities?.length === 1) { + if (entities?.length === 1 && selectedEntity === '') { onChange(stringifyEntityRef(entities[0])); } - }, [entities, onChange]); + }, [entities, onChange, selectedEntity]); return ( { stringifyEntityRef(e) === formData) ?? - (allowArbitraryValues && formData ? getLabel(formData) : '') - } + value={selectedEntity} loading={loading} onChange={onSelect} options={entities || []} diff --git a/plugins/scaffolder/src/components/fields/RepoUrlPicker/RepoUrlPickerRepoName.tsx b/plugins/scaffolder/src/components/fields/RepoUrlPicker/RepoUrlPickerRepoName.tsx index 1393b1902e..f2d68b08f3 100644 --- a/plugins/scaffolder/src/components/fields/RepoUrlPicker/RepoUrlPickerRepoName.tsx +++ b/plugins/scaffolder/src/components/fields/RepoUrlPicker/RepoUrlPickerRepoName.tsx @@ -54,7 +54,7 @@ export const RepoUrlPickerRepoName = (props: { native label="Repositories Available" onChange={selected => - String(Array.isArray(selected) ? selected[0] : selected) + onChange(String(Array.isArray(selected) ? selected[0] : selected)) } disabled={allowedRepos.length === 1} selected={repoName} diff --git a/plugins/search-backend-module-catalog/CHANGELOG.md b/plugins/search-backend-module-catalog/CHANGELOG.md index 402b501695..80f8e6b2b9 100644 --- a/plugins/search-backend-module-catalog/CHANGELOG.md +++ b/plugins/search-backend-module-catalog/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-search-backend-module-catalog +## 0.1.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-tasks@0.5.11-next.2 + - @backstage/plugin-catalog-node@1.4.7-next.2 + - @backstage/plugin-search-backend-node@1.2.10-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/catalog-client@1.4.5-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-catalog-common@1.0.17-next.0 + - @backstage/plugin-permission-common@0.7.9-next.0 + - @backstage/plugin-search-common@1.2.7-next.0 + ## 0.1.9-next.1 ### Patch Changes diff --git a/plugins/search-backend-module-catalog/package.json b/plugins/search-backend-module-catalog/package.json index 4963708861..dc69657e74 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.9-next.1", + "version": "0.1.10-next.2", "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 0e92e7c3db..e08124fc5a 100644 --- a/plugins/search-backend-module-elasticsearch/CHANGELOG.md +++ b/plugins/search-backend-module-elasticsearch/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-search-backend-module-elasticsearch +## 1.3.9-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-search-backend-node@1.2.10-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/integration-aws-node@0.1.7-next.0 + - @backstage/plugin-search-common@1.2.7-next.0 + ## 1.3.8-next.1 ### Patch Changes diff --git a/plugins/search-backend-module-elasticsearch/package.json b/plugins/search-backend-module-elasticsearch/package.json index 36d66e827b..505af44be1 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.8-next.1", + "version": "1.3.9-next.2", "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 c26bf84328..9acc5a8616 100644 --- a/plugins/search-backend-module-explore/CHANGELOG.md +++ b/plugins/search-backend-module-explore/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-search-backend-module-explore +## 0.1.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/backend-tasks@0.5.11-next.2 + - @backstage/plugin-search-backend-node@1.2.10-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-explore-common@0.0.2 + - @backstage/plugin-search-common@1.2.7-next.0 + ## 0.1.9-next.1 ### Patch Changes diff --git a/plugins/search-backend-module-explore/package.json b/plugins/search-backend-module-explore/package.json index f70d70dd73..e050734050 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.9-next.1", + "version": "0.1.10-next.2", "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 10453b9500..0e2b137bbc 100644 --- a/plugins/search-backend-module-pg/CHANGELOG.md +++ b/plugins/search-backend-module-pg/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-search-backend-module-pg +## 0.5.15-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-search-backend-node@1.2.10-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-search-common@1.2.7-next.0 + ## 0.5.14-next.1 ### Patch Changes diff --git a/plugins/search-backend-module-pg/package.json b/plugins/search-backend-module-pg/package.json index ad9f9e0a3b..1a34413dcc 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.14-next.1", + "version": "0.5.15-next.2", "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 5364e493c6..557b7edd13 100644 --- a/plugins/search-backend-module-techdocs/CHANGELOG.md +++ b/plugins/search-backend-module-techdocs/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-search-backend-module-techdocs +## 0.1.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-techdocs-node@1.9.0-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/backend-tasks@0.5.11-next.2 + - @backstage/plugin-catalog-node@1.4.7-next.2 + - @backstage/plugin-search-backend-node@1.2.10-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/catalog-client@1.4.5-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-catalog-common@1.0.17-next.0 + - @backstage/plugin-permission-common@0.7.9-next.0 + - @backstage/plugin-search-common@1.2.7-next.0 + ## 0.1.9-next.1 ### Patch Changes diff --git a/plugins/search-backend-module-techdocs/package.json b/plugins/search-backend-module-techdocs/package.json index 54e9b86afa..ec57b3f624 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.9-next.1", + "version": "0.1.10-next.2", "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 880615383a..58f334fb30 100644 --- a/plugins/search-backend-node/CHANGELOG.md +++ b/plugins/search-backend-node/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-search-backend-node +## 1.2.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-tasks@0.5.11-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-permission-common@0.7.9-next.0 + - @backstage/plugin-search-common@1.2.7-next.0 + ## 1.2.9-next.1 ### Patch Changes diff --git a/plugins/search-backend-node/package.json b/plugins/search-backend-node/package.json index 587b98cd61..a040f3a8f7 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.9-next.1", + "version": "1.2.10-next.2", "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 a1cae58b98..ea0a17908c 100644 --- a/plugins/search-backend/CHANGELOG.md +++ b/plugins/search-backend/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-search-backend +## 1.4.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-auth-node@0.4.0-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-openapi-utils@0.0.5-next.0 + - @backstage/plugin-permission-node@0.7.17-next.2 + - @backstage/plugin-search-backend-node@1.2.10-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-permission-common@0.7.9-next.0 + - @backstage/plugin-search-common@1.2.7-next.0 + ## 1.4.5-next.1 ### Patch Changes diff --git a/plugins/search-backend/package.json b/plugins/search-backend/package.json index 10c09a0178..ead9e7f6b6 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.5-next.1", + "version": "1.4.6-next.2", "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 0e7f901614..f1ca109111 100644 --- a/plugins/search-common/CHANGELOG.md +++ b/plugins/search-common/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-search-common +## 1.2.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/types@1.1.1 + - @backstage/plugin-permission-common@0.7.9-next.0 + ## 1.2.6 ### Patch Changes diff --git a/plugins/search-common/package.json b/plugins/search-common/package.json index b59df94990..427d6b8498 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.6", + "version": "1.2.7-next.0", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/plugins/search-react/CHANGELOG.md b/plugins/search-react/CHANGELOG.md index 1cb3a0e329..0a5cc65d96 100644 --- a/plugins/search-react/CHANGELOG.md +++ b/plugins/search-react/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-search-react +## 1.7.1-next.2 + +### Patch Changes + +- 06432f900c: Updated `/alpha` exports to use new `attachTo` option. +- Updated dependencies + - @backstage/frontend-plugin-api@0.2.0-next.2 + - @backstage/frontend-app-api@0.2.0-next.2 + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/theme@0.4.3-next.0 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.5 + - @backstage/plugin-search-common@1.2.7-next.0 + ## 1.7.1-next.1 ### Patch Changes diff --git a/plugins/search-react/alpha-api-report.md b/plugins/search-react/alpha-api-report.md index d62a0f1f0e..9c1248b536 100644 --- a/plugins/search-react/alpha-api-report.md +++ b/plugins/search-react/alpha-api-report.md @@ -48,7 +48,10 @@ export type SearchResultItemExtensionOptions< }, > = { id: string; - at?: string; + attachTo?: { + id: string; + input: string; + }; configSchema?: PortableSchema; component: (options: { config: TConfig; diff --git a/plugins/search-react/package.json b/plugins/search-react/package.json index 3591e75e94..1c4cbfb8b6 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.1-next.1", + "version": "1.7.1-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-react/src/alpha.test.tsx b/plugins/search-react/src/alpha.test.tsx index b61a400832..5222e4dad5 100644 --- a/plugins/search-react/src/alpha.test.tsx +++ b/plugins/search-react/src/alpha.test.tsx @@ -58,7 +58,7 @@ describe('createSearchResultListItemExtension', () => { const TechDocsSearchResultItemExtension = createSearchResultListItemExtension({ id: 'techdocs', - at: 'plugin.search.page/items', + attachTo: { id: 'plugin.search.page', input: 'items' }, configSchema: createSchemaFromZod(z => z.object({ noTrack: z.boolean().default(true), @@ -79,7 +79,7 @@ describe('createSearchResultListItemExtension', () => { const ExploreSearchResultItemExtension = createSearchResultListItemExtension({ id: 'explore', - at: 'plugin.search.page/items', + attachTo: { id: 'plugin.search.page', input: 'items' }, predicate: result => result.type === 'explore', component: async () => ExploreSearchResultItemComponent, }); @@ -168,7 +168,7 @@ describe('createSearchResultListItemExtension', () => { }); const app = createApp({ - plugins: [SearchPlugin], + features: [SearchPlugin], configLoader: async () => new MockConfigApi({ app: { diff --git a/plugins/search-react/src/alpha.tsx b/plugins/search-react/src/alpha.tsx index 5b44a7bbb5..366112c95e 100644 --- a/plugins/search-react/src/alpha.tsx +++ b/plugins/search-react/src/alpha.tsx @@ -65,7 +65,7 @@ export type SearchResultItemExtensionOptions< /** * The extension attachment point (e.g., search modal or page). */ - at?: string; + attachTo?: { id: string; input: string }; /** * Optional extension config schema. */ @@ -97,7 +97,7 @@ export function createSearchResultListItemExtension< ) as PortableSchema); return createExtension({ id: `plugin.search.result.item.${options.id}`, - at: options.at ?? 'plugin.search.page/items', + attachTo: options.attachTo ?? { id: 'plugin.search.page', input: 'items' }, configSchema, output: { item: searchResultItemExtensionData, diff --git a/plugins/search/CHANGELOG.md b/plugins/search/CHANGELOG.md index 714e4ef1de..067c7dfc41 100644 --- a/plugins/search/CHANGELOG.md +++ b/plugins/search/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-search +## 1.4.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.2.0-next.2 + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/plugin-search-react@1.7.1-next.2 + - @backstage/theme@0.4.3-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.5 + - @backstage/plugin-search-common@1.2.7-next.0 + ## 1.4.1-next.1 ### Patch Changes diff --git a/plugins/search/package.json b/plugins/search/package.json index 6067d0004c..06dfd01592 100644 --- a/plugins/search/package.json +++ b/plugins/search/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search", "description": "The Backstage plugin that provides your backstage app with search", - "version": "1.4.1-next.1", + "version": "1.4.1-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search/src/components/SearchModal/SearchModal.test.tsx b/plugins/search/src/components/SearchModal/SearchModal.test.tsx index 10be8ba6f8..274f9e21a1 100644 --- a/plugins/search/src/components/SearchModal/SearchModal.test.tsx +++ b/plugins/search/src/components/SearchModal/SearchModal.test.tsx @@ -205,6 +205,7 @@ describe('SearchModal', () => { const input = screen.getByLabelText('Search'); await userEvent.clear(input); + await 'a tick'; await userEvent.type(input, 'new term{enter}'); expect(navigate).toHaveBeenCalledWith('/search?query=new term'); diff --git a/plugins/sentry/CHANGELOG.md b/plugins/sentry/CHANGELOG.md index 0e2a3d446c..7794d30a34 100644 --- a/plugins/sentry/CHANGELOG.md +++ b/plugins/sentry/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-sentry +## 0.5.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/theme@0.4.3-next.0 + ## 0.5.10-next.1 ### Patch Changes diff --git a/plugins/sentry/package.json b/plugins/sentry/package.json index b6f502baee..87065a87d7 100644 --- a/plugins/sentry/package.json +++ b/plugins/sentry/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-sentry", "description": "A Backstage plugin that integrates towards Sentry", - "version": "0.5.10-next.1", + "version": "0.5.10-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/shortcuts/CHANGELOG.md b/plugins/shortcuts/CHANGELOG.md index 29eb3eefc5..49298f1942 100644 --- a/plugins/shortcuts/CHANGELOG.md +++ b/plugins/shortcuts/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-shortcuts +## 0.3.15-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/theme@0.4.3-next.0 + - @backstage/types@1.1.1 + ## 0.3.15-next.1 ### Patch Changes diff --git a/plugins/shortcuts/package.json b/plugins/shortcuts/package.json index b3f3d53858..8f23d047d4 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.15-next.1", + "version": "0.3.15-next.2", "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 d5f8999191..72533260d3 100644 --- a/plugins/sonarqube-backend/CHANGELOG.md +++ b/plugins/sonarqube-backend/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-sonarqube-backend +## 0.2.8-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/config@1.1.1-next.0 + ## 0.2.7-next.1 ### Patch Changes diff --git a/plugins/sonarqube-backend/package.json b/plugins/sonarqube-backend/package.json index 1ff45c2ac9..2b9baba2de 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.7-next.1", + "version": "0.2.8-next.2", "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 5fea1d2e9e..9bf9e3177f 100644 --- a/plugins/sonarqube-react/CHANGELOG.md +++ b/plugins/sonarqube-react/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-sonarqube-react +## 0.1.9-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + ## 0.1.9-next.0 ### Patch Changes diff --git a/plugins/sonarqube-react/package.json b/plugins/sonarqube-react/package.json index 6e1adb42f9..958c41dde9 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.9-next.0", + "version": "0.1.9-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/sonarqube/CHANGELOG.md b/plugins/sonarqube/CHANGELOG.md index d951104286..f8e8b1dde1 100644 --- a/plugins/sonarqube/CHANGELOG.md +++ b/plugins/sonarqube/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-sonarqube +## 0.7.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/theme@0.4.3-next.0 + - @backstage/plugin-sonarqube-react@0.1.9-next.1 + ## 0.7.6-next.1 ### Patch Changes diff --git a/plugins/sonarqube/package.json b/plugins/sonarqube/package.json index b68c28b76b..67cc917a8e 100644 --- a/plugins/sonarqube/package.json +++ b/plugins/sonarqube/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-sonarqube", "description": "", - "version": "0.7.6-next.1", + "version": "0.7.6-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/splunk-on-call/CHANGELOG.md b/plugins/splunk-on-call/CHANGELOG.md index 1117cfee3e..086deabcb7 100644 --- a/plugins/splunk-on-call/CHANGELOG.md +++ b/plugins/splunk-on-call/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-splunk-on-call +## 0.4.14-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/theme@0.4.3-next.0 + ## 0.4.14-next.1 ### Patch Changes diff --git a/plugins/splunk-on-call/package.json b/plugins/splunk-on-call/package.json index b677f6f425..65fb953c52 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.14-next.1", + "version": "0.4.14-next.2", "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 149dd6913f..588eb3e4c0 100644 --- a/plugins/stack-overflow-backend/CHANGELOG.md +++ b/plugins/stack-overflow-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-stack-overflow-backend +## 0.2.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-search-common@1.2.7-next.0 + ## 0.2.9-next.1 ### Patch Changes diff --git a/plugins/stack-overflow-backend/package.json b/plugins/stack-overflow-backend/package.json index 57c8d6bcfc..17f5edd9ad 100644 --- a/plugins/stack-overflow-backend/package.json +++ b/plugins/stack-overflow-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-stack-overflow-backend", - "version": "0.2.9-next.1", + "version": "0.2.10-next.2", "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 d0866a9211..cb9d27d7e1 100644 --- a/plugins/stack-overflow/CHANGELOG.md +++ b/plugins/stack-overflow/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-stack-overflow +## 0.1.21-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/plugin-search-react@1.7.1-next.2 + - @backstage/theme@0.4.3-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-home-react@0.1.4-next.2 + - @backstage/plugin-search-common@1.2.7-next.0 + ## 0.1.21-next.1 ### Patch Changes diff --git a/plugins/stack-overflow/package.json b/plugins/stack-overflow/package.json index eef133b305..f6e8e86a70 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.21-next.1", + "version": "0.1.21-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/stackstorm/CHANGELOG.md b/plugins/stackstorm/CHANGELOG.md index 6734c7dd27..199e2e320e 100644 --- a/plugins/stackstorm/CHANGELOG.md +++ b/plugins/stackstorm/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-stackstorm +## 0.1.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/theme@0.4.3-next.0 + ## 0.1.7-next.1 ### Patch Changes diff --git a/plugins/stackstorm/package.json b/plugins/stackstorm/package.json index bd945feb36..1c6380da34 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.7-next.1", + "version": "0.1.7-next.2", "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 f8f70f1c0c..531e00b079 100644 --- a/plugins/tech-insights-backend-module-jsonfc/CHANGELOG.md +++ b/plugins/tech-insights-backend-module-jsonfc/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-tech-insights-backend-module-jsonfc +## 0.1.38-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/plugin-tech-insights-node@0.4.12-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-tech-insights-common@0.2.12 + ## 0.1.37-next.1 ### Patch Changes diff --git a/plugins/tech-insights-backend-module-jsonfc/package.json b/plugins/tech-insights-backend-module-jsonfc/package.json index bd7b2c2226..496b61cf7b 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.37-next.1", + "version": "0.1.38-next.2", "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 cbafe8f3b5..9a41dd8389 100644 --- a/plugins/tech-insights-backend/CHANGELOG.md +++ b/plugins/tech-insights-backend/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-tech-insights-backend +## 0.5.20-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-tasks@0.5.11-next.2 + - @backstage/plugin-tech-insights-node@0.4.12-next.2 + - @backstage/catalog-client@1.4.5-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-tech-insights-common@0.2.12 + ## 0.5.19-next.1 ### Patch Changes diff --git a/plugins/tech-insights-backend/package.json b/plugins/tech-insights-backend/package.json index a89907fd62..048ea64364 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.19-next.1", + "version": "0.5.20-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/tech-insights-backend/src/service/fact/FactRetrieverEngine.test.ts b/plugins/tech-insights-backend/src/service/fact/FactRetrieverEngine.test.ts index fe3c050e69..5473b28c62 100644 --- a/plugins/tech-insights-backend/src/service/fact/FactRetrieverEngine.test.ts +++ b/plugins/tech-insights-backend/src/service/fact/FactRetrieverEngine.test.ts @@ -64,15 +64,15 @@ const testFactRetriever: FactRetriever = { ]; }), }; + const defaultCadence = '1 * * * *'; + describe('FactRetrieverEngine', () => { let engine: FactRetrieverEngine; type FactSchemaAssertionCallback = ( factSchemaDefinition: FactSchemaDefinition, ) => void; - jest.setTimeout(15000); - type FactInsertionAssertionCallback = ({ facts, id, diff --git a/plugins/tech-insights-node/CHANGELOG.md b/plugins/tech-insights-node/CHANGELOG.md index 549c427075..fa99e50423 100644 --- a/plugins/tech-insights-node/CHANGELOG.md +++ b/plugins/tech-insights-node/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-tech-insights-node +## 0.4.12-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/backend-tasks@0.5.11-next.2 + - @backstage/config@1.1.1-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-tech-insights-common@0.2.12 + ## 0.4.11-next.1 ### Patch Changes diff --git a/plugins/tech-insights-node/package.json b/plugins/tech-insights-node/package.json index 980acd1a4b..1d72568bc9 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.11-next.1", + "version": "0.4.12-next.2", "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 053f9d97ed..ee64de0b64 100644 --- a/plugins/tech-insights/CHANGELOG.md +++ b/plugins/tech-insights/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-tech-insights +## 0.3.17-next.2 + +### Patch Changes + +- 21f409d776: Export `ScorecardInfo` and `ScorecardsList` components to be able to use manually queried check results directly. +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/theme@0.4.3-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-tech-insights-common@0.2.12 + ## 0.3.17-next.1 ### Patch Changes diff --git a/plugins/tech-insights/api-report.md b/plugins/tech-insights/api-report.md index 92f66c14b3..1e07c0fc69 100644 --- a/plugins/tech-insights/api-report.md +++ b/plugins/tech-insights/api-report.md @@ -68,6 +68,18 @@ export interface InsightFacts { // @public export const jsonRulesEngineCheckResultRenderer: CheckResultRenderer; +// @public (undocumented) +export const ScorecardInfo: (props: { + checkResults: CheckResult[]; + title: string; + description?: string | undefined; +}) => JSX_2.Element; + +// @public (undocumented) +export const ScorecardsList: (props: { + checkResults: CheckResult[]; +}) => JSX_2.Element; + // @public export interface TechInsightsApi { // (undocumented) diff --git a/plugins/tech-insights/package.json b/plugins/tech-insights/package.json index 142a24cb9b..a61e10878c 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.17-next.1", + "version": "0.3.17-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/tech-insights/src/index.ts b/plugins/tech-insights/src/index.ts index 9e075df038..e7659e39d4 100644 --- a/plugins/tech-insights/src/index.ts +++ b/plugins/tech-insights/src/index.ts @@ -17,6 +17,8 @@ export { techInsightsPlugin, EntityTechInsightsScorecardContent, EntityTechInsightsScorecardCard, + ScorecardInfo, + ScorecardsList, } from './plugin'; export { techInsightsApiRef, TechInsightsClient } from './api'; diff --git a/plugins/tech-insights/src/plugin.ts b/plugins/tech-insights/src/plugin.ts index 961519cd97..412d2a0a1d 100644 --- a/plugins/tech-insights/src/plugin.ts +++ b/plugins/tech-insights/src/plugin.ts @@ -42,6 +42,30 @@ export const techInsightsPlugin = createPlugin({ }, }); +/** + * @public + */ +export const ScorecardInfo = techInsightsPlugin.provide( + createRoutableExtension({ + name: 'ScorecardInfo', + component: () => + import('./components/ScorecardsInfo').then(m => m.ScorecardInfo), + mountPoint: rootRouteRef, + }), +); + +/** + * @public + */ +export const ScorecardsList = techInsightsPlugin.provide( + createRoutableExtension({ + name: 'ScorecardsList', + component: () => + import('./components/ScorecardsList').then(m => m.ScorecardsList), + mountPoint: rootRouteRef, + }), +); + /** * @public */ diff --git a/plugins/tech-radar/CHANGELOG.md b/plugins/tech-radar/CHANGELOG.md index a7684ba5c8..b182aa25a9 100644 --- a/plugins/tech-radar/CHANGELOG.md +++ b/plugins/tech-radar/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-tech-radar +## 0.6.9-next.2 + +### Patch Changes + +- 0b55f773a7: Removed some unused dependencies +- Updated dependencies + - @backstage/frontend-plugin-api@0.2.0-next.2 + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/theme@0.4.3-next.0 + ## 0.6.9-next.1 ### Patch Changes diff --git a/plugins/tech-radar/package.json b/plugins/tech-radar/package.json index e99565bb67..9f8e609784 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.9-next.1", + "version": "0.6.9-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -56,7 +56,6 @@ "@types/react": "^16.13.1 || ^17.0.0", "color": "^4.0.1", "d3-force": "^3.0.0", - "prop-types": "^15.7.2", "react-use": "^17.2.4" }, "peerDependencies": { diff --git a/plugins/techdocs-addons-test-utils/CHANGELOG.md b/plugins/techdocs-addons-test-utils/CHANGELOG.md index ea84b35661..321bf0737e 100644 --- a/plugins/techdocs-addons-test-utils/CHANGELOG.md +++ b/plugins/techdocs-addons-test-utils/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-techdocs-addons-test-utils +## 1.0.22-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-app-api@1.11.0-next.2 + - @backstage/plugin-techdocs@1.7.1-next.2 + - @backstage/integration-react@1.1.20-next.2 + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/plugin-catalog@1.14.0-next.2 + - @backstage/plugin-search-react@1.7.1-next.2 + - @backstage/theme@0.4.3-next.0 + - @backstage/test-utils@1.4.4-next.2 + - @backstage/plugin-techdocs-react@1.1.12-next.2 + ## 1.0.22-next.1 ### Patch Changes diff --git a/plugins/techdocs-addons-test-utils/package.json b/plugins/techdocs-addons-test-utils/package.json index 3a0f83ad6f..e2effefaef 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.22-next.1", + "version": "1.0.22-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/techdocs-backend/CHANGELOG.md b/plugins/techdocs-backend/CHANGELOG.md index 2723867071..caa2e42dcf 100644 --- a/plugins/techdocs-backend/CHANGELOG.md +++ b/plugins/techdocs-backend/CHANGELOG.md @@ -1,5 +1,32 @@ # @backstage/plugin-techdocs-backend +## 1.8.0-next.2 + +### Minor Changes + +- 344cfbcfbc: Allow prepared directory clean up for custom preparers + + When using custom preparer for TechDocs, the `preparedDir` might + end up taking disk space. This requires all custom preparers to + implement a new method `shouldCleanPreparedDirectory` which indicates + whether the prepared directory should be cleaned after generation. + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-techdocs-node@1.9.0-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/integration@1.7.1-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/plugin-search-backend-module-techdocs@0.1.10-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/catalog-client@1.4.5-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-catalog-common@1.0.17-next.0 + - @backstage/plugin-permission-common@0.7.9-next.0 + - @backstage/plugin-search-common@1.2.7-next.0 + ## 1.7.2-next.1 ### Patch Changes diff --git a/plugins/techdocs-backend/package.json b/plugins/techdocs-backend/package.json index 821457e518..3c247508ef 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.7.2-next.1", + "version": "1.8.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/techdocs-backend/src/DocsBuilder/builder.ts b/plugins/techdocs-backend/src/DocsBuilder/builder.ts index b4c2d2ee26..84160ec8df 100644 --- a/plugins/techdocs-backend/src/DocsBuilder/builder.ts +++ b/plugins/techdocs-backend/src/DocsBuilder/builder.ts @@ -14,8 +14,8 @@ * limitations under the License. */ import { - Entity, DEFAULT_NAMESPACE, + Entity, stringifyEntityRef, } from '@backstage/catalog-model'; import { Config } from '@backstage/config'; @@ -28,7 +28,6 @@ import { PreparerBase, PreparerBuilder, PublisherBase, - UrlPreparer, } from '@backstage/plugin-techdocs-node'; import fs from 'fs-extra'; import os from 'os'; @@ -194,7 +193,7 @@ export class DocsBuilder { // Remove Prepared directory since it is no longer needed. // Caveat: Can not remove prepared directory in case of git preparer since the // local git repository is used to get etag on subsequent requests. - if (this.preparer instanceof UrlPreparer) { + if (this.preparer.shouldCleanPreparedDirectory()) { this.logger.debug( `Removing prepared directory ${preparedDir} since the site has been generated`, ); diff --git a/plugins/techdocs-module-addons-contrib/CHANGELOG.md b/plugins/techdocs-module-addons-contrib/CHANGELOG.md index 3b4c893faa..fe8fd1834c 100644 --- a/plugins/techdocs-module-addons-contrib/CHANGELOG.md +++ b/plugins/techdocs-module-addons-contrib/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-techdocs-module-addons-contrib +## 1.1.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/integration-react@1.1.20-next.2 + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/integration@1.7.1-next.1 + - @backstage/theme@0.4.3-next.0 + - @backstage/plugin-techdocs-react@1.1.12-next.2 + ## 1.1.1-next.1 ### Patch Changes diff --git a/plugins/techdocs-module-addons-contrib/package.json b/plugins/techdocs-module-addons-contrib/package.json index 53ccd6c244..ec8d9f3299 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.1-next.1", + "version": "1.1.1-next.2", "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 a385a83136..91290cc550 100644 --- a/plugins/techdocs-node/CHANGELOG.md +++ b/plugins/techdocs-node/CHANGELOG.md @@ -1,5 +1,29 @@ # @backstage/plugin-techdocs-node +## 1.9.0-next.2 + +### Minor Changes + +- 344cfbcfbc: Allow prepared directory clean up for custom preparers + + When using custom preparer for TechDocs, the `preparedDir` might + end up taking disk space. This requires all custom preparers to + implement a new method `shouldCleanPreparedDirectory` which indicates + whether the prepared directory should be cleaned after generation. + +- d06b30b050: Add possibility to use a mkdocs config file with a different name than `mkdocs. with the serve command using the `--mkdocs-config-file-name` argument + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/integration@1.7.1-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/integration-aws-node@0.1.7-next.0 + - @backstage/plugin-search-common@1.2.7-next.0 + ## 1.8.2-next.1 ### Patch Changes diff --git a/plugins/techdocs-node/api-report.md b/plugins/techdocs-node/api-report.md index b7941ac89a..656db6ae36 100644 --- a/plugins/techdocs-node/api-report.md +++ b/plugins/techdocs-node/api-report.md @@ -21,6 +21,7 @@ import { Writable } from 'stream'; export class DirectoryPreparer implements PreparerBase { static fromConfig(config: Config, options: PreparerConfig): DirectoryPreparer; prepare(entity: Entity, options?: PreparerOptions): Promise; + shouldCleanPreparedDirectory(): boolean; } // @public @@ -88,9 +89,10 @@ export const getLocationForEntity: ( // @public @deprecated (undocumented) export const getMkDocsYml: ( inputDir: string, - siteOptions?: + options?: | { name?: string | undefined; + mkdocsConfigFileName?: string | undefined; } | undefined, ) => Promise<{ @@ -102,8 +104,9 @@ export const getMkDocsYml: ( // @public export const getMkdocsYml: ( inputDir: string, - siteOptions?: { + options?: { name?: string; + mkdocsConfigFileName?: string; }, ) => Promise<{ path: string; @@ -132,6 +135,7 @@ export const parseReferenceAnnotation: ( // @public export type PreparerBase = { prepare(entity: Entity, options?: PreparerOptions): Promise; + shouldCleanPreparedDirectory(): boolean; }; // @public @@ -274,5 +278,6 @@ export const transformDirLocation: ( export class UrlPreparer implements PreparerBase { static fromConfig(options: PreparerConfig): UrlPreparer; prepare(entity: Entity, options?: PreparerOptions): Promise; + shouldCleanPreparedDirectory(): boolean; } ``` diff --git a/plugins/techdocs-node/package.json b/plugins/techdocs-node/package.json index f49ecf1baa..4ec11fde71 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.8.2-next.1", + "version": "1.9.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { @@ -63,17 +63,16 @@ "js-yaml": "^4.0.0", "json5": "^2.1.3", "mime-types": "^2.1.27", - "mock-fs": "^5.2.0", "p-limit": "^3.1.0", "recursive-readdir": "^2.2.2", "winston": "^3.2.1" }, "devDependencies": { + "@backstage/backend-test-utils": "workspace:^", "@backstage/cli": "workspace:^", "@types/fs-extra": "^9.0.5", "@types/js-yaml": "^4.0.0", "@types/mime-types": "^2.1.0", - "@types/mock-fs": "^4.13.0", "@types/recursive-readdir": "^2.2.0", "@types/supertest": "^2.0.8", "aws-sdk-client-mock": "^2.0.0", diff --git a/plugins/techdocs-node/src/stages/generate/helpers.test.ts b/plugins/techdocs-node/src/stages/generate/helpers.test.ts index 4d422d7125..738bb6fc46 100644 --- a/plugins/techdocs-node/src/stages/generate/helpers.test.ts +++ b/plugins/techdocs-node/src/stages/generate/helpers.test.ts @@ -17,9 +17,8 @@ import { getVoidLogger } from '@backstage/backend-common'; import { ConfigReader } from '@backstage/config'; import { ScmIntegrations } from '@backstage/integration'; +import { createMockDirectory } from '@backstage/backend-test-utils'; import fs from 'fs-extra'; -import mockFs from 'mock-fs'; -import os from 'os'; import path, { resolve as resolvePath } from 'path'; import { ParsedLocationAnnotation } from '../../helpers'; import { @@ -88,14 +87,12 @@ const mkdocsYmlWithEnvTag = fs.readFileSync( const mockLogger = getVoidLogger(); const warn = jest.spyOn(mockLogger, 'warn'); -const rootDir = os.platform() === 'win32' ? 'C:\\rootDir' : '/rootDir'; - const scmIntegrations = ScmIntegrations.fromConfig(new ConfigReader({})); describe('helpers', () => { - afterEach(() => { - mockFs.restore(); - }); + const mockDir = createMockDirectory(); + + afterEach(mockDir.clear); describe('getGeneratorKey', () => { it('should return techdocs as the only generator key', () => { @@ -188,13 +185,13 @@ describe('helpers', () => { describe('patchMkdocsYmlPreBuild', () => { beforeEach(() => { - mockFs({ - '/mkdocs.yml': mkdocsYml, - '/mkdocs_default.yml': mkdocsDefaultYml, - '/mkdocs_with_repo_url.yml': mkdocsYmlWithRepoUrl, - '/mkdocs_with_edit_uri.yml': mkdocsYmlWithEditUri, - '/mkdocs_with_extensions.yml': mkdocsYmlWithExtensions, - '/mkdocs_with_comments.yml': mkdocsYmlWithComments, + mockDir.setContent({ + 'mkdocs.yml': mkdocsYml, + 'mkdocs_default.yml': mkdocsDefaultYml, + 'mkdocs_with_repo_url.yml': mkdocsYmlWithRepoUrl, + 'mkdocs_with_edit_uri.yml': mkdocsYmlWithEditUri, + 'mkdocs_with_extensions.yml': mkdocsYmlWithExtensions, + 'mkdocs_with_comments.yml': mkdocsYmlWithComments, }); }); @@ -205,13 +202,13 @@ describe('helpers', () => { }; await patchMkdocsYmlPreBuild( - '/mkdocs.yml', + mockDir.resolve('mkdocs.yml'), mockLogger, parsedLocationAnnotation, scmIntegrations, ); - const updatedMkdocsYml = await fs.readFile('/mkdocs.yml'); + const updatedMkdocsYml = await fs.readFile(mockDir.resolve('mkdocs.yml')); expect(updatedMkdocsYml.toString()).toContain( 'repo_url: https://github.com/backstage/backstage', @@ -225,13 +222,15 @@ describe('helpers', () => { }; await patchMkdocsYmlPreBuild( - '/mkdocs_with_extensions.yml', + mockDir.resolve('mkdocs_with_extensions.yml'), mockLogger, parsedLocationAnnotation, scmIntegrations, ); - const updatedMkdocsYml = await fs.readFile('/mkdocs_with_extensions.yml'); + const updatedMkdocsYml = await fs.readFile( + mockDir.resolve('mkdocs_with_extensions.yml'), + ); expect(updatedMkdocsYml.toString()).toContain( 'repo_url: https://github.com/backstage/backstage', @@ -248,13 +247,15 @@ describe('helpers', () => { }; await patchMkdocsYmlPreBuild( - '/mkdocs_with_repo_url.yml', + mockDir.resolve('mkdocs_with_repo_url.yml'), mockLogger, parsedLocationAnnotation, scmIntegrations, ); - const updatedMkdocsYml = await fs.readFile('/mkdocs_with_repo_url.yml'); + const updatedMkdocsYml = await fs.readFile( + mockDir.resolve('mkdocs_with_repo_url.yml'), + ); expect(updatedMkdocsYml.toString()).toContain( 'repo_url: https://github.com/backstage/backstage', @@ -271,13 +272,15 @@ describe('helpers', () => { }; await patchMkdocsYmlPreBuild( - '/mkdocs_with_edit_uri.yml', + mockDir.resolve('mkdocs_with_edit_uri.yml'), mockLogger, parsedLocationAnnotation, scmIntegrations, ); - const updatedMkdocsYml = await fs.readFile('/mkdocs_with_edit_uri.yml'); + const updatedMkdocsYml = await fs.readFile( + mockDir.resolve('mkdocs_with_edit_uri.yml'), + ); expect(updatedMkdocsYml.toString()).toContain( 'edit_uri: https://github.com/backstage/backstage/edit/main/docs', @@ -294,13 +297,15 @@ describe('helpers', () => { }; await patchMkdocsYmlPreBuild( - '/mkdocs_with_comments.yml', + mockDir.resolve('mkdocs_with_comments.yml'), mockLogger, parsedLocationAnnotation, scmIntegrations, ); - const updatedMkdocsYml = await fs.readFile('/mkdocs_with_comments.yml'); + const updatedMkdocsYml = await fs.readFile( + mockDir.resolve('mkdocs_with_comments.yml'), + ); expect(updatedMkdocsYml.toString()).toContain( '# This is a comment that is removed after editing', @@ -312,20 +317,20 @@ describe('helpers', () => { describe('patchMkdocsYmlWithPlugins', () => { beforeEach(() => { - mockFs({ - '/mkdocs_with_techdocs_plugin.yml': mkdocsYmlWithTechdocsPlugins, - '/mkdocs_without_plugins.yml': mkdocsYmlWithoutPlugins, - '/mkdocs_with_additional_plugins.yml': mkdocsYmlWithAdditionalPlugins, + mockDir.setContent({ + 'mkdocs_with_techdocs_plugin.yml': mkdocsYmlWithTechdocsPlugins, + 'mkdocs_without_plugins.yml': mkdocsYmlWithoutPlugins, + 'mkdocs_with_additional_plugins.yml': mkdocsYmlWithAdditionalPlugins, }); }); it('should not add additional plugins if techdocs exists already in mkdocs file', async () => { await patchMkdocsYmlWithPlugins( - '/mkdocs_with_techdocs_plugin.yml', + mockDir.resolve('mkdocs_with_techdocs_plugin.yml'), mockLogger, ); const updatedMkdocsYml = await fs.readFile( - '/mkdocs_with_techdocs_plugin.yml', + mockDir.resolve('mkdocs_with_techdocs_plugin.yml'), ); const parsedYml = yaml.load(updatedMkdocsYml.toString()) as { plugins: string[]; @@ -335,11 +340,13 @@ describe('helpers', () => { }); it("should add the needed plugin if it doesn't exist in mkdocs file", async () => { await patchMkdocsYmlWithPlugins( - '/mkdocs_without_plugins.yml', + mockDir.resolve('mkdocs_without_plugins.yml'), mockLogger, ); - const updatedMkdocsYml = await fs.readFile('/mkdocs_without_plugins.yml'); + const updatedMkdocsYml = await fs.readFile( + mockDir.resolve('mkdocs_without_plugins.yml'), + ); const parsedYml = yaml.load(updatedMkdocsYml.toString()) as { plugins: string[]; }; @@ -348,11 +355,11 @@ describe('helpers', () => { }); it('should not override existing plugins', async () => { await patchMkdocsYmlWithPlugins( - '/mkdocs_with_additional_plugins.yml', + mockDir.resolve('mkdocs_with_additional_plugins.yml'), mockLogger, ); const updatedMkdocsYml = await fs.readFile( - '/mkdocs_with_additional_plugins.yml', + mockDir.resolve('mkdocs_with_additional_plugins.yml'), ); const parsedYml = yaml.load(updatedMkdocsYml.toString()) as { plugins: string[]; @@ -364,13 +371,13 @@ describe('helpers', () => { }); it('should add all provided default plugins', async () => { await patchMkdocsYmlWithPlugins( - '/mkdocs_with_additional_plugins.yml', + mockDir.resolve('mkdocs_with_additional_plugins.yml'), mockLogger, ['techdocs-core', 'custom-plugin'], ); const updatedMkdocsYml = await fs.readFile( - '/mkdocs_with_additional_plugins.yml', + mockDir.resolve('mkdocs_with_additional_plugins.yml'), ); const parsedYml = yaml.load(updatedMkdocsYml.toString()) as { plugins: string[]; @@ -386,45 +393,45 @@ describe('helpers', () => { warn.mockClear(); }); it('should have no effect if docs/index.md exists', async () => { - mockFs({ - '/docs/index.md': 'index.md content', - '/docs/README.md': 'docs/README.md content', + mockDir.setContent({ + 'docs/index.md': 'index.md content', + 'docs/README.md': 'docs/README.md content', }); - await patchIndexPreBuild({ inputDir: '/', logger: mockLogger }); + await patchIndexPreBuild({ inputDir: mockDir.path, logger: mockLogger }); - await expect(fs.readFile('/docs/index.md', 'utf-8')).resolves.toEqual( - 'index.md content', - ); + await expect( + fs.readFile(mockDir.resolve('docs/index.md'), 'utf-8'), + ).resolves.toEqual('index.md content'); expect(warn).not.toHaveBeenCalledWith(); }); it("should use docs/README.md if docs/index.md doesn't exists", async () => { - mockFs({ - '/docs/README.md': 'docs/README.md content', - '/README.md': 'main README.md content', + mockDir.setContent({ + 'docs/README.md': 'docs/README.md content', + 'README.md': 'main README.md content', }); - await patchIndexPreBuild({ inputDir: '/', logger: mockLogger }); + await patchIndexPreBuild({ inputDir: mockDir.path, logger: mockLogger }); - await expect(fs.readFile('/docs/index.md', 'utf-8')).resolves.toEqual( - 'docs/README.md content', - ); + await expect( + fs.readFile(mockDir.resolve('docs/index.md'), 'utf-8'), + ).resolves.toEqual('docs/README.md content'); expect(warn.mock.calls).toEqual([ [`${path.normalize('docs/index.md')} not found.`], ]); }); it('should use README.md if neither docs/index.md or docs/README.md exist', async () => { - mockFs({ - '/README.md': 'main README.md content', + mockDir.setContent({ + 'README.md': 'main README.md content', }); - await patchIndexPreBuild({ inputDir: '/', logger: mockLogger }); + await patchIndexPreBuild({ inputDir: mockDir.path, logger: mockLogger }); - await expect(fs.readFile('/docs/index.md', 'utf-8')).resolves.toEqual( - 'main README.md content', - ); + await expect( + fs.readFile(mockDir.resolve('docs/index.md'), 'utf-8'), + ).resolves.toEqual('main README.md content'); expect(warn.mock.calls).toEqual([ [`${path.normalize('docs/index.md')} not found.`], [`${path.normalize('docs/README.md')} not found.`], @@ -433,11 +440,13 @@ describe('helpers', () => { }); it('should not use any file as index.md if no one matches the requirements', async () => { - mockFs({}); + mockDir.setContent({}); - await patchIndexPreBuild({ inputDir: '/', logger: mockLogger }); + await patchIndexPreBuild({ inputDir: mockDir.path, logger: mockLogger }); - await expect(fs.readFile('/docs/index.md', 'utf-8')).rejects.toThrow(); + await expect( + fs.readFile(mockDir.resolve('docs/index.md'), 'utf-8'), + ).rejects.toThrow(); const paths = [ path.normalize('docs/index.md'), path.normalize('docs/README.md'), @@ -449,7 +458,7 @@ describe('helpers', () => { ...paths.map(p => [`${p} not found.`]), [ `Could not find any techdocs' index file. Please make sure at least one of ${paths - .map(p => path.sep + p) + .map(p => mockDir.resolve(p)) .join(' ')} exists.`, ], ]); @@ -463,13 +472,11 @@ describe('helpers', () => { }; beforeEach(() => { - mockFs({ - [rootDir]: mockFiles, - }); + mockDir.setContent(mockFiles); }); it('should create the file if it does not exist', async () => { - const filePath = path.join(rootDir, 'wrong_techdocs_metadata.json'); + const filePath = mockDir.resolve('wrong_techdocs_metadata.json'); await createOrUpdateMetadata(filePath, mockLogger); // Check if the file exists @@ -479,7 +486,7 @@ describe('helpers', () => { }); it('should throw error when the JSON is invalid', async () => { - const filePath = path.join(rootDir, 'invalid_techdocs_metadata.json'); + const filePath = mockDir.resolve('invalid_techdocs_metadata.json'); await expect( createOrUpdateMetadata(filePath, mockLogger), @@ -487,7 +494,7 @@ describe('helpers', () => { }); it('should add build timestamp to the metadata json', async () => { - const filePath = path.join(rootDir, 'techdocs_metadata.json'); + const filePath = mockDir.resolve('techdocs_metadata.json'); await createOrUpdateMetadata(filePath, mockLogger); @@ -496,7 +503,7 @@ describe('helpers', () => { }); it('should add list of files to the metadata json', async () => { - const filePath = path.join(rootDir, 'techdocs_metadata.json'); + const filePath = mockDir.resolve('techdocs_metadata.json'); await createOrUpdateMetadata(filePath, mockLogger); @@ -508,16 +515,14 @@ describe('helpers', () => { describe('storeEtagMetadata', () => { beforeEach(() => { - mockFs({ - [rootDir]: { - 'invalid_techdocs_metadata.json': 'dsds', - 'techdocs_metadata.json': '{"site_name": "Tech Docs"}', - }, + mockDir.setContent({ + 'invalid_techdocs_metadata.json': 'dsds', + 'techdocs_metadata.json': '{"site_name": "Tech Docs"}', }); }); it('should throw error when the JSON is invalid', async () => { - const filePath = path.join(rootDir, 'invalid_techdocs_metadata.json'); + const filePath = mockDir.resolve('invalid_techdocs_metadata.json'); await expect(storeEtagMetadata(filePath, 'etag123abc')).rejects.toThrow( 'Unexpected token', @@ -525,7 +530,7 @@ describe('helpers', () => { }); it('should add etag to the metadata json', async () => { - const filePath = path.join(rootDir, 'techdocs_metadata.json'); + const filePath = mockDir.resolve('techdocs_metadata.json'); await storeEtagMetadata(filePath, 'etag123abc'); @@ -535,65 +540,89 @@ describe('helpers', () => { }); describe('getMkdocsYml', () => { - const inputDir = resolvePath(__filename, '../__fixtures__/'); - const siteOptions = { + const defaultOptions = { name: mockEntity.metadata.title, }; it('returns expected contents when .yml file is present', async () => { - const key = path.join(inputDir, 'mkdocs.yml'); - mockFs({ [key]: mkdocsYml }); + mockDir.setContent({ 'mkdocs.yml': mkdocsYml }); const { path: mkdocsPath, content, configIsTemporary, - } = await getMkdocsYml(inputDir, siteOptions); + } = await getMkdocsYml(mockDir.path, defaultOptions); - expect(mkdocsPath).toBe(key); + expect(mkdocsPath).toBe(mockDir.resolve('mkdocs.yml')); expect(content).toBe(mkdocsYml.toString()); expect(configIsTemporary).toBe(false); }); it('returns expected contents when .yaml file is present', async () => { - const key = path.join(inputDir, 'mkdocs.yaml'); - mockFs({ [key]: mkdocsYml }); + mockDir.setContent({ 'mkdocs.yaml': mkdocsYml }); const { path: mkdocsPath, content, configIsTemporary, - } = await getMkdocsYml(inputDir, siteOptions); - expect(mkdocsPath).toBe(key); + } = await getMkdocsYml(mockDir.path, defaultOptions); + expect(mkdocsPath).toBe(mockDir.resolve('mkdocs.yaml')); expect(content).toBe(mkdocsYml.toString()); expect(configIsTemporary).toBe(false); }); it('returns expected contents when default file is present', async () => { - const defaultSiteOptions = { + const options = { name: 'Default Test site name', }; - const key = path.join(inputDir, 'mkdocs.yml'); const mockPathExists = jest.spyOn(fs, 'pathExists'); mockPathExists.mockImplementation(() => Promise.resolve(false)); - mockFs({ [key]: mkdocsDefaultYml }); + mockDir.setContent({ 'mkdocs.yml': mkdocsDefaultYml }); const { path: mkdocsPath, content, configIsTemporary, - } = await getMkdocsYml(inputDir, defaultSiteOptions); + } = await getMkdocsYml(mockDir.path, options); - expect(mkdocsPath).toBe(key); + expect(mkdocsPath).toBe(mockDir.resolve('mkdocs.yml')); expect(content.split(/[\r\n]+/g)).toEqual( mkdocsDefaultYml.toString().split(/[\r\n]+/g), ); expect(configIsTemporary).toBe(true); + mockPathExists.mockRestore(); }); it('throws when neither .yml nor .yaml nor default file is present', async () => { const invalidInputDir = resolvePath(__filename); - await expect(getMkdocsYml(invalidInputDir, siteOptions)).rejects.toThrow( + await expect( + getMkdocsYml(invalidInputDir, defaultOptions), + ).rejects.toThrow( /Could not read MkDocs YAML config file mkdocs.yml or mkdocs.yaml or default for validation/, ); }); + + it('returns expected content when custom file is specified', async () => { + const options = { mkdocsConfigFileName: 'another-name.yaml' }; + mockDir.setContent({ 'another-name.yaml': mkdocsYml }); + + const { + path: mkdocsPath, + content, + configIsTemporary, + } = await getMkdocsYml(mockDir.path, options); + + expect(mkdocsPath).toBe(mockDir.resolve('another-name.yaml')); + + expect(content).toBe(mkdocsYml.toString()); + expect(configIsTemporary).toBe(false); + }); + + it('throws when specifying a specific mkdocs config file that does not exist', async () => { + const options = { mkdocsConfigFileName: 'another-name.yaml' }; + mockDir.setContent({ 'mkdocs.yml': mkdocsDefaultYml }); + + await expect(getMkdocsYml(mockDir.path, options)).rejects.toThrow( + /The specified file .* does not exist/, + ); + }); }); describe('validateMkdocsYaml', () => { diff --git a/plugins/techdocs-node/src/stages/generate/helpers.ts b/plugins/techdocs-node/src/stages/generate/helpers.ts index e16293f906..1450a4afba 100644 --- a/plugins/techdocs-node/src/stages/generate/helpers.ts +++ b/plugins/techdocs-node/src/stages/generate/helpers.ts @@ -185,21 +185,35 @@ export const generateMkdocsYml = async ( }; /** - * Finds and loads the contents of either an mkdocs.yml or mkdocs.yaml file, - * depending on which is present (MkDocs supports both as of v1.2.2). + * Finds and loads the contents of an mkdocs.yml, mkdocs.yaml file, a file + * with a specified name or an ad-hoc created file with minimal config. * @public * * @param inputDir - base dir to be searched for either an mkdocs.yml or mkdocs.yaml file. - * @param siteOptions - options for the site: `name` property will be used in mkdocs.yml for the - * required `site_name` property, default value is "Documentation Site" + * @param options - name: default mkdocs site_name to be used with a ad hoc file default value is "Documentation Site" + * mkdocsConfigFileName (optional): a non-default file name to be used as the config */ export const getMkdocsYml = async ( inputDir: string, - siteOptions?: { name?: string }, + options?: { name?: string; mkdocsConfigFileName?: string }, ): Promise<{ path: string; content: string; configIsTemporary: boolean }> => { let mkdocsYmlPath: string; let mkdocsYmlFileString: string; try { + if (options?.mkdocsConfigFileName) { + mkdocsYmlPath = path.join(inputDir, options.mkdocsConfigFileName); + if (!(await fs.pathExists(mkdocsYmlPath))) { + throw new Error(`The specified file ${mkdocsYmlPath} does not exist`); + } + + mkdocsYmlFileString = await fs.readFile(mkdocsYmlPath, 'utf8'); + return { + path: mkdocsYmlPath, + content: mkdocsYmlFileString, + configIsTemporary: false, + }; + } + mkdocsYmlPath = path.join(inputDir, 'mkdocs.yaml'); if (await fs.pathExists(mkdocsYmlPath)) { mkdocsYmlFileString = await fs.readFile(mkdocsYmlPath, 'utf8'); @@ -221,7 +235,7 @@ export const getMkdocsYml = async ( } // No mkdocs file, generate it - await generateMkdocsYml(inputDir, siteOptions); + await generateMkdocsYml(inputDir, options); mkdocsYmlFileString = await fs.readFile(mkdocsYmlPath, 'utf8'); } catch (error) { throw new ForwardedError( diff --git a/plugins/techdocs-node/src/stages/prepare/dir.ts b/plugins/techdocs-node/src/stages/prepare/dir.ts index a2abf73d43..6be9510a51 100644 --- a/plugins/techdocs-node/src/stages/prepare/dir.ts +++ b/plugins/techdocs-node/src/stages/prepare/dir.ts @@ -60,6 +60,11 @@ export class DirectoryPreparer implements PreparerBase { this.scmIntegrations = ScmIntegrations.fromConfig(config); } + /** {@inheritDoc PreparerBase.shouldCleanPreparedDirectory} */ + shouldCleanPreparedDirectory() { + return false; + } + /** {@inheritDoc PreparerBase.prepare} */ async prepare( entity: Entity, diff --git a/plugins/techdocs-node/src/stages/prepare/types.ts b/plugins/techdocs-node/src/stages/prepare/types.ts index aee9d216ab..79cbf68a00 100644 --- a/plugins/techdocs-node/src/stages/prepare/types.ts +++ b/plugins/techdocs-node/src/stages/prepare/types.ts @@ -78,6 +78,11 @@ export type PreparerBase = { * @throws `NotModifiedError` when the prepared directory has not been changed since the last build. */ prepare(entity: Entity, options?: PreparerOptions): Promise; + + /** + * Indicates whether the prepared directory should be cleaned after generation. + */ + shouldCleanPreparedDirectory(): boolean; }; /** diff --git a/plugins/techdocs-node/src/stages/prepare/url.ts b/plugins/techdocs-node/src/stages/prepare/url.ts index 4bb5701e18..84ea1ccda0 100644 --- a/plugins/techdocs-node/src/stages/prepare/url.ts +++ b/plugins/techdocs-node/src/stages/prepare/url.ts @@ -47,6 +47,11 @@ export class UrlPreparer implements PreparerBase { this.reader = reader; } + /** {@inheritDoc PreparerBase.shouldCleanPreparedDirectory} */ + shouldCleanPreparedDirectory() { + return true; + } + /** {@inheritDoc PreparerBase.prepare} */ async prepare( entity: Entity, diff --git a/plugins/techdocs-node/src/stages/publish/awsS3.test.ts b/plugins/techdocs-node/src/stages/publish/awsS3.test.ts index f3b2162a6b..9a9c9b4542 100644 --- a/plugins/techdocs-node/src/stages/publish/awsS3.test.ts +++ b/plugins/techdocs-node/src/stages/publish/awsS3.test.ts @@ -35,16 +35,17 @@ import { import { mockClient, AwsClientStub } from 'aws-sdk-client-mock'; import express from 'express'; import request from 'supertest'; -import mockFs from 'mock-fs'; import path from 'path'; import fs from 'fs-extra'; import { AwsS3Publish } from './awsS3'; -import { storageRootDir } from '../../testUtils/StorageFilesMock'; import { Readable } from 'stream'; +import { createMockDirectory } from '@backstage/backend-test-utils'; const env = process.env; let s3Mock: AwsClientStub; +const mockDir = createMockDirectory(); + function getMockCredentialProvider(): Promise { return Promise.resolve({ sdkCredentialProvider: async () => { @@ -66,7 +67,7 @@ const getEntityRootDir = (entity: Entity) => { metadata: { namespace, name }, } = entity; - return path.join(storageRootDir, namespace || DEFAULT_NAMESPACE, kind, name); + return mockDir.resolve(namespace || DEFAULT_NAMESPACE, kind, name); }; class ErrorReadable extends Readable { @@ -182,27 +183,23 @@ describe('AwsS3Publish', () => { getMockCredentialProvider(), ); - mockFs({ + mockDir.setContent({ [directory]: files, }); - const { StorageFilesMock } = require('../../testUtils/StorageFilesMock'); - const storage = new StorageFilesMock(); - storage.emptyFiles(); - s3Mock = mockClient(S3Client); s3Mock.on(HeadObjectCommand).callsFake(input => { - if (!storage.fileExists(input.Key)) { + if (!fs.pathExistsSync(mockDir.resolve(input.Key))) { throw new Error('File does not exist'); } return {}; }); s3Mock.on(GetObjectCommand).callsFake(input => { - if (storage.fileExists(input.Key)) { + if (fs.pathExistsSync(mockDir.resolve(input.Key))) { return { - Body: Readable.from(storage.readFile(input.Key)), + Body: Readable.from(fs.readFileSync(mockDir.resolve(input.Key))), }; } @@ -237,12 +234,11 @@ describe('AwsS3Publish', () => { s3Mock.on(UploadPartCommand).rejects(); s3Mock.on(PutObjectCommand).callsFake(input => { - storage.writeFile(input.Key, input.Body); + mockDir.addContent({ [input.Key]: input.Body }); }); }); afterEach(() => { - mockFs.restore(); process.env = env; }); @@ -378,8 +374,7 @@ describe('AwsS3Publish', () => { }); it('should fail to publish a directory', async () => { - const wrongPathToGeneratedDirectory = path.join( - storageRootDir, + const wrongPathToGeneratedDirectory = mockDir.resolve( 'wrong', 'path', 'to', @@ -393,11 +388,9 @@ describe('AwsS3Publish', () => { directory: wrongPathToGeneratedDirectory, }); - await expect(fails).rejects.toMatchObject({ - message: expect.stringContaining( - 'Unable to upload file(s) to AWS S3. Error: Failed to read template directory: ENOENT, no such file or directory', - ), - }); + await expect(fails).rejects.toThrow( + `Unable to upload file(s) to AWS S3. Error: Failed to read template directory: ENOENT: no such file or directory, scandir '${wrongPathToGeneratedDirectory}'`, + ); await expect(fails).rejects.toMatchObject({ message: expect.stringContaining(wrongPathToGeneratedDirectory), diff --git a/plugins/techdocs-node/src/stages/publish/azureBlobStorage.test.ts b/plugins/techdocs-node/src/stages/publish/azureBlobStorage.test.ts index 01565aa2df..09b1fcfd31 100644 --- a/plugins/techdocs-node/src/stages/publish/azureBlobStorage.test.ts +++ b/plugins/techdocs-node/src/stages/publish/azureBlobStorage.test.ts @@ -19,7 +19,6 @@ import { Entity, DEFAULT_NAMESPACE } from '@backstage/catalog-model'; import { ConfigReader } from '@backstage/config'; import express from 'express'; import request from 'supertest'; -import mockFs from 'mock-fs'; import path from 'path'; import fs from 'fs-extra'; import { AzureBlobStoragePublish } from './azureBlobStorage'; @@ -28,10 +27,9 @@ import { BlobUploadCommonResponse, ContainerGetPropertiesResponse, } from '@azure/storage-blob'; -import { - storageRootDir, - StorageFilesMock, -} from '../../testUtils/StorageFilesMock'; +import { createMockDirectory } from '@backstage/backend-test-utils'; + +const mockDir = createMockDirectory(); jest.mock('@azure/identity', () => ({ __esModule: true, @@ -40,13 +38,12 @@ jest.mock('@azure/identity', () => ({ jest.mock('@azure/storage-blob', () => { class BlockBlobClient { - constructor( - private readonly blobName: string, - private readonly storage: StorageFilesMock, - ) {} + constructor(private readonly blobName: string) {} uploadFile(source: string): Promise { - this.storage.writeFile(this.blobName, source); + mockDir.addContent({ + [this.blobName]: fs.readFileSync(source, 'utf8'), + }); return Promise.resolve({ _response: { request: { @@ -59,14 +56,14 @@ jest.mock('@azure/storage-blob', () => { } exists() { - return this.storage.fileExists(this.blobName); + return fs.pathExistsSync(mockDir.resolve(this.blobName)); } download() { const emitter = new EventEmitter(); setTimeout(() => { - if (this.storage.fileExists(this.blobName)) { - emitter.emit('data', this.storage.readFile(this.blobName)); + if (fs.pathExistsSync(mockDir.resolve(this.blobName))) { + emitter.emit('data', fs.readFileSync(mockDir.resolve(this.blobName))); emitter.emit('end'); } else { emitter.emit( @@ -126,10 +123,7 @@ jest.mock('@azure/storage-blob', () => { } class ContainerClient { - constructor( - private readonly containerName: string, - protected readonly storage: StorageFilesMock, - ) {} + constructor(private readonly containerName: string) {} getProperties(): Promise { return Promise.resolve({ @@ -145,7 +139,7 @@ jest.mock('@azure/storage-blob', () => { } getBlockBlobClient(blobName: string) { - return new BlockBlobClient(blobName, this.storage); + return new BlockBlobClient(blobName); } listBlobsFlat() { @@ -180,31 +174,24 @@ jest.mock('@azure/storage-blob', () => { class ContainerClientFailUpload extends ContainerClient { getBlockBlobClient(blobName: string) { - return new BlockBlobClientFailUpload(blobName, this.storage); + return new BlockBlobClientFailUpload(blobName); } } class BlobServiceClient { - storage = new StorageFilesMock(); - constructor( public readonly url: string, private readonly credential?: StorageSharedKeyCredential, - ) { - this.storage.emptyFiles(); - } + ) {} getContainerClient(containerName: string) { if (containerName === 'bad_container') { - return new ContainerClientFailGetProperties( - containerName, - this.storage, - ); + return new ContainerClientFailGetProperties(containerName); } if (this.credential?.accountName === 'bad_account_credentials') { - return new ContainerClientFailUpload(containerName, this.storage); + return new ContainerClientFailUpload(containerName); } - return new ContainerClient(containerName, this.storage); + return new ContainerClient(containerName); } } @@ -231,7 +218,7 @@ const getEntityRootDir = (entity: Entity) => { metadata: { namespace, name }, } = entity; - return path.join(storageRootDir, namespace || DEFAULT_NAMESPACE, kind, name); + return mockDir.resolve(namespace || DEFAULT_NAMESPACE, kind, name); }; const logger = getVoidLogger(); @@ -314,15 +301,11 @@ describe('AzureBlobStoragePublish', () => { }; beforeEach(async () => { - mockFs({ + mockDir.setContent({ [directory]: files, }); }); - afterEach(() => { - mockFs.restore(); - }); - describe('getReadiness', () => { it('should validate correct config', async () => { const publisher = createPublisherFromConfig(); @@ -374,8 +357,7 @@ describe('AzureBlobStoragePublish', () => { }); it('should fail to publish a directory', async () => { - const wrongPathToGeneratedDirectory = path.join( - storageRootDir, + const wrongPathToGeneratedDirectory = mockDir.resolve( 'wrong', 'path', 'to', @@ -391,11 +373,9 @@ describe('AzureBlobStoragePublish', () => { directory: wrongPathToGeneratedDirectory, }); - await expect(fails).rejects.toMatchObject({ - message: expect.stringContaining( - 'Unable to upload file(s) to Azure. Error: Failed to read template directory: ENOENT, no such file or directory', - ), - }); + await expect(fails).rejects.toThrow( + `Unable to upload file(s) to Azure. Error: Failed to read template directory: ENOENT: no such file or directory, scandir '${wrongPathToGeneratedDirectory}'`, + ); await expect(fails).rejects.toMatchObject({ message: expect.stringContaining(wrongPathToGeneratedDirectory), diff --git a/plugins/techdocs-node/src/stages/publish/googleStorage.test.ts b/plugins/techdocs-node/src/stages/publish/googleStorage.test.ts index 4418e00c81..17bfb3e3c4 100644 --- a/plugins/techdocs-node/src/stages/publish/googleStorage.test.ts +++ b/plugins/techdocs-node/src/stages/publish/googleStorage.test.ts @@ -19,26 +19,21 @@ import { Entity, DEFAULT_NAMESPACE } from '@backstage/catalog-model'; import { ConfigReader } from '@backstage/config'; import express from 'express'; import request from 'supertest'; -import mockFs from 'mock-fs'; import path from 'path'; import fs from 'fs-extra'; import { Readable } from 'stream'; import { GoogleGCSPublish } from './googleStorage'; -import { - storageRootDir, - StorageFilesMock, -} from '../../testUtils/StorageFilesMock'; +import { createMockDirectory } from '@backstage/backend-test-utils'; + +const mockDir = createMockDirectory(); jest.mock('@google-cloud/storage', () => { class GCSFile { - constructor( - private readonly filePath: string, - private readonly storage: StorageFilesMock, - ) {} + constructor(private readonly filePath: string) {} exists() { return new Promise(async (resolve, reject) => { - if (this.storage.fileExists(this.filePath)) { + if (fs.pathExistsSync(mockDir.resolve(this.filePath))) { resolve([true]); } else { reject(); @@ -51,11 +46,14 @@ jest.mock('@google-cloud/storage', () => { readable._read = () => {}; process.nextTick(() => { - if (this.storage.fileExists(this.filePath)) { + if (fs.pathExistsSync(mockDir.resolve(this.filePath))) { if (readable.eventNames().includes('pipe')) { readable.emit('pipe'); } - readable.emit('data', this.storage.readFile(this.filePath)); + readable.emit( + 'data', + fs.readFileSync(mockDir.resolve(this.filePath)), + ); readable.emit('end'); } else { readable.emit( @@ -74,10 +72,7 @@ jest.mock('@google-cloud/storage', () => { } class Bucket { - constructor( - private readonly bucketName: string, - private readonly storage: StorageFilesMock, - ) {} + constructor(private readonly bucketName: string) {} async getMetadata() { if (this.bucketName === 'bad_bucket_name') { @@ -88,7 +83,9 @@ jest.mock('@google-cloud/storage', () => { upload(source: string, { destination }: { destination: string }) { return new Promise(async resolve => { - this.storage.writeFile(destination, source); + mockDir.addContent({ + [destination]: fs.readFileSync(source, 'utf8'), + }); resolve(null); }); } @@ -97,7 +94,7 @@ jest.mock('@google-cloud/storage', () => { if (this.bucketName === 'delete_stale_files_error') { throw Error('Message'); } - return new GCSFile(destinationFilePath, this.storage); + return new GCSFile(destinationFilePath); } getFilesStream() { @@ -119,14 +116,8 @@ jest.mock('@google-cloud/storage', () => { } class Storage { - storage = new StorageFilesMock(); - - constructor() { - this.storage.emptyFiles(); - } - bucket(bucketName: string) { - return new Bucket(bucketName, this.storage); + return new Bucket(bucketName); } } @@ -142,7 +133,7 @@ const getEntityRootDir = (entity: Entity) => { metadata: { namespace, name }, } = entity; - return path.join(storageRootDir, namespace || DEFAULT_NAMESPACE, kind, name); + return mockDir.resolve(namespace || DEFAULT_NAMESPACE, kind, name); }; const logger = getVoidLogger(); @@ -220,15 +211,11 @@ describe('GoogleGCSPublish', () => { }; beforeEach(() => { - mockFs({ + mockDir.setContent({ [directory]: files, }); }); - afterEach(() => { - mockFs.restore(); - }); - describe('getReadiness', () => { it('should validate correct config', async () => { const publisher = createPublisherFromConfig(); @@ -300,8 +287,7 @@ describe('GoogleGCSPublish', () => { }); it('should fail to publish a directory', async () => { - const wrongPathToGeneratedDirectory = path.join( - storageRootDir, + const wrongPathToGeneratedDirectory = mockDir.resolve( 'wrong', 'path', 'to', @@ -315,13 +301,9 @@ describe('GoogleGCSPublish', () => { directory: wrongPathToGeneratedDirectory, }); - // Can not do exact error message match due to mockFs adding unexpected characters in the path when throwing the error - // Issue reported https://github.com/tschaub/mock-fs/issues/118 - await expect(fails).rejects.toMatchObject({ - message: expect.stringContaining( - `Unable to upload file(s) to Google Cloud Storage. Error: Failed to read template directory: ENOENT, no such file or directory`, - ), - }); + await expect(fails).rejects.toThrow( + `Unable to upload file(s) to Google Cloud Storage. Error: Failed to read template directory: ENOENT: no such file or directory, scandir '${wrongPathToGeneratedDirectory}'`, + ); await expect(fails).rejects.toMatchObject({ message: expect.stringContaining(wrongPathToGeneratedDirectory), diff --git a/plugins/techdocs-node/src/stages/publish/helpers.test.ts b/plugins/techdocs-node/src/stages/publish/helpers.test.ts index 7b303b3bf5..2a74cbee61 100644 --- a/plugins/techdocs-node/src/stages/publish/helpers.test.ts +++ b/plugins/techdocs-node/src/stages/publish/helpers.test.ts @@ -13,9 +13,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import mockFs from 'mock-fs'; -import * as os from 'os'; -import * as path from 'path'; import { Entity, DEFAULT_NAMESPACE } from '@backstage/catalog-model'; import { getStaleFiles, @@ -27,6 +24,7 @@ import { lowerCaseEntityTripletInStoragePath, normalizeExternalStorageRootPath, } from './helpers'; +import { createMockDirectory } from '@backstage/backend-test-utils'; describe('getHeadersForFileExtension', () => { const correctMapOfExtensions = [ @@ -57,30 +55,24 @@ describe('getHeadersForFileExtension', () => { }); describe('getFileTreeRecursively', () => { - const root = os.platform() === 'win32' ? 'C:\\rootDir' : '/rootDir'; + const mockDir = createMockDirectory(); beforeEach(() => { - mockFs({ - [root]: { - file1: '', - subDirA: { - file2: '', - emptyDir1: mockFs.directory(), - }, - emptyDir2: mockFs.directory(), + mockDir.setContent({ + file1: '', + subDirA: { + file2: '', + emptyDir1: {}, }, + emptyDir2: {}, }); }); - afterEach(() => { - mockFs.restore(); - }); - it('returns complete file tree of a path', async () => { - const fileList = await getFileTreeRecursively(root); + const fileList = await getFileTreeRecursively(mockDir.path); expect(fileList.length).toBe(2); - expect(fileList).toContain(path.resolve(root, 'file1')); - expect(fileList).toContain(path.resolve(root, 'subDirA/file2')); + expect(fileList).toContain(mockDir.resolve('file1')); + expect(fileList).toContain(mockDir.resolve('subDirA/file2')); }); }); diff --git a/plugins/techdocs-node/src/stages/publish/local.test.ts b/plugins/techdocs-node/src/stages/publish/local.test.ts index c1a5f02d67..4019f80d11 100644 --- a/plugins/techdocs-node/src/stages/publish/local.test.ts +++ b/plugins/techdocs-node/src/stages/publish/local.test.ts @@ -16,15 +16,15 @@ import { getVoidLogger, PluginEndpointDiscovery, - resolvePackagePath, } from '@backstage/backend-common'; +import { overridePackagePathResolution } from '@backstage/backend-common/testUtils'; import { ConfigReader } from '@backstage/config'; import express from 'express'; import request from 'supertest'; -import mockFs from 'mock-fs'; import * as os from 'os'; import { LocalPublish } from './local'; import path from 'path'; +import { createMockDirectory } from '@backstage/backend-test-utils'; const createMockEntity = (annotations = {}, lowerCase = false) => { return { @@ -44,30 +44,28 @@ const testDiscovery: jest.Mocked = { getExternalBaseUrl: jest.fn(), }; +const mockPublishDir = createMockDirectory(); + +overridePackagePathResolution({ + packageName: '@backstage/plugin-techdocs-backend', + paths: { + 'static/docs': mockPublishDir.path, + }, +}); + const logger = getVoidLogger(); -const tmpDir = - os.platform() === 'win32' ? 'C:\\tmp\\generatedDir' : '/tmp/generatedDir'; - -const resolvedDir = resolvePackagePath( - '@backstage/plugin-techdocs-backend', - 'static/docs', -); - describe('local publisher', () => { + const mockDir = createMockDirectory(); + describe('publish', () => { beforeEach(() => { - mockFs({ - [tmpDir]: { - 'index.html': '', - }, + mockPublishDir.clear(); + mockDir.setContent({ + 'index.html': '', }); }); - afterEach(() => { - mockFs.restore(); - }); - it('should publish generated documentation dir', async () => { const mockConfig = new ConfigReader({}); @@ -79,7 +77,7 @@ describe('local publisher', () => { const mockEntity = createMockEntity(); const lowerMockEntity = createMockEntity(undefined, true); - await publisher.publish({ entity: mockEntity, directory: tmpDir }); + await publisher.publish({ entity: mockEntity, directory: mockDir.path }); expect(await publisher.hasDocsBeenGenerated(mockEntity)).toBe(true); @@ -102,12 +100,14 @@ describe('local publisher', () => { const mockEntity = createMockEntity(); const lowerMockEntity = createMockEntity(undefined, true); - await publisher.publish({ entity: mockEntity, directory: tmpDir }); + await publisher.publish({ entity: mockEntity, directory: mockDir.path }); expect(await publisher.hasDocsBeenGenerated(mockEntity)).toBe(true); // Lower/upper should be treated differently. - expect(await publisher.hasDocsBeenGenerated(lowerMockEntity)).toBe(false); + expect(await publisher.hasDocsBeenGenerated(lowerMockEntity)).toBe( + os.platform() === 'darwin', // MacOS is case-insensitive + ); }); it('should throw with unsafe triplet', async () => { @@ -126,7 +126,7 @@ describe('local publisher', () => { }; await expect(() => - publisher.publish({ entity: mockEntity, directory: tmpDir }), + publisher.publish({ entity: mockEntity, directory: mockDir.path }), ).rejects.toThrow('Unable to publish TechDocs site'); }); @@ -149,7 +149,7 @@ describe('local publisher', () => { }; await expect(() => - publisher.publish({ entity: mockEntity, directory: tmpDir }), + publisher.publish({ entity: mockEntity, directory: mockDir.path }), ).rejects.toThrow('Unable to publish TechDocs site'); }); }); @@ -165,25 +165,19 @@ describe('local publisher', () => { beforeEach(() => { app = express().use(publisher.docsRouter()); - mockFs({ - [resolvedDir]: { - 'unsafe.html': '', - 'unsafe.svg': '', - default: { - testkind: { - testname: { - 'index.html': 'found it', - }, + mockPublishDir.setContent({ + 'unsafe.html': '', + 'unsafe.svg': '', + default: { + testkind: { + testname: { + 'index.html': 'found it', }, }, }, }); }); - afterEach(() => { - mockFs.restore(); - }); - it('should pass text/plain content-type for unsafe types', async () => { const htmlResponse = await request(app).get(`/unsafe.html`); expect(htmlResponse.text).toEqual(''); @@ -228,7 +222,7 @@ describe('local publisher', () => { const response = await request(app).get( '/default/TestKind/TestName/index.html', ); - expect(response.status).toBe(404); + expect(response.status).toBe(os.platform() === 'darwin' ? 200 : 404); }); it('should work with a configured directory', async () => { @@ -236,15 +230,13 @@ describe('local publisher', () => { techdocs: { publisher: { local: { - publishDirectory: tmpDir, + publishDirectory: mockDir.path, }, }, }, }); - mockFs({ - [tmpDir]: { - 'index.html': 'found it', - }, + mockDir.setContent({ + 'index.html': 'found it', }); const legacyPublisher = LocalPublish.fromConfig( customConfig, diff --git a/plugins/techdocs-node/src/stages/publish/openStackSwift.test.ts b/plugins/techdocs-node/src/stages/publish/openStackSwift.test.ts index 49e68080df..93fe54ac27 100644 --- a/plugins/techdocs-node/src/stages/publish/openStackSwift.test.ts +++ b/plugins/techdocs-node/src/stages/publish/openStackSwift.test.ts @@ -23,13 +23,14 @@ import { import { ConfigReader } from '@backstage/config'; import express from 'express'; import request from 'supertest'; -import mockFs from 'mock-fs'; import fs from 'fs-extra'; import path from 'path'; import { OpenStackSwiftPublish } from './openStackSwift'; import { PublisherBase, TechDocsMetadata } from './types'; -import { storageRootDir } from '../../testUtils/StorageFilesMock'; import { Stream, Readable } from 'stream'; +import { createMockDirectory } from '@backstage/backend-test-utils'; + +const mockDir = createMockDirectory(); jest.mock('@trendyol-js/openstack-swift-sdk', () => { const { @@ -45,7 +46,7 @@ jest.mock('@trendyol-js/openstack-swift-sdk', () => { const checkFileExists = async (Key: string): Promise => { // Key will always have / as file separator irrespective of OS since cloud providers expects /. // Normalize Key to OS specific path before checking if file exists. - const filePath = path.join(storageRootDir, Key); + const filePath = mockDir.resolve(Key); try { await fs.access(filePath, fs.constants.F_OK); @@ -96,7 +97,7 @@ jest.mock('@trendyol-js/openstack-swift-sdk', () => { stream: Readable, ) { try { - const filePath = path.join(storageRootDir, destination); + const filePath = mockDir.resolve(destination); const fileBuffer = await streamToBuffer(stream); await fs.writeFile(filePath, fileBuffer); @@ -114,7 +115,7 @@ jest.mock('@trendyol-js/openstack-swift-sdk', () => { } async download(_containerName: string, file: string) { - const filePath = path.join(storageRootDir, file); + const filePath = mockDir.resolve(file); const fileExists = await checkFileExists(file); if (!fileExists) { return new NotFound(); @@ -151,7 +152,7 @@ const getEntityRootDir = (entity: Entity) => { metadata: { namespace, name }, } = entity; - return path.join(storageRootDir, namespace || DEFAULT_NAMESPACE, kind, name); + return mockDir.resolve(namespace || DEFAULT_NAMESPACE, kind, name); }; const getPosixEntityRootDir = (entity: Entity) => { @@ -193,11 +194,11 @@ beforeEach(() => { publisher = OpenStackSwiftPublish.fromConfig(mockConfig, logger); }); -afterEach(() => { - mockFs.restore(); -}); - describe('OpenStackSwiftPublish', () => { + afterEach(() => { + mockDir.clear(); + }); + describe('getReadiness', () => { it('should validate correct config', async () => { expect(await publisher.getReadiness()).toEqual({ @@ -239,7 +240,7 @@ describe('OpenStackSwiftPublish', () => { const entity = createMockEntity(); const entityRootDir = getEntityRootDir(entity); - mockFs({ + mockDir.setContent({ [entityRootDir]: { 'index.html': '', '404.html': '', @@ -254,12 +255,9 @@ describe('OpenStackSwiftPublish', () => { const entity = createMockEntity(); const entityRootDir = getEntityRootDir(entity); - expect( - await publisher.publish({ - entity, - directory: entityRootDir, - }), - ).toMatchObject({ + await expect( + publisher.publish({ entity, directory: entityRootDir }), + ).resolves.toMatchObject({ objects: expect.arrayContaining([ 'test-namespace/TestKind/test-component-name/404.html', `test-namespace/TestKind/test-component-name/index.html`, @@ -269,8 +267,7 @@ describe('OpenStackSwiftPublish', () => { }); it('should fail to publish a directory', async () => { - const wrongPathToGeneratedDirectory = path.join( - storageRootDir, + const wrongPathToGeneratedDirectory = mockDir.resolve( 'wrong', 'path', 'to', @@ -290,13 +287,9 @@ describe('OpenStackSwiftPublish', () => { directory: wrongPathToGeneratedDirectory, }); - // Can not do exact error message match due to mockFs adding unexpected characters in the path when throwing the error - // Issue reported https://github.com/tschaub/mock-fs/issues/118 - await expect(fails).rejects.toMatchObject({ - message: expect.stringContaining( - `Unable to upload file(s) to OpenStack Swift. Error: Failed to read template directory: ENOENT, no such file or directory`, - ), - }); + await expect(fails).rejects.toThrow( + `Unable to upload file(s) to OpenStack Swift. Error: Failed to read template directory: ENOENT: no such file or directory, scandir '${wrongPathToGeneratedDirectory}'`, + ); await expect(fails).rejects.toMatchObject({ message: expect.stringContaining(wrongPathToGeneratedDirectory), }); @@ -308,7 +301,7 @@ describe('OpenStackSwiftPublish', () => { const entity = createMockEntity(); const entityRootDir = getEntityRootDir(entity); - mockFs({ + mockDir.setContent({ [entityRootDir]: { 'index.html': 'file-content', }, @@ -330,7 +323,7 @@ describe('OpenStackSwiftPublish', () => { const entity = createMockEntity(); const entityRootDir = getEntityRootDir(entity); - mockFs({ + mockDir.setContent({ [entityRootDir]: { 'techdocs_metadata.json': '{"site_name": "backstage", "site_description": "site_content", "etag": "etag", "build_timestamp": 612741599}', @@ -353,7 +346,7 @@ describe('OpenStackSwiftPublish', () => { const entity = createMockEntity(); const entityRootDir = getEntityRootDir(entity); - mockFs({ + mockDir.setContent({ [entityRootDir]: { 'techdocs_metadata.json': `{'site_name': 'backstage', 'site_description': 'site_content', 'etag': 'etag', 'build_timestamp': 612741599}`, }, @@ -393,7 +386,7 @@ describe('OpenStackSwiftPublish', () => { beforeEach(() => { app = express().use(publisher.docsRouter()); - mockFs({ + mockDir.setContent({ [entityRootDir]: { html: { 'unsafe.html': '', diff --git a/plugins/techdocs-node/src/testUtils/StorageFilesMock.ts b/plugins/techdocs-node/src/testUtils/StorageFilesMock.ts deleted file mode 100644 index dd28110d00..0000000000 --- a/plugins/techdocs-node/src/testUtils/StorageFilesMock.ts +++ /dev/null @@ -1,61 +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 os from 'os'; -import path from 'path'; -import fs from 'fs-extra'; -import { IStorageFilesMock } from './types'; - -export const storageRootDir: string = - os.platform() === 'win32' ? 'C:\\rootDir' : '/rootDir'; - -const encoding = 'utf8'; - -export class StorageFilesMock implements IStorageFilesMock { - static rootDir = storageRootDir; - - private files: Record; - - constructor() { - this.files = {}; - } - - public emptyFiles(): void { - this.files = {}; - } - - public fileExists(targetPath: string): boolean { - const filePath = path.join(storageRootDir, targetPath); - const posixPath = filePath.split(path.posix.sep).join(path.sep); - return this.files[posixPath] !== undefined; - } - - public readFile(targetPath: string): Buffer { - const filePath = path.join(storageRootDir, targetPath); - return Buffer.from(this.files[filePath] ?? '', encoding); - } - - public writeFile(targetPath: string, sourcePath: string): void; - public writeFile(targetPath: string, sourceBuffer: Buffer): void; - public writeFile(targetPath: string, source: string | Buffer): void { - const filePath = path.join(storageRootDir, targetPath); - if (typeof source === 'string') { - this.files[filePath] = fs.readFileSync(source).toString(encoding); - } else { - this.files[filePath] = source.toString(encoding); - } - } -} diff --git a/plugins/techdocs-react/CHANGELOG.md b/plugins/techdocs-react/CHANGELOG.md index 3e502df15d..0d5aafecbc 100644 --- a/plugins/techdocs-react/CHANGELOG.md +++ b/plugins/techdocs-react/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-techdocs-react +## 1.1.12-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/version-bridge@1.0.5 + ## 1.1.12-next.1 ### Patch Changes diff --git a/plugins/techdocs-react/package.json b/plugins/techdocs-react/package.json index 64df90080d..4c2adf2ed0 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.12-next.1", + "version": "1.1.12-next.2", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/plugins/techdocs/CHANGELOG.md b/plugins/techdocs/CHANGELOG.md index c407d11028..8797b30bd2 100644 --- a/plugins/techdocs/CHANGELOG.md +++ b/plugins/techdocs/CHANGELOG.md @@ -1,5 +1,25 @@ # @backstage/plugin-techdocs +## 1.7.1-next.2 + +### Patch Changes + +- 3605370af6: Improved `DocsTable` to display pagination controls dynamically, appearing only when needed. +- Updated dependencies + - @backstage/frontend-plugin-api@0.2.0-next.2 + - @backstage/integration-react@1.1.20-next.2 + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/integration@1.7.1-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/plugin-search-react@1.7.1-next.2 + - @backstage/theme@0.4.3-next.0 + - @backstage/config@1.1.1-next.0 + - @backstage/plugin-search-common@1.2.7-next.0 + - @backstage/plugin-techdocs-react@1.1.12-next.2 + ## 1.7.1-next.1 ### Patch Changes diff --git a/plugins/techdocs/package.json b/plugins/techdocs/package.json index e7251a4eb2..45a51cbb5a 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.7.1-next.1", + "version": "1.7.1-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/techdocs/src/home/components/Tables/DocsTable.tsx b/plugins/techdocs/src/home/components/Tables/DocsTable.tsx index 03ba442578..89ee236029 100644 --- a/plugins/techdocs/src/home/components/Tables/DocsTable.tsx +++ b/plugins/techdocs/src/home/components/Tables/DocsTable.tsx @@ -95,14 +95,17 @@ export const DocsTable = (props: DocsTableProps) => { actionFactories.createCopyDocsUrlAction(copyToClipboard), ]; + const pageSize = 20; + const paging = documents && documents.length > pageSize; + return ( <> {loading || (documents && documents.length > 0) ? ( isLoading={loading} options={{ - paging: true, - pageSize: 20, + paging, + pageSize, search: true, actionsColumnIndex: -1, ...options, diff --git a/plugins/todo-backend/CHANGELOG.md b/plugins/todo-backend/CHANGELOG.md index 4cbf70e538..cb782356f8 100644 --- a/plugins/todo-backend/CHANGELOG.md +++ b/plugins/todo-backend/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-todo-backend +## 0.3.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/integration@1.7.1-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-openapi-utils@0.0.5-next.0 + - @backstage/plugin-catalog-node@1.4.7-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/catalog-client@1.4.5-next.0 + - @backstage/config@1.1.1-next.0 + ## 0.3.3-next.1 ### Patch Changes diff --git a/plugins/todo-backend/package.json b/plugins/todo-backend/package.json index c741984f2d..1df098c517 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.3-next.1", + "version": "0.3.4-next.2", "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 68efd13892..b091767889 100644 --- a/plugins/todo/CHANGELOG.md +++ b/plugins/todo/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-todo +## 0.2.28-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/theme@0.4.3-next.0 + ## 0.2.28-next.1 ### Patch Changes diff --git a/plugins/todo/package.json b/plugins/todo/package.json index b255744e12..e381077060 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.28-next.1", + "version": "0.2.28-next.2", "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 0dedc9dbce..9554c73992 100644 --- a/plugins/user-settings-backend/CHANGELOG.md +++ b/plugins/user-settings-backend/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-user-settings-backend +## 0.2.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/plugin-auth-node@0.4.0-next.2 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/types@1.1.1 + ## 0.2.3-next.1 ### Patch Changes diff --git a/plugins/user-settings-backend/package.json b/plugins/user-settings-backend/package.json index a8e8a711ae..eb1d08bbe2 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.3-next.1", + "version": "0.2.4-next.2", "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 dcd46282a1..3ba16ac03d 100644 --- a/plugins/user-settings/CHANGELOG.md +++ b/plugins/user-settings/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-user-settings +## 0.7.11-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-app-api@1.11.0-next.2 + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/theme@0.4.3-next.0 + - @backstage/types@1.1.1 + ## 0.7.11-next.1 ### Patch Changes diff --git a/plugins/user-settings/package.json b/plugins/user-settings/package.json index 251436e85a..7afe5b8fc0 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.11-next.1", + "version": "0.7.11-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/vault-backend/CHANGELOG.md b/plugins/vault-backend/CHANGELOG.md index 3253d8b99c..2664187ac0 100644 --- a/plugins/vault-backend/CHANGELOG.md +++ b/plugins/vault-backend/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-vault-backend +## 0.3.11-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.8-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/backend-tasks@0.5.11-next.2 + - @backstage/config@1.1.1-next.0 + ## 0.3.10-next.1 ### Patch Changes diff --git a/plugins/vault-backend/package.json b/plugins/vault-backend/package.json index 6906b8124d..e27a8d0524 100644 --- a/plugins/vault-backend/package.json +++ b/plugins/vault-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-vault-backend", "description": "A Backstage backend plugin that integrates towards Vault", - "version": "0.3.10-next.1", + "version": "0.3.11-next.2", "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 38121353c0..c2037ad665 100644 --- a/plugins/vault/CHANGELOG.md +++ b/plugins/vault/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-vault +## 0.1.20-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/catalog-model@1.4.3-next.0 + - @backstage/plugin-catalog-react@1.8.5-next.2 + - @backstage/errors@1.2.3-next.0 + - @backstage/theme@0.4.3-next.0 + ## 0.1.20-next.1 ### Patch Changes diff --git a/plugins/vault/package.json b/plugins/vault/package.json index 014e9b0d50..14cab619b9 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.20-next.1", + "version": "0.1.20-next.2", "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 f3bebcb916..19f23149bd 100644 --- a/plugins/xcmetrics/CHANGELOG.md +++ b/plugins/xcmetrics/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-xcmetrics +## 0.2.44-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.6-next.2 + - @backstage/core-plugin-api@1.7.0-next.1 + - @backstage/errors@1.2.3-next.0 + - @backstage/theme@0.4.3-next.0 + ## 0.2.44-next.1 ### Patch Changes diff --git a/plugins/xcmetrics/package.json b/plugins/xcmetrics/package.json index c39c0e4963..22b998983b 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.44-next.1", + "version": "0.2.44-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/storybook/package.json b/storybook/package.json index 0f88ae634c..6a86cd90bd 100644 --- a/storybook/package.json +++ b/storybook/package.json @@ -27,7 +27,7 @@ "@storybook/react": "^6.5.9", "@storybook/testing-library": "^0.2.0", "storybook-dark-mode": "^1.1.0", - "typescript": "~4.7.0" + "typescript": "~4.9.0" }, "resolutions": { "webpack": "^5.73.0" diff --git a/storybook/yarn.lock b/storybook/yarn.lock index e0f77cd510..9a533c46c0 100644 --- a/storybook/yarn.lock +++ b/storybook/yarn.lock @@ -2790,13 +2790,13 @@ __metadata: linkType: hard "@storybook/testing-library@npm:^0.2.0": - version: 0.2.1 - resolution: "@storybook/testing-library@npm:0.2.1" + version: 0.2.2 + resolution: "@storybook/testing-library@npm:0.2.2" dependencies: "@testing-library/dom": ^9.0.0 - "@testing-library/user-event": ~14.4.0 + "@testing-library/user-event": ^14.4.0 ts-dedent: ^2.2.0 - checksum: 2688361b634921219e4dc8e4acbc6622cfba6c224bd9bf17bf9bfb3655c906129cc82edd69354b9b1889b6f43c9c5e74bd51adb4407b68033d78279b93aee457 + checksum: 8ccdc1fbbb3472264c56b0aaf2f1c5d273f1ae9b230a53adf9cf82bf82c1a555550894f0e8869c206fa07b1fe8423da4d56590377756c58de3ec560b35a96c46 languageName: node linkType: hard @@ -2840,90 +2840,90 @@ __metadata: languageName: node linkType: hard -"@swc/core-darwin-arm64@npm:1.3.90": - version: 1.3.90 - resolution: "@swc/core-darwin-arm64@npm:1.3.90" +"@swc/core-darwin-arm64@npm:1.3.92": + version: 1.3.92 + resolution: "@swc/core-darwin-arm64@npm:1.3.92" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@swc/core-darwin-x64@npm:1.3.90": - version: 1.3.90 - resolution: "@swc/core-darwin-x64@npm:1.3.90" +"@swc/core-darwin-x64@npm:1.3.92": + version: 1.3.92 + resolution: "@swc/core-darwin-x64@npm:1.3.92" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@swc/core-linux-arm-gnueabihf@npm:1.3.90": - version: 1.3.90 - resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.90" +"@swc/core-linux-arm-gnueabihf@npm:1.3.92": + version: 1.3.92 + resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.92" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@swc/core-linux-arm64-gnu@npm:1.3.90": - version: 1.3.90 - resolution: "@swc/core-linux-arm64-gnu@npm:1.3.90" +"@swc/core-linux-arm64-gnu@npm:1.3.92": + version: 1.3.92 + resolution: "@swc/core-linux-arm64-gnu@npm:1.3.92" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-arm64-musl@npm:1.3.90": - version: 1.3.90 - resolution: "@swc/core-linux-arm64-musl@npm:1.3.90" +"@swc/core-linux-arm64-musl@npm:1.3.92": + version: 1.3.92 + resolution: "@swc/core-linux-arm64-musl@npm:1.3.92" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@swc/core-linux-x64-gnu@npm:1.3.90": - version: 1.3.90 - resolution: "@swc/core-linux-x64-gnu@npm:1.3.90" +"@swc/core-linux-x64-gnu@npm:1.3.92": + version: 1.3.92 + resolution: "@swc/core-linux-x64-gnu@npm:1.3.92" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-x64-musl@npm:1.3.90": - version: 1.3.90 - resolution: "@swc/core-linux-x64-musl@npm:1.3.90" +"@swc/core-linux-x64-musl@npm:1.3.92": + version: 1.3.92 + resolution: "@swc/core-linux-x64-musl@npm:1.3.92" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@swc/core-win32-arm64-msvc@npm:1.3.90": - version: 1.3.90 - resolution: "@swc/core-win32-arm64-msvc@npm:1.3.90" +"@swc/core-win32-arm64-msvc@npm:1.3.92": + version: 1.3.92 + resolution: "@swc/core-win32-arm64-msvc@npm:1.3.92" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@swc/core-win32-ia32-msvc@npm:1.3.90": - version: 1.3.90 - resolution: "@swc/core-win32-ia32-msvc@npm:1.3.90" +"@swc/core-win32-ia32-msvc@npm:1.3.92": + version: 1.3.92 + resolution: "@swc/core-win32-ia32-msvc@npm:1.3.92" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@swc/core-win32-x64-msvc@npm:1.3.90": - version: 1.3.90 - resolution: "@swc/core-win32-x64-msvc@npm:1.3.90" +"@swc/core-win32-x64-msvc@npm:1.3.92": + version: 1.3.92 + resolution: "@swc/core-win32-x64-msvc@npm:1.3.92" conditions: os=win32 & cpu=x64 languageName: node linkType: hard "@swc/core@npm:^1.3.46": - version: 1.3.90 - resolution: "@swc/core@npm:1.3.90" + version: 1.3.92 + resolution: "@swc/core@npm:1.3.92" dependencies: - "@swc/core-darwin-arm64": 1.3.90 - "@swc/core-darwin-x64": 1.3.90 - "@swc/core-linux-arm-gnueabihf": 1.3.90 - "@swc/core-linux-arm64-gnu": 1.3.90 - "@swc/core-linux-arm64-musl": 1.3.90 - "@swc/core-linux-x64-gnu": 1.3.90 - "@swc/core-linux-x64-musl": 1.3.90 - "@swc/core-win32-arm64-msvc": 1.3.90 - "@swc/core-win32-ia32-msvc": 1.3.90 - "@swc/core-win32-x64-msvc": 1.3.90 + "@swc/core-darwin-arm64": 1.3.92 + "@swc/core-darwin-x64": 1.3.92 + "@swc/core-linux-arm-gnueabihf": 1.3.92 + "@swc/core-linux-arm64-gnu": 1.3.92 + "@swc/core-linux-arm64-musl": 1.3.92 + "@swc/core-linux-x64-gnu": 1.3.92 + "@swc/core-linux-x64-musl": 1.3.92 + "@swc/core-win32-arm64-msvc": 1.3.92 + "@swc/core-win32-ia32-msvc": 1.3.92 + "@swc/core-win32-x64-msvc": 1.3.92 "@swc/counter": ^0.1.1 "@swc/types": ^0.1.5 peerDependencies: @@ -2952,7 +2952,7 @@ __metadata: peerDependenciesMeta: "@swc/helpers": optional: true - checksum: f8ced5187068dc73445c135065c6492f0ac559d0f7720c2482aa9663c87bd015f3d2abef6ee7b2f817280a5e8dd0946c59cce7e1499180644fbc948a9e3823ab + checksum: 88c0c62ff790e896180862c341be8bae98baf0a5c5e87f2f04f49e14b8c4fba460d6b352618b4dda066c8ae6bf152cd843eab25837f38128175208b8c0635721 languageName: node linkType: hard @@ -2986,12 +2986,12 @@ __metadata: languageName: node linkType: hard -"@testing-library/user-event@npm:~14.4.0": - version: 14.4.3 - resolution: "@testing-library/user-event@npm:14.4.3" +"@testing-library/user-event@npm:^14.4.0": + version: 14.5.1 + resolution: "@testing-library/user-event@npm:14.5.1" peerDependencies: "@testing-library/dom": ">=7.21.4" - checksum: 852c48ea6db1c9471b18276617c84fec4320771e466cd58339a732ca3fd73ad35e5a43ae14f51af51a8d0a150dcf60fcaab049ef367871207bea8f92c4b8195e + checksum: 3e6bc9fd53dfe2f3648190193ed2fd4bca2a1bfb47f68810df3b33f05412526e5fd5c4ef9dc5375635e0f4cdf1859916867b597eed22bda1321e04242ea6c519 languageName: node linkType: hard @@ -10687,7 +10687,7 @@ __metadata: react-hot-loader: ^4.13.0 storybook-dark-mode: ^1.1.0 swc-loader: ^0.2.3 - typescript: ~4.7.0 + typescript: ~4.9.0 peerDependencies: "@backstage/core-app-api": "*" "@backstage/core-plugin-api": "*" @@ -11218,23 +11218,23 @@ __metadata: languageName: node linkType: hard -"typescript@npm:~4.7.0": - version: 4.7.4 - resolution: "typescript@npm:4.7.4" +"typescript@npm:~4.9.0": + version: 4.9.5 + resolution: "typescript@npm:4.9.5" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 5750181b1cd7e6482c4195825547e70f944114fb47e58e4aa7553e62f11b3f3173766aef9c281783edfd881f7b8299cf35e3ca8caebe73d8464528c907a164df + checksum: ee000bc26848147ad423b581bd250075662a354d84f0e06eb76d3b892328d8d4440b7487b5a83e851b12b255f55d71835b008a66cbf8f255a11e4400159237db languageName: node linkType: hard -"typescript@patch:typescript@~4.7.0#~builtin": - version: 4.7.4 - resolution: "typescript@patch:typescript@npm%3A4.7.4#~builtin::version=4.7.4&hash=a1c5e5" +"typescript@patch:typescript@~4.9.0#~builtin": + version: 4.9.5 + resolution: "typescript@patch:typescript@npm%3A4.9.5#~builtin::version=4.9.5&hash=a1c5e5" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 9096d8f6c16cb80ef3bf96fcbbd055bf1c4a43bd14f3b7be45a9fbe7ada46ec977f604d5feed3263b4f2aa7d4c7477ce5f9cd87de0d6feedec69a983f3a4f93e + checksum: 2eee5c37cad4390385db5db5a8e81470e42e8f1401b0358d7390095d6f681b410f2c4a0c496c6ff9ebd775423c7785cdace7bcdad76c7bee283df3d9718c0f20 languageName: node linkType: hard diff --git a/yarn.lock b/yarn.lock index 38af62fcd1..779a0936a7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -103,8 +103,8 @@ __metadata: linkType: hard "@apollo/client@npm:^3.0.0": - version: 3.8.4 - resolution: "@apollo/client@npm:3.8.4" + version: 3.8.5 + resolution: "@apollo/client@npm:3.8.5" dependencies: "@graphql-typed-document-node/core": ^3.1.1 "@wry/context": ^0.7.3 @@ -134,7 +134,7 @@ __metadata: optional: true subscriptions-transport-ws: optional: true - checksum: 509e37cdce7462cacda0a86c413ce471cd8f618625fb8ac3a60d6347d12f37a4fc60e12fc3fc1a375799caa21e56ff58d709e13ef5e13ab15e4dfc828a527848 + checksum: 242db8340d5f04ff8f2c9ad6a0dc6ab6d596fb5c763865b0d392f6e5771d55de28faa981dcadaea80ee8b21d4ff40bfa51152a10bcae4158ecf035e47b0d17c4 languageName: node linkType: hard @@ -200,8 +200,8 @@ __metadata: linkType: hard "@apollo/server@npm:^4.0.0": - version: 4.9.3 - resolution: "@apollo/server@npm:4.9.3" + version: 4.9.4 + resolution: "@apollo/server@npm:4.9.4" dependencies: "@apollo/cache-control-types": ^1.0.3 "@apollo/server-gateway-interface": ^1.1.1 @@ -231,7 +231,7 @@ __metadata: whatwg-mimetype: ^3.0.0 peerDependencies: graphql: ^16.6.0 - checksum: 28537d7646669a5dc1302cfd75d8a9bf473459ee585c6b778d174628a2cfb3f89a5ac742eca7de2a779b6c9e3f30da509a8787a71227520d009ac190aa7a9207 + checksum: bf7105ffceaed6e3c54f1506513944bb324ae32e92b1aabb3ec7de1b9fee1373bdec6e1a3f5efb7c7f8090671f1ba2d37c01f5b1456c93127ffede1a0b554bac languageName: node linkType: hard @@ -1689,8 +1689,8 @@ __metadata: linkType: hard "@azure/identity@npm:^3.2.1": - version: 3.3.0 - resolution: "@azure/identity@npm:3.3.0" + version: 3.3.1 + resolution: "@azure/identity@npm:3.3.1" dependencies: "@azure/abort-controller": ^1.0.0 "@azure/core-auth": ^1.5.0 @@ -1708,7 +1708,7 @@ __metadata: stoppable: ^1.1.0 tslib: ^2.2.0 uuid: ^8.3.0 - checksum: 95c6f8761ad6bbfd3fbf8a88d1a4af17199fb6b61134a761d51a2df096cb175a5841f02ca5ae3285378c64676e72ce6cddc58143306eef5086a63459c2cef914 + checksum: ba58ce8d6178566757c0554b9b5d6ca3d4e934eb6831c9a7d57ada185ec57bd9a9de1ce9500a547e35f4d11cfb362c312afaad019d1ed6bf7b6ebf908bfea362 languageName: node linkType: hard @@ -1776,8 +1776,8 @@ __metadata: linkType: hard "@azure/storage-blob@npm:^12.5.0": - version: 12.15.0 - resolution: "@azure/storage-blob@npm:12.15.0" + version: 12.16.0 + resolution: "@azure/storage-blob@npm:12.16.0" dependencies: "@azure/abort-controller": ^1.0.0 "@azure/core-http": ^3.0.0 @@ -1787,7 +1787,7 @@ __metadata: "@azure/logger": ^1.0.0 events: ^3.0.0 tslib: ^2.2.0 - checksum: fe5399e7107685f1e81bd782fbd10e11c6aec01141c63f24f138a985aa709da96e83fc5dd3295408b0609981b2fb71d2304935056692e4cf3833635157799769 + checksum: c69a726afc7fa647e6bc6eb2b2863ed94088246a959f5e8f2b3fdd0f613846cb5eec7e991f2b50dd3ba88cd0b32e60da1e3d87eeeb5dbc692df4f61a3c507491 languageName: node linkType: hard @@ -3295,22 +3295,22 @@ __metadata: languageName: node linkType: hard -"@babel/runtime-corejs3@npm:^7.20.13, @babel/runtime-corejs3@npm:^7.20.7, @babel/runtime-corejs3@npm:^7.22.11": - version: 7.22.15 - resolution: "@babel/runtime-corejs3@npm:7.22.15" +"@babel/runtime-corejs3@npm:^7.20.7, @babel/runtime-corejs3@npm:^7.22.15, @babel/runtime-corejs3@npm:^7.23.1": + version: 7.23.1 + resolution: "@babel/runtime-corejs3@npm:7.23.1" dependencies: core-js-pure: ^3.30.2 regenerator-runtime: ^0.14.0 - checksum: 6e27ca3890282612316aa87a9cd60fc19888ac26c802af926b4488ad67b3b06929086884974e9237fa550f48a5fe22c9c5e5be229bba9c4c017cfb2374835518 + checksum: 5d52b0cc8b5d243e67cf29c584d15acdc0c89b64de4a3fe1cb8a83b84b64a5621802e36931f93ca696cb637884abd11c8514615d890a4edf057ec4464f73915d languageName: node linkType: hard -"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.1, @babel/runtime@npm:^7.12.1, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.18.6, @babel/runtime@npm:^7.2.0, @babel/runtime@npm:^7.20.1, @babel/runtime@npm:^7.20.13, @babel/runtime@npm:^7.20.6, @babel/runtime@npm:^7.20.7, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.22.15, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.4.4, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.0, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.3, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": - version: 7.22.15 - resolution: "@babel/runtime@npm:7.22.15" +"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.1, @babel/runtime@npm:^7.12.1, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.18.6, @babel/runtime@npm:^7.2.0, @babel/runtime@npm:^7.20.1, @babel/runtime@npm:^7.20.13, @babel/runtime@npm:^7.20.6, @babel/runtime@npm:^7.20.7, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.23.1, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.4.4, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.0, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.3, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": + version: 7.23.1 + resolution: "@babel/runtime@npm:7.23.1" dependencies: regenerator-runtime: ^0.14.0 - checksum: 793296df1e41599a935a3d77ec01eb6088410d3fd4dbe4e92f06c6b7bb2f8355024e6d78621a3a35f44e0e23b0b59107f23d585384df4f3123256a1e1492040e + checksum: 0cd0d43e6e7dc7f9152fda8c8312b08321cda2f56ef53d6c22ebdd773abdc6f5d0a69008de90aa41908d00e2c1facb24715ff121274e689305c858355ff02c70 languageName: node linkType: hard @@ -3415,7 +3415,6 @@ __metadata: logform: ^2.3.2 minimatch: ^5.0.0 minimist: ^1.2.5 - mock-fs: ^5.2.0 morgan: ^1.10.0 node-forge: ^1.3.1 selfsigned: ^2.0.0 @@ -3463,12 +3462,7 @@ __metadata: "@types/fs-extra": ^9.0.3 "@types/http-errors": ^2.0.0 "@types/luxon": ^3.0.0 - "@types/minimist": ^1.2.0 - "@types/morgan": ^1.9.0 - "@types/node-forge": ^1.3.0 "@types/pg": ^8.6.6 - "@types/recursive-readdir": ^2.2.0 - "@types/stoppable": ^1.1.0 "@types/supertest": ^2.0.8 "@types/tar": ^6.1.1 "@types/webpack-env": ^1.15.2 @@ -3495,17 +3489,11 @@ __metadata: logform: ^2.3.2 luxon: ^3.0.0 minimatch: ^5.0.0 - minimist: ^1.2.5 - morgan: ^1.10.0 msw: ^1.0.0 mysql2: ^2.2.5 node-fetch: ^2.6.7 - node-forge: ^1.3.1 pg: ^8.3.0 raw-body: ^2.4.1 - recursive-readdir: ^2.2.2 - selfsigned: ^2.0.0 - stoppable: ^1.1.0 supertest: ^6.1.3 tar: ^6.1.12 uuid: ^8.3.2 @@ -3604,7 +3592,6 @@ __metadata: chokidar: ^3.5.3 express: ^4.17.1 lodash: ^4.17.21 - mock-fs: ^5.2.0 wait-for-expect: ^3.0.2 winston: ^3.2.1 languageName: unknown @@ -3663,7 +3650,18 @@ __metadata: languageName: unknown linkType: soft -"@backstage/catalog-client@^1.4.4, @backstage/catalog-client@workspace:^, @backstage/catalog-client@workspace:packages/catalog-client": +"@backstage/catalog-client@npm:^1.4.4": + version: 1.4.4 + resolution: "@backstage/catalog-client@npm:1.4.4" + dependencies: + "@backstage/catalog-model": ^1.4.2 + "@backstage/errors": ^1.2.2 + cross-fetch: ^3.1.5 + checksum: 3f821ee7450b192bf750a0275d095a96f7ce137283cecd0353cef817a43fd7f55141d828268cf839b3cfbfc41cea0d6519c4c4411b297b7423728dc7018f68ed + languageName: node + linkType: hard + +"@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: @@ -3675,20 +3673,32 @@ __metadata: languageName: unknown linkType: soft -"@backstage/catalog-model@^1.1.5, @backstage/catalog-model@^1.4.2, @backstage/catalog-model@workspace:^, @backstage/catalog-model@workspace:packages/catalog-model": +"@backstage/catalog-model@npm:^1.1.5, @backstage/catalog-model@npm:^1.4.2": + version: 1.4.2 + resolution: "@backstage/catalog-model@npm:1.4.2" + dependencies: + "@backstage/config": ^1.1.0 + "@backstage/errors": ^1.2.2 + "@backstage/types": ^1.1.1 + ajv: ^8.10.0 + json-schema: ^0.4.0 + lodash: ^4.17.21 + uuid: ^8.0.0 + checksum: 7e0d8cfb7fc6bab02803201552a24b73a3d7b502f7ba22e3408e86400e2a4f8937e0e91dea9a063d1f8bc128064400e93d05301611772502811feea10e8ad4e9 + languageName: node + linkType: hard + +"@backstage/catalog-model@workspace:^, @backstage/catalog-model@workspace:packages/catalog-model": version: 0.0.0-use.local resolution: "@backstage/catalog-model@workspace:packages/catalog-model" dependencies: "@backstage/cli": "workspace:^" - "@backstage/config": "workspace:^" "@backstage/errors": "workspace:^" "@backstage/types": "workspace:^" "@types/json-schema": ^7.0.5 "@types/lodash": ^4.14.151 ajv: ^8.10.0 - json-schema: ^0.4.0 lodash: ^4.17.21 - uuid: ^8.0.0 yaml: ^2.0.0 languageName: unknown linkType: soft @@ -3785,8 +3795,8 @@ __metadata: "@types/terser-webpack-plugin": ^5.0.4 "@types/webpack-env": ^1.15.2 "@types/yarnpkg__lockfile": ^1.1.4 - "@typescript-eslint/eslint-plugin": ^5.9.0 - "@typescript-eslint/parser": ^5.9.0 + "@typescript-eslint/eslint-plugin": 6.7.2 + "@typescript-eslint/parser": ^6.7.2 "@yarnpkg/lockfile": ^1.1.0 "@yarnpkg/parsers": ^3.0.0-rc.4 bfj: ^7.0.2 @@ -3905,7 +3915,6 @@ __metadata: "@types/json-schema": ^7.0.6 "@types/json-schema-merge-allof": ^0.6.0 "@types/mock-fs": ^4.10.0 - "@types/yup": ^0.29.13 ajv: ^8.10.0 chokidar: ^3.5.2 fs-extra: 10.1.0 @@ -3914,17 +3923,26 @@ __metadata: json-schema-traverse: ^1.0.0 lodash: ^4.17.21 minimist: ^1.2.5 - mock-fs: ^5.2.0 msw: ^1.0.0 node-fetch: ^2.6.7 - typescript-json-schema: ^0.55.0 + typescript-json-schema: ^0.61.0 yaml: ^2.0.0 - yup: ^0.32.9 zen-observable: ^0.10.0 languageName: unknown linkType: soft -"@backstage/config@^1.0.6, @backstage/config@^1.0.7, @backstage/config@^1.1.0, @backstage/config@workspace:^, @backstage/config@workspace:packages/config": +"@backstage/config@npm:^1.0.6, @backstage/config@npm:^1.0.7, @backstage/config@npm:^1.1.0": + version: 1.1.0 + resolution: "@backstage/config@npm:1.1.0" + dependencies: + "@backstage/errors": ^1.2.2 + "@backstage/types": ^1.1.1 + lodash: ^4.17.21 + checksum: 9c17ab41b3e4bd6a0ad75caaf46ed3fad198aa8d190cb9a85415140bc9d6506022a4d5450ea5810004fc2d7a3f7a0a00583b468af4a0fa1655ce444606283010 + languageName: node + linkType: hard + +"@backstage/config@workspace:^, @backstage/config@workspace:packages/config": version: 0.0.0-use.local resolution: "@backstage/config@workspace:packages/config" dependencies: @@ -4131,7 +4149,6 @@ __metadata: lodash: ^4.17.21 msw: ^1.0.0 pluralize: ^8.0.0 - prop-types: ^15.7.2 qs: ^6.9.4 rc-progress: 3.5.1 react-helmet: 6.1.0 @@ -4189,14 +4206,9 @@ __metadata: "@testing-library/react": ^12.1.3 "@testing-library/react-hooks": ^8.0.0 "@testing-library/user-event": ^14.0.0 - "@types/prop-types": ^15.7.3 "@types/react": ^16.13.1 || ^17.0.0 - "@types/zen-observable": ^0.8.0 history: ^5.0.0 i18next: ^22.4.15 - msw: ^1.0.0 - prop-types: ^15.7.2 - zen-observable: ^0.10.0 peerDependencies: react: ^16.13.1 || ^17.0.0 react-dom: ^16.13.1 || ^17.0.0 @@ -4208,6 +4220,7 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/create-app@workspace:packages/create-app" dependencies: + "@backstage/backend-test-utils": "workspace:^" "@backstage/cli": "workspace:^" "@backstage/cli-common": "workspace:^" "@types/command-exists": ^1.2.0 @@ -4277,13 +4290,23 @@ __metadata: languageName: unknown linkType: soft -"@backstage/errors@^1.1.5, @backstage/errors@^1.2.2, @backstage/errors@workspace:^, @backstage/errors@workspace:packages/errors": +"@backstage/errors@npm:^1.1.5, @backstage/errors@npm:^1.2.2": + version: 1.2.2 + resolution: "@backstage/errors@npm:1.2.2" + dependencies: + "@backstage/types": ^1.1.1 + cross-fetch: ^3.1.5 + serialize-error: ^8.0.1 + checksum: 2fd323d528023654ac0910a5bd8ea703fa97a4bd62ee34b6c75e1c992d1a78cae661f0929c1ffd72df5465a1bda69c1bcad2682f017e5e52daa73154e6284234 + languageName: node + linkType: hard + +"@backstage/errors@workspace:^, @backstage/errors@workspace:packages/errors": version: 0.0.0-use.local resolution: "@backstage/errors@workspace:packages/errors" dependencies: "@backstage/cli": "workspace:^" "@backstage/types": "workspace:^" - cross-fetch: ^3.1.5 serialize-error: ^8.0.1 languageName: unknown linkType: soft @@ -4313,6 +4336,7 @@ __metadata: "@backstage/test-utils": "workspace:^" "@backstage/theme": "workspace:^" "@backstage/types": "workspace:^" + "@backstage/version-bridge": "workspace:^" "@material-ui/core": ^4.12.4 "@material-ui/icons": ^4.11.3 "@testing-library/jest-dom": ^5.10.1 @@ -4398,17 +4422,12 @@ __metadata: "@backstage/dev-utils": "workspace:^" "@backstage/integration": "workspace:^" "@backstage/test-utils": "workspace:^" - "@backstage/theme": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.61 "@testing-library/dom": ^8.0.0 "@testing-library/jest-dom": ^5.10.1 - "@testing-library/react": ^12.1.3 - "@testing-library/user-event": ^14.0.0 "@types/react": ^16.13.1 || ^17.0.0 msw: ^1.0.0 - react-use: ^17.2.4 peerDependencies: react: ^16.13.1 || ^17.0.0 react-dom: ^16.13.1 || ^17.0.0 @@ -4441,7 +4460,6 @@ __metadata: "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" "@backstage/config-loader": "workspace:^" - "@backstage/errors": "workspace:^" "@octokit/auth-app": ^4.0.0 "@octokit/rest": ^19.0.3 "@types/luxon": ^3.0.0 @@ -4665,7 +4683,6 @@ __metadata: "@testing-library/user-event": ^14.0.0 "@types/react": ^16.13.1 || ^17.0.0 msw: ^1.0.0 - prop-types: ^15.7.2 react-ga: ^3.3.0 react-use: ^17.2.4 peerDependencies: @@ -4832,7 +4849,6 @@ __metadata: knex: ^2.0.0 lodash: ^4.17.21 luxon: ^3.0.0 - mock-fs: ^5.2.0 msw: ^1.0.0 node-fetch: ^2.6.7 supertest: ^6.1.3 @@ -4920,6 +4936,24 @@ __metadata: languageName: unknown linkType: soft +"@backstage/plugin-auth-backend-module-microsoft-provider@workspace:^, @backstage/plugin-auth-backend-module-microsoft-provider@workspace:plugins/auth-backend-module-microsoft-provider": + version: 0.0.0-use.local + resolution: "@backstage/plugin-auth-backend-module-microsoft-provider@workspace:plugins/auth-backend-module-microsoft-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-microsoft: ^1.0.0 + supertest: ^6.3.3 + languageName: unknown + linkType: soft + "@backstage/plugin-auth-backend-module-oauth2-provider@workspace:^, @backstage/plugin-auth-backend-module-oauth2-provider@workspace:plugins/auth-backend-module-oauth2-provider": version: 0.0.0-use.local resolution: "@backstage/plugin-auth-backend-module-oauth2-provider@workspace:plugins/auth-backend-module-oauth2-provider" @@ -4955,6 +4989,7 @@ __metadata: "@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-microsoft-provider": "workspace:^" "@backstage/plugin-auth-backend-module-oauth2-provider": "workspace:^" "@backstage/plugin-auth-node": "workspace:^" "@backstage/plugin-catalog-node": "workspace:^" @@ -5497,7 +5532,23 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-catalog-backend-module-github@workspace:plugins/catalog-backend-module-github": +"@backstage/plugin-catalog-backend-module-github-org@workspace:plugins/catalog-backend-module-github-org": + version: 0.0.0-use.local + resolution: "@backstage/plugin-catalog-backend-module-github-org@workspace:plugins/catalog-backend-module-github-org" + dependencies: + "@backstage/backend-common": "workspace:^" + "@backstage/backend-plugin-api": "workspace:^" + "@backstage/backend-tasks": "workspace:^" + "@backstage/backend-test-utils": "workspace:^" + "@backstage/cli": "workspace:^" + "@backstage/config": "workspace:^" + "@backstage/plugin-catalog-backend-module-github": "workspace:^" + "@backstage/plugin-catalog-node": "workspace:^" + luxon: ^3.0.0 + languageName: unknown + linkType: soft + +"@backstage/plugin-catalog-backend-module-github@workspace:^, @backstage/plugin-catalog-backend-module-github@workspace:plugins/catalog-backend-module-github": version: 0.0.0-use.local resolution: "@backstage/plugin-catalog-backend-module-github@workspace:plugins/catalog-backend-module-github" dependencies: @@ -5509,13 +5560,11 @@ __metadata: "@backstage/catalog-model": "workspace:^" "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" - "@backstage/errors": "workspace:^" "@backstage/integration": "workspace:^" "@backstage/plugin-catalog-backend": "workspace:^" "@backstage/plugin-catalog-common": "workspace:^" "@backstage/plugin-catalog-node": "workspace:^" "@backstage/plugin-events-node": "workspace:^" - "@backstage/types": "workspace:^" "@octokit/graphql": ^5.0.0 "@octokit/rest": ^19.0.3 "@types/lodash": ^4.14.151 @@ -5541,10 +5590,8 @@ __metadata: "@backstage/catalog-model": "workspace:^" "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" - "@backstage/errors": "workspace:^" "@backstage/integration": "workspace:^" "@backstage/plugin-catalog-node": "workspace:^" - "@backstage/types": "workspace:^" "@types/lodash": ^4.14.151 "@types/uuid": ^8.0.0 lodash: ^4.17.21 @@ -5560,7 +5607,6 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-catalog-backend-module-incremental-ingestion@workspace:plugins/catalog-backend-module-incremental-ingestion" dependencies: - "@backstage/backend-app-api": "workspace:^" "@backstage/backend-common": "workspace:^" "@backstage/backend-defaults": "workspace:^" "@backstage/backend-plugin-api": "workspace:^" @@ -5579,7 +5625,6 @@ __metadata: express: ^4.17.1 express-promise-router: ^4.1.0 knex: ^2.0.0 - lodash: ^4.17.21 luxon: ^3.0.0 uuid: ^8.3.2 winston: ^3.2.1 @@ -5729,10 +5774,7 @@ __metadata: "@backstage/plugin-events-node": "workspace:^" "@backstage/plugin-permission-common": "workspace:^" "@backstage/plugin-permission-node": "workspace:^" - "@backstage/plugin-scaffolder-common": "workspace:^" "@backstage/plugin-search-backend-module-catalog": "workspace:^" - "@backstage/plugin-search-backend-node": "workspace:^" - "@backstage/plugin-search-common": "workspace:^" "@backstage/types": "workspace:^" "@opentelemetry/api": ^1.3.0 "@types/core-js": ^2.5.4 @@ -5745,7 +5787,6 @@ __metadata: codeowners-utils: ^1.0.2 core-js: ^3.6.5 express: ^4.17.1 - express-promise-router: ^4.1.0 fast-json-stable-stringify: ^2.1.0 fs-extra: 10.1.0 git-url-parse: ^13.0.0 @@ -5768,7 +5809,18 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-catalog-common@^1.0.10, @backstage/plugin-catalog-common@^1.0.16, @backstage/plugin-catalog-common@workspace:^, @backstage/plugin-catalog-common@workspace:plugins/catalog-common": +"@backstage/plugin-catalog-common@npm:^1.0.10, @backstage/plugin-catalog-common@npm:^1.0.16": + version: 1.0.16 + resolution: "@backstage/plugin-catalog-common@npm:1.0.16" + dependencies: + "@backstage/catalog-model": ^1.4.2 + "@backstage/plugin-permission-common": ^0.7.8 + "@backstage/plugin-search-common": ^1.2.6 + checksum: 0dd21c3b704abff78fb091c4c35b0217e557d9a7298fe4227c3a58aa7b2a906ba2d7b7aefce9534ad03d152502dec465d30c07873409f8f803929d62acef9594 + languageName: node + linkType: hard + +"@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: @@ -5971,11 +6023,9 @@ __metadata: "@testing-library/react": ^12.1.3 "@testing-library/react-hooks": ^8.0.0 "@testing-library/user-event": ^14.0.0 - "@types/jwt-decode": ^3.1.0 "@types/react": ^16.13.1 || ^17.0.0 "@types/zen-observable": ^0.8.0 classnames: ^2.2.6 - jwt-decode: ^3.1.0 lodash: ^4.17.21 material-ui-popup-state: ^1.9.3 qs: ^6.9.4 @@ -6053,7 +6103,6 @@ __metadata: history: ^5.0.0 lodash: ^4.17.21 pluralize: ^8.0.0 - react-helmet: 6.1.0 react-use: ^17.2.4 zen-observable: ^0.10.0 peerDependencies: @@ -6102,7 +6151,6 @@ __metadata: humanize-duration: ^3.27.0 lodash: ^4.17.21 luxon: ^3.0.0 - prop-types: ^15.7.2 react-use: ^17.3.1 recharts: ^2.5.0 peerDependencies: @@ -7351,38 +7399,6 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-home@npm:^0.5.8": - version: 0.5.8 - resolution: "@backstage/plugin-home@npm:0.5.8" - dependencies: - "@backstage/catalog-model": ^1.4.2 - "@backstage/config": ^1.1.0 - "@backstage/core-components": ^0.13.5 - "@backstage/core-plugin-api": ^1.6.0 - "@backstage/plugin-catalog-react": ^1.8.4 - "@backstage/plugin-home-react": ^0.1.3 - "@backstage/theme": ^0.4.2 - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.61 - "@rjsf/core-v5": "npm:@rjsf/core@5.13.0" - "@rjsf/material-ui-v5": "npm:@rjsf/material-ui@5.13.0" - "@rjsf/utils": 5.13.0 - "@rjsf/validator-ajv8": 5.13.0 - "@types/react": ^16.13.1 || ^17.0.0 - lodash: ^4.17.21 - react-grid-layout: ^1.3.4 - react-resizable: ^3.0.4 - react-use: ^17.2.4 - zod: ^3.21.4 - peerDependencies: - react: ^16.13.1 || ^17.0.0 - react-dom: ^16.13.1 || ^17.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - checksum: 4f895b3a7e7f61149ba7b8fd6ec998d1f83b6e5262073893c5863fe79c46e5e2f52b43346f310733e04815aaebd82b8a13d34616e8d0848f60f87b1fb3193d60 - languageName: node - linkType: hard - "@backstage/plugin-home@workspace:^, @backstage/plugin-home@workspace:plugins/home": version: 0.0.0-use.local resolution: "@backstage/plugin-home@workspace:plugins/home" @@ -7454,7 +7470,6 @@ __metadata: humanize-duration: ^3.26.0 luxon: ^3.0.0 msw: ^1.0.0 - prop-types: ^15.7.2 react-use: ^17.2.4 peerDependencies: react: ^16.13.1 || ^17.0.0 @@ -7468,12 +7483,14 @@ __metadata: resolution: "@backstage/plugin-jenkins-backend@workspace:plugins/jenkins-backend" dependencies: "@backstage/backend-common": "workspace:^" + "@backstage/backend-plugin-api": "workspace:^" "@backstage/catalog-client": "workspace:^" "@backstage/catalog-model": "workspace:^" "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" "@backstage/errors": "workspace:^" "@backstage/plugin-auth-node": "workspace:^" + "@backstage/plugin-catalog-node": "workspace:^" "@backstage/plugin-jenkins-common": "workspace:^" "@backstage/plugin-permission-common": "workspace:^" "@backstage/plugin-permission-node": "workspace:^" @@ -7600,6 +7617,7 @@ __metadata: "@aws-sdk/credential-providers": ^3.350.0 "@aws-sdk/signature-v4": ^3.347.0 "@azure/identity": ^3.2.1 + "@backstage/backend-app-api": "workspace:^" "@backstage/backend-common": "workspace:^" "@backstage/backend-plugin-api": "workspace:^" "@backstage/backend-test-utils": "workspace:^" @@ -7612,6 +7630,7 @@ __metadata: "@backstage/plugin-auth-node": "workspace:^" "@backstage/plugin-catalog-node": "workspace:^" "@backstage/plugin-kubernetes-common": "workspace:^" + "@backstage/plugin-kubernetes-node": "workspace:^" "@backstage/plugin-permission-common": "workspace:^" "@backstage/plugin-permission-node": "workspace:^" "@backstage/types": "workspace:^" @@ -7631,7 +7650,6 @@ __metadata: http-proxy-middleware: ^2.0.6 lodash: ^4.17.21 luxon: ^3.0.0 - mock-fs: ^5.2.0 morgan: ^1.10.0 msw: ^1.0.0 node-fetch: ^2.6.7 @@ -7706,6 +7724,17 @@ __metadata: languageName: unknown linkType: soft +"@backstage/plugin-kubernetes-node@workspace:^, @backstage/plugin-kubernetes-node@workspace:plugins/kubernetes-node": + version: 0.0.0-use.local + resolution: "@backstage/plugin-kubernetes-node@workspace:plugins/kubernetes-node" + dependencies: + "@backstage/backend-plugin-api": "workspace:^" + "@backstage/catalog-model": "workspace:^" + "@backstage/cli": "workspace:^" + "@backstage/plugin-kubernetes-common": "workspace:^" + languageName: unknown + linkType: soft + "@backstage/plugin-kubernetes-react@workspace:^, @backstage/plugin-kubernetes-react@workspace:plugins/kubernetes-react": version: 0.0.0-use.local resolution: "@backstage/plugin-kubernetes-react@workspace:plugins/kubernetes-react" @@ -8337,7 +8366,21 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-permission-common@^0.7.8, @backstage/plugin-permission-common@workspace:^, @backstage/plugin-permission-common@workspace:plugins/permission-common": +"@backstage/plugin-permission-common@npm:^0.7.8": + version: 0.7.8 + resolution: "@backstage/plugin-permission-common@npm:0.7.8" + dependencies: + "@backstage/config": ^1.1.0 + "@backstage/errors": ^1.2.2 + "@backstage/types": ^1.1.1 + cross-fetch: ^3.1.5 + uuid: ^8.0.0 + zod: ^3.21.4 + checksum: 495f92d0360ab36bb707b0de527e31f42d699b177875c2ed4e8519c9721745ec1b67be547cd5862162e5d48e240ed07d9ab179c022adaf8367f03ef7ded6459e + languageName: node + linkType: hard + +"@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: @@ -8757,7 +8800,6 @@ __metadata: "@types/git-url-parse": ^9.0.0 "@types/libsodium-wrappers": ^0.7.10 "@types/luxon": ^3.0.0 - "@types/mock-fs": ^4.13.0 "@types/nunjucks": ^3.1.4 "@types/supertest": ^2.0.8 "@types/zen-observable": ^0.8.0 @@ -8780,7 +8822,6 @@ __metadata: libsodium-wrappers: ^0.7.11 lodash: ^4.17.21 luxon: ^3.0.0 - mock-fs: ^5.2.0 morgan: ^1.10.0 msw: ^1.0.0 node-fetch: ^2.6.7 @@ -9119,6 +9160,16 @@ __metadata: languageName: unknown linkType: soft +"@backstage/plugin-search-common@npm:^1.2.6": + version: 1.2.6 + resolution: "@backstage/plugin-search-common@npm:1.2.6" + dependencies: + "@backstage/plugin-permission-common": ^0.7.8 + "@backstage/types": ^1.1.1 + checksum: 19ee6ef72ce75fce6c0e3da5e978419fd01f795db3e701460da652e8581e3eb53fba800c56d518147d03bd4e1e3889fa18e1d11a82a38c26a304fdc3bc5438bc + languageName: node + linkType: hard + "@backstage/plugin-search-common@workspace:^, @backstage/plugin-search-common@workspace:plugins/search-common": version: 0.0.0-use.local resolution: "@backstage/plugin-search-common@workspace:plugins/search-common" @@ -9594,7 +9645,6 @@ __metadata: cross-fetch: ^3.1.5 d3-force: ^3.0.0 msw: ^1.0.0 - prop-types: ^15.7.2 react-use: ^17.2.4 peerDependencies: react: ^16.13.1 || ^17.0.0 @@ -9719,6 +9769,7 @@ __metadata: "@azure/identity": ^3.2.1 "@azure/storage-blob": ^12.5.0 "@backstage/backend-common": "workspace:^" + "@backstage/backend-test-utils": "workspace:^" "@backstage/catalog-model": "workspace:^" "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" @@ -9732,7 +9783,6 @@ __metadata: "@types/fs-extra": ^9.0.5 "@types/js-yaml": ^4.0.0 "@types/mime-types": ^2.1.0 - "@types/mock-fs": ^4.13.0 "@types/recursive-readdir": ^2.2.0 "@types/supertest": ^2.0.8 aws-sdk-client-mock: ^2.0.0 @@ -9743,7 +9793,6 @@ __metadata: js-yaml: ^4.0.0 json5: ^2.1.3 mime-types: ^2.1.27 - mock-fs: ^5.2.0 p-limit: ^3.1.0 recursive-readdir: ^2.2.2 supertest: ^6.1.3 @@ -10128,7 +10177,35 @@ __metadata: languageName: unknown linkType: soft -"@backstage/theme@^0.4.2, @backstage/theme@workspace:^, @backstage/theme@workspace:packages/theme": +"@backstage/theme@npm:^0.2.16, @backstage/theme@npm:^0.2.18": + version: 0.2.19 + resolution: "@backstage/theme@npm:0.2.19" + dependencies: + "@material-ui/core": ^4.12.2 + peerDependencies: + react: ^16.13.1 || ^17.0.0 + react-dom: ^16.13.1 || ^17.0.0 + checksum: 93ca110a3f953d6d98b4a5f2163beaa1bd1f95adb66a593e85eb523a7012acf654b6148db54008a6434805a4bd9016d67e5c6a317bc56940ee6800aecbb97d6f + languageName: node + linkType: hard + +"@backstage/theme@npm:^0.4.2": + version: 0.4.2 + resolution: "@backstage/theme@npm:0.4.2" + dependencies: + "@emotion/react": ^11.10.5 + "@emotion/styled": ^11.10.5 + "@mui/material": ^5.12.2 + 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: 22371c3159ed4d2f6d53925d48318d5f8f66ac9d6df6ff32f34b4b52e070e88ada25031b2a8fc3264cb352a24f4128fa1295b1302d1d3f12df3bcb76c785f605 + languageName: node + linkType: hard + +"@backstage/theme@workspace:^, @backstage/theme@workspace:packages/theme": version: 0.0.0-use.local resolution: "@backstage/theme@workspace:packages/theme" dependencies: @@ -10145,18 +10222,6 @@ __metadata: languageName: unknown linkType: soft -"@backstage/theme@npm:^0.2.16, @backstage/theme@npm:^0.2.18": - version: 0.2.19 - resolution: "@backstage/theme@npm:0.2.19" - dependencies: - "@material-ui/core": ^4.12.2 - peerDependencies: - react: ^16.13.1 || ^17.0.0 - react-dom: ^16.13.1 || ^17.0.0 - checksum: 93ca110a3f953d6d98b4a5f2163beaa1bd1f95adb66a593e85eb523a7012acf654b6148db54008a6434805a4bd9016d67e5c6a317bc56940ee6800aecbb97d6f - languageName: node - linkType: hard - "@backstage/types@^1.0.2, @backstage/types@^1.1.1, @backstage/types@workspace:^, @backstage/types@workspace:packages/types": version: 0.0.0-use.local resolution: "@backstage/types@workspace:packages/types" @@ -10535,13 +10600,13 @@ __metadata: linkType: hard "@codemirror/view@npm:^6.0.0": - version: 6.21.0 - resolution: "@codemirror/view@npm:6.21.0" + version: 6.21.3 + resolution: "@codemirror/view@npm:6.21.3" dependencies: "@codemirror/state": ^6.1.4 style-mod: ^4.1.0 w3c-keyname: ^2.2.4 - checksum: da49d5541b137a812e1837709130b9a4502fac71b87c45d45384116a7a2b1dab556c283abb673946ba9d044a640ab9058727b85de9b7b576c44848dfbf0ed7bb + checksum: 7fda5a60e04fe1ac3d22ee478d4a90fc307953b8c900752ef5ca33af06c4e7851356e460f14b05034230b3a1677f36379ea01d85a3ea3b3a3e85e871ed62346a languageName: node linkType: hard @@ -10552,6 +10617,13 @@ __metadata: languageName: node linkType: hard +"@colors/colors@npm:^1.6.0": + version: 1.6.0 + resolution: "@colors/colors@npm:1.6.0" + checksum: aa209963e0c3218e80a4a20553ba8c0fbb6fa13140540b4e5f97923790be06801fc90172c1114fc8b7e888b3d012b67298cde6b9e81521361becfaee400c662f + languageName: node + linkType: hard + "@cspotcode/source-map-support@npm:^0.8.0": version: 0.8.1 resolution: "@cspotcode/source-map-support@npm:0.8.1" @@ -10820,23 +10892,23 @@ __metadata: languageName: node linkType: hard -"@esbuild-kit/core-utils@npm:^3.0.0": - version: 3.0.0 - resolution: "@esbuild-kit/core-utils@npm:3.0.0" +"@esbuild-kit/core-utils@npm:^3.0.0, @esbuild-kit/core-utils@npm:^3.3.2": + version: 3.3.2 + resolution: "@esbuild-kit/core-utils@npm:3.3.2" dependencies: - esbuild: ~0.15.10 + esbuild: ~0.18.20 source-map-support: ^0.5.21 - checksum: 0e89ec718e2211bf95c48a8085aaef88e8e416f42abd1c62d488d5458eecd3fbc144179a0c5570ad36fa7e2d3bbc411f8d3fb28802c37ced2154dc2c6ded9dfe + checksum: 62f3b97457fa4ef39d752bd2ad1c8adac08929b50c411f5259f105cc74896f1fdb3429a540aa423e8eae37f32ef44656ca21ccb9a723cd9955d65a820960ab1f languageName: node linkType: hard "@esbuild-kit/esm-loader@npm:^2.5.5": - version: 2.5.5 - resolution: "@esbuild-kit/esm-loader@npm:2.5.5" + version: 2.6.5 + resolution: "@esbuild-kit/esm-loader@npm:2.6.5" dependencies: - "@esbuild-kit/core-utils": ^3.0.0 - get-tsconfig: ^4.4.0 - checksum: 9d4a03ffc937fbec75a8456c3d45d7cdb1a65768416791a5720081753502bc9f485ba27942a46f564b12483b140a8a46c12433a4496430d93e4513e430484ec7 + "@esbuild-kit/core-utils": ^3.3.2 + get-tsconfig: ^4.7.0 + checksum: 88a27203898f14bd69f03244ae2b3bae727e00243d7801292c4da8caba69813b0978fb8245a55b83bc9b907f475ed634f094a1f44cc590c0754993f4a924cc22 languageName: node linkType: hard @@ -10847,6 +10919,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/android-arm64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/android-arm64@npm:0.18.20" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/android-arm64@npm:0.19.4": version: 0.19.4 resolution: "@esbuild/android-arm64@npm:0.19.4" @@ -10854,16 +10933,16 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-arm@npm:0.15.18": - version: 0.15.18 - resolution: "@esbuild/android-arm@npm:0.15.18" +"@esbuild/android-arm@npm:0.16.17": + version: 0.16.17 + resolution: "@esbuild/android-arm@npm:0.16.17" conditions: os=android & cpu=arm languageName: node linkType: hard -"@esbuild/android-arm@npm:0.16.17": - version: 0.16.17 - resolution: "@esbuild/android-arm@npm:0.16.17" +"@esbuild/android-arm@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/android-arm@npm:0.18.20" conditions: os=android & cpu=arm languageName: node linkType: hard @@ -10882,6 +10961,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/android-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/android-x64@npm:0.18.20" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + "@esbuild/android-x64@npm:0.19.4": version: 0.19.4 resolution: "@esbuild/android-x64@npm:0.19.4" @@ -10896,6 +10982,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/darwin-arm64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/darwin-arm64@npm:0.18.20" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/darwin-arm64@npm:0.19.4": version: 0.19.4 resolution: "@esbuild/darwin-arm64@npm:0.19.4" @@ -10910,6 +11003,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/darwin-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/darwin-x64@npm:0.18.20" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + "@esbuild/darwin-x64@npm:0.19.4": version: 0.19.4 resolution: "@esbuild/darwin-x64@npm:0.19.4" @@ -10924,6 +11024,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/freebsd-arm64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/freebsd-arm64@npm:0.18.20" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/freebsd-arm64@npm:0.19.4": version: 0.19.4 resolution: "@esbuild/freebsd-arm64@npm:0.19.4" @@ -10938,6 +11045,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/freebsd-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/freebsd-x64@npm:0.18.20" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + "@esbuild/freebsd-x64@npm:0.19.4": version: 0.19.4 resolution: "@esbuild/freebsd-x64@npm:0.19.4" @@ -10952,6 +11066,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-arm64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-arm64@npm:0.18.20" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/linux-arm64@npm:0.19.4": version: 0.19.4 resolution: "@esbuild/linux-arm64@npm:0.19.4" @@ -10966,6 +11087,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-arm@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-arm@npm:0.18.20" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + "@esbuild/linux-arm@npm:0.19.4": version: 0.19.4 resolution: "@esbuild/linux-arm@npm:0.19.4" @@ -10980,6 +11108,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-ia32@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-ia32@npm:0.18.20" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + "@esbuild/linux-ia32@npm:0.19.4": version: 0.19.4 resolution: "@esbuild/linux-ia32@npm:0.19.4" @@ -10987,16 +11122,16 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-loong64@npm:0.15.18": - version: 0.15.18 - resolution: "@esbuild/linux-loong64@npm:0.15.18" +"@esbuild/linux-loong64@npm:0.16.17": + version: 0.16.17 + resolution: "@esbuild/linux-loong64@npm:0.16.17" conditions: os=linux & cpu=loong64 languageName: node linkType: hard -"@esbuild/linux-loong64@npm:0.16.17": - version: 0.16.17 - resolution: "@esbuild/linux-loong64@npm:0.16.17" +"@esbuild/linux-loong64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-loong64@npm:0.18.20" conditions: os=linux & cpu=loong64 languageName: node linkType: hard @@ -11015,6 +11150,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-mips64el@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-mips64el@npm:0.18.20" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + "@esbuild/linux-mips64el@npm:0.19.4": version: 0.19.4 resolution: "@esbuild/linux-mips64el@npm:0.19.4" @@ -11029,6 +11171,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-ppc64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-ppc64@npm:0.18.20" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + "@esbuild/linux-ppc64@npm:0.19.4": version: 0.19.4 resolution: "@esbuild/linux-ppc64@npm:0.19.4" @@ -11043,6 +11192,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-riscv64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-riscv64@npm:0.18.20" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + "@esbuild/linux-riscv64@npm:0.19.4": version: 0.19.4 resolution: "@esbuild/linux-riscv64@npm:0.19.4" @@ -11057,6 +11213,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-s390x@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-s390x@npm:0.18.20" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + "@esbuild/linux-s390x@npm:0.19.4": version: 0.19.4 resolution: "@esbuild/linux-s390x@npm:0.19.4" @@ -11071,6 +11234,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-x64@npm:0.18.20" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + "@esbuild/linux-x64@npm:0.19.4": version: 0.19.4 resolution: "@esbuild/linux-x64@npm:0.19.4" @@ -11085,6 +11255,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/netbsd-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/netbsd-x64@npm:0.18.20" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + "@esbuild/netbsd-x64@npm:0.19.4": version: 0.19.4 resolution: "@esbuild/netbsd-x64@npm:0.19.4" @@ -11099,6 +11276,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/openbsd-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/openbsd-x64@npm:0.18.20" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + "@esbuild/openbsd-x64@npm:0.19.4": version: 0.19.4 resolution: "@esbuild/openbsd-x64@npm:0.19.4" @@ -11113,6 +11297,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/sunos-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/sunos-x64@npm:0.18.20" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + "@esbuild/sunos-x64@npm:0.19.4": version: 0.19.4 resolution: "@esbuild/sunos-x64@npm:0.19.4" @@ -11127,6 +11318,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/win32-arm64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/win32-arm64@npm:0.18.20" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/win32-arm64@npm:0.19.4": version: 0.19.4 resolution: "@esbuild/win32-arm64@npm:0.19.4" @@ -11141,6 +11339,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/win32-ia32@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/win32-ia32@npm:0.18.20" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + "@esbuild/win32-ia32@npm:0.19.4": version: 0.19.4 resolution: "@esbuild/win32-ia32@npm:0.19.4" @@ -11155,6 +11360,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/win32-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/win32-x64@npm:0.18.20" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@esbuild/win32-x64@npm:0.19.4": version: 0.19.4 resolution: "@esbuild/win32-x64@npm:0.19.4" @@ -11162,7 +11374,7 @@ __metadata: languageName: node linkType: hard -"@eslint-community/eslint-utils@npm:^4.2.0": +"@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.4.0": version: 4.4.0 resolution: "@eslint-community/eslint-utils@npm:4.4.0" dependencies: @@ -11173,10 +11385,10 @@ __metadata: languageName: node linkType: hard -"@eslint-community/regexpp@npm:^4.6.1": - version: 4.6.2 - resolution: "@eslint-community/regexpp@npm:4.6.2" - checksum: a3c341377b46b54fa228f455771b901d1a2717f95d47dcdf40199df30abc000ba020f747f114f08560d119e979d882a94cf46cfc51744544d54b00319c0f2724 +"@eslint-community/regexpp@npm:^4.5.1, @eslint-community/regexpp@npm:^4.6.1": + version: 4.8.1 + resolution: "@eslint-community/regexpp@npm:4.8.1" + checksum: 82d62c845ef42b810f268cfdc84d803a2da01735fb52e902fd34bdc09f92464a094fd8e4802839874b000b2f73f67c972859e813ba705233515d3e954f234bf2 languageName: node linkType: hard @@ -11197,10 +11409,10 @@ __metadata: languageName: node linkType: hard -"@eslint/js@npm:8.49.0": - version: 8.49.0 - resolution: "@eslint/js@npm:8.49.0" - checksum: a6601807c8aeeefe866926ad92ed98007c034a735af20ff709009e39ad1337474243d47908500a3bde04e37bfba16bcf1d3452417f962e1345bc8756edd6b830 +"@eslint/js@npm:8.51.0": + version: 8.51.0 + resolution: "@eslint/js@npm:8.51.0" + checksum: 0228bf1e1e0414843e56d9ff362a2a72d579c078f93174666f29315690e9e30a8633ad72c923297f7fd7182381b5a476805ff04dac8debe638953eb1ded3ac73 languageName: node linkType: hard @@ -11254,6 +11466,13 @@ __metadata: languageName: node linkType: hard +"@fastify/busboy@npm:^2.0.0": + version: 2.0.0 + resolution: "@fastify/busboy@npm:2.0.0" + checksum: 41879937ce1dee6421ef9cd4da53239830617e1f0bb7a0e843940772cd72827205d05e518af6adabe6e1ea19301285fff432b9d11bad01a531e698bea95c781b + languageName: node + linkType: hard + "@floating-ui/core@npm:^1.4.2": version: 1.5.0 resolution: "@floating-ui/core@npm:1.5.0" @@ -11368,14 +11587,14 @@ __metadata: linkType: hard "@google-cloud/firestore@npm:^6.0.0": - version: 6.7.0 - resolution: "@google-cloud/firestore@npm:6.7.0" + version: 6.8.0 + resolution: "@google-cloud/firestore@npm:6.8.0" dependencies: fast-deep-equal: ^3.1.1 functional-red-black-tree: ^1.0.1 google-gax: ^3.5.7 - protobufjs: ^7.0.0 - checksum: 8464d4d866adcbd80cd528230408f7161a402df7b74d4036b2f81c1f9b83051057364e1c8264477b7a46ce03c2b8fa0d28799f6ccd77d905274a71ca93b2593f + protobufjs: ^7.2.5 + checksum: e8e1fd7cc6fd688e771c3d2f62c2f33d23357e11ee03f6d2f2aeb0ea29378f8e62f2511936011b515bbeedf304b5e831e4f4a46b8905dbc421fe2fa521d2e43f languageName: node linkType: hard @@ -12817,11 +13036,11 @@ __metadata: linkType: hard "@keyv/redis@npm:^2.5.3": - version: 2.7.1 - resolution: "@keyv/redis@npm:2.7.1" + version: 2.8.0 + resolution: "@keyv/redis@npm:2.8.0" dependencies: ioredis: ^5.3.2 - checksum: 917547d9f6a3af2d0c355c9c78cac9392a8f3d7f2cc379d42ae158189da346cf0c831708cbb530496fda91dfeb4be2bad207ce154ef2205c2b8ce48b2e43a0fc + checksum: 753e18897bf8e1fed585357d85749c7a1689f5efc1eb7114e790bf760460f7f510d5e76da5cc742269949205c18aad3c58ce4f8ceef5db0ace4ee108833632ba languageName: node linkType: hard @@ -13414,14 +13633,14 @@ __metadata: languageName: node linkType: hard -"@mui/base@npm:5.0.0-beta.17": - version: 5.0.0-beta.17 - resolution: "@mui/base@npm:5.0.0-beta.17" +"@mui/base@npm:5.0.0-beta.19": + version: 5.0.0-beta.19 + resolution: "@mui/base@npm:5.0.0-beta.19" dependencies: - "@babel/runtime": ^7.22.15 + "@babel/runtime": ^7.23.1 "@floating-ui/react-dom": ^2.0.2 - "@mui/types": ^7.2.4 - "@mui/utils": ^5.14.11 + "@mui/types": ^7.2.6 + "@mui/utils": ^5.14.13 "@popperjs/core": ^2.11.8 clsx: ^2.0.0 prop-types: ^15.8.1 @@ -13432,28 +13651,28 @@ __metadata: peerDependenciesMeta: "@types/react": optional: true - checksum: 96ffb85864fc796783514e089c0011ebcc5174705082dc98197ab035dfb287427069c0338e662a4680951849dfbe7a5231f4f6f2aee710af05c07e8578f93310 + checksum: 7503d5609ba242e270cbcaea69f6c7d4935763a34a8ce8de2695078eae12ffcc1d7a57b5d735200de08f2314b2482aa7279631ffd92af240af24f6c31b633d8f languageName: node linkType: hard -"@mui/core-downloads-tracker@npm:^5.14.11": - version: 5.14.11 - resolution: "@mui/core-downloads-tracker@npm:5.14.11" - checksum: f3e7594c93d4cf5e3649336eef2b57842c171f3deb6890c03be7eccb88d3ac276aac1ab3ad409d124d16468314018778e2dbb92a62ac34c7f44b2813c47f29fb +"@mui/core-downloads-tracker@npm:^5.14.13": + version: 5.14.13 + resolution: "@mui/core-downloads-tracker@npm:5.14.13" + checksum: 3094f8c289d53eb2189ce3f9e4c71e735f91cfefeadda4cf37b0f3c3de47d9261fdbd49485f74267e2fe93d8c0cb289d38e9c802a404489017e9f1cee9e56488 languageName: node linkType: hard "@mui/material@npm:^5.12.2": - version: 5.14.11 - resolution: "@mui/material@npm:5.14.11" + version: 5.14.13 + resolution: "@mui/material@npm:5.14.13" dependencies: - "@babel/runtime": ^7.22.15 - "@mui/base": 5.0.0-beta.17 - "@mui/core-downloads-tracker": ^5.14.11 - "@mui/system": ^5.14.11 - "@mui/types": ^7.2.4 - "@mui/utils": ^5.14.11 - "@types/react-transition-group": ^4.4.6 + "@babel/runtime": ^7.23.1 + "@mui/base": 5.0.0-beta.19 + "@mui/core-downloads-tracker": ^5.14.13 + "@mui/system": ^5.14.13 + "@mui/types": ^7.2.6 + "@mui/utils": ^5.14.13 + "@types/react-transition-group": ^4.4.7 clsx: ^2.0.0 csstype: ^3.1.2 prop-types: ^15.8.1 @@ -13472,16 +13691,16 @@ __metadata: optional: true "@types/react": optional: true - checksum: 350d642773d4b19d5b9deac956203dafe89cd005ba8cd6017d1ab0e97ba45ca230050249f34a17f0f00efe466162d47487f160159bebe3e52af1b34dd28579d0 + checksum: 07d73cb5f770743e080494684fd087770893232415c681a25bff2e791414b702d76d02100996a850e89ced81f986c1dc378cc6fb35fcd0724d19b3b0a4a34bed languageName: node linkType: hard -"@mui/private-theming@npm:^5.14.11": - version: 5.14.11 - resolution: "@mui/private-theming@npm:5.14.11" +"@mui/private-theming@npm:^5.14.13": + version: 5.14.13 + resolution: "@mui/private-theming@npm:5.14.13" dependencies: - "@babel/runtime": ^7.22.15 - "@mui/utils": ^5.14.11 + "@babel/runtime": ^7.23.1 + "@mui/utils": ^5.14.13 prop-types: ^15.8.1 peerDependencies: "@types/react": ^17.0.0 || ^18.0.0 @@ -13489,15 +13708,15 @@ __metadata: peerDependenciesMeta: "@types/react": optional: true - checksum: a5d461ae9679b1f3b79f529c51c055e03d84421812bb12110d735fbc5528ae188900488b32aa1b860cb978ac6dd0cb9f54a10e2ff214e853e969ef5c1ed87e84 + checksum: fb2f3644c332a454897f83b98b6fda7344ce30f9382715194442b7d954fdff4e0b96ef017a631259b2f0e44706737eecda7c5306d4833bf5bd834d59b059a6f9 languageName: node linkType: hard -"@mui/styled-engine@npm:^5.14.11": - version: 5.14.11 - resolution: "@mui/styled-engine@npm:5.14.11" +"@mui/styled-engine@npm:^5.14.13": + version: 5.14.13 + resolution: "@mui/styled-engine@npm:5.14.13" dependencies: - "@babel/runtime": ^7.22.15 + "@babel/runtime": ^7.23.1 "@emotion/cache": ^11.11.0 csstype: ^3.1.2 prop-types: ^15.8.1 @@ -13510,19 +13729,19 @@ __metadata: optional: true "@emotion/styled": optional: true - checksum: 0a593f967ab56c32c611eae4a83bc23c4ab3a8931e76a6e553ed18230c2f4e9e912d519fe2f0a24970ff154c198634903f134eb54f00ceebde138a73b953622f + checksum: b927fffbfb3a2c8d09f10b3770da610c94826312c2aa3e17791bd0355ef64056a842ede32f9d22225b952e3055aa2364c06f17620ae5203a0d4bb782ec90388f languageName: node linkType: hard -"@mui/system@npm:^5.14.11": - version: 5.14.11 - resolution: "@mui/system@npm:5.14.11" +"@mui/system@npm:^5.14.13": + version: 5.14.13 + resolution: "@mui/system@npm:5.14.13" dependencies: - "@babel/runtime": ^7.22.15 - "@mui/private-theming": ^5.14.11 - "@mui/styled-engine": ^5.14.11 - "@mui/types": ^7.2.4 - "@mui/utils": ^5.14.11 + "@babel/runtime": ^7.23.1 + "@mui/private-theming": ^5.14.13 + "@mui/styled-engine": ^5.14.13 + "@mui/types": ^7.2.6 + "@mui/utils": ^5.14.13 clsx: ^2.0.0 csstype: ^3.1.2 prop-types: ^15.8.1 @@ -13538,28 +13757,28 @@ __metadata: optional: true "@types/react": optional: true - checksum: c3d0e1a09a9638663a6467452a7725593e9de6f9620e199add1080db42a7affaca39f52a1b6a52fb75d708f3e30336946babb2a8d1d43fab81c6a1fe3e420b21 + checksum: 1dfcd19737792d36e87b83623f1bf836f1e1282faf44646f9788cec9e5fb6502e6082872ab839dcebd0ae3d72c5771aa12bad9d3ee4b7e039582970acda13a8d languageName: node linkType: hard -"@mui/types@npm:^7.2.4": - version: 7.2.4 - resolution: "@mui/types@npm:7.2.4" +"@mui/types@npm:^7.2.6": + version: 7.2.6 + resolution: "@mui/types@npm:7.2.6" peerDependencies: - "@types/react": "*" + "@types/react": ^17.0.0 || ^18.0.0 peerDependenciesMeta: "@types/react": optional: true - checksum: 16bea0547492193a22fd1794382f314698a114f6c673825314c66b56766c3a9d305992cc495684722b7be16a1ecf7e6e48a79caa64f90c439b530e8c02611a61 + checksum: eb92f9c2fa5df048bcf182a611131bee2799ce1de64acfca12855f349d0b69f5f92c953b7e6c4e341e1df48f0e86f1329ed0251be4835ed194f53342827bd576 languageName: node linkType: hard -"@mui/utils@npm:^5.14.11": - version: 5.14.11 - resolution: "@mui/utils@npm:5.14.11" +"@mui/utils@npm:^5.14.13": + version: 5.14.13 + resolution: "@mui/utils@npm:5.14.13" dependencies: - "@babel/runtime": ^7.22.15 - "@types/prop-types": ^15.7.5 + "@babel/runtime": ^7.23.1 + "@types/prop-types": ^15.7.7 prop-types: ^15.8.1 react-is: ^18.2.0 peerDependencies: @@ -13568,7 +13787,7 @@ __metadata: peerDependenciesMeta: "@types/react": optional: true - checksum: 84e640dea3589ea7edb7d8f33748d83d561d4ef413c4d3e2216ddf9c0842d8b04d162e3fa5ea59f03846934f17fb446ed8464e318dd4e2e299e3b44b06637d76 + checksum: 5f04382d7761d35c5f53bcc0ce91c29aba0b3c0afb731f01d2ff078b05afe8098dee412538d846ab3a4b00eec934d46d730f9ef2ef493c3db885e2672480b6f0 languageName: node linkType: hard @@ -13645,14 +13864,14 @@ __metadata: linkType: hard "@newrelic/browser-agent@npm:^1.236.0": - version: 1.239.1 - resolution: "@newrelic/browser-agent@npm:1.239.1" + version: 1.243.1 + resolution: "@newrelic/browser-agent@npm:1.243.1" dependencies: core-js: ^3.26.0 fflate: ^0.7.4 - rrweb: ^2.0.0-alpha.8 + rrweb: 2.0.0-alpha.8 web-vitals: ^3.1.0 - checksum: c1b0df2fff4b5bef3718f94f0fa418dc4db087d6b4bd94547d274acd2fc8f771888baea456d1e559a36d11436d11a34615b3d1cce12d604758a689b950eb7597 + checksum: df7e7aa015560a1140151d094309327ee1ec0a37d876514743171043a20a61d2723dbc2a2945adbac8fc4c04059d45ba3fa248cce3dbe27f21bc7d3c735ad046 languageName: node linkType: hard @@ -14346,78 +14565,78 @@ __metadata: linkType: hard "@opensearch-project/opensearch@npm:^2.2.1": - version: 2.3.1 - resolution: "@opensearch-project/opensearch@npm:2.3.1" + version: 2.4.0 + resolution: "@opensearch-project/opensearch@npm:2.4.0" dependencies: aws4: ^1.11.0 debug: ^4.3.1 hpagent: ^1.2.0 ms: ^2.1.3 secure-json-parse: ^2.4.0 - checksum: 70324153eb9d74c005d5517a997f7027b829387af482956593a23b80c24ba8c9f9cdff40fec3d72e7066f3f16070b543c2d6f59f578e1be898784b49f9f6720f + checksum: 961ba055276c2cea9733247e57c1a1df76671a777b46ba4caa64a15c8b2aeb12d205c02026a6181382d3b575af49c4bf72b7bcb8fe82bc8dc2c519e1792746f3 languageName: node linkType: hard "@opentelemetry/api@npm:^1.0.1, @opentelemetry/api@npm:^1.3.0, @opentelemetry/api@npm:^1.4.1": - version: 1.4.1 - resolution: "@opentelemetry/api@npm:1.4.1" - checksum: e783c40d1a518abf9c4c5d65223237c1392cd9a6c53ac6e2c3ef0c05ff7266e3dfc4fd9874316dae0dcb7a97950878deb513bcbadfaad653d48f0215f2a0911b + version: 1.6.0 + resolution: "@opentelemetry/api@npm:1.6.0" + checksum: 3283b78b62a39f6568eaa050ac7045fcca747679e255874f6d2107cb8e1a3b2e10bfbf553c3e82a72500fb5fdca49dc07a5fe27fd6980debac24506cca638859 languageName: node linkType: hard -"@opentelemetry/core@npm:1.13.0": - version: 1.13.0 - resolution: "@opentelemetry/core@npm:1.13.0" +"@opentelemetry/core@npm:1.17.0": + version: 1.17.0 + resolution: "@opentelemetry/core@npm:1.17.0" dependencies: - "@opentelemetry/semantic-conventions": 1.13.0 + "@opentelemetry/semantic-conventions": 1.17.0 peerDependencies: - "@opentelemetry/api": ">=1.0.0 <1.5.0" - checksum: a69916bcb710f1241e98a58ac5f5dfbc3372fdcd6cb2a4b2d33cdeb941765ecbdeea029f60f650a5743a56f583b0f06b672566467b89db84a24f1304bf2e5205 + "@opentelemetry/api": ">=1.0.0 <1.7.0" + checksum: 8f66bc47f2b9cae429830c91840515d6d70793c27fa139e661a7ae05c503d4a7244b5d52e3526cd32401a5a662775bb04546ca1e3ec20dc7124e6d0bb901f176 languageName: node linkType: hard -"@opentelemetry/exporter-prometheus@npm:^0.39.1": - version: 0.39.1 - resolution: "@opentelemetry/exporter-prometheus@npm:0.39.1" +"@opentelemetry/exporter-prometheus@npm:^0.43.0": + version: 0.43.0 + resolution: "@opentelemetry/exporter-prometheus@npm:0.43.0" dependencies: - "@opentelemetry/core": 1.13.0 - "@opentelemetry/resources": 1.13.0 - "@opentelemetry/sdk-metrics": 1.13.0 + "@opentelemetry/core": 1.17.0 + "@opentelemetry/resources": 1.17.0 + "@opentelemetry/sdk-metrics": 1.17.0 peerDependencies: "@opentelemetry/api": ^1.3.0 - checksum: 97697926ef26e3dca9654b6ea8d2ab8e7fc7fc33ce617d25a6eb70c0ef2e2fe47192fcede15cbe45179d0ade67e55769bbed11c691d34f9e59ebd50aab22add7 + checksum: 3d4bb77a542e35a7c81d146265bcdb5fc6a2cb2962e17cd2321386b8ea4004bdfdcd06b682282be8018f23bf0fd84b077d8706f7656e999d03140bb8be6c9b15 languageName: node linkType: hard -"@opentelemetry/resources@npm:1.13.0": - version: 1.13.0 - resolution: "@opentelemetry/resources@npm:1.13.0" +"@opentelemetry/resources@npm:1.17.0": + version: 1.17.0 + resolution: "@opentelemetry/resources@npm:1.17.0" dependencies: - "@opentelemetry/core": 1.13.0 - "@opentelemetry/semantic-conventions": 1.13.0 + "@opentelemetry/core": 1.17.0 + "@opentelemetry/semantic-conventions": 1.17.0 peerDependencies: - "@opentelemetry/api": ">=1.0.0 <1.5.0" - checksum: ef0a11596f27b5e1c13b74357da06c5c2725a1056df0a583562dbcc739927ad85bb8bdec4e01f4b43f348b448c0146c033b135840a7d388b75cc751a33a6364e + "@opentelemetry/api": ">=1.0.0 <1.7.0" + checksum: 517dba494be0a55ff489b086b8ba33401993d7231483c5e37ff8bc2d360846064ea71cb37b0e7fed39de4f8291a0cccdbd3724e8d9751c72c09ecc66a312f2f4 languageName: node linkType: hard -"@opentelemetry/sdk-metrics@npm:1.13.0, @opentelemetry/sdk-metrics@npm:^1.13.0": - version: 1.13.0 - resolution: "@opentelemetry/sdk-metrics@npm:1.13.0" +"@opentelemetry/sdk-metrics@npm:1.17.0, @opentelemetry/sdk-metrics@npm:^1.13.0": + version: 1.17.0 + resolution: "@opentelemetry/sdk-metrics@npm:1.17.0" dependencies: - "@opentelemetry/core": 1.13.0 - "@opentelemetry/resources": 1.13.0 - lodash.merge: 4.6.2 + "@opentelemetry/core": 1.17.0 + "@opentelemetry/resources": 1.17.0 + lodash.merge: ^4.6.2 peerDependencies: - "@opentelemetry/api": ">=1.3.0 <1.5.0" - checksum: 2f87444b6c789acdde3465383b4255b072e201cf9bed642e82970540bfe913d76d4c4ebf8cc1ff3da383d3235dd8399cd6407fac86085a9ac9ff5b5b3afc9f38 + "@opentelemetry/api": ">=1.3.0 <1.7.0" + checksum: 4f42e7be9c9425f1f2442d1ab333287d42f196b1295ac996aa28e2b414a4a1a034a8857f08ce23a6f32567735682421620f6b63de7c4592d0dc1dd4f487ce8ef languageName: node linkType: hard -"@opentelemetry/semantic-conventions@npm:1.13.0": - version: 1.13.0 - resolution: "@opentelemetry/semantic-conventions@npm:1.13.0" - checksum: 9cccf1d73315fed3920bb2201c0e82f66e58dddfa475314b6613780c2804570d6f657be3894eb8b84a2a543c9b8cd520587f5d6cd4b62bc6731d7299b4c5ee69 +"@opentelemetry/semantic-conventions@npm:1.17.0": + version: 1.17.0 + resolution: "@opentelemetry/semantic-conventions@npm:1.17.0" + checksum: 3cb99118b3720aed37fa71d9b6c38847a481d5287653275477d30126de9e548f63a302efbd8a2086a747442880598bbde95ef17f8016dce45b85798696f12be4 languageName: node linkType: hard @@ -14674,10 +14893,10 @@ __metadata: languageName: node linkType: hard -"@remix-run/router@npm:1.8.0": - version: 1.8.0 - resolution: "@remix-run/router@npm:1.8.0" - checksum: f754f02d3b4fc86791b88acf16065000609e2324b9436027844a76831c7107c0994067cb83abdd6093c282bd518a5c89b5e02aead585782978586e3a04534428 +"@remix-run/router@npm:1.9.0": + version: 1.9.0 + resolution: "@remix-run/router@npm:1.9.0" + checksum: 0537b0ff29879ac85077cb4c42eaca4a295b9efd71477848984c2f2dfa5741c9b83d3106a7bb72994a51a9adfeeab3b0f5a40f2dee8be3f0750feeeca2a6d513 languageName: node linkType: hard @@ -14830,14 +15049,14 @@ __metadata: linkType: hard "@roadiehq/backstage-plugin-github-pull-requests@npm:^2.2.7": - version: 2.5.16 - resolution: "@roadiehq/backstage-plugin-github-pull-requests@npm:2.5.16" + version: 2.5.18 + resolution: "@roadiehq/backstage-plugin-github-pull-requests@npm:2.5.18" dependencies: "@backstage/catalog-model": ^1.4.2 "@backstage/core-components": ^0.13.5 "@backstage/core-plugin-api": ^1.6.0 "@backstage/plugin-catalog-react": ^1.8.4 - "@backstage/plugin-home": ^0.5.8 + "@backstage/plugin-home-react": ^0.1.3 "@material-ui/core": ^4.11.0 "@material-ui/icons": ^4.9.1 "@material-ui/lab": ^4.0.0-alpha.60 @@ -14854,7 +15073,7 @@ __metadata: react: ^16.13.1 || ^17.0.0 react-dom: ^16.13.1 || ^17.0.0 react-router: 6.0.0-beta.0 || ^6.3.0 - checksum: cb35e64d4df6f81829cd238e3b06b84453ad9231a30a0a4698ebb9d408445af0bfeb59d27bcc5d818013735f2f4d44a89ff9824258ff1565274c524c3ae905cc + checksum: 674644685ab61057d11ed4b372045ad0287fdf17de5c325d007f98726f6839678e47cb0e5b23cf344e62ab0a2c1a037df05ee9d0cad1dba85564e0df79481fc0 languageName: node linkType: hard @@ -14934,18 +15153,18 @@ __metadata: linkType: hard "@rollup/plugin-yaml@npm:^4.0.0": - version: 4.1.1 - resolution: "@rollup/plugin-yaml@npm:4.1.1" + version: 4.1.2 + resolution: "@rollup/plugin-yaml@npm:4.1.2" dependencies: "@rollup/pluginutils": ^5.0.1 js-yaml: ^4.1.0 tosource: ^2.0.0-alpha.3 peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0 + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 peerDependenciesMeta: rollup: optional: true - checksum: 99c8f9d4a354056bec8a9398786777203d87db32db0cad681f65ee896cbbbb8a61ace0b1c3d801622782ccf28e56eac6cdde950541fb1f7b3e651ad9c705d5c3 + checksum: a044bb4568a10712465553ea5f31c13a2b7bc371a7f8382014e6b8048c0a264f5645f83f4d70ce9ab46b75117b94cdc032b597e9315fd2adcd8f30637f44bbea languageName: node linkType: hard @@ -14988,12 +15207,12 @@ __metadata: languageName: node linkType: hard -"@rrweb/types@npm:^2.0.0-alpha.9": - version: 2.0.0-alpha.9 - resolution: "@rrweb/types@npm:2.0.0-alpha.9" +"@rrweb/types@npm:^2.0.0-alpha.8": + version: 2.0.0-alpha.11 + resolution: "@rrweb/types@npm:2.0.0-alpha.11" dependencies: - rrweb-snapshot: ^2.0.0-alpha.9 - checksum: adc6bc7a6e45294ae7b85a137ae6774a822f103f0a29ecf8d59b72c88b6ddfaedc5a16d71971c08a2ab25e3e3af89f9582d8508bcf6b33d97fc326cdf91a09b2 + rrweb-snapshot: ^2.0.0-alpha.11 + checksum: 63c815597daacb7f6978c973c53e6e8f10301c0224ce675792c2c8a2cdf059845aefef92b2ee259837813081796398e3432195fdd8cb72c437ab77a20c50b2c7 languageName: node linkType: hard @@ -15844,8 +16063,8 @@ __metadata: linkType: hard "@stoplight/spectral-formatters@npm:^1.1.0": - version: 1.2.0 - resolution: "@stoplight/spectral-formatters@npm:1.2.0" + version: 1.3.0 + resolution: "@stoplight/spectral-formatters@npm:1.3.0" dependencies: "@stoplight/path": ^1.3.2 "@stoplight/spectral-core": ^1.15.1 @@ -15854,10 +16073,11 @@ __metadata: chalk: 4.1.2 cliui: 7.0.4 lodash: ^4.17.21 + node-sarif-builder: ^2.0.3 strip-ansi: 6.0 text-table: ^0.2.0 tslib: ^2.5.0 - checksum: e84cc06ed33348f532f513b64d7179e2e261d6b87e45be66169088bf8d4c0fbc8fcda92adcde0d3f88f03eb5f31fbf9b2c853cdd49d4d1ae809d9a76920adb16 + checksum: d56757f5204571c5d86551bb8ea56183236c9dab69d95104abcf639a4ff3a465efa5e393f68fd9032c852e0078c514b343a9eaa3aea3ecb8e465f4eeb92bd29f languageName: node linkType: hard @@ -15906,8 +16126,8 @@ __metadata: linkType: hard "@stoplight/spectral-rulesets@npm:^1.16.0": - version: 1.17.0 - resolution: "@stoplight/spectral-rulesets@npm:1.17.0" + version: 1.18.0 + resolution: "@stoplight/spectral-rulesets@npm:1.18.0" dependencies: "@asyncapi/specs": ^4.1.0 "@stoplight/better-ajv-errors": 1.0.3 @@ -15923,7 +16143,7 @@ __metadata: json-schema-traverse: ^1.0.0 lodash: ~4.17.21 tslib: ^2.3.0 - checksum: 3f79636fde7e2ae26f6af5f5e50e2faa385cbd7b22ea658ea15cf0f1c04a3827e168340f877310f4ab7d6bacc82910e21b2aa43f60b95a923dc430ee0978569b + checksum: 7abdc837acf64f1408bd71bf98169af6dad9b9adcdb7758ab705599989bf7f5c3e5739bd409f959f21e2d9e06919c6cbfff2500fd3180f45b2f4e1dbf2c62129 languageName: node linkType: hard @@ -16175,341 +16395,364 @@ __metadata: languageName: node linkType: hard -"@swagger-api/apidom-ast@npm:^0.74.1": - version: 0.74.1 - resolution: "@swagger-api/apidom-ast@npm:0.74.1" +"@swagger-api/apidom-ast@npm:^0.77.0": + version: 0.77.0 + resolution: "@swagger-api/apidom-ast@npm:0.77.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 + "@swagger-api/apidom-error": ^0.77.0 "@types/ramda": ~0.29.3 ramda: ~0.29.0 - ramda-adjunct: ^4.0.0 + ramda-adjunct: ^4.1.1 stampit: ^4.3.2 unraw: ^3.0.0 - checksum: 453880bafb11c9c53768629bf0c9c3cfdab76625dbd4eb34ec146c23eb782dace3c279ca4cff665ac20f3fae229ba96bff2bdbacba383630107f23522183f130 + checksum: ffd54c63103bb24763f6531f672d8b8112bcc6a6730b770621f2b95a0e25e72cdcf513608739006a6a937b82e59d16b9368e95f1dc7560388ccdb65178b9501d languageName: node linkType: hard -"@swagger-api/apidom-core@npm:>=0.74.1 <1.0.0, @swagger-api/apidom-core@npm:^0.74.1": - version: 0.74.1 - resolution: "@swagger-api/apidom-core@npm:0.74.1" +"@swagger-api/apidom-core@npm:>=0.77.0 <1.0.0, @swagger-api/apidom-core@npm:^0.77.0": + version: 0.77.0 + resolution: "@swagger-api/apidom-core@npm:0.77.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-ast": ^0.74.1 + "@swagger-api/apidom-ast": ^0.77.0 + "@swagger-api/apidom-error": ^0.77.0 "@types/ramda": ~0.29.3 minim: ~0.23.8 ramda: ~0.29.0 - ramda-adjunct: ^4.0.0 - short-unique-id: ^4.4.4 + ramda-adjunct: ^4.1.1 + short-unique-id: ^5.0.2 stampit: ^4.3.2 - checksum: 8369c45198a2d955dd84a55564f89411394df388c2cf277208fbfcaf3014ae596f4de9916b55d918683b13fc18f0c54a0e190bf34206cf4c16c10a1a7e50ab07 + checksum: 06251765371bc89cedbd142979913c8b5006e6c434e21f9567816a0da7450ed4e7d0430db487cfad1f0244f63a1adaad48a7115148029a9bf034cca995eb0df4 languageName: node linkType: hard -"@swagger-api/apidom-json-pointer@npm:>=0.74.1 <1.0.0, @swagger-api/apidom-json-pointer@npm:^0.74.1": - version: 0.74.1 - resolution: "@swagger-api/apidom-json-pointer@npm:0.74.1" +"@swagger-api/apidom-error@npm:^0.77.0": + version: 0.77.0 + resolution: "@swagger-api/apidom-error@npm:0.77.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.74.1 "@types/ramda": ~0.29.3 ramda: ~0.29.0 ramda-adjunct: ^4.0.0 - checksum: 2adbbb735cd559b975fa58d11b7d99844eb5eb48282842cb6048e61742229198519cfbcf90f48c38cfbbad089b9d71a258c9aeb92c3fbec8abe392756e4816f0 + checksum: 9a9424cdd659b024d7e5afbcf66808c15ff9455c21beda2f8f2442b798f4968c424e5bdc71f70a4284e7feed1ea1697d09823d65b91c752efc0a2767119e9674 languageName: node linkType: hard -"@swagger-api/apidom-ns-api-design-systems@npm:^0.74.1": - version: 0.74.1 - resolution: "@swagger-api/apidom-ns-api-design-systems@npm:0.74.1" +"@swagger-api/apidom-json-pointer@npm:>=0.77.0 <1.0.0, @swagger-api/apidom-json-pointer@npm:^0.77.0": + version: 0.77.0 + resolution: "@swagger-api/apidom-json-pointer@npm:0.77.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.74.1 - "@swagger-api/apidom-ns-openapi-3-1": ^0.74.1 + "@swagger-api/apidom-core": ^0.77.0 + "@swagger-api/apidom-error": ^0.77.0 "@types/ramda": ~0.29.3 ramda: ~0.29.0 ramda-adjunct: ^4.0.0 + checksum: 55f1b0d72eb96b9079f67a028d882841c94ab88a0ee67b826ab79d543763eae9428607dd47efb5524ce9bf80321620465f35d296282e1f3d0a6fd969c5269057 + languageName: node + linkType: hard + +"@swagger-api/apidom-ns-api-design-systems@npm:^0.77.0": + version: 0.77.0 + resolution: "@swagger-api/apidom-ns-api-design-systems@npm:0.77.0" + dependencies: + "@babel/runtime-corejs3": ^7.20.7 + "@swagger-api/apidom-core": ^0.77.0 + "@swagger-api/apidom-error": ^0.77.0 + "@swagger-api/apidom-ns-openapi-3-1": ^0.77.0 + "@types/ramda": ~0.29.3 + ramda: ~0.29.0 + ramda-adjunct: ^4.1.1 stampit: ^4.3.2 - checksum: 83bb664015243a9fb342d81f1700f7dde12015a3c34c45ac0575fc79388eeec99dd97f6139207437b883b0e3c261916ebb931571c1c0e0240f84ea7fd57d8c93 + checksum: 93dd9b8c30592c8b98798aa7243d322fc4f287bd37ffb00b0a503f9c24759c96f9538212ca28972f684f9cb62ee7e6b8a4f76ac90e2b61616c4adb7b978a026a languageName: node linkType: hard -"@swagger-api/apidom-ns-asyncapi-2@npm:^0.74.1": - version: 0.74.1 - resolution: "@swagger-api/apidom-ns-asyncapi-2@npm:0.74.1" +"@swagger-api/apidom-ns-asyncapi-2@npm:^0.77.0": + version: 0.77.0 + resolution: "@swagger-api/apidom-ns-asyncapi-2@npm:0.77.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.74.1 - "@swagger-api/apidom-ns-json-schema-draft-7": ^0.74.1 + "@swagger-api/apidom-core": ^0.77.0 + "@swagger-api/apidom-ns-json-schema-draft-7": ^0.77.0 "@types/ramda": ~0.29.3 ramda: ~0.29.0 - ramda-adjunct: ^4.0.0 + ramda-adjunct: ^4.1.1 stampit: ^4.3.2 - checksum: 8577a17410f4bcc9d1a921f6e567c611b71316a6aba4bc3e06a11316b915d053a589693d44350ded7de67f8f6c58b4b0075cabee88a2603ce9790e54be2a1946 + checksum: 3675d90580baabcd4b866ca8a18f2eee865d2b5be0313fd7d6d8abfb4e342c5fdcc40b11abdff5547098f0bf44a85967f31fc1e8a266b3f3608628139981f808 languageName: node linkType: hard -"@swagger-api/apidom-ns-json-schema-draft-4@npm:^0.74.1": - version: 0.74.1 - resolution: "@swagger-api/apidom-ns-json-schema-draft-4@npm:0.74.1" +"@swagger-api/apidom-ns-json-schema-draft-4@npm:^0.77.0": + version: 0.77.0 + resolution: "@swagger-api/apidom-ns-json-schema-draft-4@npm:0.77.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-ast": ^0.74.1 - "@swagger-api/apidom-core": ^0.74.1 + "@swagger-api/apidom-ast": ^0.77.0 + "@swagger-api/apidom-core": ^0.77.0 "@types/ramda": ~0.29.3 ramda: ~0.29.0 - ramda-adjunct: ^4.0.0 + ramda-adjunct: ^4.1.1 stampit: ^4.3.2 - checksum: 1d07a05dee36b1fdb238f57a22b620814fcaae21bbf46b83296048a1806a4be66901bc5aefbc42e4928d058a5df9203f9ad3fdf3f57476b6b61bb985f82bd99b + checksum: d8f2a94fab06d731f397a8a5eb950053a2af67509155f2379033ed59592f95dad2ab9a1d15e39bfd606cb2d11003230b7e34bb2f52a837640d8b9c20f1e96a0d languageName: node linkType: hard -"@swagger-api/apidom-ns-json-schema-draft-6@npm:^0.74.1": - version: 0.74.1 - resolution: "@swagger-api/apidom-ns-json-schema-draft-6@npm:0.74.1" +"@swagger-api/apidom-ns-json-schema-draft-6@npm:^0.77.0": + version: 0.77.0 + resolution: "@swagger-api/apidom-ns-json-schema-draft-6@npm:0.77.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.74.1 - "@swagger-api/apidom-ns-json-schema-draft-4": ^0.74.1 + "@swagger-api/apidom-core": ^0.77.0 + "@swagger-api/apidom-error": ^0.77.0 + "@swagger-api/apidom-ns-json-schema-draft-4": ^0.77.0 "@types/ramda": ~0.29.3 ramda: ~0.29.0 - ramda-adjunct: ^4.0.0 + ramda-adjunct: ^4.1.1 stampit: ^4.3.2 - checksum: d2460a3afaebfbb304aa610e4dd5dc5fdab4325dd9ce14d393b13bb7399e3b37f4bde837266ba9876c973b6dfc5eb179c27346c2941ad2fe77923b743b3a4ebc + checksum: e80387564631180bd132f76046cbf8f773d6e1a4cd8cef9210320d5b8d4bec047a7884428ec625f9cb002b8d455bfffb5de5369647be6e25ef16b669568611e7 languageName: node linkType: hard -"@swagger-api/apidom-ns-json-schema-draft-7@npm:^0.74.1": - version: 0.74.1 - resolution: "@swagger-api/apidom-ns-json-schema-draft-7@npm:0.74.1" +"@swagger-api/apidom-ns-json-schema-draft-7@npm:^0.77.0": + version: 0.77.0 + resolution: "@swagger-api/apidom-ns-json-schema-draft-7@npm:0.77.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.74.1 - "@swagger-api/apidom-ns-json-schema-draft-6": ^0.74.1 + "@swagger-api/apidom-core": ^0.77.0 + "@swagger-api/apidom-error": ^0.77.0 + "@swagger-api/apidom-ns-json-schema-draft-6": ^0.77.0 "@types/ramda": ~0.29.3 ramda: ~0.29.0 - ramda-adjunct: ^4.0.0 + ramda-adjunct: ^4.1.1 stampit: ^4.3.2 - checksum: cefc04786f2ce5640397e84141ab02e921d578ae5ebd9b3d06d8ad405f1ebc8589f2069f4c57cbdf5e8b911cb6a39fd248bfb7567a66968fe62542f6f64e52eb + checksum: c57146e2adfa810a2d7204a72fe952914fb9ae66bcdba27f495d216dc15ed8e81c7d7d77eb8b27cd1efadb662059fdb761de5e1ba9e0ca36ba32cdc2fe34c7b7 languageName: node linkType: hard -"@swagger-api/apidom-ns-openapi-3-0@npm:^0.74.1": - version: 0.74.1 - resolution: "@swagger-api/apidom-ns-openapi-3-0@npm:0.74.1" +"@swagger-api/apidom-ns-openapi-3-0@npm:^0.77.0": + version: 0.77.0 + resolution: "@swagger-api/apidom-ns-openapi-3-0@npm:0.77.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.74.1 - "@swagger-api/apidom-ns-json-schema-draft-4": ^0.74.1 + "@swagger-api/apidom-core": ^0.77.0 + "@swagger-api/apidom-ns-json-schema-draft-4": ^0.77.0 "@types/ramda": ~0.29.3 ramda: ~0.29.0 - ramda-adjunct: ^4.0.0 + ramda-adjunct: ^4.1.1 stampit: ^4.3.2 - checksum: 4c482714ce82287493d54cd454633bb044ca02659f3080084f34fc93f2f6f162cc5809499ced20a4db33092d30396d22fc80c63db080320306216a84077e26f5 + checksum: 54ab6155addc04c5c889768438b9e5fb084e084f2226034cafd71a1b22a66c90cd29d7731b24330a914cd5c049d0f2cfca92fc541eb3a3f297fdd9ca0b97036b languageName: node linkType: hard -"@swagger-api/apidom-ns-openapi-3-1@npm:>=0.74.1 <1.0.0, @swagger-api/apidom-ns-openapi-3-1@npm:^0.74.1": - version: 0.74.1 - resolution: "@swagger-api/apidom-ns-openapi-3-1@npm:0.74.1" +"@swagger-api/apidom-ns-openapi-3-1@npm:>=0.77.0 <1.0.0, @swagger-api/apidom-ns-openapi-3-1@npm:^0.77.0": + version: 0.77.0 + resolution: "@swagger-api/apidom-ns-openapi-3-1@npm:0.77.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-ast": ^0.74.1 - "@swagger-api/apidom-core": ^0.74.1 - "@swagger-api/apidom-ns-openapi-3-0": ^0.74.1 + "@swagger-api/apidom-ast": ^0.77.0 + "@swagger-api/apidom-core": ^0.77.0 + "@swagger-api/apidom-ns-openapi-3-0": ^0.77.0 "@types/ramda": ~0.29.3 ramda: ~0.29.0 - ramda-adjunct: ^4.0.0 + ramda-adjunct: ^4.1.1 stampit: ^4.3.2 - checksum: 1de6568ad876481ab83cec6755854314511d45bfd67f5b65f2fc44238e4bd7269f688d1931b31d939fdddfa2b29ba3442e3fe778736a777462fc517a54b8c0d9 + checksum: cac2c97892f104ef130a75e3ff6e244b36e0f9706d9a8106ab7bfa8eb0d64a547970b7a54ab5cc67c90b28a9ddc7141d5819015ad1682a9ef116348bb14b3401 languageName: node linkType: hard -"@swagger-api/apidom-parser-adapter-api-design-systems-json@npm:^0.74.1": - version: 0.74.1 - resolution: "@swagger-api/apidom-parser-adapter-api-design-systems-json@npm:0.74.1" +"@swagger-api/apidom-parser-adapter-api-design-systems-json@npm:^0.77.0": + version: 0.77.0 + resolution: "@swagger-api/apidom-parser-adapter-api-design-systems-json@npm:0.77.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.74.1 - "@swagger-api/apidom-ns-api-design-systems": ^0.74.1 - "@swagger-api/apidom-parser-adapter-json": ^0.74.1 + "@swagger-api/apidom-core": ^0.77.0 + "@swagger-api/apidom-ns-api-design-systems": ^0.77.0 + "@swagger-api/apidom-parser-adapter-json": ^0.77.0 "@types/ramda": ~0.29.3 ramda: ~0.29.0 ramda-adjunct: ^4.0.0 - checksum: 223720aac5979da9ccd931cebddfa6be944c5ba269ddddde4c5a9bec24627f0cc3655d83ea54b60bc093603c2d5fb169a451d356e5dafe49be66b150c6542a8b + checksum: 98278205fc50670f3b7bcade96326354f51e28071b2a9c33044d9b547c199d6386e2050fb27c0b939cf6feab0b3433b2f01f27b40d08e5e214221058a00243c9 languageName: node linkType: hard -"@swagger-api/apidom-parser-adapter-api-design-systems-yaml@npm:^0.74.1": - version: 0.74.1 - resolution: "@swagger-api/apidom-parser-adapter-api-design-systems-yaml@npm:0.74.1" +"@swagger-api/apidom-parser-adapter-api-design-systems-yaml@npm:^0.77.0": + version: 0.77.0 + resolution: "@swagger-api/apidom-parser-adapter-api-design-systems-yaml@npm:0.77.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.74.1 - "@swagger-api/apidom-ns-api-design-systems": ^0.74.1 - "@swagger-api/apidom-parser-adapter-yaml-1-2": ^0.74.1 + "@swagger-api/apidom-core": ^0.77.0 + "@swagger-api/apidom-ns-api-design-systems": ^0.77.0 + "@swagger-api/apidom-parser-adapter-yaml-1-2": ^0.77.0 "@types/ramda": ~0.29.3 ramda: ~0.29.0 ramda-adjunct: ^4.0.0 - checksum: 0072ec50f650c8e8758e87deafffd86805bb858edcb83301739301a4e8f24e6a563311b65e261573c1858f1e7772cd3a6f9a78102ade9da225f9079ebbe5fdb5 + checksum: 996b6f77458d3f9ca4bbe1680f87bb0226eec48ee5d81c653f3341565a091a5dc118a01dd715e593cc61069b5476bd20d89fd3cb7e60d51d66d08f3095869e0c languageName: node linkType: hard -"@swagger-api/apidom-parser-adapter-asyncapi-json-2@npm:^0.74.1": - version: 0.74.1 - resolution: "@swagger-api/apidom-parser-adapter-asyncapi-json-2@npm:0.74.1" +"@swagger-api/apidom-parser-adapter-asyncapi-json-2@npm:^0.77.0": + version: 0.77.0 + resolution: "@swagger-api/apidom-parser-adapter-asyncapi-json-2@npm:0.77.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.74.1 - "@swagger-api/apidom-ns-asyncapi-2": ^0.74.1 - "@swagger-api/apidom-parser-adapter-json": ^0.74.1 + "@swagger-api/apidom-core": ^0.77.0 + "@swagger-api/apidom-ns-asyncapi-2": ^0.77.0 + "@swagger-api/apidom-parser-adapter-json": ^0.77.0 "@types/ramda": ~0.29.3 ramda: ~0.29.0 ramda-adjunct: ^4.0.0 - checksum: 0ba020d883cd305fd11dde0d25714bf2b59ba7772a67b743ae15b5efd204b48be8654c2f3fd10879cb84550aa53bba0ab0186ddd3de6c590f7da5a620f416c1a + checksum: 1dca476bc5b38f3a7da2c8b3a37d6fc18933acaf097c898d50541e323607b038388b84f4df01a68d7a955d2baeedc9359e00aa3bb866372c27e2d49d123450af languageName: node linkType: hard -"@swagger-api/apidom-parser-adapter-asyncapi-yaml-2@npm:^0.74.1": - version: 0.74.1 - resolution: "@swagger-api/apidom-parser-adapter-asyncapi-yaml-2@npm:0.74.1" +"@swagger-api/apidom-parser-adapter-asyncapi-yaml-2@npm:^0.77.0": + version: 0.77.0 + resolution: "@swagger-api/apidom-parser-adapter-asyncapi-yaml-2@npm:0.77.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.74.1 - "@swagger-api/apidom-ns-asyncapi-2": ^0.74.1 - "@swagger-api/apidom-parser-adapter-yaml-1-2": ^0.74.1 + "@swagger-api/apidom-core": ^0.77.0 + "@swagger-api/apidom-ns-asyncapi-2": ^0.77.0 + "@swagger-api/apidom-parser-adapter-yaml-1-2": ^0.77.0 "@types/ramda": ~0.29.3 ramda: ~0.29.0 ramda-adjunct: ^4.0.0 - checksum: b446ffa2ce7189df644259dbbc9bcfef39e8327fb2c47febff0abea58889069f45a47143dfc5b846c90ca9258e64d277f436b1166bdfe67c22c935170301e22c + checksum: 0d39636ad24c7dc3d8008bf36a887ef374b6cc7d3da70615f593604daabfb950217be2d648a48eefe0ec8a8b797f1097568d9658dcc628b1d7f6f2f85f16f2f8 languageName: node linkType: hard -"@swagger-api/apidom-parser-adapter-json@npm:^0.74.1": - version: 0.74.1 - resolution: "@swagger-api/apidom-parser-adapter-json@npm:0.74.1" +"@swagger-api/apidom-parser-adapter-json@npm:^0.77.0": + version: 0.77.0 + resolution: "@swagger-api/apidom-parser-adapter-json@npm:0.77.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-ast": ^0.74.1 - "@swagger-api/apidom-core": ^0.74.1 + "@swagger-api/apidom-ast": ^0.77.0 + "@swagger-api/apidom-core": ^0.77.0 + "@swagger-api/apidom-error": ^0.77.0 "@types/ramda": ~0.29.3 node-gyp: latest ramda: ~0.29.0 - ramda-adjunct: ^4.0.0 + ramda-adjunct: ^4.1.1 stampit: ^4.3.2 tree-sitter: =0.20.4 tree-sitter-json: =0.20.0 web-tree-sitter: =0.20.3 - checksum: d80a2f9880a73b6cf6dec91bdb119eb52d57d4bce5431e4b344c734878ebec91e3350f9220b7f7eca2987ae955f236c92884f617b50631ddf97477d4bef4ab5b + checksum: 4201832631976179d738de8e80c42c07d3bc9e369485b68b6074dab3cae5753ddc908bb875418fd8b90bdd290e1dfe12d058fc32b0a2285f98aa975bb2d6f754 languageName: node linkType: hard -"@swagger-api/apidom-parser-adapter-openapi-json-3-0@npm:^0.74.1": - version: 0.74.1 - resolution: "@swagger-api/apidom-parser-adapter-openapi-json-3-0@npm:0.74.1" +"@swagger-api/apidom-parser-adapter-openapi-json-3-0@npm:^0.77.0": + version: 0.77.0 + resolution: "@swagger-api/apidom-parser-adapter-openapi-json-3-0@npm:0.77.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.74.1 - "@swagger-api/apidom-ns-openapi-3-0": ^0.74.1 - "@swagger-api/apidom-parser-adapter-json": ^0.74.1 + "@swagger-api/apidom-core": ^0.77.0 + "@swagger-api/apidom-ns-openapi-3-0": ^0.77.0 + "@swagger-api/apidom-parser-adapter-json": ^0.77.0 "@types/ramda": ~0.29.3 ramda: ~0.29.0 ramda-adjunct: ^4.0.0 - checksum: 223e6f8589b792b47a7c21006cdfe08f4472c3e085fdc66a99528a479a46fedef536e6f27e89b75bd8f3cd983749eabaabcba60700599dad8c041ba1417600a8 + checksum: 2b98f225839c556ae332766960b49477cf5f3f89a710f8eb8151eb078827f5fc82dc5f1d8691454200a24aa192ad3799fe2446c4a779fba137ac2ee09fb0ee01 languageName: node linkType: hard -"@swagger-api/apidom-parser-adapter-openapi-json-3-1@npm:^0.74.1": - version: 0.74.1 - resolution: "@swagger-api/apidom-parser-adapter-openapi-json-3-1@npm:0.74.1" +"@swagger-api/apidom-parser-adapter-openapi-json-3-1@npm:^0.77.0": + version: 0.77.0 + resolution: "@swagger-api/apidom-parser-adapter-openapi-json-3-1@npm:0.77.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.74.1 - "@swagger-api/apidom-ns-openapi-3-1": ^0.74.1 - "@swagger-api/apidom-parser-adapter-json": ^0.74.1 + "@swagger-api/apidom-core": ^0.77.0 + "@swagger-api/apidom-ns-openapi-3-1": ^0.77.0 + "@swagger-api/apidom-parser-adapter-json": ^0.77.0 "@types/ramda": ~0.29.3 ramda: ~0.29.0 ramda-adjunct: ^4.0.0 - checksum: defdbd6e641317bd0d6508b4f92dca0216e041a6672fc48c998aef53c08aeb89591954d6a348ead1be728b9cefcc9e9e786bcba3aa7bc2659cce7e47e08b31a0 + checksum: a033f89957c4ef1e25f093026462d361942d613622f69acfd460c57485d183642ea9c29a004d94cff108779f2e55378cae5cd4dfd6e28fc20ecf93a5310369c8 languageName: node linkType: hard -"@swagger-api/apidom-parser-adapter-openapi-yaml-3-0@npm:^0.74.1": - version: 0.74.1 - resolution: "@swagger-api/apidom-parser-adapter-openapi-yaml-3-0@npm:0.74.1" +"@swagger-api/apidom-parser-adapter-openapi-yaml-3-0@npm:^0.77.0": + version: 0.77.0 + resolution: "@swagger-api/apidom-parser-adapter-openapi-yaml-3-0@npm:0.77.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.74.1 - "@swagger-api/apidom-ns-openapi-3-0": ^0.74.1 - "@swagger-api/apidom-parser-adapter-yaml-1-2": ^0.74.1 + "@swagger-api/apidom-core": ^0.77.0 + "@swagger-api/apidom-ns-openapi-3-0": ^0.77.0 + "@swagger-api/apidom-parser-adapter-yaml-1-2": ^0.77.0 "@types/ramda": ~0.29.3 ramda: ~0.29.0 ramda-adjunct: ^4.0.0 - checksum: c63fcb9501f28a1a9c6815fc71a1a5200f49822fe101665bb5ffbe4fcb52f67e68c072f268a334d5495bac4cea261206add12d0deb08594cb934d897cd1cf604 + checksum: ce1b582d4c8f5abaaa595e6064e61c5003697257dac21b3e1602f43f42510284c2e9b720380a94e2eb035abec90a25e5ced41071a5560600bc0ad85ad3651d4a languageName: node linkType: hard -"@swagger-api/apidom-parser-adapter-openapi-yaml-3-1@npm:^0.74.1": - version: 0.74.1 - resolution: "@swagger-api/apidom-parser-adapter-openapi-yaml-3-1@npm:0.74.1" +"@swagger-api/apidom-parser-adapter-openapi-yaml-3-1@npm:^0.77.0": + version: 0.77.0 + resolution: "@swagger-api/apidom-parser-adapter-openapi-yaml-3-1@npm:0.77.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.74.1 - "@swagger-api/apidom-ns-openapi-3-1": ^0.74.1 - "@swagger-api/apidom-parser-adapter-yaml-1-2": ^0.74.1 + "@swagger-api/apidom-core": ^0.77.0 + "@swagger-api/apidom-ns-openapi-3-1": ^0.77.0 + "@swagger-api/apidom-parser-adapter-yaml-1-2": ^0.77.0 "@types/ramda": ~0.29.3 ramda: ~0.29.0 ramda-adjunct: ^4.0.0 - checksum: 11893a6477013377bc60785f4e2769c5c7ddd403358c3ad2def037b75227d661cc26ec85d5a5dad9cae906696fe9091cdaab9a1d822c80c627f5cd99af1ed295 + checksum: 169fb616d2c2f3b5f136450122c9c5c6e5016d50efe5b2e64b67fde72359fc7114580b22f952ae97e5d6f30377e3b8688cc610e679f2ebf1c4e5e973130fd9e1 languageName: node linkType: hard -"@swagger-api/apidom-parser-adapter-yaml-1-2@npm:^0.74.1": - version: 0.74.1 - resolution: "@swagger-api/apidom-parser-adapter-yaml-1-2@npm:0.74.1" +"@swagger-api/apidom-parser-adapter-yaml-1-2@npm:^0.77.0": + version: 0.77.0 + resolution: "@swagger-api/apidom-parser-adapter-yaml-1-2@npm:0.77.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-ast": ^0.74.1 - "@swagger-api/apidom-core": ^0.74.1 + "@swagger-api/apidom-ast": ^0.77.0 + "@swagger-api/apidom-core": ^0.77.0 + "@swagger-api/apidom-error": ^0.77.0 "@types/ramda": ~0.29.3 node-gyp: latest ramda: ~0.29.0 - ramda-adjunct: ^4.0.0 + ramda-adjunct: ^4.1.1 stampit: ^4.3.2 tree-sitter: =0.20.4 tree-sitter-yaml: =0.5.0 web-tree-sitter: =0.20.3 - checksum: 145a1f248f9de7a7f31593f7a9ad593c653948414e3fe70349d54b2301a7bb501765ccd595db318d00fcb5d9eafaa394e514fc68c4f69741096b750ad4f3affe + checksum: 8f58f0b05c4e1cce86c456bf5f4d68a479992542620194fd8207b4550c6b876568847583e19b2f1855afe20946197742c1a7ddddb36f175e82f638dce4c33a07 languageName: node linkType: hard -"@swagger-api/apidom-reference@npm:>=0.74.1 <1.0.0": - version: 0.74.1 - resolution: "@swagger-api/apidom-reference@npm:0.74.1" +"@swagger-api/apidom-reference@npm:>=0.77.0 <1.0.0": + version: 0.77.0 + resolution: "@swagger-api/apidom-reference@npm:0.77.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.74.1 - "@swagger-api/apidom-json-pointer": ^0.74.1 - "@swagger-api/apidom-ns-asyncapi-2": ^0.74.1 - "@swagger-api/apidom-ns-openapi-3-0": ^0.74.1 - "@swagger-api/apidom-ns-openapi-3-1": ^0.74.1 - "@swagger-api/apidom-parser-adapter-api-design-systems-json": ^0.74.1 - "@swagger-api/apidom-parser-adapter-api-design-systems-yaml": ^0.74.1 - "@swagger-api/apidom-parser-adapter-asyncapi-json-2": ^0.74.1 - "@swagger-api/apidom-parser-adapter-asyncapi-yaml-2": ^0.74.1 - "@swagger-api/apidom-parser-adapter-json": ^0.74.1 - "@swagger-api/apidom-parser-adapter-openapi-json-3-0": ^0.74.1 - "@swagger-api/apidom-parser-adapter-openapi-json-3-1": ^0.74.1 - "@swagger-api/apidom-parser-adapter-openapi-yaml-3-0": ^0.74.1 - "@swagger-api/apidom-parser-adapter-openapi-yaml-3-1": ^0.74.1 - "@swagger-api/apidom-parser-adapter-yaml-1-2": ^0.74.1 + "@swagger-api/apidom-core": ^0.77.0 + "@swagger-api/apidom-error": ^0.77.0 + "@swagger-api/apidom-json-pointer": ^0.77.0 + "@swagger-api/apidom-ns-asyncapi-2": ^0.77.0 + "@swagger-api/apidom-ns-openapi-3-0": ^0.77.0 + "@swagger-api/apidom-ns-openapi-3-1": ^0.77.0 + "@swagger-api/apidom-parser-adapter-api-design-systems-json": ^0.77.0 + "@swagger-api/apidom-parser-adapter-api-design-systems-yaml": ^0.77.0 + "@swagger-api/apidom-parser-adapter-asyncapi-json-2": ^0.77.0 + "@swagger-api/apidom-parser-adapter-asyncapi-yaml-2": ^0.77.0 + "@swagger-api/apidom-parser-adapter-json": ^0.77.0 + "@swagger-api/apidom-parser-adapter-openapi-json-3-0": ^0.77.0 + "@swagger-api/apidom-parser-adapter-openapi-json-3-1": ^0.77.0 + "@swagger-api/apidom-parser-adapter-openapi-yaml-3-0": ^0.77.0 + "@swagger-api/apidom-parser-adapter-openapi-yaml-3-1": ^0.77.0 + "@swagger-api/apidom-parser-adapter-yaml-1-2": ^0.77.0 "@types/ramda": ~0.29.3 axios: ^1.4.0 minimatch: ^7.4.3 process: ^0.11.10 ramda: ~0.29.0 - ramda-adjunct: ^4.0.0 + ramda-adjunct: ^4.1.1 stampit: ^4.3.2 dependenciesMeta: + "@swagger-api/apidom-error": + optional: true "@swagger-api/apidom-json-pointer": optional: true "@swagger-api/apidom-ns-asyncapi-2": @@ -16538,94 +16781,94 @@ __metadata: optional: true "@swagger-api/apidom-parser-adapter-yaml-1-2": optional: true - checksum: dda3f3da4fcea911bd19136635293c07e62d3ba6d4248fe3fee22eb659250631809f045a439cad03b6afc5a5472bd4ee3168bfe5be1bf53bfbd3dceed7ef60f4 + checksum: 19c9fc67aa37d0377eb210a49dfbc219be65c70ca8f3cc497453b5a4f76e597e363990aec0d36fbab9a43401ba6c1152c62ee3920d8f3f462f68ef957b911b77 languageName: node linkType: hard -"@swc/core-darwin-arm64@npm:1.3.90": - version: 1.3.90 - resolution: "@swc/core-darwin-arm64@npm:1.3.90" +"@swc/core-darwin-arm64@npm:1.3.92": + version: 1.3.92 + resolution: "@swc/core-darwin-arm64@npm:1.3.92" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@swc/core-darwin-x64@npm:1.3.90": - version: 1.3.90 - resolution: "@swc/core-darwin-x64@npm:1.3.90" +"@swc/core-darwin-x64@npm:1.3.92": + version: 1.3.92 + resolution: "@swc/core-darwin-x64@npm:1.3.92" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@swc/core-linux-arm-gnueabihf@npm:1.3.90": - version: 1.3.90 - resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.90" +"@swc/core-linux-arm-gnueabihf@npm:1.3.92": + version: 1.3.92 + resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.92" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@swc/core-linux-arm64-gnu@npm:1.3.90": - version: 1.3.90 - resolution: "@swc/core-linux-arm64-gnu@npm:1.3.90" +"@swc/core-linux-arm64-gnu@npm:1.3.92": + version: 1.3.92 + resolution: "@swc/core-linux-arm64-gnu@npm:1.3.92" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-arm64-musl@npm:1.3.90": - version: 1.3.90 - resolution: "@swc/core-linux-arm64-musl@npm:1.3.90" +"@swc/core-linux-arm64-musl@npm:1.3.92": + version: 1.3.92 + resolution: "@swc/core-linux-arm64-musl@npm:1.3.92" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@swc/core-linux-x64-gnu@npm:1.3.90": - version: 1.3.90 - resolution: "@swc/core-linux-x64-gnu@npm:1.3.90" +"@swc/core-linux-x64-gnu@npm:1.3.92": + version: 1.3.92 + resolution: "@swc/core-linux-x64-gnu@npm:1.3.92" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-x64-musl@npm:1.3.90": - version: 1.3.90 - resolution: "@swc/core-linux-x64-musl@npm:1.3.90" +"@swc/core-linux-x64-musl@npm:1.3.92": + version: 1.3.92 + resolution: "@swc/core-linux-x64-musl@npm:1.3.92" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@swc/core-win32-arm64-msvc@npm:1.3.90": - version: 1.3.90 - resolution: "@swc/core-win32-arm64-msvc@npm:1.3.90" +"@swc/core-win32-arm64-msvc@npm:1.3.92": + version: 1.3.92 + resolution: "@swc/core-win32-arm64-msvc@npm:1.3.92" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@swc/core-win32-ia32-msvc@npm:1.3.90": - version: 1.3.90 - resolution: "@swc/core-win32-ia32-msvc@npm:1.3.90" +"@swc/core-win32-ia32-msvc@npm:1.3.92": + version: 1.3.92 + resolution: "@swc/core-win32-ia32-msvc@npm:1.3.92" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@swc/core-win32-x64-msvc@npm:1.3.90": - version: 1.3.90 - resolution: "@swc/core-win32-x64-msvc@npm:1.3.90" +"@swc/core-win32-x64-msvc@npm:1.3.92": + version: 1.3.92 + resolution: "@swc/core-win32-x64-msvc@npm:1.3.92" conditions: os=win32 & cpu=x64 languageName: node linkType: hard "@swc/core@npm:^1.3.46": - version: 1.3.90 - resolution: "@swc/core@npm:1.3.90" + version: 1.3.92 + resolution: "@swc/core@npm:1.3.92" dependencies: - "@swc/core-darwin-arm64": 1.3.90 - "@swc/core-darwin-x64": 1.3.90 - "@swc/core-linux-arm-gnueabihf": 1.3.90 - "@swc/core-linux-arm64-gnu": 1.3.90 - "@swc/core-linux-arm64-musl": 1.3.90 - "@swc/core-linux-x64-gnu": 1.3.90 - "@swc/core-linux-x64-musl": 1.3.90 - "@swc/core-win32-arm64-msvc": 1.3.90 - "@swc/core-win32-ia32-msvc": 1.3.90 - "@swc/core-win32-x64-msvc": 1.3.90 + "@swc/core-darwin-arm64": 1.3.92 + "@swc/core-darwin-x64": 1.3.92 + "@swc/core-linux-arm-gnueabihf": 1.3.92 + "@swc/core-linux-arm64-gnu": 1.3.92 + "@swc/core-linux-arm64-musl": 1.3.92 + "@swc/core-linux-x64-gnu": 1.3.92 + "@swc/core-linux-x64-musl": 1.3.92 + "@swc/core-win32-arm64-msvc": 1.3.92 + "@swc/core-win32-ia32-msvc": 1.3.92 + "@swc/core-win32-x64-msvc": 1.3.92 "@swc/counter": ^0.1.1 "@swc/types": ^0.1.5 peerDependencies: @@ -16654,7 +16897,7 @@ __metadata: peerDependenciesMeta: "@swc/helpers": optional: true - checksum: f8ced5187068dc73445c135065c6492f0ac559d0f7720c2482aa9663c87bd015f3d2abef6ee7b2f817280a5e8dd0946c59cce7e1499180644fbc948a9e3823ab + checksum: 88c0c62ff790e896180862c341be8bae98baf0a5c5e87f2f04f49e14b8c4fba460d6b352618b4dda066c8ae6bf152cd843eab25837f38128175208b8c0635721 languageName: node linkType: hard @@ -16666,11 +16909,11 @@ __metadata: linkType: hard "@swc/helpers@npm:^0.5.0": - version: 0.5.2 - resolution: "@swc/helpers@npm:0.5.2" + version: 0.5.3 + resolution: "@swc/helpers@npm:0.5.3" dependencies: tslib: ^2.4.0 - checksum: 51d7e3d8bd56818c49d6bfbd715f0dbeedc13cf723af41166e45c03e37f109336bbcb57a1f2020f4015957721aeb21e1a7fff281233d797ff7d3dd1f447fa258 + checksum: 61c3f7ccd47fc70ad91437df88be6b458cdc11e311cb331288827d7c50befffc72aa18fe913ec2a9e70fbf44e4b818bed38bfd7c329d689e1ff3c198d084cd02 languageName: node linkType: hard @@ -16702,18 +16945,18 @@ __metadata: languageName: node linkType: hard -"@tanstack/query-core@npm:4.33.0": - version: 4.33.0 - resolution: "@tanstack/query-core@npm:4.33.0" - checksum: fae325f1d79b936435787797c32367331d5b8e9c5ced84852bf2085115e3aafef57a7ae530a6b0af46da4abafb4b0afaef885926b71715a0e6f166d74da61c7f +"@tanstack/query-core@npm:4.36.1": + version: 4.36.1 + resolution: "@tanstack/query-core@npm:4.36.1" + checksum: 47672094da20d89402d9fe03bb7b0462be73a76ff9ca715169738bc600a719d064d106d083a8eedae22a2c22de22f87d5eb5d31ef447aba771d9190f2117ed10 languageName: node linkType: hard "@tanstack/react-query@npm:^4.1.3": - version: 4.33.0 - resolution: "@tanstack/react-query@npm:4.33.0" + version: 4.36.1 + resolution: "@tanstack/react-query@npm:4.36.1" dependencies: - "@tanstack/query-core": 4.33.0 + "@tanstack/query-core": 4.36.1 use-sync-external-store: ^1.2.0 peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -16724,7 +16967,7 @@ __metadata: optional: true react-native: optional: true - checksum: b3cf4afa427435e464e077b3f23c891e38e5f78873518f15c1d061ad55f1464d6241ecd92d796a5dbc9412b4fd7eb30b01f2a9cfc285ee9f30dfdd2ca0ecaf4b + checksum: 1aff0a476859386f8d32253fa0d0bde7b81769a6d4d4d9cbd78778f0f955459a3bdb7ee27a0d2ee7373090f12998b45df80db0b5b313bd0a7a39d36c6e8e51c5 languageName: node linkType: hard @@ -16832,11 +17075,11 @@ __metadata: linkType: hard "@testing-library/user-event@npm:^14.0.0": - version: 14.3.0 - resolution: "@testing-library/user-event@npm:14.3.0" + version: 14.5.1 + resolution: "@testing-library/user-event@npm:14.5.1" peerDependencies: "@testing-library/dom": ">=7.21.4" - checksum: cbd5954460496519cb2ff3fa506ca598d7e4c2e3d2f2e129b21909758f5ec87573aad7d6c79aebffd4bd0ea843315b3064a2a76e545f196bd4c82489cb3afc1d + checksum: 3e6bc9fd53dfe2f3648190193ed2fd4bca2a1bfb47f68810df3b33f05412526e5fd5c4ef9dc5375635e0f4cdf1859916867b597eed22bda1321e04242ea6c519 languageName: node linkType: hard @@ -17477,14 +17720,14 @@ __metadata: linkType: hard "@types/express@npm:*, @types/express@npm:^4.17.13, @types/express@npm:^4.17.17, @types/express@npm:^4.17.6": - version: 4.17.18 - resolution: "@types/express@npm:4.17.18" + version: 4.17.19 + resolution: "@types/express@npm:4.17.19" dependencies: "@types/body-parser": "*" "@types/express-serve-static-core": ^4.17.33 "@types/qs": "*" "@types/serve-static": "*" - checksum: 8c178da4f0edff1f006d871fbdc3f849620986ff10bad252f3dfd45b57554e26aaa28c602285df028930d5216e257a06fbaf795070f8bb42f7d87e3b689cba50 + checksum: 3d39d0655eb0825d96fec100985a38737767ddd6da2dbda1e330a3adf36c98a9b7cd8d9539db32876d1fbb47a09343cad7b38c30c8dd7c291271fcb9b85cb21b languageName: node linkType: hard @@ -17614,12 +17857,12 @@ __metadata: linkType: hard "@types/inquirer@npm:^8.1.3": - version: 8.2.6 - resolution: "@types/inquirer@npm:8.2.6" + version: 8.2.7 + resolution: "@types/inquirer@npm:8.2.7" dependencies: "@types/through": "*" rxjs: ^7.2.0 - checksum: d09c3b6bbfb1aff8bdb8fc938d43536be55dfb51af0c91d0105e3f7c5e3950c12618ac00e2e91f10b5abeba38f4b903289be1df5aa31f213b58c3cc675a19f81 + checksum: 8f021bc2ad0cdcccbd55abd11a8ecc73f716ea108f2ffb5f8f605d23519b47acb46fdcac032d8c81e7c05f183c0f2300a0a394c449ad8980bc11f333708d4387 languageName: node linkType: hard @@ -17703,11 +17946,11 @@ __metadata: linkType: hard "@types/jquery@npm:^3.3.34": - version: 3.5.20 - resolution: "@types/jquery@npm:3.5.20" + version: 3.5.22 + resolution: "@types/jquery@npm:3.5.22" dependencies: "@types/sizzle": "*" - checksum: 9bd69faea3d60f52d3029a87b890003042a9dcf4f538c23ac2c11b3bd0e0ccd86b281d5ba3028d1b02df67c69266b8dc0ef0a35696ae174515ecf34523a0287b + checksum: b81c95e27bb30686c1ad5d3f414781243d0cbb468b91d5584dedd3d3ca07ac99796d876e257a7246d6d9b69916bbb0cd0508142ab9f88848605c6d431144d729 languageName: node linkType: hard @@ -17762,7 +18005,7 @@ __metadata: languageName: node linkType: hard -"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.11, @types/json-schema@npm:^7.0.4, @types/json-schema@npm:^7.0.5, @types/json-schema@npm:^7.0.6, @types/json-schema@npm:^7.0.7, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9": +"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.11, @types/json-schema@npm:^7.0.12, @types/json-schema@npm:^7.0.4, @types/json-schema@npm:^7.0.5, @types/json-schema@npm:^7.0.6, @types/json-schema@npm:^7.0.7, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9": version: 7.0.13 resolution: "@types/json-schema@npm:7.0.13" checksum: 345df21a678fa72fb389f35f33de77833d09d4a142bb2bcb27c18690efa4cf70fc2876e43843cefb3fbdb9fcb12cd3e970a90936df30f53bbee899865ff605ab @@ -17993,28 +18236,28 @@ __metadata: 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": - version: 2.6.5 - resolution: "@types/node-fetch@npm:2.6.5" + version: 2.6.6 + resolution: "@types/node-fetch@npm:2.6.6" dependencies: "@types/node": "*" form-data: ^4.0.0 - checksum: 686ee0d52bb82d73f82c0da0bb025d4af1ba7bd8df4edd09336f6179eb838b6d4b5f0a524677a8faec2b00918d1b08a1690d50fa592c9741a5df6a8041a52495 + checksum: ac66389d9d597ab91f5e5d3724e594965b9f80ae5841ab5da9f0c3bd54ceac084591cfe69b1c413f18bb7efdd97002d05bd7651d58ba0c6c10f804f4fd85e598 languageName: node linkType: hard "@types/node-forge@npm:^1.3.0": - version: 1.3.6 - resolution: "@types/node-forge@npm:1.3.6" + version: 1.3.7 + resolution: "@types/node-forge@npm:1.3.7" dependencies: "@types/node": "*" - checksum: 5fe97ce83937c51215a52eb8c9d5c4458abbca2b3cfd91a65142f20fd4a2830ed10ab1a8c860efc55ff36553f939a75c4a6d5c243ed6e24e55a005c9bddeaf43 + checksum: e604e0e09e0ffdcf7babdf2415f7d2de14a7718ddc9c5916a693f81597dc80865d525dfb7fc876a787c25bf1164518cd8ecf1667598bee00c9ba1349f93ba4eb 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.6.5 - resolution: "@types/node@npm:20.6.5" - checksum: b849e849cf7631458a65c5019c81962028e306d8c4455a48422277b240f5a7eb8a1f1dafa60306bd4c773b77263bb8b05c074b1026e868bd137bb2022cf63ea2 + version: 20.8.3 + resolution: "@types/node@npm:20.8.3" + checksum: bfb88b341faeb19f8fd37306a3bf433721b876c6491d10fcb0b13fd26601fa36ee45113dd82b1e1c23e3c957dff5b99f81a16493cefa03abe797e41a2487a4f7 languageName: node linkType: hard @@ -18033,16 +18276,16 @@ __metadata: linkType: hard "@types/node@npm:^16.11.26, @types/node@npm:^16.9.2": - version: 16.18.54 - resolution: "@types/node@npm:16.18.54" - checksum: 208e8fc64f605e9cd55ab5e620a0fd019d8fe5629e3e3c5de869a149b731ab0fac5720c516dccc0ecc834ac27df754723dfe6554551663f016ba5096ea8851df + version: 16.18.58 + resolution: "@types/node@npm:16.18.58" + checksum: 6d8404abc6c97bacd220f606441727adea923f3bd010d07d869f0dc6c4c6dc016430880af1f270edf1b84ae637a7fa5339e6adb3abba210a4820ac5e28f34067 languageName: node linkType: hard "@types/node@npm:^18.11.17, @types/node@npm:^18.17.8": - version: 18.17.18 - resolution: "@types/node@npm:18.17.18" - checksum: 59cbd906363d37017fe9ba0c08c1446e440d4d977459609c5f90b8fb7eb41f273ce8af30c5a5b5d599d7de934c1b3702bc9fc27caf8d2270e5cdb659c5232991 + version: 18.18.4 + resolution: "@types/node@npm:18.18.4" + checksum: 4901e91c4cc479bb58acbcd79236a97a0ad6db4a53cb1f4ba4cf32af15324c61b16faa6e31c1b09bf538a20feb5f5274239157ce5237f5741db0b9ab71e69c52 languageName: node linkType: hard @@ -18172,13 +18415,13 @@ __metadata: linkType: hard "@types/pg@npm:^8.6.6": - version: 8.10.3 - resolution: "@types/pg@npm:8.10.3" + version: 8.10.5 + resolution: "@types/pg@npm:8.10.5" dependencies: "@types/node": "*" pg-protocol: "*" pg-types: ^4.0.1 - checksum: 05a12be3f18cc67728e3aee5a7426f065351ca991e351d2e7a0562c5d9063425d67fe88fd35108834e0fa1f5624032fefbf371cf8f3cc47230a666aa953425b9 + checksum: 532a3104ed7898e3c7806e00cbde486dcfc803d2e99e236066f1b675ff0546a1cb232fe6f2ffc60dac81d3df209b69dbe62a597b565bff0965dd622fef957afe languageName: node linkType: hard @@ -18203,7 +18446,7 @@ __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.5": +"@types/prop-types@npm:*, @types/prop-types@npm:^15.0.0, @types/prop-types@npm:^15.7.3, @types/prop-types@npm:^15.7.7": version: 15.7.8 resolution: "@types/prop-types@npm:15.7.8" checksum: 61dfad79da8b1081c450bab83b77935df487ae1cdd4660ec7df6be8e74725c15fa45cf486ce057addc956ca4ae78300b97091e2a25061133d1b9a1440bc896ae @@ -18252,11 +18495,11 @@ __metadata: linkType: hard "@types/react-grid-layout@npm:^1.3.2": - version: 1.3.2 - resolution: "@types/react-grid-layout@npm:1.3.2" + version: 1.3.3 + resolution: "@types/react-grid-layout@npm:1.3.3" dependencies: "@types/react": "*" - checksum: 190492acb69186c651bb99f19028dcd4c65129eae7de6efd41f51b6a6711af490e7b99ad7156b8731b11ecf2ec7c22bcf13c782bfe65be4b4e5c3362b97095bf + checksum: 918173791c2b121f2780ccfcd36b6fe79c8b43d014ab8bbc37d6e70ee1849bfe81281450d121a2361ad15b4ddfbdfc95c9790ac600f732a20897844d735c455b languageName: node linkType: hard @@ -18291,11 +18534,11 @@ __metadata: linkType: hard "@types/react-syntax-highlighter@npm:^15.0.0": - version: 15.5.7 - resolution: "@types/react-syntax-highlighter@npm:15.5.7" + version: 15.5.8 + resolution: "@types/react-syntax-highlighter@npm:15.5.8" dependencies: "@types/react": "*" - checksum: 1918d01baaa9bf485093fb04167d0dc87131be708bd68d32d3f614c0e7dba05de765fc62df139fa1972836b13e27983a2d89552eda5b5a38691a4ec300949648 + checksum: 3bee4fe5901abc57c06b70aee528a7a2aa9617f8347fbe960f6b7ba14a231aa6fab892e1f6cd9b1e1321078183a9773fcf55488df63cfc7dfa8a307aa48040b3 languageName: node linkType: hard @@ -18317,12 +18560,12 @@ __metadata: languageName: node linkType: hard -"@types/react-transition-group@npm:^4.2.0, @types/react-transition-group@npm:^4.4.6": - version: 4.4.6 - resolution: "@types/react-transition-group@npm:4.4.6" +"@types/react-transition-group@npm:^4.2.0, @types/react-transition-group@npm:^4.4.7": + version: 4.4.7 + resolution: "@types/react-transition-group@npm:4.4.7" dependencies: "@types/react": "*" - checksum: 0872143821d7ee20a1d81e965f8b1e837837f11cd2206973f1f98655751992d9390304d58bac192c9cd923eca95bff107d8c9e3364a180240d5c2a6fd70fd7c3 + checksum: 3b91486e7aa777a3787e773efce79a0fa9be4ec9e02d51ccda8c7532c5c5d84fbcefe248dacb4007293d85bf0794ac51603bb9cec360db81cf3657d2b7123fb9 languageName: node linkType: hard @@ -18345,13 +18588,13 @@ __metadata: linkType: hard "@types/react@npm:^17": - version: 17.0.67 - resolution: "@types/react@npm:17.0.67" + version: 17.0.68 + resolution: "@types/react@npm:17.0.68" dependencies: "@types/prop-types": "*" "@types/scheduler": "*" csstype: ^3.0.2 - checksum: eb4915fc7d24e19fe6e98dfe98ade377423b1263e7dc001beda41b0298152fb5a410a55dde5def5ec0838156239a48e778d522da03d319ae5ecea80d455da604 + checksum: c6ca4415b53b1abe91162b29af541a1797a56a6f462ef796e8ebda3eaa4d0609205f4f17b3fce8d9a12235d4ffd8a67c47b5e018ed85c2f3bee0fba8f54638c1 languageName: node linkType: hard @@ -18457,11 +18700,18 @@ __metadata: linkType: hard "@types/sanitize-html@npm:^2.6.2": - version: 2.9.1 - resolution: "@types/sanitize-html@npm:2.9.1" + version: 2.9.2 + resolution: "@types/sanitize-html@npm:2.9.2" dependencies: htmlparser2: ^8.0.0 - checksum: 381db8e3f22876e8f6aa8f0997af73c71220c8398545d809ebd4e25d33480e73642b8c143a87d87bba504a43ab58d70a724c60eb3fd8fde31a813b682730c98f + checksum: bdd0db4a39125b8836573ede5ec5cc2f7b0dff5ecfbeae68aefb40163c916429cfb500d581ad3a18613e8d6a53f707abb279350e0811122e84e21b0223b8d560 + languageName: node + linkType: hard + +"@types/sarif@npm:^2.1.4": + version: 2.1.5 + resolution: "@types/sarif@npm:2.1.5" + checksum: 6fb813f6988b3416dfd38388dd6af07eedf7d62b288b8cd576f0eb9bd2b26523d7905cee78f4f6316eb3181472bb028caac282e4eb1b2d0042dc7ee2cbbf37c5 languageName: node linkType: hard @@ -18613,11 +18863,11 @@ __metadata: linkType: hard "@types/supertest@npm:^2.0.12, @types/supertest@npm:^2.0.8": - version: 2.0.13 - resolution: "@types/supertest@npm:2.0.13" + version: 2.0.14 + resolution: "@types/supertest@npm:2.0.14" dependencies: "@types/superagent": "*" - checksum: fe66be8e16626f254dc9d9691706942689f47a84edf7d3baaeadd6d4d576dbf915ee70cebdd7034015e83fa91fcd2dcff1cd0252514e4c510619817a183b5b4f + checksum: 9f6850a22b8f0fd4c26a6dfd9b64771a66476b1a4f841a3b84a9da843ce69463efbf37594fe107297dd14a225d199b802464d48d70e9413238c637903d392137 languageName: node linkType: hard @@ -18851,54 +19101,46 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:^5.9.0": - version: 5.53.0 - resolution: "@typescript-eslint/eslint-plugin@npm:5.53.0" +"@typescript-eslint/eslint-plugin@npm:6.7.2": + version: 6.7.2 + resolution: "@typescript-eslint/eslint-plugin@npm:6.7.2" dependencies: - "@typescript-eslint/scope-manager": 5.53.0 - "@typescript-eslint/type-utils": 5.53.0 - "@typescript-eslint/utils": 5.53.0 + "@eslint-community/regexpp": ^4.5.1 + "@typescript-eslint/scope-manager": 6.7.2 + "@typescript-eslint/type-utils": 6.7.2 + "@typescript-eslint/utils": 6.7.2 + "@typescript-eslint/visitor-keys": 6.7.2 debug: ^4.3.4 - grapheme-splitter: ^1.0.4 - ignore: ^5.2.0 - natural-compare-lite: ^1.4.0 - regexpp: ^3.2.0 - semver: ^7.3.7 - tsutils: ^3.21.0 + graphemer: ^1.4.0 + ignore: ^5.2.4 + natural-compare: ^1.4.0 + semver: ^7.5.4 + ts-api-utils: ^1.0.1 peerDependencies: - "@typescript-eslint/parser": ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + "@typescript-eslint/parser": ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 peerDependenciesMeta: typescript: optional: true - checksum: 12dffe65969d8e5248c86a700fe46a737e55ecafb276933e747b4731eab6266fe55e2d43a34b8b340179fe248e127d861cd016a7614b1b9804cd0687c99616d1 + checksum: 4d6f612619282a20518cd6581bce16cd7c50ac4e49f5eeca2ab916a923049379aa382817568c929216381fb2c1bfbc1c4e6fde16ac8bfdd63862a9126f0ab797 languageName: node linkType: hard -"@typescript-eslint/parser@npm:^5.9.0": - version: 5.53.0 - resolution: "@typescript-eslint/parser@npm:5.53.0" +"@typescript-eslint/parser@npm:^6.7.2": + version: 6.7.5 + resolution: "@typescript-eslint/parser@npm:6.7.5" dependencies: - "@typescript-eslint/scope-manager": 5.53.0 - "@typescript-eslint/types": 5.53.0 - "@typescript-eslint/typescript-estree": 5.53.0 + "@typescript-eslint/scope-manager": 6.7.5 + "@typescript-eslint/types": 6.7.5 + "@typescript-eslint/typescript-estree": 6.7.5 + "@typescript-eslint/visitor-keys": 6.7.5 debug: ^4.3.4 peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + eslint: ^7.0.0 || ^8.0.0 peerDependenciesMeta: typescript: optional: true - checksum: 979e5d63793a9e64998b1f956ba0f00f8a2674db3a664fafce7b2433323f5248bd776af8305e2419d73a9d94c55176fee099abc5c153b4cc52e5765c725c1edd - languageName: node - linkType: hard - -"@typescript-eslint/scope-manager@npm:5.53.0": - version: 5.53.0 - resolution: "@typescript-eslint/scope-manager@npm:5.53.0" - dependencies: - "@typescript-eslint/types": 5.53.0 - "@typescript-eslint/visitor-keys": 5.53.0 - checksum: 51f31dc01e95908611f402441f58404da80a338c0237b2b82f4a7b0b2e8868c4bfe8f7cf44b2567dd56533de609156a5d4ac54bb1f9f09c7014b99428aef2543 + checksum: 63f988c1c87697bd20487933be952b97f7a5f2a9977f505af671c7d49367fc01ca508817576646caa937c15cc0a0ef1e86adff9111eb19df8b489e7436d10620 languageName: node linkType: hard @@ -18912,27 +19154,40 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:5.53.0": - version: 5.53.0 - resolution: "@typescript-eslint/type-utils@npm:5.53.0" +"@typescript-eslint/scope-manager@npm:6.7.2": + version: 6.7.2 + resolution: "@typescript-eslint/scope-manager@npm:6.7.2" dependencies: - "@typescript-eslint/typescript-estree": 5.53.0 - "@typescript-eslint/utils": 5.53.0 - debug: ^4.3.4 - tsutils: ^3.21.0 - peerDependencies: - eslint: "*" - peerDependenciesMeta: - typescript: - optional: true - checksum: 52c40967c5fabd58c2ae8bf519ef89e4feb511e4df630aeaeac8335661a79b6b3a32d30a61a5f1d8acc703f21c4d90751a5d41cda1b35d08867524da11bc2e1d + "@typescript-eslint/types": 6.7.2 + "@typescript-eslint/visitor-keys": 6.7.2 + checksum: e35fa23ecb16252c3ad00b5f1ec05d9b8d33ee30d4c57543892f900443ed77926be9bd2836f06463c31b483f5f0f79070273bc51c4a606f55ac3cd1d9c9cd542 languageName: node linkType: hard -"@typescript-eslint/types@npm:5.53.0": - version: 5.53.0 - resolution: "@typescript-eslint/types@npm:5.53.0" - checksum: b0eaf23de4ab13697d4d2095838c959a3f410c30f0d19091e5ca08e62320c3cc3c72bcb631823fb6a4fbb31db0a059e386a0801244930d0a88a6a698e5f46548 +"@typescript-eslint/scope-manager@npm:6.7.5": + version: 6.7.5 + resolution: "@typescript-eslint/scope-manager@npm:6.7.5" + 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.2": + version: 6.7.2 + resolution: "@typescript-eslint/type-utils@npm:6.7.2" + dependencies: + "@typescript-eslint/typescript-estree": 6.7.2 + "@typescript-eslint/utils": 6.7.2 + debug: ^4.3.4 + ts-api-utils: ^1.0.1 + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 67743f8e4b77d0ab3d82907eda0411ffd221357b60ac9cbd29683d5b8c77127369ebfafcf0bfc30a1f1828927ccd5635fab5b2eaf2b2f1d12a9361549cab3e62 languageName: node linkType: hard @@ -18943,21 +19198,17 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:5.53.0": - version: 5.53.0 - resolution: "@typescript-eslint/typescript-estree@npm:5.53.0" - dependencies: - "@typescript-eslint/types": 5.53.0 - "@typescript-eslint/visitor-keys": 5.53.0 - debug: ^4.3.4 - globby: ^11.1.0 - is-glob: ^4.0.3 - semver: ^7.3.7 - tsutils: ^3.21.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 6e119c8e4167c8495d728c5556a834545a9c064918dd5e7b79b0d836726f4f8e2a0297b0ac82bf2b71f1e5427552217d0b59d8fb1406fd79bd3bf91b75dca873 +"@typescript-eslint/types@npm:6.7.2": + version: 6.7.2 + resolution: "@typescript-eslint/types@npm:6.7.2" + checksum: 5a7c4cd456f721649757d2edb4cae71d1405c1c2c35672031f012b27007b9d49b7118297eec746dc3351370e6aa414e5d2c493fb658c7b910154b7998c0278e1 + 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 languageName: node linkType: hard @@ -18979,21 +19230,56 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/utils@npm:5.53.0": - version: 5.53.0 - resolution: "@typescript-eslint/utils@npm:5.53.0" +"@typescript-eslint/typescript-estree@npm:6.7.2": + version: 6.7.2 + resolution: "@typescript-eslint/typescript-estree@npm:6.7.2" dependencies: - "@types/json-schema": ^7.0.9 - "@types/semver": ^7.3.12 - "@typescript-eslint/scope-manager": 5.53.0 - "@typescript-eslint/types": 5.53.0 - "@typescript-eslint/typescript-estree": 5.53.0 - eslint-scope: ^5.1.1 - eslint-utils: ^3.0.0 - semver: ^7.3.7 + "@typescript-eslint/types": 6.7.2 + "@typescript-eslint/visitor-keys": 6.7.2 + 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: c30b9803567c37527e2806badd98f3083ae125db9a430d8a28647b153e446e6a4b830833f229cca27d5aa0ff5497c149aaa524aa3a6dbf932b557c60d0bfd4f9 + 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.2": + version: 6.7.2 + resolution: "@typescript-eslint/utils@npm:6.7.2" + 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.2 + "@typescript-eslint/types": 6.7.2 + "@typescript-eslint/typescript-estree": 6.7.2 + semver: ^7.5.4 peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: 18e6bac14ae853385a74123759850bca367904723e170c37416fc014673eb714afb6bb090367bff61494a8387e941b6af65ee5f4f845f7177fabb4df85e01643 + eslint: ^7.0.0 || ^8.0.0 + checksum: 97f950562dba2bda63ffe64672f643ef940123cf74007bc878afcf31c75f905c99934a3ad77da3d5a4fe7807d5d69c791b20c429712ad5a5525e331ebc313756 languageName: node linkType: hard @@ -19015,16 +19301,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:5.53.0": - version: 5.53.0 - resolution: "@typescript-eslint/visitor-keys@npm:5.53.0" - dependencies: - "@typescript-eslint/types": 5.53.0 - eslint-visitor-keys: ^3.3.0 - checksum: 090695883c15364c6f401e97f56b13db0f31c1114f3bd22562bd41734864d27f6a3c80de33957e9dedab2d5f94b0f4480ba3fde1d4574e74dca4593917b7b54a - languageName: node - linkType: hard - "@typescript-eslint/visitor-keys@npm:5.59.8": version: 5.59.8 resolution: "@typescript-eslint/visitor-keys@npm:5.59.8" @@ -19035,9 +19311,29 @@ __metadata: languageName: node linkType: hard -"@uiw/codemirror-extensions-basic-setup@npm:4.21.18": - version: 4.21.18 - resolution: "@uiw/codemirror-extensions-basic-setup@npm:4.21.18" +"@typescript-eslint/visitor-keys@npm:6.7.2": + version: 6.7.2 + resolution: "@typescript-eslint/visitor-keys@npm:6.7.2" + dependencies: + "@typescript-eslint/types": 6.7.2 + eslint-visitor-keys: ^3.4.1 + checksum: b4915fbc0f3d44c81b92b7151830b698e8b6ed2dee8587bb65540c888c7a84300d3fd6b0c159e2131c7c6df1bebe49fb0d21c347ecdbf7f3e4aec05acebbb0bc + 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 + languageName: node + linkType: hard + +"@uiw/codemirror-extensions-basic-setup@npm:4.21.19": + version: 4.21.19 + resolution: "@uiw/codemirror-extensions-basic-setup@npm:4.21.19" dependencies: "@codemirror/autocomplete": ^6.0.0 "@codemirror/commands": ^6.0.0 @@ -19054,19 +19350,19 @@ __metadata: "@codemirror/search": ">=6.0.0" "@codemirror/state": ">=6.0.0" "@codemirror/view": ">=6.0.0" - checksum: c643eebc45e2067080c46e28fdb4ac40043e5890f4862bd45fe5bf816894b6c118ea901ca9ba1dce8862877622ebd793db6ec220491506355ed562a0dc0c4507 + checksum: 85a1f8b3e071b4587f13609d8449406baa8dead51aa588b914ffa95aac1bdfe1e1aa78689d7927fb90a554b747409cc59cada18fcbe2c204f5936e5441fbade1 languageName: node linkType: hard "@uiw/react-codemirror@npm:^4.9.3": - version: 4.21.18 - resolution: "@uiw/react-codemirror@npm:4.21.18" + version: 4.21.19 + resolution: "@uiw/react-codemirror@npm:4.21.19" dependencies: "@babel/runtime": ^7.18.6 "@codemirror/commands": ^6.1.0 "@codemirror/state": ^6.1.1 "@codemirror/theme-one-dark": ^6.0.0 - "@uiw/codemirror-extensions-basic-setup": 4.21.18 + "@uiw/codemirror-extensions-basic-setup": 4.21.19 codemirror: ^6.0.0 peerDependencies: "@babel/runtime": ">=7.11.0" @@ -19076,7 +19372,7 @@ __metadata: codemirror: ">=6.0.0" react: ">=16.8.0" react-dom: ">=16.8.0" - checksum: ef3897e9901b98fd981d4b9db2ae8702aa7ffda4cf5cab3286963580606a6dde38e77a4314c12574b6f5f251d62b62e59f0a1a445009b5927b8500f4b5fd795c + checksum: bcd016ac806ff34ab3ab16e17090c80c0ed7f835835575c7a15b21238cae9169662444323cbbc8ef2a62c5e8fd7d8b668fd3562cf79b509ededaf7cd4970adf0 languageName: node linkType: hard @@ -20299,13 +20595,13 @@ __metadata: linkType: hard "axios@npm:^1.4.0": - version: 1.5.0 - resolution: "axios@npm:1.5.0" + version: 1.5.1 + resolution: "axios@npm:1.5.1" dependencies: follow-redirects: ^1.15.0 form-data: ^4.0.0 proxy-from-env: ^1.1.0 - checksum: e7405a5dbbea97760d0e6cd58fecba311b0401ddb4a8efbc4108f5537da9b3f278bde566deb777935a960beec4fa18e7b8353881f2f465e4f2c0e949fead35be + checksum: 4444f06601f4ede154183767863d2b8e472b4a6bfc5253597ed6d21899887e1fd0ee2b3de792ac4f8459fe2e359d2aa07c216e45fd8b9e4e0688a6ebf48a5a8d languageName: node linkType: hard @@ -20666,25 +20962,26 @@ __metadata: linkType: hard "better-sqlite3@npm:^8.0.0": - version: 8.6.0 - resolution: "better-sqlite3@npm:8.6.0" + version: 8.7.0 + resolution: "better-sqlite3@npm:8.7.0" dependencies: bindings: ^1.5.0 node-gyp: latest prebuild-install: ^7.1.1 - checksum: 9ebdfd675352347cda1ba30d620a3c512d9db827a1eba66460fd48203a7ad8138b0195893bbf47d40f704bcdd598710041271d4ed69779979b6f784c0d3579a1 + checksum: f1fa38a9a0e4fcd59ececb67c60371b9638d29c19ce9af034421e8a56c9a77e799bb1411b1c3cb08bb9678e15dfb8985553a9ef4098cf5558e7207a3e019f211 languageName: node linkType: hard "bfj@npm:^7.0.2": - version: 7.0.2 - resolution: "bfj@npm:7.0.2" + version: 7.1.0 + resolution: "bfj@npm:7.1.0" dependencies: - bluebird: ^3.5.5 - check-types: ^11.1.1 + bluebird: ^3.7.2 + check-types: ^11.2.3 hoopy: ^0.1.4 + jsonpath: ^1.1.1 tryer: ^1.0.1 - checksum: 0ca673234170eb3dcf00fb1d867ba274729ab05779dd19b35628c49da7adc32472b5f0bca0554ffdca15b094f9b36f16f2a8992ba8884ebd1d351d7f27abee7b + checksum: 36da9ed36c60f377a3f43bb0433092af7dc40442914b8155a1330ae86b1905640baf57e9c195ab83b36d6518b27cf8ed880adff663aa444c193be149e027d722 languageName: node linkType: hard @@ -20771,7 +21068,7 @@ __metadata: languageName: node linkType: hard -"bluebird@npm:^3.5.5, bluebird@npm:^3.7.2": +"bluebird@npm:^3.7.2": version: 3.7.2 resolution: "bluebird@npm:3.7.2" checksum: 869417503c722e7dc54ca46715f70e15f4d9c602a423a02c825570862d12935be59ed9c7ba34a9b31f186c017c23cac6b54e35446f8353059c101da73eac22ef @@ -21547,10 +21844,10 @@ __metadata: languageName: node linkType: hard -"check-types@npm:^11.1.1": - version: 11.1.2 - resolution: "check-types@npm:11.1.2" - checksum: 6c339a5dfe326e34a5275016c7f9464665405cd79007c057852acd677d265ddfe36236ad5567bd1e601ea88fa78bf1f882b6bc3dc7c5616c26f6b54b2c0ef4fc +"check-types@npm:^11.2.3": + version: 11.2.3 + resolution: "check-types@npm:11.2.3" + checksum: f99ff09ae65e63cfcfa40a1275c0a70d8c43ffbf9ac35095f3bf030cc70361c92e075a9975a1144329e50b4fe4620be6bedb4568c18abc96071a3e23aed3ed8e languageName: node linkType: hard @@ -22561,9 +22858,9 @@ __metadata: linkType: hard "core-js@npm:^3.26.0, core-js@npm:^3.6.5": - version: 3.32.2 - resolution: "core-js@npm:3.32.2" - checksum: d6fac7e8eb054eefc211c76cd0a0ff07447a917122757d085f469f046ec888d122409c7db1a9601c3eb5fa767608ed380bcd219eace02bdf973da155680edeec + version: 3.33.0 + resolution: "core-js@npm:3.33.0" + checksum: dd62217935ac281faf6f833bb306fb891162919fcf9c1f0c975b1b91e82ac09a940f5deb5950bbb582739ceef716e8bd7e4f9eab8328932fb029d3bc2ecb2881 languageName: node linkType: hard @@ -23958,10 +24255,10 @@ __metadata: languageName: node linkType: hard -"dompurify@npm:=3.0.5": - version: 3.0.5 - resolution: "dompurify@npm:3.0.5" - checksum: 2d9421570c833ce26ce7022955241749b646d41e8bf453f42ede9f22d0e98af482cedb7dfbf8129419eb48b351c1d677a08fc9f1cd91836ce7f6c1807a0676b2 +"dompurify@npm:=3.0.6": + version: 3.0.6 + resolution: "dompurify@npm:3.0.6" + checksum: e5c6cdc5fe972a9d0859d939f1d86320de275be00bbef7bd5591c80b1e538935f6ce236624459a1b0c84ecd7c6a1e248684aa4637512659fccc0ce7c353828a6 languageName: node linkType: hard @@ -24145,8 +24442,8 @@ __metadata: linkType: hard "elastic-builder@npm:^2.16.0": - version: 2.21.0 - resolution: "elastic-builder@npm:2.21.0" + version: 2.22.0 + resolution: "elastic-builder@npm:2.22.0" dependencies: lodash.has: ^4.5.2 lodash.hasin: ^4.5.2 @@ -24156,7 +24453,7 @@ __metadata: lodash.isobject: ^3.0.2 lodash.isstring: ^4.0.1 lodash.omit: ^4.5.0 - checksum: c612efc567c48835c97b1156ac8e6bcf826d83b8606e42bfde108410d3b1279bf7ead1eac58ff45808c2780668db78d5801aebc75f02b588d4f6de1fa0e0cded + checksum: 484ba84df363e76c993ecbe7e91297f6a9ee32b7062fc62554cd32405f0dea9d94618be9abceaa98b54169091208a52350ab77243dd5027df30061319168d84b languageName: node linkType: hard @@ -24497,104 +24794,6 @@ __metadata: languageName: node linkType: hard -"esbuild-android-64@npm:0.15.18": - version: 0.15.18 - resolution: "esbuild-android-64@npm:0.15.18" - conditions: os=android & cpu=x64 - languageName: node - linkType: hard - -"esbuild-android-arm64@npm:0.15.18": - version: 0.15.18 - resolution: "esbuild-android-arm64@npm:0.15.18" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - -"esbuild-darwin-64@npm:0.15.18": - version: 0.15.18 - resolution: "esbuild-darwin-64@npm:0.15.18" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"esbuild-darwin-arm64@npm:0.15.18": - version: 0.15.18 - resolution: "esbuild-darwin-arm64@npm:0.15.18" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"esbuild-freebsd-64@npm:0.15.18": - version: 0.15.18 - resolution: "esbuild-freebsd-64@npm:0.15.18" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - -"esbuild-freebsd-arm64@npm:0.15.18": - version: 0.15.18 - resolution: "esbuild-freebsd-arm64@npm:0.15.18" - conditions: os=freebsd & cpu=arm64 - languageName: node - linkType: hard - -"esbuild-linux-32@npm:0.15.18": - version: 0.15.18 - resolution: "esbuild-linux-32@npm:0.15.18" - conditions: os=linux & cpu=ia32 - languageName: node - linkType: hard - -"esbuild-linux-64@npm:0.15.18": - version: 0.15.18 - resolution: "esbuild-linux-64@npm:0.15.18" - conditions: os=linux & cpu=x64 - languageName: node - linkType: hard - -"esbuild-linux-arm64@npm:0.15.18": - version: 0.15.18 - resolution: "esbuild-linux-arm64@npm:0.15.18" - conditions: os=linux & cpu=arm64 - languageName: node - linkType: hard - -"esbuild-linux-arm@npm:0.15.18": - version: 0.15.18 - resolution: "esbuild-linux-arm@npm:0.15.18" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - -"esbuild-linux-mips64le@npm:0.15.18": - version: 0.15.18 - resolution: "esbuild-linux-mips64le@npm:0.15.18" - conditions: os=linux & cpu=mips64el - languageName: node - linkType: hard - -"esbuild-linux-ppc64le@npm:0.15.18": - version: 0.15.18 - resolution: "esbuild-linux-ppc64le@npm:0.15.18" - conditions: os=linux & cpu=ppc64 - languageName: node - linkType: hard - -"esbuild-linux-riscv64@npm:0.15.18": - version: 0.15.18 - resolution: "esbuild-linux-riscv64@npm:0.15.18" - conditions: os=linux & cpu=riscv64 - languageName: node - linkType: hard - -"esbuild-linux-s390x@npm:0.15.18": - version: 0.15.18 - resolution: "esbuild-linux-s390x@npm:0.15.18" - conditions: os=linux & cpu=s390x - languageName: node - linkType: hard - "esbuild-loader@npm:^2.18.0": version: 2.21.0 resolution: "esbuild-loader@npm:2.21.0" @@ -24611,48 +24810,6 @@ __metadata: languageName: node linkType: hard -"esbuild-netbsd-64@npm:0.15.18": - version: 0.15.18 - resolution: "esbuild-netbsd-64@npm:0.15.18" - conditions: os=netbsd & cpu=x64 - languageName: node - linkType: hard - -"esbuild-openbsd-64@npm:0.15.18": - version: 0.15.18 - resolution: "esbuild-openbsd-64@npm:0.15.18" - conditions: os=openbsd & cpu=x64 - languageName: node - linkType: hard - -"esbuild-sunos-64@npm:0.15.18": - version: 0.15.18 - resolution: "esbuild-sunos-64@npm:0.15.18" - conditions: os=sunos & cpu=x64 - languageName: node - linkType: hard - -"esbuild-windows-32@npm:0.15.18": - version: 0.15.18 - resolution: "esbuild-windows-32@npm:0.15.18" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - -"esbuild-windows-64@npm:0.15.18": - version: 0.15.18 - resolution: "esbuild-windows-64@npm:0.15.18" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"esbuild-windows-arm64@npm:0.15.18": - version: 0.15.18 - resolution: "esbuild-windows-arm64@npm:0.15.18" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - "esbuild@npm:^0.16.17": version: 0.16.17 resolution: "esbuild@npm:0.16.17" @@ -24807,80 +24964,80 @@ __metadata: languageName: node linkType: hard -"esbuild@npm:~0.15.10": - version: 0.15.18 - resolution: "esbuild@npm:0.15.18" +"esbuild@npm:~0.18.20": + version: 0.18.20 + resolution: "esbuild@npm:0.18.20" dependencies: - "@esbuild/android-arm": 0.15.18 - "@esbuild/linux-loong64": 0.15.18 - esbuild-android-64: 0.15.18 - esbuild-android-arm64: 0.15.18 - esbuild-darwin-64: 0.15.18 - esbuild-darwin-arm64: 0.15.18 - esbuild-freebsd-64: 0.15.18 - esbuild-freebsd-arm64: 0.15.18 - esbuild-linux-32: 0.15.18 - esbuild-linux-64: 0.15.18 - esbuild-linux-arm: 0.15.18 - esbuild-linux-arm64: 0.15.18 - esbuild-linux-mips64le: 0.15.18 - esbuild-linux-ppc64le: 0.15.18 - esbuild-linux-riscv64: 0.15.18 - esbuild-linux-s390x: 0.15.18 - esbuild-netbsd-64: 0.15.18 - esbuild-openbsd-64: 0.15.18 - esbuild-sunos-64: 0.15.18 - esbuild-windows-32: 0.15.18 - esbuild-windows-64: 0.15.18 - esbuild-windows-arm64: 0.15.18 + "@esbuild/android-arm": 0.18.20 + "@esbuild/android-arm64": 0.18.20 + "@esbuild/android-x64": 0.18.20 + "@esbuild/darwin-arm64": 0.18.20 + "@esbuild/darwin-x64": 0.18.20 + "@esbuild/freebsd-arm64": 0.18.20 + "@esbuild/freebsd-x64": 0.18.20 + "@esbuild/linux-arm": 0.18.20 + "@esbuild/linux-arm64": 0.18.20 + "@esbuild/linux-ia32": 0.18.20 + "@esbuild/linux-loong64": 0.18.20 + "@esbuild/linux-mips64el": 0.18.20 + "@esbuild/linux-ppc64": 0.18.20 + "@esbuild/linux-riscv64": 0.18.20 + "@esbuild/linux-s390x": 0.18.20 + "@esbuild/linux-x64": 0.18.20 + "@esbuild/netbsd-x64": 0.18.20 + "@esbuild/openbsd-x64": 0.18.20 + "@esbuild/sunos-x64": 0.18.20 + "@esbuild/win32-arm64": 0.18.20 + "@esbuild/win32-ia32": 0.18.20 + "@esbuild/win32-x64": 0.18.20 dependenciesMeta: "@esbuild/android-arm": optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true "@esbuild/linux-loong64": optional: true - esbuild-android-64: + "@esbuild/linux-mips64el": optional: true - esbuild-android-arm64: + "@esbuild/linux-ppc64": optional: true - esbuild-darwin-64: + "@esbuild/linux-riscv64": optional: true - esbuild-darwin-arm64: + "@esbuild/linux-s390x": optional: true - esbuild-freebsd-64: + "@esbuild/linux-x64": optional: true - esbuild-freebsd-arm64: + "@esbuild/netbsd-x64": optional: true - esbuild-linux-32: + "@esbuild/openbsd-x64": optional: true - esbuild-linux-64: + "@esbuild/sunos-x64": optional: true - esbuild-linux-arm: + "@esbuild/win32-arm64": optional: true - esbuild-linux-arm64: + "@esbuild/win32-ia32": optional: true - esbuild-linux-mips64le: - optional: true - esbuild-linux-ppc64le: - optional: true - esbuild-linux-riscv64: - optional: true - esbuild-linux-s390x: - optional: true - esbuild-netbsd-64: - optional: true - esbuild-openbsd-64: - optional: true - esbuild-sunos-64: - optional: true - esbuild-windows-32: - optional: true - esbuild-windows-64: - optional: true - esbuild-windows-arm64: + "@esbuild/win32-x64": optional: true bin: esbuild: bin/esbuild - checksum: ec12682b2cb2d4f0669d0e555028b87a9284ca7f6a1b26e35e69a8697165b35cc682ad598abc70f0bbcfdc12ca84ef888caf5ceee389237862e8f8c17da85f89 + checksum: 5d253614e50cdb6ec22095afd0c414f15688e7278a7eb4f3720a6dd1306b0909cf431e7b9437a90d065a31b1c57be60130f63fe3e8d0083b588571f31ee6ec7b languageName: node linkType: hard @@ -24926,7 +25083,7 @@ __metadata: languageName: node linkType: hard -"escodegen@npm:^1.13.0": +"escodegen@npm:^1.13.0, escodegen@npm:^1.8.1": version: 1.14.3 resolution: "escodegen@npm:1.14.3" dependencies: @@ -25053,8 +25210,8 @@ __metadata: linkType: hard "eslint-plugin-jest@npm:^27.0.0": - version: 27.2.3 - resolution: "eslint-plugin-jest@npm:27.2.3" + version: 27.4.2 + resolution: "eslint-plugin-jest@npm:27.4.2" dependencies: "@typescript-eslint/utils": ^5.10.0 peerDependencies: @@ -25066,7 +25223,7 @@ __metadata: optional: true jest: optional: true - checksum: 4c7e07f52f17749ac6fd0ff5fcd5ce30b88983ba31eeee322e4d48859f55eaa112f06172e586ad2031c00ff28bb2dfdc3d35c83895251b9c0e860fa47dfc5ff4 + checksum: 99a8301ae00c37da97866b8b13c89a077716d2c653b26bc417d242e7300a43237c0017fd488c43966fa38585f19050facdbbc71d03ca36a1ce6f2ba930a9143e languageName: node linkType: hard @@ -25175,24 +25332,6 @@ __metadata: languageName: node linkType: hard -"eslint-utils@npm:^3.0.0": - version: 3.0.0 - resolution: "eslint-utils@npm:3.0.0" - dependencies: - eslint-visitor-keys: ^2.0.0 - peerDependencies: - eslint: ">=5" - checksum: 0668fe02f5adab2e5a367eee5089f4c39033af20499df88fe4e6aba2015c20720404d8c3d6349b6f716b08fdf91b9da4e5d5481f265049278099c4c836ccb619 - languageName: node - linkType: hard - -"eslint-visitor-keys@npm:^2.0.0": - version: 2.0.0 - resolution: "eslint-visitor-keys@npm:2.0.0" - checksum: e07e9863fb8c9b1453f5ad1a26f3cc8dd6b349b26605cc06bc0c61215ac5b6f13a4d08c875218e6c0f8ac8fc06ca6e090df769e32c569f0fd2e6a848b8a76c75 - languageName: node - linkType: hard - "eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.1, eslint-visitor-keys@npm:^3.4.3": version: 3.4.3 resolution: "eslint-visitor-keys@npm:3.4.3" @@ -25217,13 +25356,13 @@ __metadata: linkType: hard "eslint@npm:^8.33.0, eslint@npm:^8.6.0": - version: 8.49.0 - resolution: "eslint@npm:8.49.0" + version: 8.51.0 + resolution: "eslint@npm:8.51.0" dependencies: "@eslint-community/eslint-utils": ^4.2.0 "@eslint-community/regexpp": ^4.6.1 "@eslint/eslintrc": ^2.1.2 - "@eslint/js": 8.49.0 + "@eslint/js": 8.51.0 "@humanwhocodes/config-array": ^0.11.11 "@humanwhocodes/module-importer": ^1.0.1 "@nodelib/fs.walk": ^1.2.8 @@ -25259,7 +25398,7 @@ __metadata: text-table: ^0.2.0 bin: eslint: bin/eslint.js - checksum: 4dfe257e1e42da2f9da872b05aaaf99b0f5aa022c1a91eee8f2af1ab72651b596366320c575ccd4e0469f7b4c97aff5bb85ae3323ebd6a293c3faef4028b0d81 + checksum: 214fa5d1fcb67af1b8992ce9584ccd85e1aa7a482f8b8ea5b96edc28fa838a18a3b69456db45fc1ed3ef95f1e9efa9714f737292dc681e572d471d02fda9649c languageName: node linkType: hard @@ -25281,6 +25420,16 @@ __metadata: languageName: node linkType: hard +"esprima@npm:1.2.2": + version: 1.2.2 + resolution: "esprima@npm:1.2.2" + bin: + esparse: ./bin/esparse.js + esvalidate: ./bin/esvalidate.js + checksum: 4f10006f0e315f2f7d8cf6630e465f183512f1ab2e862b11785a133ce37ed1696573deefb5256e510eaa4368342b13b393334477f6ccdcdb8f10e782b0f5e6dc + languageName: node + linkType: hard + "esprima@npm:^4.0.0, esprima@npm:^4.0.1, esprima@npm:~4.0.0": version: 4.0.1 resolution: "esprima@npm:4.0.1" @@ -25528,7 +25677,6 @@ __metadata: cross-env: ^7.0.0 history: ^5.0.0 lodash: ^4.17.21 - prop-types: ^15.7.2 react: ^17.0.2 react-dom: ^17.0.2 react-router: ^6.3.0 @@ -25640,7 +25788,6 @@ __metadata: "@types/zen-observable": ^0.8.0 cross-env: ^7.0.0 history: ^5.0.0 - prop-types: ^15.7.2 react: ^17.0.2 react-dom: ^17.0.2 react-router: ^6.3.0 @@ -25668,6 +25815,7 @@ __metadata: "@backstage/plugin-catalog-backend-module-unprocessed": "workspace:^" "@backstage/plugin-devtools-backend": "workspace:^" "@backstage/plugin-entity-feedback-backend": "workspace:^" + "@backstage/plugin-jenkins-backend": "workspace:^" "@backstage/plugin-kubernetes-backend": "workspace:^" "@backstage/plugin-lighthouse-backend": "workspace:^" "@backstage/plugin-linguist-backend": "workspace:^" @@ -25750,7 +25898,7 @@ __metadata: "@gitbeaker/node": ^35.1.0 "@octokit/rest": ^19.0.3 "@opentelemetry/api": ^1.4.1 - "@opentelemetry/exporter-prometheus": ^0.39.1 + "@opentelemetry/exporter-prometheus": ^0.43.0 "@opentelemetry/sdk-metrics": ^1.13.0 "@types/dockerode": ^3.3.0 "@types/express": ^4.17.6 @@ -26610,7 +26758,7 @@ __metadata: languageName: node linkType: hard -"form-data-encoder@npm:^1.4.3, form-data-encoder@npm:^1.7.1": +"form-data-encoder@npm:^1.7.1": version: 1.7.1 resolution: "form-data-encoder@npm:1.7.1" checksum: a2a360d5588a70d323c12a140c3db23a503a38f0a5d141af1efad579dde9f9fff2e49e5f31f378cb4631518c1ab4a826452c92f0d2869e954b6b2d77b05613e1 @@ -26668,7 +26816,7 @@ __metadata: languageName: node linkType: hard -"formdata-node@npm:^4.0.0, formdata-node@npm:^4.3.1": +"formdata-node@npm:^4.3.1": version: 4.3.2 resolution: "formdata-node@npm:4.3.2" dependencies: @@ -27023,10 +27171,12 @@ __metadata: languageName: node linkType: hard -"get-tsconfig@npm:^4.4.0": - version: 4.4.0 - resolution: "get-tsconfig@npm:4.4.0" - checksum: e193558b4f0c84c81ae9688cf5b9950dc0b341e44f91b002713fd0c37cfb73108e1cd9998ed540bcc423f193fde32cc58a15e99dd469f5158a2eb4a148611176 +"get-tsconfig@npm:^4.4.0, get-tsconfig@npm:^4.7.0": + version: 4.7.2 + resolution: "get-tsconfig@npm:4.7.2" + dependencies: + resolve-pkg-maps: ^1.0.0 + checksum: 172358903250eff0103943f816e8a4e51d29b8e5449058bdf7266714a908a48239f6884308bd3a6ff28b09f692b9533dbebfd183ab63e4e14f073cda91f1bca9 languageName: node linkType: hard @@ -28124,9 +28274,9 @@ __metadata: linkType: hard "humanize-duration@npm:^3.25.1, humanize-duration@npm:^3.26.0, humanize-duration@npm:^3.27.0, humanize-duration@npm:^3.27.1": - version: 3.29.0 - resolution: "humanize-duration@npm:3.29.0" - checksum: 205e959586e774a36561072cd0f2994d727b9e2156a19ff68ee20c9c29544d9eeb3e853cdb7011a32498859043442069ef82c0bd18f1175ed27a733303ab480f + version: 3.30.0 + resolution: "humanize-duration@npm:3.30.0" + checksum: 6eaf888219801d47d42cfb03523e736367c260e3f32cddb4e30c30f49500e08e7cdfd413f02a5ed24943ef382b3e89c8a11e6eda3a432846385903a9f49e576a languageName: node linkType: hard @@ -30114,10 +30264,10 @@ __metadata: languageName: node linkType: hard -"jose@npm:^4.14.4, jose@npm:^4.6.0": - version: 4.14.6 - resolution: "jose@npm:4.14.6" - checksum: eae81a234e7bf1446b1bd80722b3462b014e3835b155c3a7799c1c5043163a53a0dc28d347004151b031e6b7b863403aabf8814d9cc217ce21f8c2f3ebd4b335 +"jose@npm:^4.15.1, jose@npm:^4.6.0": + version: 4.15.2 + resolution: "jose@npm:4.15.2" + checksum: 8f0cab1eef31243abe14a935b2b330cd95f10f9b69808fd642088ae5000e50e566664934537d2c6413ab2f6b54acd8265a5033da05157aa1260c5f1d7e57fab0 languageName: node linkType: hard @@ -30671,6 +30821,17 @@ __metadata: languageName: node linkType: hard +"jsonpath@npm:^1.1.1": + version: 1.1.1 + resolution: "jsonpath@npm:1.1.1" + dependencies: + esprima: 1.2.2 + static-eval: 2.0.2 + underscore: 1.12.1 + checksum: 5480d8e9e424fe2ed4ade6860b6e2cefddb21adb3a99abe0254cd9428e8ef9b0c9fb5729d6a5a514e90df50d645ccea9f3be48d627570e6222dd5dadc28eba7b + languageName: node + linkType: hard + "jsonpointer@npm:^5.0.0, jsonpointer@npm:^5.0.1": version: 5.0.1 resolution: "jsonpointer@npm:5.0.1" @@ -30978,11 +31139,11 @@ __metadata: linkType: hard "keyv@npm:^4.0.0, keyv@npm:^4.5.2": - version: 4.5.3 - resolution: "keyv@npm:4.5.3" + version: 4.5.4 + resolution: "keyv@npm:4.5.4" dependencies: json-buffer: 3.0.1 - checksum: 3ffb4d5b72b6b4b4af443bbb75ca2526b23c750fccb5ac4c267c6116888b4b65681015c2833cb20d26cf3e6e32dac6b988c77f7f022e1a571b7d90f1442257da + checksum: 74a24395b1c34bd44ad5cb2b49140d087553e170625240b86755a6604cd65aa16efdbdeae5cdb17ba1284a0fbb25ad06263755dbc71b8d8b06f74232ce3cdd72 languageName: node linkType: hard @@ -31214,18 +31375,18 @@ __metadata: linkType: hard "libsodium-wrappers@npm:^0.7.11": - version: 0.7.11 - resolution: "libsodium-wrappers@npm:0.7.11" + version: 0.7.13 + resolution: "libsodium-wrappers@npm:0.7.13" dependencies: - libsodium: ^0.7.11 - checksum: 6a6ef47b2213e3fb4687196c28fee4c9885f70d89547d845e62d96014d3d5ad9f59cb05fadc601debc0031a3cfd0b9b416d7efbeb5bf66db6aa0ed69f55a6293 + libsodium: ^0.7.13 + checksum: d184395f7c33023414b191ef9ea2171eb1a5cb061503e886ea877590cb7adc3a4feaf794b9b08731a20515518fa23dbf1c1bfcd376e5ab01728e95cf1cb7525a languageName: node linkType: hard -"libsodium@npm:^0.7.11": - version: 0.7.11 - resolution: "libsodium@npm:0.7.11" - checksum: 0a3493ac1829d1e346178b6984c4eb449dc77157c906876441386c0c653142e3fa56f623ce980bb50e580196578689298c9cd406ce6d514904090e370c6bc0f7 +"libsodium@npm:^0.7.13": + version: 0.7.13 + resolution: "libsodium@npm:0.7.13" + checksum: 75a5f70e84c197d54d9b67dcbd852abbd41cca8facd510767c7c8400a52a23da293e83eebf1693831b2c0c0498f266bd9350a8c27ec66f46a055890dff758d38 languageName: node linkType: hard @@ -31545,7 +31706,7 @@ __metadata: languageName: node linkType: hard -"lodash.isequal@npm:^4.0.0, lodash.isequal@npm:^4.5.0": +"lodash.isequal@npm:^4.5.0": version: 4.5.0 resolution: "lodash.isequal@npm:4.5.0" checksum: da27515dc5230eb1140ba65ff8de3613649620e8656b19a6270afe4866b7bd461d9ba2ac8a48dcc57f7adac4ee80e1de9f965d89d4d81a0ad52bb3eec2609644 @@ -31594,7 +31755,7 @@ __metadata: languageName: node linkType: hard -"lodash.merge@npm:4.6.2, lodash.merge@npm:^4.6.2": +"lodash.merge@npm:^4.6.2": version: 4.6.2 resolution: "lodash.merge@npm:4.6.2" checksum: ad580b4bdbb7ca1f7abf7e1bce63a9a0b98e370cf40194b03380a46b4ed799c9573029599caebc1b14e3f24b111aef72b96674a56cfa105e0f5ac70546cdc005 @@ -33398,13 +33559,6 @@ __metadata: languageName: node linkType: hard -"natural-compare-lite@npm:^1.4.0": - version: 1.4.0 - resolution: "natural-compare-lite@npm:1.4.0" - checksum: 5222ac3986a2b78dd6069ac62cbb52a7bf8ffc90d972ab76dfe7b01892485d229530ed20d0c62e79a6b363a663b273db3bde195a1358ce9e5f779d4453887225 - languageName: node - linkType: hard - "natural-compare@npm:^1.4.0": version: 1.4.0 resolution: "natural-compare@npm:1.4.0" @@ -33543,13 +33697,23 @@ __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 languageName: node linkType: hard +"node-fetch-commonjs@npm:^3.3.1": + version: 3.3.2 + resolution: "node-fetch-commonjs@npm:3.3.2" + dependencies: + node-domexception: ^1.0.0 + web-streams-polyfill: ^3.0.3 + checksum: 7cc9bc3cba02c88ae031028c07af7f5053d1968e7f8e06931cdca51a695d66bb9fc9bca11bde31915a3e70a957b8e240c568f7ff47af5757efb5526c4389f570 + languageName: node + linkType: hard + "node-fetch@npm:^1.0.1": version: 1.7.3 resolution: "node-fetch@npm:1.7.3" @@ -33697,6 +33861,16 @@ __metadata: languageName: node linkType: hard +"node-sarif-builder@npm:^2.0.3": + version: 2.0.3 + resolution: "node-sarif-builder@npm:2.0.3" + dependencies: + "@types/sarif": ^2.1.4 + fs-extra: ^10.0.0 + checksum: 397dd9bfb0780c6753fb47d1fd0465f3c8a935082cb1bbd7ad6232d18b6343d9d499c6bc572ad0415db282efd6058fe8b7a6657020434adef4fbf93a8b95306e + languageName: node + linkType: hard + "nodemon@npm:^3.0.1": version: 3.0.1 resolution: "nodemon@npm:3.0.1" @@ -34265,14 +34439,14 @@ __metadata: linkType: hard "openid-client@npm:^5.2.1, openid-client@npm:^5.3.0": - version: 5.4.3 - resolution: "openid-client@npm:5.4.3" + version: 5.6.0 + resolution: "openid-client@npm:5.6.0" dependencies: - jose: ^4.14.4 + jose: ^4.15.1 lru-cache: ^6.0.0 object-hash: ^2.2.0 oidc-token-hash: ^5.0.3 - checksum: 0e5a126b77dad0320e8f7023ac7ad7f5f1f82ad5f985f7ab0b42a7cf36700dfb78f0bef9b59c1fae915dce0148ef191b49921cd0a01443b64c04f862d9dc03e0 + checksum: 414fe43c5aac07d8b8f5ea52ef1812374ff28140910977a1360781284b09d4a03c916d910017bf15003d602d859b3dcf9857d1dfe6f61508c8f5c52de334e6ea languageName: node linkType: hard @@ -34927,10 +35101,10 @@ __metadata: languageName: node linkType: hard -"path-equal@npm:^1.1.2": - version: 1.2.2 - resolution: "path-equal@npm:1.2.2" - checksum: 948930eb6bbb5ddcc724f7a4339e2a98fe35269b5f46d88f85c588ed4713e7ec1c71da1629608606c6687216ba3afae710a77cfb5146b735a84d6199f06f247d +"path-equal@npm:^1.2.5": + version: 1.2.5 + resolution: "path-equal@npm:1.2.5" + checksum: 2bef7bcb98c7ae371c52c1562b2fc515bfd03bc1a5571df9a8591038db8d742ba2d1ff39aa5130853e6afb69e773ccba5095f54d2e6d17422ca03ef9047992d7 languageName: node linkType: hard @@ -35221,9 +35395,9 @@ __metadata: linkType: hard "photoswipe@npm:^5.3.7": - version: 5.3.9 - resolution: "photoswipe@npm:5.3.9" - checksum: 2d9a6168d28f7d6386ff01800c4bb5189595eed0b7e4b04c24b35c8feec479885cb69a0e782225562acd0c9492e9465429dd75877a70028945b2ff1b9eae4ae6 + version: 5.4.2 + resolution: "photoswipe@npm:5.4.2" + checksum: 4d74b189ede377d17868cc3ebf066fb549642387b387dd922d7714d8cc0ede7e74f8313ded15def42c6ad3b15c6800e2ce92b4034cfc815655fa2bb6433037b4 languageName: node linkType: hard @@ -35829,13 +36003,13 @@ __metadata: linkType: hard "postcss@npm:^8.1.0, postcss@npm:^8.4.21": - version: 8.4.29 - resolution: "postcss@npm:8.4.29" + version: 8.4.31 + resolution: "postcss@npm:8.4.31" dependencies: nanoid: ^3.3.6 picocolors: ^1.0.0 source-map-js: ^1.0.2 - checksum: dd6daa25e781db9ae5b651d9b7bfde0ec6e60e86a37da69a18eb4773d5ddd51e28fc4ff054fbdc04636a31462e6bf09a1e50986f69ac52b10d46b7457cd36d12 + checksum: 1d8611341b073143ad90486fcdfeab49edd243377b1f51834dc4f6d028e82ce5190e4f11bb2633276864503654fb7cab28e67abdc0fbf9d1f88cad4a0ff0beea languageName: node linkType: hard @@ -36199,7 +36373,7 @@ __metadata: languageName: node linkType: hard -"protobufjs@npm:7.2.4, protobufjs@npm:^7.0.0": +"protobufjs@npm:7.2.4": version: 7.2.4 resolution: "protobufjs@npm:7.2.4" dependencies: @@ -36219,6 +36393,26 @@ __metadata: languageName: node linkType: hard +"protobufjs@npm:^7.0.0, protobufjs@npm:^7.2.5": + version: 7.2.5 + resolution: "protobufjs@npm:7.2.5" + 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: 3770a072114061faebbb17cfd135bc4e187b66bc6f40cd8bac624368b0270871ec0cfb43a02b9fb4f029c8335808a840f1afba3c2e7ede7063b98ae6b98a703f + languageName: node + linkType: hard + "protocol-buffers-schema@npm:^3.6.0": version: 3.6.0 resolution: "protocol-buffers-schema@npm:3.6.0" @@ -36439,12 +36633,12 @@ __metadata: languageName: node linkType: hard -"ramda-adjunct@npm:^4.0.0": - version: 4.0.0 - resolution: "ramda-adjunct@npm:4.0.0" +"ramda-adjunct@npm:^4.0.0, ramda-adjunct@npm:^4.1.1": + version: 4.1.1 + resolution: "ramda-adjunct@npm:4.1.1" peerDependencies: ramda: ">= 0.29.0" - checksum: 449736c561a6d70c20a27c09d6002030632e7570f78fd46b1d8636211a87d5c7daf16f41ac1d84bc62020b9c4532fa62afe8fe5b3cb5d34105e21f994c331ead + checksum: 7cdae1129987afac3d2ab9188b62f949558f86ad14ef76b898bacf065da5542e213e53cb01f064444ad634dfa668148cd3351726017a11dfe141b6b4c3552808 languageName: node linkType: hard @@ -36717,16 +36911,16 @@ __metadata: languageName: node linkType: hard -"react-draggable@npm:^4.0.0, react-draggable@npm:^4.0.3": - version: 4.4.5 - resolution: "react-draggable@npm:4.4.5" +"react-draggable@npm:^4.0.3, react-draggable@npm:^4.4.5": + version: 4.4.6 + resolution: "react-draggable@npm:4.4.6" dependencies: clsx: ^1.1.1 prop-types: ^15.8.1 peerDependencies: react: ">= 16.3.0" react-dom: ">= 16.3.0" - checksum: 21c3775db086e13020967627c20acd41d1ddbc7c7d7fca51491a5bbb54a0aa7e1730a4bc9af17141eb50a4954e547a5e25b2368f5f54b70db6f2686a897bacf2 + checksum: 9b15aac59244873ac4561c5a2bead43a56e18d406e0a5f242bd4f9d151c074530c02b99387983104bf43417292f9cf8d063e554ed08d88792235e3fbc965f1b8 languageName: node linkType: hard @@ -36786,18 +36980,19 @@ __metadata: linkType: hard "react-grid-layout@npm:^1.3.4": - version: 1.3.4 - resolution: "react-grid-layout@npm:1.3.4" + version: 1.4.2 + resolution: "react-grid-layout@npm:1.4.2" dependencies: - clsx: ^1.1.1 - lodash.isequal: ^4.0.0 + clsx: ^2.0.0 + fast-equals: ^4.0.3 prop-types: ^15.8.1 - react-draggable: ^4.0.0 - react-resizable: ^3.0.4 + react-draggable: ^4.4.5 + react-resizable: ^3.0.5 + resize-observer-polyfill: ^1.5.1 peerDependencies: react: ">= 16.3.0" react-dom: ">= 16.3.0" - checksum: f56c8c452acd9588edf1dc6996a4ea14d9f669d77f6b2ebd50146eaeeb9325c83f5ca44b66bac2b8c24f9cb2ec7ed49396350435991255c3b31e21b8a2e3d243 + checksum: a052d38c290b18e1c513a3b939757c239887009b7f175814b472d007708962870960d3b20d4a15dbdeb955ac55434ce6c5e5e5f8c850cfbdcc90f75c318f1d58 languageName: node linkType: hard @@ -36816,11 +37011,11 @@ __metadata: linkType: hard "react-hook-form@npm:^7.12.2, react-hook-form@npm:^7.13.0": - version: 7.46.1 - resolution: "react-hook-form@npm:7.46.1" + version: 7.47.0 + resolution: "react-hook-form@npm:7.47.0" peerDependencies: react: ^16.8.0 || ^17 || ^18 - checksum: 9c11ba454ce5b2a16e7499f2ca710e0c0cff227f39689b8e7985902f27f99bfc7a2c49f145ef228528764cf8286bf6101fc8a0f5094ce652eb31cab1684518d1 + checksum: dec192fec9c54e436f9e47008635dd7849b6b119ed477a9b0cd491367a0b2ced3427cd937febfb245e1cb7578c863917181d903eff4519c2787bf713ec7d3426 languageName: node linkType: hard @@ -36994,7 +37189,7 @@ __metadata: languageName: node linkType: hard -"react-resizable@npm:^3.0.4": +"react-resizable@npm:^3.0.4, react-resizable@npm:^3.0.5": version: 3.0.5 resolution: "react-resizable@npm:3.0.5" dependencies: @@ -37058,15 +37253,15 @@ __metadata: linkType: hard "react-router-dom@npm:^6.3.0": - version: 6.15.0 - resolution: "react-router-dom@npm:6.15.0" + version: 6.16.0 + resolution: "react-router-dom@npm:6.16.0" dependencies: - "@remix-run/router": 1.8.0 - react-router: 6.15.0 + "@remix-run/router": 1.9.0 + react-router: 6.16.0 peerDependencies: react: ">=16.8" react-dom: ">=16.8" - checksum: 95301837e293654f00934de6a4bdb27bfb06f613503e4cce7a93f19384793729832e7479d50faf3b9457d149014d4df40a3ee3a5193d7e3a3caadb7aaa6ec0f9 + checksum: 18b398924bb0f0d97cf2f71dab71d860b960a7a267b2f77388990c662bb6d8738bdc3042d92f713fd63d269ae9ad90df39c8e97661b6ba758bbb7386b9f20ae0 languageName: node linkType: hard @@ -37081,14 +37276,14 @@ __metadata: languageName: node linkType: hard -"react-router@npm:6.15.0, react-router@npm:^6.3.0": - version: 6.15.0 - resolution: "react-router@npm:6.15.0" +"react-router@npm:6.16.0, react-router@npm:^6.3.0": + version: 6.16.0 + resolution: "react-router@npm:6.16.0" dependencies: - "@remix-run/router": 1.8.0 + "@remix-run/router": 1.9.0 peerDependencies: react: ">=16.8" - checksum: 345b29277e13997f2625f0037f537eaf1955bb9f44ebfea80dd3ff83fc06273f7b64e1be944bfc75945fd2af5af917874133a8a93ed5ecaca523be8f045ae166 + checksum: b31c187e3fdcdf7294ffdad6ff834e14d012840c94d8ee8c7fbe451062a8fcb6e31e8bc7827fb1ff45445dd40fad2b8c96a7e98f0ac1c3eb1d716c257a0821c9 languageName: node linkType: hard @@ -37650,13 +37845,6 @@ __metadata: languageName: node linkType: hard -"regexpp@npm:^3.2.0": - version: 3.2.0 - resolution: "regexpp@npm:3.2.0" - checksum: a78dc5c7158ad9ddcfe01aa9144f46e192ddbfa7b263895a70a5c6c73edd9ce85faf7c0430e59ac38839e1734e275b9c3de5c57ee3ab6edc0e0b1bdebefccef8 - languageName: node - linkType: hard - "regexpu-core@npm:^5.3.1": version: 5.3.2 resolution: "regexpu-core@npm:5.3.2" @@ -37924,6 +38112,13 @@ __metadata: languageName: node linkType: hard +"resolve-pkg-maps@npm:^1.0.0": + version: 1.0.0 + resolution: "resolve-pkg-maps@npm:1.0.0" + checksum: 1012afc566b3fdb190a6309cc37ef3b2dcc35dff5fa6683a9d00cd25c3247edfbc4691b91078c97adc82a29b77a2660c30d791d65dab4fc78bfc473f60289977 + languageName: node + linkType: hard + "resolve.exports@npm:^2.0.0": version: 2.0.0 resolution: "resolve.exports@npm:2.0.0" @@ -38270,8 +38465,8 @@ __metadata: linkType: hard "rollup@npm:^2.60.2": - version: 2.77.3 - resolution: "rollup@npm:2.77.3" + version: 2.79.1 + resolution: "rollup@npm:2.79.1" dependencies: fsevents: ~2.3.2 dependenciesMeta: @@ -38279,7 +38474,7 @@ __metadata: optional: true bin: rollup: dist/bin/rollup - checksum: b179c68249584565ddb5664a241e8e48c293b2207718d885b08ee25797d98857a383f06b544bb89819407da5a71557f4713309a278f61c4778bb32b1d3321a1c + checksum: 6a2bf167b3587d4df709b37d149ad0300692cc5deb510f89ac7bdc77c8738c9546ae3de9322b0968e1ed2b0e984571f5f55aae28fa7de4cfcb1bc5402a4e2be6 languageName: node linkType: hard @@ -38323,35 +38518,35 @@ __metadata: languageName: unknown linkType: soft -"rrdom@npm:^2.0.0-alpha.9": - version: 2.0.0-alpha.9 - resolution: "rrdom@npm:2.0.0-alpha.9" +"rrdom@npm:^2.0.0-alpha.8": + version: 2.0.0-alpha.11 + resolution: "rrdom@npm:2.0.0-alpha.11" dependencies: - rrweb-snapshot: ^2.0.0-alpha.9 - checksum: d56df9acc0348f4226a2d195692a422a431498c889a40046242f5643437d3388840de90078fb26488378fc250049a9d25ee5394a089f435e2f88668276bf17d4 + rrweb-snapshot: ^2.0.0-alpha.11 + checksum: cfc8f18698902224bd4b666586497b2682d3d11e30946c2b9fe374b8209d977c0d6c4157231a2a4bfed12761a79db1cbc9a139741a9b3d7c943536cd9eb3bb50 languageName: node linkType: hard -"rrweb-snapshot@npm:^2.0.0-alpha.9": - version: 2.0.0-alpha.9 - resolution: "rrweb-snapshot@npm:2.0.0-alpha.9" - checksum: 987f3ce493178dcc6782e959adef3e3f39e711bc8d5ac7dba5dfaf2fd01477aa2d3cd959598fa4e54cf15f2c397e95cf8323180a420857ca2a4d76abaec0a552 +"rrweb-snapshot@npm:^2.0.0-alpha.11, rrweb-snapshot@npm:^2.0.0-alpha.8": + version: 2.0.0-alpha.11 + resolution: "rrweb-snapshot@npm:2.0.0-alpha.11" + checksum: 8b5e40ebe17d61546f9c93b4cc266156be0fc28b7452e4fea6ea4c24a35a857c021e15503d218f10d3fc8c478c793450f1f2ebf9c751c1d7a24e25322b9d1677 languageName: node linkType: hard -"rrweb@npm:^2.0.0-alpha.8": - version: 2.0.0-alpha.9 - resolution: "rrweb@npm:2.0.0-alpha.9" +"rrweb@npm:2.0.0-alpha.8": + version: 2.0.0-alpha.8 + resolution: "rrweb@npm:2.0.0-alpha.8" dependencies: - "@rrweb/types": ^2.0.0-alpha.9 + "@rrweb/types": ^2.0.0-alpha.8 "@types/css-font-loading-module": 0.0.7 "@xstate/fsm": ^1.4.0 base64-arraybuffer: ^1.0.1 fflate: ^0.4.4 mitt: ^3.0.0 - rrdom: ^2.0.0-alpha.9 - rrweb-snapshot: ^2.0.0-alpha.9 - checksum: b87ec509dff99eef90496bc5685c57f6ec7868fb12c6b49a8d824a41e1a812aaa6b4aa792b50cdfdd68ec49287d51bba48ea764dfce149f3d9ce2363327328ff + rrdom: ^2.0.0-alpha.8 + rrweb-snapshot: ^2.0.0-alpha.8 + checksum: a07e4a56fe75e452a7d0f1e3d066c21ef086516c08249ee8c57de55c0937bdd08281881523727e33cae94151c218f278e9ab3fdd477acb111f65a5c18334c31f languageName: node linkType: hard @@ -38668,7 +38863,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:^7.1.1, semver@npm:^7.1.2, semver@npm:^7.1.3, semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8, semver@npm:^7.5.3, 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": version: 7.5.4 resolution: "semver@npm:7.5.4" dependencies: @@ -38920,13 +39115,13 @@ __metadata: languageName: node linkType: hard -"short-unique-id@npm:^4.4.4": - version: 4.4.4 - resolution: "short-unique-id@npm:4.4.4" +"short-unique-id@npm:^5.0.2": + version: 5.0.3 + resolution: "short-unique-id@npm:5.0.3" bin: short-unique-id: bin/short-unique-id suid: bin/short-unique-id - checksum: 3507f2e97326e49180dd4edbf41dd762a76c591df3fd5b7c1e7592bfb0c2f5724d63e626cc6f581c717d3111374811ca1d77a728ac07b0b9041b2355700124d4 + checksum: 9e5e02276972b103d3f2808280b82ab9f90006dd0aea6a253158e71e3ed618c3ac8dfe509a267080b19826a5d4e20d7a3d1adb2f13e166109f56946da3fdff9b languageName: node linkType: hard @@ -39578,6 +39773,15 @@ __metadata: languageName: node linkType: hard +"static-eval@npm:2.0.2": + version: 2.0.2 + resolution: "static-eval@npm:2.0.2" + dependencies: + escodegen: ^1.8.1 + checksum: 335a923c5ccb29add404ac23d0a55c0da6cee3071f6f67a7053aeac0dedc6dbfc53ac9269e9c25f403f5b7603a291ef47d7114f99bde241184f7aa3f9286dc32 + languageName: node + linkType: hard + "statuses@npm:2.0.1": version: 2.0.1 resolution: "statuses@npm:2.0.1" @@ -40150,42 +40354,40 @@ __metadata: languageName: node linkType: hard -"swagger-client@npm:^3.20.0": - version: 3.20.0 - resolution: "swagger-client@npm:3.20.0" +"swagger-client@npm:^3.22.3": + version: 3.23.0 + resolution: "swagger-client@npm:3.23.0" dependencies: - "@babel/runtime-corejs3": ^7.20.13 - "@swagger-api/apidom-core": ">=0.74.1 <1.0.0" - "@swagger-api/apidom-json-pointer": ">=0.74.1 <1.0.0" - "@swagger-api/apidom-ns-openapi-3-1": ">=0.74.1 <1.0.0" - "@swagger-api/apidom-reference": ">=0.74.1 <1.0.0" + "@babel/runtime-corejs3": ^7.22.15 + "@swagger-api/apidom-core": ">=0.77.0 <1.0.0" + "@swagger-api/apidom-json-pointer": ">=0.77.0 <1.0.0" + "@swagger-api/apidom-ns-openapi-3-1": ">=0.77.0 <1.0.0" + "@swagger-api/apidom-reference": ">=0.77.0 <1.0.0" cookie: ~0.5.0 - cross-fetch: ^3.1.5 deepmerge: ~4.3.0 fast-json-patch: ^3.0.0-1 - form-data-encoder: ^1.4.3 - formdata-node: ^4.0.0 is-plain-object: ^5.0.0 js-yaml: ^4.1.0 - lodash: ^4.17.21 + node-abort-controller: ^3.1.1 + node-fetch-commonjs: ^3.3.1 qs: ^6.10.2 traverse: ~0.6.6 - url: ~0.11.0 - checksum: c61452d0c810e05ec319dfc9bf8b876a87d1d5ed74156764ccc627e79e8a6c0d84f4660754dd1e2f7570adfa17a89c2d16cc337421b7da3bec0b428224a70436 + undici: ^5.24.0 + checksum: 988b672ed05b115504e2b09afd8285f694c1e5061854fa8ab3beb56e1a273d7f47e4ee5f25292693c7f695292bd2924d8e6c33f28bd86843859a5083f96044ac languageName: node linkType: hard "swagger-ui-react@npm:^5.0.0": - version: 5.6.2 - resolution: "swagger-ui-react@npm:5.6.2" + version: 5.9.0 + resolution: "swagger-ui-react@npm:5.9.0" dependencies: - "@babel/runtime-corejs3": ^7.22.11 + "@babel/runtime-corejs3": ^7.23.1 "@braintree/sanitize-url": =6.0.4 base64-js: ^1.5.1 classnames: ^2.3.1 css.escape: 1.5.1 deep-extend: 0.6.0 - dompurify: =3.0.5 + dompurify: =3.0.6 ieee754: ^1.2.1 immutable: ^3.x.x js-file-download: ^0.4.12 @@ -40208,7 +40410,7 @@ __metadata: reselect: ^4.1.8 serialize-error: ^8.1.0 sha.js: ^2.4.11 - swagger-client: ^3.20.0 + swagger-client: ^3.22.3 url-parse: ^1.5.10 xml: =1.0.1 xml-but-prettier: ^1.0.1 @@ -40216,7 +40418,7 @@ __metadata: peerDependencies: react: ">=17.0.0" react-dom: ">=17.0.0" - checksum: 50a9ad4ed40a87b2a5b169ac1697c163123491ee4ffcc1a4d617f578bf0636d3246caf92811122c9ec73b7ebe34df41f0298e5de4f05647474c8d8352f7cb194 + checksum: 73ebfeaaad364899f7c3304cbe30a165066970b65a4822c6d22c0ae7f00cbe476849571bacdb938ef4e173579cb9c1ea9623b8c677bc452bcd57e8fb27ff63f6 languageName: node linkType: hard @@ -40867,6 +41069,15 @@ __metadata: languageName: node linkType: hard +"ts-api-utils@npm:^1.0.1": + version: 1.0.3 + resolution: "ts-api-utils@npm:1.0.3" + peerDependencies: + typescript: ">=4.2.0" + checksum: 441cc4489d65fd515ae6b0f4eb8690057add6f3b6a63a36073753547fb6ce0c9ea0e0530220a0b282b0eec535f52c4dfc315d35f8a4c9a91c0def0707a714ca6 + languageName: node + linkType: hard + "ts-easing@npm:^0.2.0": version: 0.2.0 resolution: "ts-easing@npm:0.2.0" @@ -41208,31 +41419,21 @@ __metadata: languageName: node linkType: hard -"typescript-json-schema@npm:^0.55.0": - version: 0.55.0 - resolution: "typescript-json-schema@npm:0.55.0" +"typescript-json-schema@npm:^0.61.0": + version: 0.61.0 + resolution: "typescript-json-schema@npm:0.61.0" dependencies: "@types/json-schema": ^7.0.9 "@types/node": ^16.9.2 glob: ^7.1.7 - path-equal: ^1.1.2 + path-equal: ^1.2.5 safe-stable-stringify: ^2.2.0 ts-node: ^10.9.1 - typescript: ~4.8.2 + typescript: ~5.1.0 yargs: ^17.1.1 bin: typescript-json-schema: bin/typescript-json-schema - checksum: 4188e9d4cc1f1fc3201e2aa06b8d87d35695b0eaf049ff9d2cd3027d87406efc6978c4f90c2bf06f4fcd8d6dd40ceb65e744dc3cf9b412e1f74b8eb5bae96a05 - languageName: node - linkType: hard - -"typescript@npm:~4.8.2": - version: 4.8.4 - resolution: "typescript@npm:4.8.4" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 3e4f061658e0c8f36c820802fa809e0fd812b85687a9a2f5430bc3d0368e37d1c9605c3ce9b39df9a05af2ece67b1d844f9f6ea8ff42819f13bcb80f85629af0 + checksum: 8359d5ca8ebcb96dca9cd968b46ea21da40a92ee872a44a7b5c6c8f8f4cd1ffbd0ea457752f3be7d44379ea286ccfaee1d40ab1810321ee45d0ecece80ed45ed languageName: node linkType: hard @@ -41246,13 +41447,13 @@ __metadata: languageName: node linkType: hard -"typescript@patch:typescript@~4.8.2#~builtin": - version: 4.8.4 - resolution: "typescript@patch:typescript@npm%3A4.8.4#~builtin::version=4.8.4&hash=a1c5e5" +"typescript@npm:~5.1.0": + version: 5.1.6 + resolution: "typescript@npm:5.1.6" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 563a0ef47abae6df27a9a3ab38f75fc681f633ccf1a3502b1108e252e187787893de689220f4544aaf95a371a4eb3141e4a337deb9895de5ac3c1ca76430e5f0 + checksum: b2f2c35096035fe1f5facd1e38922ccb8558996331405eb00a5111cc948b2e733163cc22fab5db46992aba7dd520fff637f2c1df4996ff0e134e77d3249a7350 languageName: node linkType: hard @@ -41266,6 +41467,16 @@ __metadata: languageName: node linkType: hard +"typescript@patch:typescript@~5.1.0#~builtin": + version: 5.1.6 + resolution: "typescript@patch:typescript@npm%3A5.1.6#~builtin::version=5.1.6&hash=a1c5e5" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 21e88b0a0c0226f9cb9fd25b9626fb05b4c0f3fddac521844a13e1f30beb8f14e90bd409a9ac43c812c5946d714d6e0dee12d5d02dfc1c562c5aacfa1f49b606 + languageName: node + linkType: hard + "ua-parser-js@npm:^0.7.30": version: 0.7.33 resolution: "ua-parser-js@npm:0.7.33" @@ -41347,6 +41558,13 @@ __metadata: languageName: node linkType: hard +"underscore@npm:1.12.1": + version: 1.12.1 + resolution: "underscore@npm:1.12.1" + checksum: ec327603aa112b99fe9d74cd9bf3b3b7451465a9d2610ceab269a532e3f191650ab017903be34dc86fe406a11d04d8905a3b04dd4c129493e51bee09a3f3074c + languageName: node + linkType: hard + "underscore@npm:^1.12.1, underscore@npm:^1.13.6, underscore@npm:~1.13.2": version: 1.13.6 resolution: "underscore@npm:1.13.6" @@ -41354,12 +41572,12 @@ __metadata: languageName: node linkType: hard -"undici@npm:^5.12.0, undici@npm:^5.8.0": - version: 5.22.1 - resolution: "undici@npm:5.22.1" +"undici@npm:^5.12.0, undici@npm:^5.24.0, undici@npm:^5.8.0": + version: 5.25.4 + resolution: "undici@npm:5.25.4" dependencies: - busboy: ^1.6.0 - checksum: 048a3365f622be44fb319316cedfaa241c59cf7f3368ae7667a12323447e1822e8cc3d00f6956c852d1478a6fde1cbbe753f49e05f2fdaed229693e716ebaf35 + "@fastify/busboy": ^2.0.0 + checksum: 654da161687de893127a685be61a19cb5bae42f4595c316ebf633929d871ac3bcd33edcb74156cea90655dfcd100bfe9b53a4f4749d52fc6ad2232f49a6ca8ab languageName: node linkType: hard @@ -41659,7 +41877,7 @@ __metadata: languageName: node linkType: hard -"url@npm:^0.11.0, url@npm:~0.11.0": +"url@npm:^0.11.0": version: 0.11.0 resolution: "url@npm:0.11.0" dependencies: @@ -42212,7 +42430,7 @@ __metadata: languageName: node linkType: hard -"web-streams-polyfill@npm:^3.2.0, web-streams-polyfill@npm:^3.2.1": +"web-streams-polyfill@npm:^3.0.3, web-streams-polyfill@npm:^3.2.0, web-streams-polyfill@npm:^3.2.1": version: 3.2.1 resolution: "web-streams-polyfill@npm:3.2.1" checksum: b119c78574b6d65935e35098c2afdcd752b84268e18746606af149e3c424e15621b6f1ff0b42b2676dc012fc4f0d313f964b41a4b5031e525faa03997457da02 @@ -42603,10 +42821,10 @@ __metadata: linkType: hard "winston@npm:^3.2.1": - version: 3.10.0 - resolution: "winston@npm:3.10.0" + version: 3.11.0 + resolution: "winston@npm:3.11.0" dependencies: - "@colors/colors": 1.5.0 + "@colors/colors": ^1.6.0 "@dabh/diagnostics": ^2.0.2 async: ^3.2.3 is-stream: ^2.0.0 @@ -42617,7 +42835,7 @@ __metadata: stack-trace: 0.0.x triple-beam: ^1.3.0 winston-transport: ^4.5.0 - checksum: 47df0361220d12b46d1b3c98a1c380a3718321739d527a182ce7984fc20715e5b0b55db0bcd3fd076d1b1d3261903b890b053851cfd4bc028bda7951fa8ca2e0 + checksum: ca4454070f7a71b19f53c8c1765c59a013dab220edb49161b2e81917751d3e9edc3382430e4fb050feda04fb8463290ecab7cbc9240ec8d3d3b32a121849bbb0 languageName: node linkType: hard @@ -43250,9 +43468,9 @@ __metadata: linkType: hard "zod@npm:^3.21.4": - version: 3.22.3 - resolution: "zod@npm:3.22.3" - checksum: 65b05139be337078a70700b05942ab7f2ef5f11abe194df14ef257fac4e5c383476a4dc290731842996bd57fc8d5bf38e5a4c907fe8cdf8b15477f8da5bfcc00 + version: 3.22.4 + resolution: "zod@npm:3.22.4" + checksum: 80bfd7f8039b24fddeb0718a2ec7c02aa9856e4838d6aa4864335a047b6b37a3273b191ef335bf0b2002e5c514ef261ffcda5a589fb084a48c336ffc4cdbab7f languageName: node linkType: hard