diff --git a/.changeset/beige-pumas-tap.md b/.changeset/beige-pumas-tap.md new file mode 100644 index 0000000000..8ed8aab1f4 --- /dev/null +++ b/.changeset/beige-pumas-tap.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-backend': minor +--- + +Add the option for a homepage when using the `github:publish` action diff --git a/.changeset/big-mirrors-play.md b/.changeset/big-mirrors-play.md deleted file mode 100644 index 7478363a46..0000000000 --- a/.changeset/big-mirrors-play.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-kubernetes': patch ---- - -Fixed bug in CronJobsAccordions component that causes an error when cronjobs use a kubernetes alias, such as `@hourly` or `@daily` instead of standard cron syntax. diff --git a/.changeset/calm-clocks-drum.md b/.changeset/calm-clocks-drum.md deleted file mode 100644 index feb35e0133..0000000000 --- a/.changeset/calm-clocks-drum.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -'@backstage/backend-common': patch ---- - -Improve `scm/git` wrapper around `isomorphic-git` library : - -- Add `checkout` function, -- Add optional `remoteRef` parameter in the `push` function. diff --git a/.changeset/clever-beans-turn.md b/.changeset/clever-beans-turn.md new file mode 100644 index 0000000000..69846a2516 --- /dev/null +++ b/.changeset/clever-beans-turn.md @@ -0,0 +1,8 @@ +--- +'@backstage/plugin-kafka': patch +'@backstage/plugin-kafka-backend': patch +'@backstage/plugin-lighthouse': patch +'@backstage/plugin-proxy-backend': patch +--- + +Minor API signatures cleanup diff --git a/.changeset/cold-frogs-kiss.md b/.changeset/cold-frogs-kiss.md new file mode 100644 index 0000000000..7af9468ca1 --- /dev/null +++ b/.changeset/cold-frogs-kiss.md @@ -0,0 +1,16 @@ +--- +'@backstage/plugin-scaffolder-backend': minor +--- + +Fixed a bug in plugin-scaffolder-backend where it ignores the skip migration database options. + +To use this new implementation you need to create the instance of `DatabaseTaskStore` using the `PluginDatabaseManager` instead of `Knex`; + +``` +import { DatabaseManager, getRootLogger, loadBackendConfig } from '@backstage/backend-common'; +import { DatabaseTaskStore } from '@backstage/plugin-scaffolder-backend'; + +const config = await loadBackendConfig({ argv: process.argv, logger: getRootLogger() }); +const databaseManager = DatabaseManager.fromConfig(config, { migrations: { skip: true } }); +const databaseTaskStore = await DatabaseTaskStore.create(databaseManager); +``` diff --git a/.changeset/cool-months-tickle.md b/.changeset/cool-months-tickle.md deleted file mode 100644 index 281c74bab0..0000000000 --- a/.changeset/cool-months-tickle.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-gitlab': patch ---- - -Enhancing GitLab provider with filtering projects by pattern RegExp - -```yaml -providers: - gitlab: - stg: - host: gitlab.stg.company.io - branch: main - projectPattern: 'john/' # new option - entityFilename: template.yaml -``` - -With the aforementioned parameter you can filter projects, and keep only who belongs to the namespace "john". diff --git a/.changeset/create-app-1658824524.md b/.changeset/create-app-1658824524.md deleted file mode 100644 index b50d431d4b..0000000000 --- a/.changeset/create-app-1658824524.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/create-app': patch ---- - -Bumped create-app version. diff --git a/.changeset/dull-owls-grab.md b/.changeset/dull-owls-grab.md deleted file mode 100644 index e71db46827..0000000000 --- a/.changeset/dull-owls-grab.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-home': patch ---- - -Add wrap-around for the listing of tools to prevent increasing width with name length. diff --git a/.changeset/dull-pumas-hope.md b/.changeset/dull-pumas-hope.md deleted file mode 100644 index a19811ddbc..0000000000 --- a/.changeset/dull-pumas-hope.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-common': minor ---- - -Added back support for when no branch is provided to the `UrlReader` for Bitbucket Server diff --git a/.changeset/dull-starfishes-chew.md b/.changeset/dull-starfishes-chew.md deleted file mode 100644 index 9733e8b7e6..0000000000 --- a/.changeset/dull-starfishes-chew.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/integration': patch ---- - -Handle incorrect return type from Octokit paginate plugin to resolve reading URLs from GitHub diff --git a/.changeset/eight-spies-protect.md b/.changeset/eight-spies-protect.md new file mode 100644 index 0000000000..0011dece72 --- /dev/null +++ b/.changeset/eight-spies-protect.md @@ -0,0 +1,25 @@ +--- +'@backstage/plugin-azure-devops': patch +'@backstage/plugin-azure-devops-backend': patch +'@backstage/plugin-azure-devops-common': patch +'@backstage/plugin-cloudbuild': patch +'@backstage/plugin-explore': patch +'@backstage/plugin-fossa': patch +'@backstage/plugin-git-release-manager': patch +'@backstage/plugin-github-actions': patch +'@backstage/plugin-jenkins': patch +'@backstage/plugin-newrelic-dashboard': patch +'@backstage/plugin-pagerduty': patch +'@backstage/plugin-scaffolder': patch +'@backstage/plugin-search-backend-node': patch +'@backstage/plugin-sentry': patch +'@backstage/plugin-sonarqube': patch +'@backstage/plugin-tech-insights': patch +'@backstage/plugin-tech-insights-node': patch +'@backstage/plugin-techdocs': patch +'@backstage/plugin-techdocs-module-addons-contrib': patch +'@backstage/plugin-user-settings': patch +'@backstage/plugin-vault-backend': patch +--- + +Minor API signatures cleanup diff --git a/.changeset/eighty-radios-look.md b/.changeset/eighty-radios-look.md deleted file mode 100644 index 2db51d47d7..0000000000 --- a/.changeset/eighty-radios-look.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-sonarqube-backend': minor ---- - -Initial creation of the plugin diff --git a/.changeset/empty-apple-pie.md b/.changeset/empty-apple-pie.md deleted file mode 100644 index 8e9fecdafb..0000000000 --- a/.changeset/empty-apple-pie.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/core-components': patch ---- - -Adding a `className` prop to the `MarkdownContent` component diff --git a/.changeset/empty-apples-tie.md b/.changeset/empty-apples-tie.md deleted file mode 100644 index 3ebfe0fc70..0000000000 --- a/.changeset/empty-apples-tie.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/plugin-scaffolder': minor -'@backstage/plugin-scaffolder-backend': minor ---- - -Starting the implementation of the Wizard page for the `next` scaffolder plugin diff --git a/.changeset/famous-bikes-brush.md b/.changeset/famous-bikes-brush.md deleted file mode 100644 index 0008a9145c..0000000000 --- a/.changeset/famous-bikes-brush.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -'@backstage/core-plugin-api': patch ---- - -Introduced a new experimental feature that allows you to declare plugin-wide options for your plugin by defining -`__experimentalConfigure` in your `createPlugin` options. See https://backstage.io/docs/plugins/customization.md for more information. - -This is an experimental feature and it will have breaking changes in the future. diff --git a/.changeset/fast-panthers-fold.md b/.changeset/fast-panthers-fold.md deleted file mode 100644 index f8adac413e..0000000000 --- a/.changeset/fast-panthers-fold.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend': patch ---- - -Add a `publish:gerrit:review` scaffolder action diff --git a/.changeset/few-berries-deny.md b/.changeset/few-berries-deny.md deleted file mode 100644 index d5e14a807c..0000000000 --- a/.changeset/few-berries-deny.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -'@backstage/plugin-catalog': minor ---- - -Plugin catalog has been modified to use an experimental feature where you can customize the title of the create button. - -You can modify it by doing: - -```typescript jsx -import { catalogPlugin } from '@backstage/plugin-catalog'; - -catalogPlugin.__experimentalReconfigure({ - createButtonTitle: 'New', -}); -``` diff --git a/.changeset/flat-zebras-draw.md b/.changeset/flat-zebras-draw.md deleted file mode 100644 index ba82f156ef..0000000000 --- a/.changeset/flat-zebras-draw.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-kubernetes': patch ---- - -Adds namespace column to Kubernetes error reporting table diff --git a/.changeset/forty-lobsters-guess.md b/.changeset/forty-lobsters-guess.md deleted file mode 100644 index 1a722fa04d..0000000000 --- a/.changeset/forty-lobsters-guess.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -'@backstage/plugin-sonarqube': minor ---- - -**BREAKING** This plugin now call the `sonarqube-backend` plugin instead of relying on the proxy plugin - -The whole proxy's `'/sonarqube':` key can be removed from your configuration files. - -Then head to the [README in sonarqube-backend plugin page](https://github.com/backstage/backstage/tree/master/plugins/sonarqube-backend/README.md) to learn how to set-up the link to your Sonarqube instances. diff --git a/.changeset/fresh-hounds-argue.md b/.changeset/fresh-hounds-argue.md deleted file mode 100644 index 9291a99659..0000000000 --- a/.changeset/fresh-hounds-argue.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/integration': minor -'@backstage/plugin-scaffolder-backend': minor ---- - -Add support for Basic Auth for Bitbucket Server. diff --git a/.changeset/fresh-rabbits-juggle.md b/.changeset/fresh-rabbits-juggle.md new file mode 100644 index 0000000000..804ae70853 --- /dev/null +++ b/.changeset/fresh-rabbits-juggle.md @@ -0,0 +1,9 @@ +--- +'@backstage/plugin-dynatrace': minor +--- + +New features: + +- Some visual improvements to the table that displays Problems +- Added support for viewing recent Synthetics results using +- Added some additional linking to the configured Dynatrace instance diff --git a/.changeset/friendly-sheep-flash.md b/.changeset/friendly-sheep-flash.md deleted file mode 100644 index 58ae309bf1..0000000000 --- a/.changeset/friendly-sheep-flash.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-stack-overflow-backend': patch ---- - -Added API key as separate configuration diff --git a/.changeset/green-laws-greet.md b/.changeset/green-laws-greet.md deleted file mode 100644 index 120a1d3f2c..0000000000 --- a/.changeset/green-laws-greet.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-react': patch ---- - -Modify description column to not use auto width. diff --git a/.changeset/create-app-1659429685.md b/.changeset/happy-kiwis-look.md similarity index 57% rename from .changeset/create-app-1659429685.md rename to .changeset/happy-kiwis-look.md index b50d431d4b..ff0da8943b 100644 --- a/.changeset/create-app-1659429685.md +++ b/.changeset/happy-kiwis-look.md @@ -2,4 +2,4 @@ '@backstage/create-app': patch --- -Bumped create-app version. +Fix typo in the documentation diff --git a/.changeset/hot-crabs-wonder.md b/.changeset/hot-crabs-wonder.md deleted file mode 100644 index b39398bfc3..0000000000 --- a/.changeset/hot-crabs-wonder.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-cost-insights': patch ---- - -Make `products` field optional in the config diff --git a/.changeset/hot-files-begin.md b/.changeset/hot-files-begin.md new file mode 100644 index 0000000000..e9b9076986 --- /dev/null +++ b/.changeset/hot-files-begin.md @@ -0,0 +1,71 @@ +--- +'@backstage/create-app': patch +--- + +The `packages/backend/Dockerfile` received a couple of updates, it now looks as follows: + +```Dockerfile +FROM node:16-bullseye-slim + +# Install sqlite3 dependencies. You can skip this if you don't use sqlite3 in the image, +# in which case you should also move better-sqlite3 to "devDependencies" in package.json. +RUN apt-get update && \ + apt-get install -y --no-install-recommends libsqlite3-dev python3 build-essential && \ + rm -rf /var/lib/apt/lists/* && \ + yarn config set python /usr/bin/python3 + +# From here on we use the least-privileged `node` user to run the backend. +USER node +WORKDIR /app + +# This switches many Node.js dependencies to production mode. +ENV NODE_ENV production + +# Copy repo skeleton first, to avoid unnecessary docker cache invalidation. +# The skeleton contains the package.json of each package in the monorepo, +# and along with yarn.lock and the root package.json, that's enough to run yarn install. +COPY --chown=node:node yarn.lock package.json packages/backend/dist/skeleton.tar.gz ./ +RUN tar xzf skeleton.tar.gz && rm skeleton.tar.gz + +RUN yarn install --frozen-lockfile --production --network-timeout 300000 && rm -rf "$(yarn cache dir)" + +# Then copy the rest of the backend bundle, along with any other files we might want. +COPY --chown=node:node packages/backend/dist/bundle.tar.gz app-config*.yaml ./ +RUN tar xzf bundle.tar.gz && rm bundle.tar.gz + +CMD ["node", "packages/backend", "--config", "app-config.yaml", "--config", "app-config.production.yaml"] +``` + +The two notable changes are that a `USER node` instruction has been added and the ordering of instructions has been changed accordingly. This means that the app will now be running using the least-privileged `node` user. In order for this to work we now need to make sure that all app files are owned by the `node` user, which we do by adding the `--chown=node:node` option to the `COPY` instructions. + +The second change is the addition of `ENV NODE_ENV production`, which ensured that all Node.js modules run in production mode. If you apply this change to an existing app, note that one of the more significant changes is that this switches the log formatting to use the default production format, JSON. Rather than your log lines looking like this: + +```log +2022-08-10T11:36:05.478Z catalog info Performing database migration type=plugin +``` + +They will now look like this: + +```log +{"level":"info","message":"Performing database migration","plugin":"catalog","service":"backstage","type":"plugin"} +``` + +If you wish to keep the existing format, you can override this change by applying the following change to `packages/backend/src/index.ts`: + +```diff + getRootLogger, ++ setRootLogger, ++ createRootLogger, ++ coloredFormat, + useHotMemoize, + ... + ServerTokenManager, + } from '@backstage/backend-common'; + + ... + + async function main() { ++ setRootLogger(createRootLogger({ format: coloredFormat })); ++ + const config = await loadBackendConfig({ +``` diff --git a/.changeset/hungry-dogs-agree.md b/.changeset/hungry-dogs-agree.md new file mode 100644 index 0000000000..b111b6e463 --- /dev/null +++ b/.changeset/hungry-dogs-agree.md @@ -0,0 +1,6 @@ +--- +'@backstage/core-app-api': patch +'@backstage/core-plugin-api': patch +--- + +Added `getSystemIcons()` function to the `AppContext` available through `useApp` that will pull a list of all the icons that have been registered in the App. diff --git a/.changeset/itchy-mice-kiss.md b/.changeset/itchy-mice-kiss.md deleted file mode 100644 index 18390866d9..0000000000 --- a/.changeset/itchy-mice-kiss.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-techdocs': patch ---- - -Add highlight to active navigation item and navigation parents. diff --git a/.changeset/khaki-meals-hammer.md b/.changeset/khaki-meals-hammer.md deleted file mode 100644 index 1deee2706d..0000000000 --- a/.changeset/khaki-meals-hammer.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/backend-common': minor ---- - -- Added `force` and `remoteRef` option to `push` method in `git` actions -- Added `addRemote` and `deleteRemote` methods to `git` actions diff --git a/.changeset/lazy-snakes-film.md b/.changeset/lazy-snakes-film.md new file mode 100644 index 0000000000..ffb9c539c8 --- /dev/null +++ b/.changeset/lazy-snakes-film.md @@ -0,0 +1,5 @@ +--- +'@backstage/core-components': patch +--- + +Adds code to generate ids for headers parsed through the MarkdownContent component. diff --git a/.changeset/light-beans-share.md b/.changeset/light-beans-share.md new file mode 100644 index 0000000000..51c59ff7d0 --- /dev/null +++ b/.changeset/light-beans-share.md @@ -0,0 +1,16 @@ +--- +'@backstage/plugin-search-backend-module-pg': minor +--- + +Fixed a bug in search-backend-module-pg where it ignores the skip migration database options when using the database. + +To use this new implementation you need to create the instance of `DatabaseDocumentStore` using the `PluginDatabaseManager` instead of `Knex`; + +``` +import { DatabaseManager, getRootLogger, loadBackendConfig } from '@backstage/backend-common'; +import { DatabaseDocumentStore } from '@backstage/plugin-search-backend-module-pg'; + +const config = await loadBackendConfig({ argv: process.argv, logger: getRootLogger() }); +const databaseManager = DatabaseManager.fromConfig(config, { migrations: { skip: true } }); +const databaseDocumentStore = await DatabaseDocumentStore.create(databaseManager); +``` diff --git a/.changeset/little-laws-heal.md b/.changeset/little-laws-heal.md deleted file mode 100644 index cd1505540e..0000000000 --- a/.changeset/little-laws-heal.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog': minor ---- - -Allow changing the subtitle of the `CatalogTable` component diff --git a/.changeset/long-pumpkins-walk.md b/.changeset/long-pumpkins-walk.md deleted file mode 100644 index 0ccad4d678..0000000000 --- a/.changeset/long-pumpkins-walk.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-kubernetes-backend': patch ---- - -Added a new `customResources` field to the ClusterDetails interface, in order to specify (override) custom resources per cluster diff --git a/.changeset/loud-panthers-arrive.md b/.changeset/loud-panthers-arrive.md deleted file mode 100644 index a8c69cdc76..0000000000 --- a/.changeset/loud-panthers-arrive.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@backstage/plugin-techdocs-node': patch ---- - -Fix AWS S3 404 NotFound error - -When reading an object from the S3 bucket through a stream, the aws-sdk getObject() API may throw a 404 NotFound Error with no error message or, in fact, any sort of HTTP-layer error responses. These fail the @backstage/error's assertError() checks, so they must be wrapped. The test for this case was also updated to match the wrapped error message. diff --git a/.changeset/lovely-walls-brush.md b/.changeset/lovely-walls-brush.md deleted file mode 100644 index 8834673d3b..0000000000 --- a/.changeset/lovely-walls-brush.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-common': patch ---- - -Export aggregated list of all catalog permissions diff --git a/.changeset/lucky-points-wash.md b/.changeset/lucky-points-wash.md new file mode 100644 index 0000000000..961c354574 --- /dev/null +++ b/.changeset/lucky-points-wash.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-org': patch +--- + +Added an edit button to the `UserProfileCard` that is enabled when the `backstage.io/edit-url` is present, this matches how the `GroupProfileCard` works diff --git a/.changeset/mean-ants-hang.md b/.changeset/mean-ants-hang.md deleted file mode 100644 index e9c3bc4eaf..0000000000 --- a/.changeset/mean-ants-hang.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-common': patch ---- - -Exported `redactLogLine` function to be able to use it in custom loggers and renamed it to `redactWinstonLogLine`. diff --git a/.changeset/metal-points-itch.md b/.changeset/metal-points-itch.md deleted file mode 100644 index 752f52c269..0000000000 --- a/.changeset/metal-points-itch.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend': minor -'@backstage/backend-common': patch ---- - -Add support for Bearer Authorization header / token-based auth at Git commands. diff --git a/.changeset/mighty-penguins-tap.md b/.changeset/mighty-penguins-tap.md deleted file mode 100644 index 0958e71ffd..0000000000 --- a/.changeset/mighty-penguins-tap.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-techdocs': patch ---- - -Fixed techdocs sidebar layout bug for medium devices. diff --git a/.changeset/modern-shrimps-wave.md b/.changeset/modern-shrimps-wave.md deleted file mode 100644 index 9be8c49ca8..0000000000 --- a/.changeset/modern-shrimps-wave.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/cli': patch ---- - -Added Backstage version to output of `yarn backstage-cli info` command diff --git a/.changeset/nine-mails-crash.md b/.changeset/nine-mails-crash.md deleted file mode 100644 index ead5553d1c..0000000000 --- a/.changeset/nine-mails-crash.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -'@backstage/backend-common': patch ---- - -The `ZipArchiveResponse` now correctly handles corrupt ZIP archives. - -Before this change, certain corrupt ZIP archives either cause the inflater to throw (as expected), or will hang the parser indefinitely. - -By switching out the `zip` parsing library, we now write to a temporary directory, and load from disk which should ensure that the parsing of the `.zip` files are done correctly because `streaming` of `zip` paths is technically impossible without being able to parse the headers at the end of the file. diff --git a/.changeset/odd-adults-smash.md b/.changeset/odd-adults-smash.md deleted file mode 100644 index d0002094bd..0000000000 --- a/.changeset/odd-adults-smash.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-kafka': patch ---- - -Add dashboard URL feature and fix minor styling issues. diff --git a/.changeset/odd-tomatoes-juggle.md b/.changeset/odd-tomatoes-juggle.md deleted file mode 100644 index 336af17eb4..0000000000 --- a/.changeset/odd-tomatoes-juggle.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-github': patch ---- - -Github Entity Provider functionality for adding entities to the catalog. - -This provider replaces the GithubDiscoveryProcessor functionality as providers offer more flexibility with scheduling ingestion, removing and preventing orphaned entities. - -More information can be found on the [GitHub Discovery](https://backstage.io/docs/integrations/github/discovery) page. diff --git a/.changeset/olive-tips-camp.md b/.changeset/olive-tips-camp.md deleted file mode 100644 index 8b65eed574..0000000000 --- a/.changeset/olive-tips-camp.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-aws': patch ---- - -Deprecate `AwsS3DiscoveryProcessor` in favor of `AwsS3EntityProvider` (since v0.1.4). - -You can find a migration guide at -[the release notes for v0.1.4](https://github.com/backstage/backstage/blob/master/plugins/catalog-backend-module-aws/CHANGELOG.md#014). diff --git a/.changeset/plenty-timers-flow.md b/.changeset/plenty-timers-flow.md deleted file mode 100644 index 8a26c8068b..0000000000 --- a/.changeset/plenty-timers-flow.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/plugin-cost-insights': patch -'@backstage/plugin-cost-insights-common': patch ---- - -Add name property to Group diff --git a/.changeset/popular-starfishes-bow.md b/.changeset/popular-starfishes-bow.md deleted file mode 100644 index 1b976d1624..0000000000 --- a/.changeset/popular-starfishes-bow.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/cli': patch ---- - -Added resolution of `.json` and `.wasm` files to the Webpack configuration in order to match defaults. diff --git a/.changeset/pre.json b/.changeset/pre.json index 748a6c5940..172b96d8f6 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -1,239 +1,175 @@ { - "mode": "exit", + "mode": "pre", "tag": "next", "initialVersions": { - "example-app": "0.2.73", - "@backstage/app-defaults": "1.0.4", - "example-backend": "0.2.73", - "@backstage/backend-app-api": "0.1.0", - "@backstage/backend-common": "0.14.1", - "example-backend-next": "0.0.1", - "@backstage/backend-plugin-api": "0.1.0", - "@backstage/backend-tasks": "0.3.3", - "@backstage/backend-test-utils": "0.1.26", + "example-app": "0.2.74", + "@backstage/app-defaults": "1.0.5", + "example-backend": "0.2.74", + "@backstage/backend-app-api": "0.2.0", + "@backstage/backend-common": "0.15.0", + "@backstage/backend-defaults": "0.1.0", + "example-backend-next": "0.0.2", + "@backstage/backend-plugin-api": "0.1.1", + "@backstage/backend-tasks": "0.3.4", + "@backstage/backend-test-utils": "0.1.27", "@backstage/catalog-client": "1.0.4", "@backstage/catalog-model": "1.1.0", - "@backstage/cli": "0.18.0", + "@backstage/cli": "0.18.1", "@backstage/cli-common": "0.1.9", "@backstage/codemods": "0.1.38", "@backstage/config": "1.0.1", "@backstage/config-loader": "1.1.3", - "@backstage/core-app-api": "1.0.4", - "@backstage/core-components": "0.10.0", - "@backstage/core-plugin-api": "1.0.4", - "@backstage/create-app": "0.4.29", - "@backstage/dev-utils": "1.0.4", + "@backstage/core-app-api": "1.0.5", + "@backstage/core-components": "0.11.0", + "@backstage/core-plugin-api": "1.0.5", + "@backstage/create-app": "0.4.30", + "@backstage/dev-utils": "1.0.5", "e2e-test": "0.2.0", "@backstage/errors": "1.1.0", - "@backstage/integration": "1.2.2", - "@backstage/integration-react": "1.1.2", + "@backstage/integration": "1.3.0", + "@backstage/integration-react": "1.1.3", "@backstage/release-manifests": "0.0.5", - "@techdocs/cli": "1.1.3", - "techdocs-cli-embedded-app": "0.2.72", - "@backstage/test-utils": "1.1.2", + "@techdocs/cli": "1.2.0", + "techdocs-cli-embedded-app": "0.2.73", + "@backstage/test-utils": "1.1.3", "@backstage/theme": "0.2.16", "@backstage/types": "1.0.0", "@backstage/version-bridge": "1.0.1", - "@backstage/plugin-adr": "0.1.2", - "@backstage/plugin-adr-backend": "0.1.2", - "@backstage/plugin-adr-common": "0.1.2", - "@backstage/plugin-airbrake": "0.3.7", - "@backstage/plugin-airbrake-backend": "0.2.7", - "@backstage/plugin-allure": "0.1.23", - "@backstage/plugin-analytics-module-ga": "0.1.18", - "@backstage/plugin-apache-airflow": "0.2.0", - "@backstage/plugin-api-docs": "0.8.7", + "@backstage/plugin-adr": "0.2.0", + "@backstage/plugin-adr-backend": "0.2.0", + "@backstage/plugin-adr-common": "0.2.0", + "@backstage/plugin-airbrake": "0.3.8", + "@backstage/plugin-airbrake-backend": "0.2.8", + "@backstage/plugin-allure": "0.1.24", + "@backstage/plugin-analytics-module-ga": "0.1.19", + "@backstage/plugin-apache-airflow": "0.2.1", + "@backstage/plugin-api-docs": "0.8.8", "@backstage/plugin-api-docs-module-protoc-gen-doc": "0.1.0", - "@backstage/plugin-apollo-explorer": "0.1.0", - "@backstage/plugin-app-backend": "0.3.34", - "@backstage/plugin-auth-backend": "0.15.0", - "@backstage/plugin-auth-node": "0.2.3", - "@backstage/plugin-azure-devops": "0.1.23", - "@backstage/plugin-azure-devops-backend": "0.3.13", + "@backstage/plugin-apollo-explorer": "0.1.1", + "@backstage/plugin-app-backend": "0.3.35", + "@backstage/plugin-auth-backend": "0.15.1", + "@backstage/plugin-auth-node": "0.2.4", + "@backstage/plugin-azure-devops": "0.1.24", + "@backstage/plugin-azure-devops-backend": "0.3.14", "@backstage/plugin-azure-devops-common": "0.2.4", - "@backstage/plugin-badges": "0.2.31", - "@backstage/plugin-badges-backend": "0.1.28", - "@backstage/plugin-bazaar": "0.1.22", - "@backstage/plugin-bazaar-backend": "0.1.18", - "@backstage/plugin-bitbucket-cloud-common": "0.1.1", - "@backstage/plugin-bitrise": "0.1.34", - "@backstage/plugin-catalog": "1.4.0", - "@backstage/plugin-catalog-backend": "1.3.0", - "@backstage/plugin-catalog-backend-module-aws": "0.1.7", - "@backstage/plugin-catalog-backend-module-azure": "0.1.5", - "@backstage/plugin-catalog-backend-module-bitbucket": "0.2.1", - "@backstage/plugin-catalog-backend-module-bitbucket-cloud": "0.1.1", - "@backstage/plugin-catalog-backend-module-gerrit": "0.1.2", - "@backstage/plugin-catalog-backend-module-github": "0.1.5", - "@backstage/plugin-catalog-backend-module-gitlab": "0.1.5", - "@backstage/plugin-catalog-backend-module-ldap": "0.5.1", - "@backstage/plugin-catalog-backend-module-msgraph": "0.4.0", - "@backstage/plugin-catalog-backend-module-openapi": "0.1.0", - "@backstage/plugin-catalog-common": "1.0.4", - "@backstage/plugin-catalog-graph": "0.2.19", - "@backstage/plugin-catalog-graphql": "0.3.11", - "@backstage/plugin-catalog-import": "0.8.10", - "@backstage/plugin-catalog-node": "1.0.0", - "@backstage/plugin-catalog-react": "1.1.2", - "@backstage/plugin-cicd-statistics": "0.1.9", - "@backstage/plugin-cicd-statistics-module-gitlab": "0.1.3", - "@backstage/plugin-circleci": "0.3.7", - "@backstage/plugin-cloudbuild": "0.3.7", - "@backstage/plugin-code-climate": "0.1.7", - "@backstage/plugin-code-coverage": "0.2.0", - "@backstage/plugin-code-coverage-backend": "0.2.0", - "@backstage/plugin-codescene": "0.1.2", - "@backstage/plugin-config-schema": "0.1.30", - "@backstage/plugin-cost-insights": "0.11.29", - "@backstage/plugin-cost-insights-common": "0.1.0", - "@backstage/plugin-dynatrace": "0.1.1", - "@internal/plugin-todo-list": "1.0.3", - "@internal/plugin-todo-list-backend": "1.0.3", + "@backstage/plugin-badges": "0.2.32", + "@backstage/plugin-badges-backend": "0.1.29", + "@backstage/plugin-bazaar": "0.1.23", + "@backstage/plugin-bazaar-backend": "0.1.19", + "@backstage/plugin-bitbucket-cloud-common": "0.1.2", + "@backstage/plugin-bitrise": "0.1.35", + "@backstage/plugin-catalog": "1.5.0", + "@backstage/plugin-catalog-backend": "1.3.1", + "@backstage/plugin-catalog-backend-module-aws": "0.1.8", + "@backstage/plugin-catalog-backend-module-azure": "0.1.6", + "@backstage/plugin-catalog-backend-module-bitbucket": "0.2.2", + "@backstage/plugin-catalog-backend-module-bitbucket-cloud": "0.1.2", + "@backstage/plugin-catalog-backend-module-bitbucket-server": "0.1.0", + "@backstage/plugin-catalog-backend-module-gerrit": "0.1.3", + "@backstage/plugin-catalog-backend-module-github": "0.1.6", + "@backstage/plugin-catalog-backend-module-gitlab": "0.1.6", + "@backstage/plugin-catalog-backend-module-ldap": "0.5.2", + "@backstage/plugin-catalog-backend-module-msgraph": "0.4.1", + "@backstage/plugin-catalog-backend-module-openapi": "0.1.1", + "@backstage/plugin-catalog-common": "1.0.5", + "@internal/plugin-catalog-customized": "0.0.1", + "@backstage/plugin-catalog-graph": "0.2.20", + "@backstage/plugin-catalog-graphql": "0.3.12", + "@backstage/plugin-catalog-import": "0.8.11", + "@backstage/plugin-catalog-node": "1.0.1", + "@backstage/plugin-catalog-react": "1.1.3", + "@backstage/plugin-cicd-statistics": "0.1.10", + "@backstage/plugin-cicd-statistics-module-gitlab": "0.1.4", + "@backstage/plugin-circleci": "0.3.8", + "@backstage/plugin-cloudbuild": "0.3.8", + "@backstage/plugin-code-climate": "0.1.8", + "@backstage/plugin-code-coverage": "0.2.1", + "@backstage/plugin-code-coverage-backend": "0.2.1", + "@backstage/plugin-codescene": "0.1.3", + "@backstage/plugin-config-schema": "0.1.31", + "@backstage/plugin-cost-insights": "0.11.30", + "@backstage/plugin-cost-insights-common": "0.1.1", + "@backstage/plugin-dynatrace": "0.1.2", + "@internal/plugin-todo-list": "1.0.4", + "@internal/plugin-todo-list-backend": "1.0.4", "@internal/plugin-todo-list-common": "1.0.3", - "@backstage/plugin-explore": "0.3.38", - "@backstage/plugin-explore-react": "0.0.19", - "@backstage/plugin-firehydrant": "0.1.24", - "@backstage/plugin-fossa": "0.2.39", - "@backstage/plugin-gcalendar": "0.3.3", - "@backstage/plugin-gcp-projects": "0.3.26", - "@backstage/plugin-git-release-manager": "0.3.20", - "@backstage/plugin-github-actions": "0.5.7", - "@backstage/plugin-github-deployments": "0.1.38", - "@backstage/plugin-github-pull-requests-board": "0.1.1", - "@backstage/plugin-gitops-profiles": "0.3.25", - "@backstage/plugin-gocd": "0.1.13", - "@backstage/plugin-graphiql": "0.2.39", - "@backstage/plugin-graphql-backend": "0.1.24", - "@backstage/plugin-home": "0.4.23", - "@backstage/plugin-ilert": "0.1.33", - "@backstage/plugin-jenkins": "0.7.6", - "@backstage/plugin-jenkins-backend": "0.1.24", - "@backstage/plugin-jenkins-common": "0.1.6", - "@backstage/plugin-kafka": "0.3.7", - "@backstage/plugin-kafka-backend": "0.2.27", - "@backstage/plugin-kubernetes": "0.7.0", - "@backstage/plugin-kubernetes-backend": "0.7.0", - "@backstage/plugin-kubernetes-common": "0.4.0", - "@backstage/plugin-lighthouse": "0.3.7", - "@backstage/plugin-newrelic": "0.3.25", - "@backstage/plugin-newrelic-dashboard": "0.2.0", - "@backstage/plugin-org": "0.5.7", - "@backstage/plugin-pagerduty": "0.5.0", - "@backstage/plugin-periskop": "0.1.5", - "@backstage/plugin-periskop-backend": "0.1.5", - "@backstage/plugin-permission-backend": "0.5.9", + "@backstage/plugin-explore": "0.3.39", + "@backstage/plugin-explore-react": "0.0.20", + "@backstage/plugin-firehydrant": "0.1.25", + "@backstage/plugin-fossa": "0.2.40", + "@backstage/plugin-gcalendar": "0.3.4", + "@backstage/plugin-gcp-projects": "0.3.27", + "@backstage/plugin-git-release-manager": "0.3.21", + "@backstage/plugin-github-actions": "0.5.8", + "@backstage/plugin-github-deployments": "0.1.39", + "@backstage/plugin-github-issues": "0.1.0", + "@backstage/plugin-github-pull-requests-board": "0.1.2", + "@backstage/plugin-gitops-profiles": "0.3.26", + "@backstage/plugin-gocd": "0.1.14", + "@backstage/plugin-graphiql": "0.2.40", + "@backstage/plugin-graphql-backend": "0.1.25", + "@backstage/plugin-home": "0.4.24", + "@backstage/plugin-ilert": "0.1.34", + "@backstage/plugin-jenkins": "0.7.7", + "@backstage/plugin-jenkins-backend": "0.1.25", + "@backstage/plugin-jenkins-common": "0.1.7", + "@backstage/plugin-kafka": "0.3.8", + "@backstage/plugin-kafka-backend": "0.2.28", + "@backstage/plugin-kubernetes": "0.7.1", + "@backstage/plugin-kubernetes-backend": "0.7.1", + "@backstage/plugin-kubernetes-common": "0.4.1", + "@backstage/plugin-lighthouse": "0.3.8", + "@backstage/plugin-newrelic": "0.3.26", + "@backstage/plugin-newrelic-dashboard": "0.2.1", + "@backstage/plugin-org": "0.5.8", + "@backstage/plugin-pagerduty": "0.5.1", + "@backstage/plugin-periskop": "0.1.6", + "@backstage/plugin-periskop-backend": "0.1.6", + "@backstage/plugin-permission-backend": "0.5.10", "@backstage/plugin-permission-common": "0.6.3", - "@backstage/plugin-permission-node": "0.6.3", - "@backstage/plugin-permission-react": "0.4.3", - "@backstage/plugin-proxy-backend": "0.2.28", - "@backstage/plugin-rollbar": "0.4.7", - "@backstage/plugin-rollbar-backend": "0.1.31", - "@backstage/plugin-scaffolder": "1.4.0", - "@backstage/plugin-scaffolder-backend": "1.4.0", - "@backstage/plugin-scaffolder-backend-module-cookiecutter": "0.2.9", - "@backstage/plugin-scaffolder-backend-module-rails": "0.4.2", - "@backstage/plugin-scaffolder-backend-module-yeoman": "0.2.7", + "@backstage/plugin-permission-node": "0.6.4", + "@backstage/plugin-permission-react": "0.4.4", + "@backstage/plugin-proxy-backend": "0.2.29", + "@backstage/plugin-rollbar": "0.4.8", + "@backstage/plugin-rollbar-backend": "0.1.32", + "@backstage/plugin-scaffolder": "1.5.0", + "@backstage/plugin-scaffolder-backend": "1.5.0", + "@backstage/plugin-scaffolder-backend-module-cookiecutter": "0.2.10", + "@backstage/plugin-scaffolder-backend-module-rails": "0.4.3", + "@backstage/plugin-scaffolder-backend-module-yeoman": "0.2.8", "@backstage/plugin-scaffolder-common": "1.1.2", - "@backstage/plugin-search": "1.0.0", - "@backstage/plugin-search-backend": "1.0.0", - "@backstage/plugin-search-backend-module-elasticsearch": "1.0.0", - "@backstage/plugin-search-backend-module-pg": "0.3.5", - "@backstage/plugin-search-backend-node": "1.0.0", + "@backstage/plugin-search": "1.0.1", + "@backstage/plugin-search-backend": "1.0.1", + "@backstage/plugin-search-backend-module-elasticsearch": "1.0.1", + "@backstage/plugin-search-backend-module-pg": "0.3.6", + "@backstage/plugin-search-backend-node": "1.0.1", "@backstage/plugin-search-common": "1.0.0", - "@backstage/plugin-search-react": "1.0.0", - "@backstage/plugin-sentry": "0.4.0", - "@backstage/plugin-shortcuts": "0.2.8", - "@backstage/plugin-sonarqube": "0.3.7", - "@backstage/plugin-splunk-on-call": "0.3.31", - "@backstage/plugin-stack-overflow": "0.1.3", - "@backstage/plugin-stack-overflow-backend": "0.1.3", - "@backstage/plugin-tech-insights": "0.2.3", - "@backstage/plugin-tech-insights-backend": "0.5.0", - "@backstage/plugin-tech-insights-backend-module-jsonfc": "0.1.18", - "@backstage/plugin-tech-insights-common": "0.2.5", - "@backstage/plugin-tech-insights-node": "0.3.2", - "@backstage/plugin-tech-radar": "0.5.14", - "@backstage/plugin-techdocs": "1.3.0", - "@backstage/plugin-techdocs-addons-test-utils": "1.0.2", - "@backstage/plugin-techdocs-backend": "1.2.0", - "@backstage/plugin-techdocs-module-addons-contrib": "1.0.2", - "@backstage/plugin-techdocs-node": "1.2.0", - "@backstage/plugin-techdocs-react": "1.0.2", - "@backstage/plugin-todo": "0.2.9", - "@backstage/plugin-todo-backend": "0.1.31", - "@backstage/plugin-user-settings": "0.4.6", - "@backstage/plugin-vault": "0.1.1", - "@backstage/plugin-vault-backend": "0.2.0", - "@backstage/plugin-xcmetrics": "0.2.27", - "@internal/plugin-catalog-customized": "0.0.0", - "@backstage/plugin-sonarqube-backend": "0.0.0", - "@backstage/plugin-catalog-backend-module-bitbucket-server": "0.0.0", - "@backstage/plugin-github-issues": "0.0.0" + "@backstage/plugin-search-react": "1.0.1", + "@backstage/plugin-sentry": "0.4.1", + "@backstage/plugin-shortcuts": "0.3.0", + "@backstage/plugin-sonarqube": "0.4.0", + "@backstage/plugin-sonarqube-backend": "0.1.0", + "@backstage/plugin-splunk-on-call": "0.3.32", + "@backstage/plugin-stack-overflow": "0.1.4", + "@backstage/plugin-stack-overflow-backend": "0.1.4", + "@backstage/plugin-tech-insights": "0.2.4", + "@backstage/plugin-tech-insights-backend": "0.5.1", + "@backstage/plugin-tech-insights-backend-module-jsonfc": "0.1.19", + "@backstage/plugin-tech-insights-common": "0.2.6", + "@backstage/plugin-tech-insights-node": "0.3.3", + "@backstage/plugin-tech-radar": "0.5.15", + "@backstage/plugin-techdocs": "1.3.1", + "@backstage/plugin-techdocs-addons-test-utils": "1.0.3", + "@backstage/plugin-techdocs-backend": "1.2.1", + "@backstage/plugin-techdocs-module-addons-contrib": "1.0.3", + "@backstage/plugin-techdocs-node": "1.3.0", + "@backstage/plugin-techdocs-react": "1.0.3", + "@backstage/plugin-todo": "0.2.10", + "@backstage/plugin-todo-backend": "0.1.32", + "@backstage/plugin-user-settings": "0.4.7", + "@backstage/plugin-vault": "0.1.2", + "@backstage/plugin-vault-backend": "0.2.1", + "@backstage/plugin-xcmetrics": "0.2.28" }, - "changesets": [ - "big-mirrors-play", - "calm-clocks-drum", - "cool-months-tickle", - "create-app-1658824524", - "create-app-1659429685", - "dull-owls-grab", - "dull-pumas-hope", - "dull-starfishes-chew", - "eighty-radios-look", - "empty-apple-pie", - "empty-apples-tie", - "famous-bikes-brush", - "fast-panthers-fold", - "few-berries-deny", - "flat-zebras-draw", - "forty-lobsters-guess", - "fresh-hounds-argue", - "friendly-sheep-flash", - "green-laws-greet", - "hot-crabs-wonder", - "itchy-mice-kiss", - "khaki-meals-hammer", - "little-laws-heal", - "long-pumpkins-walk", - "loud-panthers-arrive", - "lovely-walls-brush", - "mean-ants-hang", - "metal-points-itch", - "mighty-penguins-tap", - "modern-shrimps-wave", - "nine-mails-crash", - "odd-adults-smash", - "odd-tomatoes-juggle", - "olive-tips-camp", - "plenty-timers-flow", - "popular-starfishes-bow", - "pretty-gifts-do", - "purple-apricots-build", - "red-turtles-melt", - "renovate-15030f1", - "renovate-5b3cf8c", - "renovate-5b7b62b", - "renovate-5ba3a71", - "renovate-5f2abaa", - "rich-readers-return", - "rotten-moles-give", - "short-trains-roll", - "silver-carpets-grin", - "silver-poets-push", - "strange-crabs-confess", - "strange-moles-design", - "stupid-carpets-remain", - "tall-mugs-press", - "tasty-falcons-press", - "techdocs-eagles-stare", - "ten-roses-walk", - "thick-readers-invite", - "three-parents-love", - "tricky-ligers-move", - "twenty-humans-visit", - "violet-mayflies-mix", - "violet-trees-play", - "weak-shrimps-deny", - "wicked-knives-wink" - ] + "changesets": [] } diff --git a/.changeset/pretty-gifts-do.md b/.changeset/pretty-gifts-do.md deleted file mode 100644 index 8d939db6b6..0000000000 --- a/.changeset/pretty-gifts-do.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/integration': patch ---- - -Avoid double encoding of the file path in `getBitbucketDownloadUrl` diff --git a/.changeset/purple-apricots-build.md b/.changeset/purple-apricots-build.md deleted file mode 100644 index da473070c9..0000000000 --- a/.changeset/purple-apricots-build.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-common': patch ---- - -The config prop `ensureExists` now applies to schema creation when `pluginDivisionMode` is set to `schema`. This means schemas will no longer accidentally be automatically created when `ensureExists` is set to `false`. diff --git a/.changeset/red-turtles-melt.md b/.changeset/red-turtles-melt.md deleted file mode 100644 index 436e69116c..0000000000 --- a/.changeset/red-turtles-melt.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@backstage/integration': minor -'@backstage/plugin-techdocs-node': minor -'@backstage/plugin-techdocs-module-addons-contrib': patch ---- - -feat(techdocs): add edit button support for bitbucketServer diff --git a/.changeset/renovate-15030f1.md b/.changeset/renovate-15030f1.md deleted file mode 100644 index 5347a7f3e8..0000000000 --- a/.changeset/renovate-15030f1.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/cli': patch ---- - -Updated dependencies `@svgr/*` to `6.3.x`. diff --git a/.changeset/renovate-5b3cf8c.md b/.changeset/renovate-5b3cf8c.md deleted file mode 100644 index d0e32e8837..0000000000 --- a/.changeset/renovate-5b3cf8c.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-auth-backend': patch ---- - -Updated dependency `@google-cloud/firestore` to `^6.0.0`. diff --git a/.changeset/renovate-5b7b62b.md b/.changeset/renovate-5b7b62b.md deleted file mode 100644 index 4027ee6c7c..0000000000 --- a/.changeset/renovate-5b7b62b.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -'@backstage/backend-common': patch -'@backstage/backend-tasks': patch -'@backstage/integration': patch -'@backstage/plugin-cicd-statistics': patch -'@backstage/plugin-code-climate': patch -'@backstage/plugin-gocd': patch -'@backstage/plugin-kubernetes-backend': patch -'@backstage/plugin-periskop': patch -'@backstage/plugin-sentry': patch -'@backstage/plugin-splunk-on-call': patch -'@backstage/plugin-tech-insights-common': patch -'@backstage/plugin-tech-insights-node': patch -'@backstage/plugin-xcmetrics': patch ---- - -Updated dependency `@types/luxon` to `^3.0.0`. diff --git a/.changeset/renovate-5ba3a71.md b/.changeset/renovate-5ba3a71.md deleted file mode 100644 index ba1bdd3b73..0000000000 --- a/.changeset/renovate-5ba3a71.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-api-docs': patch ---- - -Updated dependency `@asyncapi/react-component` to `1.0.0-next.40`. diff --git a/.changeset/renovate-5f2abaa.md b/.changeset/renovate-5f2abaa.md deleted file mode 100644 index 8114448cb4..0000000000 --- a/.changeset/renovate-5f2abaa.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-github-issues': patch ---- - -Updated dependency `@spotify/prettier-config` to `^14.0.0`. diff --git a/.changeset/rich-readers-return.md b/.changeset/rich-readers-return.md deleted file mode 100644 index 3c8f3d7b5a..0000000000 --- a/.changeset/rich-readers-return.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-techdocs': patch ---- - -Scroll techdocs navigation into focus and expand any nested navigation items. diff --git a/.changeset/rotten-moles-give.md b/.changeset/rotten-moles-give.md deleted file mode 100644 index 0ca3d3eadc..0000000000 --- a/.changeset/rotten-moles-give.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@backstage/integration': patch ---- - -Fixed bug in getGitLabFileFetchUrl where a target whose path did not contain the -`/-/` scope would result in a fetch URL that did not support -private-token-based authentication. diff --git a/.changeset/rude-books-rush.md b/.changeset/rude-books-rush.md new file mode 100644 index 0000000000..a98e90e27e --- /dev/null +++ b/.changeset/rude-books-rush.md @@ -0,0 +1,9 @@ +--- +'@backstage/backend-tasks': patch +'@backstage/plugin-app-backend': patch +'@backstage/plugin-bazaar-backend': patch +'@backstage/plugin-code-coverage-backend': patch +'@backstage/plugin-tech-insights-backend': patch +--- + +Fixed a bug where the database option to skip migrations was ignored. diff --git a/.changeset/sharp-swans-suffer.md b/.changeset/sharp-swans-suffer.md new file mode 100644 index 0000000000..841d746634 --- /dev/null +++ b/.changeset/sharp-swans-suffer.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder': minor +--- + +Added support for `async` validation for the `next` version of the plugin diff --git a/.changeset/short-trains-roll.md b/.changeset/short-trains-roll.md deleted file mode 100644 index 709d534d57..0000000000 --- a/.changeset/short-trains-roll.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend': minor ---- - -User Bearer Authorization header at Git commands with token-based auth at Bitbucket Server. diff --git a/.changeset/silent-kings-live.md b/.changeset/silent-kings-live.md new file mode 100644 index 0000000000..7e55f5ae78 --- /dev/null +++ b/.changeset/silent-kings-live.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-backend': patch +--- + +Removed the depreacated `publish:file` action, use the template editor to test templates instead. diff --git a/.changeset/silver-carpets-grin.md b/.changeset/silver-carpets-grin.md deleted file mode 100644 index 9865393631..0000000000 --- a/.changeset/silver-carpets-grin.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-github-issues': minor ---- - -New plugin for displaying GitHub Issues added diff --git a/.changeset/silver-poets-push.md b/.changeset/silver-poets-push.md deleted file mode 100644 index 2e64915a80..0000000000 --- a/.changeset/silver-poets-push.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-github-pull-requests-board': patch ---- - -Fixed rendering when PR contains references to deleted Github accounts diff --git a/.changeset/strange-crabs-confess.md b/.changeset/strange-crabs-confess.md deleted file mode 100644 index 48456b870a..0000000000 --- a/.changeset/strange-crabs-confess.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend': patch ---- - -Add missing `res.end()` in scaffolder backend `EventStream` usage diff --git a/.changeset/strange-moles-design.md b/.changeset/strange-moles-design.md deleted file mode 100644 index 8515d02e9b..0000000000 --- a/.changeset/strange-moles-design.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@backstage/plugin-catalog-backend': patch ---- - -Fix issue for conditional decisions based on properties stored as arrays, like tags. - -Before this change, having a permission policy returning conditional decisions based on metadata like tags, such like `createCatalogConditionalDecision(permission, catalogConditions.hasMetadata('tags', 'java'),)`, was producing wrong results. The issue occurred when authorizing entities already loaded from the database, for example when authorizing `catalogEntityDeletePermission`. diff --git a/.changeset/stupid-carpets-remain.md b/.changeset/stupid-carpets-remain.md deleted file mode 100644 index c0b4a54bfd..0000000000 --- a/.changeset/stupid-carpets-remain.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-bitbucket-server': minor ---- - -Add new plugin catalog-backend-module-bitbucket-server which adds the `BitbucketServerEntityProvider`. - -The entity provider is meant as a replacement for the `BitbucketDiscoveryProcessor` to be used with Bitbucket Server (Bitbucket Cloud already has a replacement). - -**Before:** - -```typescript -// packages/backend/src/plugins/catalog.ts -builder.addProcessor( - BitbucketDiscoveryProcessor.fromConfig(env.config, { logger: env.logger }), -); -``` - -```yaml -# app-config.yaml -catalog: - locations: - - type: bitbucket-discovery - target: 'https://bitbucket.mycompany.com/projects/*/repos/*/catalog-info.yaml -``` - -**After:** - -```typescript -// packages/backend/src/plugins/catalog.ts -builder.addEntityProvider( - BitbucketServerEntityProvider.fromConfig(env.config, { - logger: env.logger, - schedule: env.scheduler.createScheduledTaskRunner({ - frequency: { minutes: 30 }, - timeout: { minutes: 3 }, - }), - }), -); -``` - -```yaml -# app-config.yaml -catalog: - providers: - bitbucketServer: - yourProviderId: # identifies your ingested dataset - catalogPath: /catalog-info.yaml # default value - filters: # optional - projectKey: '.*' # optional; RegExp - repoSlug: '.*' # optional; RegExp -``` diff --git a/.changeset/tall-mugs-press.md b/.changeset/tall-mugs-press.md deleted file mode 100644 index 2a0053e95d..0000000000 --- a/.changeset/tall-mugs-press.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-github': patch ---- - -Improved support for wildcards in `catalogPath` diff --git a/.changeset/tasty-falcons-press.md b/.changeset/tasty-falcons-press.md deleted file mode 100644 index 288f527e17..0000000000 --- a/.changeset/tasty-falcons-press.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/core-components': minor ---- - -Made the `to` prop of `Button` and `Link` more strict, only supporting plain strings. It used to be the case that this prop was unexpectedly too liberal, making it look like we supported the complex `react-router-dom` object form of the parameter as well, which led to unexpected results at runtime. diff --git a/.changeset/techdocs-eagles-stare.md b/.changeset/techdocs-eagles-stare.md deleted file mode 100644 index cf8bda4024..0000000000 --- a/.changeset/techdocs-eagles-stare.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-techdocs-node': patch ---- - -Bump default `TechDocs` image to `v1.1.0`, see the release [here](https://github.com/backstage/techdocs-container/releases/tag/v1.1.0). diff --git a/.changeset/ten-roses-walk.md b/.changeset/ten-roses-walk.md deleted file mode 100644 index 87b711db2a..0000000000 --- a/.changeset/ten-roses-walk.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-sonarqube': patch ---- - -Add ability to provide an optional Sonarqube instance into the annotation in the `catalog-info.yaml` file diff --git a/.changeset/thick-readers-invite.md b/.changeset/thick-readers-invite.md deleted file mode 100644 index 689ae7eb0c..0000000000 --- a/.changeset/thick-readers-invite.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend': minor ---- - -Updated `publish:gitlab:merge-request` action to allow commit updates and deletes diff --git a/.changeset/three-parents-love.md b/.changeset/three-parents-love.md deleted file mode 100644 index 33f13cc218..0000000000 --- a/.changeset/three-parents-love.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend': patch ---- - -Use the non-deprecated form of table.unique in knex diff --git a/.changeset/tough-dolphins-smile.md b/.changeset/tough-dolphins-smile.md new file mode 100644 index 0000000000..bb4f0a39a8 --- /dev/null +++ b/.changeset/tough-dolphins-smile.md @@ -0,0 +1,19 @@ +--- +'@backstage/catalog-client': patch +'@backstage/core-plugin-api': patch +'@backstage/plugin-api-docs': patch +'@backstage/plugin-apollo-explorer': patch +'@backstage/plugin-azure-devops-backend': patch +'@backstage/plugin-badges': patch +'@backstage/plugin-badges-backend': patch +'@backstage/plugin-catalog-react': patch +'@backstage/plugin-circleci': patch +'@backstage/plugin-cloudbuild': patch +'@backstage/plugin-kubernetes': patch +'@backstage/plugin-scaffolder-backend': patch +'@backstage/plugin-search-backend-module-elasticsearch': patch +'@backstage/plugin-sonarqube-backend': patch +'@backstage/plugin-techdocs': patch +--- + +Minor API signatures cleanup diff --git a/.changeset/tricky-ligers-move.md b/.changeset/tricky-ligers-move.md deleted file mode 100644 index 21aa7757ba..0000000000 --- a/.changeset/tricky-ligers-move.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend': minor ---- - -Added `reviewers` and `teamReviewers` parameters to `publish:github:pull-request` action to add reviewers on the pull request created by the action diff --git a/.changeset/twenty-humans-visit.md b/.changeset/twenty-humans-visit.md deleted file mode 100644 index e543d30145..0000000000 --- a/.changeset/twenty-humans-visit.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/plugin-techdocs-react': patch ---- - -Add `toLowerEntityRefMaybe()` helper function for handling `techdocs.legacyUseCaseSensitiveTripletPaths` flag. -Pass modified `entityRef` to `TechDocsReaderPageContext` to handle the `techdocs.legacyUseCaseSensitiveTripletPaths` flag. diff --git a/.changeset/violet-mayflies-mix.md b/.changeset/violet-mayflies-mix.md deleted file mode 100644 index a4d078ac35..0000000000 --- a/.changeset/violet-mayflies-mix.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-msgraph': patch ---- - -Adjust references in deprecation warnings to point to stable URL/document. diff --git a/.changeset/violet-trees-play.md b/.changeset/violet-trees-play.md deleted file mode 100644 index 00f1e156a8..0000000000 --- a/.changeset/violet-trees-play.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -'@backstage/plugin-shortcuts': minor ---- - -Internal observable replaced with a mapping from the storage API. This fixes shortcuts initialization when using firestore. - -`ShortcutApi.get` method, that returns an immediate snapshot of shortcuts, made public. - -Example of how to get and observe `shortcuts`: - -```typescript -const shortcutApi = useApi(shortcutsApiRef); -const shortcuts = useObservable(shortcutApi.shortcut$(), shortcutApi.get()); -``` diff --git a/.changeset/weak-shrimps-deny.md b/.changeset/weak-shrimps-deny.md deleted file mode 100644 index 38b5ca1a8a..0000000000 --- a/.changeset/weak-shrimps-deny.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@techdocs/cli': minor ---- - -Added CLI option `--docker-option` to allow passing additional options to the `docker run` command executed my `serve` and `serve:mkdocs`. diff --git a/.changeset/wicked-knives-wink.md b/.changeset/wicked-knives-wink.md deleted file mode 100644 index e0f3e485c0..0000000000 --- a/.changeset/wicked-knives-wink.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -'@backstage/create-app': patch ---- - -Add `PATCH` and `HEAD` to the `Access-Control-Allow-Methods`. - -To apply this change to your Backstage installation make the following change to your `app-config.yaml` - -```diff - cors: - origin: http://localhost:3000 -- methods: [GET, POST, PUT, DELETE] -+ methods: [GET, POST, PUT, DELETE, PATCH, HEAD] -``` diff --git a/.changeset/wild-sheep-roll.md b/.changeset/wild-sheep-roll.md new file mode 100644 index 0000000000..1551100b2a --- /dev/null +++ b/.changeset/wild-sheep-roll.md @@ -0,0 +1,8 @@ +--- +'@backstage/core-components': patch +'@backstage/plugin-adr': patch +'@backstage/plugin-apache-airflow': patch +'@backstage/plugin-api-docs': patch +--- + +Minor cleanup of the public API surface to reduce the number of warnings diff --git a/.changeset/witty-cats-wink.md b/.changeset/witty-cats-wink.md new file mode 100644 index 0000000000..82f6d3098f --- /dev/null +++ b/.changeset/witty-cats-wink.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-msgraph': patch +--- + +Fix typo diff --git a/ADOPTERS.md b/ADOPTERS.md index 278422693d..902952a90e 100644 --- a/ADOPTERS.md +++ b/ADOPTERS.md @@ -28,7 +28,6 @@ _You can do this by using the [Adopter form](https://form.typeform.com/to/zcOaKi | [Lunar](https://lunar.app) | [Jacob Valdemar](https://github.com/JacobValdemar) | Internal developer portal for service overview and insights, API documentation, technical guides, onboarding guides and RFC's. | | [Trendyol](https://trendyol.com) | [Gamze Senturk](https://github.com/gmzsenturk), [Mert Can Bilgic](https://github.com/mertcb) | The Developer Portal has been called `Pandora`. Provides an overview of Trendyol tech ecosystem. TechDocs, Catalog, Custom Plugins and Theme. | | [Peloton](https://www.onepeloton.com/) | [Matt Waldron](https://github.com/daftgopher) | Creating our first developer portal and tech-docs. Exploring Service Catalog, Tech Insights and Cost Insights as well. | -| [TELUS](https://telus.com) | [Seb Barre](https://github.com/sbarre) | The Go-to place to find answers about development and delivery at TELUS. | | [Brex](https://www.brex.com/) | [Vamsi Chitters](https://github.com/vamsikc) | A centralized UI to understand how a service fits in the whole Brex architecture and manage a team’s engineering dependencies. | | [Oriflame](https://www.oriflame.com/) | [Oriflame](https://github.com/oriflame) | Internal developer portal for services, single page apps and packages overview, API documentation, technical guides, tech-radar and more. | | [Booz Allen Hamilton](https://www.boozallen.com/) | [Jason Miller](https://github.com/JasonMiller-BAH) | Developer portal for a full-stack software development ecosystem that accelerates consistent and repeatable Modern Software Development practices for internal innovation and investments. | @@ -201,10 +200,11 @@ _You can do this by using the [Adopter form](https://form.typeform.com/to/zcOaKi | [Intility](https://intility.no/en/) | [@daniwk](https://github.com/daniwk) | We are creating a developer portal powered by Backstage, with software catalog, documentation, templates and integrations to our infrastructure and internal tools. | | [ImmobiliareLabs](https://labs.immobiliare.it/) | [@JellyBellyDev](https://github.com/JellyBellyDev) | Centralized portal with our internal services, infrastructures, relationships between systems, technical documentation, templates, monitoring and custom integrations with our own DX tools. | | [Skillz](https://skillz.com/) | [Peiman Jafari](https://github.com/peimanja) | Internal developers portal for technical documentations, components ownership and relationship, software templates and integrations with internal tools | -| [Telus](https://www.telus.com/en/) | [Leo Li](mailto:leo.li@telus.com), [Laurent Robichaud](mailto:laurent.robichaud@telus.com) | Simplifying the developer experience through centralized team member portals. Our current focus includes the adoption of Tech Docs, Software Catalog, Software Templates, the plethora of plugins, and contributing features back to Backstage. 🤖 | +| [Telus](https://www.telus.com/en/) | [Leo Li](mailto:leo.li@telus.com), [Laurent Robichaud](mailto:laurent.robichaud@telus.com), [Seb Barre](https://github.com/sbarre) | Simplifying the developer experience through centralized team member portals. Our current focus includes the adoption of Tech Docs, Software Catalog, Software Templates, the plethora of plugins, and contributing features back to Backstage. 🤖 | | [Fidelity Investments](https://fidelity.com) | [Ankita Upadhyay](mailto:ankita.upadhyay@fmr.com) | Getting started with the adoption for Monorepo projects | | [Verisk](https://verisk.com) | [Callen Barton](mailto:cbarton@verisk.com) | Developer portal to quickly create and deploy microservices. | | [iodigital](https://iodigital.com) | [Jan-Willem Mulder](mailto:jan-willem.mulder@iodigital.com) | Internal developer portal for discovery of applications, projects and teams. Using several plugins like the Software Catalog and Tech Insights for promoting best practices and supporting our SDLC toolchain | | [Fanatics](https://www.fanaticsinc.com/) | [Rory Scott](mailto:rscott@fanatics.com) | Internal Portal consolidating documentation, making it easier to manage applications, internal developer community platform, and self-service cloud infrastructure + pipelines. | | [Appfolio](https://appfolio.com) | [Andy Vaughn](mailto:andy.vaughn@appfolio.com) | Internal software catalog, tech radar, documentation portal to disambiguate software and domain ownership, foster exploration of available developer platform services and tools, improve communication, democratize documentation and knowledge sharing, and coordinate the software lifecycle; all in service of a best-in-class developer experience. | -| [isaac](https://isaac.com.br/) | [Leonardo Borges](mailto:leonardo.borges@isaac.com.br), [Ordilei Souza](mailto:ordilei.souza@isaac.com.br) | We're using Backstage as our Internal Developer Portal and main microservices catalog for mapping ownership, health and metrics for each one. +| [isaac](https://isaac.com.br/) | [Leonardo Borges](mailto:leonardo.borges@isaac.com.br), [Ordilei Souza](mailto:ordilei.souza@isaac.com.br) | We're using Backstage as our Internal Developer Portal and main microservices catalog for mapping ownership, health and metrics for each one. | +| [Paraná Banco](https://site.paranabanco.com.br/) | [Joao Antunes](mailto:joaopma@pbtech.net.br) | Internal software catalog, documentation and ownership, improve communication, democratize documentation and knowledge sharing, and coordinate the software lifecycle; all in service of a best-in-class developer experience. | \ No newline at end of file diff --git a/README.md b/README.md index a6e740a427..5dba1fdf52 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,5 @@ ![headline](docs/assets/headline.png) -> 🏖 From July 7th due to Summer Vacations for some of the maintainers, expect the project to move a little slower than normal, and support to be limited. Normal service will resume on August 8th 🏝 - # [Backstage](https://backstage.io) [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) diff --git a/SECURITY.md b/SECURITY.md index 49e26349b0..5866fff2b4 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -2,9 +2,7 @@ ## Supported Versions -| Version | Supported | -| ------- | ------------------ | -| 0.x | :white_check_mark: | +See our [Release & Versioning Policy](https://backstage.io/docs/overview/versioning-policy#release-versioning-policy). ## Reporting a Vulnerability diff --git a/contrib/docker/cookiecutter-with-jinja2-extensions/Dockerfile b/contrib/docker/cookiecutter-with-jinja2-extensions/Dockerfile deleted file mode 100644 index e41d324730..0000000000 --- a/contrib/docker/cookiecutter-with-jinja2-extensions/Dockerfile +++ /dev/null @@ -1,11 +0,0 @@ -FROM alpine:3.16 - -RUN apk add --update \ - git \ - python \ - python-dev \ - py-pip \ - g++ && \ - pip install cookiecutter jinja2_custom_filters_extension && \ - apk del g++ py-pip python-dev && \ - rm -rf /var/cache/apk/* diff --git a/contrib/docker/cookiecutter-with-jinja2-extensions/README.md b/contrib/docker/cookiecutter-with-jinja2-extensions/README.md index 470694513a..0b754fa4ce 100644 --- a/contrib/docker/cookiecutter-with-jinja2-extensions/README.md +++ b/contrib/docker/cookiecutter-with-jinja2-extensions/README.md @@ -51,7 +51,7 @@ steps: imageName: 'foo/custom-built-cookiecutter-image-with-extensions' ``` -See for example, the [`Dockerfile`](./Dockerfile) in this directory. +For example, you can `pip install jinja2_custom_filters_extension` as part of your cookiecutter Dockerfile. ### Instructing Cookiecutter to use the extension diff --git a/contrib/docker/kubernetes-example-backend/Dockerfile b/contrib/docker/kubernetes-example-backend/Dockerfile deleted file mode 100644 index 4f4105838d..0000000000 --- a/contrib/docker/kubernetes-example-backend/Dockerfile +++ /dev/null @@ -1,33 +0,0 @@ -FROM node:14-buster - -WORKDIR /usr/src/app - -# (workaround) Install cookiecutter and mkdocs to avoid the need to run docker in docker -RUN cd /tmp && curl -O https://www.python.org/ftp/python/3.8.2/Python-3.8.2.tar.xz && \ - tar -xvf Python-3.8.2.tar.xz && \ - cd Python-3.8.2 && \ - ./configure --enable-optimizations && \ - make -j 4 && \ - make altinstall - -RUN apt update -RUN apt install -y mkdocs - -RUN pip3.8 install mkdocs-techdocs-core - -RUN pip3.8 install cookiecutter && \ - apt remove -y build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libsqlite3-dev libreadline-dev libffi-dev libbz2-dev g++ python-pip python-dev && \ - rm -rf /var/cache/apt/* /tmp/Python-3.8.2 - -# Copy repo skeleton first, to avoid unnecessary docker cache invalidation. -# The skeleton contains the package.json of each package in the monorepo, -# and along with yarn.lock and the root package.json, that's enough to run yarn install. -ADD yarn.lock package.json skeleton.tar ./ - -RUN yarn install --frozen-lockfile --production - -# This will copy the contents of the dist-workspace when running the build-image command. -# Do not use this Dockerfile outside of that command, as it will copy in the source code instead. -COPY . . - -CMD ["node", "packages/backend", "--config", "app-config.yaml", "--config", "app-config.development.yaml"] diff --git a/contrib/docker/kubernetes-example-backend/README.md b/contrib/docker/kubernetes-example-backend/README.md deleted file mode 100644 index d0f9d57022..0000000000 --- a/contrib/docker/kubernetes-example-backend/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Example backend Dockerfile - -This Dockerfile will build the example backend with certain additional binaries needed to workaround -the docker requirement in the scaffolder and techdocs. - -# Usage - -```bash -yarn docker-build -f --tag -``` - -> The absolute path is necessary as this directory is not copied to the build workspace when building -> the docker image. diff --git a/contrib/kubernetes/basic_kubernetes_example_with_helm/README.md b/contrib/kubernetes/basic_kubernetes_example_with_helm/README.md index 2dc875f671..c18329f59e 100644 --- a/contrib/kubernetes/basic_kubernetes_example_with_helm/README.md +++ b/contrib/kubernetes/basic_kubernetes_example_with_helm/README.md @@ -1 +1,3 @@ # Basic Kubernetes example with Helm + +Note that these examples aim to show a minimal setup and do not include best practices for secure Kubernetes deployments. See the [Kubernetes documentation](https://kubernetes.io/docs/concepts/security/) for more information, or resources provided by your own organization. diff --git a/cypress/yarn.lock b/cypress/yarn.lock index 96e350871b..2f1e0f0775 100644 --- a/cypress/yarn.lock +++ b/cypress/yarn.lock @@ -40,14 +40,14 @@ lodash.once "^4.1.1" "@types/node@*": - version "18.6.3" - resolved "https://registry.npmjs.org/@types/node/-/node-18.6.3.tgz#4e4a95b6fe44014563ceb514b2598b3e623d1c98" - integrity sha512-6qKpDtoaYLM+5+AFChLhHermMQxc3TOEFIDzrZLPRGHPrLEwqFkkT5Kx3ju05g6X7uDPazz3jHbKPX0KzCjntg== + version "18.7.6" + resolved "https://registry.npmjs.org/@types/node/-/node-18.7.6.tgz#31743bc5772b6ac223845e18c3fc26f042713c83" + integrity sha512-EdxgKRXgYsNITy5mjjXjVE/CS8YENSdhiagGrLqjG0pvA2owgJ6i4l7wy/PFZGC0B1/H20lWKN7ONVDNYDZm7A== "@types/node@^14.14.31": - version "14.18.23" - resolved "https://registry.npmjs.org/@types/node/-/node-14.18.23.tgz#70f5f20b0b1b38f696848c1d3647bb95694e615e" - integrity sha512-MhbCWN18R4GhO8ewQWAFK4TGQdBpXWByukz7cWyJmXhvRuCIaM/oWytGPqVmDzgEnnaIc9ss6HbU5mUi+vyZPA== + version "14.18.24" + resolved "https://registry.npmjs.org/@types/node/-/node-14.18.24.tgz#406b220dc748947e1959d8a38a75979e87166704" + integrity sha512-aJdn8XErcSrfr7k8ZDDfU6/2OgjZcB2Fu9d+ESK8D7Oa5mtsv8Fa8GpcwTA0v60kuZBaalKPzuzun4Ov1YWO/w== "@types/sinonjs__fake-timers@8.1.1": version "8.1.1" @@ -304,9 +304,9 @@ cross-spawn@^7.0.0: which "^2.0.1" cypress@^10.0.0: - version "10.4.0" - resolved "https://registry.npmjs.org/cypress/-/cypress-10.4.0.tgz#bb5b3b6588ad49eff172fecf5778cc0da2980e4e" - integrity sha512-OM7F8MRE01SHQRVVzunid1ZK1m90XTxYnl+7uZfIrB4CYqUDCrZEeSyCXzIbsS6qcaijVCAhqDL60SxG8N6hew== + version "10.6.0" + resolved "https://registry.npmjs.org/cypress/-/cypress-10.6.0.tgz#13f46867febf2c3715874ed5dce9c2e946b175fe" + integrity sha512-6sOpHjostp8gcLO34p6r/Ci342lBs8S5z9/eb3ZCQ22w2cIhMWGUoGKkosabPBfKcvRS9BE4UxybBtlIs8gTQA== dependencies: "@cypress/request" "^2.88.10" "@cypress/xvfb" "^1.2.4" @@ -359,9 +359,9 @@ dashdash@^1.12.0: assert-plus "^1.0.0" dayjs@^1.10.4: - version "1.11.4" - resolved "https://registry.npmjs.org/dayjs/-/dayjs-1.11.4.tgz#3b3c10ca378140d8917e06ebc13a4922af4f433e" - integrity sha512-Zj/lPM5hOvQ1Bf7uAvewDaUcsJoI6JmNqmHhHl3nyumwe0XHwt8sWdOVAPACJzCebL8gQCi+K49w7iKWnGwX9g== + version "1.11.5" + resolved "https://registry.npmjs.org/dayjs/-/dayjs-1.11.5.tgz#00e8cc627f231f9499c19b38af49f56dc0ac5e93" + integrity sha512-CAdX5Q3YW3Gclyo5Vpqkgpj8fSdLQcRuzfX6mC6Phy0nfJ0eGYOeS7m4mt2plDWLAtA4TqTakvbboHvUxfe4iA== debug@^3.1.0: version "3.2.7" diff --git a/docs/assets/getting-started/add-icons-links-example.png b/docs/assets/getting-started/add-icons-links-example.png new file mode 100644 index 0000000000..dfff84b79c Binary files /dev/null and b/docs/assets/getting-started/add-icons-links-example.png differ diff --git a/docs/deployment/docker.md b/docs/deployment/docker.md index 6471ada7f2..d46aff1b06 100644 --- a/docs/deployment/docker.md +++ b/docs/deployment/docker.md @@ -58,24 +58,30 @@ Once the host build is complete, we are ready to build our image. The following ```Dockerfile FROM node:16-bullseye-slim -WORKDIR /app - -# install sqlite3 dependencies, you can skip this if you don't use sqlite3 in the image +# Install sqlite3 dependencies. You can skip this if you don't use sqlite3 in the image, +# in which case you should also move better-sqlite3 to "devDependencies" in package.json. RUN apt-get update && \ apt-get install -y --no-install-recommends libsqlite3-dev python3 build-essential && \ rm -rf /var/lib/apt/lists/* && \ yarn config set python /usr/bin/python3 +# From here on we use the least-privileged `node` user to run the backend. +USER node +WORKDIR /app + +# This switches many Node.js dependencies to production mode. +ENV NODE_ENV production + # Copy repo skeleton first, to avoid unnecessary docker cache invalidation. # The skeleton contains the package.json of each package in the monorepo, # and along with yarn.lock and the root package.json, that's enough to run yarn install. -COPY yarn.lock package.json packages/backend/dist/skeleton.tar.gz ./ +COPY --chown=node:node yarn.lock package.json packages/backend/dist/skeleton.tar.gz ./ RUN tar xzf skeleton.tar.gz && rm skeleton.tar.gz RUN yarn install --frozen-lockfile --production --network-timeout 300000 && rm -rf "$(yarn cache dir)" # Then copy the rest of the backend bundle, along with any other files we might want. -COPY packages/backend/dist/bundle.tar.gz app-config.yaml ./ +COPY --chown=node:node packages/backend/dist/bundle.tar.gz app-config*.yaml ./ RUN tar xzf bundle.tar.gz && rm bundle.tar.gz CMD ["node", "packages/backend", "--config", "app-config.yaml"] @@ -176,26 +182,32 @@ RUN yarn --cwd packages/backend build # Stage 3 - Build the actual backend image and install production dependencies FROM node:16-bullseye-slim -WORKDIR /app - -# install sqlite3 dependencies, you can skip this if you don't use sqlite3 in the image +# Install sqlite3 dependencies. You can skip this if you don't use sqlite3 in the image, +# in which case you should also move better-sqlite3 to "devDependencies" in package.json. RUN apt-get update && \ apt-get install -y --no-install-recommends libsqlite3-dev python3 build-essential && \ rm -rf /var/lib/apt/lists/* && \ yarn config set python /usr/bin/python3 +# From here on we use the least-privileged `node` user to run the backend. +USER node +WORKDIR /app + +# This switches many Node.js dependencies to production mode. +ENV NODE_ENV production + # Copy the install dependencies from the build stage and context -COPY --from=build /app/yarn.lock /app/package.json /app/packages/backend/dist/skeleton.tar.gz ./ +COPY --from=build --chown=node:node /app/yarn.lock /app/package.json /app/packages/backend/dist/skeleton.tar.gz ./ RUN tar xzf skeleton.tar.gz && rm skeleton.tar.gz RUN yarn install --frozen-lockfile --production --network-timeout 600000 && rm -rf "$(yarn cache dir)" # Copy the built packages from the build stage -COPY --from=build /app/packages/backend/dist/bundle.tar.gz . +COPY --from=build --chown=node:node /app/packages/backend/dist/bundle.tar.gz . RUN tar xzf bundle.tar.gz && rm bundle.tar.gz # Copy any other files that we need at runtime -COPY app-config.yaml ./ +COPY --chown=node:node app-config.yaml ./ CMD ["node", "packages/backend", "--config", "app-config.yaml"] ``` diff --git a/docs/getting-started/app-custom-theme.md b/docs/getting-started/app-custom-theme.md index da4f10a64b..25131f1c91 100644 --- a/docs/getting-started/app-custom-theme.md +++ b/docs/getting-started/app-custom-theme.md @@ -273,6 +273,126 @@ const LogoFull = () => { }; ``` +## Icons + +So far you've seen how to create your own theme and add your own logo, in the following sections you'll be shown how to override the existing icons and how to add more icons + +### Custom Icons + +You can also customize the Project's _default_ icons. + +You can change the following [icons](https://github.com/backstage/backstage/blob/master/packages/app-defaults/src/defaults/icons.tsx). + +#### Requirements + +- Files in `.svg` format +- React components created for the icons + +#### Create React Component + +In your front-end application, locate the `src` folder. We suggest creating the `assets/icons` directory and `CustomIcons.tsx` file. + +> Another example [here](https://github.com/backstage/backstage/blob/master/plugins/azure-devops/src/components/AzurePipelinesIcon/AzurePipelinesIcon.tsx), if you want to ensure proper behavior in light and dark themes. + +```tsx +// customIcons.tsx +import { SvgIcon, SvgIconProps } from '@material-ui/core'; + +import React from 'react'; + +export const ExampleIcon = (props: SvgIconProps) => ( + + + +); +``` + +#### Using the custom icon + +Supply your custom icon in `packages/app/src/App.tsx` + +```diff + ++ import { ExampleIcon } from './assets/customIcons' + +[...] + +const app = createApp({ + apis, + components: { + [...] + }, + themes: [ + [...] + ], ++ icons: { ++ github: ExampleIcon, ++ }, + bindRoutes({ bind }) { + [...] + } +}) + +[...] +``` + +### Adding Icons + +You can add more icons, if the [default icons](https://github.com/backstage/backstage/blob/master/packages/app-defaults/src/defaults/icons.tsx) do not fit your needs, so that they can be used in other places like for Links in your entities. For this example we'll be using icons from[Material UI](https://v4.mui.com/components/material-icons/) and specifically the `AlarmIcon`. Here's how to do that: + +1. First you will want to open your `App.tsx` in `/packages/app/src` +2. Then you want to import your icon, add this to the rest of your imports: `import AlarmIcon from '@material-ui/icons/Alarm';` +3. Next you want to add the icon like this to your `createApp`: + + ```diff + const app = createApp({ + apis: ..., + plugins: ..., + + icons: { + + alert: AlarmIcon, + + }, + themes: ..., + components: ..., + }); + ``` + +4. Now we can reference `alert` for our icon in our entity links like this: + + ```yaml + apiVersion: backstage.io/v1alpha1 + kind: Component + metadata: + name: artist-lookup + description: Artist Lookup + links: + - url: https://example.com/alert + title: Alerts + icon: alert + ``` + + And this is the result: + + ![Example Link with Alert icon](../assets/getting-started/add-icons-links-example.png) + + Another way you can use these icons is from the `AppContext` like this: + + ```ts + import { useApp } from '@backstage/core-plugin-api'; + + const app = useApp(); + const alertIcon = app.getSystemIcon('alert'); + ``` + + You might want to use this method if you have an icon you want to use in several locations. + +Note: If the icon is not available as one of the default icons or one you've added then it will fall back to Material UI's `LanguageIcon` + ## Custom Homepage In addition to a custom theme, a custom logo, you can also customize the diff --git a/docs/local-dev/cli-build-system.md b/docs/local-dev/cli-build-system.md index 9245cea7ff..cc364d0ca5 100644 --- a/docs/local-dev/cli-build-system.md +++ b/docs/local-dev/cli-build-system.md @@ -38,7 +38,7 @@ In addition, there are a number of hard and soft requirements: - Scale - It should scale to hundreds of large packages without excessive wait times - Reloads - The development flow should support quick on-save hot reloads -- Simple - Usage should simple and configuration should be kept minimal +- Simple - Usage should be simple and configuration should be kept minimal - Universal - Development towards both web applications, isomorphic packages, and Node.js - Modern - The build system targets modern environments @@ -95,7 +95,7 @@ These are the available roles that are currently supported by the Backstage buil | Role | Description | Example | | ---------------------- | -------------------------------------------- | -------------------------------------------- | -| frontend | Bundled frontend application | `package/app` | +| frontend | Bundled frontend application | `packages/app` | | backend | Bundled backend application | `packages/backend` | | cli | Package used as a command-line interface | `@backstage/cli`, `@backstage/codemods` | | web-library | Web library for use by other packages | `@backstage/plugin-catalog-react` | diff --git a/docs/plugins/customization.md b/docs/plugins/customization.md index 0477ba18a7..44ca5147ea 100644 --- a/docs/plugins/customization.md +++ b/docs/plugins/customization.md @@ -1,6 +1,6 @@ --- id: customization -title: Customization +title: Customization (Experimental) description: Documentation on adding a customization logic to the plugin --- diff --git a/docs/releases/v1.5.0-changelog.md b/docs/releases/v1.5.0-changelog.md new file mode 100644 index 0000000000..6e4d251ef7 --- /dev/null +++ b/docs/releases/v1.5.0-changelog.md @@ -0,0 +1,1725 @@ +# Release v1.5.0 + +## @backstage/backend-app-api@0.2.0 + +### Minor Changes + +- 5df230d48c: Introduced a new `backend-defaults` package carrying `createBackend` which was previously exported from `backend-app-api`. + The `backend-app-api` package now exports the `createSpecializedBacked` that does not add any service factories by default. + +### Patch Changes + +- 0599732ec0: Refactored experimental backend system with new type names. +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/backend-plugin-api@0.1.1 + - @backstage/backend-tasks@0.3.4 + - @backstage/plugin-permission-node@0.6.4 + +## @backstage/backend-common@0.15.0 + +### Minor Changes + +- 12e9b54f0e: Added back support for when no branch is provided to the `UrlReader` for Bitbucket Server +- 30012e7d8c: - Added `force` and `remoteRef` option to `push` method in `git` actions + - Added `addRemote` and `deleteRemote` methods to `git` actions + +### Patch Changes + +- fc8a5f797b: Improve `scm/git` wrapper around `isomorphic-git` library : + + - Add `checkout` function, + - Add optional `remoteRef` parameter in the `push` function. + +- 5e4dc173f7: Added a second validation to the `dir()` method of ZIP archive responses returned from `readTree()` that ensures that extracted files do not fall outside the target directory. + +- 1732a18a7a: Exported `redactLogLine` function to be able to use it in custom loggers and renamed it to `redactWinstonLogLine`. + +- 3b7930b3e5: Add support for Bearer Authorization header / token-based auth at Git commands. + +- cfa078e255: The `ZipArchiveResponse` now correctly handles corrupt ZIP archives. + + Before this change, certain corrupt ZIP archives either cause the inflater to throw (as expected), or will hang the parser indefinitely. + + By switching out the `zip` parsing library, we now write to a temporary directory, and load from disk which should ensure that the parsing of the `.zip` files are done correctly because `streaming` of `zip` paths is technically impossible without being able to parse the headers at the end of the file. + +- 770d3f92c4: The config prop `ensureExists` now applies to schema creation when `pluginDivisionMode` is set to `schema`. This means schemas will no longer accidentally be automatically created when `ensureExists` is set to `false`. + +- 29f782eb37: Updated dependency `@types/luxon` to `^3.0.0`. + +- Updated dependencies + - @backstage/integration@1.3.0 + +## @backstage/backend-defaults@0.1.0 + +### Minor Changes + +- 5df230d48c: Introduced a new `backend-defaults` package carrying `createBackend` which was previously exported from `backend-app-api`. + The `backend-app-api` package now exports the `createSpecializedBacked` that does not add any service factories by default. + +### Patch Changes + +- Updated dependencies + - @backstage/backend-app-api@0.2.0 + - @backstage/backend-plugin-api@0.1.1 + +## @backstage/core-components@0.11.0 + +### Minor Changes + +- d0eefc499a: Made the `to` prop of `Button` and `Link` more strict, only supporting plain strings. It used to be the case that this prop was unexpectedly too liberal, making it look like we supported the complex `react-router-dom` object form of the parameter as well, which led to unexpected results at runtime. + +### Patch Changes + +- a22af3edc8: Adding a `className` prop to the `MarkdownContent` component +- Updated dependencies + - @backstage/core-plugin-api@1.0.5 + +## @backstage/integration@1.3.0 + +### Minor Changes + +- 593dea6710: Add support for Basic Auth for Bitbucket Server. +- ad35364e97: feat(techdocs): add edit button support for bitbucketServer + +### Patch Changes + +- 163243a4d1: Handle incorrect return type from Octokit paginate plugin to resolve reading URLs from GitHub +- c4b460a47d: Avoid double encoding of the file path in `getBitbucketDownloadUrl` +- 29f782eb37: Updated dependency `@types/luxon` to `^3.0.0`. +- 1f27d83933: Fixed bug in getGitLabFileFetchUrl where a target whose path did not contain the + `/-/` scope would result in a fetch URL that did not support + private-token-based authentication. + +## @techdocs/cli@1.2.0 + +### Minor Changes + +- 855952db53: Added CLI option `--docker-option` to allow passing additional options to the `docker run` command executed my `serve` and `serve:mkdocs`. + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/plugin-techdocs-node@1.3.0 + +## @backstage/plugin-adr@0.2.0 + +### Minor Changes + +- bfc7c50a09: Display associated entity as a chip in `AdrSearchResultListItem` + + BREAKING: `AdrDocument` now includes a `entityRef` property, if you have a custom `AdrParser` you will have to supply this property in your returned documents + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-adr-common@0.2.0 + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + - @backstage/integration-react@1.1.3 + - @backstage/plugin-search-react@1.0.1 + +## @backstage/plugin-adr-backend@0.2.0 + +### Minor Changes + +- bfc7c50a09: Display associated entity as a chip in `AdrSearchResultListItem` + + BREAKING: `AdrDocument` now includes a `entityRef` property, if you have a custom `AdrParser` you will have to supply this property in your returned documents + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/plugin-adr-common@0.2.0 + - @backstage/integration@1.3.0 + +## @backstage/plugin-adr-common@0.2.0 + +### Minor Changes + +- bfc7c50a09: Display associated entity as a chip in `AdrSearchResultListItem` + + BREAKING: `AdrDocument` now includes a `entityRef` property, if you have a custom `AdrParser` you will have to supply this property in your returned documents + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.3.0 + +## @backstage/plugin-catalog@1.5.0 + +### Minor Changes + +- 80da5162c7: Plugin catalog has been modified to use an experimental feature where you can customize the title of the create button. + + You can modify it by doing: + + ```typescript jsx + import { catalogPlugin } from '@backstage/plugin-catalog'; + + catalogPlugin.__experimentalReconfigure({ + createButtonTitle: 'New', + }); + ``` + +- fe94398418: Allow changing the subtitle of the `CatalogTable` component + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + - @backstage/plugin-catalog-common@1.0.5 + - @backstage/integration-react@1.1.3 + - @backstage/plugin-search-react@1.0.1 + +## @backstage/plugin-catalog-backend-module-bitbucket-server@0.1.0 + +### Minor Changes + +- f7607f9d85: Add new plugin catalog-backend-module-bitbucket-server which adds the `BitbucketServerEntityProvider`. + + The entity provider is meant as a replacement for the `BitbucketDiscoveryProcessor` to be used with Bitbucket Server (Bitbucket Cloud already has a replacement). + + **Before:** + + ```typescript + // packages/backend/src/plugins/catalog.ts + builder.addProcessor( + BitbucketDiscoveryProcessor.fromConfig(env.config, { logger: env.logger }), + ); + ``` + + ```yaml + # app-config.yaml + catalog: + locations: + - type: bitbucket-discovery + target: 'https://bitbucket.mycompany.com/projects/*/repos/*/catalog-info.yaml + ``` + + **After:** + + ```typescript + // packages/backend/src/plugins/catalog.ts + builder.addEntityProvider( + BitbucketServerEntityProvider.fromConfig(env.config, { + logger: env.logger, + schedule: env.scheduler.createScheduledTaskRunner({ + frequency: { minutes: 30 }, + timeout: { minutes: 3 }, + }), + }), + ); + ``` + + ```yaml + # app-config.yaml + catalog: + providers: + bitbucketServer: + yourProviderId: # identifies your ingested dataset + catalogPath: /catalog-info.yaml # default value + filters: # optional + projectKey: '.*' # optional; RegExp + repoSlug: '.*' # optional; RegExp + ``` + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/integration@1.3.0 + - @backstage/backend-tasks@0.3.4 + - @backstage/plugin-catalog-backend@1.3.1 + +## @backstage/plugin-github-issues@0.1.0 + +### Minor Changes + +- ffd5e47fb5: New plugin for displaying GitHub Issues added + +### Patch Changes + +- 347ea327c2: Moved communication with GitHub graphql API to the dedicated plugin API. + Fixes issue when no GitHub Issues are rendered when partial failure is returned from GitHub API. +- b522f49403: Updated dependency `@spotify/prettier-config` to `^14.0.0`. +- Updated dependencies + - @backstage/integration@1.3.0 + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + +## @backstage/plugin-scaffolder@1.5.0 + +### Minor Changes + +- c4b452e16a: Starting the implementation of the Wizard page for the `next` scaffolder plugin + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.3.0 + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + - @backstage/plugin-catalog-common@1.0.5 + - @backstage/integration-react@1.1.3 + - @backstage/plugin-permission-react@0.4.4 + +## @backstage/plugin-scaffolder-backend@1.5.0 + +### Minor Changes + +- c4b452e16a: Starting the implementation of the Wizard page for the `next` scaffolder plugin +- 593dea6710: Add support for Basic Auth for Bitbucket Server. +- 3b7930b3e5: Add support for Bearer Authorization header / token-based auth at Git commands. +- 3f1316f1c5: User Bearer Authorization header at Git commands with token-based auth at Bitbucket Server. +- eeff5046ae: Updated `publish:gitlab:merge-request` action to allow commit updates and deletes +- 692d5d3405: Added `reviewers` and `teamReviewers` parameters to `publish:github:pull-request` action to add reviewers on the pull request created by the action + +### Patch Changes + +- fc8a5f797b: Add a `publish:gerrit:review` scaffolder action +- c971afbf21: The `publish:file` action has been deprecated in favor of testing templates using the template editor instead. Note that this action is not and was never been installed by default. +- b10b6c4aa4: Fix issue on Windows where templated files where not properly skipped as intended. +- 56e1b4b89c: Fixed typos in alpha types. +- dad0f65494: Fail gracefully if an invalid `Authorization` header is passed to `POST /v2/tasks` +- 014b3b7776: Add missing `res.end()` in scaffolder backend `EventStream` usage +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/backend-plugin-api@0.1.1 + - @backstage/plugin-catalog-node@1.0.1 + - @backstage/integration@1.3.0 + - @backstage/plugin-catalog-backend@1.3.1 + +## @backstage/plugin-shortcuts@0.3.0 + +### Minor Changes + +- 5b769fddb5: Internal observable replaced with a mapping from the storage API. This fixes shortcuts initialization when using firestore. + + `ShortcutApi.get` method, that returns an immediate snapshot of shortcuts, made public. + + Example of how to get and observe `shortcuts`: + + ```typescript + const shortcutApi = useApi(shortcutsApiRef); + const shortcuts = useObservable(shortcutApi.shortcut$(), shortcutApi.get()); + ``` + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + +## @backstage/plugin-sonarqube@0.4.0 + +### Minor Changes + +- 619b515172: **BREAKING** This plugin now call the `sonarqube-backend` plugin instead of relying on the proxy plugin + + The whole proxy's `'/sonarqube':` key can be removed from your configuration files. + + Then head to the [README in sonarqube-backend plugin page](https://github.com/backstage/backstage/tree/master/plugins/sonarqube-backend/README.md) to learn how to set-up the link to your Sonarqube instances. + +### Patch Changes + +- f9c310a439: Add ability to provide an optional Sonarqube instance into the annotation in the `catalog-info.yaml` file +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + +## @backstage/plugin-sonarqube-backend@0.1.0 + +### Minor Changes + +- e2be9ab3a4: Initial creation of the plugin + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + +## @backstage/plugin-techdocs-node@1.3.0 + +### Minor Changes + +- ad35364e97: feat(techdocs): add edit button support for bitbucketServer + +### Patch Changes + +- c8196bd37d: Fix AWS S3 404 NotFound error + + When reading an object from the S3 bucket through a stream, the aws-sdk getObject() API may throw a 404 NotFound Error with no error message or, in fact, any sort of HTTP-layer error responses. These fail the @backstage/error's assertError() checks, so they must be wrapped. The test for this case was also updated to match the wrapped error message. + +- f833344611: Bump default `TechDocs` image to `v1.1.0`, see the release [here](https://github.com/backstage/techdocs-container/releases/tag/v1.1.0). + +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/integration@1.3.0 + +## @backstage/app-defaults@1.0.5 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/core-app-api@1.0.5 + - @backstage/plugin-permission-react@0.4.4 + +## @backstage/backend-plugin-api@0.1.1 + +### Patch Changes + +- 0599732ec0: Refactored experimental backend system with new type names. +- 34c2f5aca1: The factory returned by `createBackendPlugin` and `createBackendModule` no longer require a parameter to be passed if the options are optional. +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/backend-tasks@0.3.4 + +## @backstage/backend-tasks@0.3.4 + +### Patch Changes + +- 29f782eb37: Updated dependency `@types/luxon` to `^3.0.0`. +- Updated dependencies + - @backstage/backend-common@0.15.0 + +## @backstage/backend-test-utils@0.1.27 + +### Patch Changes + +- 0599732ec0: Refactored experimental backend system with new type names. +- 56e1b4b89c: Added alpha test helpers for the new experimental backend system. +- Updated dependencies + - @backstage/cli@0.18.1 + - @backstage/backend-common@0.15.0 + - @backstage/backend-app-api@0.2.0 + - @backstage/backend-plugin-api@0.1.1 + +## @backstage/cli@0.18.1 + +### Patch Changes + +- d45bbfeb69: Linting is now ignored for any `.eslintrc.*` files, not just `.eslintrc.js`. +- 72c228fdb8: Fixed a bug where `NODE_ENV` was not set in the environment when starting the backend in development mode. It has always been the case that Webpack transformed `NODE_ENV` when running in development mode, but this did not affect dependencies in `node_modules` as they are treated as external. +- a539564c0d: Added Backstage version to output of `yarn backstage-cli info` command +- fd68d6f138: Added resolution of `.json` and `.wasm` files to the Webpack configuration in order to match defaults. +- 94155a41e0: Updated dependencies `@svgr/*` to `6.3.x`. + +## @backstage/core-app-api@1.0.5 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.0.5 + +## @backstage/core-plugin-api@1.0.5 + +### Patch Changes + +- 80da5162c7: Introduced a new experimental feature that allows you to declare plugin-wide options for your plugin by defining + `__experimentalConfigure` in your `createPlugin` options. See for more information. + + This is an experimental feature and it will have breaking changes in the future. + +- 87649a06bf: Add a note that the `fetchApi` utility should not be used on sign-in page implementations and similar. + +## @backstage/create-app@0.4.30 + +### Patch Changes + +- 73cee58fc2: Bumped create-app version. + +- f762386d48: Bumped create-app version. + +- b162bbf464: Bumped create-app version. + +- db76fc6255: The `better-sqlite3` dependency has been moved back to production `"dependencies"` in `packages/backend/package.json`, with instructions in the Dockerfile to move it to `"devDependencies"` if desired. There is no need to apply this change to existing apps, unless you want your production image to have SQLite available as a database option. + +- ab9edd8b58: Updated backend to write stack trace when the backend fails to start up. + + To apply this change to your Backstage installation, make the following change to `packages/backend/src/index.ts` + + ```diff + cors: + origin: http://localhost:3000 + - console.error(`Backend failed to start up, ${error}`); + + console.error('Backend failed to start up', error); + ``` + +- 0174a0a022: Add `PATCH` and `HEAD` to the `Access-Control-Allow-Methods`. + + To apply this change to your Backstage installation make the following change to your `app-config.yaml` + + ```diff + cors: + origin: http://localhost:3000 + - methods: [GET, POST, PUT, DELETE] + + methods: [GET, POST, PUT, DELETE, PATCH, HEAD] + ``` + +## @backstage/dev-utils@1.0.5 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + - @backstage/app-defaults@1.0.5 + - @backstage/core-app-api@1.0.5 + - @backstage/integration-react@1.1.3 + - @backstage/test-utils@1.1.3 + +## @backstage/integration-react@1.1.3 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.3.0 + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + +## @backstage/test-utils@1.1.3 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.0.5 + - @backstage/core-app-api@1.0.5 + - @backstage/plugin-permission-react@0.4.4 + +## @backstage/plugin-airbrake@0.3.8 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + - @backstage/dev-utils@1.0.5 + - @backstage/test-utils@1.1.3 + +## @backstage/plugin-airbrake-backend@0.2.8 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + +## @backstage/plugin-allure@0.1.24 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + +## @backstage/plugin-analytics-module-ga@0.1.19 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + +## @backstage/plugin-apache-airflow@0.2.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + +## @backstage/plugin-api-docs@0.8.8 + +### Patch Changes + +- dae12c71cf: Updated dependency `@asyncapi/react-component` to `1.0.0-next.40`. +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog@1.5.0 + - @backstage/plugin-catalog-react@1.1.3 + +## @backstage/plugin-apollo-explorer@0.1.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + +## @backstage/plugin-app-backend@0.3.35 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + +## @backstage/plugin-auth-backend@0.15.1 + +### Patch Changes + +- c676a9e07b: Fixed a bug in auth plugin on the backend where it ignores the skip migration database options when using the database provider. +- 2d7d6028e1: Updated dependency `@google-cloud/firestore` to `^6.0.0`. +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/plugin-auth-node@0.2.4 + +## @backstage/plugin-auth-node@0.2.4 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + +## @backstage/plugin-azure-devops@0.1.24 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + +## @backstage/plugin-azure-devops-backend@0.3.14 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + +## @backstage/plugin-badges@0.2.32 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + +## @backstage/plugin-badges-backend@0.1.29 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + +## @backstage/plugin-bazaar@0.1.23 + +### Patch Changes + +- Updated dependencies + - @backstage/cli@0.18.1 + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog@1.5.0 + - @backstage/plugin-catalog-react@1.1.3 + +## @backstage/plugin-bazaar-backend@0.1.19 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/backend-test-utils@0.1.27 + +## @backstage/plugin-bitbucket-cloud-common@0.1.2 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.3.0 + +## @backstage/plugin-bitrise@0.1.35 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + +## @backstage/plugin-catalog-backend@1.3.1 + +### Patch Changes + +- 56e1b4b89c: Fixed typos in alpha types. + +- e3d3018531: Fix issue for conditional decisions based on properties stored as arrays, like tags. + + Before this change, having a permission policy returning conditional decisions based on metadata like tags, such like `createCatalogConditionalDecision(permission, catalogConditions.hasMetadata('tags', 'java'),)`, was producing wrong results. The issue occurred when authorizing entities already loaded from the database, for example when authorizing `catalogEntityDeletePermission`. + +- 059ae348b4: Use the non-deprecated form of table.unique in knex + +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/backend-plugin-api@0.1.1 + - @backstage/plugin-catalog-node@1.0.1 + - @backstage/integration@1.3.0 + - @backstage/plugin-catalog-common@1.0.5 + - @backstage/plugin-permission-node@0.6.4 + +## @backstage/plugin-catalog-backend-module-aws@0.1.8 + +### Patch Changes + +- 17d45dbf10: Deprecate `AwsS3DiscoveryProcessor` in favor of `AwsS3EntityProvider` (since v0.1.4). + + You can find a migration guide at + [the release notes for v0.1.4](https://github.com/backstage/backstage/blob/master/plugins/catalog-backend-module-aws/CHANGELOG.md#014). + +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/integration@1.3.0 + - @backstage/backend-tasks@0.3.4 + - @backstage/plugin-catalog-backend@1.3.1 + +## @backstage/plugin-catalog-backend-module-azure@0.1.6 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/integration@1.3.0 + - @backstage/backend-tasks@0.3.4 + - @backstage/plugin-catalog-backend@1.3.1 + +## @backstage/plugin-catalog-backend-module-bitbucket@0.2.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/integration@1.3.0 + - @backstage/plugin-catalog-backend@1.3.1 + - @backstage/plugin-bitbucket-cloud-common@0.1.2 + +## @backstage/plugin-catalog-backend-module-bitbucket-cloud@0.1.2 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.3.0 + - @backstage/backend-tasks@0.3.4 + - @backstage/plugin-catalog-backend@1.3.1 + - @backstage/plugin-bitbucket-cloud-common@0.1.2 + +## @backstage/plugin-catalog-backend-module-gerrit@0.1.3 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/integration@1.3.0 + - @backstage/backend-tasks@0.3.4 + - @backstage/plugin-catalog-backend@1.3.1 + +## @backstage/plugin-catalog-backend-module-github@0.1.6 + +### Patch Changes + +- f48950e34b: Github Entity Provider functionality for adding entities to the catalog. + + This provider replaces the GithubDiscoveryProcessor functionality as providers offer more flexibility with scheduling ingestion, removing and preventing orphaned entities. + + More information can be found on the [GitHub Discovery](https://backstage.io/docs/integrations/github/discovery) page. + +- c59d1ce487: Fixed bug where repository filter was including all archived repositories + +- 97f0a37378: Improved support for wildcards in `catalogPath` + +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/integration@1.3.0 + - @backstage/backend-tasks@0.3.4 + - @backstage/plugin-catalog-backend@1.3.1 + +## @backstage/plugin-catalog-backend-module-gitlab@0.1.6 + +### Patch Changes + +- 24979413a4: Enhancing GitLab provider with filtering projects by pattern RegExp + + ```yaml + providers: + gitlab: + stg: + host: gitlab.stg.company.io + branch: main + projectPattern: 'john/' # new option + entityFilename: template.yaml + ``` + + With the aforementioned parameter you can filter projects, and keep only who belongs to the namespace "john". + +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/integration@1.3.0 + - @backstage/backend-tasks@0.3.4 + - @backstage/plugin-catalog-backend@1.3.1 + +## @backstage/plugin-catalog-backend-module-ldap@0.5.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.3.4 + - @backstage/plugin-catalog-backend@1.3.1 + +## @backstage/plugin-catalog-backend-module-msgraph@0.4.1 + +### Patch Changes + +- b1995df9f3: Adjust references in deprecation warnings to point to stable URL/document. +- Updated dependencies + - @backstage/backend-tasks@0.3.4 + - @backstage/plugin-catalog-backend@1.3.1 + +## @backstage/plugin-catalog-backend-module-openapi@0.1.1 + +### Patch Changes + +- b50e8e533b: Add an `$openapi` placeholder resolver that supports more use cases for resolving `$ref` instances. This means that the quite recently added `OpenApiRefProcessor` has been deprecated in favor of the `openApiPlaceholderResolver`. + + An example of how to use it can be seen below. + + ```yaml + apiVersion: backstage.io/v1alpha1 + kind: API + metadata: + name: example + description: Example API + spec: + type: openapi + lifecycle: production + owner: team + definition: + $openapi: ./spec/openapi.yaml # by using $openapi Backstage will now resolve all $ref instances + ``` + +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/plugin-catalog-node@1.0.1 + - @backstage/integration@1.3.0 + - @backstage/plugin-catalog-backend@1.3.1 + +## @backstage/plugin-catalog-common@1.0.5 + +### Patch Changes + +- 92103db537: Export aggregated list of all catalog permissions + +## @backstage/plugin-catalog-graph@0.2.20 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + +## @backstage/plugin-catalog-graphql@0.3.12 + +### Patch Changes + +- fa3eeee92d: Updated dependency `@graphql-tools/schema` to `^9.0.0`. + +## @backstage/plugin-catalog-import@0.8.11 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.3.0 + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + - @backstage/integration-react@1.1.3 + +## @backstage/plugin-catalog-node@1.0.1 + +### Patch Changes + +- 0599732ec0: Refactored experimental backend system with new type names. +- 56e1b4b89c: Fixed typos in alpha types. +- Updated dependencies + - @backstage/backend-plugin-api@0.1.1 + +## @backstage/plugin-catalog-react@1.1.3 + +### Patch Changes + +- 44e691a7f9: Modify description column to not use auto width. +- Updated dependencies + - @backstage/integration@1.3.0 + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-common@1.0.5 + - @backstage/plugin-permission-react@0.4.4 + +## @backstage/plugin-cicd-statistics@0.1.10 + +### Patch Changes + +- 29f782eb37: Updated dependency `@types/luxon` to `^3.0.0`. +- Updated dependencies + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + +## @backstage/plugin-cicd-statistics-module-gitlab@0.1.4 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-cicd-statistics@0.1.10 + +## @backstage/plugin-circleci@0.3.8 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + +## @backstage/plugin-cloudbuild@0.3.8 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + +## @backstage/plugin-code-climate@0.1.8 + +### Patch Changes + +- 29f782eb37: Updated dependency `@types/luxon` to `^3.0.0`. +- 831a8fee86: Send Authorization headers in fetch requests using FetchApi in Code Climate plugin to fix unauthorized requests to Backstage backends with authentication enabled. +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + +## @backstage/plugin-code-coverage@0.2.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + +## @backstage/plugin-code-coverage-backend@0.2.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/integration@1.3.0 + +## @backstage/plugin-codescene@0.1.3 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + +## @backstage/plugin-config-schema@0.1.31 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + +## @backstage/plugin-cost-insights@0.11.30 + +### Patch Changes + +- b746eca638: Make `products` field optional in the config +- daf4b33e34: Add name property to Group +- 08562ebe11: Display minus sign in trends in `CostOverviewCard` +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-cost-insights-common@0.1.1 + +## @backstage/plugin-cost-insights-common@0.1.1 + +### Patch Changes + +- daf4b33e34: Add name property to Group + +## @backstage/plugin-dynatrace@0.1.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + +## @backstage/plugin-explore@0.3.39 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + - @backstage/plugin-explore-react@0.0.20 + +## @backstage/plugin-explore-react@0.0.20 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.0.5 + +## @backstage/plugin-firehydrant@0.1.25 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + +## @backstage/plugin-fossa@0.2.40 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + +## @backstage/plugin-gcalendar@0.3.4 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + +## @backstage/plugin-gcp-projects@0.3.27 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + +## @backstage/plugin-git-release-manager@0.3.21 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.3.0 + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + +## @backstage/plugin-github-actions@0.5.8 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.3.0 + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + +## @backstage/plugin-github-deployments@0.1.39 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.3.0 + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + - @backstage/integration-react@1.1.3 + +## @backstage/plugin-github-pull-requests-board@0.1.2 + +### Patch Changes + +- 73268a67ff: Fixed rendering when PR contains references to deleted Github accounts +- Updated dependencies + - @backstage/integration@1.3.0 + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + +## @backstage/plugin-gitops-profiles@0.3.26 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + +## @backstage/plugin-gocd@0.1.14 + +### Patch Changes + +- 29f782eb37: Updated dependency `@types/luxon` to `^3.0.0`. +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + +## @backstage/plugin-graphiql@0.2.40 + +### Patch Changes + +- 3a8ab72248: Minor internal tweak to lazy loading in order to improve module compatibility. +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + +## @backstage/plugin-graphql-backend@0.1.25 + +### Patch Changes + +- fa3eeee92d: Updated dependency `@graphql-tools/schema` to `^9.0.0`. +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/plugin-catalog-graphql@0.3.12 + +## @backstage/plugin-home@0.4.24 + +### Patch Changes + +- df7b9158b8: Add wrap-around for the listing of tools to prevent increasing width with name length. +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + - @backstage/plugin-stack-overflow@0.1.4 + +## @backstage/plugin-ilert@0.1.34 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + +## @backstage/plugin-jenkins@0.7.7 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + - @backstage/plugin-jenkins-common@0.1.7 + +## @backstage/plugin-jenkins-backend@0.1.25 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/plugin-auth-node@0.2.4 + - @backstage/plugin-jenkins-common@0.1.7 + +## @backstage/plugin-jenkins-common@0.1.7 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-common@1.0.5 + +## @backstage/plugin-kafka@0.3.8 + +### Patch Changes + +- bde245f0bf: Add dashboard URL feature and fix minor styling issues. +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + +## @backstage/plugin-kafka-backend@0.2.28 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + +## @backstage/plugin-kubernetes@0.7.1 + +### Patch Changes + +- 860ed68343: Fixed bug in CronJobsAccordions component that causes an error when cronjobs use a kubernetes alias, such as `@hourly` or `@daily` instead of standard cron syntax. +- f563b86a5b: Adds namespace column to Kubernetes error reporting table +- Updated dependencies + - @backstage/plugin-kubernetes-common@0.4.1 + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + +## @backstage/plugin-kubernetes-backend@0.7.1 + +### Patch Changes + +- 0297da83c0: Added `DaemonSets` to the default kubernetes resources. +- 0cd87cf30d: Added a new `customResources` field to the ClusterDetails interface, in order to specify (override) custom resources per cluster +- 29f782eb37: Updated dependency `@types/luxon` to `^3.0.0`. +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/plugin-kubernetes-common@0.4.1 + - @backstage/plugin-auth-node@0.2.4 + +## @backstage/plugin-kubernetes-common@0.4.1 + +### Patch Changes + +- 0297da83c0: Added `DaemonSets` to the default kubernetes resources. + +## @backstage/plugin-lighthouse@0.3.8 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + +## @backstage/plugin-newrelic@0.3.26 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + +## @backstage/plugin-newrelic-dashboard@0.2.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + +## @backstage/plugin-org@0.5.8 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + +## @backstage/plugin-pagerduty@0.5.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + +## @backstage/plugin-periskop@0.1.6 + +### Patch Changes + +- 29f782eb37: Updated dependency `@types/luxon` to `^3.0.0`. +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + +## @backstage/plugin-periskop-backend@0.1.6 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + +## @backstage/plugin-permission-backend@0.5.10 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/plugin-auth-node@0.2.4 + - @backstage/plugin-permission-node@0.6.4 + +## @backstage/plugin-permission-node@0.6.4 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/plugin-auth-node@0.2.4 + +## @backstage/plugin-permission-react@0.4.4 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.0.5 + +## @backstage/plugin-proxy-backend@0.2.29 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + +## @backstage/plugin-rollbar@0.4.8 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + +## @backstage/plugin-rollbar-backend@0.1.32 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + +## @backstage/plugin-scaffolder-backend-module-cookiecutter@0.2.10 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/integration@1.3.0 + - @backstage/plugin-scaffolder-backend@1.5.0 + +## @backstage/plugin-scaffolder-backend-module-rails@0.4.3 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/integration@1.3.0 + - @backstage/plugin-scaffolder-backend@1.5.0 + +## @backstage/plugin-scaffolder-backend-module-yeoman@0.2.8 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.5.0 + +## @backstage/plugin-search@1.0.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + - @backstage/plugin-search-react@1.0.1 + +## @backstage/plugin-search-backend@1.0.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/plugin-auth-node@0.2.4 + - @backstage/plugin-permission-node@0.6.4 + - @backstage/plugin-search-backend-node@1.0.1 + +## @backstage/plugin-search-backend-module-elasticsearch@1.0.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-search-backend-node@1.0.1 + +## @backstage/plugin-search-backend-module-pg@0.3.6 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/plugin-search-backend-node@1.0.1 + +## @backstage/plugin-search-backend-node@1.0.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/backend-tasks@0.3.4 + +## @backstage/plugin-search-react@1.0.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + +## @backstage/plugin-sentry@0.4.1 + +### Patch Changes + +- 29f782eb37: Updated dependency `@types/luxon` to `^3.0.0`. +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + +## @backstage/plugin-splunk-on-call@0.3.32 + +### Patch Changes + +- 29f782eb37: Updated dependency `@types/luxon` to `^3.0.0`. +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + +## @backstage/plugin-stack-overflow@0.1.4 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-home@0.4.24 + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + +## @backstage/plugin-stack-overflow-backend@0.1.4 + +### Patch Changes + +- ea5631a8b2: Added API key as separate configuration + +## @backstage/plugin-tech-insights@0.2.4 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + - @backstage/plugin-tech-insights-common@0.2.6 + +## @backstage/plugin-tech-insights-backend@0.5.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/backend-tasks@0.3.4 + - @backstage/plugin-tech-insights-common@0.2.6 + - @backstage/plugin-tech-insights-node@0.3.3 + +## @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.19 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/plugin-tech-insights-common@0.2.6 + - @backstage/plugin-tech-insights-node@0.3.3 + +## @backstage/plugin-tech-insights-common@0.2.6 + +### Patch Changes + +- 29f782eb37: Updated dependency `@types/luxon` to `^3.0.0`. + +## @backstage/plugin-tech-insights-node@0.3.3 + +### Patch Changes + +- 29f782eb37: Updated dependency `@types/luxon` to `^3.0.0`. +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/plugin-tech-insights-common@0.2.6 + +## @backstage/plugin-tech-radar@0.5.15 + +### Patch Changes + +- a641f79dcb: Move CSS overflow property to quadrant block element (i.e. to a div element) in RadarLegend component. +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + +## @backstage/plugin-techdocs@1.3.1 + +### Patch Changes + +- e924d2d013: Added back reduction in size, this fixes the extremely large TeachDocs headings +- b86ed4d990: Add highlight to active navigation item and navigation parents. +- 7a98c73dc8: Fixed techdocs sidebar layout bug for medium devices. +- 8acb22205c: Scroll techdocs navigation into focus and expand any nested navigation items. +- Updated dependencies + - @backstage/integration@1.3.0 + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + - @backstage/plugin-techdocs-react@1.0.3 + - @backstage/integration-react@1.1.3 + - @backstage/plugin-search-react@1.0.1 + +## @backstage/plugin-techdocs-addons-test-utils@1.0.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-techdocs@1.3.1 + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog@1.5.0 + - @backstage/plugin-techdocs-react@1.0.3 + - @backstage/core-app-api@1.0.5 + - @backstage/integration-react@1.1.3 + - @backstage/test-utils@1.1.3 + - @backstage/plugin-search-react@1.0.1 + +## @backstage/plugin-techdocs-backend@1.2.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/integration@1.3.0 + - @backstage/plugin-techdocs-node@1.3.0 + - @backstage/plugin-catalog-common@1.0.5 + +## @backstage/plugin-techdocs-module-addons-contrib@1.0.3 + +### Patch Changes + +- ad35364e97: feat(techdocs): add edit button support for bitbucketServer +- Updated dependencies + - @backstage/integration@1.3.0 + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-techdocs-react@1.0.3 + - @backstage/integration-react@1.1.3 + +## @backstage/plugin-techdocs-react@1.0.3 + +### Patch Changes + +- 29d6cf0147: Add `toLowerEntityRefMaybe()` helper function for handling `techdocs.legacyUseCaseSensitiveTripletPaths` flag. + Pass modified `entityRef` to `TechDocsReaderPageContext` to handle the `techdocs.legacyUseCaseSensitiveTripletPaths` flag. +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + +## @backstage/plugin-todo@0.2.10 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + +## @backstage/plugin-todo-backend@0.1.32 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/integration@1.3.0 + +## @backstage/plugin-user-settings@0.4.7 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + +## @backstage/plugin-vault@0.1.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + +## @backstage/plugin-vault-backend@0.2.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/backend-test-utils@0.1.27 + - @backstage/backend-tasks@0.3.4 + +## @backstage/plugin-xcmetrics@0.2.28 + +### Patch Changes + +- 29f782eb37: Updated dependency `@types/luxon` to `^3.0.0`. +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + +## example-app@0.2.74 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-kubernetes@0.7.1 + - @backstage/cli@0.18.1 + - @backstage/plugin-techdocs@1.3.1 + - @backstage/plugin-home@0.4.24 + - @backstage/core-components@0.11.0 + - @backstage/plugin-scaffolder@1.5.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + - @backstage/plugin-cost-insights@0.11.30 + - @backstage/plugin-graphiql@0.2.40 + - @backstage/plugin-catalog-common@1.0.5 + - @backstage/plugin-kafka@0.3.8 + - @backstage/plugin-techdocs-module-addons-contrib@1.0.3 + - @backstage/plugin-gocd@0.1.14 + - @backstage/plugin-sentry@0.4.1 + - @backstage/plugin-api-docs@0.8.8 + - @backstage/plugin-techdocs-react@1.0.3 + - @backstage/plugin-shortcuts@0.3.0 + - @backstage/plugin-tech-radar@0.5.15 + - @backstage/app-defaults@1.0.5 + - @backstage/core-app-api@1.0.5 + - @backstage/integration-react@1.1.3 + - @backstage/plugin-airbrake@0.3.8 + - @backstage/plugin-apache-airflow@0.2.1 + - @backstage/plugin-azure-devops@0.1.24 + - @backstage/plugin-badges@0.2.32 + - @internal/plugin-catalog-customized@0.0.1 + - @backstage/plugin-catalog-graph@0.2.20 + - @backstage/plugin-catalog-import@0.8.11 + - @backstage/plugin-circleci@0.3.8 + - @backstage/plugin-cloudbuild@0.3.8 + - @backstage/plugin-code-coverage@0.2.1 + - @backstage/plugin-dynatrace@0.1.2 + - @backstage/plugin-explore@0.3.39 + - @backstage/plugin-gcalendar@0.3.4 + - @backstage/plugin-gcp-projects@0.3.27 + - @backstage/plugin-github-actions@0.5.8 + - @backstage/plugin-jenkins@0.7.7 + - @backstage/plugin-lighthouse@0.3.8 + - @backstage/plugin-newrelic@0.3.26 + - @backstage/plugin-newrelic-dashboard@0.2.1 + - @backstage/plugin-org@0.5.8 + - @backstage/plugin-pagerduty@0.5.1 + - @backstage/plugin-permission-react@0.4.4 + - @backstage/plugin-rollbar@0.4.8 + - @backstage/plugin-search@1.0.1 + - @backstage/plugin-search-react@1.0.1 + - @backstage/plugin-stack-overflow@0.1.4 + - @backstage/plugin-tech-insights@0.2.4 + - @backstage/plugin-todo@0.2.10 + - @backstage/plugin-user-settings@0.4.7 + +## example-backend@0.2.74 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/plugin-kubernetes-backend@0.7.1 + - @backstage/integration@1.3.0 + - @backstage/plugin-scaffolder-backend@1.5.0 + - @backstage/plugin-auth-backend@0.15.1 + - @backstage/plugin-graphql-backend@0.1.25 + - @backstage/backend-tasks@0.3.4 + - @backstage/plugin-tech-insights-node@0.3.3 + - @backstage/plugin-catalog-backend@1.3.1 + - example-app@0.2.74 + - @backstage/plugin-app-backend@0.3.35 + - @backstage/plugin-auth-node@0.2.4 + - @backstage/plugin-azure-devops-backend@0.3.14 + - @backstage/plugin-badges-backend@0.1.29 + - @backstage/plugin-code-coverage-backend@0.2.1 + - @backstage/plugin-jenkins-backend@0.1.25 + - @backstage/plugin-kafka-backend@0.2.28 + - @backstage/plugin-permission-backend@0.5.10 + - @backstage/plugin-permission-node@0.6.4 + - @backstage/plugin-proxy-backend@0.2.29 + - @backstage/plugin-rollbar-backend@0.1.32 + - @backstage/plugin-scaffolder-backend-module-rails@0.4.3 + - @backstage/plugin-search-backend@1.0.1 + - @backstage/plugin-search-backend-module-elasticsearch@1.0.1 + - @backstage/plugin-search-backend-module-pg@0.3.6 + - @backstage/plugin-search-backend-node@1.0.1 + - @backstage/plugin-tech-insights-backend@0.5.1 + - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.19 + - @backstage/plugin-techdocs-backend@1.2.1 + - @backstage/plugin-todo-backend@0.1.32 + +## example-backend-next@0.0.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.5.0 + - @backstage/backend-defaults@0.1.0 + - @backstage/plugin-catalog-backend@1.3.1 + +## techdocs-cli-embedded-app@0.2.73 + +### Patch Changes + +- Updated dependencies + - @backstage/cli@0.18.1 + - @backstage/plugin-techdocs@1.3.1 + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog@1.5.0 + - @backstage/plugin-techdocs-react@1.0.3 + - @backstage/app-defaults@1.0.5 + - @backstage/core-app-api@1.0.5 + - @backstage/integration-react@1.1.3 + - @backstage/test-utils@1.1.3 + +## @internal/plugin-catalog-customized@0.0.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog@1.5.0 + - @backstage/plugin-catalog-react@1.1.3 + +## @internal/plugin-todo-list@1.0.4 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + +## @internal/plugin-todo-list-backend@1.0.4 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/plugin-auth-node@0.2.4 diff --git a/docs/releases/v1.5.0-next.3-changelog.md b/docs/releases/v1.5.0-next.3-changelog.md new file mode 100644 index 0000000000..db9dc2ae48 --- /dev/null +++ b/docs/releases/v1.5.0-next.3-changelog.md @@ -0,0 +1,48 @@ +# Release v1.5.0-next.3 + +## @backstage/plugin-adr@0.2.0-next.2 + +### Minor Changes + +- bfc7c50a09: Display associated entity as a chip in `AdrSearchResultListItem` + + BREAKING: `AdrDocument` now includes a `entityRef` property, if you have a custom `AdrParser` you will have to supply this property in your returned documents + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-adr-common@0.2.0-next.1 + +## @backstage/plugin-adr-backend@0.2.0-next.1 + +### Minor Changes + +- bfc7c50a09: Display associated entity as a chip in `AdrSearchResultListItem` + + BREAKING: `AdrDocument` now includes a `entityRef` property, if you have a custom `AdrParser` you will have to supply this property in your returned documents + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-adr-common@0.2.0-next.1 + - @backstage/backend-common@0.15.0-next.2 + +## @backstage/plugin-adr-common@0.2.0-next.1 + +### Minor Changes + +- bfc7c50a09: Display associated entity as a chip in `AdrSearchResultListItem` + + BREAKING: `AdrDocument` now includes a `entityRef` property, if you have a custom `AdrParser` you will have to supply this property in your returned documents + +## @backstage/backend-common@0.15.0-next.2 + +### Patch Changes + +- 5e4dc173f7: Added a second validation to the `dir()` method of ZIP archive responses returned from `readTree()` that ensures that extracted files do not fall outside the target directory. + +## @backstage/create-app@0.4.30-next.3 + +### Patch Changes + +- Bumped create-app version. diff --git a/docs/releases/v1.5.0.md b/docs/releases/v1.5.0.md new file mode 100644 index 0000000000..ca4ae11185 --- /dev/null +++ b/docs/releases/v1.5.0.md @@ -0,0 +1,60 @@ +--- +id: v1.5.0 +title: v1.5.0 +description: Backstage Release v1.5.0 +--- + +These are the release notes for the v1.5.0 release of [Backstage](https://backstage.io/). + +A huge thanks to the whole team of maintainers and contributors as well as the amazing Backstage Community for the hard work in getting this release developed and done. + +## Highlights + +### GitHub Entity Provider + +Added a new `GitHubEntityProvider` ([documentation](https://backstage.io/docs/integrations/github/discovery)), which allows for automatic discovery of catalog entity definition files out of your GitHub projects. This is an improvement upon the `GithubDiscoveryProcessor` that existed before, and we recommend using entity providers rather than processors for discovery and ingestion when possible. Contributed by [@brentg-telus](https://github.com/brentg-telus) [#12822](https://github.com/backstage/backstage/pull/12822) + +### Experimental Plugin Reconfiguration + +This release adds an experimental API that allows plugin authors to define plugin wide options. These options can then be used by adopters of the plugin to reconfigure it to fit their app. Check out the [plugin customization](https://backstage.io/docs/plugins/customization) docs for more information on how to get started. Feedback is welcome on this new feature! Contributed by [@acierto](https://github.com/acierto) [#11404](https://github.com/backstage/backstage/pull/11404) + +### Experimental Backend System Evolution + +This release adds the new `@backstage/backend-defaults` package, part of the [evolution of the backend system](https://github.com/backstage/backstage/issues/11611). This package is highly experimental and we do not recommend using it for any purpose, yet. + +### New plugin: `@aws/aws-proton-plugin-for-backstage` + +Interact with AWS Proton in Backstage. Contributed by [@clareliguori](https://github.com/clareliguori) [#12193](https://github.com/backstage/backstage/pull/12193) + +### New plugin: `@backstage/plugin-github-issues` + +This new plugin can be used to display GitHub issues for your entities. Contributed by [@mrwolny](https://github.com/mrwolny) [#12875](https://github.com/backstage/backstage/pull/12875) + +### New plugin: `@backstage/plugin-sonarqube-backend` + +This new backend for `@backstage/plugin-sonarqube` replaces the Sonarqube proxy configuration; once it is installed, you can remove the `/sonarqube` proxy entry. For more information, see the plugin [README.md](https://github.com/backstage/backstage/blob/master/plugins/sonarqube-backend/README.md). Contributed by [@Neemys](https://github.com/Neemys) [#11925](https://github.com/backstage/backstage/pull/11925) + +### New module: `@backstage/plugin-catalog-backend-module-bitbucket-server` + +This new module for the catalog backend adds the `BitbucketServerEntityProvider`, which allows discovery of entities out of Bitbucket Server installations. Contributed by [@ONordander](https://github.com/ONordander) [#12835](https://github.com/backstage/backstage/pull/12835) + +## Security Fixes + +This release does not contain any security fixes. + +## Upgrade path + +We recommend that you keep your Backstage project up to date with this latest release. For more guidance on how to upgrade, check out the documentation for [keeping Backstage updated](https://backstage.io/docs/getting-started/keeping-backstage-updated). + +## Links and References + +Below you can find a list of links and references to help you learn about and start using this new release. + +- [Backstage official website](https://backstage.io/), [documentation](https://backstage.io/docs/), and [getting started guide](https://backstage.io/docs/getting-started/) +- [GitHub repository](https://github.com/backstage/backstage) +- Backstage's [versioning and support policy](https://backstage.io/docs/overview/versioning-policy) +- [Community Discord](https://discord.gg/bFESRKVt) for discussions and support +- [Changelog](https://github.com/backstage/backstage/tree/master/docs/releases/v1.5.0-changelog.md) +- Backstage [Demos](https://backstage.io/demos), [Blog](https://backstage.io/blog), [Roadmap](https://backstage.io/docs/overview/roadmap) and [Plugins](https://backstage.io/plugins) + +Sign up for our [newsletter](https://mailchi.mp/spotify/backstage-community) if you want to be informed about what is happening in the world of Backstage. diff --git a/docs/tutorials/switching-sqlite-postgres.md b/docs/tutorials/switching-sqlite-postgres.md index c4e4bd83b6..c0c35999c6 100644 --- a/docs/tutorials/switching-sqlite-postgres.md +++ b/docs/tutorials/switching-sqlite-postgres.md @@ -86,3 +86,16 @@ backend: + # ca: # if you have a CA file and want to verify it you can uncomment this section + # $file: /ca/server.crt ``` + +### Using a single database + +By default, each plugin will get its own logical database, to ensure that there's no conflict in table names throughout the plugins that you install and to keep their concerns separate for other use cases further down the line. If you are limited in that you can only make use of a single database, you can use a special option `pluginDivisionMode` with `client: pg` in the config to create separate [PostgreSQL Schemas](https://www.postgresql.org/docs/current/ddl-schemas.html) instead of creating separate databases. + +You can enable this using the following config: + +```yaml +backend: + database: + client: pg + pluginDivisionMode: schema # defaults to database, but changing this to schema means plugins will be given their own schema (in the specified/default database) +``` diff --git a/microsite/data/plugins/dynatrace.yaml b/microsite/data/plugins/dynatrace.yaml index 3ab85ae1eb..f204c4105c 100644 --- a/microsite/data/plugins/dynatrace.yaml +++ b/microsite/data/plugins/dynatrace.yaml @@ -3,7 +3,7 @@ title: Dynatrace author: TELUS authorUrl: https://github.com/telus category: Monitoring -description: View monitoring info from dynatrace for services in your software catalog. +description: View monitoring info from Dynatrace for services in your software catalog. documentation: https://github.com/backstage/backstage/tree/master/plugins/dynatrace iconUrl: img/dynatrace.svg npmPackageName: '@backstage/plugin-dynatrace' diff --git a/microsite/sidebars.json b/microsite/sidebars.json index 2ae7f5e81d..378d8085a3 100644 --- a/microsite/sidebars.json +++ b/microsite/sidebars.json @@ -1,6 +1,7 @@ { "releases": { "Release Notes": [ + "releases/v1.5.0", "releases/v1.4.0", "releases/v1.3.0", "releases/v1.2.0", @@ -219,6 +220,7 @@ "plugins/integrating-plugin-into-software-catalog", "plugins/integrating-search-into-plugins", "plugins/composability", + "plugins/customization", "plugins/analytics", { "type": "subcategory", diff --git a/package.json b/package.json index 324b2e811c..cfcfe00b1d 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,7 @@ "@types/react": "^17", "@types/react-dom": "^17" }, - "version": "1.5.0-next.2", + "version": "1.5.0", "dependencies": { "@manypkg/get-packages": "^1.1.3", "@microsoft/api-documenter": "^7.17.11", @@ -69,7 +69,7 @@ "eslint-plugin-notice": "^0.9.10", "fs-extra": "10.1.0", "husky": "^8.0.0", - "lerna": "^5.0.0", + "lerna": "~5.0.0", "lint-staged": "^13.0.0", "minimist": "^1.2.5", "prettier": "^2.2.1", diff --git a/packages/app-defaults/CHANGELOG.md b/packages/app-defaults/CHANGELOG.md index 1307046de3..77949cbb27 100644 --- a/packages/app-defaults/CHANGELOG.md +++ b/packages/app-defaults/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/app-defaults +## 1.0.5 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/core-app-api@1.0.5 + - @backstage/plugin-permission-react@0.4.4 + ## 1.0.5-next.1 ### Patch Changes diff --git a/packages/app-defaults/package.json b/packages/app-defaults/package.json index ecb89a5871..04852ec4b5 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.0.5-next.1", + "version": "1.0.5", "private": false, "publishConfig": { "access": "public", @@ -33,10 +33,10 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/core-plugin-api": "^1.0.5-next.0", - "@backstage/plugin-permission-react": "^0.4.4-next.0", + "@backstage/core-components": "^0.11.0", + "@backstage/core-app-api": "^1.0.5", + "@backstage/core-plugin-api": "^1.0.5", + "@backstage/plugin-permission-react": "^0.4.4", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -46,8 +46,8 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@types/jest": "^26.0.7", diff --git a/packages/app/CHANGELOG.md b/packages/app/CHANGELOG.md index 5f5cd2c5f5..cdc3283c1f 100644 --- a/packages/app/CHANGELOG.md +++ b/packages/app/CHANGELOG.md @@ -1,5 +1,62 @@ # example-app +## 0.2.74 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-kubernetes@0.7.1 + - @backstage/cli@0.18.1 + - @backstage/plugin-techdocs@1.3.1 + - @backstage/plugin-home@0.4.24 + - @backstage/core-components@0.11.0 + - @backstage/plugin-scaffolder@1.5.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + - @backstage/plugin-cost-insights@0.11.30 + - @backstage/plugin-graphiql@0.2.40 + - @backstage/plugin-catalog-common@1.0.5 + - @backstage/plugin-kafka@0.3.8 + - @backstage/plugin-techdocs-module-addons-contrib@1.0.3 + - @backstage/plugin-gocd@0.1.14 + - @backstage/plugin-sentry@0.4.1 + - @backstage/plugin-api-docs@0.8.8 + - @backstage/plugin-techdocs-react@1.0.3 + - @backstage/plugin-shortcuts@0.3.0 + - @backstage/plugin-tech-radar@0.5.15 + - @backstage/app-defaults@1.0.5 + - @backstage/core-app-api@1.0.5 + - @backstage/integration-react@1.1.3 + - @backstage/plugin-airbrake@0.3.8 + - @backstage/plugin-apache-airflow@0.2.1 + - @backstage/plugin-azure-devops@0.1.24 + - @backstage/plugin-badges@0.2.32 + - @internal/plugin-catalog-customized@0.0.1 + - @backstage/plugin-catalog-graph@0.2.20 + - @backstage/plugin-catalog-import@0.8.11 + - @backstage/plugin-circleci@0.3.8 + - @backstage/plugin-cloudbuild@0.3.8 + - @backstage/plugin-code-coverage@0.2.1 + - @backstage/plugin-dynatrace@0.1.2 + - @backstage/plugin-explore@0.3.39 + - @backstage/plugin-gcalendar@0.3.4 + - @backstage/plugin-gcp-projects@0.3.27 + - @backstage/plugin-github-actions@0.5.8 + - @backstage/plugin-jenkins@0.7.7 + - @backstage/plugin-lighthouse@0.3.8 + - @backstage/plugin-newrelic@0.3.26 + - @backstage/plugin-newrelic-dashboard@0.2.1 + - @backstage/plugin-org@0.5.8 + - @backstage/plugin-pagerduty@0.5.1 + - @backstage/plugin-permission-react@0.4.4 + - @backstage/plugin-rollbar@0.4.8 + - @backstage/plugin-search@1.0.1 + - @backstage/plugin-search-react@1.0.1 + - @backstage/plugin-stack-overflow@0.1.4 + - @backstage/plugin-tech-insights@0.2.4 + - @backstage/plugin-todo@0.2.10 + - @backstage/plugin-user-settings@0.4.7 + ## 0.2.74-next.2 ### Patch Changes diff --git a/packages/app/package.json b/packages/app/package.json index 2e97049094..d4e0644f3a 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -1,65 +1,65 @@ { "name": "example-app", - "version": "0.2.74-next.2", + "version": "0.2.74", "private": true, "backstage": { "role": "frontend" }, "bundled": true, "dependencies": { - "@backstage/app-defaults": "^1.0.5-next.1", + "@backstage/app-defaults": "^1.0.5", "@backstage/catalog-model": "^1.1.0", - "@backstage/cli": "^0.18.1-next.1", + "@backstage/cli": "^0.18.1", "@backstage/config": "^1.0.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", - "@backstage/integration-react": "^1.1.3-next.1", - "@backstage/plugin-airbrake": "^0.3.8-next.1", - "@backstage/plugin-api-docs": "^0.8.8-next.2", - "@backstage/plugin-azure-devops": "^0.1.24-next.1", - "@backstage/plugin-apache-airflow": "^0.2.1-next.1", - "@backstage/plugin-badges": "^0.2.32-next.1", - "@backstage/plugin-catalog-common": "^1.0.5-next.0", - "@backstage/plugin-catalog-graph": "^0.2.20-next.1", - "@backstage/plugin-catalog-import": "^0.8.11-next.1", - "@backstage/plugin-catalog-react": "^1.1.3-next.2", - "@backstage/plugin-circleci": "^0.3.8-next.1", - "@backstage/plugin-cloudbuild": "^0.3.8-next.1", - "@backstage/plugin-code-coverage": "^0.2.1-next.1", - "@backstage/plugin-cost-insights": "^0.11.30-next.1", - "@backstage/plugin-dynatrace": "^0.1.2-next.1", - "@backstage/plugin-explore": "^0.3.39-next.1", - "@backstage/plugin-gcalendar": "^0.3.4-next.1", - "@backstage/plugin-gcp-projects": "^0.3.27-next.1", - "@backstage/plugin-github-actions": "^0.5.8-next.1", - "@backstage/plugin-gocd": "^0.1.14-next.1", - "@backstage/plugin-graphiql": "^0.2.40-next.1", - "@backstage/plugin-home": "^0.4.24-next.2", - "@backstage/plugin-jenkins": "^0.7.7-next.2", - "@backstage/plugin-kafka": "^0.3.8-next.1", - "@backstage/plugin-kubernetes": "^0.7.1-next.2", - "@backstage/plugin-lighthouse": "^0.3.8-next.1", - "@backstage/plugin-newrelic": "^0.3.26-next.1", - "@backstage/plugin-newrelic-dashboard": "^0.2.1-next.1", - "@backstage/plugin-org": "^0.5.8-next.1", - "@backstage/plugin-pagerduty": "0.5.1-next.1", - "@backstage/plugin-permission-react": "^0.4.4-next.0", - "@backstage/plugin-rollbar": "^0.4.8-next.1", - "@backstage/plugin-scaffolder": "^1.5.0-next.2", - "@backstage/plugin-search": "^1.0.1-next.1", + "@backstage/core-app-api": "^1.0.5", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", + "@backstage/integration-react": "^1.1.3", + "@backstage/plugin-airbrake": "^0.3.8", + "@backstage/plugin-api-docs": "^0.8.8", + "@backstage/plugin-azure-devops": "^0.1.24", + "@backstage/plugin-apache-airflow": "^0.2.1", + "@backstage/plugin-badges": "^0.2.32", + "@backstage/plugin-catalog-common": "^1.0.5", + "@backstage/plugin-catalog-graph": "^0.2.20", + "@backstage/plugin-catalog-import": "^0.8.11", + "@backstage/plugin-catalog-react": "^1.1.3", + "@backstage/plugin-circleci": "^0.3.8", + "@backstage/plugin-cloudbuild": "^0.3.8", + "@backstage/plugin-code-coverage": "^0.2.1", + "@backstage/plugin-cost-insights": "^0.11.30", + "@backstage/plugin-dynatrace": "^0.1.2", + "@backstage/plugin-explore": "^0.3.39", + "@backstage/plugin-gcalendar": "^0.3.4", + "@backstage/plugin-gcp-projects": "^0.3.27", + "@backstage/plugin-github-actions": "^0.5.8", + "@backstage/plugin-gocd": "^0.1.14", + "@backstage/plugin-graphiql": "^0.2.40", + "@backstage/plugin-home": "^0.4.24", + "@backstage/plugin-jenkins": "^0.7.7", + "@backstage/plugin-kafka": "^0.3.8", + "@backstage/plugin-kubernetes": "^0.7.1", + "@backstage/plugin-lighthouse": "^0.3.8", + "@backstage/plugin-newrelic": "^0.3.26", + "@backstage/plugin-newrelic-dashboard": "^0.2.1", + "@backstage/plugin-org": "^0.5.8", + "@backstage/plugin-pagerduty": "0.5.1", + "@backstage/plugin-permission-react": "^0.4.4", + "@backstage/plugin-rollbar": "^0.4.8", + "@backstage/plugin-scaffolder": "^1.5.0", + "@backstage/plugin-search": "^1.0.1", "@backstage/plugin-search-common": "^1.0.0", - "@backstage/plugin-search-react": "^1.0.1-next.1", - "@backstage/plugin-sentry": "^0.4.1-next.1", - "@backstage/plugin-shortcuts": "^0.3.0-next.1", - "@backstage/plugin-stack-overflow": "^0.1.4-next.1", - "@backstage/plugin-tech-insights": "^0.2.4-next.1", - "@backstage/plugin-tech-radar": "^0.5.15-next.1", - "@backstage/plugin-techdocs": "^1.3.1-next.2", - "@backstage/plugin-techdocs-module-addons-contrib": "^1.0.3-next.2", - "@backstage/plugin-techdocs-react": "^1.0.3-next.2", - "@backstage/plugin-todo": "^0.2.10-next.1", - "@backstage/plugin-user-settings": "^0.4.7-next.1", + "@backstage/plugin-search-react": "^1.0.1", + "@backstage/plugin-sentry": "^0.4.1", + "@backstage/plugin-shortcuts": "^0.3.0", + "@backstage/plugin-stack-overflow": "^0.1.4", + "@backstage/plugin-tech-insights": "^0.2.4", + "@backstage/plugin-tech-radar": "^0.5.15", + "@backstage/plugin-techdocs": "^1.3.1", + "@backstage/plugin-techdocs-module-addons-contrib": "^1.0.3", + "@backstage/plugin-techdocs-react": "^1.0.3", + "@backstage/plugin-todo": "^0.2.10", + "@backstage/plugin-user-settings": "^0.4.7", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -69,7 +69,7 @@ "@roadiehq/backstage-plugin-github-insights": "^2.0.0", "@roadiehq/backstage-plugin-github-pull-requests": "^2.0.0", "@roadiehq/backstage-plugin-travis-ci": "^2.0.0", - "@internal/plugin-catalog-customized": "0.0.1-next.0", + "@internal/plugin-catalog-customized": "0.0.1", "history": "^5.0.0", "prop-types": "^15.7.2", "react": "^17.0.2", @@ -81,7 +81,7 @@ "zen-observable": "^0.8.15" }, "devDependencies": { - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/test-utils": "^1.1.3", "@rjsf/core": "^3.2.1", "@testing-library/cypress": "^8.0.2", "@testing-library/jest-dom": "^5.10.1", diff --git a/packages/app/src/App.tsx b/packages/app/src/App.tsx index 3f748813f5..a0390d96e8 100644 --- a/packages/app/src/App.tsx +++ b/packages/app/src/App.tsx @@ -91,7 +91,10 @@ import { apis } from './apis'; import { entityPage } from './components/catalog/EntityPage'; import { homePage } from './components/home/HomePage'; import { Root } from './components/Root'; -import { LowerCaseValuePickerFieldExtension } from './components/scaffolder/customScaffolderExtensions'; +import { + DelayingComponentFieldExtension, + LowerCaseValuePickerFieldExtension, +} from './components/scaffolder/customScaffolderExtensions'; import { defaultPreviewTemplate } from './components/scaffolder/defaultPreviewTemplate'; import { searchPage } from './components/search/SearchPage'; import { providers } from './identityProviders'; @@ -228,7 +231,7 @@ const routes = ( } > - + } /> diff --git a/packages/app/src/components/scaffolder/customScaffolderExtensions.tsx b/packages/app/src/components/scaffolder/customScaffolderExtensions.tsx index 61407e2918..2a4dedf080 100644 --- a/packages/app/src/components/scaffolder/customScaffolderExtensions.tsx +++ b/packages/app/src/components/scaffolder/customScaffolderExtensions.tsx @@ -62,3 +62,37 @@ export const LowerCaseValuePickerFieldExtension = scaffolderPlugin.provide( }, }), ); + +const MockDelayComponent = ( + props: FieldExtensionComponentProps<{ test?: string }>, +) => { + const { onChange, formData, rawErrors } = props; + return ( + onChange({ test: value })} + margin="normal" + error={rawErrors?.length > 0 && !formData} + /> + ); +}; + +export const DelayingComponentFieldExtension = scaffolderPlugin.provide( + createScaffolderFieldExtension({ + name: 'DelayingComponent', + component: MockDelayComponent, + validation: async ( + value: { test?: string }, + validation: FieldValidation, + ) => { + // delay 2 seconds + await new Promise(resolve => setTimeout(resolve, 2000)); + + if (value.test !== 'pass') { + validation.addError('value was not equal to pass'); + } + }, + }), +); diff --git a/packages/backend-app-api/CHANGELOG.md b/packages/backend-app-api/CHANGELOG.md index 6794161f1d..a467ef5b7a 100644 --- a/packages/backend-app-api/CHANGELOG.md +++ b/packages/backend-app-api/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/backend-app-api +## 0.2.0 + +### Minor Changes + +- 5df230d48c: Introduced a new `backend-defaults` package carrying `createBackend` which was previously exported from `backend-app-api`. + The `backend-app-api` package now exports the `createSpecializedBacked` that does not add any service factories by default. + +### Patch Changes + +- 0599732ec0: Refactored experimental backend system with new type names. +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/backend-plugin-api@0.1.1 + - @backstage/backend-tasks@0.3.4 + - @backstage/plugin-permission-node@0.6.4 + ## 0.1.1-next.0 ### Patch Changes diff --git a/packages/backend-app-api/api-report.md b/packages/backend-app-api/api-report.md index a37ec6abc6..26c8179771 100644 --- a/packages/backend-app-api/api-report.md +++ b/packages/backend-app-api/api-report.md @@ -4,22 +4,101 @@ ```ts import { AnyServiceFactory } from '@backstage/backend-plugin-api'; -import { BackendRegistrable } from '@backstage/backend-plugin-api'; +import { BackendFeature } from '@backstage/backend-plugin-api'; +import { Config } from '@backstage/config'; +import { ExtensionPoint } from '@backstage/backend-plugin-api'; +import { HttpRouterService } from '@backstage/backend-plugin-api'; +import { Logger } from '@backstage/backend-plugin-api'; +import { PermissionAuthorizer } from '@backstage/plugin-permission-common'; +import { PermissionEvaluator } from '@backstage/plugin-permission-common'; +import { PluginCacheManager } from '@backstage/backend-common'; +import { PluginDatabaseManager } from '@backstage/backend-common'; +import { PluginEndpointDiscovery } from '@backstage/backend-common'; +import { PluginTaskScheduler } from '@backstage/backend-tasks'; +import { ServiceFactory } from '@backstage/backend-plugin-api'; +import { ServiceRef } from '@backstage/backend-plugin-api'; +import { TokenManager } from '@backstage/backend-common'; +import { UrlReader } from '@backstage/backend-common'; // @public (undocumented) export interface Backend { // (undocumented) - add(extension: BackendRegistrable): void; + add(feature: BackendFeature): void; // (undocumented) start(): Promise; } // @public (undocumented) -export function createBackend(options?: CreateBackendOptions): Backend; +export const cacheFactory: ServiceFactory< + PluginCacheManager, + PluginCacheManager, + {} +>; // @public (undocumented) -export interface CreateBackendOptions { +export const configFactory: ServiceFactory; + +// @public (undocumented) +export function createSpecializedBackend( + options: CreateSpecializedBackendOptions, +): Backend; + +// @public (undocumented) +export interface CreateSpecializedBackendOptions { // (undocumented) - apis: AnyServiceFactory[]; + services: AnyServiceFactory[]; } + +// @public (undocumented) +export const databaseFactory: ServiceFactory< + PluginDatabaseManager, + PluginDatabaseManager, + {} +>; + +// @public (undocumented) +export const discoveryFactory: ServiceFactory< + PluginEndpointDiscovery, + PluginEndpointDiscovery, + {} +>; + +// @public (undocumented) +export const httpRouterFactory: ServiceFactory< + HttpRouterService, + HttpRouterService, + {} +>; + +// @public (undocumented) +export const loggerFactory: ServiceFactory; + +// @public (undocumented) +export const permissionsFactory: ServiceFactory< + PermissionAuthorizer | PermissionEvaluator, + PermissionAuthorizer | PermissionEvaluator, + {} +>; + +// @public (undocumented) +export const schedulerFactory: ServiceFactory< + PluginTaskScheduler, + PluginTaskScheduler, + {} +>; + +// @public (undocumented) +export type ServiceOrExtensionPoint = + | ExtensionPoint + | ServiceRef; + +// @public (undocumented) +export const tokenManagerFactory: ServiceFactory< + TokenManager, + TokenManager, + {} +>; + +// @public (undocumented) +export const urlReaderFactory: ServiceFactory; ``` diff --git a/packages/backend-app-api/package.json b/packages/backend-app-api/package.json index 1655d9ea87..fc908d107b 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.1.1-next.0", + "version": "0.2.0", "main": "src/index.ts", "types": "src/index.ts", "private": false, @@ -34,16 +34,16 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/backend-plugin-api": "^0.1.1-next.0", - "@backstage/backend-common": "^0.15.0-next.0", - "@backstage/backend-tasks": "^0.3.4-next.0", - "@backstage/plugin-permission-node": "^0.6.4-next.0", + "@backstage/backend-plugin-api": "^0.1.1", + "@backstage/backend-common": "^0.15.0", + "@backstage/backend-tasks": "^0.3.4", + "@backstage/plugin-permission-node": "^0.6.4", "express": "^4.17.1", "express-promise-router": "^4.1.0", "winston": "^3.2.1" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.0" + "@backstage/cli": "^0.18.1" }, "files": [ "dist", diff --git a/packages/backend-app-api/src/index.ts b/packages/backend-app-api/src/index.ts index c58379c3e4..02633f3732 100644 --- a/packages/backend-app-api/src/index.ts +++ b/packages/backend-app-api/src/index.ts @@ -21,3 +21,4 @@ */ export * from './wiring'; +export * from './services/implementations'; diff --git a/packages/backend-app-api/src/services/implementations/cacheService.ts b/packages/backend-app-api/src/services/implementations/cacheService.ts index 034f85f917..c5e58b4a41 100644 --- a/packages/backend-app-api/src/services/implementations/cacheService.ts +++ b/packages/backend-app-api/src/services/implementations/cacheService.ts @@ -21,7 +21,7 @@ import { cacheServiceRef, } from '@backstage/backend-plugin-api'; -// TODO: Work out some naming and implementation patterns for these +/** @public */ export const cacheFactory = createServiceFactory({ service: cacheServiceRef, deps: { diff --git a/packages/backend-app-api/src/services/implementations/configService.ts b/packages/backend-app-api/src/services/implementations/configService.ts index 94a59baf34..c4aa641f72 100644 --- a/packages/backend-app-api/src/services/implementations/configService.ts +++ b/packages/backend-app-api/src/services/implementations/configService.ts @@ -22,6 +22,7 @@ import { loggerServiceRef, } from '@backstage/backend-plugin-api'; +/** @public */ export const configFactory = createServiceFactory({ service: configServiceRef, deps: { diff --git a/packages/backend-app-api/src/services/implementations/databaseService.ts b/packages/backend-app-api/src/services/implementations/databaseService.ts index a52da1e444..b2bc19de84 100644 --- a/packages/backend-app-api/src/services/implementations/databaseService.ts +++ b/packages/backend-app-api/src/services/implementations/databaseService.ts @@ -21,6 +21,7 @@ import { databaseServiceRef, } from '@backstage/backend-plugin-api'; +/** @public */ export const databaseFactory = createServiceFactory({ service: databaseServiceRef, deps: { diff --git a/packages/backend-app-api/src/services/implementations/discoveryService.ts b/packages/backend-app-api/src/services/implementations/discoveryService.ts index 23af1924a0..3f1a584c61 100644 --- a/packages/backend-app-api/src/services/implementations/discoveryService.ts +++ b/packages/backend-app-api/src/services/implementations/discoveryService.ts @@ -21,6 +21,7 @@ import { discoveryServiceRef, } from '@backstage/backend-plugin-api'; +/** @public */ export const discoveryFactory = createServiceFactory({ service: discoveryServiceRef, deps: { diff --git a/packages/backend-app-api/src/services/implementations/httpRouterService.ts b/packages/backend-app-api/src/services/implementations/httpRouterService.ts index 1f72378643..6460a77eaf 100644 --- a/packages/backend-app-api/src/services/implementations/httpRouterService.ts +++ b/packages/backend-app-api/src/services/implementations/httpRouterService.ts @@ -23,6 +23,7 @@ import Router from 'express-promise-router'; import { Handler } from 'express'; import { createServiceBuilder } from '@backstage/backend-common'; +/** @public */ export const httpRouterFactory = createServiceFactory({ service: httpRouterServiceRef, deps: { diff --git a/packages/backend-app-api/src/services/implementations/index.ts b/packages/backend-app-api/src/services/implementations/index.ts index e6b6604069..048c952b4e 100644 --- a/packages/backend-app-api/src/services/implementations/index.ts +++ b/packages/backend-app-api/src/services/implementations/index.ts @@ -14,26 +14,13 @@ * limitations under the License. */ -import { cacheFactory } from './cacheService'; -import { configFactory } from './configService'; -import { databaseFactory } from './databaseService'; -import { discoveryFactory } from './discoveryService'; -import { loggerFactory } from './loggerService'; -import { permissionsFactory } from './permissionsService'; -import { schedulerFactory } from './schedulerService'; -import { tokenManagerFactory } from './tokenManagerService'; -import { urlReaderFactory } from './urlReaderService'; -import { httpRouterFactory } from './httpRouterService'; - -export const defaultServiceFactories = [ - cacheFactory, - configFactory, - databaseFactory, - discoveryFactory, - loggerFactory, - permissionsFactory, - schedulerFactory, - tokenManagerFactory, - urlReaderFactory, - httpRouterFactory, -]; +export { cacheFactory } from './cacheService'; +export { configFactory } from './configService'; +export { databaseFactory } from './databaseService'; +export { discoveryFactory } from './discoveryService'; +export { loggerFactory } from './loggerService'; +export { permissionsFactory } from './permissionsService'; +export { schedulerFactory } from './schedulerService'; +export { tokenManagerFactory } from './tokenManagerService'; +export { urlReaderFactory } from './urlReaderService'; +export { httpRouterFactory } from './httpRouterService'; diff --git a/packages/backend-app-api/src/services/implementations/loggerService.ts b/packages/backend-app-api/src/services/implementations/loggerService.ts index fbeb4b9ade..e90b591302 100644 --- a/packages/backend-app-api/src/services/implementations/loggerService.ts +++ b/packages/backend-app-api/src/services/implementations/loggerService.ts @@ -38,6 +38,7 @@ class BackstageLogger implements Logger { } } +/** @public */ export const loggerFactory = createServiceFactory({ service: loggerServiceRef, deps: {}, diff --git a/packages/backend-app-api/src/services/implementations/permissionsService.ts b/packages/backend-app-api/src/services/implementations/permissionsService.ts index 97f0330917..26fe012a20 100644 --- a/packages/backend-app-api/src/services/implementations/permissionsService.ts +++ b/packages/backend-app-api/src/services/implementations/permissionsService.ts @@ -23,6 +23,7 @@ import { } from '@backstage/backend-plugin-api'; import { ServerPermissionClient } from '@backstage/plugin-permission-node'; +/** @public */ export const permissionsFactory = createServiceFactory({ service: permissionsServiceRef, deps: { diff --git a/packages/backend-app-api/src/services/implementations/schedulerService.ts b/packages/backend-app-api/src/services/implementations/schedulerService.ts index 130ccb3f5f..39dbf26ba9 100644 --- a/packages/backend-app-api/src/services/implementations/schedulerService.ts +++ b/packages/backend-app-api/src/services/implementations/schedulerService.ts @@ -21,6 +21,7 @@ import { } from '@backstage/backend-plugin-api'; import { TaskScheduler } from '@backstage/backend-tasks'; +/** @public */ export const schedulerFactory = createServiceFactory({ service: schedulerServiceRef, deps: { diff --git a/packages/backend-app-api/src/services/implementations/tokenManagerService.ts b/packages/backend-app-api/src/services/implementations/tokenManagerService.ts index 2e82fce9d9..7767c17944 100644 --- a/packages/backend-app-api/src/services/implementations/tokenManagerService.ts +++ b/packages/backend-app-api/src/services/implementations/tokenManagerService.ts @@ -23,6 +23,7 @@ import { } from '@backstage/backend-plugin-api'; import { ServerTokenManager } from '@backstage/backend-common'; +/** @public */ export const tokenManagerFactory = createServiceFactory({ service: tokenManagerServiceRef, deps: { diff --git a/packages/backend-app-api/src/services/implementations/urlReaderService.ts b/packages/backend-app-api/src/services/implementations/urlReaderService.ts index 74431dfa0d..df353a52d2 100644 --- a/packages/backend-app-api/src/services/implementations/urlReaderService.ts +++ b/packages/backend-app-api/src/services/implementations/urlReaderService.ts @@ -23,6 +23,7 @@ import { urlReaderServiceRef, } from '@backstage/backend-plugin-api'; +/** @public */ export const urlReaderFactory = createServiceFactory({ service: urlReaderServiceRef, deps: { diff --git a/packages/backend-app-api/src/wiring/BackendInitializer.ts b/packages/backend-app-api/src/wiring/BackendInitializer.ts index ab086f4144..afb5250504 100644 --- a/packages/backend-app-api/src/wiring/BackendInitializer.ts +++ b/packages/backend-app-api/src/wiring/BackendInitializer.ts @@ -15,19 +15,21 @@ */ import { - BackendRegistrable, + BackendFeature, ExtensionPoint, ServiceRef, } from '@backstage/backend-plugin-api'; -import { BackendRegisterInit, ServiceHolder } from './types'; - -type ServiceOrExtensionPoint = ExtensionPoint | ServiceRef; +import { + BackendRegisterInit, + ServiceHolder, + ServiceOrExtensionPoint, +} from './types'; export class BackendInitializer { #started = false; - #extensions = new Map(); + #features = new Map(); #registerInits = new Array(); - #extensionPoints = new Map(); + #extensionPoints = new Map, unknown>(); #serviceHolder: ServiceHolder; constructor(serviceHolder: ServiceHolder) { @@ -38,42 +40,56 @@ export class BackendInitializer { deps: { [name: string]: ServiceOrExtensionPoint }, pluginId: string, ) { - return Object.fromEntries( - await Promise.all( - Object.entries(deps).map(async ([name, ref]) => [ - name, - this.#extensionPoints.get(ref) || - (await this.#serviceHolder.get(ref as ServiceRef)!( - pluginId, - )), - ]), - ), - ); - } + const result = new Map(); + const missingRefs = new Set(); - add(extension: BackendRegistrable, options?: TOptions) { - if (this.#started) { + for (const [name, ref] of Object.entries(deps)) { + const extensionPoint = this.#extensionPoints.get( + ref as ExtensionPoint, + ); + if (extensionPoint) { + result.set(name, extensionPoint); + } else { + const factory = await this.#serviceHolder.get( + ref as ServiceRef, + ); + if (factory) { + result.set(name, await factory(pluginId)); + } else { + missingRefs.add(ref); + } + } + } + + if (missingRefs.size > 0) { + const missing = Array.from(missingRefs).join(', '); throw new Error( - 'extension can not be added after the backend has started', + `No extension point or service available for the following ref(s): ${missing}`, ); } - this.#extensions.set(extension, options); + + return Object.fromEntries(result); + } + + add(feature: BackendFeature, options?: TOptions) { + if (this.#started) { + throw new Error('feature can not be added after the backend has started'); + } + this.#features.set(feature, options); } async start(): Promise { - console.log(`Starting backend`); if (this.#started) { throw new Error('Backend has already started'); } this.#started = true; - for (const [extension] of this.#extensions) { - const provides = new Set>(); + for (const [feature] of this.#features) { + const provides = new Set>(); let registerInit: BackendRegisterInit | undefined = undefined; - console.log('Registering', extension.id); - extension.register({ + feature.register({ registerExtensionPoint: (extensionPointRef, impl) => { if (registerInit) { throw new Error('registerExtensionPoint called after registerInit'); @@ -89,7 +105,7 @@ export class BackendInitializer { throw new Error('registerInit must only be called once'); } registerInit = { - id: extension.id, + id: feature.id, provides, consumes: new Set(Object.values(registerOptions.deps)), deps: registerOptions.deps, @@ -100,15 +116,13 @@ export class BackendInitializer { if (!registerInit) { throw new Error( - `registerInit was not called by register in ${extension.id}`, + `registerInit was not called by register in ${feature.id}`, ); } this.#registerInits.push(registerInit); } - this.validateSetup(); - const orderedRegisterResults = this.#resolveInitOrder(this.#registerInits); for (const registerInit of orderedRegisterResults) { @@ -117,8 +131,6 @@ export class BackendInitializer { } } - private validateSetup() {} - #resolveInitOrder(registerInits: Array) { let registerInitsToOrder = registerInits.slice(); const orderedRegisterInits = new Array(); @@ -131,18 +143,17 @@ export class BackendInitializer { for (const registerInit of registerInitsToOrder) { const unInitializedDependents = []; - for (const serviceRef of registerInit.provides) { + for (const provided of registerInit.provides) { if ( registerInitsToOrder.some( - init => init !== registerInit && init.consumes.has(serviceRef), + init => init !== registerInit && init.consumes.has(provided), ) ) { - unInitializedDependents.push(serviceRef); + unInitializedDependents.push(provided); } } if (unInitializedDependents.length === 0) { - console.log(`DEBUG: pushed ${registerInit.id} to results`); orderedRegisterInits.push(registerInit); toRemove.add(registerInit); } @@ -150,6 +161,7 @@ export class BackendInitializer { registerInitsToOrder = registerInitsToOrder.filter(r => !toRemove.has(r)); } + return orderedRegisterInits; } } diff --git a/packages/backend-app-api/src/wiring/BackstageBackend.ts b/packages/backend-app-api/src/wiring/BackstageBackend.ts index 104d2b6fc8..1e09ed77ba 100644 --- a/packages/backend-app-api/src/wiring/BackstageBackend.ts +++ b/packages/backend-app-api/src/wiring/BackstageBackend.ts @@ -16,7 +16,7 @@ import { AnyServiceFactory, - BackendRegistrable, + BackendFeature, } from '@backstage/backend-plugin-api'; import { BackendInitializer } from './BackendInitializer'; import { ServiceRegistry } from './ServiceRegistry'; @@ -31,8 +31,8 @@ export class BackstageBackend implements Backend { this.#initializer = new BackendInitializer(this.#services); } - add(extension: BackendRegistrable): void { - this.#initializer.add(extension); + add(feature: BackendFeature): void { + this.#initializer.add(feature); } async start(): Promise { diff --git a/packages/backend-app-api/src/wiring/index.ts b/packages/backend-app-api/src/wiring/index.ts index 1dd91e30e1..2f55076922 100644 --- a/packages/backend-app-api/src/wiring/index.ts +++ b/packages/backend-app-api/src/wiring/index.ts @@ -14,5 +14,9 @@ * limitations under the License. */ -export type { Backend, CreateBackendOptions } from './types'; -export { createBackend } from './types'; +export type { + Backend, + CreateSpecializedBackendOptions, + ServiceOrExtensionPoint, +} from './types'; +export { createSpecializedBackend } from './types'; diff --git a/packages/backend-app-api/src/wiring/types.ts b/packages/backend-app-api/src/wiring/types.ts index 112fe06b05..0ca40b5660 100644 --- a/packages/backend-app-api/src/wiring/types.ts +++ b/packages/backend-app-api/src/wiring/types.ts @@ -16,34 +16,34 @@ import { AnyServiceFactory, - BackendRegistrable, + BackendFeature, + ExtensionPoint, FactoryFunc, ServiceRef, } from '@backstage/backend-plugin-api'; -import { defaultServiceFactories } from '../services/implementations'; import { BackstageBackend } from './BackstageBackend'; /** * @public */ export interface Backend { - add(extension: BackendRegistrable): void; + add(feature: BackendFeature): void; start(): Promise; } export interface BackendRegisterInit { id: string; - consumes: Set>; - provides: Set>; - deps: { [name: string]: ServiceRef }; + consumes: Set; + provides: Set; + deps: { [name: string]: ServiceOrExtensionPoint }; init: (deps: { [name: string]: unknown }) => Promise; } /** * @public */ -export interface CreateBackendOptions { - apis: AnyServiceFactory[]; +export interface CreateSpecializedBackendOptions { + services: AnyServiceFactory[]; } export type ServiceHolder = { @@ -53,10 +53,15 @@ export type ServiceHolder = { /** * @public */ -export function createBackend(options?: CreateBackendOptions): Backend { - // TODO: merge with provided APIs - return new BackstageBackend([ - ...defaultServiceFactories, - ...(options?.apis ?? []), - ]); +export function createSpecializedBackend( + options: CreateSpecializedBackendOptions, +): Backend { + return new BackstageBackend(options.services); } + +/** + * @public + */ +export type ServiceOrExtensionPoint = + | ExtensionPoint + | ServiceRef; diff --git a/packages/backend-common/CHANGELOG.md b/packages/backend-common/CHANGELOG.md index e712a96470..6068b179e4 100644 --- a/packages/backend-common/CHANGELOG.md +++ b/packages/backend-common/CHANGELOG.md @@ -1,5 +1,40 @@ # @backstage/backend-common +## 0.15.0 + +### Minor Changes + +- 12e9b54f0e: Added back support for when no branch is provided to the `UrlReader` for Bitbucket Server +- 30012e7d8c: - Added `force` and `remoteRef` option to `push` method in `git` actions + - Added `addRemote` and `deleteRemote` methods to `git` actions + +### Patch Changes + +- fc8a5f797b: Improve `scm/git` wrapper around `isomorphic-git` library : + + - Add `checkout` function, + - Add optional `remoteRef` parameter in the `push` function. + +- 5e4dc173f7: Added a second validation to the `dir()` method of ZIP archive responses returned from `readTree()` that ensures that extracted files do not fall outside the target directory. +- 1732a18a7a: Exported `redactLogLine` function to be able to use it in custom loggers and renamed it to `redactWinstonLogLine`. +- 3b7930b3e5: Add support for Bearer Authorization header / token-based auth at Git commands. +- cfa078e255: The `ZipArchiveResponse` now correctly handles corrupt ZIP archives. + + Before this change, certain corrupt ZIP archives either cause the inflater to throw (as expected), or will hang the parser indefinitely. + + By switching out the `zip` parsing library, we now write to a temporary directory, and load from disk which should ensure that the parsing of the `.zip` files are done correctly because `streaming` of `zip` paths is technically impossible without being able to parse the headers at the end of the file. + +- 770d3f92c4: The config prop `ensureExists` now applies to schema creation when `pluginDivisionMode` is set to `schema`. This means schemas will no longer accidentally be automatically created when `ensureExists` is set to `false`. +- 29f782eb37: Updated dependency `@types/luxon` to `^3.0.0`. +- Updated dependencies + - @backstage/integration@1.3.0 + +## 0.15.0-next.2 + +### Patch Changes + +- 5e4dc173f7: Added a second validation to the `dir()` method of ZIP archive responses returned from `readTree()` that ensures that extracted files do not fall outside the target directory. + ## 0.15.0-next.1 ### Patch Changes diff --git a/packages/backend-common/package.json b/packages/backend-common/package.json index 1e89cf13df..ed84bec016 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.15.0-next.1", + "version": "0.15.0", "main": "src/index.ts", "types": "src/index.ts", "private": false, @@ -38,7 +38,7 @@ "@backstage/config": "^1.0.1", "@backstage/config-loader": "^1.1.3", "@backstage/errors": "^1.1.0", - "@backstage/integration": "^1.3.0-next.1", + "@backstage/integration": "^1.3.0", "@backstage/types": "^1.0.0", "@google-cloud/storage": "^6.0.0", "@keyv/redis": "^2.2.3", @@ -91,8 +91,8 @@ } }, "devDependencies": { - "@backstage/backend-test-utils": "^0.1.27-next.0", - "@backstage/cli": "^0.18.1-next.0", + "@backstage/backend-test-utils": "^0.1.27", + "@backstage/cli": "^0.18.1", "@types/archiver": "^5.1.0", "@types/base64-stream": "^1.0.2", "@types/compression": "^1.7.0", diff --git a/packages/backend-common/src/reading/__fixtures__/mallory.zip b/packages/backend-common/src/reading/__fixtures__/mallory.zip new file mode 100644 index 0000000000..e45bd798b3 Binary files /dev/null and b/packages/backend-common/src/reading/__fixtures__/mallory.zip differ diff --git a/packages/backend-common/src/reading/tree/ZipArchiveResponse.test.ts b/packages/backend-common/src/reading/tree/ZipArchiveResponse.test.ts index f1915cf99b..427c237802 100644 --- a/packages/backend-common/src/reading/tree/ZipArchiveResponse.test.ts +++ b/packages/backend-common/src/reading/tree/ZipArchiveResponse.test.ts @@ -28,6 +28,9 @@ const archiveDataCorrupted = fs.readFileSync( const archiveDataWithExtraDir = fs.readFileSync( resolvePath(__filename, '../../__fixtures__/mock-with-extra-root-dir.zip'), ); +const archiveWithMaliciousEntry = fs.readFileSync( + resolvePath(__filename, '../../__fixtures__/mallory.zip'), +); describe('ZipArchiveResponse', () => { beforeEach(() => { @@ -35,6 +38,7 @@ describe('ZipArchiveResponse', () => { '/test-archive.zip': archiveData, '/test-archive-with-extra-root-dir.zip': archiveDataWithExtraDir, '/test-archive-corrupted.zip': archiveDataCorrupted, + '/test-archive-malicious.zip': archiveWithMaliciousEntry, '/tmp': mockFs.directory(), }); }); @@ -167,4 +171,22 @@ describe('ZipArchiveResponse', () => { 'invalid comment length. expected: 55. found: 0', ); }); + + it('should throw on entries with a path outside the destination dir', async () => { + const stream = fs.createReadStream('/test-archive-malicious.zip'); + + const res = new ZipArchiveResponse(stream, '', '/tmp', 'etag'); + await expect(res.files()).rejects.toThrow( + 'invalid relative path: ../side.txt', + ); + }); + + it('should throw on entries that attempt to write outside destination dir', async () => { + const stream = fs.createReadStream('/test-archive-malicious.zip'); + + const res = new ZipArchiveResponse(stream, '', '/tmp', 'etag'); + await expect(res.dir()).rejects.toThrow( + 'invalid relative path: ../side.txt', + ); + }); }); diff --git a/packages/backend-common/src/reading/tree/ZipArchiveResponse.ts b/packages/backend-common/src/reading/tree/ZipArchiveResponse.ts index 1a6658b0c2..4100af3d57 100644 --- a/packages/backend-common/src/reading/tree/ZipArchiveResponse.ts +++ b/packages/backend-common/src/reading/tree/ZipArchiveResponse.ts @@ -25,6 +25,7 @@ import { ReadTreeResponseFile, } from '../types'; import { streamToBuffer } from './util'; +import { resolveSafeChildPath } from '../../paths'; /** * Wraps a zip archive stream into a tree response reader. @@ -187,10 +188,10 @@ export class ZipArchiveResponse implements ReadTreeResponse { const dirname = platformPath.dirname(entryPath); if (dirname) { - await fs.mkdirp(platformPath.join(dir, dirname)); + await fs.mkdirp(resolveSafeChildPath(dir, dirname)); } return new Promise(async (resolve, reject) => { - const file = fs.createWriteStream(platformPath.join(dir, entryPath)); + const file = fs.createWriteStream(resolveSafeChildPath(dir, entryPath)); file.on('finish', resolve); content.on('error', reject); diff --git a/packages/backend-defaults/.eslintrc.js b/packages/backend-defaults/.eslintrc.js new file mode 100644 index 0000000000..e2a53a6ad2 --- /dev/null +++ b/packages/backend-defaults/.eslintrc.js @@ -0,0 +1 @@ +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/packages/backend-defaults/CHANGELOG.md b/packages/backend-defaults/CHANGELOG.md new file mode 100644 index 0000000000..2d80e84fc2 --- /dev/null +++ b/packages/backend-defaults/CHANGELOG.md @@ -0,0 +1,14 @@ +# @backstage/backend-defaults + +## 0.1.0 + +### Minor Changes + +- 5df230d48c: Introduced a new `backend-defaults` package carrying `createBackend` which was previously exported from `backend-app-api`. + The `backend-app-api` package now exports the `createSpecializedBacked` that does not add any service factories by default. + +### Patch Changes + +- Updated dependencies + - @backstage/backend-app-api@0.2.0 + - @backstage/backend-plugin-api@0.1.1 diff --git a/packages/backend-defaults/README.md b/packages/backend-defaults/README.md new file mode 100644 index 0000000000..3128159f7c --- /dev/null +++ b/packages/backend-defaults/README.md @@ -0,0 +1,19 @@ +# @backstage/backend-defaults + +**This package is HIGHLY EXPERIMENTAL, do not use this for production** + +This package provides the core API used by Backstage backend apps. + +## Installation + +Add the library to your backend app package: + +```bash +# From your Backstage root directory +yarn add --cwd packages/backend @backstage/backend-defaults +``` + +## Documentation + +- [Backstage Readme](https://github.com/backstage/backstage/blob/master/README.md) +- [Backstage Documentation](https://github.com/backstage/backstage/blob/master/docs/README.md) diff --git a/packages/backend-defaults/api-report.md b/packages/backend-defaults/api-report.md new file mode 100644 index 0000000000..4c0fb80714 --- /dev/null +++ b/packages/backend-defaults/api-report.md @@ -0,0 +1,17 @@ +## API Report File for "@backstage/backend-defaults" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts +import { AnyServiceFactory } from '@backstage/backend-plugin-api'; +import { Backend } from '@backstage/backend-app-api'; + +// @public (undocumented) +export function createBackend(options?: CreateBackendOptions): Backend; + +// @public (undocumented) +export interface CreateBackendOptions { + // (undocumented) + services?: AnyServiceFactory[]; +} +``` diff --git a/packages/backend-defaults/package.json b/packages/backend-defaults/package.json new file mode 100644 index 0000000000..1270029909 --- /dev/null +++ b/packages/backend-defaults/package.json @@ -0,0 +1,45 @@ +{ + "name": "@backstage/backend-defaults", + "description": "Backend defaults used by Backstage backend apps", + "version": "0.1.0", + "main": "src/index.ts", + "types": "src/index.ts", + "private": false, + "publishConfig": { + "access": "public", + "main": "dist/index.cjs.js", + "types": "dist/index.d.ts" + }, + "backstage": { + "role": "node-library" + }, + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "packages/backend-defaults" + }, + "keywords": [ + "backstage" + ], + "license": "Apache-2.0", + "scripts": { + "build": "backstage-cli package build", + "lint": "backstage-cli package lint", + "test": "backstage-cli package test", + "prepack": "backstage-cli package prepack", + "postpack": "backstage-cli package postpack", + "clean": "backstage-cli package clean", + "start": "backstage-cli package start" + }, + "dependencies": { + "@backstage/backend-app-api": "^0.2.0", + "@backstage/backend-plugin-api": "^0.1.1" + }, + "devDependencies": { + "@backstage/cli": "^0.18.1" + }, + "files": [ + "dist" + ] +} diff --git a/packages/backend-defaults/src/CreateBackend.ts b/packages/backend-defaults/src/CreateBackend.ts new file mode 100644 index 0000000000..7cc116a052 --- /dev/null +++ b/packages/backend-defaults/src/CreateBackend.ts @@ -0,0 +1,70 @@ +/* + * 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 { + Backend, + cacheFactory, + configFactory, + createSpecializedBackend, + databaseFactory, + discoveryFactory, + httpRouterFactory, + loggerFactory, + permissionsFactory, + schedulerFactory, + tokenManagerFactory, + urlReaderFactory, +} from '@backstage/backend-app-api'; +import { AnyServiceFactory } from '@backstage/backend-plugin-api'; + +export const defaultServiceFactories = [ + cacheFactory, + configFactory, + databaseFactory, + discoveryFactory, + loggerFactory, + permissionsFactory, + schedulerFactory, + tokenManagerFactory, + urlReaderFactory, + httpRouterFactory, +]; + +/** + * @public + */ +export interface CreateBackendOptions { + services?: AnyServiceFactory[]; +} + +/** + * @public + */ +export function createBackend(options?: CreateBackendOptions): Backend { + const services = new Map( + defaultServiceFactories.map(sf => [sf.service.id, sf]), + ); + + if (options?.services) { + for (const sf of options.services) { + services.set(sf.service.id, sf); + } + } + + return createSpecializedBackend({ + services: Array.from(services.values()), + }); +} diff --git a/packages/backend-defaults/src/index.ts b/packages/backend-defaults/src/index.ts new file mode 100644 index 0000000000..b6ae2f1333 --- /dev/null +++ b/packages/backend-defaults/src/index.ts @@ -0,0 +1,24 @@ +/* + * 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. + */ + +/** + * Backend defaults used by Backstage backend apps + * + * @packageDocumentation + */ + +export type { CreateBackendOptions } from './CreateBackend'; +export { createBackend } from './CreateBackend'; diff --git a/packages/backend-next/CHANGELOG.md b/packages/backend-next/CHANGELOG.md index 4226d86709..b8706c0e51 100644 --- a/packages/backend-next/CHANGELOG.md +++ b/packages/backend-next/CHANGELOG.md @@ -1,5 +1,14 @@ # example-backend-next +## 0.0.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.5.0 + - @backstage/backend-defaults@0.1.0 + - @backstage/plugin-catalog-backend@1.3.1 + ## 0.0.2-next.0 ### Patch Changes diff --git a/packages/backend-next/package.json b/packages/backend-next/package.json index 934ddd3a71..056b6c5722 100644 --- a/packages/backend-next/package.json +++ b/packages/backend-next/package.json @@ -1,6 +1,6 @@ { "name": "example-backend-next", - "version": "0.0.2-next.0", + "version": "0.0.2", "main": "dist/index.cjs.js", "types": "src/index.ts", "license": "Apache-2.0", @@ -25,12 +25,12 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-app-api": "^0.1.1-next.0", - "@backstage/plugin-catalog-backend": "^1.3.1-next.0", - "@backstage/plugin-scaffolder-backend": "^1.5.0-next.0" + "@backstage/backend-defaults": "^0.1.0", + "@backstage/plugin-catalog-backend": "^1.3.1", + "@backstage/plugin-scaffolder-backend": "^1.5.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.0" + "@backstage/cli": "^0.18.1" }, "files": [ "dist" diff --git a/packages/backend-next/src/index.ts b/packages/backend-next/src/index.ts index 6463dc7ed5..ec7ebc0c0d 100644 --- a/packages/backend-next/src/index.ts +++ b/packages/backend-next/src/index.ts @@ -14,13 +14,11 @@ * limitations under the License. */ -import { createBackend } from '@backstage/backend-app-api'; import { catalogPlugin } from '@backstage/plugin-catalog-backend'; import { scaffolderCatalogModule } from '@backstage/plugin-scaffolder-backend'; +import { createBackend } from '@backstage/backend-defaults'; -const backend = createBackend({ - apis: [], -}); +const backend = createBackend(); backend.add(catalogPlugin({})); backend.add(scaffolderCatalogModule({})); diff --git a/packages/backend-plugin-api/CHANGELOG.md b/packages/backend-plugin-api/CHANGELOG.md index f6003e3f59..71987fd616 100644 --- a/packages/backend-plugin-api/CHANGELOG.md +++ b/packages/backend-plugin-api/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/backend-plugin-api +## 0.1.1 + +### Patch Changes + +- 0599732ec0: Refactored experimental backend system with new type names. +- 34c2f5aca1: The factory returned by `createBackendPlugin` and `createBackendModule` no longer require a parameter to be passed if the options are optional. +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/backend-tasks@0.3.4 + ## 0.1.1-next.0 ### Patch Changes diff --git a/packages/backend-plugin-api/api-report.md b/packages/backend-plugin-api/api-report.md index df8474d670..fa5097be64 100644 --- a/packages/backend-plugin-api/api-report.md +++ b/packages/backend-plugin-api/api-report.md @@ -26,23 +26,11 @@ export type AnyServiceFactory = ServiceFactory< >; // @public (undocumented) -export interface BackendInitRegistry { +export interface BackendFeature { // (undocumented) - registerExtensionPoint( - ref: ServiceRef, - impl: TExtensionPoint, - ): void; + id: string; // (undocumented) - registerInit< - Deps extends { - [name in string]: unknown; - }, - >(options: { - deps: { - [name in keyof Deps]: ServiceRef; - }; - init: (deps: Deps) => Promise; - }): void; + register(reg: BackendRegistrationPoints): void; } // @public (undocumented) @@ -53,7 +41,7 @@ export interface BackendModuleConfig { pluginId: string; // (undocumented) register( - reg: Omit, + reg: Omit, options: TOptions, ): void; } @@ -63,15 +51,27 @@ export interface BackendPluginConfig { // (undocumented) id: string; // (undocumented) - register(reg: BackendInitRegistry, options: TOptions): void; + register(reg: BackendRegistrationPoints, options: TOptions): void; } // @public (undocumented) -export interface BackendRegistrable { +export interface BackendRegistrationPoints { // (undocumented) - id: string; + registerExtensionPoint( + ref: ExtensionPoint, + impl: TExtensionPoint, + ): void; // (undocumented) - register(reg: BackendInitRegistry): void; + registerInit< + Deps extends { + [name in string]: unknown; + }, + >(options: { + deps: { + [name in keyof Deps]: ServiceRef | ExtensionPoint; + }; + init(deps: Deps): Promise; + }): void; } // @public (undocumented) @@ -83,12 +83,16 @@ export const configServiceRef: ServiceRef; // @public (undocumented) export function createBackendModule( config: BackendModuleConfig, -): (option: TOptions) => BackendRegistrable; +): undefined extends TOptions + ? (options?: TOptions) => BackendFeature + : (options: TOptions) => BackendFeature; // @public (undocumented) export function createBackendPlugin( config: BackendPluginConfig, -): (option: TOptions) => BackendRegistrable; +): undefined extends TOptions + ? (options?: TOptions) => BackendFeature + : (options: TOptions) => BackendFeature; // @public (undocumented) export function createExtensionPoint(options: { diff --git a/packages/backend-plugin-api/package.json b/packages/backend-plugin-api/package.json index 9bb6fba154..9a4e9ce8a8 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.1.1-next.0", + "version": "0.1.1", "main": "src/index.ts", "types": "src/index.ts", "private": false, @@ -35,16 +35,16 @@ }, "dependencies": { "@backstage/config": "^1.0.1", - "@backstage/backend-common": "^0.15.0-next.0", + "@backstage/backend-common": "^0.15.0", "@backstage/plugin-permission-common": "^0.6.3", - "@backstage/backend-tasks": "^0.3.4-next.0", + "@backstage/backend-tasks": "^0.3.4", "@types/express": "^4.17.6", "express": "^4.17.1", "winston": "^3.2.1", "winston-transport": "^4.5.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.0" + "@backstage/cli": "^0.18.1" }, "files": [ "dist", diff --git a/packages/backend-plugin-api/src/wiring/factories.test.ts b/packages/backend-plugin-api/src/wiring/factories.test.ts new file mode 100644 index 0000000000..6cfcdd06cc --- /dev/null +++ b/packages/backend-plugin-api/src/wiring/factories.test.ts @@ -0,0 +1,89 @@ +/* + * 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 { + createBackendModule, + createBackendPlugin, + createExtensionPoint, +} from './factories'; + +describe('createExtensionPoint', () => { + it('should create an ExtensionPoint', () => { + const extensionPoint = createExtensionPoint({ id: 'x' }); + expect(extensionPoint).toBeDefined(); + expect(extensionPoint.id).toBe('x'); + expect(() => extensionPoint.T).toThrow(); + expect(String(extensionPoint)).toBe('extensionPoint{x}'); + }); +}); + +describe('createBackendPlugin', () => { + it('should create an BackendPlugin', () => { + const plugin = createBackendPlugin({ + id: 'x', + register(_reg, _options: { a: string }) {}, + }); + expect(plugin).toBeDefined(); + expect(plugin({ a: 'a' })).toBeDefined(); + expect(plugin({ a: 'a' }).id).toBe('x'); + // @ts-expect-error + expect(plugin()).toBeDefined(); + // @ts-expect-error + expect(plugin({ b: 'b' })).toBeDefined(); + }); + + it('should create plugins with optional options', () => { + const plugin = createBackendPlugin({ + id: 'x', + register(_reg, _options?: { a: string }) {}, + }); + expect(plugin).toBeDefined(); + expect(plugin({ a: 'a' })).toBeDefined(); + expect(plugin()).toBeDefined(); + // @ts-expect-error + expect(plugin({ b: 'b' })).toBeDefined(); + }); +}); + +describe('createBackendModule', () => { + it('should create an BackendModule', () => { + const mod = createBackendModule({ + pluginId: 'x', + moduleId: 'y', + register(_reg, _options: { a: string }) {}, + }); + expect(mod).toBeDefined(); + expect(mod({ a: 'a' })).toBeDefined(); + expect(mod({ a: 'a' }).id).toBe('x.y'); + // @ts-expect-error + expect(mod()).toBeDefined(); + // @ts-expect-error + expect(mod({ b: 'b' })).toBeDefined(); + }); + + it('should create modules with optional options', () => { + const mod = createBackendModule({ + pluginId: 'x', + moduleId: 'y', + register(_reg, _options?: { a: string }) {}, + }); + expect(mod).toBeDefined(); + expect(mod({ a: 'a' })).toBeDefined(); + expect(mod()).toBeDefined(); + // @ts-expect-error + expect(mod({ b: 'b' })).toBeDefined(); + }); +}); diff --git a/packages/backend-plugin-api/src/wiring/factories.ts b/packages/backend-plugin-api/src/wiring/factories.ts new file mode 100644 index 0000000000..68f13f6c30 --- /dev/null +++ b/packages/backend-plugin-api/src/wiring/factories.ts @@ -0,0 +1,82 @@ +/* + * 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 { + BackendRegistrationPoints, + BackendFeature, + ExtensionPoint, +} from './types'; + +/** @public */ +export function createExtensionPoint(options: { + id: string; +}): ExtensionPoint { + return { + id: options.id, + get T(): T { + throw new Error(`tried to read ExtensionPoint.T of ${this}`); + }, + toString() { + return `extensionPoint{${options.id}}`; + }, + $$ref: 'extension-point', // TODO: declare + }; +} + +/** @public */ +export interface BackendPluginConfig { + id: string; + register(reg: BackendRegistrationPoints, options: TOptions): void; +} + +/** @public */ +export function createBackendPlugin( + config: BackendPluginConfig, +): undefined extends TOptions + ? (options?: TOptions) => BackendFeature + : (options: TOptions) => BackendFeature { + return (options?: TOptions) => ({ + id: config.id, + register(register: BackendRegistrationPoints) { + return config.register(register, options!); + }, + }); +} + +/** @public */ +export interface BackendModuleConfig { + pluginId: string; + moduleId: string; + register( + reg: Omit, + options: TOptions, + ): void; +} + +/** @public */ +export function createBackendModule( + config: BackendModuleConfig, +): undefined extends TOptions + ? (options?: TOptions) => BackendFeature + : (options: TOptions) => BackendFeature { + return (options?: TOptions) => ({ + id: `${config.pluginId}.${config.moduleId}`, + register(register: BackendRegistrationPoints) { + // TODO: Hide registerExtensionPoint + return config.register(register, options!); + }, + }); +} diff --git a/packages/backend-plugin-api/src/wiring/index.ts b/packages/backend-plugin-api/src/wiring/index.ts index 9340dc8fa9..8f85edb2eb 100644 --- a/packages/backend-plugin-api/src/wiring/index.ts +++ b/packages/backend-plugin-api/src/wiring/index.ts @@ -14,5 +14,14 @@ * limitations under the License. */ -export type { BackendRegistrable } from './types'; -export * from './types'; +export type { BackendModuleConfig, BackendPluginConfig } from './factories'; +export { + createBackendModule, + createBackendPlugin, + createExtensionPoint, +} from './factories'; +export type { + BackendRegistrationPoints, + BackendFeature, + ExtensionPoint, +} from './types'; diff --git a/packages/backend-plugin-api/src/wiring/types.ts b/packages/backend-plugin-api/src/wiring/types.ts index 2b0bef16f7..cdb56ea2e4 100644 --- a/packages/backend-plugin-api/src/wiring/types.ts +++ b/packages/backend-plugin-api/src/wiring/types.ts @@ -36,78 +36,22 @@ export type ExtensionPoint = { }; /** @public */ -export function createExtensionPoint(options: { - id: string; -}): ExtensionPoint { - return { - id: options.id, - get T(): T { - throw new Error(`tried to read ExtensionPoint.T of ${this}`); - }, - toString() { - return `extensionPoint{${options.id}}`; - }, - $$ref: 'extension-point', // TODO: declare - }; -} - -/** @public */ -export interface BackendInitRegistry { +export interface BackendRegistrationPoints { registerExtensionPoint( - ref: ServiceRef, + ref: ExtensionPoint, impl: TExtensionPoint, ): void; registerInit(options: { - deps: { [name in keyof Deps]: ServiceRef }; - init: (deps: Deps) => Promise; + deps: { + [name in keyof Deps]: ServiceRef | ExtensionPoint; + }; + init(deps: Deps): Promise; }): void; } /** @public */ -export interface BackendRegistrable { +export interface BackendFeature { + // TODO(Rugvip): Try to get rid of the ID at this level, allowing for a feature to register multiple features as a bundle id: string; - register(reg: BackendInitRegistry): void; -} - -/** @public */ -export interface BackendPluginConfig { - id: string; - register(reg: BackendInitRegistry, options: TOptions): void; -} - -// TODO: Make option optional in the returned factory if they are indeed optional -/** @public */ -export function createBackendPlugin( - config: BackendPluginConfig, -): (option: TOptions) => BackendRegistrable { - return options => ({ - id: config.id, - register(register) { - return config.register(register, options); - }, - }); -} - -/** @public */ -export interface BackendModuleConfig { - pluginId: string; - moduleId: string; - register( - reg: Omit, - options: TOptions, - ): void; -} - -// TODO: Make option optional in the returned factory if they are indeed optional -/** @public */ -export function createBackendModule( - config: BackendModuleConfig, -): (option: TOptions) => BackendRegistrable { - return options => ({ - id: `${config.pluginId}.${config.moduleId}`, - register(register) { - // TODO: Hide registerExtensionPoint - return config.register(register, options); - }, - }); + register(reg: BackendRegistrationPoints): void; } diff --git a/packages/backend-tasks/CHANGELOG.md b/packages/backend-tasks/CHANGELOG.md index 96e03f0232..59e5c8ca8a 100644 --- a/packages/backend-tasks/CHANGELOG.md +++ b/packages/backend-tasks/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/backend-tasks +## 0.3.4 + +### Patch Changes + +- 29f782eb37: Updated dependency `@types/luxon` to `^3.0.0`. +- Updated dependencies + - @backstage/backend-common@0.15.0 + ## 0.3.4-next.0 ### Patch Changes diff --git a/packages/backend-tasks/package.json b/packages/backend-tasks/package.json index 7322446c40..7d8886d77b 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.3.4-next.0", + "version": "0.3.4", "main": "src/index.ts", "types": "src/index.ts", "private": false, @@ -33,7 +33,7 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/backend-common": "^0.15.0-next.0", + "@backstage/backend-common": "^0.15.0", "@backstage/config": "^1.0.1", "@backstage/errors": "^1.1.0", "@backstage/types": "^1.0.0", @@ -48,8 +48,8 @@ "zod": "^3.9.5" }, "devDependencies": { - "@backstage/backend-test-utils": "^0.1.27-next.0", - "@backstage/cli": "^0.18.1-next.0", + "@backstage/backend-test-utils": "^0.1.27", + "@backstage/cli": "^0.18.1", "@types/cron": "^2.0.0", "wait-for-expect": "^3.0.2" }, diff --git a/packages/backend-tasks/src/tasks/TaskScheduler.ts b/packages/backend-tasks/src/tasks/TaskScheduler.ts index f1668a6691..f14fb9fc2b 100644 --- a/packages/backend-tasks/src/tasks/TaskScheduler.ts +++ b/packages/backend-tasks/src/tasks/TaskScheduler.ts @@ -58,9 +58,12 @@ export class TaskScheduler { */ forPlugin(pluginId: string): PluginTaskScheduler { const databaseFactory = once(async () => { - const knex = await this.databaseManager.forPlugin(pluginId).getClient(); + const databaseManager = this.databaseManager.forPlugin(pluginId); + const knex = await databaseManager.getClient(); - await migrateBackendTasks(knex); + if (!databaseManager.migrations?.skip) { + await migrateBackendTasks(knex); + } const janitor = new PluginTaskSchedulerJanitor({ knex, diff --git a/packages/backend-test-utils/CHANGELOG.md b/packages/backend-test-utils/CHANGELOG.md index 1b37f615ee..2e1b1bea6a 100644 --- a/packages/backend-test-utils/CHANGELOG.md +++ b/packages/backend-test-utils/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/backend-test-utils +## 0.1.27 + +### Patch Changes + +- 0599732ec0: Refactored experimental backend system with new type names. +- 56e1b4b89c: Added alpha test helpers for the new experimental backend system. +- Updated dependencies + - @backstage/cli@0.18.1 + - @backstage/backend-common@0.15.0 + - @backstage/backend-app-api@0.2.0 + - @backstage/backend-plugin-api@0.1.1 + ## 0.1.27-next.0 ### Patch Changes diff --git a/packages/backend-test-utils/api-report.md b/packages/backend-test-utils/api-report.md index cba8953432..b8881e659d 100644 --- a/packages/backend-test-utils/api-report.md +++ b/packages/backend-test-utils/api-report.md @@ -3,7 +3,11 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts +import { AnyServiceFactory } from '@backstage/backend-plugin-api'; +import { BackendFeature } from '@backstage/backend-plugin-api'; +import { ExtensionPoint } from '@backstage/backend-plugin-api'; import { Knex } from 'knex'; +import { ServiceRef } from '@backstage/backend-plugin-api'; // @public (undocumented) export function isDockerDisabledForTests(): boolean; @@ -15,6 +19,38 @@ export function setupRequestMockHandlers(worker: { resetHandlers: () => void; }): void; +// @alpha (undocumented) +export function startTestBackend< + TServices extends any[], + TExtensionPoints extends any[], +>(options: TestBackendOptions): Promise; + +// @alpha (undocumented) +export interface TestBackendOptions< + TServices extends any[], + TExtensionPoints extends any[], +> { + // (undocumented) + extensionPoints?: readonly [ + ...{ + [index in keyof TExtensionPoints]: [ + ExtensionPoint, + Partial, + ]; + }, + ]; + // (undocumented) + features?: BackendFeature[]; + // (undocumented) + services?: readonly [ + ...{ + [index in keyof TServices]: + | AnyServiceFactory + | [ServiceRef, Partial]; + }, + ]; +} + // @public export type TestDatabaseId = | 'POSTGRES_13' diff --git a/packages/backend-test-utils/package.json b/packages/backend-test-utils/package.json index c3ba763bd2..31576ce77b 100644 --- a/packages/backend-test-utils/package.json +++ b/packages/backend-test-utils/package.json @@ -1,14 +1,15 @@ { "name": "@backstage/backend-test-utils", "description": "Test helpers library for Backstage backends", - "version": "0.1.27-next.0", + "version": "0.1.27", "main": "src/index.ts", "types": "src/index.ts", "private": false, "publishConfig": { "access": "public", "main": "dist/index.cjs.js", - "types": "dist/index.d.ts" + "types": "dist/index.d.ts", + "alphaTypes": "dist/index.alpha.d.ts" }, "backstage": { "role": "node-library" @@ -25,7 +26,7 @@ ], "license": "Apache-2.0", "scripts": { - "build": "backstage-cli package build", + "build": "backstage-cli package build --experimental-type-build", "lint": "backstage-cli package lint", "test": "backstage-cli package test", "prepack": "backstage-cli package prepack", @@ -34,8 +35,10 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/backend-common": "^0.15.0-next.0", - "@backstage/cli": "^0.18.1-next.0", + "@backstage/backend-common": "^0.15.0", + "@backstage/backend-app-api": "^0.2.0", + "@backstage/backend-plugin-api": "^0.1.1", + "@backstage/cli": "^0.18.1", "@backstage/config": "^1.0.1", "better-sqlite3": "^7.5.0", "knex": "^2.0.0", @@ -46,9 +49,10 @@ "uuid": "^8.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.0" + "@backstage/cli": "^0.18.1" }, "files": [ - "dist" + "dist", + "alpha" ] } diff --git a/packages/backend-test-utils/src/index.ts b/packages/backend-test-utils/src/index.ts index 5fef4e6b55..ae937d2fc8 100644 --- a/packages/backend-test-utils/src/index.ts +++ b/packages/backend-test-utils/src/index.ts @@ -22,4 +22,5 @@ export * from './database'; export * from './msw'; +export * from './next'; export * from './util'; diff --git a/packages/backend-test-utils/src/next/index.ts b/packages/backend-test-utils/src/next/index.ts new file mode 100644 index 0000000000..9bb5431772 --- /dev/null +++ b/packages/backend-test-utils/src/next/index.ts @@ -0,0 +1,17 @@ +/* + * Copyright 2022 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export * from './wiring'; diff --git a/packages/backend-test-utils/src/next/wiring/TestBackend.test.ts b/packages/backend-test-utils/src/next/wiring/TestBackend.test.ts new file mode 100644 index 0000000000..488a258388 --- /dev/null +++ b/packages/backend-test-utils/src/next/wiring/TestBackend.test.ts @@ -0,0 +1,97 @@ +/* + * 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 { + createBackendModule, + createExtensionPoint, + createServiceFactory, + createServiceRef, +} from '@backstage/backend-plugin-api'; +import { startTestBackend } from './TestBackend'; + +describe('TestBackend', () => { + it('should get a type error if service implementation does not match', async () => { + type Obj = { a: string; b: string }; + const serviceRef = createServiceRef({ id: 'a' }); + const extensionPoint1 = createExtensionPoint({ id: 'b1' }); + const extensionPoint2 = createExtensionPoint({ id: 'b2' }); + const extensionPoint3 = createExtensionPoint({ id: 'b3' }); + const extensionPoint4 = createExtensionPoint({ id: 'b4' }); + const extensionPoint5 = createExtensionPoint({ id: 'b5' }); + await startTestBackend({ + services: [ + // @ts-expect-error + [extensionPoint1, { a: 'a' }], + [serviceRef, { a: 'a' }], + [serviceRef, { a: 'a', b: 'b' }], + // @ts-expect-error + [serviceRef, { c: 'c' }], + // @ts-expect-error + [serviceRef, { a: 'a', c: 'c' }], + // @ts-expect-error + [serviceRef, { a: 'a', b: 'b', c: 'c' }], + ], + extensionPoints: [ + // @ts-expect-error + [serviceRef, { a: 'a' }], + [extensionPoint1, { a: 'a' }], + [extensionPoint2, { a: 'a', b: 'b' }], + // @ts-expect-error + [extensionPoint3, { c: 'c' }], + // @ts-expect-error + [extensionPoint4, { a: 'a', c: 'c' }], + // @ts-expect-error + [extensionPoint5, { a: 'a', b: 'b', c: 'c' }], + ], + }); + expect(1).toBe(1); + }); + + it('should start the test backend', async () => { + const testRef = createServiceRef<(v: string) => void>({ id: 'test' }); + const testFn = jest.fn(); + + const sf = createServiceFactory({ + deps: {}, + service: testRef, + factory: async () => { + return async () => testFn; + }, + }); + + const testModule = createBackendModule({ + moduleId: 'test.module', + pluginId: 'test', + register(env) { + env.registerInit({ + deps: { + test: testRef, + }, + async init({ test }) { + test('winning'); + }, + }); + }, + }); + + await startTestBackend({ + services: [sf], + features: [testModule({})], + }); + + expect(testFn).toBeCalledWith('winning'); + }); +}); diff --git a/packages/backend-test-utils/src/next/wiring/TestBackend.ts b/packages/backend-test-utils/src/next/wiring/TestBackend.ts new file mode 100644 index 0000000000..b9276fa9b9 --- /dev/null +++ b/packages/backend-test-utils/src/next/wiring/TestBackend.ts @@ -0,0 +1,95 @@ +/* + * 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 { createSpecializedBackend } from '@backstage/backend-app-api'; +import { + AnyServiceFactory, + ServiceRef, + createServiceFactory, + BackendFeature, + ExtensionPoint, +} from '@backstage/backend-plugin-api'; + +/** @alpha */ +export interface TestBackendOptions< + TServices extends any[], + TExtensionPoints extends any[], +> { + services?: readonly [ + ...{ + [index in keyof TServices]: + | AnyServiceFactory + | [ServiceRef, Partial]; + }, + ]; + extensionPoints?: readonly [ + ...{ + [index in keyof TExtensionPoints]: [ + ExtensionPoint, + Partial, + ]; + }, + ]; + features?: BackendFeature[]; +} + +/** @alpha */ +export async function startTestBackend< + TServices extends any[], + TExtensionPoints extends any[], +>(options: TestBackendOptions): Promise { + const { + services = [], + extensionPoints = [], + features = [], + ...otherOptions + } = options; + + const factories = services.map(serviceDef => { + if (Array.isArray(serviceDef)) { + // if type is ExtensionPoint? + // do something differently? + return createServiceFactory({ + service: serviceDef[0], + deps: {}, + factory: async () => async () => serviceDef[1], + }); + } + return serviceDef as AnyServiceFactory; + }); + + const backend = createSpecializedBackend({ + ...otherOptions, + services: factories, + }); + + backend.add({ + id: `---test-extension-point-registrar`, + register(reg) { + for (const [ref, impl] of extensionPoints) { + reg.registerExtensionPoint(ref, impl); + } + + reg.registerInit({ deps: {}, async init() {} }); + }, + }); + + for (const feature of features) { + backend.add(feature); + } + + await backend.start(); +} diff --git a/packages/backend-test-utils/src/next/wiring/index.ts b/packages/backend-test-utils/src/next/wiring/index.ts new file mode 100644 index 0000000000..eb7b773e33 --- /dev/null +++ b/packages/backend-test-utils/src/next/wiring/index.ts @@ -0,0 +1,18 @@ +/* + * Copyright 2022 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export { startTestBackend } from './TestBackend'; +export type { TestBackendOptions } from './TestBackend'; diff --git a/packages/backend/CHANGELOG.md b/packages/backend/CHANGELOG.md index 56266d0a0e..670ce31973 100644 --- a/packages/backend/CHANGELOG.md +++ b/packages/backend/CHANGELOG.md @@ -1,5 +1,41 @@ # example-backend +## 0.2.74 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/plugin-kubernetes-backend@0.7.1 + - @backstage/integration@1.3.0 + - @backstage/plugin-scaffolder-backend@1.5.0 + - @backstage/plugin-auth-backend@0.15.1 + - @backstage/plugin-graphql-backend@0.1.25 + - @backstage/backend-tasks@0.3.4 + - @backstage/plugin-tech-insights-node@0.3.3 + - @backstage/plugin-catalog-backend@1.3.1 + - example-app@0.2.74 + - @backstage/plugin-app-backend@0.3.35 + - @backstage/plugin-auth-node@0.2.4 + - @backstage/plugin-azure-devops-backend@0.3.14 + - @backstage/plugin-badges-backend@0.1.29 + - @backstage/plugin-code-coverage-backend@0.2.1 + - @backstage/plugin-jenkins-backend@0.1.25 + - @backstage/plugin-kafka-backend@0.2.28 + - @backstage/plugin-permission-backend@0.5.10 + - @backstage/plugin-permission-node@0.6.4 + - @backstage/plugin-proxy-backend@0.2.29 + - @backstage/plugin-rollbar-backend@0.1.32 + - @backstage/plugin-scaffolder-backend-module-rails@0.4.3 + - @backstage/plugin-search-backend@1.0.1 + - @backstage/plugin-search-backend-module-elasticsearch@1.0.1 + - @backstage/plugin-search-backend-module-pg@0.3.6 + - @backstage/plugin-search-backend-node@1.0.1 + - @backstage/plugin-tech-insights-backend@0.5.1 + - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.19 + - @backstage/plugin-techdocs-backend@1.2.1 + - @backstage/plugin-todo-backend@0.1.32 + ## 0.2.74-next.0 ### Patch Changes diff --git a/packages/backend/Dockerfile b/packages/backend/Dockerfile index 86f6e17861..ed18da530b 100644 --- a/packages/backend/Dockerfile +++ b/packages/backend/Dockerfile @@ -11,24 +11,30 @@ FROM node:16-bullseye-slim -WORKDIR /app - -# install sqlite3 dependencies, you can skip this if you don't use sqlite3 in the image +# Install sqlite3 dependencies. You can skip this if you don't use sqlite3 in the image, +# in which case you should also move better-sqlite3 to "devDependencies" in package.json. RUN apt-get update && \ apt-get install -y --no-install-recommends libsqlite3-dev python3 build-essential && \ rm -rf /var/lib/apt/lists/* && \ yarn config set python /usr/bin/python3 +# From here on we use the least-privileged `node` user to run the backend. +USER node +WORKDIR /app + +# This switches many Node.js dependencies to production mode. +ENV NODE_ENV production + # Copy repo skeleton first, to avoid unnecessary docker cache invalidation. # The skeleton contains the package.json of each package in the monorepo, # and along with yarn.lock and the root package.json, that's enough to run yarn install. -COPY yarn.lock package.json packages/backend/dist/skeleton.tar.gz ./ +COPY --chown=node:node yarn.lock package.json packages/backend/dist/skeleton.tar.gz ./ RUN tar xzf skeleton.tar.gz && rm skeleton.tar.gz RUN yarn install --frozen-lockfile --production --network-timeout 300000 && rm -rf "$(yarn cache dir)" # Then copy the rest of the backend bundle, along with any other files we might want. -COPY packages/backend/dist/bundle.tar.gz app-config.yaml ./ +COPY --chown=node:node packages/backend/dist/bundle.tar.gz app-config*.yaml ./ RUN tar xzf bundle.tar.gz && rm bundle.tar.gz CMD ["node", "packages/backend", "--config", "app-config.yaml"] diff --git a/packages/backend/package.json b/packages/backend/package.json index 415a966242..5226cf3270 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -1,6 +1,6 @@ { "name": "example-backend", - "version": "0.2.74-next.0", + "version": "0.2.74", "main": "dist/index.cjs.js", "types": "src/index.ts", "license": "Apache-2.0", @@ -26,40 +26,40 @@ "build-image": "docker build ../.. -f Dockerfile --tag example-backend" }, "dependencies": { - "@backstage/backend-common": "^0.15.0-next.0", - "@backstage/backend-tasks": "^0.3.4-next.0", + "@backstage/backend-common": "^0.15.0", + "@backstage/backend-tasks": "^0.3.4", "@backstage/catalog-client": "^1.0.4", "@backstage/catalog-model": "^1.1.0", "@backstage/config": "^1.0.1", - "@backstage/integration": "^1.3.0-next.0", - "@backstage/plugin-app-backend": "^0.3.35-next.0", - "@backstage/plugin-auth-backend": "^0.15.1-next.0", - "@backstage/plugin-auth-node": "^0.2.4-next.0", - "@backstage/plugin-azure-devops-backend": "^0.3.14-next.0", - "@backstage/plugin-badges-backend": "^0.1.29-next.0", - "@backstage/plugin-catalog-backend": "^1.3.1-next.0", - "@backstage/plugin-code-coverage-backend": "^0.2.1-next.0", - "@backstage/plugin-graphql-backend": "^0.1.25-next.0", - "@backstage/plugin-jenkins-backend": "^0.1.25-next.0", - "@backstage/plugin-kubernetes-backend": "^0.7.1-next.0", - "@backstage/plugin-kafka-backend": "^0.2.28-next.0", - "@backstage/plugin-permission-backend": "^0.5.10-next.0", + "@backstage/integration": "^1.3.0", + "@backstage/plugin-app-backend": "^0.3.35", + "@backstage/plugin-auth-backend": "^0.15.1", + "@backstage/plugin-auth-node": "^0.2.4", + "@backstage/plugin-azure-devops-backend": "^0.3.14", + "@backstage/plugin-badges-backend": "^0.1.29", + "@backstage/plugin-catalog-backend": "^1.3.1", + "@backstage/plugin-code-coverage-backend": "^0.2.1", + "@backstage/plugin-graphql-backend": "^0.1.25", + "@backstage/plugin-jenkins-backend": "^0.1.25", + "@backstage/plugin-kubernetes-backend": "^0.7.1", + "@backstage/plugin-kafka-backend": "^0.2.28", + "@backstage/plugin-permission-backend": "^0.5.10", "@backstage/plugin-permission-common": "^0.6.3", - "@backstage/plugin-permission-node": "^0.6.4-next.0", - "@backstage/plugin-proxy-backend": "^0.2.29-next.0", - "@backstage/plugin-rollbar-backend": "^0.1.32-next.0", - "@backstage/plugin-scaffolder-backend": "^1.5.0-next.0", - "@backstage/plugin-scaffolder-backend-module-rails": "^0.4.3-next.0", - "@backstage/plugin-search-backend": "^1.0.1-next.0", + "@backstage/plugin-permission-node": "^0.6.4", + "@backstage/plugin-proxy-backend": "^0.2.29", + "@backstage/plugin-rollbar-backend": "^0.1.32", + "@backstage/plugin-scaffolder-backend": "^1.5.0", + "@backstage/plugin-scaffolder-backend-module-rails": "^0.4.3", + "@backstage/plugin-search-backend": "^1.0.1", "@backstage/plugin-search-common": "^1.0.0", - "@backstage/plugin-search-backend-node": "^1.0.1-next.0", - "@backstage/plugin-search-backend-module-elasticsearch": "^1.0.1-next.0", - "@backstage/plugin-search-backend-module-pg": "^0.3.6-next.0", - "@backstage/plugin-techdocs-backend": "^1.2.1-next.0", - "@backstage/plugin-tech-insights-backend": "^0.5.1-next.0", - "@backstage/plugin-tech-insights-node": "^0.3.3-next.0", - "@backstage/plugin-tech-insights-backend-module-jsonfc": "^0.1.19-next.0", - "@backstage/plugin-todo-backend": "^0.1.32-next.0", + "@backstage/plugin-search-backend-node": "^1.0.1", + "@backstage/plugin-search-backend-module-elasticsearch": "^1.0.1", + "@backstage/plugin-search-backend-module-pg": "^0.3.6", + "@backstage/plugin-techdocs-backend": "^1.2.1", + "@backstage/plugin-tech-insights-backend": "^0.5.1", + "@backstage/plugin-tech-insights-node": "^0.3.3", + "@backstage/plugin-tech-insights-backend-module-jsonfc": "^0.1.19", + "@backstage/plugin-todo-backend": "^0.1.32", "@gitbeaker/node": "^35.1.0", "@octokit/rest": "^19.0.3", "better-sqlite3": "^7.5.0", @@ -76,7 +76,7 @@ "winston": "^3.2.1" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.0", + "@backstage/cli": "^0.18.1", "@types/dockerode": "^3.3.0", "@types/express": "^4.17.6", "@types/express-serve-static-core": "^4.17.5", diff --git a/packages/catalog-client/api-report.md b/packages/catalog-client/api-report.md index 5fcae87dd5..964a3c1018 100644 --- a/packages/catalog-client/api-report.md +++ b/packages/catalog-client/api-report.md @@ -78,7 +78,7 @@ export class CatalogClient implements CatalogApi { }; }); addLocation( - { type, target, dryRun }: AddLocationRequest, + request: AddLocationRequest, options?: CatalogRequestOptions, ): Promise; getEntities( diff --git a/packages/catalog-client/src/CatalogClient.ts b/packages/catalog-client/src/CatalogClient.ts index 371ac55db4..8ddc3eb36d 100644 --- a/packages/catalog-client/src/CatalogClient.ts +++ b/packages/catalog-client/src/CatalogClient.ts @@ -272,9 +272,11 @@ export class CatalogClient implements CatalogApi { * {@inheritdoc CatalogApi.addLocation} */ async addLocation( - { type = 'url', target, dryRun }: AddLocationRequest, + request: AddLocationRequest, options?: CatalogRequestOptions, ): Promise { + const { type = 'url', target, dryRun } = request; + const response = await this.fetchApi.fetch( `${await this.discoveryApi.getBaseUrl('catalog')}/locations${ dryRun ? '?dryRun=true' : '' diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md index b8b8b4a66b..4fdab1c48d 100644 --- a/packages/cli/CHANGELOG.md +++ b/packages/cli/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/cli +## 0.18.1 + +### Patch Changes + +- d45bbfeb69: Linting is now ignored for any `.eslintrc.*` files, not just `.eslintrc.js`. +- 72c228fdb8: Fixed a bug where `NODE_ENV` was not set in the environment when starting the backend in development mode. It has always been the case that Webpack transformed `NODE_ENV` when running in development mode, but this did not affect dependencies in `node_modules` as they are treated as external. +- a539564c0d: Added Backstage version to output of `yarn backstage-cli info` command +- fd68d6f138: Added resolution of `.json` and `.wasm` files to the Webpack configuration in order to match defaults. +- 94155a41e0: Updated dependencies `@svgr/*` to `6.3.x`. + ## 0.18.1-next.1 ### Patch Changes diff --git a/packages/cli/config/eslint-factory.js b/packages/cli/config/eslint-factory.js index e86146048e..6e2a510c4a 100644 --- a/packages/cli/config/eslint-factory.js +++ b/packages/cli/config/eslint-factory.js @@ -76,7 +76,7 @@ function createConfig(dir, extraConfig = {}) { ...parserOptions, }, ignorePatterns: [ - '.eslintrc.js', + '.eslintrc.*', '**/dist/**', '**/dist-types/**', ...(ignorePatterns ?? []), diff --git a/packages/cli/package.json b/packages/cli/package.json index b3b2835f0c..2dd77778b5 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.18.1-next.1", + "version": "0.18.1", "private": false, "publishConfig": { "access": "public" @@ -126,13 +126,13 @@ "zod": "^3.11.6" }, "devDependencies": { - "@backstage/backend-common": "^0.15.0-next.0", + "@backstage/backend-common": "^0.15.0", "@backstage/config": "^1.0.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/core-app-api": "^1.0.5", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", + "@backstage/dev-utils": "^1.0.5", + "@backstage/test-utils": "^1.1.3", "@backstage/theme": "^0.2.16", "@types/diff": "^5.0.0", "@types/express": "^4.17.6", diff --git a/packages/cli/src/lib/bundler/backend.ts b/packages/cli/src/lib/bundler/backend.ts index 1b161976e3..3094450d4b 100644 --- a/packages/cli/src/lib/bundler/backend.ts +++ b/packages/cli/src/lib/bundler/backend.ts @@ -26,6 +26,10 @@ export async function serveBackend(options: BackendServeOptions) { isDev: true, }); + // Webpack only replaces occurrences of this in code it touches, which does + // not include dependencies in node_modules. So we set it here at runtime as well. + (process.env as { NODE_ENV: string }).NODE_ENV = 'development'; + const compiler = webpack(config, (err: Error | undefined) => { if (err) { console.error(err); diff --git a/packages/core-app-api/CHANGELOG.md b/packages/core-app-api/CHANGELOG.md index c78206bbea..8a14eed4ec 100644 --- a/packages/core-app-api/CHANGELOG.md +++ b/packages/core-app-api/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/core-app-api +## 1.0.5 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.0.5 + ## 1.0.5-next.0 ### Patch Changes diff --git a/packages/core-app-api/api-report.md b/packages/core-app-api/api-report.md index beb0d11201..3cc1f4a8a8 100644 --- a/packages/core-app-api/api-report.md +++ b/packages/core-app-api/api-report.md @@ -157,6 +157,7 @@ export type AppConfigLoader = () => Promise; export type AppContext = { getPlugins(): BackstagePlugin[]; getSystemIcon(key: string): IconComponent | undefined; + getSystemIcons(): Record; getComponents(): AppComponents; }; diff --git a/packages/core-app-api/package.json b/packages/core-app-api/package.json index 3df868ad3d..d8586a7985 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.0.5-next.0", + "version": "1.0.5", "private": false, "publishConfig": { "access": "public", @@ -34,7 +34,7 @@ }, "dependencies": { "@backstage/config": "^1.0.1", - "@backstage/core-plugin-api": "^1.0.5-next.0", + "@backstage/core-plugin-api": "^1.0.5", "@backstage/types": "^1.0.0", "@backstage/version-bridge": "^1.0.1", "@types/prop-types": "^15.7.3", @@ -49,8 +49,8 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.0", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/react-hooks": "^8.0.0", diff --git a/packages/core-app-api/src/apis/implementations/IdentityApi/AppIdentityProxy.test.ts b/packages/core-app-api/src/apis/implementations/IdentityApi/AppIdentityProxy.test.ts index 3d4f83b05d..6fa46db7c9 100644 --- a/packages/core-app-api/src/apis/implementations/IdentityApi/AppIdentityProxy.test.ts +++ b/packages/core-app-api/src/apis/implementations/IdentityApi/AppIdentityProxy.test.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { withLogCollector } from '@backstage//test-utils'; +import { withLogCollector } from '@backstage/test-utils'; import { AppIdentityProxy } from './AppIdentityProxy'; describe('AppIdentityProxy', () => { diff --git a/packages/core-app-api/src/app/AppContext.test.tsx b/packages/core-app-api/src/app/AppContext.test.tsx index bc67ee3a9e..a27b7c6f35 100644 --- a/packages/core-app-api/src/app/AppContext.test.tsx +++ b/packages/core-app-api/src/app/AppContext.test.tsx @@ -36,6 +36,7 @@ describe('v1 consumer', () => { getPlugins: jest.fn(), getComponents: jest.fn(), getSystemIcon: jest.fn(), + getSystemIcons: jest.fn(), }; const renderedHook = renderHook(() => useMockAppV1(), { diff --git a/packages/core-app-api/src/app/AppManager.tsx b/packages/core-app-api/src/app/AppManager.tsx index 72c69f7da4..f36d37f796 100644 --- a/packages/core-app-api/src/app/AppManager.tsx +++ b/packages/core-app-api/src/app/AppManager.tsx @@ -153,6 +153,10 @@ class AppContextImpl implements AppContext { return this.app.getSystemIcon(key); } + getSystemIcons(): Record { + return this.app.getSystemIcons(); + } + getComponents(): AppComponents { return this.app.getComponents(); } @@ -194,6 +198,10 @@ export class AppManager implements BackstageApp { return this.icons[key]; } + getSystemIcons(): Record { + return this.icons; + } + getComponents(): AppComponents { return this.components; } diff --git a/packages/core-app-api/src/app/types.ts b/packages/core-app-api/src/app/types.ts index 979fb0496e..39bf9c0554 100644 --- a/packages/core-app-api/src/app/types.ts +++ b/packages/core-app-api/src/app/types.ts @@ -328,6 +328,11 @@ export type AppContext = { */ getSystemIcon(key: string): IconComponent | undefined; + /** + * Get a list of common and custom icons for this app. + */ + getSystemIcons(): Record; + /** * Get the components registered for various purposes in the app. */ diff --git a/packages/core-app-api/src/routing/RoutingProvider.test.tsx b/packages/core-app-api/src/routing/RoutingProvider.test.tsx index dec92072fc..c559c0fff0 100644 --- a/packages/core-app-api/src/routing/RoutingProvider.test.tsx +++ b/packages/core-app-api/src/routing/RoutingProvider.test.tsx @@ -124,6 +124,7 @@ const Extension5 = plugin.provide( const mockContext = { getComponents: () => ({ Progress: () => null } as any), getSystemIcon: jest.fn(), + getSystemIcons: jest.fn(), getPlugins: jest.fn(), }; diff --git a/packages/core-components/CHANGELOG.md b/packages/core-components/CHANGELOG.md index 95881c5f7f..c1cd9e33ac 100644 --- a/packages/core-components/CHANGELOG.md +++ b/packages/core-components/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/core-components +## 0.11.0 + +### Minor Changes + +- d0eefc499a: Made the `to` prop of `Button` and `Link` more strict, only supporting plain strings. It used to be the case that this prop was unexpectedly too liberal, making it look like we supported the complex `react-router-dom` object form of the parameter as well, which led to unexpected results at runtime. + +### Patch Changes + +- a22af3edc8: Adding a `className` prop to the `MarkdownContent` component +- Updated dependencies + - @backstage/core-plugin-api@1.0.5 + ## 0.11.0-next.2 ### Minor Changes diff --git a/packages/core-components/api-report.md b/packages/core-components/api-report.md index 1cdba47257..3dc4e2848e 100644 --- a/packages/core-components/api-report.md +++ b/packages/core-components/api-report.md @@ -987,13 +987,10 @@ export type SidebarOpenState = { }; // @public -export const SidebarOpenStateProvider: ({ - children, - value, -}: { +export function SidebarOpenStateProvider(props: { children: ReactNode; value: SidebarOpenState; -}) => JSX.Element; +}): JSX.Element; // @public (undocumented) export type SidebarOptions = { @@ -1034,13 +1031,10 @@ export type SidebarPinStateContextType = { }; // @public -export const SidebarPinStateProvider: ({ - children, - value, -}: { +export function SidebarPinStateProvider(props: { children: ReactNode; value: SidebarPinStateContextType; -}) => JSX.Element; +}): JSX.Element; // @public (undocumented) export type SidebarProps = { diff --git a/packages/core-components/package.json b/packages/core-components/package.json index 62c0a90179..7a43e27290 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.11.0-next.2", + "version": "0.11.0", "private": false, "publishConfig": { "access": "public", @@ -34,7 +34,7 @@ }, "dependencies": { "@backstage/config": "^1.0.1", - "@backstage/core-plugin-api": "^1.0.5-next.0", + "@backstage/core-plugin-api": "^1.0.5", "@backstage/errors": "^1.1.0", "@backstage/theme": "^0.2.16", "@backstage/version-bridge": "^1.0.1", @@ -79,9 +79,9 @@ "react-dom": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/cli": "^0.18.1-next.1", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/core-app-api": "^1.0.5", + "@backstage/cli": "^0.18.1", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/react-hooks": "^8.0.0", diff --git a/packages/core-components/src/components/MarkdownContent/MarkdownContent.test.tsx b/packages/core-components/src/components/MarkdownContent/MarkdownContent.test.tsx index 9c08b83c40..fa8cb35ca8 100644 --- a/packages/core-components/src/components/MarkdownContent/MarkdownContent.test.tsx +++ b/packages/core-components/src/components/MarkdownContent/MarkdownContent.test.tsx @@ -100,4 +100,34 @@ describe('', () => { 'https://example.com/blog/assets/6/header.png', ); }); + + it('render MarkdownContent component with headings given proper ids', async () => { + const rendered = await renderWithEffects( + wrapInTestApp( + , + ), + ); + + expect(rendered.getByText('Lorem ipsum').getAttribute('id')).toEqual( + 'lorem-ipsum', + ); + expect(rendered.getByText('bing bong').getAttribute('id')).toEqual( + 'bing-bong', + ); + expect( + rendered + .getByText( + 'The FitnessGram Pacer Test is a multistage aerobic capacity test', + ) + .getAttribute('id'), + ).toEqual( + 'the-fitnessgram-pacer-test-is-a-multistage-aerobic-capacity-test', + ); + }); }); diff --git a/packages/core-components/src/components/MarkdownContent/MarkdownContent.tsx b/packages/core-components/src/components/MarkdownContent/MarkdownContent.tsx index 013e81817a..d97172bf75 100644 --- a/packages/core-components/src/components/MarkdownContent/MarkdownContent.tsx +++ b/packages/core-components/src/components/MarkdownContent/MarkdownContent.tsx @@ -20,6 +20,7 @@ import gfm from 'remark-gfm'; import React from 'react'; import { BackstageTheme } from '@backstage/theme'; import { CodeSnippet } from '../CodeSnippet'; +import { HeadingProps } from 'react-markdown/lib/ast-to-react'; export type MarkdownContentClassKey = 'markdown'; @@ -73,6 +74,21 @@ type Props = { className?: string; }; +const flatten = (text: string, child: any): string => { + if (!child) return text; + + return typeof child === 'string' + ? text + child + : React.Children.toArray(child.props.children).reduce(flatten, text); +}; + +const headingRenderer = ({ level, children }: HeadingProps) => { + const childrenArray = React.Children.toArray(children); + const text = childrenArray.reduce(flatten, ''); + const slug = text.toLocaleLowerCase('en-US').replace(/\W/g, '-'); + return React.createElement(`h${level}`, { id: slug }, children); +}; + const components: Options['components'] = { code: ({ inline, className, children, ...props }) => { const text = String(children).replace(/\n+$/, ''); @@ -85,6 +101,12 @@ const components: Options['components'] = { ); }, + h1: headingRenderer, + h2: headingRenderer, + h3: headingRenderer, + h4: headingRenderer, + h5: headingRenderer, + h6: headingRenderer, }; /** diff --git a/packages/core-components/src/layout/Sidebar/SidebarOpenStateContext.tsx b/packages/core-components/src/layout/Sidebar/SidebarOpenStateContext.tsx index 7cb0e5b2c3..36e87b07a2 100644 --- a/packages/core-components/src/layout/Sidebar/SidebarOpenStateContext.tsx +++ b/packages/core-components/src/layout/Sidebar/SidebarOpenStateContext.tsx @@ -74,21 +74,21 @@ const VersionedSidebarContext = createVersionedContext<{ * * @public */ -export const SidebarOpenStateProvider = ({ - children, - value, -}: { +export function SidebarOpenStateProvider(props: { children: ReactNode; value: SidebarOpenState; -}) => ( - - - {children} - - -); +}) { + const { children, value } = props; + return ( + + + {children} + + + ); +} /** * Hook to read and update the sidebar's open state, which controls whether or diff --git a/packages/core-components/src/layout/Sidebar/SidebarPinStateContext.tsx b/packages/core-components/src/layout/Sidebar/SidebarPinStateContext.tsx index e00ed259e9..9c58a32732 100644 --- a/packages/core-components/src/layout/Sidebar/SidebarPinStateContext.tsx +++ b/packages/core-components/src/layout/Sidebar/SidebarPinStateContext.tsx @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + import { createVersionedContext, createVersionedValueMap, @@ -22,8 +23,8 @@ import React, { createContext, ReactNode, useContext } from 'react'; /** * Type of `SidebarPinStateContext` * - * @public @deprecated - * Use `SidebarPinState` instead. + * @public + * @deprecated Use `SidebarPinState` instead. */ export type SidebarPinStateContextType = { isPinned: boolean; @@ -80,21 +81,21 @@ const VersionedSidebarPinStateContext = createVersionedContext<{ * * @public */ -export const SidebarPinStateProvider = ({ - children, - value, -}: { +export function SidebarPinStateProvider(props: { children: ReactNode; value: SidebarPinStateContextType; -}) => ( - - - {children} - - -); +}) { + const { children, value } = props; + return ( + + + {children} + + + ); +} /** * Hook to read and update sidebar pin state, which controls whether or not the diff --git a/packages/core-plugin-api/CHANGELOG.md b/packages/core-plugin-api/CHANGELOG.md index ce81ff83dc..807718212c 100644 --- a/packages/core-plugin-api/CHANGELOG.md +++ b/packages/core-plugin-api/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/core-plugin-api +## 1.0.5 + +### Patch Changes + +- 80da5162c7: Introduced a new experimental feature that allows you to declare plugin-wide options for your plugin by defining + `__experimentalConfigure` in your `createPlugin` options. See https://backstage.io/docs/plugins/customization.md for more information. + + This is an experimental feature and it will have breaking changes in the future. + +- 87649a06bf: Add a note that the `fetchApi` utility should not be used on sign-in page implementations and similar. + ## 1.0.5-next.0 ### Patch Changes diff --git a/packages/core-plugin-api/api-report.md b/packages/core-plugin-api/api-report.md index 49e0be3800..0738d7bac5 100644 --- a/packages/core-plugin-api/api-report.md +++ b/packages/core-plugin-api/api-report.md @@ -149,6 +149,7 @@ export type AppComponents = { export type AppContext = { getPlugins(): BackstagePlugin_2[]; getSystemIcon(key: string): IconComponent_2 | undefined; + getSystemIcons(): Record; getComponents(): AppComponents; }; @@ -648,10 +649,7 @@ export interface PluginOptionsProviderProps { } // @alpha -export const PluginProvider: ({ - children, - plugin, -}: PluginOptionsProviderProps) => JSX.Element; +export const PluginProvider: (props: PluginOptionsProviderProps) => JSX.Element; // @public export type ProfileInfo = { diff --git a/packages/core-plugin-api/package.json b/packages/core-plugin-api/package.json index fdf49e2e82..ab0136d1f1 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.0.5-next.0", + "version": "1.0.5", "private": false, "publishConfig": { "access": "public", @@ -47,9 +47,9 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.0", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/core-app-api": "^1.0.5", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/react-hooks": "^8.0.0", diff --git a/packages/core-plugin-api/src/apis/definitions/FetchApi.ts b/packages/core-plugin-api/src/apis/definitions/FetchApi.ts index b1a4dbbd0b..aba0e53bb7 100644 --- a/packages/core-plugin-api/src/apis/definitions/FetchApi.ts +++ b/packages/core-plugin-api/src/apis/definitions/FetchApi.ts @@ -37,6 +37,13 @@ export type FetchApi = { * This is a wrapper for the fetch API, that has additional behaviors such as * the ability to automatically inject auth information where necessary. * + * Note that the default behavior of this API (unless overridden by your org), + * is to require that the user is already signed in so that it has auth + * information to inject. Therefore, using the default implementation of this + * utility API e.g. on the `SignInPage` or similar, would cause issues. In + * special circumstances like those, you can use the regular system `fetch` + * instead. + * * @public */ export const fetchApiRef: ApiRef = createApiRef({ diff --git a/packages/core-plugin-api/src/plugin-options/usePluginOptions.tsx b/packages/core-plugin-api/src/plugin-options/usePluginOptions.tsx index 82684636d6..4fdacc1ace 100644 --- a/packages/core-plugin-api/src/plugin-options/usePluginOptions.tsx +++ b/packages/core-plugin-api/src/plugin-options/usePluginOptions.tsx @@ -39,10 +39,11 @@ export interface PluginOptionsProviderProps { * * @alpha */ -export const PluginProvider = ({ - children, - plugin, -}: PluginOptionsProviderProps): JSX.Element => { +export const PluginProvider = ( + props: PluginOptionsProviderProps, +): JSX.Element => { + const { children, plugin } = props; + const { Provider } = createVersionedContext<{ 1: { plugin: BackstagePlugin | undefined }; }>(contextKey); diff --git a/packages/create-app/CHANGELOG.md b/packages/create-app/CHANGELOG.md index 675bcb7eed..51e9fa0987 100644 --- a/packages/create-app/CHANGELOG.md +++ b/packages/create-app/CHANGELOG.md @@ -1,5 +1,41 @@ # @backstage/create-app +## 0.4.30 + +### Patch Changes + +- 73cee58fc2: Bumped create-app version. +- f762386d48: Bumped create-app version. +- b162bbf464: Bumped create-app version. +- db76fc6255: The `better-sqlite3` dependency has been moved back to production `"dependencies"` in `packages/backend/package.json`, with instructions in the Dockerfile to move it to `"devDependencies"` if desired. There is no need to apply this change to existing apps, unless you want your production image to have SQLite available as a database option. +- ab9edd8b58: Updated backend to write stack trace when the backend fails to start up. + + To apply this change to your Backstage installation, make the following change to `packages/backend/src/index.ts` + + ```diff + cors: + origin: http://localhost:3000 + - console.error(`Backend failed to start up, ${error}`); + + console.error('Backend failed to start up', error); + ``` + +- 0174a0a022: Add `PATCH` and `HEAD` to the `Access-Control-Allow-Methods`. + + To apply this change to your Backstage installation make the following change to your `app-config.yaml` + + ```diff + cors: + origin: http://localhost:3000 + - methods: [GET, POST, PUT, DELETE] + + methods: [GET, POST, PUT, DELETE, PATCH, HEAD] + ``` + +## 0.4.30-next.3 + +### Patch Changes + +- Bumped create-app version. + ## 0.4.30-next.2 ### Patch Changes diff --git a/packages/create-app/package.json b/packages/create-app/package.json index 681650022b..be2df5752a 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.4.30-next.2", + "version": "0.4.30", "private": false, "publishConfig": { "access": "public" diff --git a/packages/create-app/templates/default-app/app-config.yaml.hbs b/packages/create-app/templates/default-app/app-config.yaml.hbs index 9c31ccf381..4a058deefd 100644 --- a/packages/create-app/templates/default-app/app-config.yaml.hbs +++ b/packages/create-app/templates/default-app/app-config.yaml.hbs @@ -26,7 +26,7 @@ backend: origin: http://localhost:3000 methods: [GET, HEAD, PATCH, POST, PUT, DELETE] credentials: true - # This is for local developement only, it is not recommended to use this in production + # This is for local development only, it is not recommended to use this in production # The production database configuration is stored in app-config.production.yaml database: client: better-sqlite3 diff --git a/packages/create-app/templates/default-app/packages/backend/Dockerfile b/packages/create-app/templates/default-app/packages/backend/Dockerfile index a5773aa0f8..682798b826 100644 --- a/packages/create-app/templates/default-app/packages/backend/Dockerfile +++ b/packages/create-app/templates/default-app/packages/backend/Dockerfile @@ -11,24 +11,30 @@ FROM node:16-bullseye-slim -WORKDIR /app - -# install sqlite3 dependencies, you can skip this if you don't use sqlite3 in the image +# Install sqlite3 dependencies. You can skip this if you don't use sqlite3 in the image, +# in which case you should also move better-sqlite3 to "devDependencies" in package.json. RUN apt-get update && \ apt-get install -y --no-install-recommends libsqlite3-dev python3 build-essential && \ rm -rf /var/lib/apt/lists/* && \ yarn config set python /usr/bin/python3 +# From here on we use the least-privileged `node` user to run the backend. +USER node +WORKDIR /app + +# This switches many Node.js dependencies to production mode. +ENV NODE_ENV production + # Copy repo skeleton first, to avoid unnecessary docker cache invalidation. # The skeleton contains the package.json of each package in the monorepo, # and along with yarn.lock and the root package.json, that's enough to run yarn install. -COPY yarn.lock package.json packages/backend/dist/skeleton.tar.gz ./ +COPY --chown=node:node yarn.lock package.json packages/backend/dist/skeleton.tar.gz ./ RUN tar xzf skeleton.tar.gz && rm skeleton.tar.gz RUN yarn install --frozen-lockfile --production --network-timeout 300000 && rm -rf "$(yarn cache dir)" # Then copy the rest of the backend bundle, along with any other files we might want. -COPY packages/backend/dist/bundle.tar.gz app-config*.yaml ./ +COPY --chown=node:node packages/backend/dist/bundle.tar.gz app-config*.yaml ./ RUN tar xzf bundle.tar.gz && rm bundle.tar.gz CMD ["node", "packages/backend", "--config", "app-config.yaml", "--config", "app-config.production.yaml"] diff --git a/packages/create-app/templates/default-app/packages/backend/package.json.hbs b/packages/create-app/templates/default-app/packages/backend/package.json.hbs index 3bd070ee9b..3853911c7f 100644 --- a/packages/create-app/templates/default-app/packages/backend/package.json.hbs +++ b/packages/create-app/templates/default-app/packages/backend/package.json.hbs @@ -33,6 +33,7 @@ "@backstage/plugin-search-backend-module-pg": "^{{version '@backstage/plugin-search-backend-module-pg'}}", "@backstage/plugin-search-backend-node": "^{{version '@backstage/plugin-search-backend-node'}}", "@backstage/plugin-techdocs-backend": "^{{version '@backstage/plugin-techdocs-backend'}}", + "better-sqlite3": "^7.5.0", "dockerode": "^3.3.1", "express": "^4.17.1", "express-promise-router": "^4.1.0", @@ -44,8 +45,7 @@ "@types/dockerode": "^3.3.0", "@types/express-serve-static-core": "^4.17.5", "@types/express": "^4.17.6", - "@types/luxon": "^2.0.4", - "better-sqlite3": "^7.5.0" + "@types/luxon": "^2.0.4" }, "files": [ "dist" diff --git a/packages/create-app/templates/default-app/packages/backend/src/index.ts b/packages/create-app/templates/default-app/packages/backend/src/index.ts index 70bc66bcdd..ef05fa50ee 100644 --- a/packages/create-app/templates/default-app/packages/backend/src/index.ts +++ b/packages/create-app/templates/default-app/packages/backend/src/index.ts @@ -104,6 +104,6 @@ async function main() { module.hot?.accept(); main().catch(error => { - console.error(`Backend failed to start up, ${error}`); + console.error('Backend failed to start up', error); process.exit(1); }); diff --git a/packages/create-app/templates/default-app/packages/backend/src/plugins/auth.ts b/packages/create-app/templates/default-app/packages/backend/src/plugins/auth.ts index 159116d7b8..77eb6aae21 100644 --- a/packages/create-app/templates/default-app/packages/backend/src/plugins/auth.ts +++ b/packages/create-app/templates/default-app/packages/backend/src/plugins/auth.ts @@ -25,7 +25,7 @@ export default async function createPlugin( // This particular resolver makes all users share a single "guest" identity. // It should only be used for testing and trying out Backstage. // - // If you want to use a production ready resolver you can switch to the + // If you want to use a production ready resolver you can switch to // the one that is commented out below, it looks up a user entity in the // catalog using the GitHub username of the authenticated user. // That resolver requires you to have user entities populated in the catalog, diff --git a/packages/dev-utils/CHANGELOG.md b/packages/dev-utils/CHANGELOG.md index cc0459d05a..34adb63d3c 100644 --- a/packages/dev-utils/CHANGELOG.md +++ b/packages/dev-utils/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/dev-utils +## 1.0.5 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + - @backstage/app-defaults@1.0.5 + - @backstage/core-app-api@1.0.5 + - @backstage/integration-react@1.1.3 + - @backstage/test-utils@1.1.3 + ## 1.0.5-next.1 ### Patch Changes diff --git a/packages/dev-utils/package.json b/packages/dev-utils/package.json index 37155f0837..07c51dc8ae 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.5-next.1", + "version": "1.0.5", "private": false, "publishConfig": { "access": "public", @@ -33,14 +33,14 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/app-defaults": "^1.0.5-next.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", + "@backstage/app-defaults": "^1.0.5", + "@backstage/core-app-api": "^1.0.5", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", "@backstage/catalog-model": "^1.1.0", - "@backstage/integration-react": "^1.1.3-next.1", - "@backstage/plugin-catalog-react": "^1.1.3-next.2", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/integration-react": "^1.1.3", + "@backstage/plugin-catalog-react": "^1.1.3", + "@backstage/test-utils": "^1.1.3", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -59,7 +59,7 @@ "react-dom": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", + "@backstage/cli": "^0.18.1", "@types/jest": "^26.0.7", "@types/node": "^16.0.0" }, diff --git a/packages/integration-react/CHANGELOG.md b/packages/integration-react/CHANGELOG.md index 1a90e277d0..89fbb56619 100644 --- a/packages/integration-react/CHANGELOG.md +++ b/packages/integration-react/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/integration-react +## 1.1.3 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.3.0 + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + ## 1.1.3-next.1 ### Patch Changes diff --git a/packages/integration-react/package.json b/packages/integration-react/package.json index ac74dd63fd..999a8a6031 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.3-next.1", + "version": "1.1.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -25,9 +25,9 @@ }, "dependencies": { "@backstage/config": "^1.0.1", - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", - "@backstage/integration": "^1.3.0-next.0", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", + "@backstage/integration": "^1.3.0", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -38,9 +38,9 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/dev-utils": "^1.0.5", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/packages/integration/CHANGELOG.md b/packages/integration/CHANGELOG.md index ad2a32a713..57bb9297ba 100644 --- a/packages/integration/CHANGELOG.md +++ b/packages/integration/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/integration +## 1.3.0 + +### Minor Changes + +- 593dea6710: Add support for Basic Auth for Bitbucket Server. +- ad35364e97: feat(techdocs): add edit button support for bitbucketServer + +### Patch Changes + +- 163243a4d1: Handle incorrect return type from Octokit paginate plugin to resolve reading URLs from GitHub +- c4b460a47d: Avoid double encoding of the file path in `getBitbucketDownloadUrl` +- 29f782eb37: Updated dependency `@types/luxon` to `^3.0.0`. +- 1f27d83933: Fixed bug in getGitLabFileFetchUrl where a target whose path did not contain the + `/-/` scope would result in a fetch URL that did not support + private-token-based authentication. + ## 1.3.0-next.1 ### Minor Changes diff --git a/packages/integration/package.json b/packages/integration/package.json index 30eed36ae4..720cdd163d 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.3.0-next.1", + "version": "1.3.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -43,9 +43,9 @@ "lodash": "^4.17.21" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.0", + "@backstage/cli": "^0.18.1", "@backstage/config-loader": "^1.1.3", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/test-utils": "^1.1.3", "@types/jest": "^26.0.7", "@types/luxon": "^3.0.0", "msw": "^0.44.0" diff --git a/packages/techdocs-cli-embedded-app/CHANGELOG.md b/packages/techdocs-cli-embedded-app/CHANGELOG.md index 5aad4f8d33..85300ab0f7 100644 --- a/packages/techdocs-cli-embedded-app/CHANGELOG.md +++ b/packages/techdocs-cli-embedded-app/CHANGELOG.md @@ -1,5 +1,21 @@ # techdocs-cli-embedded-app +## 0.2.73 + +### Patch Changes + +- Updated dependencies + - @backstage/cli@0.18.1 + - @backstage/plugin-techdocs@1.3.1 + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog@1.5.0 + - @backstage/plugin-techdocs-react@1.0.3 + - @backstage/app-defaults@1.0.5 + - @backstage/core-app-api@1.0.5 + - @backstage/integration-react@1.1.3 + - @backstage/test-utils@1.1.3 + ## 0.2.73-next.1 ### Patch Changes diff --git a/packages/techdocs-cli-embedded-app/package.json b/packages/techdocs-cli-embedded-app/package.json index f5af90160f..ea429fa611 100644 --- a/packages/techdocs-cli-embedded-app/package.json +++ b/packages/techdocs-cli-embedded-app/package.json @@ -1,24 +1,24 @@ { "name": "techdocs-cli-embedded-app", - "version": "0.2.73-next.1", + "version": "0.2.73", "private": true, "backstage": { "role": "frontend" }, "bundled": true, "dependencies": { - "@backstage/app-defaults": "^1.0.5-next.1", + "@backstage/app-defaults": "^1.0.5", "@backstage/catalog-model": "^1.1.0", - "@backstage/cli": "^0.18.1-next.1", + "@backstage/cli": "^0.18.1", "@backstage/config": "^1.0.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", - "@backstage/integration-react": "^1.1.3-next.1", - "@backstage/plugin-catalog": "^1.5.0-next.2", - "@backstage/plugin-techdocs": "^1.3.1-next.2", - "@backstage/plugin-techdocs-react": "^1.0.3-next.2", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/core-app-api": "^1.0.5", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", + "@backstage/integration-react": "^1.1.3", + "@backstage/plugin-catalog": "^1.5.0", + "@backstage/plugin-techdocs": "^1.3.1", + "@backstage/plugin-techdocs-react": "^1.0.3", + "@backstage/test-utils": "^1.1.3", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.11.0", "@material-ui/icons": "^4.9.1", @@ -30,7 +30,7 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", + "@backstage/cli": "^0.18.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/packages/techdocs-cli/CHANGELOG.md b/packages/techdocs-cli/CHANGELOG.md index 53296a72d1..27843fbec5 100644 --- a/packages/techdocs-cli/CHANGELOG.md +++ b/packages/techdocs-cli/CHANGELOG.md @@ -1,5 +1,17 @@ # @techdocs/cli +## 1.2.0 + +### Minor Changes + +- 855952db53: Added CLI option `--docker-option` to allow passing additional options to the `docker run` command executed my `serve` and `serve:mkdocs`. + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/plugin-techdocs-node@1.3.0 + ## 1.2.0-next.2 ### Minor Changes diff --git a/packages/techdocs-cli/package.json b/packages/techdocs-cli/package.json index 7df37b08fc..bb8b10fb6f 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.2.0-next.2", + "version": "1.2.0", "private": false, "publishConfig": { "access": "public" @@ -37,7 +37,7 @@ "techdocs-cli": "bin/techdocs-cli" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", + "@backstage/cli": "^0.18.1", "@types/commander": "^2.12.2", "@types/fs-extra": "^9.0.6", "@types/http-proxy": "^1.17.4", @@ -62,11 +62,11 @@ "ext": "ts" }, "dependencies": { - "@backstage/backend-common": "^0.15.0-next.1", + "@backstage/backend-common": "^0.15.0", "@backstage/catalog-model": "^1.1.0", "@backstage/cli-common": "^0.1.9", "@backstage/config": "^1.0.1", - "@backstage/plugin-techdocs-node": "^1.3.0-next.1", + "@backstage/plugin-techdocs-node": "^1.3.0", "@types/dockerode": "^3.3.0", "commander": "^9.1.0", "dockerode": "^3.3.1", diff --git a/packages/test-utils/CHANGELOG.md b/packages/test-utils/CHANGELOG.md index 7162c293dd..4f15c6a665 100644 --- a/packages/test-utils/CHANGELOG.md +++ b/packages/test-utils/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/test-utils +## 1.1.3 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.0.5 + - @backstage/core-app-api@1.0.5 + - @backstage/plugin-permission-react@0.4.4 + ## 1.1.3-next.0 ### Patch Changes diff --git a/packages/test-utils/package.json b/packages/test-utils/package.json index d7558a8c57..0ee76a55ab 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.1.3-next.0", + "version": "1.1.3", "private": false, "publishConfig": { "access": "public", @@ -34,10 +34,10 @@ }, "dependencies": { "@backstage/config": "^1.0.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/core-plugin-api": "^1.0.5-next.0", + "@backstage/core-app-api": "^1.0.5", + "@backstage/core-plugin-api": "^1.0.5", "@backstage/plugin-permission-common": "^0.6.3", - "@backstage/plugin-permission-react": "^0.4.4-next.0", + "@backstage/plugin-permission-react": "^0.4.4", "@backstage/theme": "^0.2.16", "@backstage/types": "^1.0.0", "@material-ui/core": "^4.12.2", @@ -55,7 +55,7 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.0", + "@backstage/cli": "^0.18.1", "@types/jest": "^26.0.7", "@types/node": "^16.11.26", "msw": "^0.44.0" diff --git a/plugins/adr-backend/CHANGELOG.md b/plugins/adr-backend/CHANGELOG.md index b68f6f3bd2..a4ad1edfa4 100644 --- a/plugins/adr-backend/CHANGELOG.md +++ b/plugins/adr-backend/CHANGELOG.md @@ -1,5 +1,34 @@ # @backstage/plugin-adr-backend +## 0.2.0 + +### Minor Changes + +- bfc7c50a09: Display associated entity as a chip in `AdrSearchResultListItem` + + BREAKING: `AdrDocument` now includes a `entityRef` property, if you have a custom `AdrParser` you will have to supply this property in your returned documents + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/plugin-adr-common@0.2.0 + - @backstage/integration@1.3.0 + +## 0.2.0-next.1 + +### Minor Changes + +- bfc7c50a09: Display associated entity as a chip in `AdrSearchResultListItem` + + BREAKING: `AdrDocument` now includes a `entityRef` property, if you have a custom `AdrParser` you will have to supply this property in your returned documents + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-adr-common@0.2.0-next.1 + - @backstage/backend-common@0.15.0-next.2 + ## 0.1.3-next.0 ### Patch Changes diff --git a/plugins/adr-backend/package.json b/plugins/adr-backend/package.json index 137a94a66d..0ecc3471c4 100644 --- a/plugins/adr-backend/package.json +++ b/plugins/adr-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-adr-backend", - "version": "0.1.3-next.0", + "version": "0.2.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -29,13 +29,13 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@backstage/backend-common": "^0.15.0-next.0", + "@backstage/backend-common": "^0.15.0", "@backstage/catalog-client": "^1.0.4", "@backstage/catalog-model": "^1.1.0", "@backstage/config": "^1.0.1", "@backstage/errors": "^1.1.0", - "@backstage/integration": "^1.3.0-next.0", - "@backstage/plugin-adr-common": "^0.1.3-next.0", + "@backstage/integration": "^1.3.0", + "@backstage/plugin-adr-common": "^0.2.0", "@backstage/plugin-search-common": "^1.0.0", "luxon": "^3.0.0", "marked": "^4.0.14", @@ -44,7 +44,7 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.0", + "@backstage/cli": "^0.18.1", "@types/marked": "^4.0.0", "@types/supertest": "^2.0.8", "supertest": "^6.1.3", diff --git a/plugins/adr-backend/src/search/DefaultAdrCollatorFactory.ts b/plugins/adr-backend/src/search/DefaultAdrCollatorFactory.ts index e0c90af767..811b52ba82 100644 --- a/plugins/adr-backend/src/search/DefaultAdrCollatorFactory.ts +++ b/plugins/adr-backend/src/search/DefaultAdrCollatorFactory.ts @@ -142,6 +142,7 @@ export class DefaultAdrCollatorFactory implements DocumentCollatorFactory { 'metadata.annotations', 'metadata.name', 'metadata.namespace', + 'metadata.title', ], }, { token }, diff --git a/plugins/adr-backend/src/search/createMadrParser.ts b/plugins/adr-backend/src/search/createMadrParser.ts index 9efd49754a..6b77ec2fa7 100644 --- a/plugins/adr-backend/src/search/createMadrParser.ts +++ b/plugins/adr-backend/src/search/createMadrParser.ts @@ -16,6 +16,7 @@ import { DateTime } from 'luxon'; import { marked } from 'marked'; +import { stringifyEntityRef } from '@backstage/catalog-model'; import { MADR_DATE_FORMAT } from '@backstage/plugin-adr-common'; import { AdrParser } from './types'; @@ -101,6 +102,8 @@ export const createMadrParser = ( text: content, status: adrStatus, date: adrDate, + entityRef: stringifyEntityRef(entity), + entityTitle: entity.metadata.title, location: applyArgsToFormat(locationTemplate, { namespace: entity.metadata.namespace || 'default', kind: entity.kind, diff --git a/plugins/adr-common/CHANGELOG.md b/plugins/adr-common/CHANGELOG.md index a5f58a7ed4..baf239d0ab 100644 --- a/plugins/adr-common/CHANGELOG.md +++ b/plugins/adr-common/CHANGELOG.md @@ -1,5 +1,26 @@ # @backstage/plugin-adr-common +## 0.2.0 + +### Minor Changes + +- bfc7c50a09: Display associated entity as a chip in `AdrSearchResultListItem` + + BREAKING: `AdrDocument` now includes a `entityRef` property, if you have a custom `AdrParser` you will have to supply this property in your returned documents + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.3.0 + +## 0.2.0-next.1 + +### Minor Changes + +- bfc7c50a09: Display associated entity as a chip in `AdrSearchResultListItem` + + BREAKING: `AdrDocument` now includes a `entityRef` property, if you have a custom `AdrParser` you will have to supply this property in your returned documents + ## 0.1.3-next.0 ### Patch Changes diff --git a/plugins/adr-common/api-report.md b/plugins/adr-common/api-report.md index 290d984181..0236b355a5 100644 --- a/plugins/adr-common/api-report.md +++ b/plugins/adr-common/api-report.md @@ -10,6 +10,8 @@ import { ScmIntegrationRegistry } from '@backstage/integration'; // @public export interface AdrDocument extends IndexableDocument { date?: string; + entityRef: string; + entityTitle?: string; status?: string; } diff --git a/plugins/adr-common/package.json b/plugins/adr-common/package.json index f1418000d6..76058f8a86 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.1.3-next.0", + "version": "0.2.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -31,11 +31,11 @@ }, "dependencies": { "@backstage/catalog-model": "^1.1.0", - "@backstage/integration": "^1.3.0-next.0", + "@backstage/integration": "^1.3.0", "@backstage/plugin-search-common": "^1.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.0" + "@backstage/cli": "^0.18.1" }, "files": [ "dist" diff --git a/plugins/adr-common/src/index.ts b/plugins/adr-common/src/index.ts index 94b6b788c8..c3a048d9d1 100644 --- a/plugins/adr-common/src/index.ts +++ b/plugins/adr-common/src/index.ts @@ -84,6 +84,14 @@ export const madrFilePathFilter: AdrFilePathFilterFn = (path: string) => * @public */ export interface AdrDocument extends IndexableDocument { + /** + * Ref of the entity associated with this ADR + */ + entityRef: string; + /** + * Title of the entity associated with this ADR + */ + entityTitle?: string; /** * ADR status label */ diff --git a/plugins/adr/CHANGELOG.md b/plugins/adr/CHANGELOG.md index 0ba1d96995..f3f92199e4 100644 --- a/plugins/adr/CHANGELOG.md +++ b/plugins/adr/CHANGELOG.md @@ -1,5 +1,36 @@ # @backstage/plugin-adr +## 0.2.0 + +### Minor Changes + +- bfc7c50a09: Display associated entity as a chip in `AdrSearchResultListItem` + + BREAKING: `AdrDocument` now includes a `entityRef` property, if you have a custom `AdrParser` you will have to supply this property in your returned documents + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-adr-common@0.2.0 + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + - @backstage/integration-react@1.1.3 + - @backstage/plugin-search-react@1.0.1 + +## 0.2.0-next.2 + +### Minor Changes + +- bfc7c50a09: Display associated entity as a chip in `AdrSearchResultListItem` + + BREAKING: `AdrDocument` now includes a `entityRef` property, if you have a custom `AdrParser` you will have to supply this property in your returned documents + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-adr-common@0.2.0-next.1 + ## 0.1.3-next.1 ### Patch Changes diff --git a/plugins/adr/api-report.md b/plugins/adr/api-report.md index 5059d51023..ecec0c0dd5 100644 --- a/plugins/adr/api-report.md +++ b/plugins/adr/api-report.md @@ -31,13 +31,7 @@ export const adrPlugin: BackstagePlugin< // @public export const AdrReader: { - ({ - adr, - decorators, - }: { - adr: string; - decorators?: AdrContentDecorator[] | undefined; - }): JSX.Element; + (props: { adr: string; decorators?: AdrContentDecorator[] }): JSX.Element; decorators: Readonly<{ createRewriteRelativeLinksDecorator(): AdrContentDecorator; createRewriteRelativeEmbedsDecorator(): AdrContentDecorator; @@ -45,23 +39,15 @@ export const AdrReader: { }; // @public -export const AdrSearchResultListItem: ({ - lineClamp, - highlight, - rank, - result, -}: { - lineClamp?: number | undefined; - highlight?: ResultHighlight | undefined; - rank?: number | undefined; +export function AdrSearchResultListItem(props: { + lineClamp?: number; + highlight?: ResultHighlight; + rank?: number; result: AdrDocument; -}) => JSX.Element; +}): JSX.Element; // @public -export const EntityAdrContent: ({ - contentDecorators, - filePathFilterFn, -}: { +export const EntityAdrContent: (props: { contentDecorators?: AdrContentDecorator[] | undefined; filePathFilterFn?: AdrFilePathFilterFn | undefined; }) => JSX.Element; diff --git a/plugins/adr/package.json b/plugins/adr/package.json index e9c2f05e0f..e6010addd8 100644 --- a/plugins/adr/package.json +++ b/plugins/adr/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-adr", - "version": "0.1.3-next.1", + "version": "0.2.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -22,13 +22,14 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", - "@backstage/integration-react": "^1.1.3-next.1", - "@backstage/plugin-adr-common": "^0.1.3-next.0", - "@backstage/plugin-catalog-react": "^1.1.3-next.2", + "@backstage/catalog-model": "^1.1.0", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", + "@backstage/integration-react": "^1.1.3", + "@backstage/plugin-adr-common": "^0.2.0", + "@backstage/plugin-catalog-react": "^1.1.3", "@backstage/plugin-search-common": "^1.0.0", - "@backstage/plugin-search-react": "^1.0.1-next.1", + "@backstage/plugin-search-react": "^1.0.1", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -44,10 +45,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/core-app-api": "^1.0.5", + "@backstage/dev-utils": "^1.0.5", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/adr/src/components/AdrReader/AdrReader.tsx b/plugins/adr/src/components/AdrReader/AdrReader.tsx index ae7dc6c271..3667d8fd8c 100644 --- a/plugins/adr/src/components/AdrReader/AdrReader.tsx +++ b/plugins/adr/src/components/AdrReader/AdrReader.tsx @@ -32,15 +32,14 @@ import { AdrContentDecorator } from './types'; /** * Component to fetch and render an ADR. + * * @public */ -export const AdrReader = ({ - adr, - decorators, -}: { +export const AdrReader = (props: { adr: string; decorators?: AdrContentDecorator[]; }) => { + const { adr, decorators } = props; const { entity } = useEntity(); const scmIntegrations = useApi(scmIntegrationsApiRef); const adrLocationUrl = getAdrLocationUrl(entity, scmIntegrations); diff --git a/plugins/adr/src/components/EntityAdrContent/EntityAdrContent.tsx b/plugins/adr/src/components/EntityAdrContent/EntityAdrContent.tsx index bd8e4be3cf..37344cecca 100644 --- a/plugins/adr/src/components/EntityAdrContent/EntityAdrContent.tsx +++ b/plugins/adr/src/components/EntityAdrContent/EntityAdrContent.tsx @@ -58,13 +58,11 @@ const useStyles = makeStyles((theme: Theme) => ({ * Component for browsing ADRs on an entity page. * @public */ -export const EntityAdrContent = ({ - contentDecorators, - filePathFilterFn, -}: { +export const EntityAdrContent = (props: { contentDecorators?: AdrContentDecorator[]; filePathFilterFn?: AdrFilePathFilterFn; }) => { + const { contentDecorators, filePathFilterFn } = props; const classes = useStyles(); const { entity } = useEntity(); const rootLink = useRouteRef(rootRouteRef); diff --git a/plugins/adr/src/search/AdrSearchResultListItem.tsx b/plugins/adr/src/search/AdrSearchResultListItem.tsx index 677e39fc11..d76f2cca4e 100644 --- a/plugins/adr/src/search/AdrSearchResultListItem.tsx +++ b/plugins/adr/src/search/AdrSearchResultListItem.tsx @@ -23,9 +23,11 @@ import { ListItemText, makeStyles, } from '@material-ui/core'; +import { parseEntityRef } from '@backstage/catalog-model'; import { Link } from '@backstage/core-components'; import { useAnalytics } from '@backstage/core-plugin-api'; import { AdrDocument } from '@backstage/plugin-adr-common'; +import { humanizeEntityRef } from '@backstage/plugin-catalog-react'; import { ResultHighlight } from '@backstage/plugin-search-common'; import { HighlightedSearchResultText } from '@backstage/plugin-search-react'; @@ -41,20 +43,16 @@ const useStyles = makeStyles({ }); /** - * A component to display a ADR search result + * A component to display an ADR search result. * @public */ -export const AdrSearchResultListItem = ({ - lineClamp = 5, - highlight, - rank, - result, -}: { +export function AdrSearchResultListItem(props: { lineClamp?: number; highlight?: ResultHighlight; rank?: number; result: AdrDocument; -}) => { +}) { + const { lineClamp = 5, highlight, rank, result } = props; const classes = useStyles(); const analytics = useAnalytics(); @@ -104,6 +102,13 @@ export const AdrSearchResultListItem = ({ } /> + {result.status && ( )} @@ -113,4 +118,4 @@ export const AdrSearchResultListItem = ({ ); -}; +} diff --git a/plugins/airbrake-backend/CHANGELOG.md b/plugins/airbrake-backend/CHANGELOG.md index 1513dd88ac..01d44965d8 100644 --- a/plugins/airbrake-backend/CHANGELOG.md +++ b/plugins/airbrake-backend/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-airbrake-backend +## 0.2.8 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + ## 0.2.8-next.0 ### Patch Changes diff --git a/plugins/airbrake-backend/package.json b/plugins/airbrake-backend/package.json index 888cf84cfa..d484e33ad1 100644 --- a/plugins/airbrake-backend/package.json +++ b/plugins/airbrake-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-airbrake-backend", - "version": "0.2.8-next.0", + "version": "0.2.8", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -22,7 +22,7 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.15.0-next.0", + "@backstage/backend-common": "^0.15.0", "@backstage/config": "^1.0.1", "@types/express": "*", "express": "^4.17.1", @@ -33,7 +33,7 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.0", + "@backstage/cli": "^0.18.1", "@types/http-proxy-middleware": "^0.19.3", "@types/supertest": "^2.0.8", "supertest": "^6.1.6", diff --git a/plugins/airbrake/CHANGELOG.md b/plugins/airbrake/CHANGELOG.md index db6227fbc6..9aeec07ae3 100644 --- a/plugins/airbrake/CHANGELOG.md +++ b/plugins/airbrake/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-airbrake +## 0.3.8 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + - @backstage/dev-utils@1.0.5 + - @backstage/test-utils@1.1.3 + ## 0.3.8-next.1 ### Patch Changes diff --git a/plugins/airbrake/package.json b/plugins/airbrake/package.json index cd8149c4b3..d27b1bb0ae 100644 --- a/plugins/airbrake/package.json +++ b/plugins/airbrake/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-airbrake", - "version": "0.3.8-next.1", + "version": "0.3.8", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -24,11 +24,11 @@ }, "dependencies": { "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/plugin-catalog-react": "^1.1.3-next.2", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", + "@backstage/dev-utils": "^1.0.5", + "@backstage/plugin-catalog-react": "^1.1.3", + "@backstage/test-utils": "^1.1.3", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -40,10 +40,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/app-defaults": "^1.0.5-next.1", - "@backstage/cli": "^0.18.1-next.1", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/app-defaults": "^1.0.5", + "@backstage/cli": "^0.18.1", + "@backstage/dev-utils": "^1.0.5", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/allure/CHANGELOG.md b/plugins/allure/CHANGELOG.md index 6e891020f4..f93b59fbae 100644 --- a/plugins/allure/CHANGELOG.md +++ b/plugins/allure/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-allure +## 0.1.24 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + ## 0.1.24-next.1 ### Patch Changes diff --git a/plugins/allure/package.json b/plugins/allure/package.json index 918cb165a6..b79a1cee95 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.24-next.1", + "version": "0.1.24", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -26,9 +26,9 @@ }, "dependencies": { "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", - "@backstage/plugin-catalog-react": "^1.1.3-next.2", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", + "@backstage/plugin-catalog-react": "^1.1.3", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -40,10 +40,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/core-app-api": "^1.0.5", + "@backstage/dev-utils": "^1.0.5", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/analytics-module-ga/CHANGELOG.md b/plugins/analytics-module-ga/CHANGELOG.md index 6f07805377..10ecbc4def 100644 --- a/plugins/analytics-module-ga/CHANGELOG.md +++ b/plugins/analytics-module-ga/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-analytics-module-ga +## 0.1.19 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + ## 0.1.19-next.1 ### Patch Changes diff --git a/plugins/analytics-module-ga/package.json b/plugins/analytics-module-ga/package.json index e11b0b3be1..4f9927585b 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.19-next.1", + "version": "0.1.19", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -25,8 +25,8 @@ }, "dependencies": { "@backstage/config": "^1.0.1", - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -38,10 +38,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/core-app-api": "^1.0.5", + "@backstage/dev-utils": "^1.0.5", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/apache-airflow/CHANGELOG.md b/plugins/apache-airflow/CHANGELOG.md index e504184203..4306582b59 100644 --- a/plugins/apache-airflow/CHANGELOG.md +++ b/plugins/apache-airflow/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-apache-airflow +## 0.2.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + ## 0.2.1-next.1 ### Patch Changes diff --git a/plugins/apache-airflow/api-report.md b/plugins/apache-airflow/api-report.md index 428f3238e8..2f03d34205 100644 --- a/plugins/apache-airflow/api-report.md +++ b/plugins/apache-airflow/api-report.md @@ -9,9 +9,7 @@ import { BackstagePlugin } from '@backstage/core-plugin-api'; import { RouteRef } from '@backstage/core-plugin-api'; // @public -export const ApacheAirflowDagTable: ({ - dagIds, -}: { +export const ApacheAirflowDagTable: (props: { dagIds?: string[] | undefined; }) => JSX.Element; diff --git a/plugins/apache-airflow/package.json b/plugins/apache-airflow/package.json index 433a340a6b..7625ff730c 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.1-next.1", + "version": "0.2.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -23,8 +23,8 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -36,10 +36,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/core-app-api": "^1.0.5", + "@backstage/dev-utils": "^1.0.5", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/apache-airflow/src/components/DagTableComponent/DagTableComponent.tsx b/plugins/apache-airflow/src/components/DagTableComponent/DagTableComponent.tsx index 2514d70d45..fcd87b2020 100644 --- a/plugins/apache-airflow/src/components/DagTableComponent/DagTableComponent.tsx +++ b/plugins/apache-airflow/src/components/DagTableComponent/DagTableComponent.tsx @@ -134,7 +134,8 @@ type DagTableComponentProps = { dagIds?: string[]; }; -export const DagTableComponent = ({ dagIds }: DagTableComponentProps) => { +export const DagTableComponent = (props: DagTableComponentProps) => { + const { dagIds } = props; const apiClient = useApi(apacheAirflowApiRef); const { value, loading, error } = useAsync(async (): Promise => { diff --git a/plugins/api-docs/CHANGELOG.md b/plugins/api-docs/CHANGELOG.md index fb0d41b7c1..3d4dae36f1 100644 --- a/plugins/api-docs/CHANGELOG.md +++ b/plugins/api-docs/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-api-docs +## 0.8.8 + +### Patch Changes + +- dae12c71cf: Updated dependency `@asyncapi/react-component` to `1.0.0-next.40`. +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog@1.5.0 + - @backstage/plugin-catalog-react@1.1.3 + ## 0.8.8-next.2 ### Patch Changes diff --git a/plugins/api-docs/api-report.md b/plugins/api-docs/api-report.md index e32a529df2..0872d97355 100644 --- a/plugins/api-docs/api-report.md +++ b/plugins/api-docs/api-report.md @@ -17,13 +17,9 @@ import { TableColumn } from '@backstage/core-components'; import { TableProps } from '@backstage/core-components'; import { UserListFilterKind } from '@backstage/plugin-catalog-react'; -// Warning: (ae-missing-release-tag) "ApiDefinitionCard" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export const ApiDefinitionCard: () => JSX.Element; -// Warning: (ae-missing-release-tag) "ApiDefinitionWidget" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export type ApiDefinitionWidget = { type: string; @@ -32,14 +28,17 @@ export type ApiDefinitionWidget = { rawLanguage?: string; }; -// Warning: (ae-forgotten-export) The symbol "ApiDocsConfig" needs to be exported by the entry point index.d.ts -// Warning: (ae-missing-release-tag) "apiDocsConfigRef" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// +// @public (undocumented) +export interface ApiDocsConfig { + // (undocumented) + getApiDefinitionWidget: ( + apiEntity: ApiEntity, + ) => ApiDefinitionWidget | undefined; +} + // @public (undocumented) export const apiDocsConfigRef: ApiRef; -// Warning: (ae-missing-release-tag) "apiDocsPlugin" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) const apiDocsPlugin: BackstagePlugin< { @@ -58,54 +57,38 @@ export const ApiExplorerIndexPage: ( props: DefaultApiExplorerPageProps, ) => JSX.Element; -// Warning: (ae-missing-release-tag) "ApiExplorerPage" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export const ApiExplorerPage: ( props: DefaultApiExplorerPageProps, ) => JSX.Element; -// Warning: (ae-missing-release-tag) "ApiTypeTitle" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) -export const ApiTypeTitle: ({ - apiEntity, -}: { - apiEntity: ApiEntity; -}) => JSX.Element; +export const ApiTypeTitle: (props: { apiEntity: ApiEntity }) => JSX.Element; -// Warning: (ae-missing-release-tag) "AsyncApiDefinitionWidget" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export const AsyncApiDefinitionWidget: ( props: AsyncApiDefinitionWidgetProps, ) => JSX.Element; -// Warning: (ae-missing-release-tag) "AsyncApiDefinitionWidgetProps" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export type AsyncApiDefinitionWidgetProps = { definition: string; }; -// Warning: (ae-forgotten-export) The symbol "Props" needs to be exported by the entry point index.d.ts -// Warning: (ae-missing-release-tag) "ConsumedApisCard" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) -export const ConsumedApisCard: ({ variant }: Props) => JSX.Element; +export const ConsumedApisCard: (props: { + variant?: InfoCardVariants; +}) => JSX.Element; -// Warning: (ae-forgotten-export) The symbol "Props" needs to be exported by the entry point index.d.ts -// Warning: (ae-missing-release-tag) "ConsumingComponentsCard" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) -export const ConsumingComponentsCard: ({ variant }: Props_4) => JSX.Element; +export const ConsumingComponentsCard: (props: { + variant?: InfoCardVariants; +}) => JSX.Element; // @public -export const DefaultApiExplorerPage: ({ - initiallySelectedFilter, - columns, - actions, -}: DefaultApiExplorerPageProps) => JSX.Element; +export const DefaultApiExplorerPage: ( + props: DefaultApiExplorerPageProps, +) => JSX.Element; // @public export type DefaultApiExplorerPageProps = { @@ -114,119 +97,80 @@ export type DefaultApiExplorerPageProps = { actions?: TableProps['actions']; }; -// Warning: (ae-missing-release-tag) "defaultDefinitionWidgets" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export function defaultDefinitionWidgets(): ApiDefinitionWidget[]; -// Warning: (ae-missing-release-tag) "EntityApiDefinitionCard" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export const EntityApiDefinitionCard: () => JSX.Element; -// Warning: (ae-missing-release-tag) "EntityConsumedApisCard" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) -export const EntityConsumedApisCard: ({ - variant, -}: { +export const EntityConsumedApisCard: (props: { variant?: InfoCardVariants | undefined; }) => JSX.Element; -// Warning: (ae-missing-release-tag) "EntityConsumingComponentsCard" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) -export const EntityConsumingComponentsCard: ({ - variant, -}: { +export const EntityConsumingComponentsCard: (props: { variant?: InfoCardVariants | undefined; }) => JSX.Element; -// Warning: (ae-missing-release-tag) "EntityHasApisCard" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) -export const EntityHasApisCard: ({ - variant, -}: { +export const EntityHasApisCard: (props: { variant?: InfoCardVariants | undefined; }) => JSX.Element; -// Warning: (ae-missing-release-tag) "EntityProvidedApisCard" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) -export const EntityProvidedApisCard: ({ - variant, -}: { +export const EntityProvidedApisCard: (props: { variant?: InfoCardVariants | undefined; }) => JSX.Element; -// Warning: (ae-missing-release-tag) "EntityProvidingComponentsCard" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) -export const EntityProvidingComponentsCard: ({ - variant, -}: { +export const EntityProvidingComponentsCard: (props: { variant?: InfoCardVariants | undefined; }) => JSX.Element; -// Warning: (ae-missing-release-tag) "GraphQlDefinitionWidget" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export const GraphQlDefinitionWidget: ( props: GraphQlDefinitionWidgetProps, ) => JSX.Element; -// Warning: (ae-missing-release-tag) "GraphQlDefinitionWidgetProps" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export type GraphQlDefinitionWidgetProps = { definition: string; }; -// Warning: (ae-forgotten-export) The symbol "Props" needs to be exported by the entry point index.d.ts -// Warning: (ae-missing-release-tag) "HasApisCard" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) -export const HasApisCard: ({ variant }: Props_2) => JSX.Element; +export const HasApisCard: (props: { + variant?: InfoCardVariants; +}) => JSX.Element; -// Warning: (ae-missing-release-tag) "OpenApiDefinitionWidget" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export const OpenApiDefinitionWidget: ( props: OpenApiDefinitionWidgetProps, ) => JSX.Element; -// Warning: (ae-missing-release-tag) "OpenApiDefinitionWidgetProps" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export type OpenApiDefinitionWidgetProps = { definition: string; }; -// Warning: (ae-missing-release-tag) "PlainApiDefinitionWidget" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export const PlainApiDefinitionWidget: ( props: PlainApiDefinitionWidgetProps, ) => JSX.Element; -// Warning: (ae-missing-release-tag) "PlainApiDefinitionWidgetProps" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export type PlainApiDefinitionWidgetProps = { definition: any; language: string; }; -// Warning: (ae-forgotten-export) The symbol "Props" needs to be exported by the entry point index.d.ts -// Warning: (ae-missing-release-tag) "ProvidedApisCard" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) -export const ProvidedApisCard: ({ variant }: Props_3) => JSX.Element; +export const ProvidedApisCard: (props: { + variant?: InfoCardVariants; +}) => JSX.Element; -// Warning: (ae-forgotten-export) The symbol "Props" needs to be exported by the entry point index.d.ts -// Warning: (ae-missing-release-tag) "ProvidingComponentsCard" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) -export const ProvidingComponentsCard: ({ variant }: Props_5) => JSX.Element; +export const ProvidingComponentsCard: (props: { + variant?: InfoCardVariants; +}) => JSX.Element; ``` diff --git a/plugins/api-docs/package.json b/plugins/api-docs/package.json index d1210c9646..8e2b400f91 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.8.8-next.2", + "version": "0.8.8", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -35,10 +35,10 @@ "dependencies": { "@asyncapi/react-component": "1.0.0-next.40", "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", - "@backstage/plugin-catalog": "^1.5.0-next.2", - "@backstage/plugin-catalog-react": "^1.1.3-next.2", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", + "@backstage/plugin-catalog": "^1.5.0", + "@backstage/plugin-catalog-react": "^1.1.3", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -57,10 +57,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/core-app-api": "^1.0.5", + "@backstage/dev-utils": "^1.0.5", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/api-docs/src/components/ApiDefinitionCard/ApiDefinitionCard.tsx b/plugins/api-docs/src/components/ApiDefinitionCard/ApiDefinitionCard.tsx index 353b973626..679069f209 100644 --- a/plugins/api-docs/src/components/ApiDefinitionCard/ApiDefinitionCard.tsx +++ b/plugins/api-docs/src/components/ApiDefinitionCard/ApiDefinitionCard.tsx @@ -24,6 +24,7 @@ import { PlainApiDefinitionWidget } from '../PlainApiDefinitionWidget'; import { CardTab, TabbedCard } from '@backstage/core-components'; import { useApi } from '@backstage/core-plugin-api'; +/** @public */ export const ApiDefinitionCard = () => { const { entity } = useEntity(); const config = useApi(apiDocsConfigRef); diff --git a/plugins/api-docs/src/components/ApiDefinitionCard/ApiDefinitionWidget.tsx b/plugins/api-docs/src/components/ApiDefinitionCard/ApiDefinitionWidget.tsx index 3b7aa406d4..03a56eaa78 100644 --- a/plugins/api-docs/src/components/ApiDefinitionCard/ApiDefinitionWidget.tsx +++ b/plugins/api-docs/src/components/ApiDefinitionCard/ApiDefinitionWidget.tsx @@ -19,6 +19,7 @@ import { GraphQlDefinitionWidget } from '../GraphQlDefinitionWidget'; import { OpenApiDefinitionWidget } from '../OpenApiDefinitionWidget'; import { GrpcApiDefinitionWidget } from '../GrpcApiDefinitionWidget'; +/** @public */ export type ApiDefinitionWidget = { type: string; title: string; @@ -26,6 +27,7 @@ export type ApiDefinitionWidget = { rawLanguage?: string; }; +/** @public */ export function defaultDefinitionWidgets(): ApiDefinitionWidget[] { return [ { diff --git a/plugins/api-docs/src/components/ApiDefinitionCard/ApiTypeTitle.tsx b/plugins/api-docs/src/components/ApiDefinitionCard/ApiTypeTitle.tsx index 787c91f12b..93ab7cc05a 100644 --- a/plugins/api-docs/src/components/ApiDefinitionCard/ApiTypeTitle.tsx +++ b/plugins/api-docs/src/components/ApiDefinitionCard/ApiTypeTitle.tsx @@ -19,7 +19,11 @@ import React from 'react'; import { apiDocsConfigRef } from '../../config'; import { useApi } from '@backstage/core-plugin-api'; -export const ApiTypeTitle = ({ apiEntity }: { apiEntity: ApiEntity }) => { +/** + * @public + */ +export const ApiTypeTitle = (props: { apiEntity: ApiEntity }) => { + const { apiEntity } = props; const config = useApi(apiDocsConfigRef); const definition = config.getApiDefinitionWidget(apiEntity); const type = definition ? definition.title : apiEntity.spec.type; diff --git a/plugins/api-docs/src/components/ApiExplorerPage/DefaultApiExplorerPage.tsx b/plugins/api-docs/src/components/ApiExplorerPage/DefaultApiExplorerPage.tsx index b0acd3567c..ad43205c5f 100644 --- a/plugins/api-docs/src/components/ApiExplorerPage/DefaultApiExplorerPage.tsx +++ b/plugins/api-docs/src/components/ApiExplorerPage/DefaultApiExplorerPage.tsx @@ -64,11 +64,9 @@ export type DefaultApiExplorerPageProps = { * DefaultApiExplorerPage * @public */ -export const DefaultApiExplorerPage = ({ - initiallySelectedFilter = 'all', - columns, - actions, -}: DefaultApiExplorerPageProps) => { +export const DefaultApiExplorerPage = (props: DefaultApiExplorerPageProps) => { + const { initiallySelectedFilter = 'all', columns, actions } = props; + const configApi = useApi(configApiRef); const generatedSubtitle = `${ configApi.getOptionalString('organization.name') ?? 'Backstage' diff --git a/plugins/api-docs/src/components/ApisCards/ConsumedApisCard.tsx b/plugins/api-docs/src/components/ApisCards/ConsumedApisCard.tsx index fde41425c9..588e62ceb7 100644 --- a/plugins/api-docs/src/components/ApisCards/ConsumedApisCard.tsx +++ b/plugins/api-docs/src/components/ApisCards/ConsumedApisCard.tsx @@ -32,11 +32,11 @@ import { WarningPanel, } from '@backstage/core-components'; -type Props = { - variant?: InfoCardVariants; -}; - -export const ConsumedApisCard = ({ variant = 'gridItem' }: Props) => { +/** + * @public + */ +export const ConsumedApisCard = (props: { variant?: InfoCardVariants }) => { + const { variant = 'gridItem' } = props; const { entity } = useEntity(); const { entities, loading, error } = useRelatedEntities(entity, { type: RELATION_CONSUMES_API, diff --git a/plugins/api-docs/src/components/ApisCards/HasApisCard.tsx b/plugins/api-docs/src/components/ApisCards/HasApisCard.tsx index bb22f82269..b09cafacda 100644 --- a/plugins/api-docs/src/components/ApisCards/HasApisCard.tsx +++ b/plugins/api-docs/src/components/ApisCards/HasApisCard.tsx @@ -33,10 +33,6 @@ import { WarningPanel, } from '@backstage/core-components'; -type Props = { - variant?: InfoCardVariants; -}; - const columns: TableColumn[] = [ EntityTable.columns.createEntityRefColumn({ defaultKind: 'API' }), EntityTable.columns.createOwnerColumn(), @@ -45,7 +41,11 @@ const columns: TableColumn[] = [ EntityTable.columns.createMetadataDescriptionColumn(), ]; -export const HasApisCard = ({ variant = 'gridItem' }: Props) => { +/** + * @public + */ +export const HasApisCard = (props: { variant?: InfoCardVariants }) => { + const { variant = 'gridItem' } = props; const { entity } = useEntity(); const { entities, loading, error } = useRelatedEntities(entity, { type: RELATION_HAS_PART, diff --git a/plugins/api-docs/src/components/ApisCards/ProvidedApisCard.tsx b/plugins/api-docs/src/components/ApisCards/ProvidedApisCard.tsx index 6ffb6365d2..e9c63d9956 100644 --- a/plugins/api-docs/src/components/ApisCards/ProvidedApisCard.tsx +++ b/plugins/api-docs/src/components/ApisCards/ProvidedApisCard.tsx @@ -32,11 +32,11 @@ import { WarningPanel, } from '@backstage/core-components'; -type Props = { - variant?: InfoCardVariants; -}; - -export const ProvidedApisCard = ({ variant = 'gridItem' }: Props) => { +/** + * @public + */ +export const ProvidedApisCard = (props: { variant?: InfoCardVariants }) => { + const { variant = 'gridItem' } = props; const { entity } = useEntity(); const { entities, loading, error } = useRelatedEntities(entity, { type: RELATION_PROVIDES_API, diff --git a/plugins/api-docs/src/components/AsyncApiDefinitionWidget/AsyncApiDefinitionWidget.tsx b/plugins/api-docs/src/components/AsyncApiDefinitionWidget/AsyncApiDefinitionWidget.tsx index 03bc6fa8a6..2e8710b008 100644 --- a/plugins/api-docs/src/components/AsyncApiDefinitionWidget/AsyncApiDefinitionWidget.tsx +++ b/plugins/api-docs/src/components/AsyncApiDefinitionWidget/AsyncApiDefinitionWidget.tsx @@ -25,10 +25,12 @@ const LazyAsyncApiDefinition = React.lazy(() => })), ); +/** @public */ export type AsyncApiDefinitionWidgetProps = { definition: string; }; +/** @public */ export const AsyncApiDefinitionWidget = ( props: AsyncApiDefinitionWidgetProps, ) => { diff --git a/plugins/api-docs/src/components/ComponentsCards/ConsumingComponentsCard.tsx b/plugins/api-docs/src/components/ComponentsCards/ConsumingComponentsCard.tsx index af3dcb7204..aa6afc7822 100644 --- a/plugins/api-docs/src/components/ComponentsCards/ConsumingComponentsCard.tsx +++ b/plugins/api-docs/src/components/ComponentsCards/ConsumingComponentsCard.tsx @@ -34,11 +34,13 @@ import { WarningPanel, } from '@backstage/core-components'; -type Props = { +/** + * @public + */ +export const ConsumingComponentsCard = (props: { variant?: InfoCardVariants; -}; - -export const ConsumingComponentsCard = ({ variant = 'gridItem' }: Props) => { +}) => { + const { variant = 'gridItem' } = props; const { entity } = useEntity(); const { entities, loading, error } = useRelatedEntities(entity, { type: RELATION_API_CONSUMED_BY, diff --git a/plugins/api-docs/src/components/ComponentsCards/ProvidingComponentsCard.tsx b/plugins/api-docs/src/components/ComponentsCards/ProvidingComponentsCard.tsx index 0be746de6d..435021e008 100644 --- a/plugins/api-docs/src/components/ComponentsCards/ProvidingComponentsCard.tsx +++ b/plugins/api-docs/src/components/ComponentsCards/ProvidingComponentsCard.tsx @@ -34,11 +34,11 @@ import { WarningPanel, } from '@backstage/core-components'; -type Props = { +/** @public */ +export const ProvidingComponentsCard = (props: { variant?: InfoCardVariants; -}; - -export const ProvidingComponentsCard = ({ variant = 'gridItem' }: Props) => { +}) => { + const { variant = 'gridItem' } = props; const { entity } = useEntity(); const { entities, loading, error } = useRelatedEntities(entity, { type: RELATION_API_PROVIDED_BY, diff --git a/plugins/api-docs/src/components/GraphQlDefinitionWidget/GraphQlDefinitionWidget.tsx b/plugins/api-docs/src/components/GraphQlDefinitionWidget/GraphQlDefinitionWidget.tsx index 1f8a796249..b5cf06e828 100644 --- a/plugins/api-docs/src/components/GraphQlDefinitionWidget/GraphQlDefinitionWidget.tsx +++ b/plugins/api-docs/src/components/GraphQlDefinitionWidget/GraphQlDefinitionWidget.tsx @@ -25,10 +25,12 @@ const LazyGraphQlDefinition = React.lazy(() => })), ); +/** @public */ export type GraphQlDefinitionWidgetProps = { definition: string; }; +/** @public */ export const GraphQlDefinitionWidget = ( props: GraphQlDefinitionWidgetProps, ) => { diff --git a/plugins/api-docs/src/components/GrpcApiDefinitionWidget/GrpcApiDefinitionWidget.tsx b/plugins/api-docs/src/components/GrpcApiDefinitionWidget/GrpcApiDefinitionWidget.tsx index c5f9b071ef..b6bf317099 100644 --- a/plugins/api-docs/src/components/GrpcApiDefinitionWidget/GrpcApiDefinitionWidget.tsx +++ b/plugins/api-docs/src/components/GrpcApiDefinitionWidget/GrpcApiDefinitionWidget.tsx @@ -19,10 +19,12 @@ import { CodeSnippet } from '@backstage/core-components'; import { useTheme } from '@material-ui/core/styles'; import { BackstageTheme } from '@backstage/theme'; +/** @public */ export type GrpcApiDefinitionWidgetProps = { definition: string; }; +/** @public */ export const GrpcApiDefinitionWidget = ( props: GrpcApiDefinitionWidgetProps, ) => { diff --git a/plugins/api-docs/src/components/OpenApiDefinitionWidget/OpenApiDefinitionWidget.tsx b/plugins/api-docs/src/components/OpenApiDefinitionWidget/OpenApiDefinitionWidget.tsx index 606e476454..424a52136b 100644 --- a/plugins/api-docs/src/components/OpenApiDefinitionWidget/OpenApiDefinitionWidget.tsx +++ b/plugins/api-docs/src/components/OpenApiDefinitionWidget/OpenApiDefinitionWidget.tsx @@ -25,10 +25,12 @@ const LazyOpenApiDefinition = React.lazy(() => })), ); +/** @public */ export type OpenApiDefinitionWidgetProps = { definition: string; }; +/** @public */ export const OpenApiDefinitionWidget = ( props: OpenApiDefinitionWidgetProps, ) => { diff --git a/plugins/api-docs/src/components/PlainApiDefinitionWidget/PlainApiDefinitionWidget.tsx b/plugins/api-docs/src/components/PlainApiDefinitionWidget/PlainApiDefinitionWidget.tsx index b7f1e8afc0..c7d7d83c8d 100644 --- a/plugins/api-docs/src/components/PlainApiDefinitionWidget/PlainApiDefinitionWidget.tsx +++ b/plugins/api-docs/src/components/PlainApiDefinitionWidget/PlainApiDefinitionWidget.tsx @@ -17,11 +17,13 @@ import React from 'react'; import { CodeSnippet } from '@backstage/core-components'; +/** @public */ export type PlainApiDefinitionWidgetProps = { definition: any; language: string; }; +/** @public */ export const PlainApiDefinitionWidget = ( props: PlainApiDefinitionWidgetProps, ) => { diff --git a/plugins/api-docs/src/config.ts b/plugins/api-docs/src/config.ts index 979340164b..4d1e650720 100644 --- a/plugins/api-docs/src/config.ts +++ b/plugins/api-docs/src/config.ts @@ -18,10 +18,12 @@ import { ApiEntity } from '@backstage/catalog-model'; import { ApiDefinitionWidget } from './components/ApiDefinitionCard/ApiDefinitionWidget'; import { createApiRef } from '@backstage/core-plugin-api'; +/** @public */ export const apiDocsConfigRef = createApiRef({ id: 'plugin.api-docs.config', }); +/** @public */ export interface ApiDocsConfig { getApiDefinitionWidget: ( apiEntity: ApiEntity, diff --git a/plugins/api-docs/src/index.ts b/plugins/api-docs/src/index.ts index fe98e9c70e..49b2805aad 100644 --- a/plugins/api-docs/src/index.ts +++ b/plugins/api-docs/src/index.ts @@ -21,6 +21,7 @@ */ export * from './components'; +export type { ApiDocsConfig } from './config'; export { apiDocsConfigRef } from './config'; export { apiDocsPlugin, diff --git a/plugins/api-docs/src/plugin.ts b/plugins/api-docs/src/plugin.ts index f1928f4443..cabe2d82cd 100644 --- a/plugins/api-docs/src/plugin.ts +++ b/plugins/api-docs/src/plugin.ts @@ -25,6 +25,7 @@ import { createRoutableExtension, } from '@backstage/core-plugin-api'; +/** @public */ export const apiDocsPlugin = createPlugin({ id: 'api-docs', routes: { @@ -49,6 +50,7 @@ export const apiDocsPlugin = createPlugin({ }, }); +/** @public */ export const ApiExplorerPage = apiDocsPlugin.provide( createRoutableExtension({ name: 'ApiExplorerPage', @@ -58,6 +60,7 @@ export const ApiExplorerPage = apiDocsPlugin.provide( }), ); +/** @public */ export const EntityApiDefinitionCard = apiDocsPlugin.provide( createComponentExtension({ name: 'EntityApiDefinitionCard', @@ -68,6 +71,7 @@ export const EntityApiDefinitionCard = apiDocsPlugin.provide( }), ); +/** @public */ export const EntityConsumedApisCard = apiDocsPlugin.provide( createComponentExtension({ name: 'EntityConsumedApisCard', @@ -78,6 +82,7 @@ export const EntityConsumedApisCard = apiDocsPlugin.provide( }), ); +/** @public */ export const EntityConsumingComponentsCard = apiDocsPlugin.provide( createComponentExtension({ name: 'EntityConsumingComponentsCard', @@ -90,6 +95,7 @@ export const EntityConsumingComponentsCard = apiDocsPlugin.provide( }), ); +/** @public */ export const EntityProvidedApisCard = apiDocsPlugin.provide( createComponentExtension({ name: 'EntityProvidedApisCard', @@ -100,6 +106,7 @@ export const EntityProvidedApisCard = apiDocsPlugin.provide( }), ); +/** @public */ export const EntityProvidingComponentsCard = apiDocsPlugin.provide( createComponentExtension({ name: 'EntityProvidingComponentsCard', @@ -112,6 +119,7 @@ export const EntityProvidingComponentsCard = apiDocsPlugin.provide( }), ); +/** @public */ export const EntityHasApisCard = apiDocsPlugin.provide( createComponentExtension({ name: 'EntityHasApisCard', diff --git a/plugins/apollo-explorer/CHANGELOG.md b/plugins/apollo-explorer/CHANGELOG.md index c0623c981c..fbe32ec2db 100644 --- a/plugins/apollo-explorer/CHANGELOG.md +++ b/plugins/apollo-explorer/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-apollo-explorer +## 0.1.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + ## 0.1.1-next.1 ### Patch Changes diff --git a/plugins/apollo-explorer/api-report.md b/plugins/apollo-explorer/api-report.md index 80dae62e60..1d3b41eac1 100644 --- a/plugins/apollo-explorer/api-report.md +++ b/plugins/apollo-explorer/api-report.md @@ -10,11 +10,7 @@ import { JSONObject } from '@apollo/explorer/src/helpers/types'; import { RouteRef } from '@backstage/core-plugin-api'; // @public -export const ApolloExplorerPage: ({ - title, - subtitle, - endpoints, -}: { +export const ApolloExplorerPage: (props: { title?: string | undefined; subtitle?: string | undefined; endpoints: { diff --git a/plugins/apollo-explorer/package.json b/plugins/apollo-explorer/package.json index b26391eb2c..50e66504c6 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.1-next.1", + "version": "0.1.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -22,8 +22,8 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.9.13", "@material-ui/icons": "^4.9.1", @@ -36,10 +36,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/core-app-api": "^1.0.5", + "@backstage/dev-utils": "^1.0.5", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/apollo-explorer/src/components/ApolloExplorerPage/ApolloExplorerPage.tsx b/plugins/apollo-explorer/src/components/ApolloExplorerPage/ApolloExplorerPage.tsx index c2c02fc646..f90af9bc17 100644 --- a/plugins/apollo-explorer/src/components/ApolloExplorerPage/ApolloExplorerPage.tsx +++ b/plugins/apollo-explorer/src/components/ApolloExplorerPage/ApolloExplorerPage.tsx @@ -41,7 +41,8 @@ type Props = { endpoints: EndpointProps[]; }; -export const ApolloExplorerPage = ({ title, subtitle, endpoints }: Props) => { +export const ApolloExplorerPage = (props: Props) => { + const { title, subtitle, endpoints } = props; return (
diff --git a/plugins/app-backend/CHANGELOG.md b/plugins/app-backend/CHANGELOG.md index 6b18abee30..33845eb9c7 100644 --- a/plugins/app-backend/CHANGELOG.md +++ b/plugins/app-backend/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-app-backend +## 0.3.35 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + ## 0.3.35-next.0 ### Patch Changes diff --git a/plugins/app-backend/package.json b/plugins/app-backend/package.json index a6c7649d40..4d862f02c0 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.35-next.0", + "version": "0.3.35", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,7 +33,7 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.15.0-next.0", + "@backstage/backend-common": "^0.15.0", "@backstage/config-loader": "^1.1.3", "@backstage/config": "^1.0.1", "@backstage/types": "^1.0.0", @@ -50,8 +50,8 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/backend-test-utils": "^0.1.27-next.0", - "@backstage/cli": "^0.18.1-next.0", + "@backstage/backend-test-utils": "^0.1.27", + "@backstage/cli": "^0.18.1", "@backstage/types": "^1.0.0", "@types/supertest": "^2.0.8", "mock-fs": "^5.1.0", diff --git a/plugins/app-backend/src/lib/assets/StaticAssetsStore.test.ts b/plugins/app-backend/src/lib/assets/StaticAssetsStore.test.ts index 95de905e7a..3d0973e18c 100644 --- a/plugins/app-backend/src/lib/assets/StaticAssetsStore.test.ts +++ b/plugins/app-backend/src/lib/assets/StaticAssetsStore.test.ts @@ -14,12 +14,25 @@ * limitations under the License. */ +import { Knex as KnexType } from 'knex'; import { getVoidLogger } from '@backstage/backend-common'; import { TestDatabases } from '@backstage/backend-test-utils'; import { StaticAssetsStore } from './StaticAssetsStore'; const logger = getVoidLogger(); +function createDatabaseManager( + client: KnexType, + skipMigrations: boolean = false, +) { + return { + getClient: async () => client, + migrations: { + skip: skipMigrations, + }, + }; +} + describe('StaticAssetsStore', () => { const databases = TestDatabases.create({ ids: ['POSTGRES_13', 'POSTGRES_9', 'SQLITE_3'], @@ -28,9 +41,11 @@ describe('StaticAssetsStore', () => { it.each(databases.eachSupportedId())( 'should store and retrieve assets, %p', async databaseId => { + const client = await databases.init(databaseId); + const database = createDatabaseManager(client); const store = await StaticAssetsStore.create({ logger, - database: await databases.init(databaseId), + database, }); await store.storeAssets([ @@ -69,9 +84,11 @@ describe('StaticAssetsStore', () => { it.each(databases.eachSupportedId())( 'should update assets timestamps, but not contents, %p', async databaseId => { + const client = await databases.init(databaseId); + const database = createDatabaseManager(client); const store = await StaticAssetsStore.create({ logger, - database: await databases.init(databaseId), + database, }); await store.storeAssets([ @@ -119,7 +136,8 @@ describe('StaticAssetsStore', () => { it.each(databases.eachSupportedId())( 'should trim old assets, %p', async databaseId => { - const database = await databases.init(databaseId); + const knex = await databases.init(databaseId); + const database = createDatabaseManager(knex); const store = await StaticAssetsStore.create({ logger, database, @@ -137,12 +155,12 @@ describe('StaticAssetsStore', () => { ]); // Rewrite modified time of "old" to be 1h in the past - const updated = await database('static_assets_cache') + const updated = await knex('static_assets_cache') .where({ path: 'old' }) .update({ - last_modified_at: database.client.config.client.includes('sqlite3') - ? database.raw(`datetime('now', '-3600 seconds')`) - : database.raw(`now() + interval '-3600 seconds'`), + last_modified_at: knex.client.config.client.includes('sqlite3') + ? knex.raw(`datetime('now', '-3600 seconds')`) + : knex.raw(`now() + interval '-3600 seconds'`), }); expect(updated).toBe(1); diff --git a/plugins/app-backend/src/lib/assets/StaticAssetsStore.ts b/plugins/app-backend/src/lib/assets/StaticAssetsStore.ts index 70d664307e..6905d63779 100644 --- a/plugins/app-backend/src/lib/assets/StaticAssetsStore.ts +++ b/plugins/app-backend/src/lib/assets/StaticAssetsStore.ts @@ -14,7 +14,10 @@ * limitations under the License. */ -import { resolvePackagePath } from '@backstage/backend-common'; +import { + PluginDatabaseManager, + resolvePackagePath, +} from '@backstage/backend-common'; import { Knex } from 'knex'; import { Logger } from 'winston'; import { DateTime } from 'luxon'; @@ -34,7 +37,7 @@ interface StaticAssetRow { /** @internal */ export interface StaticAssetsStoreOptions { - database: Knex; + database: PluginDatabaseManager; logger: Logger; } @@ -48,15 +51,21 @@ export class StaticAssetsStore implements StaticAssetProvider { #logger: Logger; static async create(options: StaticAssetsStoreOptions) { - await options.database.migrate.latest({ - directory: migrationsDir, - }); - return new StaticAssetsStore(options); + const { database } = options; + const client = await database.getClient(); + + if (!database.migrations?.skip) { + await client.migrate.latest({ + directory: migrationsDir, + }); + } + + return new StaticAssetsStore(client, options.logger); } - private constructor(options: StaticAssetsStoreOptions) { - this.#db = options.database; - this.#logger = options.logger; + private constructor(client: Knex, logger: Logger) { + this.#db = client; + this.#logger = logger; } /** diff --git a/plugins/app-backend/src/service/router.ts b/plugins/app-backend/src/service/router.ts index b666f323db..46ecd470da 100644 --- a/plugins/app-backend/src/service/router.ts +++ b/plugins/app-backend/src/service/router.ts @@ -130,7 +130,7 @@ export async function createRouter( if (options.database) { const store = await StaticAssetsStore.create({ logger, - database: await options.database.getClient(), + database: options.database, }); const assets = await findStaticAssets(staticDir); diff --git a/plugins/auth-backend/CHANGELOG.md b/plugins/auth-backend/CHANGELOG.md index bc6460a1dd..43460df12f 100644 --- a/plugins/auth-backend/CHANGELOG.md +++ b/plugins/auth-backend/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-auth-backend +## 0.15.1 + +### Patch Changes + +- c676a9e07b: Fixed a bug in auth plugin on the backend where it ignores the skip migration database options when using the database provider. +- 2d7d6028e1: Updated dependency `@google-cloud/firestore` to `^6.0.0`. +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/plugin-auth-node@0.2.4 + ## 0.15.1-next.1 ### Patch Changes diff --git a/plugins/auth-backend/package.json b/plugins/auth-backend/package.json index 70300fd81a..4628669c78 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.15.1-next.1", + "version": "0.15.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,8 +33,8 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/plugin-auth-node": "^0.2.4-next.0", - "@backstage/backend-common": "^0.15.0-next.0", + "@backstage/plugin-auth-node": "^0.2.4", + "@backstage/backend-common": "^0.15.0", "@backstage/catalog-client": "^1.0.4", "@backstage/catalog-model": "^1.1.0", "@backstage/config": "^1.0.1", @@ -76,8 +76,8 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/backend-test-utils": "^0.1.27-next.0", - "@backstage/cli": "^0.18.1-next.1", + "@backstage/backend-test-utils": "^0.1.27", + "@backstage/cli": "^0.18.1", "@types/body-parser": "^1.19.0", "@types/cookie-parser": "^1.4.2", "@types/express-session": "^1.17.2", diff --git a/plugins/auth-backend/src/identity/DatabaseKeyStore.test.ts b/plugins/auth-backend/src/identity/DatabaseKeyStore.test.ts index fa7b251780..da67a2f88f 100644 --- a/plugins/auth-backend/src/identity/DatabaseKeyStore.test.ts +++ b/plugins/auth-backend/src/identity/DatabaseKeyStore.test.ts @@ -14,10 +14,22 @@ * limitations under the License. */ -import Knex from 'knex'; +import Knex, { Knex as KnexType } from 'knex'; import { DatabaseKeyStore } from './DatabaseKeyStore'; import { DateTime } from 'luxon'; +function createDatabaseManager( + client: KnexType, + skipMigrations: boolean = false, +) { + return { + getClient: async () => client, + migrations: { + skip: skipMigrations, + }, + }; +} + function createDB() { const knex = Knex({ client: 'better-sqlite3', @@ -38,8 +50,10 @@ const keyBase = { describe('DatabaseKeyStore', () => { it('should store a key', async () => { - const database = createDB(); - const store = await DatabaseKeyStore.create({ database }); + const client = createDB(); + const store = await DatabaseKeyStore.create({ + database: createDatabaseManager(client), + }); const key = { kid: '123', @@ -59,8 +73,10 @@ describe('DatabaseKeyStore', () => { }); it('should remove stored keys', async () => { - const database = createDB(); - const store = await DatabaseKeyStore.create({ database }); + const client = createDB(); + const store = await DatabaseKeyStore.create({ + database: createDatabaseManager(client), + }); const key1 = { kid: '1', ...keyBase }; const key2 = { kid: '2', ...keyBase }; diff --git a/plugins/auth-backend/src/identity/DatabaseKeyStore.ts b/plugins/auth-backend/src/identity/DatabaseKeyStore.ts index 6bae1f4412..8039837469 100644 --- a/plugins/auth-backend/src/identity/DatabaseKeyStore.ts +++ b/plugins/auth-backend/src/identity/DatabaseKeyStore.ts @@ -14,7 +14,10 @@ * limitations under the License. */ -import { resolvePackagePath } from '@backstage/backend-common'; +import { + PluginDatabaseManager, + resolvePackagePath, +} from '@backstage/backend-common'; import { Knex } from 'knex'; import { DateTime } from 'luxon'; import { AnyJWK, KeyStore, StoredKey } from './types'; @@ -33,7 +36,7 @@ type Row = { }; type Options = { - database: Knex; + database: PluginDatabaseManager; }; const parseDate = (date: string | Date) => { @@ -54,29 +57,32 @@ const parseDate = (date: string | Date) => { export class DatabaseKeyStore implements KeyStore { static async create(options: Options): Promise { const { database } = options; + const client = await database.getClient(); - await database.migrate.latest({ - directory: migrationsDir, - }); + if (!database.migrations?.skip) { + await client.migrate.latest({ + directory: migrationsDir, + }); + } - return new DatabaseKeyStore(options); + return new DatabaseKeyStore(client); } - private readonly database: Knex; + private readonly client: Knex; - private constructor(options: Options) { - this.database = options.database; + private constructor(client: Knex) { + this.client = client; } async addKey(key: AnyJWK): Promise { - await this.database(TABLE).insert({ + await this.client(TABLE).insert({ kid: key.kid, key: JSON.stringify(key), }); } async listKeys(): Promise<{ items: StoredKey[] }> { - const rows = await this.database(TABLE).select(); + const rows = await this.client(TABLE).select(); return { items: rows.map(row => ({ @@ -87,6 +93,6 @@ export class DatabaseKeyStore implements KeyStore { } async removeKeys(kids: string[]): Promise { - await this.database(TABLE).delete().whereIn('kid', kids); + await this.client(TABLE).delete().whereIn('kid', kids); } } diff --git a/plugins/auth-backend/src/identity/KeyStores.ts b/plugins/auth-backend/src/identity/KeyStores.ts index 3d238adba9..e29b4b6fc4 100644 --- a/plugins/auth-backend/src/identity/KeyStores.ts +++ b/plugins/auth-backend/src/identity/KeyStores.ts @@ -53,9 +53,7 @@ export class KeyStores { throw new Error('This KeyStore provider requires a database'); } - return await DatabaseKeyStore.create({ - database: await database.getClient(), - }); + return await DatabaseKeyStore.create({ database }); } if (provider === 'memory') { diff --git a/plugins/auth-node/CHANGELOG.md b/plugins/auth-node/CHANGELOG.md index 1251030658..c01c24590d 100644 --- a/plugins/auth-node/CHANGELOG.md +++ b/plugins/auth-node/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-auth-node +## 0.2.4 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + ## 0.2.4-next.0 ### Patch Changes diff --git a/plugins/auth-node/package.json b/plugins/auth-node/package.json index 294bc08889..0a5bf2dc19 100644 --- a/plugins/auth-node/package.json +++ b/plugins/auth-node/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-node", - "version": "0.2.4-next.0", + "version": "0.2.4", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -23,7 +23,7 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/backend-common": "^0.15.0-next.0", + "@backstage/backend-common": "^0.15.0", "@backstage/config": "^1.0.1", "@backstage/errors": "^1.1.0", "jose": "^4.6.0", @@ -31,7 +31,7 @@ "winston": "^3.2.1" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.0", + "@backstage/cli": "^0.18.1", "lodash": "^4.17.21", "msw": "^0.44.0", "uuid": "^8.0.0" diff --git a/plugins/azure-devops-backend/CHANGELOG.md b/plugins/azure-devops-backend/CHANGELOG.md index 5171a92bf7..5c8de9557e 100644 --- a/plugins/azure-devops-backend/CHANGELOG.md +++ b/plugins/azure-devops-backend/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-azure-devops-backend +## 0.3.14 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + ## 0.3.14-next.0 ### Patch Changes diff --git a/plugins/azure-devops-backend/api-report.md b/plugins/azure-devops-backend/api-report.md index a50119cc81..fc13fcb371 100644 --- a/plugins/azure-devops-backend/api-report.md +++ b/plugins/azure-devops-backend/api-report.md @@ -21,8 +21,6 @@ import { TeamMember } from '@backstage/plugin-azure-devops-common'; import { UrlReader } from '@backstage/backend-common'; import { WebApi } from 'azure-devops-node-api'; -// Warning: (ae-missing-release-tag) "AzureDevOpsApi" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export class AzureDevOpsApi { constructor(logger: Logger, webApi: WebApi, urlReader: UrlReader); @@ -90,22 +88,15 @@ export class AzureDevOpsApi { top: number, ): Promise; // (undocumented) - getTeamMembers({ - projectId, - teamId, - }: { + getTeamMembers(options: { projectId: string; teamId: string; }): Promise; } -// Warning: (ae-missing-release-tag) "createRouter" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export function createRouter(options: RouterOptions): Promise; -// Warning: (ae-missing-release-tag) "RouterOptions" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export interface RouterOptions { // (undocumented) diff --git a/plugins/azure-devops-backend/package.json b/plugins/azure-devops-backend/package.json index 5c1ecb0901..04bf4844c0 100644 --- a/plugins/azure-devops-backend/package.json +++ b/plugins/azure-devops-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-azure-devops-backend", - "version": "0.3.14-next.0", + "version": "0.3.14", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -23,7 +23,7 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.15.0-next.0", + "@backstage/backend-common": "^0.15.0", "@backstage/config": "^1.0.1", "@backstage/plugin-azure-devops-common": "^0.2.4", "@types/express": "^4.17.6", @@ -36,7 +36,7 @@ "mime-types": "^2.1.27" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.0", + "@backstage/cli": "^0.18.1", "@types/supertest": "^2.0.8", "supertest": "^6.1.6", "msw": "^0.44.0" diff --git a/plugins/azure-devops-backend/src/api/AzureDevOpsApi.ts b/plugins/azure-devops-backend/src/api/AzureDevOpsApi.ts index 92bf90d240..2bf2988a98 100644 --- a/plugins/azure-devops-backend/src/api/AzureDevOpsApi.ts +++ b/plugins/azure-devops-backend/src/api/AzureDevOpsApi.ts @@ -56,6 +56,7 @@ import { } from 'azure-devops-node-api/interfaces/CoreInterfaces'; import { UrlReader } from '@backstage/backend-common'; +/** @public */ export class AzureDevOpsApi { public constructor( private readonly logger: Logger, @@ -77,6 +78,7 @@ export class AzureDevOpsApi { a.name && b.name ? a.name.localeCompare(b.name) : 0, ); } + public async getGitRepository( projectName: string, repoName: string, @@ -298,13 +300,11 @@ export class AzureDevOpsApi { ); } - public async getTeamMembers({ - projectId, - teamId, - }: { + public async getTeamMembers(options: { projectId: string; teamId: string; }): Promise { + const { projectId, teamId } = options; this.logger?.debug(`Getting team member ids for team '${teamId}'.`); const client = await this.webApi.getCoreApi(); diff --git a/plugins/azure-devops-backend/src/service/router.ts b/plugins/azure-devops-backend/src/service/router.ts index d371e79e7e..b6b8a6fdea 100644 --- a/plugins/azure-devops-backend/src/service/router.ts +++ b/plugins/azure-devops-backend/src/service/router.ts @@ -31,6 +31,7 @@ import express from 'express'; const DEFAULT_TOP = 10; +/** @public */ export interface RouterOptions { azureDevOpsApi?: AzureDevOpsApi; logger: Logger; @@ -38,6 +39,7 @@ export interface RouterOptions { reader: UrlReader; } +/** @public */ export async function createRouter( options: RouterOptions, ): Promise { diff --git a/plugins/azure-devops-common/api-report.md b/plugins/azure-devops-common/api-report.md index 9e700e2c36..3dc354b519 100644 --- a/plugins/azure-devops-common/api-report.md +++ b/plugins/azure-devops-common/api-report.md @@ -3,8 +3,6 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts -// Warning: (ae-missing-release-tag) "BuildResult" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export enum BuildResult { Canceled = 32, @@ -14,8 +12,6 @@ export enum BuildResult { Succeeded = 2, } -// Warning: (ae-missing-release-tag) "BuildRun" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export type BuildRun = { id?: number; @@ -30,15 +26,11 @@ export type BuildRun = { uniqueName?: string; }; -// Warning: (ae-missing-release-tag) "BuildRunOptions" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export type BuildRunOptions = { top?: number; }; -// Warning: (ae-missing-release-tag) "BuildStatus" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export enum BuildStatus { All = 47, @@ -50,8 +42,6 @@ export enum BuildStatus { Postponed = 8, } -// Warning: (ae-missing-release-tag) "CreatedBy" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export interface CreatedBy { // (undocumented) @@ -68,8 +58,6 @@ export interface CreatedBy { uniqueName?: string; } -// Warning: (ae-missing-release-tag) "DashboardPullRequest" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export interface DashboardPullRequest { // (undocumented) @@ -98,8 +86,6 @@ export interface DashboardPullRequest { title?: string; } -// Warning: (ae-missing-release-tag) "GitTag" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export type GitTag = { objectId?: string; @@ -110,8 +96,6 @@ export type GitTag = { commitLink: string; }; -// Warning: (ae-missing-release-tag) "Policy" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export interface Policy { // (undocumented) @@ -126,9 +110,7 @@ export interface Policy { type: PolicyType; } -// Warning: (ae-missing-release-tag) "PolicyEvaluationStatus" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public +// @public (undocumented) export enum PolicyEvaluationStatus { Approved = 2, Broken = 5, @@ -138,8 +120,6 @@ export enum PolicyEvaluationStatus { Running = 1, } -// Warning: (ae-missing-release-tag) "PolicyType" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export enum PolicyType { // (undocumented) @@ -156,8 +136,6 @@ export enum PolicyType { Status = 'Status', } -// Warning: (ae-missing-release-tag) "PolicyTypeId" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export enum PolicyTypeId { Build = '0609b952-1397-4640-95ec-e00a01b2c241', @@ -168,8 +146,6 @@ export enum PolicyTypeId { Status = 'cbdc66da-9728-4af8-aada-9a5a32e4a226', } -// Warning: (ae-missing-release-tag) "Project" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export type Project = { id?: string; @@ -177,8 +153,6 @@ export type Project = { description?: string; }; -// Warning: (ae-missing-release-tag) "PullRequest" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export type PullRequest = { pullRequestId?: number; @@ -194,16 +168,12 @@ export type PullRequest = { link: string; }; -// Warning: (ae-missing-release-tag) "PullRequestOptions" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export type PullRequestOptions = { top: number; status: PullRequestStatus; }; -// Warning: (ae-missing-release-tag) "PullRequestStatus" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export enum PullRequestStatus { Abandoned = 2, @@ -213,8 +183,6 @@ export enum PullRequestStatus { NotSet = 0, } -// Warning: (ae-missing-release-tag) "PullRequestVoteStatus" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export enum PullRequestVoteStatus { // (undocumented) @@ -265,15 +233,11 @@ export type RepoBuild = { uniqueName?: string; }; -// Warning: (ae-missing-release-tag) "RepoBuildOptions" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export type RepoBuildOptions = { top?: number; }; -// Warning: (ae-missing-release-tag) "Repository" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export interface Repository { // (undocumented) @@ -284,8 +248,6 @@ export interface Repository { url?: string; } -// Warning: (ae-missing-release-tag) "Reviewer" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export interface Reviewer { // (undocumented) @@ -304,8 +266,6 @@ export interface Reviewer { voteStatus: PullRequestVoteStatus; } -// Warning: (ae-missing-release-tag) "Team" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export interface Team { // (undocumented) @@ -320,8 +280,6 @@ export interface Team { projectName?: string; } -// Warning: (ae-missing-release-tag) "TeamMember" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export interface TeamMember { // (undocumented) diff --git a/plugins/azure-devops-common/src/types.ts b/plugins/azure-devops-common/src/types.ts index f29b134ed9..380cb3e585 100644 --- a/plugins/azure-devops-common/src/types.ts +++ b/plugins/azure-devops-common/src/types.ts @@ -14,6 +14,7 @@ * limitations under the License. */ +/** @public */ export enum BuildResult { /** * No result @@ -37,6 +38,7 @@ export enum BuildResult { Canceled = 32, } +/** @public */ export enum BuildStatus { /** * No status. @@ -68,6 +70,7 @@ export enum BuildStatus { All = 47, } +/** @public */ export type RepoBuild = { id?: number; title: string; @@ -81,10 +84,12 @@ export type RepoBuild = { uniqueName?: string; }; +/** @public */ export type RepoBuildOptions = { top?: number; }; +/** @public */ export enum PullRequestStatus { /** * Status not set. Default state. @@ -108,6 +113,7 @@ export enum PullRequestStatus { All = 4, } +/** @public */ export type GitTag = { objectId?: string; peeledObjectId?: string; @@ -117,6 +123,7 @@ export type GitTag = { commitLink: string; }; +/** @public */ export type PullRequest = { pullRequestId?: number; repoName?: string; @@ -131,11 +138,13 @@ export type PullRequest = { link: string; }; +/** @public */ export type PullRequestOptions = { top: number; status: PullRequestStatus; }; +/** @public */ export interface DashboardPullRequest { pullRequestId?: number; title?: string; @@ -151,6 +160,7 @@ export interface DashboardPullRequest { link?: string; } +/** @public */ export interface Reviewer { id?: string; displayName?: string; @@ -161,6 +171,7 @@ export interface Reviewer { voteStatus: PullRequestVoteStatus; } +/** @public */ export interface Policy { id?: number; type: PolicyType; @@ -169,6 +180,7 @@ export interface Policy { link?: string; } +/** @public */ export interface CreatedBy { id?: string; displayName?: string; @@ -178,12 +190,14 @@ export interface CreatedBy { teamNames?: string[]; } +/** @public */ export interface Repository { id?: string; name?: string; url?: string; } +/** @public */ export interface Team { id?: string; name?: string; @@ -192,16 +206,19 @@ export interface Team { members?: string[]; } +/** @public */ export interface ReadmeConfig { project: string; repo: string; } +/** @public */ export interface Readme { url: string; content: string; } +/** @public */ export interface TeamMember { id?: string; displayName?: string; @@ -212,6 +229,7 @@ export interface TeamMember { /** * Status of a policy which is running against a specific pull request. */ +/** @public */ export enum PolicyEvaluationStatus { /** * The policy is either queued to run, or is waiting for some event before progressing. @@ -239,6 +257,7 @@ export enum PolicyEvaluationStatus { Broken = 5, } +/** @public */ export enum PolicyType { Build = 'Build', Status = 'Status', @@ -248,6 +267,7 @@ export enum PolicyType { MergeStrategy = 'MergeStrategy', } +/** @public */ export enum PolicyTypeId { /** * This policy will require a successful build has been performed before updating protected refs. @@ -275,6 +295,7 @@ export enum PolicyTypeId { MergeStrategy = 'fa4e907d-c16b-4a4c-9dfa-4916e5d171ab', } +/** @public */ export enum PullRequestVoteStatus { Approved = 10, ApprovedWithSuggestions = 5, @@ -282,6 +303,8 @@ export enum PullRequestVoteStatus { WaitingForAuthor = -5, Rejected = -10, } + +/** @public */ export type BuildRun = { id?: number; title: string; @@ -295,10 +318,12 @@ export type BuildRun = { uniqueName?: string; }; +/** @public */ export type BuildRunOptions = { top?: number; }; +/** @public */ export type Project = { id?: string; name?: string; diff --git a/plugins/azure-devops/CHANGELOG.md b/plugins/azure-devops/CHANGELOG.md index 01430bc032..f108dd1424 100644 --- a/plugins/azure-devops/CHANGELOG.md +++ b/plugins/azure-devops/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-azure-devops +## 0.1.24 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + ## 0.1.24-next.1 ### Patch Changes diff --git a/plugins/azure-devops/api-report.md b/plugins/azure-devops/api-report.md index 72d32f5b34..2d9405aebe 100644 --- a/plugins/azure-devops/api-report.md +++ b/plugins/azure-devops/api-report.md @@ -23,23 +23,17 @@ import { RepoBuildOptions } from '@backstage/plugin-azure-devops-common'; import { SvgIconProps } from '@material-ui/core'; import { Team } from '@backstage/plugin-azure-devops-common'; -// Warning: (ae-missing-release-tag) "AllFilter" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export type AllFilter = BaseFilter & { type: FilterType.All; }; -// Warning: (ae-missing-release-tag) "AssignedToTeamFilter" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export type AssignedToTeamFilter = BaseFilter & { type: FilterType.AssignedToTeam; teamId: string; }; -// Warning: (ae-missing-release-tag) "AssignedToTeamsFilter" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export type AssignedToTeamsFilter = BaseFilter & ( @@ -53,8 +47,6 @@ export type AssignedToTeamsFilter = BaseFilter & } ); -// Warning: (ae-missing-release-tag) "AssignedToUserFilter" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export type AssignedToUserFilter = BaseFilter & ( @@ -68,8 +60,6 @@ export type AssignedToUserFilter = BaseFilter & } ); -// Warning: (ae-missing-release-tag) "AzureDevOpsApi" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export interface AzureDevOpsApi { // (undocumented) @@ -116,13 +106,9 @@ export interface AzureDevOpsApi { getUserTeamIds(userId: string): Promise; } -// Warning: (ae-missing-release-tag) "azureDevOpsApiRef" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export const azureDevOpsApiRef: ApiRef; -// Warning: (ae-missing-release-tag) "AzureDevOpsClient" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export class AzureDevOpsClient implements AzureDevOpsApi { constructor(options: { @@ -173,38 +159,24 @@ export class AzureDevOpsClient implements AzureDevOpsApi { getUserTeamIds(userId: string): Promise; } -// Warning: (ae-missing-release-tag) "azureDevOpsPlugin" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export const azureDevOpsPlugin: BackstagePlugin<{}, {}, {}>; -// Warning: (ae-missing-release-tag) "AzurePullRequestsIcon" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export const AzurePullRequestsIcon: (props: SvgIconProps) => JSX.Element; -// Warning: (ae-missing-release-tag) "AzurePullRequestsPage" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) -export const AzurePullRequestsPage: ({ - projectName, - pollingInterval, - defaultColumnConfigs, -}: { +export const AzurePullRequestsPage: (props: { projectName?: string | undefined; pollingInterval?: number | undefined; defaultColumnConfigs?: PullRequestColumnConfig[] | undefined; }) => JSX.Element; -// Warning: (ae-missing-release-tag) "BaseFilter" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export type BaseFilter = { type: FilterType; }; -// Warning: (ae-missing-release-tag) "CreatedByTeamFilter" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export type CreatedByTeamFilter = BaseFilter & ({ @@ -218,8 +190,6 @@ export type CreatedByTeamFilter = BaseFilter & } )); -// Warning: (ae-missing-release-tag) "CreatedByTeamsFilter" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export type CreatedByTeamsFilter = BaseFilter & ( @@ -239,8 +209,6 @@ export type CreatedByTeamsFilter = BaseFilter & } ); -// Warning: (ae-missing-release-tag) "CreatedByUserFilter" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export type CreatedByUserFilter = BaseFilter & ( @@ -254,26 +222,16 @@ export type CreatedByUserFilter = BaseFilter & } ); -// Warning: (ae-missing-release-tag) "EntityAzureGitTagsContent" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export const EntityAzureGitTagsContent: () => JSX.Element; -// Warning: (ae-missing-release-tag) "EntityAzurePipelinesContent" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) -export const EntityAzurePipelinesContent: ({ - defaultLimit, -}: { +export const EntityAzurePipelinesContent: (props: { defaultLimit?: number | undefined; }) => JSX.Element; -// Warning: (ae-missing-release-tag) "EntityAzurePullRequestsContent" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) -export const EntityAzurePullRequestsContent: ({ - defaultLimit, -}: { +export const EntityAzurePullRequestsContent: (props: { defaultLimit?: number | undefined; }) => JSX.Element; @@ -296,8 +254,6 @@ export type Filter = | CreatedByTeamsFilter | AllFilter; -// Warning: (ae-missing-release-tag) "FilterType" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export enum FilterType { // (undocumented) @@ -324,18 +280,12 @@ export enum FilterType { CreatedByUser = 'CreatedByUser', } -// Warning: (ae-missing-release-tag) "isAzureDevOpsAvailable" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export const isAzureDevOpsAvailable: (entity: Entity) => boolean; -// Warning: (ae-missing-release-tag) "isAzurePipelinesAvailable" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export const isAzurePipelinesAvailable: (entity: Entity) => boolean; -// Warning: (ae-missing-release-tag) "PullRequestColumnConfig" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export interface PullRequestColumnConfig { // (undocumented) @@ -346,8 +296,6 @@ export interface PullRequestColumnConfig { title: string; } -// Warning: (ae-missing-release-tag) "PullRequestFilter" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export type PullRequestFilter = (pullRequest: DashboardPullRequest) => boolean; diff --git a/plugins/azure-devops/package.json b/plugins/azure-devops/package.json index 6766b48608..457cc008a0 100644 --- a/plugins/azure-devops/package.json +++ b/plugins/azure-devops/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-azure-devops", - "version": "0.1.24-next.1", + "version": "0.1.24", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -31,11 +31,11 @@ }, "dependencies": { "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", "@backstage/errors": "^1.1.0", "@backstage/plugin-azure-devops-common": "^0.2.4", - "@backstage/plugin-catalog-react": "^1.1.3-next.2", + "@backstage/plugin-catalog-react": "^1.1.3", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -49,10 +49,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/core-app-api": "^1.0.5", + "@backstage/dev-utils": "^1.0.5", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/azure-devops/src/api/AzureDevOpsApi.ts b/plugins/azure-devops/src/api/AzureDevOpsApi.ts index da6a3cda14..ce6a3cac39 100644 --- a/plugins/azure-devops/src/api/AzureDevOpsApi.ts +++ b/plugins/azure-devops/src/api/AzureDevOpsApi.ts @@ -30,10 +30,12 @@ import { import { createApiRef } from '@backstage/core-plugin-api'; +/** @public */ export const azureDevOpsApiRef = createApiRef({ id: 'plugin.azure-devops.service', }); +/** @public */ export interface AzureDevOpsApi { getRepoBuilds( projectName: string, diff --git a/plugins/azure-devops/src/api/AzureDevOpsClient.ts b/plugins/azure-devops/src/api/AzureDevOpsClient.ts index 9797f4ff26..68d8896538 100644 --- a/plugins/azure-devops/src/api/AzureDevOpsClient.ts +++ b/plugins/azure-devops/src/api/AzureDevOpsClient.ts @@ -28,10 +28,10 @@ import { Team, } from '@backstage/plugin-azure-devops-common'; import { DiscoveryApi, IdentityApi } from '@backstage/core-plugin-api'; - -import { AzureDevOpsApi } from './AzureDevOpsApi'; import { ResponseError } from '@backstage/errors'; +import { AzureDevOpsApi } from './AzureDevOpsApi'; +/** @public */ export class AzureDevOpsClient implements AzureDevOpsApi { private readonly discoveryApi: DiscoveryApi; private readonly identityApi: IdentityApi; diff --git a/plugins/azure-devops/src/components/AzurePullRequestsIcon/AzurePullRequestsIcon.tsx b/plugins/azure-devops/src/components/AzurePullRequestsIcon/AzurePullRequestsIcon.tsx index bb4cb8c081..99e3f74e90 100644 --- a/plugins/azure-devops/src/components/AzurePullRequestsIcon/AzurePullRequestsIcon.tsx +++ b/plugins/azure-devops/src/components/AzurePullRequestsIcon/AzurePullRequestsIcon.tsx @@ -14,10 +14,10 @@ * limitations under the License. */ +import React from 'react'; import { SvgIcon, SvgIconProps } from '@material-ui/core'; -import React from 'react'; - +/** @public */ export const AzurePullRequestsIcon = (props: SvgIconProps) => ( { +export const EntityPageAzurePipelines = (props: { defaultLimit?: number }) => { const { entity } = useEntity(); const { project, repo, definition } = getAnnotationFromEntity(entity); const { items, loading, error } = useBuildRuns( project, - defaultLimit, + props.defaultLimit, repo, definition, ); diff --git a/plugins/azure-devops/src/components/EntityPageAzurePullRequests/EntityPageAzurePullRequests.tsx b/plugins/azure-devops/src/components/EntityPageAzurePullRequests/EntityPageAzurePullRequests.tsx index 3d1a3ef77a..b5a21ff750 100644 --- a/plugins/azure-devops/src/components/EntityPageAzurePullRequests/EntityPageAzurePullRequests.tsx +++ b/plugins/azure-devops/src/components/EntityPageAzurePullRequests/EntityPageAzurePullRequests.tsx @@ -17,10 +17,8 @@ import { PullRequestTable } from '../PullRequestTable/PullRequestTable'; import React from 'react'; -export const EntityPageAzurePullRequests = ({ - defaultLimit, -}: { +export const EntityPageAzurePullRequests = (props: { defaultLimit?: number; }) => { - return ; + return ; }; diff --git a/plugins/azure-devops/src/components/PullRequestsPage/PullRequestsPage.tsx b/plugins/azure-devops/src/components/PullRequestsPage/PullRequestsPage.tsx index 158c4bca5b..c5da207bd6 100644 --- a/plugins/azure-devops/src/components/PullRequestsPage/PullRequestsPage.tsx +++ b/plugins/azure-devops/src/components/PullRequestsPage/PullRequestsPage.tsx @@ -24,7 +24,6 @@ import { import { PullRequestColumnConfig, PullRequestGroup } from './lib/types'; import React, { useState } from 'react'; import { getPullRequestGroupConfigs, getPullRequestGroups } from './lib/utils'; - import { FilterType } from './lib/filters'; import { PullRequestGrid } from './lib/PullRequestGrid'; import { useDashboardPullRequests } from '../../hooks'; @@ -71,11 +70,9 @@ type PullRequestsPageProps = { defaultColumnConfigs?: PullRequestColumnConfig[]; }; -export const PullRequestsPage = ({ - projectName, - pollingInterval, - defaultColumnConfigs, -}: PullRequestsPageProps) => { +export const PullRequestsPage = (props: PullRequestsPageProps) => { + const { projectName, pollingInterval, defaultColumnConfigs } = props; + const { pullRequests, loading, error } = useDashboardPullRequests( projectName, pollingInterval, diff --git a/plugins/azure-devops/src/components/PullRequestsPage/lib/filters/allFilter.ts b/plugins/azure-devops/src/components/PullRequestsPage/lib/filters/allFilter.ts index 90ec822ef6..952f7ddc57 100644 --- a/plugins/azure-devops/src/components/PullRequestsPage/lib/filters/allFilter.ts +++ b/plugins/azure-devops/src/components/PullRequestsPage/lib/filters/allFilter.ts @@ -18,6 +18,7 @@ import { BaseFilter, FilterType, PullRequestFilter } from './types'; import { DashboardPullRequest } from '@backstage/plugin-azure-devops-common'; +/** @public */ export type AllFilter = BaseFilter & { type: FilterType.All; }; diff --git a/plugins/azure-devops/src/components/PullRequestsPage/lib/filters/assignedToTeamFilter.ts b/plugins/azure-devops/src/components/PullRequestsPage/lib/filters/assignedToTeamFilter.ts index 8e816db2c3..fa6b3de00a 100644 --- a/plugins/azure-devops/src/components/PullRequestsPage/lib/filters/assignedToTeamFilter.ts +++ b/plugins/azure-devops/src/components/PullRequestsPage/lib/filters/assignedToTeamFilter.ts @@ -14,11 +14,11 @@ * limitations under the License. */ -import { BaseFilter, FilterType, PullRequestFilter } from './types'; - import { DashboardPullRequest } from '@backstage/plugin-azure-devops-common'; +import { BaseFilter, FilterType, PullRequestFilter } from './types'; import { stringArrayHas } from '../../../../utils'; +/** @public */ export type AssignedToTeamFilter = BaseFilter & { type: FilterType.AssignedToTeam; teamId: string; diff --git a/plugins/azure-devops/src/components/PullRequestsPage/lib/filters/assignedToTeamsFilter.ts b/plugins/azure-devops/src/components/PullRequestsPage/lib/filters/assignedToTeamsFilter.ts index ce5e5bcc11..df93e38f81 100644 --- a/plugins/azure-devops/src/components/PullRequestsPage/lib/filters/assignedToTeamsFilter.ts +++ b/plugins/azure-devops/src/components/PullRequestsPage/lib/filters/assignedToTeamsFilter.ts @@ -14,11 +14,11 @@ * limitations under the License. */ -import { BaseFilter, FilterType, PullRequestFilter } from './types'; - import { DashboardPullRequest } from '@backstage/plugin-azure-devops-common'; +import { BaseFilter, FilterType, PullRequestFilter } from './types'; import { createAssignedToTeamFilter } from './assignedToTeamFilter'; +/** @public */ export type AssignedToTeamsFilter = BaseFilter & ( | { diff --git a/plugins/azure-devops/src/components/PullRequestsPage/lib/filters/assignedToUserFilter.ts b/plugins/azure-devops/src/components/PullRequestsPage/lib/filters/assignedToUserFilter.ts index 95ee3d5a59..3f554de62b 100644 --- a/plugins/azure-devops/src/components/PullRequestsPage/lib/filters/assignedToUserFilter.ts +++ b/plugins/azure-devops/src/components/PullRequestsPage/lib/filters/assignedToUserFilter.ts @@ -14,11 +14,11 @@ * limitations under the License. */ -import { BaseFilter, FilterType, PullRequestFilter } from './types'; - import { DashboardPullRequest } from '@backstage/plugin-azure-devops-common'; +import { BaseFilter, FilterType, PullRequestFilter } from './types'; import { stringArrayHas } from '../../../../utils'; +/** @public */ export type AssignedToUserFilter = BaseFilter & ( | { diff --git a/plugins/azure-devops/src/components/PullRequestsPage/lib/filters/createdByTeamFilter.ts b/plugins/azure-devops/src/components/PullRequestsPage/lib/filters/createdByTeamFilter.ts index 70a388b540..e4d28d28b1 100644 --- a/plugins/azure-devops/src/components/PullRequestsPage/lib/filters/createdByTeamFilter.ts +++ b/plugins/azure-devops/src/components/PullRequestsPage/lib/filters/createdByTeamFilter.ts @@ -14,11 +14,11 @@ * limitations under the License. */ -import { BaseFilter, FilterType, PullRequestFilter } from './types'; - import { DashboardPullRequest } from '@backstage/plugin-azure-devops-common'; +import { BaseFilter, FilterType, PullRequestFilter } from './types'; import { stringArrayHas } from '../../../../utils'; +/** @public */ export type CreatedByTeamFilter = BaseFilter & ({ type: FilterType.CreatedByTeam; diff --git a/plugins/azure-devops/src/components/PullRequestsPage/lib/filters/createdByTeamsFilter.ts b/plugins/azure-devops/src/components/PullRequestsPage/lib/filters/createdByTeamsFilter.ts index 34ed81db5d..44e02136ec 100644 --- a/plugins/azure-devops/src/components/PullRequestsPage/lib/filters/createdByTeamsFilter.ts +++ b/plugins/azure-devops/src/components/PullRequestsPage/lib/filters/createdByTeamsFilter.ts @@ -14,11 +14,11 @@ * limitations under the License. */ -import { BaseFilter, FilterType, PullRequestFilter } from './types'; - import { DashboardPullRequest } from '@backstage/plugin-azure-devops-common'; +import { BaseFilter, FilterType, PullRequestFilter } from './types'; import { createCreatedByTeamFilter } from './createdByTeamFilter'; +/** @public */ export type CreatedByTeamsFilter = BaseFilter & ( | ({ diff --git a/plugins/azure-devops/src/components/PullRequestsPage/lib/filters/createdByUserFilter.ts b/plugins/azure-devops/src/components/PullRequestsPage/lib/filters/createdByUserFilter.ts index 69d4f23db5..24c14311eb 100644 --- a/plugins/azure-devops/src/components/PullRequestsPage/lib/filters/createdByUserFilter.ts +++ b/plugins/azure-devops/src/components/PullRequestsPage/lib/filters/createdByUserFilter.ts @@ -14,11 +14,11 @@ * limitations under the License. */ -import { BaseFilter, FilterType, PullRequestFilter } from './types'; - import { DashboardPullRequest } from '@backstage/plugin-azure-devops-common'; +import { BaseFilter, FilterType, PullRequestFilter } from './types'; import { equalsIgnoreCase } from '../../../../utils'; +/** @public */ export type CreatedByUserFilter = BaseFilter & ( | { diff --git a/plugins/azure-devops/src/components/PullRequestsPage/lib/filters/types.ts b/plugins/azure-devops/src/components/PullRequestsPage/lib/filters/types.ts index bc4643d51b..6b0d95eb78 100644 --- a/plugins/azure-devops/src/components/PullRequestsPage/lib/filters/types.ts +++ b/plugins/azure-devops/src/components/PullRequestsPage/lib/filters/types.ts @@ -23,6 +23,7 @@ import { CreatedByTeamsFilter } from './createdByTeamsFilter'; import { CreatedByUserFilter } from './createdByUserFilter'; import { DashboardPullRequest } from '@backstage/plugin-azure-devops-common'; +/** @public */ export enum FilterType { All = 'All', @@ -41,6 +42,7 @@ export enum FilterType { CreatedByCurrentUsersTeams = 'CreatedByCurrentUsersTeams', } +/** @public */ export const FilterTypes = [ FilterType.All, @@ -57,10 +59,12 @@ export const FilterTypes = [ FilterType.CreatedByCurrentUsersTeams, ] as const; +/** @public */ export type BaseFilter = { type: FilterType; }; +/** @public */ export type Filter = | AssignedToUserFilter | CreatedByUserFilter @@ -80,4 +84,5 @@ export type { AllFilter, }; +/** @public */ export type PullRequestFilter = (pullRequest: DashboardPullRequest) => boolean; diff --git a/plugins/azure-devops/src/components/PullRequestsPage/lib/types.ts b/plugins/azure-devops/src/components/PullRequestsPage/lib/types.ts index 74c8ebe605..5f5f0119d8 100644 --- a/plugins/azure-devops/src/components/PullRequestsPage/lib/types.ts +++ b/plugins/azure-devops/src/components/PullRequestsPage/lib/types.ts @@ -14,22 +14,24 @@ * limitations under the License. */ +import { DashboardPullRequest } from '@backstage/plugin-azure-devops-common'; import { Filter, PullRequestFilter } from './filters'; -import { DashboardPullRequest } from '@backstage/plugin-azure-devops-common'; - +/** @public */ export interface PullRequestColumnConfig { title: string; filters: Filter[]; simplified?: boolean; } +/** @public */ export interface PullRequestGroupConfig { title: string; filter: PullRequestFilter; simplified?: boolean; } +/** @public */ export interface PullRequestGroup { title: string; pullRequests: DashboardPullRequest[]; diff --git a/plugins/azure-devops/src/plugin.ts b/plugins/azure-devops/src/plugin.ts index c6d868717b..7e0b0d96b8 100644 --- a/plugins/azure-devops/src/plugin.ts +++ b/plugins/azure-devops/src/plugin.ts @@ -38,9 +38,11 @@ import { AzureDevOpsClient } from './api/AzureDevOpsClient'; import { Entity } from '@backstage/catalog-model'; import { azureDevOpsApiRef } from './api/AzureDevOpsApi'; +/** @public */ export const isAzureDevOpsAvailable = (entity: Entity) => Boolean(entity.metadata.annotations?.[AZURE_DEVOPS_REPO_ANNOTATION]); +/** @public */ export const isAzurePipelinesAvailable = (entity: Entity) => Boolean(entity.metadata.annotations?.[AZURE_DEVOPS_REPO_ANNOTATION]) || (Boolean(entity.metadata.annotations?.[AZURE_DEVOPS_PROJECT_ANNOTATION]) && @@ -48,6 +50,7 @@ export const isAzurePipelinesAvailable = (entity: Entity) => entity.metadata.annotations?.[AZURE_DEVOPS_BUILD_DEFINITION_ANNOTATION], )); +/** @public */ export const azureDevOpsPlugin = createPlugin({ id: 'azureDevOps', apis: [ @@ -60,6 +63,7 @@ export const azureDevOpsPlugin = createPlugin({ ], }); +/** @public */ export const AzurePullRequestsPage = azureDevOpsPlugin.provide( createRoutableExtension({ name: 'AzurePullRequestsPage', @@ -69,6 +73,7 @@ export const AzurePullRequestsPage = azureDevOpsPlugin.provide( }), ); +/** @public */ export const EntityAzurePipelinesContent = azureDevOpsPlugin.provide( createRoutableExtension({ name: 'EntityAzurePipelinesContent', @@ -80,6 +85,7 @@ export const EntityAzurePipelinesContent = azureDevOpsPlugin.provide( }), ); +/** @public */ export const EntityAzureGitTagsContent = azureDevOpsPlugin.provide( createRoutableExtension({ name: 'EntityAzureGitTagsContent', @@ -91,6 +97,7 @@ export const EntityAzureGitTagsContent = azureDevOpsPlugin.provide( }), ); +/** @public */ export const EntityAzurePullRequestsContent = azureDevOpsPlugin.provide( createRoutableExtension({ name: 'EntityAzurePullRequestsContent', diff --git a/plugins/badges-backend/CHANGELOG.md b/plugins/badges-backend/CHANGELOG.md index a4ab10f37d..c9730194af 100644 --- a/plugins/badges-backend/CHANGELOG.md +++ b/plugins/badges-backend/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-badges-backend +## 0.1.29 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + ## 0.1.29-next.0 ### Patch Changes diff --git a/plugins/badges-backend/api-report.md b/plugins/badges-backend/api-report.md index 0660d23fdb..0ecf41ee85 100644 --- a/plugins/badges-backend/api-report.md +++ b/plugins/badges-backend/api-report.md @@ -9,8 +9,6 @@ import { Entity } from '@backstage/catalog-model'; import express from 'express'; import { PluginEndpointDiscovery } from '@backstage/backend-common'; -// Warning: (ae-missing-release-tag) "Badge" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export interface Badge { color?: string; @@ -23,8 +21,6 @@ export interface Badge { style?: BadgeStyle; } -// Warning: (ae-missing-release-tag) "BADGE_STYLES" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export const BADGE_STYLES: readonly [ 'plastic', @@ -34,8 +30,6 @@ export const BADGE_STYLES: readonly [ 'social', ]; -// Warning: (ae-missing-release-tag) "BadgeBuilder" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export type BadgeBuilder = { getBadges(): Promise; @@ -43,8 +37,6 @@ export type BadgeBuilder = { createBadgeSvg(options: BadgeOptions): Promise; }; -// Warning: (ae-missing-release-tag) "BadgeContext" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export interface BadgeContext { // (undocumented) @@ -55,39 +47,29 @@ export interface BadgeContext { entity?: Entity; } -// Warning: (ae-missing-release-tag) "BadgeFactories" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export interface BadgeFactories { // (undocumented) [id: string]: BadgeFactory; } -// Warning: (ae-missing-release-tag) "BadgeFactory" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export interface BadgeFactory { // (undocumented) createBadge(context: BadgeContext): Badge; } -// Warning: (ae-missing-release-tag) "BadgeInfo" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export type BadgeInfo = { id: string; }; -// Warning: (ae-missing-release-tag) "BadgeOptions" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export type BadgeOptions = { badgeInfo: BadgeInfo; context: BadgeContext; }; -// Warning: (ae-missing-release-tag) "BadgeSpec" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export type BadgeSpec = { id: string; @@ -96,23 +78,15 @@ export type BadgeSpec = { markdown: string; }; -// Warning: (ae-missing-release-tag) "BadgeStyle" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export type BadgeStyle = typeof BADGE_STYLES[number]; -// Warning: (ae-missing-release-tag) "createDefaultBadgeFactories" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export const createDefaultBadgeFactories: () => BadgeFactories; -// Warning: (ae-missing-release-tag) "createRouter" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export function createRouter(options: RouterOptions): Promise; -// Warning: (ae-missing-release-tag) "DefaultBadgeBuilder" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export class DefaultBadgeBuilder implements BadgeBuilder { constructor(factories: BadgeFactories); @@ -126,8 +100,6 @@ export class DefaultBadgeBuilder implements BadgeBuilder { protected getMarkdownCode(params: Badge, badgeUrl: string): string; } -// Warning: (ae-missing-release-tag) "RouterOptions" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export interface RouterOptions { // (undocumented) diff --git a/plugins/badges-backend/package.json b/plugins/badges-backend/package.json index ba8d0221b6..e642121802 100644 --- a/plugins/badges-backend/package.json +++ b/plugins/badges-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-badges-backend", "description": "A Backstage backend plugin that generates README badges for your entities", - "version": "0.1.29-next.0", + "version": "0.1.29", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,7 +34,7 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.15.0-next.0", + "@backstage/backend-common": "^0.15.0", "@backstage/catalog-client": "^1.0.4", "@backstage/catalog-model": "^1.1.0", "@backstage/config": "^1.0.1", @@ -48,7 +48,7 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.0", + "@backstage/cli": "^0.18.1", "@types/supertest": "^2.0.8", "supertest": "^6.1.3" }, diff --git a/plugins/badges-backend/src/badges.ts b/plugins/badges-backend/src/badges.ts index 78108de080..9167116d95 100644 --- a/plugins/badges-backend/src/badges.ts +++ b/plugins/badges-backend/src/badges.ts @@ -31,6 +31,7 @@ function entityUrl(context: BadgeContext): string { return `${catalogUrl}/${entityUri}`.toLowerCase(); } +/** @public */ export const createDefaultBadgeFactories = (): BadgeFactories => ({ pingback: { createBadge: (context: BadgeContext): Badge => { diff --git a/plugins/badges-backend/src/lib/BadgeBuilder/DefaultBadgeBuilder.ts b/plugins/badges-backend/src/lib/BadgeBuilder/DefaultBadgeBuilder.ts index 78e34351a0..efe58078f7 100644 --- a/plugins/badges-backend/src/lib/BadgeBuilder/DefaultBadgeBuilder.ts +++ b/plugins/badges-backend/src/lib/BadgeBuilder/DefaultBadgeBuilder.ts @@ -19,6 +19,7 @@ import { makeBadge, Format } from 'badge-maker'; import { BadgeBuilder, BadgeInfo, BadgeOptions, BadgeSpec } from './types'; import { Badge, BadgeFactories } from '../../types'; +/** @public */ export class DefaultBadgeBuilder implements BadgeBuilder { constructor(private readonly factories: BadgeFactories) {} diff --git a/plugins/badges-backend/src/lib/BadgeBuilder/types.ts b/plugins/badges-backend/src/lib/BadgeBuilder/types.ts index e2be17a7db..fa1dd4a5ad 100644 --- a/plugins/badges-backend/src/lib/BadgeBuilder/types.ts +++ b/plugins/badges-backend/src/lib/BadgeBuilder/types.ts @@ -16,15 +16,18 @@ import { Badge, BadgeContext } from '../../types'; +/** @public */ export type BadgeInfo = { id: string; }; +/** @public */ export type BadgeOptions = { badgeInfo: BadgeInfo; context: BadgeContext; }; +/** @public */ export type BadgeSpec = { /** Badge id */ id: string; @@ -39,6 +42,7 @@ export type BadgeSpec = { markdown: string; }; +/** @public */ export type BadgeBuilder = { getBadges(): Promise; createBadgeJson(options: BadgeOptions): Promise; diff --git a/plugins/badges-backend/src/service/router.ts b/plugins/badges-backend/src/service/router.ts index b7211a0aad..2006b45dc4 100644 --- a/plugins/badges-backend/src/service/router.ts +++ b/plugins/badges-backend/src/service/router.ts @@ -26,6 +26,7 @@ import { NotFoundError } from '@backstage/errors'; import { BadgeBuilder, DefaultBadgeBuilder } from '../lib/BadgeBuilder'; import { BadgeContext, BadgeFactories } from '../types'; +/** @public */ export interface RouterOptions { badgeBuilder?: BadgeBuilder; badgeFactories?: BadgeFactories; @@ -34,6 +35,7 @@ export interface RouterOptions { discovery: PluginEndpointDiscovery; } +/** @public */ export async function createRouter( options: RouterOptions, ): Promise { diff --git a/plugins/badges-backend/src/types.ts b/plugins/badges-backend/src/types.ts index 0467b18155..eec7063f88 100644 --- a/plugins/badges-backend/src/types.ts +++ b/plugins/badges-backend/src/types.ts @@ -17,6 +17,7 @@ import { Config } from '@backstage/config'; import { Entity } from '@backstage/catalog-model'; +/** @public */ export const BADGE_STYLES = [ 'plastic', 'flat', @@ -24,8 +25,11 @@ export const BADGE_STYLES = [ 'for-the-badge', 'social', ] as const; + +/** @public */ export type BadgeStyle = typeof BADGE_STYLES[number]; +/** @public */ export interface Badge { /** Badge message background color. */ color?: string; @@ -48,16 +52,19 @@ export interface Badge { style?: BadgeStyle; } +/** @public */ export interface BadgeContext { badgeUrl: string; config: Config; entity?: Entity; // for entity badges } +/** @public */ export interface BadgeFactory { createBadge(context: BadgeContext): Badge; } +/** @public */ export interface BadgeFactories { [id: string]: BadgeFactory; } diff --git a/plugins/badges/CHANGELOG.md b/plugins/badges/CHANGELOG.md index 9da02587f3..534c433781 100644 --- a/plugins/badges/CHANGELOG.md +++ b/plugins/badges/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-badges +## 0.2.32 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + ## 0.2.32-next.1 ### Patch Changes diff --git a/plugins/badges/api-report.md b/plugins/badges/api-report.md index e3af0857a4..b051bbb452 100644 --- a/plugins/badges/api-report.md +++ b/plugins/badges/api-report.md @@ -7,18 +7,11 @@ import { BackstagePlugin } from '@backstage/core-plugin-api'; -// Warning: (ae-missing-release-tag) "badgesPlugin" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export const badgesPlugin: BackstagePlugin<{}, {}, {}>; -// Warning: (ae-missing-release-tag) "EntityBadgesDialog" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) -export const EntityBadgesDialog: ({ - open, - onClose, -}: { +export const EntityBadgesDialog: (props: { open: boolean; onClose?: (() => any) | undefined; }) => JSX.Element; diff --git a/plugins/badges/package.json b/plugins/badges/package.json index e8bb6c3714..0399835530 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.32-next.1", + "version": "0.2.32", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -31,10 +31,10 @@ }, "dependencies": { "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", "@backstage/errors": "^1.1.0", - "@backstage/plugin-catalog-react": "^1.1.3-next.2", + "@backstage/plugin-catalog-react": "^1.1.3", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -46,10 +46,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/core-app-api": "^1.0.5", + "@backstage/dev-utils": "^1.0.5", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/badges/src/components/EntityBadgesDialog.tsx b/plugins/badges/src/components/EntityBadgesDialog.tsx index 422dbc96a3..097bba5581 100644 --- a/plugins/badges/src/components/EntityBadgesDialog.tsx +++ b/plugins/badges/src/components/EntityBadgesDialog.tsx @@ -37,12 +37,11 @@ import { } from '@backstage/core-components'; import { useApi } from '@backstage/core-plugin-api'; -type Props = { +export const EntityBadgesDialog = (props: { open: boolean; onClose?: () => any; -}; - -export const EntityBadgesDialog = ({ open, onClose }: Props) => { +}) => { + const { open, onClose } = props; const theme = useTheme(); const { entity } = useAsyncEntity(); const fullScreen = useMediaQuery(theme.breakpoints.down('sm')); diff --git a/plugins/badges/src/plugin.ts b/plugins/badges/src/plugin.ts index ee88fb31e0..7ef3025458 100644 --- a/plugins/badges/src/plugin.ts +++ b/plugins/badges/src/plugin.ts @@ -22,6 +22,7 @@ import { identityApiRef, } from '@backstage/core-plugin-api'; +/** @public */ export const badgesPlugin = createPlugin({ id: 'badges', apis: [ @@ -34,6 +35,7 @@ export const badgesPlugin = createPlugin({ ], }); +/** @public */ export const EntityBadgesDialog = badgesPlugin.provide( createComponentExtension({ name: 'EntityBadgesDialog', diff --git a/plugins/bazaar-backend/CHANGELOG.md b/plugins/bazaar-backend/CHANGELOG.md index e72e36100d..d607584548 100644 --- a/plugins/bazaar-backend/CHANGELOG.md +++ b/plugins/bazaar-backend/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-bazaar-backend +## 0.1.19 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/backend-test-utils@0.1.27 + ## 0.1.19-next.0 ### Patch Changes diff --git a/plugins/bazaar-backend/package.json b/plugins/bazaar-backend/package.json index e0484c86ee..85539c6dab 100644 --- a/plugins/bazaar-backend/package.json +++ b/plugins/bazaar-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-bazaar-backend", - "version": "0.1.19-next.0", + "version": "0.1.19", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -23,8 +23,8 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.15.0-next.0", - "@backstage/backend-test-utils": "^0.1.27-next.0", + "@backstage/backend-common": "^0.15.0", + "@backstage/backend-test-utils": "^0.1.27", "@backstage/config": "^1.0.1", "@types/express": "^4.17.6", "express": "^4.17.1", @@ -34,7 +34,7 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.0" + "@backstage/cli": "^0.18.1" }, "files": [ "dist", diff --git a/plugins/bazaar-backend/src/service/DatabaseHandler.test.ts b/plugins/bazaar-backend/src/service/DatabaseHandler.test.ts index 3099e5bbb2..e1a722016b 100644 --- a/plugins/bazaar-backend/src/service/DatabaseHandler.test.ts +++ b/plugins/bazaar-backend/src/service/DatabaseHandler.test.ts @@ -16,6 +16,7 @@ import { DatabaseHandler } from './DatabaseHandler'; import { TestDatabaseId, TestDatabases } from '@backstage/backend-test-utils'; +import { Knex as KnexType } from 'knex'; const bazaarProject: any = { name: 'n1', @@ -35,11 +36,24 @@ describe('DatabaseHandler', () => { ids: ['POSTGRES_13', 'POSTGRES_9', 'SQLITE_3'], }); + function createDatabaseManager( + client: KnexType, + skipMigrations: boolean = false, + ) { + return { + getClient: async () => client, + migrations: { + skip: skipMigrations, + }, + }; + } + async function createDatabaseHandler(databaseId: TestDatabaseId) { const knex = await databases.init(databaseId); + const databaseManager = createDatabaseManager(knex); return { knex, - dbHandler: await DatabaseHandler.create({ database: knex }), + dbHandler: await DatabaseHandler.create({ database: databaseManager }), }; } diff --git a/plugins/bazaar-backend/src/service/DatabaseHandler.ts b/plugins/bazaar-backend/src/service/DatabaseHandler.ts index 7da06a54b8..d8d975b7ed 100644 --- a/plugins/bazaar-backend/src/service/DatabaseHandler.ts +++ b/plugins/bazaar-backend/src/service/DatabaseHandler.ts @@ -14,7 +14,10 @@ * limitations under the License. */ -import { resolvePackagePath } from '@backstage/backend-common'; +import { + PluginDatabaseManager, + resolvePackagePath, +} from '@backstage/backend-common'; import { Knex } from 'knex'; const migrationsDir = resolvePackagePath( @@ -23,24 +26,27 @@ const migrationsDir = resolvePackagePath( ); type Options = { - database: Knex; + database: PluginDatabaseManager; }; export class DatabaseHandler { static async create(options: Options): Promise { const { database } = options; + const client = await database.getClient(); - await database.migrate.latest({ - directory: migrationsDir, - }); + if (!database.migrations?.skip) { + await client.migrate.latest({ + directory: migrationsDir, + }); + } - return new DatabaseHandler(options); + return new DatabaseHandler(client); } - private readonly database: Knex; + private readonly client: Knex; - private constructor(options: Options) { - this.database = options.database; + private constructor(client: Knex) { + this.client = client; } private columns = [ @@ -58,14 +64,11 @@ export class DatabaseHandler { ]; async getMembers(id: string) { - return await this.database - .select('*') - .from('members') - .where({ item_id: id }); + return await this.client.select('*').from('members').where({ item_id: id }); } async addMember(id: number, userId: string, picture?: string) { - await this.database + await this.client .insert({ item_id: id, user_id: userId, @@ -75,18 +78,18 @@ export class DatabaseHandler { } async deleteMember(id: number, userId: string) { - return await this.database('members') + return await this.client('members') .where({ item_id: id }) .andWhere('user_id', userId) .del(); } async getMetadataById(id: number) { - const coalesce = this.database.raw( + const coalesce = this.client.raw( 'coalesce(count(members.item_id), 0) as members_count', ); - return await this.database('metadata') + return await this.client('metadata') .select([...this.columns, coalesce]) .where({ 'metadata.id': id }) .groupBy(this.columns) @@ -94,11 +97,11 @@ export class DatabaseHandler { } async getMetadataByRef(entityRef: string) { - const coalesce = this.database.raw( + const coalesce = this.client.raw( 'coalesce(count(members.item_id), 0) as members_count', ); - return await this.database('metadata') + return await this.client('metadata') .select([...this.columns, coalesce]) .where({ 'metadata.entity_ref': entityRef }) .groupBy(this.columns) @@ -118,7 +121,7 @@ export class DatabaseHandler { responsible, } = bazaarProject; - await this.database + await this.client .insert({ name, entity_ref: entityRef, @@ -148,7 +151,7 @@ export class DatabaseHandler { responsible, } = bazaarProject; - return await this.database('metadata').where({ id: id }).update({ + return await this.client('metadata').where({ id: id }).update({ name, entity_ref: entityRef, description, @@ -163,15 +166,15 @@ export class DatabaseHandler { } async deleteMetadata(id: number) { - return await this.database('metadata').where({ id: id }).del(); + return await this.client('metadata').where({ id: id }).del(); } async getProjects() { - const coalesce = this.database.raw( + const coalesce = this.client.raw( 'coalesce(count(members.item_id), 0) as members_count', ); - return await this.database('metadata') + return await this.client('metadata') .select([...this.columns, coalesce]) .groupBy(this.columns) .leftJoin('members', 'metadata.id', '=', 'members.item_id'); diff --git a/plugins/bazaar-backend/src/service/router.ts b/plugins/bazaar-backend/src/service/router.ts index c61309d279..a5248c2949 100644 --- a/plugins/bazaar-backend/src/service/router.ts +++ b/plugins/bazaar-backend/src/service/router.ts @@ -33,9 +33,8 @@ export async function createRouter( options: RouterOptions, ): Promise { const { logger, database } = options; - const db = await database.getClient(); - const dbHandler = await DatabaseHandler.create({ database: db }); + const dbHandler = await DatabaseHandler.create({ database }); logger.info('Initializing Bazaar backend'); diff --git a/plugins/bazaar/CHANGELOG.md b/plugins/bazaar/CHANGELOG.md index d19601a60a..c1c9f91eed 100644 --- a/plugins/bazaar/CHANGELOG.md +++ b/plugins/bazaar/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-bazaar +## 0.1.23 + +### Patch Changes + +- Updated dependencies + - @backstage/cli@0.18.1 + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog@1.5.0 + - @backstage/plugin-catalog-react@1.1.3 + ## 0.1.23-next.1 ### Patch Changes diff --git a/plugins/bazaar/package.json b/plugins/bazaar/package.json index d16a3b3192..db2b72f920 100644 --- a/plugins/bazaar/package.json +++ b/plugins/bazaar/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-bazaar", - "version": "0.1.23-next.1", + "version": "0.1.23", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -26,11 +26,11 @@ "dependencies": { "@backstage/catalog-client": "^1.0.4", "@backstage/catalog-model": "^1.1.0", - "@backstage/cli": "^0.18.1-next.1", - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", - "@backstage/plugin-catalog": "^1.5.0-next.2", - "@backstage/plugin-catalog-react": "^1.1.3-next.2", + "@backstage/cli": "^0.18.1", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", + "@backstage/plugin-catalog": "^1.5.0", + "@backstage/plugin-catalog-react": "^1.1.3", "@date-io/luxon": "1.x", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -47,8 +47,8 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/dev-utils": "^1.0.5-next.1", + "@backstage/cli": "^0.18.1", + "@backstage/dev-utils": "^1.0.5", "@testing-library/jest-dom": "^5.10.1", "cross-fetch": "^3.1.5" }, diff --git a/plugins/bitbucket-cloud-common/CHANGELOG.md b/plugins/bitbucket-cloud-common/CHANGELOG.md index 6e55f5e507..e6c2f366d6 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.1.2 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.3.0 + ## 0.1.2-next.0 ### Patch Changes diff --git a/plugins/bitbucket-cloud-common/package.json b/plugins/bitbucket-cloud-common/package.json index a03324d3af..5ae5ea33f5 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.1.2-next.0", + "version": "0.1.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -28,11 +28,11 @@ "update-models": "yarn refresh-schema && yarn generate-models && yarn reduce-models" }, "dependencies": { - "@backstage/integration": "^1.3.0-next.0", + "@backstage/integration": "^1.3.0", "cross-fetch": "^3.1.5" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.0", + "@backstage/cli": "^0.18.1", "@openapitools/openapi-generator-cli": "^2.4.26", "msw": "^0.44.0", "ts-morph": "^15.0.0" diff --git a/plugins/bitrise/CHANGELOG.md b/plugins/bitrise/CHANGELOG.md index ce6706f368..8fd4113dd2 100644 --- a/plugins/bitrise/CHANGELOG.md +++ b/plugins/bitrise/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-bitrise +## 0.1.35 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + ## 0.1.35-next.1 ### Patch Changes diff --git a/plugins/bitrise/package.json b/plugins/bitrise/package.json index 60f74d3cf3..9045bdd64f 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.35-next.1", + "version": "0.1.35", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -25,9 +25,9 @@ }, "dependencies": { "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", - "@backstage/plugin-catalog-react": "^1.1.3-next.2", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", + "@backstage/plugin-catalog-react": "^1.1.3", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -43,10 +43,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/core-app-api": "^1.0.5", + "@backstage/dev-utils": "^1.0.5", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/catalog-backend-module-aws/CHANGELOG.md b/plugins/catalog-backend-module-aws/CHANGELOG.md index faf6d2abea..ab7ac4b3ac 100644 --- a/plugins/catalog-backend-module-aws/CHANGELOG.md +++ b/plugins/catalog-backend-module-aws/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-catalog-backend-module-aws +## 0.1.8 + +### Patch Changes + +- 17d45dbf10: Deprecate `AwsS3DiscoveryProcessor` in favor of `AwsS3EntityProvider` (since v0.1.4). + + You can find a migration guide at + [the release notes for v0.1.4](https://github.com/backstage/backstage/blob/master/plugins/catalog-backend-module-aws/CHANGELOG.md#014). + +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/integration@1.3.0 + - @backstage/backend-tasks@0.3.4 + - @backstage/plugin-catalog-backend@1.3.1 + ## 0.1.8-next.0 ### Patch Changes diff --git a/plugins/catalog-backend-module-aws/package.json b/plugins/catalog-backend-module-aws/package.json index 53224a0408..5b4eefb70b 100644 --- a/plugins/catalog-backend-module-aws/package.json +++ b/plugins/catalog-backend-module-aws/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-aws", "description": "A Backstage catalog backend module that helps integrate towards AWS", - "version": "0.1.8-next.0", + "version": "0.1.8", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,13 +33,13 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/backend-common": "^0.15.0-next.0", - "@backstage/backend-tasks": "^0.3.4-next.0", + "@backstage/backend-common": "^0.15.0", + "@backstage/backend-tasks": "^0.3.4", "@backstage/catalog-model": "^1.1.0", "@backstage/config": "^1.0.1", "@backstage/errors": "^1.1.0", - "@backstage/integration": "^1.3.0-next.0", - "@backstage/plugin-catalog-backend": "^1.3.1-next.0", + "@backstage/integration": "^1.3.0", + "@backstage/plugin-catalog-backend": "^1.3.1", "@backstage/types": "^1.0.0", "aws-sdk": "^2.840.0", "lodash": "^4.17.21", @@ -48,7 +48,7 @@ "winston": "^3.2.1" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.0", + "@backstage/cli": "^0.18.1", "@types/lodash": "^4.14.151", "aws-sdk-mock": "^5.2.1", "yaml": "^2.0.0" diff --git a/plugins/catalog-backend-module-azure/CHANGELOG.md b/plugins/catalog-backend-module-azure/CHANGELOG.md index f8f1553359..d7f0d022ce 100644 --- a/plugins/catalog-backend-module-azure/CHANGELOG.md +++ b/plugins/catalog-backend-module-azure/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-catalog-backend-module-azure +## 0.1.6 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/integration@1.3.0 + - @backstage/backend-tasks@0.3.4 + - @backstage/plugin-catalog-backend@1.3.1 + ## 0.1.6-next.0 ### Patch Changes diff --git a/plugins/catalog-backend-module-azure/package.json b/plugins/catalog-backend-module-azure/package.json index 2d23f6190e..3c76cc870f 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.6-next.0", + "version": "0.1.6", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,13 +33,13 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/backend-common": "^0.15.0-next.0", + "@backstage/backend-common": "^0.15.0", "@backstage/catalog-model": "^1.1.0", - "@backstage/backend-tasks": "^0.3.4-next.0", + "@backstage/backend-tasks": "^0.3.4", "@backstage/config": "^1.0.1", "@backstage/errors": "^1.1.0", - "@backstage/integration": "^1.3.0-next.0", - "@backstage/plugin-catalog-backend": "^1.3.1-next.0", + "@backstage/integration": "^1.3.0", + "@backstage/plugin-catalog-backend": "^1.3.1", "@backstage/types": "^1.0.0", "lodash": "^4.17.21", "msw": "^0.44.0", @@ -48,8 +48,8 @@ "winston": "^3.2.1" }, "devDependencies": { - "@backstage/backend-test-utils": "^0.1.27-next.0", - "@backstage/cli": "^0.18.1-next.0", + "@backstage/backend-test-utils": "^0.1.27", + "@backstage/cli": "^0.18.1", "@types/lodash": "^4.14.151" }, "files": [ diff --git a/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md b/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md index 4d3f05ad30..2586ee3a5a 100644 --- a/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md +++ b/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-catalog-backend-module-bitbucket-cloud +## 0.1.2 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.3.0 + - @backstage/backend-tasks@0.3.4 + - @backstage/plugin-catalog-backend@1.3.1 + - @backstage/plugin-bitbucket-cloud-common@0.1.2 + ## 0.1.2-next.0 ### Patch Changes diff --git a/plugins/catalog-backend-module-bitbucket-cloud/package.json b/plugins/catalog-backend-module-bitbucket-cloud/package.json index 2d991e21b4..d335b06b1a 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.2-next.0", + "version": "0.1.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,18 +33,18 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/backend-tasks": "^0.3.4-next.0", + "@backstage/backend-tasks": "^0.3.4", "@backstage/config": "^1.0.1", - "@backstage/integration": "^1.3.0-next.0", - "@backstage/plugin-bitbucket-cloud-common": "^0.1.2-next.0", - "@backstage/plugin-catalog-backend": "^1.3.1-next.0", + "@backstage/integration": "^1.3.0", + "@backstage/plugin-bitbucket-cloud-common": "^0.1.2", + "@backstage/plugin-catalog-backend": "^1.3.1", "uuid": "^8.0.0", "winston": "^3.2.1" }, "devDependencies": { - "@backstage/backend-common": "^0.15.0-next.0", - "@backstage/backend-test-utils": "^0.1.27-next.0", - "@backstage/cli": "^0.18.1-next.0", + "@backstage/backend-common": "^0.15.0", + "@backstage/backend-test-utils": "^0.1.27", + "@backstage/cli": "^0.18.1", "msw": "^0.44.0" }, "files": [ diff --git a/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md b/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md index 11a6e70e0b..216de9ff65 100644 --- a/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md +++ b/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md @@ -1,5 +1,65 @@ # @backstage/plugin-catalog-backend-module-bitbucket-server +## 0.1.0 + +### Minor Changes + +- f7607f9d85: Add new plugin catalog-backend-module-bitbucket-server which adds the `BitbucketServerEntityProvider`. + + The entity provider is meant as a replacement for the `BitbucketDiscoveryProcessor` to be used with Bitbucket Server (Bitbucket Cloud already has a replacement). + + **Before:** + + ```typescript + // packages/backend/src/plugins/catalog.ts + builder.addProcessor( + BitbucketDiscoveryProcessor.fromConfig(env.config, { logger: env.logger }), + ); + ``` + + ```yaml + # app-config.yaml + catalog: + locations: + - type: bitbucket-discovery + target: 'https://bitbucket.mycompany.com/projects/*/repos/*/catalog-info.yaml + ``` + + **After:** + + ```typescript + // packages/backend/src/plugins/catalog.ts + builder.addEntityProvider( + BitbucketServerEntityProvider.fromConfig(env.config, { + logger: env.logger, + schedule: env.scheduler.createScheduledTaskRunner({ + frequency: { minutes: 30 }, + timeout: { minutes: 3 }, + }), + }), + ); + ``` + + ```yaml + # app-config.yaml + catalog: + providers: + bitbucketServer: + yourProviderId: # identifies your ingested dataset + catalogPath: /catalog-info.yaml # default value + filters: # optional + projectKey: '.*' # optional; RegExp + repoSlug: '.*' # optional; RegExp + ``` + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/integration@1.3.0 + - @backstage/backend-tasks@0.3.4 + - @backstage/plugin-catalog-backend@1.3.1 + ## 0.1.0-next.0 ### Minor Changes diff --git a/plugins/catalog-backend-module-bitbucket-server/package.json b/plugins/catalog-backend-module-bitbucket-server/package.json index 646a31e53f..02c16f0a12 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.0-next.0", + "version": "0.1.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -32,20 +32,20 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@backstage/backend-common": "^0.15.0-next.0", - "@backstage/backend-tasks": "^0.3.4-next.0", + "@backstage/backend-common": "^0.15.0", + "@backstage/backend-tasks": "^0.3.4", "@backstage/catalog-model": "^1.0.1", "@backstage/config": "^1.0.0", "@backstage/errors": "^1.0.0", - "@backstage/integration": "^1.3.0-next.0", - "@backstage/plugin-catalog-backend": "^1.3.1-next.2", + "@backstage/integration": "^1.3.0", + "@backstage/plugin-catalog-backend": "^1.3.1", "cross-fetch": "^3.1.5", "uuid": "^8.0.0", "winston": "^3.2.1" }, "devDependencies": { - "@backstage/backend-test-utils": "^0.1.27-next.0", - "@backstage/cli": "^0.18.1-next.1", + "@backstage/backend-test-utils": "^0.1.27", + "@backstage/cli": "^0.18.1", "msw": "^0.44.0" }, "files": [ diff --git a/plugins/catalog-backend-module-bitbucket/CHANGELOG.md b/plugins/catalog-backend-module-bitbucket/CHANGELOG.md index 65f9da80d6..1f1761bc71 100644 --- a/plugins/catalog-backend-module-bitbucket/CHANGELOG.md +++ b/plugins/catalog-backend-module-bitbucket/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-catalog-backend-module-bitbucket +## 0.2.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/integration@1.3.0 + - @backstage/plugin-catalog-backend@1.3.1 + - @backstage/plugin-bitbucket-cloud-common@0.1.2 + ## 0.2.2-next.0 ### Patch Changes diff --git a/plugins/catalog-backend-module-bitbucket/package.json b/plugins/catalog-backend-module-bitbucket/package.json index 0cc8d38833..92f29ef6f1 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.2-next.0", + "version": "0.2.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,13 +33,13 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/backend-common": "^0.15.0-next.0", + "@backstage/backend-common": "^0.15.0", "@backstage/catalog-model": "^1.1.0", "@backstage/config": "^1.0.1", "@backstage/errors": "^1.1.0", - "@backstage/integration": "^1.3.0-next.0", - "@backstage/plugin-bitbucket-cloud-common": "^0.1.2-next.0", - "@backstage/plugin-catalog-backend": "^1.3.1-next.0", + "@backstage/integration": "^1.3.0", + "@backstage/plugin-bitbucket-cloud-common": "^0.1.2", + "@backstage/plugin-catalog-backend": "^1.3.1", "@backstage/types": "^1.0.0", "lodash": "^4.17.21", "msw": "^0.44.0", @@ -47,8 +47,8 @@ "winston": "^3.2.1" }, "devDependencies": { - "@backstage/backend-test-utils": "^0.1.27-next.0", - "@backstage/cli": "^0.18.1-next.0", + "@backstage/backend-test-utils": "^0.1.27", + "@backstage/cli": "^0.18.1", "@types/lodash": "^4.14.151" }, "files": [ diff --git a/plugins/catalog-backend-module-gerrit/CHANGELOG.md b/plugins/catalog-backend-module-gerrit/CHANGELOG.md index 13a0ec487f..b4292da75c 100644 --- a/plugins/catalog-backend-module-gerrit/CHANGELOG.md +++ b/plugins/catalog-backend-module-gerrit/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-catalog-backend-module-gerrit +## 0.1.3 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/integration@1.3.0 + - @backstage/backend-tasks@0.3.4 + - @backstage/plugin-catalog-backend@1.3.1 + ## 0.1.3-next.0 ### Patch Changes diff --git a/plugins/catalog-backend-module-gerrit/package.json b/plugins/catalog-backend-module-gerrit/package.json index 946bd3099f..8a36c90796 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.3-next.0", + "version": "0.1.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -28,13 +28,13 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@backstage/backend-common": "^0.15.0-next.0", - "@backstage/backend-tasks": "^0.3.4-next.0", + "@backstage/backend-common": "^0.15.0", + "@backstage/backend-tasks": "^0.3.4", "@backstage/catalog-model": "^1.1.0", "@backstage/config": "^1.0.1", "@backstage/errors": "^1.1.0", - "@backstage/integration": "^1.3.0-next.0", - "@backstage/plugin-catalog-backend": "^1.3.1-next.0", + "@backstage/integration": "^1.3.0", + "@backstage/plugin-catalog-backend": "^1.3.1", "fs-extra": "10.1.0", "msw": "^0.44.0", "node-fetch": "^2.6.7", @@ -42,8 +42,8 @@ "winston": "^3.2.1" }, "devDependencies": { - "@backstage/backend-test-utils": "^0.1.27-next.0", - "@backstage/cli": "^0.18.1-next.0", + "@backstage/backend-test-utils": "^0.1.27", + "@backstage/cli": "^0.18.1", "@types/fs-extra": "^9.0.1" }, "files": [ diff --git a/plugins/catalog-backend-module-github/CHANGELOG.md b/plugins/catalog-backend-module-github/CHANGELOG.md index 2cabe628db..2e9c03529b 100644 --- a/plugins/catalog-backend-module-github/CHANGELOG.md +++ b/plugins/catalog-backend-module-github/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-catalog-backend-module-github +## 0.1.6 + +### Patch Changes + +- f48950e34b: Github Entity Provider functionality for adding entities to the catalog. + + This provider replaces the GithubDiscoveryProcessor functionality as providers offer more flexibility with scheduling ingestion, removing and preventing orphaned entities. + + More information can be found on the [GitHub Discovery](https://backstage.io/docs/integrations/github/discovery) page. + +- c59d1ce487: Fixed bug where repository filter was including all archived repositories +- 97f0a37378: Improved support for wildcards in `catalogPath` +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/integration@1.3.0 + - @backstage/backend-tasks@0.3.4 + - @backstage/plugin-catalog-backend@1.3.1 + ## 0.1.6-next.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-github/package.json b/plugins/catalog-backend-module-github/package.json index 29405e38c2..a0b7f10833 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.1.6-next.2", + "version": "0.1.6", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,13 +33,13 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/backend-common": "^0.15.0-next.1", - "@backstage/backend-tasks": "^0.3.4-next.0", + "@backstage/backend-common": "^0.15.0", + "@backstage/backend-tasks": "^0.3.4", "@backstage/catalog-model": "^1.1.0", "@backstage/config": "^1.0.1", "@backstage/errors": "^1.1.0", - "@backstage/integration": "^1.3.0-next.1", - "@backstage/plugin-catalog-backend": "^1.3.1-next.2", + "@backstage/integration": "^1.3.0", + "@backstage/plugin-catalog-backend": "^1.3.1", "@backstage/types": "^1.0.0", "@octokit/graphql": "^5.0.0", "lodash": "^4.17.21", @@ -49,8 +49,8 @@ "winston": "^3.2.1" }, "devDependencies": { - "@backstage/backend-test-utils": "^0.1.27-next.0", - "@backstage/cli": "^0.18.1-next.1", + "@backstage/backend-test-utils": "^0.1.27", + "@backstage/cli": "^0.18.1", "@types/lodash": "^4.14.151" }, "files": [ diff --git a/plugins/catalog-backend-module-github/src/providers/GitHubEntityProvider.ts b/plugins/catalog-backend-module-github/src/providers/GitHubEntityProvider.ts index 991b380112..eb5b9d67e2 100644 --- a/plugins/catalog-backend-module-github/src/providers/GitHubEntityProvider.ts +++ b/plugins/catalog-backend-module-github/src/providers/GitHubEntityProvider.ts @@ -185,9 +185,11 @@ export class GitHubEntityProvider implements EntityProvider { const repositoryFilter = this.config.filters?.repository; const matchingRepositories = repositories.filter(r => { - return !r.isArchived && repositoryFilter - ? repositoryFilter?.test(r.name) - : true && r.defaultBranchRef?.name; + return ( + !r.isArchived && + (!repositoryFilter || repositoryFilter.test(r.name)) && + r.defaultBranchRef?.name + ); }); return matchingRepositories; } diff --git a/plugins/catalog-backend-module-gitlab/CHANGELOG.md b/plugins/catalog-backend-module-gitlab/CHANGELOG.md index ad9259067f..e3f269514b 100644 --- a/plugins/catalog-backend-module-gitlab/CHANGELOG.md +++ b/plugins/catalog-backend-module-gitlab/CHANGELOG.md @@ -1,5 +1,29 @@ # @backstage/plugin-catalog-backend-module-gitlab +## 0.1.6 + +### Patch Changes + +- 24979413a4: Enhancing GitLab provider with filtering projects by pattern RegExp + + ```yaml + providers: + gitlab: + stg: + host: gitlab.stg.company.io + branch: main + projectPattern: 'john/' # new option + entityFilename: template.yaml + ``` + + With the aforementioned parameter you can filter projects, and keep only who belongs to the namespace "john". + +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/integration@1.3.0 + - @backstage/backend-tasks@0.3.4 + - @backstage/plugin-catalog-backend@1.3.1 + ## 0.1.6-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-gitlab/package.json b/plugins/catalog-backend-module-gitlab/package.json index 431dd69c3c..a5f9259764 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.1.6-next.1", + "version": "0.1.6", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,13 +33,13 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/backend-common": "^0.15.0-next.0", + "@backstage/backend-common": "^0.15.0", "@backstage/catalog-model": "^1.1.0", - "@backstage/backend-tasks": "^0.3.4-next.0", + "@backstage/backend-tasks": "^0.3.4", "@backstage/config": "^1.0.1", "@backstage/errors": "^1.1.0", - "@backstage/integration": "^1.3.0-next.0", - "@backstage/plugin-catalog-backend": "^1.3.1-next.2", + "@backstage/integration": "^1.3.0", + "@backstage/plugin-catalog-backend": "^1.3.1", "@backstage/types": "^1.0.0", "lodash": "^4.17.21", "msw": "^0.44.0", @@ -48,8 +48,8 @@ "uuid": "^8.0.0" }, "devDependencies": { - "@backstage/backend-test-utils": "^0.1.27-next.0", - "@backstage/cli": "^0.18.1-next.1", + "@backstage/backend-test-utils": "^0.1.27", + "@backstage/cli": "^0.18.1", "@types/lodash": "^4.14.151", "@types/uuid": "^8.0.0" }, diff --git a/plugins/catalog-backend-module-ldap/CHANGELOG.md b/plugins/catalog-backend-module-ldap/CHANGELOG.md index 7c71053e0d..8e41d6325b 100644 --- a/plugins/catalog-backend-module-ldap/CHANGELOG.md +++ b/plugins/catalog-backend-module-ldap/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-catalog-backend-module-ldap +## 0.5.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.3.4 + - @backstage/plugin-catalog-backend@1.3.1 + ## 0.5.2-next.0 ### Patch Changes diff --git a/plugins/catalog-backend-module-ldap/package.json b/plugins/catalog-backend-module-ldap/package.json index cfb867b69b..1de6cbd331 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.2-next.0", + "version": "0.5.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,11 +33,11 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/backend-tasks": "^0.3.4-next.0", + "@backstage/backend-tasks": "^0.3.4", "@backstage/catalog-model": "^1.1.0", "@backstage/config": "^1.0.1", "@backstage/errors": "^1.1.0", - "@backstage/plugin-catalog-backend": "^1.3.1-next.0", + "@backstage/plugin-catalog-backend": "^1.3.1", "@backstage/types": "^1.0.0", "@types/ldapjs": "^2.2.0", "ldapjs": "^2.2.0", @@ -46,7 +46,7 @@ "winston": "^3.2.1" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.0", + "@backstage/cli": "^0.18.1", "@types/lodash": "^4.14.151" }, "files": [ diff --git a/plugins/catalog-backend-module-msgraph/CHANGELOG.md b/plugins/catalog-backend-module-msgraph/CHANGELOG.md index 3ff8a4d90d..f914f83f00 100644 --- a/plugins/catalog-backend-module-msgraph/CHANGELOG.md +++ b/plugins/catalog-backend-module-msgraph/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-catalog-backend-module-msgraph +## 0.4.1 + +### Patch Changes + +- b1995df9f3: Adjust references in deprecation warnings to point to stable URL/document. +- Updated dependencies + - @backstage/backend-tasks@0.3.4 + - @backstage/plugin-catalog-backend@1.3.1 + ## 0.4.1-next.0 ### Patch Changes diff --git a/plugins/catalog-backend-module-msgraph/README.md b/plugins/catalog-backend-module-msgraph/README.md index 23166a755d..fe2e568b5a 100644 --- a/plugins/catalog-backend-module-msgraph/README.md +++ b/plugins/catalog-backend-module-msgraph/README.md @@ -80,7 +80,7 @@ catalog: # See https://docs.microsoft.com/en-us/graph/search-query-parameter search: '"description:One" AND ("displayName:Video" OR "displayName:Drive")' # Optional select for groups, this will allow you work with schemaExtensions - # in order to add extra information to your groups that can be used on you custom groupTransformers + # in order to add extra information to your groups that can be used on your custom groupTransformers # See https://docs.microsoft.com/en-us/graph/api/resources/schemaextension?view=graph-rest-1.0 select: ['id', 'displayName', 'description'] ``` diff --git a/plugins/catalog-backend-module-msgraph/package.json b/plugins/catalog-backend-module-msgraph/package.json index f96c95854a..383dd42fcf 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.4.1-next.0", + "version": "0.4.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,10 +34,10 @@ }, "dependencies": { "@azure/identity": "^2.1.0", - "@backstage/backend-tasks": "^0.3.4-next.0", + "@backstage/backend-tasks": "^0.3.4", "@backstage/catalog-model": "^1.1.0", "@backstage/config": "^1.0.1", - "@backstage/plugin-catalog-backend": "^1.3.1-next.0", + "@backstage/plugin-catalog-backend": "^1.3.1", "@microsoft/microsoft-graph-types": "^2.6.0", "@types/node-fetch": "^2.5.12", "lodash": "^4.17.21", @@ -48,9 +48,9 @@ "winston": "^3.2.1" }, "devDependencies": { - "@backstage/backend-common": "^0.15.0-next.0", - "@backstage/backend-test-utils": "^0.1.27-next.0", - "@backstage/cli": "^0.18.1-next.0", + "@backstage/backend-common": "^0.15.0", + "@backstage/backend-test-utils": "^0.1.27", + "@backstage/cli": "^0.18.1", "@types/lodash": "^4.14.151", "msw": "^0.44.0" }, diff --git a/plugins/catalog-backend-module-openapi/CHANGELOG.md b/plugins/catalog-backend-module-openapi/CHANGELOG.md index 85a14917d8..660fbd4148 100644 --- a/plugins/catalog-backend-module-openapi/CHANGELOG.md +++ b/plugins/catalog-backend-module-openapi/CHANGELOG.md @@ -1,5 +1,33 @@ # @backstage/plugin-catalog-backend-module-openapi +## 0.1.1 + +### Patch Changes + +- b50e8e533b: Add an `$openapi` placeholder resolver that supports more use cases for resolving `$ref` instances. This means that the quite recently added `OpenApiRefProcessor` has been deprecated in favor of the `openApiPlaceholderResolver`. + + An example of how to use it can be seen below. + + ```yaml + apiVersion: backstage.io/v1alpha1 + kind: API + metadata: + name: example + description: Example API + spec: + type: openapi + lifecycle: production + owner: team + definition: + $openapi: ./spec/openapi.yaml # by using $openapi Backstage will now resolve all $ref instances + ``` + +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/plugin-catalog-node@1.0.1 + - @backstage/integration@1.3.0 + - @backstage/plugin-catalog-backend@1.3.1 + ## 0.1.1-next.0 ### Patch Changes diff --git a/plugins/catalog-backend-module-openapi/README.md b/plugins/catalog-backend-module-openapi/README.md index 1a133521c6..f80798e267 100644 --- a/plugins/catalog-backend-module-openapi/README.md +++ b/plugins/catalog-backend-module-openapi/README.md @@ -15,6 +15,32 @@ yarn add --cwd packages/backend @backstage/plugin-catalog-backend-module-openapi ### Adding the plugin to your `packages/backend` +#### **openApiPlaceholderResolver** + +The placeholder resolver can be added by importing `openApiPlaceholderResolver` in `src/plugins/catalog.ts` in your `backend` package and adding the following. + +```ts +builder.setPlaceholderResolver('openapi', openApiPlaceholderResolver); +``` + +This allows you to use the `$openapi` placeholder when referencing your OpenAPI specification. This will then resolve all `$ref` instances in your specification. + +```yaml +apiVersion: backstage.io/v1alpha1 +kind: API +metadata: + name: example + description: Example API +spec: + type: openapi + lifecycle: production + owner: team + definition: + $openapi: ./spec/openapi.yaml # by using $openapi Backstage will now resolve all $ref instances +``` + +#### **OpenAPIRefProcessor** (deprecated) + The processor can be added by importing `OpenApiRefProcessor` in `src/plugins/catalog.ts` in your `backend` package and adding the following. ```ts diff --git a/plugins/catalog-backend-module-openapi/api-report.md b/plugins/catalog-backend-module-openapi/api-report.md index 92ddd1e3cd..d3a40067c5 100644 --- a/plugins/catalog-backend-module-openapi/api-report.md +++ b/plugins/catalog-backend-module-openapi/api-report.md @@ -6,12 +6,19 @@ import { CatalogProcessor } from '@backstage/plugin-catalog-backend'; import { Config } from '@backstage/config'; import { Entity } from '@backstage/catalog-model'; +import { JsonValue } from '@backstage/types'; import { LocationSpec } from '@backstage/plugin-catalog-backend'; import { Logger } from 'winston'; +import { PlaceholderResolverParams } from '@backstage/plugin-catalog-backend'; import { ScmIntegrations } from '@backstage/integration'; import { UrlReader } from '@backstage/backend-common'; // @public (undocumented) +export function openApiPlaceholderResolver( + params: PlaceholderResolverParams, +): Promise; + +// @public @deprecated (undocumented) export class OpenApiRefProcessor implements CatalogProcessor { constructor(options: { integrations: ScmIntegrations; diff --git a/plugins/catalog-backend-module-openapi/package.json b/plugins/catalog-backend-module-openapi/package.json index d2d4d4989c..ce08fcf4d3 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.1-next.0", + "version": "0.1.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,17 +34,19 @@ }, "dependencies": { "@apidevtools/swagger-parser": "^10.1.0", - "@backstage/backend-common": "^0.15.0-next.0", + "@backstage/backend-common": "^0.15.0", "@backstage/catalog-model": "^1.1.0", "@backstage/config": "^1.0.1", - "@backstage/integration": "^1.3.0-next.0", - "@backstage/plugin-catalog-backend": "^1.3.1-next.0", + "@backstage/integration": "^1.3.0", + "@backstage/plugin-catalog-backend": "^1.3.1", + "@backstage/plugin-catalog-node": "^1.0.1", + "@backstage/types": "^1.0.0", "winston": "^3.2.1", "yaml": "^2.1.1" }, "devDependencies": { - "@backstage/backend-test-utils": "^0.1.27-next.0", - "@backstage/cli": "^0.18.1-next.0", + "@backstage/backend-test-utils": "^0.1.27", + "@backstage/cli": "^0.18.1", "openapi-types": "^12.0.0" }, "files": [ diff --git a/plugins/catalog-backend-module-openapi/src/OpenApiRefProcessor.test.ts b/plugins/catalog-backend-module-openapi/src/OpenApiRefProcessor.test.ts index 8f2cc571c2..21080202b5 100644 --- a/plugins/catalog-backend-module-openapi/src/OpenApiRefProcessor.test.ts +++ b/plugins/catalog-backend-module-openapi/src/OpenApiRefProcessor.test.ts @@ -86,7 +86,7 @@ describe('OpenApiRefProcessor', () => { it('should ignore other specification types', async () => { const { entity, processor } = setupTest({ - kind: 'Group', + kind: 'API', spec: { type: 'asyncapi' }, }); diff --git a/plugins/catalog-backend-module-openapi/src/OpenApiRefProcessor.ts b/plugins/catalog-backend-module-openapi/src/OpenApiRefProcessor.ts index 01875e0779..f4cffdf48f 100644 --- a/plugins/catalog-backend-module-openapi/src/OpenApiRefProcessor.ts +++ b/plugins/catalog-backend-module-openapi/src/OpenApiRefProcessor.ts @@ -24,7 +24,10 @@ import { import { bundleOpenApiSpecification } from './lib'; import { Logger } from 'winston'; -/** @public */ +/** + * @public + * @deprecated replaced by the openApiPlaceholderResolver + */ export class OpenApiRefProcessor implements CatalogProcessor { private readonly integrations: ScmIntegrations; private readonly logger: Logger; @@ -69,17 +72,23 @@ export class OpenApiRefProcessor implements CatalogProcessor { } const scmIntegration = this.integrations.byUrl(location.target); - if (!scmIntegration) { + const definition = entity.spec!.definition; + + if (!scmIntegration || !definition) { return entity; } + const resolveUrl = (url: string, base: string): string => { + return scmIntegration.resolveUrl({ url, base }); + }; + this.logger.debug(`Bundling OpenAPI specification from ${location.target}`); try { const bundledSpec = await bundleOpenApiSpecification( - entity.spec!.definition?.toString(), + definition.toString(), location.target, - this.reader, - scmIntegration, + this.reader.read, + resolveUrl, ); return { diff --git a/plugins/catalog-backend-module-openapi/src/index.ts b/plugins/catalog-backend-module-openapi/src/index.ts index f98bee6bac..ccd3ced71e 100644 --- a/plugins/catalog-backend-module-openapi/src/index.ts +++ b/plugins/catalog-backend-module-openapi/src/index.ts @@ -14,3 +14,4 @@ * limitations under the License. */ export { OpenApiRefProcessor } from './OpenApiRefProcessor'; +export { openApiPlaceholderResolver } from './openApiPlaceholderResolver'; diff --git a/plugins/catalog-backend-module-openapi/src/lib/bundle.test.ts b/plugins/catalog-backend-module-openapi/src/lib/bundle.test.ts index 4505f158b5..0ecd9f7fd1 100644 --- a/plugins/catalog-backend-module-openapi/src/lib/bundle.test.ts +++ b/plugins/catalog-backend-module-openapi/src/lib/bundle.test.ts @@ -13,8 +13,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { ConfigReader } from '@backstage/config'; -import { ScmIntegrations } from '@backstage/integration'; import { bundleOpenApiSpecification } from './bundle'; const specification = ` @@ -73,43 +71,21 @@ paths: `; describe('bundleOpenApiSpecification', () => { - const readUrl = jest.fn(); - const reader = { - readUrl, - read: jest.fn(), - readTree: jest.fn(), - search: jest.fn(), - }; - - const scmIntegration = ScmIntegrations.fromConfig(new ConfigReader({})).byUrl( - 'https://github.com/owner/repo/blob/main/openapi.yaml', - ); + const read = jest.fn(); + const resolveUrl = jest.fn(); beforeEach(() => { jest.clearAllMocks(); }); - it('should return undefined if no specification is supplied', async () => { - expect( - await bundleOpenApiSpecification( - undefined, - 'https://github.com/owner/repo/blob/main/openapi.yaml', - reader, - scmIntegration as any, - ), - ).toBeUndefined(); - }); - it('should return the bundled specification', async () => { - readUrl.mockResolvedValue({ - buffer: jest.fn().mockResolvedValue(list), - }); + read.mockResolvedValue(list); const result = await bundleOpenApiSpecification( specification, - 'https://github.com/owner/repo/blob/main/openapi.yaml', - reader, - scmIntegration as any, + 'https://github.com/owner/repo/blob/main/catalog-info.yaml', + read, + resolveUrl, ); expect(result).toEqual(expectedResult.trimStart()); diff --git a/plugins/catalog-backend-module-openapi/src/lib/bundle.ts b/plugins/catalog-backend-module-openapi/src/lib/bundle.ts index 3d35429d8b..6ac8d211e2 100644 --- a/plugins/catalog-backend-module-openapi/src/lib/bundle.ts +++ b/plugins/catalog-backend-module-openapi/src/lib/bundle.ts @@ -13,8 +13,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { UrlReader } from '@backstage/backend-common'; -import { ScmIntegration } from '@backstage/integration'; import SwaggerParser from '@apidevtools/swagger-parser'; import { parse, stringify } from 'yaml'; import * as path from 'path'; @@ -28,12 +26,16 @@ const getProtocol = (refPath: string) => { return undefined; }; +export type BundlerRead = (url: string) => Promise; + +export type BundlerResolveUrl = (url: string, base: string) => string; + export async function bundleOpenApiSpecification( - specification: string | undefined, - targetUrl: string, - reader: UrlReader, - scmIntegration: ScmIntegration, -): Promise { + specification: string, + baseUrl: string, + read: BundlerRead, + resolveUrl: BundlerResolveUrl, +): Promise { const fileUrlReaderResolver: SwaggerParser.ResolverOptions = { canRead: file => { const protocol = getProtocol(file.url); @@ -41,22 +43,11 @@ export async function bundleOpenApiSpecification( }, read: async file => { const relativePath = path.relative('.', file.url); - const url = scmIntegration.resolveUrl({ - base: targetUrl, - url: relativePath, - }); - if (reader.readUrl) { - const data = await reader.readUrl(url); - return data.buffer(); - } - throw new Error('UrlReader has no readUrl method defined'); + const url = resolveUrl(relativePath, baseUrl); + return await read(url); }, }; - if (!specification) { - return undefined; - } - const options: SwaggerParser.Options = { resolve: { file: fileUrlReaderResolver, diff --git a/plugins/catalog-backend-module-openapi/src/openApiPlaceholderResolver.test.ts b/plugins/catalog-backend-module-openapi/src/openApiPlaceholderResolver.test.ts new file mode 100644 index 0000000000..f58a818ba5 --- /dev/null +++ b/plugins/catalog-backend-module-openapi/src/openApiPlaceholderResolver.test.ts @@ -0,0 +1,63 @@ +/* + * 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 { PlaceholderResolverParams } from '@backstage/plugin-catalog-backend'; +import { openApiPlaceholderResolver } from './openApiPlaceholderResolver'; +import { bundleOpenApiSpecification } from './lib'; + +jest.mock('./lib', () => ({ + bundleOpenApiSpecification: jest.fn(), +})); + +const bundledSpecification = ''; + +describe('openApiPlaceholderResolver', () => { + const mockResolveUrl = jest.fn(); + mockResolveUrl.mockReturnValue('mockUrl'); + + const mockRead = jest.fn(); + mockRead.mockResolvedValue(Buffer.from('mockData')); + + const params: PlaceholderResolverParams = { + key: 'openapi', + value: './spec/openapi.yaml', + baseUrl: 'https://github.com/owner/repo/blob/main/catalog-info.yaml', + resolveUrl: mockResolveUrl, + read: mockRead, + emit: jest.fn(), + }; + + beforeEach(() => { + (bundleOpenApiSpecification as any).mockResolvedValue(bundledSpecification); + }); + + afterEach(() => { + jest.clearAllMocks(); + }); + + it('should throw error if unable to bundle the OpenAPI specification', async () => { + (bundleOpenApiSpecification as any).mockRejectedValue(new Error('TEST')); + + await expect(openApiPlaceholderResolver(params)).rejects.toThrow( + 'Placeholder $openapi unable to bundle OpenAPI specification', + ); + }); + + it('should bundle the OpenAPI specification', async () => { + const result = await openApiPlaceholderResolver(params); + + expect(result).toEqual(bundledSpecification); + }); +}); diff --git a/plugins/catalog-backend-module-openapi/src/openApiPlaceholderResolver.ts b/plugins/catalog-backend-module-openapi/src/openApiPlaceholderResolver.ts new file mode 100644 index 0000000000..96fadb3cbc --- /dev/null +++ b/plugins/catalog-backend-module-openapi/src/openApiPlaceholderResolver.ts @@ -0,0 +1,85 @@ +/* + * 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 { PlaceholderResolverParams } from '@backstage/plugin-catalog-backend'; +import { JsonValue } from '@backstage/types'; +import { processingResult } from '@backstage/plugin-catalog-node'; +import { bundleOpenApiSpecification } from './lib'; + +/** @public */ +export async function openApiPlaceholderResolver( + params: PlaceholderResolverParams, +): Promise { + const { content, url } = await readTextLocation(params); + + params.emit(processingResult.refresh(`url:${url}`)); + + try { + return await bundleOpenApiSpecification( + content, + url, + params.read, + params.resolveUrl, + ); + } catch (error) { + throw new Error( + `Placeholder \$${params.key} unable to bundle OpenAPI specification at ${params.value}, ${error}`, + ); + } +} + +/* + * Helpers, copied from PlaceholderProcessor + */ + +async function readTextLocation( + params: PlaceholderResolverParams, +): Promise<{ content: string; url: string }> { + const newUrl = relativeUrl(params); + + try { + const data = await params.read(newUrl); + return { content: data.toString('utf-8'), url: newUrl }; + } catch (e) { + throw new Error( + `Placeholder \$${params.key} could not read location ${params.value}, ${e}`, + ); + } +} + +function relativeUrl({ + key, + value, + baseUrl, + resolveUrl, +}: PlaceholderResolverParams): string { + if (typeof value !== 'string') { + throw new Error( + `Placeholder \$${key} expected a string value parameter, in the form of an absolute URL or a relative path`, + ); + } + + try { + return resolveUrl(value, baseUrl); + } catch (e) { + // The only remaining case that isn't support is a relative file path that should be + // resolved using a relative file location. Accessing local file paths can lead to + // path traversal attacks and access to any file on the host system. Implementing this + // would require additional security measures. + throw new Error( + `Placeholder \$${key} could not form a URL out of ${baseUrl} and ${value}, ${e}`, + ); + } +} diff --git a/plugins/catalog-backend/CHANGELOG.md b/plugins/catalog-backend/CHANGELOG.md index f17e7f85cc..bc287ad98a 100644 --- a/plugins/catalog-backend/CHANGELOG.md +++ b/plugins/catalog-backend/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-catalog-backend +## 1.3.1 + +### Patch Changes + +- 56e1b4b89c: Fixed typos in alpha types. +- e3d3018531: Fix issue for conditional decisions based on properties stored as arrays, like tags. + + Before this change, having a permission policy returning conditional decisions based on metadata like tags, such like `createCatalogConditionalDecision(permission, catalogConditions.hasMetadata('tags', 'java'),)`, was producing wrong results. The issue occurred when authorizing entities already loaded from the database, for example when authorizing `catalogEntityDeletePermission`. + +- 059ae348b4: Use the non-deprecated form of table.unique in knex +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/backend-plugin-api@0.1.1 + - @backstage/plugin-catalog-node@1.0.1 + - @backstage/integration@1.3.0 + - @backstage/plugin-catalog-common@1.0.5 + - @backstage/plugin-permission-node@0.6.4 + ## 1.3.1-next.2 ### Patch Changes diff --git a/plugins/catalog-backend/api-report.md b/plugins/catalog-backend/api-report.md index 22a7f8192c..55f2d114db 100644 --- a/plugins/catalog-backend/api-report.md +++ b/plugins/catalog-backend/api-report.md @@ -5,7 +5,7 @@ ```ts /// -import { BackendRegistrable } from '@backstage/backend-plugin-api'; +import { BackendFeature } from '@backstage/backend-plugin-api'; import { CatalogApi } from '@backstage/catalog-client'; import { CatalogEntityDocument } from '@backstage/plugin-catalog-common'; import { CatalogProcessor } from '@backstage/plugin-catalog-node'; @@ -224,7 +224,7 @@ export type CatalogPermissionRule = PermissionRule; // @alpha -export const catalogPlugin: (option: unknown) => BackendRegistrable; +export const catalogPlugin: (options?: unknown) => BackendFeature; // @public (undocumented) export interface CatalogProcessingEngine { diff --git a/plugins/catalog-backend/package.json b/plugins/catalog-backend/package.json index 6cbdd55387..45e447efe8 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.3.1-next.2", + "version": "1.3.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,17 +34,17 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-plugin-api": "^0.1.1-next.0", - "@backstage/plugin-catalog-node": "^1.0.1-next.0", - "@backstage/backend-common": "^0.15.0-next.1", + "@backstage/backend-plugin-api": "^0.1.1", + "@backstage/plugin-catalog-node": "^1.0.1", + "@backstage/backend-common": "^0.15.0", "@backstage/catalog-client": "^1.0.4", "@backstage/catalog-model": "^1.1.0", "@backstage/config": "^1.0.1", "@backstage/errors": "^1.1.0", - "@backstage/integration": "^1.3.0-next.1", - "@backstage/plugin-catalog-common": "^1.0.5-next.0", + "@backstage/integration": "^1.3.0", + "@backstage/plugin-catalog-common": "^1.0.5", "@backstage/plugin-permission-common": "^0.6.3", - "@backstage/plugin-permission-node": "^0.6.4-next.0", + "@backstage/plugin-permission-node": "^0.6.4", "@backstage/plugin-scaffolder-common": "^1.1.2", "@backstage/plugin-search-common": "^1.0.0", "@backstage/types": "^1.0.0", @@ -70,10 +70,10 @@ "zod": "^3.11.6" }, "devDependencies": { - "@backstage/backend-test-utils": "^0.1.27-next.0", - "@backstage/cli": "^0.18.1-next.1", + "@backstage/backend-test-utils": "^0.1.27", + "@backstage/cli": "^0.18.1", "@backstage/plugin-permission-common": "^0.6.3", - "@backstage/plugin-search-backend-node": "1.0.1-next.0", + "@backstage/plugin-search-backend-node": "1.0.1", "@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/service/CatalogPlugin.ts b/plugins/catalog-backend/src/service/CatalogPlugin.ts index b82797ec8b..ed356df5a2 100644 --- a/plugins/catalog-backend/src/service/CatalogPlugin.ts +++ b/plugins/catalog-backend/src/service/CatalogPlugin.ts @@ -27,7 +27,7 @@ import { CatalogBuilder } from './CatalogBuilder'; import { CatalogProcessor, CatalogProcessingExtensionPoint, - catalogProcessingExtentionPoint, + catalogProcessingExtensionPoint, EntityProvider, } from '@backstage/plugin-catalog-node'; @@ -62,7 +62,7 @@ export const catalogPlugin = createBackendPlugin({ const processingExtensions = new CatalogExtensionPointImpl(); // plugins depending on this API will be initialized before this plugins init method is executed. env.registerExtensionPoint( - catalogProcessingExtentionPoint, + catalogProcessingExtensionPoint, processingExtensions, ); diff --git a/plugins/catalog-common/CHANGELOG.md b/plugins/catalog-common/CHANGELOG.md index b05ac57b9f..b3e150edc8 100644 --- a/plugins/catalog-common/CHANGELOG.md +++ b/plugins/catalog-common/CHANGELOG.md @@ -1,5 +1,11 @@ # @backstage/plugin-catalog-common +## 1.0.5 + +### Patch Changes + +- 92103db537: Export aggregated list of all catalog permissions + ## 1.0.5-next.0 ### Patch Changes diff --git a/plugins/catalog-common/package.json b/plugins/catalog-common/package.json index f3cfa2d236..09911048ee 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.5-next.0", + "version": "1.0.5", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -38,7 +38,7 @@ "@backstage/plugin-search-common": "^1.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.0" + "@backstage/cli": "^0.18.1" }, "files": [ "dist", diff --git a/plugins/catalog-customized/CHANGELOG.md b/plugins/catalog-customized/CHANGELOG.md index c6e3c86ff4..7d4ce71cb2 100644 --- a/plugins/catalog-customized/CHANGELOG.md +++ b/plugins/catalog-customized/CHANGELOG.md @@ -1,5 +1,13 @@ # @internal/plugin-catalog-customized +## 0.0.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog@1.5.0 + - @backstage/plugin-catalog-react@1.1.3 + ## 0.0.1-next.0 ### Patch Changes diff --git a/plugins/catalog-customized/package.json b/plugins/catalog-customized/package.json index ee4d22eb09..747897da41 100644 --- a/plugins/catalog-customized/package.json +++ b/plugins/catalog-customized/package.json @@ -1,7 +1,7 @@ { "name": "@internal/plugin-catalog-customized", "description": "The internal Backstage Customizable plugin for browsing the Backstage catalog", - "version": "0.0.1-next.0", + "version": "0.0.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,8 +34,8 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/plugin-catalog": "^1.5.0-next.0", - "@backstage/plugin-catalog-react": "^1.1.3-next.0" + "@backstage/plugin-catalog": "^1.5.0", + "@backstage/plugin-catalog-react": "^1.1.3" }, "devDependencies": { "@types/react": "^16.13.1 || ^17.0.0" diff --git a/plugins/catalog-graph/CHANGELOG.md b/plugins/catalog-graph/CHANGELOG.md index d0bb340559..398aec357f 100644 --- a/plugins/catalog-graph/CHANGELOG.md +++ b/plugins/catalog-graph/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-catalog-graph +## 0.2.20 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + ## 0.2.20-next.1 ### Patch Changes diff --git a/plugins/catalog-graph/package.json b/plugins/catalog-graph/package.json index 5dde4c10aa..14f5aecb0d 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.20-next.1", + "version": "0.2.20", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -26,9 +26,9 @@ "dependencies": { "@backstage/catalog-client": "^1.0.4", "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", - "@backstage/plugin-catalog-react": "^1.1.3-next.2", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", + "@backstage/plugin-catalog-react": "^1.1.3", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -45,11 +45,11 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/plugin-catalog": "^1.5.0-next.2", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/core-app-api": "^1.0.5", + "@backstage/dev-utils": "^1.0.5", + "@backstage/plugin-catalog": "^1.5.0", + "@backstage/test-utils": "^1.1.3", "@backstage/types": "^1.0.0", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/plugins/catalog-graphql/CHANGELOG.md b/plugins/catalog-graphql/CHANGELOG.md index 950cebce5f..3f2ffd4f64 100644 --- a/plugins/catalog-graphql/CHANGELOG.md +++ b/plugins/catalog-graphql/CHANGELOG.md @@ -1,5 +1,11 @@ # @backstage/plugin-catalog-graphql +## 0.3.12 + +### Patch Changes + +- fa3eeee92d: Updated dependency `@graphql-tools/schema` to `^9.0.0`. + ## 0.3.11 ### Patch Changes diff --git a/plugins/catalog-graphql/package.json b/plugins/catalog-graphql/package.json index 082bd43c34..25ba1cb492 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.11", + "version": "0.3.12", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -46,13 +46,13 @@ "winston": "^3.2.1" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.0", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/test-utils": "^1.1.3", "@graphql-codegen/cli": "^2.3.1", "@graphql-codegen/graphql-modules-preset": "^2.3.2", "@graphql-codegen/typescript": "^2.4.2", "@graphql-codegen/typescript-resolvers": "^2.4.3", - "@graphql-tools/schema": "^8.3.1", + "@graphql-tools/schema": "^9.0.0", "msw": "^0.44.0" }, "files": [ diff --git a/plugins/catalog-import/CHANGELOG.md b/plugins/catalog-import/CHANGELOG.md index 38394bb798..bbed459737 100644 --- a/plugins/catalog-import/CHANGELOG.md +++ b/plugins/catalog-import/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-catalog-import +## 0.8.11 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.3.0 + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + - @backstage/integration-react@1.1.3 + ## 0.8.11-next.1 ### Patch Changes diff --git a/plugins/catalog-import/package.json b/plugins/catalog-import/package.json index 7e48bd8c77..006decf867 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.8.11-next.1", + "version": "0.8.11", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -37,12 +37,12 @@ "@backstage/catalog-client": "^1.0.4", "@backstage/catalog-model": "^1.1.0", "@backstage/config": "^1.0.1", - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", "@backstage/errors": "^1.1.0", - "@backstage/integration": "^1.3.0-next.0", - "@backstage/integration-react": "^1.1.3-next.1", - "@backstage/plugin-catalog-react": "^1.1.3-next.2", + "@backstage/integration": "^1.3.0", + "@backstage/integration-react": "^1.1.3", + "@backstage/plugin-catalog-react": "^1.1.3", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -60,10 +60,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/core-app-api": "^1.0.5", + "@backstage/dev-utils": "^1.0.5", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/react-hooks": "^8.0.0", diff --git a/plugins/catalog-node/CHANGELOG.md b/plugins/catalog-node/CHANGELOG.md index 78fe4d3873..04b65bb4ba 100644 --- a/plugins/catalog-node/CHANGELOG.md +++ b/plugins/catalog-node/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-catalog-node +## 1.0.1 + +### Patch Changes + +- 0599732ec0: Refactored experimental backend system with new type names. +- 56e1b4b89c: Fixed typos in alpha types. +- Updated dependencies + - @backstage/backend-plugin-api@0.1.1 + ## 1.0.1-next.0 ### Patch Changes diff --git a/plugins/catalog-node/api-report.md b/plugins/catalog-node/api-report.md index 0449708bc3..46e3efef99 100644 --- a/plugins/catalog-node/api-report.md +++ b/plugins/catalog-node/api-report.md @@ -7,8 +7,8 @@ import { CompoundEntityRef } from '@backstage/catalog-model'; import { Entity } from '@backstage/catalog-model'; +import { ExtensionPoint } from '@backstage/backend-plugin-api'; import { JsonValue } from '@backstage/types'; -import { ServiceRef } from '@backstage/backend-plugin-api'; // @alpha (undocumented) export interface CatalogProcessingExtensionPoint { @@ -19,7 +19,7 @@ export interface CatalogProcessingExtensionPoint { } // @alpha (undocumented) -export const catalogProcessingExtentionPoint: ServiceRef; +export const catalogProcessingExtensionPoint: ExtensionPoint; // @public (undocumented) export type CatalogProcessor = { diff --git a/plugins/catalog-node/package.json b/plugins/catalog-node/package.json index 0684112075..08f61b699c 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.0.1-next.0", + "version": "1.0.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -25,14 +25,14 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@backstage/backend-plugin-api": "^0.1.1-next.0", + "@backstage/backend-plugin-api": "^0.1.1", "@backstage/catalog-model": "^1.1.0", "@backstage/errors": "1.1.0", "@backstage/types": "^1.0.0" }, "devDependencies": { - "@backstage/backend-common": "^0.15.0-next.0", - "@backstage/cli": "^0.18.1-next.0" + "@backstage/backend-common": "^0.15.0", + "@backstage/cli": "^0.18.1" }, "files": [ "dist", diff --git a/plugins/catalog-node/src/extensions.ts b/plugins/catalog-node/src/extensions.ts index 560d9d4db1..80fbd7630f 100644 --- a/plugins/catalog-node/src/extensions.ts +++ b/plugins/catalog-node/src/extensions.ts @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { createServiceRef } from '@backstage/backend-plugin-api'; +import { createExtensionPoint } from '@backstage/backend-plugin-api'; import { EntityProvider } from './api'; import { CatalogProcessor } from './api/processor'; @@ -28,7 +28,7 @@ export interface CatalogProcessingExtensionPoint { /** * @alpha */ -export const catalogProcessingExtentionPoint = - createServiceRef({ +export const catalogProcessingExtensionPoint = + createExtensionPoint({ id: 'catalog.processing', }); diff --git a/plugins/catalog-node/src/index.ts b/plugins/catalog-node/src/index.ts index fc7a1b1b67..02ae325a9a 100644 --- a/plugins/catalog-node/src/index.ts +++ b/plugins/catalog-node/src/index.ts @@ -21,6 +21,6 @@ */ export type { CatalogProcessingExtensionPoint } from './extensions'; -export { catalogProcessingExtentionPoint } from './extensions'; +export { catalogProcessingExtensionPoint } from './extensions'; export * from './api'; export * from './processing'; diff --git a/plugins/catalog-react/CHANGELOG.md b/plugins/catalog-react/CHANGELOG.md index 27af75bfbf..964e1e0017 100644 --- a/plugins/catalog-react/CHANGELOG.md +++ b/plugins/catalog-react/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-catalog-react +## 1.1.3 + +### Patch Changes + +- 44e691a7f9: Modify description column to not use auto width. +- Updated dependencies + - @backstage/integration@1.3.0 + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-common@1.0.5 + - @backstage/plugin-permission-react@0.4.4 + ## 1.1.3-next.2 ### Patch Changes diff --git a/plugins/catalog-react/api-report.md b/plugins/catalog-react/api-report.md index 5232c49150..6e0ba235b7 100644 --- a/plugins/catalog-react/api-report.md +++ b/plugins/catalog-react/api-report.md @@ -109,20 +109,13 @@ export const columnFactories: Readonly<{ createEntityRefColumn(options: { defaultKind?: string; }): TableColumn; - createEntityRelationColumn({ - title, - relation, - defaultKind, - filter: entityFilter, - }: { + createEntityRelationColumn(options: { title: string; relation: string; - defaultKind?: string | undefined; - filter?: - | { - kind: string; - } - | undefined; + defaultKind?: string; + filter?: { + kind: string; + }; }): TableColumn; createOwnerColumn(): TableColumn; createDomainColumn(): TableColumn; @@ -324,12 +317,7 @@ export const EntityTable: { createEntityRefColumn(options: { defaultKind?: string | undefined; }): TableColumn; - createEntityRelationColumn({ - title, - relation, - defaultKind, - filter: entityFilter, - }: { + createEntityRelationColumn(options: { title: string; relation: string; defaultKind?: string | undefined; diff --git a/plugins/catalog-react/package.json b/plugins/catalog-react/package.json index f778924647..08987df622 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.1.3-next.2", + "version": "1.1.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -36,13 +36,13 @@ "dependencies": { "@backstage/catalog-client": "^1.0.4", "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", "@backstage/errors": "^1.1.0", - "@backstage/integration": "^1.3.0-next.1", - "@backstage/plugin-catalog-common": "^1.0.5-next.0", + "@backstage/integration": "^1.3.0", + "@backstage/plugin-catalog-common": "^1.0.5", "@backstage/plugin-permission-common": "^0.6.3", - "@backstage/plugin-permission-react": "^0.4.4-next.0", + "@backstage/plugin-permission-react": "^0.4.4", "@backstage/theme": "^0.2.16", "@backstage/types": "^1.0.0", "@backstage/version-bridge": "^1.0.1", @@ -63,11 +63,11 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/plugin-catalog-common": "^1.0.5-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/core-app-api": "^1.0.5", + "@backstage/plugin-catalog-common": "^1.0.5", "@backstage/plugin-scaffolder-common": "^1.1.2", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/react-hooks": "^8.0.0", diff --git a/plugins/catalog-react/src/components/EntityTable/columns.tsx b/plugins/catalog-react/src/components/EntityTable/columns.tsx index 72b6931e94..292235c78c 100644 --- a/plugins/catalog-react/src/components/EntityTable/columns.tsx +++ b/plugins/catalog-react/src/components/EntityTable/columns.tsx @@ -70,17 +70,14 @@ export const columnFactories = Object.freeze({ ), }; }, - createEntityRelationColumn({ - title, - relation, - defaultKind, - filter: entityFilter, - }: { + createEntityRelationColumn(options: { title: string; relation: string; defaultKind?: string; filter?: { kind: string }; }): TableColumn { + const { title, relation, defaultKind, filter: entityFilter } = options; + function getRelations(entity: T): CompoundEntityRef[] { return getEntityRelations(entity, relation, entityFilter); } diff --git a/plugins/catalog/CHANGELOG.md b/plugins/catalog/CHANGELOG.md index efcc843095..578b51c61b 100644 --- a/plugins/catalog/CHANGELOG.md +++ b/plugins/catalog/CHANGELOG.md @@ -1,5 +1,33 @@ # @backstage/plugin-catalog +## 1.5.0 + +### Minor Changes + +- 80da5162c7: Plugin catalog has been modified to use an experimental feature where you can customize the title of the create button. + + You can modify it by doing: + + ```typescript jsx + import { catalogPlugin } from '@backstage/plugin-catalog'; + + catalogPlugin.__experimentalReconfigure({ + createButtonTitle: 'New', + }); + ``` + +- fe94398418: Allow changing the subtitle of the `CatalogTable` component + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + - @backstage/plugin-catalog-common@1.0.5 + - @backstage/integration-react@1.1.3 + - @backstage/plugin-search-react@1.0.1 + ## 1.5.0-next.2 ### Patch Changes diff --git a/plugins/catalog/package.json b/plugins/catalog/package.json index 78365d305f..ba20f0d285 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.5.0-next.2", + "version": "1.5.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -36,14 +36,14 @@ "dependencies": { "@backstage/catalog-client": "^1.0.4", "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", "@backstage/errors": "^1.1.0", - "@backstage/integration-react": "^1.1.3-next.1", - "@backstage/plugin-catalog-common": "^1.0.5-next.0", - "@backstage/plugin-catalog-react": "^1.1.3-next.2", + "@backstage/integration-react": "^1.1.3", + "@backstage/plugin-catalog-common": "^1.0.5", + "@backstage/plugin-catalog-react": "^1.1.3", "@backstage/plugin-search-common": "^1.0.0", - "@backstage/plugin-search-react": "^1.0.1-next.1", + "@backstage/plugin-search-react": "^1.0.1", "@backstage/theme": "^0.2.16", "@backstage/types": "^1.0.0", "@material-ui/core": "^4.12.2", @@ -61,11 +61,11 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/plugin-permission-react": "^0.4.4-next.0", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/core-app-api": "^1.0.5", + "@backstage/dev-utils": "^1.0.5", + "@backstage/plugin-permission-react": "^0.4.4", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/cicd-statistics-module-gitlab/CHANGELOG.md b/plugins/cicd-statistics-module-gitlab/CHANGELOG.md index 24fa1a0e2e..163776416b 100644 --- a/plugins/cicd-statistics-module-gitlab/CHANGELOG.md +++ b/plugins/cicd-statistics-module-gitlab/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-cicd-statistics-module-gitlab +## 0.1.4 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-cicd-statistics@0.1.10 + ## 0.1.4-next.0 ### Patch Changes diff --git a/plugins/cicd-statistics-module-gitlab/package.json b/plugins/cicd-statistics-module-gitlab/package.json index 2d3db01baf..b034b48177 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.4-next.0", + "version": "0.1.4", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -29,16 +29,16 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@backstage/plugin-cicd-statistics": "^0.1.10-next.0", + "@backstage/plugin-cicd-statistics": "^0.1.10", "@gitbeaker/browser": "^35.6.0", "@gitbeaker/core": "^35.6.0", "luxon": "^3.0.0", "p-limit": "^4.0.0", - "@backstage/core-plugin-api": "^1.0.5-next.0", + "@backstage/core-plugin-api": "^1.0.5", "@backstage/catalog-model": "^1.1.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.0" + "@backstage/cli": "^0.18.1" }, "files": [ "dist" diff --git a/plugins/cicd-statistics/CHANGELOG.md b/plugins/cicd-statistics/CHANGELOG.md index ac12967919..268e32b825 100644 --- a/plugins/cicd-statistics/CHANGELOG.md +++ b/plugins/cicd-statistics/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-cicd-statistics +## 0.1.10 + +### Patch Changes + +- 29f782eb37: Updated dependency `@types/luxon` to `^3.0.0`. +- Updated dependencies + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + ## 0.1.10-next.0 ### Patch Changes diff --git a/plugins/cicd-statistics/package.json b/plugins/cicd-statistics/package.json index 40dd26fcd8..10e5e5ea38 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.10-next.0", + "version": "0.1.10", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -38,8 +38,8 @@ }, "dependencies": { "@backstage/catalog-model": "^1.1.0", - "@backstage/core-plugin-api": "^1.0.5-next.0", - "@backstage/plugin-catalog-react": "^1.1.3-next.0", + "@backstage/core-plugin-api": "^1.0.5", + "@backstage/plugin-catalog-react": "^1.1.3", "@date-io/luxon": "^1.3.13", "@material-ui/core": "^4.9.13", "@material-ui/icons": "^4.11.2", diff --git a/plugins/circleci/CHANGELOG.md b/plugins/circleci/CHANGELOG.md index 32b13f71d9..b76be5b5b2 100644 --- a/plugins/circleci/CHANGELOG.md +++ b/plugins/circleci/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-circleci +## 0.3.8 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + ## 0.3.8-next.1 ### Patch Changes diff --git a/plugins/circleci/api-report.md b/plugins/circleci/api-report.md index e8640ec78b..034cfae3ee 100644 --- a/plugins/circleci/api-report.md +++ b/plugins/circleci/api-report.md @@ -44,10 +44,7 @@ export class CircleCIApi { ): Promise; // (undocumented) getBuilds( - { - limit, - offset, - }: { + pagination: { limit: number; offset: number; }, diff --git a/plugins/circleci/package.json b/plugins/circleci/package.json index 29c8826022..d26df28bce 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.8-next.1", + "version": "0.3.8", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -36,9 +36,9 @@ }, "dependencies": { "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", - "@backstage/plugin-catalog-react": "^1.1.3-next.2", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", + "@backstage/plugin-catalog-react": "^1.1.3", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -55,10 +55,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/core-app-api": "^1.0.5", + "@backstage/dev-utils": "^1.0.5", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/circleci/src/api/CircleCIApi.ts b/plugins/circleci/src/api/CircleCIApi.ts index 78b8b378d6..931feec4d5 100644 --- a/plugins/circleci/src/api/CircleCIApi.ts +++ b/plugins/circleci/src/api/CircleCIApi.ts @@ -62,9 +62,10 @@ export class CircleCIApi { } async getBuilds( - { limit = 10, offset = 0 }: { limit: number; offset: number }, + pagination: { limit: number; offset: number }, options: Partial, ) { + const { limit = 10, offset = 0 } = pagination; return getBuildSummaries('', { options: { limit, diff --git a/plugins/cloudbuild/CHANGELOG.md b/plugins/cloudbuild/CHANGELOG.md index d9afe72a02..18ebdec1df 100644 --- a/plugins/cloudbuild/CHANGELOG.md +++ b/plugins/cloudbuild/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-cloudbuild +## 0.3.8 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + ## 0.3.8-next.1 ### Patch Changes diff --git a/plugins/cloudbuild/api-report.md b/plugins/cloudbuild/api-report.md index ecc6d7b460..34b50b54d8 100644 --- a/plugins/cloudbuild/api-report.md +++ b/plugins/cloudbuild/api-report.md @@ -60,31 +60,20 @@ export interface BUILD { // @public (undocumented) export const CLOUDBUILD_ANNOTATION = 'google.com/cloudbuild-project-slug'; -// Warning: (ae-missing-release-tag) "CloudbuildApi" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export type CloudbuildApi = { - listWorkflowRuns: (request: { + listWorkflowRuns: (options: { projectId: string; }) => Promise; - getWorkflow: ({ - projectId, - id, - }: { + getWorkflow: (options: { projectId: string; id: string; }) => Promise; - getWorkflowRun: ({ - projectId, - id, - }: { + getWorkflowRun: (options: { projectId: string; id: string; }) => Promise; - reRunWorkflow: ({ - projectId, - runId, - }: { + reRunWorkflow: (options: { projectId: string; runId: string; }) => Promise; @@ -95,43 +84,27 @@ export type CloudbuildApi = { // @public (undocumented) export const cloudbuildApiRef: ApiRef; -// Warning: (ae-missing-release-tag) "CloudbuildClient" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export class CloudbuildClient implements CloudbuildApi { constructor(googleAuthApi: OAuthApi); // (undocumented) getToken(): Promise; // (undocumented) - getWorkflow({ - projectId, - id, - }: { + getWorkflow(options: { projectId: string; id: string; }): Promise; // (undocumented) - getWorkflowRun({ - projectId, - id, - }: { + getWorkflowRun(options: { projectId: string; id: string; }): Promise; // (undocumented) - listWorkflowRuns({ - projectId, - }: { + listWorkflowRuns(options: { projectId: string; }): Promise; // (undocumented) - reRunWorkflow({ - projectId, - runId, - }: { - projectId: string; - runId: string; - }): Promise; + reRunWorkflow(options: { projectId: string; runId: string }): Promise; } // Warning: (ae-missing-release-tag) "cloudbuildPlugin" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) @@ -155,18 +128,14 @@ export const EntityCloudbuildContent: () => JSX.Element; // Warning: (ae-missing-release-tag) "EntityLatestCloudbuildRunCard" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) -export const EntityLatestCloudbuildRunCard: ({ - branch, -}: { +export const EntityLatestCloudbuildRunCard: (props: { branch: string; }) => JSX.Element; // Warning: (ae-missing-release-tag) "EntityLatestCloudbuildsForBranchCard" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) -export const EntityLatestCloudbuildsForBranchCard: ({ - branch, -}: { +export const EntityLatestCloudbuildsForBranchCard: (props: { branch: string; }) => JSX.Element; @@ -190,18 +159,12 @@ export { isCloudbuildAvailable as isPluginApplicableToEntity }; // Warning: (ae-missing-release-tag) "LatestWorkflowRunCard" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) -export const LatestWorkflowRunCard: ({ - branch, -}: { - branch: string; -}) => JSX.Element; +export const LatestWorkflowRunCard: (props: { branch: string }) => JSX.Element; // Warning: (ae-missing-release-tag) "LatestWorkflowsForBranchCard" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) -export const LatestWorkflowsForBranchCard: ({ - branch, -}: { +export const LatestWorkflowsForBranchCard: (props: { branch: string; }) => JSX.Element; diff --git a/plugins/cloudbuild/package.json b/plugins/cloudbuild/package.json index 76d4a7e4a3..570cebfbb2 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.8-next.1", + "version": "0.3.8", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -35,9 +35,9 @@ }, "dependencies": { "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", - "@backstage/plugin-catalog-react": "^1.1.3-next.2", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", + "@backstage/plugin-catalog-react": "^1.1.3", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -52,10 +52,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/core-app-api": "^1.0.5", + "@backstage/dev-utils": "^1.0.5", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/cloudbuild/src/api/CloudbuildApi.ts b/plugins/cloudbuild/src/api/CloudbuildApi.ts index 92ea8511fe..eeaf269cde 100644 --- a/plugins/cloudbuild/src/api/CloudbuildApi.ts +++ b/plugins/cloudbuild/src/api/CloudbuildApi.ts @@ -24,28 +24,20 @@ export const cloudbuildApiRef = createApiRef({ id: 'plugin.cloudbuild.service', }); +/** @public */ export type CloudbuildApi = { - listWorkflowRuns: (request: { + listWorkflowRuns: (options: { projectId: string; }) => Promise; - getWorkflow: ({ - projectId, - id, - }: { + getWorkflow: (options: { projectId: string; id: string; }) => Promise; - getWorkflowRun: ({ - projectId, - id, - }: { + getWorkflowRun: (options: { projectId: string; id: string; }) => Promise; - reRunWorkflow: ({ - projectId, - runId, - }: { + reRunWorkflow: (options: { projectId: string; runId: string; }) => Promise; diff --git a/plugins/cloudbuild/src/api/CloudbuildClient.ts b/plugins/cloudbuild/src/api/CloudbuildClient.ts index cbd47e84e9..035b20f63d 100644 --- a/plugins/cloudbuild/src/api/CloudbuildClient.ts +++ b/plugins/cloudbuild/src/api/CloudbuildClient.ts @@ -21,20 +21,18 @@ import { } from '../api/types'; import { OAuthApi } from '@backstage/core-plugin-api'; +/** @public */ export class CloudbuildClient implements CloudbuildApi { constructor(private readonly googleAuthApi: OAuthApi) {} - async reRunWorkflow({ - projectId, - runId, - }: { + async reRunWorkflow(options: { projectId: string; runId: string; }): Promise { await fetch( `https://cloudbuild.googleapis.com/v1/projects/${encodeURIComponent( - projectId, - )}/builds/${encodeURIComponent(runId)}:retry`, + options.projectId, + )}/builds/${encodeURIComponent(options.runId)}:retry`, { headers: new Headers({ Accept: '*/*', @@ -43,14 +41,13 @@ export class CloudbuildClient implements CloudbuildApi { }, ); } - async listWorkflowRuns({ - projectId, - }: { + + async listWorkflowRuns(options: { projectId: string; }): Promise { const workflowRuns = await fetch( `https://cloudbuild.googleapis.com/v1/projects/${encodeURIComponent( - projectId, + options.projectId, )}/builds`, { headers: new Headers({ @@ -65,17 +62,15 @@ export class CloudbuildClient implements CloudbuildApi { return builds; } - async getWorkflow({ - projectId, - id, - }: { + + async getWorkflow(options: { projectId: string; id: string; }): Promise { const workflow = await fetch( `https://cloudbuild.googleapis.com/v1/projects/${encodeURIComponent( - projectId, - )}/builds/${encodeURIComponent(id)}`, + options.projectId, + )}/builds/${encodeURIComponent(options.id)}`, { headers: new Headers({ Accept: '*/*', @@ -88,17 +83,15 @@ export class CloudbuildClient implements CloudbuildApi { return build; } - async getWorkflowRun({ - projectId, - id, - }: { + + async getWorkflowRun(options: { projectId: string; id: string; }): Promise { const workflow = await fetch( `https://cloudbuild.googleapis.com/v1/projects/${encodeURIComponent( - projectId, - )}/builds/${encodeURIComponent(id)}`, + options.projectId, + )}/builds/${encodeURIComponent(options.id)}`, { headers: new Headers({ Accept: '*/*', diff --git a/plugins/cloudbuild/src/components/Cards/Cards.tsx b/plugins/cloudbuild/src/components/Cards/Cards.tsx index 82e0eb1b88..75c9ee432b 100644 --- a/plugins/cloudbuild/src/components/Cards/Cards.tsx +++ b/plugins/cloudbuild/src/components/Cards/Cards.tsx @@ -72,11 +72,8 @@ const WidgetContent = ({ ); }; -export const LatestWorkflowRunCard = ({ - branch = 'master', -}: { - branch: string; -}) => { +export const LatestWorkflowRunCard = (props: { branch: string }) => { + const { branch = 'master' } = props; const { entity } = useEntity(); const errorApi = useApi(errorApiRef); const projectId = entity?.metadata.annotations?.[CLOUDBUILD_ANNOTATION] || ''; @@ -103,11 +100,8 @@ export const LatestWorkflowRunCard = ({ ); }; -export const LatestWorkflowsForBranchCard = ({ - branch = 'master', -}: { - branch: string; -}) => { +export const LatestWorkflowsForBranchCard = (props: { branch: string }) => { + const { branch = 'master' } = props; const { entity } = useEntity(); return ( diff --git a/plugins/cloudbuild/src/components/WorkflowRunDetails/WorkflowRunDetails.tsx b/plugins/cloudbuild/src/components/WorkflowRunDetails/WorkflowRunDetails.tsx index a6a63770ca..0e532178e1 100644 --- a/plugins/cloudbuild/src/components/WorkflowRunDetails/WorkflowRunDetails.tsx +++ b/plugins/cloudbuild/src/components/WorkflowRunDetails/WorkflowRunDetails.tsx @@ -61,8 +61,8 @@ const useStyles = makeStyles(theme => ({ }, })); -export const WorkflowRunDetails = ({ entity }: { entity: Entity }) => { - const { value: projectName, loading, error } = useProjectName(entity); +export const WorkflowRunDetails = (props: { entity: Entity }) => { + const { value: projectName, loading, error } = useProjectName(props.entity); const [projectId] = (projectName ?? '/').split('/'); const details = useWorkflowRunsDetails(projectId); diff --git a/plugins/cloudbuild/src/components/WorkflowRunStatus/WorkflowRunStatus.tsx b/plugins/cloudbuild/src/components/WorkflowRunStatus/WorkflowRunStatus.tsx index 3f43d84ce4..fce8566dc0 100644 --- a/plugins/cloudbuild/src/components/WorkflowRunStatus/WorkflowRunStatus.tsx +++ b/plugins/cloudbuild/src/components/WorkflowRunStatus/WorkflowRunStatus.tsx @@ -23,11 +23,8 @@ import { StatusError, } from '@backstage/core-components'; -export const WorkflowRunStatus = ({ - status, -}: { - status: string | undefined; -}) => { +export const WorkflowRunStatus = (props: { status: string | undefined }) => { + const { status } = props; if (status === undefined) return null; switch (status.toLocaleLowerCase('en-US')) { case 'queued': diff --git a/plugins/cloudbuild/src/components/WorkflowRunsTable/WorkflowRunsTable.tsx b/plugins/cloudbuild/src/components/WorkflowRunsTable/WorkflowRunsTable.tsx index d79d481cd4..a8e2a12ea8 100644 --- a/plugins/cloudbuild/src/components/WorkflowRunsTable/WorkflowRunsTable.tsx +++ b/plugins/cloudbuild/src/components/WorkflowRunsTable/WorkflowRunsTable.tsx @@ -164,8 +164,8 @@ export const WorkflowRunsTableView = ({ ); }; -export const WorkflowRunsTable = ({ entity }: { entity: Entity }) => { - const { value: projectName, loading } = useProjectName(entity); +export const WorkflowRunsTable = (props: { entity: Entity }) => { + const { value: projectName, loading } = useProjectName(props.entity); const [projectId] = (projectName ?? '/').split('/'); const [tableProps, { retry, setPage, setPageSize }] = useWorkflowRuns({ diff --git a/plugins/cloudbuild/src/components/useWorkflowRuns.ts b/plugins/cloudbuild/src/components/useWorkflowRuns.ts index f2e107ea3f..424f08e38d 100644 --- a/plugins/cloudbuild/src/components/useWorkflowRuns.ts +++ b/plugins/cloudbuild/src/components/useWorkflowRuns.ts @@ -33,7 +33,8 @@ export type WorkflowRun = { rerun: () => void; }; -export function useWorkflowRuns({ projectId }: { projectId: string }) { +export function useWorkflowRuns(options: { projectId: string }) { + const { projectId } = options; const api = useApi(cloudbuildApiRef); const errorApi = useApi(errorApiRef); diff --git a/plugins/code-climate/CHANGELOG.md b/plugins/code-climate/CHANGELOG.md index b679f10e8c..6202bf67a3 100644 --- a/plugins/code-climate/CHANGELOG.md +++ b/plugins/code-climate/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-code-climate +## 0.1.8 + +### Patch Changes + +- 29f782eb37: Updated dependency `@types/luxon` to `^3.0.0`. +- 831a8fee86: Send Authorization headers in fetch requests using FetchApi in Code Climate plugin to fix unauthorized requests to Backstage backends with authentication enabled. +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + ## 0.1.8-next.1 ### Patch Changes diff --git a/plugins/code-climate/api-report.md b/plugins/code-climate/api-report.md index b0cc3e1450..5ef53cf543 100644 --- a/plugins/code-climate/api-report.md +++ b/plugins/code-climate/api-report.md @@ -8,6 +8,7 @@ import { ApiRef } from '@backstage/core-plugin-api'; import { BackstagePlugin } from '@backstage/core-plugin-api'; import { DiscoveryApi } from '@backstage/core-plugin-api'; +import { FetchApi } from '@backstage/core-plugin-api'; import { RouteRef } from '@backstage/core-plugin-api'; // Warning: (ae-missing-release-tag) "CodeClimateApi" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) @@ -74,7 +75,8 @@ export const mockData: CodeClimateData; // // @public (undocumented) export class ProductionCodeClimateApi implements CodeClimateApi { - constructor(discoveryApi: DiscoveryApi); + // Warning: (ae-forgotten-export) The symbol "Options" needs to be exported by the entry point index.d.ts + constructor(options: Options); // (undocumented) fetchAllData(options: { apiUrl: string; diff --git a/plugins/code-climate/package.json b/plugins/code-climate/package.json index a8821da11f..669f21cb88 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.8-next.1", + "version": "0.1.8", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -24,9 +24,9 @@ }, "dependencies": { "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", - "@backstage/plugin-catalog-react": "^1.1.3-next.2", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", + "@backstage/plugin-catalog-react": "^1.1.3", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -40,9 +40,9 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/dev-utils": "^1.0.5", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/code-climate/src/api/production-api.ts b/plugins/code-climate/src/api/production-api.ts index 665d7e9f63..81ba6b9ad6 100644 --- a/plugins/code-climate/src/api/production-api.ts +++ b/plugins/code-climate/src/api/production-api.ts @@ -22,7 +22,7 @@ import { CodeClimateIssuesData, } from './code-climate-data'; import { CodeClimateApi } from './code-climate-api'; -import { DiscoveryApi } from '@backstage/core-plugin-api'; +import { DiscoveryApi, FetchApi } from '@backstage/core-plugin-api'; import { Duration } from 'luxon'; import humanizeDuration from 'humanize-duration'; @@ -34,8 +34,19 @@ const codeSmellsQuery = `${basicIssuesOptions}&${categoriesFilter}=Complexity`; const duplicationQuery = `${basicIssuesOptions}&${categoriesFilter}=Duplication`; const otherIssuesQuery = `${basicIssuesOptions}&${categoriesFilter}=Bug%20Risk`; +type Options = { + discoveryApi: DiscoveryApi; + fetchApi: FetchApi; +}; + export class ProductionCodeClimateApi implements CodeClimateApi { - constructor(private readonly discoveryApi: DiscoveryApi) {} + private readonly discoveryApi: DiscoveryApi; + private readonly fetchApi: FetchApi; + + constructor(options: Options) { + this.discoveryApi = options.discoveryApi; + this.fetchApi = options.fetchApi; + } async fetchAllData(options: { apiUrl: string; @@ -44,7 +55,6 @@ export class ProductionCodeClimateApi implements CodeClimateApi { testReportID: string; }): Promise { const { apiUrl, repoID, snapshotID, testReportID } = options; - const [ maintainabilityResponse, testCoverageResponse, @@ -52,15 +62,19 @@ export class ProductionCodeClimateApi implements CodeClimateApi { duplicationResponse, otherIssuesResponse, ] = await Promise.all([ - await fetch(`${apiUrl}/repos/${repoID}/snapshots/${snapshotID}`), - await fetch(`${apiUrl}/repos/${repoID}/test_reports/${testReportID}`), - await fetch( + await this.fetchApi.fetch( + `${apiUrl}/repos/${repoID}/snapshots/${snapshotID}`, + ), + await this.fetchApi.fetch( + `${apiUrl}/repos/${repoID}/test_reports/${testReportID}`, + ), + await this.fetchApi.fetch( `${apiUrl}/repos/${repoID}/snapshots/${snapshotID}/issues?${codeSmellsQuery}`, ), - await fetch( + await this.fetchApi.fetch( `${apiUrl}/repos/${repoID}/snapshots/${snapshotID}/issues?${duplicationQuery}`, ), - await fetch( + await this.fetchApi.fetch( `${apiUrl}/repos/${repoID}/snapshots/${snapshotID}/issues?${otherIssuesQuery}`, ), ]); @@ -109,7 +123,7 @@ export class ProductionCodeClimateApi implements CodeClimateApi { 'proxy', )}/codeclimate/api`; - const repoResponse = await fetch(`${apiUrl}/repos/${repoID}`); + const repoResponse = await this.fetchApi.fetch(`${apiUrl}/repos/${repoID}`); if (!repoResponse.ok) { throw new Error('Failed fetching Code Climate info'); diff --git a/plugins/code-climate/src/plugin.ts b/plugins/code-climate/src/plugin.ts index dcf86f1e19..54502b6355 100644 --- a/plugins/code-climate/src/plugin.ts +++ b/plugins/code-climate/src/plugin.ts @@ -20,7 +20,7 @@ import { createPlugin, createRouteRef, discoveryApiRef, - identityApiRef, + fetchApiRef, createComponentExtension, } from '@backstage/core-plugin-api'; @@ -37,9 +37,10 @@ export const codeClimatePlugin = createPlugin({ api: codeClimateApiRef, deps: { discoveryApi: discoveryApiRef, - identityApi: identityApiRef, + fetchApi: fetchApiRef, }, - factory: ({ discoveryApi }) => new ProductionCodeClimateApi(discoveryApi), + factory: ({ discoveryApi, fetchApi }) => + new ProductionCodeClimateApi({ discoveryApi, fetchApi }), }), ], routes: { diff --git a/plugins/code-coverage-backend/CHANGELOG.md b/plugins/code-coverage-backend/CHANGELOG.md index 0a7653cb81..0d07616343 100644 --- a/plugins/code-coverage-backend/CHANGELOG.md +++ b/plugins/code-coverage-backend/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-code-coverage-backend +## 0.2.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/integration@1.3.0 + ## 0.2.1-next.0 ### Patch Changes diff --git a/plugins/code-coverage-backend/package.json b/plugins/code-coverage-backend/package.json index 29a7c84512..34c75f45ed 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.1-next.0", + "version": "0.2.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -23,12 +23,12 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.15.0-next.0", + "@backstage/backend-common": "^0.15.0", "@backstage/catalog-client": "^1.0.4", "@backstage/catalog-model": "^1.1.0", "@backstage/config": "^1.0.1", "@backstage/errors": "^1.1.0", - "@backstage/integration": "^1.3.0-next.0", + "@backstage/integration": "^1.3.0", "@types/express": "^4.17.6", "express": "^4.17.1", "express-promise-router": "^4.1.0", @@ -39,7 +39,7 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.0", + "@backstage/cli": "^0.18.1", "@types/express-xml-bodyparser": "^0.3.2", "@types/supertest": "^2.0.8", "msw": "^0.44.0", diff --git a/plugins/code-coverage-backend/src/service/CodeCoverageDatabase.test.ts b/plugins/code-coverage-backend/src/service/CodeCoverageDatabase.test.ts index 635debca02..ed913e2c79 100644 --- a/plugins/code-coverage-backend/src/service/CodeCoverageDatabase.test.ts +++ b/plugins/code-coverage-backend/src/service/CodeCoverageDatabase.test.ts @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import { Knex as KnexType } from 'knex'; import { DatabaseManager } from '@backstage/backend-common'; import { stringifyEntityRef } from '@backstage/catalog-model'; import { ConfigReader } from '@backstage/config'; @@ -95,12 +96,24 @@ const coverage: Array = [ ], }, ]; - +function createDatabaseManager( + client: KnexType, + skipMigrations: boolean = false, +) { + return { + getClient: async () => client, + migrations: { + skip: skipMigrations, + }, + }; +} let database: CodeCoverageStore; describe('CodeCoverageDatabase', () => { beforeAll(async () => { const client = await db.getClient(); - database = await CodeCoverageDatabase.create(client); + const databaseManager = createDatabaseManager(client); + database = await CodeCoverageDatabase.create(databaseManager); + await database.insertCodeCoverage(coverage[0]); await database.insertCodeCoverage(coverage[1]); }); diff --git a/plugins/code-coverage-backend/src/service/CodeCoverageDatabase.ts b/plugins/code-coverage-backend/src/service/CodeCoverageDatabase.ts index 9235f3a8fd..4cbcd76fe0 100644 --- a/plugins/code-coverage-backend/src/service/CodeCoverageDatabase.ts +++ b/plugins/code-coverage-backend/src/service/CodeCoverageDatabase.ts @@ -13,7 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { resolvePackagePath } from '@backstage/backend-common'; +import { + PluginDatabaseManager, + resolvePackagePath, +} from '@backstage/backend-common'; import { NotFoundError } from '@backstage/errors'; import { parseEntityRef, stringifyEntityRef } from '@backstage/catalog-model'; import { Knex } from 'knex'; @@ -41,10 +44,17 @@ const migrationsDir = resolvePackagePath( ); export class CodeCoverageDatabase implements CodeCoverageStore { - static async create(knex: Knex): Promise { - await knex.migrate.latest({ - directory: migrationsDir, - }); + static async create( + database: PluginDatabaseManager, + ): Promise { + const knex = await database.getClient(); + + if (!database.migrations?.skip) { + await knex.migrate.latest({ + directory: migrationsDir, + }); + } + return new CodeCoverageDatabase(knex); } diff --git a/plugins/code-coverage-backend/src/service/router.ts b/plugins/code-coverage-backend/src/service/router.ts index 37279b549f..b87b21bffd 100644 --- a/plugins/code-coverage-backend/src/service/router.ts +++ b/plugins/code-coverage-backend/src/service/router.ts @@ -57,9 +57,7 @@ export const makeRouter = async ( ): Promise => { const { config, logger, discovery, database, urlReader } = options; - const codeCoverageDatabase = await CodeCoverageDatabase.create( - await database.getClient(), - ); + const codeCoverageDatabase = await CodeCoverageDatabase.create(database); const codecovUrl = await discovery.getExternalBaseUrl('code-coverage'); const catalogApi: CatalogApi = new CatalogClient({ discoveryApi: discovery }); const scm = ScmIntegrations.fromConfig(config); diff --git a/plugins/code-coverage/CHANGELOG.md b/plugins/code-coverage/CHANGELOG.md index aedf29b796..9e4282b28a 100644 --- a/plugins/code-coverage/CHANGELOG.md +++ b/plugins/code-coverage/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-code-coverage +## 0.2.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + ## 0.2.1-next.1 ### Patch Changes diff --git a/plugins/code-coverage/package.json b/plugins/code-coverage/package.json index 15eab12436..b49e4b8b3b 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.1-next.1", + "version": "0.2.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -26,10 +26,10 @@ "dependencies": { "@backstage/catalog-model": "^1.1.0", "@backstage/config": "^1.0.1", - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", "@backstage/errors": "^1.1.0", - "@backstage/plugin-catalog-react": "^1.1.3-next.2", + "@backstage/plugin-catalog-react": "^1.1.3", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -46,10 +46,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/core-app-api": "^1.0.5", + "@backstage/dev-utils": "^1.0.5", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/codescene/CHANGELOG.md b/plugins/codescene/CHANGELOG.md index d4d4d899ca..f753f291f7 100644 --- a/plugins/codescene/CHANGELOG.md +++ b/plugins/codescene/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-codescene +## 0.1.3 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + ## 0.1.3-next.1 ### Patch Changes diff --git a/plugins/codescene/package.json b/plugins/codescene/package.json index a90ad0f31d..e99c0132e3 100644 --- a/plugins/codescene/package.json +++ b/plugins/codescene/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-codescene", - "version": "0.1.3-next.1", + "version": "0.1.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -23,8 +23,8 @@ }, "dependencies": { "@backstage/config": "^1.0.1", - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", "@backstage/errors": "^1.1.0", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.9.10", @@ -38,10 +38,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/core-app-api": "^1.0.5", + "@backstage/dev-utils": "^1.0.5", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/config-schema/CHANGELOG.md b/plugins/config-schema/CHANGELOG.md index b3d61041f5..f69905cce2 100644 --- a/plugins/config-schema/CHANGELOG.md +++ b/plugins/config-schema/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-config-schema +## 0.1.31 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + ## 0.1.31-next.1 ### Patch Changes diff --git a/plugins/config-schema/package.json b/plugins/config-schema/package.json index 560b7e5b36..957fc57b35 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.31-next.1", + "version": "0.1.31", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -25,8 +25,8 @@ }, "dependencies": { "@backstage/config": "^1.0.1", - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", "@backstage/errors": "^1.1.0", "@backstage/theme": "^0.2.16", "@backstage/types": "^1.0.0", @@ -41,10 +41,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/core-app-api": "^1.0.5", + "@backstage/dev-utils": "^1.0.5", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/cost-insights-common/CHANGELOG.md b/plugins/cost-insights-common/CHANGELOG.md index 41102c5229..52d167c17c 100644 --- a/plugins/cost-insights-common/CHANGELOG.md +++ b/plugins/cost-insights-common/CHANGELOG.md @@ -1,5 +1,11 @@ # @backstage/plugin-cost-insights-common +## 0.1.1 + +### Patch Changes + +- daf4b33e34: Add name property to Group + ## 0.1.1-next.0 ### Patch Changes diff --git a/plugins/cost-insights-common/package.json b/plugins/cost-insights-common/package.json index 8a0d597243..03d3b11ea8 100644 --- a/plugins/cost-insights-common/package.json +++ b/plugins/cost-insights-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-cost-insights-common", "description": "Common functionalities for the cost-insights plugin", - "version": "0.1.1-next.0", + "version": "0.1.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,7 +34,7 @@ }, "dependencies": {}, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1" + "@backstage/cli": "^0.18.1" }, "files": [ "dist" diff --git a/plugins/cost-insights/CHANGELOG.md b/plugins/cost-insights/CHANGELOG.md index 52e3730795..080f2e1f41 100644 --- a/plugins/cost-insights/CHANGELOG.md +++ b/plugins/cost-insights/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-cost-insights +## 0.11.30 + +### Patch Changes + +- b746eca638: Make `products` field optional in the config +- daf4b33e34: Add name property to Group +- 08562ebe11: Display minus sign in trends in `CostOverviewCard` +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-cost-insights-common@0.1.1 + ## 0.11.30-next.1 ### Patch Changes diff --git a/plugins/cost-insights/api-report.md b/plugins/cost-insights/api-report.md index 94cab949c7..2a4cecc4eb 100644 --- a/plugins/cost-insights/api-report.md +++ b/plugins/cost-insights/api-report.md @@ -320,7 +320,12 @@ export const CostGrowthIndicator: ({ // @public (undocumented) export type CostGrowthIndicatorProps = TypographyProps & { change: ChangeStatistic; - formatter?: (change: ChangeStatistic) => Maybe; + formatter?: ( + change: ChangeStatistic, + options?: { + absolute: boolean; + }, + ) => Maybe; }; // Warning: (ae-missing-release-tag) "CostGrowthProps" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) diff --git a/plugins/cost-insights/package.json b/plugins/cost-insights/package.json index 05c736a234..d520945f8f 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.11.30-next.1", + "version": "0.11.30", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -36,9 +36,9 @@ "dependencies": { "@backstage/catalog-model": "^1.1.0", "@backstage/config": "^1.0.1", - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", - "@backstage/plugin-cost-insights-common": "^0.1.1-next.0", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", + "@backstage/plugin-cost-insights-common": "^0.1.1", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -61,10 +61,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/core-app-api": "^1.0.5", + "@backstage/dev-utils": "^1.0.5", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/cost-insights/src/components/CostGrowth/CostGrowthIndicator.tsx b/plugins/cost-insights/src/components/CostGrowth/CostGrowthIndicator.tsx index 592f57d389..e7746495d6 100644 --- a/plugins/cost-insights/src/components/CostGrowth/CostGrowthIndicator.tsx +++ b/plugins/cost-insights/src/components/CostGrowth/CostGrowthIndicator.tsx @@ -25,7 +25,10 @@ import { useCostGrowthStyles as useStyles } from '../../utils/styles'; export type CostGrowthIndicatorProps = TypographyProps & { change: ChangeStatistic; - formatter?: (change: ChangeStatistic) => Maybe; + formatter?: ( + change: ChangeStatistic, + options?: { absolute: boolean }, + ) => Maybe; }; export const CostGrowthIndicator = ({ @@ -44,7 +47,7 @@ export const CostGrowthIndicator = ({ return ( - {formatter ? formatter(change) : change.ratio} + {formatter ? formatter(change, { absolute: true }) : change.ratio} {growth === GrowthType.Excess && } {growth === GrowthType.Savings && } diff --git a/plugins/cost-insights/src/utils/formatters.test.ts b/plugins/cost-insights/src/utils/formatters.test.ts index 9fe17f277f..8bf0a6a9d7 100644 --- a/plugins/cost-insights/src/utils/formatters.test.ts +++ b/plugins/cost-insights/src/utils/formatters.test.ts @@ -73,6 +73,9 @@ describe.each` ${0.123123} | ${'12%'} ${1.123} | ${'112%'} ${10.123} | ${'>1000%'} + ${-0.123123} | ${'-12%'} + ${-1.123} | ${'-112%'} + ${-10.123} | ${'>-1000%'} `('formatPercent', ({ ratio, expected }) => { it(`correctly formats ${ratio} as ${expected}`, () => { expect(formatPercent(ratio)).toBe(expected); diff --git a/plugins/cost-insights/src/utils/formatters.ts b/plugins/cost-insights/src/utils/formatters.ts index 70782123cd..e9b19097a4 100644 --- a/plugins/cost-insights/src/utils/formatters.ts +++ b/plugins/cost-insights/src/utils/formatters.ts @@ -81,9 +81,17 @@ export function formatCurrency(amount: number, currency?: string): string { return currency ? `${numString} ${pluralize(currency, n)}` : numString; } -export function formatChange(change: ChangeStatistic): string { +export function formatChange( + change: ChangeStatistic, + options?: { absolute: boolean }, +): string { if (notEmpty(change.ratio)) { - return formatPercent(Math.abs(change.ratio)); + return formatPercent( + options?.absolute ? Math.abs(change.ratio) : change.ratio, + ); + } + if (options?.absolute) { + return '∞'; } return change.amount >= 0 ? '∞' : '-∞'; } @@ -95,7 +103,7 @@ export function formatPercent(n: number): string { } if (Math.abs(n) > 10) { - return `>1000%`; + return `>${n < 0 ? '-' : ''}1000%`; } return `${(n * 100).toFixed(0)}%`; diff --git a/plugins/dynatrace/CHANGELOG.md b/plugins/dynatrace/CHANGELOG.md index 33bf8dddd0..08a98daa2e 100644 --- a/plugins/dynatrace/CHANGELOG.md +++ b/plugins/dynatrace/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-dynatrace +## 0.1.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + ## 0.1.2-next.1 ### Patch Changes diff --git a/plugins/dynatrace/README.md b/plugins/dynatrace/README.md index 150c9768af..8ed72ebb5d 100644 --- a/plugins/dynatrace/README.md +++ b/plugins/dynatrace/README.md @@ -38,6 +38,8 @@ dynatrace: #### Catalog Configuration +##### View Recent Application Problems + To show information from Dynatrace for a catalog entity, add the following annotation to `catalog-info.yaml`: ```yaml @@ -51,6 +53,23 @@ metadata: The `DYNATRACE_ENTITY_ID` can be found in Dynatrace by browsing to the entity (a service, synthetic, frontend, workload, etc.). It will be located in the browser address bar in the `id` parameter and has the format `ENTITY_TYPE-ENTITY_ID`, where `ENTITY_TYPE` will be one of `SERVICE`, `SYNTHETIC_TEST`, or other, and `ENTITY_ID` will be a string of characters containing uppercase letters and numbers. +##### Viewing Recent Synthetics Results + +To show recent results from a Synthetic Monitor, add the following annotation to `catalog-info.yaml`: + +```yaml +# catalog-info.yaml +# [...] +metadata: + annotations: + dynatrace.com/synthetics-ids: SYNTHETIC_ID, SYNTHETIC_ID_2, ... +# [...] +``` + +The annotation can also contain a comma or space separated list of Synthetic Ids to surface details for multiple monitors! + +The `SYNTHETIC_ID` can be found in Dynatrace by browsing to the Synthetic monitor. It will be located in the browser address bar in the resource path - `https://example.dynatrace.com/ui/http-monitor/HTTP_CHECK-1234` for an Http check, or `https://example.dynatrace.com/ui/browser-monitor/SYNTHETIC_TEST-1234` for a browser clickpath. + ## Disclaimer This plugin is not officially supported by Dynatrace. diff --git a/plugins/dynatrace/package.json b/plugins/dynatrace/package.json index e2ac3f0aaa..75840783b1 100644 --- a/plugins/dynatrace/package.json +++ b/plugins/dynatrace/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-dynatrace", - "version": "0.1.2-next.1", + "version": "0.1.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -23,8 +23,8 @@ }, "dependencies": { "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.9.13", "@material-ui/icons": "^4.9.1", @@ -37,10 +37,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/core-app-api": "^1.0.5", + "@backstage/dev-utils": "^1.0.5", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/dynatrace/src/api/DynatraceApi.ts b/plugins/dynatrace/src/api/DynatraceApi.ts index 1865b20363..4cb5f105bf 100644 --- a/plugins/dynatrace/src/api/DynatraceApi.ts +++ b/plugins/dynatrace/src/api/DynatraceApi.ts @@ -35,8 +35,32 @@ export type DynatraceProblem = { affectedEntities: Array; }; +type SyntheticRequestResults = { + startTimestamp: number; +}; + +export interface DynatraceSyntheticResults { + monitorId: string; + locationsExecutionResults: [ + { + locationId: number; + executionId: string; + requestResults: Array; + }, + ]; +} + +export interface DynatraceSyntheticLocationInfo { + entityId: string; + name: string; + city: string; + browserType: string; +} + export interface DynatraceProblems { problems: Array; + totalCount: number; + pageSize: number; } export const dynatraceApiRef = createApiRef({ @@ -47,4 +71,10 @@ export type DynatraceApi = { getDynatraceProblems( dynatraceEntityId: string, ): Promise; + getDynatraceSyntheticFailures( + syntheticsId: string, + ): Promise; + getDynatraceSyntheticLocationInfo( + syntheticLocationId: string, + ): Promise; }; diff --git a/plugins/dynatrace/src/api/DynatraceClient.ts b/plugins/dynatrace/src/api/DynatraceClient.ts index 27476ddbac..a31253bcb5 100644 --- a/plugins/dynatrace/src/api/DynatraceClient.ts +++ b/plugins/dynatrace/src/api/DynatraceClient.ts @@ -13,7 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { DynatraceProblems, DynatraceApi } from './DynatraceApi'; +import { + DynatraceProblems, + DynatraceApi, + DynatraceSyntheticResults, + DynatraceSyntheticLocationInfo, +} from './DynatraceApi'; import { DiscoveryApi, FetchApi } from '@backstage/core-plugin-api'; export class DynatraceClient implements DynatraceApi { @@ -52,11 +57,37 @@ export class DynatraceClient implements DynatraceApi { ); } + async getDynatraceSyntheticFailures( + syntheticsId: string, + ): Promise { + if (!syntheticsId) { + throw new Error('Dynatrace syntheticId is required'); + } + + return this.callApi( + `synthetic/execution/${encodeURIComponent(syntheticsId)}/FAILED`, + {}, + ); + } + + async getDynatraceSyntheticLocationInfo( + syntheticLocationId: string, + ): Promise { + if (!syntheticLocationId) { + throw new Error('Dynatrace syntheticLocationId is required'); + } + + return this.callApi( + `synthetic/locations/${encodeURIComponent(syntheticLocationId)}`, + {}, + ); + } + async getDynatraceProblems( dynatraceEntityId: string, ): Promise { if (!dynatraceEntityId) { - throw new Error('Dynatrace entity ID is required'); + throw new Error('Dynatrace entity id is required'); } return this.callApi('problems', { diff --git a/plugins/dynatrace/src/components/DynatraceTab/DynatraceTab.tsx b/plugins/dynatrace/src/components/DynatraceTab/DynatraceTab.tsx index c284eaba0f..3f58eed9dc 100644 --- a/plugins/dynatrace/src/components/DynatraceTab/DynatraceTab.tsx +++ b/plugins/dynatrace/src/components/DynatraceTab/DynatraceTab.tsx @@ -18,14 +18,16 @@ import { Grid } from '@material-ui/core'; import { Page, Content, - ContentHeader, - SupportButton, MissingAnnotationEmptyState, } from '@backstage/core-components'; import { useEntity } from '@backstage/plugin-catalog-react'; import { ProblemsList } from '../Problems/ProblemsList'; +import { SyntheticsCard } from '../Synthetics/SyntheticsCard'; import { isDynatraceAvailable } from '../../plugin'; -import { DYNATRACE_ID_ANNOTATION } from '../../constants'; +import { + DYNATRACE_ID_ANNOTATION, + DYNATRACE_SYNTHETICS_ANNOTATION, +} from '../../constants'; export const DynatraceTab = () => { const { entity } = useEntity(); @@ -37,18 +39,30 @@ export const DynatraceTab = () => { const dynatraceEntityId: string = entity?.metadata.annotations?.[DYNATRACE_ID_ANNOTATION]!; + const syntheticsIds: string = + entity?.metadata.annotations?.[DYNATRACE_SYNTHETICS_ANNOTATION]!; + return ( - - - Plugin to show information from Dynatrace - - - - - + {dynatraceEntityId ? ( + + + + ) : ( + '' + )} + {syntheticsIds + ?.split(/[ ,]/) + .filter(Boolean) + .map(id => { + return ( + + + + ); + })} diff --git a/plugins/dynatrace/src/components/Problems/ProblemsList/ProblemsList.test.tsx b/plugins/dynatrace/src/components/Problems/ProblemsList/ProblemsList.test.tsx index 1249f4e886..9b9c51dca1 100644 --- a/plugins/dynatrace/src/components/Problems/ProblemsList/ProblemsList.test.tsx +++ b/plugins/dynatrace/src/components/Problems/ProblemsList/ProblemsList.test.tsx @@ -36,12 +36,12 @@ describe('ProblemStatus', () => { .mockResolvedValue({ problems }); const rendered = await renderInTestApp( - + , ); expect(await rendered.findByText('example-service')).toBeInTheDocument(); }); - it('renders "nothing to report :)" if no problems are found', async () => { + it('returns "No Problems to Report!" if no problems are found', async () => { mockDynatraceApi.getDynatraceProblems = jest.fn().mockResolvedValue({}); const rendered = await renderInTestApp( @@ -49,7 +49,7 @@ describe('ProblemStatus', () => { , ); expect( - await rendered.findByText('Nothing to report :)'), + await rendered.findByText('No Problems to Report!'), ).toBeInTheDocument(); }); }); diff --git a/plugins/dynatrace/src/components/Problems/ProblemsList/ProblemsList.tsx b/plugins/dynatrace/src/components/Problems/ProblemsList/ProblemsList.tsx index ac69abf93e..2ee0dda48d 100644 --- a/plugins/dynatrace/src/components/Problems/ProblemsList/ProblemsList.tsx +++ b/plugins/dynatrace/src/components/Problems/ProblemsList/ProblemsList.tsx @@ -15,19 +15,40 @@ */ import React from 'react'; import useAsync from 'react-use/lib/useAsync'; -import { Progress } from '@backstage/core-components'; -import Alert from '@material-ui/lab/Alert'; -import { useApi } from '@backstage/core-plugin-api'; +import { + Progress, + ResponseErrorPanel, + EmptyState, +} from '@backstage/core-components'; +import { useApi, configApiRef } from '@backstage/core-plugin-api'; import { ProblemsTable } from '../ProblemsTable'; -import { dynatraceApiRef } from '../../../api'; +import { dynatraceApiRef, DynatraceProblem } from '../../../api'; +import { InfoCard } from '@backstage/core-components'; type ProblemsListProps = { dynatraceEntityId: string; }; +const cardContents = ( + problems: DynatraceProblem[], + dynatraceBaseUrl: string, +) => { + return problems.length ? ( + + ) : ( + + ); +}; + export const ProblemsList = (props: ProblemsListProps) => { const { dynatraceEntityId } = props; + const configApi = useApi(configApiRef); const dynatraceApi = useApi(dynatraceApiRef); + const dynatraceBaseUrl = configApi.getString('dynatrace.baseUrl'); + const { value, loading, error } = useAsync(async () => { return dynatraceApi.getDynatraceProblems(dynatraceEntityId); }, [dynatraceApi, dynatraceEntityId]); @@ -36,8 +57,18 @@ export const ProblemsList = (props: ProblemsListProps) => { if (loading) { return ; } else if (error) { - return {error.message}; + return ; } - if (!problems) return
Nothing to report :)
; - return ; + return ( + + {cardContents(problems || [], dynatraceBaseUrl)} + + ); }; diff --git a/plugins/dynatrace/src/components/Problems/ProblemsTable/ProblemsTable.test.tsx b/plugins/dynatrace/src/components/Problems/ProblemsTable/ProblemsTable.test.tsx index e4adc43656..aaa3ea0024 100644 --- a/plugins/dynatrace/src/components/Problems/ProblemsTable/ProblemsTable.test.tsx +++ b/plugins/dynatrace/src/components/Problems/ProblemsTable/ProblemsTable.test.tsx @@ -28,17 +28,9 @@ describe('ProblemsTable', () => { it('renders the table with some problem data', async () => { const rendered = await renderInTestApp( - , + , , ); - expect(await rendered.findByText('example-service')).toBeInTheDocument(); - }); - it('renders an empty table when no data is provided', async () => { - const rendered = await renderInTestApp( - - - , - ); - expect(await rendered.findByText('Problems')).toBeInTheDocument(); + expect(await rendered.findByTitle('Search')).toBeInTheDocument(); }); }); diff --git a/plugins/dynatrace/src/components/Problems/ProblemsTable/ProblemsTable.tsx b/plugins/dynatrace/src/components/Problems/ProblemsTable/ProblemsTable.tsx index 8e3d330c37..78d26e3fe2 100644 --- a/plugins/dynatrace/src/components/Problems/ProblemsTable/ProblemsTable.tsx +++ b/plugins/dynatrace/src/components/Problems/ProblemsTable/ProblemsTable.tsx @@ -17,17 +17,19 @@ import React from 'react'; import { Table, TableColumn } from '@backstage/core-components'; import { DynatraceProblem } from '../../../api/DynatraceApi'; import { ProblemStatus } from '../ProblemStatus'; -import { configApiRef } from '@backstage/core-plugin-api'; -import { useApi } from '@backstage/core-plugin-api'; import { Link } from '@material-ui/core'; type ProblemsTableProps = { problems: DynatraceProblem[]; + dynatraceBaseUrl: string; }; -export const ProblemsTable = ({ problems }: ProblemsTableProps) => { - const configApi = useApi(configApiRef); - const dynatraceBaseUrl = configApi.getString('dynatrace.baseUrl'); +const parseTimestamp = (timestamp: number | undefined) => { + return timestamp ? new Date(timestamp).toLocaleString() : 'N/A'; +}; + +export const ProblemsTable = (props: ProblemsTableProps) => { + const { problems, dynatraceBaseUrl } = props; const columns: TableColumn[] = [ { title: 'Title', @@ -62,20 +64,18 @@ export const ProblemsTable = ({ problems }: ProblemsTableProps) => { { title: 'Start Time', field: 'startTime', - render: (row: Partial) => - new Date(row.startTime || 0).toString(), + render: (row: Partial) => parseTimestamp(row.startTime), }, { title: 'End Time', field: 'endTime', render: (row: Partial) => - row.endTime === -1 ? 'ongoing' : new Date(row.endTime || 0).toString(), + row.endTime === -1 ? 'ongoing' : parseTimestamp(row.endTime), }, ]; return ( { diff --git a/plugins/dynatrace/src/components/Synthetics/SyntheticsCard/SyntheticsCard.test.tsx b/plugins/dynatrace/src/components/Synthetics/SyntheticsCard/SyntheticsCard.test.tsx new file mode 100644 index 0000000000..e9083a3f82 --- /dev/null +++ b/plugins/dynatrace/src/components/Synthetics/SyntheticsCard/SyntheticsCard.test.tsx @@ -0,0 +1,52 @@ +/* + * 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 { SyntheticsCard } from './SyntheticsCard'; +import { renderInTestApp, TestApiRegistry } from '@backstage/test-utils'; +import { dynatraceApiRef } from '../../../api'; +import { ApiProvider, ConfigReader } from '@backstage/core-app-api'; +import { configApiRef } from '@backstage/core-plugin-api'; + +const mockDynatraceApi = { + getDynatraceSyntheticFailures: jest.fn(), +}; +const apis = TestApiRegistry.from( + [dynatraceApiRef, mockDynatraceApi], + [configApiRef, new ConfigReader({ dynatrace: { baseUrl: '__dynatrace__' } })], +); + +describe('SyntheticsCard', () => { + it('renders the card with Synthetics data', async () => { + mockDynatraceApi.getDynatraceSyntheticFailures = jest + .fn() + .mockResolvedValue({ + locationsExecutionResults: [ + { + locationId: '__location__', + requestResults: [{ startTimestamp: 0 }], + }, + ], + }); + const rendered = await renderInTestApp( + + , + , + ); + expect( + await rendered.findByText('View this Synthetic in Dynatrace'), + ).toBeInTheDocument(); + }); +}); diff --git a/plugins/dynatrace/src/components/Synthetics/SyntheticsCard/SyntheticsCard.tsx b/plugins/dynatrace/src/components/Synthetics/SyntheticsCard/SyntheticsCard.tsx new file mode 100644 index 0000000000..6b51a1725c --- /dev/null +++ b/plugins/dynatrace/src/components/Synthetics/SyntheticsCard/SyntheticsCard.tsx @@ -0,0 +1,88 @@ +/* + * Copyright 2022 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import React from 'react'; +import useAsync from 'react-use/lib/useAsync'; +import { Progress, ResponseErrorPanel } from '@backstage/core-components'; +import { InfoCard } from '@backstage/core-components'; +import { useApi, configApiRef } from '@backstage/core-plugin-api'; +import { dynatraceApiRef } from '../../../api'; +import { SyntheticsLocation } from '../SyntheticsLocation'; + +type SyntheticsCardProps = { + syntheticsId: string; +}; + +const dynatraceMonitorPrefixes = (idPrefix: string): string => { + switch (idPrefix) { + case 'HTTP_CHECK': + return 'ui/http-monitor'; + case 'BROWSER_MONITOR': + return 'ui/browser-monitor'; + case 'SYNTHETIC_TEST': + return 'ui/browser-monitor'; + default: + throw new Error('Invalid synthetic Id'); + } +}; + +export const SyntheticsCard = (props: SyntheticsCardProps) => { + const { syntheticsId } = props; + const configApi = useApi(configApiRef); + const dynatraceApi = useApi(dynatraceApiRef); + const dynatraceBaseUrl = configApi.getString('dynatrace.baseUrl'); + + const { value, loading, error } = useAsync(async () => { + return dynatraceApi.getDynatraceSyntheticFailures(syntheticsId); + }, [dynatraceApi, syntheticsId]); + + if (loading) { + return ; + } else if (error) { + return ; + } + + const deepLinkPrefix = dynatraceMonitorPrefixes( + `${syntheticsId.split('-')[0]}`, + ); + + const lastFailed = value?.locationsExecutionResults.map(l => { + return { + timestamp: l.requestResults[0].startTimestamp, + location: Number(l.locationId).toString(16), + }; + }); + + return ( + + {lastFailed?.map(l => { + return ( + + ); + })} + + ); +}; diff --git a/plugins/dynatrace/src/components/Synthetics/SyntheticsCard/index.ts b/plugins/dynatrace/src/components/Synthetics/SyntheticsCard/index.ts new file mode 100644 index 0000000000..5284e0cfab --- /dev/null +++ b/plugins/dynatrace/src/components/Synthetics/SyntheticsCard/index.ts @@ -0,0 +1,16 @@ +/* + * Copyright 2022 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +export { SyntheticsCard } from './SyntheticsCard'; diff --git a/plugins/dynatrace/src/components/Synthetics/SyntheticsLocation/SyntheticsLocation.test.tsx b/plugins/dynatrace/src/components/Synthetics/SyntheticsLocation/SyntheticsLocation.test.tsx new file mode 100644 index 0000000000..de04f73e36 --- /dev/null +++ b/plugins/dynatrace/src/components/Synthetics/SyntheticsLocation/SyntheticsLocation.test.tsx @@ -0,0 +1,65 @@ +/* + * 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 { SyntheticsLocation } from './SyntheticsLocation'; +import { renderInTestApp, TestApiRegistry } from '@backstage/test-utils'; +import { dynatraceApiRef } from '../../../api'; +import { ApiProvider, ConfigReader } from '@backstage/core-app-api'; +import { configApiRef } from '@backstage/core-plugin-api'; + +const mockDynatraceApi = { + getDynatraceSyntheticLocationInfo: jest.fn(), +}; +const apis = TestApiRegistry.from( + [dynatraceApiRef, mockDynatraceApi], + [configApiRef, new ConfigReader({ dynatrace: { baseUrl: '__dynatrace__' } })], +); + +describe('SyntheticsLocation', () => { + it('renders the SyntheticsLocation chip - recent failure', async () => { + mockDynatraceApi.getDynatraceSyntheticLocationInfo = jest + .fn() + .mockResolvedValue({ name: '__location__' }); + const rendered = await renderInTestApp( + + + , + , + ); + expect(await rendered.findByText(/failed/)).toBeInTheDocument(); + }); + it('renders the SyntheticsLocation chip - no failures', async () => { + mockDynatraceApi.getDynatraceSyntheticLocationInfo = jest + .fn() + .mockResolvedValue({ name: '__location__' }); + const rendered = await renderInTestApp( + + + , + , + ); + expect(await rendered.findByText(/__location__/)).toBeInTheDocument(); + expect(await rendered.queryByText(/failed/)).not.toBeInTheDocument(); + }); +}); diff --git a/plugins/dynatrace/src/components/Synthetics/SyntheticsLocation/SyntheticsLocation.tsx b/plugins/dynatrace/src/components/Synthetics/SyntheticsLocation/SyntheticsLocation.tsx new file mode 100644 index 0000000000..4d328210cb --- /dev/null +++ b/plugins/dynatrace/src/components/Synthetics/SyntheticsLocation/SyntheticsLocation.tsx @@ -0,0 +1,75 @@ +/* + * Copyright 2022 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import React from 'react'; +import useAsync from 'react-use/lib/useAsync'; +import { Progress, ResponseErrorPanel } from '@backstage/core-components'; +import { useApi } from '@backstage/core-plugin-api'; +import { Chip } from '@material-ui/core'; +import { dynatraceApiRef } from '../../../api'; + +type SyntheticsLocationProps = { + lastFailedTimestamp: Date; + locationId: string; + key: string; +}; + +const failedInLastXHours = (timestamp: Date, offset: number): boolean => { + if (offset < 0 || offset > 24) + throw new Error('offset must be between 0 and 24'); + return timestamp > new Date(new Date().getTime() - 1000 * 60 * 60 * offset); +}; + +const chipColor = (timestamp: Date): string => { + if (failedInLastXHours(timestamp, 1)) { + return 'salmon'; + } + if (failedInLastXHours(timestamp, 6)) { + return 'sandybrown'; + } + if (failedInLastXHours(timestamp, 24)) { + return 'palegoldenrod'; + } + return 'lightgreen'; +}; + +export const SyntheticsLocation = (props: SyntheticsLocationProps) => { + const { lastFailedTimestamp, locationId } = props; + const dynatraceApi = useApi(dynatraceApiRef); + const { value, loading, error } = useAsync(async () => { + return dynatraceApi.getDynatraceSyntheticLocationInfo( + `SYNTHETIC_LOCATION-00000000000000${locationId}`, + ); + }); + + if (loading) { + return ; + } else if (error) { + return ; + } + + return ( + + ); +}; diff --git a/plugins/dynatrace/src/components/Synthetics/SyntheticsLocation/index.ts b/plugins/dynatrace/src/components/Synthetics/SyntheticsLocation/index.ts new file mode 100644 index 0000000000..1dc8a783fe --- /dev/null +++ b/plugins/dynatrace/src/components/Synthetics/SyntheticsLocation/index.ts @@ -0,0 +1,16 @@ +/* + * Copyright 2022 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +export { SyntheticsLocation } from './SyntheticsLocation'; diff --git a/plugins/dynatrace/src/constants.ts b/plugins/dynatrace/src/constants.ts index 21453e0338..c4cc48d48a 100644 --- a/plugins/dynatrace/src/constants.ts +++ b/plugins/dynatrace/src/constants.ts @@ -14,3 +14,4 @@ * limitations under the License. */ export const DYNATRACE_ID_ANNOTATION = 'dynatrace.com/dynatrace-entity-id'; +export const DYNATRACE_SYNTHETICS_ANNOTATION = 'dynatrace.com/synthetics-ids'; diff --git a/plugins/dynatrace/src/mocks/problems.json b/plugins/dynatrace/src/mocks/problems.json index b1894bef56..16e3e156ec 100644 --- a/plugins/dynatrace/src/mocks/problems.json +++ b/plugins/dynatrace/src/mocks/problems.json @@ -1,5 +1,5 @@ { - "totalCount": 0, + "totalCount": 1, "pageSize": 0, "nextPageKey": "AQAAABQBAAAABQ==", "problems": [ diff --git a/plugins/dynatrace/src/plugin.ts b/plugins/dynatrace/src/plugin.ts index fc1778b45c..26ecb1aba1 100644 --- a/plugins/dynatrace/src/plugin.ts +++ b/plugins/dynatrace/src/plugin.ts @@ -23,7 +23,10 @@ import { } from '@backstage/core-plugin-api'; import { Entity } from '@backstage/catalog-model'; -import { DYNATRACE_ID_ANNOTATION } from './constants'; +import { + DYNATRACE_ID_ANNOTATION, + DYNATRACE_SYNTHETICS_ANNOTATION, +} from './constants'; import { rootRouteRef } from './routes'; @@ -55,7 +58,8 @@ export const dynatracePlugin = createPlugin({ * @param entity {Entity} - The entity to check for the dynatrace id annotation. */ export const isDynatraceAvailable = (entity: Entity) => - Boolean(entity.metadata.annotations?.[DYNATRACE_ID_ANNOTATION]); + Boolean(entity.metadata.annotations?.[DYNATRACE_ID_ANNOTATION]) || + Boolean(entity.metadata.annotations?.[DYNATRACE_SYNTHETICS_ANNOTATION]); /** * Creates a routable extension for the dynatrace plugin tab. diff --git a/plugins/example-todo-list-backend/CHANGELOG.md b/plugins/example-todo-list-backend/CHANGELOG.md index dec5c014e4..d541b6e65d 100644 --- a/plugins/example-todo-list-backend/CHANGELOG.md +++ b/plugins/example-todo-list-backend/CHANGELOG.md @@ -1,5 +1,13 @@ # @internal/plugin-todo-list-backend +## 1.0.4 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/plugin-auth-node@0.2.4 + ## 1.0.4-next.0 ### Patch Changes diff --git a/plugins/example-todo-list-backend/package.json b/plugins/example-todo-list-backend/package.json index d72f238bba..544b1e219e 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.4-next.0", + "version": "1.0.4", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -23,10 +23,10 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.15.0-next.0", + "@backstage/backend-common": "^0.15.0", "@backstage/config": "^1.0.1", "@backstage/errors": "^1.1.0", - "@backstage/plugin-auth-node": "^0.2.4-next.0", + "@backstage/plugin-auth-node": "^0.2.4", "@types/express": "^4.17.6", "cross-fetch": "^3.1.5", "express": "^4.17.1", @@ -36,7 +36,7 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.0", + "@backstage/cli": "^0.18.1", "@types/supertest": "^2.0.8", "@types/uuid": "^8.0.0", "msw": "^0.44.0", diff --git a/plugins/example-todo-list/CHANGELOG.md b/plugins/example-todo-list/CHANGELOG.md index 821cd49d46..3d637910de 100644 --- a/plugins/example-todo-list/CHANGELOG.md +++ b/plugins/example-todo-list/CHANGELOG.md @@ -1,5 +1,13 @@ # @internal/plugin-todo-list +## 1.0.4 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + ## 1.0.4-next.1 ### Patch Changes diff --git a/plugins/example-todo-list/package.json b/plugins/example-todo-list/package.json index 79920a97b1..6900e7455a 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.4-next.1", + "version": "1.0.4", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -24,8 +24,8 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -36,10 +36,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/core-app-api": "^1.0.5", + "@backstage/dev-utils": "^1.0.5", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/explore-react/CHANGELOG.md b/plugins/explore-react/CHANGELOG.md index 9a560155ca..b4c5547d9f 100644 --- a/plugins/explore-react/CHANGELOG.md +++ b/plugins/explore-react/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-explore-react +## 0.0.20 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.0.5 + ## 0.0.20-next.0 ### Patch Changes diff --git a/plugins/explore-react/package.json b/plugins/explore-react/package.json index ae4bd3a918..dee3504382 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.20-next.0", + "version": "0.0.20", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,12 +33,12 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/core-plugin-api": "^1.0.5-next.0" + "@backstage/core-plugin-api": "^1.0.5" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.0", - "@backstage/dev-utils": "^1.0.5-next.0", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/dev-utils": "^1.0.5", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/explore/CHANGELOG.md b/plugins/explore/CHANGELOG.md index 7fdae5d5ae..96813c08ca 100644 --- a/plugins/explore/CHANGELOG.md +++ b/plugins/explore/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-explore +## 0.3.39 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + - @backstage/plugin-explore-react@0.0.20 + ## 0.3.39-next.1 ### Patch Changes diff --git a/plugins/explore/api-report.md b/plugins/explore/api-report.md index c7181af19d..f4c7345b6c 100644 --- a/plugins/explore/api-report.md +++ b/plugins/explore/api-report.md @@ -33,9 +33,7 @@ export const DomainCard: ({ entity }: DomainCardProps) => JSX.Element; // Warning: (ae-missing-release-tag) "DomainExplorerContent" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) -export const DomainExplorerContent: ({ - title, -}: { +export const DomainExplorerContent: (props: { title?: string | undefined; }) => JSX.Element; @@ -82,18 +80,14 @@ export const exploreRouteRef: RouteRef; // Warning: (ae-missing-release-tag) "GroupsExplorerContent" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) -export const GroupsExplorerContent: ({ - title, -}: { +export const GroupsExplorerContent: (props: { title?: string | undefined; }) => JSX.Element; // Warning: (ae-missing-release-tag) "ToolExplorerContent" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) -export const ToolExplorerContent: ({ - title, -}: { +export const ToolExplorerContent: (props: { title?: string | undefined; }) => JSX.Element; diff --git a/plugins/explore/package.json b/plugins/explore/package.json index 782d36504f..793baa699e 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.3.39-next.1", + "version": "0.3.39", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -35,10 +35,10 @@ }, "dependencies": { "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", - "@backstage/plugin-catalog-react": "^1.1.3-next.2", - "@backstage/plugin-explore-react": "^0.0.20-next.0", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", + "@backstage/plugin-catalog-react": "^1.1.3", + "@backstage/plugin-explore-react": "^0.0.20", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -53,10 +53,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/core-app-api": "^1.0.5", + "@backstage/dev-utils": "^1.0.5", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/explore/src/components/DomainExplorerContent/DomainExplorerContent.tsx b/plugins/explore/src/components/DomainExplorerContent/DomainExplorerContent.tsx index ba495f6492..3cfed5b12b 100644 --- a/plugins/explore/src/components/DomainExplorerContent/DomainExplorerContent.tsx +++ b/plugins/explore/src/components/DomainExplorerContent/DomainExplorerContent.tsx @@ -13,13 +13,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + import { DomainEntity } from '@backstage/catalog-model'; import { catalogApiRef } from '@backstage/plugin-catalog-react'; import { Button } from '@material-ui/core'; import React from 'react'; import useAsync from 'react-use/lib/useAsync'; import { DomainCard } from '../DomainCard'; - import { Content, ContentHeader, @@ -29,7 +29,6 @@ import { SupportButton, WarningPanel, } from '@backstage/core-components'; - import { useApi } from '@backstage/core-plugin-api'; const Body = () => { @@ -85,16 +84,11 @@ const Body = () => { ); }; -type DomainExplorerContentProps = { - title?: string; -}; - -export const DomainExplorerContent = ({ - title, -}: DomainExplorerContentProps) => { +/** @public */ +export const DomainExplorerContent = (props: { title?: string }) => { return ( - + Discover the domains in your ecosystem. diff --git a/plugins/explore/src/components/GroupsExplorerContent/GroupsExplorerContent.tsx b/plugins/explore/src/components/GroupsExplorerContent/GroupsExplorerContent.tsx index ae711b85d9..62c4b093c0 100644 --- a/plugins/explore/src/components/GroupsExplorerContent/GroupsExplorerContent.tsx +++ b/plugins/explore/src/components/GroupsExplorerContent/GroupsExplorerContent.tsx @@ -31,21 +31,14 @@ const useStyles = makeStyles({ }, }); -type GroupsExplorerContentProps = { - title?: string; -}; - -export const GroupsExplorerContent = ({ - title, -}: GroupsExplorerContentProps) => { +export const GroupsExplorerContent = (props: { title?: string }) => { const classes = useStyles(); return ( - + Explore your groups. - ); diff --git a/plugins/explore/src/components/ToolExplorerContent/ToolExplorerContent.tsx b/plugins/explore/src/components/ToolExplorerContent/ToolExplorerContent.tsx index db07bd0665..5404c67393 100644 --- a/plugins/explore/src/components/ToolExplorerContent/ToolExplorerContent.tsx +++ b/plugins/explore/src/components/ToolExplorerContent/ToolExplorerContent.tsx @@ -18,7 +18,6 @@ import { exploreToolsConfigRef } from '@backstage/plugin-explore-react'; import React from 'react'; import useAsync from 'react-use/lib/useAsync'; import { ToolCard } from '../ToolCard'; - import { Content, ContentHeader, @@ -28,7 +27,6 @@ import { SupportButton, WarningPanel, } from '@backstage/core-components'; - import { useApi } from '@backstage/core-plugin-api'; const Body = () => { @@ -68,13 +66,9 @@ const Body = () => { ); }; -type ToolExplorerContentProps = { - title?: string; -}; - -export const ToolExplorerContent = ({ title }: ToolExplorerContentProps) => ( +export const ToolExplorerContent = (props: { title?: string }) => ( - + Discover the tools in your ecosystem. diff --git a/plugins/firehydrant/CHANGELOG.md b/plugins/firehydrant/CHANGELOG.md index c1c5155008..2af1f5ffe3 100644 --- a/plugins/firehydrant/CHANGELOG.md +++ b/plugins/firehydrant/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-firehydrant +## 0.1.25 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + ## 0.1.25-next.1 ### Patch Changes diff --git a/plugins/firehydrant/package.json b/plugins/firehydrant/package.json index 0932896f17..def4c08045 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.1.25-next.1", + "version": "0.1.25", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -25,9 +25,9 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", - "@backstage/plugin-catalog-react": "^1.1.3-next.2", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", + "@backstage/plugin-catalog-react": "^1.1.3", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -39,10 +39,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/core-app-api": "^1.0.5", + "@backstage/dev-utils": "^1.0.5", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/fossa/CHANGELOG.md b/plugins/fossa/CHANGELOG.md index 409e4a2f25..8a7e37e0eb 100644 --- a/plugins/fossa/CHANGELOG.md +++ b/plugins/fossa/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-fossa +## 0.2.40 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + ## 0.2.40-next.1 ### Patch Changes diff --git a/plugins/fossa/api-report.md b/plugins/fossa/api-report.md index ca9610b992..45f0746ac3 100644 --- a/plugins/fossa/api-report.md +++ b/plugins/fossa/api-report.md @@ -9,22 +9,14 @@ import { BackstagePlugin } from '@backstage/core-plugin-api'; import { InfoCardVariants } from '@backstage/core-components'; import { RouteRef } from '@backstage/core-plugin-api'; -// Warning: (ae-missing-release-tag) "EntityFossaCard" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) -export const EntityFossaCard: ({ - variant, -}: { +export const EntityFossaCard: (props: { variant?: InfoCardVariants | undefined; }) => JSX.Element; -// Warning: (ae-missing-release-tag) "FossaPage" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) -export const FossaPage: ({ entitiesFilter }: FossaPageProps) => JSX.Element; +export const FossaPage: (props: FossaPageProps) => JSX.Element; -// Warning: (ae-missing-release-tag) "FossaPageProps" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export type FossaPageProps = { entitiesFilter?: @@ -33,8 +25,6 @@ export type FossaPageProps = { | undefined; }; -// Warning: (ae-missing-release-tag) "fossaPlugin" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export const fossaPlugin: BackstagePlugin< { diff --git a/plugins/fossa/package.json b/plugins/fossa/package.json index 4a094615ff..f9de9e8087 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.40-next.1", + "version": "0.2.40", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -36,10 +36,10 @@ }, "dependencies": { "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", "@backstage/errors": "^1.1.0", - "@backstage/plugin-catalog-react": "^1.1.3-next.2", + "@backstage/plugin-catalog-react": "^1.1.3", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -53,10 +53,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/core-app-api": "^1.0.5", + "@backstage/dev-utils": "^1.0.5", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/fossa/src/components/FossaCard/FossaCard.tsx b/plugins/fossa/src/components/FossaCard/FossaCard.tsx index bbd5594fbc..31ff84e107 100644 --- a/plugins/fossa/src/components/FossaCard/FossaCard.tsx +++ b/plugins/fossa/src/components/FossaCard/FossaCard.tsx @@ -100,7 +100,9 @@ const Card = ({ ); }; -export const FossaCard = ({ variant }: { variant?: InfoCardVariants }) => { + +export const FossaCard = (props: { variant?: InfoCardVariants }) => { + const { variant } = props; const { entity } = useEntity(); const fossaApi = useApi(fossaApiRef); diff --git a/plugins/fossa/src/components/FossaPage/FossaPage.tsx b/plugins/fossa/src/components/FossaPage/FossaPage.tsx index 731852d4a7..faff862d0f 100644 --- a/plugins/fossa/src/components/FossaPage/FossaPage.tsx +++ b/plugins/fossa/src/components/FossaPage/FossaPage.tsx @@ -167,6 +167,7 @@ const filters: TableFilter[] = [ { column: 'Branch', type: 'select' }, ]; +/** @public */ export type FossaPageProps = { entitiesFilter?: | Record[] @@ -174,9 +175,8 @@ export type FossaPageProps = { | undefined; }; -export const FossaPage = ({ - entitiesFilter = { kind: 'Component' }, -}: FossaPageProps) => { +export const FossaPage = (props: FossaPageProps) => { + const { entitiesFilter = { kind: 'Component' } } = props; const catalogApi = useApi(catalogApiRef); const fossaApi = useApi(fossaApiRef); const [filter, setFilter] = useState(entitiesFilter); diff --git a/plugins/fossa/src/extensions.tsx b/plugins/fossa/src/extensions.tsx index 97bea6a4cf..d26057d9cc 100644 --- a/plugins/fossa/src/extensions.tsx +++ b/plugins/fossa/src/extensions.tsx @@ -21,6 +21,7 @@ import { createRoutableExtension, } from '@backstage/core-plugin-api'; +/** @public */ export const EntityFossaCard = fossaPlugin.provide( createComponentExtension({ name: 'EntityFossaCard', @@ -30,6 +31,7 @@ export const EntityFossaCard = fossaPlugin.provide( }), ); +/** @public */ export const FossaPage = fossaPlugin.provide( createRoutableExtension({ name: 'FossaPage', diff --git a/plugins/fossa/src/plugin.ts b/plugins/fossa/src/plugin.ts index 954ecedc81..bcc8c0f8e6 100644 --- a/plugins/fossa/src/plugin.ts +++ b/plugins/fossa/src/plugin.ts @@ -24,6 +24,7 @@ import { identityApiRef, } from '@backstage/core-plugin-api'; +/** @public */ export const fossaPlugin = createPlugin({ id: 'fossa', apis: [ diff --git a/plugins/gcalendar/CHANGELOG.md b/plugins/gcalendar/CHANGELOG.md index dd07805e18..946aae643a 100644 --- a/plugins/gcalendar/CHANGELOG.md +++ b/plugins/gcalendar/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-gcalendar +## 0.3.4 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + ## 0.3.4-next.1 ### Patch Changes diff --git a/plugins/gcalendar/package.json b/plugins/gcalendar/package.json index 7f711beecf..cc7fdfa61c 100644 --- a/plugins/gcalendar/package.json +++ b/plugins/gcalendar/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-gcalendar", - "version": "0.3.4-next.1", + "version": "0.3.4", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -22,8 +22,8 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", "@backstage/errors": "^1.1.0", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", @@ -43,10 +43,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/core-app-api": "^1.0.5", + "@backstage/dev-utils": "^1.0.5", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/gcp-projects/CHANGELOG.md b/plugins/gcp-projects/CHANGELOG.md index a1cb764e11..c7ab79eada 100644 --- a/plugins/gcp-projects/CHANGELOG.md +++ b/plugins/gcp-projects/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-gcp-projects +## 0.3.27 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + ## 0.3.27-next.1 ### Patch Changes diff --git a/plugins/gcp-projects/package.json b/plugins/gcp-projects/package.json index 1470873a86..5a24b88a5e 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.27-next.1", + "version": "0.3.27", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,8 +34,8 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -47,10 +47,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/core-app-api": "^1.0.5", + "@backstage/dev-utils": "^1.0.5", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/git-release-manager/CHANGELOG.md b/plugins/git-release-manager/CHANGELOG.md index 13345e1e5b..4613940252 100644 --- a/plugins/git-release-manager/CHANGELOG.md +++ b/plugins/git-release-manager/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-git-release-manager +## 0.3.21 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.3.0 + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + ## 0.3.21-next.1 ### Patch Changes diff --git a/plugins/git-release-manager/api-report.md b/plugins/git-release-manager/api-report.md index 24207de991..d34b6c07fb 100644 --- a/plugins/git-release-manager/api-report.md +++ b/plugins/git-release-manager/api-report.md @@ -90,7 +90,6 @@ const DISABLE_CACHE: { const Divider: () => JSX.Element; // Warning: (ae-forgotten-export) The symbol "SemverTagParts" needs to be exported by the entry point index.d.ts -// Warning: (ae-missing-release-tag) "getBumpedSemverTagParts" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public function getBumpedSemverTagParts( @@ -105,14 +104,8 @@ function getBumpedSemverTagParts( }; }; -// Warning: (ae-missing-release-tag) "getBumpedTag" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public -function getBumpedTag({ - project, - tag, - bumpLevel, -}: { +function getBumpedTag(options: { project: Project; tag: string; bumpLevel: keyof typeof SEMVER_PARTS; @@ -167,10 +160,8 @@ function getSemverTagParts(tag: string): // @public (undocumented) function getShortCommitHash(hash: string): string; -// Warning: (ae-missing-release-tag) "getTagParts" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public -function getTagParts({ project, tag }: { project: Project; tag: string }): +function getTagParts(options: { project: Project; tag: string }): | { error: AlertError; tagParts?: undefined; @@ -207,14 +198,8 @@ export const gitReleaseManagerPlugin: BackstagePlugin< {} >; -// Warning: (ae-missing-release-tag) "InfoCardPlus" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) -const InfoCardPlus: ({ - children, -}: { - children?: React_2.ReactNode; -}) => JSX.Element; +const InfoCardPlus: (props: { children?: React_2.ReactNode }) => JSX.Element; // Warning: (ae-missing-release-tag) "internals" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // @@ -625,16 +610,8 @@ declare namespace testIds { export { TEST_IDS }; } -// Warning: (ae-missing-release-tag) "validateTagName" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) -const validateTagName: ({ - project, - tagName, -}: { - project: Project; - tagName?: string | undefined; -}) => +const validateTagName: (options: { project: Project; tagName?: string }) => | { tagNameError: null; } @@ -653,9 +630,9 @@ const VERSIONING_STRATEGIES: { // Warnings were encountered during analysis: // // src/components/ResponseStepDialog/LinearProgressWithLabel.d.ts:5:5 - (ae-forgotten-export) The symbol "ResponseStep" needs to be exported by the entry point index.d.ts -// src/helpers/getBumpedTag.d.ts:14:5 - (ae-forgotten-export) The symbol "Project" needs to be exported by the entry point index.d.ts -// src/helpers/getBumpedTag.d.ts:19:5 - (ae-forgotten-export) The symbol "CalverTagParts" needs to be exported by the entry point index.d.ts -// src/helpers/getBumpedTag.d.ts:31:5 - (ae-forgotten-export) The symbol "AlertError" needs to be exported by the entry point index.d.ts +// src/helpers/getBumpedTag.d.ts:16:5 - (ae-forgotten-export) The symbol "Project" needs to be exported by the entry point index.d.ts +// src/helpers/getBumpedTag.d.ts:21:5 - (ae-forgotten-export) The symbol "CalverTagParts" needs to be exported by the entry point index.d.ts +// src/helpers/getBumpedTag.d.ts:33:5 - (ae-forgotten-export) The symbol "AlertError" needs to be exported by the entry point index.d.ts // src/index.d.ts:9:5 - (ae-forgotten-export) The symbol "components" needs to be exported by the entry point index.d.ts // src/index.d.ts:10:5 - (ae-forgotten-export) The symbol "constants" needs to be exported by the entry point index.d.ts // src/index.d.ts:11:5 - (ae-forgotten-export) The symbol "helpers" needs to be exported by the entry point index.d.ts diff --git a/plugins/git-release-manager/package.json b/plugins/git-release-manager/package.json index a0a6f9f486..d5b0835513 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.21-next.1", + "version": "0.3.21", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -24,9 +24,9 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", - "@backstage/integration": "^1.3.0-next.0", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", + "@backstage/integration": "^1.3.0", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -43,10 +43,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/core-app-api": "^1.0.5", + "@backstage/dev-utils": "^1.0.5", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/react-hooks": "^8.0.0", diff --git a/plugins/git-release-manager/src/components/InfoCardPlus.tsx b/plugins/git-release-manager/src/components/InfoCardPlus.tsx index bd0b79ba37..cd682adde1 100644 --- a/plugins/git-release-manager/src/components/InfoCardPlus.tsx +++ b/plugins/git-release-manager/src/components/InfoCardPlus.tsx @@ -17,7 +17,6 @@ import React from 'react'; import { makeStyles } from '@material-ui/core'; import { TEST_IDS } from '../test-helpers/test-ids'; - import { InfoCard } from '@backstage/core-components'; const useStyles = makeStyles(() => ({ @@ -26,7 +25,8 @@ const useStyles = makeStyles(() => ({ }, })); -export const InfoCardPlus = ({ children }: { children?: React.ReactNode }) => { +/** @public */ +export const InfoCardPlus = (props: { children?: React.ReactNode }) => { const classes = useStyles(); return ( @@ -34,7 +34,7 @@ export const InfoCardPlus = ({ children }: { children?: React.ReactNode }) => { style={{ position: 'relative' }} data-testid={TEST_IDS.info.infoFeaturePlus} > - {children} + {props.children} ); }; diff --git a/plugins/git-release-manager/src/helpers/getBumpedTag.ts b/plugins/git-release-manager/src/helpers/getBumpedTag.ts index dbfb00818e..5183947a1c 100644 --- a/plugins/git-release-manager/src/helpers/getBumpedTag.ts +++ b/plugins/git-release-manager/src/helpers/getBumpedTag.ts @@ -28,16 +28,15 @@ import { SemverTagParts } from './tagParts/getSemverTagParts'; * * For semantic versioning this means either a minor or a patch bump * depending on the value of `bumpLevel` + * + * @public */ -export function getBumpedTag({ - project, - tag, - bumpLevel, -}: { +export function getBumpedTag(options: { project: Project; tag: string; bumpLevel: keyof typeof SEMVER_PARTS; }) { + const { project, tag, bumpLevel } = options; const tagParts = getTagParts({ project, tag }); if (tagParts.error !== undefined) { @@ -53,6 +52,7 @@ export function getBumpedTag({ return getBumpedSemverTag(tagParts.tagParts, bumpLevel); } +/** @public */ function getPatchedCalverTag(tagParts: CalverTagParts) { const bumpedTagParts: CalverTagParts = { ...tagParts, @@ -67,6 +67,7 @@ function getPatchedCalverTag(tagParts: CalverTagParts) { }; } +/** @public */ function getBumpedSemverTag( tagParts: SemverTagParts, semverBumpLevel: keyof typeof SEMVER_PARTS, @@ -85,6 +86,8 @@ function getBumpedSemverTag( /** * Calculates the next semantic version, taking into account * whether or not it's a minor or patch + * + * @public */ export function getBumpedSemverTagParts( tagParts: SemverTagParts, diff --git a/plugins/git-release-manager/src/helpers/tagParts/getTagParts.ts b/plugins/git-release-manager/src/helpers/tagParts/getTagParts.ts index 750e4e23c5..ba8412b2b4 100644 --- a/plugins/git-release-manager/src/helpers/tagParts/getTagParts.ts +++ b/plugins/git-release-manager/src/helpers/tagParts/getTagParts.ts @@ -21,17 +21,13 @@ import { Project } from '../../contexts/ProjectContext'; /** * Tag parts are the individual parts of a version, e.g. .. * are the parts of a semantic version + * + * @public */ -export function getTagParts({ - project, - tag, -}: { - project: Project; - tag: string; -}) { - if (project.versioningStrategy === 'calver') { - return getCalverTagParts(tag); +export function getTagParts(options: { project: Project; tag: string }) { + if (options.project.versioningStrategy === 'calver') { + return getCalverTagParts(options.tag); } - return getSemverTagParts(tag); + return getSemverTagParts(options.tag); } diff --git a/plugins/git-release-manager/src/helpers/tagParts/validateTagName.ts b/plugins/git-release-manager/src/helpers/tagParts/validateTagName.ts index b9c0fb74ff..4e35cb0ca4 100644 --- a/plugins/git-release-manager/src/helpers/tagParts/validateTagName.ts +++ b/plugins/git-release-manager/src/helpers/tagParts/validateTagName.ts @@ -18,13 +18,13 @@ import { getCalverTagParts } from './getCalverTagParts'; import { getSemverTagParts } from './getSemverTagParts'; import { Project } from '../../contexts/ProjectContext'; -export const validateTagName = ({ - project, - tagName, -}: { +/** @public */ +export const validateTagName = (options: { project: Project; tagName?: string; }) => { + const { project, tagName } = options; + if (!tagName) { return { tagNameError: null, @@ -33,7 +33,6 @@ export const validateTagName = ({ if (project.versioningStrategy === 'calver') { const { error } = getCalverTagParts(tagName); - return { tagNameError: error, }; diff --git a/plugins/github-actions/CHANGELOG.md b/plugins/github-actions/CHANGELOG.md index 05faee61df..cb3f73d4cb 100644 --- a/plugins/github-actions/CHANGELOG.md +++ b/plugins/github-actions/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-github-actions +## 0.5.8 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.3.0 + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + ## 0.5.8-next.1 ### Patch Changes diff --git a/plugins/github-actions/api-report.md b/plugins/github-actions/api-report.md index 862d20d608..8cf70eabcc 100644 --- a/plugins/github-actions/api-report.md +++ b/plugins/github-actions/api-report.md @@ -28,35 +28,22 @@ export enum BuildStatus { 'success' = 0, } -// Warning: (ae-missing-release-tag) "EntityGithubActionsContent" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export const EntityGithubActionsContent: () => JSX.Element; -// Warning: (ae-missing-release-tag) "EntityLatestGithubActionRunCard" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) -export const EntityLatestGithubActionRunCard: ({ - branch, - variant, -}: { +export const EntityLatestGithubActionRunCard: (props: { branch: string; variant?: InfoCardVariants | undefined; }) => JSX.Element; -// Warning: (ae-missing-release-tag) "EntityLatestGithubActionsForBranchCard" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) -export const EntityLatestGithubActionsForBranchCard: ({ - branch, - variant, -}: { +export const EntityLatestGithubActionsForBranchCard: (props: { branch: string; variant?: InfoCardVariants | undefined; }) => JSX.Element; // Warning: (ae-forgotten-export) The symbol "Props" needs to be exported by the entry point index.d.ts -// Warning: (ae-missing-release-tag) "EntityRecentGithubActionsRunsCard" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) export const EntityRecentGithubActionsRunsCard: ({ @@ -191,8 +178,6 @@ export class GithubActionsClient implements GithubActionsApi { }): Promise; } -// Warning: (ae-missing-release-tag) "githubActionsPlugin" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) const githubActionsPlugin: BackstagePlugin< { @@ -233,22 +218,21 @@ export type Jobs = { jobs: Job[]; }; -// Warning: (ae-forgotten-export) The symbol "Props" needs to be exported by the entry point index.d.ts // Warning: (ae-missing-release-tag) "LatestWorkflowRunCard" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) -export const LatestWorkflowRunCard: ({ - branch, - variant, -}: Props_2) => JSX.Element; +export const LatestWorkflowRunCard: (props: { + branch: string; + variant?: InfoCardVariants; +}) => JSX.Element; // Warning: (ae-missing-release-tag) "LatestWorkflowsForBranchCard" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) -export const LatestWorkflowsForBranchCard: ({ - branch, - variant, -}: Props_2) => JSX.Element; +export const LatestWorkflowsForBranchCard: (props: { + branch: string; + variant?: InfoCardVariants; +}) => JSX.Element; // Warning: (ae-missing-release-tag) "RecentWorkflowRunsCard" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // diff --git a/plugins/github-actions/package.json b/plugins/github-actions/package.json index fb30598057..6360a532e6 100644 --- a/plugins/github-actions/package.json +++ b/plugins/github-actions/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-github-actions", "description": "A Backstage plugin that integrates towards GitHub Actions", - "version": "0.5.8-next.1", + "version": "0.5.8", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -37,10 +37,10 @@ }, "dependencies": { "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", - "@backstage/integration": "^1.3.0-next.0", - "@backstage/plugin-catalog-react": "^1.1.3-next.2", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", + "@backstage/integration": "^1.3.0", + "@backstage/plugin-catalog-react": "^1.1.3", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -55,10 +55,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/core-app-api": "^1.0.5", + "@backstage/dev-utils": "^1.0.5", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/github-actions/src/components/Cards/Cards.tsx b/plugins/github-actions/src/components/Cards/Cards.tsx index 61a5146bee..5e53096ba4 100644 --- a/plugins/github-actions/src/components/Cards/Cards.tsx +++ b/plugins/github-actions/src/components/Cards/Cards.tsx @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + import { readGitHubIntegrationConfigs } from '@backstage/integration'; import { useEntity } from '@backstage/plugin-catalog-react'; import { @@ -27,7 +28,6 @@ import { GITHUB_ACTIONS_ANNOTATION } from '../getProjectNameFromEntity'; import { useWorkflowRuns, WorkflowRun } from '../useWorkflowRuns'; import { WorkflowRunsTable } from '../WorkflowRunsTable'; import { WorkflowRunStatus } from '../WorkflowRunStatus'; - import { configApiRef, errorApiRef, useApi } from '@backstage/core-plugin-api'; import { InfoCard, @@ -43,20 +43,18 @@ const useStyles = makeStyles({ }, }); -const WidgetContent = ({ - error, - loading, - lastRun, - branch, -}: { +const WidgetContent = (props: { error?: Error; loading?: boolean; lastRun: WorkflowRun; branch: string; }) => { + const { error, loading, lastRun, branch } = props; const classes = useStyles(); + if (error) return Couldn't fetch latest {branch} run; if (loading) return ; + return ( { +export const LatestWorkflowRunCard = (props: { + branch: string; + variant?: InfoCardVariants; +}) => { + const { branch = 'master', variant } = props; const { entity } = useEntity(); const config = useApi(configApiRef); const errorApi = useApi(errorApiRef); @@ -120,15 +118,11 @@ export const LatestWorkflowRunCard = ({ ); }; -type Props = { +export const LatestWorkflowsForBranchCard = (props: { branch: string; variant?: InfoCardVariants; -}; - -export const LatestWorkflowsForBranchCard = ({ - branch = 'master', - variant, -}: Props) => { +}) => { + const { branch = 'master', variant } = props; const { entity } = useEntity(); return ( diff --git a/plugins/github-actions/src/plugin.ts b/plugins/github-actions/src/plugin.ts index d8db5e16d0..26cf246fb9 100644 --- a/plugins/github-actions/src/plugin.ts +++ b/plugins/github-actions/src/plugin.ts @@ -25,6 +25,7 @@ import { createComponentExtension, } from '@backstage/core-plugin-api'; +/** @public */ export const githubActionsPlugin = createPlugin({ id: 'github-actions', apis: [ @@ -40,6 +41,7 @@ export const githubActionsPlugin = createPlugin({ }, }); +/** @public */ export const EntityGithubActionsContent = githubActionsPlugin.provide( createRoutableExtension({ name: 'EntityGithubActionsContent', @@ -48,6 +50,7 @@ export const EntityGithubActionsContent = githubActionsPlugin.provide( }), ); +/** @public */ export const EntityLatestGithubActionRunCard = githubActionsPlugin.provide( createComponentExtension({ name: 'EntityLatestGithubActionRunCard', @@ -58,6 +61,7 @@ export const EntityLatestGithubActionRunCard = githubActionsPlugin.provide( }), ); +/** @public */ export const EntityLatestGithubActionsForBranchCard = githubActionsPlugin.provide( createComponentExtension({ @@ -71,6 +75,7 @@ export const EntityLatestGithubActionsForBranchCard = }), ); +/** @public */ export const EntityRecentGithubActionsRunsCard = githubActionsPlugin.provide( createComponentExtension({ name: 'EntityRecentGithubActionsRunsCard', diff --git a/plugins/github-deployments/CHANGELOG.md b/plugins/github-deployments/CHANGELOG.md index dad77b8944..0e331108a3 100644 --- a/plugins/github-deployments/CHANGELOG.md +++ b/plugins/github-deployments/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-github-deployments +## 0.1.39 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.3.0 + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + - @backstage/integration-react@1.1.3 + ## 0.1.39-next.1 ### Patch Changes diff --git a/plugins/github-deployments/package.json b/plugins/github-deployments/package.json index 15a9343632..f230fb77fc 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.39-next.1", + "version": "0.1.39", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -25,12 +25,12 @@ }, "dependencies": { "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", "@backstage/errors": "^1.1.0", - "@backstage/integration": "^1.3.0-next.0", - "@backstage/integration-react": "^1.1.3-next.1", - "@backstage/plugin-catalog-react": "^1.1.3-next.2", + "@backstage/integration": "^1.3.0", + "@backstage/integration-react": "^1.1.3", + "@backstage/plugin-catalog-react": "^1.1.3", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -43,10 +43,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/core-app-api": "^1.0.5", + "@backstage/dev-utils": "^1.0.5", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/github-issues/CHANGELOG.md b/plugins/github-issues/CHANGELOG.md index ff9d0860aa..a85982820d 100644 --- a/plugins/github-issues/CHANGELOG.md +++ b/plugins/github-issues/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-github-issues +## 0.1.0 + +### Minor Changes + +- ffd5e47fb5: New plugin for displaying GitHub Issues added + +### Patch Changes + +- 347ea327c2: Moved communication with GitHub graphql API to the dedicated plugin API. + Fixes issue when no GitHub Issues are rendered when partial failure is returned from GitHub API. +- b522f49403: Updated dependency `@spotify/prettier-config` to `^14.0.0`. +- Updated dependencies + - @backstage/integration@1.3.0 + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + ## 0.1.0-next.0 ### Minor Changes diff --git a/plugins/github-issues/dev/__fixtures__/component-issues-data.json b/plugins/github-issues/dev/__fixtures__/component-issues-data.json new file mode 100644 index 0000000000..8192f38838 --- /dev/null +++ b/plugins/github-issues/dev/__fixtures__/component-issues-data.json @@ -0,0 +1,1209 @@ +{ + "backstage": { + "issues": { + "totalCount": 464, + "edges": [ + { + "node": { + "assignees": { + "edges": [ + { + "node": { + "avatarUrl": "https://cloudflare-ipfs.com/ipfs/Qmd3W5DuhgHirLHGVixi6V76LhCkZUz6pnFt5AJBiyvHye/avatar/1112.jpg", + "login": "worthless-horse" + } + } + ] + }, + "author": { + "login": "next-dog" + }, + "repository": { + "nameWithOwner": "backstage/backstage" + }, + "title": "quasi labore qui", + "url": "http://flowery-muscatel.net", + "participants": { + "totalCount": 3 + }, + "updatedAt": "2022-05-02T09:46:35.885Z", + "createdAt": "2022-06-03T07:11:22.320Z", + "comments": { + "totalCount": 6 + } + } + }, + { + "node": { + "assignees": { + "edges": [ + { + "node": { + "avatarUrl": "https://cloudflare-ipfs.com/ipfs/Qmd3W5DuhgHirLHGVixi6V76LhCkZUz6pnFt5AJBiyvHye/avatar/1061.jpg", + "login": "colorful-bird" + } + } + ] + }, + "author": { + "login": "loud-cow" + }, + "repository": { + "nameWithOwner": "backstage/backstage" + }, + "title": "debitis alias voluptatem", + "url": "https://complete-grief.biz", + "participants": { + "totalCount": 5 + }, + "updatedAt": "2022-05-04T19:44:01.090Z", + "createdAt": "2022-02-21T08:07:57.434Z", + "comments": { + "totalCount": 1 + } + } + }, + { + "node": { + "assignees": { + "edges": [ + { + "node": { + "avatarUrl": "https://cloudflare-ipfs.com/ipfs/Qmd3W5DuhgHirLHGVixi6V76LhCkZUz6pnFt5AJBiyvHye/avatar/1222.jpg", + "login": "sharp-cetacean" + } + } + ] + }, + "author": { + "login": "growing-dog" + }, + "repository": { + "nameWithOwner": "backstage/backstage" + }, + "title": "non accusamus occaecati", + "url": "http://medium-choosing.com", + "participants": { + "totalCount": 3 + }, + "updatedAt": "2021-10-28T00:36:58.871Z", + "createdAt": "2021-11-08T02:21:55.269Z", + "comments": { + "totalCount": 2 + } + } + }, + { + "node": { + "assignees": { + "edges": [ + { + "node": { + "avatarUrl": "https://cloudflare-ipfs.com/ipfs/Qmd3W5DuhgHirLHGVixi6V76LhCkZUz6pnFt5AJBiyvHye/avatar/513.jpg", + "login": "crafty-crocodilia" + } + } + ] + }, + "author": { + "login": "wooden-crocodilia" + }, + "repository": { + "nameWithOwner": "backstage/backstage" + }, + "title": "tenetur distinctio sint", + "url": "http://opulent-prejudice.biz", + "participants": { + "totalCount": 5 + }, + "updatedAt": "2022-08-10T19:22:08.823Z", + "createdAt": "2022-02-21T06:24:45.090Z", + "comments": { + "totalCount": 7 + } + } + }, + { + "node": { + "assignees": { + "edges": [ + { + "node": { + "avatarUrl": "https://cloudflare-ipfs.com/ipfs/Qmd3W5DuhgHirLHGVixi6V76LhCkZUz6pnFt5AJBiyvHye/avatar/785.jpg", + "login": "genuine-cow" + } + } + ] + }, + "author": { + "login": "likely-snake" + }, + "repository": { + "nameWithOwner": "backstage/backstage" + }, + "title": "eveniet sed nesciunt", + "url": "http://flickering-atmosphere.com", + "participants": { + "totalCount": 5 + }, + "updatedAt": "2022-02-26T15:54:42.831Z", + "createdAt": "2022-02-13T14:52:35.327Z", + "comments": { + "totalCount": 2 + } + } + }, + { + "node": { + "assignees": { + "edges": [ + { + "node": { + "avatarUrl": "https://cloudflare-ipfs.com/ipfs/Qmd3W5DuhgHirLHGVixi6V76LhCkZUz6pnFt5AJBiyvHye/avatar/503.jpg", + "login": "imaginary-lion" + } + } + ] + }, + "author": { + "login": "lame-bird" + }, + "repository": { + "nameWithOwner": "backstage/backstage" + }, + "title": "saepe sequi dolore", + "url": "https://short-term-broccoli.org", + "participants": { + "totalCount": 2 + }, + "updatedAt": "2021-10-11T01:31:28.508Z", + "createdAt": "2022-04-11T12:41:01.234Z", + "comments": { + "totalCount": 3 + } + } + }, + { + "node": { + "assignees": { + "edges": [ + { + "node": { + "avatarUrl": "https://cloudflare-ipfs.com/ipfs/Qmd3W5DuhgHirLHGVixi6V76LhCkZUz6pnFt5AJBiyvHye/avatar/590.jpg", + "login": "funny-snake" + } + } + ] + }, + "author": { + "login": "hollow-snake" + }, + "repository": { + "nameWithOwner": "backstage/backstage" + }, + "title": "enim quia magni", + "url": "https://scornful-servant.name", + "participants": { + "totalCount": 5 + }, + "updatedAt": "2022-03-05T19:19:15.147Z", + "createdAt": "2022-03-13T09:25:35.802Z", + "comments": { + "totalCount": 8 + } + } + }, + { + "node": { + "assignees": { + "edges": [ + { + "node": { + "avatarUrl": "https://cloudflare-ipfs.com/ipfs/Qmd3W5DuhgHirLHGVixi6V76LhCkZUz6pnFt5AJBiyvHye/avatar/588.jpg", + "login": "zigzag-bear" + } + } + ] + }, + "author": { + "login": "growling-cow" + }, + "repository": { + "nameWithOwner": "backstage/backstage" + }, + "title": "omnis ut nostrum", + "url": "https://worthy-minority.net", + "participants": { + "totalCount": 7 + }, + "updatedAt": "2021-08-18T19:21:40.603Z", + "createdAt": "2022-06-04T16:06:26.277Z", + "comments": { + "totalCount": 4 + } + } + }, + { + "node": { + "assignees": { + "edges": [ + { + "node": { + "avatarUrl": "https://cloudflare-ipfs.com/ipfs/Qmd3W5DuhgHirLHGVixi6V76LhCkZUz6pnFt5AJBiyvHye/avatar/1134.jpg", + "login": "composed-lion" + } + } + ] + }, + "author": { + "login": "overjoyed-crocodilia" + }, + "repository": { + "nameWithOwner": "backstage/backstage" + }, + "title": "sit est corrupti", + "url": "http://vital-armpit.com", + "participants": { + "totalCount": 3 + }, + "updatedAt": "2022-07-26T22:13:34.123Z", + "createdAt": "2022-02-28T17:59:42.677Z", + "comments": { + "totalCount": 3 + } + } + }, + { + "node": { + "assignees": { + "edges": [ + { + "node": { + "avatarUrl": "https://cloudflare-ipfs.com/ipfs/Qmd3W5DuhgHirLHGVixi6V76LhCkZUz6pnFt5AJBiyvHye/avatar/802.jpg", + "login": "sarcastic-bear" + } + } + ] + }, + "author": { + "login": "utilized-insect" + }, + "repository": { + "nameWithOwner": "backstage/backstage" + }, + "title": "illo perferendis suscipit", + "url": "http://snappy-skywalk.info", + "participants": { + "totalCount": 4 + }, + "updatedAt": "2021-10-02T21:22:35.070Z", + "createdAt": "2021-10-25T11:36:35.561Z", + "comments": { + "totalCount": 2 + } + } + }, + { + "node": { + "assignees": { + "edges": [ + { + "node": { + "avatarUrl": "https://cloudflare-ipfs.com/ipfs/Qmd3W5DuhgHirLHGVixi6V76LhCkZUz6pnFt5AJBiyvHye/avatar/232.jpg", + "login": "pristine-cow" + } + } + ] + }, + "author": { + "login": "adorable-snake" + }, + "repository": { + "nameWithOwner": "backstage/backstage" + }, + "title": "assumenda nostrum aut", + "url": "http://loud-legend.info", + "participants": { + "totalCount": 7 + }, + "updatedAt": "2022-06-16T22:45:23.107Z", + "createdAt": "2022-05-23T01:10:35.755Z", + "comments": { + "totalCount": 1 + } + } + }, + { + "node": { + "assignees": { + "edges": [ + { + "node": { + "avatarUrl": "https://cloudflare-ipfs.com/ipfs/Qmd3W5DuhgHirLHGVixi6V76LhCkZUz6pnFt5AJBiyvHye/avatar/652.jpg", + "login": "wrong-insect" + } + } + ] + }, + "author": { + "login": "grizzled-cow" + }, + "repository": { + "nameWithOwner": "backstage/backstage" + }, + "title": "qui magnam dolorem", + "url": "http://exhausted-horn.org", + "participants": { + "totalCount": 7 + }, + "updatedAt": "2021-12-18T18:46:10.828Z", + "createdAt": "2022-03-27T06:42:04.192Z", + "comments": { + "totalCount": 7 + } + } + }, + { + "node": { + "assignees": { + "edges": [ + { + "node": { + "avatarUrl": "https://cloudflare-ipfs.com/ipfs/Qmd3W5DuhgHirLHGVixi6V76LhCkZUz6pnFt5AJBiyvHye/avatar/838.jpg", + "login": "humming-cow" + } + } + ] + }, + "author": { + "login": "profuse-bird" + }, + "repository": { + "nameWithOwner": "backstage/backstage" + }, + "title": "nostrum numquam porro", + "url": "https://unusual-reaction.org", + "participants": { + "totalCount": 7 + }, + "updatedAt": "2022-05-11T15:14:57.433Z", + "createdAt": "2022-05-06T10:48:16.946Z", + "comments": { + "totalCount": 8 + } + } + }, + { + "node": { + "assignees": { + "edges": [ + { + "node": { + "avatarUrl": "https://cloudflare-ipfs.com/ipfs/Qmd3W5DuhgHirLHGVixi6V76LhCkZUz6pnFt5AJBiyvHye/avatar/573.jpg", + "login": "prime-cow" + } + } + ] + }, + "author": { + "login": "forthright-lion" + }, + "repository": { + "nameWithOwner": "backstage/backstage" + }, + "title": "in inventore pariatur", + "url": "https://cheery-accord.info", + "participants": { + "totalCount": 4 + }, + "updatedAt": "2022-06-30T16:22:46.819Z", + "createdAt": "2022-05-11T12:37:36.848Z", + "comments": { + "totalCount": 6 + } + } + }, + { + "node": { + "assignees": { + "edges": [ + { + "node": { + "avatarUrl": "https://cloudflare-ipfs.com/ipfs/Qmd3W5DuhgHirLHGVixi6V76LhCkZUz6pnFt5AJBiyvHye/avatar/1143.jpg", + "login": "limp-bear" + } + } + ] + }, + "author": { + "login": "faraway-rabbit" + }, + "repository": { + "nameWithOwner": "backstage/backstage" + }, + "title": "et dolores eaque", + "url": "http://overjoyed-former.info", + "participants": { + "totalCount": 4 + }, + "updatedAt": "2022-04-19T15:14:58.698Z", + "createdAt": "2022-04-28T23:15:49.918Z", + "comments": { + "totalCount": 1 + } + } + }, + { + "node": { + "assignees": { + "edges": [ + { + "node": { + "avatarUrl": "https://cloudflare-ipfs.com/ipfs/Qmd3W5DuhgHirLHGVixi6V76LhCkZUz6pnFt5AJBiyvHye/avatar/347.jpg", + "login": "same-insect" + } + } + ] + }, + "author": { + "login": "smoggy-bird" + }, + "repository": { + "nameWithOwner": "backstage/backstage" + }, + "title": "vel error numquam", + "url": "http://submissive-ladder.org", + "participants": { + "totalCount": 3 + }, + "updatedAt": "2021-12-19T23:43:44.987Z", + "createdAt": "2022-01-04T11:52:01.233Z", + "comments": { + "totalCount": 4 + } + } + }, + { + "node": { + "assignees": { + "edges": [ + { + "node": { + "avatarUrl": "https://cloudflare-ipfs.com/ipfs/Qmd3W5DuhgHirLHGVixi6V76LhCkZUz6pnFt5AJBiyvHye/avatar/951.jpg", + "login": "round-dog" + } + } + ] + }, + "author": { + "login": "humming-cetacean" + }, + "repository": { + "nameWithOwner": "backstage/backstage" + }, + "title": "doloribus asperiores occaecati", + "url": "http://webbed-underclothes.biz", + "participants": { + "totalCount": 2 + }, + "updatedAt": "2022-04-19T07:07:21.270Z", + "createdAt": "2022-04-20T10:41:00.681Z", + "comments": { + "totalCount": 2 + } + } + }, + { + "node": { + "assignees": { + "edges": [ + { + "node": { + "avatarUrl": "https://cloudflare-ipfs.com/ipfs/Qmd3W5DuhgHirLHGVixi6V76LhCkZUz6pnFt5AJBiyvHye/avatar/1123.jpg", + "login": "tepid-cat" + } + } + ] + }, + "author": { + "login": "colossal-bird" + }, + "repository": { + "nameWithOwner": "backstage/backstage" + }, + "title": "reiciendis illum quos", + "url": "http://rusty-repeat.com", + "participants": { + "totalCount": 7 + }, + "updatedAt": "2022-08-04T06:35:11.880Z", + "createdAt": "2022-07-16T15:11:56.116Z", + "comments": { + "totalCount": 7 + } + } + }, + { + "node": { + "assignees": { + "edges": [ + { + "node": { + "avatarUrl": "https://cloudflare-ipfs.com/ipfs/Qmd3W5DuhgHirLHGVixi6V76LhCkZUz6pnFt5AJBiyvHye/avatar/1068.jpg", + "login": "grown-cat" + } + } + ] + }, + "author": { + "login": "superficial-lion" + }, + "repository": { + "nameWithOwner": "backstage/backstage" + }, + "title": "tempore et sequi", + "url": "https://defenseless-signal.info", + "participants": { + "totalCount": 2 + }, + "updatedAt": "2022-03-12T10:17:20.598Z", + "createdAt": "2022-05-31T20:12:43.316Z", + "comments": { + "totalCount": 7 + } + } + }, + { + "node": { + "assignees": { + "edges": [ + { + "node": { + "avatarUrl": "https://cloudflare-ipfs.com/ipfs/Qmd3W5DuhgHirLHGVixi6V76LhCkZUz6pnFt5AJBiyvHye/avatar/468.jpg", + "login": "blissful-horse" + } + } + ] + }, + "author": { + "login": "positive-insect" + }, + "repository": { + "nameWithOwner": "backstage/backstage" + }, + "title": "aut minima odit", + "url": "https://well-groomed-octave.biz", + "participants": { + "totalCount": 4 + }, + "updatedAt": "2021-08-20T21:00:05.294Z", + "createdAt": "2022-04-11T23:51:45.727Z", + "comments": { + "totalCount": 9 + } + } + }, + { + "node": { + "assignees": { + "edges": [ + { + "node": { + "avatarUrl": "https://cloudflare-ipfs.com/ipfs/Qmd3W5DuhgHirLHGVixi6V76LhCkZUz6pnFt5AJBiyvHye/avatar/1044.jpg", + "login": "crowded-bird" + } + } + ] + }, + "author": { + "login": "unlined-horse" + }, + "repository": { + "nameWithOwner": "backstage/backstage" + }, + "title": "aut sunt quisquam", + "url": "https://realistic-student.com", + "participants": { + "totalCount": 5 + }, + "updatedAt": "2021-11-07T11:13:39.158Z", + "createdAt": "2022-01-30T19:35:35.546Z", + "comments": { + "totalCount": 2 + } + } + }, + { + "node": { + "assignees": { + "edges": [ + { + "node": { + "avatarUrl": "https://cloudflare-ipfs.com/ipfs/Qmd3W5DuhgHirLHGVixi6V76LhCkZUz6pnFt5AJBiyvHye/avatar/691.jpg", + "login": "loathsome-insect" + } + } + ] + }, + "author": { + "login": "kooky-crocodilia" + }, + "repository": { + "nameWithOwner": "backstage/backstage" + }, + "title": "reprehenderit non eos", + "url": "https://alert-testimony.net", + "participants": { + "totalCount": 3 + }, + "updatedAt": "2022-04-24T16:34:36.616Z", + "createdAt": "2021-11-01T21:35:35.900Z", + "comments": { + "totalCount": 5 + } + } + }, + { + "node": { + "assignees": { + "edges": [ + { + "node": { + "avatarUrl": "https://cloudflare-ipfs.com/ipfs/Qmd3W5DuhgHirLHGVixi6V76LhCkZUz6pnFt5AJBiyvHye/avatar/691.jpg", + "login": "dear-insect" + } + } + ] + }, + "author": { + "login": "wavy-bear" + }, + "repository": { + "nameWithOwner": "backstage/backstage" + }, + "title": "quis in earum", + "url": "https://radiant-posterior.net", + "participants": { + "totalCount": 7 + }, + "updatedAt": "2021-09-26T08:50:55.755Z", + "createdAt": "2022-04-10T00:03:40.290Z", + "comments": { + "totalCount": 8 + } + } + }, + { + "node": { + "assignees": { + "edges": [ + { + "node": { + "avatarUrl": "https://cloudflare-ipfs.com/ipfs/Qmd3W5DuhgHirLHGVixi6V76LhCkZUz6pnFt5AJBiyvHye/avatar/952.jpg", + "login": "prestigious-cat" + } + } + ] + }, + "author": { + "login": "quick-cetacean" + }, + "repository": { + "nameWithOwner": "backstage/backstage" + }, + "title": "sed ut exercitationem", + "url": "https://portly-clasp.name", + "participants": { + "totalCount": 3 + }, + "updatedAt": "2022-04-06T03:04:16.077Z", + "createdAt": "2022-01-14T10:22:19.619Z", + "comments": { + "totalCount": 5 + } + } + }, + { + "node": { + "assignees": { + "edges": [ + { + "node": { + "avatarUrl": "https://cloudflare-ipfs.com/ipfs/Qmd3W5DuhgHirLHGVixi6V76LhCkZUz6pnFt5AJBiyvHye/avatar/768.jpg", + "login": "fatal-cetacean" + } + } + ] + }, + "author": { + "login": "pricey-dog" + }, + "repository": { + "nameWithOwner": "backstage/backstage" + }, + "title": "voluptas error sunt", + "url": "http://second-outcome.info", + "participants": { + "totalCount": 5 + }, + "updatedAt": "2021-08-19T20:35:40.281Z", + "createdAt": "2021-10-02T12:24:16.983Z", + "comments": { + "totalCount": 6 + } + } + }, + { + "node": { + "assignees": { + "edges": [ + { + "node": { + "avatarUrl": "https://cloudflare-ipfs.com/ipfs/Qmd3W5DuhgHirLHGVixi6V76LhCkZUz6pnFt5AJBiyvHye/avatar/283.jpg", + "login": "double-fish" + } + } + ] + }, + "author": { + "login": "liquid-snake" + }, + "repository": { + "nameWithOwner": "backstage/backstage" + }, + "title": "sed reprehenderit sunt", + "url": "https://playful-fibrosis.com", + "participants": { + "totalCount": 7 + }, + "updatedAt": "2022-05-24T19:35:19.804Z", + "createdAt": "2022-04-04T20:15:10.303Z", + "comments": { + "totalCount": 3 + } + } + }, + { + "node": { + "assignees": { + "edges": [ + { + "node": { + "avatarUrl": "https://cloudflare-ipfs.com/ipfs/Qmd3W5DuhgHirLHGVixi6V76LhCkZUz6pnFt5AJBiyvHye/avatar/38.jpg", + "login": "separate-cat" + } + } + ] + }, + "author": { + "login": "jolly-bear" + }, + "repository": { + "nameWithOwner": "backstage/backstage" + }, + "title": "accusantium cupiditate et", + "url": "http://lined-flood.biz", + "participants": { + "totalCount": 9 + }, + "updatedAt": "2022-01-23T15:45:04.503Z", + "createdAt": "2021-11-29T07:20:44.372Z", + "comments": { + "totalCount": 4 + } + } + }, + { + "node": { + "assignees": { + "edges": [ + { + "node": { + "avatarUrl": "https://cloudflare-ipfs.com/ipfs/Qmd3W5DuhgHirLHGVixi6V76LhCkZUz6pnFt5AJBiyvHye/avatar/410.jpg", + "login": "yummy-dog" + } + } + ] + }, + "author": { + "login": "pesky-bear" + }, + "repository": { + "nameWithOwner": "backstage/backstage" + }, + "title": "eum molestiae accusantium", + "url": "http://vast-grub.biz", + "participants": { + "totalCount": 7 + }, + "updatedAt": "2022-05-24T12:02:33.225Z", + "createdAt": "2022-02-26T14:40:38.285Z", + "comments": { + "totalCount": 5 + } + } + }, + { + "node": { + "assignees": { + "edges": [ + { + "node": { + "avatarUrl": "https://cloudflare-ipfs.com/ipfs/Qmd3W5DuhgHirLHGVixi6V76LhCkZUz6pnFt5AJBiyvHye/avatar/186.jpg", + "login": "unique-cow" + } + } + ] + }, + "author": { + "login": "remorseful-horse" + }, + "repository": { + "nameWithOwner": "backstage/backstage" + }, + "title": "ea eligendi dolore", + "url": "http://mammoth-wick.biz", + "participants": { + "totalCount": 7 + }, + "updatedAt": "2022-07-02T12:23:03.701Z", + "createdAt": "2022-06-30T03:56:08.273Z", + "comments": { + "totalCount": 4 + } + } + }, + { + "node": { + "assignees": { + "edges": [ + { + "node": { + "avatarUrl": "https://cloudflare-ipfs.com/ipfs/Qmd3W5DuhgHirLHGVixi6V76LhCkZUz6pnFt5AJBiyvHye/avatar/605.jpg", + "login": "soft-insect" + } + } + ] + }, + "author": { + "login": "vengeful-fish" + }, + "repository": { + "nameWithOwner": "backstage/backstage" + }, + "title": "eum in esse", + "url": "https://immaculate-liability.info", + "participants": { + "totalCount": 4 + }, + "updatedAt": "2022-06-14T02:40:34.008Z", + "createdAt": "2022-04-07T14:46:48.442Z", + "comments": { + "totalCount": 2 + } + } + }, + { + "node": { + "assignees": { + "edges": [ + { + "node": { + "avatarUrl": "https://cloudflare-ipfs.com/ipfs/Qmd3W5DuhgHirLHGVixi6V76LhCkZUz6pnFt5AJBiyvHye/avatar/916.jpg", + "login": "wretched-cow" + } + } + ] + }, + "author": { + "login": "popular-insect" + }, + "repository": { + "nameWithOwner": "backstage/backstage" + }, + "title": "est voluptatem molestiae", + "url": "http://venerated-chocolate.biz", + "participants": { + "totalCount": 1 + }, + "updatedAt": "2021-10-08T18:02:11.052Z", + "createdAt": "2021-09-28T09:48:13.138Z", + "comments": { + "totalCount": 1 + } + } + }, + { + "node": { + "assignees": { + "edges": [ + { + "node": { + "avatarUrl": "https://cloudflare-ipfs.com/ipfs/Qmd3W5DuhgHirLHGVixi6V76LhCkZUz6pnFt5AJBiyvHye/avatar/218.jpg", + "login": "flawless-dog" + } + } + ] + }, + "author": { + "login": "made-up-lion" + }, + "repository": { + "nameWithOwner": "backstage/backstage" + }, + "title": "sunt atque corrupti", + "url": "https://secondary-flight.biz", + "participants": { + "totalCount": 7 + }, + "updatedAt": "2021-12-31T07:36:01.831Z", + "createdAt": "2022-03-29T20:52:30.083Z", + "comments": { + "totalCount": 6 + } + } + }, + { + "node": { + "assignees": { + "edges": [ + { + "node": { + "avatarUrl": "https://cloudflare-ipfs.com/ipfs/Qmd3W5DuhgHirLHGVixi6V76LhCkZUz6pnFt5AJBiyvHye/avatar/1099.jpg", + "login": "nervous-dog" + } + } + ] + }, + "author": { + "login": "inconsequential-cat" + }, + "repository": { + "nameWithOwner": "backstage/backstage" + }, + "title": "vel quo nam", + "url": "https://third-week.info", + "participants": { + "totalCount": 5 + }, + "updatedAt": "2022-03-06T07:42:44.049Z", + "createdAt": "2021-08-16T14:34:09.635Z", + "comments": { + "totalCount": 8 + } + } + }, + { + "node": { + "assignees": { + "edges": [ + { + "node": { + "avatarUrl": "https://cloudflare-ipfs.com/ipfs/Qmd3W5DuhgHirLHGVixi6V76LhCkZUz6pnFt5AJBiyvHye/avatar/688.jpg", + "login": "dark-dog" + } + } + ] + }, + "author": { + "login": "modest-rabbit" + }, + "repository": { + "nameWithOwner": "backstage/backstage" + }, + "title": "rerum non nam", + "url": "http://complete-registry.net", + "participants": { + "totalCount": 5 + }, + "updatedAt": "2022-05-04T02:09:20.355Z", + "createdAt": "2022-06-08T12:23:09.380Z", + "comments": { + "totalCount": 1 + } + } + }, + { + "node": { + "assignees": { + "edges": [ + { + "node": { + "avatarUrl": "https://cloudflare-ipfs.com/ipfs/Qmd3W5DuhgHirLHGVixi6V76LhCkZUz6pnFt5AJBiyvHye/avatar/489.jpg", + "login": "blond-insect" + } + } + ] + }, + "author": { + "login": "terrible-snake" + }, + "repository": { + "nameWithOwner": "backstage/backstage" + }, + "title": "accusamus quis non", + "url": "https://rosy-childhood.com", + "participants": { + "totalCount": 6 + }, + "updatedAt": "2021-12-14T12:46:15.628Z", + "createdAt": "2022-02-19T00:45:57.573Z", + "comments": { + "totalCount": 8 + } + } + }, + { + "node": { + "assignees": { + "edges": [ + { + "node": { + "avatarUrl": "https://cloudflare-ipfs.com/ipfs/Qmd3W5DuhgHirLHGVixi6V76LhCkZUz6pnFt5AJBiyvHye/avatar/1094.jpg", + "login": "creative-bird" + } + } + ] + }, + "author": { + "login": "grotesque-dog" + }, + "repository": { + "nameWithOwner": "backstage/backstage" + }, + "title": "consectetur id et", + "url": "http://some-innocent.info", + "participants": { + "totalCount": 8 + }, + "updatedAt": "2021-11-27T11:12:58.067Z", + "createdAt": "2021-12-10T00:15:14.640Z", + "comments": { + "totalCount": 8 + } + } + }, + { + "node": { + "assignees": { + "edges": [ + { + "node": { + "avatarUrl": "https://cloudflare-ipfs.com/ipfs/Qmd3W5DuhgHirLHGVixi6V76LhCkZUz6pnFt5AJBiyvHye/avatar/583.jpg", + "login": "drab-horse" + } + } + ] + }, + "author": { + "login": "acceptable-snake" + }, + "repository": { + "nameWithOwner": "backstage/backstage" + }, + "title": "ipsum beatae voluptas", + "url": "https://faithful-down.info", + "participants": { + "totalCount": 6 + }, + "updatedAt": "2022-08-13T17:03:33.381Z", + "createdAt": "2021-10-05T11:26:39.392Z", + "comments": { + "totalCount": 8 + } + } + }, + { + "node": { + "assignees": { + "edges": [ + { + "node": { + "avatarUrl": "https://cloudflare-ipfs.com/ipfs/Qmd3W5DuhgHirLHGVixi6V76LhCkZUz6pnFt5AJBiyvHye/avatar/578.jpg", + "login": "esteemed-bird" + } + } + ] + }, + "author": { + "login": "cultured-fish" + }, + "repository": { + "nameWithOwner": "backstage/backstage" + }, + "title": "odio perferendis maxime", + "url": "https://minty-tactics.info", + "participants": { + "totalCount": 2 + }, + "updatedAt": "2022-01-25T02:14:59.148Z", + "createdAt": "2021-09-23T04:02:15.225Z", + "comments": { + "totalCount": 4 + } + } + }, + { + "node": { + "assignees": { + "edges": [ + { + "node": { + "avatarUrl": "https://cloudflare-ipfs.com/ipfs/Qmd3W5DuhgHirLHGVixi6V76LhCkZUz6pnFt5AJBiyvHye/avatar/917.jpg", + "login": "quiet-bear" + } + } + ] + }, + "author": { + "login": "ill-fated-lion" + }, + "repository": { + "nameWithOwner": "backstage/backstage" + }, + "title": "sed enim laudantium", + "url": "https://welcome-provider.org", + "participants": { + "totalCount": 6 + }, + "updatedAt": "2022-02-24T23:08:19.320Z", + "createdAt": "2021-09-13T03:10:39.303Z", + "comments": { + "totalCount": 2 + } + } + }, + { + "node": { + "assignees": { + "edges": [ + { + "node": { + "avatarUrl": "https://cloudflare-ipfs.com/ipfs/Qmd3W5DuhgHirLHGVixi6V76LhCkZUz6pnFt5AJBiyvHye/avatar/973.jpg", + "login": "portly-crocodilia" + } + } + ] + }, + "author": { + "login": "antique-bird" + }, + "repository": { + "nameWithOwner": "backstage/backstage" + }, + "title": "enim accusamus consequuntur", + "url": "http://shady-impudence.net", + "participants": { + "totalCount": 2 + }, + "updatedAt": "2021-12-04T05:35:50.780Z", + "createdAt": "2021-12-21T11:44:33.940Z", + "comments": { + "totalCount": 9 + } + } + } + ] + } + } +} diff --git a/plugins/github-issues/dev/index.tsx b/plugins/github-issues/dev/index.tsx new file mode 100644 index 0000000000..a5f20ab9b9 --- /dev/null +++ b/plugins/github-issues/dev/index.tsx @@ -0,0 +1,66 @@ +/* + * Copyright 2021 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import React from 'react'; +import { createDevApp } from '@backstage/dev-utils'; +import { + CatalogApi, + catalogApiRef, + EntityProvider, +} from '@backstage/plugin-catalog-react'; + +import { gitHubIssuesPlugin, GitHubIssuesPage } from '../src'; +import { GitHubIssuesApi, gitHubIssuesApiRef } from '../src/api'; + +import testData from './__fixtures__/component-issues-data.json'; + +createDevApp() + .registerPlugin(gitHubIssuesPlugin) + .registerApi({ + api: gitHubIssuesApiRef, + deps: {}, + factory: () => + ({ + fetchIssuesByRepoFromGitHub: async () => testData, + } as GitHubIssuesApi), + }) + .registerApi({ + api: catalogApiRef, + deps: {}, + factory: () => + ({ + getEntities: () => ({}), + } as CatalogApi), + }) + .addPage({ + title: 'Component Issues', + element: ( + + + + ), + }) + .render(); diff --git a/plugins/github-issues/package.json b/plugins/github-issues/package.json index 109c825994..f64d849ab5 100644 --- a/plugins/github-issues/package.json +++ b/plugins/github-issues/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-github-issues", - "version": "0.1.0-next.0", + "version": "0.1.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -21,29 +21,29 @@ "prepack": "backstage-cli package prepack", "postpack": "backstage-cli package postpack" }, - "prettier": "@spotify/prettier-config", "dependencies": { "@backstage/catalog-model": "^1.0.3", - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", - "@backstage/integration": "^1.3.0-next.0", - "@backstage/plugin-catalog-react": "^1.1.3-next.2", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", + "@backstage/errors": "^1.1.0", + "@backstage/integration": "^1.3.0", + "@backstage/plugin-catalog-react": "^1.1.3", "@backstage/theme": "^0.2.15", "@material-ui/core": "^4.12.4", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "^4.0.0-alpha.61", "luxon": "^2.4.0", "octokit": "^2.0.4", - "react-use": "^17.2.4" + "react-use": "^17.4.0" }, "peerDependencies": { "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/core-app-api": "^1.0.5", + "@backstage/dev-utils": "^1.0.5", + "@backstage/test-utils": "^1.1.3", "@spotify/prettier-config": "^14.0.0", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", @@ -52,8 +52,7 @@ "@types/node": "*", "@types/react": "^16.13.1 || ^17.0.0", "cross-fetch": "^3.1.5", - "msw": "^0.44.0", - "prettier": "^2.7.1" + "msw": "^0.44.0" }, "files": [ "dist" diff --git a/plugins/github-issues/src/api/gitHubIssuesApi.test.ts b/plugins/github-issues/src/api/gitHubIssuesApi.test.ts new file mode 100644 index 0000000000..4d1c3ffff3 --- /dev/null +++ b/plugins/github-issues/src/api/gitHubIssuesApi.test.ts @@ -0,0 +1,300 @@ +/* + * 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. + */ +const mockGraphQLQuery = jest.fn(() => ({})); +jest.mock('octokit', () => ({ + Octokit: jest.fn(() => ({ graphql: mockGraphQLQuery })), +})); + +import { ConfigApi, ErrorApi } from '@backstage/core-plugin-api'; +import { ForwardedError } from '@backstage/errors'; +import { gitHubIssuesApi } from './gitHubIssuesApi'; + +describe('gitHubIssuesApi', () => { + describe('fetchIssuesByRepoFromGitHub', () => { + it('should call GitHub API with correct query with fragment for each repo', async () => { + const api = gitHubIssuesApi( + { getAccessToken: jest.fn() }, + { + getOptionalConfigArray: jest.fn(), + } as unknown as ConfigApi, + { post: jest.fn() } as unknown as ErrorApi, + ); + + await api.fetchIssuesByRepoFromGitHub( + ['mrwolny/yo-yo', 'mrwolny/yoyo', 'mrwolny/yo.yo'], + 10, + ); + expect(mockGraphQLQuery).toHaveBeenCalledTimes(1); + expect(mockGraphQLQuery).toHaveBeenCalledWith( + '\n' + + ' \n' + + ' fragment issues on Repository {\n' + + ' issues(\n' + + ' states: OPEN\n' + + ' first: 10\n' + + ' orderBy: { field: UPDATED_AT, direction: DESC }\n' + + ' ) {\n' + + ' totalCount\n' + + ' edges {\n' + + ' node {\n' + + ' assignees(first: 10) {\n' + + ' edges {\n' + + ' node {\n' + + ' avatarUrl\n' + + ' login\n' + + ' }\n' + + ' }\n' + + ' }\n' + + ' author {\n' + + ' login\n' + + ' }\n' + + ' repository {\n' + + ' nameWithOwner\n' + + ' }\n' + + ' title\n' + + ' url\n' + + ' participants {\n' + + ' totalCount\n' + + ' }\n' + + ' updatedAt\n' + + ' createdAt\n' + + ' comments(last: 1) {\n' + + ' totalCount\n' + + ' }\n' + + ' }\n' + + ' }\n' + + ' }\n' + + ' }\n' + + ' \n' + + '\n' + + ' query {\n' + + ' \n' + + ' yoyo: repository(name: "yo-yo", owner: "mrwolny") {\n' + + ' ...issues\n' + + ' }\n' + + ' ,\n' + + ' yoyox: repository(name: "yoyo", owner: "mrwolny") {\n' + + ' ...issues\n' + + ' }\n' + + ' ,\n' + + ' yoyoxx: repository(name: "yo.yo", owner: "mrwolny") {\n' + + ' ...issues\n' + + ' }\n' + + ' \n' + + ' } \n' + + ' ', + ); + }); + }); + + it('should return data for repos with successfully retrieved issues when GitHub returns partial failure', async () => { + mockGraphQLQuery.mockImplementationOnce(() => + Promise.reject({ + data: { + yoyo: { + issues: { + totalCount: 1, + edges: [ + { + node: { + assignees: { + edges: [], + }, + author: { + login: 'mrwolny', + }, + repository: { + nameWithOwner: 'mrwolny/yo-yo', + }, + title: "It's the ISSUE!", + url: 'https://github.com/mrwolny/yo-yo/issues/1', + participants: { + totalCount: 1, + }, + updatedAt: '2022-07-04T18:47:33Z', + createdAt: '2022-06-23T18:14:26Z', + comments: { + totalCount: 4, + }, + }, + }, + ], + }, + }, + notfound: null, + }, + errors: [ + { + type: 'NOT_FOUND', + path: ['notfound'], + locations: [ + { + line: 48, + column: 9, + }, + ], + message: + "Could not resolve to a Repository with the name 'notfound/notfound'.", + }, + ], + }), + ); + + const api = gitHubIssuesApi( + { getAccessToken: jest.fn() }, + { + getOptionalConfigArray: jest.fn(), + } as unknown as ConfigApi, + { post: jest.fn() } as unknown as ErrorApi, + ); + + const data = await api.fetchIssuesByRepoFromGitHub( + ['mrwolny/yo-yo', 'mrwolny/notfound'], + 10, + ); + + expect(data).toEqual({ + 'mrwolny/yo-yo': { + issues: { + totalCount: 1, + edges: [ + { + node: { + assignees: { + edges: [], + }, + author: { + login: 'mrwolny', + }, + repository: { + nameWithOwner: 'mrwolny/yo-yo', + }, + title: "It's the ISSUE!", + url: 'https://github.com/mrwolny/yo-yo/issues/1', + participants: { + totalCount: 1, + }, + updatedAt: '2022-07-04T18:47:33Z', + createdAt: '2022-06-23T18:14:26Z', + comments: { + totalCount: 4, + }, + }, + }, + ], + }, + }, + }); + }); + + it('should return empty object when GitHub returns failure with no data', async () => { + mockGraphQLQuery.mockImplementationOnce(() => + Promise.reject({ + data: { + notfound: null, + }, + errors: [ + { + type: 'NOT_FOUND', + path: ['notfound'], + locations: [ + { + line: 48, + column: 9, + }, + ], + message: + "Could not resolve to a Repository with the name 'notfound/notfound'.", + }, + ], + }), + ); + + const api = gitHubIssuesApi( + { getAccessToken: jest.fn() }, + { + getOptionalConfigArray: jest.fn(), + } as unknown as ConfigApi, + { post: jest.fn() } as unknown as ErrorApi, + ); + + const data = await api.fetchIssuesByRepoFromGitHub( + ['mrwolny/notfound'], + 10, + ); + + expect(data).toEqual({}); + }); + + it('should post error to the backstage error API when GitHub returns failure', async () => { + mockGraphQLQuery.mockImplementationOnce(() => + Promise.reject({ + data: { + notfound: null, + }, + errors: [ + { + type: 'NOT_FOUND', + path: ['notfound'], + locations: [ + { + line: 48, + column: 9, + }, + ], + message: + "Could not resolve to a Repository with the name 'notfound/notfound'.", + }, + ], + }), + ); + + const mockErrorApi = { post: jest.fn() }; + + const api = gitHubIssuesApi( + { getAccessToken: jest.fn() }, + { + getOptionalConfigArray: jest.fn(), + } as unknown as ConfigApi, + mockErrorApi as unknown as ErrorApi, + ); + + await api.fetchIssuesByRepoFromGitHub(['mrwolny/notfound'], 10); + + expect(mockErrorApi.post).toHaveBeenCalledTimes(1); + expect(mockErrorApi.post).toHaveBeenCalledWith( + new ForwardedError('GitHub Issues Plugin failure', { + data: { + notfound: null, + }, + errors: [ + { + type: 'NOT_FOUND', + path: ['notfound'], + locations: [ + { + line: 48, + column: 9, + }, + ], + message: + "Could not resolve to a Repository with the name 'notfound/notfound'.", + }, + ], + }), + ); + }); +}); diff --git a/plugins/github-issues/src/api/gitHubIssuesApi.ts b/plugins/github-issues/src/api/gitHubIssuesApi.ts new file mode 100644 index 0000000000..816345940c --- /dev/null +++ b/plugins/github-issues/src/api/gitHubIssuesApi.ts @@ -0,0 +1,217 @@ +/* + * 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 { Octokit } from 'octokit'; +import { + createApiRef, + ConfigApi, + ErrorApi, + OAuthApi, +} from '@backstage/core-plugin-api'; +import { readGitHubIntegrationConfigs } from '@backstage/integration'; +import { ForwardedError } from '@backstage/errors'; + +/** @internal */ +export type Assignee = { + avatarUrl: string; + login: string; +}; + +/** @internal */ +export type EdgesWithNodes = { + edges: Array<{ + node: T; + }>; +}; + +/** @internal */ +export type IssueAuthor = { + login: string; +}; + +/** @internal */ +export type Issue = { + assignees: EdgesWithNodes; + author: IssueAuthor; + repository: { + nameWithOwner: string; + }; + title: string; + url: string; + participants: { + totalCount: number; + }; + createdAt: string; + updatedAt: string; + comments: { + totalCount: number; + }; +}; + +/** @internal */ +export type RepoIssues = { + issues: { + totalCount: number; + } & EdgesWithNodes; +}; + +/** @internal */ +export type IssuesByRepo = Record; + +/** @internal */ +export type GitHubIssuesApi = ReturnType; + +/** @internal */ +export const gitHubIssuesApiRef = createApiRef({ + id: 'plugin.githubissues.service', +}); + +/** @internal */ +export const gitHubIssuesApi = ( + githubAuthApi: OAuthApi, + configApi: ConfigApi, + errorApi: ErrorApi, +) => { + let octokit: Octokit; + + const getOctokit = async () => { + const baseUrl = readGitHubIntegrationConfigs( + configApi.getOptionalConfigArray('integrations.github') ?? [], + )[0].apiBaseUrl; + + const token = await githubAuthApi.getAccessToken(['repo']); + + if (!octokit) { + octokit = new Octokit({ auth: token, ...(baseUrl && { baseUrl }) }); + } + + return octokit.graphql; + }; + + const fetchIssuesByRepoFromGitHub = async ( + repos: Array, + itemsPerRepo: number, + ): Promise => { + const graphql = await getOctokit(); + const safeNames: Array = []; + + const repositories = repos.map(repo => { + const [owner, name] = repo.split('/'); + + const safeNameRegex = /-|\./gi; + let safeName = name.replace(safeNameRegex, ''); + + while (safeNames.includes(safeName)) { + safeName += 'x'; + } + + safeNames.push(safeName); + + return { + safeName, + name, + owner, + }; + }); + + let issuesByRepo: IssuesByRepo = {}; + try { + issuesByRepo = await graphql( + createIssueByRepoQuery(repositories, itemsPerRepo), + ); + } catch (e) { + if (e.data) { + issuesByRepo = e.data; + } + + errorApi.post(new ForwardedError('GitHub Issues Plugin failure', e)); + } + + return repositories.reduce((acc, { safeName, name, owner }) => { + if (issuesByRepo[safeName]) { + acc[`${owner}/${name}`] = issuesByRepo[safeName]; + } + + return acc; + }, {} as IssuesByRepo); + }; + + return { fetchIssuesByRepoFromGitHub }; +}; + +function createIssueByRepoQuery( + repositories: Array<{ + safeName: string; + name: string; + owner: string; + }>, + itemsPerRepo: number, +): string { + const fragment = ` + fragment issues on Repository { + issues( + states: OPEN + first: ${itemsPerRepo} + orderBy: { field: UPDATED_AT, direction: DESC } + ) { + totalCount + edges { + node { + assignees(first: 10) { + edges { + node { + avatarUrl + login + } + } + } + author { + login + } + repository { + nameWithOwner + } + title + url + participants { + totalCount + } + updatedAt + createdAt + comments(last: 1) { + totalCount + } + } + } + } + } + `; + + const query = ` + ${fragment} + + query { + ${repositories.map( + ({ safeName, name, owner }) => ` + ${safeName}: repository(name: "${name}", owner: "${owner}") { + ...issues + } + `, + )} + } + `; + + return query; +} diff --git a/plugins/github-issues/src/api/index.ts b/plugins/github-issues/src/api/index.ts new file mode 100644 index 0000000000..4cc3372c45 --- /dev/null +++ b/plugins/github-issues/src/api/index.ts @@ -0,0 +1,16 @@ +/* + * Copyright 2022 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +export * from './gitHubIssuesApi'; diff --git a/plugins/github-issues/src/components/GitHubIssues/GitHubIssues.test.tsx b/plugins/github-issues/src/components/GitHubIssues/GitHubIssues.test.tsx new file mode 100644 index 0000000000..33eec79359 --- /dev/null +++ b/plugins/github-issues/src/components/GitHubIssues/GitHubIssues.test.tsx @@ -0,0 +1,161 @@ +/* + * 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 { renderInTestApp, TestApiProvider } from '@backstage/test-utils'; +import { + EntityProvider, + catalogApiRef, + CatalogApi, +} from '@backstage/plugin-catalog-react'; +import { Entity } from '@backstage/catalog-model'; + +import { GitHubIssuesApi, gitHubIssuesApiRef, Issue } from '../../api'; + +import { GitHubIssues } from './GitHubIssues'; + +const getTestIssue = (overwrites: Partial = {}): { node: Issue } => ({ + node: { + ...{ + assignees: { + edges: [ + { + node: { + avatarUrl: + 'https://cloudflare-ipfs.com/ipfs/Qmd3W5DuhgHirLHGVixi6V76LhCkZUz6pnFt5AJBiyvHye/avatar/1112.jpg', + login: 'worthless-horse', + }, + }, + ], + }, + author: { + login: 'next-dog', + }, + repository: { + nameWithOwner: 'backstage/backstage', + }, + title: 'quasi labore qui', + url: 'http://flowery-muscatel.net', + participants: { + totalCount: 3, + }, + updatedAt: '2022-05-02T09:46:35.885Z', + createdAt: '2022-06-03T07:11:22.320Z', + comments: { + totalCount: 6, + }, + }, + ...overwrites, + }, +}); + +jest + .useFakeTimers() + .setSystemTime(new Date('2020-04-20T08:15:47.614Z').getTime()); + +const entityComponent = { + metadata: { + annotations: { + 'github.com/project-slug': 'backstage/backstage', + }, + name: 'backstage', + }, + apiVersion: 'backstage.io/v1alpha1', + kind: 'Component', +} as unknown as Entity; + +const mockCatalogApi = { + getEntities: () => ({}), +} as CatalogApi; + +describe('GitHubIssues', () => { + it('should render correctly when there are no issues in GitHub', async () => { + const mockApi = { + fetchIssuesByRepoFromGitHub: async () => ({ + backstage: { + issues: { + totalCount: 0, + edges: [], + }, + }, + }), + } as GitHubIssuesApi; + + const apis = [ + [gitHubIssuesApiRef, mockApi], + [catalogApiRef, mockCatalogApi], + ] as const; + + const { getByTestId } = await renderInTestApp( + + + + + , + ); + + expect(getByTestId('no-issues-msg')).toHaveTextContent( + 'Hurray! No Issues 🚀', + ); + }); + + it('should render correctly', async () => { + const testIssue = getTestIssue({ + createdAt: '2020-04-19T10:15:47.614Z', + updatedAt: '2020-04-20T00:15:47.614Z', + }); + + const mockApi = { + fetchIssuesByRepoFromGitHub: async () => ({ + backstage: { + issues: { + totalCount: 1, + edges: [testIssue], + }, + }, + }), + } as GitHubIssuesApi; + const apis = [ + [gitHubIssuesApiRef, mockApi], + [catalogApiRef, mockCatalogApi], + ] as const; + + const { getByText, getByTestId } = await renderInTestApp( + + + + + , + ); + + getByText('All repositories (1 Issue)'); + + expect(getByTestId(`issue-${testIssue.node.url}`)).toHaveTextContent( + testIssue.node.title, + ); + + expect(getByTestId(`issue-${testIssue.node.url}`)).toHaveTextContent( + testIssue.node.repository.nameWithOwner, + ); + + expect(getByTestId(`issue-${testIssue.node.url}`)).toHaveTextContent( + `Created at: 22 hours ago by ${testIssue.node.author.login}`, + ); + + expect(getByTestId(`issue-${testIssue.node.url}`)).toHaveTextContent( + `Last update at: 8 hours ago`, + ); + }); +}); diff --git a/plugins/github-issues/src/components/GitHubIssues/GitHubIssues.tsx b/plugins/github-issues/src/components/GitHubIssues/GitHubIssues.tsx index 5380c8eb22..574c15d3b3 100644 --- a/plugins/github-issues/src/components/GitHubIssues/GitHubIssues.tsx +++ b/plugins/github-issues/src/components/GitHubIssues/GitHubIssues.tsx @@ -20,12 +20,9 @@ import { InfoCard, Progress } from '@backstage/core-components'; import RefreshIcon from '@material-ui/icons/Refresh'; import { useEntityGitHubRepositories } from '../../hooks/useEntityGitHubRepositories'; -import { - RepoIssues, - useGetIssuesByRepoFromGitHub, -} from '../../hooks/useGetIssuesByRepoFromGitHub'; +import { useGetIssuesByRepoFromGitHub } from '../../hooks/useGetIssuesByRepoFromGitHub'; -import { IssueList } from './IssuesList'; +import { IssuesList } from './IssuesList'; import { NoRepositoriesInfo } from './NoRepositoriesInfo'; /** @@ -39,29 +36,12 @@ export type GitHubIssuesProps = { export const GitHubIssues = (props: GitHubIssuesProps) => { const { itemsPerPage = 10, itemsPerRepo = 40 } = props; - const [isLoading, setIsLoading] = React.useState(true); - - const [issuesByRepository, setIssuesByRepository] = - React.useState>(); - const { repositories } = useEntityGitHubRepositories(); - const getIssues = useGetIssuesByRepoFromGitHub(); - - const fetchGitHubIssues = React.useCallback(async () => { - setIsLoading(true); - const issuesByRepo = await getIssues(repositories, itemsPerRepo); - - setIssuesByRepository(issuesByRepo); - setIsLoading(false); - }, [itemsPerRepo, getIssues, repositories]); - - React.useEffect(() => { - if (repositories.length) { - fetchGitHubIssues(); - } else { - setIsLoading(false); - } - }, [repositories.length, fetchGitHubIssues]); + const { + isLoading, + gitHubIssuesByRepo: issuesByRepository, + retry, + } = useGetIssuesByRepoFromGitHub(repositories, itemsPerRepo); if (!repositories.length) { return ; @@ -72,7 +52,7 @@ export const GitHubIssues = (props: GitHubIssuesProps) => { title={ Open GitHub Issues - + @@ -80,7 +60,7 @@ export const GitHubIssues = (props: GitHubIssuesProps) => { > {isLoading && } - diff --git a/plugins/github-issues/src/components/GitHubIssues/IssueCard/IssueCard.tsx b/plugins/github-issues/src/components/GitHubIssues/IssueCard/IssueCard.tsx index 95658fb343..ccf30a9a84 100644 --- a/plugins/github-issues/src/components/GitHubIssues/IssueCard/IssueCard.tsx +++ b/plugins/github-issues/src/components/GitHubIssues/IssueCard/IssueCard.tsx @@ -59,7 +59,7 @@ export const IssueCard = (props: IssueCardProps) => { } = props; return ( - + diff --git a/plugins/github-issues/src/components/GitHubIssues/IssuesList/IssuesList.tsx b/plugins/github-issues/src/components/GitHubIssues/IssuesList/IssuesList.tsx index f279294928..b46eab22b6 100644 --- a/plugins/github-issues/src/components/GitHubIssues/IssuesList/IssuesList.tsx +++ b/plugins/github-issues/src/components/GitHubIssues/IssuesList/IssuesList.tsx @@ -19,14 +19,14 @@ import { Box } from '@material-ui/core'; import { Pagination } from '@material-ui/lab'; import { IssueCard } from '../IssueCard'; -import { RepoIssues } from '../../../hooks/useGetIssuesByRepoFromGitHub'; +import { IssuesByRepo } from '../../../api'; import { RepositoryFilters } from './Filters'; export type PluginMode = 'page' | 'card'; export type IssueListProps = { itemsPerPage?: number; - issuesByRepository?: Record; + issuesByRepository?: IssuesByRepo; }; const getIssuesCountForFilterLabel = ( @@ -37,7 +37,7 @@ const getIssuesCountForFilterLabel = ( issuesAvailable < totalIssues ? '*' : '' }`; -export const IssueList = ({ +export const IssuesList = ({ itemsPerPage = 10, issuesByRepository, }: IssueListProps) => { @@ -140,6 +140,7 @@ export const IssueList = ({ index, ) => ( Hurray! No Issues 🚀 +

Hurray! No Issues 🚀

)} {issues.length / itemsPerPage > 1 ? ( ({})); -jest.mock('./useOctokitGraphQL', () => ({ - useOctokitGraphQL: jest.fn(() => mockGraphQLQuery), -})); - -import React from 'react'; -import { render } from '@testing-library/react'; -import { useGetIssuesByRepoFromGitHub } from './useGetIssuesByRepoFromGitHub'; - -describe('useGetIssuesBeRepoFromGitHub', () => { - it('should call GitHub API with correct query with fragment for each repo', async () => { - const Helper = () => { - const getIssues = useGetIssuesByRepoFromGitHub(); - - getIssues(['mrwolny/yo-yo', 'mrwolny/yoyo', 'mrwolny/yo.yo'], 10); - - return
; - }; - - render(); - - expect(mockGraphQLQuery).toHaveBeenCalledTimes(1); - expect(mockGraphQLQuery).toHaveBeenCalledWith( - '\n' + - ' \n' + - ' fragment issues on Repository {\n' + - ' issues(\n' + - ' states: OPEN\n' + - ' first: 10\n' + - ' orderBy: { field: UPDATED_AT, direction: DESC }\n' + - ' ) {\n' + - ' totalCount\n' + - ' edges {\n' + - ' node {\n' + - ' assignees(first: 10) {\n' + - ' edges {\n' + - ' node {\n' + - ' avatarUrl\n' + - ' login\n' + - ' }\n' + - ' }\n' + - ' }\n' + - ' author {\n' + - ' login\n' + - ' avatarUrl\n' + - ' url\n' + - ' }\n' + - ' repository {\n' + - ' nameWithOwner\n' + - ' }\n' + - ' title\n' + - ' url\n' + - ' participants {\n' + - ' totalCount\n' + - ' }\n' + - ' updatedAt\n' + - ' createdAt\n' + - ' comments(last: 1) {\n' + - ' totalCount\n' + - ' }\n' + - ' }\n' + - ' }\n' + - ' }\n' + - ' }\n' + - ' \n' + - '\n' + - ' query {\n' + - ' \n' + - ' yoyo: repository(name: "yo-yo", owner: "mrwolny") {\n' + - ' ...issues\n' + - ' }\n' + - ' ,\n' + - ' yoyox: repository(name: "yoyo", owner: "mrwolny") {\n' + - ' ...issues\n' + - ' }\n' + - ' ,\n' + - ' yoyoxx: repository(name: "yo.yo", owner: "mrwolny") {\n' + - ' ...issues\n' + - ' }\n' + - ' \n' + - ' } \n' + - ' ', - ); - }); -}); diff --git a/plugins/github-issues/src/hooks/useGetIssuesByRepoFromGitHub.ts b/plugins/github-issues/src/hooks/useGetIssuesByRepoFromGitHub.ts index 271cd6c741..8d1d0c2056 100644 --- a/plugins/github-issues/src/hooks/useGetIssuesByRepoFromGitHub.ts +++ b/plugins/github-issues/src/hooks/useGetIssuesByRepoFromGitHub.ts @@ -13,161 +13,31 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import React from 'react'; -import { useOctokitGraphQL } from './useOctokitGraphQL'; +import { useApi } from '@backstage/core-plugin-api'; -type Assignee = { - avatarUrl: string; - login: string; -}; +import useAsyncRetry from 'react-use/lib/useAsyncRetry'; +import { gitHubIssuesApiRef } from '../api'; -export type EdgesWithNodes = { - edges: Array<{ - node: T; - }>; -}; - -export type Node = { - node: T; -}; - -type IssueAuthor = { - login: string; -}; - -export type Issue = { - assignees: EdgesWithNodes; - author: IssueAuthor; - repository: { - nameWithOwner: string; - }; - title: string; - url: string; - participants: { - totalCount: number; - }; - createdAt: string; - updatedAt: string; - comments: { - totalCount: number; - }; -}; - -export type RepoIssues = { - issues: { - totalCount: number; - } & EdgesWithNodes; -}; - -export type RepoIssuesQueryResults = Record; - -const createQuery = ( - repositories: Array<{ - safeName: string; - name: string; - owner: string; - }>, +export const useGetIssuesByRepoFromGitHub = ( + repos: Array, itemsPerRepo: number, -): string => { - const fragment = ` - fragment issues on Repository { - issues( - states: OPEN - first: ${itemsPerRepo} - orderBy: { field: UPDATED_AT, direction: DESC } - ) { - totalCount - edges { - node { - assignees(first: 10) { - edges { - node { - avatarUrl - login - } - } - } - author { - login - avatarUrl - url - } - repository { - nameWithOwner - } - title - url - participants { - totalCount - } - updatedAt - createdAt - comments(last: 1) { - totalCount - } - } - } - } - } - `; +) => { + const gitHubIssuesApi = useApi(gitHubIssuesApiRef); - const query = ` - ${fragment} - - query { - ${repositories.map( - ({ safeName, name, owner }) => ` - ${safeName}: repository(name: "${name}", owner: "${owner}") { - ...issues - } - `, - )} - } - `; - - return query; -}; - -export const useGetIssuesByRepoFromGitHub = () => { - const graphql = useOctokitGraphQL(); - - const fn = React.useRef( - async ( - repos: Array, - itemsPerRepo: number, - ): Promise> => { - const safeNames: Array = []; - - const repositories = repos.map(repo => { - const [owner, name] = repo.split('/'); - - const safeNameRegex = /-|\./gi; - let safeName = name.replace(safeNameRegex, ''); - - while (safeNames.includes(safeName)) { - safeName += 'x'; - } - - safeNames.push(safeName); - - return { - safeName, - name, - owner, - }; - }); - - const issuesByRepo: RepoIssuesQueryResults = await graphql( - createQuery(repositories, itemsPerRepo), + const { + value: issues, + loading: isLoading, + retry, + } = useAsyncRetry(async () => { + if (repos.length > 0) { + return await gitHubIssuesApi.fetchIssuesByRepoFromGitHub( + repos, + itemsPerRepo, ); + } - return repositories.reduce((acc, { safeName, name, owner }) => { - acc[`${owner}/${name}`] = issuesByRepo[safeName]; + return {}; + }, [repos]); - return acc; - }, {} as Record); - }, - ); - - return fn.current; + return { isLoading, gitHubIssuesByRepo: issues, retry }; }; diff --git a/plugins/github-issues/src/hooks/useOctokitGraphQL.ts b/plugins/github-issues/src/hooks/useOctokitGraphQL.ts deleted file mode 100644 index 6b783efd6f..0000000000 --- a/plugins/github-issues/src/hooks/useOctokitGraphQL.ts +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright 2022 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import { Octokit } from 'octokit'; -import { - useApi, - githubAuthApiRef, - configApiRef, -} from '@backstage/core-plugin-api'; -import { readGitHubIntegrationConfigs } from '@backstage/integration'; - -let octokit: Octokit; - -export const useOctokitGraphQL = () => { - const auth = useApi(githubAuthApiRef); - const config = useApi(configApiRef); - - const baseUrl = readGitHubIntegrationConfigs( - config.getOptionalConfigArray('integrations.github') ?? [], - )[0].apiBaseUrl; - - return (path: string, options?: any): Promise => - auth - .getAccessToken(['repo']) - .then((token: string) => { - if (!octokit) { - octokit = new Octokit({ auth: token, ...(baseUrl && { baseUrl }) }); - } - - return octokit; - }) - .then(octokitInstance => { - return octokitInstance.graphql(path, options); - }); -}; diff --git a/plugins/github-issues/src/plugin.ts b/plugins/github-issues/src/plugin.ts index ece3fd09a2..3d845f4adf 100644 --- a/plugins/github-issues/src/plugin.ts +++ b/plugins/github-issues/src/plugin.ts @@ -15,15 +15,32 @@ */ import { createPlugin, + createApiFactory, createComponentExtension, createRoutableExtension, + configApiRef, + errorApiRef, + githubAuthApiRef, } from '@backstage/core-plugin-api'; +import { gitHubIssuesApi, gitHubIssuesApiRef } from './api'; import { rootRouteRef } from './routes'; /** @public */ export const gitHubIssuesPlugin = createPlugin({ id: 'github-issues', + apis: [ + createApiFactory({ + api: gitHubIssuesApiRef, + deps: { + configApi: configApiRef, + githubAuthApi: githubAuthApiRef, + errorApi: errorApiRef, + }, + factory: ({ configApi, githubAuthApi, errorApi }) => + gitHubIssuesApi(githubAuthApi, configApi, errorApi), + }), + ], routes: { root: rootRouteRef, }, diff --git a/plugins/github-pull-requests-board/CHANGELOG.md b/plugins/github-pull-requests-board/CHANGELOG.md index e797a79a9b..8ff761dfc3 100644 --- a/plugins/github-pull-requests-board/CHANGELOG.md +++ b/plugins/github-pull-requests-board/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-github-pull-requests-board +## 0.1.2 + +### Patch Changes + +- 73268a67ff: Fixed rendering when PR contains references to deleted Github accounts +- Updated dependencies + - @backstage/integration@1.3.0 + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + ## 0.1.2-next.1 ### Patch Changes diff --git a/plugins/github-pull-requests-board/package.json b/plugins/github-pull-requests-board/package.json index 566e8e5942..e8d22dcf6f 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.2-next.1", + "version": "0.1.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -36,10 +36,10 @@ }, "dependencies": { "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", - "@backstage/integration": "^1.3.0-next.0", - "@backstage/plugin-catalog-react": "^1.1.3-next.2", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", + "@backstage/integration": "^1.3.0", + "@backstage/plugin-catalog-react": "^1.1.3", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -49,9 +49,9 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/dev-utils": "^1.0.5", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/gitops-profiles/CHANGELOG.md b/plugins/gitops-profiles/CHANGELOG.md index e3f526e483..83407f23b7 100644 --- a/plugins/gitops-profiles/CHANGELOG.md +++ b/plugins/gitops-profiles/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-gitops-profiles +## 0.3.26 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + ## 0.3.26-next.1 ### Patch Changes diff --git a/plugins/gitops-profiles/package.json b/plugins/gitops-profiles/package.json index e6d87d83da..078b83c61e 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.26-next.1", + "version": "0.3.26", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -35,8 +35,8 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -48,10 +48,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/core-app-api": "^1.0.5", + "@backstage/dev-utils": "^1.0.5", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/gocd/CHANGELOG.md b/plugins/gocd/CHANGELOG.md index c946ac8c5b..62f1019c62 100644 --- a/plugins/gocd/CHANGELOG.md +++ b/plugins/gocd/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-gocd +## 0.1.14 + +### Patch Changes + +- 29f782eb37: Updated dependency `@types/luxon` to `^3.0.0`. +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + ## 0.1.14-next.1 ### Patch Changes diff --git a/plugins/gocd/package.json b/plugins/gocd/package.json index e3dd9c7498..30a2b78c32 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.14-next.1", + "version": "0.1.14", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -32,10 +32,10 @@ }, "dependencies": { "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", "@backstage/errors": "^1.1.0", - "@backstage/plugin-catalog-react": "^1.1.3-next.2", + "@backstage/plugin-catalog-react": "^1.1.3", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -49,10 +49,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/core-app-api": "^1.0.5", + "@backstage/dev-utils": "^1.0.5", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/graphiql/CHANGELOG.md b/plugins/graphiql/CHANGELOG.md index cd9eefb43e..dad0b78969 100644 --- a/plugins/graphiql/CHANGELOG.md +++ b/plugins/graphiql/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-graphiql +## 0.2.40 + +### Patch Changes + +- 3a8ab72248: Minor internal tweak to lazy loading in order to improve module compatibility. +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + ## 0.2.40-next.1 ### Patch Changes diff --git a/plugins/graphiql/package.json b/plugins/graphiql/package.json index a23c349946..a5525f0353 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.40-next.1", + "version": "0.2.40", "private": false, "publishConfig": { "access": "public", @@ -34,8 +34,8 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -49,10 +49,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/core-app-api": "^1.0.5", + "@backstage/dev-utils": "^1.0.5", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/graphiql/src/components/GraphiQLBrowser/GraphiQLBrowser.tsx b/plugins/graphiql/src/components/GraphiQLBrowser/GraphiQLBrowser.tsx index 87419aec94..dd38f513be 100644 --- a/plugins/graphiql/src/components/GraphiQLBrowser/GraphiQLBrowser.tsx +++ b/plugins/graphiql/src/components/GraphiQLBrowser/GraphiQLBrowser.tsx @@ -22,7 +22,9 @@ import { GraphQLEndpoint } from '../../lib/api'; import { BackstageTheme } from '@backstage/theme'; import { Progress } from '@backstage/core-components'; -const GraphiQL = React.lazy(() => import('graphiql')); +const GraphiQL = React.lazy(() => + import('graphiql').then(m => ({ default: m.GraphiQL })), +); const useStyles = makeStyles(theme => ({ root: { diff --git a/plugins/graphql-backend/CHANGELOG.md b/plugins/graphql-backend/CHANGELOG.md index e41866c272..88f7454741 100644 --- a/plugins/graphql-backend/CHANGELOG.md +++ b/plugins/graphql-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-graphql-backend +## 0.1.25 + +### Patch Changes + +- fa3eeee92d: Updated dependency `@graphql-tools/schema` to `^9.0.0`. +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/plugin-catalog-graphql@0.3.12 + ## 0.1.25-next.0 ### Patch Changes diff --git a/plugins/graphql-backend/package.json b/plugins/graphql-backend/package.json index 64cd268e00..20be68c811 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.25-next.0", + "version": "0.1.25", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,10 +34,10 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.15.0-next.0", + "@backstage/backend-common": "^0.15.0", "@backstage/config": "^1.0.1", - "@backstage/plugin-catalog-graphql": "^0.3.11", - "@graphql-tools/schema": "^8.3.1", + "@backstage/plugin-catalog-graphql": "^0.3.12", + "@graphql-tools/schema": "^9.0.0", "@types/express": "^4.17.6", "apollo-server": "^3.0.0", "apollo-server-express": "^3.0.0", @@ -51,7 +51,7 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.0", + "@backstage/cli": "^0.18.1", "@types/supertest": "^2.0.8", "msw": "^0.44.0", "supertest": "^6.1.3" diff --git a/plugins/home/CHANGELOG.md b/plugins/home/CHANGELOG.md index f4535043c0..8a340590ed 100644 --- a/plugins/home/CHANGELOG.md +++ b/plugins/home/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-home +## 0.4.24 + +### Patch Changes + +- df7b9158b8: Add wrap-around for the listing of tools to prevent increasing width with name length. +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + - @backstage/plugin-stack-overflow@0.1.4 + ## 0.4.24-next.2 ### Patch Changes diff --git a/plugins/home/package.json b/plugins/home/package.json index 11e8a75c05..3f87d10771 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.4.24-next.2", + "version": "0.4.24", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -36,10 +36,10 @@ "dependencies": { "@backstage/catalog-model": "^1.1.0", "@backstage/config": "^1.0.1", - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", - "@backstage/plugin-catalog-react": "^1.1.3-next.2", - "@backstage/plugin-stack-overflow": "^0.1.4-next.1", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", + "@backstage/plugin-catalog-react": "^1.1.3", + "@backstage/plugin-stack-overflow": "^0.1.4", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -53,10 +53,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/core-app-api": "^1.0.5", + "@backstage/dev-utils": "^1.0.5", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/ilert/CHANGELOG.md b/plugins/ilert/CHANGELOG.md index 114b09d5b0..83649c4010 100644 --- a/plugins/ilert/CHANGELOG.md +++ b/plugins/ilert/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-ilert +## 0.1.34 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + ## 0.1.34-next.1 ### Patch Changes diff --git a/plugins/ilert/package.json b/plugins/ilert/package.json index 22e7f14d15..4342d9a93d 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.1.34-next.1", + "version": "0.1.34", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -25,10 +25,10 @@ }, "dependencies": { "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", "@backstage/errors": "^1.1.0", - "@backstage/plugin-catalog-react": "^1.1.3-next.2", + "@backstage/plugin-catalog-react": "^1.1.3", "@backstage/theme": "^0.2.16", "@date-io/luxon": "1.x", "@material-ui/core": "^4.12.2", @@ -43,10 +43,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/core-app-api": "^1.0.5", + "@backstage/dev-utils": "^1.0.5", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/jenkins-backend/CHANGELOG.md b/plugins/jenkins-backend/CHANGELOG.md index 46430334b1..b07e224d2a 100644 --- a/plugins/jenkins-backend/CHANGELOG.md +++ b/plugins/jenkins-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-jenkins-backend +## 0.1.25 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/plugin-auth-node@0.2.4 + - @backstage/plugin-jenkins-common@0.1.7 + ## 0.1.25-next.1 ### Patch Changes diff --git a/plugins/jenkins-backend/package.json b/plugins/jenkins-backend/package.json index c49e4a66cd..9a62239954 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.1.25-next.1", + "version": "0.1.25", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -25,13 +25,13 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.15.0-next.1", + "@backstage/backend-common": "^0.15.0", "@backstage/catalog-client": "^1.0.4", "@backstage/catalog-model": "^1.1.0", "@backstage/config": "^1.0.1", "@backstage/errors": "^1.1.0", - "@backstage/plugin-auth-node": "^0.2.4-next.0", - "@backstage/plugin-jenkins-common": "^0.1.7-next.0", + "@backstage/plugin-auth-node": "^0.2.4", + "@backstage/plugin-jenkins-common": "^0.1.7", "@backstage/plugin-permission-common": "^0.6.3", "@types/express": "^4.17.6", "express": "^4.17.1", @@ -42,7 +42,7 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.0", + "@backstage/cli": "^0.18.1", "@types/jenkins": "^0.23.1", "@types/supertest": "^2.0.8", "msw": "^0.44.0", diff --git a/plugins/jenkins-common/CHANGELOG.md b/plugins/jenkins-common/CHANGELOG.md index befb804c0c..a284687d69 100644 --- a/plugins/jenkins-common/CHANGELOG.md +++ b/plugins/jenkins-common/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-jenkins-common +## 0.1.7 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-common@1.0.5 + ## 0.1.7-next.0 ### Patch Changes diff --git a/plugins/jenkins-common/package.json b/plugins/jenkins-common/package.json index e207f8e298..6a58de3601 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.7-next.0", + "version": "0.1.7", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -22,11 +22,11 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/plugin-catalog-common": "^1.0.5-next.0", + "@backstage/plugin-catalog-common": "^1.0.5", "@backstage/plugin-permission-common": "^0.6.3" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.0" + "@backstage/cli": "^0.18.1" }, "files": [ "dist" diff --git a/plugins/jenkins/CHANGELOG.md b/plugins/jenkins/CHANGELOG.md index 299e56ba30..6c10aef068 100644 --- a/plugins/jenkins/CHANGELOG.md +++ b/plugins/jenkins/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-jenkins +## 0.7.7 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + - @backstage/plugin-jenkins-common@0.1.7 + ## 0.7.7-next.2 ### Patch Changes diff --git a/plugins/jenkins/api-report.md b/plugins/jenkins/api-report.md index 33072ecf49..59e3dc636e 100644 --- a/plugins/jenkins/api-report.md +++ b/plugins/jenkins/api-report.md @@ -14,24 +14,15 @@ import { IdentityApi } from '@backstage/core-plugin-api'; import { InfoCardVariants } from '@backstage/core-components'; import { RouteRef } from '@backstage/core-plugin-api'; -// Warning: (ae-missing-release-tag) "EntityJenkinsContent" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) -export const EntityJenkinsContent: (_props: {}) => JSX.Element; +export const EntityJenkinsContent: () => JSX.Element; -// Warning: (ae-missing-release-tag) "EntityLatestJenkinsRunCard" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) -export const EntityLatestJenkinsRunCard: ({ - branch, - variant, -}: { +export const EntityLatestJenkinsRunCard: (props: { branch: string; variant?: InfoCardVariants | undefined; }) => JSX.Element; -// Warning: (ae-missing-release-tag) "isJenkinsAvailable" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) const isJenkinsAvailable: (entity: Entity) => boolean; export { isJenkinsAvailable }; @@ -101,8 +92,6 @@ export class JenkinsClient implements JenkinsApi { }): Promise; } -// Warning: (ae-missing-release-tag) "jenkinsPlugin" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) const jenkinsPlugin: BackstagePlugin< { @@ -117,12 +106,9 @@ export { jenkinsPlugin as plugin }; // Warning: (ae-missing-release-tag) "LatestRunCard" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) -export const LatestRunCard: ({ - branch, - variant, -}: { +export const LatestRunCard: (props: { branch: string; - variant?: InfoCardVariants | undefined; + variant?: InfoCardVariants; }) => JSX.Element; // Warning: (ae-missing-release-tag) "LEGACY_JENKINS_ANNOTATION" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) @@ -130,9 +116,8 @@ export const LatestRunCard: ({ // @public (undocumented) export const LEGACY_JENKINS_ANNOTATION = 'jenkins.io/github-folder'; -// Warning: (ae-forgotten-export) The symbol "Props" needs to be exported by the entry point index.d.ts // Warning: (ae-missing-release-tag) "Router" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) -export const Router: (_props: Props) => JSX.Element; +export const Router: () => JSX.Element; ``` diff --git a/plugins/jenkins/package.json b/plugins/jenkins/package.json index c4fbdf3e98..f013532b55 100644 --- a/plugins/jenkins/package.json +++ b/plugins/jenkins/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-jenkins", "description": "A Backstage plugin that integrates towards Jenkins", - "version": "0.7.7-next.2", + "version": "0.7.7", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -36,11 +36,11 @@ }, "dependencies": { "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", "@backstage/errors": "^1.1.0", - "@backstage/plugin-catalog-react": "^1.1.3-next.2", - "@backstage/plugin-jenkins-common": "^0.1.7-next.0", + "@backstage/plugin-catalog-react": "^1.1.3", + "@backstage/plugin-jenkins-common": "^0.1.7", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -54,10 +54,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/core-app-api": "^1.0.5", + "@backstage/dev-utils": "^1.0.5", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/jenkins/src/components/Cards/Cards.tsx b/plugins/jenkins/src/components/Cards/Cards.tsx index cb84964124..44bbc06f65 100644 --- a/plugins/jenkins/src/components/Cards/Cards.tsx +++ b/plugins/jenkins/src/components/Cards/Cards.tsx @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + import { LinearProgress, makeStyles, Theme } from '@material-ui/core'; import ExternalLinkIcon from '@material-ui/icons/Launch'; import { DateTime, Duration } from 'luxon'; @@ -77,13 +78,12 @@ const WidgetContent = ({ ); }; -const JenkinsApiErrorPanel = ({ - message, - errorType, -}: { +const JenkinsApiErrorPanel = (props: { message: string; errorType: ErrorType; }) => { + const { message, errorType } = props; + let title = undefined; if (errorType === ErrorType.CONNECTION_ERROR) { title = "Can't connect to Jenkins"; @@ -94,13 +94,11 @@ const JenkinsApiErrorPanel = ({ return ; }; -export const LatestRunCard = ({ - branch = 'master', - variant, -}: { +export const LatestRunCard = (props: { branch: string; variant?: InfoCardVariants; }) => { + const { branch = 'master', variant } = props; const [{ projects, loading, error }] = useBuilds({ branch }); const latestRun = projects?.[0]; return ( diff --git a/plugins/jenkins/src/components/Router.tsx b/plugins/jenkins/src/components/Router.tsx index b3561be2b0..ef86203e9e 100644 --- a/plugins/jenkins/src/components/Router.tsx +++ b/plugins/jenkins/src/components/Router.tsx @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + import { Entity } from '@backstage/catalog-model'; import { MissingAnnotationEmptyState } from '@backstage/core-components'; import { useEntity } from '@backstage/plugin-catalog-react'; @@ -23,13 +24,12 @@ import { buildRouteRef } from '../plugin'; import { CITable } from './BuildsPage/lib/CITable'; import { DetailedViewPage } from './BuildWithStepsPage/'; +/** @public */ export const isJenkinsAvailable = (entity: Entity) => Boolean(entity.metadata.annotations?.[JENKINS_ANNOTATION]) || Boolean(entity.metadata.annotations?.[LEGACY_JENKINS_ANNOTATION]); -type Props = {}; - -export const Router = (_props: Props) => { +export const Router = () => { const { entity } = useEntity(); if (!isJenkinsAvailable(entity)) { diff --git a/plugins/jenkins/src/plugin.ts b/plugins/jenkins/src/plugin.ts index c32c9b50d1..7dbb6bfde1 100644 --- a/plugins/jenkins/src/plugin.ts +++ b/plugins/jenkins/src/plugin.ts @@ -26,16 +26,19 @@ import { } from '@backstage/core-plugin-api'; import { JenkinsClient, jenkinsApiRef } from './api'; +/** @public */ export const rootRouteRef = createRouteRef({ id: 'jenkins', }); +/** @public */ export const buildRouteRef = createSubRouteRef({ id: 'jenkins/builds', path: '/builds/:jobFullName/:buildNumber', parent: rootRouteRef, }); +/** @public */ export const jenkinsPlugin = createPlugin({ id: 'jenkins', apis: [ @@ -51,6 +54,7 @@ export const jenkinsPlugin = createPlugin({ }, }); +/** @public */ export const EntityJenkinsContent = jenkinsPlugin.provide( createRoutableExtension({ name: 'EntityJenkinsContent', @@ -58,6 +62,8 @@ export const EntityJenkinsContent = jenkinsPlugin.provide( mountPoint: rootRouteRef, }), ); + +/** @public */ export const EntityLatestJenkinsRunCard = jenkinsPlugin.provide( createComponentExtension({ name: 'EntityLatestJenkinsRunCard', diff --git a/plugins/kafka-backend/CHANGELOG.md b/plugins/kafka-backend/CHANGELOG.md index 658959494c..ce42cd1202 100644 --- a/plugins/kafka-backend/CHANGELOG.md +++ b/plugins/kafka-backend/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-kafka-backend +## 0.2.28 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + ## 0.2.28-next.0 ### Patch Changes diff --git a/plugins/kafka-backend/api-report.md b/plugins/kafka-backend/api-report.md index e73d8e9e03..20c8260b52 100644 --- a/plugins/kafka-backend/api-report.md +++ b/plugins/kafka-backend/api-report.md @@ -7,9 +7,14 @@ import { Config } from '@backstage/config'; import express from 'express'; import { Logger } from 'winston'; -// Warning: (ae-forgotten-export) The symbol "RouterOptions" needs to be exported by the entry point index.d.ts -// Warning: (ae-missing-release-tag) "createRouter" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export function createRouter(options: RouterOptions): Promise; + +// @public (undocumented) +export interface RouterOptions { + // (undocumented) + config: Config; + // (undocumented) + logger: Logger; +} ``` diff --git a/plugins/kafka-backend/package.json b/plugins/kafka-backend/package.json index c2ddfd4cad..aaba4b1abe 100644 --- a/plugins/kafka-backend/package.json +++ b/plugins/kafka-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-kafka-backend", "description": "A Backstage backend plugin that integrates towards Kafka", - "version": "0.2.28-next.0", + "version": "0.2.28", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -35,7 +35,7 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.15.0-next.0", + "@backstage/backend-common": "^0.15.0", "@backstage/catalog-model": "^1.1.0", "@backstage/config": "^1.0.1", "@backstage/errors": "^1.1.0", @@ -47,7 +47,7 @@ "winston": "^3.2.1" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.0", + "@backstage/cli": "^0.18.1", "@types/jest-when": "^3.5.0", "@types/lodash": "^4.14.151", "jest-when": "^3.1.0", diff --git a/plugins/kafka-backend/src/index.ts b/plugins/kafka-backend/src/index.ts index ab1026e99d..70b7fb45a4 100644 --- a/plugins/kafka-backend/src/index.ts +++ b/plugins/kafka-backend/src/index.ts @@ -20,4 +20,5 @@ * @packageDocumentation */ +export type { RouterOptions } from './service/router'; export { createRouter } from './service/router'; diff --git a/plugins/kafka-backend/src/service/router.ts b/plugins/kafka-backend/src/service/router.ts index 6c8bce7af3..1271e8f48c 100644 --- a/plugins/kafka-backend/src/service/router.ts +++ b/plugins/kafka-backend/src/service/router.ts @@ -23,6 +23,7 @@ import { KafkaApi, KafkaJsApiImpl } from './KafkaApi'; import _ from 'lodash'; import { getClusterDetails } from '../config/ClusterReader'; +/** @public */ export interface RouterOptions { logger: Logger; config: Config; @@ -84,6 +85,7 @@ export const makeRouter = ( return router; }; +/** @public */ export async function createRouter( options: RouterOptions, ): Promise { diff --git a/plugins/kafka/CHANGELOG.md b/plugins/kafka/CHANGELOG.md index 217ada3545..344f591932 100644 --- a/plugins/kafka/CHANGELOG.md +++ b/plugins/kafka/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-kafka +## 0.3.8 + +### Patch Changes + +- bde245f0bf: Add dashboard URL feature and fix minor styling issues. +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + ## 0.3.8-next.1 ### Patch Changes diff --git a/plugins/kafka/api-report.md b/plugins/kafka/api-report.md index 844082764e..18b51b77fa 100644 --- a/plugins/kafka/api-report.md +++ b/plugins/kafka/api-report.md @@ -9,26 +9,18 @@ import { BackstagePlugin } from '@backstage/core-plugin-api'; import { Entity } from '@backstage/catalog-model'; import { RouteRef } from '@backstage/core-plugin-api'; -// Warning: (ae-missing-release-tag) "EntityKafkaContent" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) -export const EntityKafkaContent: (_props: {}) => JSX.Element; +export const EntityKafkaContent: () => JSX.Element; -// Warning: (ae-missing-release-tag) "isPluginApplicableToEntity" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) const isPluginApplicableToEntity: (entity: Entity) => boolean; export { isPluginApplicableToEntity as isKafkaAvailable }; export { isPluginApplicableToEntity }; -// Warning: (ae-missing-release-tag) "KAFKA_CONSUMER_GROUP_ANNOTATION" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export const KAFKA_CONSUMER_GROUP_ANNOTATION = 'kafka.apache.org/consumer-groups'; -// Warning: (ae-missing-release-tag) "kafkaPlugin" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) const kafkaPlugin: BackstagePlugin< { @@ -40,9 +32,6 @@ const kafkaPlugin: BackstagePlugin< export { kafkaPlugin }; export { kafkaPlugin as plugin }; -// Warning: (ae-forgotten-export) The symbol "Props" needs to be exported by the entry point index.d.ts -// Warning: (ae-missing-release-tag) "Router" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) -export const Router: (_props: Props) => JSX.Element; +export const Router: () => JSX.Element; ``` diff --git a/plugins/kafka/package.json b/plugins/kafka/package.json index 341fda9a64..5bd7da5060 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.8-next.1", + "version": "0.3.8", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -27,9 +27,9 @@ "dependencies": { "@backstage/catalog-model": "^1.1.0", "@backstage/config": "^1.0.1", - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", - "@backstage/plugin-catalog-react": "^1.1.3-next.2", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", + "@backstage/plugin-catalog-react": "^1.1.3", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -41,10 +41,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/core-app-api": "^1.0.5", + "@backstage/dev-utils": "^1.0.5", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/react-hooks": "^8.0.0", diff --git a/plugins/kafka/src/Router.tsx b/plugins/kafka/src/Router.tsx index 133326b5b9..af6d2d7ef8 100644 --- a/plugins/kafka/src/Router.tsx +++ b/plugins/kafka/src/Router.tsx @@ -22,12 +22,12 @@ import { KAFKA_CONSUMER_GROUP_ANNOTATION } from './constants'; import { KafkaTopicsForConsumer } from './components/ConsumerGroupOffsets/ConsumerGroupOffsets'; import { MissingAnnotationEmptyState } from '@backstage/core-components'; +/** @public */ export const isPluginApplicableToEntity = (entity: Entity) => Boolean(entity.metadata.annotations?.[KAFKA_CONSUMER_GROUP_ANNOTATION]); -type Props = {}; - -export const Router = (_props: Props) => { +/** @public */ +export const Router = () => { const { entity } = useEntity(); if (!isPluginApplicableToEntity(entity)) { diff --git a/plugins/kafka/src/constants.ts b/plugins/kafka/src/constants.ts index b85a738888..a900ec6abe 100644 --- a/plugins/kafka/src/constants.ts +++ b/plugins/kafka/src/constants.ts @@ -13,6 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + +/** @public */ export const KAFKA_CONSUMER_GROUP_ANNOTATION = 'kafka.apache.org/consumer-groups'; + export const KAFKA_DASHBOARD_URL = 'kafka.apache.org/dashboard-urls'; diff --git a/plugins/kafka/src/plugin.ts b/plugins/kafka/src/plugin.ts index 6caa4ca5ca..395152729b 100644 --- a/plugins/kafka/src/plugin.ts +++ b/plugins/kafka/src/plugin.ts @@ -26,10 +26,12 @@ import { } from '@backstage/core-plugin-api'; import { KafkaDashboardClient } from './api/KafkaDashboardClient'; +/** @public */ export const rootCatalogKafkaRouteRef = createRouteRef({ id: 'kafka', }); +/** @public */ export const kafkaPlugin = createPlugin({ id: 'kafka', apis: [ @@ -50,6 +52,7 @@ export const kafkaPlugin = createPlugin({ }, }); +/** @public */ export const EntityKafkaContent = kafkaPlugin.provide( createRoutableExtension({ name: 'EntityKafkaContent', diff --git a/plugins/kubernetes-backend/CHANGELOG.md b/plugins/kubernetes-backend/CHANGELOG.md index 9270a90ed8..f4e98a4152 100644 --- a/plugins/kubernetes-backend/CHANGELOG.md +++ b/plugins/kubernetes-backend/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-kubernetes-backend +## 0.7.1 + +### Patch Changes + +- 0297da83c0: Added `DaemonSets` to the default kubernetes resources. +- 0cd87cf30d: Added a new `customResources` field to the ClusterDetails interface, in order to specify (override) custom resources per cluster +- 29f782eb37: Updated dependency `@types/luxon` to `^3.0.0`. +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/plugin-kubernetes-common@0.4.1 + - @backstage/plugin-auth-node@0.2.4 + ## 0.7.1-next.1 ### Patch Changes diff --git a/plugins/kubernetes-backend/api-report.md b/plugins/kubernetes-backend/api-report.md index 03ecefa79d..d98d80ddb1 100644 --- a/plugins/kubernetes-backend/api-report.md +++ b/plugins/kubernetes-backend/api-report.md @@ -227,7 +227,8 @@ export type KubernetesObjectTypes = | 'cronjobs' | 'ingresses' | 'customresources' - | 'statefulsets'; + | 'statefulsets' + | 'daemonsets'; // @alpha export interface KubernetesServiceLocator { diff --git a/plugins/kubernetes-backend/package.json b/plugins/kubernetes-backend/package.json index 36305e51c9..6a894d8820 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.7.1-next.1", + "version": "0.7.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -36,13 +36,13 @@ }, "dependencies": { "@azure/identity": "^2.0.4", - "@backstage/backend-common": "^0.15.0-next.0", + "@backstage/backend-common": "^0.15.0", "@backstage/catalog-client": "^1.0.4", "@backstage/catalog-model": "^1.1.0", "@backstage/config": "^1.0.1", "@backstage/errors": "^1.1.0", - "@backstage/plugin-auth-node": "^0.2.4-next.0", - "@backstage/plugin-kubernetes-common": "^0.4.0", + "@backstage/plugin-auth-node": "^0.2.4", + "@backstage/plugin-kubernetes-common": "^0.4.1", "@google-cloud/container": "^4.0.0", "@kubernetes/client-node": "^0.17.0", "@types/express": "^4.17.6", @@ -63,7 +63,7 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", + "@backstage/cli": "^0.18.1", "@types/aws4": "^1.5.1", "aws-sdk-mock": "^5.2.1", "supertest": "^6.1.3" diff --git a/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts b/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts index 3b96dc783f..7fcc9836a3 100644 --- a/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts +++ b/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts @@ -118,6 +118,12 @@ export const DEFAULT_OBJECTS: ObjectToFetch[] = [ plural: 'statefulsets', objectType: 'statefulsets', }, + { + group: 'apps', + apiVersion: 'v1', + plural: 'daemonsets', + objectType: 'daemonsets', + }, ]; export interface KubernetesFanOutHandlerOptions diff --git a/plugins/kubernetes-backend/src/types/types.ts b/plugins/kubernetes-backend/src/types/types.ts index 6bdcfc24da..33fde70b24 100644 --- a/plugins/kubernetes-backend/src/types/types.ts +++ b/plugins/kubernetes-backend/src/types/types.ts @@ -108,7 +108,8 @@ export type KubernetesObjectTypes = | 'cronjobs' | 'ingresses' | 'customresources' - | 'statefulsets'; + | 'statefulsets' + | 'daemonsets'; /** * Used to load cluster details from different sources diff --git a/plugins/kubernetes-common/CHANGELOG.md b/plugins/kubernetes-common/CHANGELOG.md index 9b90db4da6..290a2ada81 100644 --- a/plugins/kubernetes-common/CHANGELOG.md +++ b/plugins/kubernetes-common/CHANGELOG.md @@ -1,5 +1,11 @@ # @backstage/plugin-kubernetes-common +## 0.4.1 + +### Patch Changes + +- 0297da83c0: Added `DaemonSets` to the default kubernetes resources. + ## 0.4.0 ### Minor Changes diff --git a/plugins/kubernetes-common/api-report.md b/plugins/kubernetes-common/api-report.md index 2ca33d1a97..f8a8c6b460 100644 --- a/plugins/kubernetes-common/api-report.md +++ b/plugins/kubernetes-common/api-report.md @@ -7,6 +7,7 @@ import { Entity } from '@backstage/catalog-model'; import type { JsonObject } from '@backstage/types'; import { V1ConfigMap } from '@kubernetes/client-node'; import { V1CronJob } from '@kubernetes/client-node'; +import { V1DaemonSet } from '@kubernetes/client-node'; import { V1Deployment } from '@kubernetes/client-node'; import { V1HorizontalPodAutoscaler } from '@kubernetes/client-node'; import { V1Ingress } from '@kubernetes/client-node'; @@ -114,6 +115,16 @@ export interface CustomResourceFetchResponse { type: 'customresources'; } +// Warning: (ae-missing-release-tag) "DaemonSetsFetchResponse" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface DaemonSetsFetchResponse { + // (undocumented) + resources: Array; + // (undocumented) + type: 'daemonsets'; +} + // Warning: (ae-missing-release-tag) "DeploymentFetchResponse" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) @@ -139,7 +150,8 @@ export type FetchResponse = | CronJobsFetchResponse | IngressesFetchResponse | CustomResourceFetchResponse - | StatefulSetsFetchResponse; + | StatefulSetsFetchResponse + | DaemonSetsFetchResponse; // Warning: (ae-missing-release-tag) "HorizontalPodAutoscalersFetchResponse" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // diff --git a/plugins/kubernetes-common/package.json b/plugins/kubernetes-common/package.json index 3dd0be7670..16d3e7d61b 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.4.0", + "version": "0.4.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -42,7 +42,7 @@ "@kubernetes/client-node": "^0.17.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.0" + "@backstage/cli": "^0.18.1" }, "jest": { "roots": [ diff --git a/plugins/kubernetes-common/src/types.ts b/plugins/kubernetes-common/src/types.ts index 9b8b790c79..53f6a5a640 100644 --- a/plugins/kubernetes-common/src/types.ts +++ b/plugins/kubernetes-common/src/types.ts @@ -18,6 +18,7 @@ import type { JsonObject } from '@backstage/types'; import { V1ConfigMap, V1CronJob, + V1DaemonSet, V1Deployment, V1HorizontalPodAutoscaler, V1Ingress, @@ -105,7 +106,8 @@ export type FetchResponse = | CronJobsFetchResponse | IngressesFetchResponse | CustomResourceFetchResponse - | StatefulSetsFetchResponse; + | StatefulSetsFetchResponse + | DaemonSetsFetchResponse; export interface PodFetchResponse { type: 'pods'; @@ -167,6 +169,11 @@ export interface StatefulSetsFetchResponse { resources: Array; } +export interface DaemonSetsFetchResponse { + type: 'daemonsets'; + resources: Array; +} + export interface KubernetesFetchError { errorType: KubernetesErrorTypes; statusCode?: number; diff --git a/plugins/kubernetes/CHANGELOG.md b/plugins/kubernetes/CHANGELOG.md index f0beee0ae8..546d6a1912 100644 --- a/plugins/kubernetes/CHANGELOG.md +++ b/plugins/kubernetes/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-kubernetes +## 0.7.1 + +### Patch Changes + +- 860ed68343: Fixed bug in CronJobsAccordions component that causes an error when cronjobs use a kubernetes alias, such as `@hourly` or `@daily` instead of standard cron syntax. +- f563b86a5b: Adds namespace column to Kubernetes error reporting table +- Updated dependencies + - @backstage/plugin-kubernetes-common@0.4.1 + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + ## 0.7.1-next.2 ### Patch Changes diff --git a/plugins/kubernetes/api-report.md b/plugins/kubernetes/api-report.md index ccb4dcae8d..5cf1c3ed34 100644 --- a/plugins/kubernetes/api-report.md +++ b/plugins/kubernetes/api-report.md @@ -208,16 +208,10 @@ export interface GroupedResponses extends DeploymentResources { // @public (undocumented) export const GroupedResponsesContext: React_2.Context; -// Warning: (ae-missing-release-tag) "HorizontalPodAutoscalerDrawer" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) -export const HorizontalPodAutoscalerDrawer: ({ - hpa, - expanded, - children, -}: { +export const HorizontalPodAutoscalerDrawer: (props: { hpa: V1HorizontalPodAutoscaler; - expanded?: boolean | undefined; + expanded?: boolean; children?: React_2.ReactNode; }) => JSX.Element; @@ -361,15 +355,10 @@ const kubernetesPlugin: BackstagePlugin< export { kubernetesPlugin }; export { kubernetesPlugin as plugin }; -// Warning: (ae-missing-release-tag) "PodDrawer" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) -export const PodDrawer: ({ - pod, - expanded, -}: { +export const PodDrawer: (props: { pod: V1Pod; - expanded?: boolean | undefined; + expanded?: boolean; }) => JSX.Element; // Warning: (ae-missing-release-tag) "PodNamesWithErrorsContext" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) diff --git a/plugins/kubernetes/package.json b/plugins/kubernetes/package.json index f7706ef7aa..f0d7076efd 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.7.1-next.2", + "version": "0.7.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -36,10 +36,10 @@ "dependencies": { "@backstage/catalog-model": "^1.1.0", "@backstage/config": "^1.0.1", - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", - "@backstage/plugin-catalog-react": "^1.1.3-next.2", - "@backstage/plugin-kubernetes-common": "^0.4.0", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", + "@backstage/plugin-catalog-react": "^1.1.3", + "@backstage/plugin-kubernetes-common": "^0.4.1", "@backstage/theme": "^0.2.16", "@kubernetes/client-node": "^0.17.0", "@material-ui/core": "^4.12.2", @@ -57,10 +57,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/core-app-api": "^1.0.5", + "@backstage/dev-utils": "^1.0.5", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/react-hooks": "^8.0.0", diff --git a/plugins/kubernetes/src/components/HorizontalPodAutoscalers/HorizontalPodAutoscalerDrawer.tsx b/plugins/kubernetes/src/components/HorizontalPodAutoscalers/HorizontalPodAutoscalerDrawer.tsx index 504a4f26bc..ca7abe07aa 100644 --- a/plugins/kubernetes/src/components/HorizontalPodAutoscalers/HorizontalPodAutoscalerDrawer.tsx +++ b/plugins/kubernetes/src/components/HorizontalPodAutoscalers/HorizontalPodAutoscalerDrawer.tsx @@ -18,15 +18,14 @@ import React from 'react'; import { V1HorizontalPodAutoscaler } from '@kubernetes/client-node'; import { KubernetesDrawer } from '../KubernetesDrawer/KubernetesDrawer'; -export const HorizontalPodAutoscalerDrawer = ({ - hpa, - expanded, - children, -}: { +/** @public */ +export const HorizontalPodAutoscalerDrawer = (props: { hpa: V1HorizontalPodAutoscaler; expanded?: boolean; children?: React.ReactNode; }) => { + const { hpa, expanded, children } = props; + return ( { +/** @public */ +export const PodDrawer = (props: { pod: V1Pod; expanded?: boolean }) => { + const { pod, expanded } = props; + return ( JSX.Element; +export const EmbeddedRouter: () => JSX.Element; -// Warning: (ae-missing-release-tag) "EntityLastLighthouseAuditCard" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) -export const EntityLastLighthouseAuditCard: ({ - dense, - variant, -}: { +export const EntityLastLighthouseAuditCard: (props: { dense?: boolean | undefined; variant?: InfoCardVariants | undefined; }) => JSX.Element; -// Warning: (ae-missing-release-tag) "EntityLighthouseContent" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) -export const EntityLighthouseContent: (_props: {}) => JSX.Element; +export const EntityLighthouseContent: () => JSX.Element; -// Warning: (ae-missing-release-tag) "FetchError" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export class FetchError extends Error { // (undocumented) @@ -82,15 +71,11 @@ export class FetchError extends Error { get name(): string; } -// Warning: (ae-missing-release-tag) "isLighthouseAvailable" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) const isLighthouseAvailable: (entity: Entity) => boolean; export { isLighthouseAvailable }; export { isLighthouseAvailable as isPluginApplicableToEntity }; -// Warning: (ae-missing-release-tag) "LASListRequest" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export interface LASListRequest { // (undocumented) @@ -99,8 +84,6 @@ export interface LASListRequest { offset?: number; } -// Warning: (ae-missing-release-tag) "LASListResponse" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export interface LASListResponse { // (undocumented) @@ -113,19 +96,12 @@ export interface LASListResponse { total: number; } -// Warning: (ae-missing-release-tag) "LastLighthouseAuditCard" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) -export const LastLighthouseAuditCard: ({ - dense, - variant, -}: { - dense?: boolean | undefined; - variant?: InfoCardVariants | undefined; +export const LastLighthouseAuditCard: (props: { + dense?: boolean; + variant?: InfoCardVariants; }) => JSX.Element; -// Warning: (ae-missing-release-tag) "LighthouseApi" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export type LighthouseApi = { url: string; @@ -135,13 +111,9 @@ export type LighthouseApi = { getWebsiteByUrl: (websiteUrl: string) => Promise; }; -// Warning: (ae-missing-release-tag) "lighthouseApiRef" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export const lighthouseApiRef: ApiRef; -// Warning: (ae-missing-release-tag) "LighthouseCategoryAbbr" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export interface LighthouseCategoryAbbr { // (undocumented) @@ -152,8 +124,6 @@ export interface LighthouseCategoryAbbr { title: string; } -// Warning: (ae-missing-release-tag) "LighthouseCategoryId" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export type LighthouseCategoryId = | 'pwa' @@ -162,13 +132,9 @@ export type LighthouseCategoryId = | 'accessibility' | 'best-practices'; -// Warning: (ae-missing-release-tag) "LighthousePage" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export const LighthousePage: () => JSX.Element; -// Warning: (ae-missing-release-tag) "lighthousePlugin" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) const lighthousePlugin: BackstagePlugin< { @@ -181,8 +147,6 @@ const lighthousePlugin: BackstagePlugin< export { lighthousePlugin }; export { lighthousePlugin as plugin }; -// Warning: (ae-missing-release-tag) "LighthouseRestApi" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export class LighthouseRestApi implements LighthouseApi { constructor(url: string); @@ -193,23 +157,16 @@ export class LighthouseRestApi implements LighthouseApi { // (undocumented) getWebsiteForAuditId(auditId: string): Promise; // (undocumented) - getWebsiteList({ - limit, - offset, - }?: LASListRequest): Promise; + getWebsiteList(options?: LASListRequest): Promise; // (undocumented) triggerAudit(payload: TriggerAuditPayload): Promise; // (undocumented) url: string; } -// Warning: (ae-missing-release-tag) "Router" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export const Router: () => JSX.Element; -// Warning: (ae-missing-release-tag) "TriggerAuditPayload" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export interface TriggerAuditPayload { // (undocumented) @@ -224,8 +181,6 @@ export interface TriggerAuditPayload { url: string; } -// Warning: (ae-missing-release-tag) "Website" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export interface Website { // (undocumented) @@ -236,8 +191,6 @@ export interface Website { url: string; } -// Warning: (ae-missing-release-tag) "WebsiteListResponse" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export type WebsiteListResponse = LASListResponse; ``` diff --git a/plugins/lighthouse/package.json b/plugins/lighthouse/package.json index 96ab8c8e4a..30539b8859 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.3.8-next.1", + "version": "0.3.8", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -37,9 +37,9 @@ "dependencies": { "@backstage/catalog-model": "^1.1.0", "@backstage/config": "^1.0.1", - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", - "@backstage/plugin-catalog-react": "^1.1.3-next.2", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", + "@backstage/plugin-catalog-react": "^1.1.3", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -51,10 +51,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/core-app-api": "^1.0.5", + "@backstage/dev-utils": "^1.0.5", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/react-hooks": "^8.0.0", diff --git a/plugins/lighthouse/src/Router.tsx b/plugins/lighthouse/src/Router.tsx index 1c41f522f4..04c00cde41 100644 --- a/plugins/lighthouse/src/Router.tsx +++ b/plugins/lighthouse/src/Router.tsx @@ -25,9 +25,11 @@ import { LIGHTHOUSE_WEBSITE_URL_ANNOTATION } from '../constants'; import { AuditListForEntity } from './components/AuditList/AuditListForEntity'; import { MissingAnnotationEmptyState } from '@backstage/core-components'; +/** @public */ export const isLighthouseAvailable = (entity: Entity) => Boolean(entity.metadata.annotations?.[LIGHTHOUSE_WEBSITE_URL_ANNOTATION]); +/** @public */ export const Router = () => ( } /> @@ -36,9 +38,8 @@ export const Router = () => ( ); -type Props = {}; - -export const EmbeddedRouter = (_props: Props) => { +/** @public */ +export const EmbeddedRouter = () => { const { entity } = useEntity(); if (!isLighthouseAvailable(entity)) { diff --git a/plugins/lighthouse/src/api.ts b/plugins/lighthouse/src/api.ts index b40b70356f..e4ccefe2a1 100644 --- a/plugins/lighthouse/src/api.ts +++ b/plugins/lighthouse/src/api.ts @@ -17,6 +17,7 @@ import { Config } from '@backstage/config'; import { createApiRef } from '@backstage/core-plugin-api'; +/** @public */ export type LighthouseCategoryId = | 'pwa' | 'seo' @@ -24,17 +25,20 @@ export type LighthouseCategoryId = | 'accessibility' | 'best-practices'; +/** @public */ export interface LighthouseCategoryAbbr { id: LighthouseCategoryId; score: number; title: string; } +/** @public */ export interface LASListRequest { offset?: number; limit?: number; } +/** @public */ export interface LASListResponse { items: Item[]; total: number; @@ -42,21 +46,25 @@ export interface LASListResponse { limit: number; } -interface AuditBase { +/** @public */ +export interface AuditBase { id: string; url: string; timeCreated: string; } +/** @public */ export interface AuditRunning extends AuditBase { status: 'RUNNING'; } +/** @public */ export interface AuditFailed extends AuditBase { status: 'FAILED'; timeCompleted: string; } +/** @public */ export interface AuditCompleted extends AuditBase { status: 'COMPLETED'; timeCompleted: string; @@ -64,16 +72,20 @@ export interface AuditCompleted extends AuditBase { categories: Record; } +/** @public */ export type Audit = AuditRunning | AuditFailed | AuditCompleted; +/** @public */ export interface Website { url: string; audits: Audit[]; lastAudit: Audit; } +/** @public */ export type WebsiteListResponse = LASListResponse; +/** @public */ export interface TriggerAuditPayload { url: string; options: { @@ -85,6 +97,7 @@ export interface TriggerAuditPayload { }; } +/** @public */ export class FetchError extends Error { get name(): string { return this.constructor.name; @@ -99,6 +112,7 @@ export class FetchError extends Error { } } +/** @public */ export type LighthouseApi = { url: string; getWebsiteList: (listOptions: LASListRequest) => Promise; @@ -107,10 +121,12 @@ export type LighthouseApi = { getWebsiteByUrl: (websiteUrl: string) => Promise; }; +/** @public */ export const lighthouseApiRef = createApiRef({ id: 'plugin.lighthouse.service', }); +/** @public */ export class LighthouseRestApi implements LighthouseApi { static fromConfig(config: Config) { return new LighthouseRestApi(config.getString('lighthouse.baseUrl')); @@ -124,10 +140,10 @@ export class LighthouseRestApi implements LighthouseApi { return await resp.json(); } - async getWebsiteList({ - limit, - offset, - }: LASListRequest = {}): Promise { + async getWebsiteList( + options: LASListRequest = {}, + ): Promise { + const { limit, offset } = options; const params = new URLSearchParams(); if (typeof limit === 'number') params.append('limit', limit.toString()); if (typeof offset === 'number') params.append('offset', offset.toString()); diff --git a/plugins/lighthouse/src/components/Cards/LastLighthouseAuditCard.tsx b/plugins/lighthouse/src/components/Cards/LastLighthouseAuditCard.tsx index fc44397330..4daeb5177c 100644 --- a/plugins/lighthouse/src/components/Cards/LastLighthouseAuditCard.tsx +++ b/plugins/lighthouse/src/components/Cards/LastLighthouseAuditCard.tsx @@ -27,8 +27,8 @@ import { StructuredMetadataTable, } from '@backstage/core-components'; -const LighthouseCategoryScoreStatus = ({ score }: { score: number }) => { - const scoreAsPercentage = Math.round(score * 100); +const LighthouseCategoryScoreStatus = (props: { score: number }) => { + const scoreAsPercentage = Math.round(props.score * 100); switch (true) { case scoreAsPercentage >= 90: return ( @@ -56,20 +56,15 @@ const LighthouseCategoryScoreStatus = ({ score }: { score: number }) => { } }; -const LighthouseAuditStatus = ({ audit }: { audit: Audit }) => ( +const LighthouseAuditStatus = (props: { audit: Audit }) => ( <> - - {audit.status.toLocaleUpperCase('en-US')} + + {props.audit.status.toLocaleUpperCase('en-US')} ); -const LighthouseAuditSummary = ({ - audit, - dense = false, -}: { - audit: Audit; - dense?: boolean; -}) => { +const LighthouseAuditSummary = (props: { audit: Audit; dense?: boolean }) => { + const { audit, dense = false } = props; const { url } = audit; const flattenedCategoryData: Record = {}; if (audit.status === 'COMPLETED') { @@ -92,13 +87,12 @@ const LighthouseAuditSummary = ({ return ; }; -export const LastLighthouseAuditCard = ({ - dense = false, - variant, -}: { +/** @public */ +export const LastLighthouseAuditCard = (props: { dense?: boolean; variant?: InfoCardVariants; }) => { + const { dense = false, variant } = props; const { value: website, loading, error } = useWebsiteForEntity(); let content; diff --git a/plugins/lighthouse/src/plugin.ts b/plugins/lighthouse/src/plugin.ts index 1c9bc295f8..24052f7771 100644 --- a/plugins/lighthouse/src/plugin.ts +++ b/plugins/lighthouse/src/plugin.ts @@ -40,6 +40,7 @@ export const entityContentRouteRef = createRouteRef({ id: 'lighthouse:entity-content', }); +/** @public */ export const lighthousePlugin = createPlugin({ id: 'lighthouse', apis: [ @@ -55,6 +56,7 @@ export const lighthousePlugin = createPlugin({ }, }); +/** @public */ export const LighthousePage = lighthousePlugin.provide( createRoutableExtension({ name: 'LighthousePage', @@ -63,6 +65,7 @@ export const LighthousePage = lighthousePlugin.provide( }), ); +/** @public */ export const EntityLighthouseContent = lighthousePlugin.provide( createRoutableExtension({ name: 'EntityLighthouseContent', @@ -71,6 +74,7 @@ export const EntityLighthouseContent = lighthousePlugin.provide( }), ); +/** @public */ export const EntityLastLighthouseAuditCard = lighthousePlugin.provide( createComponentExtension({ name: 'EntityLastLighthouseAuditCard', diff --git a/plugins/newrelic-dashboard/CHANGELOG.md b/plugins/newrelic-dashboard/CHANGELOG.md index 7fc68f473f..431fcb4a33 100644 --- a/plugins/newrelic-dashboard/CHANGELOG.md +++ b/plugins/newrelic-dashboard/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-newrelic-dashboard +## 0.2.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + ## 0.2.1-next.1 ### Patch Changes diff --git a/plugins/newrelic-dashboard/api-report.md b/plugins/newrelic-dashboard/api-report.md index d74d69cad6..223a327d20 100644 --- a/plugins/newrelic-dashboard/api-report.md +++ b/plugins/newrelic-dashboard/api-report.md @@ -10,23 +10,15 @@ import { Entity } from '@backstage/catalog-model'; import { RouteRef } from '@backstage/core-plugin-api'; // @public -export const DashboardSnapshotComponent: ({ - guid, - name, - permalink, -}: { +export const DashboardSnapshotComponent: (props: { guid: string; name: string; permalink: string; }) => JSX.Element; -// Warning: (ae-missing-release-tag) "EntityNewRelicDashboardCard" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export const EntityNewRelicDashboardCard: () => JSX.Element; -// Warning: (ae-missing-release-tag) "EntityNewRelicDashboardContent" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export const EntityNewRelicDashboardContent: () => JSX.Element; @@ -35,8 +27,6 @@ export const EntityNewRelicDashboardContent: () => JSX.Element; // @public (undocumented) export const isNewRelicDashboardAvailable: (entity: Entity) => boolean; -// Warning: (ae-missing-release-tag) "newRelicDashboardPlugin" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export const newRelicDashboardPlugin: BackstagePlugin< { diff --git a/plugins/newrelic-dashboard/package.json b/plugins/newrelic-dashboard/package.json index 9acc2db59b..2644524e32 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.1-next.1", + "version": "0.2.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -24,18 +24,18 @@ }, "dependencies": { "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", "@backstage/errors": "^1.1.0", - "@backstage/plugin-catalog-react": "^1.1.3-next.2", + "@backstage/plugin-catalog-react": "^1.1.3", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/dev-utils": "^1.0.5-next.1", + "@backstage/cli": "^0.18.1", + "@backstage/dev-utils": "^1.0.5", "@testing-library/jest-dom": "^5.10.1", "@types/react": "^16.13.1 || ^17.0.0", "cross-fetch": "^3.1.5" diff --git a/plugins/newrelic-dashboard/src/components/NewRelicDashboard/DashboardSnapshotList/DashboardSnapshot.tsx b/plugins/newrelic-dashboard/src/components/NewRelicDashboard/DashboardSnapshotList/DashboardSnapshot.tsx index f501fd77bf..dcbde9279a 100644 --- a/plugins/newrelic-dashboard/src/components/NewRelicDashboard/DashboardSnapshotList/DashboardSnapshot.tsx +++ b/plugins/newrelic-dashboard/src/components/NewRelicDashboard/DashboardSnapshotList/DashboardSnapshot.tsx @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + import React from 'react'; import { Box, Grid, MenuItem, Select } from '@material-ui/core'; import { useApi, storageApiRef } from '@backstage/core-plugin-api'; @@ -27,13 +28,15 @@ import { newRelicDashboardApiRef } from '../../../api'; import { DashboardSnapshotSummary } from '../../../api/NewRelicDashboardApi'; import useObservable from 'react-use/lib/useObservable'; -type Props = { +/** + * @public + */ +export const DashboardSnapshot = (props: { guid: string; name: string; permalink: string; -}; - -export const DashboardSnapshot = ({ guid, name, permalink }: Props) => { +}) => { + const { guid, name, permalink } = props; const newRelicDashboardAPI = useApi(newRelicDashboardApiRef); const storageApi = useApi(storageApiRef).forBucket('newrelic-dashboard'); const setStorageValue = (value: number) => { diff --git a/plugins/newrelic-dashboard/src/components/NewRelicDashboard/DashboardSnapshotList/DashboardSnapshotList.tsx b/plugins/newrelic-dashboard/src/components/NewRelicDashboard/DashboardSnapshotList/DashboardSnapshotList.tsx index 85a73b0a4b..594a5fd53d 100644 --- a/plugins/newrelic-dashboard/src/components/NewRelicDashboard/DashboardSnapshotList/DashboardSnapshotList.tsx +++ b/plugins/newrelic-dashboard/src/components/NewRelicDashboard/DashboardSnapshotList/DashboardSnapshotList.tsx @@ -44,15 +44,14 @@ function TabPanel(props: TabPanelProps) {
); } + function a11yProps(index: number) { return { id: `simple-tab-${index}`, 'aria-controls': `simple-tabpanel-${index}`, }; } -type Props = { - guid: string; -}; + const useStyles = makeStyles( theme => ({ tabsWrapper: { @@ -79,7 +78,9 @@ const useStyles = makeStyles( }), { name: 'DashboardHeaderTabs' }, ); -export const DashboardSnapshotList = ({ guid }: Props) => { + +export const DashboardSnapshotList = (props: { guid: string }) => { + const { guid } = props; const styles = useStyles(); const newRelicDashboardAPI = useApi(newRelicDashboardApiRef); const { value, loading, error } = useAsync(async (): Promise< diff --git a/plugins/newrelic-dashboard/src/components/NewRelicDashboard/DashboardSnapshotList/index.ts b/plugins/newrelic-dashboard/src/components/NewRelicDashboard/DashboardSnapshotList/index.ts index 6b17582515..6d6ba5666b 100644 --- a/plugins/newrelic-dashboard/src/components/NewRelicDashboard/DashboardSnapshotList/index.ts +++ b/plugins/newrelic-dashboard/src/components/NewRelicDashboard/DashboardSnapshotList/index.ts @@ -13,5 +13,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + export { DashboardSnapshot } from './DashboardSnapshot'; export { DashboardSnapshotList } from './DashboardSnapshotList'; diff --git a/plugins/newrelic-dashboard/src/plugin.ts b/plugins/newrelic-dashboard/src/plugin.ts index d4ed11573f..51be731ca7 100644 --- a/plugins/newrelic-dashboard/src/plugin.ts +++ b/plugins/newrelic-dashboard/src/plugin.ts @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + import { createPlugin, configApiRef, @@ -24,6 +25,7 @@ import { import { newRelicDashboardApiRef, NewRelicDashboardClient } from './api'; import { rootRouteRef } from './routes'; +/** @public */ export const newRelicDashboardPlugin = createPlugin({ id: 'new-relic-dashboard', routes: { @@ -46,6 +48,8 @@ export const newRelicDashboardPlugin = createPlugin({ }), ], }); + +/** @public */ export const EntityNewRelicDashboardContent = newRelicDashboardPlugin.provide( createComponentExtension({ name: 'EntityNewRelicDashboardPage', @@ -55,6 +59,7 @@ export const EntityNewRelicDashboardContent = newRelicDashboardPlugin.provide( }), ); +/** @public */ export const EntityNewRelicDashboardCard = newRelicDashboardPlugin.provide( createComponentExtension({ name: 'EntityNewRelicDashboardListComponent', @@ -66,6 +71,7 @@ export const EntityNewRelicDashboardCard = newRelicDashboardPlugin.provide( }, }), ); + /** * Render dashboard snapshots from Newrelic in backstage. Use dashboards which have the tag `isDashboardPage: true` * diff --git a/plugins/newrelic/CHANGELOG.md b/plugins/newrelic/CHANGELOG.md index b083be62af..11dc6139db 100644 --- a/plugins/newrelic/CHANGELOG.md +++ b/plugins/newrelic/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-newrelic +## 0.3.26 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + ## 0.3.26-next.1 ### Patch Changes diff --git a/plugins/newrelic/package.json b/plugins/newrelic/package.json index 7a8b91a8a3..541fdbddb3 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.26-next.1", + "version": "0.3.26", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -35,8 +35,8 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -47,10 +47,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/core-app-api": "^1.0.5", + "@backstage/dev-utils": "^1.0.5", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/org/CHANGELOG.md b/plugins/org/CHANGELOG.md index 6f3f92cbbd..f67be53874 100644 --- a/plugins/org/CHANGELOG.md +++ b/plugins/org/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-org +## 0.5.8 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + ## 0.5.8-next.1 ### Patch Changes diff --git a/plugins/org/package.json b/plugins/org/package.json index 9ea320c8f0..3d9582a81b 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.5.8-next.1", + "version": "0.5.8", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -30,9 +30,9 @@ }, "dependencies": { "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", - "@backstage/plugin-catalog-react": "^1.1.3-next.2", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", + "@backstage/plugin-catalog-react": "^1.1.3", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -49,10 +49,10 @@ }, "devDependencies": { "@backstage/catalog-client": "^1.0.4", - "@backstage/cli": "^0.18.1-next.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/core-app-api": "^1.0.5", + "@backstage/dev-utils": "^1.0.5", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/org/src/components/Cards/User/UserProfileCard/UserProfileCard.test.tsx b/plugins/org/src/components/Cards/User/UserProfileCard/UserProfileCard.test.tsx index 68e9715b06..f339a5828c 100644 --- a/plugins/org/src/components/Cards/User/UserProfileCard/UserProfileCard.test.tsx +++ b/plugins/org/src/components/Cards/User/UserProfileCard/UserProfileCard.test.tsx @@ -73,3 +73,86 @@ describe('UserSummary Test', () => { expect(rendered.getByText('Super awesome human')).toBeInTheDocument(); }); }); + +describe('Edit Button', () => { + it('Should not be present by default', async () => { + const userEntity: UserEntity = { + apiVersion: 'backstage.io/v1alpha1', + kind: 'User', + metadata: { + name: 'calum.leavy', + description: 'Super awesome human', + }, + spec: { + profile: { + displayName: 'Calum Leavy', + email: 'calum-leavy@example.com', + }, + memberOf: ['ExampleGroup'], + }, + relations: [ + { + type: 'memberOf', + targetRef: 'group:default/examplegroup', + }, + ], + }; + + const rendered = await renderWithEffects( + wrapInTestApp( + + + , + { + mountedRoutes: { + '/catalog/:namespace/:kind/:name': entityRouteRef, + }, + }, + ), + ); + + expect(rendered.queryByTitle('Edit Metadata')).not.toBeInTheDocument(); + }); + + it('Should be visible when edit URL annotation is present', async () => { + const annotations: Record = { + 'backstage.io/edit-url': 'https://example.com/user.yaml', + }; + const userEntity: UserEntity = { + apiVersion: 'backstage.io/v1alpha1', + kind: 'User', + metadata: { + name: 'calum.leavy', + description: 'Super awesome human', + annotations, + }, + spec: { + profile: { + displayName: 'Calum Leavy', + email: 'calum-leavy@example.com', + }, + memberOf: ['ExampleGroup'], + }, + relations: [ + { + type: 'memberOf', + targetRef: 'group:default/examplegroup', + }, + ], + }; + + const rendered = await renderWithEffects( + wrapInTestApp( + + + , + { + mountedRoutes: { + '/catalog/:namespace/:kind/:name': entityRouteRef, + }, + }, + ), + ); + expect(rendered.getByRole('button')).toBeInTheDocument(); + }); +}); diff --git a/plugins/org/src/components/Cards/User/UserProfileCard/UserProfileCard.tsx b/plugins/org/src/components/Cards/User/UserProfileCard/UserProfileCard.tsx index 148fb03d19..dd75578687 100644 --- a/plugins/org/src/components/Cards/User/UserProfileCard/UserProfileCard.tsx +++ b/plugins/org/src/components/Cards/User/UserProfileCard/UserProfileCard.tsx @@ -14,7 +14,11 @@ * limitations under the License. */ -import { RELATION_MEMBER_OF, UserEntity } from '@backstage/catalog-model'; +import { + RELATION_MEMBER_OF, + UserEntity, + ANNOTATION_EDIT_URL, +} from '@backstage/catalog-model'; import { EntityRefLinks, getEntityRelations, @@ -23,12 +27,14 @@ import { import { Box, Grid, + IconButton, List, ListItem, ListItemIcon, ListItemText, Tooltip, } from '@material-ui/core'; +import EditIcon from '@material-ui/icons/Edit'; import EmailIcon from '@material-ui/icons/Email'; import GroupIcon from '@material-ui/icons/Group'; import PersonIcon from '@material-ui/icons/Person'; @@ -56,6 +62,9 @@ export const UserProfileCard = (props: { variant?: InfoCardVariants }) => { return User not found; } + const entityMetadataEditUrl = + user.metadata.annotations?.[ANNOTATION_EDIT_URL]; + const { metadata: { name: metaName, description }, spec: { profile }, @@ -71,6 +80,20 @@ export const UserProfileCard = (props: { variant?: InfoCardVariants }) => { title={} subheader={description} variant={props.variant} + action={ + <> + {entityMetadataEditUrl && ( + + + + )} + + } > diff --git a/plugins/pagerduty/CHANGELOG.md b/plugins/pagerduty/CHANGELOG.md index 0183241c6c..6e4e062402 100644 --- a/plugins/pagerduty/CHANGELOG.md +++ b/plugins/pagerduty/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-pagerduty +## 0.5.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + ## 0.5.1-next.1 ### Patch Changes diff --git a/plugins/pagerduty/api-report.md b/plugins/pagerduty/api-report.md index c81da24454..8bd8df6f7c 100644 --- a/plugins/pagerduty/api-report.md +++ b/plugins/pagerduty/api-report.md @@ -82,7 +82,7 @@ export class PagerDutyClient implements PagerDutyApi { // (undocumented) static fromConfig( configApi: ConfigApi, - { discoveryApi, fetchApi }: PagerDutyClientApiDependencies, + dependencies: PagerDutyClientApiDependencies, ): PagerDutyClient; // (undocumented) getChangeEventsByServiceId( diff --git a/plugins/pagerduty/package.json b/plugins/pagerduty/package.json index 743fad192e..367bcdc40a 100644 --- a/plugins/pagerduty/package.json +++ b/plugins/pagerduty/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-pagerduty", "description": "A Backstage plugin that integrates towards PagerDuty", - "version": "0.5.1-next.1", + "version": "0.5.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -35,10 +35,10 @@ }, "dependencies": { "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", "@backstage/errors": "^1.1.0", - "@backstage/plugin-catalog-react": "^1.1.3-next.2", + "@backstage/plugin-catalog-react": "^1.1.3", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -53,10 +53,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/core-app-api": "^1.0.5", + "@backstage/dev-utils": "^1.0.5", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/pagerduty/src/api/client.ts b/plugins/pagerduty/src/api/client.ts index 69a702f66d..edc87d4b4a 100644 --- a/plugins/pagerduty/src/api/client.ts +++ b/plugins/pagerduty/src/api/client.ts @@ -43,8 +43,10 @@ const commonGetServiceParams = export class PagerDutyClient implements PagerDutyApi { static fromConfig( configApi: ConfigApi, - { discoveryApi, fetchApi }: PagerDutyClientApiDependencies, + dependencies: PagerDutyClientApiDependencies, ) { + const { discoveryApi, fetchApi } = dependencies; + const eventsBaseUrl: string = configApi.getOptionalString('pagerDuty.eventsBaseUrl') ?? 'https://events.pagerduty.com/v2'; @@ -55,6 +57,7 @@ export class PagerDutyClient implements PagerDutyApi { fetchApi, }); } + constructor(private readonly config: PagerDutyClientApiConfig) {} async getServiceByEntity(entity: Entity): Promise { diff --git a/plugins/periskop-backend/CHANGELOG.md b/plugins/periskop-backend/CHANGELOG.md index 15fe0034d7..3652e42d0a 100644 --- a/plugins/periskop-backend/CHANGELOG.md +++ b/plugins/periskop-backend/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-periskop-backend +## 0.1.6 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + ## 0.1.6-next.0 ### Patch Changes diff --git a/plugins/periskop-backend/package.json b/plugins/periskop-backend/package.json index dca1ac34ce..bdbf7f8e62 100644 --- a/plugins/periskop-backend/package.json +++ b/plugins/periskop-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-periskop-backend", - "version": "0.1.6-next.0", + "version": "0.1.6", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -24,7 +24,7 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.15.0-next.0", + "@backstage/backend-common": "^0.15.0", "@backstage/config": "^1.0.1", "@types/express": "*", "cross-fetch": "^3.0.6", @@ -35,7 +35,7 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.0", + "@backstage/cli": "^0.18.1", "@types/supertest": "^2.0.8", "msw": "^0.44.0", "supertest": "^6.1.6" diff --git a/plugins/periskop/CHANGELOG.md b/plugins/periskop/CHANGELOG.md index f8a7d28341..261af5f7f7 100644 --- a/plugins/periskop/CHANGELOG.md +++ b/plugins/periskop/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-periskop +## 0.1.6 + +### Patch Changes + +- 29f782eb37: Updated dependency `@types/luxon` to `^3.0.0`. +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + ## 0.1.6-next.1 ### Patch Changes diff --git a/plugins/periskop/package.json b/plugins/periskop/package.json index ce736fda5c..e3137741ef 100644 --- a/plugins/periskop/package.json +++ b/plugins/periskop/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-periskop", - "version": "0.1.6-next.1", + "version": "0.1.6", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -26,10 +26,10 @@ }, "dependencies": { "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", "@backstage/errors": "^1.1.0", - "@backstage/plugin-catalog-react": "^1.1.3-next.2", + "@backstage/plugin-catalog-react": "^1.1.3", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -42,10 +42,10 @@ "react-dom": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/core-app-api": "^1.0.5", + "@backstage/dev-utils": "^1.0.5", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/permission-backend/CHANGELOG.md b/plugins/permission-backend/CHANGELOG.md index 22ef7b3b24..45c37afe27 100644 --- a/plugins/permission-backend/CHANGELOG.md +++ b/plugins/permission-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-permission-backend +## 0.5.10 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/plugin-auth-node@0.2.4 + - @backstage/plugin-permission-node@0.6.4 + ## 0.5.10-next.0 ### Patch Changes diff --git a/plugins/permission-backend/package.json b/plugins/permission-backend/package.json index 20b508c833..a529c87439 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.10-next.0", + "version": "0.5.10", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -22,12 +22,12 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.15.0-next.0", + "@backstage/backend-common": "^0.15.0", "@backstage/config": "^1.0.1", "@backstage/errors": "^1.1.0", - "@backstage/plugin-auth-node": "^0.2.4-next.0", + "@backstage/plugin-auth-node": "^0.2.4", "@backstage/plugin-permission-common": "^0.6.3", - "@backstage/plugin-permission-node": "^0.6.4-next.0", + "@backstage/plugin-permission-node": "^0.6.4", "@types/express": "*", "dataloader": "^2.0.0", "express": "^4.17.1", @@ -39,7 +39,7 @@ "zod": "^3.11.6" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.0", + "@backstage/cli": "^0.18.1", "@types/lodash": "^4.14.151", "@types/supertest": "^2.0.8", "supertest": "^6.1.6", diff --git a/plugins/permission-node/CHANGELOG.md b/plugins/permission-node/CHANGELOG.md index 177522ab2f..924cb098ce 100644 --- a/plugins/permission-node/CHANGELOG.md +++ b/plugins/permission-node/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-permission-node +## 0.6.4 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/plugin-auth-node@0.2.4 + ## 0.6.4-next.0 ### Patch Changes diff --git a/plugins/permission-node/package.json b/plugins/permission-node/package.json index be15aff4ce..980a600020 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.6.4-next.0", + "version": "0.6.4", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,10 +33,10 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/backend-common": "^0.15.0-next.0", + "@backstage/backend-common": "^0.15.0", "@backstage/config": "^1.0.1", "@backstage/errors": "^1.1.0", - "@backstage/plugin-auth-node": "^0.2.4-next.0", + "@backstage/plugin-auth-node": "^0.2.4", "@backstage/plugin-permission-common": "^0.6.3", "@types/express": "^4.17.6", "express": "^4.17.1", @@ -44,7 +44,7 @@ "zod": "^3.11.6" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.0", + "@backstage/cli": "^0.18.1", "@types/supertest": "^2.0.8", "msw": "^0.44.0", "supertest": "^6.1.3" diff --git a/plugins/permission-react/CHANGELOG.md b/plugins/permission-react/CHANGELOG.md index 8d5a99b1ba..3215aa7b90 100644 --- a/plugins/permission-react/CHANGELOG.md +++ b/plugins/permission-react/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-permission-react +## 0.4.4 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.0.5 + ## 0.4.4-next.0 ### Patch Changes diff --git a/plugins/permission-react/package.json b/plugins/permission-react/package.json index 9a077a5bea..c0a7084f4b 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.4-next.0", + "version": "0.4.4", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -32,7 +32,7 @@ }, "dependencies": { "@backstage/config": "^1.0.1", - "@backstage/core-plugin-api": "^1.0.5-next.0", + "@backstage/core-plugin-api": "^1.0.5", "@backstage/plugin-permission-common": "^0.6.3", "cross-fetch": "^3.1.5", "react-router": "6.0.0-beta.0", @@ -44,8 +44,8 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.0", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@types/jest": "^26.0.7" diff --git a/plugins/proxy-backend/CHANGELOG.md b/plugins/proxy-backend/CHANGELOG.md index 1c124fcf8c..c80a754839 100644 --- a/plugins/proxy-backend/CHANGELOG.md +++ b/plugins/proxy-backend/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-proxy-backend +## 0.2.29 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + ## 0.2.29-next.0 ### Patch Changes diff --git a/plugins/proxy-backend/api-report.md b/plugins/proxy-backend/api-report.md index 45ef63f4d9..b6497adbaf 100644 --- a/plugins/proxy-backend/api-report.md +++ b/plugins/proxy-backend/api-report.md @@ -8,9 +8,18 @@ import express from 'express'; import { Logger } from 'winston'; import { PluginEndpointDiscovery } from '@backstage/backend-common'; -// Warning: (ae-forgotten-export) The symbol "RouterOptions" needs to be exported by the entry point index.d.ts -// Warning: (ae-missing-release-tag) "createRouter" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export function createRouter(options: RouterOptions): Promise; + +// @public (undocumented) +export interface RouterOptions { + // (undocumented) + config: Config; + // (undocumented) + discovery: PluginEndpointDiscovery; + // (undocumented) + logger: Logger; + // (undocumented) + skipInvalidProxies?: boolean; +} ``` diff --git a/plugins/proxy-backend/package.json b/plugins/proxy-backend/package.json index 52cae9d7c9..3b6c732a57 100644 --- a/plugins/proxy-backend/package.json +++ b/plugins/proxy-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-proxy-backend", "description": "A Backstage backend plugin that helps you set up proxy endpoints in the backend", - "version": "0.2.29-next.0", + "version": "0.2.29", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -32,7 +32,7 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.15.0-next.0", + "@backstage/backend-common": "^0.15.0", "@backstage/config": "^1.0.1", "@types/express": "^4.17.6", "express": "^4.17.1", @@ -46,7 +46,7 @@ "yup": "^0.32.9" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.0", + "@backstage/cli": "^0.18.1", "@types/http-proxy-middleware": "^0.19.3", "@types/supertest": "^2.0.8", "@types/uuid": "^8.0.0", diff --git a/plugins/proxy-backend/src/service/index.ts b/plugins/proxy-backend/src/service/index.ts index d87e53b5c1..31d50951fd 100644 --- a/plugins/proxy-backend/src/service/index.ts +++ b/plugins/proxy-backend/src/service/index.ts @@ -14,4 +14,5 @@ * limitations under the License. */ +export type { RouterOptions } from './router'; export { createRouter } from './router'; diff --git a/plugins/proxy-backend/src/service/router.ts b/plugins/proxy-backend/src/service/router.ts index e0910da145..b7ee7014bc 100644 --- a/plugins/proxy-backend/src/service/router.ts +++ b/plugins/proxy-backend/src/service/router.ts @@ -47,6 +47,7 @@ const safeForwardHeaders = [ 'user-agent', ]; +/** @public */ export interface RouterOptions { logger: Logger; config: Config; @@ -177,6 +178,7 @@ export function buildMiddleware( return createProxyMiddleware(filter, fullConfig); } +/** @public */ export async function createRouter( options: RouterOptions, ): Promise { diff --git a/plugins/rollbar-backend/CHANGELOG.md b/plugins/rollbar-backend/CHANGELOG.md index 2c9f3c7665..3e61d541a4 100644 --- a/plugins/rollbar-backend/CHANGELOG.md +++ b/plugins/rollbar-backend/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-rollbar-backend +## 0.1.32 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + ## 0.1.32-next.0 ### Patch Changes diff --git a/plugins/rollbar-backend/package.json b/plugins/rollbar-backend/package.json index e2150eb67c..449ff72536 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.32-next.0", + "version": "0.1.32", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,7 +34,7 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.15.0-next.0", + "@backstage/backend-common": "^0.15.0", "@backstage/config": "^1.0.1", "@types/express": "^4.17.6", "camelcase-keys": "^7.0.1", @@ -50,8 +50,8 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/backend-test-utils": "^0.1.27-next.0", - "@backstage/cli": "^0.18.1-next.0", + "@backstage/backend-test-utils": "^0.1.27", + "@backstage/cli": "^0.18.1", "@types/supertest": "^2.0.8", "msw": "^0.44.0", "supertest": "^6.1.3" diff --git a/plugins/rollbar/CHANGELOG.md b/plugins/rollbar/CHANGELOG.md index 59ab29e1c9..de7caae47d 100644 --- a/plugins/rollbar/CHANGELOG.md +++ b/plugins/rollbar/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-rollbar +## 0.4.8 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + ## 0.4.8-next.1 ### Patch Changes diff --git a/plugins/rollbar/package.json b/plugins/rollbar/package.json index 81e37f7f4c..0928e90778 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.8-next.1", + "version": "0.4.8", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -36,9 +36,9 @@ }, "dependencies": { "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", - "@backstage/plugin-catalog-react": "^1.1.3-next.2", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", + "@backstage/plugin-catalog-react": "^1.1.3", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -53,10 +53,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/core-app-api": "^1.0.5", + "@backstage/dev-utils": "^1.0.5", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/react-hooks": "^8.0.0", diff --git a/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md b/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md index 22c4364082..509e2025a7 100644 --- a/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-scaffolder-backend-module-cookiecutter +## 0.2.10 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/integration@1.3.0 + - @backstage/plugin-scaffolder-backend@1.5.0 + ## 0.2.10-next.0 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-cookiecutter/package.json b/plugins/scaffolder-backend-module-cookiecutter/package.json index 41afcdabe4..aeb8a42df6 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.10-next.0", + "version": "0.2.10", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -23,10 +23,10 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.15.0-next.0", + "@backstage/backend-common": "^0.15.0", "@backstage/errors": "^1.1.0", - "@backstage/integration": "^1.3.0-next.0", - "@backstage/plugin-scaffolder-backend": "^1.5.0-next.0", + "@backstage/integration": "^1.3.0", + "@backstage/plugin-scaffolder-backend": "^1.5.0", "@backstage/config": "^1.0.1", "@backstage/types": "^1.0.0", "command-exists": "^1.2.9", @@ -35,7 +35,7 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.0", + "@backstage/cli": "^0.18.1", "@types/fs-extra": "^9.0.1", "@types/mock-fs": "^4.13.0", "@types/jest": "^26.0.7", diff --git a/plugins/scaffolder-backend-module-rails/CHANGELOG.md b/plugins/scaffolder-backend-module-rails/CHANGELOG.md index 65e91bb9d3..64f782e243 100644 --- a/plugins/scaffolder-backend-module-rails/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-rails/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-scaffolder-backend-module-rails +## 0.4.3 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/integration@1.3.0 + - @backstage/plugin-scaffolder-backend@1.5.0 + ## 0.4.3-next.0 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-rails/package.json b/plugins/scaffolder-backend-module-rails/package.json index 6c4b6e3a58..5df1b902eb 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.3-next.0", + "version": "0.4.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -24,17 +24,17 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.15.0-next.0", - "@backstage/plugin-scaffolder-backend": "^1.5.0-next.0", + "@backstage/backend-common": "^0.15.0", + "@backstage/plugin-scaffolder-backend": "^1.5.0", "@backstage/config": "^1.0.1", "@backstage/errors": "^1.1.0", - "@backstage/integration": "^1.3.0-next.0", + "@backstage/integration": "^1.3.0", "@backstage/types": "^1.0.0", "command-exists": "^1.2.9", "fs-extra": "^10.0.1" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.0", + "@backstage/cli": "^0.18.1", "@types/jest": "^26.0.7", "@types/node": "^16.11.26", "@types/command-exists": "^1.2.0", diff --git a/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md b/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md index 6155eaf3da..21bc6b30fa 100644 --- a/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-scaffolder-backend-module-yeoman +## 0.2.8 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.5.0 + ## 0.2.8-next.0 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-yeoman/package.json b/plugins/scaffolder-backend-module-yeoman/package.json index a1f9ac9fc9..ab487b72f3 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.8-next.0", + "version": "0.2.8", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -24,13 +24,13 @@ }, "dependencies": { "@backstage/config": "^1.0.1", - "@backstage/plugin-scaffolder-backend": "^1.5.0-next.0", + "@backstage/plugin-scaffolder-backend": "^1.5.0", "@backstage/types": "^1.0.0", "winston": "^3.2.1", "yeoman-environment": "^3.9.1" }, "devDependencies": { - "@backstage/backend-common": "^0.15.0-next.0", + "@backstage/backend-common": "^0.15.0", "@types/jest": "^26.0.7" }, "files": [ diff --git a/plugins/scaffolder-backend/CHANGELOG.md b/plugins/scaffolder-backend/CHANGELOG.md index 7610ccfe49..c471cc82eb 100644 --- a/plugins/scaffolder-backend/CHANGELOG.md +++ b/plugins/scaffolder-backend/CHANGELOG.md @@ -1,5 +1,31 @@ # @backstage/plugin-scaffolder-backend +## 1.5.0 + +### Minor Changes + +- c4b452e16a: Starting the implementation of the Wizard page for the `next` scaffolder plugin +- 593dea6710: Add support for Basic Auth for Bitbucket Server. +- 3b7930b3e5: Add support for Bearer Authorization header / token-based auth at Git commands. +- 3f1316f1c5: User Bearer Authorization header at Git commands with token-based auth at Bitbucket Server. +- eeff5046ae: Updated `publish:gitlab:merge-request` action to allow commit updates and deletes +- 692d5d3405: Added `reviewers` and `teamReviewers` parameters to `publish:github:pull-request` action to add reviewers on the pull request created by the action + +### Patch Changes + +- fc8a5f797b: Add a `publish:gerrit:review` scaffolder action +- c971afbf21: The `publish:file` action has been deprecated in favor of testing templates using the template editor instead. Note that this action is not and was never been installed by default. +- b10b6c4aa4: Fix issue on Windows where templated files where not properly skipped as intended. +- 56e1b4b89c: Fixed typos in alpha types. +- dad0f65494: Fail gracefully if an invalid `Authorization` header is passed to `POST /v2/tasks` +- 014b3b7776: Add missing `res.end()` in scaffolder backend `EventStream` usage +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/backend-plugin-api@0.1.1 + - @backstage/plugin-catalog-node@1.0.1 + - @backstage/integration@1.3.0 + - @backstage/plugin-catalog-backend@1.3.1 + ## 1.5.0-next.2 ### Minor Changes diff --git a/plugins/scaffolder-backend/api-report.md b/plugins/scaffolder-backend/api-report.md index de9a9e677f..da8782667e 100644 --- a/plugins/scaffolder-backend/api-report.md +++ b/plugins/scaffolder-backend/api-report.md @@ -5,7 +5,7 @@ ```ts /// -import { BackendRegistrable } from '@backstage/backend-plugin-api'; +import { BackendFeature } from '@backstage/backend-plugin-api'; import { CatalogApi } from '@backstage/catalog-client'; import { CatalogProcessor } from '@backstage/plugin-catalog-backend'; import { CatalogProcessorEmit } from '@backstage/plugin-catalog-backend'; @@ -178,6 +178,7 @@ export function createGithubRepoCreateAction(options: { }): TemplateAction<{ repoUrl: string; description?: string | undefined; + homepage?: string | undefined; access?: string | undefined; deleteBranchOnMerge?: boolean | undefined; gitAuthorName?: string | undefined; @@ -303,11 +304,6 @@ export function createPublishBitbucketServerAction(options: { token?: string | undefined; }>; -// @public -export function createPublishFileAction(): TemplateAction<{ - path: string; -}>; - // @public export function createPublishGerritAction(options: { integrations: ScmIntegrationRegistry; @@ -343,6 +339,7 @@ export function createPublishGithubAction(options: { }): TemplateAction<{ repoUrl: string; description?: string | undefined; + homepage?: string | undefined; access?: string | undefined; defaultBranch?: string | undefined; protectDefaultBranch?: boolean | undefined; @@ -459,11 +456,7 @@ export class DatabaseTaskStore implements TaskStore { // (undocumented) claimTask(): Promise; // (undocumented) - completeTask({ - taskId, - status, - eventBody, - }: { + completeTask(options: { taskId: string; status: TaskStatus; eventBody: JsonObject; @@ -491,11 +484,11 @@ export class DatabaseTaskStore implements TaskStore { tasks: SerializedTask[]; }>; // (undocumented) - listEvents({ taskId, after }: TaskStoreListEventsOptions): Promise<{ + listEvents(options: TaskStoreListEventsOptions): Promise<{ events: SerializedTaskEvent[]; }>; // (undocumented) - listStaleTasks({ timeoutS }: { timeoutS: number }): Promise<{ + listStaleTasks(options: { timeoutS: number }): Promise<{ tasks: { taskId: string; }[]; @@ -504,20 +497,14 @@ export class DatabaseTaskStore implements TaskStore { // @public export type DatabaseTaskStoreOptions = { - database: Knex; + database: PluginDatabaseManager | Knex; }; // @public export const executeShellCommand: (options: RunCommandOptions) => Promise; // @public -export function fetchContents({ - reader, - integrations, - baseUrl, - fetchUrl, - outputPath, -}: { +export function fetchContents(options: { reader: UrlReader; integrations: ScmIntegrations; baseUrl?: string; @@ -566,7 +553,7 @@ export type RunCommandOptions = { }; // @alpha -export const scaffolderCatalogModule: (option: unknown) => BackendRegistrable; +export const scaffolderCatalogModule: (options?: unknown) => BackendFeature; // @public (undocumented) export class ScaffolderEntitiesProcessor implements CatalogProcessor { diff --git a/plugins/scaffolder-backend/package.json b/plugins/scaffolder-backend/package.json index 7fc9211701..3b9c24cf88 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.5.0-next.2", + "version": "1.5.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -35,16 +35,16 @@ "build:assets": "node scripts/build-nunjucks.js" }, "dependencies": { - "@backstage/backend-common": "^0.15.0-next.1", + "@backstage/backend-common": "^0.15.0", "@backstage/catalog-client": "^1.0.4", "@backstage/catalog-model": "^1.1.0", "@backstage/config": "^1.0.1", "@backstage/errors": "^1.1.0", - "@backstage/integration": "^1.3.0-next.1", - "@backstage/plugin-catalog-backend": "^1.3.1-next.2", + "@backstage/integration": "^1.3.0", + "@backstage/plugin-catalog-backend": "^1.3.1", "@backstage/plugin-scaffolder-common": "^1.1.2", - "@backstage/backend-plugin-api": "^0.1.1-next.0", - "@backstage/plugin-catalog-node": "^1.0.1-next.0", + "@backstage/backend-plugin-api": "^0.1.1", + "@backstage/plugin-catalog-node": "^1.0.1", "@backstage/types": "^1.0.0", "@gitbeaker/core": "^35.6.0", "@gitbeaker/node": "^35.1.0", @@ -79,8 +79,8 @@ "zod": "^3.11.6" }, "devDependencies": { - "@backstage/backend-test-utils": "^0.1.27-next.0", - "@backstage/cli": "^0.18.1-next.1", + "@backstage/backend-test-utils": "^0.1.27", + "@backstage/cli": "^0.18.1", "@types/command-exists": "^1.2.0", "@types/fs-extra": "^9.0.1", "@types/git-url-parse": "^9.0.0", diff --git a/plugins/scaffolder-backend/src/extension/ScaffolderCatalogModule.test.ts b/plugins/scaffolder-backend/src/extension/ScaffolderCatalogModule.test.ts index f07eb0f7ae..1ced3dd676 100644 --- a/plugins/scaffolder-backend/src/extension/ScaffolderCatalogModule.test.ts +++ b/plugins/scaffolder-backend/src/extension/ScaffolderCatalogModule.test.ts @@ -14,27 +14,19 @@ * limitations under the License. */ -import { BackendInitRegistry } from '@backstage/backend-plugin-api'; +import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node'; import { ScaffolderEntitiesProcessor } from '../processor'; import { scaffolderCatalogModule } from './ScaffolderCatalogModule'; +import { startTestBackend } from '@backstage/backend-test-utils'; describe('ScaffolderCatalogModule', () => { - it('should register the extension point', () => { - // TODO(jhaals): clean this up and add test helpers for backend system. - const ext = scaffolderCatalogModule({}); - expect(ext.id).toBe('catalog.scaffolder.module'); - const registry: jest.Mocked = { - registerInit: jest.fn(), - } as any; - ext.register(registry); - - const extensionPoint = { - addProcessor: jest.fn(), - }; - - registry.registerInit.mock.calls[0][0].init({ - catalogProcessingExtensionPoint: extensionPoint, + it('should register the extension point', async () => { + const extensionPoint = { addProcessor: jest.fn() }; + await startTestBackend({ + extensionPoints: [[catalogProcessingExtensionPoint, extensionPoint]], + features: [scaffolderCatalogModule({})], }); + expect(extensionPoint.addProcessor).toHaveBeenCalledWith( new ScaffolderEntitiesProcessor(), ); diff --git a/plugins/scaffolder-backend/src/extension/ScaffolderCatalogModule.ts b/plugins/scaffolder-backend/src/extension/ScaffolderCatalogModule.ts index bdce46a31a..0fb3c2e428 100644 --- a/plugins/scaffolder-backend/src/extension/ScaffolderCatalogModule.ts +++ b/plugins/scaffolder-backend/src/extension/ScaffolderCatalogModule.ts @@ -14,7 +14,7 @@ * limitations under the License. */ import { createBackendModule } from '@backstage/backend-plugin-api'; -import { catalogProcessingExtentionPoint } from '@backstage/plugin-catalog-node'; +import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node'; import { ScaffolderEntitiesProcessor } from '../processor'; /** @@ -27,12 +27,10 @@ export const scaffolderCatalogModule = createBackendModule({ register(env) { env.registerInit({ deps: { - catalogProcessingExtensionPoint: catalogProcessingExtentionPoint, + catalog: catalogProcessingExtensionPoint, }, - async init({ catalogProcessingExtensionPoint }) { - catalogProcessingExtensionPoint.addProcessor( - new ScaffolderEntitiesProcessor(), - ); + async init({ catalog }) { + catalog.addProcessor(new ScaffolderEntitiesProcessor()); }, }); }, diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/helpers.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/helpers.ts index a01fcee6f7..4b82595cfd 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/helpers.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/helpers.ts @@ -26,19 +26,15 @@ import path from 'path'; * * @public */ -export async function fetchContents({ - reader, - integrations, - baseUrl, - fetchUrl = '.', - outputPath, -}: { +export async function fetchContents(options: { reader: UrlReader; integrations: ScmIntegrations; baseUrl?: string; fetchUrl?: string; outputPath: string; }) { + const { reader, integrations, baseUrl, fetchUrl = '.', outputPath } = options; + let fetchUrlIsAbsolute = false; try { // eslint-disable-next-line no-new diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/template.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/template.ts index 5e5b7052ed..1ead7ebcd6 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/template.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/template.ts @@ -27,7 +27,6 @@ import { TemplateFilter, SecureTemplater, } from '../../../../lib/templating/SecureTemplater'; -import path from 'path'; /** * Downloads a skeleton, templates variables into file and directory names and content. @@ -301,12 +300,13 @@ export function createFetchTemplateAction(options: { } function containsSkippedContent(localOutputPath: string): boolean { - // if the path is absolute means that the root directory has been skipped // if the path is empty means that there is a file skipped in the root + // if the path starts with a separator it means that the root directory has been skipped // if the path includes // means that there is a subdirectory skipped + // All paths returned are considered with / seperator because of globby returning the linux seperator for all os'. return ( localOutputPath === '' || - path.isAbsolute(localOutputPath) || - localOutputPath.includes(`${path.sep}${path.sep}`) + localOutputPath.startsWith('/') || + localOutputPath.includes('//') ); } diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubRepoCreate.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubRepoCreate.test.ts index 0e7e907917..f04a735bee 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubRepoCreate.test.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubRepoCreate.test.ts @@ -129,6 +129,26 @@ describe('github:repo:create', () => { allow_rebase_merge: true, visibility: 'public', }); + + await action.handler({ + ...mockContext, + input: { + ...mockContext.input, + homepage: 'https://example.com', + }, + }); + expect(mockOctokit.rest.repos.createInOrg).toHaveBeenCalledWith({ + description: 'description', + homepage: 'https://example.com', + name: 'repo', + org: 'owner', + private: true, + delete_branch_on_merge: false, + allow_squash_merge: true, + allow_merge_commit: true, + allow_rebase_merge: true, + visibility: 'private', + }); }); it('should call the githubApis with the correct values for createForAuthenticatedUser', async () => { @@ -171,6 +191,26 @@ describe('github:repo:create', () => { allow_merge_commit: true, allow_rebase_merge: true, }); + + await action.handler({ + ...mockContext, + input: { + ...mockContext.input, + homepage: 'https://example.com', + }, + }); + expect( + mockOctokit.rest.repos.createForAuthenticatedUser, + ).toHaveBeenCalledWith({ + description: 'description', + homepage: 'https://example.com', + name: 'repo', + private: true, + delete_branch_on_merge: false, + allow_squash_merge: true, + allow_merge_commit: true, + allow_rebase_merge: true, + }); }); it('should add access for the team when it starts with the owner', async () => { diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubRepoCreate.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubRepoCreate.ts index 1e92d91a64..5bc1fa8702 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubRepoCreate.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubRepoCreate.ts @@ -42,6 +42,7 @@ export function createGithubRepoCreateAction(options: { return createTemplateAction<{ repoUrl: string; description?: string; + homepage?: string; access?: string; deleteBranchOnMerge?: boolean; gitAuthorName?: string; @@ -79,6 +80,7 @@ export function createGithubRepoCreateAction(options: { properties: { repoUrl: inputProps.repoUrl, description: inputProps.description, + homepage: inputProps.homepage, access: inputProps.access, requireCodeOwnerReviews: inputProps.requireCodeOwnerReviews, requiredStatusCheckContexts: inputProps.requiredStatusCheckContexts, @@ -104,6 +106,7 @@ export function createGithubRepoCreateAction(options: { const { repoUrl, description, + homepage, access, repoVisibility = 'private', deleteBranchOnMerge = false, @@ -135,6 +138,7 @@ export function createGithubRepoCreateAction(options: { owner, repoVisibility, description, + homepage, deleteBranchOnMerge, allowMergeCommit, allowSquashMerge, diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/helpers.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/helpers.ts index b60794295a..fd3899b18a 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/helpers.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/helpers.ts @@ -97,6 +97,7 @@ export async function createGithubRepoWithCollaboratorsAndTopics( owner: string, repoVisibility: 'private' | 'internal' | 'public', description: string | undefined, + homepage: string | undefined, deleteBranchOnMerge: boolean, allowMergeCommit: boolean, allowSquashMerge: boolean, @@ -138,6 +139,7 @@ export async function createGithubRepoWithCollaboratorsAndTopics( allow_merge_commit: allowMergeCommit, allow_squash_merge: allowSquashMerge, allow_rebase_merge: allowRebaseMerge, + homepage: homepage, }) : client.rest.repos.createForAuthenticatedUser({ name: repo, @@ -147,6 +149,7 @@ export async function createGithubRepoWithCollaboratorsAndTopics( allow_merge_commit: allowMergeCommit, allow_squash_merge: allowSquashMerge, allow_rebase_merge: allowRebaseMerge, + homepage: homepage, }); let newRepo; diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/inputProperties.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/inputProperties.ts index b0113a4485..153b2e6941 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/inputProperties.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/inputProperties.ts @@ -23,6 +23,10 @@ const description = { title: 'Repository Description', type: 'string', }; +const homepage = { + title: 'Repository Homepage', + type: 'string', +}; const access = { title: 'Repository Access', description: `Sets an admin collaborator on the repository. Can either be a user reference different from 'owner' in 'repoUrl' or team reference, eg. 'org/team-name'`, @@ -156,6 +160,7 @@ export { description }; export { gitAuthorEmail }; export { gitAuthorName }; export { gitCommitMessage }; +export { homepage }; export { protectDefaultBranch }; export { protectEnforceAdmins }; export { repoUrl }; diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/file.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/file.ts deleted file mode 100644 index 2d2cb85930..0000000000 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/file.ts +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright 2021 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import fs from 'fs-extra'; -import { dirname } from 'path'; -import { InputError } from '@backstage/errors'; -import { createTemplateAction } from '../../createTemplateAction'; - -/** - * This task is useful for local development and testing of both the scaffolder - * and scaffolder templates. - * - * @remarks - * - * This action is not installed by default and should not be installed in - * production, as it writes the files to the local filesystem of the scaffolder. - * - * @public - */ -export function createPublishFileAction() { - return createTemplateAction<{ path: string }>({ - id: 'publish:file', - description: 'Writes contents of the workspace to a local directory', - schema: { - input: { - type: 'object', - required: ['path'], - properties: { - path: { - title: 'Path to a directory where the output will be written', - type: 'string', - }, - }, - }, - }, - async handler(ctx) { - const { path } = ctx.input; - - const exists = await fs.pathExists(path); - if (exists) { - throw new InputError('Output path already exists'); - } - await fs.ensureDir(dirname(path)); - await fs.copy(ctx.workspacePath, path); - }, - }); -} diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/github.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/github.test.ts index a526e73019..6a2665bc8d 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/github.test.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/github.test.ts @@ -134,6 +134,26 @@ describe('publish:github', () => { allow_rebase_merge: true, visibility: 'public', }); + + await action.handler({ + ...mockContext, + input: { + ...mockContext.input, + homepage: 'https://example.com', + }, + }); + expect(mockOctokit.rest.repos.createInOrg).toHaveBeenCalledWith({ + description: 'description', + name: 'repo', + homepage: 'https://example.com', + org: 'owner', + private: true, + delete_branch_on_merge: false, + allow_squash_merge: true, + allow_merge_commit: true, + allow_rebase_merge: true, + visibility: 'private', + }); }); it('should call the githubApis with the correct values for createForAuthenticatedUser', async () => { @@ -176,6 +196,26 @@ describe('publish:github', () => { allow_merge_commit: true, allow_rebase_merge: true, }); + + await action.handler({ + ...mockContext, + input: { + ...mockContext.input, + homepage: 'https://example.com', + }, + }); + expect( + mockOctokit.rest.repos.createForAuthenticatedUser, + ).toHaveBeenCalledWith({ + description: 'description', + homepage: 'https://example.com', + name: 'repo', + private: true, + delete_branch_on_merge: false, + allow_squash_merge: true, + allow_merge_commit: true, + allow_rebase_merge: true, + }); }); it('should call initRepoAndPush with the correct values', async () => { @@ -812,4 +852,37 @@ describe('publish:github', () => { expect(enableBranchProtectionOnDefaultRepoBranch).not.toHaveBeenCalled(); }); + + it('should add homepage when provided', async () => { + mockOctokit.rest.users.getByUsername.mockResolvedValue({ + data: { type: 'User' }, + }); + + mockOctokit.rest.repos.createForAuthenticatedUser.mockResolvedValue({ + data: { + clone_url: 'https://github.com/clone/url.git', + html_url: 'https://github.com/html/url', + }, + }); + + mockOctokit.rest.repos.replaceAllTopics.mockResolvedValue({ + data: { + names: ['node.js'], + }, + }); + + await action.handler({ + ...mockContext, + input: { + ...mockContext.input, + topics: ['node.js'], + }, + }); + + expect(mockOctokit.rest.repos.replaceAllTopics).toHaveBeenCalledWith({ + owner: 'owner', + repo: 'repo', + names: ['node.js'], + }); + }); }); diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/github.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/github.ts index eea006ae8f..8ce9105237 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/github.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/github.ts @@ -45,6 +45,7 @@ export function createPublishGithubAction(options: { return createTemplateAction<{ repoUrl: string; description?: string; + homepage?: string; access?: string; defaultBranch?: string; protectDefaultBranch?: boolean; @@ -88,6 +89,7 @@ export function createPublishGithubAction(options: { properties: { repoUrl: inputProps.repoUrl, description: inputProps.description, + homepage: inputProps.homepage, access: inputProps.access, requireCodeOwnerReviews: inputProps.requireCodeOwnerReviews, requiredStatusCheckContexts: inputProps.requiredStatusCheckContexts, @@ -120,6 +122,7 @@ export function createPublishGithubAction(options: { const { repoUrl, description, + homepage, access, requireCodeOwnerReviews = false, requiredStatusCheckContexts = [], @@ -159,6 +162,7 @@ export function createPublishGithubAction(options: { owner, repoVisibility, description, + homepage, deleteBranchOnMerge, allowMergeCommit, allowSquashMerge, diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/index.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/index.ts index 8819c93d08..a8a40ab1df 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/index.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/index.ts @@ -18,7 +18,6 @@ export { createPublishAzureAction } from './azure'; export { createPublishBitbucketAction } from './bitbucket'; export { createPublishBitbucketCloudAction } from './bitbucketCloud'; export { createPublishBitbucketServerAction } from './bitbucketServer'; -export { createPublishFileAction } from './file'; export { createPublishGerritAction } from './gerrit'; export { createPublishGerritReviewAction } from './gerritReview'; export { createPublishGithubAction } from './github'; diff --git a/plugins/scaffolder-backend/src/scaffolder/tasks/DatabaseTaskStore.ts b/plugins/scaffolder-backend/src/scaffolder/tasks/DatabaseTaskStore.ts index d62e59744f..206dc2ac1d 100644 --- a/plugins/scaffolder-backend/src/scaffolder/tasks/DatabaseTaskStore.ts +++ b/plugins/scaffolder-backend/src/scaffolder/tasks/DatabaseTaskStore.ts @@ -15,7 +15,10 @@ */ import { JsonObject } from '@backstage/types'; -import { resolvePackagePath } from '@backstage/backend-common'; +import { + PluginDatabaseManager, + resolvePackagePath, +} from '@backstage/backend-common'; import { ConflictError, NotFoundError } from '@backstage/errors'; import { Knex } from 'knex'; import { v4 as uuid } from 'uuid'; @@ -61,9 +64,20 @@ export type RawDbTaskEventRow = { * @public */ export type DatabaseTaskStoreOptions = { - database: Knex; + database: PluginDatabaseManager | Knex; }; +/** + * Typeguard to help DatabaseTaskStore understand when database is PluginDatabaseManager vs. when database is a Knex instance. + * + * * @public + */ +function isPluginDatabaseManager( + opt: PluginDatabaseManager | Knex, +): opt is PluginDatabaseManager { + return (opt as PluginDatabaseManager).getClient !== undefined; +} + const parseSqlDateToIsoString = (input: T): T | string => { if (typeof input === 'string') { return DateTime.fromSQL(input, { zone: 'UTC' }).toISO(); @@ -83,14 +97,45 @@ export class DatabaseTaskStore implements TaskStore { static async create( options: DatabaseTaskStoreOptions, ): Promise { - await options.database.migrate.latest({ - directory: migrationsDir, - }); - return new DatabaseTaskStore(options); + const { database } = options; + const client = await this.getClient(database); + + await this.runMigrations(database, client); + + return new DatabaseTaskStore(client); } - private constructor(options: DatabaseTaskStoreOptions) { - this.db = options.database; + private static async getClient( + database: PluginDatabaseManager | Knex, + ): Promise { + if (isPluginDatabaseManager(database)) { + return database.getClient(); + } + + return database; + } + + private static async runMigrations( + database: PluginDatabaseManager | Knex, + client: Knex, + ): Promise { + if (!isPluginDatabaseManager(database)) { + await client.migrate.latest({ + directory: migrationsDir, + }); + + return; + } + + if (!database.migrations?.skip) { + await client.migrate.latest({ + directory: migrationsDir, + }); + } + } + + private constructor(client: Knex) { + this.db = client; } async list(options: { @@ -211,9 +256,11 @@ export class DatabaseTaskStore implements TaskStore { } } - async listStaleTasks({ timeoutS }: { timeoutS: number }): Promise<{ + async listStaleTasks(options: { timeoutS: number }): Promise<{ tasks: { taskId: string }[]; }> { + const { timeoutS } = options; + const rawRows = await this.db('tasks') .where('status', 'processing') .andWhere( @@ -232,15 +279,13 @@ export class DatabaseTaskStore implements TaskStore { return { tasks }; } - async completeTask({ - taskId, - status, - eventBody, - }: { + async completeTask(options: { taskId: string; status: TaskStatus; eventBody: JsonObject; }): Promise { + const { taskId, status, eventBody } = options; + let oldStatus: string; if (status === 'failed' || status === 'completed') { oldStatus = 'processing'; @@ -301,10 +346,10 @@ export class DatabaseTaskStore implements TaskStore { }); } - async listEvents({ - taskId, - after, - }: TaskStoreListEventsOptions): Promise<{ events: SerializedTaskEvent[] }> { + async listEvents( + options: TaskStoreListEventsOptions, + ): Promise<{ events: SerializedTaskEvent[] }> { + const { taskId, after } = options; const rawEvents = await this.db('task_events') .where({ task_id: taskId, diff --git a/plugins/scaffolder-backend/src/scaffolder/tasks/StorageTaskBroker.test.ts b/plugins/scaffolder-backend/src/scaffolder/tasks/StorageTaskBroker.test.ts index 2350072806..4fc142a991 100644 --- a/plugins/scaffolder-backend/src/scaffolder/tasks/StorageTaskBroker.test.ts +++ b/plugins/scaffolder-backend/src/scaffolder/tasks/StorageTaskBroker.test.ts @@ -32,8 +32,9 @@ async function createStore(): Promise { }, }), ).forPlugin('scaffolder'); + return await DatabaseTaskStore.create({ - database: await manager.getClient(), + database: manager, }); } diff --git a/plugins/scaffolder-backend/src/scaffolder/tasks/TaskWorker.test.ts b/plugins/scaffolder-backend/src/scaffolder/tasks/TaskWorker.test.ts index e1421486f4..ee8ae400c4 100644 --- a/plugins/scaffolder-backend/src/scaffolder/tasks/TaskWorker.test.ts +++ b/plugins/scaffolder-backend/src/scaffolder/tasks/TaskWorker.test.ts @@ -40,7 +40,7 @@ async function createStore(): Promise { }), ).forPlugin('scaffolder'); return await DatabaseTaskStore.create({ - database: await manager.getClient(), + database: manager, }); } diff --git a/plugins/scaffolder-backend/src/service/router.test.ts b/plugins/scaffolder-backend/src/service/router.test.ts index f545e57f85..e59f222e2d 100644 --- a/plugins/scaffolder-backend/src/service/router.test.ts +++ b/plugins/scaffolder-backend/src/service/router.test.ts @@ -127,7 +127,7 @@ describe('createRouter', () => { beforeEach(async () => { const logger = getVoidLogger(); const databaseTaskStore = await DatabaseTaskStore.create({ - database: await createDatabase().getClient(), + database: createDatabase(), }); taskBroker = new StorageTaskBroker(databaseTaskStore, logger); @@ -267,6 +267,57 @@ describe('createRouter', () => { ); }); + it('should not throw when an invalid authorization header is passed', async () => { + const broker = taskBroker.dispatch as jest.Mocked['dispatch']; + const mockToken = 'blob.eyJzdWIiOiIiLCJuYW1lIjoiSm9obiBEb2UifQ.blob'; + + await request(app) + .post('/v2/tasks') + .set('Authorization', `Bearer ${mockToken}`) + .send({ + templateRef: stringifyEntityRef({ + kind: 'template', + name: 'create-react-app-template', + }), + values: { + required: 'required-value', + }, + }); + expect(broker).toHaveBeenCalledWith( + expect.objectContaining({ + createdBy: undefined, + secrets: { + backstageToken: undefined, + }, + + spec: { + apiVersion: mockTemplate.apiVersion, + steps: mockTemplate.spec.steps.map((step, index) => ({ + ...step, + id: step.id ?? `step-${index + 1}`, + name: step.name ?? step.action, + })), + output: mockTemplate.spec.output ?? {}, + parameters: { + required: 'required-value', + }, + user: { + entity: undefined, + ref: undefined, + }, + templateInfo: { + entityRef: stringifyEntityRef({ + kind: 'Template', + namespace: 'Default', + name: mockTemplate.metadata?.name, + }), + baseUrl: 'https://dev.azure.com', + }, + }, + }), + ); + }); + it('should not decorate a user when no backstage auth is passed', async () => { const broker = taskBroker.dispatch as jest.Mocked['dispatch']; diff --git a/plugins/scaffolder-backend/src/service/router.ts b/plugins/scaffolder-backend/src/service/router.ts index 2f72004afe..1c6ea39443 100644 --- a/plugins/scaffolder-backend/src/service/router.ts +++ b/plugins/scaffolder-backend/src/service/router.ts @@ -97,9 +97,7 @@ export async function createRouter( let taskBroker: TaskBroker; if (!options.taskBroker) { - const databaseTaskStore = await DatabaseTaskStore.create({ - database: await database.getClient(), - }); + const databaseTaskStore = await DatabaseTaskStore.create({ database }); taskBroker = new StorageTaskBroker(databaseTaskStore, logger); } else { taskBroker = options.taskBroker; @@ -146,7 +144,10 @@ export async function createRouter( '/v2/templates/:namespace/:kind/:name/parameter-schema', async (req, res) => { const { namespace, kind, name } = req.params; - const { token } = parseBearerToken(req.headers.authorization); + const { token } = parseBearerToken({ + header: req.headers.authorization, + logger, + }); const template = await findTemplate({ catalogApi: catalogClient, entityRef: { kind, namespace, name }, @@ -187,9 +188,10 @@ export async function createRouter( const { kind, namespace, name } = parseEntityRef(templateRef, { defaultKind: 'template', }); - const { token, entityRef: userEntityRef } = parseBearerToken( - req.headers.authorization, - ); + const { token, entityRef: userEntityRef } = parseBearerToken({ + header: req.headers.authorization, + logger, + }); const userEntity = userEntityRef ? await catalogClient.getEntityByRef(userEntityRef, { token }) @@ -389,7 +391,10 @@ export async function createRouter( throw new InputError('Input template is not a template'); } - const { token } = parseBearerToken(req.headers.authorization); + const { token } = parseBearerToken({ + header: req.headers.authorization, + logger, + }); for (const parameters of [template.spec.parameters ?? []].flat()) { const result = validate(body.values, parameters); @@ -440,7 +445,13 @@ export async function createRouter( return app; } -function parseBearerToken(header?: string): { +function parseBearerToken({ + header, + logger, +}: { + header?: string; + logger: Logger; +}): { token?: string; entityRef?: string; } { @@ -472,8 +483,12 @@ function parseBearerToken(header?: string): { throw new TypeError('Expected string sub claim'); } + // Check that it's a valid ref, otherwise this will throw. + parseEntityRef(sub); + return { entityRef: sub, token }; } catch (e) { - throw new InputError(`Invalid authorization header: ${stringifyError(e)}`); + logger.error(`Invalid authorization header: ${stringifyError(e)}`); + return {}; } } diff --git a/plugins/scaffolder/CHANGELOG.md b/plugins/scaffolder/CHANGELOG.md index e96832d732..323e91f28b 100644 --- a/plugins/scaffolder/CHANGELOG.md +++ b/plugins/scaffolder/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-scaffolder +## 1.5.0 + +### Minor Changes + +- c4b452e16a: Starting the implementation of the Wizard page for the `next` scaffolder plugin + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.3.0 + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + - @backstage/plugin-catalog-common@1.0.5 + - @backstage/integration-react@1.1.3 + - @backstage/plugin-permission-react@0.4.4 + ## 1.5.0-next.2 ### Patch Changes diff --git a/plugins/scaffolder/api-report.md b/plugins/scaffolder/api-report.md index 24ff8e210d..d611309df3 100644 --- a/plugins/scaffolder/api-report.md +++ b/plugins/scaffolder/api-report.md @@ -44,7 +44,7 @@ export type CustomFieldValidator = ( context: { apiHolder: ApiHolder; }, -) => void; +) => void | Promise; // @public export const EntityNamePickerFieldExtension: FieldExtensionComponent< @@ -248,11 +248,7 @@ export interface ScaffolderApi { ): Promise; listActions(): Promise; // (undocumented) - listTasks?({ - filterByOwnership, - }: { - filterByOwnership: 'owned' | 'all'; - }): Promise<{ + listTasks?(options: { filterByOwnership: 'owned' | 'all' }): Promise<{ tasks: ScaffolderTask[]; }>; scaffold( diff --git a/plugins/scaffolder/package.json b/plugins/scaffolder/package.json index 164d7172bf..52be3be8a4 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.5.0-next.2", + "version": "1.5.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -38,14 +38,14 @@ "@backstage/catalog-client": "^1.0.4", "@backstage/catalog-model": "^1.1.0", "@backstage/config": "^1.0.1", - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", "@backstage/errors": "^1.1.0", - "@backstage/integration": "^1.3.0-next.1", - "@backstage/integration-react": "^1.1.3-next.1", - "@backstage/plugin-catalog-common": "^1.0.5-next.0", - "@backstage/plugin-catalog-react": "^1.1.3-next.2", - "@backstage/plugin-permission-react": "^0.4.4-next.0", + "@backstage/integration": "^1.3.0", + "@backstage/integration-react": "^1.1.3", + "@backstage/plugin-catalog-common": "^1.0.5", + "@backstage/plugin-catalog-react": "^1.1.3", + "@backstage/plugin-permission-react": "^0.4.4", "@backstage/plugin-scaffolder-common": "^1.1.2", "@backstage/theme": "^0.2.16", "@backstage/types": "^1.0.0", @@ -65,6 +65,7 @@ "humanize-duration": "^3.25.1", "immer": "^9.0.1", "json-schema": "^0.4.0", + "json-schema-library": "^6.0.0", "lodash": "^4.17.21", "luxon": "^3.0.0", "qs": "^6.9.4", @@ -80,11 +81,11 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/plugin-catalog": "^1.5.0-next.2", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/core-app-api": "^1.0.5", + "@backstage/dev-utils": "^1.0.5", + "@backstage/plugin-catalog": "^1.5.0", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/react-hooks": "^8.0.0", diff --git a/plugins/scaffolder/src/extensions/types.ts b/plugins/scaffolder/src/extensions/types.ts index be8dc14b0a..9b42ba478b 100644 --- a/plugins/scaffolder/src/extensions/types.ts +++ b/plugins/scaffolder/src/extensions/types.ts @@ -25,7 +25,7 @@ export type CustomFieldValidator = ( data: TFieldReturnValue, field: FieldValidation, context: { apiHolder: ApiHolder }, -) => void; +) => void | Promise; /** * Type for the Custom Field Extension with the diff --git a/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/Stepper.test.tsx b/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/Stepper.test.tsx index 2b091883ae..90901f22c5 100644 --- a/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/Stepper.test.tsx +++ b/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/Stepper.test.tsx @@ -17,7 +17,7 @@ import React from 'react'; import { TemplateParameterSchema } from '../../../types'; import { Stepper } from './Stepper'; import { renderInTestApp } from '@backstage/test-utils'; -import { fireEvent } from '@testing-library/react'; +import { act, fireEvent } from '@testing-library/react'; describe('Stepper', () => { it('should render the step titles for each step of the manifest', async () => { @@ -53,7 +53,9 @@ describe('Stepper', () => { expect(getByText('Next')).toBeInTheDocument(); - await fireEvent.click(getByText('Next')); + await act(async () => { + await fireEvent.click(getByText('Next')); + }); expect(getByText('Review')).toBeInTheDocument(); }); @@ -93,9 +95,13 @@ describe('Stepper', () => { target: { value: 'im a test value' }, }); - await fireEvent.click(getByText('Next')); + await act(async () => { + await fireEvent.click(getByText('Next')); + }); - await fireEvent.click(getByText('Back')); + await act(async () => { + await fireEvent.click(getByText('Back')); + }); expect(getByRole('textbox', { name: 'name' })).toHaveValue( 'im a test value', diff --git a/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/Stepper.tsx b/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/Stepper.tsx index 19335d4993..b85a1e1f5d 100644 --- a/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/Stepper.tsx +++ b/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/Stepper.tsx @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import { useApiHolder } from '@backstage/core-plugin-api'; import { JsonObject } from '@backstage/types'; import { Stepper as MuiStepper, @@ -21,11 +22,12 @@ import { Button, makeStyles, } from '@material-ui/core'; -import { withTheme } from '@rjsf/core'; +import { FieldValidation, withTheme } from '@rjsf/core'; import { Theme as MuiTheme } from '@rjsf/material-ui'; import React, { useMemo, useState } from 'react'; import { FieldExtensionOptions } from '../../../extensions'; import { TemplateParameterSchema } from '../../../types'; +import { createAsyncValidators } from './createAsyncValidators'; import { useTemplateSchema } from './useTemplateSchema'; const useStyles = makeStyles(theme => ({ @@ -51,8 +53,12 @@ const Form = withTheme(MuiTheme); export const Stepper = (props: StepperProps) => { const { steps } = useTemplateSchema(props.manifest); + const apiHolder = useApiHolder(); const [activeStep, setActiveStep] = useState(0); const [formState, setFormState] = useState({}); + const [errors, setErrors] = useState< + undefined | Record + >(); const styles = useStyles(); const extensions = useMemo(() => { @@ -61,12 +67,40 @@ export const Stepper = (props: StepperProps) => { ); }, [props.extensions]); + const validators = useMemo(() => { + return Object.fromEntries( + props.extensions.map(({ name, validation }) => [name, validation]), + ); + }, [props.extensions]); + + const validation = useMemo(() => { + const { mergedSchema } = steps[activeStep]; + return createAsyncValidators(mergedSchema, validators, { + apiHolder, + }); + }, [steps, activeStep, validators, apiHolder]); + const handleBack = () => { setActiveStep(prevActiveStep => prevActiveStep - 1); }; - const handleNext = ({ formData }: { formData: JsonObject }) => { - setActiveStep(prevActiveStep => prevActiveStep + 1); + const handleNext = async ({ formData }: { formData: JsonObject }) => { + // TODO(blam): What do we do about loading states, does each field extension get a chance + // to display it's own loading? Or should we grey out the entire form. + setErrors(undefined); + + const returnedValidation = await validation(formData); + + const hasErrors = Object.values(returnedValidation).some(i => { + return i.__errors.length > 0; + }); + + if (hasErrors) { + setErrors(returnedValidation); + } else { + setErrors(undefined); + setActiveStep(prevActiveStep => prevActiveStep + 1); + } setFormState(current => ({ ...current, ...formData })); }; @@ -81,6 +115,7 @@ export const Stepper = (props: StepperProps) => {
{ + it('should call the correct functions for validation', async () => { + const schema: JsonObject = { + type: 'object', + properties: { + name: { + type: 'string', + 'ui:field': 'NameField', + }, + address: { + type: 'object', + 'ui:field': 'AddressField', + properties: { + street: { + type: 'string', + }, + postcode: { + type: 'string', + }, + }, + }, + }, + }; + + const validators = { NameField: jest.fn(), AddressField: jest.fn() }; + + const validate = createAsyncValidators(schema, validators, { + apiHolder: { get: jest.fn() }, + }); + + await validate({ + name: 'asd', + address: { street: 'street', postcode: 'postcode' }, + }); + + expect(validators.NameField).toHaveBeenCalled(); + expect(validators.AddressField).toHaveBeenCalled(); + }); + + it('should return the correct errors to the frontend', async () => { + const schema: JsonObject = { + type: 'object', + properties: { + name: { + type: 'string', + 'ui:field': 'NameField', + }, + address: { + type: 'object', + 'ui:field': 'AddressField', + properties: { + street: { + type: 'string', + }, + postcode: { + type: 'string', + }, + }, + }, + }, + }; + + const NameField: CustomFieldValidator = (value, { addError }) => { + if (!value) { + addError('something is broken here!'); + } + }; + + const AddressField: CustomFieldValidator<{ + street?: string; + postcode?: string; + }> = (value, { addError }) => { + if (!value.postcode) { + addError('postcode is missing!'); + } + + if (!value.street) { + addError('street is missing here!'); + } + }; + + const validate = createAsyncValidators( + schema, + { + NameField: NameField as CustomFieldValidator, + AddressField: AddressField as CustomFieldValidator, + }, + { + apiHolder: { get: jest.fn() }, + }, + ); + + await expect( + validate({ + name: 'asd', + address: { street: 'street', postcode: 'postcode' }, + }), + ).resolves.toEqual({ + name: expect.objectContaining({ + __errors: [], + }), + address: expect.objectContaining({ + __errors: [], + }), + }); + + await expect( + validate({ + name: 'asd', + address: { street: '', postcode: 'postcode' }, + }), + ).resolves.toEqual({ + name: expect.objectContaining({ + __errors: [], + }), + address: expect.objectContaining({ + __errors: ['street is missing here!'], + }), + }); + + await expect( + validate({ + name: '', + address: { street: '', postcode: '' }, + }), + ).resolves.toEqual({ + name: expect.objectContaining({ + __errors: ['something is broken here!'], + }), + address: expect.objectContaining({ + __errors: ['postcode is missing!', 'street is missing here!'], + }), + }); + }); +}); diff --git a/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/createAsyncValidators.ts b/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/createAsyncValidators.ts new file mode 100644 index 0000000000..d89f0d4e5f --- /dev/null +++ b/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/createAsyncValidators.ts @@ -0,0 +1,60 @@ +/* + * 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 { FieldValidation } from '@rjsf/core'; +import { JsonObject } from '@backstage/types'; +import { ApiHolder } from '@backstage/core-plugin-api'; +import { CustomFieldValidator } from '../../../extensions'; +import { Draft07 as JSONSchema } from 'json-schema-library'; +import { createFieldValidation } from './schema'; + +export const createAsyncValidators = ( + rootSchema: JsonObject, + validators: Record>, + context: { + apiHolder: ApiHolder; + }, +) => { + async function validate(formData: JsonObject, pathPrefix: string = '#') { + const parsedSchema = new JSONSchema(rootSchema); + const formValidation: Record = {}; + for (const [key, value] of Object.entries(formData)) { + const definitionInSchema = parsedSchema.getSchema( + `${pathPrefix}/${key}`, + formData, + ); + + if (definitionInSchema && 'ui:field' in definitionInSchema) { + const validator = validators[definitionInSchema['ui:field']]; + if (validator) { + const fieldValidation = createFieldValidation(); + try { + await validator(value, fieldValidation, context); + } catch (ex) { + fieldValidation.addError(ex.message); + } + formValidation[key] = fieldValidation; + } + } + } + + return formValidation; + } + + return async (formData: JsonObject) => { + return await validate(formData); + }; +}; diff --git a/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/schema.ts b/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/schema.ts index 5a33a622bb..e2d5e89932 100644 --- a/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/schema.ts +++ b/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/schema.ts @@ -14,7 +14,7 @@ * limitations under the License. */ import { JsonObject } from '@backstage/types'; -import { UiSchema } from '@rjsf/core'; +import { FieldValidation, UiSchema } from '@rjsf/core'; function isObject(value: unknown): value is JsonObject { return typeof value === 'object' && value !== null && !Array.isArray(value); @@ -110,3 +110,18 @@ export const extractSchemaFromStep = ( extractUiSchema(returnSchema, uiSchema); return { uiSchema, schema: returnSchema }; }; + +/** + * @alpha + * Creates a field validation object for use in react jsonschema form + */ +export const createFieldValidation = (): FieldValidation => { + const fieldValidation: FieldValidation = { + __errors: [] as string[], + addError: (message: string) => { + fieldValidation.__errors.push(message); + }, + }; + + return fieldValidation; +}; diff --git a/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/useTemplateSchema.ts b/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/useTemplateSchema.ts index d5fe244a25..0482d89503 100644 --- a/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/useTemplateSchema.ts +++ b/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/useTemplateSchema.ts @@ -24,6 +24,7 @@ export const useTemplateSchema = ( ): { steps: { uiSchema: UiSchema; + mergedSchema: JsonObject; schema: JsonObject; title: string; description?: string; @@ -33,6 +34,7 @@ export const useTemplateSchema = ( const steps = manifest.steps.map(({ title, description, schema }) => ({ title, description, + mergedSchema: schema, ...extractSchemaFromStep(schema), })); diff --git a/plugins/scaffolder/src/types.ts b/plugins/scaffolder/src/types.ts index d814119398..acb0f0e114 100644 --- a/plugins/scaffolder/src/types.ts +++ b/plugins/scaffolder/src/types.ts @@ -194,9 +194,7 @@ export interface ScaffolderApi { getTask(taskId: string): Promise; - listTasks?({ - filterByOwnership, - }: { + listTasks?(options: { filterByOwnership: 'owned' | 'all'; }): Promise<{ tasks: ScaffolderTask[] }>; diff --git a/plugins/search-backend-module-elasticsearch/CHANGELOG.md b/plugins/search-backend-module-elasticsearch/CHANGELOG.md index 686166e11c..ed1c23000f 100644 --- a/plugins/search-backend-module-elasticsearch/CHANGELOG.md +++ b/plugins/search-backend-module-elasticsearch/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-search-backend-module-elasticsearch +## 1.0.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-search-backend-node@1.0.1 + ## 1.0.1-next.0 ### Patch Changes diff --git a/plugins/search-backend-module-elasticsearch/api-report.md b/plugins/search-backend-module-elasticsearch/api-report.md index 5a951948c2..be54fe9d4a 100644 --- a/plugins/search-backend-module-elasticsearch/api-report.md +++ b/plugins/search-backend-module-elasticsearch/api-report.md @@ -132,17 +132,13 @@ export class ElasticSearchClientWrapper { refreshOnCompletion?: string | boolean; }): BulkHelper; // (undocumented) - createIndex({ - index, - }: { + createIndex(options: { index: string; }): | TransportRequestPromise, unknown>> | TransportRequestPromise_2, unknown>>; // (undocumented) - deleteIndex({ - index, - }: { + deleteIndex(options: { index: string | string[]; }): | TransportRequestPromise, unknown>> @@ -152,17 +148,13 @@ export class ElasticSearchClientWrapper { options: ElasticSearchClientOptions, ): ElasticSearchClientWrapper; // (undocumented) - getAliases({ - aliases, - }: { + getAliases(options: { aliases: string[]; }): | TransportRequestPromise, unknown>> | TransportRequestPromise_2, unknown>>; // (undocumented) - indexExists({ - index, - }: { + indexExists(options: { index: string | string[]; }): | TransportRequestPromise> @@ -174,19 +166,14 @@ export class ElasticSearchClientWrapper { | TransportRequestPromise, unknown>> | TransportRequestPromise_2, unknown>>; // (undocumented) - search({ - index, - body, - }: { + search(options: { index: string | string[]; body: Object; }): | TransportRequestPromise, unknown>> | TransportRequestPromise_2, unknown>>; // (undocumented) - updateAliases({ - actions, - }: { + updateAliases(options: { actions: ElasticSearchAliasAction[]; }): | TransportRequestPromise, unknown>> diff --git a/plugins/search-backend-module-elasticsearch/package.json b/plugins/search-backend-module-elasticsearch/package.json index 1592f2c3d6..119c4602d1 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.0.1-next.0", + "version": "1.0.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -24,7 +24,7 @@ }, "dependencies": { "@backstage/config": "^1.0.1", - "@backstage/plugin-search-backend-node": "^1.0.1-next.0", + "@backstage/plugin-search-backend-node": "^1.0.1", "@backstage/plugin-search-common": "^1.0.0", "@elastic/elasticsearch": "^7.13.0", "@opensearch-project/opensearch": "^2.0.0", @@ -36,8 +36,8 @@ "winston": "^3.2.1" }, "devDependencies": { - "@backstage/backend-common": "^0.15.0-next.0", - "@backstage/cli": "^0.18.1-next.0", + "@backstage/backend-common": "^0.15.0", + "@backstage/cli": "^0.18.1", "@elastic/elasticsearch-mock": "^1.0.0", "@short.io/opensearch-mock": "^0.3.1" }, diff --git a/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchClientWrapper.ts b/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchClientWrapper.ts index bcf67e091c..395f861223 100644 --- a/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchClientWrapper.ts +++ b/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchClientWrapper.ts @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + import { Client as ElasticSearchClient } from '@elastic/elasticsearch'; import { Client as OpenSearchClient } from '@opensearch-project/opensearch'; import { Readable } from 'stream'; @@ -69,15 +70,12 @@ export class ElasticSearchClientWrapper { private readonly elasticSearchClient: ElasticSearchClient | undefined; private readonly openSearchClient: OpenSearchClient | undefined; - private constructor({ - openSearchClient, - elasticSearchClient, - }: { + private constructor(options: { openSearchClient?: OpenSearchClient; elasticSearchClient?: ElasticSearchClient; }) { - this.openSearchClient = openSearchClient; - this.elasticSearchClient = elasticSearchClient; + this.openSearchClient = options.openSearchClient; + this.elasticSearchClient = options.elasticSearchClient; } static fromClientOptions(options: ElasticSearchClientOptions) { @@ -92,13 +90,13 @@ export class ElasticSearchClientWrapper { }); } - search({ index, body }: { index: string | string[]; body: Object }) { + search(options: { index: string | string[]; body: Object }) { if (this.openSearchClient) { - return this.openSearchClient.search({ index, body }); + return this.openSearchClient.search(options); } if (this.elasticSearchClient) { - return this.elasticSearchClient.search({ index, body }); + return this.elasticSearchClient.search(options); } throw new Error('No client defined'); @@ -132,43 +130,45 @@ export class ElasticSearchClientWrapper { throw new Error('No client defined'); } - indexExists({ index }: { index: string | string[] }) { + indexExists(options: { index: string | string[] }) { if (this.openSearchClient) { - return this.openSearchClient.indices.exists({ index }); + return this.openSearchClient.indices.exists(options); } if (this.elasticSearchClient) { - return this.elasticSearchClient.indices.exists({ index }); + return this.elasticSearchClient.indices.exists(options); } throw new Error('No client defined'); } - deleteIndex({ index }: { index: string | string[] }) { + deleteIndex(options: { index: string | string[] }) { if (this.openSearchClient) { - return this.openSearchClient.indices.delete({ index }); + return this.openSearchClient.indices.delete(options); } if (this.elasticSearchClient) { - return this.elasticSearchClient.indices.delete({ index }); + return this.elasticSearchClient.indices.delete(options); } throw new Error('No client defined'); } - createIndex({ index }: { index: string }) { + createIndex(options: { index: string }) { if (this.openSearchClient) { - return this.openSearchClient.indices.create({ index }); + return this.openSearchClient.indices.create(options); } if (this.elasticSearchClient) { - return this.elasticSearchClient.indices.create({ index }); + return this.elasticSearchClient.indices.create(options); } throw new Error('No client defined'); } - getAliases({ aliases }: { aliases: string[] }) { + getAliases(options: { aliases: string[] }) { + const { aliases } = options; + if (this.openSearchClient) { return this.openSearchClient.cat.aliases({ format: 'json', @@ -186,8 +186,9 @@ export class ElasticSearchClientWrapper { throw new Error('No client defined'); } - updateAliases({ actions }: { actions: ElasticSearchAliasAction[] }) { - const filteredActions = actions.filter(Boolean); + updateAliases(options: { actions: ElasticSearchAliasAction[] }) { + const filteredActions = options.actions.filter(Boolean); + if (this.openSearchClient) { return this.openSearchClient.indices.updateAliases({ body: { diff --git a/plugins/search-backend-module-pg/CHANGELOG.md b/plugins/search-backend-module-pg/CHANGELOG.md index 737babecff..c760d518ea 100644 --- a/plugins/search-backend-module-pg/CHANGELOG.md +++ b/plugins/search-backend-module-pg/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-search-backend-module-pg +## 0.3.6 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/plugin-search-backend-node@1.0.1 + ## 0.3.6-next.0 ### Patch Changes diff --git a/plugins/search-backend-module-pg/api-report.md b/plugins/search-backend-module-pg/api-report.md index d1913a535d..33d0f4318c 100644 --- a/plugins/search-backend-module-pg/api-report.md +++ b/plugins/search-backend-module-pg/api-report.md @@ -26,7 +26,9 @@ export class DatabaseDocumentStore implements DatabaseStore { // (undocumented) completeInsert(tx: Knex.Transaction, type: string): Promise; // (undocumented) - static create(knex: Knex): Promise; + static create( + database: PluginDatabaseManager, + ): Promise; // (undocumented) getTransaction(): Promise; // (undocumented) diff --git a/plugins/search-backend-module-pg/package.json b/plugins/search-backend-module-pg/package.json index 273f3b5e8f..b2a75f8ebc 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.3.6-next.0", + "version": "0.3.6", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -23,17 +23,17 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.15.0-next.0", + "@backstage/backend-common": "^0.15.0", "@backstage/config": "^1.0.1", - "@backstage/plugin-search-backend-node": "^1.0.1-next.0", + "@backstage/plugin-search-backend-node": "^1.0.1", "@backstage/plugin-search-common": "^1.0.0", "lodash": "^4.17.21", "knex": "^2.0.0", "uuid": "^8.3.2" }, "devDependencies": { - "@backstage/backend-test-utils": "^0.1.27-next.0", - "@backstage/cli": "^0.18.1-next.0" + "@backstage/backend-test-utils": "^0.1.27", + "@backstage/cli": "^0.18.1" }, "files": [ "dist", diff --git a/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.ts b/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.ts index 9da5ceec0e..cd99a8c4b1 100644 --- a/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.ts +++ b/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.ts @@ -115,14 +115,14 @@ export class PgSearchEngine implements SearchEngine { config: Config; }): Promise { return new PgSearchEngine( - await DatabaseDocumentStore.create(await options.database.getClient()), + await DatabaseDocumentStore.create(options.database), options.config, ); } static async fromConfig(config: Config, options: PgSearchOptions) { return new PgSearchEngine( - await DatabaseDocumentStore.create(await options.database.getClient()), + await DatabaseDocumentStore.create(options.database), config, ); } diff --git a/plugins/search-backend-module-pg/src/database/DatabaseDocumentStore.test.ts b/plugins/search-backend-module-pg/src/database/DatabaseDocumentStore.test.ts index 355e41352d..59c8d85562 100644 --- a/plugins/search-backend-module-pg/src/database/DatabaseDocumentStore.test.ts +++ b/plugins/search-backend-module-pg/src/database/DatabaseDocumentStore.test.ts @@ -13,6 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + +import { Knex as KnexType } from 'knex'; import { TestDatabaseId, TestDatabases } from '@backstage/backend-test-utils'; import { IndexableDocument } from '@backstage/plugin-search-common'; import { PgSearchHighlightOptions } from '../PgSearchEngine'; @@ -30,6 +32,18 @@ const highlightOptions: PgSearchHighlightOptions = { fragmentDelimiter: ' ... ', }; +function createDatabaseManager( + client: KnexType, + skipMigrations: boolean = false, +) { + return { + getClient: async () => client, + migrations: { + skip: skipMigrations, + }, + }; +} + describe('DatabaseDocumentStore', () => { describe('unsupported', () => { const databases = TestDatabases.create({ @@ -51,9 +65,10 @@ describe('DatabaseDocumentStore', () => { 'should fail to create, %p', async databaseId => { const knex = await databases.init(databaseId); + const databaseManager = createDatabaseManager(knex); await expect( - async () => await DatabaseDocumentStore.create(knex), + async () => await DatabaseDocumentStore.create(databaseManager), ).rejects.toThrow(); }, 60_000, @@ -67,7 +82,9 @@ describe('DatabaseDocumentStore', () => { async function createStore(databaseId: TestDatabaseId) { const knex = await databases.init(databaseId); - const store = await DatabaseDocumentStore.create(knex); + const databaseManager = createDatabaseManager(knex); + const store = await DatabaseDocumentStore.create(databaseManager); + return { store, knex }; } diff --git a/plugins/search-backend-module-pg/src/database/DatabaseDocumentStore.ts b/plugins/search-backend-module-pg/src/database/DatabaseDocumentStore.ts index 8e73c0f16f..4da3cca082 100644 --- a/plugins/search-backend-module-pg/src/database/DatabaseDocumentStore.ts +++ b/plugins/search-backend-module-pg/src/database/DatabaseDocumentStore.ts @@ -13,7 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { resolvePackagePath } from '@backstage/backend-common'; +import { + PluginDatabaseManager, + resolvePackagePath, +} from '@backstage/backend-common'; import { IndexableDocument } from '@backstage/plugin-search-common'; import { Knex } from 'knex'; import { @@ -30,7 +33,10 @@ const migrationsDir = resolvePackagePath( ); export class DatabaseDocumentStore implements DatabaseStore { - static async create(knex: Knex): Promise { + static async create( + database: PluginDatabaseManager, + ): Promise { + const knex = await database.getClient(); try { const majorVersion = await queryPostgresMajorVersion(knex); @@ -49,9 +55,12 @@ export class DatabaseDocumentStore implements DatabaseStore { ); } - await knex.migrate.latest({ - directory: migrationsDir, - }); + if (!database.migrations?.skip) { + await knex.migrate.latest({ + directory: migrationsDir, + }); + } + return new DatabaseDocumentStore(knex); } diff --git a/plugins/search-backend-node/CHANGELOG.md b/plugins/search-backend-node/CHANGELOG.md index 49835bd31c..71e4bd5431 100644 --- a/plugins/search-backend-node/CHANGELOG.md +++ b/plugins/search-backend-node/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-search-backend-node +## 1.0.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/backend-tasks@0.3.4 + ## 1.0.1-next.0 ### Patch Changes diff --git a/plugins/search-backend-node/api-report.md b/plugins/search-backend-node/api-report.md index 64957f6366..62a4eabc26 100644 --- a/plugins/search-backend-node/api-report.md +++ b/plugins/search-backend-node/api-report.md @@ -56,9 +56,9 @@ export abstract class DecoratorBase extends Transform { // @public export class IndexBuilder { - constructor({ logger, searchEngine }: IndexBuilderOptions); - addCollator({ factory, schedule }: RegisterCollatorParameters): void; - addDecorator({ factory }: RegisterDecoratorParameters): void; + constructor(options: IndexBuilderOptions); + addCollator(options: RegisterCollatorParameters): void; + addDecorator(options: RegisterDecoratorParameters): void; build(): Promise<{ scheduler: Scheduler; }>; @@ -77,7 +77,7 @@ export type LunrQueryTranslator = (query: SearchQuery) => ConcreteLunrQuery; // @public export class LunrSearchEngine implements SearchEngine { - constructor({ logger }: { logger: Logger }); + constructor(options: { logger: Logger }); // (undocumented) protected docStore: Record; // (undocumented) @@ -157,8 +157,8 @@ export interface RegisterDecoratorParameters { // @public export class Scheduler { - constructor({ logger }: { logger: Logger }); - addToSchedule({ id, task, scheduledRunner }: ScheduleTaskParameters): void; + constructor(options: { logger: Logger }); + addToSchedule(options: ScheduleTaskParameters): void; start(): void; stop(): void; } diff --git a/plugins/search-backend-node/package.json b/plugins/search-backend-node/package.json index 7772837347..ec83bb50a8 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.0.1-next.0", + "version": "1.0.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -23,8 +23,8 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.15.0-next.0", - "@backstage/backend-tasks": "^0.3.4-next.0", + "@backstage/backend-common": "^0.15.0", + "@backstage/backend-tasks": "^0.3.4", "@backstage/config": "^1.0.1", "@backstage/errors": "^1.1.0", "@backstage/plugin-permission-common": "^0.6.3", @@ -38,8 +38,8 @@ "winston": "^3.2.1" }, "devDependencies": { - "@backstage/backend-common": "^0.15.0-next.0", - "@backstage/cli": "^0.18.1-next.0", + "@backstage/backend-common": "^0.15.0", + "@backstage/cli": "^0.18.1", "@types/ndjson": "^2.0.1" }, "files": [ diff --git a/plugins/search-backend-node/src/IndexBuilder.ts b/plugins/search-backend-node/src/IndexBuilder.ts index 3e1dae1c2f..0ba9ba0059 100644 --- a/plugins/search-backend-node/src/IndexBuilder.ts +++ b/plugins/search-backend-node/src/IndexBuilder.ts @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + import { DocumentDecoratorFactory, DocumentTypeInfo, @@ -38,12 +39,12 @@ export class IndexBuilder { private searchEngine: SearchEngine; private logger: Logger; - constructor({ logger, searchEngine }: IndexBuilderOptions) { + constructor(options: IndexBuilderOptions) { this.collators = {}; this.decorators = {}; this.documentTypes = {}; - this.logger = logger; - this.searchEngine = searchEngine; + this.logger = options.logger; + this.searchEngine = options.searchEngine; } /** @@ -64,7 +65,9 @@ export class IndexBuilder { * Makes the index builder aware of a collator that should be executed at the * given refresh interval. */ - addCollator({ factory, schedule }: RegisterCollatorParameters): void { + addCollator(options: RegisterCollatorParameters): void { + const { factory, schedule } = options; + this.logger.info( `Added ${factory.constructor.name} collator factory for type ${factory.type}`, ); @@ -82,7 +85,8 @@ export class IndexBuilder { * the decorator, it will be applied to documents from all known collators, * otherwise it will only be applied to documents of the given types. */ - addDecorator({ factory }: RegisterDecoratorParameters): void { + addDecorator(options: RegisterDecoratorParameters): void { + const { factory } = options; const types = factory.types || ['*']; this.logger.info( `Added decorator ${factory.constructor.name} to types ${types.join( diff --git a/plugins/search-backend-node/src/Scheduler.ts b/plugins/search-backend-node/src/Scheduler.ts index 404823c53a..872a410808 100644 --- a/plugins/search-backend-node/src/Scheduler.ts +++ b/plugins/search-backend-node/src/Scheduler.ts @@ -43,8 +43,8 @@ export class Scheduler { private abortController: AbortController; private isRunning: boolean; - constructor({ logger }: { logger: Logger }) { - this.logger = logger; + constructor(options: { logger: Logger }) { + this.logger = options.logger; this.schedule = {}; this.abortController = new AbortController(); this.isRunning = false; @@ -55,7 +55,9 @@ export class Scheduler { * When running the tasks, the scheduler waits at least for the time specified * in the interval once the task was completed, before running it again. */ - addToSchedule({ id, task, scheduledRunner }: ScheduleTaskParameters) { + addToSchedule(options: ScheduleTaskParameters) { + const { id, task, scheduledRunner } = options; + if (this.isRunning) { throw new Error( 'Cannot add task to schedule that has already been started.', diff --git a/plugins/search-backend-node/src/engines/LunrSearchEngine.ts b/plugins/search-backend-node/src/engines/LunrSearchEngine.ts index ec8550d721..4d6779950f 100644 --- a/plugins/search-backend-node/src/engines/LunrSearchEngine.ts +++ b/plugins/search-backend-node/src/engines/LunrSearchEngine.ts @@ -43,7 +43,7 @@ type LunrResultEnvelope = { }; /** - * Translator repsonsible for translating search term and filters to a query that the Lunr Search Engine understands. + * Translator responsible for translating search term and filters to a query that the Lunr Search Engine understands. * @public */ export type LunrQueryTranslator = (query: SearchQuery) => ConcreteLunrQuery; @@ -59,8 +59,8 @@ export class LunrSearchEngine implements SearchEngine { protected highlightPreTag: string; protected highlightPostTag: string; - constructor({ logger }: { logger: Logger }) { - this.logger = logger; + constructor(options: { logger: Logger }) { + this.logger = options.logger; this.docStore = {}; const uuidTag = uuid(); this.highlightPreTag = `<${uuidTag}>`; diff --git a/plugins/search-backend/CHANGELOG.md b/plugins/search-backend/CHANGELOG.md index 9a48c96755..019aa50ea8 100644 --- a/plugins/search-backend/CHANGELOG.md +++ b/plugins/search-backend/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-search-backend +## 1.0.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/plugin-auth-node@0.2.4 + - @backstage/plugin-permission-node@0.6.4 + - @backstage/plugin-search-backend-node@1.0.1 + ## 1.0.1-next.0 ### Patch Changes diff --git a/plugins/search-backend/package.json b/plugins/search-backend/package.json index 49aa696f58..0e1efb11f6 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.0.1-next.0", + "version": "1.0.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -23,13 +23,13 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.15.0-next.0", + "@backstage/backend-common": "^0.15.0", "@backstage/config": "^1.0.1", "@backstage/errors": "^1.1.0", - "@backstage/plugin-auth-node": "^0.2.4-next.0", + "@backstage/plugin-auth-node": "^0.2.4", "@backstage/plugin-permission-common": "^0.6.3", - "@backstage/plugin-permission-node": "^0.6.4-next.0", - "@backstage/plugin-search-backend-node": "^1.0.1-next.0", + "@backstage/plugin-permission-node": "^0.6.4", + "@backstage/plugin-search-backend-node": "^1.0.1", "@backstage/plugin-search-common": "^1.0.0", "@backstage/types": "^1.0.0", "@types/express": "^4.17.6", @@ -43,7 +43,7 @@ "zod": "^3.11.6" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.0", + "@backstage/cli": "^0.18.1", "@types/supertest": "^2.0.8", "supertest": "^6.1.3" }, diff --git a/plugins/search-react/CHANGELOG.md b/plugins/search-react/CHANGELOG.md index 9cf04b88e8..d250b7ffe4 100644 --- a/plugins/search-react/CHANGELOG.md +++ b/plugins/search-react/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-search-react +## 1.0.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + ## 1.0.1-next.1 ### Patch Changes diff --git a/plugins/search-react/package.json b/plugins/search-react/package.json index 78d039bd8d..4ca61dba66 100644 --- a/plugins/search-react/package.json +++ b/plugins/search-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-search-react", - "version": "1.0.1-next.1", + "version": "1.0.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -32,8 +32,8 @@ }, "dependencies": { "@backstage/plugin-search-common": "^1.0.0", - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", "@backstage/version-bridge": "^1.0.1", "@backstage/theme": "^0.2.16", "@backstage/types": "^1.0.0", @@ -48,8 +48,8 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/core-app-api": "^1.0.5", + "@backstage/test-utils": "^1.1.3", "@testing-library/react": "^12.1.3", "@testing-library/react-hooks": "^8.0.0", "@testing-library/jest-dom": "^5.10.1", diff --git a/plugins/search/CHANGELOG.md b/plugins/search/CHANGELOG.md index 459d34b8e9..550073969d 100644 --- a/plugins/search/CHANGELOG.md +++ b/plugins/search/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-search +## 1.0.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + - @backstage/plugin-search-react@1.0.1 + ## 1.0.1-next.1 ### Patch Changes diff --git a/plugins/search/package.json b/plugins/search/package.json index 5743248132..11bbc4b1ae 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.0.1-next.1", + "version": "1.0.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -35,12 +35,12 @@ "dependencies": { "@backstage/catalog-model": "^1.1.0", "@backstage/config": "^1.0.1", - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", "@backstage/errors": "^1.1.0", - "@backstage/plugin-catalog-react": "^1.1.3-next.2", + "@backstage/plugin-catalog-react": "^1.1.3", "@backstage/plugin-search-common": "^1.0.0", - "@backstage/plugin-search-react": "^1.0.1-next.1", + "@backstage/plugin-search-react": "^1.0.1", "@backstage/theme": "^0.2.16", "@backstage/types": "^1.0.0", "@backstage/version-bridge": "^1.0.1", @@ -57,10 +57,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/core-app-api": "^1.0.5", + "@backstage/dev-utils": "^1.0.5", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/react-hooks": "^8.0.0", diff --git a/plugins/sentry/CHANGELOG.md b/plugins/sentry/CHANGELOG.md index 7948162ffd..d7327602f0 100644 --- a/plugins/sentry/CHANGELOG.md +++ b/plugins/sentry/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-sentry +## 0.4.1 + +### Patch Changes + +- 29f782eb37: Updated dependency `@types/luxon` to `^3.0.0`. +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + ## 0.4.1-next.1 ### Patch Changes diff --git a/plugins/sentry/api-report.md b/plugins/sentry/api-report.md index e752eb2110..bd77c46aa6 100644 --- a/plugins/sentry/api-report.md +++ b/plugins/sentry/api-report.md @@ -42,8 +42,6 @@ export class MockSentryApi implements SentryApi { fetchIssues(): Promise; } -// Warning: (ae-missing-release-tag) "ProductionSentryApi" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export class ProductionSentryApi implements SentryApi { constructor( @@ -61,13 +59,9 @@ export class ProductionSentryApi implements SentryApi { ): Promise; } -// Warning: (ae-missing-release-tag) "Router" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) -export const Router: ({ entity }: { entity: Entity }) => JSX.Element; +export const Router: (props: { entity: Entity }) => JSX.Element; -// Warning: (ae-missing-release-tag) "SentryApi" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export interface SentryApi { // (undocumented) @@ -80,8 +74,6 @@ export interface SentryApi { ): Promise; } -// Warning: (ae-missing-release-tag) "sentryApiRef" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export const sentryApiRef: ApiRef; @@ -121,25 +113,15 @@ export type SentryIssue = { statusDetails: any; }; -// Warning: (ae-missing-release-tag) "SentryIssuesWidget" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) -export const SentryIssuesWidget: ({ - entity, - statsFor, - tableOptions, - variant, - query, -}: { +export const SentryIssuesWidget: (props: { entity: Entity; statsFor: '24h' | '14d' | ''; tableOptions: Options; - variant?: InfoCardVariants | undefined; - query?: string | undefined; + variant?: InfoCardVariants; + query?: string; }) => JSX.Element; -// Warning: (ae-missing-release-tag) "sentryPlugin" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) const sentryPlugin: BackstagePlugin< { diff --git a/plugins/sentry/package.json b/plugins/sentry/package.json index e9d13f6ad6..afcf15c1c5 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.4.1-next.1", + "version": "0.4.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -36,9 +36,9 @@ }, "dependencies": { "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", - "@backstage/plugin-catalog-react": "^1.1.3-next.2", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", + "@backstage/plugin-catalog-react": "^1.1.3", "@backstage/theme": "^0.2.16", "@material-table/core": "^3.1.0", "@material-ui/core": "^4.12.2", @@ -53,10 +53,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/core-app-api": "^1.0.5", + "@backstage/dev-utils": "^1.0.5", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/sentry/src/api/production-api.ts b/plugins/sentry/src/api/production-api.ts index da77f8a47d..7fe4afdf98 100644 --- a/plugins/sentry/src/api/production-api.ts +++ b/plugins/sentry/src/api/production-api.ts @@ -20,6 +20,7 @@ import { DiscoveryApi, IdentityApi } from '@backstage/core-plugin-api'; import { Entity } from '@backstage/catalog-model'; import { getProjectSlug, getOrganization } from './annotations'; +/** @public */ export class ProductionSentryApi implements SentryApi { constructor( private readonly discoveryApi: DiscoveryApi, diff --git a/plugins/sentry/src/api/sentry-api.ts b/plugins/sentry/src/api/sentry-api.ts index 507803804d..73f1301cad 100644 --- a/plugins/sentry/src/api/sentry-api.ts +++ b/plugins/sentry/src/api/sentry-api.ts @@ -18,10 +18,12 @@ import { SentryIssue } from './sentry-issue'; import { createApiRef } from '@backstage/core-plugin-api'; import { Entity } from '@backstage/catalog-model'; +/** @public */ export const sentryApiRef = createApiRef({ id: 'plugin.sentry.service', }); +/** @public */ export interface SentryApi { fetchIssues( entity: Entity, diff --git a/plugins/sentry/src/components/Router.tsx b/plugins/sentry/src/components/Router.tsx index 2a3172824a..e683a6c7fa 100644 --- a/plugins/sentry/src/components/Router.tsx +++ b/plugins/sentry/src/components/Router.tsx @@ -19,14 +19,15 @@ import { Entity } from '@backstage/catalog-model'; import { Route, Routes } from 'react-router'; import { SentryIssuesWidget } from './SentryIssuesWidget'; -export const Router = ({ entity }: { entity: Entity }) => { +/** @public */ +export const Router = (props: { entity: Entity }) => { return ( ; variant?: InfoCardVariants; query?: string; }) => { + const { + entity, + statsFor, + tableOptions, + variant = 'gridItem', + query = '', + } = props; const errorApi = useApi(errorApiRef); const sentryApi = useApi(sentryApiRef); diff --git a/plugins/sentry/src/plugin.ts b/plugins/sentry/src/plugin.ts index 981745c8fe..51957b87a3 100644 --- a/plugins/sentry/src/plugin.ts +++ b/plugins/sentry/src/plugin.ts @@ -24,10 +24,12 @@ import { identityApiRef, } from '@backstage/core-plugin-api'; +/** @public */ export const rootRouteRef = createRouteRef({ id: 'sentry', }); +/** @public */ export const sentryPlugin = createPlugin({ id: 'sentry', apis: [ diff --git a/plugins/shortcuts/CHANGELOG.md b/plugins/shortcuts/CHANGELOG.md index b8a5982006..9ea824276e 100644 --- a/plugins/shortcuts/CHANGELOG.md +++ b/plugins/shortcuts/CHANGELOG.md @@ -1,5 +1,26 @@ # @backstage/plugin-shortcuts +## 0.3.0 + +### Minor Changes + +- 5b769fddb5: Internal observable replaced with a mapping from the storage API. This fixes shortcuts initialization when using firestore. + + `ShortcutApi.get` method, that returns an immediate snapshot of shortcuts, made public. + + Example of how to get and observe `shortcuts`: + + ```typescript + const shortcutApi = useApi(shortcutsApiRef); + const shortcuts = useObservable(shortcutApi.shortcut$(), shortcutApi.get()); + ``` + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + ## 0.3.0-next.1 ### Patch Changes diff --git a/plugins/shortcuts/package.json b/plugins/shortcuts/package.json index af912276dc..46f75c010d 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.0-next.1", + "version": "0.3.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -24,8 +24,8 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", "@backstage/theme": "^0.2.16", "@backstage/types": "^1.0.0", "@material-ui/core": "^4.12.2", @@ -42,10 +42,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/core-app-api": "^1.0.5", + "@backstage/dev-utils": "^1.0.5", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/sonarqube-backend/CHANGELOG.md b/plugins/sonarqube-backend/CHANGELOG.md index 167224e5d5..06b98d9044 100644 --- a/plugins/sonarqube-backend/CHANGELOG.md +++ b/plugins/sonarqube-backend/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-sonarqube-backend +## 0.1.0 + +### Minor Changes + +- e2be9ab3a4: Initial creation of the plugin + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + ## 0.1.0-next.0 ### Minor Changes diff --git a/plugins/sonarqube-backend/api-report.md b/plugins/sonarqube-backend/api-report.md index f4c48cadce..0fbd463cf3 100644 --- a/plugins/sonarqube-backend/api-report.md +++ b/plugins/sonarqube-backend/api-report.md @@ -13,13 +13,10 @@ export function createRouter(options: RouterOptions): Promise; // @public export class DefaultSonarqubeInfoProvider implements SonarqubeInfoProvider { static fromConfig(config: Config): DefaultSonarqubeInfoProvider; - getBaseUrl({ instanceName }?: { instanceName?: string }): { + getBaseUrl(options?: { instanceName?: string }): { baseUrl: string; }; - getFindings({ - componentKey, - instanceName, - }: { + getFindings(options: { componentKey: string; instanceName?: string; }): Promise; @@ -35,9 +32,7 @@ export interface RouterOptions { export class SonarqubeConfig { constructor(instances: SonarqubeInstanceConfig[]); static fromConfig(config: Config): SonarqubeConfig; - getInstanceConfig({ - sonarqubeName, - }?: { + getInstanceConfig(options?: { sonarqubeName?: string; }): SonarqubeInstanceConfig; // (undocumented) @@ -52,13 +47,10 @@ export interface SonarqubeFindings { // @public export interface SonarqubeInfoProvider { - getBaseUrl({ instanceName }?: { instanceName?: string }): { + getBaseUrl(options?: { instanceName?: string }): { baseUrl: string; }; - getFindings({ - componentKey, - instanceName, - }: { + getFindings(options: { componentKey: string; instanceName?: string; }): Promise; diff --git a/plugins/sonarqube-backend/package.json b/plugins/sonarqube-backend/package.json index e4d87147b3..a5046136aa 100644 --- a/plugins/sonarqube-backend/package.json +++ b/plugins/sonarqube-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-sonarqube-backend", - "version": "0.1.0-next.0", + "version": "0.1.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -23,8 +23,9 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@backstage/backend-common": "^0.15.0-next.1", + "@backstage/backend-common": "^0.15.0", "@backstage/config": "^1.0.1", + "@backstage/errors": "^1.1.0", "@types/express": "*", "express": "^4.18.1", "express-promise-router": "^4.1.0", @@ -33,7 +34,8 @@ "yn": "^5.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/test-utils": "^1.1.3", "@types/supertest": "^2.0.12", "msw": "^0.44.2", "supertest": "^6.2.4" diff --git a/plugins/sonarqube-backend/src/service/router.ts b/plugins/sonarqube-backend/src/service/router.ts index 45cdcb64c3..f244ae5ce3 100644 --- a/plugins/sonarqube-backend/src/service/router.ts +++ b/plugins/sonarqube-backend/src/service/router.ts @@ -19,7 +19,7 @@ import express from 'express'; import Router from 'express-promise-router'; import { Logger } from 'winston'; import { SonarqubeInfoProvider } from './sonarqubeInfoProvider'; -import { InputError } from '../../../../packages/errors'; +import { InputError } from '@backstage/errors'; /** * Dependencies needed by the router diff --git a/plugins/sonarqube-backend/src/service/sonarqubeInfoProvider.test.ts b/plugins/sonarqube-backend/src/service/sonarqubeInfoProvider.test.ts index e617324555..64313e8fd2 100644 --- a/plugins/sonarqube-backend/src/service/sonarqubeInfoProvider.test.ts +++ b/plugins/sonarqube-backend/src/service/sonarqubeInfoProvider.test.ts @@ -14,13 +14,13 @@ * limitations under the License. */ -import { ConfigReader } from '../../../../packages/config'; +import { ConfigReader } from '@backstage/config'; import { DefaultSonarqubeInfoProvider, SonarqubeConfig, } from './sonarqubeInfoProvider'; import { setupServer } from 'msw/node'; -import { setupRequestMockHandlers } from '../../../../packages/test-utils'; +import { setupRequestMockHandlers } from '@backstage/test-utils'; import { rest, RestRequest } from 'msw'; describe('SonarqubeConfig', () => { diff --git a/plugins/sonarqube-backend/src/service/sonarqubeInfoProvider.ts b/plugins/sonarqube-backend/src/service/sonarqubeInfoProvider.ts index 7027738d2c..2b96e6764e 100644 --- a/plugins/sonarqube-backend/src/service/sonarqubeInfoProvider.ts +++ b/plugins/sonarqube-backend/src/service/sonarqubeInfoProvider.ts @@ -30,7 +30,7 @@ export interface SonarqubeInfoProvider { * @param instanceName - Name of the sonarqube instance to get the info from * @returns the url of the instance */ - getBaseUrl({ instanceName }?: { instanceName?: string }): { baseUrl: string }; + getBaseUrl(options?: { instanceName?: string }): { baseUrl: string }; /** * Query the sonarqube instance corresponding to the instanceName to get all @@ -43,10 +43,7 @@ export interface SonarqubeInfoProvider { * @returns All measures with the analysis date. Will return undefined if we * can't provide the full response */ - getFindings({ - componentKey, - instanceName, - }: { + getFindings(options: { componentKey: string; instanceName?: string; }): Promise; @@ -185,9 +182,10 @@ export class SonarqubeConfig { * @returns The requested Sonarqube instance. * @throws Error when no default config could be found or the requested name couldn't be found in config. */ - getInstanceConfig({ - sonarqubeName, - }: { sonarqubeName?: string } = {}): SonarqubeInstanceConfig { + getInstanceConfig( + options: { sonarqubeName?: string } = {}, + ): SonarqubeInstanceConfig { + const { sonarqubeName } = options; const DEFAULT_SONARQUBE_NAME = 'default'; if (!sonarqubeName || sonarqubeName === DEFAULT_SONARQUBE_NAME) { @@ -303,11 +301,11 @@ export class DefaultSonarqubeInfoProvider implements SonarqubeInfoProvider { * {@inheritDoc SonarqubeInfoProvider.getBaseUrl} * @throws Error If configuration can't be retrieved. */ - getBaseUrl({ instanceName }: { instanceName?: string } = {}): { + getBaseUrl(options: { instanceName?: string } = {}): { baseUrl: string; } { const instanceConfig = this.config.getInstanceConfig({ - sonarqubeName: instanceName, + sonarqubeName: options.instanceName, }); return { baseUrl: instanceConfig.baseUrl }; } @@ -316,13 +314,11 @@ export class DefaultSonarqubeInfoProvider implements SonarqubeInfoProvider { * {@inheritDoc SonarqubeInfoProvider.getFindings} * @throws Error If configuration can't be retrieved. */ - async getFindings({ - componentKey, - instanceName, - }: { + async getFindings(options: { componentKey: string; instanceName?: string; }): Promise { + const { componentKey, instanceName } = options; const { baseUrl, apiKey } = this.config.getInstanceConfig({ sonarqubeName: instanceName, }); diff --git a/plugins/sonarqube/CHANGELOG.md b/plugins/sonarqube/CHANGELOG.md index e79c4322fe..9181ae3fcf 100644 --- a/plugins/sonarqube/CHANGELOG.md +++ b/plugins/sonarqube/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-sonarqube +## 0.4.0 + +### Minor Changes + +- 619b515172: **BREAKING** This plugin now call the `sonarqube-backend` plugin instead of relying on the proxy plugin + + The whole proxy's `'/sonarqube':` key can be removed from your configuration files. + + Then head to the [README in sonarqube-backend plugin page](https://github.com/backstage/backstage/tree/master/plugins/sonarqube-backend/README.md) to learn how to set-up the link to your Sonarqube instances. + +### Patch Changes + +- f9c310a439: Add ability to provide an optional Sonarqube instance into the annotation in the `catalog-info.yaml` file +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + ## 0.4.0-next.2 ### Patch Changes diff --git a/plugins/sonarqube/api-report.md b/plugins/sonarqube/api-report.md index 06e4b8578e..e0a51479a4 100644 --- a/plugins/sonarqube/api-report.md +++ b/plugins/sonarqube/api-report.md @@ -9,46 +9,29 @@ import { BackstagePlugin } from '@backstage/core-plugin-api'; import { Entity } from '@backstage/catalog-model'; import { InfoCardVariants } from '@backstage/core-components'; -// Warning: (ae-missing-release-tag) "EntitySonarQubeCard" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) -export const EntitySonarQubeCard: ({ - variant, - duplicationRatings, -}: { - variant?: InfoCardVariants | undefined; - duplicationRatings?: - | { - greaterThan: number; - rating: '1.0' | '2.0' | '3.0' | '4.0' | '5.0'; - }[] - | undefined; -}) => JSX.Element; +export type DuplicationRating = { + greaterThan: number; + rating: '1.0' | '2.0' | '3.0' | '4.0' | '5.0'; +}; -// Warning: (ae-missing-release-tag) "isSonarQubeAvailable" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) -export const isSonarQubeAvailable: (entity: Entity) => boolean; - -// Warning: (ae-missing-release-tag) "SonarQubeCard" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export const SonarQubeCard: ({ - variant, - duplicationRatings, -}: { +export const EntitySonarQubeCard: (props: { variant?: InfoCardVariants | undefined; duplicationRatings?: DuplicationRating[] | undefined; }) => JSX.Element; -// Warning: (ae-missing-release-tag) "sonarQubePlugin" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// +// @public (undocumented) +export const isSonarQubeAvailable: (entity: Entity) => boolean; + +// @public (undocumented) +export const SonarQubeCard: (props: { + variant?: InfoCardVariants; + duplicationRatings?: DuplicationRating[]; +}) => JSX.Element; + // @public (undocumented) const sonarQubePlugin: BackstagePlugin<{}, {}, {}>; export { sonarQubePlugin as plugin }; export { sonarQubePlugin }; - -// Warnings were encountered during analysis: -// -// src/components/SonarQubeCard/SonarQubeCard.d.ts:9:5 - (ae-forgotten-export) The symbol "DuplicationRating" needs to be exported by the entry point index.d.ts ``` diff --git a/plugins/sonarqube/package.json b/plugins/sonarqube/package.json index 1ec39ec194..2944e40894 100644 --- a/plugins/sonarqube/package.json +++ b/plugins/sonarqube/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-sonarqube", "description": "", - "version": "0.4.0-next.2", + "version": "0.4.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -37,9 +37,9 @@ }, "dependencies": { "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", - "@backstage/plugin-catalog-react": "^1.1.3-next.2", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", + "@backstage/plugin-catalog-react": "^1.1.3", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -53,10 +53,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/core-app-api": "^1.0.5", + "@backstage/dev-utils": "^1.0.5", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/sonarqube/src/api/SonarQubeApi.ts b/plugins/sonarqube/src/api/SonarQubeApi.ts index 271f1d8e8e..9dbb6331dd 100644 --- a/plugins/sonarqube/src/api/SonarQubeApi.ts +++ b/plugins/sonarqube/src/api/SonarQubeApi.ts @@ -38,10 +38,7 @@ export const sonarQubeApiRef = createApiRef({ }); export type SonarQubeApi = { - getFindingSummary({ - componentKey, - projectInstance, - }: { + getFindingSummary(options: { componentKey?: string; projectInstance?: string; }): Promise; diff --git a/plugins/sonarqube/src/components/SonarQubeCard/SonarQubeCard.tsx b/plugins/sonarqube/src/components/SonarQubeCard/SonarQubeCard.tsx index af91bc5469..b32a66aaa3 100644 --- a/plugins/sonarqube/src/components/SonarQubeCard/SonarQubeCard.tsx +++ b/plugins/sonarqube/src/components/SonarQubeCard/SonarQubeCard.tsx @@ -32,7 +32,6 @@ import { Percentage } from './Percentage'; import { Rating } from './Rating'; import { RatingCard } from './RatingCard'; import { Value } from './Value'; - import { EmptyState, InfoCard, @@ -40,7 +39,6 @@ import { MissingAnnotationEmptyState, Progress, } from '@backstage/core-components'; - import { useApi } from '@backstage/core-plugin-api'; const useStyles = makeStyles(theme => ({ @@ -72,7 +70,8 @@ const useStyles = makeStyles(theme => ({ }, })); -type DuplicationRating = { +/** @public */ +export type DuplicationRating = { greaterThan: number; rating: '1.0' | '2.0' | '3.0' | '4.0' | '5.0'; }; @@ -85,13 +84,15 @@ const defaultDuplicationRatings: DuplicationRating[] = [ { greaterThan: 20, rating: '5.0' }, ]; -export const SonarQubeCard = ({ - variant = 'gridItem', - duplicationRatings = defaultDuplicationRatings, -}: { +/** @public */ +export const SonarQubeCard = (props: { variant?: InfoCardVariants; duplicationRatings?: DuplicationRating[]; }) => { + const { + variant = 'gridItem', + duplicationRatings = defaultDuplicationRatings, + } = props; const { entity } = useEntity(); const sonarQubeApi = useApi(sonarQubeApiRef); diff --git a/plugins/sonarqube/src/components/SonarQubeCard/Value.tsx b/plugins/sonarqube/src/components/SonarQubeCard/Value.tsx index 58fb401ba1..a166f62a89 100644 --- a/plugins/sonarqube/src/components/SonarQubeCard/Value.tsx +++ b/plugins/sonarqube/src/components/SonarQubeCard/Value.tsx @@ -27,8 +27,7 @@ const useStyles = makeStyles((theme: BackstageTheme) => { }; }); -export const Value = ({ value }: { value?: string }) => { +export const Value = (props: { value?: string }) => { const classes = useStyles(); - - return {value}; + return {props.value}; }; diff --git a/plugins/sonarqube/src/components/SonarQubeCard/index.ts b/plugins/sonarqube/src/components/SonarQubeCard/index.ts index 44ab809439..307a9abc41 100644 --- a/plugins/sonarqube/src/components/SonarQubeCard/index.ts +++ b/plugins/sonarqube/src/components/SonarQubeCard/index.ts @@ -14,4 +14,5 @@ * limitations under the License. */ +export type { DuplicationRating } from './SonarQubeCard'; export { SonarQubeCard } from './SonarQubeCard'; diff --git a/plugins/sonarqube/src/components/useProjectKey.test.ts b/plugins/sonarqube/src/components/useProjectKey.test.ts index be83c236df..921e9455c0 100644 --- a/plugins/sonarqube/src/components/useProjectKey.test.ts +++ b/plugins/sonarqube/src/components/useProjectKey.test.ts @@ -19,7 +19,7 @@ import { SONARQUBE_PROJECT_KEY_ANNOTATION, useProjectInfo, } from './useProjectKey'; -import { Entity } from '../../../../packages/catalog-model'; +import { Entity } from '@backstage/catalog-model'; const createDummyEntity = (sonarqubeAnnotationValue: string): Entity => { return { diff --git a/plugins/sonarqube/src/components/useProjectKey.ts b/plugins/sonarqube/src/components/useProjectKey.ts index 7a5a428f49..59a572a6c4 100644 --- a/plugins/sonarqube/src/components/useProjectKey.ts +++ b/plugins/sonarqube/src/components/useProjectKey.ts @@ -19,6 +19,7 @@ import { Entity } from '@backstage/catalog-model'; export const SONARQUBE_PROJECT_KEY_ANNOTATION = 'sonarqube.org/project-key'; export const SONARQUBE_PROJECT_INSTANCE_SEPARATOR = '/'; +/** @public */ export const isSonarQubeAvailable = (entity: Entity) => Boolean(entity.metadata.annotations?.[SONARQUBE_PROJECT_KEY_ANNOTATION]); diff --git a/plugins/sonarqube/src/plugin.ts b/plugins/sonarqube/src/plugin.ts index 4ac49b2350..0ea62de492 100644 --- a/plugins/sonarqube/src/plugin.ts +++ b/plugins/sonarqube/src/plugin.ts @@ -23,6 +23,7 @@ import { identityApiRef, } from '@backstage/core-plugin-api'; +/** @public */ export const sonarQubePlugin = createPlugin({ id: 'sonarqube', apis: [ @@ -41,6 +42,7 @@ export const sonarQubePlugin = createPlugin({ ], }); +/** @public */ export const EntitySonarQubeCard = sonarQubePlugin.provide( createComponentExtension({ name: 'EntitySonarQubeCard', diff --git a/plugins/splunk-on-call/CHANGELOG.md b/plugins/splunk-on-call/CHANGELOG.md index 139e6f4884..9bedb8334b 100644 --- a/plugins/splunk-on-call/CHANGELOG.md +++ b/plugins/splunk-on-call/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-splunk-on-call +## 0.3.32 + +### Patch Changes + +- 29f782eb37: Updated dependency `@types/luxon` to `^3.0.0`. +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + ## 0.3.32-next.1 ### Patch Changes diff --git a/plugins/splunk-on-call/package.json b/plugins/splunk-on-call/package.json index 33d0db4983..ef287bfc64 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.3.32-next.1", + "version": "0.3.32", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -35,9 +35,9 @@ }, "dependencies": { "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", - "@backstage/plugin-catalog-react": "^1.1.3-next.2", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", + "@backstage/plugin-catalog-react": "^1.1.3", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -51,10 +51,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/core-app-api": "^1.0.5", + "@backstage/dev-utils": "^1.0.5", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/stack-overflow-backend/CHANGELOG.md b/plugins/stack-overflow-backend/CHANGELOG.md index 478d7f5ac3..4ba519ba73 100644 --- a/plugins/stack-overflow-backend/CHANGELOG.md +++ b/plugins/stack-overflow-backend/CHANGELOG.md @@ -1,5 +1,11 @@ # @backstage/plugin-stack-overflow-backend +## 0.1.4 + +### Patch Changes + +- ea5631a8b2: Added API key as separate configuration + ## 0.1.4-next.0 ### Patch Changes diff --git a/plugins/stack-overflow-backend/package.json b/plugins/stack-overflow-backend/package.json index 5b11dbdaab..9f75578252 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.1.4-next.0", + "version": "0.1.4", "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 3aa92d3dd6..193f0f4b6e 100644 --- a/plugins/stack-overflow/CHANGELOG.md +++ b/plugins/stack-overflow/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-stack-overflow +## 0.1.4 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-home@0.4.24 + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + ## 0.1.4-next.1 ### Patch Changes diff --git a/plugins/stack-overflow/package.json b/plugins/stack-overflow/package.json index 2367c2c769..27da0751f4 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.4-next.1", + "version": "0.1.4", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -24,9 +24,9 @@ }, "dependencies": { "@backstage/config": "^1.0.1", - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", - "@backstage/plugin-home": "^0.4.24-next.2", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", + "@backstage/plugin-home": "^0.4.24", "@backstage/plugin-search-common": "^1.0.0", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", @@ -42,10 +42,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/core-app-api": "^1.0.5", + "@backstage/dev-utils": "^1.0.5", + "@backstage/test-utils": "^1.1.3", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", "@types/jest": "^26.0.7", diff --git a/plugins/tech-insights-backend-module-jsonfc/CHANGELOG.md b/plugins/tech-insights-backend-module-jsonfc/CHANGELOG.md index f666bb2fa9..c6e8bd0d0a 100644 --- a/plugins/tech-insights-backend-module-jsonfc/CHANGELOG.md +++ b/plugins/tech-insights-backend-module-jsonfc/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-tech-insights-backend-module-jsonfc +## 0.1.19 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/plugin-tech-insights-common@0.2.6 + - @backstage/plugin-tech-insights-node@0.3.3 + ## 0.1.19-next.0 ### Patch Changes diff --git a/plugins/tech-insights-backend-module-jsonfc/package.json b/plugins/tech-insights-backend-module-jsonfc/package.json index 890b521daf..3a7191e429 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.19-next.0", + "version": "0.1.19", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,11 +34,11 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.15.0-next.0", + "@backstage/backend-common": "^0.15.0", "@backstage/config": "^1.0.1", "@backstage/errors": "^1.1.0", - "@backstage/plugin-tech-insights-common": "^0.2.6-next.0", - "@backstage/plugin-tech-insights-node": "^0.3.3-next.0", + "@backstage/plugin-tech-insights-common": "^0.2.6", + "@backstage/plugin-tech-insights-node": "^0.3.3", "ajv": "^8.10.0", "json-rules-engine": "^6.1.2", "lodash": "^4.17.21", @@ -46,7 +46,7 @@ "winston": "^3.2.1" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.0" + "@backstage/cli": "^0.18.1" }, "files": [ "dist" diff --git a/plugins/tech-insights-backend/CHANGELOG.md b/plugins/tech-insights-backend/CHANGELOG.md index e5d471a439..a9178622a9 100644 --- a/plugins/tech-insights-backend/CHANGELOG.md +++ b/plugins/tech-insights-backend/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-tech-insights-backend +## 0.5.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/backend-tasks@0.3.4 + - @backstage/plugin-tech-insights-common@0.2.6 + - @backstage/plugin-tech-insights-node@0.3.3 + ## 0.5.1-next.0 ### Patch Changes diff --git a/plugins/tech-insights-backend/package.json b/plugins/tech-insights-backend/package.json index 44b84d5fd3..194959d163 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.1-next.0", + "version": "0.5.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,14 +34,14 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.15.0-next.0", - "@backstage/backend-tasks": "^0.3.4-next.0", + "@backstage/backend-common": "^0.15.0", + "@backstage/backend-tasks": "^0.3.4", "@backstage/catalog-client": "^1.0.4", "@backstage/catalog-model": "^1.1.0", "@backstage/config": "^1.0.1", "@backstage/errors": "^1.1.0", - "@backstage/plugin-tech-insights-common": "^0.2.6-next.0", - "@backstage/plugin-tech-insights-node": "^0.3.3-next.0", + "@backstage/plugin-tech-insights-common": "^0.2.6", + "@backstage/plugin-tech-insights-node": "^0.3.3", "@types/express": "^4.17.6", "express": "^4.17.1", "express-promise-router": "^4.1.0", @@ -54,8 +54,8 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/backend-test-utils": "^0.1.27-next.0", - "@backstage/cli": "^0.18.1-next.0", + "@backstage/backend-test-utils": "^0.1.27", + "@backstage/cli": "^0.18.1", "@types/supertest": "^2.0.8", "@types/semver": "^7.3.8", "supertest": "^6.1.3", diff --git a/plugins/tech-insights-backend/src/service/persistence/TechInsightsDatabase.test.ts b/plugins/tech-insights-backend/src/service/persistence/TechInsightsDatabase.test.ts index e7e8819c66..3cf6d08c65 100644 --- a/plugins/tech-insights-backend/src/service/persistence/TechInsightsDatabase.test.ts +++ b/plugins/tech-insights-backend/src/service/persistence/TechInsightsDatabase.test.ts @@ -15,7 +15,7 @@ */ import { DateTime, Duration } from 'luxon'; import { TechInsightsStore } from '@backstage/plugin-tech-insights-node'; -import { Knex } from 'knex'; +import { Knex as KnexType, Knex } from 'knex'; import { TestDatabases } from '@backstage/backend-test-utils'; import { getVoidLogger } from '@backstage/backend-common'; import { initializePersistenceContext } from './persistenceContext'; @@ -165,15 +165,28 @@ const multipleSameFacts = [ }, ]; +function createDatabaseManager( + client: KnexType, + skipMigrations: boolean = false, +) { + return { + getClient: async () => client, + migrations: { + skip: skipMigrations, + }, + }; +} + describe('Tech Insights database', () => { const databases = TestDatabases.create(); let store: TechInsightsStore; let testDbClient: Knex; beforeAll(async () => { testDbClient = await databases.init('SQLITE_3'); + const database = createDatabaseManager(testDbClient); store = ( - await initializePersistenceContext(testDbClient, { + await initializePersistenceContext(database, { logger: getVoidLogger(), }) ).techInsightsStore; diff --git a/plugins/tech-insights-backend/src/service/persistence/persistenceContext.ts b/plugins/tech-insights-backend/src/service/persistence/persistenceContext.ts index b0fb65349f..575ee67bdf 100644 --- a/plugins/tech-insights-backend/src/service/persistence/persistenceContext.ts +++ b/plugins/tech-insights-backend/src/service/persistence/persistenceContext.ts @@ -13,8 +13,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { getVoidLogger, resolvePackagePath } from '@backstage/backend-common'; -import { Knex } from 'knex'; +import { + getVoidLogger, + PluginDatabaseManager, + resolvePackagePath, +} from '@backstage/backend-common'; import { Logger } from 'winston'; import { TechInsightsDatabase } from './TechInsightsDatabase'; import { TechInsightsStore } from '@backstage/plugin-tech-insights-node'; @@ -47,13 +50,18 @@ const defaultOptions: CreateDatabaseOptions = { * @public */ export const initializePersistenceContext = async ( - knex: Knex, + database: PluginDatabaseManager, options: CreateDatabaseOptions = defaultOptions, ): Promise => { - await knex.migrate.latest({ - directory: migrationsDir, - }); + const client = await database.getClient(); + + if (!database.migrations?.skip) { + await client.migrate.latest({ + directory: migrationsDir, + }); + } + return { - techInsightsStore: new TechInsightsDatabase(knex, options.logger), + techInsightsStore: new TechInsightsDatabase(client, options.logger), }; }; diff --git a/plugins/tech-insights-backend/src/service/techInsightsContextBuilder.ts b/plugins/tech-insights-backend/src/service/techInsightsContextBuilder.ts index 008acf192d..9c54036020 100644 --- a/plugins/tech-insights-backend/src/service/techInsightsContextBuilder.ts +++ b/plugins/tech-insights-backend/src/service/techInsightsContextBuilder.ts @@ -135,10 +135,9 @@ export const buildTechInsightsContext = async < const factRetrieverRegistry = buildFactRetrieverRegistry(); - const persistenceContext = await initializePersistenceContext( - await database.getClient(), - { logger }, - ); + const persistenceContext = await initializePersistenceContext(database, { + logger, + }); const factRetrieverEngine = await FactRetrieverEngine.create({ scheduler, diff --git a/plugins/tech-insights-common/CHANGELOG.md b/plugins/tech-insights-common/CHANGELOG.md index 09a21f5386..0482f80fb0 100644 --- a/plugins/tech-insights-common/CHANGELOG.md +++ b/plugins/tech-insights-common/CHANGELOG.md @@ -1,5 +1,11 @@ # @backstage/plugin-tech-insights-common +## 0.2.6 + +### Patch Changes + +- 29f782eb37: Updated dependency `@types/luxon` to `^3.0.0`. + ## 0.2.6-next.0 ### Patch Changes diff --git a/plugins/tech-insights-common/package.json b/plugins/tech-insights-common/package.json index 172344d005..1b5dabb88d 100644 --- a/plugins/tech-insights-common/package.json +++ b/plugins/tech-insights-common/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-tech-insights-common", - "version": "0.2.6-next.0", + "version": "0.2.6", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -38,7 +38,7 @@ "@backstage/types": "^1.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.0" + "@backstage/cli": "^0.18.1" }, "files": [ "dist" diff --git a/plugins/tech-insights-node/CHANGELOG.md b/plugins/tech-insights-node/CHANGELOG.md index 817eb1def5..36650980e8 100644 --- a/plugins/tech-insights-node/CHANGELOG.md +++ b/plugins/tech-insights-node/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-tech-insights-node +## 0.3.3 + +### Patch Changes + +- 29f782eb37: Updated dependency `@types/luxon` to `^3.0.0`. +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/plugin-tech-insights-common@0.2.6 + ## 0.3.3-next.0 ### Patch Changes diff --git a/plugins/tech-insights-node/api-report.md b/plugins/tech-insights-node/api-report.md index 84677bdcbc..19645d604b 100644 --- a/plugins/tech-insights-node/api-report.md +++ b/plugins/tech-insights-node/api-report.md @@ -169,11 +169,7 @@ export interface TechInsightsStore { [factRef: string]: FlatTechInsightFact; }>; getLatestSchemas(ids?: string[]): Promise; - insertFacts({ - id, - facts, - lifecycle, - }: { + insertFacts(options: { id: string; facts: TechInsightFact[]; lifecycle?: FactLifecycle; diff --git a/plugins/tech-insights-node/package.json b/plugins/tech-insights-node/package.json index 3d65d662c3..0233fac050 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.3.3-next.0", + "version": "0.3.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,16 +33,16 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.15.0-next.0", + "@backstage/backend-common": "^0.15.0", "@backstage/config": "^1.0.1", - "@backstage/plugin-tech-insights-common": "^0.2.6-next.0", + "@backstage/plugin-tech-insights-common": "^0.2.6", "@backstage/types": "^1.0.0", "@types/luxon": "^3.0.0", "luxon": "^3.0.0", "winston": "^3.2.1" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.0" + "@backstage/cli": "^0.18.1" }, "files": [ "dist" diff --git a/plugins/tech-insights-node/src/persistence.ts b/plugins/tech-insights-node/src/persistence.ts index 4324c24c42..31fda403a8 100644 --- a/plugins/tech-insights-node/src/persistence.ts +++ b/plugins/tech-insights-node/src/persistence.ts @@ -38,11 +38,7 @@ export interface TechInsightsStore { * @param facts - A collection of TechInsightFacts * @param lifecycle - (Optional) Fact lifecycle object indicating the expiration logic for these items */ - insertFacts({ - id, - facts, - lifecycle, - }: { + insertFacts(options: { id: string; facts: TechInsightFact[]; lifecycle?: FactLifecycle; diff --git a/plugins/tech-insights/CHANGELOG.md b/plugins/tech-insights/CHANGELOG.md index 5c4864405e..b80355146d 100644 --- a/plugins/tech-insights/CHANGELOG.md +++ b/plugins/tech-insights/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-tech-insights +## 0.2.4 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + - @backstage/plugin-tech-insights-common@0.2.6 + ## 0.2.4-next.1 ### Patch Changes diff --git a/plugins/tech-insights/api-report.md b/plugins/tech-insights/api-report.md index 694fb583d2..4f2687fa48 100644 --- a/plugins/tech-insights/api-report.md +++ b/plugins/tech-insights/api-report.md @@ -33,22 +33,14 @@ export type CheckResultRenderer = { }; // @public (undocumented) -export const EntityTechInsightsScorecardCard: ({ - title, - description, - checksId, -}: { +export const EntityTechInsightsScorecardCard: (props: { title?: string | undefined; description?: string | undefined; checksId?: string[] | undefined; }) => JSX.Element; // @public (undocumented) -export const EntityTechInsightsScorecardContent: ({ - title, - description, - checksId, -}: { +export const EntityTechInsightsScorecardContent: (props: { title?: string | undefined; description?: string | undefined; checksId?: string[] | undefined; diff --git a/plugins/tech-insights/package.json b/plugins/tech-insights/package.json index 3488f28f2d..2cd84c9915 100644 --- a/plugins/tech-insights/package.json +++ b/plugins/tech-insights/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-tech-insights", - "version": "0.2.4-next.1", + "version": "0.2.4", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -29,11 +29,11 @@ }, "dependencies": { "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", "@backstage/errors": "^1.1.0", - "@backstage/plugin-catalog-react": "^1.1.3-next.2", - "@backstage/plugin-tech-insights-common": "^0.2.6-next.0", + "@backstage/plugin-catalog-react": "^1.1.3", + "@backstage/plugin-tech-insights-common": "^0.2.6", "@backstage/theme": "^0.2.16", "@backstage/types": "^1.0.0", "@material-ui/core": "^4.12.2", @@ -47,10 +47,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/core-app-api": "^1.0.5", + "@backstage/dev-utils": "^1.0.5", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/tech-insights/src/components/ScorecardsCard/ScorecardsCard.tsx b/plugins/tech-insights/src/components/ScorecardsCard/ScorecardsCard.tsx index f6bc4b0cb5..57b8915b58 100644 --- a/plugins/tech-insights/src/components/ScorecardsCard/ScorecardsCard.tsx +++ b/plugins/tech-insights/src/components/ScorecardsCard/ScorecardsCard.tsx @@ -23,15 +23,12 @@ import { ScorecardInfo } from '../ScorecardsInfo'; import Alert from '@material-ui/lab/Alert'; import { techInsightsApiRef } from '../../api/TechInsightsApi'; -export const ScorecardsCard = ({ - title, - description, - checksId, -}: { +export const ScorecardsCard = (props: { title?: string; description?: string; checksId?: string[]; }) => { + const { title, description, checksId } = props; const api = useApi(techInsightsApiRef); const { namespace, kind, name } = useParams(); const { value, loading, error } = useAsync( diff --git a/plugins/tech-insights/src/components/ScorecardsContent/ScorecardContent.tsx b/plugins/tech-insights/src/components/ScorecardsContent/ScorecardContent.tsx index 07a839d7a8..c3d02c938f 100644 --- a/plugins/tech-insights/src/components/ScorecardsContent/ScorecardContent.tsx +++ b/plugins/tech-insights/src/components/ScorecardsContent/ScorecardContent.tsx @@ -31,15 +31,12 @@ const useStyles = makeStyles(() => ({ }, })); -export const ScorecardsContent = ({ - title, - description, - checksId, -}: { +export const ScorecardsContent = (props: { title?: string; description?: string; checksId?: string[]; }) => { + const { title, description, checksId } = props; const classes = useStyles(); const api = useApi(techInsightsApiRef); const { namespace, kind, name } = useParams(); diff --git a/plugins/tech-insights/src/components/ScorecardsInfo/ScorecardInfo.tsx b/plugins/tech-insights/src/components/ScorecardsInfo/ScorecardInfo.tsx index 2c5abb3596..9d5fc5ac9e 100644 --- a/plugins/tech-insights/src/components/ScorecardsInfo/ScorecardInfo.tsx +++ b/plugins/tech-insights/src/components/ScorecardsInfo/ScorecardInfo.tsx @@ -30,15 +30,9 @@ const useStyles = makeStyles((theme: BackstageTheme) => ({ }, })); -type Checks = { - checks: CheckResult[]; - title?: string; - description?: string; -}; - const infoCard = ( - title: Checks['title'], - description: Checks['description'], + title: string | undefined, + description: string | undefined, className: string, element: JSX.Element, ) => ( @@ -54,7 +48,12 @@ const infoCard = ( ); -export const ScorecardInfo = ({ checks, title, description }: Checks) => { +export const ScorecardInfo = (props: { + checks: CheckResult[]; + title?: string; + description?: string; +}) => { + const { checks, title, description } = props; const classes = useStyles(); const api = useApi(techInsightsApiRef); diff --git a/plugins/tech-radar/CHANGELOG.md b/plugins/tech-radar/CHANGELOG.md index 8d2bd23ed6..0659f93073 100644 --- a/plugins/tech-radar/CHANGELOG.md +++ b/plugins/tech-radar/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-tech-radar +## 0.5.15 + +### Patch Changes + +- a641f79dcb: Move CSS overflow property to quadrant block element (i.e. to a div element) in RadarLegend component. +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + ## 0.5.15-next.1 ### Patch Changes diff --git a/plugins/tech-radar/package.json b/plugins/tech-radar/package.json index 5267acfd55..c65d159429 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.5.15-next.1", + "version": "0.5.15", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,8 +34,8 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -49,10 +49,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/core-app-api": "^1.0.5", + "@backstage/dev-utils": "^1.0.5", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/tech-radar/src/components/RadarLegend/RadarLegend.tsx b/plugins/tech-radar/src/components/RadarLegend/RadarLegend.tsx index 705dc9f47b..a398113b98 100644 --- a/plugins/tech-radar/src/components/RadarLegend/RadarLegend.tsx +++ b/plugins/tech-radar/src/components/RadarLegend/RadarLegend.tsx @@ -32,15 +32,11 @@ export type Props = { }; const useStyles = makeStyles(theme => ({ - quadrantLegend: { - overflowY: 'auto', - scrollbarWidth: 'thin', - }, quadrant: { height: '100%', width: '100%', + overflowY: 'auto', scrollbarWidth: 'thin', - pointerEvents: 'none', }, quadrantHeading: { pointerEvents: 'none', @@ -229,7 +225,6 @@ const RadarLegend = (props: Props): JSX.Element => { y={quadrant.legendY} width={quadrant.legendWidth} height={quadrant.legendHeight} - className={classes.quadrantLegend} data-testid="radar-quadrant" >
diff --git a/plugins/techdocs-addons-test-utils/CHANGELOG.md b/plugins/techdocs-addons-test-utils/CHANGELOG.md index 9ee8c381a8..f10fadfec2 100644 --- a/plugins/techdocs-addons-test-utils/CHANGELOG.md +++ b/plugins/techdocs-addons-test-utils/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-techdocs-addons-test-utils +## 1.0.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-techdocs@1.3.1 + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog@1.5.0 + - @backstage/plugin-techdocs-react@1.0.3 + - @backstage/core-app-api@1.0.5 + - @backstage/integration-react@1.1.3 + - @backstage/test-utils@1.1.3 + - @backstage/plugin-search-react@1.0.1 + ## 1.0.3-next.1 ### Patch Changes diff --git a/plugins/techdocs-addons-test-utils/package.json b/plugins/techdocs-addons-test-utils/package.json index 0cddc8c93c..a355d55276 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.3-next.1", + "version": "1.0.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -32,15 +32,15 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/core-plugin-api": "^1.0.5-next.0", - "@backstage/integration-react": "^1.1.3-next.1", - "@backstage/plugin-catalog": "^1.5.0-next.2", - "@backstage/plugin-search-react": "^1.0.1-next.1", - "@backstage/plugin-techdocs": "^1.3.1-next.2", - "@backstage/plugin-techdocs-react": "^1.0.3-next.2", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/core-components": "^0.11.0", + "@backstage/core-app-api": "^1.0.5", + "@backstage/core-plugin-api": "^1.0.5", + "@backstage/integration-react": "^1.1.3", + "@backstage/plugin-catalog": "^1.5.0", + "@backstage/plugin-search-react": "^1.0.1", + "@backstage/plugin-techdocs": "^1.3.1", + "@backstage/plugin-techdocs-react": "^1.0.3", + "@backstage/test-utils": "^1.1.3", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.9.13", "@material-ui/icons": "^4.9.1", @@ -56,8 +56,8 @@ "react-dom": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/dev-utils": "^1.0.5-next.1", + "@backstage/cli": "^0.18.1", + "@backstage/dev-utils": "^1.0.5", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/techdocs-backend/CHANGELOG.md b/plugins/techdocs-backend/CHANGELOG.md index 944926f841..8140808d9d 100644 --- a/plugins/techdocs-backend/CHANGELOG.md +++ b/plugins/techdocs-backend/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-techdocs-backend +## 1.2.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/integration@1.3.0 + - @backstage/plugin-techdocs-node@1.3.0 + - @backstage/plugin-catalog-common@1.0.5 + ## 1.2.1-next.1 ### Patch Changes diff --git a/plugins/techdocs-backend/package.json b/plugins/techdocs-backend/package.json index eea1837301..dcf8da6d7a 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.2.1-next.1", + "version": "1.2.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,16 +34,16 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.15.0-next.1", + "@backstage/backend-common": "^0.15.0", "@backstage/catalog-client": "^1.0.4", "@backstage/catalog-model": "^1.1.0", "@backstage/config": "^1.0.1", "@backstage/errors": "^1.1.0", - "@backstage/integration": "^1.3.0-next.1", - "@backstage/plugin-catalog-common": "^1.0.5-next.0", + "@backstage/integration": "^1.3.0", + "@backstage/plugin-catalog-common": "^1.0.5", "@backstage/plugin-permission-common": "^0.6.3", "@backstage/plugin-search-common": "^1.0.0", - "@backstage/plugin-techdocs-node": "^1.3.0-next.1", + "@backstage/plugin-techdocs-node": "^1.3.0", "@types/express": "^4.17.6", "dockerode": "^3.3.1", "express": "^4.17.1", @@ -56,9 +56,9 @@ "winston": "^3.2.1" }, "devDependencies": { - "@backstage/backend-test-utils": "^0.1.27-next.0", - "@backstage/cli": "^0.18.1-next.0", - "@backstage/plugin-search-backend-node": "1.0.1-next.0", + "@backstage/backend-test-utils": "^0.1.27", + "@backstage/cli": "^0.18.1", + "@backstage/plugin-search-backend-node": "1.0.1", "@types/dockerode": "^3.3.0", "msw": "^0.44.0", "supertest": "^6.1.3" diff --git a/plugins/techdocs-module-addons-contrib/CHANGELOG.md b/plugins/techdocs-module-addons-contrib/CHANGELOG.md index f0b9d1578a..4babb601bc 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.0.3 + +### Patch Changes + +- ad35364e97: feat(techdocs): add edit button support for bitbucketServer +- Updated dependencies + - @backstage/integration@1.3.0 + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-techdocs-react@1.0.3 + - @backstage/integration-react@1.1.3 + ## 1.0.3-next.2 ### Patch Changes diff --git a/plugins/techdocs-module-addons-contrib/api-report.md b/plugins/techdocs-module-addons-contrib/api-report.md index f787e0678c..68fad9121d 100644 --- a/plugins/techdocs-module-addons-contrib/api-report.md +++ b/plugins/techdocs-module-addons-contrib/api-report.md @@ -26,9 +26,7 @@ export type ReportIssueTemplate = { }; // @public -export type ReportIssueTemplateBuilder = ({ - selection, -}: { +export type ReportIssueTemplateBuilder = (options: { selection: Selection; }) => ReportIssueTemplate; diff --git a/plugins/techdocs-module-addons-contrib/package.json b/plugins/techdocs-module-addons-contrib/package.json index 5f84ee45c3..7e8b3f3cac 100644 --- a/plugins/techdocs-module-addons-contrib/package.json +++ b/plugins/techdocs-module-addons-contrib/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-techdocs-module-addons-contrib", "description": "Plugin module for contributed TechDocs Addons", - "version": "1.0.3-next.2", + "version": "1.0.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,11 +34,11 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", - "@backstage/integration": "^1.3.0-next.1", - "@backstage/integration-react": "^1.1.3-next.1", - "@backstage/plugin-techdocs-react": "^1.0.3-next.2", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", + "@backstage/integration": "^1.3.0", + "@backstage/integration-react": "^1.1.3", + "@backstage/plugin-techdocs-react": "^1.0.3", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.9.13", "@material-ui/icons": "^4.9.1", @@ -51,11 +51,11 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/plugin-techdocs-addons-test-utils": "^1.0.3-next.1", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/core-app-api": "^1.0.5", + "@backstage/dev-utils": "^1.0.5", + "@backstage/plugin-techdocs-addons-test-utils": "^1.0.3", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/techdocs-module-addons-contrib/src/ReportIssue/types.ts b/plugins/techdocs-module-addons-contrib/src/ReportIssue/types.ts index 0816b45d9d..84143a40f2 100644 --- a/plugins/techdocs-module-addons-contrib/src/ReportIssue/types.ts +++ b/plugins/techdocs-module-addons-contrib/src/ReportIssue/types.ts @@ -37,9 +37,7 @@ export type ReportIssueTemplate = { * * @public */ -export type ReportIssueTemplateBuilder = ({ - selection, -}: { +export type ReportIssueTemplateBuilder = (options: { selection: Selection; }) => ReportIssueTemplate; diff --git a/plugins/techdocs-node/CHANGELOG.md b/plugins/techdocs-node/CHANGELOG.md index 4f8356a87c..8b1b2059cb 100644 --- a/plugins/techdocs-node/CHANGELOG.md +++ b/plugins/techdocs-node/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-techdocs-node +## 1.3.0 + +### Minor Changes + +- ad35364e97: feat(techdocs): add edit button support for bitbucketServer + +### Patch Changes + +- c8196bd37d: Fix AWS S3 404 NotFound error + + When reading an object from the S3 bucket through a stream, the aws-sdk getObject() API may throw a 404 NotFound Error with no error message or, in fact, any sort of HTTP-layer error responses. These fail the @backstage/error's assertError() checks, so they must be wrapped. The test for this case was also updated to match the wrapped error message. + +- f833344611: Bump default `TechDocs` image to `v1.1.0`, see the release [here](https://github.com/backstage/techdocs-container/releases/tag/v1.1.0). +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/integration@1.3.0 + ## 1.3.0-next.1 ### Minor Changes diff --git a/plugins/techdocs-node/package.json b/plugins/techdocs-node/package.json index 643ac95be2..d1a79db3b3 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.3.0-next.1", + "version": "1.3.0", "main": "src/index.ts", "types": "src/index.ts", "private": false, @@ -42,11 +42,11 @@ "dependencies": { "@azure/identity": "^2.0.1", "@azure/storage-blob": "^12.5.0", - "@backstage/backend-common": "^0.15.0-next.1", + "@backstage/backend-common": "^0.15.0", "@backstage/catalog-model": "^1.1.0", "@backstage/config": "^1.0.1", "@backstage/errors": "^1.1.0", - "@backstage/integration": "^1.3.0-next.1", + "@backstage/integration": "^1.3.0", "@backstage/plugin-search-common": "^1.0.0", "@google-cloud/storage": "^6.0.0", "@trendyol-js/openstack-swift-sdk": "^0.0.5", @@ -64,7 +64,7 @@ "winston": "^3.2.1" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.0", + "@backstage/cli": "^0.18.1", "@types/fs-extra": "^9.0.5", "@types/js-yaml": "^4.0.0", "@types/mime-types": "^2.1.0", diff --git a/plugins/techdocs-react/CHANGELOG.md b/plugins/techdocs-react/CHANGELOG.md index 1c88d774e8..08db6050b8 100644 --- a/plugins/techdocs-react/CHANGELOG.md +++ b/plugins/techdocs-react/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-techdocs-react +## 1.0.3 + +### Patch Changes + +- 29d6cf0147: Add `toLowerEntityRefMaybe()` helper function for handling `techdocs.legacyUseCaseSensitiveTripletPaths` flag. + Pass modified `entityRef` to `TechDocsReaderPageContext` to handle the `techdocs.legacyUseCaseSensitiveTripletPaths` flag. +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + ## 1.0.3-next.2 ### Patch Changes diff --git a/plugins/techdocs-react/package.json b/plugins/techdocs-react/package.json index 446a77752a..8074b799bf 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.0.3-next.2", + "version": "1.0.3", "private": false, "publishConfig": { "access": "public", @@ -37,8 +37,8 @@ "dependencies": { "@backstage/catalog-model": "^1.1.0", "@backstage/config": "^1.0.1", - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", "@backstage/version-bridge": "^1.0.1", "@material-ui/core": "^4.12.2", "@material-ui/lab": "4.0.0-alpha.57", @@ -57,7 +57,7 @@ "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/react-hooks": "^8.0.0", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/test-utils": "^1.1.3", "@backstage/theme": "^0.2.16" }, "files": [ diff --git a/plugins/techdocs/CHANGELOG.md b/plugins/techdocs/CHANGELOG.md index 283245bb18..099c84eb0b 100644 --- a/plugins/techdocs/CHANGELOG.md +++ b/plugins/techdocs/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-techdocs +## 1.3.1 + +### Patch Changes + +- e924d2d013: Added back reduction in size, this fixes the extremely large TeachDocs headings +- b86ed4d990: Add highlight to active navigation item and navigation parents. +- 7a98c73dc8: Fixed techdocs sidebar layout bug for medium devices. +- 8acb22205c: Scroll techdocs navigation into focus and expand any nested navigation items. +- Updated dependencies + - @backstage/integration@1.3.0 + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + - @backstage/plugin-techdocs-react@1.0.3 + - @backstage/integration-react@1.1.3 + - @backstage/plugin-search-react@1.0.1 + ## 1.3.1-next.2 ### Patch Changes diff --git a/plugins/techdocs/api-report.md b/plugins/techdocs/api-report.md index ef037fbb05..b2f0331a9b 100644 --- a/plugins/techdocs/api-report.md +++ b/plugins/techdocs/api-report.md @@ -345,11 +345,7 @@ export type TechDocsReaderPageProps = { }; // @public -export type TechDocsReaderPageRenderFunction = ({ - techdocsMetadataValue, - entityMetadataValue, - entityRef, -}: { +export type TechDocsReaderPageRenderFunction = (options: { techdocsMetadataValue?: TechDocsMetadata_2 | undefined; entityMetadataValue?: TechDocsEntityMetadata_2 | undefined; entityRef: CompoundEntityRef; @@ -357,10 +353,8 @@ export type TechDocsReaderPageRenderFunction = ({ }) => JSX.Element; // @public -export const TechDocsReaderPageSubheader: ({ - toolbarProps, -}: { - toolbarProps?: ToolbarProps<'div', {}> | undefined; +export const TechDocsReaderPageSubheader: (props: { + toolbarProps?: ToolbarProps; }) => JSX.Element | null; // @public diff --git a/plugins/techdocs/package.json b/plugins/techdocs/package.json index f8e363e821..10f9f2f4c0 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.3.1-next.2", + "version": "1.3.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -37,15 +37,15 @@ "dependencies": { "@backstage/catalog-model": "^1.1.0", "@backstage/config": "^1.0.1", - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", "@backstage/errors": "^1.1.0", - "@backstage/integration": "^1.3.0-next.1", - "@backstage/integration-react": "^1.1.3-next.1", - "@backstage/plugin-catalog-react": "^1.1.3-next.2", + "@backstage/integration": "^1.3.0", + "@backstage/integration-react": "^1.1.3", + "@backstage/plugin-catalog-react": "^1.1.3", "@backstage/plugin-search-common": "^1.0.0", - "@backstage/plugin-search-react": "^1.0.1-next.1", - "@backstage/plugin-techdocs-react": "^1.0.3-next.2", + "@backstage/plugin-search-react": "^1.0.1", + "@backstage/plugin-techdocs-react": "^1.0.3", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -67,10 +67,10 @@ "react-dom": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/core-app-api": "^1.0.5", + "@backstage/dev-utils": "^1.0.5", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/react-hooks": "^8.0.0", diff --git a/plugins/techdocs/src/reader/components/TechDocsReaderPageSubheader/TechDocsReaderPageSubheader.tsx b/plugins/techdocs/src/reader/components/TechDocsReaderPageSubheader/TechDocsReaderPageSubheader.tsx index a0013e81ab..0cef4d521f 100644 --- a/plugins/techdocs/src/reader/components/TechDocsReaderPageSubheader/TechDocsReaderPageSubheader.tsx +++ b/plugins/techdocs/src/reader/components/TechDocsReaderPageSubheader/TechDocsReaderPageSubheader.tsx @@ -47,9 +47,7 @@ const useStyles = makeStyles(theme => ({ * Please use the Tech Docs add-ons to customize it * @public */ -export const TechDocsReaderPageSubheader = ({ - toolbarProps, -}: { +export const TechDocsReaderPageSubheader = (props: { toolbarProps?: ToolbarProps; }) => { const classes = useStyles(); @@ -81,7 +79,7 @@ export const TechDocsReaderPageSubheader = ({ if (entityMetadataLoading === false && !entityMetadata) return null; return ( - + ((style, heading) => { let factor: number | string = 1; if (typeof value === 'number') { // convert px to rem - factor = value / htmlFontSize; + // 60% of the size defined because it is too big + factor = (value / htmlFontSize) * 0.6; } if (typeof value === 'string') { factor = value.replace('rem', ''); diff --git a/plugins/techdocs/src/types.ts b/plugins/techdocs/src/types.ts index 014bf0d090..c07f7c3907 100644 --- a/plugins/techdocs/src/types.ts +++ b/plugins/techdocs/src/types.ts @@ -25,11 +25,7 @@ import { * * @public */ -export type TechDocsReaderPageRenderFunction = ({ - techdocsMetadataValue, - entityMetadataValue, - entityRef, -}: { +export type TechDocsReaderPageRenderFunction = (options: { techdocsMetadataValue?: TechDocsMetadata | undefined; entityMetadataValue?: TechDocsEntityMetadata | undefined; entityRef: CompoundEntityRef; diff --git a/plugins/todo-backend/CHANGELOG.md b/plugins/todo-backend/CHANGELOG.md index 8d086e4608..bfeaef7f11 100644 --- a/plugins/todo-backend/CHANGELOG.md +++ b/plugins/todo-backend/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-todo-backend +## 0.1.32 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/integration@1.3.0 + ## 0.1.32-next.0 ### Patch Changes diff --git a/plugins/todo-backend/package.json b/plugins/todo-backend/package.json index fc99d715b1..fc5b396a7c 100644 --- a/plugins/todo-backend/package.json +++ b/plugins/todo-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-todo-backend", "description": "A Backstage backend plugin that lets you browse TODO comments in your source code", - "version": "0.1.32-next.0", + "version": "0.1.32", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -29,12 +29,12 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/backend-common": "^0.15.0-next.0", + "@backstage/backend-common": "^0.15.0", "@backstage/catalog-client": "^1.0.4", "@backstage/catalog-model": "^1.1.0", "@backstage/config": "^1.0.1", "@backstage/errors": "^1.1.0", - "@backstage/integration": "^1.3.0-next.0", + "@backstage/integration": "^1.3.0", "@types/express": "^4.17.6", "express": "^4.17.1", "express-promise-router": "^4.1.0", @@ -43,7 +43,7 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.0", + "@backstage/cli": "^0.18.1", "@types/supertest": "^2.0.8", "msw": "^0.44.0", "supertest": "^6.1.3" diff --git a/plugins/todo/CHANGELOG.md b/plugins/todo/CHANGELOG.md index cdc529308c..ae2fe2a9df 100644 --- a/plugins/todo/CHANGELOG.md +++ b/plugins/todo/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-todo +## 0.2.10 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + ## 0.2.10-next.1 ### Patch Changes diff --git a/plugins/todo/package.json b/plugins/todo/package.json index 817a1c5327..0472ddd349 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.10-next.1", + "version": "0.2.10", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -31,10 +31,10 @@ }, "dependencies": { "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", "@backstage/errors": "^1.1.0", - "@backstage/plugin-catalog-react": "^1.1.3-next.2", + "@backstage/plugin-catalog-react": "^1.1.3", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -45,10 +45,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/core-app-api": "^1.0.5", + "@backstage/dev-utils": "^1.0.5", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/user-settings/CHANGELOG.md b/plugins/user-settings/CHANGELOG.md index a87cdfb9c4..25fc8a11d6 100644 --- a/plugins/user-settings/CHANGELOG.md +++ b/plugins/user-settings/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-user-settings +## 0.4.7 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + ## 0.4.7-next.1 ### Patch Changes diff --git a/plugins/user-settings/api-report.md b/plugins/user-settings/api-report.md index 914f8b2385..d6aca3c46f 100644 --- a/plugins/user-settings/api-report.md +++ b/plugins/user-settings/api-report.md @@ -20,7 +20,7 @@ import { SessionApi } from '@backstage/core-plugin-api'; // @public (undocumented) export const DefaultProviderSettings: ({ configuredProviders, -}: Props_3) => JSX.Element; +}: Props_2) => JSX.Element; // Warning: (ae-forgotten-export) The symbol "Props" needs to be exported by the entry point index.d.ts // Warning: (ae-missing-release-tag) "ProviderSettingsItem" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) @@ -31,13 +31,10 @@ export const ProviderSettingsItem: ({ description, icon: Icon, apiRef, -}: Props_4) => JSX.Element; +}: Props_3) => JSX.Element; -// Warning: (ae-forgotten-export) The symbol "Props" needs to be exported by the entry point index.d.ts -// Warning: (ae-missing-release-tag) "SettingsPage" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) -export const Router: ({ providerSettings }: Props) => JSX.Element; +export const Router: (props: { providerSettings?: JSX.Element }) => JSX.Element; // Warning: (ae-forgotten-export) The symbol "SettingsProps" needs to be exported by the entry point index.d.ts // Warning: (ae-missing-release-tag) "Settings" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) @@ -59,7 +56,7 @@ export const UserSettingsAppearanceCard: () => JSX.Element; // @public (undocumented) export const UserSettingsAuthProviders: ({ providerSettings, -}: Props_2) => JSX.Element; +}: Props) => JSX.Element; // Warning: (ae-missing-release-tag) "UserSettingsFeatureFlags" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // @@ -84,9 +81,7 @@ export const UserSettingsMenu: () => JSX.Element; // Warning: (ae-missing-release-tag) "UserSettingsPage" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) -export const UserSettingsPage: ({ - providerSettings, -}: { +export const UserSettingsPage: (props: { providerSettings?: JSX.Element | undefined; }) => JSX.Element; @@ -117,7 +112,7 @@ export const UserSettingsProfileCard: () => JSX.Element; // Warning: (ae-missing-release-tag) "UserSettingsSignInAvatar" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) -export const UserSettingsSignInAvatar: ({ size }: Props_5) => JSX.Element; +export const UserSettingsSignInAvatar: ({ size }: Props_4) => JSX.Element; // @public export const UserSettingsTab: (props: UserSettingsTabProps) => JSX.Element; diff --git a/plugins/user-settings/package.json b/plugins/user-settings/package.json index 46a82fbdd0..7aea0a9bbb 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.4.7-next.1", + "version": "0.4.7", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,8 +34,8 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -48,10 +48,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/core-app-api": "^1.0.5", + "@backstage/dev-utils": "^1.0.5", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/user-settings/src/components/SettingsPage.tsx b/plugins/user-settings/src/components/SettingsPage.tsx index dcaf62d435..9803bf4761 100644 --- a/plugins/user-settings/src/components/SettingsPage.tsx +++ b/plugins/user-settings/src/components/SettingsPage.tsx @@ -28,11 +28,11 @@ import { UserSettingsFeatureFlags } from './FeatureFlags'; import { UserSettingsGeneral } from './General'; import { USER_SETTINGS_TAB_KEY, UserSettingsTabProps } from './UserSettingsTab'; -type Props = { - providerSettings?: JSX.Element; -}; - -export const SettingsPage = ({ providerSettings }: Props) => { +/** + * @public + */ +export const SettingsPage = (props: { providerSettings?: JSX.Element }) => { + const { providerSettings } = props; const { isMobile } = useSidebarPinState(); const outlet = useOutlet(); diff --git a/plugins/vault-backend/CHANGELOG.md b/plugins/vault-backend/CHANGELOG.md index 00d5360ca4..64c3782f9d 100644 --- a/plugins/vault-backend/CHANGELOG.md +++ b/plugins/vault-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-vault-backend +## 0.2.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.0 + - @backstage/backend-test-utils@0.1.27 + - @backstage/backend-tasks@0.3.4 + ## 0.2.1-next.0 ### Patch Changes diff --git a/plugins/vault-backend/api-report.md b/plugins/vault-backend/api-report.md index d2e9e1b177..2b1fb14bd0 100644 --- a/plugins/vault-backend/api-report.md +++ b/plugins/vault-backend/api-report.md @@ -48,7 +48,7 @@ export type VaultBuilderReturn = { // @public export class VaultClient implements VaultApi { - constructor({ config }: { config: Config }); + constructor(options: { config: Config }); // (undocumented) getFrontendSecretsUrl(): string; // (undocumented) diff --git a/plugins/vault-backend/package.json b/plugins/vault-backend/package.json index 1e6292fa00..506b68ed6e 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.2.1-next.0", + "version": "0.2.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,9 +34,9 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@backstage/backend-common": "^0.15.0-next.0", - "@backstage/backend-tasks": "^0.3.4-next.0", - "@backstage/backend-test-utils": "^0.1.27-next.0", + "@backstage/backend-common": "^0.15.0", + "@backstage/backend-tasks": "^0.3.4", + "@backstage/backend-test-utils": "^0.1.27", "@backstage/config": "^1.0.1", "@backstage/errors": "^1.1.0", "@types/express": "*", @@ -51,7 +51,7 @@ "yn": "^5.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.0", + "@backstage/cli": "^0.18.1", "@types/compression": "^1.7.2", "@types/supertest": "^2.0.8", "msw": "^0.44.0", diff --git a/plugins/vault-backend/src/service/vaultApi.ts b/plugins/vault-backend/src/service/vaultApi.ts index 158778294a..16aa39ae03 100644 --- a/plugins/vault-backend/src/service/vaultApi.ts +++ b/plugins/vault-backend/src/service/vaultApi.ts @@ -79,8 +79,8 @@ export class VaultClient implements VaultApi { private vaultConfig: VaultConfig; private readonly limit = plimit(5); - constructor({ config }: { config: Config }) { - this.vaultConfig = getVaultConfig(config); + constructor(options: { config: Config }) { + this.vaultConfig = getVaultConfig(options.config); } private async callApi( diff --git a/plugins/vault/CHANGELOG.md b/plugins/vault/CHANGELOG.md index 56523c0d23..1cbc985e1c 100644 --- a/plugins/vault/CHANGELOG.md +++ b/plugins/vault/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-vault +## 0.1.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + - @backstage/plugin-catalog-react@1.1.3 + ## 0.1.2-next.1 ### Patch Changes diff --git a/plugins/vault/package.json b/plugins/vault/package.json index 9aed61d6d4..66797dc171 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.2-next.1", + "version": "0.1.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -35,10 +35,10 @@ }, "dependencies": { "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", "@backstage/errors": "^1.1.0", - "@backstage/plugin-catalog-react": "^1.1.3-next.2", + "@backstage/plugin-catalog-react": "^1.1.3", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -49,10 +49,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/core-app-api": "^1.0.5", + "@backstage/dev-utils": "^1.0.5", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/xcmetrics/CHANGELOG.md b/plugins/xcmetrics/CHANGELOG.md index 40e7385089..2639b124e8 100644 --- a/plugins/xcmetrics/CHANGELOG.md +++ b/plugins/xcmetrics/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-xcmetrics +## 0.2.28 + +### Patch Changes + +- 29f782eb37: Updated dependency `@types/luxon` to `^3.0.0`. +- Updated dependencies + - @backstage/core-components@0.11.0 + - @backstage/core-plugin-api@1.0.5 + ## 0.2.28-next.1 ### Patch Changes diff --git a/plugins/xcmetrics/package.json b/plugins/xcmetrics/package.json index bd13f5f4af..d71dbb02d3 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.28-next.1", + "version": "0.2.28", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -24,8 +24,8 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/core-components": "^0.11.0-next.2", - "@backstage/core-plugin-api": "^1.0.5-next.0", + "@backstage/core-components": "^0.11.0", + "@backstage/core-plugin-api": "^1.0.5", "@backstage/errors": "^1.1.0", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", @@ -40,10 +40,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.1-next.1", - "@backstage/core-app-api": "^1.0.5-next.0", - "@backstage/dev-utils": "^1.0.5-next.1", - "@backstage/test-utils": "^1.1.3-next.0", + "@backstage/cli": "^0.18.1", + "@backstage/core-app-api": "^1.0.5", + "@backstage/dev-utils": "^1.0.5", + "@backstage/test-utils": "^1.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/scripts/api-extractor.ts b/scripts/api-extractor.ts index 32b27e06ca..be1f9ce038 100644 --- a/scripts/api-extractor.ts +++ b/scripts/api-extractor.ts @@ -201,14 +201,8 @@ const ALLOW_WARNINGS = [ 'packages/core-components', 'plugins/allure', 'plugins/apache-airflow', - 'plugins/api-docs', 'plugins/app-backend', 'plugins/auth-backend', - 'plugins/azure-devops', - 'plugins/azure-devops-backend', - 'plugins/azure-devops-common', - 'plugins/badges', - 'plugins/badges-backend', 'plugins/bitrise', 'plugins/catalog', 'plugins/catalog-graphql', @@ -223,7 +217,6 @@ const ALLOW_WARNINGS = [ 'plugins/explore', 'plugins/explore-react', 'plugins/firehydrant', - 'plugins/fossa', 'plugins/gcalendar', 'plugins/gcp-projects', 'plugins/git-release-manager', @@ -236,21 +229,16 @@ const ALLOW_WARNINGS = [ 'plugins/ilert', 'plugins/jenkins', 'plugins/jenkins-backend', - 'plugins/kafka', - 'plugins/kafka-backend', 'plugins/kubernetes', 'plugins/kubernetes-common', - 'plugins/lighthouse', 'plugins/newrelic', 'plugins/newrelic-dashboard', 'plugins/pagerduty', - 'plugins/proxy-backend', 'plugins/rollbar', 'plugins/rollbar-backend', 'plugins/search-backend-module-pg', 'plugins/sentry', 'plugins/shortcuts', - 'plugins/sonarqube', 'plugins/splunk-on-call', 'plugins/tech-radar', 'plugins/user-settings', diff --git a/yarn.lock b/yarn.lock index c23b594c54..8a35905af9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2085,136 +2085,6 @@ zen-observable "^0.8.15" zod "^3.11.6" -"@backstage/core-plugin-api@^1.0.0", "@backstage/core-plugin-api@^1.0.4": - version "1.0.4" - resolved "https://registry.npmjs.org/@backstage/core-plugin-api/-/core-plugin-api-1.0.4.tgz#0dbe80be1d298273df0299ef69baa18522d9a808" - integrity sha512-fMMpjqW2RjwclnHUJsSyPCTguplflQYEWv7wsk7IoanEkWx39pensi8OsdIBawXrOixXEnI47dgxtVMOQUxOKA== - dependencies: - "@backstage/config" "^1.0.1" - "@backstage/types" "^1.0.0" - "@backstage/version-bridge" "^1.0.1" - history "^5.0.0" - prop-types "^15.7.2" - react-router-dom "6.0.0-beta.0" - zen-observable "^0.8.15" - -"@backstage/integration-react@^1.0.0": - version "1.1.2" - resolved "https://registry.npmjs.org/@backstage/integration-react/-/integration-react-1.1.2.tgz#001a736f5ce222bf770a26c2c15b42705012e495" - integrity sha512-5MA9cuIDRviQ2Qi9slbHE2i2tBnIcs4JdRukc3sTw7zarcmYaVkDI7N2pQiBkVxATKwXoY8gDuEQD8VYr62cnw== - dependencies: - "@backstage/config" "^1.0.1" - "@backstage/core-components" "^0.10.0" - "@backstage/core-plugin-api" "^1.0.4" - "@backstage/integration" "^1.2.2" - "@backstage/theme" "^0.2.16" - "@material-ui/core" "^4.12.2" - "@material-ui/icons" "^4.9.1" - "@material-ui/lab" "4.0.0-alpha.57" - react-use "^17.2.4" - -"@backstage/integration@^1.2.2": - version "1.2.2" - resolved "https://registry.npmjs.org/@backstage/integration/-/integration-1.2.2.tgz#f0a9cb6ae31444832505d9f57dfa3f921fb0c6c0" - integrity sha512-MIttnW6xEIun94muo0nmJ3hK9ks9IgUvBsYGNwfxsKpWBv3g3zZ4cU0pXpUdtvzhWOHw7w3HQrSPEVmm6MSqbA== - dependencies: - "@backstage/config" "^1.0.1" - "@backstage/errors" "^1.1.0" - "@octokit/auth-app" "^4.0.0" - "@octokit/rest" "^19.0.3" - cross-fetch "^3.1.5" - git-url-parse "^12.0.0" - lodash "^4.17.21" - luxon "^3.0.0" - -"@backstage/plugin-catalog-common@^1.0.4": - version "1.0.4" - resolved "https://registry.npmjs.org/@backstage/plugin-catalog-common/-/plugin-catalog-common-1.0.4.tgz#94389cb6555eeaea2814d286744d951578ae9132" - integrity sha512-6+3pQMFOjvsswzaGZ1qqgkc2dnuQOFILDk4zmmc/bq35R4ICk48Pbw41gH0/YR7yupXPi3OwN4la50ECUELCqw== - dependencies: - "@backstage/plugin-permission-common" "^0.6.3" - "@backstage/plugin-search-common" "^1.0.0" - -"@backstage/plugin-catalog-react@^1.0.0", "@backstage/plugin-catalog-react@^1.1.2": - version "1.1.2" - resolved "https://registry.npmjs.org/@backstage/plugin-catalog-react/-/plugin-catalog-react-1.1.2.tgz#253a99d9ced5d751f9d1fb3d278511d754aaed4e" - integrity sha512-4O9TotC4aWuLA8gFcgvq/HeKXA80LUZ98WTdIqSA6iFjzh1BZbD/nvaG7Hw7X8m5C/Z7Ck4PM+ocB4XxxlVAZw== - dependencies: - "@backstage/catalog-client" "^1.0.4" - "@backstage/catalog-model" "^1.1.0" - "@backstage/core-components" "^0.10.0" - "@backstage/core-plugin-api" "^1.0.4" - "@backstage/errors" "^1.1.0" - "@backstage/integration" "^1.2.2" - "@backstage/plugin-catalog-common" "^1.0.4" - "@backstage/plugin-permission-common" "^0.6.3" - "@backstage/plugin-permission-react" "^0.4.3" - "@backstage/theme" "^0.2.16" - "@backstage/types" "^1.0.0" - "@backstage/version-bridge" "^1.0.1" - "@material-ui/core" "^4.12.2" - "@material-ui/icons" "^4.9.1" - "@material-ui/lab" "4.0.0-alpha.57" - classnames "^2.2.6" - jwt-decode "^3.1.0" - lodash "^4.17.21" - qs "^6.9.4" - react-router "6.0.0-beta.0" - react-use "^17.2.4" - yaml "^2.0.0" - zen-observable "^0.8.15" - -"@backstage/plugin-home@^0.4.19", "@backstage/plugin-home@^0.4.23": - version "0.4.23" - resolved "https://registry.npmjs.org/@backstage/plugin-home/-/plugin-home-0.4.23.tgz#5b6a105615bdd63292470ca3906920d8fc810cc1" - integrity sha512-LrNc88Px2HjjVXe5VUBU3TuayJCibiju8GoEDerVk4aL9IW8pom0MMVBGj6qB7NvWOoOUSL19GmSA1ysZ5NN/g== - dependencies: - "@backstage/catalog-model" "^1.1.0" - "@backstage/config" "^1.0.1" - "@backstage/core-components" "^0.10.0" - "@backstage/core-plugin-api" "^1.0.4" - "@backstage/plugin-catalog-react" "^1.1.2" - "@backstage/plugin-stack-overflow" "^0.1.3" - "@backstage/theme" "^0.2.16" - "@material-ui/core" "^4.12.2" - "@material-ui/icons" "^4.9.1" - "@material-ui/lab" "4.0.0-alpha.57" - lodash "^4.17.21" - react-router "6.0.0-beta.0" - react-use "^17.2.4" - -"@backstage/plugin-permission-react@^0.4.3": - version "0.4.3" - resolved "https://registry.npmjs.org/@backstage/plugin-permission-react/-/plugin-permission-react-0.4.3.tgz#9d844e178aa01b838e80ce3a4716211f79a3dec8" - integrity sha512-ZyvZ+39fw0WBFbgWYgkbfITCm9vz2onf5FAYAhzSpO3uXarKm8FXtioV93/VkOcA6uJVzkU8AvFjKW2Chd1cfA== - dependencies: - "@backstage/config" "^1.0.1" - "@backstage/core-plugin-api" "^1.0.4" - "@backstage/plugin-permission-common" "^0.6.3" - cross-fetch "^3.1.5" - react-router "6.0.0-beta.0" - react-use "^17.2.4" - swr "^1.1.2" - -"@backstage/plugin-stack-overflow@^0.1.3": - version "0.1.3" - resolved "https://registry.npmjs.org/@backstage/plugin-stack-overflow/-/plugin-stack-overflow-0.1.3.tgz#6a345f02b56443fb10303176882a6b32e83a6fdd" - integrity sha512-Oy1YNnfZB6MUVOgH5zd28yyCMKlU78aZQS1RNX34Plpf6xd+wb0Ihqhno3B0+Slp1EIAHpQBQAsGnZWPIToDhg== - dependencies: - "@backstage/config" "^1.0.1" - "@backstage/core-components" "^0.10.0" - "@backstage/core-plugin-api" "^1.0.4" - "@backstage/plugin-home" "^0.4.23" - "@backstage/plugin-search-common" "^1.0.0" - "@backstage/theme" "^0.2.16" - "@material-ui/core" "^4.12.2" - "@material-ui/icons" "^4.9.1" - "@testing-library/jest-dom" "^5.10.1" - cross-fetch "^3.1.5" - lodash "^4.17.21" - qs "^6.9.4" - react-use "^17.2.4" - "@balena/dockerignore@^1.0.2": version "1.0.2" resolved "https://registry.npmjs.org/@balena/dockerignore/-/dockerignore-1.0.2.tgz#9ffe4726915251e8eb69f44ef3547e0da2c03e0d" @@ -2249,10 +2119,10 @@ resolve-from "^5.0.0" semver "^5.4.1" -"@changesets/assemble-release-plan@^5.2.0": - version "5.2.0" - resolved "https://registry.npmjs.org/@changesets/assemble-release-plan/-/assemble-release-plan-5.2.0.tgz#35158dc9b496a4c108936ae8ad776ef855795ff6" - integrity sha512-ewY24PEbSec2eKX0+KM7eyENA2hUUp6s4LF9p/iBxTtc+TX2Xbx5rZnlLKZkc8tpuQ3PZbyjLFXWhd1PP6SjCg== +"@changesets/assemble-release-plan@^5.2.1": + version "5.2.1" + resolved "https://registry.npmjs.org/@changesets/assemble-release-plan/-/assemble-release-plan-5.2.1.tgz#b66df8d4a5615d4d904b75f7b60faeb64eb1d506" + integrity sha512-d6ckasOWlKF9Mzs82jhl6TKSCgVvfLoUK1ERySrTg2TQJdrVUteZue6uEIYUTA7SgMu67UOSwol6R9yj1nTdjw== dependencies: "@babel/runtime" "^7.10.4" "@changesets/errors" "^0.1.4" @@ -2269,18 +2139,18 @@ "@changesets/types" "^5.1.0" "@changesets/cli@^2.14.0": - version "2.24.2" - resolved "https://registry.npmjs.org/@changesets/cli/-/cli-2.24.2.tgz#333ad412c821b582680fbc7f0d0596ebba442c2d" - integrity sha512-Bya7bnxF8Sz+O25M6kseAludVsCy5nXSW9u2Lbje/XbJTyU5q/xwIiXF9aTUzVi/4jyKoKoOasx7B1/z+NJLzg== + version "2.24.3" + resolved "https://registry.npmjs.org/@changesets/cli/-/cli-2.24.3.tgz#e6d8ab5d831d2249ca482955232a9a1c9ff02c21" + integrity sha512-okhRV+0WCQJa2Kmil/WvN5TK1o3+1JYSjrsGHqhjv+PYcDgDDgQ6I9J9OMBO9lfmNIpN7xSO80/BzxgvReO4Wg== dependencies: "@babel/runtime" "^7.10.4" "@changesets/apply-release-plan" "^6.0.4" - "@changesets/assemble-release-plan" "^5.2.0" + "@changesets/assemble-release-plan" "^5.2.1" "@changesets/changelog-git" "^0.1.12" "@changesets/config" "^2.1.1" "@changesets/errors" "^0.1.4" "@changesets/get-dependents-graph" "^1.3.3" - "@changesets/get-release-plan" "^3.0.13" + "@changesets/get-release-plan" "^3.0.14" "@changesets/git" "^1.4.1" "@changesets/logger" "^0.0.5" "@changesets/pre" "^1.0.12" @@ -2338,13 +2208,13 @@ fs-extra "^7.0.1" semver "^5.4.1" -"@changesets/get-release-plan@^3.0.13": - version "3.0.13" - resolved "https://registry.npmjs.org/@changesets/get-release-plan/-/get-release-plan-3.0.13.tgz#f5f7b67b798d1bf2d6e8e546a60c199dd09bfeaf" - integrity sha512-Zl/UN4FUzb5LwmzhO2STRijJT5nQCN4syPEs0p1HSIR+O2iVOzes+2yTLF2zGiOx8qPOsFx/GRSAvuhSzm+9ig== +"@changesets/get-release-plan@^3.0.14": + version "3.0.14" + resolved "https://registry.npmjs.org/@changesets/get-release-plan/-/get-release-plan-3.0.14.tgz#b4423028a90c63feec12e22c48078f106f8d01f4" + integrity sha512-xzSfeyIOvUnbqMuQXVKTYUizreWQfICwoQpvEHoePVbERLocc1tPo5lzR7dmVCFcaA/DcnbP6mxyioeq+JuzSg== dependencies: "@babel/runtime" "^7.10.4" - "@changesets/assemble-release-plan" "^5.2.0" + "@changesets/assemble-release-plan" "^5.2.1" "@changesets/config" "^2.1.1" "@changesets/pre" "^1.0.12" "@changesets/read" "^0.5.7" @@ -2680,7 +2550,12 @@ dependencies: yaml-ast-parser "0.0.43" -"@gar/promisify@^1.0.1", "@gar/promisify@^1.1.3": +"@gar/promisify@^1.0.1": + version "1.1.2" + resolved "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.2.tgz#30aa825f11d438671d585bd44e7fd564535fc210" + integrity sha512-82cpyJyKRoQoRi+14ibCeGPu0CwypgtBAdBhq1WfvagpCZNKqwXbKwXllYSMG91DhmG4jt9gN8eP6lGOtozuaw== + +"@gar/promisify@^1.1.3": version "1.1.3" resolved "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== @@ -2763,9 +2638,9 @@ integrity sha512-91ArYvRgXWb73YvEOBMmOcJc0bDRs5yiVHnqkwoG0f3nm7nZuipllz6e7BvFESBvjkDTBC0zMD8QxedUwNLc1A== "@google-cloud/storage@^6.0.0": - version "6.3.0" - resolved "https://registry.npmjs.org/@google-cloud/storage/-/storage-6.3.0.tgz#0a9765416b659f54477da6611d9c12b914c04a61" - integrity sha512-Ah4wl9cWUEW+2lAqHsKauaLlPmbtdOdQkvJE6BFwmTSZhywYVtVHLcEpf5F+/GmmNTnirFGNdE7UjgbyOxcnRg== + version "6.4.1" + resolved "https://registry.npmjs.org/@google-cloud/storage/-/storage-6.4.1.tgz#83334150d4e224cb48691de4d7f9c38e143a0970" + integrity sha512-lAddmRJ8tvxPykUqJfONBQA5XGwGk0vut1POXublc64+nCdB5aQMxwuBMf7J1zubx19QGpYPQwW6wR7YTWrvLw== dependencies: "@google-cloud/paginator" "^3.0.7" "@google-cloud/projectify" "^3.0.0" @@ -2782,16 +2657,14 @@ mime "^3.0.0" mime-types "^2.0.8" p-limit "^3.0.1" - pumpify "^2.0.0" retry-request "^5.0.0" - stream-events "^1.0.4" teeny-request "^8.0.0" uuid "^8.0.0" -"@graphiql/react@^0.9.0": - version "0.9.0" - resolved "https://registry.npmjs.org/@graphiql/react/-/react-0.9.0.tgz#8450d3ea6dbf096deb16c9b297ff2ed526e793f4" - integrity sha512-JwhHVFS4ZP5lCchaf31NMJ/MVxl//DGrt/WO9XVjtQoL4kkAWMnNOQzZmTAnbEfPwdQUhkMz+xL50Yum3QrIZg== +"@graphiql/react@^0.10.0": + version "0.10.0" + resolved "https://registry.npmjs.org/@graphiql/react/-/react-0.10.0.tgz#8d888949dc6c9ddebe0817aeba3e2c164bfbb1bb" + integrity sha512-8Xo1O6SQps6R+mOozN7Ht85/07RwyXgJcKNeR2dWPkJz/1Lww8wVHIKM/AUpo0Aaoh6Ps3UK9ep8DDRfBT4XrQ== dependencies: "@graphiql/toolkit" "^0.6.1" codemirror "^5.65.3" @@ -2811,11 +2684,11 @@ meros "^1.1.4" "@graphql-codegen/cli@^2.3.1": - version "2.11.5" - resolved "https://registry.npmjs.org/@graphql-codegen/cli/-/cli-2.11.5.tgz#6e781d9e77b8a9192456a8f50059e4281be12b73" - integrity sha512-0RntZ/F/d7M7KJU24nDwfKTuuhpwQ8nSs00RgKIqsk4xSX/U9HgOp29pWZfJjHCppb0EiXKBDvK4DtQIqe3n3w== + version "2.11.6" + resolved "https://registry.npmjs.org/@graphql-codegen/cli/-/cli-2.11.6.tgz#3acfd7cd3bac40999ba1262063d84ca7c96172dc" + integrity sha512-0R2Bhgjt3XZTSdsn8MGGuJjDEN2z+KCo7920zLZz9boy6bQ0EyuxS9AUATePS9aC3djy2POAIPCHz8iHK68IlQ== dependencies: - "@graphql-codegen/core" "2.6.1" + "@graphql-codegen/core" "2.6.2" "@graphql-codegen/plugin-helpers" "^2.6.2" "@graphql-tools/apollo-engine-loader" "^7.3.6" "@graphql-tools/code-file-loader" "^7.3.1" @@ -2847,13 +2720,13 @@ yaml "^1.10.0" yargs "^17.0.0" -"@graphql-codegen/core@2.6.1": - version "2.6.1" - resolved "https://registry.npmjs.org/@graphql-codegen/core/-/core-2.6.1.tgz#57599a2e97d3c5109d888781587eba65f3c6cabe" - integrity sha512-X6IIQCIvEm+g6xcd/5ml/Tmz8U6pd4q9s1mM4WcstBQ26v+gzzlj6lc7+6ALhrNm25gHKQ4PiVoG2W0pw503Dw== +"@graphql-codegen/core@2.6.2": + version "2.6.2" + resolved "https://registry.npmjs.org/@graphql-codegen/core/-/core-2.6.2.tgz#29c766d2e9e5a3deeeb4f1728c1f7b1aca054a22" + integrity sha512-58T5yf9nEfAhDwN1Vz1hImqpdJ/gGpCGUaroQ5tqskZPf7eZYYVkEXbtqRZZLx1MCCKwjWX4hMtTPpHhwKCkng== dependencies: "@graphql-codegen/plugin-helpers" "^2.6.2" - "@graphql-tools/schema" "^8.5.0" + "@graphql-tools/schema" "^9.0.0" "@graphql-tools/utils" "^8.8.0" tslib "~2.4.0" @@ -3155,6 +3028,14 @@ "@graphql-tools/utils" "8.9.0" tslib "^2.4.0" +"@graphql-tools/merge@8.3.3": + version "8.3.3" + resolved "https://registry.npmjs.org/@graphql-tools/merge/-/merge-8.3.3.tgz#74dd4816c3fc7af38730fc59d1cba6e687d7fb2d" + integrity sha512-EfULshN2s2s2mhBwbV9WpGnoehRLe7eIMdZrKfHhxlBWOvtNUd3KSCN0PUdAMd7lj1jXUW9KYdn624JrVn6qzg== + dependencies: + "@graphql-tools/utils" "8.10.0" + tslib "^2.4.0" + "@graphql-tools/mock@^8.1.2": version "8.6.8" resolved "https://registry.npmjs.org/@graphql-tools/mock/-/mock-8.6.8.tgz#232a23c0c14dcfca88012886230b93e6fc2303e2" @@ -3216,7 +3097,7 @@ tslib "~2.3.0" value-or-promise "1.0.11" -"@graphql-tools/schema@8.5.0", "@graphql-tools/schema@^8.5.0": +"@graphql-tools/schema@8.5.0": version "8.5.0" resolved "https://registry.npmjs.org/@graphql-tools/schema/-/schema-8.5.0.tgz#0332b3a2e674d16e9bf8a58dfd47432449ce2368" integrity sha512-VeFtKjM3SA9/hCJJfr95aEdC3G0xIKM9z0Qdz4i+eC1g2fdZYnfWFt2ucW4IME+2TDd0enHlKzaV0qk2SLVUww== @@ -3236,6 +3117,16 @@ tslib "^2.4.0" value-or-promise "1.0.11" +"@graphql-tools/schema@^9.0.0": + version "9.0.1" + resolved "https://registry.npmjs.org/@graphql-tools/schema/-/schema-9.0.1.tgz#ba8629107c1f0b9ffad14c08c2a85961967682fd" + integrity sha512-Y6apeiBmvXEz082IAuS/ainnEEQrzMECP1MRIV72eo2WPa6ZtLYPycvIbd56Z5uU2LKP4XcWRgK6WUbCyN16Rw== + dependencies: + "@graphql-tools/merge" "8.3.3" + "@graphql-tools/utils" "8.10.0" + tslib "^2.4.0" + value-or-promise "1.0.11" + "@graphql-tools/url-loader@7.13.2", "@graphql-tools/url-loader@^7.13.2": version "7.13.2" resolved "https://registry.npmjs.org/@graphql-tools/url-loader/-/url-loader-7.13.2.tgz#4663ea817aa60d3d4ce81a47a36cba8fdfff069f" @@ -3278,6 +3169,13 @@ value-or-promise "^1.0.11" ws "^8.3.0" +"@graphql-tools/utils@8.10.0": + version "8.10.0" + resolved "https://registry.npmjs.org/@graphql-tools/utils/-/utils-8.10.0.tgz#8e76db7487e19b60cf99fb90c2d6343b2105b331" + integrity sha512-yI+V373FdXQbYfqdarehn9vRWDZZYuvyQ/xwiv5ez2BbobHrqsexF7qs56plLRaQ8ESYpVAjMQvJWe9s23O0Jg== + dependencies: + tslib "^2.4.0" + "@graphql-tools/utils@8.6.9": version "8.6.9" resolved "https://registry.npmjs.org/@graphql-tools/utils/-/utils-8.6.9.tgz#fe1b81df29c9418b41b7a1ffe731710b93d3a1fe" @@ -4019,10 +3917,10 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@jridgewell/trace-mapping@^0.3.7": - version "0.3.13" - resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz#dcfe3e95f224c8fe97a87a5235defec999aa92ea" - integrity sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w== +"@jridgewell/trace-mapping@^0.3.14": + version "0.3.15" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz#aba35c48a38d3fd84b37e66c9c0423f9744f9774" + integrity sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g== dependencies: "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" @@ -4085,630 +3983,629 @@ resolved "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.3.tgz#0300943770e04231041a51bd39f0439b5c7ab4f0" integrity sha512-nkalE/f1RvRGChwBnEIoBfSEYOXnCRdleKuv6+lePbMDrMZXeDQnqak5XDOeBgrPPyPfAdcCu/B5z+v3VhplGg== -"@lerna/add@5.4.0": - version "5.4.0" - resolved "https://registry.npmjs.org/@lerna/add/-/add-5.4.0.tgz#a6182f5c2a5e8615cf19042099152a8a13eaa3e3" - integrity sha512-o4JiZgEzFL7QXC2hhhraSjfhd9y/YB/07KFjVApEUDpsE2g7hRPtmKMulTjVi8vTkzVuhG87t2ZfJ3HOywqvSQ== +"@lerna/add@5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@lerna/add/-/add-5.0.0.tgz#0545e2eef157c142d82ba765467c27b36fe53ce8" + integrity sha512-KdIOQL+88iHU9zuAU8Be1AL4cOVmm77nlckylsNaVVTiomNipr/h7lStiBO52BoMkwKzNwOH6He5HGY0Yo7s2w== dependencies: - "@lerna/bootstrap" "5.4.0" - "@lerna/command" "5.4.0" - "@lerna/filter-options" "5.4.0" - "@lerna/npm-conf" "5.4.0" - "@lerna/validation-error" "5.4.0" + "@lerna/bootstrap" "5.0.0" + "@lerna/command" "5.0.0" + "@lerna/filter-options" "5.0.0" + "@lerna/npm-conf" "5.0.0" + "@lerna/validation-error" "5.0.0" dedent "^0.7.0" - npm-package-arg "8.1.1" + npm-package-arg "^8.1.0" p-map "^4.0.0" - pacote "^13.6.1" + pacote "^13.4.1" semver "^7.3.4" -"@lerna/bootstrap@5.4.0": - version "5.4.0" - resolved "https://registry.npmjs.org/@lerna/bootstrap/-/bootstrap-5.4.0.tgz#612a3f7d5b3a6e68990946912119180f98d5c642" - integrity sha512-XEusPF14qH0QVRkYwti59N8IG1yS0QvkqhSGxftDT+dbvbL8E3E73cwUVyb7/vgUefwEkw/Ya1yMytsJv3Hj+Q== +"@lerna/bootstrap@5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@lerna/bootstrap/-/bootstrap-5.0.0.tgz#624b67a4631c7455b98cfed4dbb2e38b27025a7a" + integrity sha512-2m1BxKbYwDABy+uE/Da3EQM61R58bI3YQ0o1rsFQq1u0ltL9CJxw1o0lMg84hwMsBb4D+kLIXLqetYlLVgbr0Q== dependencies: - "@lerna/command" "5.4.0" - "@lerna/filter-options" "5.4.0" - "@lerna/has-npm-version" "5.4.0" - "@lerna/npm-install" "5.4.0" - "@lerna/package-graph" "5.4.0" - "@lerna/pulse-till-done" "5.4.0" - "@lerna/rimraf-dir" "5.4.0" - "@lerna/run-lifecycle" "5.4.0" - "@lerna/run-topologically" "5.4.0" - "@lerna/symlink-binary" "5.4.0" - "@lerna/symlink-dependencies" "5.4.0" - "@lerna/validation-error" "5.4.0" - "@npmcli/arborist" "5.3.0" + "@lerna/command" "5.0.0" + "@lerna/filter-options" "5.0.0" + "@lerna/has-npm-version" "5.0.0" + "@lerna/npm-install" "5.0.0" + "@lerna/package-graph" "5.0.0" + "@lerna/pulse-till-done" "5.0.0" + "@lerna/rimraf-dir" "5.0.0" + "@lerna/run-lifecycle" "5.0.0" + "@lerna/run-topologically" "5.0.0" + "@lerna/symlink-binary" "5.0.0" + "@lerna/symlink-dependencies" "5.0.0" + "@lerna/validation-error" "5.0.0" + "@npmcli/arborist" "5.2.0" dedent "^0.7.0" get-port "^5.1.1" multimatch "^5.0.0" - npm-package-arg "8.1.1" - npmlog "^6.0.2" + npm-package-arg "^8.1.0" + npmlog "^4.1.2" p-map "^4.0.0" p-map-series "^2.1.0" p-waterfall "^2.1.1" semver "^7.3.4" -"@lerna/changed@5.4.0": - version "5.4.0" - resolved "https://registry.npmjs.org/@lerna/changed/-/changed-5.4.0.tgz#145b27a91b474f6bfd561cc06ab688c1c36fd659" - integrity sha512-ZxII7biEQFdbZG3scjacOP2/qQOuu0ob3OiPW/+Ci24aEG/j1bFGhBJdoNdfdD0sJ92q8TTums2BRXDib9GvzA== +"@lerna/changed@5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@lerna/changed/-/changed-5.0.0.tgz#fb3cdd5f281683a461c3099cbcf0978e23b33140" + integrity sha512-A24MHipPGODmzQBH1uIMPPUUOc1Zm7Qe/eSYzm52bFHtVxWH0nIVXfunadoMX32NhzKQH3Sw8X2rWHPQSRoUvA== dependencies: - "@lerna/collect-updates" "5.4.0" - "@lerna/command" "5.4.0" - "@lerna/listable" "5.4.0" - "@lerna/output" "5.4.0" + "@lerna/collect-updates" "5.0.0" + "@lerna/command" "5.0.0" + "@lerna/listable" "5.0.0" + "@lerna/output" "5.0.0" -"@lerna/check-working-tree@5.4.0": - version "5.4.0" - resolved "https://registry.npmjs.org/@lerna/check-working-tree/-/check-working-tree-5.4.0.tgz#9d0c3cfc3d3e1034b488e987dcb47f06715dde18" - integrity sha512-O3bcNnuZfOK8KHRQcwaSjAp/DHT/GD96sge/a7ZfnqKiKhyO94ZztznrOvCrb5Cuz4NShupD05PpyQe+sBuTLA== +"@lerna/check-working-tree@5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@lerna/check-working-tree/-/check-working-tree-5.0.0.tgz#e7b653b78c3bb96db7a00f6a74018e2bb88ec088" + integrity sha512-PnUMdpT2qS4o+vs+7l5fFIizstGdqSkhLG+Z9ZiY5OMtnGd+pmAFQFlbLSZSmdvQSOSobl9fhB1St8qhPD60xQ== dependencies: - "@lerna/collect-uncommitted" "5.4.0" - "@lerna/describe-ref" "5.4.0" - "@lerna/validation-error" "5.4.0" + "@lerna/collect-uncommitted" "5.0.0" + "@lerna/describe-ref" "5.0.0" + "@lerna/validation-error" "5.0.0" -"@lerna/child-process@5.4.0": - version "5.4.0" - resolved "https://registry.npmjs.org/@lerna/child-process/-/child-process-5.4.0.tgz#25ec73f76f4142845f07bd5fc694b291b94b642a" - integrity sha512-SPjlfuB6LesAG3NCaDalEnpsbrpEDf0RMYGC1Wj6xGmmVEvWai8cenxCNM5xhpixSGjEF6dmLVI1OHFS9JovUQ== +"@lerna/child-process@5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@lerna/child-process/-/child-process-5.0.0.tgz#1c7663d2910431f6c25543fd53998ae95b2dac19" + integrity sha512-cFVNkedrlU8XTt15EvUtQ84hqtV4oToQW/elKNv//mhCz06HY8Y+Ia6XevK2zrIhZjS6DT576F/7SmTk3vnpmg== dependencies: chalk "^4.1.0" execa "^5.0.0" strong-log-transformer "^2.1.0" -"@lerna/clean@5.4.0": - version "5.4.0" - resolved "https://registry.npmjs.org/@lerna/clean/-/clean-5.4.0.tgz#2ebab8b2980652f302ebd948b0d4bccc64bfad0e" - integrity sha512-prhpUQ4kTkB/uti2DSuqfgRjUA3bz6aBrfdA5VS5QW6oTU8+F69uWjitXNt2ph/cVUJ+js8VZdbU0wkUFQasKg== +"@lerna/clean@5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@lerna/clean/-/clean-5.0.0.tgz#2b5cf202ab3eca18a075b292c55e6641d18b1b8f" + integrity sha512-7B+0Nx6MEPmCfnEa1JFyZwJsC7qlGrikWXyLglLb/wcbapYVsuDauOl9AT1iOFoXKw82P77HWYUKWeD9DQgw/w== dependencies: - "@lerna/command" "5.4.0" - "@lerna/filter-options" "5.4.0" - "@lerna/prompt" "5.4.0" - "@lerna/pulse-till-done" "5.4.0" - "@lerna/rimraf-dir" "5.4.0" + "@lerna/command" "5.0.0" + "@lerna/filter-options" "5.0.0" + "@lerna/prompt" "5.0.0" + "@lerna/pulse-till-done" "5.0.0" + "@lerna/rimraf-dir" "5.0.0" p-map "^4.0.0" p-map-series "^2.1.0" p-waterfall "^2.1.1" -"@lerna/cli@5.4.0": - version "5.4.0" - resolved "https://registry.npmjs.org/@lerna/cli/-/cli-5.4.0.tgz#c18a2afcb1f03466a96d8116aa28d54e06ede343" - integrity sha512-usvZ3yAaMBzb249UYZuqMRoT6VboBSzWG7iEvXVxZDoFgShHrZ8NJAOMJaStRyVkizci+PTK74FRgpX+hKOEHg== +"@lerna/cli@5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@lerna/cli/-/cli-5.0.0.tgz#f440f6664aa6c22bb58e69aacfde655c831de2f9" + integrity sha512-g8Nifko8XNySOl8u2molSHVl+fk/E1e5FSn/W2ekeijmc3ezktp+xbPWofNq71N/d297+KPQpLBfwzXSo9ufIQ== dependencies: - "@lerna/global-options" "5.4.0" + "@lerna/global-options" "5.0.0" dedent "^0.7.0" - npmlog "^6.0.2" + npmlog "^4.1.2" yargs "^16.2.0" -"@lerna/collect-uncommitted@5.4.0": - version "5.4.0" - resolved "https://registry.npmjs.org/@lerna/collect-uncommitted/-/collect-uncommitted-5.4.0.tgz#783324309560133bd1572ca555aff197921f324e" - integrity sha512-uKnL81tsfasSzYxqTCybn0GqehKUid47QzTJkKV1IXzfHpYLd4LBztvkbZFM2QN9Avl+hWYbTntSF5Iecg2fAg== +"@lerna/collect-uncommitted@5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@lerna/collect-uncommitted/-/collect-uncommitted-5.0.0.tgz#2843f98995c8bcc1d783d1d9739122c79378f3c5" + integrity sha512-mga/2S9rK0TP5UCulWiCTrC/uKaiIlOro1n8R3oCw6eRw9eupCSRx5zGI7pdh8CPD82MDL7w0a6OTep3WBSBVA== dependencies: - "@lerna/child-process" "5.4.0" + "@lerna/child-process" "5.0.0" chalk "^4.1.0" - npmlog "^6.0.2" + npmlog "^4.1.2" -"@lerna/collect-updates@5.4.0": - version "5.4.0" - resolved "https://registry.npmjs.org/@lerna/collect-updates/-/collect-updates-5.4.0.tgz#03725f55099ad61c598e2e2929684e11a1dc3a7d" - integrity sha512-J1YPygeqCJo9IKLg6G2YY0OJPNDz6/n4VgJTrkMQH3B3WyodXdmdSv4xKY1pG9Cy7mXzCsdNuZzvN6qM1OgErg== +"@lerna/collect-updates@5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@lerna/collect-updates/-/collect-updates-5.0.0.tgz#cce16b9e8136e1e7bc33fe0fb12b283e538fa658" + integrity sha512-X82i8SVgBXLCk8vbKWfQPRLTAXROCANL8Z/bU1l6n7yycsHKdjrrlNi1+KprFdfRsMvSm10R4qPNcl9jgsp/IA== dependencies: - "@lerna/child-process" "5.4.0" - "@lerna/describe-ref" "5.4.0" + "@lerna/child-process" "5.0.0" + "@lerna/describe-ref" "5.0.0" minimatch "^3.0.4" - npmlog "^6.0.2" + npmlog "^4.1.2" slash "^3.0.0" -"@lerna/command@5.4.0": - version "5.4.0" - resolved "https://registry.npmjs.org/@lerna/command/-/command-5.4.0.tgz#53ee056304b5678b5a70f3cf4976e73c16425082" - integrity sha512-MR9zRWZJnr6wXcOJnuYjXScxiDuFt4jH+yZuqDf3EBQGIhfhSRoujtjVGmfe0/4P4TM4VdTqqangt63lclsLzw== +"@lerna/command@5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@lerna/command/-/command-5.0.0.tgz#cdc9f32a6b1c7153fe7150d642d2a420a3d0797d" + integrity sha512-j7/apU5d/nhSc1qIZgcV03KyO5jz3y7cwSum3IuK8/XF6rKwt3FVnbue1V3l9sJ6IRJjsRGKyViB1IdP5nSX4Q== dependencies: - "@lerna/child-process" "5.4.0" - "@lerna/package-graph" "5.4.0" - "@lerna/project" "5.4.0" - "@lerna/validation-error" "5.4.0" - "@lerna/write-log-file" "5.4.0" + "@lerna/child-process" "5.0.0" + "@lerna/package-graph" "5.0.0" + "@lerna/project" "5.0.0" + "@lerna/validation-error" "5.0.0" + "@lerna/write-log-file" "5.0.0" clone-deep "^4.0.1" dedent "^0.7.0" execa "^5.0.0" is-ci "^2.0.0" - npmlog "^6.0.2" + npmlog "^4.1.2" -"@lerna/conventional-commits@5.4.0": - version "5.4.0" - resolved "https://registry.npmjs.org/@lerna/conventional-commits/-/conventional-commits-5.4.0.tgz#12e31222b951837c3b8543cbe4c44247ac7b60df" - integrity sha512-rrFFIiKWhkyghDC+aGdfEw1F78MWB+KerpBO1689nRrVpXTTqV9ZKHpn0YeTGhi+T1e/igtdJRlNjRCaXkl79Q== +"@lerna/conventional-commits@5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@lerna/conventional-commits/-/conventional-commits-5.0.0.tgz#7f9c16fda074c9ed897cb695f5ae23678dd441eb" + integrity sha512-tUCRTAycDCtSlCEI0hublq4uKHeV0UHpwIb3Fdt6iv2AoTSPBSX/Dwu/6VqguysOSEkkR4M2JCOLvJCl4IMxwg== dependencies: - "@lerna/validation-error" "5.4.0" + "@lerna/validation-error" "5.0.0" conventional-changelog-angular "^5.0.12" - conventional-changelog-core "^4.2.4" + conventional-changelog-core "^4.2.2" conventional-recommended-bump "^6.1.0" fs-extra "^9.1.0" get-stream "^6.0.0" - npm-package-arg "8.1.1" - npmlog "^6.0.2" + lodash.template "^4.5.0" + npm-package-arg "^8.1.0" + npmlog "^4.1.2" pify "^5.0.0" semver "^7.3.4" -"@lerna/create-symlink@5.4.0": - version "5.4.0" - resolved "https://registry.npmjs.org/@lerna/create-symlink/-/create-symlink-5.4.0.tgz#8b96d4fdada6cf3726353b9fe380720e6e99889f" - integrity sha512-DQuxmDVYL4S/VAXD8x/8zKapvGm4zN2sYB0D9yc2hTFeM5O4P7AXO0lYBE8XayZN7r2rBNPDYttv8Lv2IvN74A== +"@lerna/create-symlink@5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@lerna/create-symlink/-/create-symlink-5.0.0.tgz#eccef7f89fdc4d7cd904694d9e2eb0b582073b5e" + integrity sha512-nHYNacrh15Y0yEofVlUVu9dhf4JjIn9hY7v7rOUXzUeQ91iXY5Q3PVHkBeRUigyT5CWP5qozZwraCMwp+lDWYg== dependencies: - cmd-shim "^5.0.0" + cmd-shim "^4.1.0" fs-extra "^9.1.0" - npmlog "^6.0.2" + npmlog "^4.1.2" -"@lerna/create@5.4.0": - version "5.4.0" - resolved "https://registry.npmjs.org/@lerna/create/-/create-5.4.0.tgz#14dd702727a07ed20d3f7e9b69c8bcdb31da3602" - integrity sha512-yHFP7DQD33xRLojlofqe+qu07BvRpwf+09dTKFHtarXqoPRDRJJ0e2/MRCi3StJmOLJCw7Gut3k0rdnFr3No6g== +"@lerna/create@5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@lerna/create/-/create-5.0.0.tgz#4aac3d1f2c1f6d7fadde49d3663b318fcdd39b06" + integrity sha512-sdFTVTLOVuhHpzIYhFAwK0Ry3p4d7uMe9ZG/Ii128/pB9kEEfCth+1WBq6mBpYZ5mOLLgxJbWalbiJFl0toQRw== dependencies: - "@lerna/child-process" "5.4.0" - "@lerna/command" "5.4.0" - "@lerna/npm-conf" "5.4.0" - "@lerna/validation-error" "5.4.0" + "@lerna/child-process" "5.0.0" + "@lerna/command" "5.0.0" + "@lerna/npm-conf" "5.0.0" + "@lerna/validation-error" "5.0.0" dedent "^0.7.0" fs-extra "^9.1.0" globby "^11.0.2" - init-package-json "^3.0.2" - npm-package-arg "8.1.1" + init-package-json "^2.0.2" + npm-package-arg "^8.1.0" p-reduce "^2.1.0" - pacote "^13.6.1" + pacote "^13.4.1" pify "^5.0.0" semver "^7.3.4" slash "^3.0.0" validate-npm-package-license "^3.0.4" - validate-npm-package-name "^4.0.0" + validate-npm-package-name "^3.0.0" whatwg-url "^8.4.0" yargs-parser "20.2.4" -"@lerna/describe-ref@5.4.0": - version "5.4.0" - resolved "https://registry.npmjs.org/@lerna/describe-ref/-/describe-ref-5.4.0.tgz#15bffe6ef0841db82dab795a21a91ba15cb1dc2f" - integrity sha512-OSy3U8bEm8EmPtoeoej4X02cUihqTJlG/JXyiJdEEMdWDwT3DLDLrBxo4/HAfB3hT5bSD96EabGgmM6GrVhiWw== +"@lerna/describe-ref@5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@lerna/describe-ref/-/describe-ref-5.0.0.tgz#f0676843642e8880133783a9f059e6cb4c027fe1" + integrity sha512-iLvMHp3nl4wcMR3/lVkz0ng7pAHfLQ7yvz2HsYBq7wllCcEzpchzPgyVzyvbpJ+Ke/MKjQTsrHE/yOGOH67GVw== dependencies: - "@lerna/child-process" "5.4.0" - npmlog "^6.0.2" + "@lerna/child-process" "5.0.0" + npmlog "^4.1.2" -"@lerna/diff@5.4.0": - version "5.4.0" - resolved "https://registry.npmjs.org/@lerna/diff/-/diff-5.4.0.tgz#54747d1c4ae30505500c35bc38124a1150683127" - integrity sha512-IxJltmhpkLy9Te6EV1fHu5Yx83HLMrNT2v2TIu+k/EdM/fW6wt+Pal34bsROjGEj70LPI64LWj/FKvdaKXe36A== +"@lerna/diff@5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@lerna/diff/-/diff-5.0.0.tgz#844333f5478fc4993c4389fee1e0cd8eff9114fe" + integrity sha512-S4XJ6i9oP77cSmJ3oRUJGMgrI+jOTmkYWur2nqgSdyJBE1J2eClgTJknb3WAHg2cHALT18WzFqNghFOGM+9dRA== dependencies: - "@lerna/child-process" "5.4.0" - "@lerna/command" "5.4.0" - "@lerna/validation-error" "5.4.0" - npmlog "^6.0.2" + "@lerna/child-process" "5.0.0" + "@lerna/command" "5.0.0" + "@lerna/validation-error" "5.0.0" + npmlog "^4.1.2" -"@lerna/exec@5.4.0": - version "5.4.0" - resolved "https://registry.npmjs.org/@lerna/exec/-/exec-5.4.0.tgz#cee3bb7acaaee5a42aecff0bf6378a60aac09425" - integrity sha512-hgAR5oDMVJUuqN8Fg04ibnzC4cj4YZzIGOfSjYSYjuC/zE53fOSRwEdVDKz3+Yxlnqrz4XyxbOnOlYTFgk6DaA== +"@lerna/exec@5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@lerna/exec/-/exec-5.0.0.tgz#a59dd094e456ea46cfa8f713da0ea3334a7ec9ac" + integrity sha512-g5i+2RclCGWLsl88m11j99YM2Gqnwa2lxZ5tDeqqWZFno6Dlvop17Yl6/MFH42EgM2DQHUUCammvcLIAJ2XwEA== dependencies: - "@lerna/child-process" "5.4.0" - "@lerna/command" "5.4.0" - "@lerna/filter-options" "5.4.0" - "@lerna/profiler" "5.4.0" - "@lerna/run-topologically" "5.4.0" - "@lerna/validation-error" "5.4.0" + "@lerna/child-process" "5.0.0" + "@lerna/command" "5.0.0" + "@lerna/filter-options" "5.0.0" + "@lerna/profiler" "5.0.0" + "@lerna/run-topologically" "5.0.0" + "@lerna/validation-error" "5.0.0" p-map "^4.0.0" -"@lerna/filter-options@5.4.0": - version "5.4.0" - resolved "https://registry.npmjs.org/@lerna/filter-options/-/filter-options-5.4.0.tgz#c1f53a705c8256d599b7cf72b75b1e0945673ff6" - integrity sha512-qK8863UrVcgKJYoZ0dKs82uXIeHhntMoCcqWXOUa1zHP4Fwuz0nGhVGWIO2q4GC8A4HoeduN6vjrLr2d6rsEdw== +"@lerna/filter-options@5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@lerna/filter-options/-/filter-options-5.0.0.tgz#1d2606e1d2ed106689b43cc5d41a77b239afb837" + integrity sha512-un73aYkXlzKlnDPx2AlqNW+ArCZ20XaX+Y6C0F+av9VZriiBsCgZTnflhih9fiSMnXjN5r9CA8YdWvZqa3oAcQ== dependencies: - "@lerna/collect-updates" "5.4.0" - "@lerna/filter-packages" "5.4.0" + "@lerna/collect-updates" "5.0.0" + "@lerna/filter-packages" "5.0.0" dedent "^0.7.0" - npmlog "^6.0.2" + npmlog "^4.1.2" -"@lerna/filter-packages@5.4.0": - version "5.4.0" - resolved "https://registry.npmjs.org/@lerna/filter-packages/-/filter-packages-5.4.0.tgz#4eff648b6a31f685593577c36c8b00db1a1e9c56" - integrity sha512-KAERXVJM5QCw0wyZnSQnHerY6u4q8h37r5yft0HJOSqxIMmkambrtrXplOQCpAxOB+CASQG6sfVB7F7wvI0nkQ== +"@lerna/filter-packages@5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@lerna/filter-packages/-/filter-packages-5.0.0.tgz#9aae543ab5e45a1b0c3f7ad33e0686ceb8d92c88" + integrity sha512-+EIjVVaMPDZ05F/gZa+kcXjBOLXqEamcEIDr+2ZXRgJmnrLx9BBY1B7sBEFHg7JXbeOKS+fKtMGVveV0SzgH3Q== dependencies: - "@lerna/validation-error" "5.4.0" + "@lerna/validation-error" "5.0.0" multimatch "^5.0.0" - npmlog "^6.0.2" + npmlog "^4.1.2" -"@lerna/get-npm-exec-opts@5.4.0": - version "5.4.0" - resolved "https://registry.npmjs.org/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-5.4.0.tgz#424946fba5cccf60ca28de4b1991c5405d4029df" - integrity sha512-plBDyetGHaYObxKnL2gsCNRTn7lTXTFsA8/wiJl6VEJNeEwvZ0efFopY1qcwXx+Skfwi4whqmAojWyoLzVoCIA== +"@lerna/get-npm-exec-opts@5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-5.0.0.tgz#25c1cd7d2b6c1fe903cd144d9f6e2d5cae47429b" + integrity sha512-ZOg3kc5FXYA1kVFD2hfJOl64hNASWD6panwD0HlyzXgfKKTDRm/P/qtAqS8WGCzQWgEdx4wvsDe/58Lzzh6QzQ== dependencies: - npmlog "^6.0.2" + npmlog "^4.1.2" -"@lerna/get-packed@5.4.0": - version "5.4.0" - resolved "https://registry.npmjs.org/@lerna/get-packed/-/get-packed-5.4.0.tgz#8d4eabdc4c92f7bf29724146b3af1ff02146841b" - integrity sha512-bgPZGx2hbbjxaY0sRNcmDjWGR8HEoU/ORXrFiPU/YS7Xp4Yuf8GixT5QrYFT/VdZOqDeaBtFxndVPbmtK6qFRA== +"@lerna/get-packed@5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@lerna/get-packed/-/get-packed-5.0.0.tgz#4de7f66184232c805dfca07b9a8c577f6ef02351" + integrity sha512-fks7Tg7DvcCZxRWPS3JAWVuLnwjPC/hLlNsdYmK9nN3+RtPhmYQgBjLSONcENw1E46t4Aph72lA9nLcYBLksqw== dependencies: fs-extra "^9.1.0" - ssri "^9.0.1" + ssri "^8.0.1" tar "^6.1.0" -"@lerna/github-client@5.4.0": - version "5.4.0" - resolved "https://registry.npmjs.org/@lerna/github-client/-/github-client-5.4.0.tgz#4de39f81c287c6138f1a75d55ede88591e0be846" - integrity sha512-zI/rR5+DHljRwvq1l1LWlola2mJrVkv+0/rIg8wVWfcosIbYQMeuWoJ4zKTZmbOuQqwFpM3vipSHNj8oyik/xA== +"@lerna/github-client@5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@lerna/github-client/-/github-client-5.0.0.tgz#65c984a393b1cbe35c2a707059c645bb9a03395e" + integrity sha512-NoEyRkQ8XgBnrjRfC9ph1npfg1/4OdYG+r8lG/1WkJbdt1Wlym4VNZU2BYPMWwSQYMJuppoEr0LL2uuVcS4ZUw== dependencies: - "@lerna/child-process" "5.4.0" + "@lerna/child-process" "5.0.0" "@octokit/plugin-enterprise-rest" "^6.0.1" - "@octokit/rest" "^19.0.3" - git-url-parse "^12.0.0" - npmlog "^6.0.2" + "@octokit/rest" "^18.1.0" + git-url-parse "^11.4.4" + npmlog "^4.1.2" -"@lerna/gitlab-client@5.4.0": - version "5.4.0" - resolved "https://registry.npmjs.org/@lerna/gitlab-client/-/gitlab-client-5.4.0.tgz#7bd9915e06cfe188828f78a75da4168b9c7c8516" - integrity sha512-OHEnRgzzOfzCtpl+leXlh3jIJZ/mho69vNUEDfSviixTmZMbw4626TYU41FFjZZqmijxl2rYEyJCxIaTdIKdvg== +"@lerna/gitlab-client@5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@lerna/gitlab-client/-/gitlab-client-5.0.0.tgz#c4e3d16566a3b07908ee604ce681a09c418481de" + integrity sha512-WREAT7qzta9hxNxktTX0x1/sEMpBP+4Gc00QSJYXt+ZzxY0t5RUx/ZK5pQl+IDhtkajrvXT6fSfZjMxxyE8hhQ== dependencies: node-fetch "^2.6.1" - npmlog "^6.0.2" + npmlog "^4.1.2" whatwg-url "^8.4.0" -"@lerna/global-options@5.4.0": - version "5.4.0" - resolved "https://registry.npmjs.org/@lerna/global-options/-/global-options-5.4.0.tgz#fd1acc17258b021c966ec7ce1e06311e2f235f60" - integrity sha512-6YjlNNCyk/xjkdBkDkrrk5zBvT1lfyyXP6lyi2b3zcmtP7zMVkSL6Z+NUh857uFJsFYMMQ2SkGczQBmHfSSg7Q== +"@lerna/global-options@5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@lerna/global-options/-/global-options-5.0.0.tgz#02505c9e468188e3a254c262d58739092de93d8d" + integrity sha512-PZYy/3mTZwtA9lNmHHRCc/Ty1W20qGJ/BdDIo4bw/Bk0AOcoBCLT9b3Mjijkl4AbC9+eSGk3flUYapCGVuS32Q== -"@lerna/has-npm-version@5.4.0": - version "5.4.0" - resolved "https://registry.npmjs.org/@lerna/has-npm-version/-/has-npm-version-5.4.0.tgz#5e6567386d5c6b6c60e8c4c1f606eaa954604cbb" - integrity sha512-L9TTF82NgOmau8kGBhc0UnMdlyVkbQxlz1IbJEzQzJcc5oYB8ppHe4Wbm25D1p846U7wzZeRMxSC3sWO8ap+FA== +"@lerna/has-npm-version@5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@lerna/has-npm-version/-/has-npm-version-5.0.0.tgz#ed62c6ef857f068209663aae9f156f06a93dc1bd" + integrity sha512-zJPgcml86nhJFJTpT+kjkcafuCFvK7PSq3oDC2KJxwB1bhlYwy+SKtAEypHSsHQ2DwP0YgPITcy1pvtHkie1SA== dependencies: - "@lerna/child-process" "5.4.0" + "@lerna/child-process" "5.0.0" semver "^7.3.4" -"@lerna/import@5.4.0": - version "5.4.0" - resolved "https://registry.npmjs.org/@lerna/import/-/import-5.4.0.tgz#a99bc13ead71fe4f123ff7b268645732a57236ae" - integrity sha512-UOwfZWvda+lMTDMt/pZmKBtbLKWnBOjrd0C7s7IPDNIdEYohV+LQEaDTuFFpwwFwRhr8RO2fLicWvlt4YJOccQ== +"@lerna/import@5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@lerna/import/-/import-5.0.0.tgz#11cd83ef0fe854c512146fd4165f33519364b97a" + integrity sha512-cD+Is7eV/I+ZU0Wlg+yAgKaZbOvfzA7kBj2Qu1HtxeLhc7joTR8PFW1gNjEsvrWOTiaHAtObbo1A+MKYQ/T12g== dependencies: - "@lerna/child-process" "5.4.0" - "@lerna/command" "5.4.0" - "@lerna/prompt" "5.4.0" - "@lerna/pulse-till-done" "5.4.0" - "@lerna/validation-error" "5.4.0" + "@lerna/child-process" "5.0.0" + "@lerna/command" "5.0.0" + "@lerna/prompt" "5.0.0" + "@lerna/pulse-till-done" "5.0.0" + "@lerna/validation-error" "5.0.0" dedent "^0.7.0" fs-extra "^9.1.0" p-map-series "^2.1.0" -"@lerna/info@5.4.0": - version "5.4.0" - resolved "https://registry.npmjs.org/@lerna/info/-/info-5.4.0.tgz#0076a05ec8fda31d8dc19b8843b8c2b29d9ce538" - integrity sha512-MoNredUnlDjm12by7h5it3XLeHqqIhSjYnmjfQuIhB9r37L/grxEcZ+YLKVqvz3BGGFX342jEfi8uE3eACQUgg== +"@lerna/info@5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@lerna/info/-/info-5.0.0.tgz#649566474d0d133c22bb821f88e7d062a2beace5" + integrity sha512-k9TMK81apTjxxpnjfFOABKXndTtHBPgB8UO+I6zKhsfRqVb9FCz2MHOx8cQiSyolvNyGSQdSylSo4p7EBBomQQ== dependencies: - "@lerna/command" "5.4.0" - "@lerna/output" "5.4.0" + "@lerna/command" "5.0.0" + "@lerna/output" "5.0.0" envinfo "^7.7.4" -"@lerna/init@5.4.0": - version "5.4.0" - resolved "https://registry.npmjs.org/@lerna/init/-/init-5.4.0.tgz#13af001a5a13a92c6b761c0aebc511307d61b70f" - integrity sha512-lCfokfqFKL6Iqg8KDIlCSoNtcbvheUZ+AKwd9wHRPHn1xvI3BQRukkai83VcCShpsVqAkx1r8KjCO9f3I74K9Q== +"@lerna/init@5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@lerna/init/-/init-5.0.0.tgz#e35d95a4882aafb4600abf9b32fd1a0056e73ed9" + integrity sha512-2n68x7AIqVa+Vev9xF3NV9ba0C599KYf7JsIrQ5ESv4593ftInJpwgMwjroLT3X/Chi4BK7y2/xGmrfFVwgILg== dependencies: - "@lerna/child-process" "5.4.0" - "@lerna/command" "5.4.0" - "@lerna/project" "5.4.0" + "@lerna/child-process" "5.0.0" + "@lerna/command" "5.0.0" fs-extra "^9.1.0" p-map "^4.0.0" write-json-file "^4.3.0" -"@lerna/link@5.4.0": - version "5.4.0" - resolved "https://registry.npmjs.org/@lerna/link/-/link-5.4.0.tgz#eb92414ac78e3d4571965c1f1be9725eb3886a3b" - integrity sha512-nUdpVIq0WHkQ2bWyjd+Fg/0iAEIZpwqZidpJuvcvS8FhvCVUryF2zRtd4wSSfQpzuoTWxDzGg6Ka2QwKxWOq6w== +"@lerna/link@5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@lerna/link/-/link-5.0.0.tgz#dbd5aefa0bb22f2fd9d61ee82009fb34eb946298" + integrity sha512-00YxQ06TVhQJthOjcuxCCJRjkAM+qM/8Lv0ckdCzBBCSr4RdAGBp6QcAX/gjLNasgmNpyiza3ADet7mCH7uodw== dependencies: - "@lerna/command" "5.4.0" - "@lerna/package-graph" "5.4.0" - "@lerna/symlink-dependencies" "5.4.0" + "@lerna/command" "5.0.0" + "@lerna/package-graph" "5.0.0" + "@lerna/symlink-dependencies" "5.0.0" p-map "^4.0.0" slash "^3.0.0" -"@lerna/list@5.4.0": - version "5.4.0" - resolved "https://registry.npmjs.org/@lerna/list/-/list-5.4.0.tgz#86c34925d71fcc87df69c3b3394afb8c8fe8f409" - integrity sha512-w+gqkcl9mSIAnImiGVJJUiJ4sJx2Ovko2heLQpcNzUsc39ilcvb5S1YTnfhneJH735EckbF1eXzG1I5V+znaBw== +"@lerna/list@5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@lerna/list/-/list-5.0.0.tgz#0a979dc9c24ca176c7b4b58de80cab2dac2dcb8a" + integrity sha512-+B0yFil2AFdiYO8hyU1bFbKXGBAUUQQ43/fp2XS2jBFCipLme4eTILL5gMKOhr2Xg9AsfYPXRMRer5VW7qTeeQ== dependencies: - "@lerna/command" "5.4.0" - "@lerna/filter-options" "5.4.0" - "@lerna/listable" "5.4.0" - "@lerna/output" "5.4.0" + "@lerna/command" "5.0.0" + "@lerna/filter-options" "5.0.0" + "@lerna/listable" "5.0.0" + "@lerna/output" "5.0.0" -"@lerna/listable@5.4.0": - version "5.4.0" - resolved "https://registry.npmjs.org/@lerna/listable/-/listable-5.4.0.tgz#352cb301e7b7a5e52d32dfa795fab2e2986cacb5" - integrity sha512-ABhInXVY+i9PhCiMxH/4JZnsn5SYriAiCOzyZG+6PX4TSDt7wiE6QWI5tfEyBJmPLEvhxjIeOph0cVvcnxf/gg== +"@lerna/listable@5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@lerna/listable/-/listable-5.0.0.tgz#c1753d9375932b15c4c84cc767fffb3447b8f213" + integrity sha512-Rd5sE7KTbqA8u048qThH5IyBuJIwMcUnEObjFyJyKpc1SEWSumo4yAYmcEeN/9z62tcdud5wHYPSbVgfXJq37g== dependencies: - "@lerna/query-graph" "5.4.0" + "@lerna/query-graph" "5.0.0" chalk "^4.1.0" - columnify "^1.6.0" + columnify "^1.5.4" -"@lerna/log-packed@5.4.0": - version "5.4.0" - resolved "https://registry.npmjs.org/@lerna/log-packed/-/log-packed-5.4.0.tgz#bd3cd24c700590286b7248c218139322e607c3df" - integrity sha512-2l9wrDDdG+vL+k8iIsQ+8EgLn3YnLMfAnK1TyHRaEFJyHWWPK+wCYln793s6RdOG0rJmCOdVwGvGoO3Dpp4jiw== +"@lerna/log-packed@5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@lerna/log-packed/-/log-packed-5.0.0.tgz#afa35bb6a5736038d7dde039e09828ac1c4945a2" + integrity sha512-0TxKX+XnlEYj0du9U2kg3HEyIb/0QsM0Slt8utuCxALUnXRHTEKohjqVKsBdvh1QmJpnUbL5I+vfoYqno4Y42w== dependencies: byte-size "^7.0.0" - columnify "^1.6.0" + columnify "^1.5.4" has-unicode "^2.0.1" - npmlog "^6.0.2" + npmlog "^4.1.2" -"@lerna/npm-conf@5.4.0": - version "5.4.0" - resolved "https://registry.npmjs.org/@lerna/npm-conf/-/npm-conf-5.4.0.tgz#d75896d46586ab10094a3760df9dc348a3918367" - integrity sha512-xCzrg8s8X/SGoELdtstjjVV471r3mF6r1gdQzdQ9Y+Gql78pOp2flGtERyhZlN40fDTsfR+MKpk9mI/3/+Wffg== +"@lerna/npm-conf@5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@lerna/npm-conf/-/npm-conf-5.0.0.tgz#1364270d231d0df5ac079a9a9733ba0dd7f8c2f9" + integrity sha512-KSftxtMNVhLol1JNwFFNgh5jiCG010pewM+uKeSrUe0BCB3lnidiEDzu2CCn8JYYfIXqAiou/pScUiOxVLpcAA== dependencies: config-chain "^1.1.12" pify "^5.0.0" -"@lerna/npm-dist-tag@5.4.0": - version "5.4.0" - resolved "https://registry.npmjs.org/@lerna/npm-dist-tag/-/npm-dist-tag-5.4.0.tgz#110dee7e06c6d9a1a477fd00b75777f9cc0bde7f" - integrity sha512-0MXkt6WhEI9pJOtFaQmKlkaBm9IZHx9KK6BtKlC1giwE/czur2ke19PUMmH+b078EtyhnwrsEq8VB4pMidmXpw== +"@lerna/npm-dist-tag@5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@lerna/npm-dist-tag/-/npm-dist-tag-5.0.0.tgz#becd7fb0bd963357818c8d4fae955cc9f8885cba" + integrity sha512-ccUFhp9Wu/FHW5/5fL+vLiSTcUZXtKQ7c0RMXtNRzIdTXBxPBkVi1k5QAnBAAffsz6Owc/K++cb+/zQ/asrG3g== dependencies: - "@lerna/otplease" "5.4.0" - npm-package-arg "8.1.1" - npm-registry-fetch "^13.3.0" - npmlog "^6.0.2" + "@lerna/otplease" "5.0.0" + npm-package-arg "^8.1.0" + npm-registry-fetch "^9.0.0" + npmlog "^4.1.2" -"@lerna/npm-install@5.4.0": - version "5.4.0" - resolved "https://registry.npmjs.org/@lerna/npm-install/-/npm-install-5.4.0.tgz#1bf4b2c5f9eff7389d58fe21844d6c738efe82a8" - integrity sha512-scYWjKyb67Ov6VMyDFUUPzyGJWuD8vBgOAshzJMG1lGzfcUTOyAA4VJohOpJHVgNaRL3YjJa2AekqTzX42zygQ== +"@lerna/npm-install@5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@lerna/npm-install/-/npm-install-5.0.0.tgz#0ee1750bb26eae3c2b4d742d5c1f055e46d534df" + integrity sha512-72Jf05JCIdeSBWXAiNjd/y2AQH4Ojgas55ojV2sAcEYz2wgyR7wSpiI6fHBRlRP+3XPjV9MXKxI3ZwOnznQxqQ== dependencies: - "@lerna/child-process" "5.4.0" - "@lerna/get-npm-exec-opts" "5.4.0" + "@lerna/child-process" "5.0.0" + "@lerna/get-npm-exec-opts" "5.0.0" fs-extra "^9.1.0" - npm-package-arg "8.1.1" - npmlog "^6.0.2" + npm-package-arg "^8.1.0" + npmlog "^4.1.2" signal-exit "^3.0.3" write-pkg "^4.0.0" -"@lerna/npm-publish@5.4.0": - version "5.4.0" - resolved "https://registry.npmjs.org/@lerna/npm-publish/-/npm-publish-5.4.0.tgz#ccf81d1fc4007a6766dcde1cfaddb6a0a157c4ac" - integrity sha512-PQ49FWnHOXEWLwREzD3XYZAUUxssGqHLh/lC9etGC7xGjHreAcUM89GuuG8JiSdCEuNNnUXO6oCYjJKWpfWa5A== +"@lerna/npm-publish@5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@lerna/npm-publish/-/npm-publish-5.0.0.tgz#a1a06e47e45e56999c85086a40f9b77f801b5a00" + integrity sha512-jnapZ2jRajSzshSfd1Y3rHH5R7QC+JJlYST04FBebIH3VePwDT7uAglDCI4um2THvxkW4420EzE4BUMUwKlnXA== dependencies: - "@lerna/otplease" "5.4.0" - "@lerna/run-lifecycle" "5.4.0" + "@lerna/otplease" "5.0.0" + "@lerna/run-lifecycle" "5.0.0" fs-extra "^9.1.0" - libnpmpublish "^6.0.4" - npm-package-arg "8.1.1" - npmlog "^6.0.2" + libnpmpublish "^4.0.0" + npm-package-arg "^8.1.0" + npmlog "^4.1.2" pify "^5.0.0" - read-package-json "^5.0.1" + read-package-json "^3.0.0" -"@lerna/npm-run-script@5.4.0": - version "5.4.0" - resolved "https://registry.npmjs.org/@lerna/npm-run-script/-/npm-run-script-5.4.0.tgz#efccba87b1abbca0ab831de3deaa604f3a75d48f" - integrity sha512-VkEmTioVTyzGKpKJ9fD5NYww5eoUAqWwvFeI5lCGN0eRd7AyQrdRu8cnHpg+bRW1qzE7GReDWdB6WKQ9gBxc4w== +"@lerna/npm-run-script@5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@lerna/npm-run-script/-/npm-run-script-5.0.0.tgz#114374b89f228c9719bbfacf9f08d6aac2739fb2" + integrity sha512-qgGf0Wc/E2YxPwIiF8kC/OB9ffPf0/HVtPVkqrblVuNE9XVP80WilOH966PIDiXzwXaCo/cTswFoBeseccYRGw== dependencies: - "@lerna/child-process" "5.4.0" - "@lerna/get-npm-exec-opts" "5.4.0" - npmlog "^6.0.2" + "@lerna/child-process" "5.0.0" + "@lerna/get-npm-exec-opts" "5.0.0" + npmlog "^4.1.2" -"@lerna/otplease@5.4.0": - version "5.4.0" - resolved "https://registry.npmjs.org/@lerna/otplease/-/otplease-5.4.0.tgz#791942b669f2d6b861fa505dc870fa2f5006b574" - integrity sha512-0chUZ+3CLirEzhXogKFFJ8AftZbrAEr2Fm2EErP77T5ml7eCwuvHgXkQvvHxYJnkO6bJ72cNPmsZeOx+2fhbow== +"@lerna/otplease@5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@lerna/otplease/-/otplease-5.0.0.tgz#5b0419f64908d7ad840c2735e0284d67cd37095b" + integrity sha512-QLLkEy1DPN1XFRAAZDHxAD26MHFQDHfzB6KKSzRYxbHc6lH/YbDaMH1RloSWIm7Hwkxl/3NgpokgN4Lj5XFuzg== dependencies: - "@lerna/prompt" "5.4.0" + "@lerna/prompt" "5.0.0" -"@lerna/output@5.4.0": - version "5.4.0" - resolved "https://registry.npmjs.org/@lerna/output/-/output-5.4.0.tgz#9aec36e2424d58671c30034b1d932b335f3f8a5e" - integrity sha512-tnVjGDCyugbEvS1XNihwcLdOxGTGbHInnhKg9OtPgDX4dwv40Zliyrk1VyjJGwYiSoblznut9wQb5zXNOOmBQg== +"@lerna/output@5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@lerna/output/-/output-5.0.0.tgz#f3712f0cad3e9ef73c803fe368f6a9ac20403868" + integrity sha512-/7sUJQWPcvnLudjVIdN7t9MlfBLuP4JCDAWgQMqZe+wpQRuKNyKQ5dLBH5NHU/ElJCjAwMPfWuk3mh3GuvuiGA== dependencies: - npmlog "^6.0.2" + npmlog "^4.1.2" -"@lerna/pack-directory@5.4.0": - version "5.4.0" - resolved "https://registry.npmjs.org/@lerna/pack-directory/-/pack-directory-5.4.0.tgz#6b07f1bc3e6d695870eacd1908cc7d7ab31ef546" - integrity sha512-Yx9RwPYlfjSynhFBdGqI0KV1orlj8h2W2y+uSWUkdKbBFeHDwO/eJ879i3ZWsY/aU+GhWZWiC+f4jG1wAEs+RQ== +"@lerna/pack-directory@5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@lerna/pack-directory/-/pack-directory-5.0.0.tgz#f277418545786ca68ca15647bab52ad29bd57f59" + integrity sha512-E1SNDS7xSWhJrTSmRzJK7DibneljrymviKcsZW3mRl4TmF4CpYJmNXCMlhEtKEy6ghnGQvnl3/4+eslHDJ5J/w== dependencies: - "@lerna/get-packed" "5.4.0" - "@lerna/package" "5.4.0" - "@lerna/run-lifecycle" "5.4.0" - "@lerna/temp-write" "5.4.0" - npm-packlist "^5.1.1" - npmlog "^6.0.2" + "@lerna/get-packed" "5.0.0" + "@lerna/package" "5.0.0" + "@lerna/run-lifecycle" "5.0.0" + "@lerna/temp-write" "5.0.0" + npm-packlist "^2.1.4" + npmlog "^4.1.2" tar "^6.1.0" -"@lerna/package-graph@5.4.0": - version "5.4.0" - resolved "https://registry.npmjs.org/@lerna/package-graph/-/package-graph-5.4.0.tgz#dc0fab8456fd9990d9efa606a7ce510806a4e94c" - integrity sha512-oBmwR5BVfjLpXVFQ7z37DbhQpQPWCm+KlrcRv+R1IQl3kaJEwIOx/ww9FPGOx3r1Uu9cEIrjCcWr6bjGLEcejw== +"@lerna/package-graph@5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@lerna/package-graph/-/package-graph-5.0.0.tgz#53e88ef46359ef7a2f6e3b7c5bab82302a10653f" + integrity sha512-Z3QeUQVjux0Blo64rA3/NivoLDlsQBjsZRIgGLbcQh7l7pJrqLK1WyNCBbPJ0KQNljQqUXthCKzdefnEWe37Ew== dependencies: - "@lerna/prerelease-id-from-version" "5.4.0" - "@lerna/validation-error" "5.4.0" - npm-package-arg "8.1.1" - npmlog "^6.0.2" + "@lerna/prerelease-id-from-version" "5.0.0" + "@lerna/validation-error" "5.0.0" + npm-package-arg "^8.1.0" + npmlog "^4.1.2" semver "^7.3.4" -"@lerna/package@5.4.0": - version "5.4.0" - resolved "https://registry.npmjs.org/@lerna/package/-/package-5.4.0.tgz#98cc92ba74651045ac6ffa8df671eb266ef3241e" - integrity sha512-lfj4AmN7STzWR+ML5FKhVjnG/tBYBmUWFP2D0WP7jaBCtvA4YfhTRX8bnIPTB6QoYrJl72cPx7eTxGD/VO0ZKA== +"@lerna/package@5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@lerna/package/-/package-5.0.0.tgz#4beeb3a1e8eed6e7ae9cebca283c7684278cdd28" + integrity sha512-/JiUU88bhbYEUTzPqoGLGwrrdWWTIVMlBb1OPxCGNGDEqYYNySX+OTTSs3zGMcmJnRNI0UyQALiEd0sh3JFN5w== dependencies: load-json-file "^6.2.0" - npm-package-arg "8.1.1" + npm-package-arg "^8.1.0" write-pkg "^4.0.0" -"@lerna/prerelease-id-from-version@5.4.0": - version "5.4.0" - resolved "https://registry.npmjs.org/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-5.4.0.tgz#0f7b548254c09a1e79716cac13c6b8ad9457240d" - integrity sha512-sbVnPq4dlY2VC3xKer5eBo9kevsQoddqQvLV4x+skeFkk50+faB9SH7J9n0zHm9PbxfrJX1TtL1EuxzHcFMKTg== +"@lerna/prerelease-id-from-version@5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-5.0.0.tgz#3edb90ba9ceace97708d03ff9f650d177f973184" + integrity sha512-bUZwyx6evRn2RxogOQXaiYxRK1U/1Mh/KLO4n49wUhqb8S8Vb9aG3+7lLOgg4ZugHpj9KAlD3YGEKvwYQiWzhg== dependencies: semver "^7.3.4" -"@lerna/profiler@5.4.0": - version "5.4.0" - resolved "https://registry.npmjs.org/@lerna/profiler/-/profiler-5.4.0.tgz#c300661a4692be6f3359530054f8ce32a0a0503c" - integrity sha512-0wo43ejOjQHeJ2cEU2Pp4//2lxjsi4ioQamkelu8YISRCC0ojGFB4ra22osj4/jRfstJ0DiaV8edrOht1TXJIA== +"@lerna/profiler@5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@lerna/profiler/-/profiler-5.0.0.tgz#e1b74d17dbd6172b5ce9c80426b336bf6ab2e8e9" + integrity sha512-hFX+ZtoH7BdDoGI+bqOYaSptJTFI58wNK9qq/pHwL5ksV7vOhxP2cQAuo1SjgBKHGl0Ex/9ZT080YVV4jP1ehw== dependencies: fs-extra "^9.1.0" - npmlog "^6.0.2" + npmlog "^4.1.2" upath "^2.0.1" -"@lerna/project@5.4.0": - version "5.4.0" - resolved "https://registry.npmjs.org/@lerna/project/-/project-5.4.0.tgz#bd1bbd5bfce6b05decda1e97e06f27bd098b64f9" - integrity sha512-lr8+EybiRNmS6ecDtFmXzEUNcOepbvku9oxBc47CtvXtCcLdDLG4bI9TXrN4lUO2vJajXTSlhN7sD1LVUkcYdg== +"@lerna/project@5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@lerna/project/-/project-5.0.0.tgz#31672891236696b2a70226388de0300c6086d75f" + integrity sha512-+izHk7D/Di2b0s69AzKzAa/qBz32H9s67oN9aKntrjNylpY7iN5opU157l60Kh4TprYHU5bLisqzFLZsHHADGw== dependencies: - "@lerna/package" "5.4.0" - "@lerna/validation-error" "5.4.0" + "@lerna/package" "5.0.0" + "@lerna/validation-error" "5.0.0" cosmiconfig "^7.0.0" dedent "^0.7.0" dot-prop "^6.0.1" glob-parent "^5.1.1" globby "^11.0.2" load-json-file "^6.2.0" - npmlog "^6.0.2" + npmlog "^4.1.2" p-map "^4.0.0" resolve-from "^5.0.0" write-json-file "^4.3.0" -"@lerna/prompt@5.4.0": - version "5.4.0" - resolved "https://registry.npmjs.org/@lerna/prompt/-/prompt-5.4.0.tgz#719fdbcd37ad6adaa974cdaf7f3bad491ae673e0" - integrity sha512-Kuw/YpQLwrbKx9fp/wWXi8jiZ8mqmpE7UUVWcFNed0oSHrlUpIhRXPSSTEHsX983Iepj65YL1O6Zffr3t/vP/Q== +"@lerna/prompt@5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@lerna/prompt/-/prompt-5.0.0.tgz#31d3d82ecd17e863f8b7cc7944accff4f3de3395" + integrity sha512-cq2k04kOPY1yuJNHJn4qfBDDrCi9PF4Q228JICa6bxaONRf/C/TRsEQXHVIdlax8B3l53LnlGv5GECwRuvkQbA== dependencies: - inquirer "^8.2.4" - npmlog "^6.0.2" + inquirer "^7.3.3" + npmlog "^4.1.2" -"@lerna/publish@5.4.0": - version "5.4.0" - resolved "https://registry.npmjs.org/@lerna/publish/-/publish-5.4.0.tgz#bb8d6f68a72fb889050e8043567f67d1fc933723" - integrity sha512-C+p3K6cKLML4L/7xkmPAafmBdPlltjZtsKuUKSKKnt/FrX4giv81Kp0FQ0mAps0JN1A++ni0AOJAxlBowZs1Pg== +"@lerna/publish@5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@lerna/publish/-/publish-5.0.0.tgz#27c4c469e6abd5b52e977568d328632929e859b1" + integrity sha512-QEWFtN8fW1M+YXEQOWb2XBBCT137CrwHYK29ojMXW9HShvSZezf8Q/niH91nZ4kIhWdpOGz4w3rKopsumAM5SA== dependencies: - "@lerna/check-working-tree" "5.4.0" - "@lerna/child-process" "5.4.0" - "@lerna/collect-updates" "5.4.0" - "@lerna/command" "5.4.0" - "@lerna/describe-ref" "5.4.0" - "@lerna/log-packed" "5.4.0" - "@lerna/npm-conf" "5.4.0" - "@lerna/npm-dist-tag" "5.4.0" - "@lerna/npm-publish" "5.4.0" - "@lerna/otplease" "5.4.0" - "@lerna/output" "5.4.0" - "@lerna/pack-directory" "5.4.0" - "@lerna/prerelease-id-from-version" "5.4.0" - "@lerna/prompt" "5.4.0" - "@lerna/pulse-till-done" "5.4.0" - "@lerna/run-lifecycle" "5.4.0" - "@lerna/run-topologically" "5.4.0" - "@lerna/validation-error" "5.4.0" - "@lerna/version" "5.4.0" + "@lerna/check-working-tree" "5.0.0" + "@lerna/child-process" "5.0.0" + "@lerna/collect-updates" "5.0.0" + "@lerna/command" "5.0.0" + "@lerna/describe-ref" "5.0.0" + "@lerna/log-packed" "5.0.0" + "@lerna/npm-conf" "5.0.0" + "@lerna/npm-dist-tag" "5.0.0" + "@lerna/npm-publish" "5.0.0" + "@lerna/otplease" "5.0.0" + "@lerna/output" "5.0.0" + "@lerna/pack-directory" "5.0.0" + "@lerna/prerelease-id-from-version" "5.0.0" + "@lerna/prompt" "5.0.0" + "@lerna/pulse-till-done" "5.0.0" + "@lerna/run-lifecycle" "5.0.0" + "@lerna/run-topologically" "5.0.0" + "@lerna/validation-error" "5.0.0" + "@lerna/version" "5.0.0" fs-extra "^9.1.0" - libnpmaccess "^6.0.3" - npm-package-arg "8.1.1" - npm-registry-fetch "^13.3.0" - npmlog "^6.0.2" + libnpmaccess "^4.0.1" + npm-package-arg "^8.1.0" + npm-registry-fetch "^9.0.0" + npmlog "^4.1.2" p-map "^4.0.0" p-pipe "^3.1.0" - pacote "^13.6.1" + pacote "^13.4.1" semver "^7.3.4" -"@lerna/pulse-till-done@5.4.0": - version "5.4.0" - resolved "https://registry.npmjs.org/@lerna/pulse-till-done/-/pulse-till-done-5.4.0.tgz#5221927fa1acc25714fcb5c2cd70872770f3ed63" - integrity sha512-d3f8da0J+fZg/EXFVih1cdTfYCn74l1aJ6vEH18CdDlylOLONRgGWliMLnrQMssSVHu6AF1BSte27yfJ6sfOfw== +"@lerna/pulse-till-done@5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@lerna/pulse-till-done/-/pulse-till-done-5.0.0.tgz#df3c32c2d7457362956d997da366f5c060953eef" + integrity sha512-qFeVybGIZbQSWKasWIzZmHsvCQMC/AwTz5B44a0zTt5eSNQuI65HRpKKUgmFFu/Jzd7u+yp7eP+NQ53gjOcQlQ== dependencies: - npmlog "^6.0.2" + npmlog "^4.1.2" -"@lerna/query-graph@5.4.0": - version "5.4.0" - resolved "https://registry.npmjs.org/@lerna/query-graph/-/query-graph-5.4.0.tgz#20f7dea4997aac4b685c1336ca731d07da9ccd04" - integrity sha512-CC6wi63C9r/S7mJ1ENsBGz1O76Rog1LRTBqiLUlVsJxVf+X+WboIVcouoESNDeudxJ0Fl0sFdvRVZ5Q2Bt7xKw== +"@lerna/query-graph@5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@lerna/query-graph/-/query-graph-5.0.0.tgz#76c45f648915ef5c884c32c3d35daa3ebb53440b" + integrity sha512-C/HXssBI8DVsZ/7IDW6JG9xhoHtWywi3L5oZB9q84MBYpQ9otUv6zbB+K4JCj7w9WHcuFWe2T/mc9wsaFuvB5g== dependencies: - "@lerna/package-graph" "5.4.0" + "@lerna/package-graph" "5.0.0" -"@lerna/resolve-symlink@5.4.0": - version "5.4.0" - resolved "https://registry.npmjs.org/@lerna/resolve-symlink/-/resolve-symlink-5.4.0.tgz#ce88674ea1d049cc750755939a5e1303b1beded5" - integrity sha512-shPld+YY4lf7teHkxTBBUjTZ7RNvqALZ8Nc5y1xvuHmrornGqwDeFZGbu2OZgc409HNWUheZHLluSrUIP/mn0Q== +"@lerna/resolve-symlink@5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@lerna/resolve-symlink/-/resolve-symlink-5.0.0.tgz#edff89908e90a390791ab762305d34aa95e7bdbe" + integrity sha512-O1EMQh3O3nKjLyI2guCCaxmi9xzZXpiMZhrz2ki5ENEDB2N1+f7cZ2THT0lEOIkLRuADI6hrzoN1obJ+TTk+KQ== dependencies: fs-extra "^9.1.0" - npmlog "^6.0.2" - read-cmd-shim "^3.0.0" + npmlog "^4.1.2" + read-cmd-shim "^2.0.0" -"@lerna/rimraf-dir@5.4.0": - version "5.4.0" - resolved "https://registry.npmjs.org/@lerna/rimraf-dir/-/rimraf-dir-5.4.0.tgz#6e81edb5722dd9003d2ef3c9639bc9287234f2d4" - integrity sha512-QGFlQUcdQaUAs3mXMOvbb4WU0tuinTDVoH+1ztIJf5vj/NAHWTH/H0KxPGIJJUODtyuaNCufU7LDXkQMOORGyQ== +"@lerna/rimraf-dir@5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@lerna/rimraf-dir/-/rimraf-dir-5.0.0.tgz#9e7689610415e6d68c9e766a462c8acfdbf04b9a" + integrity sha512-hWJg/13CiSUrWWEek3B/A1mkvBbcPvG5z69/Ugyerdpzlw44ubf02MAZ0/kXPJjkICI2hMrS07YotQ60LdYpCw== dependencies: - "@lerna/child-process" "5.4.0" - npmlog "^6.0.2" + "@lerna/child-process" "5.0.0" + npmlog "^4.1.2" path-exists "^4.0.0" rimraf "^3.0.2" -"@lerna/run-lifecycle@5.4.0": - version "5.4.0" - resolved "https://registry.npmjs.org/@lerna/run-lifecycle/-/run-lifecycle-5.4.0.tgz#c42bf12c44c4b4df96b20db19b3934e2db6d5abd" - integrity sha512-d+XO8X5Kiuv+w65wrU8thrObJwgODqA12xLW7kCLnh20njTWimOfjq/xsbSbSwRr5es8uHtK7Vqns+nBVSTeEw== +"@lerna/run-lifecycle@5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@lerna/run-lifecycle/-/run-lifecycle-5.0.0.tgz#0f62c2faebc19e4ee247bdfa1e05b2a9f51b0637" + integrity sha512-36mAm9rC5DSliFShI0Y4ICjgrJXdIIVt7VW9rdbdJ8/XYjRHDzhGPB9Sc1neJOVlGL4DmaArvh5tGgo62KPJYQ== dependencies: - "@lerna/npm-conf" "5.4.0" - "@npmcli/run-script" "^4.1.7" - npmlog "^6.0.2" + "@lerna/npm-conf" "5.0.0" + "@npmcli/run-script" "^3.0.2" + npmlog "^4.1.2" + +"@lerna/run-topologically@5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@lerna/run-topologically/-/run-topologically-5.0.0.tgz#0b0156e3ebe2bf768b9ba1339e02e947e70d1dd1" + integrity sha512-B2s1N/+r3sfPOLRA2svNk+C52JpXQleMuGap0yhOx5mZzR1M2Lo4vpe9Ody4hCvXQjfdLx/U342fxVmgugUtfQ== + dependencies: + "@lerna/query-graph" "5.0.0" p-queue "^6.6.2" -"@lerna/run-topologically@5.4.0": - version "5.4.0" - resolved "https://registry.npmjs.org/@lerna/run-topologically/-/run-topologically-5.4.0.tgz#f0a3254553022fd8812a16cd25a260e97f211af7" - integrity sha512-wwelSpQT/ZDornu0+idYKfY1q7ggIOMiXrGq9nDshbtgPwme/CMEr5SPur80oR5Z6Pc2Fm7cHtxI2je7YOuqKA== +"@lerna/run@5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@lerna/run/-/run-5.0.0.tgz#3af69d1a787866cf85072a0ae9571b9c3bf262e7" + integrity sha512-8nBZstqKSO+7wHlKk1g+iexSYRVVNJq/u5ZbAzBiHNrABtqA6/0G7q9vsAEMsnPZ8ARAUYpwvbfKTipjpWH0VA== dependencies: - "@lerna/query-graph" "5.4.0" - p-queue "^6.6.2" - -"@lerna/run@5.4.0": - version "5.4.0" - resolved "https://registry.npmjs.org/@lerna/run/-/run-5.4.0.tgz#6373fdbe950d24f56305dd89946f9966ab80113b" - integrity sha512-UgdsV3dvdmSLoQIrh9Wxb5kiTbwrQP7dN5MOADfH+DhO+/pktBsp8KtLr1g+y+nNyHc2LRkAL+E/KozLATbKSA== - dependencies: - "@lerna/command" "5.4.0" - "@lerna/filter-options" "5.4.0" - "@lerna/npm-run-script" "5.4.0" - "@lerna/output" "5.4.0" - "@lerna/profiler" "5.4.0" - "@lerna/run-topologically" "5.4.0" - "@lerna/timer" "5.4.0" - "@lerna/validation-error" "5.4.0" + "@lerna/command" "5.0.0" + "@lerna/filter-options" "5.0.0" + "@lerna/npm-run-script" "5.0.0" + "@lerna/output" "5.0.0" + "@lerna/profiler" "5.0.0" + "@lerna/run-topologically" "5.0.0" + "@lerna/timer" "5.0.0" + "@lerna/validation-error" "5.0.0" p-map "^4.0.0" -"@lerna/symlink-binary@5.4.0": - version "5.4.0" - resolved "https://registry.npmjs.org/@lerna/symlink-binary/-/symlink-binary-5.4.0.tgz#33dfe2ba92ed3295c3a08710c9964dedde493d2a" - integrity sha512-DqwgjBywI8HgBaQYJjHzLkJ6IWspcL8rb8zgo4O/HSC7NJDTq3ir9S1HkzixxszL/G4Zp6mfqj0AGfzLYhjKLA== +"@lerna/symlink-binary@5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@lerna/symlink-binary/-/symlink-binary-5.0.0.tgz#f9da5673ed3a44570fa4d2e691759f82bd7ad057" + integrity sha512-uYyiiNjkdL1tWf8MDXIIyCa/a2gmYaUxagqMgEZ4wRtOk+PDypDwMUFVop/EQtUWZqG5CAJBJYOztG3DdapTbA== dependencies: - "@lerna/create-symlink" "5.4.0" - "@lerna/package" "5.4.0" + "@lerna/create-symlink" "5.0.0" + "@lerna/package" "5.0.0" fs-extra "^9.1.0" p-map "^4.0.0" -"@lerna/symlink-dependencies@5.4.0": - version "5.4.0" - resolved "https://registry.npmjs.org/@lerna/symlink-dependencies/-/symlink-dependencies-5.4.0.tgz#49d616b23750583fb6ffb0b30c07e23397948ba9" - integrity sha512-iKM4dykV0NHCsXEchgEsxtWur1OQ2glLXmJb02QHPsFdqLaAgl0F77+dVPfN16I743lgf52sz2rqIcVo7VeJrg== +"@lerna/symlink-dependencies@5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@lerna/symlink-dependencies/-/symlink-dependencies-5.0.0.tgz#878b0f52737f82bb7014e13afda8efc606fc071c" + integrity sha512-wlZGOOB87XMy278hpF4fOwGNnjTXf1vJ/cFHIdKsJAiDipyhtnuCiJLBDPh4NzEGb02o4rhaqt8Nl5yWRu9CNA== dependencies: - "@lerna/create-symlink" "5.4.0" - "@lerna/resolve-symlink" "5.4.0" - "@lerna/symlink-binary" "5.4.0" + "@lerna/create-symlink" "5.0.0" + "@lerna/resolve-symlink" "5.0.0" + "@lerna/symlink-binary" "5.0.0" fs-extra "^9.1.0" p-map "^4.0.0" p-map-series "^2.1.0" -"@lerna/temp-write@5.4.0": - version "5.4.0" - resolved "https://registry.npmjs.org/@lerna/temp-write/-/temp-write-5.4.0.tgz#6aa4db0019e45a74f8d4e8ca06644e2a86d93202" - integrity sha512-dojKAYCWhOmUw4fnJpruGfgBA9RMBW5mVkKJ5HcB2uruJza92ffV9SRADe5bnrIZDu4/mh/6lPU0+rVHvJhWsA== +"@lerna/temp-write@5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@lerna/temp-write/-/temp-write-5.0.0.tgz#44f8c7c82f498e15db33c166d063be117b819162" + integrity sha512-JOkRR6xyASuBy1udyS/VD52Wgywnz7cSKppD+QKIDseNzTq27I9mNmb702BSXNXIdD19lLVQ7q6WoAlpnelnZg== dependencies: graceful-fs "^4.1.15" is-stream "^2.0.0" @@ -4716,42 +4613,42 @@ temp-dir "^1.0.0" uuid "^8.3.2" -"@lerna/timer@5.4.0": - version "5.4.0" - resolved "https://registry.npmjs.org/@lerna/timer/-/timer-5.4.0.tgz#0915ec1f22c6b16157fef91c2364b464d41773bb" - integrity sha512-Ow070AbPVIYO5H1m0B85VGrQtYPa47s4cbA9gj9iU6VBVnw/F7tDN0e/QfGhYgb4atwc046WoZmUQYyD7w9l/g== +"@lerna/timer@5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@lerna/timer/-/timer-5.0.0.tgz#ab8fba29f90de21b0eb02406916269122deb2e41" + integrity sha512-p2vevkpB6V/b0aR8VyMLDfg0Arp9VvMxcZOEu+IfZ9XKTtnbwjWPHKUOS34x/VGa6bnOIWjE046ixWymOs/fTw== -"@lerna/validation-error@5.4.0": - version "5.4.0" - resolved "https://registry.npmjs.org/@lerna/validation-error/-/validation-error-5.4.0.tgz#ede63fccdb7ef8666fefb47151a475fd976afb34" - integrity sha512-H/CiOgMlZO0QlGbVGk1iVKDbtWKV0gUse9XwP7N15qroCJU2d6u0XUJS5eCTNQ/JrLdFCtEdzg3uPOHbpIOykw== +"@lerna/validation-error@5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@lerna/validation-error/-/validation-error-5.0.0.tgz#3d3557023e3eb2fd3d8fc9c89f7352a1b6e5bd3e" + integrity sha512-fu/MhqRXiRQM2cirP/HoSkfwc5XtJ21G60WHv74RnanKBqWEZAUALWa3MQN2sYhVV/FpDW3GLkO008IW5NWzdg== dependencies: - npmlog "^6.0.2" + npmlog "^4.1.2" -"@lerna/version@5.4.0": - version "5.4.0" - resolved "https://registry.npmjs.org/@lerna/version/-/version-5.4.0.tgz#61ef5032e5c73ee271f2c97d925503c92d37db73" - integrity sha512-SZZuSYkmMb/QKDCMM2IBxX2O5RN7O18ZWi75SCRQ+MZHXt6Yl4VC/l16TBtM8Nlf3ZmBP20sIWbm5UqD9f3FjQ== +"@lerna/version@5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@lerna/version/-/version-5.0.0.tgz#36a808e8b4458febd58a6b76852f2ce30e740ca1" + integrity sha512-M8KvdyG5kR/d3wgg5S46Q2YMf0L9iw9MiumTvlDP4ckysTt+04kS74Vp4+aClgPM4xaoI5OuMrs6wy5ICcd3Pw== dependencies: - "@lerna/check-working-tree" "5.4.0" - "@lerna/child-process" "5.4.0" - "@lerna/collect-updates" "5.4.0" - "@lerna/command" "5.4.0" - "@lerna/conventional-commits" "5.4.0" - "@lerna/github-client" "5.4.0" - "@lerna/gitlab-client" "5.4.0" - "@lerna/output" "5.4.0" - "@lerna/prerelease-id-from-version" "5.4.0" - "@lerna/prompt" "5.4.0" - "@lerna/run-lifecycle" "5.4.0" - "@lerna/run-topologically" "5.4.0" - "@lerna/temp-write" "5.4.0" - "@lerna/validation-error" "5.4.0" + "@lerna/check-working-tree" "5.0.0" + "@lerna/child-process" "5.0.0" + "@lerna/collect-updates" "5.0.0" + "@lerna/command" "5.0.0" + "@lerna/conventional-commits" "5.0.0" + "@lerna/github-client" "5.0.0" + "@lerna/gitlab-client" "5.0.0" + "@lerna/output" "5.0.0" + "@lerna/prerelease-id-from-version" "5.0.0" + "@lerna/prompt" "5.0.0" + "@lerna/run-lifecycle" "5.0.0" + "@lerna/run-topologically" "5.0.0" + "@lerna/temp-write" "5.0.0" + "@lerna/validation-error" "5.0.0" chalk "^4.1.0" dedent "^0.7.0" load-json-file "^6.2.0" minimatch "^3.0.4" - npmlog "^6.0.2" + npmlog "^4.1.2" p-map "^4.0.0" p-pipe "^3.1.0" p-reduce "^2.1.0" @@ -4760,13 +4657,13 @@ slash "^3.0.0" write-json-file "^4.3.0" -"@lerna/write-log-file@5.4.0": - version "5.4.0" - resolved "https://registry.npmjs.org/@lerna/write-log-file/-/write-log-file-5.4.0.tgz#cb207187ce86e6c4fb46e971d2ea355c7ca53d20" - integrity sha512-Zj2rRG5HasQNOaVmOaSSAn6wZ4esJSJ/fI/IYK1yCvx9dMq5X0BAiVBWijXW7V1xlwJY0TDeI82p36HS09dFLQ== +"@lerna/write-log-file@5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@lerna/write-log-file/-/write-log-file-5.0.0.tgz#ad3d33d6153b962beef48442ab6472233b5d5197" + integrity sha512-kpPNxe9xm36QbCWY7DwO96Na6FpCHzZinJtw6ttBHslIcdR38lZuCp+/2KfJcVsRIPNOsp1VvgP7EZIKiBhgjw== dependencies: - npmlog "^6.0.2" - write-file-atomic "^4.0.1" + npmlog "^4.1.2" + write-file-atomic "^3.0.3" "@lezer/common@^1.0.0": version "1.0.0" @@ -4963,9 +4860,9 @@ react-is "^16.8.0 || ^17.0.0" "@maxim_mazurok/gapi.client.calendar@^3.0.20220408": - version "3.0.20220722" - resolved "https://registry.npmjs.org/@maxim_mazurok/gapi.client.calendar/-/gapi.client.calendar-3.0.20220722.tgz#cfcf40676c2bd07175db688cf96c9377f1b55e1b" - integrity sha512-/ft7PMhBYW6zEFkV1r5WekxzJrxEXVwqSPBssOneTBzgE/MMV2hkbFPocnQ1z9YRH8TAsskv/DQlpDbmmbK9JA== + version "3.0.20220805" + resolved "https://registry.npmjs.org/@maxim_mazurok/gapi.client.calendar/-/gapi.client.calendar-3.0.20220805.tgz#ccc3c12f83b361daf5e48e0a2ff7abee5b0a6c5d" + integrity sha512-YwUDC4G4amUkM4u55wJpARowbs6AjJoF+PxxLEz3ZoHXvzP/VWPb1L0AhxnbFwDhWKVFcXkZTEGDc59PcuIJjQ== dependencies: "@types/gapi.client" "*" @@ -5010,9 +4907,9 @@ typescript "~4.6.3" "@microsoft/microsoft-graph-types@^2.6.0": - version "2.22.0" - resolved "https://registry.npmjs.org/@microsoft/microsoft-graph-types/-/microsoft-graph-types-2.22.0.tgz#7ceb222311770ed5b240d627b657d25b3979964e" - integrity sha512-iKc5L036hc/wu13DX5kGf//3/WqTAErAPTyYKG6zT3vG070xXaaP7PInODznfyZduhiOvavmrRlQb34ajeDTUA== + version "2.23.0" + resolved "https://registry.npmjs.org/@microsoft/microsoft-graph-types/-/microsoft-graph-types-2.23.0.tgz#075cd5bbd523a414bb98ab97fb2207bcccbfa532" + integrity sha512-4TwjVg/A28K5Df1br17gRmv7Z0iWqYArdUo77xPz+bEtMpDD1hwmKUNj7O7a8r3sN7WIC2nKp6Atb6LXTr1LEA== "@microsoft/tsdoc-config@~0.16.1": version "0.16.1" @@ -5115,31 +5012,31 @@ tslib "2.3.1" uuid "8.3.2" -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== +"@nodelib/fs.scandir@2.1.3": + version "2.1.3" + resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz#3a582bdb53804c6ba6d146579c46e52130cf4a3b" + integrity sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw== dependencies: - "@nodelib/fs.stat" "2.0.5" + "@nodelib/fs.stat" "2.0.3" run-parallel "^1.1.9" -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== +"@nodelib/fs.stat@2.0.3", "@nodelib/fs.stat@^2.0.2": + version "2.0.3" + resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz#34dc5f4cabbc720f4e60f75a747e7ecd6c175bd3" + integrity sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA== "@nodelib/fs.walk@^1.2.3": - version "1.2.8" - resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + version "1.2.4" + resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz#011b9202a70a6366e436ca5c065844528ab04976" + integrity sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ== dependencies: - "@nodelib/fs.scandir" "2.1.5" + "@nodelib/fs.scandir" "2.1.3" fastq "^1.6.0" -"@npmcli/arborist@5.3.0": - version "5.3.0" - resolved "https://registry.npmjs.org/@npmcli/arborist/-/arborist-5.3.0.tgz#321d9424677bfc08569e98a5ac445ee781f32053" - integrity sha512-+rZ9zgL1lnbl8Xbb1NQdMjveOMwj4lIYfcDtyJHHi5x4X8jtR6m8SXooJMZy5vmFVZ8w7A2Bnd/oX9eTuU8w5A== +"@npmcli/arborist@5.2.0": + version "5.2.0" + resolved "https://registry.npmjs.org/@npmcli/arborist/-/arborist-5.2.0.tgz#ee40dfe1f81ae1524819ee39c8f3e7022b0d6269" + integrity sha512-zWV7scFGL0SmpvfQyIWnMFbU/0YgtMNyvJiJwR98kyjUSntJGWFFR0O600d5W+TrDcTg0GyDbY+HdzGEg+GXLg== dependencies: "@isaacs/string-locale-compare" "^1.1.0" "@npmcli/installed-package-contents" "^1.0.7" @@ -5149,7 +5046,7 @@ "@npmcli/name-from-folder" "^1.0.1" "@npmcli/node-gyp" "^2.0.0" "@npmcli/package-json" "^2.0.0" - "@npmcli/run-script" "^4.1.3" + "@npmcli/run-script" "^3.0.0" bin-links "^3.0.0" cacache "^16.0.6" common-ancestor-path "^1.0.1" @@ -5163,7 +5060,7 @@ npm-pick-manifest "^7.0.0" npm-registry-fetch "^13.0.0" npmlog "^6.0.2" - pacote "^13.6.1" + pacote "^13.0.5" parse-conflict-json "^2.0.1" proc-log "^2.0.0" promise-all-reject-late "^1.0.0" @@ -5214,18 +5111,23 @@ treeverse "^1.0.4" walk-up-path "^1.0.0" +"@npmcli/ci-detect@^1.0.0": + version "1.3.0" + resolved "https://registry.npmjs.org/@npmcli/ci-detect/-/ci-detect-1.3.0.tgz#6c1d2c625fb6ef1b9dea85ad0a5afcbef85ef22a" + integrity sha512-oN3y7FAROHhrAt7Rr7PnTSwrHrZVRTS2ZbyxeQwSSYD0ifwM3YNgQqbaRmjcWoPyq77MjchusjJDspbzMmip1Q== + "@npmcli/fs@^1.0.0": - version "1.1.1" - resolved "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz#72f719fe935e687c56a4faecf3c03d06ba593257" - integrity sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ== + version "1.0.0" + resolved "https://registry.npmjs.org/@npmcli/fs/-/fs-1.0.0.tgz#589612cfad3a6ea0feafcb901d29c63fd52db09f" + integrity sha512-8ltnOpRR/oJbOp8vaGUnipOi3bqkcW+sLHFlyXIr08OGHmVJLB1Hn7QtGXbYcpVtH1gAYZTlmDXtE4YV0+AMMQ== dependencies: "@gar/promisify" "^1.0.1" semver "^7.3.5" "@npmcli/fs@^2.1.0": - version "2.1.1" - resolved "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.1.tgz#c0c480b03450d8b9fc086816a50cb682668a48bf" - integrity sha512-1Q0uzx6c/NVNGszePbr5Gc2riSU1zLpNlo/1YWntH+eaPmMgBssAW0qXofCVkpdj3ce4swZtlDYQu+NKiYcptg== + version "2.1.0" + resolved "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.0.tgz#f2a21c28386e299d1a9fae8051d35ad180e33109" + integrity sha512-DmfBvNXGaetMxj9LTp8NAN9vEidXURrf5ZTslQzEAi/6GbW+4yjaLFQc6Tue5cpZ9Frlk4OBo/Snf1Bh/S7qTQ== dependencies: "@gar/promisify" "^1.1.3" semver "^7.3.5" @@ -5278,9 +5180,9 @@ read-package-json-fast "^2.0.1" "@npmcli/map-workspaces@^2.0.3": - version "2.0.4" - resolved "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-2.0.4.tgz#9e5e8ab655215a262aefabf139782b894e0504fc" - integrity sha512-bMo0aAfwhVwqoVM5UzX1DJnlvVvzDCHae821jv48L1EsrYwfOZChlqWYXEtto/+BkBXetPbEWgau++/brh4oVg== + version "2.0.3" + resolved "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-2.0.3.tgz#2d3c75119ee53246e9aa75bc469a55281cd5f08f" + integrity sha512-X6suAun5QyupNM8iHkNPh0AHdRC2rb1W+MTdMvvA/2ixgmqZwlq5cGUBgmKHUHT2LgrkKJMAXbfAoTxOigpK8Q== dependencies: "@npmcli/name-from-folder" "^1.0.1" glob "^8.0.1" @@ -5298,16 +5200,23 @@ semver "^7.3.2" "@npmcli/metavuln-calculator@^3.0.1": - version "3.1.1" - resolved "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-3.1.1.tgz#9359bd72b400f8353f6a28a25c8457b562602622" - integrity sha512-n69ygIaqAedecLeVH3KnO39M6ZHiJ2dEv5A7DGvcqCB8q17BGUgW8QaanIkbWUo2aYGZqJaOORTLAlIvKjNDKA== + version "3.1.0" + resolved "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-3.1.0.tgz#b1c2f0991c4f2d992b1615a54d4358c05efc3702" + integrity sha512-Q5fbQqGDlYqk7kWrbg6E2j/mtqQjZop0ZE6735wYA1tYNHguIDjAuWs+kFb5rJCkLIlXllfapvsyotYKiZOTBA== dependencies: cacache "^16.0.0" json-parse-even-better-errors "^2.3.1" pacote "^13.0.3" semver "^7.3.5" -"@npmcli/move-file@^1.0.1", "@npmcli/move-file@^1.1.0": +"@npmcli/move-file@^1.0.1": + version "1.0.1" + resolved "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.0.1.tgz#de103070dac0f48ce49cf6693c23af59c0f70464" + integrity sha512-Uv6h1sT+0DrblvIrolFtbvM1FgWm+/sy4B3pvLp67Zys+thcukzS5ekn7HsZFGpWP4Q3fYJCljbWQE/XivMRLw== + dependencies: + mkdirp "^1.0.4" + +"@npmcli/move-file@^1.1.0": version "1.1.2" resolved "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== @@ -5376,30 +5285,15 @@ node-gyp "^8.2.0" read-package-json-fast "^2.0.1" -"@npmcli/run-script@^4.1.0", "@npmcli/run-script@^4.1.3", "@npmcli/run-script@^4.1.7": - version "4.2.0" - resolved "https://registry.npmjs.org/@npmcli/run-script/-/run-script-4.2.0.tgz#2c25758f80831ba138afe25225d456e89acedac3" - integrity sha512-e/QgLg7j2wSJp1/7JRl0GC8c7PMX+uYlA/1Tb+IDOLdSM4T7K1VQ9mm9IGU3WRtY5vEIObpqCLb3aCNCug18DA== +"@npmcli/run-script@^3.0.0", "@npmcli/run-script@^3.0.1", "@npmcli/run-script@^3.0.2": + version "3.0.3" + resolved "https://registry.npmjs.org/@npmcli/run-script/-/run-script-3.0.3.tgz#66afa6e0c4c3484056195f295fa6c1d1a45ddf58" + integrity sha512-ZXL6qgC5NjwfZJ2nET+ZSLEz/PJgJ/5CU90C2S66dZY4Jw73DasS4ZCXuy/KHWYP0imjJ4VtA+Gebb5BxxKp9Q== dependencies: "@npmcli/node-gyp" "^2.0.0" "@npmcli/promise-spawn" "^3.0.0" - node-gyp "^9.0.0" + node-gyp "^8.4.1" read-package-json-fast "^2.0.3" - which "^2.0.2" - -"@nrwl/cli@14.5.4": - version "14.5.4" - resolved "https://registry.npmjs.org/@nrwl/cli/-/cli-14.5.4.tgz#86ac4fbcd1bf079b67c420376cf696b68fcc1200" - integrity sha512-UYr14hxeYV8p/zt6D6z33hljZJQROJAVxSC+mm72fyVvy88Gt0sQNLfMmOARXur0p/73PSLM0jJ2Sr7Ftsuu+A== - dependencies: - nx "14.5.4" - -"@nrwl/tao@14.5.4": - version "14.5.4" - resolved "https://registry.npmjs.org/@nrwl/tao/-/tao-14.5.4.tgz#a67097d424bcbf7073a1944ea1a0209c4f4f859c" - integrity sha512-a2GCuSE8WghjehuU3GVO63KZEnZXXQiqEg137yN/Na+PxwSu68XeaX53SLyzRskTV120YwBBy1YCTNzAZxxsjg== - dependencies: - nx "14.5.4" "@nuxtjs/opencollective@0.3.2": version "0.3.2" @@ -5424,15 +5318,15 @@ "@octokit/webhooks" "^10.0.0" "@octokit/auth-app@^4.0.0": - version "4.0.4" - resolved "https://registry.npmjs.org/@octokit/auth-app/-/auth-app-4.0.4.tgz#e774da352e7c9d0648d5d0fdf0fb75cd6a16c2af" - integrity sha512-s3MK7M9e8TD/ih8lCBTrdZ74XPHMtHV7aycCKNBRQ2QJPdMwqx0mVbmLOIuW4dCwMX7K243+JAvf52tryFHRdQ== + version "4.0.5" + resolved "https://registry.npmjs.org/@octokit/auth-app/-/auth-app-4.0.5.tgz#0e52752c37340ae8686617b7ce188e4cae6d7ba1" + integrity sha512-fCbi4L/egsP3p4p1SelOFORM/m/5KxROhHdcIW5Lb17DDdW61fGT8y3wGpfiSeYNuulwF5QIfzJ7tdgtHNAymA== dependencies: "@octokit/auth-oauth-app" "^5.0.0" "@octokit/auth-oauth-user" "^2.0.0" "@octokit/request" "^6.0.0" "@octokit/request-error" "^3.0.0" - "@octokit/types" "^6.0.3" + "@octokit/types" "^7.0.0" "@types/lru-cache" "^5.1.0" deprecation "^2.3.1" lru-cache "^6.0.0" @@ -5492,11 +5386,11 @@ "@octokit/types" "^6.0.0" "@octokit/auth-token@^3.0.0": - version "3.0.0" - resolved "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.0.tgz#6f22c5fc56445c496628488ba6810131558fa4a9" - integrity sha512-MDNFUBcJIptB9At7HiV7VCvU3NcL4GnfCQaP8C5lrxWrRPMJBnemYtehaKSOlaM7AYxeRyj9etenu8LVpSpVaQ== + version "3.0.1" + resolved "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.1.tgz#88bc2baf5d706cb258474e722a720a8365dff2ec" + integrity sha512-/USkK4cioY209wXRpund6HZzHo9GmjakpV9ycOkpMcMxMk7QVcVFVyCMtzvXYiHsB2crgDgrtNYSELYFBXhhaA== dependencies: - "@octokit/types" "^6.0.3" + "@octokit/types" "^7.0.0" "@octokit/auth-unauthenticated@^3.0.0": version "3.0.0" @@ -5519,15 +5413,15 @@ universal-user-agent "^6.0.0" "@octokit/core@^4.0.0": - version "4.0.2" - resolved "https://registry.npmjs.org/@octokit/core/-/core-4.0.2.tgz#4eaf9c5fd39913b541c5e31a2b8fdc3cf50480bc" - integrity sha512-vgVtE02EF9kXFsjmFoKFCwH1wDspPfDgopRbAlavkGuBJPWF+u5n0xgwP4obmdKNvLM+bB7MI7W31c2E13zgDQ== + version "4.0.5" + resolved "https://registry.npmjs.org/@octokit/core/-/core-4.0.5.tgz#589e68c0a35d2afdcd41dafceab072c2fbc6ab5f" + integrity sha512-4R3HeHTYVHCfzSAi0C6pbGXV8UDI5Rk+k3G7kLVNckswN9mvpOzW9oENfjfH3nEmzg8y3AmKmzs8Sg6pLCeOCA== dependencies: "@octokit/auth-token" "^3.0.0" - "@octokit/graphql" "^4.5.8" + "@octokit/graphql" "^5.0.0" "@octokit/request" "^6.0.0" - "@octokit/request-error" "^2.0.5" - "@octokit/types" "^6.0.3" + "@octokit/request-error" "^3.0.0" + "@octokit/types" "^7.0.0" before-after-hook "^2.2.0" universal-user-agent "^6.0.0" @@ -5545,23 +5439,23 @@ universal-user-agent "^6.0.0" "@octokit/endpoint@^6.0.1": - version "6.0.3" - resolved "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.3.tgz#dd09b599662d7e1b66374a177ab620d8cdf73487" - integrity sha512-Y900+r0gIz+cWp6ytnkibbD95ucEzDSKzlEnaWS52hbCDNcCJYO5mRmWW7HRAnDc7am+N/5Lnd8MppSaTYx1Yg== - dependencies: - "@octokit/types" "^5.0.0" - is-plain-object "^3.0.0" - universal-user-agent "^5.0.0" - -"@octokit/endpoint@^7.0.0": - version "7.0.0" - resolved "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.0.tgz#be758a1236d68d6bbb505e686dd50881c327a519" - integrity sha512-Kz/mIkOTjs9rV50hf/JK9pIDl4aGwAtT8pry6Rpy+hVXkAPhXanNQRxMoq6AeRgDCZR6t/A1zKniY2V1YhrzlQ== + version "6.0.12" + resolved "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz#3b4d47a4b0e79b1027fb8d75d4221928b2d05658" + integrity sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA== dependencies: "@octokit/types" "^6.0.3" is-plain-object "^5.0.0" universal-user-agent "^6.0.0" +"@octokit/endpoint@^7.0.0": + version "7.0.1" + resolved "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.1.tgz#cb0d03e62e8762f3c80e52b025179de81899a823" + integrity sha512-/wTXAJwt0HzJ2IeE4kQXO+mBScfzyCkI0hMtkIaqyXd9zg76OpOfNQfHL9FlaxAV2RsNiOXZibVWloy8EexENg== + dependencies: + "@octokit/types" "^7.0.0" + is-plain-object "^5.0.0" + universal-user-agent "^6.0.0" + "@octokit/graphql@^4.5.8": version "4.8.0" resolved "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.8.0.tgz#664d9b11c0e12112cbf78e10f49a05959aa22cc3" @@ -5572,12 +5466,12 @@ universal-user-agent "^6.0.0" "@octokit/graphql@^5.0.0": - version "5.0.0" - resolved "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.0.tgz#2cc6eb3bf8e0278656df1a7d0ca0d7591599e3b3" - integrity sha512-1ZZ8tX4lUEcLPvHagfIVu5S2xpHYXAmgN0+95eAOPoaVPzCfUXJtA5vASafcpWcO86ze0Pzn30TAx72aB2aguQ== + version "5.0.1" + resolved "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.1.tgz#a06982514ad131fb6fbb9da968653b2233fade9b" + integrity sha512-sxmnewSwAixkP1TrLdE6yRG53eEhHhDTYUykUwdV9x8f91WcbhunIHk9x1PZLALdBZKRPUO2HRcm4kezZ79HoA== dependencies: "@octokit/request" "^6.0.0" - "@octokit/types" "^6.0.3" + "@octokit/types" "^7.0.0" universal-user-agent "^6.0.0" "@octokit/oauth-app@^4.0.4", "@octokit/oauth-app@^4.0.6": @@ -5634,20 +5528,20 @@ resolved "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-11.2.0.tgz#b38d7fc3736d52a1e96b230c1ccd4a58a2f400a6" integrity sha512-PBsVO+15KSlGmiI8QAzaqvsNlZlrDlyAJYcrXBCvVUxCp7VnXjkwPoFHgjEJXx3WF9BAwkA6nfCUA7i9sODzKA== -"@octokit/openapi-types@^12.4.0": - version "12.4.0" - resolved "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.4.0.tgz#fd8bf5db72bd566c5ba2cb76754512a9ebe66e71" - integrity sha512-Npcb7Pv30b33U04jvcD7l75yLU0mxhuX2Xqrn51YyZ5WTkF04bpbxLaZ6GcaTqu03WZQHoO/Gbfp95NGRueDUA== +"@octokit/openapi-types@^12.11.0": + version "12.11.0" + resolved "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz#da5638d64f2b919bca89ce6602d059f1b52d3ef0" + integrity sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ== -"@octokit/openapi-types@^12.7.0": - version "12.8.0" - resolved "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.8.0.tgz#f4708cf948724d6e8f7d878cfd91584c1c5c0523" - integrity sha512-ydcKLs2KKcxlhpdWLzJxEBDEk/U5MUeqtqkXlrtAUXXFPs6vLl1PEGghFC/BbpleosB7iXs0Z4P2DGe7ZT5ZNg== +"@octokit/openapi-types@^13.0.0": + version "13.0.1" + resolved "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-13.0.1.tgz#f655810f0dc0547b771526fea171acffbc7bd4a8" + integrity sha512-40U39YoFBhJhmkAg6gbJnh9U8aueJwCuiTW0mXY2pNl9/+E7dUxXiMPOrIUGT12XqLinroaXYA3FUiw3BMeNfg== "@octokit/openapi-types@^7.3.2": - version "7.3.2" - resolved "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-7.3.2.tgz#065ce49b338043ec7f741316ce06afd4d459d944" - integrity sha512-oJhK/yhl9Gt430OrZOzAl2wJqR0No9445vmZ9Ey8GjUZUpwuu/vmEFP0TDhDXdpGDoxD6/EIFHJEcY8nHXpDTA== + version "7.4.0" + resolved "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-7.4.0.tgz#07631899dc32b72a532178e27235c541f3c359f1" + integrity sha512-V2qNML1knHjrjTJcIIvhYZSTkvtSAoQpNEX8y0ykTJI8vOQPqIh0y6Jf9EU6c/y+v0c9+LeC1acwLQh1xo96MA== "@octokit/plugin-enterprise-rest@^6.0.1": version "6.0.1" @@ -5668,6 +5562,13 @@ dependencies: "@octokit/types" "^6.39.0" +"@octokit/plugin-paginate-rest@^4.0.0": + version "4.0.0" + resolved "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-4.0.0.tgz#859a168262b657d46a8f1243ded66c87cee964b9" + integrity sha512-g4GJMt/7VDmIMMdQenN6bmsmRoZca1c7IxOdF2yMiMwQYrE2bmmypGQeQSD5rsaffsFMCUS7Br4pMVZamareYA== + dependencies: + "@octokit/types" "^7.0.0" + "@octokit/plugin-request-log@^1.0.2": version "1.0.2" resolved "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.2.tgz#394d59ec734cd2f122431fbaf05099861ece3c44" @@ -5687,11 +5588,11 @@ deprecation "^2.3.1" "@octokit/plugin-rest-endpoint-methods@^6.0.0": - version "6.0.0" - resolved "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-6.0.0.tgz#e4a55d83ec5a00e6b4d7a780f4ec9009095bff6f" - integrity sha512-9LkEvZB3WDuayEI381O5A/eM3QQioBZrwymQp5CUCNz9UMP/yZAIqBjcPhVJJFA3IRkKO1EARo98OePt9i0rkQ== + version "6.3.0" + resolved "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-6.3.0.tgz#81549334ce020169b84bd4a7fa2577e9d725d829" + integrity sha512-qEu2wn6E7hqluZwIEUnDxWROvKjov3zMIAi4H4d7cmKWNMeBprEXZzJe8pE5eStUYC1ysGhD0B7L6IeG1Rfb+g== dependencies: - "@octokit/types" "^6.39.0" + "@octokit/types" "^7.0.0" deprecation "^2.3.1" "@octokit/plugin-retry@^3.0.9": @@ -5720,11 +5621,11 @@ once "^1.4.0" "@octokit/request-error@^3.0.0": - version "3.0.0" - resolved "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.0.tgz#f527d178f115a3b62d76ce4804dd5bdbc0270a81" - integrity sha512-WBtpzm9lR8z4IHIMtOqr6XwfkGvMOOILNLxsWvDwtzm/n7f5AWuqJTXQXdDtOvPfTDrH4TPhEvW2qMlR4JFA2w== + version "3.0.1" + resolved "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.1.tgz#3fd747913c06ab2195e52004a521889dadb4b295" + integrity sha512-ym4Bp0HTP7F3VFssV88WD1ZyCIRoE8H35pXSKwLeMizcdZAYc/t6N9X9Yr9n6t3aG9IH75XDnZ6UeZph0vHMWQ== dependencies: - "@octokit/types" "^6.0.3" + "@octokit/types" "^7.0.0" deprecation "^2.0.0" once "^1.4.0" @@ -5741,18 +5642,18 @@ universal-user-agent "^6.0.0" "@octokit/request@^6.0.0": - version "6.2.0" - resolved "https://registry.npmjs.org/@octokit/request/-/request-6.2.0.tgz#9c25606df84e6f2ccbcc2c58e1d35438e20b688b" - integrity sha512-7IAmHnaezZrgUqtRShMlByJK33MT9ZDnMRgZjnRrRV9a/jzzFwKGz0vxhFU6i7VMLraYcQ1qmcAOin37Kryq+Q== + version "6.2.1" + resolved "https://registry.npmjs.org/@octokit/request/-/request-6.2.1.tgz#3ceeb22dab09a29595d96594b6720fc14495cf4e" + integrity sha512-gYKRCia3cpajRzDSU+3pt1q2OcuC6PK8PmFIyxZDWCzRXRSIBH8jXjFJ8ZceoygBIm0KsEUg4x1+XcYBz7dHPQ== dependencies: "@octokit/endpoint" "^7.0.0" "@octokit/request-error" "^3.0.0" - "@octokit/types" "^6.16.1" + "@octokit/types" "^7.0.0" is-plain-object "^5.0.0" node-fetch "^2.6.7" universal-user-agent "^6.0.0" -"@octokit/rest@^18.5.3": +"@octokit/rest@^18.1.0", "@octokit/rest@^18.5.3": version "18.5.6" resolved "https://registry.npmjs.org/@octokit/rest/-/rest-18.5.6.tgz#8c9a7c9329c7bbf478af20df78ddeab0d21f6d89" integrity sha512-8HdG6ZjQdZytU6tCt8BQ2XLC7EJ5m4RrbyU/EARSkAM1/HP3ceOzMG/9atEfe17EDMer3IVdHWLedz2wDi73YQ== @@ -5763,29 +5664,36 @@ "@octokit/plugin-rest-endpoint-methods" "5.3.1" "@octokit/rest@^19.0.3": - version "19.0.3" - resolved "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.3.tgz#b9a4e8dc8d53e030d611c053153ee6045f080f02" - integrity sha512-5arkTsnnRT7/sbI4fqgSJ35KiFaN7zQm0uQiQtivNQLI8RQx8EHwJCajcTUwmaCMNDg7tdCvqAnc7uvHHPxrtQ== + version "19.0.4" + resolved "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.4.tgz#fd8bed1cefffa486e9ae46a9dc608ce81bcfcbdd" + integrity sha512-LwG668+6lE8zlSYOfwPj4FxWdv/qFXYBpv79TWIQEpBLKA9D/IMcWsF/U9RGpA3YqMVDiTxpgVpEW3zTFfPFTA== dependencies: "@octokit/core" "^4.0.0" - "@octokit/plugin-paginate-rest" "^3.0.0" + "@octokit/plugin-paginate-rest" "^4.0.0" "@octokit/plugin-request-log" "^1.0.4" "@octokit/plugin-rest-endpoint-methods" "^6.0.0" -"@octokit/types@^5.0.0", "@octokit/types@^5.0.1": +"@octokit/types@^5.0.1": version "5.5.0" resolved "https://registry.npmjs.org/@octokit/types/-/types-5.5.0.tgz#e5f06e8db21246ca102aa28444cdb13ae17a139b" integrity sha512-UZ1pErDue6bZNjYOotCNveTXArOMZQFG6hKJfOnGnulVCMcVVi7YIIuuR4WfBhjo7zgpmzn/BkPDnUXtNx+PcQ== dependencies: "@types/node" ">= 8" -"@octokit/types@^6.0.0", "@octokit/types@^6.0.1", "@octokit/types@^6.0.3", "@octokit/types@^6.10.0", "@octokit/types@^6.12.2", "@octokit/types@^6.14.2", "@octokit/types@^6.16.1", "@octokit/types@^6.16.2", "@octokit/types@^6.8.2": +"@octokit/types@^6.0.0", "@octokit/types@^6.0.1", "@octokit/types@^6.10.0", "@octokit/types@^6.12.2", "@octokit/types@^6.14.2", "@octokit/types@^6.16.2", "@octokit/types@^6.8.2": version "6.16.4" resolved "https://registry.npmjs.org/@octokit/types/-/types-6.16.4.tgz#d24f5e1bacd2fe96d61854b5bda0e88cf8288dfe" integrity sha512-UxhWCdSzloULfUyamfOg4dJxV9B+XjgrIZscI0VCbp4eNrjmorGEw+4qdwcpTsu6DIrm9tQsFQS2pK5QkqQ04A== dependencies: "@octokit/openapi-types" "^7.3.2" +"@octokit/types@^6.0.3", "@octokit/types@^6.16.1", "@octokit/types@^6.39.0": + version "6.41.0" + resolved "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz#e58ef78d78596d2fb7df9c6259802464b5f84a04" + integrity sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg== + dependencies: + "@octokit/openapi-types" "^12.11.0" + "@octokit/types@^6.27.1": version "6.34.0" resolved "https://registry.npmjs.org/@octokit/types/-/types-6.34.0.tgz#c6021333334d1ecfb5d370a8798162ddf1ae8218" @@ -5793,38 +5701,31 @@ dependencies: "@octokit/openapi-types" "^11.2.0" -"@octokit/types@^6.35.0": - version "6.37.0" - resolved "https://registry.npmjs.org/@octokit/types/-/types-6.37.0.tgz#32eb78edb34cf5cea4ba5753ab8db75b776d617a" - integrity sha512-BXWQhFKRkjX4dVW5L2oYa0hzWOAqsEsujXsQLSdepPoDZfYdubrD1KDGpyNldGXtR8QM/WezDcxcIN1UKJMGPA== +"@octokit/types@^7.0.0": + version "7.0.0" + resolved "https://registry.npmjs.org/@octokit/types/-/types-7.0.0.tgz#3ecee92edff53a93ecd75d6b9d6620574d2048ca" + integrity sha512-8uSDc66p6+wADn6lh6lA7I3ZTIapn7F/dfpsiDztVjEr6kkyKR3qPqa4lgEX92O/8iJoDeGcscKRXGAjCSR/zg== dependencies: - "@octokit/openapi-types" "^12.4.0" - -"@octokit/types@^6.39.0": - version "6.39.0" - resolved "https://registry.npmjs.org/@octokit/types/-/types-6.39.0.tgz#46ce28ca59a3d4bac0e487015949008302e78eee" - integrity sha512-Mq4N9sOAYCitTsBtDdRVrBE80lIrMBhL9Jbrw0d+j96BAzlq4V+GLHFJbHokEsVvO/9tQupQdoFdgVYhD2C8UQ== - dependencies: - "@octokit/openapi-types" "^12.7.0" + "@octokit/openapi-types" "^13.0.0" "@octokit/webhooks-methods@^3.0.0": version "3.0.0" resolved "https://registry.npmjs.org/@octokit/webhooks-methods/-/webhooks-methods-3.0.0.tgz#4f4443605233f46abc5f85a857ba105095aa1181" integrity sha512-FAIyAchH9JUKXugKMC17ERAXM/56vVJekwXOON46pmUDYfU7uXB4cFY8yc8nYr5ABqVI7KjRKfFt3mZF7OcyUA== -"@octokit/webhooks-types@6.3.1": - version "6.3.1" - resolved "https://registry.npmjs.org/@octokit/webhooks-types/-/webhooks-types-6.3.1.tgz#af0c31c81ccc3818de01df1977463b78c7c02b4f" - integrity sha512-pHjIWGLDldWKuuax5ZDzQeTSnHN6/9RbDaXYEtHwlbW5SPFwTwy3xhJ552qJH6kHP0M3k5t5JVpa0f6fR9MooQ== +"@octokit/webhooks-types@6.3.6": + version "6.3.6" + resolved "https://registry.npmjs.org/@octokit/webhooks-types/-/webhooks-types-6.3.6.tgz#b211e42386463175ebc652c86d5c7433675986fc" + integrity sha512-x6yBtWobk20OhOiJ4VWsH3iJ/30IG+VoDWSgS4Tiyidi2KOiBS3bL+AJrNuq4OyNuWOM/FbHQTp6KEZs1oPD/g== "@octokit/webhooks@^10.0.0": - version "10.1.1" - resolved "https://registry.npmjs.org/@octokit/webhooks/-/webhooks-10.1.1.tgz#8fdbddd2b0ee9c53ddabb47c346032fcc46fd5ff" - integrity sha512-/PhAXTA5M47sM/LxFXfTQ8WUEFsNQog29VfcxYCtsJtRz3NoaDAirH4gT6/Z81BrC8Vw3JA7mF+yFUN7RmxWGw== + version "10.1.5" + resolved "https://registry.npmjs.org/@octokit/webhooks/-/webhooks-10.1.5.tgz#ba79b49ef0047a3cae7885387c5f20d4b341cd41" + integrity sha512-sQkxM6l9HdG1vsHFj2T/o8SnCPDDxovcs0rsSd4UR5jJFNPCPIBRmFNVHfM37nncLKuTwIpmMeePphNf1k6Waw== dependencies: "@octokit/request-error" "^3.0.0" "@octokit/webhooks-methods" "^3.0.0" - "@octokit/webhooks-types" "6.3.1" + "@octokit/webhooks-types" "6.3.6" aggregate-error "^3.1.0" "@open-draft/until@^1.0.3": @@ -5876,14 +5777,6 @@ resolved "https://registry.npmjs.org/@opentelemetry/api/-/api-1.0.4.tgz#a167e46c10d05a07ab299fc518793b0cff8f6924" integrity sha512-BuJuXRSJNQ3QoKA6GWWDyuLpOUck+9hAXNMCnrloc1aWVoy6Xq6t9PUV08aBZ4Lutqq2LEHM486bpZqoViScog== -"@parcel/watcher@2.0.4": - version "2.0.4" - resolved "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.0.4.tgz#f300fef4cc38008ff4b8c29d92588eced3ce014b" - integrity sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg== - dependencies: - node-addon-api "^3.2.1" - node-gyp-build "^4.3.0" - "@peculiar/asn1-schema@^2.1.6": version "2.2.0" resolved "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.2.0.tgz#d8a54527685c8dee518e6448137349444310ad64" @@ -5964,17 +5857,17 @@ resolved "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" integrity sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA= -"@react-hookz/deep-equal@^1.0.2": - version "1.0.2" - resolved "https://registry.npmjs.org/@react-hookz/deep-equal/-/deep-equal-1.0.2.tgz#4e8bdeda027379dcf8b62a42e5f75f0351b11b35" - integrity sha512-cM5kPFb6EFH5q52WzRxfRX9+8g5kq78McWOYs6e1seo+nK6NpfLupT5uOCIJp37jU8ayd4Su8ni3HRFTN2C2kg== +"@react-hookz/deep-equal@^1.0.3": + version "1.0.3" + resolved "https://registry.npmjs.org/@react-hookz/deep-equal/-/deep-equal-1.0.3.tgz#e044bca38c1612ea8c1596ef858ef7cfea49dd7a" + integrity sha512-lGZR5l3YRjzeIOHtJhiq96vQKrsq+9lsCyv+0fROMQeSNWtLLzX3R+psHNi6nsoP3XEhspiZ92nsiPmdNo8ztQ== "@react-hookz/web@^15.0.0": - version "15.0.1" - resolved "https://registry.npmjs.org/@react-hookz/web/-/web-15.0.1.tgz#a6e5460dd16e54ccc0b899e1eed4ae29e871060f" - integrity sha512-nvVLUsDFv3fpZcINoy3I4MeaX8+yoKU21m2Ey2g0VAVqOMp+0GBBC6OHkzT2lRa2fiPIVuJwlmboSKQt7segfQ== + version "15.1.0" + resolved "https://registry.npmjs.org/@react-hookz/web/-/web-15.1.0.tgz#62f7cedb98f345a1cdc7437673ea93dfb4d753d1" + integrity sha512-AsmqeZDg22JnpQS1hGIjLbue4LPmcsgyoPzgmKt6WDeqIUWFL20cgowiGBMFNLvL5Cc9XdusVY720S+CpLyT4Q== dependencies: - "@react-hookz/deep-equal" "^1.0.2" + "@react-hookz/deep-equal" "^1.0.3" "@rjsf/core@^3.2.1": version "3.2.1" @@ -6039,9 +5932,9 @@ zustand "3.6.9" "@roadiehq/backstage-plugin-github-pull-requests@^2.0.0": - version "2.2.4" - resolved "https://registry.npmjs.org/@roadiehq/backstage-plugin-github-pull-requests/-/backstage-plugin-github-pull-requests-2.2.4.tgz#7df512d6f55cfccf448cf3abc58364e2544e7fab" - integrity sha512-oEJLxZ3L+GnWuVLFmxXNjeRthuJEV7u1EFbLthoW3XfR5vQ5oc81Su/3WF2rO2Atng1QkPpSPa7oXWff2NsJJw== + version "2.2.5" + resolved "https://registry.npmjs.org/@roadiehq/backstage-plugin-github-pull-requests/-/backstage-plugin-github-pull-requests-2.2.5.tgz#280fb55f6c2378cc8eb32e2acf25a0522a2ef110" + integrity sha512-8zK4uw5FhqfOwUF0oOp2cXsh+HQzsmmynN5WsLmir6v5CX6p8LPEZbb9aBDD2Gx2pC/s3776xQO95kCbizeUxg== dependencies: "@backstage/catalog-model" "^1.0.0" "@backstage/core-components" "^0.10.0" @@ -6939,7 +6832,7 @@ resolved "https://registry.npmjs.org/@types/expect/-/expect-1.20.4.tgz#8288e51737bf7e3ab5d7c77bfa695883745264e5" integrity sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg== -"@types/express-serve-static-core@*", "@types/express-serve-static-core@4.17.29", "@types/express-serve-static-core@^4.17.18", "@types/express-serve-static-core@^4.17.5": +"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.18", "@types/express-serve-static-core@^4.17.5": version "4.17.29" resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.29.tgz#2a1795ea8e9e9c91b4a4bbe475034b20c1ec711c" integrity sha512-uMd++6dMKS32EOuw1Uli3e3BPgdLIXmezcfHv7N4c1s3gkhikBplORPpMq3fuWkxncZN1reb16d5n8yhQ80x7Q== @@ -6948,6 +6841,15 @@ "@types/qs" "*" "@types/range-parser" "*" +"@types/express-serve-static-core@4.17.30": + version "4.17.30" + resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.30.tgz#0f2f99617fa8f9696170c46152ccf7500b34ac04" + integrity sha512-gstzbTWro2/nFed1WXtf+TtrpwxH7Ggs4RLYTLbeVgIkUQOI3WG/JKjgeOU1zXDvezllupjrf8OPIdvTbIaVOQ== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + "@types/express-session@^1.17.2": version "1.17.5" resolved "https://registry.npmjs.org/@types/express-session/-/express-session-1.17.5.tgz#13f48852b4aa60ff595835faeb4b4dda0ba0866e" @@ -7069,9 +6971,9 @@ integrity sha512-K3e+NZlpCKd6Bd/EIdqjFJRFHbrq5TzPPLwREk5Iv/YoIjQrs6ljdAUCo+Lb2xFlGNOjGSE0dqsVD19cZL137w== "@types/inquirer@^8.1.3": - version "8.2.2" - resolved "https://registry.npmjs.org/@types/inquirer/-/inquirer-8.2.2.tgz#7ec5f166026b55b10df011521c8a63920cb84a7a" - integrity sha512-HXoFOl+KS4yvmUjisi83VpuSBOeeXIzdJfoT/v2pUruqybpHy0Dz1DyXy3E2jNH0cSVKJZV92VOnFBwJR6k83A== + version "8.2.3" + resolved "https://registry.npmjs.org/@types/inquirer/-/inquirer-8.2.3.tgz#985515d04879a0d0c1f5f49ec375767410ba9dab" + integrity sha512-ZlBqD+8WIVNy3KIVkl+Qne6bGLW2erwN0GJXY9Ri/9EMbyupee3xw3H0Mmv5kJoLyNpfd/oHlwKxO0DUDH7yWA== dependencies: "@types/through" "*" @@ -7186,7 +7088,7 @@ "@types/json5@^0.0.29": version "0.0.29" resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" - integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== + integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= "@types/jsonwebtoken@^8.3.3", "@types/jsonwebtoken@^8.5.0": version "8.5.0" @@ -7217,14 +7119,14 @@ "@types/node" "*" "@types/lodash@^4.14.151", "@types/lodash@^4.14.173", "@types/lodash@^4.14.175": - version "4.14.182" - resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.182.tgz#05301a4d5e62963227eaafe0ce04dd77c54ea5c2" - integrity sha512-/THyiqyQAP9AfARo4pF+aCGcyiQ94tX/Is2I7HofNRqoYLgN1PBoOWu2/zTA5zMxzP5EFutMtWtGAFRKUe961Q== + version "4.14.184" + resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.184.tgz#23f96cd2a21a28e106dc24d825d4aa966de7a9fe" + integrity sha512-RoZphVtHbxPZizt4IcILciSWiC6dcn+eZ8oX9IWEYfDMcocdd42f7NPI6fQj+6zI8y4E0L7gu2pcZKLGTRaV9Q== "@types/long@^4.0.0", "@types/long@^4.0.1": - version "4.0.1" - resolved "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz#459c65fa1867dafe6a8f322c4c51695663cc55e9" - integrity sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w== + version "4.0.2" + resolved "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz#b74129719fc8d11c01868010082d483b7545591a" + integrity sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA== "@types/lru-cache@^5.1.0": version "5.1.1" @@ -7236,20 +7138,15 @@ resolved "https://registry.npmjs.org/@types/lunr/-/lunr-2.3.4.tgz#728f445855818fb17776d10ef4678f278072eb03" integrity sha512-j4x4XJwZvorEUbA519VdQ5b9AOU9TSvfi8tvxMAfP8XzNLtFex7A8vFQwqOx3WACbV0KMXbACV3cZl4/gynQ7g== -"@types/luxon@*": - version "2.4.0" - resolved "https://registry.npmjs.org/@types/luxon/-/luxon-2.4.0.tgz#897d3abc23b68d78b69d76a12c21e01eb5adab95" - integrity sha512-oCavjEjRXuR6URJEtQm0eBdfsBiEcGBZbq21of8iGkeKxU1+1xgKuFPClaBZl2KB8ZZBSWlgk61tH6Mf+nvZVw== - -"@types/luxon@^3.0.0": +"@types/luxon@*", "@types/luxon@^3.0.0": version "3.0.0" resolved "https://registry.npmjs.org/@types/luxon/-/luxon-3.0.0.tgz#47fb7891e41875fce7018a8bd3d09b204c5621f5" integrity sha512-Lx+EZoJxUKw4dp8uei9XiUVNlgkYmax5+ovqt6Xf3LzJOnWhlfJw/jLBmqfGVwOP/pDr4HT8bI1WtxK0IChMLw== "@types/marked@^4.0.0": - version "4.0.3" - resolved "https://registry.npmjs.org/@types/marked/-/marked-4.0.3.tgz#2098f4a77adaba9ce881c9e0b6baf29116e5acc4" - integrity sha512-HnMWQkLJEf/PnxZIfbm0yGJRRZYYMhb++O9M36UCTA9z53uPvVoSlAwJr3XOpDEryb7Hwl1qAx/MV6YIW1RXxg== + version "4.0.5" + resolved "https://registry.npmjs.org/@types/marked/-/marked-4.0.5.tgz#3e900fa331a9b1a98f7a8a50f0f39b4bf2b6469f" + integrity sha512-jMN2moJ+lSf1VZXQo3VXeMCjoXuciVONig8+U0YNBop5aBvQw4qkolx1Nzn1i0T8L2l9IZ3jju6bS1pPwlaY1w== "@types/mdast@^3.0.0", "@types/mdast@^3.0.3": version "3.0.10" @@ -7325,7 +7222,7 @@ "@types/node" "*" form-data "^3.0.0" -"@types/node@*", "@types/node@>= 8", "@types/node@>=12.12.47", "@types/node@>=13.7.0": +"@types/node@*", "@types/node@>=12.12.47", "@types/node@>=13.7.0": version "17.0.25" resolved "https://registry.npmjs.org/@types/node/-/node-17.0.25.tgz#527051f3c2f77aa52e5dc74e45a3da5fb2301448" integrity sha512-wANk6fBrUwdpY4isjWrKTufkrXdu1D2YHCot2fD/DfWxF5sMrVSA+KN7ydckvaTCh0HiqX9IVl0L5/ZoXg5M7w== @@ -7335,6 +7232,11 @@ resolved "https://registry.npmjs.org/@types/node/-/node-12.20.24.tgz#c37ac69cb2948afb4cef95f424fa0037971a9a5c" integrity sha512-yxDeaQIAJlMav7fH5AQqPH1u8YIuhYJXYBzxaQ4PifsU0GDO38MSdmEDeRlIxrKbC6NbEaaEHDanWb+y30U8SQ== +"@types/node@>= 8": + version "18.7.4" + resolved "https://registry.npmjs.org/@types/node/-/node-18.7.4.tgz#95baa50846ae112a7376869d49fec23b2506c69d" + integrity sha512-RzRcw8c0B8LzryWOR4Wj7YOTFXvdYKwvrb6xQQyuDfnlTxwYXGCV5RZ/TEbq5L5kn+w3rliHAUyRcG1RtbmTFg== + "@types/node@^10.1.0", "@types/node@^10.12.0": version "10.17.60" resolved "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz#35f3d6213daed95da7f0f73e75bcc6980e90597b" @@ -7356,9 +7258,9 @@ integrity sha512-qjd88DrCxupx/kJD5yQgZdcYKZKSIGBVDIBE1/LTGcNm3d2Np/jxojkdePDdfnBHJc5W7vSMpbJ1aB7p/Py69A== "@types/node@^16.0.0", "@types/node@^16.11.26", "@types/node@^16.9.2": - version "16.11.47" - resolved "https://registry.npmjs.org/@types/node/-/node-16.11.47.tgz#efa9e3e0f72e7aa6a138055dace7437a83d9f91c" - integrity sha512-fpP+jk2zJ4VW66+wAMFoBJlx1bxmBKx4DUFf68UHgdGCOuyUTDlLWqsaNPJh7xhNDykyJ9eIzAygilP/4WoN8g== + version "16.11.49" + resolved "https://registry.npmjs.org/@types/node/-/node-16.11.49.tgz#560b1ea774b61e19a89c3fc72d2dcaa3863f38b2" + integrity sha512-Abq9fBviLV93OiXMu+f6r0elxCzRwc0RC5f99cU892uBITL44pTvgvEqlRlPRi8EGcO1z7Cp8A4d0s/p3J/+Nw== "@types/normalize-package-data@^2.4.0": version "2.4.1" @@ -7452,9 +7354,9 @@ "@types/passport" "*" "@types/passport@*", "@types/passport@^1.0.3": - version "1.0.9" - resolved "https://registry.npmjs.org/@types/passport/-/passport-1.0.9.tgz#b32fa8f7485dace77a9b58e82d0c92908f6e8387" - integrity sha512-9+ilzUhmZQR4JP49GdC2O4UdDE3POPLwpmaTC/iLkW7l0TZCXOo1zsTnnlXPq6rP1UsUZPfbAV4IUdiwiXyC7g== + version "1.0.10" + resolved "https://registry.npmjs.org/@types/passport/-/passport-1.0.10.tgz#c518f2bae8b1538b7be71ee7f9220fbd3f569f05" + integrity sha512-IZamnXuN7mY+2/v8bAW6nuTcKiay7gXBBcMBZ8n7YHB4u5DwsWoJaNrHdAQ8PZEODRjCv3oHOg76CYJ40j9RqA== dependencies: "@types/express" "*" @@ -7652,9 +7554,9 @@ integrity sha512-KQf+QAMWKMrtBMsB8/24w53tEsxllMj6TuA80TT/5igJalLI/zm0L3oXRbIAl4Ohfc85gyHX/jhMwsVkmhLU4A== "@types/semver@^7.3.8": - version "7.3.10" - resolved "https://registry.npmjs.org/@types/semver/-/semver-7.3.10.tgz#5f19ee40cbeff87d916eedc8c2bfe2305d957f73" - integrity sha512-zsv3fsC7S84NN6nPK06u79oWgrPVd0NvOyqgghV1haPaFcVxIrP4DLomRwGAXk0ui4HZA7mOcSFL98sMVW9viw== + version "7.3.12" + resolved "https://registry.npmjs.org/@types/semver/-/semver-7.3.12.tgz#920447fdd78d76b19de0438b7f60df3c4a80bf1c" + integrity sha512-WwA1MW0++RfXmCr12xeYOOC5baSC9mSb0ZqCquFzKhcoF4TvHu5MKOuXsncgZcpVFhB1pXd5hZmM0ryAoCp12A== "@types/serve-handler@^6.1.0": version "6.1.1" @@ -7767,9 +7669,9 @@ "@types/superagent" "*" "@types/svgo@^2.6.2": - version "2.6.3" - resolved "https://registry.npmjs.org/@types/svgo/-/svgo-2.6.3.tgz#0786d8329b67cd48d84e57cb92b79832b85e6c8e" - integrity sha512-5sP0Xgo0dXppY0tbYF6TevB/1+tzFLuu71XXxC/zGvQAn9PW7y+DwtDO81g0ZUPye00K6tPwtsLDOpARa0mFcA== + version "2.6.4" + resolved "https://registry.npmjs.org/@types/svgo/-/svgo-2.6.4.tgz#b7298fc1dd687539fd63fc818b00146d96e68836" + integrity sha512-l4cmyPEckf8moNYHdJ+4wkHvFxjyW6ulm9l4YGaOxeyBWPhBOT0gvni1InpFPdzx1dKf/2s62qGITwxNWnPQng== dependencies: "@types/node" "*" @@ -7865,9 +7767,9 @@ "@types/node" "*" "@types/webpack-env@^1.15.2", "@types/webpack-env@^1.15.3": - version "1.17.0" - resolved "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.17.0.tgz#f99ce359f1bfd87da90cc4a57cab0a18f34a48d0" - integrity sha512-eHSaNYEyxRA5IAG0Ym/yCyf86niZUIF/TpWKofQI/CVfh5HsMEUyfE2kwFxha4ow0s5g0LfISQxpDKjbRDrizw== + version "1.18.0" + resolved "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.18.0.tgz#ed6ecaa8e5ed5dfe8b2b3d00181702c9925f13fb" + integrity sha512-56/MAlX5WMsPVbOg7tAxnYvNYMMWr/QJiIp6BxVSW3JJXUVzzOn64qW8TzQyMSqSUFM2+PVI4aUHcHOzIz/1tg== "@types/webpack@^5.28.0": version "5.28.0" @@ -7948,13 +7850,13 @@ integrity sha512-fbF6oTd4sGGy0xjHPKAt+eS2CrxJ3+6gQ3FGcBoIJR2TLAyCkCyI8JqZNy+FeON0AhVgNJoUumVoZQjBFUqHkw== "@typescript-eslint/eslint-plugin@^5.9.0": - version "5.32.0" - resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.32.0.tgz#e27e38cffa4a61226327c874a7be965e9a861624" - integrity sha512-CHLuz5Uz7bHP2WgVlvoZGhf0BvFakBJKAD/43Ty0emn4wXWv5k01ND0C0fHcl/Im8Td2y/7h44E9pca9qAu2ew== + version "5.33.1" + resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.33.1.tgz#c0a480d05211660221eda963cc844732fe9b1714" + integrity sha512-S1iZIxrTvKkU3+m63YUOxYPKaP+yWDQrdhxTglVDVEVBf+aCSw85+BmJnyUaQQsk5TXFG/LpBu9fa+LrAQ91fQ== dependencies: - "@typescript-eslint/scope-manager" "5.32.0" - "@typescript-eslint/type-utils" "5.32.0" - "@typescript-eslint/utils" "5.32.0" + "@typescript-eslint/scope-manager" "5.33.1" + "@typescript-eslint/type-utils" "5.33.1" + "@typescript-eslint/utils" "5.33.1" debug "^4.3.4" functional-red-black-tree "^1.0.1" ignore "^5.2.0" @@ -7975,13 +7877,13 @@ eslint-utils "^3.0.0" "@typescript-eslint/parser@^5.9.0": - version "5.32.0" - resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.32.0.tgz#1de243443bc6186fb153b9e395b842e46877ca5d" - integrity sha512-IxRtsehdGV9GFQ35IGm5oKKR2OGcazUoiNBxhRV160iF9FoyuXxjY+rIqs1gfnd+4eL98OjeGnMpE7RF/NBb3A== + version "5.33.1" + resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.33.1.tgz#e4b253105b4d2a4362cfaa4e184e2d226c440ff3" + integrity sha512-IgLLtW7FOzoDlmaMoXdxG8HOCByTBXrB1V2ZQYSEV1ggMmJfAkMWTwUjjzagS6OkfpySyhKFkBw7A9jYmcHpZA== dependencies: - "@typescript-eslint/scope-manager" "5.32.0" - "@typescript-eslint/types" "5.32.0" - "@typescript-eslint/typescript-estree" "5.32.0" + "@typescript-eslint/scope-manager" "5.33.1" + "@typescript-eslint/types" "5.33.1" + "@typescript-eslint/typescript-estree" "5.33.1" debug "^4.3.4" "@typescript-eslint/scope-manager@5.20.0": @@ -7992,13 +7894,13 @@ "@typescript-eslint/types" "5.20.0" "@typescript-eslint/visitor-keys" "5.20.0" -"@typescript-eslint/scope-manager@5.32.0": - version "5.32.0" - resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.32.0.tgz#763386e963a8def470580cc36cf9228864190b95" - integrity sha512-KyAE+tUON0D7tNz92p1uetRqVJiiAkeluvwvZOqBmW9z2XApmk5WSMV9FrzOroAcVxJZB3GfUwVKr98Dr/OjOg== +"@typescript-eslint/scope-manager@5.33.1": + version "5.33.1" + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.33.1.tgz#8d31553e1b874210018ca069b3d192c6d23bc493" + integrity sha512-8ibcZSqy4c5m69QpzJn8XQq9NnqAToC8OdH/W6IXPXv83vRyEDPYLdjAlUx8h/rbusq6MkW4YdQzURGOqsn3CA== dependencies: - "@typescript-eslint/types" "5.32.0" - "@typescript-eslint/visitor-keys" "5.32.0" + "@typescript-eslint/types" "5.33.1" + "@typescript-eslint/visitor-keys" "5.33.1" "@typescript-eslint/scope-manager@5.9.0": version "5.9.0" @@ -8008,12 +7910,12 @@ "@typescript-eslint/types" "5.9.0" "@typescript-eslint/visitor-keys" "5.9.0" -"@typescript-eslint/type-utils@5.32.0": - version "5.32.0" - resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.32.0.tgz#45a14506fe3fb908600b4cef2f70778f7b5cdc79" - integrity sha512-0gSsIhFDduBz3QcHJIp3qRCvVYbqzHg8D6bHFsDMrm0rURYDj+skBK2zmYebdCp+4nrd9VWd13egvhYFJj/wZg== +"@typescript-eslint/type-utils@5.33.1": + version "5.33.1" + resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.33.1.tgz#1a14e94650a0ae39f6e3b77478baff002cec4367" + integrity sha512-X3pGsJsD8OiqhNa5fim41YtlnyiWMF/eKsEZGsHID2HcDqeSC5yr/uLOeph8rNF2/utwuI0IQoAK3fpoxcLl2g== dependencies: - "@typescript-eslint/utils" "5.32.0" + "@typescript-eslint/utils" "5.33.1" debug "^4.3.4" tsutils "^3.21.0" @@ -8022,10 +7924,10 @@ resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.20.0.tgz#fa39c3c2aa786568302318f1cb51fcf64258c20c" integrity sha512-+d8wprF9GyvPwtoB4CxBAR/s0rpP25XKgnOvMf/gMXYDvlUC3rPFHupdTQ/ow9vn7UDe5rX02ovGYQbv/IUCbg== -"@typescript-eslint/types@5.32.0": - version "5.32.0" - resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.32.0.tgz#484273021eeeae87ddb288f39586ef5efeb6dcd8" - integrity sha512-EBUKs68DOcT/EjGfzywp+f8wG9Zw6gj6BjWu7KV/IYllqKJFPlZlLSYw/PTvVyiRw50t6wVbgv4p9uE2h6sZrQ== +"@typescript-eslint/types@5.33.1": + version "5.33.1" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.33.1.tgz#3faef41793d527a519e19ab2747c12d6f3741ff7" + integrity sha512-7K6MoQPQh6WVEkMrMW5QOA5FO+BOwzHSNd0j3+BlBwd6vtzfZceJ8xJ7Um2XDi/O3umS8/qDX6jdy2i7CijkwQ== "@typescript-eslint/types@5.9.0": version "5.9.0" @@ -8045,13 +7947,13 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/typescript-estree@5.32.0": - version "5.32.0" - resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.32.0.tgz#282943f34babf07a4afa7b0ff347a8e7b6030d12" - integrity sha512-ZVAUkvPk3ITGtCLU5J4atCw9RTxK+SRc6hXqLtllC2sGSeMFWN+YwbiJR9CFrSFJ3w4SJfcWtDwNb/DmUIHdhg== +"@typescript-eslint/typescript-estree@5.33.1": + version "5.33.1" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.33.1.tgz#a573bd360790afdcba80844e962d8b2031984f34" + integrity sha512-JOAzJ4pJ+tHzA2pgsWQi4804XisPHOtbvwUyqsuuq8+y5B5GMZs7lI1xDWs6V2d7gE/Ez5bTGojSK12+IIPtXA== dependencies: - "@typescript-eslint/types" "5.32.0" - "@typescript-eslint/visitor-keys" "5.32.0" + "@typescript-eslint/types" "5.33.1" + "@typescript-eslint/visitor-keys" "5.33.1" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" @@ -8071,15 +7973,15 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/utils@5.32.0": - version "5.32.0" - resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.32.0.tgz#eccb6b672b94516f1afc6508d05173c45924840c" - integrity sha512-W7lYIAI5Zlc5K082dGR27Fczjb3Q57ECcXefKU/f0ajM5ToM0P+N9NmJWip8GmGu/g6QISNT+K6KYB+iSHjXCQ== +"@typescript-eslint/utils@5.33.1": + version "5.33.1" + resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.33.1.tgz#171725f924fe1fe82bb776522bb85bc034e88575" + integrity sha512-uphZjkMaZ4fE8CR4dU7BquOV6u0doeQAr8n6cQenl/poMaIyJtBu8eys5uk6u5HiDH01Mj5lzbJ5SfeDz7oqMQ== dependencies: "@types/json-schema" "^7.0.9" - "@typescript-eslint/scope-manager" "5.32.0" - "@typescript-eslint/types" "5.32.0" - "@typescript-eslint/typescript-estree" "5.32.0" + "@typescript-eslint/scope-manager" "5.33.1" + "@typescript-eslint/types" "5.33.1" + "@typescript-eslint/typescript-estree" "5.33.1" eslint-scope "^5.1.1" eslint-utils "^3.0.0" @@ -8103,12 +8005,12 @@ "@typescript-eslint/types" "5.20.0" eslint-visitor-keys "^3.0.0" -"@typescript-eslint/visitor-keys@5.32.0": - version "5.32.0" - resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.32.0.tgz#b9715d0b11fdb5dd10fd0c42ff13987470525394" - integrity sha512-S54xOHZgfThiZ38/ZGTgB2rqx51CMJ5MCfVT2IplK4Q7hgzGfe0nLzLCcenDnc/cSjP568hdeKfeDcBgqNHD/g== +"@typescript-eslint/visitor-keys@5.33.1": + version "5.33.1" + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.33.1.tgz#0155c7571c8cd08956580b880aea327d5c34a18b" + integrity sha512-nwIxOK8Z2MPWltLKMLOEZwmfBZReqUdbEoHQXeCpa+sRVARe5twpJGHCB4dk9903Yaf0nMAlGbQfaAH92F60eg== dependencies: - "@typescript-eslint/types" "5.32.0" + "@typescript-eslint/types" "5.33.1" eslint-visitor-keys "^3.3.0" "@typescript-eslint/visitor-keys@5.9.0": @@ -8405,7 +8307,7 @@ acorn@^8.8.0: add-stream@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa" - integrity sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ== + integrity sha1-anmQQ3ynNtXhKI25K9MmbV9csqo= address@^1.0.1, address@^1.1.2: version "1.1.2" @@ -8424,19 +8326,19 @@ agent-base@6, agent-base@^6.0.2: dependencies: debug "4" -agentkeepalive@^4.1.3, agentkeepalive@^4.2.1: - version "4.2.1" - resolved "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz#a7975cbb9f83b367f06c90cc51ff28fe7d499717" - integrity sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA== +agentkeepalive@^4.1.3, agentkeepalive@^4.1.4, agentkeepalive@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.0.tgz#616ce94ccb41d1a39a45d203d8076fe98713062d" + integrity sha512-0PhAp58jZNw13UJv7NVdTGb0ZcghHUb3DrZ046JiiJY/BOaTTpbwdHq2VObPCBV8M2GPh7sgrJ3AQ8Ey468LJw== dependencies: debug "^4.1.0" depd "^1.1.2" humanize-ms "^1.2.1" -agentkeepalive@^4.1.4, agentkeepalive@^4.2.0: - version "4.2.0" - resolved "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.0.tgz#616ce94ccb41d1a39a45d203d8076fe98713062d" - integrity sha512-0PhAp58jZNw13UJv7NVdTGb0ZcghHUb3DrZ046JiiJY/BOaTTpbwdHq2VObPCBV8M2GPh7sgrJ3AQ8Ey468LJw== +agentkeepalive@^4.2.1: + version "4.2.1" + resolved "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz#a7975cbb9f83b367f06c90cc51ff28fe7d499717" + integrity sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA== dependencies: debug "^4.1.0" depd "^1.1.2" @@ -8500,9 +8402,9 @@ alphanum-sort@^1.0.2: integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= already@^3.2.0: - version "3.3.0" - resolved "https://registry.npmjs.org/already/-/already-3.3.0.tgz#a5e5becd167cf537b45f8f1c23d331488ed77003" - integrity sha512-ADGyKddqEp8t/Wu4ITc0y9GGsgZDgyMeMk38AM5qrPK7VEjNAYD87QGTGGgNhSQahmjw76V3mi+3fJRwPJXcTw== + version "3.4.0" + resolved "https://registry.npmjs.org/already/-/already-3.4.0.tgz#d32aab4be75ae2352a16f26d688393fc79675c18" + integrity sha512-l2neHYJryLga4BiKsVdO3c3E5dCl1OgkKS4pr3nDyxQRABywIyI3MuNaUypj2tLQKy7PFJ5CUrQ7Waa+eVn4Fg== anafanafo@2.0.0: version "2.0.0" @@ -8612,10 +8514,10 @@ apollo-reporting-protobuf@^3.3.2: dependencies: "@apollo/protobufjs" "1.2.4" -apollo-server-core@^3.10.0: - version "3.10.0" - resolved "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-3.10.0.tgz#6680b4eb4699829ed50d8a592721ee5e5e11e041" - integrity sha512-ln5drIk3oW/ycYhcYL9TvM7vRf7OZwJrgHWlnjnMakozBQIBSumdMi4pN001DhU9mVBWTfnmBv3CdcxJdGXIvA== +apollo-server-core@^3.10.1: + version "3.10.1" + resolved "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-3.10.1.tgz#01f9ffc57c7d15c27bd7f89d65f45522aa3f3c3d" + integrity sha512-UFFziv6h15QbKRZOA6wLyr1Sle9kns3JuQ5DEB7OYe5AIoOJNjZkWXX/tmLFUrSmlnDDryi6Sf5pDzpYmUC/UA== dependencies: "@apollo/utils.keyvaluecache" "^1.0.1" "@apollo/utils.logger" "^1.0.0" @@ -8652,18 +8554,18 @@ apollo-server-errors@^3.3.1: resolved "https://registry.npmjs.org/apollo-server-errors/-/apollo-server-errors-3.3.1.tgz#ba5c00cdaa33d4cbd09779f8cb6f47475d1cd655" integrity sha512-xnZJ5QWs6FixHICXHxUfm+ZWqqxrNuPlQ+kj5m6RtEgIpekOPssH/SD9gf2B4HuWV0QozorrygwZnux8POvyPA== -apollo-server-express@^3.0.0, apollo-server-express@^3.10.0: - version "3.10.0" - resolved "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-3.10.0.tgz#fd276cf36031f7a02936cce6d170a35e1c084701" - integrity sha512-ww3tZq9I/x3Oxtux8xlHAZcSB0NNQ17lRlY6yCLk1F+jCzdcjuj0x8XNg0GdTrMowt5v43o786bU9VYKD5OVnA== +apollo-server-express@^3.0.0, apollo-server-express@^3.10.1: + version "3.10.1" + resolved "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-3.10.1.tgz#b0262d3c4919b554cff5872639bb13b694b5a217" + integrity sha512-r0esst3YGNdlphYiOrflfBqJ15VAZAhYhWSFo2kPF4knsIGK5HUkeqwjMr+fFDBn4DEfYzC+I1+LnsF/hFN8VQ== dependencies: "@types/accepts" "^1.3.5" "@types/body-parser" "1.19.2" "@types/cors" "2.8.12" "@types/express" "4.17.13" - "@types/express-serve-static-core" "4.17.29" + "@types/express-serve-static-core" "4.17.30" accepts "^1.3.5" - apollo-server-core "^3.10.0" + apollo-server-core "^3.10.1" apollo-server-types "^3.6.2" body-parser "^1.19.0" cors "^2.8.5" @@ -8687,13 +8589,13 @@ apollo-server-types@^3.6.2: apollo-server-env "^4.2.1" apollo-server@^3.0.0: - version "3.10.0" - resolved "https://registry.npmjs.org/apollo-server/-/apollo-server-3.10.0.tgz#ed4b0b4cc5e1f44260923a4317caa663f1a3824e" - integrity sha512-6PAz1XZFM9+K2+QUCXXxQIlZy5mhSOhg0rTx3ZNbIdy1fFNP+6ZjvQAJxBIyEtaKlC2yEPAOg4yi3u8WfuA3bA== + version "3.10.1" + resolved "https://registry.npmjs.org/apollo-server/-/apollo-server-3.10.1.tgz#ed0c39d706a6a232885680c001df3b90c5cb0902" + integrity sha512-2e7EN7Pw+vV7vP236zozuFVMLjeY6Q8lF1VzT+j32pZ2oYuTrDv+9lFjMjTBPK2yV5kzuOwJU4dWkWx5OKDEiQ== dependencies: "@types/express" "4.17.13" - apollo-server-core "^3.10.0" - apollo-server-express "^3.10.0" + apollo-server-core "^3.10.1" + apollo-server-express "^3.10.1" express "^4.17.1" aproba@^1.0.3: @@ -8749,9 +8651,9 @@ are-we-there-yet@^2.0.0: readable-stream "^3.6.0" are-we-there-yet@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd" - integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== + version "3.0.0" + resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.0.tgz#ba20bd6b553e31d62fc8c31bd23d22b95734390d" + integrity sha512-0GWpv50YSOcLXaN6/FAKY3vfRbllXWV2xvfA/oKJF8pzFhWXPV+yjhJXDBbjscDYowv7Yw1A3uigpzn5iEGTyw== dependencies: delegates "^1.0.0" readable-stream "^3.6.0" @@ -8842,7 +8744,7 @@ array-flatten@^2.1.2: array-ify@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" - integrity sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng== + integrity sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4= array-includes@^3.1.2, array-includes@^3.1.4: version "3.1.4" @@ -9080,9 +8982,9 @@ aws-sdk-mock@^5.2.1: traverse "^0.6.6" aws-sdk@^2.1122.0, aws-sdk@^2.814.0, aws-sdk@^2.840.0, aws-sdk@^2.948.0: - version "2.1189.0" - resolved "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1189.0.tgz#8dd6b48dd7896642af8e2f86e026932a28e380d5" - integrity sha512-EqluXSo8XAR086nF9UAtPYwUm82ZIRqg8OmHBRQyftcrD1Z0pqMmiuvacXoEAJ/4UU8KKafbpYarxx8rH/pZjQ== + version "2.1198.0" + resolved "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1198.0.tgz#9fc8aab80c45e80a21e5e7e88d8e89526ff5c413" + integrity sha512-blFAqK+6N1iKDseAlTwEwpfh3YdCluOwuo/Glv6+A5dvcq78/kqYB+haND8rXL1Esg4BiqVtafHp35FuwQzTTQ== dependencies: buffer "4.9.2" events "1.1.1" @@ -9460,21 +9362,21 @@ bignumber.js@^9.0.0: integrity sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA== bin-links@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/bin-links/-/bin-links-3.0.1.tgz#cc70ffb481988b22c527d3e6e454787876987a49" - integrity sha512-9vx+ypzVhASvHTS6K+YSGf7nwQdANoz7v6MTC0aCtYnOEZ87YvMf81aY737EZnGZdpbRM3sfWjO9oWkKmuIvyQ== + version "3.0.0" + resolved "https://registry.npmjs.org/bin-links/-/bin-links-3.0.0.tgz#8273063638919f6ba4fbe890de9438c1b3adf0b7" + integrity sha512-fC7kPWcEkAWBgCKxmAMqZldlIeHsXwQy9JXzrppAVQiukGiDKxmYesJcBKWu6UMwx/5GOfo10wtK/4zy+Xt/mg== dependencies: - cmd-shim "^5.0.0" + cmd-shim "^4.0.1" mkdirp-infer-owner "^2.0.0" npm-normalize-package-bin "^1.0.0" - read-cmd-shim "^3.0.0" + read-cmd-shim "^2.0.0" rimraf "^3.0.0" write-file-atomic "^4.0.0" binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + version "2.0.0" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c" + integrity sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow== binary-search@^1.3.5: version "1.3.6" @@ -9825,7 +9727,7 @@ builtin-status-codes@^3.0.0: builtins@^1.0.3: version "1.0.3" resolved "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" - integrity sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ== + integrity sha1-y5T662HIaWRR2zZTThQi+U8K7og= builtins@^5.0.0: version "5.0.1" @@ -9847,9 +9749,9 @@ byline@^5.0.0: integrity sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE= byte-size@^7.0.0: - version "7.0.1" - resolved "https://registry.npmjs.org/byte-size/-/byte-size-7.0.1.tgz#b1daf3386de7ab9d706b941a748dbfc71130dee3" - integrity sha512-crQdqyCwhokxwV1UyDzLZanhkugAgft7vt0qbbdt60C6Zf3CAiGmtUCylbtYwrU6loOUw3euGrNtW1J651ot1A== + version "7.0.0" + resolved "https://registry.npmjs.org/byte-size/-/byte-size-7.0.0.tgz#36528cd1ca87d39bd9abd51f5715dc93b6ceb032" + integrity sha512-NNiBxKgxybMBtWdmvx7ZITJi4ZG+CYUgwOSZTfqB1qogkRHrhbQE/R2r5Fh94X+InN5MCYz6SvB/ejHMj/HbsQ== bytes@3.0.0: version "3.0.0" @@ -10074,14 +9976,6 @@ chalk@2.4.2, chalk@^2.0.0, chalk@^2.1.0, chalk@^2.3.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" - integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - chalk@4.1.1: version "4.1.1" resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad" @@ -10197,7 +10091,7 @@ check-types@^11.1.1: resolved "https://registry.npmjs.org/check-types/-/check-types-11.1.2.tgz#86a7c12bf5539f6324eb0e70ca8896c0e38f3e2f" integrity sha512-tzWzvgePgLORb9/3a0YenggReLKAIb2owL03H2Xdoe5pKcUyWRSEQ8xfCar8t2SIAuEDwtmx2da1YB52YuHQMQ== -chokidar@^3.3.1, chokidar@^3.4.2, chokidar@^3.5.1, chokidar@^3.5.2, chokidar@^3.5.3: +chokidar@^3.3.1, chokidar@^3.4.2, chokidar@^3.5.2, chokidar@^3.5.3: version "3.5.3" resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== @@ -10291,22 +10185,17 @@ clean-stack@^2.0.0: resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== -cli-cursor@3.1.0, cli-cursor@^3.1.0: +cli-cursor@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== dependencies: restore-cursor "^3.1.0" -cli-spinners@2.6.1: - version "2.6.1" - resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d" - integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== - cli-spinners@^2.5.0: - version "2.7.0" - resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz#f815fd30b5f9eaac02db604c7a231ed7cb2f797a" - integrity sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw== + version "2.5.0" + resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.5.0.tgz#12763e47251bf951cb75c201dfa58ff1bcb2d047" + integrity sha512-PC+AmIuK04E6aeSs/pUccSujsTzBhu4HzC2dL+CfJB/Jcc2qTRbEwZQDfIUpt2Xl8BodYBEq8w4fc0kU2I9DjQ== cli-table3@~0.6.1: version "0.6.1" @@ -10427,10 +10316,10 @@ cluster-key-slot@^1.1.0: resolved "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.0.tgz#30474b2a981fb12172695833052bc0d01336d10d" integrity sha512-2Nii8p3RwAPiFwsnZvukotvow2rIHM+yQ6ZcBXGHdniadkYGZYiGmkHJIbZPIV9nfv7m/U1IPMVVcAhoWFeklw== -cmd-shim@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/cmd-shim/-/cmd-shim-5.0.0.tgz#8d0aaa1a6b0708630694c4dbde070ed94c707724" - integrity sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw== +cmd-shim@^4.0.1, cmd-shim@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/cmd-shim/-/cmd-shim-4.1.0.tgz#b3a904a6743e9fede4148c6f3800bf2a08135bdd" + integrity sha512-lb9L7EM4I/ZRVuljLPEtUJOP+xiQVknZ4ZMpMgEp4JzNldPb27HU03hi6K1/6CoIuit/Zm/LQXySErFeXxDprw== dependencies: mkdirp-infer-owner "^2.0.0" @@ -10600,12 +10489,12 @@ colorspace@1.1.x: color "3.0.x" text-hex "1.0.x" -columnify@^1.6.0: - version "1.6.0" - resolved "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz#6989531713c9008bb29735e61e37acf5bd553cf3" - integrity sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q== +columnify@^1.5.4: + version "1.5.4" + resolved "https://registry.npmjs.org/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" + integrity sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs= dependencies: - strip-ansi "^6.0.1" + strip-ansi "^3.0.0" wcwidth "^1.0.0" combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: @@ -10778,7 +10667,7 @@ compute-lcm@^1.1.0, compute-lcm@^1.1.2: concat-map@0.0.1: version "0.0.1" resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= concat-stream@^2.0.0: version "2.0.0" @@ -10827,9 +10716,9 @@ concurrently@^7.0.0: yargs "^17.3.1" config-chain@^1.1.12: - version "1.1.13" - resolved "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" - integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== + version "1.1.12" + resolved "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa" + integrity sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA== dependencies: ini "^1.3.4" proto-list "~1.2.1" @@ -10893,14 +10782,14 @@ content-type@~1.0.4: integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== conventional-changelog-angular@^5.0.12: - version "5.0.13" - resolved "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz#896885d63b914a70d4934b59d2fe7bde1832b28c" - integrity sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA== + version "5.0.12" + resolved "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.12.tgz#c979b8b921cbfe26402eb3da5bbfda02d865a2b9" + integrity sha512-5GLsbnkR/7A89RyHLvvoExbiGbd9xKdKqDTrArnPbOqBqG/2wIosu0fHwpeIRI8Tl94MhVNBXcLJZl92ZQ5USw== dependencies: compare-func "^2.0.0" q "^1.5.1" -conventional-changelog-core@^4.2.4: +conventional-changelog-core@^4.2.2: version "4.2.4" resolved "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz#e50d047e8ebacf63fac3dc67bf918177001e1e9f" integrity sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg== @@ -10949,9 +10838,9 @@ conventional-commits-filter@^2.0.7: modify-values "^1.0.0" conventional-commits-parser@^3.2.0: - version "3.2.4" - resolved "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz#a7d3b77758a202a9b2293d2112a8d8052c740972" - integrity sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q== + version "3.2.1" + resolved "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.1.tgz#ba44f0b3b6588da2ee9fd8da508ebff50d116ce2" + integrity sha512-OG9kQtmMZBJD/32NEw5IhN5+HnBqVjy03eC+I71I0oQRFA5rOgA4OtPOYG7mz1GkCfCNxn3gKIX8EiHJYuf1cA== dependencies: JSONStream "^1.0.4" is-text-path "^1.0.1" @@ -10959,6 +10848,7 @@ conventional-commits-parser@^3.2.0: meow "^8.0.0" split2 "^3.0.0" through2 "^4.0.0" + trim-off-newlines "^1.0.0" conventional-recommended-bump@^6.1.0: version "6.1.0" @@ -11049,16 +10939,11 @@ core-js@^3.4.1, core-js@^3.6.5: resolved "https://registry.npmjs.org/core-js/-/core-js-3.24.1.tgz#cf7724d41724154010a6576b7b57d94c5d66e64f" integrity sha512-0QTBSYSUZ6Gq21utGzkfITDylE8jWC9Ne1D2MrhvlsZBI1x39OdDIVbzSqtgMndIy6BlHxBXpMGqzZmnztg2rg== -core-util-is@1.0.2: +core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - cors@^2.8.5: version "2.8.5" resolved "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" @@ -11195,17 +11080,6 @@ cross-spawn@^5.1.0: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^6.0.0: - version "6.0.5" - resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" @@ -11487,9 +11361,9 @@ cypress-plugin-snapshots@^1.4.4: unidiff "1.0.2" cypress@^10.0.0: - version "10.4.0" - resolved "https://registry.npmjs.org/cypress/-/cypress-10.4.0.tgz#bb5b3b6588ad49eff172fecf5778cc0da2980e4e" - integrity sha512-OM7F8MRE01SHQRVVzunid1ZK1m90XTxYnl+7uZfIrB4CYqUDCrZEeSyCXzIbsS6qcaijVCAhqDL60SxG8N6hew== + version "10.6.0" + resolved "https://registry.npmjs.org/cypress/-/cypress-10.6.0.tgz#13f46867febf2c3715874ed5dce9c2e946b175fe" + integrity sha512-6sOpHjostp8gcLO34p6r/Ci342lBs8S5z9/eb3ZCQ22w2cIhMWGUoGKkosabPBfKcvRS9BE4UxybBtlIs8gTQA== dependencies: "@cypress/request" "^2.88.10" "@cypress/xvfb" "^1.2.4" @@ -11860,7 +11734,7 @@ debug@~4.1.0: debuglog@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" - integrity sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw== + integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= decamelize-keys@^1.1.0: version "1.1.0" @@ -11914,7 +11788,7 @@ decompress-response@^6.0.0: dedent@^0.7.0: version "0.7.0" resolved "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" - integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== + integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= deep-extend@0.6.0, deep-extend@^0.6.0: version "0.6.0" @@ -12012,7 +11886,7 @@ delayed-stream@~1.0.0: delegates@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== + integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= denque@^2.0.1: version "2.0.1" @@ -12065,7 +11939,7 @@ destroy@1.2.0: detect-indent@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" - integrity sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g== + integrity sha1-OHHMCmoALow+Wzz38zYmRnXwa50= detect-indent@^6.0.0: version "6.1.0" @@ -12110,7 +11984,7 @@ devtools-protocol@0.0.1019158: resolved "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1019158.tgz#4b08d06108a784a2134313149626ba55f030a86f" integrity sha512-wvq+KscQ7/6spEV7czhnZc9RM/woz1AY+/Vpd8/h2HFMwJSdTliu7f/yr1A6vDdJfKICZsShqsYpEQbdhg8AFQ== -dezalgo@1.0.3: +dezalgo@1.0.3, dezalgo@^1.0.0: version "1.0.3" resolved "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" integrity sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY= @@ -12118,14 +11992,6 @@ dezalgo@1.0.3: asap "^2.0.0" wrappy "1" -dezalgo@^1.0.0: - version "1.0.4" - resolved "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz#751235260469084c132157dfa857f386d4c33d81" - integrity sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig== - dependencies: - asap "^2.0.0" - wrappy "1" - diff-sequences@^26.6.2: version "26.6.2" resolved "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" @@ -12346,11 +12212,6 @@ dotenv@^16.0.0: resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.0.0.tgz#c619001253be89ebb638d027b609c75c26e47411" integrity sha512-qD9WU0MPM4SWLPJy/r2Be+2WgQj8plChsyrCNQzW/0WjvcJQiKQJ9mH3ZgB3fxbUUxgc/11ZJ0Fi5KiimWGz2Q== -dotenv@~10.0.0: - version "10.0.0" - resolved "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" - integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== - drange@^1.0.2: version "1.1.1" resolved "https://registry.npmjs.org/drange/-/drange-1.1.1.tgz#b2aecec2aab82fcef11dbbd7b9e32b83f8f6c0b8" @@ -12361,17 +12222,17 @@ dset@^3.1.2: resolved "https://registry.npmjs.org/dset/-/dset-3.1.2.tgz#89c436ca6450398396dc6538ea00abc0c54cd45a" integrity sha512-g/M9sqy3oHe477Ar4voQxWtaPIFw1jTdKZuomOjhCcBx9nHUNn0pu6NopuFFrTh/TRZIKEj+76vLWFu9BNKk+Q== -duplexer@^0.1.1, duplexer@^0.1.2: - version "0.1.2" - resolved "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" - integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== - -duplexer@~0.1.1: +duplexer@^0.1.1, duplexer@~0.1.1: version "0.1.1" resolved "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E= -duplexify@^4.0.0, duplexify@^4.1.1: +duplexer@^0.1.2: + version "0.1.2" + resolved "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== + +duplexify@^4.0.0: version "4.1.1" resolved "https://registry.npmjs.org/duplexify/-/duplexify-4.1.1.tgz#7027dc374f157b122a8ae08c2d3ea4d2d953aa61" integrity sha512-DY3xVEmVHTv1wSzKNbwoU6nVjzI369Y6sPoqfYr0/xlx3IdX2n94xIszTcjPO8W8ZIv0Wb0PXNcjuZyT4wiICA== @@ -12393,6 +12254,11 @@ easy-table@1.1.0: optionalDependencies: wcwidth ">=1.0.1" +ebnf@^1.9.0: + version "1.9.0" + resolved "https://registry.npmjs.org/ebnf/-/ebnf-1.9.0.tgz#9c2dd6052f3ed43a69c1f0b07b15bd03cefda764" + integrity sha512-LKK899+j758AgPq00ms+y90mo+2P86fMKUWD28sH0zLKUj7aL6iIH2wy4jejAMM9I2BawJ+2kp6C3mMXj+Ii5g== + ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" @@ -12550,7 +12416,7 @@ enhanced-resolve@^5.10.0: graceful-fs "^4.2.4" tapable "^2.2.0" -enquirer@^2.3.0, enquirer@^2.3.6, enquirer@~2.3.6: +enquirer@^2.3.0, enquirer@^2.3.6: version "2.3.6" resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== @@ -12573,14 +12439,14 @@ entities@^4.3.0: integrity sha512-o4q/dYJlmyjP2zfnaWDUC6A3BQFmVTX+tZPezK7k0GLSU9QYCauscf5Y+qcEPzKL+EixVouYDgLQK5H9GrLpkg== env-paths@^2.2.0: - version "2.2.1" - resolved "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" - integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + version "2.2.0" + resolved "https://registry.npmjs.org/env-paths/-/env-paths-2.2.0.tgz#cdca557dc009152917d6166e2febe1f039685e43" + integrity sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA== envinfo@^7.7.4: - version "7.8.1" - resolved "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" - integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== + version "7.7.4" + resolved "https://registry.npmjs.org/envinfo/-/envinfo-7.7.4.tgz#c6311cdd38a0e86808c1c9343f667e4267c4a320" + integrity sha512-TQXTYFVVwwluWSFis6K2XKxgrD22jEv0FTuLCQI+OjH7rn93+iY0fSSFM5lrSxFY+H1+B0/cvvlamr3UsBivdQ== eol@^0.9.1: version "0.9.1" @@ -12941,9 +12807,9 @@ eslint-plugin-import@^2.25.4: tsconfig-paths "^3.14.1" eslint-plugin-jest@^26.1.2: - version "26.8.1" - resolved "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-26.8.1.tgz#f870a9912f6fe65e16e181cbb368229cd5889c65" - integrity sha512-0+OSTIPjIIfl9heUxZyuU1gDEMW2sLvoVBGwiCIp+iEqUYt0Yqr5M5BjAyVShJaisICmCALdVv0nd1UDX/QaYw== + version "26.8.3" + resolved "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-26.8.3.tgz#f5d9bb162636491c8f6f0cd2743fe67c86569338" + integrity sha512-2roWu1MkEiihQ/qEszPPoaoqVI1x2D8Jtadk5AmoXTdEeNVPMu01Dtz7jIuTOAmdW3L+tSkPZOtEtQroYJDt0A== dependencies: "@typescript-eslint/utils" "^5.10.0" @@ -13058,9 +12924,9 @@ eslint-webpack-plugin@^3.1.1: schema-utils "^4.0.0" eslint@^8.6.0: - version "8.21.0" - resolved "https://registry.npmjs.org/eslint/-/eslint-8.21.0.tgz#1940a68d7e0573cef6f50037addee295ff9be9ef" - integrity sha512-/XJ1+Qurf1T9G2M5IHrsjp+xrGT73RZf23xA1z5wB1ZzzEAWSZKvRwhWxTFp1rvkvCfwcvAUNAP31bhKTTGfDA== + version "8.22.0" + resolved "https://registry.npmjs.org/eslint/-/eslint-8.22.0.tgz#78fcb044196dfa7eef30a9d65944f6f980402c48" + integrity sha512-ci4t0sz6vSRKdmkOGmprBo6fmI4PrphDFMy5JEq/fNS0gQkJM3rLmrqcp8ipMcdobH3KtUP40KniAE9W19S4wA== dependencies: "@eslint/eslintrc" "^1.3.0" "@humanwhocodes/config-array" "^0.10.4" @@ -13241,63 +13107,63 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: safe-buffer "^5.1.1" "example-app@link:packages/app": - version "0.2.74-next.1" + version "0.2.74" dependencies: - "@backstage/app-defaults" "^1.0.5-next.0" + "@backstage/app-defaults" "^1.0.5" "@backstage/catalog-model" "^1.1.0" - "@backstage/cli" "^0.18.1-next.0" + "@backstage/cli" "^0.18.1" "@backstage/config" "^1.0.1" - "@backstage/core-app-api" "^1.0.5-next.0" - "@backstage/core-components" "^0.10.1-next.1" - "@backstage/core-plugin-api" "^1.0.5-next.0" - "@backstage/integration-react" "^1.1.3-next.0" - "@backstage/plugin-airbrake" "^0.3.8-next.0" - "@backstage/plugin-apache-airflow" "^0.2.1-next.0" - "@backstage/plugin-api-docs" "^0.8.8-next.1" - "@backstage/plugin-azure-devops" "^0.1.24-next.0" - "@backstage/plugin-badges" "^0.2.32-next.0" - "@backstage/plugin-catalog-common" "^1.0.5-next.0" - "@backstage/plugin-catalog-graph" "^0.2.20-next.0" - "@backstage/plugin-catalog-import" "^0.8.11-next.0" - "@backstage/plugin-catalog-react" "^1.1.3-next.1" - "@backstage/plugin-circleci" "^0.3.8-next.0" - "@backstage/plugin-cloudbuild" "^0.3.8-next.0" - "@backstage/plugin-code-coverage" "^0.2.1-next.0" - "@backstage/plugin-cost-insights" "^0.11.30-next.0" - "@backstage/plugin-dynatrace" "^0.1.2-next.0" - "@backstage/plugin-explore" "^0.3.39-next.0" - "@backstage/plugin-gcalendar" "^0.3.4-next.0" - "@backstage/plugin-gcp-projects" "^0.3.27-next.0" - "@backstage/plugin-github-actions" "^0.5.8-next.0" - "@backstage/plugin-gocd" "^0.1.14-next.0" - "@backstage/plugin-graphiql" "^0.2.40-next.0" - "@backstage/plugin-home" "^0.4.24-next.1" - "@backstage/plugin-jenkins" "^0.7.7-next.1" - "@backstage/plugin-kafka" "^0.3.8-next.0" - "@backstage/plugin-kubernetes" "^0.7.1-next.1" - "@backstage/plugin-lighthouse" "^0.3.8-next.0" - "@backstage/plugin-newrelic" "^0.3.26-next.0" - "@backstage/plugin-newrelic-dashboard" "^0.2.1-next.0" - "@backstage/plugin-org" "^0.5.8-next.0" - "@backstage/plugin-pagerduty" "0.5.1-next.0" - "@backstage/plugin-permission-react" "^0.4.4-next.0" - "@backstage/plugin-rollbar" "^0.4.8-next.0" - "@backstage/plugin-scaffolder" "^1.5.0-next.1" - "@backstage/plugin-search" "^1.0.1-next.0" + "@backstage/core-app-api" "^1.0.5" + "@backstage/core-components" "^0.11.0" + "@backstage/core-plugin-api" "^1.0.5" + "@backstage/integration-react" "^1.1.3" + "@backstage/plugin-airbrake" "^0.3.8" + "@backstage/plugin-apache-airflow" "^0.2.1" + "@backstage/plugin-api-docs" "^0.8.8" + "@backstage/plugin-azure-devops" "^0.1.24" + "@backstage/plugin-badges" "^0.2.32" + "@backstage/plugin-catalog-common" "^1.0.5" + "@backstage/plugin-catalog-graph" "^0.2.20" + "@backstage/plugin-catalog-import" "^0.8.11" + "@backstage/plugin-catalog-react" "^1.1.3" + "@backstage/plugin-circleci" "^0.3.8" + "@backstage/plugin-cloudbuild" "^0.3.8" + "@backstage/plugin-code-coverage" "^0.2.1" + "@backstage/plugin-cost-insights" "^0.11.30" + "@backstage/plugin-dynatrace" "^0.1.2" + "@backstage/plugin-explore" "^0.3.39" + "@backstage/plugin-gcalendar" "^0.3.4" + "@backstage/plugin-gcp-projects" "^0.3.27" + "@backstage/plugin-github-actions" "^0.5.8" + "@backstage/plugin-gocd" "^0.1.14" + "@backstage/plugin-graphiql" "^0.2.40" + "@backstage/plugin-home" "^0.4.24" + "@backstage/plugin-jenkins" "^0.7.7" + "@backstage/plugin-kafka" "^0.3.8" + "@backstage/plugin-kubernetes" "^0.7.1" + "@backstage/plugin-lighthouse" "^0.3.8" + "@backstage/plugin-newrelic" "^0.3.26" + "@backstage/plugin-newrelic-dashboard" "^0.2.1" + "@backstage/plugin-org" "^0.5.8" + "@backstage/plugin-pagerduty" "0.5.1" + "@backstage/plugin-permission-react" "^0.4.4" + "@backstage/plugin-rollbar" "^0.4.8" + "@backstage/plugin-scaffolder" "^1.5.0" + "@backstage/plugin-search" "^1.0.1" "@backstage/plugin-search-common" "^1.0.0" - "@backstage/plugin-search-react" "^1.0.1-next.0" - "@backstage/plugin-sentry" "^0.4.1-next.0" - "@backstage/plugin-shortcuts" "^0.3.0-next.0" - "@backstage/plugin-stack-overflow" "^0.1.4-next.0" - "@backstage/plugin-tech-insights" "^0.2.4-next.0" - "@backstage/plugin-tech-radar" "^0.5.15-next.0" - "@backstage/plugin-techdocs" "^1.3.1-next.1" - "@backstage/plugin-techdocs-module-addons-contrib" "^1.0.3-next.1" - "@backstage/plugin-techdocs-react" "^1.0.3-next.1" - "@backstage/plugin-todo" "^0.2.10-next.0" - "@backstage/plugin-user-settings" "^0.4.7-next.0" + "@backstage/plugin-search-react" "^1.0.1" + "@backstage/plugin-sentry" "^0.4.1" + "@backstage/plugin-shortcuts" "^0.3.0" + "@backstage/plugin-stack-overflow" "^0.1.4" + "@backstage/plugin-tech-insights" "^0.2.4" + "@backstage/plugin-tech-radar" "^0.5.15" + "@backstage/plugin-techdocs" "^1.3.1" + "@backstage/plugin-techdocs-module-addons-contrib" "^1.0.3" + "@backstage/plugin-techdocs-react" "^1.0.3" + "@backstage/plugin-todo" "^0.2.10" + "@backstage/plugin-user-settings" "^0.4.7" "@backstage/theme" "^0.2.16" - "@internal/plugin-catalog-customized" "0.0.1-next.0" + "@internal/plugin-catalog-customized" "0.0.1" "@material-ui/core" "^4.12.2" "@material-ui/icons" "^4.9.1" "@material-ui/lab" "4.0.0-alpha.57" @@ -13361,19 +13227,6 @@ execa@5.1.1, execa@^5.0.0: signal-exit "^3.0.3" strip-final-newline "^2.0.0" -execa@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" - integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== - dependencies: - cross-spawn "^6.0.0" - get-stream "^4.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - execa@^6.1.0: version "6.1.0" resolved "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz#cea16dee211ff011246556388effa0818394fb20" @@ -13608,17 +13461,6 @@ fast-equals@^2.0.0: resolved "https://registry.npmjs.org/fast-equals/-/fast-equals-2.0.4.tgz#3add9410585e2d7364c2deeb6a707beadb24b927" integrity sha512-caj/ZmjHljPrZtbzJ3kfH5ia/k4mTJe/qSiXAGzxZWRZgsgDV0cvNaQULqUX8t0/JVlzzEdYOwCN5DmzTxoD4w== -fast-glob@3.2.7: - version "3.2.7" - resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz#fd6cb7a2d7e9aa7a7846111e85a196d6b2f766a1" - integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - fast-glob@^3.2.11, fast-glob@^3.2.9: version "3.2.11" resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" @@ -13683,9 +13525,9 @@ fastest-stable-stringify@^2.0.2: integrity sha512-bijHueCGd0LqqNK9b5oCMHc0MluJAx0cwqASgbWMvkO01lCYgIhacVRLcaDz3QnyYIRNJRDwMb41VuT6pHJ91Q== fastq@^1.6.0: - version "1.13.0" - resolved "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" - integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== + version "1.6.1" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.6.1.tgz#4570c74f2ded173e71cf0beb08ac70bb85826791" + integrity sha512-mpIH5sKYueh3YyeJwqtVo8sORi0CgtmkVbK6kZStpQlZBYQuTzG2CZ7idSiJuA7bY0SFCWUc5WIs+oYumGCQNw== dependencies: reusify "^1.0.4" @@ -13740,7 +13582,7 @@ fecha@^4.2.0: resolved "https://registry.npmjs.org/fecha/-/fecha-4.2.0.tgz#3ffb6395453e3f3efff850404f0a59b6747f5f41" integrity sha512-aN3pcx/DSmtyoovUudctc8+6Hl4T+hI9GBBHLjA76jdZl7+b1sgh5g4k+u/GL3dTy1/pnYzKp69FpJ0OicE3Wg== -figures@3.2.0, figures@^3.0.0, figures@^3.2.0: +figures@^3.0.0, figures@^3.2.0: version "3.2.0" resolved "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== @@ -13914,11 +13756,6 @@ flat-cache@^3.0.4: flatted "^3.1.0" rimraf "^3.0.2" -flat@^5.0.2: - version "5.0.2" - resolved "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" - integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== - flatstr@^1.0.12: version "1.0.12" resolved "https://registry.npmjs.org/flatstr/-/flatstr-1.0.12.tgz#c2ba6a08173edbb6c9640e3055b95e287ceb5931" @@ -14122,7 +13959,7 @@ fs-extra@10.0.1: jsonfile "^6.0.1" universalify "^2.0.0" -fs-extra@10.1.0, fs-extra@^10.0.0, fs-extra@^10.0.1, fs-extra@^10.1.0: +fs-extra@10.1.0, fs-extra@^10.0.0, fs-extra@^10.0.1: version "10.1.0" resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== @@ -14174,7 +14011,7 @@ fs-monkey@1.0.3: fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= fsevents@^2.3.2, fsevents@~2.3.2: version "2.3.2" @@ -14221,6 +14058,21 @@ gauge@^3.0.0: strip-ansi "^6.0.1" wide-align "^1.1.2" +gauge@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/gauge/-/gauge-4.0.0.tgz#afba07aa0374a93c6219603b1fb83eaa2264d8f8" + integrity sha512-F8sU45yQpjQjxKkm1UOAhf0U/O0aFt//Fl7hsrNVto+patMHjs7dPI9mFOGUKbhrgKm0S3EjW3scMFuQmWSROw== + dependencies: + ansi-regex "^5.0.1" + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.2" + console-control-strings "^1.0.0" + has-unicode "^2.0.1" + signal-exit "^3.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.2" + gauge@^4.0.3: version "4.0.4" resolved "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" @@ -14358,13 +14210,6 @@ get-stdin@^8.0.0: resolved "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz#cbad6a73feb75f6eeb22ba9e01f89aa28aa97a53" integrity sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg== -get-stream@^4.0.0: - version "4.1.0" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - get-stream@^5.0.0, get-stream@^5.1.0: version "5.1.0" resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz#01203cdc92597f9b909067c3e656cc1f4d3c4dc9" @@ -14410,9 +14255,9 @@ getpass@^0.1.1: assert-plus "^1.0.0" git-raw-commits@^2.0.8: - version "2.0.11" - resolved "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz#bc3576638071d18655e1cc60d7f524920008d723" - integrity sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A== + version "2.0.10" + resolved "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.10.tgz#e2255ed9563b1c9c3ea6bd05806410290297bbc1" + integrity sha512-sHhX5lsbG9SOO6yXdlwgEMQ/ljIn7qMpAbJZCGfXX2fq5T8M5SrDnpYk9/4HswTildcIqatsWa91vty6VhWSaQ== dependencies: dargs "^7.0.0" lodash "^4.17.15" @@ -14423,7 +14268,7 @@ git-raw-commits@^2.0.8: git-remote-origin-url@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz#5282659dae2107145a11126112ad3216ec5fa65f" - integrity sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw== + integrity sha1-UoJlna4hBxRaERJhEq0yFuxfpl8= dependencies: gitconfiglocal "^1.0.0" pify "^2.3.0" @@ -14436,6 +14281,14 @@ git-semver-tags@^4.1.1: meow "^8.0.0" semver "^6.0.0" +git-up@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/git-up/-/git-up-4.0.1.tgz#cb2ef086653640e721d2042fe3104857d89007c0" + integrity sha512-LFTZZrBlrCrGCG07/dm1aCjjpL1z9L3+5aEeI9SBhAqSc+kiA9Or1bgZhQFNppJX6h/f5McrvJt1mQXTFm6Qrw== + dependencies: + is-ssh "^1.3.0" + parse-url "^5.0.0" + git-up@^6.0.0: version "6.0.0" resolved "https://registry.npmjs.org/git-up/-/git-up-6.0.0.tgz#dbd6e4eee270338be847a0601e6d0763c90b74db" @@ -14444,6 +14297,13 @@ git-up@^6.0.0: is-ssh "^1.4.0" parse-url "^7.0.2" +git-url-parse@^11.4.4: + version "11.6.0" + resolved "https://registry.npmjs.org/git-url-parse/-/git-url-parse-11.6.0.tgz#c634b8de7faa66498a2b88932df31702c67df605" + integrity sha512-WWUxvJs5HsyHL6L08wOusa/IXYtMuCAhrMmnTjQPpBU0TTHyDhnOATNH3xNQz7YOQUsqIIPTGr4xiVti1Hsk5g== + dependencies: + git-up "^4.0.0" + git-url-parse@^12.0.0: version "12.0.0" resolved "https://registry.npmjs.org/git-url-parse/-/git-url-parse-12.0.0.tgz#4ba70bc1e99138321c57e3765aaf7428e5abb793" @@ -14454,7 +14314,7 @@ git-url-parse@^12.0.0: gitconfiglocal@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b" - integrity sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ== + integrity sha1-QdBF84UaXqiPA/JMocYXgRRGS5s= dependencies: ini "^1.3.2" @@ -14482,18 +14342,6 @@ glob-to-regexp@^0.4.1: resolved "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@7.1.4: - version "7.1.4" - resolved "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" - integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - glob@7.1.6: version "7.1.6" resolved "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" @@ -14519,15 +14367,16 @@ glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, gl path-is-absolute "^1.0.0" glob@^8.0.1: - version "8.0.3" - resolved "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz#415c6eb2deed9e502c68fa44a272e6da6eeca42e" - integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ== + version "8.0.1" + resolved "https://registry.npmjs.org/glob/-/glob-8.0.1.tgz#00308f5c035aa0b2a447cd37ead267ddff1577d3" + integrity sha512-cF7FYZZ47YzmCu7dDy50xSRRfO3ErRfrXuLZcNIuyiJEco0XSrGtuilG19L5xp3NcwTx7Gn+X6Tv3fmsUPTbow== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" minimatch "^5.0.1" once "^1.3.0" + path-is-absolute "^1.0.0" global-agent@^3.0.0: version "3.0.0" @@ -14616,9 +14465,9 @@ globby@^7.1.1: slash "^1.0.0" google-auth-library@^8.0.0, google-auth-library@^8.0.1, google-auth-library@^8.0.2: - version "8.1.1" - resolved "https://registry.npmjs.org/google-auth-library/-/google-auth-library-8.1.1.tgz#4068d2b1512b812d3d3dfbdc848452a0d5a550de" - integrity sha512-eG3pCfrLgVJe19KhAeZwW0m1LplNEo0FX1GboWf3hu18zD2jq8TUH2K8900AB2YRAuJ7A+1aSXDp1BODjwwRzg== + version "8.2.0" + resolved "https://registry.npmjs.org/google-auth-library/-/google-auth-library-8.2.0.tgz#36d93e42f9bc8856ac2e69778b2b7a1e2aa16217" + integrity sha512-wCWs44jLT3cbzONVk2NKK1sfWaKCqzR21cudG3r9tV53/DC/wImxEr7HK5OBlEU5Q1iepZsrdFOxvzmC0M/YRQ== dependencies: arrify "^2.0.0" base64-js "^1.3.0" @@ -14678,27 +14527,27 @@ got@^11.8.3: p-cancelable "^2.0.0" responselike "^2.0.0" -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.5, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.6: - version "4.2.10" - resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== - -graceful-fs@^4.2.4, graceful-fs@^4.2.9: +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: version "4.2.9" resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96" integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ== +graceful-fs@^4.1.2, graceful-fs@^4.1.5, graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.10" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + grapheme-splitter@^1.0.4: version "1.0.4" resolved "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== graphiql@^1.5.12, graphiql@^1.8.8: - version "1.11.3" - resolved "https://registry.npmjs.org/graphiql/-/graphiql-1.11.3.tgz#ed14117c1a9b1d93e66a9e5c23b135ba2bd15a6f" - integrity sha512-cvXYU0adFsvCIxbHMTcpi69jR5LZOG6tP00jnoSbgrYvQvGvIDGgRB5Dam+NmubVTqbjiC/SqF8mzh8rZp7AhQ== + version "1.11.5" + resolved "https://registry.npmjs.org/graphiql/-/graphiql-1.11.5.tgz#daf0de27b704f17c9d87ce56eea0fdcd7a370269" + integrity sha512-NI92XdSVwXTsqzJc6ykaAkKVMeC8IRRp3XzkxVQwtqDsZlVKtR2ZnssXNYt05TMGbi1ehoipn9tFywVohOlHjg== dependencies: - "@graphiql/react" "^0.9.0" + "@graphiql/react" "^0.10.0" "@graphiql/toolkit" "^0.6.1" entities "^2.0.0" graphql-language-service "^5.0.6" @@ -14773,14 +14622,14 @@ graphql-type-json@^0.3.2: integrity sha512-J+vjof74oMlCWXSvt0DOf2APEdZOCdubEvGDUAlqH//VBYcOYsGgRW7Xzorr44LvkjiuvecWc8fChxuZZbChtg== graphql-ws@^5.4.1, graphql-ws@^5.9.0: - version "5.9.1" - resolved "https://registry.npmjs.org/graphql-ws/-/graphql-ws-5.9.1.tgz#9c0fa48ceb695d61d574ed3ab21b426729e87f2d" - integrity sha512-mL/SWGBwIT9Meq0NlfS55yXXTOeWPMbK7bZBEZhFu46bcGk1coTx2Sdtzxdk+9yHWngD+Fk1PZDWaAutQa9tpw== + version "5.10.0" + resolved "https://registry.npmjs.org/graphql-ws/-/graphql-ws-5.10.0.tgz#3fb47a4e809e0d2e7c197f1bca754fa9f31b940e" + integrity sha512-ewbPzHQdRZgNCPDH9Yr6xccSeZfk3fmpO/AGGGg4KkM5gc6oAOJQ10Oui1EqprhVOyRbOll9bw2qAkOiOwfTag== graphql@^16.0.0, graphql@^16.3.0: - version "16.5.0" - resolved "https://registry.npmjs.org/graphql/-/graphql-16.5.0.tgz#41b5c1182eaac7f3d47164fb247f61e4dfb69c85" - integrity sha512-qbHgh8Ix+j/qY+a/ZcJnFQ+j8ezakqPiHwPiZhV/3PgGlgf96QMBB5/f2rkiC9sgLoy/xvT6TSiaf2nTHJh5iA== + version "16.6.0" + resolved "https://registry.npmjs.org/graphql/-/graphql-16.6.0.tgz#c2dcffa4649db149f6282af726c8c83f1c7c5fdb" + integrity sha512-KPIBPDlW7NxrbT/eh4qPXz5FiFdL5UbaA0XUNz2Rp3Z3hqBSkbj0GVjwFDztsWVauZUWsbKHgMg++sk8UX0bkw== grouped-queue@^2.0.0: version "2.0.0" @@ -14807,6 +14656,25 @@ grpc-docs@^1.0.6, grpc-docs@^1.1.2: rollup-plugin-smart-asset "^2.1.2" styled-components "^5.3.3" +gson-conform@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/gson-conform/-/gson-conform-1.0.3.tgz#6f982f98ea84199280bd48b6bfbcd0ae7447f1e2" + integrity sha512-gaZQN/5ZbohkLBOs4JKHkg/IdOB9kuuEr5SVLAjHUs+Q+Nl746DRe18GgQy4oxxVXStO//Zga2wg4eWL9Mfshw== + +gson-pointer@4.1.1, gson-pointer@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/gson-pointer/-/gson-pointer-4.1.1.tgz#088d6aa38d52753530288d13b5a75b6a43170e9b" + integrity sha512-rOS/zCLUI8BT0+/U+p5nzI0RfhIyRmzkpwzyCj8gcLoRl3rHuysk6ci1IQ955AQQZDSNN3mVec26Sx9wRZ0EjA== + +gson-query@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/gson-query/-/gson-query-5.1.0.tgz#8f34a062849f8c08be0c35eddaa2ad18a4326a49" + integrity sha512-xKb/90XfmLLKGgX8Y7LRF4yKnMR/ckV5WOQ/Ip0pRXuDh7jUhdY1UYjPvQnF7/UMbNsAo0168j2j0yt9+4QdaA== + dependencies: + ebnf "^1.9.0" + gson-conform "^1.0.3" + gson-pointer "4.1.1" + gtoken@^6.0.0: version "6.0.1" resolved "https://registry.npmjs.org/gtoken/-/gtoken-6.0.1.tgz#1276371d51e93c4eface76e3f30f9e8f1cad3f1a" @@ -15307,7 +15175,7 @@ humanize-duration@^3.25.1, humanize-duration@^3.26.0, humanize-duration@^3.27.0, humanize-ms@^1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" - integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== + integrity sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0= dependencies: ms "^2.0.0" @@ -15367,6 +15235,13 @@ ignore-by-default@^1.0.1: resolved "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" integrity sha1-SMptcvbGo68Aqa1K5odr44ieKwk= +ignore-walk@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" + integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== + dependencies: + minimatch "^3.0.4" + ignore-walk@^4.0.1: version "4.0.1" resolved "https://registry.npmjs.org/ignore-walk/-/ignore-walk-4.0.1.tgz#fc840e8346cf88a3a9380c5b17933cd8f4d39fa3" @@ -15386,7 +15261,7 @@ ignore@^3.3.5: resolved "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== -ignore@^5.0.4, ignore@^5.1.4, ignore@^5.2.0: +ignore@^5.1.4, ignore@^5.2.0: version "5.2.0" resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== @@ -15423,7 +15298,7 @@ import-cwd@^3.0.0: dependencies: import-from "^3.0.0" -import-fresh@^3.0.0, import-fresh@^3.1.0: +import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1: version "3.2.1" resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== @@ -15431,14 +15306,6 @@ import-fresh@^3.0.0, import-fresh@^3.1.0: parent-module "^1.0.0" resolve-from "^4.0.0" -import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - import-from@4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/import-from/-/import-from-4.0.0.tgz#2710b8d66817d232e16f4166e319248d3d5492e2" @@ -15457,9 +15324,9 @@ import-lazy@~4.0.0: integrity sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw== import-local@^3.0.2: - version "3.1.0" - resolved "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" - integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== + version "3.0.2" + resolved "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6" + integrity sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA== dependencies: pkg-dir "^4.2.0" resolve-cwd "^3.0.0" @@ -15467,7 +15334,7 @@ import-local@^3.0.2: imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= indefinite-observable@^2.0.1: version "2.0.1" @@ -15499,7 +15366,7 @@ infer-owner@^1.0.4: inflight@^1.0.4: version "1.0.6" resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= dependencies: once "^1.3.0" wrappy "1" @@ -15529,18 +15396,19 @@ ini@^1.3.2, ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -init-package-json@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/init-package-json/-/init-package-json-3.0.2.tgz#f5bc9bac93f2bdc005778bc2271be642fecfcd69" - integrity sha512-YhlQPEjNFqlGdzrBfDNRLhvoSgX7iQRgSxgsNknRQ9ITXFT7UMfVMWhBTOh2Y+25lRnGrv5Xz8yZwQ3ACR6T3A== +init-package-json@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/init-package-json/-/init-package-json-2.0.2.tgz#d81a7e6775af9b618f20bba288e440b8d1ce05f3" + integrity sha512-PO64kVeArePvhX7Ff0jVWkpnE1DfGRvaWcStYrPugcJz9twQGYibagKJuIMHCX7ENcp0M6LJlcjLBuLD5KeJMg== dependencies: - npm-package-arg "^9.0.1" + glob "^7.1.1" + npm-package-arg "^8.1.0" promzard "^0.3.0" - read "^1.0.7" - read-package-json "^5.0.0" - semver "^7.3.5" + read "~1.0.1" + read-package-json "^3.0.0" + semver "^7.3.2" validate-npm-package-license "^3.0.4" - validate-npm-package-name "^4.0.0" + validate-npm-package-name "^3.0.0" inline-style-parser@0.1.1: version "0.1.1" @@ -15574,7 +15442,26 @@ inquirer@8.2.2: strip-ansi "^6.0.0" through "^2.3.6" -inquirer@^8.0.0, inquirer@^8.2.0, inquirer@^8.2.4: +inquirer@^7.3.3: + version "7.3.3" + resolved "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003" + integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA== + dependencies: + ansi-escapes "^4.2.1" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.19" + mute-stream "0.0.8" + run-async "^2.4.0" + rxjs "^6.6.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + +inquirer@^8.0.0, inquirer@^8.2.0: version "8.2.4" resolved "https://registry.npmjs.org/inquirer/-/inquirer-8.2.4.tgz#ddbfe86ca2f67649a67daa6f1051c128f684f0b4" integrity sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg== @@ -15654,10 +15541,10 @@ ioredis@^5.1.0: redis-parser "^3.0.0" standard-as-callback "^2.1.0" -ip@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" - integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== +ip@^1.1.5: + version "1.1.5" + resolved "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= ipaddr.js@1.9.1: version "1.9.1" @@ -15802,7 +15689,14 @@ is-core-module@^2.1.0, is-core-module@^2.2.0: dependencies: has "^1.0.3" -is-core-module@^2.5.0, is-core-module@^2.8.0, is-core-module@^2.8.1, is-core-module@^2.9.0: +is-core-module@^2.8.0, is-core-module@^2.8.1: + version "2.9.0" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69" + integrity sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A== + dependencies: + has "^1.0.3" + +is-core-module@^2.9.0: version "2.10.0" resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz#9012ede0a91c69587e647514e1d5277019e728ed" integrity sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg== @@ -15886,7 +15780,7 @@ is-extendable@^1.0.1: is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= is-fullwidth-code-point@^1.0.0: version "1.0.0" @@ -15958,7 +15852,7 @@ is-interactive@^1.0.0: is-lambda@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" - integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== + integrity sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU= is-lower-case@^2.0.2: version "2.0.2" @@ -16024,7 +15918,7 @@ is-path-inside@^3.0.2: is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== + integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= is-plain-obj@^2.0.0: version "2.1.0" @@ -16048,13 +15942,6 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" -is-plain-object@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.0.tgz#47bfc5da1b5d50d64110806c199359482e75a928" - integrity sha512-tZIpofR+P05k8Aocp7UI/2UTa9lTJSebCXpFFoR9aibpokDj/uXBsJ8luUu0tTVYKkMU6URDUuOfJZ7koewXvg== - dependencies: - isobject "^4.0.0" - is-plain-object@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" @@ -16070,6 +15957,11 @@ is-primitive@^3.0.1: resolved "https://registry.npmjs.org/is-primitive/-/is-primitive-3.0.1.tgz#98c4db1abff185485a657fc2905052b940524d05" integrity sha512-GljRxhWvlCNRfZyORiH77FwdFwGcMO620o37EOYC0ORWdq+WYNVqW0w2Juzew4M+L81l6/QS3t5gkkihyRqv9w== +is-promise@^2.1.0: + version "2.2.2" + resolved "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" + integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== + is-promise@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz#42ff9f84206c1991d26debf520dd5c01042dd2f3" @@ -16126,6 +16018,13 @@ is-shared-array-buffer@^1.0.1, is-shared-array-buffer@^1.0.2: dependencies: call-bind "^1.0.2" +is-ssh@^1.3.0: + version "1.3.1" + resolved "https://registry.npmjs.org/is-ssh/-/is-ssh-1.3.1.tgz#f349a8cadd24e65298037a522cf7520f2e81a0f3" + integrity sha512-0eRIASHZt1E68/ixClI8bp2YK2wmBPVWEismTs6M+M099jKgrzl/3E976zIbImSIob48N2/XGe9y7ZiYdImSlg== + dependencies: + protocols "^1.1.0" + is-ssh@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.0.tgz#4f8220601d2839d8fa624b3106f8e8884f01b8b2" @@ -16138,11 +16037,6 @@ is-stream-ended@^0.1.4: resolved "https://registry.npmjs.org/is-stream-ended/-/is-stream-ended-0.1.4.tgz#f50224e95e06bce0e356d440a4827cd35b267eda" integrity sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw== -is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= - is-stream@^2.0.0: version "2.0.1" resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" @@ -16177,7 +16071,7 @@ is-symbol@^1.0.2, is-symbol@^1.0.3: is-text-path@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" - integrity sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w== + integrity sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4= dependencies: text-extensions "^1.0.0" @@ -16292,11 +16186,6 @@ isobject@^3.0.0, isobject@^3.0.1: resolved "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= -isobject@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/isobject/-/isobject-4.0.0.tgz#3f1c9155e73b192022a80819bacd0343711697b0" - integrity sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA== - isomorphic-dompurify@^0.13.0: version "0.13.0" resolved "https://registry.npmjs.org/isomorphic-dompurify/-/isomorphic-dompurify-0.13.0.tgz#a4dde357e8531018a85ebb2dd56c4794b6739ba3" @@ -16322,9 +16211,9 @@ isomorphic-form-data@^2.0.0: form-data "^2.3.2" isomorphic-git@^1.8.0: - version "1.19.1" - resolved "https://registry.npmjs.org/isomorphic-git/-/isomorphic-git-1.19.1.tgz#99e18db18826b07c40a4c4b32484e917a4c4fd31" - integrity sha512-enp69F9dIWtAAB+aEMV83AVDiOoi7zHTMr1kTP2Bzka/PlX0W6C74W2y9b9UToX65oXvipPzhY5An2+F5BXVQw== + version "1.19.2" + resolved "https://registry.npmjs.org/isomorphic-git/-/isomorphic-git-1.19.2.tgz#e8f57443c63a58054f65f42e5cb189a2df31bd0d" + integrity sha512-14Tbf3GRFNoXw+fy6ssK7gpDZQxF+NytHmg7p+5L38IAVUafHnfjzJ0ZnEmLz3SAG20wYYyB+HufkRAFRttYxQ== dependencies: async-lock "^1.1.0" clean-git-ref "^2.0.1" @@ -16919,9 +16808,9 @@ jose@^4.1.4: integrity sha512-GFcVFQwYQKbQTUOo2JlpFGXTkgBw26uzDsRMD2q1WgSKNSnpKS9Ug7bdQ8dS+p4sZHNH6iRPu6WK2jLIjspaMA== jose@^4.6.0: - version "4.8.3" - resolved "https://registry.npmjs.org/jose/-/jose-4.8.3.tgz#5a754fb4aa5f2806608d083f438e6916b11087da" - integrity sha512-7rySkpW78d8LBp4YU70Wb7+OTgE3OwAALNVZxhoIhp4Kscp+p/fBkdpxGAMKxvCAMV4QfXBU9m6l9nX/vGwd2g== + version "4.9.0" + resolved "https://registry.npmjs.org/jose/-/jose-4.9.0.tgz#98ecaf81b13361d1931c0126e3f765549c782f92" + integrity sha512-RgaqEOZLkVO+ViN3KkN44XJt9g7+wMveUv59sVLaTxONcUPc8ZpfqOCeLphVBZyih2dgkvZ0Ap1CNcokvY7Uyw== joycon@^3.0.1: version "3.1.0" @@ -17124,6 +17013,17 @@ json-schema-compare@^0.2.2: dependencies: lodash "^4.17.4" +json-schema-library@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/json-schema-library/-/json-schema-library-6.0.0.tgz#2a823d850031842c6917f41a8c576af3b603ab48" + integrity sha512-1nTpSmyfmgJpaNPIBO1SnHpXiMUh76hZnqSuCrJr7Lcu2N2SB55UPgf5F790r4dy4i4o/Moaw7OdqDhEmxP/Rw== + dependencies: + deepmerge "^4.2.2" + fast-deep-equal "^3.1.3" + gson-pointer "^4.1.1" + gson-query "^5.1.0" + valid-url "^1.0.9" + json-schema-merge-allof@^0.6.0: version "0.6.0" resolved "https://registry.npmjs.org/json-schema-merge-allof/-/json-schema-merge-allof-0.6.0.tgz#64d48820fec26b228db837475ce3338936bf59a5" @@ -17212,7 +17112,7 @@ json5@^2.1.2, json5@^2.1.3, json5@^2.2.0, json5@^2.2.1: resolved "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== -jsonc-parser@3.0.0, jsonc-parser@^3.0.0: +jsonc-parser@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz#abdd785701c7e7eaca8a9ec8cf070ca51a745a22" integrity sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA== @@ -17241,7 +17141,7 @@ jsonify@~0.0.0: jsonparse@^1.2.0, jsonparse@^1.3.1: version "1.3.1" resolved "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" - integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== + integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= jsonpath-plus@^0.19.0: version "0.19.0" @@ -17396,15 +17296,15 @@ jsx-ast-utils@^3.3.2: array-includes "^3.1.5" object.assign "^4.1.2" -just-diff-apply@^5.2.0: - version "5.4.1" - resolved "https://registry.npmjs.org/just-diff-apply/-/just-diff-apply-5.4.1.tgz#1debed059ad009863b4db0e8d8f333d743cdd83b" - integrity sha512-AAV5Jw7tsniWwih8Ly3fXxEZ06y+6p5TwQMsw0dzZ/wPKilzyDgdAnL0Ug4NNIquPUOh1vfFWEHbmXUqM5+o8g== +just-diff-apply@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/just-diff-apply/-/just-diff-apply-4.0.1.tgz#da89c5a4ccb14aa8873c70e2c3b6695cef45dab5" + integrity sha512-AKOkzB5P6FkfP21UlZVX/OPXx/sC2GagpLX9cBxqHqDuRjwmZ/AJRKSNrB9jHPpRW1W1ONs6gly1gW46t055nQ== just-diff@^5.0.1: - version "5.1.1" - resolved "https://registry.npmjs.org/just-diff/-/just-diff-5.1.1.tgz#8da6414342a5ed6d02ccd64f5586cbbed3146202" - integrity sha512-u8HXJ3HlNrTzY7zrYYKjNEfBlyjqhdBkoyTVdjtn7p02RJD5NvR8rIClzeGA7t+UYP1/7eAkWNLU0+P3QrEqKQ== + version "5.0.1" + resolved "https://registry.npmjs.org/just-diff/-/just-diff-5.0.1.tgz#db8fe1cfeea1156f2374bfb289826dca28e7e390" + integrity sha512-X00TokkRIDotUIf3EV4xUm6ELc/IkqhS/vPSHdWnsM5y0HoNMfEqrazizI7g78lpHvnRSRt/PFfKtRqJCOGIuQ== just-extend@^4.0.2: version "4.2.1" @@ -17609,30 +17509,29 @@ leasot@^12.0.0: strip-ansi "^6.0.0" text-table "^0.2.0" -lerna@^5.0.0: - version "5.4.0" - resolved "https://registry.npmjs.org/lerna/-/lerna-5.4.0.tgz#0b3c2310146fa9480ade9c6978c7693ad5c39fe1" - integrity sha512-y1gRvW5oFo+xumYQCDadDj8r4R4o6fpmuNc94b2h8HRoiCnHZWIlMvym4m+R7kSDh0CuuYRTB2wPjUrHmQXL7w== +lerna@~5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/lerna/-/lerna-5.0.0.tgz#077e35d41fcead5ea223af1862dc25475e1aaf2a" + integrity sha512-dUYmJ7H9k/xHtwKpQWLTNUa1jnFUiW4o4K2LFkRchlIijoIUT4yK/RprIxNvYCrLrEaOdZryvY5UZvSHI2tBxA== dependencies: - "@lerna/add" "5.4.0" - "@lerna/bootstrap" "5.4.0" - "@lerna/changed" "5.4.0" - "@lerna/clean" "5.4.0" - "@lerna/cli" "5.4.0" - "@lerna/create" "5.4.0" - "@lerna/diff" "5.4.0" - "@lerna/exec" "5.4.0" - "@lerna/import" "5.4.0" - "@lerna/info" "5.4.0" - "@lerna/init" "5.4.0" - "@lerna/link" "5.4.0" - "@lerna/list" "5.4.0" - "@lerna/publish" "5.4.0" - "@lerna/run" "5.4.0" - "@lerna/version" "5.4.0" + "@lerna/add" "5.0.0" + "@lerna/bootstrap" "5.0.0" + "@lerna/changed" "5.0.0" + "@lerna/clean" "5.0.0" + "@lerna/cli" "5.0.0" + "@lerna/create" "5.0.0" + "@lerna/diff" "5.0.0" + "@lerna/exec" "5.0.0" + "@lerna/import" "5.0.0" + "@lerna/info" "5.0.0" + "@lerna/init" "5.0.0" + "@lerna/link" "5.0.0" + "@lerna/list" "5.0.0" + "@lerna/publish" "5.0.0" + "@lerna/run" "5.0.0" + "@lerna/version" "5.0.0" import-local "^3.0.2" - npmlog "^6.0.2" - nx ">=14.5.4 < 16" + npmlog "^4.1.2" leven@2.1.0: version "2.1.0" @@ -17665,26 +17564,26 @@ li@^1.3.0: resolved "https://registry.npmjs.org/li/-/li-1.3.0.tgz#22c59bcaefaa9a8ef359cf759784e4bf106aea1b" integrity sha1-IsWbyu+qmo7zWc91l4TkvxBq6hs= -libnpmaccess@^6.0.3: - version "6.0.3" - resolved "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-6.0.3.tgz#473cc3e4aadb2bc713419d92e45d23b070d8cded" - integrity sha512-4tkfUZprwvih2VUZYMozL7EMKgQ5q9VW2NtRyxWtQWlkLTAWHRklcAvBN49CVqEkhUw7vTX2fNgB5LzgUucgYg== +libnpmaccess@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-4.0.1.tgz#17e842e03bef759854adf6eb6c2ede32e782639f" + integrity sha512-ZiAgvfUbvmkHoMTzdwmNWCrQRsDkOC+aM5BDfO0C9aOSwF3R1LdFDBD+Rer1KWtsoQYO35nXgmMR7OUHpDRxyA== dependencies: aproba "^2.0.0" minipass "^3.1.1" - npm-package-arg "^9.0.1" - npm-registry-fetch "^13.0.0" + npm-package-arg "^8.0.0" + npm-registry-fetch "^9.0.0" -libnpmpublish@^6.0.4: - version "6.0.4" - resolved "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-6.0.4.tgz#adb41ec6b0c307d6f603746a4d929dcefb8f1a0b" - integrity sha512-lvAEYW8mB8QblL6Q/PI/wMzKNvIrF7Kpujf/4fGS/32a2i3jzUXi04TNyIBcK6dQJ34IgywfaKGh+Jq4HYPFmg== +libnpmpublish@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-4.0.0.tgz#ad6413914e0dfd78df868ce14ba3d3a4cc8b385b" + integrity sha512-2RwYXRfZAB1x/9udKpZmqEzSqNd7ouBRU52jyG14/xG8EF+O9A62d7/XVR3iABEQHf1iYhkm0Oq9iXjrL3tsXA== dependencies: - normalize-package-data "^4.0.0" - npm-package-arg "^9.0.1" - npm-registry-fetch "^13.0.0" - semver "^7.3.7" - ssri "^9.0.0" + normalize-package-data "^3.0.0" + npm-package-arg "^8.1.0" + npm-registry-fetch "^9.0.0" + semver "^7.1.3" + ssri "^8.0.0" lilconfig@2.0.5: version "2.0.5" @@ -17783,7 +17682,7 @@ load-json-file@^1.0.0: load-json-file@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" - integrity sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw== + integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= dependencies: graceful-fs "^4.1.2" parse-json "^4.0.0" @@ -17841,7 +17740,7 @@ loader-utils@^3.2.0: locate-path@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== + integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= dependencies: p-locate "^2.0.0" path-exists "^3.0.0" @@ -17873,6 +17772,11 @@ lodash-es@^4.17.21: resolved "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== +lodash._reinterpolate@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" + integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= + lodash.assign@^4.1.0, lodash.assign@^4.2.0: version "4.2.0" resolved "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" @@ -17966,7 +17870,7 @@ lodash.isinteger@^4.0.4: lodash.ismatch@^4.4.0: version "4.4.0" resolved "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" - integrity sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g== + integrity sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc= lodash.isnil@^4.0.0: version "4.0.0" @@ -18028,6 +17932,21 @@ lodash.startcase@^4.4.0: resolved "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz#9436e34ed26093ed7ffae1936144350915d9add8" integrity sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg== +lodash.template@^4.5.0: + version "4.5.0" + resolved "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" + integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A== + dependencies: + lodash._reinterpolate "^3.0.0" + lodash.templatesettings "^4.0.0" + +lodash.templatesettings@^4.0.0: + version "4.2.0" + resolved "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz#e481310f049d3cf6d47e912ad09313b154f0fb33" + integrity sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ== + dependencies: + lodash._reinterpolate "^3.0.0" + lodash.throttle@^4.1.1: version "4.1.1" resolved "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" @@ -18153,7 +18072,7 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -lru-cache@^7.10.1: +lru-cache@^7.10.1, lru-cache@^7.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1: version "7.10.1" resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-7.10.1.tgz#db577f42a94c168f676b638d15da8fb073448cab" integrity sha512-BQuhQxPuRl79J5zSXRP+uNzPOyZw2oFI9JLRQ80XswSvg21KMKNtQza9eF42rfI/3Z40RvzBdXgziEkudzjo8A== @@ -18163,11 +18082,6 @@ lru-cache@^7.3.1: resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-7.3.1.tgz#7702e80694ec2bf19865567a469f2b081fcf53f5" integrity sha512-nX1x4qUrKqwbIAhv4s9et4FIUVzNOpeY07bsjGUy8gwJrXH/wScImSQqXErmo/b2jZY2r0mohbLA9zVj7u1cNw== -lru-cache@^7.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1: - version "7.13.2" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz#bb5d3f1deea3f3a7a35c1c44345566a612e09cd0" - integrity sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA== - lunr@^2.3.9: version "2.3.9" resolved "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz#18b123142832337dd6e964df1a5a7707b25d35e1" @@ -18193,11 +18107,6 @@ lz-string@^1.4.4: resolved "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz#c0d8eaf36059f705796e1e344811cf4c498d3a26" integrity sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY= -macos-release@^2.2.0: - version "2.3.0" - resolved "https://registry.npmjs.org/macos-release/-/macos-release-2.3.0.tgz#eb1930b036c0800adebccd5f17bc4c12de8bb71f" - integrity sha512-OHhSbtcviqMPt7yfw5ef5aghS2jzFVKEFyCJndQt2YpSQ9qRVSEv2axSJI1paVThEu+FFGs584h/1YhxjVqajA== - magic-string@^0.25.7: version "0.25.7" resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" @@ -18254,10 +18163,10 @@ make-fetch-happen@^10.0.1: socks-proxy-agent "^6.1.1" ssri "^8.0.1" -make-fetch-happen@^10.0.3, make-fetch-happen@^10.0.6: - version "10.2.0" - resolved "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.0.tgz#0bde3914f2f82750b5d48c6d2294d2c74f985e5b" - integrity sha512-OnEfCLofQVJ5zgKwGk55GaqosqKjaR6khQlJY3dBAA+hM25Bc5CmX5rKUfVut+rYA3uidA7zb7AvcglU87rPRg== +make-fetch-happen@^10.0.6: + version "10.1.7" + resolved "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.1.7.tgz#b1402cb3c9fad92b380ff3a863cdae5414a42f76" + integrity sha512-J/2xa2+7zlIUKqfyXDCXFpH3ypxO4k3rgkZHPSZkyUYcBT/hM80M3oyKLM/9dVriZFiGeGGS2Ei+0v2zfhqj3Q== dependencies: agentkeepalive "^4.2.1" cacache "^16.1.0" @@ -18276,6 +18185,27 @@ make-fetch-happen@^10.0.3, make-fetch-happen@^10.0.6: socks-proxy-agent "^7.0.0" ssri "^9.0.0" +make-fetch-happen@^8.0.9: + version "8.0.14" + resolved "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-8.0.14.tgz#aaba73ae0ab5586ad8eaa68bd83332669393e222" + integrity sha512-EsS89h6l4vbfJEtBZnENTOFk8mCRpY5ru36Xe5bcX1KYIli2mkSHqoFsp5O1wMDvTJJzxe/4THpCTtygjeeGWQ== + dependencies: + agentkeepalive "^4.1.3" + cacache "^15.0.5" + http-cache-semantics "^4.1.0" + http-proxy-agent "^4.0.1" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^6.0.0" + minipass "^3.1.3" + minipass-collect "^1.0.2" + minipass-fetch "^1.3.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + promise-retry "^2.0.1" + socks-proxy-agent "^5.0.0" + ssri "^8.0.0" + make-fetch-happen@^9.1.0: version "9.1.0" resolved "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz#53085a09e7971433e6765f7971bf63f4e05cb968" @@ -18626,7 +18556,12 @@ merge-stream@^2.0.0: resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -merge2@^1.3.0, merge2@^1.4.1: +merge2@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/merge2/-/merge2-1.3.0.tgz#5b366ee83b2f1582c48f87e47cf1a9352103ca81" + integrity sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw== + +merge2@^1.4.1: version "1.4.1" resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== @@ -19056,13 +18991,6 @@ minimatch@3.0.4: dependencies: brace-expansion "^1.1.7" -minimatch@3.0.5: - version "3.0.5" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz#4da8f1290ee0f0f8e83d60ca69f8f134068604a3" - integrity sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw== - dependencies: - brace-expansion "^1.1.7" - minimatch@4.2.1: version "4.2.1" resolved "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz#40d9d511a46bdc4e563c22c3080cde9c0d8299b4" @@ -19112,7 +19040,7 @@ minipass-collect@^1.0.2: dependencies: minipass "^3.0.0" -minipass-fetch@^1.3.2, minipass-fetch@^1.4.1: +minipass-fetch@^1.3.0, minipass-fetch@^1.3.2, minipass-fetch@^1.4.1: version "1.4.1" resolved "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz#d75e0091daac1b0ffd7e9d41629faff7d0c1f1b6" integrity sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw== @@ -19164,9 +19092,9 @@ minipass-sized@^1.0.3: minipass "^3.0.0" minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3, minipass@^3.1.6: - version "3.3.4" - resolved "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz#ca99f95dd77c43c7a76bf51e6d200025eee0ffae" - integrity sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw== + version "3.1.6" + resolved "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz#3b8150aa688a711a1521af5e8779c1d3bb4f45ee" + integrity sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ== dependencies: yallist "^4.0.0" @@ -19505,11 +19433,6 @@ neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.2: resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - nise@^5.1.1: version "5.1.1" resolved "https://registry.npmjs.org/nise/-/nise-5.1.1.tgz#ac4237e0d785ecfcb83e20f389185975da5c31f3" @@ -19541,11 +19464,6 @@ node-abort-controller@^3.0.1: resolved "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.0.1.tgz#f91fa50b1dee3f909afabb7e261b1e1d6b0cb74e" integrity sha512-/ujIVxthRs+7q6hsdjHMaj8hRG9NuWmwrz+JdRwZ14jdFoKSkm+vDsCbF9PLpnSqjaWQJuTmVtcWHNLr+vrOFw== -node-addon-api@^3.2.1: - version "3.2.1" - resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161" - integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== - node-cache@^5.1.2: version "5.1.2" resolved "https://registry.npmjs.org/node-cache/-/node-cache-5.1.2.tgz#f264dc2ccad0a780e76253a694e9fd0ed19c398d" @@ -19577,12 +19495,7 @@ node-forge@^1, node-forge@^1.3.1: resolved "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== -node-gyp-build@^4.3.0: - version "4.5.0" - resolved "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz#7a64eefa0b21112f89f58379da128ac177f20e40" - integrity sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg== - -node-gyp@^8.2.0: +node-gyp@^8.2.0, node-gyp@^8.4.1: version "8.4.1" resolved "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz#3d49308fc31f768180957d6b5746845fbd429937" integrity sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w== @@ -19598,22 +19511,6 @@ node-gyp@^8.2.0: tar "^6.1.2" which "^2.0.2" -node-gyp@^9.0.0: - version "9.1.0" - resolved "https://registry.npmjs.org/node-gyp/-/node-gyp-9.1.0.tgz#c8d8e590678ea1f7b8097511dedf41fc126648f8" - integrity sha512-HkmN0ZpQJU7FLbJauJTHkHlSVAXlNGDAzH/VYFZGDOnFyn/Na3GlNJfkudmufOdS6/jNFhy88ObzL7ERz9es1g== - dependencies: - env-paths "^2.2.0" - glob "^7.1.4" - graceful-fs "^4.2.6" - make-fetch-happen "^10.0.3" - nopt "^5.0.0" - npmlog "^6.0.0" - rimraf "^3.0.2" - semver "^7.3.5" - tar "^6.1.2" - which "^2.0.2" - node-int64@^0.4.0: version "0.4.0" resolved "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" @@ -19704,13 +19601,13 @@ normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: validate-npm-package-license "^3.0.1" normalize-package-data@^3.0.0: - version "3.0.3" - resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e" - integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== + version "3.0.0" + resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.0.tgz#1f8a7c423b3d2e85eb36985eaf81de381d01301a" + integrity sha512-6lUjEI0d3v6kFrtgA/lOx4zHCWULXsFNIjHolnZCKCTLA6m/G625cdn3O7eNmT0iD3jfo6HZ9cdImGZwf21prw== dependencies: - hosted-git-info "^4.0.1" - is-core-module "^2.5.0" - semver "^7.3.4" + hosted-git-info "^3.0.6" + resolve "^1.17.0" + semver "^7.3.2" validate-npm-package-license "^3.0.1" normalize-package-data@^4.0.0: @@ -19735,6 +19632,11 @@ normalize-path@^3.0.0, normalize-path@~3.0.0: resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== +normalize-url@^3.3.0: + version "3.3.0" + resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" + integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== + normalize-url@^6.0.1, normalize-url@^6.1.0: version "6.1.0" resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" @@ -19766,16 +19668,7 @@ npm-normalize-package-bin@^1.0.0, npm-normalize-package-bin@^1.0.1: resolved "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== -npm-package-arg@8.1.1: - version "8.1.1" - resolved "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.1.tgz#00ebf16ac395c63318e67ce66780a06db6df1b04" - integrity sha512-CsP95FhWQDwNqiYS+Q0mZ7FAEDytDZAkNxQqea6IaAFJTAY9Lhhqyl0irU/6PMc7BGfUmnsbHcqxJD7XuVM/rg== - dependencies: - hosted-git-info "^3.0.6" - semver "^7.0.0" - validate-npm-package-name "^3.0.0" - -npm-package-arg@^8.0.1, npm-package-arg@^8.1.2, npm-package-arg@^8.1.5: +npm-package-arg@^8.0.0, npm-package-arg@^8.0.1, npm-package-arg@^8.1.0, npm-package-arg@^8.1.2, npm-package-arg@^8.1.5: version "8.1.5" resolved "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz#3369b2d5fe8fdc674baa7f1786514ddc15466e44" integrity sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q== @@ -19785,15 +19678,24 @@ npm-package-arg@^8.0.1, npm-package-arg@^8.1.2, npm-package-arg@^8.1.5: validate-npm-package-name "^3.0.0" npm-package-arg@^9.0.0, npm-package-arg@^9.0.1: - version "9.1.0" - resolved "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz#a60e9f1e7c03e4e3e4e994ea87fff8b90b522987" - integrity sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw== + version "9.0.2" + resolved "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.0.2.tgz#f3ef7b1b3b02e82564af2d5228b4c36567dcd389" + integrity sha512-v/miORuX8cndiOheW8p2moNuPJ7QhcFh9WGlTorruG8hXSA23vMTEp5hTCmDxic0nD8KHhj/NQgFuySD3GYY3g== dependencies: hosted-git-info "^5.0.0" - proc-log "^2.0.1" semver "^7.3.5" validate-npm-package-name "^4.0.0" +npm-packlist@^2.1.4: + version "2.1.4" + resolved "https://registry.npmjs.org/npm-packlist/-/npm-packlist-2.1.4.tgz#40e96b2b43787d0546a574542d01e066640d09da" + integrity sha512-Qzg2pvXC9U4I4fLnUrBmcIT4x0woLtUgxUi9eC+Zrcv1Xx5eamytGAfbDWQ67j7xOcQ2VW1I3su9smVTIdu7Hw== + dependencies: + glob "^7.1.6" + ignore-walk "^3.0.3" + npm-bundled "^1.1.1" + npm-normalize-package-bin "^1.0.1" + npm-packlist@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/npm-packlist/-/npm-packlist-3.0.0.tgz#0370df5cfc2fcc8f79b8f42b37798dd9ee32c2a9" @@ -19804,7 +19706,7 @@ npm-packlist@^3.0.0: npm-bundled "^1.1.1" npm-normalize-package-bin "^1.0.1" -npm-packlist@^5.0.0, npm-packlist@^5.1.0, npm-packlist@^5.1.1: +npm-packlist@^5.0.0, npm-packlist@^5.1.0: version "5.1.1" resolved "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.1.tgz#79bcaf22a26b6c30aa4dd66b976d69cc286800e0" integrity sha512-UfpSvQ5YKwctmodvPPkK6Fwk603aoVsf8AEbmVKAEECrfvL8SSe1A2YIwrJ6xmTHAITKPwwZsWo7WwEbNk0kxw== @@ -19846,10 +19748,10 @@ npm-registry-fetch@^12.0.0, npm-registry-fetch@^12.0.1: minizlib "^2.1.2" npm-package-arg "^8.1.5" -npm-registry-fetch@^13.0.0, npm-registry-fetch@^13.0.1, npm-registry-fetch@^13.3.0: - version "13.3.0" - resolved "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.3.0.tgz#0ce10fa4a699a1e70685ecf41bbfb4150d74231b" - integrity sha512-10LJQ/1+VhKrZjIuY9I/+gQTvumqqlgnsCufoXETHAPFTS3+M+Z5CFhZRDHGavmJ6rOye3UvNga88vl8n1r6gg== +npm-registry-fetch@^13.0.0, npm-registry-fetch@^13.0.1: + version "13.1.1" + resolved "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.1.1.tgz#26dc4b26d0a545886e807748032ba2aefaaae96b" + integrity sha512-5p8rwe6wQPLJ8dMqeTnA57Dp9Ox6GH9H60xkyJup07FmVlu3Mk7pf/kIIpl9gaN5bM8NM+UUx3emUWvDNTt39w== dependencies: make-fetch-happen "^10.0.6" minipass "^3.1.6" @@ -19859,12 +19761,19 @@ npm-registry-fetch@^13.0.0, npm-registry-fetch@^13.0.1, npm-registry-fetch@^13.3 npm-package-arg "^9.0.1" proc-log "^2.0.0" -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= +npm-registry-fetch@^9.0.0: + version "9.0.0" + resolved "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-9.0.0.tgz#86f3feb4ce00313bc0b8f1f8f69daae6face1661" + integrity sha512-PuFYYtnQ8IyVl6ib9d3PepeehcUeHN9IO5N/iCRhyg9tStQcqGQBRVHmfmMWPDERU3KwZoHFvbJ4FPXPspvzbA== dependencies: - path-key "^2.0.0" + "@npmcli/ci-detect" "^1.0.0" + lru-cache "^6.0.0" + make-fetch-happen "^8.0.9" + minipass "^3.1.3" + minipass-fetch "^1.3.0" + minipass-json-stream "^1.0.1" + minizlib "^2.0.0" + npm-package-arg "^8.0.0" npm-run-path@^4.0.0, npm-run-path@^4.0.1: version "4.0.1" @@ -19900,7 +19809,17 @@ npmlog@^5.0.1: gauge "^3.0.0" set-blocking "^2.0.0" -npmlog@^6.0.0, npmlog@^6.0.2: +npmlog@^6.0.0: + version "6.0.1" + resolved "https://registry.npmjs.org/npmlog/-/npmlog-6.0.1.tgz#06f1344a174c06e8de9c6c70834cfba2964bba17" + integrity sha512-BTHDvY6nrRHuRfyjt1MAufLxYdVXZfd099H4+i1f0lPywNQyI4foeNXJRObB/uy+TYqUW0vAD9gbdSOXPst7Eg== + dependencies: + are-we-there-yet "^3.0.0" + console-control-strings "^1.1.0" + gauge "^4.0.0" + set-blocking "^2.0.0" + +npmlog@^6.0.2: version "6.0.2" resolved "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== @@ -19941,42 +19860,6 @@ nwsapi@^2.2.0: resolved "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== -nx@14.5.4, "nx@>=14.5.4 < 16": - version "14.5.4" - resolved "https://registry.npmjs.org/nx/-/nx-14.5.4.tgz#58b6e8ee798733a6ab9aff2a19180c371482fa10" - integrity sha512-xv1nTaQP6kqVDE4PXcB1tLlgzNAPUHE/2vlqSLgxjNb6colKf0vrEZhVTjhnbqBeJiTb33gUx50bBXkurCkN5w== - dependencies: - "@nrwl/cli" "14.5.4" - "@nrwl/tao" "14.5.4" - "@parcel/watcher" "2.0.4" - chalk "4.1.0" - chokidar "^3.5.1" - cli-cursor "3.1.0" - cli-spinners "2.6.1" - cliui "^7.0.2" - dotenv "~10.0.0" - enquirer "~2.3.6" - fast-glob "3.2.7" - figures "3.2.0" - flat "^5.0.2" - fs-extra "^10.1.0" - glob "7.1.4" - ignore "^5.0.4" - js-yaml "4.1.0" - jsonc-parser "3.0.0" - minimatch "3.0.5" - npm-run-path "^4.0.1" - open "^8.4.0" - semver "7.3.4" - string-width "^4.2.3" - tar-stream "~2.2.0" - tmp "~0.2.1" - tsconfig-paths "^3.9.0" - tslib "^2.3.0" - v8-compile-cache "2.3.0" - yargs "^17.4.0" - yargs-parser "21.0.1" - oauth-sign@~0.9.0: version "0.9.0" resolved "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" @@ -20028,7 +19911,7 @@ object-visit@^1.0.0: dependencies: isobject "^3.0.0" -object.assign@^4.1.0, object.assign@^4.1.2: +object.assign@^4.1.0: version "4.1.2" resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== @@ -20038,6 +19921,16 @@ object.assign@^4.1.0, object.assign@^4.1.2: has-symbols "^1.0.1" object-keys "^1.1.1" +object.assign@^4.1.2: + version "4.1.3" + resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.3.tgz#d36b7700ddf0019abb6b1df1bb13f6445f79051f" + integrity sha512-ZFJnX3zltyjcYJL0RoCJuzb+11zWGyaDbjgxZbdV7rFEcHQuYxrZqhow67aA7xpes6LhojyFDaBKAFfogQrikA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + has-symbols "^1.0.3" + object-keys "^1.1.1" + object.entries@^1.1.5: version "1.1.5" resolved "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz#e1acdd17c4de2cd96d5a08487cfb9db84d881861" @@ -20098,18 +19991,18 @@ octokit-plugin-create-pull-request@^3.10.0: "@octokit/types" "^6.8.2" octokit@^2.0.0, octokit@^2.0.4: - version "2.0.4" - resolved "https://registry.npmjs.org/octokit/-/octokit-2.0.4.tgz#cfd3adee6b775d3fa8cd8746590bed36127cc0a0" - integrity sha512-9QvgYGzrSTGmr3koSGtbgeMgqYI20QI0Vv8Bk9y6phchk6L2aHFhcrUOIeNUPj1Z+KZnEBd6A/8faNpDFNfVjg== + version "2.0.7" + resolved "https://registry.npmjs.org/octokit/-/octokit-2.0.7.tgz#7e6658ddcca234d8cc6ca9344403b516d3b2d136" + integrity sha512-Rf+pY3fCphmS4jjLqQ+D0xS1U+Ry/pAZHLJNvsQksuj4aopl7qFLlV4Id2KIlaUpKZrUCPzOkLiZOaoEb47RZQ== dependencies: "@octokit/app" "^13.0.5" "@octokit/core" "^4.0.4" "@octokit/oauth-app" "^4.0.6" - "@octokit/plugin-paginate-rest" "^3.0.0" + "@octokit/plugin-paginate-rest" "^4.0.0" "@octokit/plugin-rest-endpoint-methods" "^6.0.0" "@octokit/plugin-retry" "^3.0.9" "@octokit/plugin-throttling" "^4.0.1" - "@octokit/types" "^6.35.0" + "@octokit/types" "^7.0.0" oidc-token-hash@^5.0.1: version "5.0.1" @@ -20251,14 +20144,6 @@ os-locale@^1.4.0: dependencies: lcid "^1.0.0" -os-name@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/os-name/-/os-name-3.1.0.tgz#dec19d966296e1cd62d701a5a66ee1ddeae70801" - integrity sha512-h8L+8aNjNcMpo/mAIBPn5PXCM16iyPGjHNWo6U1YO8sJTMHtEtyczI6QJnLoplswm6goopQkqc7OAnjhWcugVg== - dependencies: - macos-release "^2.2.0" - windows-release "^3.1.0" - os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" @@ -20339,7 +20224,7 @@ p-limit@^4.0.0: p-locate@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= dependencies: p-limit "^1.1.0" @@ -20425,7 +20310,7 @@ p-transform@^1.3.0: p-try@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== + integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= p-try@^2.0.0: version "2.2.0" @@ -20469,15 +20354,15 @@ pacote@^12.0.0, pacote@^12.0.2: ssri "^8.0.1" tar "^6.1.0" -pacote@^13.0.3, pacote@^13.6.1: - version "13.6.1" - resolved "https://registry.npmjs.org/pacote/-/pacote-13.6.1.tgz#ac6cbd9032b4c16e5c1e0c60138dfe44e4cc589d" - integrity sha512-L+2BI1ougAPsFjXRyBhcKmfT016NscRFLv6Pz5EiNf1CCFJFU0pSKKQwsZTyAQB+sTuUL4TyFyp6J1Ork3dOqw== +pacote@^13.0.3, pacote@^13.0.5, pacote@^13.4.1: + version "13.6.0" + resolved "https://registry.npmjs.org/pacote/-/pacote-13.6.0.tgz#79ea3d3ae5a2b29e2994dcf18d75494e8d888032" + integrity sha512-zHmuCwG4+QKnj47LFlW3LmArwKoglx2k5xtADiMCivVWPgNRP5QyLDGOIjGjwOe61lhl1rO63m/VxT16pEHLWg== dependencies: "@npmcli/git" "^3.0.0" "@npmcli/installed-package-contents" "^1.0.7" "@npmcli/promise-spawn" "^3.0.0" - "@npmcli/run-script" "^4.1.0" + "@npmcli/run-script" "^3.0.1" cacache "^16.0.0" chownr "^2.0.0" fs-minipass "^2.1.0" @@ -20552,13 +20437,13 @@ parse-bmfont-xml@^1.1.4: xml2js "^0.4.5" parse-conflict-json@^2.0.1: - version "2.0.2" - resolved "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-2.0.2.tgz#3d05bc8ffe07d39600dc6436c6aefe382033d323" - integrity sha512-jDbRGb00TAPFsKWCpZZOT93SxVP9nONOSgES3AevqRq/CHvavEBvKAjxX9p5Y5F0RZLxH9Ufd9+RwtCsa+lFDA== + version "2.0.1" + resolved "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-2.0.1.tgz#76647dd072e6068bcaff20be6ccea68a18e1fb58" + integrity sha512-Y7nYw+QaSGBto1LB9lgwOR05Rtz5SbuTf+Oe7HJ6SYQ/DHsvRjQ8O03oWdJbvkt6GzDWospgyZbGmjDYL0sDgA== dependencies: json-parse-even-better-errors "^2.3.1" just-diff "^5.0.1" - just-diff-apply "^5.2.0" + just-diff-apply "^4.0.1" parse-entities@^2.0.0: version "2.0.0" @@ -20608,7 +20493,7 @@ parse-json@^2.2.0: parse-json@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== + integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= dependencies: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" @@ -20628,6 +20513,14 @@ parse-package-name@^0.1.0: resolved "https://registry.npmjs.org/parse-package-name/-/parse-package-name-0.1.0.tgz#3f44dd838feb4c2be4bf318bae4477d7706bade4" integrity sha1-P0Tdg4/rTCvkvzGLrkR313BrreQ= +parse-path@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/parse-path/-/parse-path-4.0.1.tgz#0ec769704949778cb3b8eda5e994c32073a1adff" + integrity sha512-d7yhga0Oc+PwNXDvQ0Jv1BuWkLVPXcAoQ/WREgd6vNNoKYaW52KI+RdOFjI63wjkmps9yUE8VS4veP+AgpQ/hA== + dependencies: + is-ssh "^1.3.0" + protocols "^1.4.0" + parse-path@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/parse-path/-/parse-path-5.0.0.tgz#f933152f3c6d34f4cf36cfc3d07b138ac113649d" @@ -20635,6 +20528,16 @@ parse-path@^5.0.0: dependencies: protocols "^2.0.0" +parse-url@^5.0.0: + version "5.0.1" + resolved "https://registry.npmjs.org/parse-url/-/parse-url-5.0.1.tgz#99c4084fc11be14141efa41b3d117a96fcb9527f" + integrity sha512-flNUPP27r3vJpROi0/R3/2efgKkyXqnXwyP1KQ2U0SfFRgdizOdWfvrrvJg1LuOoxs7GQhmxJlq23IpQ/BkByg== + dependencies: + is-ssh "^1.3.0" + normalize-url "^3.3.0" + parse-path "^4.0.0" + protocols "^1.4.0" + parse-url@^7.0.2: version "7.0.2" resolved "https://registry.npmjs.org/parse-url/-/parse-url-7.0.2.tgz#d21232417199b8d371c6aec0cedf1406fd6393f0" @@ -20812,7 +20715,7 @@ path-exists@^2.0.0: path-exists@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= path-exists@^4.0.0: version "4.0.0" @@ -20822,18 +20725,13 @@ path-exists@^4.0.0: path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= path-is-inside@1.0.2, path-is-inside@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= -path-key@^2.0.0, path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= - path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" @@ -21036,7 +20934,7 @@ pify@^2.0.0, pify@^2.2.0, pify@^2.3.0: pify@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= pify@^4.0.1: version "4.0.1" @@ -21524,7 +21422,7 @@ prettier@^1.16.4, prettier@^1.19.1: resolved "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== -prettier@^2.2.1, prettier@^2.7.1: +prettier@^2.2.1: version "2.7.1" resolved "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== @@ -21586,7 +21484,7 @@ proc-log@^1.0.0: resolved "https://registry.npmjs.org/proc-log/-/proc-log-1.0.0.tgz#0d927307401f69ed79341e83a0b2c9a13395eb77" integrity sha512-aCk8AO51s+4JyuYGg3Q/a6gnrlDO09NpVWePtjp7xwphcoQ04x5WAfCyugcsbLooWcMJ87CLkD4+604IckEdhg== -proc-log@^2.0.0, proc-log@^2.0.1: +proc-log@^2.0.0: version "2.0.1" resolved "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz#8f3f69a1f608de27878f91f5c688b225391cb685" integrity sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw== @@ -21631,7 +21529,7 @@ promise-call-limit@^1.0.1: promise-inflight@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== + integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= promise-retry@^2.0.1: version "2.0.1" @@ -21664,7 +21562,7 @@ prompts@^2.0.1, prompts@^2.4.2: promzard@^0.3.0: version "0.3.0" resolved "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee" - integrity sha512-JZeYqd7UAcHCwI+sTOeUDYkvEU+1bQ7iE0UT1MgB/tERkAPkesW46MrpIySzODi+owTjZtiF8Ay5j9m60KmMBw== + integrity sha1-JqXW7ox97kyxIggwWs+5O6OCqe4= dependencies: read "1" @@ -21704,7 +21602,7 @@ property-information@^6.0.0: proto-list@~1.2.1: version "1.2.4" resolved "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" - integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA== + integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= proto3-json-serializer@^1.0.0: version "1.0.0" @@ -21751,6 +21649,11 @@ protobufjs@^7.0.0: "@types/node" ">=13.7.0" long "^5.0.0" +protocols@^1.1.0, protocols@^1.4.0: + version "1.4.7" + resolved "https://registry.npmjs.org/protocols/-/protocols-1.4.7.tgz#95f788a4f0e979b291ffefcf5636ad113d037d32" + integrity sha512-Fx65lf9/YDn3hUX08XUc0J8rSux36rEsyiv21ZGUC1mOyeM3lTRpZLcrm8aAolzS4itwVfm7TAPyxC2E5zd6xg== + protocols@^2.0.0, protocols@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/protocols/-/protocols-2.0.1.tgz#8f155da3fc0f32644e83c5782c8e8212ccf70a86" @@ -21816,15 +21719,6 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" -pumpify@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/pumpify/-/pumpify-2.0.1.tgz#abfc7b5a621307c728b551decbbefb51f0e4aa1e" - integrity sha512-m7KOje7jZxrmutanlkS1daj1dS6z6BgslzOXmcSEpIlCxM3VJH7lG5QLeck/6hgF6F4crFf01UtQmNsJfweTAw== - dependencies: - duplexify "^4.1.1" - inherits "^2.0.3" - pump "^3.0.0" - punycode@1.3.2: version "1.3.2" resolved "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" @@ -21841,9 +21735,9 @@ punycode@^2.1.0, punycode@^2.1.1: integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== puppeteer@^16.0.0: - version "16.1.0" - resolved "https://registry.npmjs.org/puppeteer/-/puppeteer-16.1.0.tgz#06a32dc347c94642601017fbf83e1d37379b9651" - integrity sha512-lhykJLbH2bbBaP3NfYI2Vj0T4ctrdfVdEVf8glZITPnLfqrJ0nfUzAYuIz5YcA79k5lmFKANIhEXex+jQChU3g== + version "16.1.1" + resolved "https://registry.npmjs.org/puppeteer/-/puppeteer-16.1.1.tgz#1bb8ec3b86f755c34b913421b81e9cd2cfad3588" + integrity sha512-lBneizsNF0zi1/iog9c0ogVnvDHJG4IWpkdIAgE2oiDKhr0MJRV8JeM2xbhUwCwhDJXjjVS2TNCZdLsMp9Ojdg== dependencies: cross-fetch "3.1.5" debug "4.3.4" @@ -21873,7 +21767,7 @@ pvutils@^1.1.3: q@^1.5.1: version "1.5.1" resolved "https://registry.npmjs.org/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== + integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= qs@6.10.3, qs@^6.10.1, qs@^6.10.2, qs@^6.10.3, qs@^6.9.1, qs@^6.9.4, qs@^6.9.6: version "6.10.3" @@ -21922,11 +21816,6 @@ querystringify@^2.1.1: resolved "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - quick-format-unescaped@^3.0.3: version "3.0.3" resolved "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-3.0.3.tgz#fb3e468ac64c01d22305806c39f121ddac0d1fb9" @@ -22400,7 +22289,7 @@ react-universal-interface@^0.6.2: resolved "https://registry.npmjs.org/react-universal-interface/-/react-universal-interface-0.6.2.tgz#5e8d438a01729a4dbbcbeeceb0b86be146fe2b3b" integrity sha512-dg8yXdcQmvgR13RIlZbTRQOoUrDciFVoSBZILwjE2LFISxZZ8loVJKAkuzswl5js8BHda79bIb2b84ehU8IjXw== -react-use@^17.2.4, react-use@^17.3.1, react-use@^17.3.2: +react-use@^17.2.4, react-use@^17.3.1, react-use@^17.3.2, react-use@^17.4.0: version "17.4.0" resolved "https://registry.npmjs.org/react-use/-/react-use-17.4.0.tgz#cefef258b0a6c534a5c8021c2528ac6e1a4cdc6d" integrity sha512-TgbNTCA33Wl7xzIJegn1HndB4qTS9u03QUwyNycUnXaweZkE4Kq2SB+Yoxx8qbshkZGYBDvUXbXWRUmQDcZZ/Q== @@ -22441,10 +22330,10 @@ react@^17.0.2: loose-envify "^1.1.0" object-assign "^4.1.1" -read-cmd-shim@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-3.0.0.tgz#62b8c638225c61e6cc607f8f4b779f3b8238f155" - integrity sha512-KQDVjGqhZk92PPNRj9ZEXEuqg8bUobSKRw+q0YQ3TKI5xkce7bUJobL4Z/OtiEbAAv70yEpYIXp4iQ9L8oPVog== +read-cmd-shim@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-2.0.0.tgz#4a50a71d6f0965364938e9038476f7eede3928d9" + integrity sha512-HJpV9bQpkl6KwjxlJcBoqu9Ba0PQg8TqSNIOrulGt54a0uup0HtevreFHzYzkm0lpnleRdNBzXznKrgxglEHQw== read-package-json-fast@^2.0.1, read-package-json-fast@^2.0.2, read-package-json-fast@^2.0.3: version "2.0.3" @@ -22454,7 +22343,17 @@ read-package-json-fast@^2.0.1, read-package-json-fast@^2.0.2, read-package-json- json-parse-even-better-errors "^2.3.0" npm-normalize-package-bin "^1.0.1" -read-package-json@^5.0.0, read-package-json@^5.0.1: +read-package-json@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/read-package-json/-/read-package-json-3.0.0.tgz#2219328e77c9be34f035a4ce58d1fb8e2979adf9" + integrity sha512-4TnJZ5fnDs+/3deg1AuMExL4R1SFNRLQeOhV9c8oDKm3eoG6u8xU0r0mNNRJHi3K6B+jXmT7JOhwhAklWw9SSQ== + dependencies: + glob "^7.1.1" + json-parse-even-better-errors "^2.3.0" + normalize-package-data "^3.0.0" + npm-normalize-package-bin "^1.0.0" + +read-package-json@^5.0.0: version "5.0.1" resolved "https://registry.npmjs.org/read-package-json/-/read-package-json-5.0.1.tgz#1ed685d95ce258954596b13e2e0e76c7d0ab4c26" integrity sha512-MALHuNgYWdGW3gKzuNMuYtcSSZbGQm94fAp16xt8VsYTLBjUSc55bLMKe6gzpWue0Tfi6CBgwCSdDAqutGDhMg== @@ -22475,7 +22374,7 @@ read-pkg-up@^1.0.1: read-pkg-up@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" - integrity sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw== + integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc= dependencies: find-up "^2.0.0" read-pkg "^3.0.0" @@ -22501,7 +22400,7 @@ read-pkg@^1.0.0: read-pkg@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" - integrity sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA== + integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= dependencies: load-json-file "^4.0.0" normalize-package-data "^2.3.2" @@ -22527,10 +22426,10 @@ read-yaml-file@^1.1.0: pify "^4.0.1" strip-bom "^3.0.0" -read@1, read@^1.0.7: +read@1, read@~1.0.1: version "1.0.7" resolved "https://registry.npmjs.org/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" - integrity sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ== + integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ= dependencies: mute-stream "~0.0.4" @@ -23059,7 +22958,7 @@ resolve.exports@^1.1.0: resolved "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz#5ce842b94b05146c0e03076985d1d0e7e48c90c9" integrity sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ== -resolve@^1.1.6, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0: +resolve@^1.1.6, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.19.0, resolve@^1.20.0: version "1.21.0" resolved "https://registry.npmjs.org/resolve/-/resolve-1.21.0.tgz#b51adc97f3472e6a5cf4444d34bc9d6b9037591f" integrity sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA== @@ -23068,7 +22967,7 @@ resolve@^1.1.6, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -resolve@^1.10.0, resolve@^1.17.0: +resolve@^1.10.0: version "1.22.1" resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== @@ -23150,7 +23049,7 @@ retry@0.13.1: retry@^0.12.0: version "0.12.0" resolved "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" - integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== + integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= reusify@^1.0.4: version "1.0.4" @@ -23225,9 +23124,9 @@ rollup-plugin-dts@^4.0.1: "@babel/code-frame" "^7.16.7" rollup-plugin-esbuild@^4.7.2: - version "4.9.1" - resolved "https://registry.npmjs.org/rollup-plugin-esbuild/-/rollup-plugin-esbuild-4.9.1.tgz#369d137e2b1542c8ee459495fd4f10de812666aa" - integrity sha512-qn/x7Wz9p3Xnva99qcb+nopH0d2VJwVnsxJTGEg+Sh2Z3tqQl33MhOwzekVo1YTKgv+yAmosjcBRJygMfGrtLw== + version "4.9.3" + resolved "https://registry.npmjs.org/rollup-plugin-esbuild/-/rollup-plugin-esbuild-4.9.3.tgz#8c62042bdda9f33d18b1c280914394e5a842dd53" + integrity sha512-bxfUNYTa9Tw/4kdFfT9gtidDtqXyRdCW11ctZM7D8houCCVqp5qHzQF7hhIr31rqMA0APbG47fgVbbCGXgM49Q== dependencies: "@rollup/pluginutils" "^4.1.1" debug "^4.3.3" @@ -23289,9 +23188,9 @@ rollup@^0.63.4: "@types/node" "*" rollup@^2.60.2: - version "2.77.2" - resolved "https://registry.npmjs.org/rollup/-/rollup-2.77.2.tgz#6b6075c55f9cc2040a5912e6e062151e42e2c4e3" - integrity sha512-m/4YzYgLcpMQbxX3NmAqDvwLATZzxt8bIegO78FZLl+lAgKJBd1DRAOeEiZcKOIOPjxE6ewHWHNgGEalFXuz1g== + version "2.77.3" + resolved "https://registry.npmjs.org/rollup/-/rollup-2.77.3.tgz#8f00418d3a2740036e15deb653bed1a90ee0cc12" + integrity sha512-/qxNTG7FbmefJWoeeYJFbHehJ2HNWnjkAFRKzWN/45eNBBF/r8lo992CwcJXEzyVxs5FmfId+vTSTQDb+bxA+g== optionalDependencies: fsevents "~2.3.2" @@ -23303,37 +23202,37 @@ rtl-css-js@^1.14.0: "@babel/runtime" "^7.1.2" run-async@^2.4.0: - version "2.4.1" - resolved "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" - integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + version "2.4.0" + resolved "https://registry.npmjs.org/run-async/-/run-async-2.4.0.tgz#e59054a5b86876cfae07f431d18cbaddc594f1e8" + integrity sha512-xJTbh/d7Lm7SBhc1tNvTpeCHaEzoyxPrqNlvSdMfBTYwaY++UJFyXUOxAtsRUXjlqOfj8luNaR9vjCh4KeV+pg== + dependencies: + is-promise "^2.1.0" run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" + version "1.1.9" + resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz#c9dd3a7cf9f4b2c4b6244e173a6ed866e61dd679" + integrity sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q== run-script-webpack-plugin@^0.1.0: version "0.1.1" resolved "https://registry.npmjs.org/run-script-webpack-plugin/-/run-script-webpack-plugin-0.1.1.tgz#dad3114be32eb864d2160306e4d9c52a2c1cfd59" integrity sha512-PrxBRLv1K9itDKMlootSCyGhdTU+KbKGJ2wF6/k0eyo6M0YGPC58HYbS/J/QsDiwM0t7G99WcuCqto0J7omOXA== -rxjs@7.5.5, rxjs@^7.1.0, rxjs@^7.5.1: +rxjs@7.5.5, rxjs@^7.1.0, rxjs@^7.5.1, rxjs@^7.5.5: version "7.5.5" resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz#2ebad89af0f560f460ad5cc4213219e1f7dd4e9f" integrity sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw== dependencies: tslib "^2.1.0" -rxjs@^6.6.3: +rxjs@^6.6.0, rxjs@^6.6.3: version "6.6.7" resolved "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== dependencies: tslib "^1.9.0" -rxjs@^7.0.0, rxjs@^7.5.5: +rxjs@^7.0.0: version "7.5.6" resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.5.6.tgz#0446577557862afd6903517ce7cae79ecb9662bc" integrity sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw== @@ -23496,7 +23395,7 @@ semver-store@^0.3.0: resolved "https://registry.npmjs.org/semver-store/-/semver-store-0.3.0.tgz#ce602ff07df37080ec9f4fb40b29576547befbe9" integrity sha512-TcZvGMMy9vodEFSse30lWinkj+JgOBvPn8wRItpQRSayhc+4ssDs335uklkfvQQJgL/WvmHLVj4Ycv2s7QCQMg== -"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.6.0, semver@^5.7.1: +"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.6.0, semver@^5.7.1: version "5.7.1" resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== @@ -23506,13 +23405,6 @@ semver@7.0.0, semver@~7.0.0: resolved "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== -semver@7.3.4: - version "7.3.4" - resolved "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" - integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== - dependencies: - lru-cache "^6.0.0" - semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: version "6.3.0" resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" @@ -23619,7 +23511,7 @@ serve-static@1.15.0: set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= set-cookie-parser@^2.4.6: version "2.4.8" @@ -23955,16 +23847,16 @@ sockjs@^0.3.24: uuid "^8.3.2" websocket-driver "^0.7.4" -socks-proxy-agent@^6.0.0: - version "6.2.1" - resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz#2687a31f9d7185e38d530bef1944fe1f1496d6ce" - integrity sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ== +socks-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.0.tgz#7c0f364e7b1cf4a7a437e71253bed72e9004be60" + integrity sha512-lEpa1zsWCChxiynk+lCycKuC502RxDWLKJZoIhnxrWNjLSDGYRFflHA1/228VkRcnv9TIb8w98derGbpKxJRgA== dependencies: - agent-base "^6.0.2" - debug "^4.3.3" - socks "^2.6.2" + agent-base "6" + debug "4" + socks "^2.3.3" -socks-proxy-agent@^6.1.1: +socks-proxy-agent@^6.0.0, socks-proxy-agent@^6.1.1: version "6.1.1" resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.1.1.tgz#e664e8f1aaf4e1fb3df945f09e3d94f911137f87" integrity sha512-t8J0kG3csjA4g6FTbsMOWws+7R7vuRC8aQ/wy3/1OWmsgwA68zs/+cExQ0koSitUDXqhufF/YJr9wtNMZHw5Ew== @@ -23982,12 +23874,12 @@ socks-proxy-agent@^7.0.0: debug "^4.3.3" socks "^2.6.2" -socks@^2.6.1, socks@^2.6.2: - version "2.7.0" - resolved "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz#f9225acdb841e874dca25f870e9130990f3913d0" - integrity sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA== +socks@^2.3.3, socks@^2.6.1, socks@^2.6.2: + version "2.6.2" + resolved "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz#ec042d7960073d40d94268ff3bb727dc685f111a" + integrity sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA== dependencies: - ip "^2.0.0" + ip "^1.1.5" smart-buffer "^4.2.0" sonic-boom@^0.7.5: @@ -24001,7 +23893,7 @@ sonic-boom@^0.7.5: sort-keys@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" - integrity sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg== + integrity sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg= dependencies: is-plain-obj "^1.0.0" @@ -24244,7 +24136,7 @@ ssri@^8.0.0, ssri@^8.0.1: dependencies: minipass "^3.1.1" -ssri@^9.0.0, ssri@^9.0.1: +ssri@^9.0.0: version "9.0.1" resolved "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz#544d4c357a8d7b71a19700074b6883fcb4eae057" integrity sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q== @@ -24358,7 +24250,7 @@ stream-combiner@~0.0.4: dependencies: duplexer "~0.1.1" -stream-events@^1.0.4, stream-events@^1.0.5: +stream-events@^1.0.5: version "1.0.5" resolved "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz#bbc898ec4df33a4902d892333d47da9bf1c406d5" integrity sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg== @@ -24568,11 +24460,6 @@ strip-bom@^4.0.0: resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= - strip-final-newline@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" @@ -24793,9 +24680,9 @@ swagger-client@^3.18.5: url "~0.11.0" swagger-ui-react@^4.11.1: - version "4.13.2" - resolved "https://registry.npmjs.org/swagger-ui-react/-/swagger-ui-react-4.13.2.tgz#dee4f42dae9ca8b9ac85e64a46fc12c694100a80" - integrity sha512-U3IarPb0Vyi5/bHb45Q8uWf/7fowPp3B+LeYF0VKB4xhgKNiaPypPHoSJW9oCse/lkFGd4ZKyqBOpYXCsWMcgA== + version "4.14.0" + resolved "https://registry.npmjs.org/swagger-ui-react/-/swagger-ui-react-4.14.0.tgz#c1a26955d8481ad024eada6e1d59c44d0b061ab1" + integrity sha512-Yz3E5a5ujj2jqI4V+OELUjgs04uGNkJxbFLTe9KyrSs37yeMsyoDwLRGWuAAP6BRLhonJzLeZRTbnD2cK+iVew== dependencies: "@babel/runtime-corejs3" "^7.18.9" "@braintree/sanitize-url" "=6.0.0" @@ -24891,7 +24778,7 @@ tar-fs@~2.0.1: pump "^3.0.0" tar-stream "^2.0.0" -tar-stream@^2.0.0, tar-stream@^2.1.4, tar-stream@^2.2.0, tar-stream@~2.2.0: +tar-stream@^2.0.0, tar-stream@^2.1.4, tar-stream@^2.2.0: version "2.2.0" resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== @@ -24927,20 +24814,20 @@ tdigest@^0.1.1: bintrees "1.0.1" "techdocs-cli-embedded-app@link:packages/techdocs-cli-embedded-app": - version "0.2.73-next.0" + version "0.2.73" dependencies: - "@backstage/app-defaults" "^1.0.5-next.0" + "@backstage/app-defaults" "^1.0.5" "@backstage/catalog-model" "^1.1.0" - "@backstage/cli" "^0.18.1-next.0" + "@backstage/cli" "^0.18.1" "@backstage/config" "^1.0.1" - "@backstage/core-app-api" "^1.0.5-next.0" - "@backstage/core-components" "^0.10.1-next.0" - "@backstage/core-plugin-api" "^1.0.5-next.0" - "@backstage/integration-react" "^1.1.3-next.0" - "@backstage/plugin-catalog" "^1.5.0-next.0" - "@backstage/plugin-techdocs" "^1.3.1-next.0" - "@backstage/plugin-techdocs-react" "^1.0.3-next.0" - "@backstage/test-utils" "^1.1.3-next.0" + "@backstage/core-app-api" "^1.0.5" + "@backstage/core-components" "^0.11.0" + "@backstage/core-plugin-api" "^1.0.5" + "@backstage/integration-react" "^1.1.3" + "@backstage/plugin-catalog" "^1.5.0" + "@backstage/plugin-techdocs" "^1.3.1" + "@backstage/plugin-techdocs-react" "^1.0.3" + "@backstage/test-utils" "^1.1.3" "@backstage/theme" "^0.2.16" "@material-ui/core" "^4.11.0" "@material-ui/icons" "^4.9.1" @@ -24965,7 +24852,7 @@ teeny-request@^8.0.0: temp-dir@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" - integrity sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ== + integrity sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0= temp@^0.8.4: version "0.8.4" @@ -24988,17 +24875,17 @@ terminal-link@^2.0.0: supports-hyperlinks "^2.0.0" terser-webpack-plugin@*, terser-webpack-plugin@^5.1.3: - version "5.3.3" - resolved "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.3.tgz#8033db876dd5875487213e87c627bca323e5ed90" - integrity sha512-Fx60G5HNYknNTNQnzQ1VePRuu89ZVYWfjRAeT5rITuCY/1b08s49e5kSQwHDirKZWuoKOBRFS98EUUoZ9kLEwQ== + version "5.3.5" + resolved "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.5.tgz#f7d82286031f915a4f8fb81af4bd35d2e3c011bc" + integrity sha512-AOEDLDxD2zylUGf/wxHxklEkOe2/r+seuyOWujejFrIxHf11brA1/dWQNIgXa1c6/Wkxgu7zvv0JhOWfc2ELEA== dependencies: - "@jridgewell/trace-mapping" "^0.3.7" + "@jridgewell/trace-mapping" "^0.3.14" jest-worker "^27.4.5" schema-utils "^3.1.1" serialize-javascript "^6.0.0" - terser "^5.7.2" + terser "^5.14.1" -terser@^5.10.0, terser@^5.7.2: +terser@^5.10.0, terser@^5.14.1: version "5.14.2" resolved "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz#9ac9f22b06994d736174f4091aa368db896f1c10" integrity sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA== @@ -25325,6 +25212,11 @@ trim-newlines@^3.0.0: resolved "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== +trim-off-newlines@^1.0.0: + version "1.0.3" + resolved "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.3.tgz#8df24847fcb821b0ab27d58ab6efec9f2fe961a1" + integrity sha512-kh6Tu6GbeSNMGfrrZh6Bb/4ZEHV1QlB4xNDBeog8Y9/QwFlKTRyWvY3Fs9tRDAMZliVUwieMgEdIeL/FtqjkJg== + triple-beam@^1.3.0: version "1.3.0" resolved "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz#a595214c7298db8339eeeee083e4d10bd8cb8dd9" @@ -25401,7 +25293,7 @@ ts-node@^9: source-map-support "^0.5.17" yn "3.1.1" -tsconfig-paths@^3.14.1, tsconfig-paths@^3.9.0: +tsconfig-paths@^3.14.1: version "3.14.1" resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a" integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ== @@ -25426,7 +25318,7 @@ tslib@^1.13.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.1.0, tslib@^2.3.0, tslib@^2.4.0, tslib@~2.4.0: +tslib@^2.1.0, tslib@^2.4.0, tslib@~2.4.0: version "2.4.0" resolved "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== @@ -25559,7 +25451,7 @@ typedarray-to-buffer@^3.1.5: typedarray@^0.0.6: version "0.0.6" resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= typescript-json-schema@^0.54.0: version "0.54.0" @@ -25596,9 +25488,9 @@ uc.micro@^1.0.1, uc.micro@^1.0.5: integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA== uglify-js@^3.1.4: - version "3.16.3" - resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.16.3.tgz#94c7a63337ee31227a18d03b8a3041c210fd1f1d" - integrity sha512-uVbFqx9vvLhQg0iBaau9Z75AxWJ8tqM9AV890dIZCLApF4rTcyHwmAvLeEdYRs+BzYWu8Iw81F79ah0EfTXbaw== + version "3.14.3" + resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.3.tgz#c0f25dfea1e8e5323eccf59610be08b6043c15cf" + integrity sha512-mic3aOdiq01DuSVx0TseaEzMIVqebMZ0Z3vaeDhFEh9bsc24hV1TFvN74reA2vs08D0ZWfNjAcJ3UbVLaBss+g== uid-safe@~2.1.5: version "2.1.5" @@ -25826,13 +25718,6 @@ universal-github-app-jwt@^1.0.1: "@types/jsonwebtoken" "^8.3.3" jsonwebtoken "^8.5.1" -universal-user-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-5.0.0.tgz#a3182aa758069bf0e79952570ca757de3579c1d9" - integrity sha512-B5TPtzZleXyPrUMKCpEHFmVhMN6EhmJYjG5PQna9s7mXeSqGTLap4OpqLl5FCEFUI3UBmllkETwKf/db66Y54Q== - dependencies: - os-name "^3.1.0" - universal-user-agent@^6.0.0: version "6.0.0" resolved "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" @@ -26062,11 +25947,6 @@ v8-compile-cache-lib@^3.0.1: resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== -v8-compile-cache@2.3.0: - version "2.3.0" - resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" - integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== - v8-compile-cache@^2.0.3: version "2.1.0" resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz#e14de37b31a6d194f5690d67efc4e7f6fc6ab30e" @@ -26081,6 +25961,11 @@ v8-to-istanbul@^8.1.0: convert-source-map "^1.6.0" source-map "^0.7.3" +valid-url@^1.0.9: + version "1.0.9" + resolved "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz#1c14479b40f1397a75782f115e4086447433a200" + integrity sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA== + validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: version "3.0.4" resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" @@ -26092,7 +25977,7 @@ validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: validate-npm-package-name@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" - integrity sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw== + integrity sha1-X6kS2B630MdK/BQN5zF/DKffQ34= dependencies: builtins "^1.0.3" @@ -26288,7 +26173,7 @@ wbuf@^1.1.0, wbuf@^1.7.3: wcwidth@>=1.0.1, wcwidth@^1.0.0, wcwidth@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" - integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== + integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= dependencies: defaults "^1.0.3" @@ -26349,9 +26234,9 @@ webpack-dev-middleware@^5.3.1: schema-utils "^4.0.0" webpack-dev-server@^4.7.3: - version "4.9.3" - resolved "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.9.3.tgz#2360a5d6d532acb5410a668417ad549ee3b8a3c9" - integrity sha512-3qp/eoboZG5/6QgiZ3llN8TUzkSpYg1Ko9khWX1h40MIEUNS2mDoIa8aXsPfskER+GbTvs/IJZ1QTBBhhuetSw== + version "4.10.0" + resolved "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.10.0.tgz#de270d0009eba050546912be90116e7fd740a9ca" + integrity sha512-7dezwAs+k6yXVFZ+MaL8VnE+APobiO3zvpp3rBHe/HmWQ+avwh0Q3d0xxacOiBybZZ3syTZw9HXzpa3YNbAZDQ== dependencies: "@types/bonjour" "^3.5.9" "@types/connect-history-api-fallback" "^1.3.5" @@ -26552,13 +26437,6 @@ window-size@^0.2.0: resolved "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075" integrity sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU= -windows-release@^3.1.0: - version "3.2.0" - resolved "https://registry.npmjs.org/windows-release/-/windows-release-3.2.0.tgz#8122dad5afc303d833422380680a79cdfa91785f" - integrity sha512-QTlz2hKLrdqukrsapKsINzqMgOUpQW268eJ0OaOpJN32h272waxR9fkB9VoWRtK7uKHG5EHJcTXQBD8XZVJkFA== - dependencies: - execa "^1.0.0" - winston-transport@^4.5.0: version "4.5.0" resolved "https://registry.npmjs.org/winston-transport/-/winston-transport-4.5.0.tgz#6e7b0dd04d393171ed5e4e4905db265f7ab384fa" @@ -26592,7 +26470,7 @@ word-wrap@^1.2.3, word-wrap@~1.2.3: wordwrap@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== + integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= wrap-ansi@^2.0.0: version "2.1.0" @@ -26634,7 +26512,7 @@ write-file-atomic@^2.3.0, write-file-atomic@^2.4.2: imurmurhash "^0.1.4" signal-exit "^3.0.2" -write-file-atomic@^3.0.0: +write-file-atomic@^3.0.0, write-file-atomic@^3.0.3: version "3.0.3" resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== @@ -26644,7 +26522,7 @@ write-file-atomic@^3.0.0: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" -write-file-atomic@^4.0.0, write-file-atomic@^4.0.1: +write-file-atomic@^4.0.0: version "4.0.1" resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz#9faa33a964c1c85ff6f849b80b42a88c2c537c8f" integrity sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ== @@ -26868,16 +26746,11 @@ yaml@^2.0.0, yaml@^2.1.1: resolved "https://registry.npmjs.org/yaml/-/yaml-2.1.1.tgz#1e06fb4ca46e60d9da07e4f786ea370ed3c3cfec" integrity sha512-o96x3OPo8GjWeSLF+wOAbrPfhFOGY0W00GNaxCDv+9hkcDJEnev1yh8S7pgHF0ik6zc8sQLuL8hjHjJULZp8bw== -yargs-parser@20.2.4: +yargs-parser@20.2.4, yargs-parser@^20.2.3: version "20.2.4" resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== -yargs-parser@21.0.1: - version "21.0.1" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz#0267f286c877a4f0f728fceb6f8a3e4cb95c6e35" - integrity sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg== - yargs-parser@^18.1.2, yargs-parser@^18.1.3: version "18.1.3" resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" @@ -26886,7 +26759,7 @@ yargs-parser@^18.1.2, yargs-parser@^18.1.3: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@^20.2.2, yargs-parser@^20.2.3: +yargs-parser@^20.2.2: version "20.2.9" resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== @@ -26947,7 +26820,7 @@ yargs@^17.0.0, yargs@^17.2.1: y18n "^5.0.5" yargs-parser "^21.0.0" -yargs@^17.1.1, yargs@^17.3.1, yargs@^17.4.0: +yargs@^17.1.1, yargs@^17.3.1: version "17.5.1" resolved "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz#e109900cab6fcb7fd44b1d8249166feb0b36e58e" integrity sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA== @@ -27121,9 +26994,9 @@ zip-stream@^4.1.0: readable-stream "^3.6.0" zod@^3.11.6, zod@^3.9.5: - version "3.17.10" - resolved "https://registry.npmjs.org/zod/-/zod-3.17.10.tgz#8716a05e6869df6faaa878a44ffe3c79e615defb" - integrity sha512-IHXnQYQuOOOL/XgHhgl8YjNxBHi3xX0mVcHmqsvJgcxKkEczPshoWdxqyFwsARpf41E0v9U95WUROqsHHxt0UQ== + version "3.18.0" + resolved "https://registry.npmjs.org/zod/-/zod-3.18.0.tgz#2eed58b3cafb8d9a67aa2fee69279702f584f3bc" + integrity sha512-gwTm8RfUCe8l9rDwN5r2A17DkAa8Ez4Yl4yXqc5VqeGaXaJahzYYXbTwvhroZi0SNBqTwh/bKm2N0mpCzuw4bA== zustand@3.6.9: version "3.6.9"