diff --git a/.changeset/angry-stingrays-cover.md b/.changeset/angry-stingrays-cover.md new file mode 100644 index 0000000000..49fe04bb7e --- /dev/null +++ b/.changeset/angry-stingrays-cover.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-vault-backend': patch +--- + +Removed lock inside recursion to avoid deadlocks diff --git a/.changeset/brown-jokes-study.md b/.changeset/brown-jokes-study.md new file mode 100644 index 0000000000..352ef7e603 --- /dev/null +++ b/.changeset/brown-jokes-study.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-import': patch +--- + +Added the `no-top-level-material-ui-4-imports` ESLint rule to aid with the migration to Material UI v5 diff --git a/.changeset/chatty-bikes-greet.md b/.changeset/chatty-bikes-greet.md new file mode 100644 index 0000000000..449740ab93 --- /dev/null +++ b/.changeset/chatty-bikes-greet.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-shortcuts': patch +--- + +Added ESLint rule `no-top-level-material-ui-4-imports` in the `shortcuts` plugin to migrate the Material UI imports. diff --git a/.changeset/curly-socks-enjoy.md b/.changeset/curly-socks-enjoy.md new file mode 100644 index 0000000000..99c402f88d --- /dev/null +++ b/.changeset/curly-socks-enjoy.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-bitrise': patch +--- + +Added the `no-top-level-material-ui-4-import` ESLint rule to the Bitrise plugin to aid with the migration to Material UI v5. diff --git a/.changeset/curvy-flies-own.md b/.changeset/curvy-flies-own.md new file mode 100644 index 0000000000..19fcc6bf62 --- /dev/null +++ b/.changeset/curvy-flies-own.md @@ -0,0 +1,5 @@ +--- +'@backstage/cli': patch +--- + +Added a `EXPERIMENTAL_LAZY_COMPILATION` flag, which enables the experimental Webpack lazy compilation option in frontend builds. diff --git a/.changeset/cyan-dragons-shave.md b/.changeset/cyan-dragons-shave.md new file mode 100644 index 0000000000..6d591c5d31 --- /dev/null +++ b/.changeset/cyan-dragons-shave.md @@ -0,0 +1,16 @@ +--- +'@backstage/plugin-code-coverage-backend': patch +'@backstage/plugin-notifications-backend': patch +'@backstage/plugin-azure-devops-backend': patch +'@backstage/plugin-azure-sites-backend': patch +'@backstage/plugin-permission-backend': patch +'@backstage/plugin-airbrake-backend': patch +'@backstage/plugin-devtools-backend': patch +'@backstage/plugin-linguist-backend': patch +'@backstage/plugin-periskop-backend': patch +'@backstage/plugin-signals-backend': patch +'@backstage/plugin-nomad-backend': patch +'@backstage/plugin-vault-backend': patch +--- + +Allow unauthenticated access to health check endpoint. diff --git a/.changeset/dirty-hotels-sniff.md b/.changeset/dirty-hotels-sniff.md new file mode 100644 index 0000000000..111232999a --- /dev/null +++ b/.changeset/dirty-hotels-sniff.md @@ -0,0 +1,10 @@ +--- +'@backstage/plugin-notifications-backend': patch +'@backstage/plugin-signals-backend': minor +'@backstage/plugin-signals-node': minor +--- + +**BREAKING** Type definition added to signal recipients + +Update to use `{type: 'broadcast'}` instead `null` and `{type: 'user', entityRef: ''}` +instead string entity references diff --git a/.changeset/early-monkeys-drive.md b/.changeset/early-monkeys-drive.md new file mode 100644 index 0000000000..ffb7157d27 --- /dev/null +++ b/.changeset/early-monkeys-drive.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-rollbar': patch +--- + +Adjusted MUI imports for better tree shaking. diff --git a/.changeset/fair-socks-peel.md b/.changeset/fair-socks-peel.md new file mode 100644 index 0000000000..88aeb6517c --- /dev/null +++ b/.changeset/fair-socks-peel.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-auth-react': patch +--- + +Create a generic React component for refreshing user cookie. diff --git a/.changeset/few-rules-accept.md b/.changeset/few-rules-accept.md new file mode 100644 index 0000000000..7e3efca161 --- /dev/null +++ b/.changeset/few-rules-accept.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-sonarqube': patch +--- + +Added ESLint rule `no-top-level-material-ui-4-imports` in the `sonarqube` plugin to migrate the Material UI imports. diff --git a/.changeset/flat-kiwis-rush.md b/.changeset/flat-kiwis-rush.md new file mode 100644 index 0000000000..585b731eed --- /dev/null +++ b/.changeset/flat-kiwis-rush.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-scaffolder-backend': patch +'@backstage/plugin-scaffolder-node': patch +--- + +Fixing the lost of the initial state after a task recovery. diff --git a/.changeset/giant-pots-dream.md b/.changeset/giant-pots-dream.md new file mode 100644 index 0000000000..2baeb866a2 --- /dev/null +++ b/.changeset/giant-pots-dream.md @@ -0,0 +1,9 @@ +--- +'@techdocs/cli': patch +'@backstage/create-app': patch +'@backstage/repo-tools': patch +'@backstage/codemods': patch +'@backstage/cli': patch +--- + +Removed the `ts-node` dev dependency. diff --git a/.changeset/gold-mangos-agree.md b/.changeset/gold-mangos-agree.md new file mode 100644 index 0000000000..9afd7979e3 --- /dev/null +++ b/.changeset/gold-mangos-agree.md @@ -0,0 +1,5 @@ +--- +'@backstage/create-app': patch +--- + +Migrated the backend of the create app template to use the new backend system. For information on how to migrate your existing backend, see the [migration guide](https://backstage.io/docs/backend-system/building-backends/migrating). diff --git a/.changeset/healthy-suits-fetch.md b/.changeset/healthy-suits-fetch.md new file mode 100644 index 0000000000..29ff940b8f --- /dev/null +++ b/.changeset/healthy-suits-fetch.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-gcalendar': patch +--- + +Added ESLint rule `no-top-level-material-ui-4-imports` in the `gcalendar` plugin to migrate the Material UI imports. diff --git a/.changeset/khaki-penguins-whisper.md b/.changeset/khaki-penguins-whisper.md new file mode 100644 index 0000000000..f3412a5f79 --- /dev/null +++ b/.changeset/khaki-penguins-whisper.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-user-settings': patch +--- + +Added ESLint rule `no-top-level-material-ui-4-imports` in the `user-settings` plugin to migrate the Material UI imports. diff --git a/.changeset/lemon-mails-report.md b/.changeset/lemon-mails-report.md new file mode 100644 index 0000000000..5b3c805c07 --- /dev/null +++ b/.changeset/lemon-mails-report.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-badges': patch +--- + +Added ESLint rule `no-top-level-material-ui-4-imports` to aid with the migration to Material UI v5. diff --git a/.changeset/metal-toes-mate.md b/.changeset/metal-toes-mate.md new file mode 100644 index 0000000000..8ad933eda0 --- /dev/null +++ b/.changeset/metal-toes-mate.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-auth-backend-module-guest-provider': patch +--- + +Fix issue for issuing a token when `guest` user does not exist in catalog diff --git a/.changeset/modern-snails-ring.md b/.changeset/modern-snails-ring.md new file mode 100644 index 0000000000..2a00edfb34 --- /dev/null +++ b/.changeset/modern-snails-ring.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-unprocessed-entities': patch +--- + +Added the `no-top-level-material-ui-4-imports` ESLint rule to aid with the migration to Material UI v5 diff --git a/.changeset/nine-dryers-drive.md b/.changeset/nine-dryers-drive.md new file mode 100644 index 0000000000..d2c7c6b7e6 --- /dev/null +++ b/.changeset/nine-dryers-drive.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-codescene': patch +--- + +Added ESLint rule `no-top-level-material-ui-4-imports` in the Codescene plugin to migrate the Material UI imports. diff --git a/.changeset/perfect-buses-burn.md b/.changeset/perfect-buses-burn.md new file mode 100644 index 0000000000..9671b13c97 --- /dev/null +++ b/.changeset/perfect-buses-burn.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog': patch +--- + +Added the `no-top-level-material-ui-4-imports` ESLint rule to aid with the migration to Material UI v5 diff --git a/.changeset/perfect-countries-appear.md b/.changeset/perfect-countries-appear.md new file mode 100644 index 0000000000..8005e443d5 --- /dev/null +++ b/.changeset/perfect-countries-appear.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-cost-insights': patch +--- + +Added the `no-top-level-material-ui-4-imports` ESLint rule to aid with the migration to Material UI v5 diff --git a/.changeset/plenty-singers-call.md b/.changeset/plenty-singers-call.md new file mode 100644 index 0000000000..cd51c18aa1 --- /dev/null +++ b/.changeset/plenty-singers-call.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-stackstorm': patch +--- + +Added ESLint rule `no-top-level-material-ui-4-imports` in the `stackstorm` plugin to migrate the Material UI imports. diff --git a/.changeset/poor-coats-boil.md b/.changeset/poor-coats-boil.md new file mode 100644 index 0000000000..a9720614a5 --- /dev/null +++ b/.changeset/poor-coats-boil.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-notifications-backend': minor +'@backstage/plugin-notifications': minor +--- + +Notifications-backend URL query parameters changed from `sort/sortOrder` to `orderField` and `created_after` to `createdAfter` to unify with other plugins. diff --git a/.changeset/popular-guests-tickle.md b/.changeset/popular-guests-tickle.md new file mode 100644 index 0000000000..e442dae2d5 --- /dev/null +++ b/.changeset/popular-guests-tickle.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-tech-insights-backend-module-jsonfc': patch +--- + +Fixes an invalid line in the schema that was causing AJV to complain. diff --git a/.changeset/popular-poems-battle.md b/.changeset/popular-poems-battle.md new file mode 100644 index 0000000000..481603f03c --- /dev/null +++ b/.changeset/popular-poems-battle.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-xcmetrics': patch +--- + +Added ESLint rule `no-top-level-material-ui-4-imports` in the `xcmetrics` plugin to migrate the Material UI imports. diff --git a/.changeset/purple-bananas-add.md b/.changeset/purple-bananas-add.md new file mode 100644 index 0000000000..33eafdd2ab --- /dev/null +++ b/.changeset/purple-bananas-add.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-playlist': patch +--- + +Adjusted MUI imports for better tree shaking. diff --git a/.changeset/renovate-45377c1.md b/.changeset/renovate-45377c1.md new file mode 100644 index 0000000000..5b0c6e1fc8 --- /dev/null +++ b/.changeset/renovate-45377c1.md @@ -0,0 +1,5 @@ +--- +'@backstage/core-components': patch +--- + +Updated dependency `react-idle-timer` to `5.7.2`. diff --git a/.changeset/renovate-9d26a46.md b/.changeset/renovate-9d26a46.md new file mode 100644 index 0000000000..b25b04c94b --- /dev/null +++ b/.changeset/renovate-9d26a46.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-api-docs': patch +--- + +Updated dependency `graphiql` to `3.1.1`. diff --git a/.changeset/renovate-e2c6a43.md b/.changeset/renovate-e2c6a43.md new file mode 100644 index 0000000000..b908fa03a8 --- /dev/null +++ b/.changeset/renovate-e2c6a43.md @@ -0,0 +1,8 @@ +--- +'@backstage/cli': patch +--- + +Updated dependency `@spotify/prettier-config` to `^15.0.0`. +Updated dependency `@spotify/eslint-config-base` to `^15.0.0`. +Updated dependency `@spotify/eslint-config-react` to `^15.0.0`. +Updated dependency `@spotify/eslint-config-typescript` to `^15.0.0`. diff --git a/.changeset/rich-houses-wonder.md b/.changeset/rich-houses-wonder.md new file mode 100644 index 0000000000..7aa392badf --- /dev/null +++ b/.changeset/rich-houses-wonder.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-lighthouse': patch +--- + +Added ESLint rule `no-top-level-material-ui-4-imports` in the Lighthouse plugin to migrate the Material UI imports. diff --git a/.changeset/selfish-swans-think.md b/.changeset/selfish-swans-think.md new file mode 100644 index 0000000000..ef9861988d --- /dev/null +++ b/.changeset/selfish-swans-think.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-sentry': patch +--- + +Added ESLint rule `no-top-level-material-ui-4-imports` in the `sentry` plugin to migrate the Material UI imports. diff --git a/.changeset/serious-steaks-promise.md b/.changeset/serious-steaks-promise.md new file mode 100644 index 0000000000..55fee86f60 --- /dev/null +++ b/.changeset/serious-steaks-promise.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-techdocs': patch +'@backstage/plugin-techdocs-addons-test-utils': patch +--- + +Use the new generic refresh user cookie provider. diff --git a/.changeset/seven-bags-perform.md b/.changeset/seven-bags-perform.md new file mode 100644 index 0000000000..4633ad3b4f --- /dev/null +++ b/.changeset/seven-bags-perform.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-adr': patch +--- + +Added ESLint rule `no-top-level-material-ui-4-imports` in the ADR plugin to migrate the Material UI imports. diff --git a/.changeset/seven-monkeys-happen.md b/.changeset/seven-monkeys-happen.md new file mode 100644 index 0000000000..e81d20aece --- /dev/null +++ b/.changeset/seven-monkeys-happen.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-vault': patch +--- + +Added ESLint rule `no-top-level-material-ui-4-imports` in the `vault` plugin to migrate the Material UI imports. diff --git a/.changeset/shiny-buttons-whisper.md b/.changeset/shiny-buttons-whisper.md new file mode 100644 index 0000000000..a19a22e8b1 --- /dev/null +++ b/.changeset/shiny-buttons-whisper.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-home': patch +--- + +Added the `no-top-level-material-ui-4-imports` ESLint rule to aid with the migration to Material UI v5 diff --git a/.changeset/six-shirts-vanish.md b/.changeset/six-shirts-vanish.md new file mode 100644 index 0000000000..dca3e0d0fc --- /dev/null +++ b/.changeset/six-shirts-vanish.md @@ -0,0 +1,5 @@ +--- +'@backstage/cli': minor +--- + +The backend devlopment server transpilation has been replaced with a simplified solution based on SWC, which is already the transpiler used for tests. This fixed an issue where never versions of the `tsx` dependency had a new contract for signalling dependencies, breaking watch mode. This change fixed file watches as well as enables sourcemaps. diff --git a/.changeset/slimy-icons-swim.md b/.changeset/slimy-icons-swim.md new file mode 100644 index 0000000000..52e2769e51 --- /dev/null +++ b/.changeset/slimy-icons-swim.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-org': patch +--- + +Add `relationsType` argument to `MembersListCard`. +This can be used to display an aggregated user list for groups by default. diff --git a/.changeset/small-wasps-perform.md b/.changeset/small-wasps-perform.md new file mode 100644 index 0000000000..cdcea1ba98 --- /dev/null +++ b/.changeset/small-wasps-perform.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-code-climate': patch +--- + +Added ESLint rule `no-top-level-material-ui-4-imports` in the Code-Climate plugin to migrate the Material UI imports. diff --git a/.changeset/smooth-fireants-notice.md b/.changeset/smooth-fireants-notice.md new file mode 100644 index 0000000000..7a6322ab28 --- /dev/null +++ b/.changeset/smooth-fireants-notice.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-techdocs': patch +--- + +Added ESLint rule `no-top-level-material-ui-4-imports` to aid with the migration to Material UI v5. diff --git a/.changeset/spotty-ducks-deny.md b/.changeset/spotty-ducks-deny.md new file mode 100644 index 0000000000..964ec9428c --- /dev/null +++ b/.changeset/spotty-ducks-deny.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-tech-insights': patch +--- + +Added ESLint rule `no-top-level-material-ui-4-imports` in the `tech-insights` plugin to migrate the Material UI imports. diff --git a/.changeset/stale-bags-hug.md b/.changeset/stale-bags-hug.md new file mode 100644 index 0000000000..6929180596 --- /dev/null +++ b/.changeset/stale-bags-hug.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-auth-backend-module-atlassian-provider': patch +--- + +Addressed OAuth flow issue in Atlassian auth module diff --git a/.changeset/sweet-jokes-exercise.md b/.changeset/sweet-jokes-exercise.md new file mode 100644 index 0000000000..72a4f13889 --- /dev/null +++ b/.changeset/sweet-jokes-exercise.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-stack-overflow': patch +--- + +Added ESLint rule `no-top-level-material-ui-4-imports` in the `stack-overflow` plugin to migrate the Material UI imports. diff --git a/.changeset/tall-jeans-buy.md b/.changeset/tall-jeans-buy.md new file mode 100644 index 0000000000..6892c886b0 --- /dev/null +++ b/.changeset/tall-jeans-buy.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-github': patch +--- + +Add location analyzer when installing the module diff --git a/.changeset/thin-cats-speak.md b/.changeset/thin-cats-speak.md new file mode 100644 index 0000000000..a789c45cf9 --- /dev/null +++ b/.changeset/thin-cats-speak.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder': patch +--- + +Added the `no-top-level-material-ui-4-imports` ESLint rule to aid with the migration to Material UI v5 diff --git a/.changeset/twenty-seahorses-wave.md b/.changeset/twenty-seahorses-wave.md new file mode 100644 index 0000000000..f388d6abfd --- /dev/null +++ b/.changeset/twenty-seahorses-wave.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-splunk-on-call': patch +--- + +Added ESLint rule `no-top-level-material-ui-4-imports` in the `splunk-on-call` plugin to migrate the Material UI imports. diff --git a/.changeset/two-hornets-allow.md b/.changeset/two-hornets-allow.md new file mode 100644 index 0000000000..a748578580 --- /dev/null +++ b/.changeset/two-hornets-allow.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-app-api': patch +--- + +The experimental feature discovery service exported at the `/alpha` sub-path will no longer attempt to load packages that are not Backstage backend packages. diff --git a/.changeset/unlucky-drinks-glow.md b/.changeset/unlucky-drinks-glow.md new file mode 100644 index 0000000000..6e14095a62 --- /dev/null +++ b/.changeset/unlucky-drinks-glow.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-signals': patch +--- + +Added ESLint rule `no-top-level-material-ui-4-imports` in the `signals` plugin to migrate the Material UI imports. diff --git a/.changeset/warm-buses-do.md b/.changeset/warm-buses-do.md new file mode 100644 index 0000000000..b1755b0d0c --- /dev/null +++ b/.changeset/warm-buses-do.md @@ -0,0 +1,28 @@ +--- +'@backstage/plugin-catalog-backend-module-unprocessed': minor +'@backstage/plugin-catalog-unprocessed-entities': minor +'@backstage/plugin-catalog-unprocessed-entities-common': patch +--- + +**BREAKING**- the `@backstage/plugin-catalog-backend-module-unprocessed` constructor is now private, and have been moved to using the static `.create` method instead which now requires a `PermissionService` and `DiscoveryService`. + +If you're using this module in the old backend system you'll need to migrate to using the `.create` method and pass in the new required parameters in `packages/backend/src/plugins/catalog.ts`. + +No changes should be required if you're using the new backend system. + +```diff +- const unprocessed = new UnprocessedEntitiesModule( +- await env.database.getClient(), +- router, +- ); ++ const unprocessed = UnprocessedEntitiesModule.create({ ++ database: await env.database.getClient(), ++ router, ++ permissions: env.permissions, ++ discovery: env.discovery, ++ }); + + unprocessed.registerRoutes(); +``` + +Adds the ability to delete an unprocessed entity from the `refresh_state` table. This change requires enabling permissions for your Backstage instance. diff --git a/.changeset/weak-vans-heal.md b/.changeset/weak-vans-heal.md new file mode 100644 index 0000000000..ae0907f8bd --- /dev/null +++ b/.changeset/weak-vans-heal.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-graph': patch +--- + +Added the `no-top-level-material-ui-4-imports` ESLint rule to aid with the migration to Material UI v5 diff --git a/.changeset/wise-fireants-doubt.md b/.changeset/wise-fireants-doubt.md new file mode 100644 index 0000000000..7ec973b64c --- /dev/null +++ b/.changeset/wise-fireants-doubt.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-kafka': patch +--- + +Added ESLint rule `no-top-level-material-ui-4-imports` in the Kafka plugin to migrate the Material UI imports. diff --git a/.changeset/wise-schools-invite.md b/.changeset/wise-schools-invite.md new file mode 100644 index 0000000000..50cd0c8171 --- /dev/null +++ b/.changeset/wise-schools-invite.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-jenkins': patch +--- + +Added ESLint rule `no-top-level-material-ui-4-imports` in the Jenkins plugin to migrate the Material UI imports. diff --git a/.changeset/yellow-panthers-refuse.md b/.changeset/yellow-panthers-refuse.md new file mode 100644 index 0000000000..fde2dca0ac --- /dev/null +++ b/.changeset/yellow-panthers-refuse.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-code-coverage': patch +--- + +Added ESLint rule `no-top-level-material-ui-4-imports` in the Code-Coverage plugin to migrate the Material UI imports. diff --git a/.changeset/young-months-learn.md b/.changeset/young-months-learn.md new file mode 100644 index 0000000000..53ed048ff8 --- /dev/null +++ b/.changeset/young-months-learn.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-fossa': patch +--- + +Adjusted MUI imports for better tree shaking diff --git a/.github/workflows/deploy_docker-image.yml b/.github/workflows/deploy_docker-image.yml index f6cd52b284..276ae1a3f7 100644 --- a/.github/workflows/deploy_docker-image.yml +++ b/.github/workflows/deploy_docker-image.yml @@ -51,17 +51,17 @@ jobs: working-directory: ./example-app - name: Login to GitHub Container Registry - uses: docker/login-action@343f7c4344506bcbf9b4de18042ae17996df046d # v3.0.0 + uses: docker/login-action@e92390c5fb421da1463c202d546fed0ec5c39f20 # v3.1.0 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Set up Docker Buildx - uses: docker/setup-buildx-action@f95db51fddba0c2d1ec667646a06c2ce06100226 # v3.0.0 + uses: docker/setup-buildx-action@2b51285047da1547ffb1b2203d8be4c0af6b1f20 # v3.2.0 - name: Build and push - uses: docker/build-push-action@4a13e500e55cf31b7a5d59a38ab2040ab0f42f56 # v5.1.0 + uses: docker/build-push-action@2cdde995de11925a030ce8070c3d77a52ffcf1c0 # v5.3.0 with: context: './example-app' file: ./example-app/packages/backend/Dockerfile diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index d94373e9d1..86577f0bbf 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -66,6 +66,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: 'Upload to code-scanning' - uses: github/codeql-action/upload-sarif@47b3d888fe66b639e431abf22ebca059152f1eea # v3.24.5 + uses: github/codeql-action/upload-sarif@3ab4101902695724f9365a384f86c1074d94e18c # v3.24.7 with: sarif_file: results.sarif diff --git a/.github/workflows/sync_snyk-github-issues.yml b/.github/workflows/sync_snyk-github-issues.yml index 638f5213be..149fc32958 100644 --- a/.github/workflows/sync_snyk-github-issues.yml +++ b/.github/workflows/sync_snyk-github-issues.yml @@ -43,6 +43,6 @@ jobs: SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }} NODE_OPTIONS: --max-old-space-size=7168 - name: Update Github issues - run: yarn ts-node scripts/snyk-github-issue-sync.ts + run: ./scripts/snyk-github-issue-sync.ts env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/sync_snyk-monitor.yml b/.github/workflows/sync_snyk-monitor.yml index 1ffc8d2c26..aa467c737c 100644 --- a/.github/workflows/sync_snyk-monitor.yml +++ b/.github/workflows/sync_snyk-monitor.yml @@ -58,6 +58,6 @@ jobs: SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }} NODE_OPTIONS: --max-old-space-size=7168 - name: Upload Snyk report - uses: github/codeql-action/upload-sarif@47b3d888fe66b639e431abf22ebca059152f1eea # v3.24.5 + uses: github/codeql-action/upload-sarif@3ab4101902695724f9365a384f86c1074d94e18c # v3.24.7 with: sarif_file: snyk.sarif diff --git a/.github/workflows/uffizzi-build.yml b/.github/workflows/uffizzi-build.yml index b4e7d4b904..29165d3c86 100644 --- a/.github/workflows/uffizzi-build.yml +++ b/.github/workflows/uffizzi-build.yml @@ -53,7 +53,7 @@ jobs: yarn workspace example-backend build - name: Set up Docker Buildx - uses: docker/setup-buildx-action@f95db51fddba0c2d1ec667646a06c2ce06100226 # v3.0.0 + uses: docker/setup-buildx-action@2b51285047da1547ffb1b2203d8be4c0af6b1f20 # v3.2.0 - name: Generate UUID image name id: uuid @@ -67,7 +67,7 @@ jobs: tags: type=raw,value=60d - name: Build Image - uses: docker/build-push-action@4a13e500e55cf31b7a5d59a38ab2040ab0f42f56 # v5.1.0 + uses: docker/build-push-action@2cdde995de11925a030ce8070c3d77a52ffcf1c0 # v5.3.0 with: context: . file: packages/backend/Dockerfile diff --git a/.github/workflows/verify_codeql.yml b/.github/workflows/verify_codeql.yml index dabbff24db..501759254d 100644 --- a/.github/workflows/verify_codeql.yml +++ b/.github/workflows/verify_codeql.yml @@ -55,7 +55,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@47b3d888fe66b639e431abf22ebca059152f1eea # v3.24.5 + uses: github/codeql-action/init@3ab4101902695724f9365a384f86c1074d94e18c # v3.24.7 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. @@ -66,7 +66,7 @@ jobs: # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@47b3d888fe66b639e431abf22ebca059152f1eea # v3.24.5 + uses: github/codeql-action/autobuild@3ab4101902695724f9365a384f86c1074d94e18c # v3.24.7 # â„šī¸ Command-line programs to run using the OS shell. # 📚 https://git.io/JvXDl @@ -80,4 +80,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@47b3d888fe66b639e431abf22ebca059152f1eea # v3.24.5 + uses: github/codeql-action/analyze@3ab4101902695724f9365a384f86c1074d94e18c # v3.24.7 diff --git a/.github/workflows/verify_storybook.yml b/.github/workflows/verify_storybook.yml index e12aba2e0e..6edb5d3651 100644 --- a/.github/workflows/verify_storybook.yml +++ b/.github/workflows/verify_storybook.yml @@ -51,7 +51,7 @@ jobs: - run: yarn build-storybook - - uses: chromaui/action@fd0e276c344bab4dc69a023fdf89ffb9b79b3b31 # v11 + - uses: chromaui/action@306092d42c0743800aadf544ee263cbc56598b1b # v11 with: token: ${{ secrets.GITHUB_TOKEN }} # projectToken intentionally shared to allow collaborators to run Chromatic on forks diff --git a/beps/0001-notifications-system/README.md b/beps/0001-notifications-system/README.md index e071b36a06..66e23542dc 100644 --- a/beps/0001-notifications-system/README.md +++ b/beps/0001-notifications-system/README.md @@ -95,6 +95,7 @@ The role of the notifications plugin is to manage the lifecycle of notifications The notification backend stores notification using the [database service](https://backstage.io/docs/backend-system/core-services/index#database). In particular it needs to store the following information for each notification: - ID +- Recipients - Read date - Saved status - Creation date @@ -105,7 +106,6 @@ The notification backend stores notification using the [database service](https: - Origin - Link (optional) - Additional links (optional) - - Recipients - Severity (optional, default normal) - Topic (optional) - Scope (optional) @@ -153,7 +153,9 @@ The `notification-backend` does not provide any new permissions, since creating The `notification-backend` shall provide necessary parameters for paging and filtering notifications from the frontend. -The notification frontend plugin provides a UI for viewing notifications, which in the initial implementation can be as simple as needed. The only requirement is that a user is able to view recent notifications and distinguish between read and unread notifications. A notification as marked as read once it has been interacted with. The frontend plugin also subscribes to the notifications signal channel and alerts the user when a new notification is received. +The notification frontend plugin provides a UI for viewing notifications, which in the initial implementation can be as simple as needed. The only requirement is that a user is able to view recent notifications and distinguish between read and unread notifications. The frontend plugin also subscribes to the notifications signal channel and alerts the user when a new notification is received. + +Both the individual and broadcasted messages are rendered together in a single list. There will be a filter choosing of of those types or `all`. ### Architecture Overview @@ -165,11 +167,12 @@ The components that are presented with dashed lines are not directly part of thi Let's walk through the process of sending of a notification to a user: -1. A backend plugin that wants to send a notification to a user uses the `NotificationService`, which in turn makes a POST request to the notification backend. The request contains a filter to select the target users, as well as the notification payload. +1. A backend plugin that wants to send a notification to a user uses the `NotificationService`, which in turn makes a POST request to the notification backend. The request contains either a filter to select the target users or type `broadcast`, as well as the notification payload. 1b. As the notification backend handles the request it could optionally invoke a series of notification processors. These processors can be used to transform the notification payload, send the notification through other channels, and decide whether the regular notification flow should continue or not. This step is not in scope for this proposal. 2. The notification backend stores the received notification in its database. At this point the notification is available from the notification backend's read API. + 3. The notification backend published an event to the event bus on the `'signal'` topic. This event payload contains the signaling channel, in this case `'notifications'`, as well as the target user ID and the notification ID, but not the notification payload. 4. Each instance of the signal backend plugin subscribes to the `'signal'` topic and receives the event. 5. Each signal backend instance has a set of push channels set up to online users. The incoming event is filtered based on the target user ID and the signaling is pushed through all connections with a matching user ID. @@ -214,6 +217,7 @@ export type NotificationPayload = { export type Notification = { id: string; userRef: string; + broadcasted: boolean; created: Date; saved?: Date; read?: Date; @@ -232,12 +236,29 @@ interface NotificationService { } ``` -Each notification is always routed to individual users unless it's a broadcast. The `notification-backend` will figure out which users will receive a notification based on the `recipients` parameter, resolving it to the concrete list of users at the time of sending the notification. - Each notification contains a human readable `title`, `origin` and optionally `link` for additional details. The `created`, `id`, `read` and `saved` properties are handled by the backend based and cannot be passed during the notification creation. Calling `sendNotification` should never throw an error so that it doesn't block the current processing. Notifications should be considered as second-level citizens that are not critical if not delivered. +Each notification is always routed to individual users unless its type is `broadcast`. + +##### Individual user notifications + +The `notification-backend` will figure out which users will receive a notification based on the `recipients` parameter, resolving it to the concrete list of users at the time of sending the notification. + +##### Broadcasted notifications + +Broadcasted messages are stored in a separate database table for performance reasons and simplicity of queries. +There is only one record per message. + +To maintain flags, there will be another table with 1:N relation. This table will contain `user`, `read`, `saved` and `updated` columns, linked via message ID foreign-key. +This table of flags is not prefilled on a broadcast message creation but a record is added when there is an updating POST by a particular user. + +When notifications are queried, two (main) database queries are issued - for both the individual and broadcasted messages. +Their results are merged into a single response but setting the `broadcasted` flag based on source. + +If an individual message is queried (via GET `/notifications/:id`), both the individual and broadcasted tables are searched. The first result found is used for the response. + #### `SignalService` ```ts @@ -269,7 +290,6 @@ Example signal payload for a new notification: #### Future considerations and BEP TODO -- Broadcast messages are to be saved to a separate table for performance reasons - OpenAPI tooling is taken into use for the notification router and client - Allow using dynamic values in notification payload, for example entity references `{{ user:default/john.doe }}` should be rendered by the frontend with `EntityRefLink` component. Defining the dynamic data values should be done before implementation. - Add configurable automatic clean-up of old notifications to save storage space diff --git a/beps/0004-scaffolder-task-idempotency/README.md b/beps/0004-scaffolder-task-idempotency/README.md index 03569de3d6..8cdf8504fe 100644 --- a/beps/0004-scaffolder-task-idempotency/README.md +++ b/beps/0004-scaffolder-task-idempotency/README.md @@ -4,8 +4,8 @@ status: provisional authors: - 'bnechyporenko@bol.com' - 'benjaminl@spotify.com' -owners: - - @backstage/scaffolder-maintainers +owners: + - '@backstage/scaffolder-maintainers' project-areas: - scaffolder creation-date: 2024-01-31 diff --git a/beps/0006-scaffolder-action-rollback/README.md b/beps/0006-scaffolder-action-rollback/README.md new file mode 100644 index 0000000000..fd6c7911b9 --- /dev/null +++ b/beps/0006-scaffolder-action-rollback/README.md @@ -0,0 +1,84 @@ +--- +title: Scaffolder Action Rollback +status: provisional +authors: + - 'bnechyporenko@bol.com' + - 'benjaminl@spotify.com' +owners: + - '@backstage/scaffolder-maintainers' +project-areas: + - scaffolder +creation-date: 2024-03-13 +--- + +# BEP: + +[**Discussion Issue**](https://github.com/backstage/backstage/issues/NNNNN) + +- [Summary](#summary) +- [Motivation](#motivation) + - [Goals](#goals) + - [Non-Goals](#non-goals) +- [Proposal](#proposal) +- [Design Details](#design-details) +- [Release Plan](#release-plan) +- [Dependencies](#dependencies) +- [Alternatives](#alternatives) + +## Summary + +Introducing the rollback to scaffolder actions provides the mean to come back to the initial state. + +## Motivation + +The aim is to help to mitigate the issue of manual clean up the partially created resources. + +### Goals + +- We will extend action's API to be able to run rollback for failed tasks +- Rollback will be optional + +### Non-Goals + +We will not cover all built-in actions with a rollback functionality + +## Proposal + +Rollback is going to be performed: + +- when user manually decide to perform this action. +- task has to be recovered and TaskRecoverStrategy set to 'rollback' + +## Design Details + +We are going to introduce an extra function in action API which will look like: + +```typescript +const createPublishGitHubAction = createTemplateAction({ + id: 'publish:github', + async handler() {}, + async rollback() {}, +}); +``` + +## Release Plan + + + +## Dependencies + + + +## Alternatives + + diff --git a/docs/plugins/analytics.md b/docs/plugins/analytics.md index 0673566217..a4dfafbf87 100644 --- a/docs/plugins/analytics.md +++ b/docs/plugins/analytics.md @@ -40,6 +40,7 @@ choice below. | [Google Analytics 4][ga4] | Yes ✅ | | [New Relic Browser][newrelic-browser] | Community ✅ | | [Matomo][matomo] | Community ✅ | +| [Quantum Metric][qm] | Community ✅ | To suggest an integration, please [open an issue][add-tool] for the analytics tool your organization uses. Or jump to [Writing Integrations][int-howto] to @@ -48,6 +49,7 @@ learn how to contribute the integration yourself! [ga]: https://github.com/backstage/backstage/blob/master/plugins/analytics-module-ga/README.md [ga4]: https://github.com/backstage/backstage/blob/master/plugins/analytics-module-ga4/README.md [newrelic-browser]: https://github.com/backstage/backstage/blob/master/plugins/analytics-module-newrelic-browser/README.md +[qm]: https://github.com/quantummetric/analytics-module-qm/blob/main/README.md [matomo]: https://github.com/janus-idp/backstage-plugins/blob/main/plugins/analytics-module-matomo/README.md [add-tool]: https://github.com/backstage/backstage/issues/new?assignees=&labels=plugin&template=plugin_template.md&title=%5BAnalytics+Module%5D+THE+ANALYTICS+TOOL+TO+INTEGRATE [int-howto]: #writing-integrations diff --git a/microsite/data/plugins/analytics-module-qm.yaml b/microsite/data/plugins/analytics-module-qm.yaml new file mode 100644 index 0000000000..df2ae3e935 --- /dev/null +++ b/microsite/data/plugins/analytics-module-qm.yaml @@ -0,0 +1,10 @@ +--- +title: 'Analytics Module: Quantum Metric' +author: Quantum Metric +authorUrl: https://github.com/quantummetric +category: Monitoring +description: Track usage of your Backstage instance using Quantum Metric. +documentation: https://github.com/quantummetric/analytics-module-qm/blob/main/README.md +iconUrl: /img/qm-icon.png +npmPackageName: '@quantum-metric/plugin-analytics-module-qm' +addedDate: '2024-03-15' diff --git a/microsite/package.json b/microsite/package.json index dadc06518d..d5efa8196b 100644 --- a/microsite/package.json +++ b/microsite/package.json @@ -19,7 +19,7 @@ }, "devDependencies": { "@docusaurus/module-type-aliases": "^3.1.1", - "@spotify/prettier-config": "^14.0.0", + "@spotify/prettier-config": "^15.0.0", "@tsconfig/docusaurus": "^2.0.0", "@types/luxon": "^3.0.0", "@types/webpack-env": "^1.18.0", diff --git a/microsite/src/pages/community/index.tsx b/microsite/src/pages/community/index.tsx index 04788aa335..c331638c78 100644 --- a/microsite/src/pages/community/index.tsx +++ b/microsite/src/pages/community/index.tsx @@ -81,6 +81,11 @@ const Community = () => { url: 'https://roadie.io/', logo: 'img/partner-logo-roadie.png', }, + { + name: 'solo.io', + url: 'https://www.solo.io/spotlight/', + logo: 'img/partner-logo-solo.png', + }, { name: 'ThoughtWorks', url: 'https://www.thoughtworks.com/about-us/partnerships/technology/backstage-by-spotify', diff --git a/microsite/static/img/partner-logo-solo.png b/microsite/static/img/partner-logo-solo.png new file mode 100644 index 0000000000..f4d36ec61a Binary files /dev/null and b/microsite/static/img/partner-logo-solo.png differ diff --git a/microsite/static/img/qm-icon.png b/microsite/static/img/qm-icon.png new file mode 100644 index 0000000000..021d24388b Binary files /dev/null and b/microsite/static/img/qm-icon.png differ diff --git a/microsite/yarn.lock b/microsite/yarn.lock index d687fa81e2..e7f76d67d9 100644 --- a/microsite/yarn.lock +++ b/microsite/yarn.lock @@ -2532,12 +2532,12 @@ __metadata: languageName: node linkType: hard -"@spotify/prettier-config@npm:^14.0.0": - version: 14.1.3 - resolution: "@spotify/prettier-config@npm:14.1.3" +"@spotify/prettier-config@npm:^15.0.0": + version: 15.0.0 + resolution: "@spotify/prettier-config@npm:15.0.0" peerDependencies: prettier: 2.x - checksum: 0c64ec0de9be5ae24a9b2a8f5c3af6c02306a47f54fffbd014852b00245fc939f3131eeeac8e906dfbb6aa86a5c0213b7f35623badad072979068f8cd69c316f + checksum: aa5ec5739427f9acdb9d62ae6c04f04a344898567239f7ee45c75c6205ebdffbc61747ea8de6e83baf0bc3785359967de4b7097a8723c4b4063ff57dc5cb6c44 languageName: node linkType: hard @@ -2697,90 +2697,90 @@ __metadata: languageName: node linkType: hard -"@swc/core-darwin-arm64@npm:1.4.2": - version: 1.4.2 - resolution: "@swc/core-darwin-arm64@npm:1.4.2" +"@swc/core-darwin-arm64@npm:1.4.8": + version: 1.4.8 + resolution: "@swc/core-darwin-arm64@npm:1.4.8" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@swc/core-darwin-x64@npm:1.4.2": - version: 1.4.2 - resolution: "@swc/core-darwin-x64@npm:1.4.2" +"@swc/core-darwin-x64@npm:1.4.8": + version: 1.4.8 + resolution: "@swc/core-darwin-x64@npm:1.4.8" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@swc/core-linux-arm-gnueabihf@npm:1.4.2": - version: 1.4.2 - resolution: "@swc/core-linux-arm-gnueabihf@npm:1.4.2" +"@swc/core-linux-arm-gnueabihf@npm:1.4.8": + version: 1.4.8 + resolution: "@swc/core-linux-arm-gnueabihf@npm:1.4.8" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@swc/core-linux-arm64-gnu@npm:1.4.2": - version: 1.4.2 - resolution: "@swc/core-linux-arm64-gnu@npm:1.4.2" +"@swc/core-linux-arm64-gnu@npm:1.4.8": + version: 1.4.8 + resolution: "@swc/core-linux-arm64-gnu@npm:1.4.8" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-arm64-musl@npm:1.4.2": - version: 1.4.2 - resolution: "@swc/core-linux-arm64-musl@npm:1.4.2" +"@swc/core-linux-arm64-musl@npm:1.4.8": + version: 1.4.8 + resolution: "@swc/core-linux-arm64-musl@npm:1.4.8" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@swc/core-linux-x64-gnu@npm:1.4.2": - version: 1.4.2 - resolution: "@swc/core-linux-x64-gnu@npm:1.4.2" +"@swc/core-linux-x64-gnu@npm:1.4.8": + version: 1.4.8 + resolution: "@swc/core-linux-x64-gnu@npm:1.4.8" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-x64-musl@npm:1.4.2": - version: 1.4.2 - resolution: "@swc/core-linux-x64-musl@npm:1.4.2" +"@swc/core-linux-x64-musl@npm:1.4.8": + version: 1.4.8 + resolution: "@swc/core-linux-x64-musl@npm:1.4.8" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@swc/core-win32-arm64-msvc@npm:1.4.2": - version: 1.4.2 - resolution: "@swc/core-win32-arm64-msvc@npm:1.4.2" +"@swc/core-win32-arm64-msvc@npm:1.4.8": + version: 1.4.8 + resolution: "@swc/core-win32-arm64-msvc@npm:1.4.8" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@swc/core-win32-ia32-msvc@npm:1.4.2": - version: 1.4.2 - resolution: "@swc/core-win32-ia32-msvc@npm:1.4.2" +"@swc/core-win32-ia32-msvc@npm:1.4.8": + version: 1.4.8 + resolution: "@swc/core-win32-ia32-msvc@npm:1.4.8" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@swc/core-win32-x64-msvc@npm:1.4.2": - version: 1.4.2 - resolution: "@swc/core-win32-x64-msvc@npm:1.4.2" +"@swc/core-win32-x64-msvc@npm:1.4.8": + version: 1.4.8 + resolution: "@swc/core-win32-x64-msvc@npm:1.4.8" conditions: os=win32 & cpu=x64 languageName: node linkType: hard "@swc/core@npm:^1.3.46": - version: 1.4.2 - resolution: "@swc/core@npm:1.4.2" + version: 1.4.8 + resolution: "@swc/core@npm:1.4.8" dependencies: - "@swc/core-darwin-arm64": 1.4.2 - "@swc/core-darwin-x64": 1.4.2 - "@swc/core-linux-arm-gnueabihf": 1.4.2 - "@swc/core-linux-arm64-gnu": 1.4.2 - "@swc/core-linux-arm64-musl": 1.4.2 - "@swc/core-linux-x64-gnu": 1.4.2 - "@swc/core-linux-x64-musl": 1.4.2 - "@swc/core-win32-arm64-msvc": 1.4.2 - "@swc/core-win32-ia32-msvc": 1.4.2 - "@swc/core-win32-x64-msvc": 1.4.2 + "@swc/core-darwin-arm64": 1.4.8 + "@swc/core-darwin-x64": 1.4.8 + "@swc/core-linux-arm-gnueabihf": 1.4.8 + "@swc/core-linux-arm64-gnu": 1.4.8 + "@swc/core-linux-arm64-musl": 1.4.8 + "@swc/core-linux-x64-gnu": 1.4.8 + "@swc/core-linux-x64-musl": 1.4.8 + "@swc/core-win32-arm64-msvc": 1.4.8 + "@swc/core-win32-ia32-msvc": 1.4.8 + "@swc/core-win32-x64-msvc": 1.4.8 "@swc/counter": ^0.1.2 "@swc/types": ^0.1.5 peerDependencies: @@ -2809,7 +2809,7 @@ __metadata: peerDependenciesMeta: "@swc/helpers": optional: true - checksum: b17afda692b2627d3a82e589f1b29cef31bdee626a2dd997d78312dcbfc6eb701850fbab22e85f02b1261da39f0b0afb6a236c6065f6d0d7478cff939ca5a888 + checksum: 3284e64fe72896d1be8637f7fdcbba575d86e02da056a8c5208c93877250bfb1922fc5194281926650d5694e2434b7906efc0db8925769a4558f5fbd93028fd6 languageName: node linkType: hard @@ -3855,7 +3855,7 @@ __metadata: "@docusaurus/module-type-aliases": ^3.1.1 "@docusaurus/plugin-client-redirects": ^3.1.1 "@docusaurus/preset-classic": ^3.1.1 - "@spotify/prettier-config": ^14.0.0 + "@spotify/prettier-config": ^15.0.0 "@swc/core": ^1.3.46 "@tsconfig/docusaurus": ^2.0.0 "@types/luxon": ^3.0.0 @@ -5770,12 +5770,12 @@ __metadata: linkType: hard "follow-redirects@npm:^1.0.0": - version: 1.15.4 - resolution: "follow-redirects@npm:1.15.4" + version: 1.15.6 + resolution: "follow-redirects@npm:1.15.6" peerDependenciesMeta: debug: optional: true - checksum: e178d1deff8b23d5d24ec3f7a94cde6e47d74d0dc649c35fc9857041267c12ec5d44650a0c5597ef83056ada9ea6ca0c30e7c4f97dbf07d035086be9e6a5b7b6 + checksum: a62c378dfc8c00f60b9c80cab158ba54e99ba0239a5dd7c81245e5a5b39d10f0c35e249c3379eae719ff0285fff88c365dd446fab19dee771f1d76252df1bbf5 languageName: node linkType: hard @@ -10392,15 +10392,15 @@ __metadata: linkType: hard "sass@npm:^1.57.1": - version: 1.71.1 - resolution: "sass@npm:1.71.1" + version: 1.72.0 + resolution: "sass@npm:1.72.0" dependencies: chokidar: ">=3.0.0 <4.0.0" immutable: ^4.0.0 source-map-js: ">=0.6.2 <2.0.0" bin: sass: sass.js - checksum: 19c4939d3042eb9459d462bbd27b1f576fa18034e23c87ca0005b87effdee431c16503b5a785edcdcde1a76dfb804716d9ad42c85a78968ac3825d515e45cb53 + checksum: f420079c7d51660b7256ee52463c1499ede36f7fd5c8ef50c687451777ad641509001454dea45244073cedd7c00e7a3bc1c362e55206ac6686171b994edb41e4 languageName: node linkType: hard diff --git a/package.json b/package.json index 3a2c042025..b4a5a499b6 100644 --- a/package.json +++ b/package.json @@ -104,8 +104,8 @@ "@changesets/cli": "^2.14.0", "@octokit/rest": "^19.0.3", "@playwright/test": "^1.32.3", - "@spotify/eslint-plugin": "^14.1.3", - "@spotify/prettier-config": "^14.0.0", + "@spotify/eslint-plugin": "^15.0.0", + "@spotify/prettier-config": "^15.0.0", "@techdocs/cli": "workspace:*", "@types/node": "^18.17.8", "@types/webpack": "^5.28.0", @@ -127,7 +127,6 @@ "shx": "^0.3.2", "sloc": "^0.3.1", "sort-package-json": "^2.8.0", - "ts-node": "^10.4.0", "typescript": "~5.1.0" }, "packageManager": "yarn@3.8.1", diff --git a/packages/app/package.json b/packages/app/package.json index 746d05bf5c..203a0ad5ed 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -1,17 +1,39 @@ { "name": "example-app", "version": "0.2.93-next.2", - "private": true, "backstage": { "role": "frontend" }, - "bundled": true, + "private": true, "homepage": "https://backstage.io", "repository": { "type": "git", "url": "https://github.com/backstage/backstage", "directory": "packages/app" }, + "license": "Apache-2.0", + "files": [ + "dist" + ], + "scripts": { + "build": "backstage-cli package build", + "clean": "backstage-cli package clean", + "lint": "backstage-cli package lint", + "start": "cross-env EXPERIMENTAL_LAZY_COMPILATION=1 backstage-cli package start", + "test": "backstage-cli package test" + }, + "browserslist": { + "production": [ + ">0.2%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + }, "dependencies": { "@backstage/app-defaults": "workspace:^", "@backstage/catalog-model": "workspace:^", @@ -121,27 +143,5 @@ "@types/zen-observable": "^0.8.0", "cross-env": "^7.0.0" }, - "scripts": { - "start": "backstage-cli package start", - "build": "backstage-cli package build", - "clean": "backstage-cli package clean", - "test": "backstage-cli package test", - "lint": "backstage-cli package lint" - }, - "browserslist": { - "production": [ - ">0.2%", - "not dead", - "not op_mini all" - ], - "development": [ - "last 1 chrome version", - "last 1 firefox version", - "last 1 safari version" - ] - }, - "files": [ - "dist" - ], - "license": "Apache-2.0" + "bundled": true } diff --git a/packages/backend-app-api/src/alpha/featureDiscoveryServiceFactory.ts b/packages/backend-app-api/src/alpha/featureDiscoveryServiceFactory.ts index b68475a77b..5943261b0b 100644 --- a/packages/backend-app-api/src/alpha/featureDiscoveryServiceFactory.ts +++ b/packages/backend-app-api/src/alpha/featureDiscoveryServiceFactory.ts @@ -29,6 +29,13 @@ import { resolve as resolvePath, dirname } from 'path'; import fs from 'fs-extra'; import { BackstagePackageJson } from '@backstage/cli-node'; +const DETECTED_PACKAGE_ROLES = [ + 'node-library', + 'backend', + 'backend-plugin', + 'backend-plugin-module', +]; + /** @internal */ async function findClosestPackageDir( searchDir: string, @@ -106,8 +113,11 @@ class PackageDiscoveryService implements FeatureDiscoveryService { const depPkg = require(require.resolve(`${name}/package.json`, { paths: [packageDir], })) as BackstagePackageJson; - if (!depPkg?.backstage || depPkg?.backstage?.role === 'cli') { - continue; // Not a backstage package, ignore + if ( + !depPkg?.backstage?.role || + !DETECTED_PACKAGE_ROLES.includes(depPkg.backstage.role) + ) { + continue; // Not a backstage backend package, ignore } const exportedModulePaths = [ diff --git a/packages/backend-common/src/reading/tree/ZipArchiveResponse.test.ts b/packages/backend-common/src/reading/tree/ZipArchiveResponse.test.ts index a80f688436..444cbf60b1 100644 --- a/packages/backend-common/src/reading/tree/ZipArchiveResponse.test.ts +++ b/packages/backend-common/src/reading/tree/ZipArchiveResponse.test.ts @@ -246,7 +246,7 @@ describe('ZipArchiveResponse', () => { const filesPromise = res.files(); await expect(filesPromise).rejects.toThrow( - 'invalid comment length. expected: 55. found: 0', + /Invalid comment length. Expected: 55. Found: 0/, ); }); diff --git a/packages/backend/src/plugins/catalog.ts b/packages/backend/src/plugins/catalog.ts index 9b92b4eb06..c83d5844d1 100644 --- a/packages/backend/src/plugins/catalog.ts +++ b/packages/backend/src/plugins/catalog.ts @@ -37,11 +37,15 @@ export default async function createPlugin( const { processingEngine, router } = await builder.build(); - const unprocessed = new UnprocessedEntitiesModule( - await env.database.getClient(), + const unprocessed = UnprocessedEntitiesModule.create({ + database: await env.database.getClient(), router, - ); + permissions: env.permissions, + discovery: env.discovery, + }); + unprocessed.registerRoutes(); + await processingEngine.start(); return router; } diff --git a/packages/cli/bin/backstage-cli b/packages/cli/bin/backstage-cli index 9aa82f6c2a..b721c8d3c1 100755 --- a/packages/cli/bin/backstage-cli +++ b/packages/cli/bin/backstage-cli @@ -24,14 +24,6 @@ const isLocal = require('fs').existsSync(path.resolve(__dirname, '../src')); if (!isLocal || process.env.BACKSTAGE_E2E_CLI_TEST) { require('..'); } else { - require('ts-node').register({ - transpileOnly: true, - /* eslint-disable-next-line no-restricted-syntax */ - project: path.resolve(__dirname, '../../../tsconfig.json'), - compilerOptions: { - module: 'CommonJS', - }, - }); - + require('@backstage/cli/config/nodeTransform.cjs'); require('../src'); } diff --git a/packages/cli/config/nodeTransform.cjs b/packages/cli/config/nodeTransform.cjs new file mode 100644 index 0000000000..a5eb4e8fb0 --- /dev/null +++ b/packages/cli/config/nodeTransform.cjs @@ -0,0 +1,45 @@ +/* + * Copyright 2024 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +const { transformSync } = require('@swc/core'); +const { addHook } = require('pirates'); + +addHook( + (code, filename) => { + const transformed = transformSync(code, { + filename, + sourceMaps: 'inline', + module: { type: 'commonjs' }, + jsc: { + target: 'es2022', + parser: { + syntax: 'typescript', + }, + }, + }); + process.send?.({ type: 'watch', path: filename }); + return transformed.code; + }, + { extensions: ['.ts', '.cts'], ignoreNodeModules: true }, +); + +addHook( + (code, filename) => { + process.send?.({ type: 'watch', path: filename }); + return code; + }, + { extensions: ['.js', '.cjs'], ignoreNodeModules: true }, +); diff --git a/packages/cli/knip-report.md b/packages/cli/knip-report.md index fa42f97d33..16926bb87d 100644 --- a/packages/cli/knip-report.md +++ b/packages/cli/knip-report.md @@ -1,6 +1,6 @@ # Knip report -## Unused dependencies (27) +## Unused dependencies (28) | Name | Location | Severity | | :------------------------------- | :----------- | :------- | @@ -25,6 +25,7 @@ | @swc/core | package.json | error | | @swc/jest | package.json | error | | esbuild | package.json | error | +| pirates | package.json | error | | postcss | package.json | error | | process | package.json | error | | sucrase | package.json | error | @@ -32,7 +33,7 @@ | glob | package.json | error | | util | package.json | error | -## Unused devDependencies (12) +## Unused devDependencies (11) | Name | Location | Severity | | :-------------------------------------- | :----------- | :------- | @@ -46,7 +47,6 @@ | @types/svgo | package.json | error | | @types/ejs | package.json | error | | nodemon | package.json | error | -| ts-node | package.json | error | | del | package.json | error | ## Referenced optional peerDependencies (4) diff --git a/packages/cli/package.json b/packages/cli/package.json index 163c204ec7..4eb45011dc 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -50,9 +50,9 @@ "@rollup/plugin-json": "^6.0.0", "@rollup/plugin-node-resolve": "^15.0.0", "@rollup/plugin-yaml": "^4.0.0", - "@spotify/eslint-config-base": "^14.0.0", - "@spotify/eslint-config-react": "^14.0.0", - "@spotify/eslint-config-typescript": "^14.0.0", + "@spotify/eslint-config-base": "^15.0.0", + "@spotify/eslint-config-react": "^15.0.0", + "@spotify/eslint-config-typescript": "^15.0.0", "@sucrase/webpack-loader": "^2.0.0", "@svgr/core": "6.5.x", "@svgr/plugin-jsx": "6.5.x", @@ -114,6 +114,7 @@ "ora": "^5.3.0", "p-limit": "^3.1.0", "p-queue": "^6.6.2", + "pirates": "^4.0.6", "postcss": "^8.1.0", "process": "^0.11.10", "react-dev-utils": "^12.0.0-next.60", @@ -131,7 +132,6 @@ "swc-loader": "^0.2.3", "tar": "^6.1.12", "terser-webpack-plugin": "^5.1.3", - "tsx": "^4.0.0", "util": "^0.12.3", "webpack": "^5.70.0", "webpack-dev-server": "^4.7.3", @@ -168,10 +168,13 @@ "@types/tar": "^6.1.1", "@types/terser-webpack-plugin": "^5.0.4", "@types/yarnpkg__lockfile": "^1.1.4", + "@vitejs/plugin-react": "^4.0.4", "del": "^7.0.0", "msw": "^1.0.0", "nodemon": "^3.0.1", - "ts-node": "^10.0.0" + "vite": "^4.4.9", + "vite-plugin-html": "^3.2.0", + "vite-plugin-node-polyfills": "^0.21.0" }, "peerDependencies": { "@vitejs/plugin-react": "^4.0.4", diff --git a/packages/cli/src/lib/bundler/config.ts b/packages/cli/src/lib/bundler/config.ts index 581ead8575..8245cf61b3 100644 --- a/packages/cli/src/lib/bundler/config.ts +++ b/packages/cli/src/lib/bundler/config.ts @@ -224,6 +224,9 @@ export async function createConfig( } : {}), }, + experiments: { + lazyCompilation: yn(process.env.EXPERIMENTAL_LAZY_COMPILATION), + }, plugins, ...(withCache ? { diff --git a/packages/cli/src/lib/experimental/startBackendExperimental.ts b/packages/cli/src/lib/experimental/startBackendExperimental.ts index 0ca3b182b5..19f71aa993 100644 --- a/packages/cli/src/lib/experimental/startBackendExperimental.ts +++ b/packages/cli/src/lib/experimental/startBackendExperimental.ts @@ -22,22 +22,16 @@ import { ctrlc } from 'ctrlc-windows'; import { IpcServer } from './IpcServer'; import { ServerDataStore } from './ServerDataStore'; import debounce from 'lodash/debounce'; -import { fileURLToPath, pathToFileURL } from 'url'; +import { fileURLToPath } from 'url'; import { isAbsolute as isAbsolutePath } from 'path'; import { paths } from '../paths'; import spawn from 'cross-spawn'; -const [nodeMajor, nodeMinor] = process.versions.node.split('.').map(Number); -const supportsModuleLoaderRegister = - nodeMajor > 20 || - (nodeMajor === 20 && nodeMinor >= 6) || - (nodeMajor === 18 && nodeMinor >= 19); - const loaderArgs = [ + '--enable-source-maps', '--require', - require.resolve('tsx/preflight'), - supportsModuleLoaderRegister ? '--import' : '--loader', - pathToFileURL(require.resolve('tsx')).toString(), // Windows prefers a URL here + require.resolve('@backstage/cli/config/nodeTransform.cjs'), + // TODO: Support modules, although there's currently no way to load them since import() is transpiled tp require() ]; export async function startBackendExperimental(options: BackendServeOptions) { @@ -51,11 +45,21 @@ export async function startBackendExperimental(options: BackendServeOptions) { ServerDataStore.bind(server); let exiting = false; + let firstStart = true; let child: ChildProcess | undefined; let watcher: FSWatcher | undefined = undefined; let shutdownPromise: Promise | undefined = undefined; + const watchedPaths = new Set(); + const restart = debounce(async () => { + if (firstStart) { + firstStart = false; + } else { + console.log(); + console.log('Change detected, restarting the development server...'); + console.log(); + } // If a re-trigger happens during an existing shutdown, we just ignore it if (shutdownPromise) { return; @@ -115,14 +119,18 @@ export async function startBackendExperimental(options: BackendServeOptions) { // This captures messages sent by @esbuild-kit/cjs-loader child.on('message', (data: { type?: string } | null) => { - if (typeof data === 'object' && data?.type === 'dependency') { + if (!watcher) { + return; + } + if (typeof data === 'object' && data?.type === 'watch') { let path = (data as { path: string }).path; if (path.startsWith('file:')) { path = fileURLToPath(path); } - if (isAbsolutePath(path)) { - watcher?.add(path); + if (isAbsolutePath(path) && !watchedPaths.has(path)) { + watchedPaths.add(path); + watcher.add(path); } } }); @@ -130,7 +138,7 @@ export async function startBackendExperimental(options: BackendServeOptions) { restart(); - watcher = watch([], { + watcher = watch(['./package.json'], { cwd: process.cwd(), ignoreInitial: true, ignorePermissionErrors: true, diff --git a/packages/codemods/bin/backstage-codemods b/packages/codemods/bin/backstage-codemods index 0bc4088cae..a43ae6324b 100755 --- a/packages/codemods/bin/backstage-codemods +++ b/packages/codemods/bin/backstage-codemods @@ -24,14 +24,6 @@ const isLocal = require('fs').existsSync(path.resolve(__dirname, '../src')); if (!isLocal) { require('..'); } else { - require('ts-node').register({ - transpileOnly: true, - /* eslint-disable-next-line no-restricted-syntax */ - project: path.resolve(__dirname, '../../../tsconfig.json'), - compilerOptions: { - module: 'CommonJS', - }, - }); - + require('@backstage/cli/config/nodeTransform.cjs'); require('../src'); } diff --git a/packages/codemods/knip-report.md b/packages/codemods/knip-report.md index f9903638ea..2661c35327 100644 --- a/packages/codemods/knip-report.md +++ b/packages/codemods/knip-report.md @@ -1,8 +1,2 @@ # Knip report -## Unused devDependencies (1) - -| Name | Location | Severity | -| :------ | :----------- | :------- | -| ts-node | package.json | error | - diff --git a/packages/codemods/package.json b/packages/codemods/package.json index 3fc1d63eae..202006d4c2 100644 --- a/packages/codemods/package.json +++ b/packages/codemods/package.json @@ -52,7 +52,6 @@ "devDependencies": { "@backstage/cli": "workspace:^", "@types/jscodeshift": "^0.11.0", - "@types/node": "^18.17.8", - "ts-node": "^10.0.0" + "@types/node": "^18.17.8" } } diff --git a/packages/core-components/package.json b/packages/core-components/package.json index 04de809938..525b41dba7 100644 --- a/packages/core-components/package.json +++ b/packages/core-components/package.json @@ -78,7 +78,7 @@ "rc-progress": "3.5.1", "react-helmet": "6.1.0", "react-hook-form": "^7.12.2", - "react-idle-timer": "5.6.2", + "react-idle-timer": "5.7.2", "react-markdown": "^8.0.0", "react-sparklines": "^1.7.0", "react-syntax-highlighter": "^15.4.5", diff --git a/packages/create-app/bin/backstage-create-app b/packages/create-app/bin/backstage-create-app index 4639ea96dc..bacee3e835 100755 --- a/packages/create-app/bin/backstage-create-app +++ b/packages/create-app/bin/backstage-create-app @@ -24,15 +24,6 @@ const isLocal = require('fs').existsSync(path.resolve(__dirname, '../src')); if (!isLocal || process.env.BACKSTAGE_E2E_CLI_TEST) { require('..'); } else { - // Only used for development, so should be a devDependency - // eslint-disable-next-line @backstage/no-undeclared-imports - require('ts-node').register({ - transpileOnly: true, - project: path.resolve(__dirname, '../../../tsconfig.json'), - compilerOptions: { - module: 'CommonJS', - }, - }); - + require('@backstage/cli/config/nodeTransform.cjs'); require('../src'); } diff --git a/packages/create-app/knip-report.md b/packages/create-app/knip-report.md index dac197211b..65ef020fc3 100644 --- a/packages/create-app/knip-report.md +++ b/packages/create-app/knip-report.md @@ -1,10 +1,9 @@ # Knip report -## Unused devDependencies (3) +## Unused devDependencies (2) | Name | Location | Severity | | :-------------------- | :----------- | :------- | | @types/command-exists | package.json | error | | nodemon | package.json | error | -| ts-node | package.json | error | diff --git a/packages/create-app/package.json b/packages/create-app/package.json index 6f91013809..a0836ef09e 100644 --- a/packages/create-app/package.json +++ b/packages/create-app/package.json @@ -52,8 +52,7 @@ "@types/node": "^18.17.8", "@types/recursive-readdir": "^2.2.0", "msw": "^1.0.0", - "nodemon": "^3.0.1", - "ts-node": "^10.0.0" + "nodemon": "^3.0.1" }, "nodemonConfig": { "watch": "./src", diff --git a/packages/create-app/src/lib/tasks.test.ts b/packages/create-app/src/lib/tasks.test.ts index b1f5e17ba0..522db161eb 100644 --- a/packages/create-app/src/lib/tasks.test.ts +++ b/packages/create-app/src/lib/tasks.test.ts @@ -51,6 +51,7 @@ jest.mock('./versions', () => ({ root: '1.2.3', '@backstage/cli': '1.0.0', '@backstage/backend-common': '1.0.0', + '@backstage/backend-defaults': '1.0.0', '@backstage/backend-tasks': '1.0.0', '@backstage/catalog-model': '1.0.0', '@backstage/catalog-client': '1.0.0', @@ -58,10 +59,14 @@ jest.mock('./versions', () => ({ '@backstage/plugin-app-backend': '1.0.0', '@backstage/plugin-auth-backend': '1.0.0', '@backstage/plugin-auth-node': '1.0.0', + '@backstage/plugin-auth-backend-module-github-provider': '1.0.0', + '@backstage/plugin-auth-backend-module-guest-provider': '1.0.0', '@backstage/plugin-catalog-backend': '1.0.0', '@backstage/plugin-catalog-backend-module-scaffolder-entity-model': '1.0.0', '@backstage/plugin-permission-common': '1.0.0', '@backstage/plugin-permission-node': '1.0.0', + '@backstage/plugin-permission-backend': '1.0.0', + '@backstage/plugin-permission-backend-module-allow-all-policy': '1.0.0', '@backstage/plugin-proxy-backend': '1.0.0', '@backstage/plugin-scaffolder-backend': '1.0.0', '@backstage/plugin-search-backend': '1.0.0', diff --git a/packages/create-app/src/lib/versions.ts b/packages/create-app/src/lib/versions.ts index 03ef32d921..76f3c37f78 100644 --- a/packages/create-app/src/lib/versions.ts +++ b/packages/create-app/src/lib/versions.ts @@ -33,6 +33,7 @@ import { version as root } from '../../../../package.json'; import { version as appDefaults } from '../../../app-defaults/package.json'; import { version as backendCommon } from '../../../backend-common/package.json'; +import { version as backendDefaults } from '../../../backend-defaults/package.json'; import { version as backendTasks } from '../../../backend-tasks/package.json'; import { version as catalogClient } from '../../../catalog-client/package.json'; import { version as catalogModel } from '../../../catalog-model/package.json'; @@ -50,6 +51,8 @@ import { version as theme } from '../../../theme/package.json'; import { version as pluginApiDocs } from '../../../../plugins/api-docs/package.json'; import { version as pluginAppBackend } from '../../../../plugins/app-backend/package.json'; import { version as pluginAuthBackend } from '../../../../plugins/auth-backend/package.json'; +import { version as pluginAuthBackendModuleGithubProvider } from '../../../../plugins/auth-backend-module-github-provider/package.json'; +import { version as pluginAuthBackendModuleGuestProvider } from '../../../../plugins/auth-backend-module-guest-provider/package.json'; import { version as pluginAuthNode } from '../../../../plugins/auth-node/package.json'; import { version as pluginCatalog } from '../../../../plugins/catalog/package.json'; import { version as pluginCatalogCommon } from '../../../../plugins/catalog-common/package.json'; @@ -62,6 +65,8 @@ import { version as pluginExplore } from '../../../../plugins/explore/package.js import { version as pluginGithubActions } from '../../../../plugins/github-actions/package.json'; import { version as pluginLighthouse } from '../../../../plugins/lighthouse/package.json'; import { version as pluginOrg } from '../../../../plugins/org/package.json'; +import { version as pluginPermissionBackend } from '../../../../plugins/permission-backend/package.json'; +import { version as pluginPermissionBackendModulePolicyAllowAll } from '../../../../plugins/permission-backend-module-policy-allow-all/package.json'; import { version as pluginPermissionCommon } from '../../../../plugins/permission-common/package.json'; import { version as pluginPermissionReact } from '../../../../plugins/permission-react/package.json'; import { version as pluginPermissionNode } from '../../../../plugins/permission-node/package.json'; @@ -87,6 +92,7 @@ export const packageVersions = { root, '@backstage/app-defaults': appDefaults, '@backstage/backend-common': backendCommon, + '@backstage/backend-defaults': backendDefaults, '@backstage/backend-tasks': backendTasks, '@backstage/catalog-client': catalogClient, '@backstage/catalog-model': catalogModel, @@ -101,6 +107,10 @@ export const packageVersions = { '@backstage/plugin-api-docs': pluginApiDocs, '@backstage/plugin-app-backend': pluginAppBackend, '@backstage/plugin-auth-backend': pluginAuthBackend, + '@backstage/plugin-auth-backend-module-github-provider': + pluginAuthBackendModuleGithubProvider, + '@backstage/plugin-auth-backend-module-guest-provider': + pluginAuthBackendModuleGuestProvider, '@backstage/plugin-auth-node': pluginAuthNode, '@backstage/plugin-catalog': pluginCatalog, '@backstage/plugin-catalog-common': pluginCatalogCommon, @@ -114,6 +124,9 @@ export const packageVersions = { '@backstage/plugin-github-actions': pluginGithubActions, '@backstage/plugin-lighthouse': pluginLighthouse, '@backstage/plugin-org': pluginOrg, + '@backstage/plugin-permission-backend': pluginPermissionBackend, + '@backstage/plugin-permission-backend-module-allow-all-policy': + pluginPermissionBackendModulePolicyAllowAll, '@backstage/plugin-permission-common': pluginPermissionCommon, '@backstage/plugin-permission-node': pluginPermissionNode, '@backstage/plugin-permission-react': pluginPermissionReact, diff --git a/packages/create-app/templates/default-app/app-config.production.yaml b/packages/create-app/templates/default-app/app-config.production.yaml index 8f0751cd31..05b02acd4f 100644 --- a/packages/create-app/templates/default-app/app-config.production.yaml +++ b/packages/create-app/templates/default-app/app-config.production.yaml @@ -28,6 +28,10 @@ backend: # ca: # if you have a CA file and want to verify it you can uncomment this section # $file: /ca/server.crt +auth: + providers: + guest: null + catalog: # Overrides the default list locations from app-config.yaml as these contain example data. # See https://backstage.io/docs/features/software-catalog/#adding-components-to-the-catalog for more details 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 08d2abff59..2fdc9a9077 100644 --- a/packages/create-app/templates/default-app/app-config.yaml.hbs +++ b/packages/create-app/templates/default-app/app-config.yaml.hbs @@ -64,7 +64,9 @@ techdocs: auth: # see https://backstage.io/docs/auth/ to learn about auth providers - providers: {} + providers: + # See https://backstage.io/docs/auth/guest/provider + guest: {} scaffolder: # see https://backstage.io/docs/features/software-templates/configuration for software template options diff --git a/packages/create-app/templates/default-app/packages/app/e2e-tests/app.test.ts b/packages/create-app/templates/default-app/packages/app/e2e-tests/app.test.ts index d45bc0dbf0..839ff883de 100644 --- a/packages/create-app/templates/default-app/packages/app/e2e-tests/app.test.ts +++ b/packages/create-app/templates/default-app/packages/app/e2e-tests/app.test.ts @@ -19,5 +19,9 @@ import { test, expect } from '@playwright/test'; test('App should render the welcome page', async ({ page }) => { await page.goto('/'); + const enterButton = page.getByRole('button', { name: 'Enter' }); + await expect(enterButton).toBeVisible(); + await enterButton.click(); + await expect(page.getByText('My Company Catalog')).toBeVisible(); }); diff --git a/packages/create-app/templates/default-app/packages/app/src/App.tsx b/packages/create-app/templates/default-app/packages/app/src/App.tsx index 8d62f29c52..f751cf6d22 100644 --- a/packages/create-app/templates/default-app/packages/app/src/App.tsx +++ b/packages/create-app/templates/default-app/packages/app/src/App.tsx @@ -27,7 +27,11 @@ import { entityPage } from './components/catalog/EntityPage'; import { searchPage } from './components/search/SearchPage'; import { Root } from './components/Root'; -import { AlertDisplay, OAuthRequestDialog } from '@backstage/core-components'; +import { + AlertDisplay, + OAuthRequestDialog, + SignInPage, +} from '@backstage/core-components'; import { createApp } from '@backstage/app-defaults'; import { AppRouter, FlatRoutes } from '@backstage/core-app-api'; import { CatalogGraphPage } from '@backstage/plugin-catalog-graph'; @@ -53,6 +57,9 @@ const app = createApp({ catalogIndex: catalogPlugin.routes.catalogIndex, }); }, + components: { + SignInPage: props => , + }, }); const routes = ( 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 f3ed808afe..93228e5c8f 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 @@ -17,30 +17,30 @@ }, "dependencies": { "@backstage/backend-common": "^{{version '@backstage/backend-common'}}", + "@backstage/backend-defaults": "^{{version '@backstage/backend-defaults'}}", "@backstage/backend-tasks": "^{{version '@backstage/backend-tasks'}}", - "@backstage/catalog-client": "^{{version '@backstage/catalog-client'}}", - "@backstage/catalog-model": "^{{version '@backstage/catalog-model'}}", "@backstage/config": "^{{version '@backstage/config'}}", "@backstage/plugin-app-backend": "^{{version '@backstage/plugin-app-backend'}}", "@backstage/plugin-auth-backend": "^{{version '@backstage/plugin-auth-backend'}}", + "@backstage/plugin-auth-backend-module-github-provider": "^{{version '@backstage/plugin-auth-backend-module-github-provider'}}", + "@backstage/plugin-auth-backend-module-guest-provider": "^{{version '@backstage/plugin-auth-backend-module-guest-provider'}}", "@backstage/plugin-auth-node": "^{{version '@backstage/plugin-auth-node'}}", "@backstage/plugin-catalog-backend": "^{{version '@backstage/plugin-catalog-backend'}}", "@backstage/plugin-catalog-backend-module-scaffolder-entity-model": "^{{version '@backstage/plugin-catalog-backend-module-scaffolder-entity-model'}}", + "@backstage/plugin-permission-backend": "^{{version '@backstage/plugin-permission-backend'}}", + "@backstage/plugin-permission-backend-module-allow-all-policy": "^{{version '@backstage/plugin-permission-backend-module-allow-all-policy'}}", "@backstage/plugin-permission-common": "^{{version '@backstage/plugin-permission-common'}}", "@backstage/plugin-permission-node": "^{{version '@backstage/plugin-permission-node'}}", "@backstage/plugin-proxy-backend": "^{{version '@backstage/plugin-proxy-backend'}}", "@backstage/plugin-scaffolder-backend": "^{{version '@backstage/plugin-scaffolder-backend'}}", "@backstage/plugin-search-backend": "^{{version '@backstage/plugin-search-backend'}}", "@backstage/plugin-search-backend-module-catalog": "^{{version '@backstage/plugin-search-backend-module-catalog'}}", - "@backstage/plugin-search-backend-module-pg": "^{{version '@backstage/plugin-search-backend-module-pg'}}", "@backstage/plugin-search-backend-module-techdocs": "^{{version '@backstage/plugin-search-backend-module-techdocs'}}", "@backstage/plugin-search-backend-node": "^{{version '@backstage/plugin-search-backend-node'}}", "@backstage/plugin-techdocs-backend": "^{{version '@backstage/plugin-techdocs-backend'}}", "app": "link:../app", "better-sqlite3": "^9.0.0", "dockerode": "^3.3.1", - "express": "^4.17.1", - "express-promise-router": "^4.1.0", "node-gyp": "^9.0.0", "pg": "^8.11.3", "winston": "^3.2.1" 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 04c4ff9392..44fde697ec 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 @@ -6,110 +6,36 @@ * Happy hacking! */ -import Router from 'express-promise-router'; -import { - createServiceBuilder, - loadBackendConfig, - getRootLogger, - useHotMemoize, - notFoundHandler, - CacheManager, - DatabaseManager, - HostDiscovery, - UrlReaders, - ServerTokenManager, -} from '@backstage/backend-common'; -import { TaskScheduler } from '@backstage/backend-tasks'; -import { Config } from '@backstage/config'; -import app from './plugins/app'; -import auth from './plugins/auth'; -import catalog from './plugins/catalog'; -import scaffolder from './plugins/scaffolder'; -import proxy from './plugins/proxy'; -import techdocs from './plugins/techdocs'; -import search from './plugins/search'; -import { PluginEnvironment } from './types'; -import { ServerPermissionClient } from '@backstage/plugin-permission-node'; -import { DefaultIdentityClient } from '@backstage/plugin-auth-node'; +import { createBackend } from '@backstage/backend-defaults'; -function makeCreateEnv(config: Config) { - const root = getRootLogger(); - const reader = UrlReaders.default({ logger: root, config }); - const discovery = HostDiscovery.fromConfig(config); - const cacheManager = CacheManager.fromConfig(config); - const databaseManager = DatabaseManager.fromConfig(config, { logger: root }); - const tokenManager = ServerTokenManager.noop(); - const taskScheduler = TaskScheduler.fromConfig(config, { databaseManager }); +const backend = createBackend(); - const identity = DefaultIdentityClient.create({ - discovery, - }); - const permissions = ServerPermissionClient.fromConfig(config, { - discovery, - tokenManager, - }); +backend.add(import('@backstage/plugin-app-backend/alpha')); +backend.add(import('@backstage/plugin-proxy-backend/alpha')); +backend.add(import('@backstage/plugin-scaffolder-backend/alpha')); +backend.add(import('@backstage/plugin-techdocs-backend/alpha')); - root.info(`Created UrlReader ${reader}`); +// auth plugin +backend.add(import('@backstage/plugin-auth-backend')); +// See https://backstage.io/docs/backend-system/building-backends/migrating#the-auth-plugin +backend.add(import('@backstage/plugin-auth-backend-module-guest-provider')); +// See https://github.com/backstage/backstage/blob/master/docs/auth/guest/provider.md - return (plugin: string): PluginEnvironment => { - const logger = root.child({ type: 'plugin', plugin }); - const database = databaseManager.forPlugin(plugin); - const cache = cacheManager.forPlugin(plugin); - const scheduler = taskScheduler.forPlugin(plugin); - return { - logger, - database, - cache, - config, - reader, - discovery, - tokenManager, - scheduler, - permissions, - identity, - }; - }; -} +// catalog plugin +backend.add(import('@backstage/plugin-catalog-backend/alpha')); +backend.add( + import('@backstage/plugin-catalog-backend-module-scaffolder-entity-model'), +); -async function main() { - const config = await loadBackendConfig({ - argv: process.argv, - logger: getRootLogger(), - }); - const createEnv = makeCreateEnv(config); +// permission plugin +backend.add(import('@backstage/plugin-permission-backend/alpha')); +backend.add( + import('@backstage/plugin-permission-backend-module-allow-all-policy'), +); - const catalogEnv = useHotMemoize(module, () => createEnv('catalog')); - const scaffolderEnv = useHotMemoize(module, () => createEnv('scaffolder')); - const authEnv = useHotMemoize(module, () => createEnv('auth')); - const proxyEnv = useHotMemoize(module, () => createEnv('proxy')); - const techdocsEnv = useHotMemoize(module, () => createEnv('techdocs')); - const searchEnv = useHotMemoize(module, () => createEnv('search')); - const appEnv = useHotMemoize(module, () => createEnv('app')); +// search plugin +backend.add(import('@backstage/plugin-search-backend/alpha')); +backend.add(import('@backstage/plugin-search-backend-module-catalog/alpha')); +backend.add(import('@backstage/plugin-search-backend-module-techdocs/alpha')); - const apiRouter = Router(); - apiRouter.use('/catalog', await catalog(catalogEnv)); - apiRouter.use('/scaffolder', await scaffolder(scaffolderEnv)); - apiRouter.use('/auth', await auth(authEnv)); - apiRouter.use('/techdocs', await techdocs(techdocsEnv)); - apiRouter.use('/proxy', await proxy(proxyEnv)); - apiRouter.use('/search', await search(searchEnv)); - - // Add backends ABOVE this line; this 404 handler is the catch-all fallback - apiRouter.use(notFoundHandler()); - - const service = createServiceBuilder(module) - .loadConfig(config) - .addRouter('/api', apiRouter) - .addRouter('', await app(appEnv)); - - await service.start().catch(err => { - console.log(err); - process.exit(1); - }); -} - -module.hot?.accept(); -main().catch(error => { - console.error('Backend failed to start up', error); - process.exit(1); -}); +backend.start(); diff --git a/packages/create-app/templates/default-app/packages/backend/src/plugins/app.ts b/packages/create-app/templates/default-app/packages/backend/src/plugins/app.ts deleted file mode 100644 index 7c37f68467..0000000000 --- a/packages/create-app/templates/default-app/packages/backend/src/plugins/app.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { createRouter } from '@backstage/plugin-app-backend'; -import { Router } from 'express'; -import { PluginEnvironment } from '../types'; - -export default async function createPlugin( - env: PluginEnvironment, -): Promise { - return await createRouter({ - logger: env.logger, - config: env.config, - database: env.database, - appPackageName: 'app', - }); -} 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 deleted file mode 100644 index 77eb6aae21..0000000000 --- a/packages/create-app/templates/default-app/packages/backend/src/plugins/auth.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { - createRouter, - providers, - defaultAuthProviderFactories, -} from '@backstage/plugin-auth-backend'; -import { Router } from 'express'; -import { PluginEnvironment } from '../types'; - -export default async function createPlugin( - env: PluginEnvironment, -): Promise { - return await createRouter({ - logger: env.logger, - config: env.config, - database: env.database, - discovery: env.discovery, - tokenManager: env.tokenManager, - providerFactories: { - ...defaultAuthProviderFactories, - - // This replaces the default GitHub auth provider with a customized one. - // The `signIn` option enables sign-in for this provider, using the - // identity resolution logic that's provided in the `resolver` callback. - // - // 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 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, - // for example using https://backstage.io/docs/integrations/github/org - // - // There are other resolvers to choose from, and you can also create - // your own, see the auth documentation for more details: - // - // https://backstage.io/docs/auth/identity-resolver - github: providers.github.create({ - signIn: { - resolver(_, ctx) { - const userRef = 'user:default/guest'; // Must be a full entity reference - return ctx.issueToken({ - claims: { - sub: userRef, // The user's own identity - ent: [userRef], // A list of identities that the user claims ownership through - }, - }); - }, - // resolver: providers.github.resolvers.usernameMatchingUserEntityName(), - }, - }), - }, - }); -} diff --git a/packages/create-app/templates/default-app/packages/backend/src/plugins/catalog.ts b/packages/create-app/templates/default-app/packages/backend/src/plugins/catalog.ts deleted file mode 100644 index 4decdca1c4..0000000000 --- a/packages/create-app/templates/default-app/packages/backend/src/plugins/catalog.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { CatalogBuilder } from '@backstage/plugin-catalog-backend'; -import { ScaffolderEntitiesProcessor } from '@backstage/plugin-catalog-backend-module-scaffolder-entity-model'; -import { Router } from 'express'; -import { PluginEnvironment } from '../types'; - -export default async function createPlugin( - env: PluginEnvironment, -): Promise { - const builder = await CatalogBuilder.create(env); - builder.addProcessor(new ScaffolderEntitiesProcessor()); - const { processingEngine, router } = await builder.build(); - await processingEngine.start(); - return router; -} diff --git a/packages/create-app/templates/default-app/packages/backend/src/plugins/proxy.ts b/packages/create-app/templates/default-app/packages/backend/src/plugins/proxy.ts deleted file mode 100644 index 54ec3937e9..0000000000 --- a/packages/create-app/templates/default-app/packages/backend/src/plugins/proxy.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { createRouter } from '@backstage/plugin-proxy-backend'; -import { Router } from 'express'; -import { PluginEnvironment } from '../types'; - -export default async function createPlugin( - env: PluginEnvironment, -): Promise { - return await createRouter({ - logger: env.logger, - config: env.config, - discovery: env.discovery, - }); -} diff --git a/packages/create-app/templates/default-app/packages/backend/src/plugins/scaffolder.ts b/packages/create-app/templates/default-app/packages/backend/src/plugins/scaffolder.ts deleted file mode 100644 index a12fee2295..0000000000 --- a/packages/create-app/templates/default-app/packages/backend/src/plugins/scaffolder.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { CatalogClient } from '@backstage/catalog-client'; -import { createRouter } from '@backstage/plugin-scaffolder-backend'; -import { Router } from 'express'; -import type { PluginEnvironment } from '../types'; - -export default async function createPlugin( - env: PluginEnvironment, -): Promise { - const catalogClient = new CatalogClient({ - discoveryApi: env.discovery, - }); - - return await createRouter({ - logger: env.logger, - config: env.config, - database: env.database, - reader: env.reader, - catalogClient, - identity: env.identity, - permissions: env.permissions, - }); -} diff --git a/packages/create-app/templates/default-app/packages/backend/src/plugins/search.ts.hbs b/packages/create-app/templates/default-app/packages/backend/src/plugins/search.ts.hbs deleted file mode 100644 index 467ac60a5a..0000000000 --- a/packages/create-app/templates/default-app/packages/backend/src/plugins/search.ts.hbs +++ /dev/null @@ -1,66 +0,0 @@ -import { useHotCleanup } from '@backstage/backend-common'; -import { createRouter } from '@backstage/plugin-search-backend'; -import { - IndexBuilder, - LunrSearchEngine, -} from '@backstage/plugin-search-backend-node'; -import { PluginEnvironment } from '../types'; -import { DefaultCatalogCollatorFactory } from '@backstage/plugin-search-backend-module-catalog'; -import { DefaultTechDocsCollatorFactory } from '@backstage/plugin-search-backend-module-techdocs'; -import { Router } from 'express'; - -export default async function createPlugin( - env: PluginEnvironment, -): Promise { - // Initialize a connection to a search engine. - const searchEngine = new LunrSearchEngine({ - logger: env.logger, - }); - const indexBuilder = new IndexBuilder({ - logger: env.logger, - searchEngine, - }); - - const schedule = env.scheduler.createScheduledTaskRunner({ - frequency: { minutes: 10 }, - timeout: { minutes: 15 }, - // A 3 second delay gives the backend server a chance to initialize before - // any collators are executed, which may attempt requests against the API. - initialDelay: { seconds: 3 }, - }); - - // Collators are responsible for gathering documents known to plugins. This - // collator gathers entities from the software catalog. - indexBuilder.addCollator({ - schedule, - factory: DefaultCatalogCollatorFactory.fromConfig(env.config, { - discovery: env.discovery, - tokenManager: env.tokenManager, - }), - }); - - // collator gathers entities from techdocs. - indexBuilder.addCollator({ - schedule, - factory: DefaultTechDocsCollatorFactory.fromConfig(env.config, { - discovery: env.discovery, - logger: env.logger, - tokenManager: env.tokenManager, - }), - }); - - // The scheduler controls when documents are gathered from collators and sent - // to the search engine for indexing. - const { scheduler } = await indexBuilder.build(); - scheduler.start(); - - useHotCleanup(module, () => scheduler.stop()); - - return await createRouter({ - engine: indexBuilder.getSearchEngine(), - types: indexBuilder.getDocumentTypes(), - permissions: env.permissions, - config: env.config, - logger: env.logger, - }); -} diff --git a/packages/create-app/templates/default-app/packages/backend/src/plugins/techdocs.ts b/packages/create-app/templates/default-app/packages/backend/src/plugins/techdocs.ts deleted file mode 100644 index be8bb0c06f..0000000000 --- a/packages/create-app/templates/default-app/packages/backend/src/plugins/techdocs.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { DockerContainerRunner } from '@backstage/backend-common'; -import { - createRouter, - Generators, - Preparers, - Publisher, -} from '@backstage/plugin-techdocs-backend'; -import Docker from 'dockerode'; -import { Router } from 'express'; -import { PluginEnvironment } from '../types'; - -export default async function createPlugin( - env: PluginEnvironment, -): Promise { - // Preparers are responsible for fetching source files for documentation. - const preparers = await Preparers.fromConfig(env.config, { - logger: env.logger, - reader: env.reader, - }); - - // Docker client (conditionally) used by the generators, based on techdocs.generators config. - const dockerClient = new Docker(); - const containerRunner = new DockerContainerRunner({ dockerClient }); - - // Generators are used for generating documentation sites. - const generators = await Generators.fromConfig(env.config, { - logger: env.logger, - containerRunner, - }); - - // Publisher is used for - // 1. Publishing generated files to storage - // 2. Fetching files from storage and passing them to TechDocs frontend. - const publisher = await Publisher.fromConfig(env.config, { - logger: env.logger, - discovery: env.discovery, - }); - - // checks if the publisher is working and logs the result - await publisher.getReadiness(); - - return await createRouter({ - preparers, - generators, - publisher, - logger: env.logger, - config: env.config, - discovery: env.discovery, - cache: env.cache, - }); -} diff --git a/packages/create-app/templates/default-app/playwright.config.ts b/packages/create-app/templates/default-app/playwright.config.ts index 37c7fb14c7..733be130bd 100644 --- a/packages/create-app/templates/default-app/playwright.config.ts +++ b/packages/create-app/templates/default-app/playwright.config.ts @@ -32,7 +32,7 @@ export default defineConfig({ ? [] : [ { - command: 'yarn start', + command: 'yarn dev', port: 3000, reuseExistingServer: true, timeout: 60_000, diff --git a/packages/e2e-test/bin/e2e-test b/packages/e2e-test/bin/e2e-test index 27ed3472d5..495f72980b 100755 --- a/packages/e2e-test/bin/e2e-test +++ b/packages/e2e-test/bin/e2e-test @@ -15,15 +15,5 @@ * limitations under the License. */ -const path = require('path'); - -require('ts-node').register({ - transpileOnly: true, - /* eslint-disable-next-line no-restricted-syntax */ - project: path.resolve(__dirname, '../../../tsconfig.json'), - compilerOptions: { - module: 'CommonJS', - }, -}); - +require('@backstage/cli/config/nodeTransform.cjs'); require('../src'); diff --git a/packages/e2e-test/knip-report.md b/packages/e2e-test/knip-report.md index 4020464e7b..baf9661c0a 100644 --- a/packages/e2e-test/knip-report.md +++ b/packages/e2e-test/knip-report.md @@ -1,10 +1,9 @@ # Knip report -## Unused devDependencies (3) +## Unused devDependencies (2) | Name | Location | Severity | | :--------------- | :----------- | :------- | | @types/puppeteer | package.json | error | | nodemon | package.json | error | -| ts-node | package.json | error | diff --git a/packages/e2e-test/package.json b/packages/e2e-test/package.json index 0bd2d8ec76..00cde5e2ab 100644 --- a/packages/e2e-test/package.json +++ b/packages/e2e-test/package.json @@ -44,8 +44,7 @@ "@types/fs-extra": "^11.0.0", "@types/node": "^18.17.8", "@types/puppeteer": "^5.4.4", - "nodemon": "^3.0.1", - "ts-node": "^10.0.0" + "nodemon": "^3.0.1" }, "nodemonConfig": { "watch": "./src", diff --git a/packages/e2e-test/src/commands/run.ts b/packages/e2e-test/src/commands/run.ts index 9a9bf556ee..a1b35049ab 100644 --- a/packages/e2e-test/src/commands/run.ts +++ b/packages/e2e-test/src/commands/run.ts @@ -418,6 +418,9 @@ async function switchToReact17(appDir: string) { 'react-dom': '^17.0.0', '@types/react': '^17.0.0', '@types/react-dom': '^17.0.0', + 'swagger-ui-react/react': '17.0.2', + 'swagger-ui-react/react-dom': '17.0.2', + 'swagger-ui-react/react-redux': '^8', }; await fs.writeJson(resolvePath(appDir, 'package.json'), rootPkg, { spaces: 2, diff --git a/packages/repo-tools/bin/backstage-repo-tools b/packages/repo-tools/bin/backstage-repo-tools index 377e4a32ca..b723d215fd 100755 --- a/packages/repo-tools/bin/backstage-repo-tools +++ b/packages/repo-tools/bin/backstage-repo-tools @@ -24,14 +24,6 @@ const isLocal = require('fs').existsSync(path.resolve(__dirname, '../src')); if (!isLocal || process.env.BACKSTAGE_E2E_CLI_TEST) { require('..'); } else { - require('ts-node').register({ - transpileOnly: true, - /* eslint-disable-next-line no-restricted-syntax */ - project: path.resolve(__dirname, '../../../tsconfig.json'), - compilerOptions: { - module: 'CommonJS', - }, - }); - + require('@backstage/cli/config/nodeTransform.cjs'); require('../src'); } diff --git a/packages/repo-tools/knip-report.md b/packages/repo-tools/knip-report.md index 7571c6922d..32502b699c 100644 --- a/packages/repo-tools/knip-report.md +++ b/packages/repo-tools/knip-report.md @@ -1,6 +1,6 @@ # Knip report -## Unused dependencies (6) +## Unused dependencies (5) | Name | Location | Severity | | :---------------------------------- | :----------- | :------- | @@ -8,7 +8,6 @@ | @stoplight/spectral-functions | package.json | error | | @stoplight/spectral-runtime | package.json | error | | is-glob | package.json | error | -| ts-node | package.json | error | | glob | package.json | error | ## Unused devDependencies (1) diff --git a/packages/repo-tools/package.json b/packages/repo-tools/package.json index 73195e8816..6550c5840b 100644 --- a/packages/repo-tools/package.json +++ b/packages/repo-tools/package.json @@ -59,7 +59,6 @@ "minimatch": "^9.0.0", "p-limit": "^3.0.2", "portfinder": "^1.0.32", - "ts-node": "^10.0.0", "yaml-diff-patch": "^2.0.0" }, "devDependencies": { diff --git a/packages/techdocs-cli/bin/techdocs-cli b/packages/techdocs-cli/bin/techdocs-cli index 6c0bbd37b5..a43ae6324b 100755 --- a/packages/techdocs-cli/bin/techdocs-cli +++ b/packages/techdocs-cli/bin/techdocs-cli @@ -24,13 +24,6 @@ const isLocal = require('fs').existsSync(path.resolve(__dirname, '../src')); if (!isLocal) { require('..'); } else { - require('ts-node').register({ - transpileOnly: true, - project: path.resolve(__dirname, '../../../tsconfig.json'), - compilerOptions: { - module: 'CommonJS', - }, - }); - + require('@backstage/cli/config/nodeTransform.cjs'); require('../src'); } diff --git a/packages/techdocs-cli/knip-report.md b/packages/techdocs-cli/knip-report.md index 06b1586f74..7329783857 100644 --- a/packages/techdocs-cli/knip-report.md +++ b/packages/techdocs-cli/knip-report.md @@ -6,11 +6,10 @@ | :----------- | :----------- | :------- | | global-agent | package.json | error | -## Unused devDependencies (3) +## Unused devDependencies (2) | Name | Location | Severity | | :----------------- | :----------- | :------- | | @types/webpack-env | package.json | error | | nodemon | package.json | error | -| ts-node | package.json | error | diff --git a/packages/techdocs-cli/package.json b/packages/techdocs-cli/package.json index ecda27819d..b1be4ac055 100644 --- a/packages/techdocs-cli/package.json +++ b/packages/techdocs-cli/package.json @@ -44,8 +44,7 @@ "@types/webpack-env": "^1.15.3", "find-process": "^1.4.5", "nodemon": "^3.0.1", - "techdocs-cli-embedded-app": "link:../techdocs-cli-embedded-app", - "ts-node": "^10.0.0" + "techdocs-cli-embedded-app": "link:../techdocs-cli-embedded-app" }, "files": [ "bin", diff --git a/plugins/adr/.eslintrc.js b/plugins/adr/.eslintrc.js index e2a53a6ad2..e487f765b2 100644 --- a/plugins/adr/.eslintrc.js +++ b/plugins/adr/.eslintrc.js @@ -1 +1,5 @@ -module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname, { + rules: { + '@backstage/no-top-level-material-ui-4-imports': 'error', + }, +}); diff --git a/plugins/adr/src/components/EntityAdrContent/EntityAdrContent.tsx b/plugins/adr/src/components/EntityAdrContent/EntityAdrContent.tsx index 5c8d244d26..450592c41c 100644 --- a/plugins/adr/src/components/EntityAdrContent/EntityAdrContent.tsx +++ b/plugins/adr/src/components/EntityAdrContent/EntityAdrContent.tsx @@ -41,19 +41,16 @@ import { useEntity, MissingAnnotationEmptyState, } from '@backstage/plugin-catalog-react'; -import { - Box, - Chip, - Collapse, - Grid, - List, - ListItem, - ListItemIcon, - ListItemText, - makeStyles, - Theme, - Typography, -} from '@material-ui/core'; +import Box from '@material-ui/core/Box'; +import Chip from '@material-ui/core/Chip'; +import Collapse from '@material-ui/core/Collapse'; +import Grid from '@material-ui/core/Grid'; +import List from '@material-ui/core/List'; +import ListItem from '@material-ui/core/ListItem'; +import ListItemIcon from '@material-ui/core/ListItemIcon'; +import ListItemText from '@material-ui/core/ListItemText'; +import Typography from '@material-ui/core/Typography'; +import { makeStyles, Theme } from '@material-ui/core/styles'; import ExpandLess from '@material-ui/icons/ExpandLess'; import ExpandMore from '@material-ui/icons/ExpandMore'; import FolderIcon from '@material-ui/icons/Folder'; diff --git a/plugins/adr/src/search/AdrSearchResultListItem.tsx b/plugins/adr/src/search/AdrSearchResultListItem.tsx index f0c408df48..5110b302a9 100644 --- a/plugins/adr/src/search/AdrSearchResultListItem.tsx +++ b/plugins/adr/src/search/AdrSearchResultListItem.tsx @@ -15,13 +15,11 @@ */ import React, { ReactNode } from 'react'; -import { - Box, - Chip, - ListItemIcon, - ListItemText, - makeStyles, -} from '@material-ui/core'; +import Box from '@material-ui/core/Box'; +import Chip from '@material-ui/core/Chip'; +import ListItemIcon from '@material-ui/core/ListItemIcon'; +import ListItemText from '@material-ui/core/ListItemText'; +import { makeStyles } from '@material-ui/core/styles'; import Typography from '@material-ui/core/Typography'; import { parseEntityRef } from '@backstage/catalog-model'; import { Link } from '@backstage/core-components'; diff --git a/plugins/airbrake-backend/src/plugin.ts b/plugins/airbrake-backend/src/plugin.ts index 90e790c05f..83606ba115 100644 --- a/plugins/airbrake-backend/src/plugin.ts +++ b/plugins/airbrake-backend/src/plugin.ts @@ -43,6 +43,10 @@ export const airbrakePlugin = createBackendPlugin({ logger: loggerToWinstonLogger(logger), }), ); + httpRouter.addAuthPolicy({ + path: '/health', + allow: 'unauthenticated', + }); }, }); }, diff --git a/plugins/api-docs/package.json b/plugins/api-docs/package.json index c730d332b3..07ecf07411 100644 --- a/plugins/api-docs/package.json +++ b/plugins/api-docs/package.json @@ -64,7 +64,7 @@ "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.61", "@types/react": "^16.13.1 || ^17.0.0 || ^18.0.0", - "graphiql": "3.1.0", + "graphiql": "3.1.1", "graphql": "^16.0.0", "graphql-config": "^5.0.2", "graphql-ws": "^5.4.1", diff --git a/plugins/auth-backend-module-atlassian-provider/src/authenticator.ts b/plugins/auth-backend-module-atlassian-provider/src/authenticator.ts index 3e5ed50246..340c61052c 100644 --- a/plugins/auth-backend-module-atlassian-provider/src/authenticator.ts +++ b/plugins/auth-backend-module-atlassian-provider/src/authenticator.ts @@ -14,13 +14,13 @@ * limitations under the License. */ -import { Strategy as AtlassianStrategy } from 'passport-atlassian-oauth2'; import { createOAuthAuthenticator, PassportOAuthAuthenticatorHelper, PassportOAuthDoneCallback, PassportProfile, } from '@backstage/plugin-auth-node'; +import { Strategy as AtlassianStrategy } from 'passport-atlassian-oauth2'; /** @public */ export const atlassianAuthenticator = createOAuthAuthenticator({ @@ -29,8 +29,7 @@ export const atlassianAuthenticator = createOAuthAuthenticator({ initialize({ callbackUrl, config }) { const clientId = config.getString('clientId'); const clientSecret = config.getString('clientSecret'); - const baseUrl = - config.getOptionalString('audience') || 'https://atlassian.com'; + const baseUrl = 'https://auth.atlassian.com'; return PassportOAuthAuthenticatorHelper.from( new AtlassianStrategy( @@ -39,7 +38,7 @@ export const atlassianAuthenticator = createOAuthAuthenticator({ clientSecret: clientSecret, callbackURL: callbackUrl, baseURL: baseUrl, - authorizationURL: `${baseUrl}/oauth/authorize`, + authorizationURL: `${baseUrl}/authorize`, tokenURL: `${baseUrl}/oauth/token`, profileURL: `${baseUrl}/api/v4/user`, }, diff --git a/plugins/auth-backend-module-atlassian-provider/src/module.test.ts b/plugins/auth-backend-module-atlassian-provider/src/module.test.ts index 8d02b0b7a5..024a45d43d 100644 --- a/plugins/auth-backend-module-atlassian-provider/src/module.test.ts +++ b/plugins/auth-backend-module-atlassian-provider/src/module.test.ts @@ -15,9 +15,9 @@ */ import { mockServices, startTestBackend } from '@backstage/backend-test-utils'; -import { authModuleAtlassianProvider } from './module'; -import request from 'supertest'; import { decodeOAuthState } from '@backstage/plugin-auth-node'; +import request from 'supertest'; +import { authModuleAtlassianProvider } from './module'; describe('authModuleAtlassianProvider', () => { it('should start', async () => { @@ -60,8 +60,8 @@ describe('authModuleAtlassianProvider', () => { expect(nonceCookie).toBeDefined(); const startUrl = new URL(res.get('location')); - expect(startUrl.origin).toBe('https://atlassian.com'); - expect(startUrl.pathname).toBe('/oauth/authorize'); + expect(startUrl.origin).toBe('https://auth.atlassian.com'); + expect(startUrl.pathname).toBe('/authorize'); expect(Object.fromEntries(startUrl.searchParams)).toEqual({ response_type: 'code', client_id: 'my-client-id', diff --git a/plugins/auth-backend-module-guest-provider/src/resolvers.ts b/plugins/auth-backend-module-guest-provider/src/resolvers.ts index 35f724f746..cb4e59704c 100644 --- a/plugins/auth-backend-module-guest-provider/src/resolvers.ts +++ b/plugins/auth-backend-module-guest-provider/src/resolvers.ts @@ -46,7 +46,7 @@ export const signInAsGuestUser: (config: Config) => SignInResolver<{}> = 'ownershipEntityRefs', ) ?? [userRef]; try { - return ctx.signInWithCatalogUser({ entityRef: userRef }); + return await ctx.signInWithCatalogUser({ entityRef: userRef }); } catch (err) { // We can't guarantee that a guest user exists in the catalog, so we issue a token directly, return ctx.issueToken({ diff --git a/plugins/auth-backend/src/providers/atlassian/provider.ts b/plugins/auth-backend/src/providers/atlassian/provider.ts index 0cd95e19d7..22db26fd85 100644 --- a/plugins/auth-backend/src/providers/atlassian/provider.ts +++ b/plugins/auth-backend/src/providers/atlassian/provider.ts @@ -14,9 +14,7 @@ * limitations under the License. */ -import { AuthHandler } from '../types'; -import { OAuthResult } from '../../lib/oauth'; -import { createAuthProviderIntegration } from '../createAuthProviderIntegration'; +import { atlassianAuthenticator } from '@backstage/plugin-auth-backend-module-atlassian-provider'; import { SignInResolver, createOAuthProviderFactory, @@ -25,7 +23,9 @@ import { adaptLegacyOAuthHandler, adaptLegacyOAuthSignInResolver, } from '../../lib/legacy'; -import { atlassianAuthenticator } from '@backstage/plugin-auth-backend-module-atlassian-provider'; +import { OAuthResult } from '../../lib/oauth'; +import { createAuthProviderIntegration } from '../createAuthProviderIntegration'; +import { AuthHandler } from '../types'; /** * Auth provider integration for Atlassian auth diff --git a/plugins/auth-react/.eslintrc.js b/plugins/auth-react/.eslintrc.js new file mode 100644 index 0000000000..e2a53a6ad2 --- /dev/null +++ b/plugins/auth-react/.eslintrc.js @@ -0,0 +1 @@ +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/auth-react/README.md b/plugins/auth-react/README.md new file mode 100644 index 0000000000..0137f95371 --- /dev/null +++ b/plugins/auth-react/README.md @@ -0,0 +1,5 @@ +# @backstage/plugin-auth-react + +Welcome to the web library package for the auth plugin! + +_This plugin was created through the Backstage CLI_ diff --git a/plugins/auth-react/api-report.md b/plugins/auth-react/api-report.md new file mode 100644 index 0000000000..01ec9b028a --- /dev/null +++ b/plugins/auth-react/api-report.md @@ -0,0 +1,39 @@ +## API Report File for "@backstage/plugin-auth-react" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts +import { ReactNode } from 'react'; + +// @public +export function CookieAuthRefreshProvider( + props: CookieAuthRefreshProviderProps, +): JSX.Element; + +// @public +export type CookieAuthRefreshProviderProps = { + pluginId: string; + path?: string; + children: ReactNode; +}; + +// @public +export function useCookieAuthRefresh(options: { + pluginId: string; + path?: string; +}): + | { + status: 'loading'; + } + | { + status: 'error'; + error: Error; + retry: () => void; + } + | { + status: 'success'; + data: { + expiresAt: string; + }; + }; +``` diff --git a/plugins/auth-react/catalog-info.yaml b/plugins/auth-react/catalog-info.yaml new file mode 100644 index 0000000000..b75aa32c56 --- /dev/null +++ b/plugins/auth-react/catalog-info.yaml @@ -0,0 +1,10 @@ +apiVersion: backstage.io/v1alpha1 +kind: Component +metadata: + name: backstage-plugin-auth-react + title: '@backstage/plugin-auth-react' + description: Web library for the auth plugin +spec: + lifecycle: experimental + type: backstage-web-library + owner: maintainers diff --git a/plugins/auth-react/package.json b/plugins/auth-react/package.json new file mode 100644 index 0000000000..875cb2f12f --- /dev/null +++ b/plugins/auth-react/package.json @@ -0,0 +1,52 @@ +{ + "name": "@backstage/plugin-auth-react", + "version": "0.0.0", + "description": "Web library for the auth plugin", + "backstage": { + "role": "web-library" + }, + "publishConfig": { + "access": "public", + "main": "dist/index.esm.js", + "types": "dist/index.d.ts" + }, + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/auth-react" + }, + "license": "Apache-2.0", + "sideEffects": false, + "main": "src/index.ts", + "types": "src/index.ts", + "files": [ + "dist" + ], + "scripts": { + "build": "backstage-cli package build", + "clean": "backstage-cli package clean", + "lint": "backstage-cli package lint", + "prepack": "backstage-cli package prepack", + "postpack": "backstage-cli package postpack", + "start": "backstage-cli package start", + "test": "backstage-cli package test" + }, + "dependencies": { + "@backstage/core-components": "workspace:^", + "@backstage/core-plugin-api": "workspace:^", + "@backstage/errors": "workspace:^", + "@material-ui/core": "^4.9.13", + "@react-hookz/web": "^24.0.0", + "@types/react": "^16.13.1 || ^17.0.0 || ^18.0.0" + }, + "devDependencies": { + "@backstage/cli": "workspace:^", + "@backstage/test-utils": "workspace:^", + "@testing-library/jest-dom": "^6.0.0", + "@testing-library/react": "^14.0.0", + "@testing-library/user-event": "^14.0.0" + }, + "peerDependencies": { + "react": "^16.13.1 || ^17.0.0 || ^18.0.0" + } +} diff --git a/plugins/auth-react/src/components/CookieAuthRefreshProvider/CookieAuthRefreshProvider.test.tsx b/plugins/auth-react/src/components/CookieAuthRefreshProvider/CookieAuthRefreshProvider.test.tsx new file mode 100644 index 0000000000..786136261c --- /dev/null +++ b/plugins/auth-react/src/components/CookieAuthRefreshProvider/CookieAuthRefreshProvider.test.tsx @@ -0,0 +1,170 @@ +/* + * Copyright 2024 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import React from 'react'; +import { screen, waitFor } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; +import { CookieAuthRefreshProvider } from './CookieAuthRefreshProvider'; +import { + MockStorageApi, + TestApiProvider, + renderInTestApp, +} from '@backstage/test-utils'; +import { + discoveryApiRef, + fetchApiRef, + storageApiRef, +} from '@backstage/core-plugin-api'; + +describe('CookieAuthRefreshProvider', () => { + const storageApiMock = MockStorageApi.create(); + const discoveryApiMock = { + getBaseUrl: jest + .fn() + .mockResolvedValue('http://localhost:7000/techdocs/api'), + }; + + function getExpiresAtInFuture() { + const tenMinutesInMilliseconds = 10 * 60 * 1000; + return new Date(Date.now() + tenMinutesInMilliseconds).toISOString(); + } + + it('should render a progress bar', async () => { + const fetchApiMock = { + fetch: jest.fn().mockReturnValue(new Promise(() => {})), + }; + + await renderInTestApp( + + +
Test Content
+
+
, + ); + + expect(screen.queryByText('Test Content')).not.toBeInTheDocument(); + + expect(screen.getByTestId('progress')).toBeVisible(); + }); + + it('should render an error panel', async () => { + const error = new Error('Failed to get cookie'); + const fetchApiMock = { + fetch: jest.fn().mockRejectedValue(error), + }; + + await renderInTestApp( + + +
Test Content
+
+
, + ); + + expect(screen.getByText(error.message)).toBeInTheDocument(); + }); + + it('should call the api again when retry is clicked', async () => { + const error = new Error('Failed to get cookie'); + const fetchApiMock = { + fetch: jest + .fn() + .mockRejectedValueOnce(error) + .mockResolvedValue({ + ok: true, + json: jest.fn().mockResolvedValue({ + expiresAt: getExpiresAtInFuture(), + }), + }), + }; + + await renderInTestApp( + + +
Test Content
+
+
, + ); + + await waitFor(() => + expect(fetchApiMock.fetch).toHaveBeenCalledWith( + 'http://localhost:7000/techdocs/api/cookie', + { credentials: 'include' }, + ), + ); + + expect(fetchApiMock.fetch).toHaveBeenCalledTimes(1); + + expect(screen.queryByText('Test Content')).not.toBeInTheDocument(); + + expect(screen.getByText(error.message)).toBeInTheDocument(); + + await userEvent.click(screen.getByText('Retry')); + + expect(fetchApiMock.fetch).toHaveBeenCalledTimes(2); + + await waitFor(() => + expect(screen.getByText('Test Content')).toBeInTheDocument(), + ); + }); + + it('should render the children', async () => { + const fetchApiMock = { + fetch: jest.fn().mockResolvedValue({ + ok: true, + json: jest.fn().mockResolvedValue({ + expiresAt: getExpiresAtInFuture(), + }), + }), + }; + + await renderInTestApp( + + +
Test Content
+
+
, + ); + + await waitFor(() => + expect(screen.getByText('Test Content')).toBeInTheDocument(), + ); + }); +}); diff --git a/plugins/auth-react/src/components/CookieAuthRefreshProvider/CookieAuthRefreshProvider.tsx b/plugins/auth-react/src/components/CookieAuthRefreshProvider/CookieAuthRefreshProvider.tsx new file mode 100644 index 0000000000..7919207692 --- /dev/null +++ b/plugins/auth-react/src/components/CookieAuthRefreshProvider/CookieAuthRefreshProvider.tsx @@ -0,0 +1,64 @@ +/* + * Copyright 2024 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import React, { ReactNode } from 'react'; +import { ErrorPanel } from '@backstage/core-components'; +import { useApp } from '@backstage/core-plugin-api'; +import { Button } from '@material-ui/core'; +import { useCookieAuthRefresh } from '../../hooks'; + +/** + * @public + * Props for the {@link CookieAuthRefreshProvider} component. + */ +export type CookieAuthRefreshProviderProps = { + // The plugin ID used for discovering the API origin + pluginId: string; + // The path used for calling the refresh cookie endpoint, default to '/cookie' + path?: string; + // The children to render when the refresh is successful + children: ReactNode; +}; + +/** + * @public + * A provider that will refresh the cookie when it is about to expire. + */ +export function CookieAuthRefreshProvider( + props: CookieAuthRefreshProviderProps, +): JSX.Element { + const { children, ...options } = props; + const app = useApp(); + const { Progress } = app.getComponents(); + + const result = useCookieAuthRefresh(options); + + if (result.status === 'loading') { + return ; + } + + if (result.status === 'error') { + return ( + + + + ); + } + + return <>{children}; +} diff --git a/plugins/auth-react/src/components/CookieAuthRefreshProvider/index.ts b/plugins/auth-react/src/components/CookieAuthRefreshProvider/index.ts new file mode 100644 index 0000000000..2bb172d850 --- /dev/null +++ b/plugins/auth-react/src/components/CookieAuthRefreshProvider/index.ts @@ -0,0 +1,20 @@ +/* + * Copyright 2024 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export { + CookieAuthRefreshProvider, + type CookieAuthRefreshProviderProps, +} from './CookieAuthRefreshProvider'; diff --git a/plugins/auth-react/src/components/index.ts b/plugins/auth-react/src/components/index.ts new file mode 100644 index 0000000000..f561672096 --- /dev/null +++ b/plugins/auth-react/src/components/index.ts @@ -0,0 +1,20 @@ +/* + * Copyright 2024 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// The index file in ./components/ is typically responsible for selecting +// which components are public API and should be exported from the package. + +export * from './CookieAuthRefreshProvider'; diff --git a/plugins/auth-react/src/hooks/index.ts b/plugins/auth-react/src/hooks/index.ts new file mode 100644 index 0000000000..1257334498 --- /dev/null +++ b/plugins/auth-react/src/hooks/index.ts @@ -0,0 +1,20 @@ +/* + * Copyright 2024 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// The index file in ./hooks/ is typically responsible for selecting +// which hooks are public API and should be exported from the package. + +export * from './useCookieAuthRefresh'; diff --git a/plugins/auth-react/src/hooks/useCookieAuthRefresh/index.ts b/plugins/auth-react/src/hooks/useCookieAuthRefresh/index.ts new file mode 100644 index 0000000000..42b60840f8 --- /dev/null +++ b/plugins/auth-react/src/hooks/useCookieAuthRefresh/index.ts @@ -0,0 +1,17 @@ +/* + * Copyright 2024 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export { useCookieAuthRefresh } from './useCookieAuthRefresh'; diff --git a/plugins/auth-react/src/hooks/useCookieAuthRefresh/useCookieAuthRefresh.test.tsx b/plugins/auth-react/src/hooks/useCookieAuthRefresh/useCookieAuthRefresh.test.tsx new file mode 100644 index 0000000000..180de98a46 --- /dev/null +++ b/plugins/auth-react/src/hooks/useCookieAuthRefresh/useCookieAuthRefresh.test.tsx @@ -0,0 +1,353 @@ +/* + * Copyright 2024 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import React from 'react'; +import { renderHook, waitFor } from '@testing-library/react'; +import { fetchApiRef, discoveryApiRef } from '@backstage/core-plugin-api'; +import { TestApiProvider } from '@backstage/test-utils'; +import { useCookieAuthRefresh } from './useCookieAuthRefresh'; + +describe('useCookieAuthRefresh', () => { + const discoveryApiMock = { + getBaseUrl: jest + .fn() + .mockResolvedValue('http://localhost:7000/techdocs/api'), + }; + + const now = 1710316886171; + const tenMinutesInMilliseconds = 10 * 60 * 1000; + const tenMinutesFromNowInMilliseconds = now + tenMinutesInMilliseconds; + const expiresAt = new Date(tenMinutesFromNowInMilliseconds).toISOString(); + + const fetchApiMock = { + fetch: jest.fn().mockResolvedValue({ + ok: true, + json: jest.fn().mockResolvedValue({ expiresAt }), + }), + }; + + beforeEach(() => { + jest.useFakeTimers({ now }); + jest.clearAllMocks(); + }); + + afterEach(() => { + jest.useRealTimers(); + }); + + it('should return a loading status when the refresh is in progress first time', () => { + const error = new Error('Failed to get cookie'); + + const { result } = renderHook( + () => useCookieAuthRefresh({ pluginId: 'techdocs' }), + { + wrapper: ({ children }) => ( + + {children} + + ), + }, + ); + + expect(result.current.status).toBe('loading'); + }); + + it('should return a loading status when retrying without previous success', async () => { + const error = new Error('Failed to get cookie'); + + const { result } = renderHook( + () => useCookieAuthRefresh({ pluginId: 'techdocs' }), + { + wrapper: ({ children }) => ( + {})), + }, + ], + [discoveryApiRef, discoveryApiMock], + ]} + > + {children} + + ), + }, + ); + + expect(result.current).toStrictEqual({ status: 'loading' }); + + await waitFor(() => + expect(result.current).toStrictEqual({ + status: 'error', + error, + retry: expect.any(Function), + }), + ); + + if (result.current.status === 'error') { + result.current.retry(); + } + + await waitFor(() => + expect(result.current).toStrictEqual({ + status: 'loading', + }), + ); + }); + + it('should return a loading status when retrying with previous success', async () => { + const error = new Error('Failed to get cookie'); + + const { result } = renderHook( + () => useCookieAuthRefresh({ pluginId: 'techdocs' }), + { + wrapper: ({ children }) => ( + {})), + }, + ], + [discoveryApiRef, discoveryApiMock], + ]} + > + {children} + + ), + }, + ); + + expect(result.current).toStrictEqual({ status: 'loading' }); + + await waitFor(() => + expect(result.current).toStrictEqual({ + status: 'success', + data: { expiresAt }, + }), + ); + + jest.advanceTimersByTime(tenMinutesInMilliseconds); + + await waitFor(() => + expect(result.current).toStrictEqual({ + status: 'error', + error, + retry: expect.any(Function), + }), + ); + + if (result.current.status === 'error') { + result.current.retry(); + } + + await waitFor(() => + expect(result.current).toStrictEqual({ + status: 'loading', + }), + ); + }); + + it('should return an error status when the refresh has failed', async () => { + const error = new Error('Failed to get cookie'); + + const { result } = renderHook( + () => useCookieAuthRefresh({ pluginId: 'techdocs' }), + { + wrapper: ({ children }) => ( + + {children} + + ), + }, + ); + + await waitFor(() => + expect(result.current).toStrictEqual({ + status: 'error', + error, + retry: expect.any(Function), + }), + ); + }); + + it('should call the api to get the cookie and use it', async () => { + const { result } = renderHook( + () => useCookieAuthRefresh({ pluginId: 'techdocs' }), + { + wrapper: ({ children }) => ( + + {children} + + ), + }, + ); + + await waitFor(() => + expect(fetchApiMock.fetch).toHaveBeenCalledWith( + 'http://localhost:7000/techdocs/api/cookie', + { credentials: 'include' }, + ), + ); + + await waitFor(() => + expect(result.current).toStrictEqual({ + status: 'success', + data: { expiresAt }, + }), + ); + }); + + it('should cancel the refresh when a message is received from another tab', async () => { + const pluginId = 'techdocs'; + + renderHook(() => useCookieAuthRefresh({ pluginId }), { + wrapper: ({ children }) => ( + + {children} + + ), + }); + + const twentyMinutesFromNowInMilliseconds = + now + 2 * tenMinutesInMilliseconds; + + // simulating other tab refreshing the cookie + new global.BroadcastChannel( + `${pluginId}-auth-cookie-expires-at`, + ).postMessage({ + action: 'COOKIE_REFRESH_SUCCESS', + payload: { + expiresAt: new Date(twentyMinutesFromNowInMilliseconds).toISOString(), + }, + }); + + // advance the timers in 10 minutes to match the old expires at + jest.advanceTimersByTime(tenMinutesInMilliseconds); + + // should not call the api + await waitFor(() => expect(fetchApiMock.fetch).toHaveBeenCalledTimes(1)); + + // advance the timers in more 10 minutes to match the new expires at + jest.advanceTimersByTime(tenMinutesInMilliseconds - 1000); + + // should call the api + await waitFor(() => expect(fetchApiMock.fetch).toHaveBeenCalledTimes(2)); + }); + + it('should cancel the refresh when the component is unmounted', async () => { + const { result, unmount } = renderHook( + () => useCookieAuthRefresh({ pluginId: 'techdocs' }), + { + wrapper: ({ children }) => ( + + {children} + + ), + }, + ); + + await waitFor(() => + expect(result.current).toStrictEqual({ + status: 'success', + data: { expiresAt }, + }), + ); + + await waitFor(() => expect(fetchApiMock.fetch).toHaveBeenCalledTimes(1)); + + unmount(); + + // advance the timers to ensure that the refresh is not called + jest.advanceTimersByTime(tenMinutesInMilliseconds); + + // should not call the api after unmount + await waitFor(() => + expect(fetchApiMock.fetch).not.toHaveBeenCalledTimes(2), + ); + }); + + it('should refresh the cookie when it is about to expire', async () => { + renderHook(() => useCookieAuthRefresh({ pluginId: 'techdocs' }), { + wrapper: ({ children }) => ( + + {children} + + ), + }); + + await waitFor(() => expect(fetchApiMock.fetch).toHaveBeenCalledTimes(1)); + + // advance the timers to the expiration date + jest.advanceTimersByTime(tenMinutesInMilliseconds - 1000); + + // should call the api + await waitFor(() => expect(fetchApiMock.fetch).toHaveBeenCalledTimes(2)); + }); +}); diff --git a/plugins/auth-react/src/hooks/useCookieAuthRefresh/useCookieAuthRefresh.tsx b/plugins/auth-react/src/hooks/useCookieAuthRefresh/useCookieAuthRefresh.tsx new file mode 100644 index 0000000000..dfb13289db --- /dev/null +++ b/plugins/auth-react/src/hooks/useCookieAuthRefresh/useCookieAuthRefresh.tsx @@ -0,0 +1,137 @@ +/* + * Copyright 2024 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { useEffect, useCallback, useMemo } from 'react'; +import { + discoveryApiRef, + fetchApiRef, + useApi, +} from '@backstage/core-plugin-api'; +import { useAsync, useMountEffect } from '@react-hookz/web'; +import { ResponseError } from '@backstage/errors'; + +/** + * @public + * A hook that will refresh the cookie when it is about to expire. + * @param options - Options for configuring the refresh cookie endpoint + */ +export function useCookieAuthRefresh(options: { + // The plugin id used for discovering the API origin + pluginId: string; + // The path used for calling the refresh cookie endpoint, default to '/cookie' + path?: string; +}): + | { status: 'loading' } + | { status: 'error'; error: Error; retry: () => void } + | { status: 'success'; data: { expiresAt: string } } { + const { pluginId, path = '/cookie' } = options ?? {}; + const fetchApi = useApi(fetchApiRef); + const discoveryApi = useApi(discoveryApiRef); + + const channel = useMemo(() => { + return 'BroadcastChannel' in window + ? new BroadcastChannel(`${pluginId}-auth-cookie-expires-at`) + : null; + }, [pluginId]); + + const [state, actions] = useAsync<{ expiresAt: string }>(async () => { + const apiOrigin = await discoveryApi.getBaseUrl(pluginId); + const requestUrl = `${apiOrigin}${path}`; + const response = await fetchApi.fetch(`${requestUrl}`, { + credentials: 'include', + }); + if (!response.ok) { + throw await ResponseError.fromResponse(response); + } + const data = await response.json(); + if (!data.expiresAt) { + throw new Error('No expiration date found in response'); + } + return data; + }); + + useMountEffect(actions.execute); + + const retry = useCallback(() => { + actions.execute(); + }, [actions]); + + const refresh = useCallback( + (params: { expiresAt: string }) => { + // Randomize the refreshing margin with a margin of 1-4 minutes to avoid all tabs refreshing at the same time + // It cannot be less than 5 minutes otherwise the backend will return the same expiration date + const margin = (1 + 3 * Math.random()) * 60000; + const delay = Date.parse(params.expiresAt) - Date.now() - margin; + const timeout = setTimeout(retry, delay); + return () => clearTimeout(timeout); + }, + [retry], + ); + + useEffect(() => { + // Only schedule a refresh if we have a successful response + if (state.status !== 'success' || !state.result) { + return () => {}; + } + channel?.postMessage({ + action: 'COOKIE_REFRESH_SUCCESS', + payload: state.result, + }); + let cancel = refresh(state.result); + const listener = ( + event: MessageEvent<{ action: string; payload: { expiresAt: string } }>, + ) => { + const { action, payload } = event.data; + if (action === 'COOKIE_REFRESH_SUCCESS') { + cancel(); + cancel = refresh(payload); + } + }; + channel?.addEventListener('message', listener); + return () => { + cancel(); + channel?.removeEventListener('message', listener); + }; + }, [state, refresh, channel]); + + // Initialising + if (state.status === 'not-executed') { + return { status: 'loading' }; + } + + // First refresh or retrying without any success before + // Possible state transitions: + // e.g. not-executed -> loading (first-refresh) + // e.g. not-executed -> loading (first-refresh) -> error -> loading (manual-retry) + if (state.status === 'loading' && !state.result) { + return { status: 'loading' }; + } + + // Retrying after having succeeding at least once + // Current state is: { status: 'loading', result: {...}, error: undefined | Error } + // e.g. not-executed -> loading (first-refresh) -> success -> loading (scheduled-refresh) -> error -> loading (manual-retry) + if (state.status === 'loading' && state.error) { + return { status: 'loading' }; + } + + // Something went wrong during any situation of a refresh + if (state.status === 'error' && state.error) { + return { status: 'error', error: state.error, retry }; + } + + // At this point it should be safe to assume that we have a successful refresh + return { status: 'success', data: state.result! }; +} diff --git a/plugins/auth-react/src/index.ts b/plugins/auth-react/src/index.ts new file mode 100644 index 0000000000..30ac7cfe72 --- /dev/null +++ b/plugins/auth-react/src/index.ts @@ -0,0 +1,27 @@ +/* + * Copyright 2024 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Web library for the auth plugin. + * + * @packageDocumentation + */ + +// In this package you might for example export components or hooks +// that are useful to other plugins or modules. + +export * from './components'; +export * from './hooks'; diff --git a/plugins/auth-react/src/setupTests.ts b/plugins/auth-react/src/setupTests.ts new file mode 100644 index 0000000000..6580ddffad --- /dev/null +++ b/plugins/auth-react/src/setupTests.ts @@ -0,0 +1,49 @@ +/* + * Copyright 2024 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import '@testing-library/jest-dom'; + +global.BroadcastChannel = jest + .fn() + .mockImplementation((_channelName: string) => { + const listeners: ((event: { data: any }) => void)[] = []; + + return { + addEventListener: ( + type: string, + listener: (event: { data: any }) => void, + ) => { + if (type === 'message') { + listeners.push(listener); + } + }, + removeEventListener: ( + type: string, + listener: (event: { data: any }) => void, + ) => { + if (type === 'message') { + const index = listeners.indexOf(listener); + if (index !== -1) { + listeners.splice(index, 1); + } + } + }, + postMessage: (message: any) => { + listeners.forEach(listener => { + listener({ data: message }); + }); + }, + }; + }); diff --git a/plugins/azure-devops-backend/src/plugin.ts b/plugins/azure-devops-backend/src/plugin.ts index 1cf17ceecc..f378e9c62e 100644 --- a/plugins/azure-devops-backend/src/plugin.ts +++ b/plugins/azure-devops-backend/src/plugin.ts @@ -46,6 +46,10 @@ export const azureDevOpsPlugin = createBackendPlugin({ permissions, }), ); + httpRouter.addAuthPolicy({ + path: '/health', + allow: 'unauthenticated', + }); }, }); }, diff --git a/plugins/azure-sites-backend/src/plugin.ts b/plugins/azure-sites-backend/src/plugin.ts index a8afe4e430..5416e853a1 100644 --- a/plugins/azure-sites-backend/src/plugin.ts +++ b/plugins/azure-sites-backend/src/plugin.ts @@ -63,6 +63,10 @@ export const azureSitesPlugin = createBackendPlugin({ httpAuth, }), ); + httpRouter.addAuthPolicy({ + path: '/health', + allow: 'unauthenticated', + }); }, }); }, diff --git a/plugins/badges/.eslintrc.js b/plugins/badges/.eslintrc.js index e2a53a6ad2..e487f765b2 100644 --- a/plugins/badges/.eslintrc.js +++ b/plugins/badges/.eslintrc.js @@ -1 +1,5 @@ -module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname, { + rules: { + '@backstage/no-top-level-material-ui-4-imports': 'error', + }, +}); diff --git a/plugins/badges/src/components/EntityBadgesDialog.tsx b/plugins/badges/src/components/EntityBadgesDialog.tsx index 097bba5581..61914bb756 100644 --- a/plugins/badges/src/components/EntityBadgesDialog.tsx +++ b/plugins/badges/src/components/EntityBadgesDialog.tsx @@ -15,17 +15,15 @@ */ import { useAsyncEntity } from '@backstage/plugin-catalog-react'; -import { - Box, - Button, - Dialog, - DialogActions, - DialogContent, - DialogContentText, - DialogTitle, - useMediaQuery, - useTheme, -} from '@material-ui/core'; +import Box from '@material-ui/core/Box'; +import Button from '@material-ui/core/Button'; +import Dialog from '@material-ui/core/Dialog'; +import DialogActions from '@material-ui/core/DialogActions'; +import DialogContent from '@material-ui/core/DialogContent'; +import DialogContentText from '@material-ui/core/DialogContentText'; +import DialogTitle from '@material-ui/core/DialogTitle'; +import useMediaQuery from '@material-ui/core/useMediaQuery'; +import { useTheme } from '@material-ui/core/styles'; import React from 'react'; import useAsync from 'react-use/lib/useAsync'; import { badgesApiRef } from '../api'; diff --git a/plugins/bitrise/.eslintrc.js b/plugins/bitrise/.eslintrc.js index e2a53a6ad2..e487f765b2 100644 --- a/plugins/bitrise/.eslintrc.js +++ b/plugins/bitrise/.eslintrc.js @@ -1 +1,5 @@ -module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname, { + rules: { + '@backstage/no-top-level-material-ui-4-imports': 'error', + }, +}); diff --git a/plugins/bitrise/src/components/BitriseArtifactsComponent/BitriseArtifactsComponent.tsx b/plugins/bitrise/src/components/BitriseArtifactsComponent/BitriseArtifactsComponent.tsx index cdc425ae53..8c0b1366e3 100644 --- a/plugins/bitrise/src/components/BitriseArtifactsComponent/BitriseArtifactsComponent.tsx +++ b/plugins/bitrise/src/components/BitriseArtifactsComponent/BitriseArtifactsComponent.tsx @@ -16,15 +16,13 @@ import React from 'react'; import { BitriseBuildResult } from '../../api/bitriseApi.model'; -import { Alert } from '@material-ui/lab'; +import Alert from '@material-ui/lab/Alert'; import { BitriseDownloadArtifactComponent } from '../BitriseDownloadArtifactComponent'; import { useBitriseArtifacts } from '../useBitriseArtifacts'; -import { - List, - ListItem, - ListItemSecondaryAction, - ListItemText, -} from '@material-ui/core'; +import List from '@material-ui/core/List'; +import ListItem from '@material-ui/core/ListItem'; +import ListItemSecondaryAction from '@material-ui/core/ListItemSecondaryAction'; +import ListItemText from '@material-ui/core/ListItemText'; import { Progress } from '@backstage/core-components'; type BitriseArtifactsComponentComponentProps = { diff --git a/plugins/bitrise/src/components/BitriseBuildDetailsDialog/BitriseBuildDetailsDialog.tsx b/plugins/bitrise/src/components/BitriseBuildDetailsDialog/BitriseBuildDetailsDialog.tsx index b59aef7e68..bcaf724945 100644 --- a/plugins/bitrise/src/components/BitriseBuildDetailsDialog/BitriseBuildDetailsDialog.tsx +++ b/plugins/bitrise/src/components/BitriseBuildDetailsDialog/BitriseBuildDetailsDialog.tsx @@ -17,14 +17,12 @@ import React, { useState } from 'react'; import { BitriseBuildResult } from '../../api/bitriseApi.model'; import { BitriseArtifactsComponent } from '../BitriseArtifactsComponent'; -import { - Chip, - Dialog, - DialogContent, - DialogTitle, - IconButton, - makeStyles, -} from '@material-ui/core'; +import Chip from '@material-ui/core/Chip'; +import Dialog from '@material-ui/core/Dialog'; +import DialogContent from '@material-ui/core/DialogContent'; +import DialogTitle from '@material-ui/core/DialogTitle'; +import IconButton from '@material-ui/core/IconButton'; +import { makeStyles } from '@material-ui/core/styles'; import CloudDownload from '@material-ui/icons/CloudDownload'; import CloseIcon from '@material-ui/icons/Close'; diff --git a/plugins/bitrise/src/components/BitriseBuildsTableComponent/BitriseBuildsTableComponent.tsx b/plugins/bitrise/src/components/BitriseBuildsTableComponent/BitriseBuildsTableComponent.tsx index 3f6ebf93f4..3acbd20108 100644 --- a/plugins/bitrise/src/components/BitriseBuildsTableComponent/BitriseBuildsTableComponent.tsx +++ b/plugins/bitrise/src/components/BitriseBuildsTableComponent/BitriseBuildsTableComponent.tsx @@ -15,8 +15,8 @@ */ import React, { useState } from 'react'; -import { Alert } from '@material-ui/lab'; -import { Button } from '@material-ui/core'; +import Alert from '@material-ui/lab/Alert'; +import Button from '@material-ui/core/Button'; import GitHubIcon from '@material-ui/icons/GitHub'; import { useBitriseBuilds } from '../../hooks/useBitriseBuilds'; import { diff --git a/plugins/bitrise/src/components/BitriseDownloadArtifactComponent/BitriseDownloadArtifactComponent.tsx b/plugins/bitrise/src/components/BitriseDownloadArtifactComponent/BitriseDownloadArtifactComponent.tsx index 4ecda73d04..58248addfc 100644 --- a/plugins/bitrise/src/components/BitriseDownloadArtifactComponent/BitriseDownloadArtifactComponent.tsx +++ b/plugins/bitrise/src/components/BitriseDownloadArtifactComponent/BitriseDownloadArtifactComponent.tsx @@ -16,10 +16,12 @@ import React from 'react'; import CloudDownload from '@material-ui/icons/CloudDownload'; -import { CircularProgress, IconButton, Tooltip } from '@material-ui/core'; +import CircularProgress from '@material-ui/core/CircularProgress'; +import IconButton from '@material-ui/core/IconButton'; +import Tooltip from '@material-ui/core/Tooltip'; import LinkIcon from '@material-ui/icons/Link'; import { useBitriseArtifactDetails } from '../useBitriseArtifactDetails'; -import { Alert } from '@material-ui/lab'; +import Alert from '@material-ui/lab/Alert'; type BitriseDownloadArtifactComponentProps = { appSlug: string; diff --git a/plugins/catalog-backend-module-github/api-report-alpha.md b/plugins/catalog-backend-module-github/api-report-alpha.md index cd5344f728..ca3a7b1978 100644 --- a/plugins/catalog-backend-module-github/api-report-alpha.md +++ b/plugins/catalog-backend-module-github/api-report-alpha.md @@ -6,8 +6,8 @@ import { BackendFeature } from '@backstage/backend-plugin-api'; // @alpha -const catalogModuleGithubEntityProvider: () => BackendFeature; -export default catalogModuleGithubEntityProvider; +const githubCatalogModule: () => BackendFeature; +export default githubCatalogModule; // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/catalog-backend-module-github/src/module/catalogModuleGithubEntityProvider.test.ts b/plugins/catalog-backend-module-github/src/module/githubCatalogModule.test.ts similarity index 75% rename from plugins/catalog-backend-module-github/src/module/catalogModuleGithubEntityProvider.test.ts rename to plugins/catalog-backend-module-github/src/module/githubCatalogModule.test.ts index cb38be1a5d..0f466fefb7 100644 --- a/plugins/catalog-backend-module-github/src/module/catalogModuleGithubEntityProvider.test.ts +++ b/plugins/catalog-backend-module-github/src/module/githubCatalogModule.test.ts @@ -17,11 +17,15 @@ import { TaskScheduleDefinition } from '@backstage/backend-tasks'; import { mockServices, startTestBackend } from '@backstage/backend-test-utils'; import { EntityProvider } from '@backstage/plugin-catalog-node'; -import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node/alpha'; +import { + catalogAnalysisExtensionPoint, + catalogProcessingExtensionPoint, +} from '@backstage/plugin-catalog-node/alpha'; import { Duration } from 'luxon'; -import { catalogModuleGithubEntityProvider } from './catalogModuleGithubEntityProvider'; +import { githubCatalogModule } from './githubCatalogModule'; +import { GithubLocationAnalyzer } from '../analyzers/GithubLocationAnalyzer'; -describe('catalogModuleGithubEntityProvider', () => { +describe('githubCatalogModule', () => { it('should register provider at the catalog extension point', async () => { let addedProviders: Array | undefined; let usedSchedule: TaskScheduleDefinition | undefined; @@ -31,6 +35,11 @@ describe('catalogModuleGithubEntityProvider', () => { addedProviders = providers; }, }; + + const analysisExtensionPoint = { + addLocationAnalyzer: jest.fn(), + }; + const runner = jest.fn(); const scheduler = mockServices.scheduler.mock({ createScheduledTaskRunner(schedule) { @@ -54,9 +63,12 @@ describe('catalogModuleGithubEntityProvider', () => { }; await startTestBackend({ - extensionPoints: [[catalogProcessingExtensionPoint, extensionPoint]], + extensionPoints: [ + [catalogProcessingExtensionPoint, extensionPoint], + [catalogAnalysisExtensionPoint, analysisExtensionPoint], + ], features: [ - catalogModuleGithubEntityProvider(), + githubCatalogModule(), mockServices.rootConfig.factory({ data: config }), scheduler.factory, ], @@ -69,5 +81,8 @@ describe('catalogModuleGithubEntityProvider', () => { 'github-provider:default', ); expect(runner).not.toHaveBeenCalled(); + expect(analysisExtensionPoint.addLocationAnalyzer).toHaveBeenCalledWith( + expect.any(GithubLocationAnalyzer), + ); }); }); diff --git a/plugins/catalog-backend-module-github/src/module/catalogModuleGithubEntityProvider.ts b/plugins/catalog-backend-module-github/src/module/githubCatalogModule.ts similarity index 66% rename from plugins/catalog-backend-module-github/src/module/catalogModuleGithubEntityProvider.ts rename to plugins/catalog-backend-module-github/src/module/githubCatalogModule.ts index bfa8cf2a4e..55a1b7f34d 100644 --- a/plugins/catalog-backend-module-github/src/module/catalogModuleGithubEntityProvider.ts +++ b/plugins/catalog-backend-module-github/src/module/githubCatalogModule.ts @@ -19,26 +19,49 @@ import { coreServices, } from '@backstage/backend-plugin-api'; import { loggerToWinstonLogger } from '@backstage/backend-common'; -import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node/alpha'; +import { + catalogAnalysisExtensionPoint, + catalogProcessingExtensionPoint, +} from '@backstage/plugin-catalog-node/alpha'; import { GithubEntityProvider } from '../providers/GithubEntityProvider'; +import { GithubLocationAnalyzer } from '../analyzers/GithubLocationAnalyzer'; /** * Registers the `GithubEntityProvider` with the catalog processing extension point. * * @alpha */ -export const catalogModuleGithubEntityProvider = createBackendModule({ +export const githubCatalogModule = createBackendModule({ pluginId: 'catalog', - moduleId: 'github-entity-provider', + moduleId: 'github', register(env) { env.registerInit({ deps: { catalog: catalogProcessingExtensionPoint, + analyzers: catalogAnalysisExtensionPoint, + auth: coreServices.auth, + discovery: coreServices.discovery, config: coreServices.rootConfig, logger: coreServices.logger, scheduler: coreServices.scheduler, }, - async init({ catalog, config, logger, scheduler }) { + async init({ + catalog, + config, + logger, + scheduler, + analyzers, + discovery, + auth, + }) { + analyzers.addLocationAnalyzer( + new GithubLocationAnalyzer({ + discovery, + config, + auth, + }), + ); + catalog.addEntityProvider( GithubEntityProvider.fromConfig(config, { logger: loggerToWinstonLogger(logger), diff --git a/plugins/catalog-backend-module-github/src/module/index.ts b/plugins/catalog-backend-module-github/src/module/index.ts index 9c9331763c..02b377a4b2 100644 --- a/plugins/catalog-backend-module-github/src/module/index.ts +++ b/plugins/catalog-backend-module-github/src/module/index.ts @@ -14,4 +14,4 @@ * limitations under the License. */ -export { catalogModuleGithubEntityProvider as default } from './catalogModuleGithubEntityProvider'; +export { githubCatalogModule as default } from './githubCatalogModule'; diff --git a/plugins/catalog-backend-module-unprocessed/api-report.md b/plugins/catalog-backend-module-unprocessed/api-report.md index 569bd572da..febde39834 100644 --- a/plugins/catalog-backend-module-unprocessed/api-report.md +++ b/plugins/catalog-backend-module-unprocessed/api-report.md @@ -4,8 +4,11 @@ ```ts import { BackendFeature } from '@backstage/backend-plugin-api'; +import { DiscoveryService } from '@backstage/backend-plugin-api'; +import { HttpAuthService } from '@backstage/backend-plugin-api'; import { HttpRouterService } from '@backstage/backend-plugin-api'; import { Knex } from 'knex'; +import { PermissionsService } from '@backstage/backend-plugin-api'; // @public const catalogModuleUnprocessedEntities: () => BackendFeature; @@ -13,7 +16,14 @@ export default catalogModuleUnprocessedEntities; // @public export class UnprocessedEntitiesModule { - constructor(database: Knex, router: Pick); + // (undocumented) + static create(options: { + router: Pick; + database: Knex; + discovery: DiscoveryService; + permissions: PermissionsService; + httpAuth?: HttpAuthService; + }): UnprocessedEntitiesModule; // (undocumented) registerRoutes(): void; } diff --git a/plugins/catalog-backend-module-unprocessed/package.json b/plugins/catalog-backend-module-unprocessed/package.json index 26243bff51..16feb612cb 100644 --- a/plugins/catalog-backend-module-unprocessed/package.json +++ b/plugins/catalog-backend-module-unprocessed/package.json @@ -28,14 +28,21 @@ "postpack": "backstage-cli package postpack" }, "devDependencies": { - "@backstage/cli": "workspace:^" + "@backstage/cli": "workspace:^", + "@types/express": "^4.17.6" }, "files": [ "dist" ], "dependencies": { + "@backstage/backend-common": "workspace:^", "@backstage/backend-plugin-api": "workspace:^", "@backstage/catalog-model": "workspace:^", + "@backstage/errors": "workspace:^", + "@backstage/plugin-auth-node": "workspace:^", + "@backstage/plugin-catalog-unprocessed-entities-common": "workspace:^", + "@backstage/plugin-permission-common": "workspace:^", + "@backstage/plugin-permission-node": "workspace:^", "express-promise-router": "^4.1.1", "knex": "^3.0.0" } diff --git a/plugins/catalog-backend-module-unprocessed/src/UnprocessedEntitiesModule.ts b/plugins/catalog-backend-module-unprocessed/src/UnprocessedEntitiesModule.ts index a01f717e12..2653ffedac 100644 --- a/plugins/catalog-backend-module-unprocessed/src/UnprocessedEntitiesModule.ts +++ b/plugins/catalog-backend-module-unprocessed/src/UnprocessedEntitiesModule.ts @@ -21,8 +21,23 @@ import { UnprocessedEntitiesResponse, } from './types'; import { Knex } from 'knex'; -import { HttpRouterService } from '@backstage/backend-plugin-api'; +import { + DiscoveryService, + HttpAuthService, + HttpRouterService, + PermissionsService, +} from '@backstage/backend-plugin-api'; import Router from 'express-promise-router'; +import type { Request } from 'express'; + +import { + AuthorizeResult, + BasicPermission, +} from '@backstage/plugin-permission-common'; +import { createPermissionIntegrationRouter } from '@backstage/plugin-permission-node'; +import { unprocessedEntitiesDeletePermission } from '@backstage/plugin-catalog-unprocessed-entities-common'; +import { NotAllowedError } from '@backstage/errors'; +import { createLegacyAuthAdapters } from '@backstage/backend-common'; /** * Module providing Unprocessed Entities API endpoints @@ -32,12 +47,38 @@ import Router from 'express-promise-router'; export class UnprocessedEntitiesModule { private readonly moduleRouter; - constructor( + private readonly httpAuth: HttpAuthService; + + private constructor( private readonly database: Knex, private readonly router: Pick, + private readonly permissions: PermissionsService, + discovery: DiscoveryService, + httpAuth?: HttpAuthService, ) { this.moduleRouter = Router(); this.router.use(this.moduleRouter); + + this.httpAuth = createLegacyAuthAdapters({ + discovery, + httpAuth, + }).httpAuth; + } + + static create(options: { + router: Pick; + database: Knex; + discovery: DiscoveryService; + permissions: PermissionsService; + httpAuth?: HttpAuthService; + }) { + return new UnprocessedEntitiesModule( + options.database, + options.router, + options.permissions, + options.discovery, + options.httpAuth, + ); } private async unprocessed( @@ -104,12 +145,31 @@ export class UnprocessedEntitiesModule { } registerRoutes() { + const permissionIntegrationRouter = createPermissionIntegrationRouter({ + permissions: [unprocessedEntitiesDeletePermission], + }); + + const isRequestAuthorized = async ( + req: Request, + permission: BasicPermission, + ): Promise => { + const decision = ( + await this.permissions.authorize([{ permission }], { + credentials: await this.httpAuth.credentials(req), + }) + )[0]; + + return decision.result !== AuthorizeResult.DENY; + }; + + this.router.use(permissionIntegrationRouter); + this.moduleRouter .get('/entities/unprocessed/failed', async (req, res) => { return res.json( await this.unprocessed({ reason: 'failed', - owner: req.query.owner as string, + owner: String(req.query.owner), }), ); }) @@ -117,9 +177,28 @@ export class UnprocessedEntitiesModule { return res.json( await this.unprocessed({ reason: 'pending', - owner: req.query.owner as string, + owner: String(req.query.owner), }), ); - }); + }) + .delete( + '/entities/unprocessed/delete/:entity_id', + async (request, response) => { + const authorized = await isRequestAuthorized( + request, + unprocessedEntitiesDeletePermission, + ); + + if (!authorized) { + throw new NotAllowedError('Unauthorized'); + } + + await this.database('refresh_state') + .where({ entity_id: request.params.entity_id }) + .delete(); + + response.status(204).send(); + }, + ); } } diff --git a/plugins/catalog-backend-module-unprocessed/src/module.ts b/plugins/catalog-backend-module-unprocessed/src/module.ts index 8c724d432d..852b8fb432 100644 --- a/plugins/catalog-backend-module-unprocessed/src/module.ts +++ b/plugins/catalog-backend-module-unprocessed/src/module.ts @@ -34,14 +34,28 @@ export const catalogModuleUnprocessedEntities = createBackendModule({ database: coreServices.database, router: coreServices.httpRouter, logger: coreServices.logger, + httpAuth: coreServices.httpAuth, + discovery: coreServices.discovery, + permissions: coreServices.permissions, }, - async init({ database, router, logger }) { - const module = new UnprocessedEntitiesModule( - await database.getClient(), + async init({ + database, + router, + logger, + permissions, + httpAuth, + discovery, + }) { + const module = UnprocessedEntitiesModule.create({ + database: await database.getClient(), router, - ); + permissions, + discovery, + httpAuth, + }); module.registerRoutes(); + logger.info( 'registered additional routes for catalogModuleUnprocessedEntities', ); diff --git a/plugins/catalog-graph/.eslintrc.js b/plugins/catalog-graph/.eslintrc.js index 45bb6db521..157ee11e08 100644 --- a/plugins/catalog-graph/.eslintrc.js +++ b/plugins/catalog-graph/.eslintrc.js @@ -1,5 +1,6 @@ module.exports = require('@backstage/cli/config/eslint-factory')(__dirname, { rules: { 'testing-library/prefer-screen-queries': 'error', + '@backstage/no-top-level-material-ui-4-imports': 'error', }, }); diff --git a/plugins/catalog-graph/dev/index.tsx b/plugins/catalog-graph/dev/index.tsx index 1ef9f676de..8d9766e894 100644 --- a/plugins/catalog-graph/dev/index.tsx +++ b/plugins/catalog-graph/dev/index.tsx @@ -43,7 +43,7 @@ import { EntityProvider, } from '@backstage/plugin-catalog-react'; import { JsonObject } from '@backstage/types'; -import { Grid } from '@material-ui/core'; +import Grid from '@material-ui/core/Grid'; import _ from 'lodash'; import React from 'react'; import { diff --git a/plugins/catalog-graph/src/components/CatalogGraphCard/CatalogGraphCard.tsx b/plugins/catalog-graph/src/components/CatalogGraphCard/CatalogGraphCard.tsx index 99942b9a5c..1956a4bdae 100644 --- a/plugins/catalog-graph/src/components/CatalogGraphCard/CatalogGraphCard.tsx +++ b/plugins/catalog-graph/src/components/CatalogGraphCard/CatalogGraphCard.tsx @@ -26,7 +26,7 @@ import { useEntity, entityRouteRef, } from '@backstage/plugin-catalog-react'; -import { makeStyles, Theme } from '@material-ui/core'; +import { makeStyles, Theme } from '@material-ui/core/styles'; import qs from 'qs'; import React, { MouseEvent, useCallback } from 'react'; import { useNavigate } from 'react-router-dom'; diff --git a/plugins/catalog-graph/src/components/CatalogGraphPage/CatalogGraphPage.tsx b/plugins/catalog-graph/src/components/CatalogGraphPage/CatalogGraphPage.tsx index 73d79978e9..c7f9360589 100644 --- a/plugins/catalog-graph/src/components/CatalogGraphPage/CatalogGraphPage.tsx +++ b/plugins/catalog-graph/src/components/CatalogGraphPage/CatalogGraphPage.tsx @@ -27,10 +27,13 @@ import { entityRouteRef, humanizeEntityRef, } from '@backstage/plugin-catalog-react'; -import { Grid, makeStyles, Paper, Typography } from '@material-ui/core'; +import Grid from '@material-ui/core/Grid'; +import Paper from '@material-ui/core/Paper'; +import Typography from '@material-ui/core/Typography'; +import { makeStyles } from '@material-ui/core/styles'; import FilterListIcon from '@material-ui/icons/FilterList'; import ZoomOutMap from '@material-ui/icons/ZoomOutMap'; -import { ToggleButton } from '@material-ui/lab'; +import ToggleButton from '@material-ui/lab/ToggleButton'; import React, { MouseEvent, useCallback } from 'react'; import { useNavigate } from 'react-router-dom'; import { diff --git a/plugins/catalog-graph/src/components/CatalogGraphPage/CurveFilter.tsx b/plugins/catalog-graph/src/components/CatalogGraphPage/CurveFilter.tsx index 2f3278dc6b..f4e52bf23f 100644 --- a/plugins/catalog-graph/src/components/CatalogGraphPage/CurveFilter.tsx +++ b/plugins/catalog-graph/src/components/CatalogGraphPage/CurveFilter.tsx @@ -14,7 +14,7 @@ * limitations under the License. */ import { Select, SelectedItems } from '@backstage/core-components'; -import { Box } from '@material-ui/core'; +import Box from '@material-ui/core/Box'; import React, { useCallback } from 'react'; type Curve = 'curveStepBefore' | 'curveMonotoneX'; diff --git a/plugins/catalog-graph/src/components/CatalogGraphPage/DirectionFilter.tsx b/plugins/catalog-graph/src/components/CatalogGraphPage/DirectionFilter.tsx index c614ed2b58..5fe308a90b 100644 --- a/plugins/catalog-graph/src/components/CatalogGraphPage/DirectionFilter.tsx +++ b/plugins/catalog-graph/src/components/CatalogGraphPage/DirectionFilter.tsx @@ -14,7 +14,7 @@ * limitations under the License. */ import { Select, SelectedItems } from '@backstage/core-components'; -import { Box } from '@material-ui/core'; +import Box from '@material-ui/core/Box'; import React, { useCallback } from 'react'; import { Direction } from '../EntityRelationsGraph'; diff --git a/plugins/catalog-graph/src/components/CatalogGraphPage/MaxDepthFilter.tsx b/plugins/catalog-graph/src/components/CatalogGraphPage/MaxDepthFilter.tsx index e6fb2fbab4..51ee4643b5 100644 --- a/plugins/catalog-graph/src/components/CatalogGraphPage/MaxDepthFilter.tsx +++ b/plugins/catalog-graph/src/components/CatalogGraphPage/MaxDepthFilter.tsx @@ -13,15 +13,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { - Box, - FormControl, - IconButton, - InputAdornment, - makeStyles, - OutlinedInput, - Typography, -} from '@material-ui/core'; +import Box from '@material-ui/core/Box'; +import FormControl from '@material-ui/core/FormControl'; +import IconButton from '@material-ui/core/IconButton'; +import InputAdornment from '@material-ui/core/InputAdornment'; +import OutlinedInput from '@material-ui/core/OutlinedInput'; +import Typography from '@material-ui/core/Typography'; +import { makeStyles } from '@material-ui/core/styles'; import ClearIcon from '@material-ui/icons/Clear'; import React, { useCallback, useEffect, useRef, useState } from 'react'; diff --git a/plugins/catalog-graph/src/components/CatalogGraphPage/SelectedKindsFilter.tsx b/plugins/catalog-graph/src/components/CatalogGraphPage/SelectedKindsFilter.tsx index 0817a01e0b..42c456888a 100644 --- a/plugins/catalog-graph/src/components/CatalogGraphPage/SelectedKindsFilter.tsx +++ b/plugins/catalog-graph/src/components/CatalogGraphPage/SelectedKindsFilter.tsx @@ -15,18 +15,16 @@ */ import { alertApiRef, useApi } from '@backstage/core-plugin-api'; import { catalogApiRef } from '@backstage/plugin-catalog-react'; -import { - Box, - Checkbox, - FormControlLabel, - makeStyles, - TextField, - Typography, -} from '@material-ui/core'; +import Box from '@material-ui/core/Box'; +import Checkbox from '@material-ui/core/Checkbox'; +import FormControlLabel from '@material-ui/core/FormControlLabel'; +import TextField from '@material-ui/core/TextField'; +import Typography from '@material-ui/core/Typography'; +import { makeStyles } from '@material-ui/core/styles'; import CheckBoxIcon from '@material-ui/icons/CheckBox'; import CheckBoxOutlineBlankIcon from '@material-ui/icons/CheckBoxOutlineBlank'; import ExpandMoreIcon from '@material-ui/icons/ExpandMore'; -import { Autocomplete } from '@material-ui/lab'; +import Autocomplete from '@material-ui/lab/Autocomplete'; import React, { useCallback, useEffect, useMemo } from 'react'; import useAsync from 'react-use/lib/useAsync'; diff --git a/plugins/catalog-graph/src/components/CatalogGraphPage/SelectedRelationsFilter.tsx b/plugins/catalog-graph/src/components/CatalogGraphPage/SelectedRelationsFilter.tsx index 197f65cef8..74adfd0226 100644 --- a/plugins/catalog-graph/src/components/CatalogGraphPage/SelectedRelationsFilter.tsx +++ b/plugins/catalog-graph/src/components/CatalogGraphPage/SelectedRelationsFilter.tsx @@ -13,18 +13,16 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { - Box, - Checkbox, - FormControlLabel, - makeStyles, - TextField, - Typography, -} from '@material-ui/core'; +import Box from '@material-ui/core/Box'; +import Checkbox from '@material-ui/core/Checkbox'; +import FormControlLabel from '@material-ui/core/FormControlLabel'; +import TextField from '@material-ui/core/TextField'; +import Typography from '@material-ui/core/Typography'; +import { makeStyles } from '@material-ui/core/styles'; import CheckBoxIcon from '@material-ui/icons/CheckBox'; import CheckBoxOutlineBlankIcon from '@material-ui/icons/CheckBoxOutlineBlank'; import ExpandMoreIcon from '@material-ui/icons/ExpandMore'; -import { Autocomplete } from '@material-ui/lab'; +import Autocomplete from '@material-ui/lab/Autocomplete'; import React, { useCallback, useMemo } from 'react'; import { RelationPairs } from '../EntityRelationsGraph'; diff --git a/plugins/catalog-graph/src/components/CatalogGraphPage/SwitchFilter.tsx b/plugins/catalog-graph/src/components/CatalogGraphPage/SwitchFilter.tsx index 495f6b4db2..4427d87a59 100644 --- a/plugins/catalog-graph/src/components/CatalogGraphPage/SwitchFilter.tsx +++ b/plugins/catalog-graph/src/components/CatalogGraphPage/SwitchFilter.tsx @@ -13,7 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { Box, FormControlLabel, makeStyles, Switch } from '@material-ui/core'; +import Box from '@material-ui/core/Box'; +import FormControlLabel from '@material-ui/core/FormControlLabel'; +import Switch from '@material-ui/core/Switch'; +import { makeStyles } from '@material-ui/core/styles'; import React, { useCallback } from 'react'; export type Props = { diff --git a/plugins/catalog-graph/src/components/EntityRelationsGraph/EntityRelationsGraph.tsx b/plugins/catalog-graph/src/components/EntityRelationsGraph/EntityRelationsGraph.tsx index 35f76a7de0..61e24ecac4 100644 --- a/plugins/catalog-graph/src/components/EntityRelationsGraph/EntityRelationsGraph.tsx +++ b/plugins/catalog-graph/src/components/EntityRelationsGraph/EntityRelationsGraph.tsx @@ -23,7 +23,8 @@ import { DependencyGraphTypes, } from '@backstage/core-components'; import { errorApiRef, useApi } from '@backstage/core-plugin-api'; -import { CircularProgress, makeStyles, useTheme } from '@material-ui/core'; +import CircularProgress from '@material-ui/core/CircularProgress'; +import { makeStyles, useTheme } from '@material-ui/core/styles'; import classNames from 'classnames'; import React, { MouseEvent, useEffect, useMemo } from 'react'; import { DefaultRenderLabel } from './DefaultRenderLabel'; diff --git a/plugins/catalog-import/.eslintrc.js b/plugins/catalog-import/.eslintrc.js index 45bb6db521..157ee11e08 100644 --- a/plugins/catalog-import/.eslintrc.js +++ b/plugins/catalog-import/.eslintrc.js @@ -1,5 +1,6 @@ module.exports = require('@backstage/cli/config/eslint-factory')(__dirname, { rules: { 'testing-library/prefer-screen-queries': 'error', + '@backstage/no-top-level-material-ui-4-imports': 'error', }, }); diff --git a/plugins/catalog-import/dev/index.tsx b/plugins/catalog-import/dev/index.tsx index e2e5e1d22c..b35dc2a298 100644 --- a/plugins/catalog-import/dev/index.tsx +++ b/plugins/catalog-import/dev/index.tsx @@ -18,7 +18,10 @@ import { CatalogApi } from '@backstage/catalog-client'; import { Entity, CompoundEntityRef } from '@backstage/catalog-model'; import { createDevApp } from '@backstage/dev-utils'; import { catalogApiRef } from '@backstage/plugin-catalog-react'; -import { Grid, ListItem, ListItemIcon, ListItemText } from '@material-ui/core'; +import Grid from '@material-ui/core/Grid'; +import ListItem from '@material-ui/core/ListItem'; +import ListItemIcon from '@material-ui/core/ListItemIcon'; +import ListItemText from '@material-ui/core/ListItemText'; import AlarmIcon from '@material-ui/icons/Alarm'; import LocationOnIcon from '@material-ui/icons/LocationOn'; import React from 'react'; diff --git a/plugins/catalog-import/src/components/Buttons/index.tsx b/plugins/catalog-import/src/components/Buttons/index.tsx index 4b9043cd6d..cdcb2169a6 100644 --- a/plugins/catalog-import/src/components/Buttons/index.tsx +++ b/plugins/catalog-import/src/components/Buttons/index.tsx @@ -15,7 +15,8 @@ */ import { LinkButton } from '@backstage/core-components'; -import { Button, CircularProgress } from '@material-ui/core'; +import Button from '@material-ui/core/Button'; +import CircularProgress from '@material-ui/core/CircularProgress'; import { makeStyles } from '@material-ui/core/styles'; import React, { ComponentProps } from 'react'; diff --git a/plugins/catalog-import/src/components/DefaultImportPage/DefaultImportPage.tsx b/plugins/catalog-import/src/components/DefaultImportPage/DefaultImportPage.tsx index aad6e8686e..680ce16ae4 100644 --- a/plugins/catalog-import/src/components/DefaultImportPage/DefaultImportPage.tsx +++ b/plugins/catalog-import/src/components/DefaultImportPage/DefaultImportPage.tsx @@ -22,7 +22,9 @@ import { SupportButton, } from '@backstage/core-components'; import { configApiRef, useApi } from '@backstage/core-plugin-api'; -import { Grid, useMediaQuery, useTheme } from '@material-ui/core'; +import Grid from '@material-ui/core/Grid'; +import useMediaQuery from '@material-ui/core/useMediaQuery'; +import { useTheme } from '@material-ui/core/styles'; import React from 'react'; import { ImportInfoCard } from '../ImportInfoCard'; import { ImportStepper } from '../ImportStepper'; diff --git a/plugins/catalog-import/src/components/EntityListComponent/EntityListComponent.tsx b/plugins/catalog-import/src/components/EntityListComponent/EntityListComponent.tsx index 86030758a7..ef57fad204 100644 --- a/plugins/catalog-import/src/components/EntityListComponent/EntityListComponent.tsx +++ b/plugins/catalog-import/src/components/EntityListComponent/EntityListComponent.tsx @@ -20,15 +20,13 @@ import { EntityRefLink, humanizeEntityRef, } from '@backstage/plugin-catalog-react'; -import { - Collapse, - IconButton, - List, - ListItem, - ListItemIcon, - ListItemSecondaryAction, - ListItemText, -} from '@material-ui/core'; +import Collapse from '@material-ui/core/Collapse'; +import IconButton from '@material-ui/core/IconButton'; +import List from '@material-ui/core/List'; +import ListItem from '@material-ui/core/ListItem'; +import ListItemIcon from '@material-ui/core/ListItemIcon'; +import ListItemSecondaryAction from '@material-ui/core/ListItemSecondaryAction'; +import ListItemText from '@material-ui/core/ListItemText'; import { makeStyles } from '@material-ui/core/styles'; import ExpandLessIcon from '@material-ui/icons/ExpandLess'; import ExpandMoreIcon from '@material-ui/icons/ExpandMore'; diff --git a/plugins/catalog-import/src/components/ImportInfoCard/ImportInfoCard.tsx b/plugins/catalog-import/src/components/ImportInfoCard/ImportInfoCard.tsx index 26b6b8eb52..be8a457572 100644 --- a/plugins/catalog-import/src/components/ImportInfoCard/ImportInfoCard.tsx +++ b/plugins/catalog-import/src/components/ImportInfoCard/ImportInfoCard.tsx @@ -16,7 +16,8 @@ import { InfoCard } from '@backstage/core-components'; import { configApiRef, useApi } from '@backstage/core-plugin-api'; -import { Chip, Typography } from '@material-ui/core'; +import Chip from '@material-ui/core/Chip'; +import Typography from '@material-ui/core/Typography'; import React from 'react'; import { catalogImportApiRef } from '../../api'; import { useCatalogFilename } from '../../hooks'; diff --git a/plugins/catalog-import/src/components/ImportStepper/ImportStepper.tsx b/plugins/catalog-import/src/components/ImportStepper/ImportStepper.tsx index b2638e582e..38c33a02e4 100644 --- a/plugins/catalog-import/src/components/ImportStepper/ImportStepper.tsx +++ b/plugins/catalog-import/src/components/ImportStepper/ImportStepper.tsx @@ -16,7 +16,9 @@ import { InfoCard, InfoCardVariants } from '@backstage/core-components'; import { useApi } from '@backstage/core-plugin-api'; -import { Step, StepContent, Stepper } from '@material-ui/core'; +import Step from '@material-ui/core/Step'; +import StepContent from '@material-ui/core/StepContent'; +import Stepper from '@material-ui/core/Stepper'; import { makeStyles } from '@material-ui/core/styles'; import React, { useMemo } from 'react'; import { catalogImportApiRef } from '../../api'; diff --git a/plugins/catalog-import/src/components/ImportStepper/defaults.tsx b/plugins/catalog-import/src/components/ImportStepper/defaults.tsx index 94dff39d0f..0acde07a39 100644 --- a/plugins/catalog-import/src/components/ImportStepper/defaults.tsx +++ b/plugins/catalog-import/src/components/ImportStepper/defaults.tsx @@ -14,15 +14,13 @@ * limitations under the License. */ -import { - Box, - Checkbox, - FormControlLabel, - FormHelperText, - StepLabel, - TextField, - Typography, -} from '@material-ui/core'; +import Box from '@material-ui/core/Box'; +import Checkbox from '@material-ui/core/Checkbox'; +import FormControlLabel from '@material-ui/core/FormControlLabel'; +import FormHelperText from '@material-ui/core/FormHelperText'; +import StepLabel from '@material-ui/core/StepLabel'; +import TextField from '@material-ui/core/TextField'; +import Typography from '@material-ui/core/Typography'; import React from 'react'; import { BackButton } from '../Buttons'; import { asInputRef } from '../helpers'; diff --git a/plugins/catalog-import/src/components/StepFinishImportLocation/StepFinishImportLocation.tsx b/plugins/catalog-import/src/components/StepFinishImportLocation/StepFinishImportLocation.tsx index 9e19eea6d2..47cee21045 100644 --- a/plugins/catalog-import/src/components/StepFinishImportLocation/StepFinishImportLocation.tsx +++ b/plugins/catalog-import/src/components/StepFinishImportLocation/StepFinishImportLocation.tsx @@ -14,7 +14,8 @@ * limitations under the License. */ -import { Grid, Typography } from '@material-ui/core'; +import Grid from '@material-ui/core/Grid'; +import Typography from '@material-ui/core/Typography'; import LocationOnIcon from '@material-ui/icons/LocationOn'; import React from 'react'; import { BackButton, ViewComponentButton } from '../Buttons'; diff --git a/plugins/catalog-import/src/components/StepInitAnalyzeUrl/StepInitAnalyzeUrl.tsx b/plugins/catalog-import/src/components/StepInitAnalyzeUrl/StepInitAnalyzeUrl.tsx index 588217974c..2cf4e58ee9 100644 --- a/plugins/catalog-import/src/components/StepInitAnalyzeUrl/StepInitAnalyzeUrl.tsx +++ b/plugins/catalog-import/src/components/StepInitAnalyzeUrl/StepInitAnalyzeUrl.tsx @@ -15,7 +15,9 @@ */ import { errorApiRef, useApi } from '@backstage/core-plugin-api'; -import { FormHelperText, Grid, TextField } from '@material-ui/core'; +import FormHelperText from '@material-ui/core/FormHelperText'; +import Grid from '@material-ui/core/Grid'; +import TextField from '@material-ui/core/TextField'; import React, { useCallback, useState } from 'react'; import { useForm } from 'react-hook-form'; import { AnalyzeResult, catalogImportApiRef } from '../../api'; diff --git a/plugins/catalog-import/src/components/StepPrepareCreatePullRequest/AutocompleteTextField.tsx b/plugins/catalog-import/src/components/StepPrepareCreatePullRequest/AutocompleteTextField.tsx index 2e163be2aa..1e28b973db 100644 --- a/plugins/catalog-import/src/components/StepPrepareCreatePullRequest/AutocompleteTextField.tsx +++ b/plugins/catalog-import/src/components/StepPrepareCreatePullRequest/AutocompleteTextField.tsx @@ -14,9 +14,10 @@ * limitations under the License. */ -import { CircularProgress, TextField } from '@material-ui/core'; +import CircularProgress from '@material-ui/core/CircularProgress'; +import TextField from '@material-ui/core/TextField'; import { TextFieldProps } from '@material-ui/core/TextField/TextField'; -import { Autocomplete } from '@material-ui/lab'; +import Autocomplete from '@material-ui/lab/Autocomplete'; import React from 'react'; import { Controller, FieldErrors } from 'react-hook-form'; diff --git a/plugins/catalog-import/src/components/StepPrepareCreatePullRequest/PreparePullRequestForm.test.tsx b/plugins/catalog-import/src/components/StepPrepareCreatePullRequest/PreparePullRequestForm.test.tsx index 54d5c27993..bee641ca68 100644 --- a/plugins/catalog-import/src/components/StepPrepareCreatePullRequest/PreparePullRequestForm.test.tsx +++ b/plugins/catalog-import/src/components/StepPrepareCreatePullRequest/PreparePullRequestForm.test.tsx @@ -14,7 +14,8 @@ * limitations under the License. */ -import { FormHelperText, TextField } from '@material-ui/core'; +import FormHelperText from '@material-ui/core/FormHelperText'; +import TextField from '@material-ui/core/TextField'; import Button from '@material-ui/core/Button'; import { act, render, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; diff --git a/plugins/catalog-import/src/components/StepPrepareCreatePullRequest/PreviewCatalogInfoComponent.test.tsx b/plugins/catalog-import/src/components/StepPrepareCreatePullRequest/PreviewCatalogInfoComponent.test.tsx index 4e737bd115..1ed8026a2b 100644 --- a/plugins/catalog-import/src/components/StepPrepareCreatePullRequest/PreviewCatalogInfoComponent.test.tsx +++ b/plugins/catalog-import/src/components/StepPrepareCreatePullRequest/PreviewCatalogInfoComponent.test.tsx @@ -17,7 +17,7 @@ import { Entity } from '@backstage/catalog-model'; import { configApiRef } from '@backstage/core-plugin-api'; import { MockConfigApi, TestApiProvider } from '@backstage/test-utils'; -import { makeStyles } from '@material-ui/core'; +import { makeStyles } from '@material-ui/core/styles'; import { render, screen } from '@testing-library/react'; import { renderHook } from '@testing-library/react'; import React from 'react'; diff --git a/plugins/catalog-import/src/components/StepPrepareCreatePullRequest/PreviewCatalogInfoComponent.tsx b/plugins/catalog-import/src/components/StepPrepareCreatePullRequest/PreviewCatalogInfoComponent.tsx index a16276f90b..a5e3c58448 100644 --- a/plugins/catalog-import/src/components/StepPrepareCreatePullRequest/PreviewCatalogInfoComponent.tsx +++ b/plugins/catalog-import/src/components/StepPrepareCreatePullRequest/PreviewCatalogInfoComponent.tsx @@ -15,7 +15,9 @@ */ import { Entity } from '@backstage/catalog-model'; -import { Card, CardContent, CardHeader } from '@material-ui/core'; +import Card from '@material-ui/core/Card'; +import CardContent from '@material-ui/core/CardContent'; +import CardHeader from '@material-ui/core/CardHeader'; import React from 'react'; import YAML from 'yaml'; import { CodeSnippet } from '@backstage/core-components'; diff --git a/plugins/catalog-import/src/components/StepPrepareCreatePullRequest/PreviewPullRequestComponent.test.tsx b/plugins/catalog-import/src/components/StepPrepareCreatePullRequest/PreviewPullRequestComponent.test.tsx index 53485bedb5..0d0660a543 100644 --- a/plugins/catalog-import/src/components/StepPrepareCreatePullRequest/PreviewPullRequestComponent.test.tsx +++ b/plugins/catalog-import/src/components/StepPrepareCreatePullRequest/PreviewPullRequestComponent.test.tsx @@ -14,7 +14,7 @@ * limitations under the License. */ -import { makeStyles } from '@material-ui/core'; +import { makeStyles } from '@material-ui/core/styles'; import { render, screen } from '@testing-library/react'; import { renderHook } from '@testing-library/react'; import React from 'react'; diff --git a/plugins/catalog-import/src/components/StepPrepareCreatePullRequest/PreviewPullRequestComponent.tsx b/plugins/catalog-import/src/components/StepPrepareCreatePullRequest/PreviewPullRequestComponent.tsx index e8a54489a0..dea1243202 100644 --- a/plugins/catalog-import/src/components/StepPrepareCreatePullRequest/PreviewPullRequestComponent.tsx +++ b/plugins/catalog-import/src/components/StepPrepareCreatePullRequest/PreviewPullRequestComponent.tsx @@ -14,7 +14,9 @@ * limitations under the License. */ -import { Card, CardContent, CardHeader } from '@material-ui/core'; +import Card from '@material-ui/core/Card'; +import CardContent from '@material-ui/core/CardContent'; +import CardHeader from '@material-ui/core/CardHeader'; import React from 'react'; import { MarkdownContent } from '@backstage/core-components'; diff --git a/plugins/catalog-import/src/components/StepPrepareCreatePullRequest/StepPrepareCreatePullRequest.test.tsx b/plugins/catalog-import/src/components/StepPrepareCreatePullRequest/StepPrepareCreatePullRequest.test.tsx index 079b010ec6..ec7762f50f 100644 --- a/plugins/catalog-import/src/components/StepPrepareCreatePullRequest/StepPrepareCreatePullRequest.test.tsx +++ b/plugins/catalog-import/src/components/StepPrepareCreatePullRequest/StepPrepareCreatePullRequest.test.tsx @@ -17,7 +17,7 @@ import { configApiRef, errorApiRef } from '@backstage/core-plugin-api'; import { catalogApiRef } from '@backstage/plugin-catalog-react'; import { TestApiProvider, MockConfigApi } from '@backstage/test-utils'; -import { TextField } from '@material-ui/core'; +import TextField from '@material-ui/core/TextField'; import { render, screen, waitFor } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import React from 'react'; diff --git a/plugins/catalog-import/src/components/StepPrepareCreatePullRequest/StepPrepareCreatePullRequest.tsx b/plugins/catalog-import/src/components/StepPrepareCreatePullRequest/StepPrepareCreatePullRequest.tsx index 1cbdfce355..580f21b16f 100644 --- a/plugins/catalog-import/src/components/StepPrepareCreatePullRequest/StepPrepareCreatePullRequest.tsx +++ b/plugins/catalog-import/src/components/StepPrepareCreatePullRequest/StepPrepareCreatePullRequest.tsx @@ -21,7 +21,10 @@ import { catalogApiRef, humanizeEntityRef, } from '@backstage/plugin-catalog-react'; -import { Box, FormHelperText, Grid, Typography } from '@material-ui/core'; +import Box from '@material-ui/core/Box'; +import FormHelperText from '@material-ui/core/FormHelperText'; +import Grid from '@material-ui/core/Grid'; +import Typography from '@material-ui/core/Typography'; import { makeStyles } from '@material-ui/core/styles'; import React, { useCallback, useEffect, useState } from 'react'; import { UnpackNestedValue, UseFormReturn } from 'react-hook-form'; diff --git a/plugins/catalog-import/src/components/StepPrepareSelectLocations/StepPrepareSelectLocations.tsx b/plugins/catalog-import/src/components/StepPrepareSelectLocations/StepPrepareSelectLocations.tsx index 210b49d188..9ba7904fe4 100644 --- a/plugins/catalog-import/src/components/StepPrepareSelectLocations/StepPrepareSelectLocations.tsx +++ b/plugins/catalog-import/src/components/StepPrepareSelectLocations/StepPrepareSelectLocations.tsx @@ -14,14 +14,12 @@ * limitations under the License. */ -import { - Checkbox, - Grid, - ListItem, - ListItemIcon, - ListItemText, - Typography, -} from '@material-ui/core'; +import Checkbox from '@material-ui/core/Checkbox'; +import Grid from '@material-ui/core/Grid'; +import ListItem from '@material-ui/core/ListItem'; +import ListItemIcon from '@material-ui/core/ListItemIcon'; +import ListItemText from '@material-ui/core/ListItemText'; +import Typography from '@material-ui/core/Typography'; import LocationOnIcon from '@material-ui/icons/LocationOn'; import React, { useCallback, useState } from 'react'; import { AnalyzeResult } from '../../api'; diff --git a/plugins/catalog-import/src/components/StepReviewLocation/StepReviewLocation.tsx b/plugins/catalog-import/src/components/StepReviewLocation/StepReviewLocation.tsx index b0db174787..c0c3b2c428 100644 --- a/plugins/catalog-import/src/components/StepReviewLocation/StepReviewLocation.tsx +++ b/plugins/catalog-import/src/components/StepReviewLocation/StepReviewLocation.tsx @@ -15,7 +15,9 @@ */ import { catalogApiRef } from '@backstage/plugin-catalog-react'; -import { FormHelperText, Grid, Typography } from '@material-ui/core'; +import FormHelperText from '@material-ui/core/FormHelperText'; +import Grid from '@material-ui/core/Grid'; +import Typography from '@material-ui/core/Typography'; import LocationOnIcon from '@material-ui/icons/LocationOn'; import React, { useCallback, useState } from 'react'; import { BackButton, NextButton } from '../Buttons'; diff --git a/plugins/catalog-unprocessed-entities-common/.eslintrc.js b/plugins/catalog-unprocessed-entities-common/.eslintrc.js new file mode 100644 index 0000000000..e2a53a6ad2 --- /dev/null +++ b/plugins/catalog-unprocessed-entities-common/.eslintrc.js @@ -0,0 +1 @@ +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/catalog-unprocessed-entities-common/README.md b/plugins/catalog-unprocessed-entities-common/README.md new file mode 100644 index 0000000000..490c5e8f6e --- /dev/null +++ b/plugins/catalog-unprocessed-entities-common/README.md @@ -0,0 +1,5 @@ +# @backstage/plugin-catalog-unprocessed-entities-common + +Welcome to the common package for the catalog-unprocessed-entities plugin! + +_This plugin was created through the Backstage CLI_ diff --git a/plugins/catalog-unprocessed-entities-common/api-report.md b/plugins/catalog-unprocessed-entities-common/api-report.md new file mode 100644 index 0000000000..03b316eebb --- /dev/null +++ b/plugins/catalog-unprocessed-entities-common/api-report.md @@ -0,0 +1,15 @@ +## API Report File for "@backstage/plugin-catalog-unprocessed-entities-common" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts +import { BasicPermission } from '@backstage/plugin-permission-common'; + +// @public +export const unprocessedEntitiesDeletePermission: BasicPermission; + +// @public +export const unprocessedEntitiesPermissions: { + unprocessedEntitiesDeletePermission: BasicPermission; +}; +``` diff --git a/plugins/catalog-unprocessed-entities-common/catalog-info.yaml b/plugins/catalog-unprocessed-entities-common/catalog-info.yaml new file mode 100644 index 0000000000..7494c41b5c --- /dev/null +++ b/plugins/catalog-unprocessed-entities-common/catalog-info.yaml @@ -0,0 +1,9 @@ +apiVersion: backstage.io/v1alpha1 +kind: Component +metadata: + name: backstage-plugin-catalog-unprocessed-entities-common + title: '@backstage/plugin-catalog-unprocessed-entities-common' +spec: + lifecycle: experimental + type: backstage-common-library + owner: catalog-maintainers diff --git a/plugins/catalog-unprocessed-entities-common/package.json b/plugins/catalog-unprocessed-entities-common/package.json new file mode 100644 index 0000000000..68a5a346b5 --- /dev/null +++ b/plugins/catalog-unprocessed-entities-common/package.json @@ -0,0 +1,40 @@ +{ + "name": "@backstage/plugin-catalog-unprocessed-entities-common", + "version": "0.0.0", + "description": "Common functionalities for the catalog-unprocessed-entities plugin", + "backstage": { + "role": "common-library" + }, + "publishConfig": { + "access": "public", + "main": "dist/index.cjs.js", + "module": "dist/index.esm.js", + "types": "dist/index.d.ts" + }, + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/catalog-unprocessed-entities-common" + }, + "license": "Apache-2.0", + "sideEffects": false, + "main": "src/index.ts", + "types": "src/index.ts", + "files": [ + "dist" + ], + "scripts": { + "build": "backstage-cli package build", + "clean": "backstage-cli package clean", + "lint": "backstage-cli package lint", + "prepack": "backstage-cli package prepack", + "postpack": "backstage-cli package postpack", + "test": "backstage-cli package test" + }, + "dependencies": { + "@backstage/plugin-permission-common": "workspace:^" + }, + "devDependencies": { + "@backstage/cli": "workspace:^" + } +} diff --git a/plugins/catalog-unprocessed-entities-common/src/index.ts b/plugins/catalog-unprocessed-entities-common/src/index.ts new file mode 100644 index 0000000000..cd5a39c731 --- /dev/null +++ b/plugins/catalog-unprocessed-entities-common/src/index.ts @@ -0,0 +1,23 @@ +/* + * Copyright 2024 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Common functionalities for the catalog-unprocessed-entities plugin. + * + * @packageDocumentation + */ + +export * from './permissions'; diff --git a/plugins/catalog-unprocessed-entities-common/src/permissions.ts b/plugins/catalog-unprocessed-entities-common/src/permissions.ts new file mode 100644 index 0000000000..d34cc0d1dc --- /dev/null +++ b/plugins/catalog-unprocessed-entities-common/src/permissions.ts @@ -0,0 +1,34 @@ +/* + * Copyright 2024 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { createPermission } from '@backstage/plugin-permission-common'; + +/** + * This permission is used to designate actions that involve removing an + * unprocessed entity record from the refresh_state table. + * @public + */ +export const unprocessedEntitiesDeletePermission = createPermission({ + name: 'catalog.entities.unprocessed.delete', + attributes: { action: 'delete' }, +}); + +/** + * List of all unprocessed entity permissions + * @public + */ +export const unprocessedEntitiesPermissions = { + unprocessedEntitiesDeletePermission, +}; diff --git a/plugins/catalog-unprocessed-entities-common/src/setupTests.ts b/plugins/catalog-unprocessed-entities-common/src/setupTests.ts new file mode 100644 index 0000000000..c7ce5c0988 --- /dev/null +++ b/plugins/catalog-unprocessed-entities-common/src/setupTests.ts @@ -0,0 +1,16 @@ +/* + * Copyright 2024 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +export {}; diff --git a/plugins/catalog-unprocessed-entities/.eslintrc.js b/plugins/catalog-unprocessed-entities/.eslintrc.js index e2a53a6ad2..e487f765b2 100644 --- a/plugins/catalog-unprocessed-entities/.eslintrc.js +++ b/plugins/catalog-unprocessed-entities/.eslintrc.js @@ -1 +1,5 @@ -module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname, { + rules: { + '@backstage/no-top-level-material-ui-4-imports': 'error', + }, +}); diff --git a/plugins/catalog-unprocessed-entities/api-report.md b/plugins/catalog-unprocessed-entities/api-report.md index cc4d6bba88..7d8f6299da 100644 --- a/plugins/catalog-unprocessed-entities/api-report.md +++ b/plugins/catalog-unprocessed-entities/api-report.md @@ -14,6 +14,7 @@ import { RouteRef } from '@backstage/core-plugin-api'; // @public export interface CatalogUnprocessedEntitiesApi { + delete(entityId: string): Promise; failed(): Promise; pending(): Promise; } diff --git a/plugins/catalog-unprocessed-entities/src/api/index.ts b/plugins/catalog-unprocessed-entities/src/api/index.ts index 92dde93a93..dfff3e15f7 100644 --- a/plugins/catalog-unprocessed-entities/src/api/index.ts +++ b/plugins/catalog-unprocessed-entities/src/api/index.ts @@ -54,6 +54,10 @@ export interface CatalogUnprocessedEntitiesApi { * Returns a list of entities with state 'failed' */ failed(): Promise; + /** + * Deletes an entity from the refresh_state table + */ + delete(entityId: string): Promise; } /** @@ -69,11 +73,12 @@ export class CatalogUnprocessedEntitiesClient private async fetch(path: string, init?: RequestInit): Promise { const url = await this.discovery.getBaseUrl('catalog'); const resp = await this.fetchApi.fetch(`${url}/${path}`, init); + if (!resp.ok) { throw await ResponseError.fromResponse(resp); } - return await resp.json(); + return resp.status === 204 ? (resp as T) : await resp.json(); } async pending(): Promise { @@ -83,4 +88,10 @@ export class CatalogUnprocessedEntitiesClient async failed(): Promise { return await this.fetch('entities/unprocessed/failed'); } + + async delete(entityId: string): Promise { + await this.fetch(`entities/unprocessed/delete/${entityId}`, { + method: 'DELETE', + }); + } } diff --git a/plugins/catalog-unprocessed-entities/src/components/FailedEntities.tsx b/plugins/catalog-unprocessed-entities/src/components/FailedEntities.tsx index 2ef52504d7..ca5ca942c7 100644 --- a/plugins/catalog-unprocessed-entities/src/components/FailedEntities.tsx +++ b/plugins/catalog-unprocessed-entities/src/components/FailedEntities.tsx @@ -22,13 +22,18 @@ import { Table, TableColumn, } from '@backstage/core-components'; -import { useApi } from '@backstage/core-plugin-api'; -import { Box, Theme, Typography, makeStyles } from '@material-ui/core'; + +import Box from '@material-ui/core/Box'; +import Typography from '@material-ui/core/Typography'; +import IconButton from '@material-ui/core/IconButton'; +import { Theme, makeStyles } from '@material-ui/core/styles'; +import { alertApiRef, useApi } from '@backstage/core-plugin-api'; import { UnprocessedEntity } from '../types'; import { EntityDialog } from './EntityDialog'; import { catalogUnprocessedEntitiesApiRef } from '../api'; import useAsync from 'react-use/lib/useAsync'; +import DeleteIcon from '@material-ui/icons/Delete'; const useStyles = makeStyles((theme: Theme) => ({ errorBox: { @@ -92,6 +97,8 @@ export const FailedEntities = () => { value: data, } = useAsync(async () => await unprocessedApi.failed()); const [, setSelectedSearchTerm] = useState(''); + const unprocessedEntityApi = useApi(catalogUnprocessedEntitiesApiRef); + const alertApi = useApi(alertApiRef); if (loading) { return ; @@ -100,6 +107,27 @@ export const FailedEntities = () => { return ; } + const handleDelete = async ({ + entityId, + entityRef, + }: { + entityId: string; + entityRef: string; + }) => { + try { + await unprocessedEntityApi.delete(entityId); + alertApi.post({ + message: `Entity ${entityRef} has been deleted`, + severity: 'success', + }); + } catch (e) { + alertApi.post({ + message: `Ran into an issue when deleting ${entityRef}. Please try again later.`, + severity: 'error', + }); + } + }; + const columns: TableColumn[] = [ { title: entityRef, @@ -134,43 +162,60 @@ export const FailedEntities = () => { ), }, + { + title: Actions, + render: (rowData: UnprocessedEntity | {}) => { + const { entity_id, entity_ref } = rowData as UnprocessedEntity; + + return ( + + await handleDelete({ + entityId: entity_id, + entityRef: entity_ref, + }) + } + > + + + ); + }, + }, ]; + return ( - <> - - No failed entities found - - } - onSearchChange={(searchTerm: string) => - setSelectedSearchTerm(searchTerm) - } - detailPanel={({ rowData }) => { - const errors = (rowData as UnprocessedEntity).errors; - return ( - <> - {errors?.map(e => { - return ( - - - {e.name} - - - - - ); - })} - - ); - }} - /> - +
+ No failed entities found + + } + onSearchChange={(searchTerm: string) => setSelectedSearchTerm(searchTerm)} + detailPanel={({ rowData }) => { + const errors = (rowData as UnprocessedEntity).errors; + return ( + <> + {errors?.map((e, idx) => { + return ( + + + {e.name} + + + + + ); + })} + + ); + }} + /> ); }; diff --git a/plugins/catalog-unprocessed-entities/src/components/PendingEntities.tsx b/plugins/catalog-unprocessed-entities/src/components/PendingEntities.tsx index 08e2f3da66..6f38a68816 100644 --- a/plugins/catalog-unprocessed-entities/src/components/PendingEntities.tsx +++ b/plugins/catalog-unprocessed-entities/src/components/PendingEntities.tsx @@ -21,7 +21,8 @@ import { TableColumn, Table, } from '@backstage/core-components'; -import { Theme, Typography, makeStyles } from '@material-ui/core'; +import Typography from '@material-ui/core/Typography'; +import { Theme, makeStyles } from '@material-ui/core/styles'; import { UnprocessedEntity } from '../types'; diff --git a/plugins/catalog-unprocessed-entities/src/components/UnprocessedEntities.tsx b/plugins/catalog-unprocessed-entities/src/components/UnprocessedEntities.tsx index 29f59222d1..92f5760c2e 100644 --- a/plugins/catalog-unprocessed-entities/src/components/UnprocessedEntities.tsx +++ b/plugins/catalog-unprocessed-entities/src/components/UnprocessedEntities.tsx @@ -16,8 +16,11 @@ import React, { useState } from 'react'; import { Page, Header, Content } from '@backstage/core-components'; -import { Tab, makeStyles } from '@material-ui/core'; -import { TabContext, TabList, TabPanel } from '@material-ui/lab'; +import Tab from '@material-ui/core/Tab'; +import { makeStyles } from '@material-ui/core/styles'; +import TabContext from '@material-ui/lab/TabContext'; +import TabList from '@material-ui/lab/TabList'; +import TabPanel from '@material-ui/lab/TabPanel'; import { FailedEntities } from './FailedEntities'; import { PendingEntities } from './PendingEntities'; diff --git a/plugins/catalog/.eslintrc.js b/plugins/catalog/.eslintrc.js index 45bb6db521..157ee11e08 100644 --- a/plugins/catalog/.eslintrc.js +++ b/plugins/catalog/.eslintrc.js @@ -1,5 +1,6 @@ module.exports = require('@backstage/cli/config/eslint-factory')(__dirname, { rules: { 'testing-library/prefer-screen-queries': 'error', + '@backstage/no-top-level-material-ui-4-imports': 'error', }, }); diff --git a/plugins/catalog/api-report.md b/plugins/catalog/api-report.md index 6da30f6f84..8766b983ca 100644 --- a/plugins/catalog/api-report.md +++ b/plugins/catalog/api-report.md @@ -36,7 +36,7 @@ import { StyleRules } from '@material-ui/core/styles/withStyles'; import { TableColumn } from '@backstage/core-components'; import { TableOptions } from '@backstage/core-components'; import { TableProps } from '@backstage/core-components'; -import { TabProps } from '@material-ui/core'; +import { TabProps } from '@material-ui/core/Tab'; import { UserListFilterKind } from '@backstage/plugin-catalog-react'; // @public diff --git a/plugins/catalog/src/components/AboutCard/AboutCard.tsx b/plugins/catalog/src/components/AboutCard/AboutCard.tsx index 763f6fc094..09e1790f3b 100644 --- a/plugins/catalog/src/components/AboutCard/AboutCard.tsx +++ b/plugins/catalog/src/components/AboutCard/AboutCard.tsx @@ -20,14 +20,12 @@ import { DEFAULT_NAMESPACE, stringifyEntityRef, } from '@backstage/catalog-model'; -import { - Card, - CardContent, - CardHeader, - Divider, - IconButton, - makeStyles, -} from '@material-ui/core'; +import Card from '@material-ui/core/Card'; +import CardContent from '@material-ui/core/CardContent'; +import CardHeader from '@material-ui/core/CardHeader'; +import Divider from '@material-ui/core/Divider'; +import IconButton from '@material-ui/core/IconButton'; +import { makeStyles } from '@material-ui/core/styles'; import { HeaderIconLinkRow, IconLinkVerticalProps, diff --git a/plugins/catalog/src/components/AboutCard/AboutContent.tsx b/plugins/catalog/src/components/AboutCard/AboutContent.tsx index 245308cee2..571f2018dd 100644 --- a/plugins/catalog/src/components/AboutCard/AboutContent.tsx +++ b/plugins/catalog/src/components/AboutCard/AboutContent.tsx @@ -25,7 +25,9 @@ import { getEntityRelations, } from '@backstage/plugin-catalog-react'; import { JsonArray } from '@backstage/types'; -import { Chip, Grid, makeStyles } from '@material-ui/core'; +import Chip from '@material-ui/core/Chip'; +import Grid from '@material-ui/core/Grid'; +import { makeStyles } from '@material-ui/core/styles'; import { MarkdownContent } from '@backstage/core-components'; import React from 'react'; import { AboutField } from './AboutField'; diff --git a/plugins/catalog/src/components/AboutCard/AboutField.tsx b/plugins/catalog/src/components/AboutCard/AboutField.tsx index 28c22bff37..7587867af0 100644 --- a/plugins/catalog/src/components/AboutCard/AboutField.tsx +++ b/plugins/catalog/src/components/AboutCard/AboutField.tsx @@ -15,7 +15,9 @@ */ import { useElementFilter } from '@backstage/core-plugin-api'; -import { Grid, makeStyles, Typography } from '@material-ui/core'; +import Grid from '@material-ui/core/Grid'; +import Typography from '@material-ui/core/Typography'; +import { makeStyles } from '@material-ui/core/styles'; import React from 'react'; const useStyles = makeStyles(theme => ({ diff --git a/plugins/catalog/src/components/CatalogKindHeader/CatalogKindHeader.tsx b/plugins/catalog/src/components/CatalogKindHeader/CatalogKindHeader.tsx index 1455c2a182..58fd0cfc0f 100644 --- a/plugins/catalog/src/components/CatalogKindHeader/CatalogKindHeader.tsx +++ b/plugins/catalog/src/components/CatalogKindHeader/CatalogKindHeader.tsx @@ -15,14 +15,10 @@ */ import React, { useEffect, useState, useMemo } from 'react'; -import { - createStyles, - InputBase, - makeStyles, - MenuItem, - Select, - Theme, -} from '@material-ui/core'; +import InputBase from '@material-ui/core/InputBase'; +import MenuItem from '@material-ui/core/MenuItem'; +import Select from '@material-ui/core/Select'; +import { createStyles, makeStyles, Theme } from '@material-ui/core/styles'; import { EntityKindFilter, useEntityList, diff --git a/plugins/catalog/src/components/CatalogSearchResultListItem/CatalogSearchResultListItem.tsx b/plugins/catalog/src/components/CatalogSearchResultListItem/CatalogSearchResultListItem.tsx index f2ef05b128..32c86f38b7 100644 --- a/plugins/catalog/src/components/CatalogSearchResultListItem/CatalogSearchResultListItem.tsx +++ b/plugins/catalog/src/components/CatalogSearchResultListItem/CatalogSearchResultListItem.tsx @@ -15,14 +15,12 @@ */ import React, { ReactNode } from 'react'; -import { - Box, - Chip, - ListItemIcon, - ListItemText, - Typography, - makeStyles, -} from '@material-ui/core'; +import Box from '@material-ui/core/Box'; +import Chip from '@material-ui/core/Chip'; +import ListItemIcon from '@material-ui/core/ListItemIcon'; +import ListItemText from '@material-ui/core/ListItemText'; +import Typography from '@material-ui/core/Typography'; +import { makeStyles } from '@material-ui/core/styles'; import { Link } from '@backstage/core-components'; import { IndexableDocument, diff --git a/plugins/catalog/src/components/CatalogTable/columns.tsx b/plugins/catalog/src/components/CatalogTable/columns.tsx index a955aaadb9..86e8ced86a 100644 --- a/plugins/catalog/src/components/CatalogTable/columns.tsx +++ b/plugins/catalog/src/components/CatalogTable/columns.tsx @@ -19,7 +19,7 @@ import { EntityRefLink, EntityRefLinks, } from '@backstage/plugin-catalog-react'; -import { Chip } from '@material-ui/core'; +import Chip from '@material-ui/core/Chip'; import { CatalogTableRow } from './types'; import { OverflowTooltip, TableColumn } from '@backstage/core-components'; import { Entity } from '@backstage/catalog-model'; diff --git a/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.tsx b/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.tsx index 0fc746f455..7c94887a37 100644 --- a/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.tsx +++ b/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.tsx @@ -14,16 +14,14 @@ * limitations under the License. */ -import { - Divider, - IconButton, - ListItemIcon, - ListItemText, - MenuItem, - MenuList, - Popover, - Tooltip, -} from '@material-ui/core'; +import Divider from '@material-ui/core/Divider'; +import IconButton from '@material-ui/core/IconButton'; +import ListItemIcon from '@material-ui/core/ListItemIcon'; +import ListItemText from '@material-ui/core/ListItemText'; +import MenuItem from '@material-ui/core/MenuItem'; +import MenuList from '@material-ui/core/MenuList'; +import Popover from '@material-ui/core/Popover'; +import Tooltip from '@material-ui/core/Tooltip'; import { Theme, makeStyles } from '@material-ui/core/styles'; import BugReportIcon from '@material-ui/icons/BugReport'; import MoreVert from '@material-ui/icons/MoreVert'; diff --git a/plugins/catalog/src/components/EntityContextMenu/UnregisterEntity.tsx b/plugins/catalog/src/components/EntityContextMenu/UnregisterEntity.tsx index 05044bf935..3de890097b 100644 --- a/plugins/catalog/src/components/EntityContextMenu/UnregisterEntity.tsx +++ b/plugins/catalog/src/components/EntityContextMenu/UnregisterEntity.tsx @@ -15,7 +15,9 @@ */ import React from 'react'; -import { ListItemIcon, ListItemText, MenuItem } from '@material-ui/core'; +import ListItemIcon from '@material-ui/core/ListItemIcon'; +import ListItemText from '@material-ui/core/ListItemText'; +import MenuItem from '@material-ui/core/MenuItem'; import CancelIcon from '@material-ui/icons/Cancel'; type VisibleType = 'visible' | 'hidden' | 'disable'; diff --git a/plugins/catalog/src/components/EntityLabelsCard/EntityLabelsCard.tsx b/plugins/catalog/src/components/EntityLabelsCard/EntityLabelsCard.tsx index 500c651cc0..0b1448bb1f 100644 --- a/plugins/catalog/src/components/EntityLabelsCard/EntityLabelsCard.tsx +++ b/plugins/catalog/src/components/EntityLabelsCard/EntityLabelsCard.tsx @@ -23,7 +23,8 @@ import { TableColumn, } from '@backstage/core-components'; import { EntityLabelsEmptyState } from './EntityLabelsEmptyState'; -import { makeStyles, Typography } from '@material-ui/core'; +import Typography from '@material-ui/core/Typography'; +import { makeStyles } from '@material-ui/core/styles'; /** @public */ export interface EntityLabelsCardProps { diff --git a/plugins/catalog/src/components/EntityLabelsCard/EntityLabelsEmptyState.tsx b/plugins/catalog/src/components/EntityLabelsCard/EntityLabelsEmptyState.tsx index 8878cb827f..5f5db0baa5 100644 --- a/plugins/catalog/src/components/EntityLabelsCard/EntityLabelsEmptyState.tsx +++ b/plugins/catalog/src/components/EntityLabelsCard/EntityLabelsEmptyState.tsx @@ -14,7 +14,9 @@ * limitations under the License. */ -import { Button, makeStyles, Typography } from '@material-ui/core'; +import Button from '@material-ui/core/Button'; +import Typography from '@material-ui/core/Typography'; +import { makeStyles } from '@material-ui/core/styles'; import React from 'react'; import { CodeSnippet } from '@backstage/core-components'; diff --git a/plugins/catalog/src/components/EntityLayout/EntityLayout.tsx b/plugins/catalog/src/components/EntityLayout/EntityLayout.tsx index 8e11f92599..274972283f 100644 --- a/plugins/catalog/src/components/EntityLayout/EntityLayout.tsx +++ b/plugins/catalog/src/components/EntityLayout/EntityLayout.tsx @@ -46,8 +46,9 @@ import { UnregisterEntityDialog, useAsyncEntity, } from '@backstage/plugin-catalog-react'; -import { Box, TabProps } from '@material-ui/core'; -import { Alert } from '@material-ui/lab'; +import Box from '@material-ui/core/Box'; +import { TabProps } from '@material-ui/core/Tab'; +import Alert from '@material-ui/lab/Alert'; import React, { useEffect, useState } from 'react'; import { useLocation, useNavigate } from 'react-router-dom'; import { EntityContextMenu } from '../EntityContextMenu/EntityContextMenu'; diff --git a/plugins/catalog/src/components/EntityLinksCard/EntityLinksEmptyState.tsx b/plugins/catalog/src/components/EntityLinksCard/EntityLinksEmptyState.tsx index 59ab3f3db2..81009c5393 100644 --- a/plugins/catalog/src/components/EntityLinksCard/EntityLinksEmptyState.tsx +++ b/plugins/catalog/src/components/EntityLinksCard/EntityLinksEmptyState.tsx @@ -14,7 +14,9 @@ * limitations under the License. */ -import { Button, makeStyles, Typography } from '@material-ui/core'; +import Button from '@material-ui/core/Button'; +import Typography from '@material-ui/core/Typography'; +import { makeStyles } from '@material-ui/core/styles'; import React from 'react'; import { CodeSnippet } from '@backstage/core-components'; diff --git a/plugins/catalog/src/components/EntityLinksCard/IconLink.tsx b/plugins/catalog/src/components/EntityLinksCard/IconLink.tsx index 9afdd1f1da..77ee12bd36 100644 --- a/plugins/catalog/src/components/EntityLinksCard/IconLink.tsx +++ b/plugins/catalog/src/components/EntityLinksCard/IconLink.tsx @@ -14,7 +14,9 @@ * limitations under the License. */ -import { makeStyles, Box, Typography } from '@material-ui/core'; +import Box from '@material-ui/core/Box'; +import Typography from '@material-ui/core/Typography'; +import { makeStyles } from '@material-ui/core/styles'; import LanguageIcon from '@material-ui/icons/Language'; import React from 'react'; import { Link } from '@backstage/core-components'; diff --git a/plugins/catalog/src/components/EntityLinksCard/LinksGridList.tsx b/plugins/catalog/src/components/EntityLinksCard/LinksGridList.tsx index 7861b177ce..9e046abf76 100644 --- a/plugins/catalog/src/components/EntityLinksCard/LinksGridList.tsx +++ b/plugins/catalog/src/components/EntityLinksCard/LinksGridList.tsx @@ -14,7 +14,8 @@ * limitations under the License. */ -import { ImageList, ImageListItem } from '@material-ui/core'; +import ImageList from '@material-ui/core/ImageList'; +import ImageListItem from '@material-ui/core/ImageListItem'; import React from 'react'; import { IconLink } from './IconLink'; import { ColumnBreakpoints } from './types'; diff --git a/plugins/catalog/src/components/EntityLinksCard/useDynamicColumns.tsx b/plugins/catalog/src/components/EntityLinksCard/useDynamicColumns.tsx index cb6868632c..75da59b4ec 100644 --- a/plugins/catalog/src/components/EntityLinksCard/useDynamicColumns.tsx +++ b/plugins/catalog/src/components/EntityLinksCard/useDynamicColumns.tsx @@ -14,7 +14,8 @@ * limitations under the License. */ -import { Theme, useMediaQuery } from '@material-ui/core'; +import useMediaQuery from '@material-ui/core/useMediaQuery'; +import { Theme } from '@material-ui/core/styles'; import { Breakpoint, ColumnBreakpoints } from './types'; const colDefaults: ColumnBreakpoints = { diff --git a/plugins/catalog/src/components/EntityNotFound/EntityNotFound.tsx b/plugins/catalog/src/components/EntityNotFound/EntityNotFound.tsx index d8d9fe0855..479edf3984 100644 --- a/plugins/catalog/src/components/EntityNotFound/EntityNotFound.tsx +++ b/plugins/catalog/src/components/EntityNotFound/EntityNotFound.tsx @@ -15,7 +15,9 @@ */ import React from 'react'; -import { Grid, Button, Typography } from '@material-ui/core'; +import Grid from '@material-ui/core/Grid'; +import Button from '@material-ui/core/Button'; +import Typography from '@material-ui/core/Typography'; import { makeStyles } from '@material-ui/core/styles'; import { Illo } from './Illo'; diff --git a/plugins/catalog/src/components/EntityNotFound/Illo/Illo.tsx b/plugins/catalog/src/components/EntityNotFound/Illo/Illo.tsx index 03b23ec6b0..295db57f03 100644 --- a/plugins/catalog/src/components/EntityNotFound/Illo/Illo.tsx +++ b/plugins/catalog/src/components/EntityNotFound/Illo/Illo.tsx @@ -15,7 +15,7 @@ */ import React from 'react'; -import { makeStyles } from '@material-ui/core'; +import { makeStyles } from '@material-ui/core/styles'; import IlloSvgUrl from './illo.svg'; const useStyles = makeStyles(theme => ({ diff --git a/plugins/catalog/src/components/EntityOrphanWarning/DeleteEntityDialog.tsx b/plugins/catalog/src/components/EntityOrphanWarning/DeleteEntityDialog.tsx index fc1391152a..603f2040d9 100644 --- a/plugins/catalog/src/components/EntityOrphanWarning/DeleteEntityDialog.tsx +++ b/plugins/catalog/src/components/EntityOrphanWarning/DeleteEntityDialog.tsx @@ -16,7 +16,10 @@ import { Entity } from '@backstage/catalog-model'; import { catalogApiRef } from '@backstage/plugin-catalog-react'; -import { Button, Dialog, DialogActions, DialogTitle } from '@material-ui/core'; +import Button from '@material-ui/core/Button'; +import Dialog from '@material-ui/core/Dialog'; +import DialogActions from '@material-ui/core/DialogActions'; +import DialogTitle from '@material-ui/core/DialogTitle'; import React, { useState } from 'react'; import { alertApiRef, useApi } from '@backstage/core-plugin-api'; import { assertError } from '@backstage/errors'; diff --git a/plugins/catalog/src/components/EntityOrphanWarning/EntityOrphanWarning.tsx b/plugins/catalog/src/components/EntityOrphanWarning/EntityOrphanWarning.tsx index 253cfb23fe..8a17559681 100644 --- a/plugins/catalog/src/components/EntityOrphanWarning/EntityOrphanWarning.tsx +++ b/plugins/catalog/src/components/EntityOrphanWarning/EntityOrphanWarning.tsx @@ -16,7 +16,7 @@ import { Entity } from '@backstage/catalog-model'; import { useEntity } from '@backstage/plugin-catalog-react'; -import { Alert } from '@material-ui/lab'; +import Alert from '@material-ui/lab/Alert'; import React, { useState } from 'react'; import { useNavigate } from 'react-router-dom'; import { DeleteEntityDialog } from './DeleteEntityDialog'; diff --git a/plugins/catalog/src/components/EntityProcessingErrorsPanel/EntityProcessingErrorsPanel.tsx b/plugins/catalog/src/components/EntityProcessingErrorsPanel/EntityProcessingErrorsPanel.tsx index ef91e7b26e..57736dba40 100644 --- a/plugins/catalog/src/components/EntityProcessingErrorsPanel/EntityProcessingErrorsPanel.tsx +++ b/plugins/catalog/src/components/EntityProcessingErrorsPanel/EntityProcessingErrorsPanel.tsx @@ -21,7 +21,7 @@ import { EntityRefLink, useEntity, } from '@backstage/plugin-catalog-react'; -import { Box } from '@material-ui/core'; +import Box from '@material-ui/core/Box'; import React from 'react'; import { ResponseErrorPanel } from '@backstage/core-components'; import { diff --git a/plugins/catalog/src/components/EntityRelationWarning/EntityRelationWarning.tsx b/plugins/catalog/src/components/EntityRelationWarning/EntityRelationWarning.tsx index 16384ac1d2..f52fdae39d 100644 --- a/plugins/catalog/src/components/EntityRelationWarning/EntityRelationWarning.tsx +++ b/plugins/catalog/src/components/EntityRelationWarning/EntityRelationWarning.tsx @@ -20,10 +20,10 @@ import { catalogApiRef, useEntity, } from '@backstage/plugin-catalog-react'; -import { Alert } from '@material-ui/lab'; +import Alert from '@material-ui/lab/Alert'; import React from 'react'; import useAsync from 'react-use/lib/useAsync'; -import { Box } from '@material-ui/core'; +import Box from '@material-ui/core/Box'; import { ResponseErrorPanel } from '@backstage/core-components'; import { useApi, ApiHolder } from '@backstage/core-plugin-api'; diff --git a/plugins/catalog/src/components/RelatedEntitiesCard/RelatedEntitiesCard.tsx b/plugins/catalog/src/components/RelatedEntitiesCard/RelatedEntitiesCard.tsx index 7a533dcf5b..eb37973c27 100644 --- a/plugins/catalog/src/components/RelatedEntitiesCard/RelatedEntitiesCard.tsx +++ b/plugins/catalog/src/components/RelatedEntitiesCard/RelatedEntitiesCard.tsx @@ -15,7 +15,7 @@ */ import { Entity } from '@backstage/catalog-model'; -import { Typography } from '@material-ui/core'; +import Typography from '@material-ui/core/Typography'; import { EntityTable, useEntity, diff --git a/plugins/catalog/src/components/SystemDiagramCard/SystemDiagramCard.tsx b/plugins/catalog/src/components/SystemDiagramCard/SystemDiagramCard.tsx index f3cc265653..f141e3b06b 100644 --- a/plugins/catalog/src/components/SystemDiagramCard/SystemDiagramCard.tsx +++ b/plugins/catalog/src/components/SystemDiagramCard/SystemDiagramCard.tsx @@ -29,7 +29,9 @@ import { getEntityRelations, useEntity, } from '@backstage/plugin-catalog-react'; -import { Box, makeStyles, Typography, useTheme } from '@material-ui/core'; +import Box from '@material-ui/core/Box'; +import Typography from '@material-ui/core/Typography'; +import { makeStyles, useTheme } from '@material-ui/core/styles'; import ZoomOutMap from '@material-ui/icons/ZoomOutMap'; import React from 'react'; import useAsync from 'react-use/lib/useAsync'; diff --git a/plugins/code-climate/.eslintrc.js b/plugins/code-climate/.eslintrc.js index e2a53a6ad2..a2d8179106 100644 --- a/plugins/code-climate/.eslintrc.js +++ b/plugins/code-climate/.eslintrc.js @@ -1 +1,5 @@ -module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname, { + rules: { + '@backstage/no-top-level-material-ui-4-imports': 'error', + }, +}); diff --git a/plugins/code-climate/dev/index.tsx b/plugins/code-climate/dev/index.tsx index 060679337e..46619dcbeb 100644 --- a/plugins/code-climate/dev/index.tsx +++ b/plugins/code-climate/dev/index.tsx @@ -17,7 +17,7 @@ import { Entity } from '@backstage/catalog-model'; // eslint-disable-next-line @backstage/no-undeclared-imports import { createDevApp, EntityGridItem } from '@backstage/dev-utils'; -import { Grid } from '@material-ui/core'; +import Grid from '@material-ui/core/Grid'; import React from 'react'; import { EntityCodeClimateCard, diff --git a/plugins/code-climate/src/components/CodeClimateTable/CodeClimateTable.tsx b/plugins/code-climate/src/components/CodeClimateTable/CodeClimateTable.tsx index ca5b24565c..ebb13abfbc 100644 --- a/plugins/code-climate/src/components/CodeClimateTable/CodeClimateTable.tsx +++ b/plugins/code-climate/src/components/CodeClimateTable/CodeClimateTable.tsx @@ -17,7 +17,9 @@ import React from 'react'; import { CodeClimateData } from '../../api'; import { Link } from '@backstage/core-components'; -import { Box, makeStyles, Theme, Typography } from '@material-ui/core'; +import Box from '@material-ui/core/Box'; +import Typography from '@material-ui/core/Typography'; +import { makeStyles, Theme } from '@material-ui/core/styles'; const letterStyle = (theme: Theme) => ({ color: theme.palette.common.white, diff --git a/plugins/code-coverage-backend/src/plugin.ts b/plugins/code-coverage-backend/src/plugin.ts index 340280795f..0ddb6418bc 100644 --- a/plugins/code-coverage-backend/src/plugin.ts +++ b/plugins/code-coverage-backend/src/plugin.ts @@ -54,6 +54,10 @@ export const codeCoveragePlugin = createBackendPlugin({ database, }), ); + httpRouter.addAuthPolicy({ + path: '/health', + allow: 'unauthenticated', + }); }, }); }, diff --git a/plugins/code-coverage/.eslintrc.js b/plugins/code-coverage/.eslintrc.js index e2a53a6ad2..6f6668b53d 100644 --- a/plugins/code-coverage/.eslintrc.js +++ b/plugins/code-coverage/.eslintrc.js @@ -1 +1,5 @@ -module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname, { + rules: { + '@backstage/no-top-level-material-ui-4-imports': 'error', + }, +}); diff --git a/plugins/code-coverage/src/components/CoverageHistoryChart/CoverageHistoryChart.tsx b/plugins/code-coverage/src/components/CoverageHistoryChart/CoverageHistoryChart.tsx index 3cb4ad5d56..63784b6b3f 100644 --- a/plugins/code-coverage/src/components/CoverageHistoryChart/CoverageHistoryChart.tsx +++ b/plugins/code-coverage/src/components/CoverageHistoryChart/CoverageHistoryChart.tsx @@ -15,19 +15,17 @@ */ import { useEntity } from '@backstage/plugin-catalog-react'; -import { - Box, - Card, - CardContent, - CardHeader, - makeStyles, - Typography, -} from '@material-ui/core'; +import Box from '@material-ui/core/Box'; +import Card from '@material-ui/core/Card'; +import CardContent from '@material-ui/core/CardContent'; +import CardHeader from '@material-ui/core/CardHeader'; +import Typography from '@material-ui/core/Typography'; +import { makeStyles } from '@material-ui/core/styles'; import TrendingDownIcon from '@material-ui/icons/TrendingDown'; import TrendingFlatIcon from '@material-ui/icons/TrendingFlat'; import TrendingUpIcon from '@material-ui/icons/TrendingUp'; -import { Alert } from '@material-ui/lab'; -import { ClassNameMap } from '@material-ui/styles'; +import Alert from '@material-ui/lab/Alert'; +import { ClassNameMap } from '@material-ui/styles/withStyles'; import React from 'react'; import useAsync from 'react-use/lib/useAsync'; import { diff --git a/plugins/code-coverage/src/components/FileExplorer/CodeRow.tsx b/plugins/code-coverage/src/components/FileExplorer/CodeRow.tsx index 20f0548f16..28ff8e241d 100644 --- a/plugins/code-coverage/src/components/FileExplorer/CodeRow.tsx +++ b/plugins/code-coverage/src/components/FileExplorer/CodeRow.tsx @@ -15,7 +15,7 @@ */ import React from 'react'; -import { makeStyles } from '@material-ui/core'; +import { makeStyles } from '@material-ui/core/styles'; const useStyles = makeStyles(theme => ({ lineNumberCell: { diff --git a/plugins/code-coverage/src/components/FileExplorer/FileContent.tsx b/plugins/code-coverage/src/components/FileExplorer/FileContent.tsx index 2ca6987be7..b401e66334 100644 --- a/plugins/code-coverage/src/components/FileExplorer/FileContent.tsx +++ b/plugins/code-coverage/src/components/FileExplorer/FileContent.tsx @@ -15,8 +15,9 @@ */ import { useEntity } from '@backstage/plugin-catalog-react'; -import { makeStyles, Paper } from '@material-ui/core'; -import { Alert } from '@material-ui/lab'; +import Paper from '@material-ui/core/Paper'; +import { makeStyles } from '@material-ui/core/styles'; +import Alert from '@material-ui/lab/Alert'; import React from 'react'; import useAsync from 'react-use/lib/useAsync'; import { codeCoverageApiRef } from '../../api'; diff --git a/plugins/code-coverage/src/components/FileExplorer/FileExplorer.tsx b/plugins/code-coverage/src/components/FileExplorer/FileExplorer.tsx index 57bb9a2be0..4fb20dbd52 100644 --- a/plugins/code-coverage/src/components/FileExplorer/FileExplorer.tsx +++ b/plugins/code-coverage/src/components/FileExplorer/FileExplorer.tsx @@ -15,10 +15,12 @@ */ import { humanizeEntityRef, useEntity } from '@backstage/plugin-catalog-react'; -import { Box, Modal, makeStyles } from '@material-ui/core'; +import Box from '@material-ui/core/Box'; +import Modal from '@material-ui/core/Modal'; +import { makeStyles } from '@material-ui/core/styles'; import FolderIcon from '@material-ui/icons/Folder'; import FileOutlinedIcon from '@material-ui/icons/InsertDriveFileOutlined'; -import { Alert } from '@material-ui/lab'; +import Alert from '@material-ui/lab/Alert'; import React, { Fragment, useEffect, useState } from 'react'; import useAsync from 'react-use/lib/useAsync'; import { codeCoverageApiRef } from '../../api'; diff --git a/plugins/codescene/.eslintrc.js b/plugins/codescene/.eslintrc.js index e2a53a6ad2..6f6668b53d 100644 --- a/plugins/codescene/.eslintrc.js +++ b/plugins/codescene/.eslintrc.js @@ -1 +1,5 @@ -module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname, { + rules: { + '@backstage/no-top-level-material-ui-4-imports': 'error', + }, +}); diff --git a/plugins/codescene/src/components/CodeHealthKpisCard/CodeHealthKpisCard.tsx b/plugins/codescene/src/components/CodeHealthKpisCard/CodeHealthKpisCard.tsx index f7dda5c56c..59781f6304 100644 --- a/plugins/codescene/src/components/CodeHealthKpisCard/CodeHealthKpisCard.tsx +++ b/plugins/codescene/src/components/CodeHealthKpisCard/CodeHealthKpisCard.tsx @@ -14,7 +14,10 @@ * limitations under the License. */ import { EmptyState, InfoCard } from '@backstage/core-components'; -import { Button, Grid, makeStyles, Typography } from '@material-ui/core'; +import Button from '@material-ui/core/Button'; +import Grid from '@material-ui/core/Grid'; +import Typography from '@material-ui/core/Typography'; +import { makeStyles } from '@material-ui/core/styles'; import React, { PropsWithChildren } from 'react'; import { Analysis } from '../../api/types'; import { Gauge } from '../Gauge/Gauge'; diff --git a/plugins/codescene/src/components/CodeSceneEntityFileSummary/CodeSceneEntityFileSummary.tsx b/plugins/codescene/src/components/CodeSceneEntityFileSummary/CodeSceneEntityFileSummary.tsx index db5cef8c44..5714bb15c4 100644 --- a/plugins/codescene/src/components/CodeSceneEntityFileSummary/CodeSceneEntityFileSummary.tsx +++ b/plugins/codescene/src/components/CodeSceneEntityFileSummary/CodeSceneEntityFileSummary.tsx @@ -14,7 +14,7 @@ * limitations under the License. */ import { Content, EmptyState, InfoCard } from '@backstage/core-components'; -import { Grid } from '@material-ui/core'; +import Grid from '@material-ui/core/Grid'; import Alert from '@material-ui/lab/Alert'; import React from 'react'; import { diff --git a/plugins/codescene/src/components/CodeSceneEntityKPICard/CodeSceneEntityKPICard.tsx b/plugins/codescene/src/components/CodeSceneEntityKPICard/CodeSceneEntityKPICard.tsx index 1757ad19cf..826d726d1f 100644 --- a/plugins/codescene/src/components/CodeSceneEntityKPICard/CodeSceneEntityKPICard.tsx +++ b/plugins/codescene/src/components/CodeSceneEntityKPICard/CodeSceneEntityKPICard.tsx @@ -29,7 +29,8 @@ import { } from '../../utils/commonUtil'; import { DateTime } from 'luxon'; import { MissingAnnotationEmptyState } from '@backstage/plugin-catalog-react'; -import { Grid, Typography } from '@material-ui/core'; +import Grid from '@material-ui/core/Grid'; +import Typography from '@material-ui/core/Typography'; export const CodeSceneEntityKPICard = () => { const { entity } = useEntity(); diff --git a/plugins/codescene/src/components/CodeScenePageComponent/CodeScenePageComponent.tsx b/plugins/codescene/src/components/CodeScenePageComponent/CodeScenePageComponent.tsx index 118a68f39e..d3afcc0e06 100644 --- a/plugins/codescene/src/components/CodeScenePageComponent/CodeScenePageComponent.tsx +++ b/plugins/codescene/src/components/CodeScenePageComponent/CodeScenePageComponent.tsx @@ -14,7 +14,7 @@ * limitations under the License. */ import React from 'react'; -import { Grid } from '@material-ui/core'; +import Grid from '@material-ui/core/Grid'; import { Header, Page, diff --git a/plugins/codescene/src/components/CodeSceneProjectDetailsPage/CodeSceneProjectDetailsPage.tsx b/plugins/codescene/src/components/CodeSceneProjectDetailsPage/CodeSceneProjectDetailsPage.tsx index dbacd919b4..6d3298383b 100644 --- a/plugins/codescene/src/components/CodeSceneProjectDetailsPage/CodeSceneProjectDetailsPage.tsx +++ b/plugins/codescene/src/components/CodeSceneProjectDetailsPage/CodeSceneProjectDetailsPage.tsx @@ -25,7 +25,8 @@ import { TableColumn, } from '@backstage/core-components'; import { configApiRef, useApi, useApp } from '@backstage/core-plugin-api'; -import { Grid, Typography } from '@material-ui/core'; +import Grid from '@material-ui/core/Grid'; +import Typography from '@material-ui/core/Typography'; import Alert from '@material-ui/lab/Alert'; import React from 'react'; import { useParams } from 'react-router-dom'; diff --git a/plugins/codescene/src/components/ProjectsComponent/ProjectsComponent.tsx b/plugins/codescene/src/components/ProjectsComponent/ProjectsComponent.tsx index 212ab6e746..b291002ae4 100644 --- a/plugins/codescene/src/components/ProjectsComponent/ProjectsComponent.tsx +++ b/plugins/codescene/src/components/ProjectsComponent/ProjectsComponent.tsx @@ -27,16 +27,14 @@ import { Link as RouterLink } from 'react-router-dom'; import { rootRouteRef } from '../../routes'; import { codesceneApiRef } from '../../api/api'; import { Project, Analysis } from '../../api/types'; -import { - Grid, - Card, - CardActionArea, - Input, - makeStyles, - CardContent, - Chip, - CardActions, -} from '@material-ui/core'; +import Grid from '@material-ui/core/Grid'; +import Card from '@material-ui/core/Card'; +import CardActionArea from '@material-ui/core/CardActionArea'; +import Input from '@material-ui/core/Input'; +import CardContent from '@material-ui/core/CardContent'; +import Chip from '@material-ui/core/Chip'; +import CardActions from '@material-ui/core/CardActions'; +import { makeStyles } from '@material-ui/core/styles'; const useStyles = makeStyles(() => ({ overflowXScroll: { diff --git a/plugins/cost-insights/.eslintrc.js b/plugins/cost-insights/.eslintrc.js index e2a53a6ad2..e487f765b2 100644 --- a/plugins/cost-insights/.eslintrc.js +++ b/plugins/cost-insights/.eslintrc.js @@ -1 +1,5 @@ -module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname, { + rules: { + '@backstage/no-top-level-material-ui-4-imports': 'error', + }, +}); diff --git a/plugins/cost-insights/api-report.md b/plugins/cost-insights/api-report.md index 11cdbd8141..546c7e2873 100644 --- a/plugins/cost-insights/api-report.md +++ b/plugins/cost-insights/api-report.md @@ -30,7 +30,7 @@ import { RefAttributes } from 'react'; import { RouteRef } from '@backstage/core-plugin-api'; import { SetStateAction } from 'react'; import { TooltipProps } from 'recharts'; -import { TypographyProps } from '@material-ui/core'; +import { TypographyProps } from '@material-ui/core/Typography'; // @public export type Alert = { diff --git a/plugins/cost-insights/dev/index.tsx b/plugins/cost-insights/dev/index.tsx index 622abaffc9..49f18f9d65 100644 --- a/plugins/cost-insights/dev/index.tsx +++ b/plugins/cost-insights/dev/index.tsx @@ -26,7 +26,7 @@ import { EntityCostInsightsContent, } from '../src/plugin'; import { Content, Header, Page } from '@backstage/core-components'; -import { Grid } from '@material-ui/core'; +import Grid from '@material-ui/core/Grid'; import { EntityProvider } from '@backstage/plugin-catalog-react'; import { Entity } from '@backstage/catalog-model'; diff --git a/plugins/cost-insights/src/components/ActionItems/ActionItemCard.tsx b/plugins/cost-insights/src/components/ActionItems/ActionItemCard.tsx index 93025a8052..33005d0ba6 100644 --- a/plugins/cost-insights/src/components/ActionItems/ActionItemCard.tsx +++ b/plugins/cost-insights/src/components/ActionItems/ActionItemCard.tsx @@ -15,7 +15,8 @@ */ import React, { MouseEventHandler } from 'react'; import classnames from 'classnames'; -import { Card, CardHeader } from '@material-ui/core'; +import Card from '@material-ui/core/Card'; +import CardHeader from '@material-ui/core/CardHeader'; import { useScroll } from '../../hooks'; import { Alert } from '../../types'; import { useActionItemCardStyles as useStyles } from '../../utils/styles'; diff --git a/plugins/cost-insights/src/components/ActionItems/ActionItems.tsx b/plugins/cost-insights/src/components/ActionItems/ActionItems.tsx index 78c40045be..a0a5461e37 100644 --- a/plugins/cost-insights/src/components/ActionItems/ActionItems.tsx +++ b/plugins/cost-insights/src/components/ActionItems/ActionItems.tsx @@ -14,16 +14,14 @@ * limitations under the License. */ import React, { Fragment, MouseEventHandler } from 'react'; -import { - Avatar, - Badge, - Box, - IconButtonProps, - IconButton, - Paper, - Divider, - Tooltip, -} from '@material-ui/core'; +import Avatar from '@material-ui/core/Avatar'; +import { IconButtonProps } from '@material-ui/core/IconButton'; +import Tooltip from '@material-ui/core/Tooltip'; +import IconButton from '@material-ui/core/IconButton'; +import Badge from '@material-ui/core/Badge'; +import Box from '@material-ui/core/Box'; +import Paper from '@material-ui/core/Paper'; +import Divider from '@material-ui/core/Divider'; import { default as SnoozeIcon } from '@material-ui/icons/AccessTime'; import { default as AcceptIcon } from '@material-ui/icons/Check'; import { default as DismissIcon } from '@material-ui/icons/Delete'; diff --git a/plugins/cost-insights/src/components/AlertInsights/AlertDialog.test.tsx b/plugins/cost-insights/src/components/AlertInsights/AlertDialog.test.tsx index 31e83cf039..3d6e653910 100644 --- a/plugins/cost-insights/src/components/AlertInsights/AlertDialog.test.tsx +++ b/plugins/cost-insights/src/components/AlertInsights/AlertDialog.test.tsx @@ -14,7 +14,7 @@ * limitations under the License. */ import React from 'react'; -import { capitalize } from '@material-ui/core'; +import { capitalize } from '@material-ui/core/utils'; import { AlertDialog } from './AlertDialog'; import { render } from '@testing-library/react'; import { Alert, AlertFormProps, AlertStatus } from '../../types'; diff --git a/plugins/cost-insights/src/components/AlertInsights/AlertDialog.tsx b/plugins/cost-insights/src/components/AlertInsights/AlertDialog.tsx index 385116e188..e4e87fc70c 100644 --- a/plugins/cost-insights/src/components/AlertInsights/AlertDialog.tsx +++ b/plugins/cost-insights/src/components/AlertInsights/AlertDialog.tsx @@ -15,17 +15,15 @@ */ import React, { useEffect, useRef, useState } from 'react'; -import { - capitalize, - Box, - Button, - Divider, - Dialog, - DialogActions, - IconButton, - DialogContent, - Typography, -} from '@material-ui/core'; +import { capitalize } from '@material-ui/core/utils'; +import Box from '@material-ui/core/Box'; +import Button from '@material-ui/core/Button'; +import Divider from '@material-ui/core/Divider'; +import Dialog from '@material-ui/core/Dialog'; +import DialogActions from '@material-ui/core/DialogActions'; +import IconButton from '@material-ui/core/IconButton'; +import DialogContent from '@material-ui/core/DialogContent'; +import Typography from '@material-ui/core/Typography'; import { default as CloseIcon } from '@material-ui/icons/Close'; import { useAlertDialogStyles as useStyles } from '../../utils/styles'; import { Alert, AlertStatus } from '../../types'; diff --git a/plugins/cost-insights/src/components/AlertInsights/AlertInsights.tsx b/plugins/cost-insights/src/components/AlertInsights/AlertInsights.tsx index e48ae2789d..0ca254908d 100644 --- a/plugins/cost-insights/src/components/AlertInsights/AlertInsights.tsx +++ b/plugins/cost-insights/src/components/AlertInsights/AlertInsights.tsx @@ -16,7 +16,9 @@ import React, { useEffect, useState } from 'react'; import pluralize from 'pluralize'; -import { Box, Grid, Snackbar } from '@material-ui/core'; +import Box from '@material-ui/core/Box'; +import Grid from '@material-ui/core/Grid'; +import Snackbar from '@material-ui/core/Snackbar'; import { default as MuiAlert } from '@material-ui/lab/Alert'; import { AlertDialog } from './AlertDialog'; import { AlertStatusSummary } from './AlertStatusSummary'; diff --git a/plugins/cost-insights/src/components/AlertInsights/AlertInsightsHeader.tsx b/plugins/cost-insights/src/components/AlertInsights/AlertInsightsHeader.tsx index 97def45b76..b2cd796e6e 100644 --- a/plugins/cost-insights/src/components/AlertInsights/AlertInsightsHeader.tsx +++ b/plugins/cost-insights/src/components/AlertInsights/AlertInsightsHeader.tsx @@ -15,7 +15,8 @@ */ import React from 'react'; -import { Box, Typography } from '@material-ui/core'; +import Box from '@material-ui/core/Box'; +import Typography from '@material-ui/core/Typography'; import { useCostInsightsStyles as useStyles } from '../../utils/styles'; import { ScrollAnchor } from '../../utils/scroll'; import { DefaultNavigation } from '../../utils/navigation'; diff --git a/plugins/cost-insights/src/components/AlertInsights/AlertInsightsSection.tsx b/plugins/cost-insights/src/components/AlertInsights/AlertInsightsSection.tsx index 70dbfe66c7..725a902417 100644 --- a/plugins/cost-insights/src/components/AlertInsights/AlertInsightsSection.tsx +++ b/plugins/cost-insights/src/components/AlertInsights/AlertInsightsSection.tsx @@ -14,7 +14,8 @@ * limitations under the License. */ import React from 'react'; -import { Box, Button } from '@material-ui/core'; +import Box from '@material-ui/core/Box'; +import Button from '@material-ui/core/Button'; import { default as SnoozeIcon } from '@material-ui/icons/AccessTime'; import { default as AcceptIcon } from '@material-ui/icons/Check'; import { default as DismissIcon } from '@material-ui/icons/Delete'; diff --git a/plugins/cost-insights/src/components/AlertInsights/AlertInsightsSectionHeader.tsx b/plugins/cost-insights/src/components/AlertInsights/AlertInsightsSectionHeader.tsx index e4abf3a3ac..d4c2acd3a8 100644 --- a/plugins/cost-insights/src/components/AlertInsights/AlertInsightsSectionHeader.tsx +++ b/plugins/cost-insights/src/components/AlertInsights/AlertInsightsSectionHeader.tsx @@ -15,7 +15,11 @@ */ import React from 'react'; -import { Avatar, Box, Button, Grid, Typography } from '@material-ui/core'; +import Avatar from '@material-ui/core/Avatar'; +import Box from '@material-ui/core/Box'; +import Button from '@material-ui/core/Button'; +import Grid from '@material-ui/core/Grid'; +import Typography from '@material-ui/core/Typography'; import { useAlertInsightsSectionStyles as useStyles } from '../../utils/styles'; import { ScrollAnchor } from '../../utils/scroll'; import { Alert } from '../../types'; diff --git a/plugins/cost-insights/src/components/AlertInsights/AlertStatusSummary.tsx b/plugins/cost-insights/src/components/AlertInsights/AlertStatusSummary.tsx index 211167931c..10e10d0770 100644 --- a/plugins/cost-insights/src/components/AlertInsights/AlertStatusSummary.tsx +++ b/plugins/cost-insights/src/components/AlertInsights/AlertStatusSummary.tsx @@ -15,7 +15,11 @@ */ import React, { Fragment } from 'react'; -import { Avatar, Box, Collapse, Divider, Tooltip } from '@material-ui/core'; +import Avatar from '@material-ui/core/Avatar'; +import Box from '@material-ui/core/Box'; +import Collapse from '@material-ui/core/Collapse'; +import Divider from '@material-ui/core/Divider'; +import Tooltip from '@material-ui/core/Tooltip'; import { default as AcceptIcon } from '@material-ui/icons/Check'; import { default as DismissIcon } from '@material-ui/icons/Delete'; import { default as SnoozeIcon } from '@material-ui/icons/AccessTime'; diff --git a/plugins/cost-insights/src/components/AlertInsights/AlertStatusSummaryButton.tsx b/plugins/cost-insights/src/components/AlertInsights/AlertStatusSummaryButton.tsx index 95a4c44c3a..392d6eda2c 100644 --- a/plugins/cost-insights/src/components/AlertInsights/AlertStatusSummaryButton.tsx +++ b/plugins/cost-insights/src/components/AlertInsights/AlertStatusSummaryButton.tsx @@ -16,7 +16,7 @@ import React, { useState, MouseEventHandler, PropsWithChildren } from 'react'; import classnames from 'classnames'; -import { Button } from '@material-ui/core'; +import Button from '@material-ui/core/Button'; import { default as ExpandMoreIcon } from '@material-ui/icons/ExpandMore'; import { useAlertStatusSummaryButtonStyles as useStyles } from '../../utils/styles'; diff --git a/plugins/cost-insights/src/components/AlertInstructionsLayout/AlertInstructionsLayout.tsx b/plugins/cost-insights/src/components/AlertInstructionsLayout/AlertInstructionsLayout.tsx index 3749763fad..983778103d 100644 --- a/plugins/cost-insights/src/components/AlertInstructionsLayout/AlertInstructionsLayout.tsx +++ b/plugins/cost-insights/src/components/AlertInstructionsLayout/AlertInstructionsLayout.tsx @@ -15,7 +15,10 @@ */ import React, { PropsWithChildren } from 'react'; -import { Box, Button, Container, makeStyles } from '@material-ui/core'; +import Box from '@material-ui/core/Box'; +import Button from '@material-ui/core/Button'; +import Container from '@material-ui/core/Container'; +import { makeStyles } from '@material-ui/core/styles'; import ChevronLeftIcon from '@material-ui/icons/ChevronLeft'; import { CostInsightsThemeProvider } from '../CostInsightsPage/CostInsightsThemeProvider'; import { ConfigProvider, CurrencyProvider } from '../../hooks'; diff --git a/plugins/cost-insights/src/components/BarChart/BarChart.tsx b/plugins/cost-insights/src/components/BarChart/BarChart.tsx index fa4ae18e24..18a6a56962 100644 --- a/plugins/cost-insights/src/components/BarChart/BarChart.tsx +++ b/plugins/cost-insights/src/components/BarChart/BarChart.tsx @@ -24,7 +24,8 @@ import { XAxis, YAxis, } from 'recharts'; -import { Box, useTheme } from '@material-ui/core'; +import Box from '@material-ui/core/Box'; +import { useTheme } from '@material-ui/core/styles'; import { BarChartTick } from './BarChartTick'; import { BarChartStepper } from './BarChartStepper'; import { BarChartTooltip } from './BarChartTooltip'; diff --git a/plugins/cost-insights/src/components/BarChart/BarChartLabel.tsx b/plugins/cost-insights/src/components/BarChart/BarChartLabel.tsx index c3a6570a35..857d5f148f 100644 --- a/plugins/cost-insights/src/components/BarChart/BarChartLabel.tsx +++ b/plugins/cost-insights/src/components/BarChart/BarChartLabel.tsx @@ -15,7 +15,8 @@ */ import React, { PropsWithChildren } from 'react'; -import { Box, Typography } from '@material-ui/core'; +import Box from '@material-ui/core/Box'; +import Typography from '@material-ui/core/Typography'; import { useBarChartLabelStyles } from '../../utils/styles'; type BarChartLabelProps = { diff --git a/plugins/cost-insights/src/components/BarChart/BarChartLegend.tsx b/plugins/cost-insights/src/components/BarChart/BarChartLegend.tsx index becd5467d1..44d3684c70 100644 --- a/plugins/cost-insights/src/components/BarChart/BarChartLegend.tsx +++ b/plugins/cost-insights/src/components/BarChart/BarChartLegend.tsx @@ -15,7 +15,8 @@ */ import React, { PropsWithChildren } from 'react'; -import { Box, useTheme } from '@material-ui/core'; +import Box from '@material-ui/core/Box'; +import { useTheme } from '@material-ui/core/styles'; import { LegendItem } from '../LegendItem'; import { currencyFormatter } from '../../utils/formatters'; import { CostInsightsTheme } from '../../types'; diff --git a/plugins/cost-insights/src/components/BarChart/BarChartStepper.tsx b/plugins/cost-insights/src/components/BarChart/BarChartStepper.tsx index d2153c673f..ae85065ff2 100644 --- a/plugins/cost-insights/src/components/BarChart/BarChartStepper.tsx +++ b/plugins/cost-insights/src/components/BarChart/BarChartStepper.tsx @@ -15,7 +15,8 @@ */ import React, { useEffect, useState } from 'react'; -import { Paper, Slide } from '@material-ui/core'; +import Paper from '@material-ui/core/Paper'; +import Slide from '@material-ui/core/Slide'; import ChevronLeftIcon from '@material-ui/icons/ChevronLeft'; import ChevronRightIcon from '@material-ui/icons/ChevronRight'; import { BarChartStepperButton } from './BarChartStepperButton'; diff --git a/plugins/cost-insights/src/components/BarChart/BarChartStepperButton.tsx b/plugins/cost-insights/src/components/BarChart/BarChartStepperButton.tsx index 20562b1097..18d75d114d 100644 --- a/plugins/cost-insights/src/components/BarChart/BarChartStepperButton.tsx +++ b/plugins/cost-insights/src/components/BarChart/BarChartStepperButton.tsx @@ -15,7 +15,7 @@ */ import React, { forwardRef, PropsWithChildren, Ref } from 'react'; -import { ButtonBase, ButtonBaseProps } from '@material-ui/core'; +import ButtonBase, { ButtonBaseProps } from '@material-ui/core/ButtonBase'; import { useBarChartStepperButtonStyles as useStyles } from '../../utils/styles'; interface BarChartStepperButtonProps extends ButtonBaseProps { diff --git a/plugins/cost-insights/src/components/BarChart/BarChartSteps.tsx b/plugins/cost-insights/src/components/BarChart/BarChartSteps.tsx index 556154d046..aec3bab323 100644 --- a/plugins/cost-insights/src/components/BarChart/BarChartSteps.tsx +++ b/plugins/cost-insights/src/components/BarChart/BarChartSteps.tsx @@ -15,7 +15,7 @@ */ import React from 'react'; -import { ButtonBase } from '@material-ui/core'; +import ButtonBase from '@material-ui/core/ButtonBase'; import { useBarChartStepperStyles as useStyles } from '../../utils/styles'; export type BarChartStepsProps = { diff --git a/plugins/cost-insights/src/components/BarChart/BarChartTooltip.tsx b/plugins/cost-insights/src/components/BarChart/BarChartTooltip.tsx index 0b522e5e09..127b6bec04 100644 --- a/plugins/cost-insights/src/components/BarChart/BarChartTooltip.tsx +++ b/plugins/cost-insights/src/components/BarChart/BarChartTooltip.tsx @@ -16,7 +16,9 @@ import React, { ReactNode, PropsWithChildren } from 'react'; import classnames from 'classnames'; -import { Box, Divider, Typography } from '@material-ui/core'; +import Box from '@material-ui/core/Box'; +import Divider from '@material-ui/core/Divider'; +import Typography from '@material-ui/core/Typography'; import { useTooltipStyles as useStyles } from '../../utils/styles'; /** @public */ diff --git a/plugins/cost-insights/src/components/BarChart/BarChartTooltipItem.tsx b/plugins/cost-insights/src/components/BarChart/BarChartTooltipItem.tsx index 123720cbc0..79190f700d 100644 --- a/plugins/cost-insights/src/components/BarChart/BarChartTooltipItem.tsx +++ b/plugins/cost-insights/src/components/BarChart/BarChartTooltipItem.tsx @@ -15,7 +15,8 @@ */ import React from 'react'; -import { Box, Typography } from '@material-ui/core'; +import Box from '@material-ui/core/Box'; +import Typography from '@material-ui/core/Typography'; import LensIcon from '@material-ui/icons/Lens'; import { useTooltipStyles as useStyles } from '../../utils/styles'; diff --git a/plugins/cost-insights/src/components/CopyUrlToClipboard/CopyUrlToClipboard.tsx b/plugins/cost-insights/src/components/CopyUrlToClipboard/CopyUrlToClipboard.tsx index bef6f159de..d67a2814f1 100644 --- a/plugins/cost-insights/src/components/CopyUrlToClipboard/CopyUrlToClipboard.tsx +++ b/plugins/cost-insights/src/components/CopyUrlToClipboard/CopyUrlToClipboard.tsx @@ -17,7 +17,8 @@ import React, { useEffect, useState } from 'react'; import { useLocation } from 'react-router-dom'; import useCopyToClipboard from 'react-use/lib/useCopyToClipboard'; -import { Tooltip, IconButton } from '@material-ui/core'; +import Tooltip from '@material-ui/core/Tooltip'; +import IconButton from '@material-ui/core/IconButton'; import AssignmentOutlinedIcon from '@material-ui/icons/AssignmentOutlined'; import AssignmentTurnedInOutlinedIcon from '@material-ui/icons/AssignmentTurnedInOutlined'; import SentimentVeryDissatisfiedIcon from '@material-ui/icons/SentimentVeryDissatisfied'; diff --git a/plugins/cost-insights/src/components/CostGrowth/CostGrowthIndicator.tsx b/plugins/cost-insights/src/components/CostGrowth/CostGrowthIndicator.tsx index cf07d97d0a..583a279231 100644 --- a/plugins/cost-insights/src/components/CostGrowth/CostGrowthIndicator.tsx +++ b/plugins/cost-insights/src/components/CostGrowth/CostGrowthIndicator.tsx @@ -16,7 +16,7 @@ import React from 'react'; import classnames from 'classnames'; -import { Typography, TypographyProps } from '@material-ui/core'; +import Typography, { TypographyProps } from '@material-ui/core/Typography'; import { default as ArrowDropUp } from '@material-ui/icons/ArrowDropUp'; import { default as ArrowDropDown } from '@material-ui/icons/ArrowDropDown'; import { growthOf } from '../../utils/change'; diff --git a/plugins/cost-insights/src/components/CostInsightsHeader/CostInsightsHeader.tsx b/plugins/cost-insights/src/components/CostInsightsHeader/CostInsightsHeader.tsx index c1b3e12575..ae885d9277 100644 --- a/plugins/cost-insights/src/components/CostInsightsHeader/CostInsightsHeader.tsx +++ b/plugins/cost-insights/src/components/CostInsightsHeader/CostInsightsHeader.tsx @@ -15,7 +15,7 @@ */ import React from 'react'; -import { Typography } from '@material-ui/core'; +import Typography from '@material-ui/core/Typography'; import useAsync from 'react-use/lib/useAsync'; import { useCostInsightsStyles } from '../../utils/styles'; import { Group } from '@backstage/plugin-cost-insights-common'; diff --git a/plugins/cost-insights/src/components/CostInsightsLayout/CostInsightsLayout.tsx b/plugins/cost-insights/src/components/CostInsightsLayout/CostInsightsLayout.tsx index 55d5668189..818518acb1 100644 --- a/plugins/cost-insights/src/components/CostInsightsLayout/CostInsightsLayout.tsx +++ b/plugins/cost-insights/src/components/CostInsightsLayout/CostInsightsLayout.tsx @@ -14,7 +14,7 @@ * limitations under the License. */ import React, { PropsWithChildren } from 'react'; -import { makeStyles } from '@material-ui/core'; +import { makeStyles } from '@material-ui/core/styles'; import { Group } from '@backstage/plugin-cost-insights-common'; import { CostInsightsTabs } from '../CostInsightsTabs'; import { Header, Page } from '@backstage/core-components'; diff --git a/plugins/cost-insights/src/components/CostInsightsNavigation/CostInsightsNavigation.tsx b/plugins/cost-insights/src/components/CostInsightsNavigation/CostInsightsNavigation.tsx index 0bdfed3855..26506040a3 100644 --- a/plugins/cost-insights/src/components/CostInsightsNavigation/CostInsightsNavigation.tsx +++ b/plugins/cost-insights/src/components/CostInsightsNavigation/CostInsightsNavigation.tsx @@ -15,15 +15,13 @@ */ import React, { useEffect, useState } from 'react'; -import { - Collapse, - MenuList, - MenuItem, - ListItemIcon, - ListItemText, - Typography, - Badge, -} from '@material-ui/core'; +import Collapse from '@material-ui/core/Collapse'; +import MenuList from '@material-ui/core/MenuList'; +import MenuItem from '@material-ui/core/MenuItem'; +import ListItemIcon from '@material-ui/core/ListItemIcon'; +import ListItemText from '@material-ui/core/ListItemText'; +import Typography from '@material-ui/core/Typography'; +import Badge from '@material-ui/core/Badge'; import { useNavigationStyles as useStyles } from '../../utils/styles'; import { useConfig, useScroll } from '../../hooks'; import { findAlways } from '../../utils/assert'; diff --git a/plugins/cost-insights/src/components/CostInsightsPage/CostInsightsPage.tsx b/plugins/cost-insights/src/components/CostInsightsPage/CostInsightsPage.tsx index d113f1b8f3..e579f155c2 100644 --- a/plugins/cost-insights/src/components/CostInsightsPage/CostInsightsPage.tsx +++ b/plugins/cost-insights/src/components/CostInsightsPage/CostInsightsPage.tsx @@ -15,14 +15,12 @@ */ import React, { useCallback, useEffect, useMemo, useState } from 'react'; -import { - Box, - Collapse, - Container, - Divider, - Grid, - Typography, -} from '@material-ui/core'; +import Box from '@material-ui/core/Box'; +import Collapse from '@material-ui/core/Collapse'; +import Container from '@material-ui/core/Container'; +import Divider from '@material-ui/core/Divider'; +import Grid from '@material-ui/core/Grid'; +import Typography from '@material-ui/core/Typography'; import { default as MaterialAlert } from '@material-ui/lab/Alert'; import { costInsightsApiRef } from '../../api'; import { ActionItems } from '../ActionItems'; diff --git a/plugins/cost-insights/src/components/CostInsightsPage/CostInsightsThemeProvider.tsx b/plugins/cost-insights/src/components/CostInsightsPage/CostInsightsThemeProvider.tsx index 40745c4301..f05fb1072f 100644 --- a/plugins/cost-insights/src/components/CostInsightsPage/CostInsightsThemeProvider.tsx +++ b/plugins/cost-insights/src/components/CostInsightsPage/CostInsightsThemeProvider.tsx @@ -16,10 +16,10 @@ import React, { PropsWithChildren } from 'react'; import { - createTheme as createMuiTheme, - Theme, ThemeProvider, -} from '@material-ui/core'; + createTheme as createMuiTheme, +} from '@material-ui/core/styles'; +import { Theme } from '@material-ui/core/styles'; import { costInsightsDarkTheme, costInsightsLightTheme, diff --git a/plugins/cost-insights/src/components/CostInsightsTabs/CostInsightsTabs.tsx b/plugins/cost-insights/src/components/CostInsightsTabs/CostInsightsTabs.tsx index 152ce56902..928e6c98ed 100644 --- a/plugins/cost-insights/src/components/CostInsightsTabs/CostInsightsTabs.tsx +++ b/plugins/cost-insights/src/components/CostInsightsTabs/CostInsightsTabs.tsx @@ -15,7 +15,11 @@ */ import React, { useState } from 'react'; -import { Menu, MenuItem, Tab, Tabs, Typography } from '@material-ui/core'; +import Menu from '@material-ui/core/Menu'; +import MenuItem from '@material-ui/core/MenuItem'; +import Tab from '@material-ui/core/Tab'; +import Tabs from '@material-ui/core/Tabs'; +import Typography from '@material-ui/core/Typography'; import ExpandMoreIcon from '@material-ui/icons/ExpandMore'; import { mapLoadingToProps, mapFiltersToProps } from './selector'; import { Group } from '@backstage/plugin-cost-insights-common'; diff --git a/plugins/cost-insights/src/components/CostOverviewCard/CostOverviewBreakdownChart.tsx b/plugins/cost-insights/src/components/CostOverviewCard/CostOverviewBreakdownChart.tsx index 842e76c991..dd92b80faf 100644 --- a/plugins/cost-insights/src/components/CostOverviewCard/CostOverviewBreakdownChart.tsx +++ b/plugins/cost-insights/src/components/CostOverviewCard/CostOverviewBreakdownChart.tsx @@ -15,13 +15,11 @@ */ import React, { useState } from 'react'; import { DateTime } from 'luxon'; -import { - Box, - Divider, - emphasize, - Typography, - useTheme, -} from '@material-ui/core'; +import Box from '@material-ui/core/Box'; +import Divider from '@material-ui/core/Divider'; +import { emphasize } from '@material-ui/core/styles/colorManipulator'; +import Typography from '@material-ui/core/Typography'; +import { useTheme } from '@material-ui/core/styles'; import { default as FullScreenIcon } from '@material-ui/icons/Fullscreen'; import { Area, diff --git a/plugins/cost-insights/src/components/CostOverviewCard/CostOverviewCard.tsx b/plugins/cost-insights/src/components/CostOverviewCard/CostOverviewCard.tsx index c816da97ed..7fcf45ed67 100644 --- a/plugins/cost-insights/src/components/CostOverviewCard/CostOverviewCard.tsx +++ b/plugins/cost-insights/src/components/CostOverviewCard/CostOverviewCard.tsx @@ -15,16 +15,14 @@ */ import React, { useEffect, useState } from 'react'; -import { - Box, - capitalize, - Card, - CardContent, - Divider, - Tab, - Tabs, - useTheme, -} from '@material-ui/core'; +import Box from '@material-ui/core/Box'; +import { capitalize } from '@material-ui/core/utils'; +import Card from '@material-ui/core/Card'; +import CardContent from '@material-ui/core/CardContent'; +import Divider from '@material-ui/core/Divider'; +import Tab from '@material-ui/core/Tab'; +import Tabs from '@material-ui/core/Tabs'; +import { useTheme } from '@material-ui/core/styles'; import { CostOverviewChart } from './CostOverviewChart'; import { CostOverviewBreakdownChart } from './CostOverviewBreakdownChart'; import { CostOverviewHeader } from './CostOverviewHeader'; diff --git a/plugins/cost-insights/src/components/CostOverviewCard/CostOverviewChart.tsx b/plugins/cost-insights/src/components/CostOverviewCard/CostOverviewChart.tsx index 2201dcc650..f272fe0219 100644 --- a/plugins/cost-insights/src/components/CostOverviewCard/CostOverviewChart.tsx +++ b/plugins/cost-insights/src/components/CostOverviewCard/CostOverviewChart.tsx @@ -15,7 +15,8 @@ */ import React from 'react'; import { DateTime } from 'luxon'; -import { useTheme, Box } from '@material-ui/core'; +import Box from '@material-ui/core/Box'; +import { useTheme } from '@material-ui/core/styles'; import { ComposedChart, XAxis, diff --git a/plugins/cost-insights/src/components/CostOverviewCard/CostOverviewHeader.tsx b/plugins/cost-insights/src/components/CostOverviewCard/CostOverviewHeader.tsx index 849ffeeab6..c6f23449c4 100644 --- a/plugins/cost-insights/src/components/CostOverviewCard/CostOverviewHeader.tsx +++ b/plugins/cost-insights/src/components/CostOverviewCard/CostOverviewHeader.tsx @@ -14,7 +14,8 @@ * limitations under the License. */ import React, { PropsWithChildren } from 'react'; -import { Box, Typography } from '@material-ui/core'; +import Box from '@material-ui/core/Box'; +import Typography from '@material-ui/core/Typography'; type CostOverviewHeaderProps = { title: string; diff --git a/plugins/cost-insights/src/components/CostOverviewCard/CostOverviewLegend.tsx b/plugins/cost-insights/src/components/CostOverviewCard/CostOverviewLegend.tsx index d823c54691..303dd63018 100644 --- a/plugins/cost-insights/src/components/CostOverviewCard/CostOverviewLegend.tsx +++ b/plugins/cost-insights/src/components/CostOverviewCard/CostOverviewLegend.tsx @@ -15,7 +15,8 @@ */ import React, { PropsWithChildren } from 'react'; -import { Box, useTheme } from '@material-ui/core'; +import Box from '@material-ui/core/Box'; +import { useTheme } from '@material-ui/core/styles'; import { LegendItem } from '../LegendItem'; import { CostInsightsTheme } from '../../types'; import { diff --git a/plugins/cost-insights/src/components/CurrencySelect/CurrencySelect.tsx b/plugins/cost-insights/src/components/CurrencySelect/CurrencySelect.tsx index 8f7d466de7..2706364f89 100644 --- a/plugins/cost-insights/src/components/CurrencySelect/CurrencySelect.tsx +++ b/plugins/cost-insights/src/components/CurrencySelect/CurrencySelect.tsx @@ -15,13 +15,10 @@ */ import React from 'react'; -import { - InputLabel, - FormControl, - MenuItem, - Select, - SelectProps, -} from '@material-ui/core'; +import InputLabel from '@material-ui/core/InputLabel'; +import Select, { SelectProps } from '@material-ui/core/Select'; +import FormControl from '@material-ui/core/FormControl'; +import MenuItem from '@material-ui/core/MenuItem'; import Typography from '@material-ui/core/Typography'; import { Currency, CurrencyType } from '../../types'; import { findAlways } from '../../utils/assert'; diff --git a/plugins/cost-insights/src/components/LabelDataflowInstructionsPage/LabelDataflowInstructionsPage.tsx b/plugins/cost-insights/src/components/LabelDataflowInstructionsPage/LabelDataflowInstructionsPage.tsx index 8a6fcded77..705a690c7a 100644 --- a/plugins/cost-insights/src/components/LabelDataflowInstructionsPage/LabelDataflowInstructionsPage.tsx +++ b/plugins/cost-insights/src/components/LabelDataflowInstructionsPage/LabelDataflowInstructionsPage.tsx @@ -15,7 +15,8 @@ */ import React from 'react'; -import { Box, Typography } from '@material-ui/core'; +import Box from '@material-ui/core/Box'; +import Typography from '@material-ui/core/Typography'; import { AlertInstructionsLayout } from '../AlertInstructionsLayout'; import { CodeSnippet, Link } from '@backstage/core-components'; diff --git a/plugins/cost-insights/src/components/LegendItem/LegendItem.tsx b/plugins/cost-insights/src/components/LegendItem/LegendItem.tsx index 93b1df7bdb..3ef093f366 100644 --- a/plugins/cost-insights/src/components/LegendItem/LegendItem.tsx +++ b/plugins/cost-insights/src/components/LegendItem/LegendItem.tsx @@ -15,7 +15,9 @@ */ import React, { PropsWithChildren } from 'react'; -import { Box, Typography, Tooltip } from '@material-ui/core'; +import Box from '@material-ui/core/Box'; +import Typography from '@material-ui/core/Typography'; +import Tooltip from '@material-ui/core/Tooltip'; import LensIcon from '@material-ui/icons/Lens'; import HelpOutlineOutlinedIcon from '@material-ui/icons/HelpOutlineOutlined'; import { useCostGrowthLegendStyles } from '../../utils/styles'; diff --git a/plugins/cost-insights/src/components/MetricSelect/MetricSelect.tsx b/plugins/cost-insights/src/components/MetricSelect/MetricSelect.tsx index fd534eb8f0..da9d6f3df8 100644 --- a/plugins/cost-insights/src/components/MetricSelect/MetricSelect.tsx +++ b/plugins/cost-insights/src/components/MetricSelect/MetricSelect.tsx @@ -15,7 +15,10 @@ */ import React from 'react'; -import { InputLabel, FormControl, Select, MenuItem } from '@material-ui/core'; +import InputLabel from '@material-ui/core/InputLabel'; +import FormControl from '@material-ui/core/FormControl'; +import Select from '@material-ui/core/Select'; +import MenuItem from '@material-ui/core/MenuItem'; import { Maybe, Metric } from '@backstage/plugin-cost-insights-common'; import { useSelectStyles as useStyles } from '../../utils/styles'; diff --git a/plugins/cost-insights/src/components/PeriodSelect/PeriodSelect.tsx b/plugins/cost-insights/src/components/PeriodSelect/PeriodSelect.tsx index 29a77ae420..96f7374187 100644 --- a/plugins/cost-insights/src/components/PeriodSelect/PeriodSelect.tsx +++ b/plugins/cost-insights/src/components/PeriodSelect/PeriodSelect.tsx @@ -15,7 +15,8 @@ */ import React from 'react'; -import { MenuItem, Select, SelectProps } from '@material-ui/core'; +import MenuItem from '@material-ui/core/MenuItem'; +import Select, { SelectProps } from '@material-ui/core/Select'; import { Duration } from '../../types'; import { formatLastTwoLookaheadQuarters } from '../../utils/formatters'; import { findAlways } from '../../utils/assert'; diff --git a/plugins/cost-insights/src/components/ProductInsights/ProductInsights.tsx b/plugins/cost-insights/src/components/ProductInsights/ProductInsights.tsx index 9df763a5d4..11803246fc 100644 --- a/plugins/cost-insights/src/components/ProductInsights/ProductInsights.tsx +++ b/plugins/cost-insights/src/components/ProductInsights/ProductInsights.tsx @@ -15,7 +15,8 @@ */ import React, { useCallback, useEffect, useRef, useState } from 'react'; -import { Box, Typography } from '@material-ui/core'; +import Box from '@material-ui/core/Box'; +import Typography from '@material-ui/core/Typography'; import { default as Alert } from '@material-ui/lab/Alert'; import { costInsightsApiRef } from '../../api'; import { ProductInsightsCardList } from '../ProductInsightsCard/ProductInsightsCardList'; diff --git a/plugins/cost-insights/src/components/ProductInsightsCard/ProductEntityDialog.tsx b/plugins/cost-insights/src/components/ProductInsightsCard/ProductEntityDialog.tsx index 55fa795728..90edec5fc1 100644 --- a/plugins/cost-insights/src/components/ProductInsightsCard/ProductEntityDialog.tsx +++ b/plugins/cost-insights/src/components/ProductInsightsCard/ProductEntityDialog.tsx @@ -15,7 +15,8 @@ */ import React, { useState } from 'react'; -import { Dialog, IconButton } from '@material-ui/core'; +import Dialog from '@material-ui/core/Dialog'; +import IconButton from '@material-ui/core/IconButton'; import { default as CloseButton } from '@material-ui/icons/Close'; import { useEntityDialogStyles as useStyles } from '../../utils/styles'; import { Entity } from '@backstage/plugin-cost-insights-common'; diff --git a/plugins/cost-insights/src/components/ProductInsightsCard/ProductEntityTable.tsx b/plugins/cost-insights/src/components/ProductInsightsCard/ProductEntityTable.tsx index affb16cb30..1b21f8db72 100644 --- a/plugins/cost-insights/src/components/ProductInsightsCard/ProductEntityTable.tsx +++ b/plugins/cost-insights/src/components/ProductInsightsCard/ProductEntityTable.tsx @@ -16,7 +16,7 @@ import React from 'react'; import classnames from 'classnames'; -import { Typography } from '@material-ui/core'; +import Typography from '@material-ui/core/Typography'; import { formatChange } from '../../utils/formatters'; import { useEntityDialogStyles as useStyles } from '../../utils/styles'; import { CostGrowthIndicator } from '../CostGrowth'; diff --git a/plugins/cost-insights/src/components/ProductInsightsCard/ProductInsightsCard.tsx b/plugins/cost-insights/src/components/ProductInsightsCard/ProductInsightsCard.tsx index a587bfb26e..7d0ec4dba3 100644 --- a/plugins/cost-insights/src/components/ProductInsightsCard/ProductInsightsCard.tsx +++ b/plugins/cost-insights/src/components/ProductInsightsCard/ProductInsightsCard.tsx @@ -22,7 +22,7 @@ import React, { useState, } from 'react'; import pluralize from 'pluralize'; -import { Typography } from '@material-ui/core'; +import Typography from '@material-ui/core/Typography'; import { default as Alert } from '@material-ui/lab/Alert'; import { PeriodSelect } from '../PeriodSelect'; import { ProductInsightsChart } from './ProductInsightsChart'; diff --git a/plugins/cost-insights/src/components/ProductInsightsCard/ProductInsightsCardList.tsx b/plugins/cost-insights/src/components/ProductInsightsCard/ProductInsightsCardList.tsx index 3ae97daecb..f031b52cd7 100644 --- a/plugins/cost-insights/src/components/ProductInsightsCard/ProductInsightsCardList.tsx +++ b/plugins/cost-insights/src/components/ProductInsightsCard/ProductInsightsCardList.tsx @@ -15,7 +15,9 @@ */ import React from 'react'; -import { Box, CircularProgress, Collapse } from '@material-ui/core'; +import Box from '@material-ui/core/Box'; +import CircularProgress from '@material-ui/core/CircularProgress'; +import Collapse from '@material-ui/core/Collapse'; import { ProductInsightsCard } from './ProductInsightsCard'; import { Duration } from '../../types'; import { Entity, Product } from '@backstage/plugin-cost-insights-common'; diff --git a/plugins/cost-insights/src/components/ProductInsightsCard/ProductInsightsChart.tsx b/plugins/cost-insights/src/components/ProductInsightsCard/ProductInsightsChart.tsx index 2976b1f30f..7e2e6d6244 100644 --- a/plugins/cost-insights/src/components/ProductInsightsCard/ProductInsightsChart.tsx +++ b/plugins/cost-insights/src/components/ProductInsightsCard/ProductInsightsChart.tsx @@ -16,7 +16,8 @@ import React, { useMemo, useState } from 'react'; import pluralize from 'pluralize'; -import { Box, Typography } from '@material-ui/core'; +import Box from '@material-ui/core/Box'; +import Typography from '@material-ui/core/Typography'; import { default as FullScreenIcon } from '@material-ui/icons/Fullscreen'; import { LegendItem } from '../LegendItem'; import { ProductEntityDialog } from './ProductEntityDialog'; diff --git a/plugins/cost-insights/src/components/ProjectGrowthAlertCard/ProjectGrowthAlertChart.tsx b/plugins/cost-insights/src/components/ProjectGrowthAlertCard/ProjectGrowthAlertChart.tsx index 74c0cea34b..fd4d2ef004 100644 --- a/plugins/cost-insights/src/components/ProjectGrowthAlertCard/ProjectGrowthAlertChart.tsx +++ b/plugins/cost-insights/src/components/ProjectGrowthAlertCard/ProjectGrowthAlertChart.tsx @@ -16,7 +16,7 @@ import React from 'react'; import { DateTime } from 'luxon'; -import { Box } from '@material-ui/core'; +import Box from '@material-ui/core/Box'; import { BarChart, BarChartLegend, BarChartLegendOptions } from '../BarChart'; import { LegendItem } from '../LegendItem'; import { CostGrowth } from '../CostGrowth'; diff --git a/plugins/cost-insights/src/components/ProjectGrowthInstructionsPage/ProjectGrowthInstructionsPage.tsx b/plugins/cost-insights/src/components/ProjectGrowthInstructionsPage/ProjectGrowthInstructionsPage.tsx index 0435210a98..7dfad406e8 100644 --- a/plugins/cost-insights/src/components/ProjectGrowthInstructionsPage/ProjectGrowthInstructionsPage.tsx +++ b/plugins/cost-insights/src/components/ProjectGrowthInstructionsPage/ProjectGrowthInstructionsPage.tsx @@ -16,7 +16,8 @@ import React from 'react'; import { DateTime } from 'luxon'; -import { Box, Typography } from '@material-ui/core'; +import Box from '@material-ui/core/Box'; +import Typography from '@material-ui/core/Typography'; import { AlertInstructionsLayout } from '../AlertInstructionsLayout'; import { ProductInsightsChart } from '../ProductInsightsCard'; import { diff --git a/plugins/cost-insights/src/components/ProjectSelect/ProjectSelect.tsx b/plugins/cost-insights/src/components/ProjectSelect/ProjectSelect.tsx index c83fa67d94..0d3a86c3a1 100644 --- a/plugins/cost-insights/src/components/ProjectSelect/ProjectSelect.tsx +++ b/plugins/cost-insights/src/components/ProjectSelect/ProjectSelect.tsx @@ -14,7 +14,8 @@ * limitations under the License. */ import React from 'react'; -import { MenuItem, Select } from '@material-ui/core'; +import MenuItem from '@material-ui/core/MenuItem'; +import Select from '@material-ui/core/Select'; import { Maybe, Project } from '@backstage/plugin-cost-insights-common'; import { useSelectStyles as useStyles } from '../../utils/styles'; diff --git a/plugins/cost-insights/src/components/UnlabeledDataflowAlertCard/UnlabeledDataflowAlertCard.tsx b/plugins/cost-insights/src/components/UnlabeledDataflowAlertCard/UnlabeledDataflowAlertCard.tsx index af44f434bf..f1cccc2dd0 100644 --- a/plugins/cost-insights/src/components/UnlabeledDataflowAlertCard/UnlabeledDataflowAlertCard.tsx +++ b/plugins/cost-insights/src/components/UnlabeledDataflowAlertCard/UnlabeledDataflowAlertCard.tsx @@ -16,7 +16,7 @@ import React from 'react'; import pluralize from 'pluralize'; -import { Box } from '@material-ui/core'; +import Box from '@material-ui/core/Box'; import { BarChart, BarChartLegend } from '../BarChart'; import { UnlabeledDataflowData, ResourceData } from '../../types'; import { useBarChartLayoutStyles as useStyles } from '../../utils/styles'; diff --git a/plugins/cost-insights/src/components/WhyCostsMatter/WhyCostsMatter.tsx b/plugins/cost-insights/src/components/WhyCostsMatter/WhyCostsMatter.tsx index 0b3ea9f00d..e58ccbb525 100644 --- a/plugins/cost-insights/src/components/WhyCostsMatter/WhyCostsMatter.tsx +++ b/plugins/cost-insights/src/components/WhyCostsMatter/WhyCostsMatter.tsx @@ -15,7 +15,11 @@ */ import React from 'react'; -import { Typography, Box, Grid, Container, Divider } from '@material-ui/core'; +import Typography from '@material-ui/core/Typography'; +import Box from '@material-ui/core/Box'; +import Grid from '@material-ui/core/Grid'; +import Container from '@material-ui/core/Container'; +import Divider from '@material-ui/core/Divider'; export const WhyCostsMatter = () => { return ( diff --git a/plugins/cost-insights/src/example/components/KubernetesMigrationAlertCard/KubernetesMigrationAlertCard.tsx b/plugins/cost-insights/src/example/components/KubernetesMigrationAlertCard/KubernetesMigrationAlertCard.tsx index bc61ffbf2b..f0ca5a3ee3 100644 --- a/plugins/cost-insights/src/example/components/KubernetesMigrationAlertCard/KubernetesMigrationAlertCard.tsx +++ b/plugins/cost-insights/src/example/components/KubernetesMigrationAlertCard/KubernetesMigrationAlertCard.tsx @@ -15,7 +15,7 @@ */ import React from 'react'; -import { Box } from '@material-ui/core'; +import Box from '@material-ui/core/Box'; import { KubernetesMigrationBarChartLegend } from './KubernetesMigrationBarChartLegend'; import { KubernetesMigrationBarChart } from './KubernetesMigrationBarChart'; import { KubernetesMigrationData } from '../../alerts'; diff --git a/plugins/cost-insights/src/example/components/KubernetesMigrationAlertCard/KubernetesMigrationBarChart.tsx b/plugins/cost-insights/src/example/components/KubernetesMigrationAlertCard/KubernetesMigrationBarChart.tsx index bdc7af551a..67cbadb4d3 100644 --- a/plugins/cost-insights/src/example/components/KubernetesMigrationAlertCard/KubernetesMigrationBarChart.tsx +++ b/plugins/cost-insights/src/example/components/KubernetesMigrationAlertCard/KubernetesMigrationBarChart.tsx @@ -22,7 +22,7 @@ import { ResourceData, } from '../../../types'; import { Entity } from '@backstage/plugin-cost-insights-common'; -import { useTheme } from '@material-ui/core'; +import { useTheme } from '@material-ui/core/styles'; type MigrationBarChartProps = { currentProduct: string; diff --git a/plugins/cost-insights/src/example/components/KubernetesMigrationAlertCard/KubernetesMigrationBarChartLegend.tsx b/plugins/cost-insights/src/example/components/KubernetesMigrationAlertCard/KubernetesMigrationBarChartLegend.tsx index 1b46b15a10..d516ab9c33 100644 --- a/plugins/cost-insights/src/example/components/KubernetesMigrationAlertCard/KubernetesMigrationBarChartLegend.tsx +++ b/plugins/cost-insights/src/example/components/KubernetesMigrationAlertCard/KubernetesMigrationBarChartLegend.tsx @@ -15,7 +15,8 @@ */ import React from 'react'; -import { Box, useTheme } from '@material-ui/core'; +import Box from '@material-ui/core/Box'; +import { useTheme } from '@material-ui/core/styles'; import { CostGrowth, LegendItem } from '../../../components'; import { CostInsightsTheme, Duration } from '../../../types'; import { ChangeStatistic } from '@backstage/plugin-cost-insights-common'; diff --git a/plugins/cost-insights/src/example/forms/KubernetesMigrationDismissForm.tsx b/plugins/cost-insights/src/example/forms/KubernetesMigrationDismissForm.tsx index 7efd32616c..181e3492ce 100644 --- a/plugins/cost-insights/src/example/forms/KubernetesMigrationDismissForm.tsx +++ b/plugins/cost-insights/src/example/forms/KubernetesMigrationDismissForm.tsx @@ -21,13 +21,11 @@ import React, { FormEventHandler, ChangeEvent, } from 'react'; -import { - Checkbox, - FormControl, - FormControlLabel, - FormGroup, - Typography, -} from '@material-ui/core'; +import Checkbox from '@material-ui/core/Checkbox'; +import FormControl from '@material-ui/core/FormControl'; +import FormControlLabel from '@material-ui/core/FormControlLabel'; +import FormGroup from '@material-ui/core/FormGroup'; +import Typography from '@material-ui/core/Typography'; import { AlertFormProps } from '../../types'; import { Entity } from '@backstage/plugin-cost-insights-common'; import { KubernetesMigrationAlert } from '../alerts'; diff --git a/plugins/cost-insights/src/forms/AlertAcceptForm.tsx b/plugins/cost-insights/src/forms/AlertAcceptForm.tsx index ab22a0f330..b31bf8ff74 100644 --- a/plugins/cost-insights/src/forms/AlertAcceptForm.tsx +++ b/plugins/cost-insights/src/forms/AlertAcceptForm.tsx @@ -20,7 +20,9 @@ import React, { ChangeEvent, FormEventHandler, } from 'react'; -import { Checkbox, FormControl, FormControlLabel } from '@material-ui/core'; +import Checkbox from '@material-ui/core/Checkbox'; +import FormControl from '@material-ui/core/FormControl'; +import FormControlLabel from '@material-ui/core/FormControlLabel'; import { Alert, AlertFormProps } from '../types'; export type AlertAcceptFormProps = AlertFormProps; diff --git a/plugins/cost-insights/src/forms/AlertDismissForm.tsx b/plugins/cost-insights/src/forms/AlertDismissForm.tsx index 7506fe8ee1..0755664935 100644 --- a/plugins/cost-insights/src/forms/AlertDismissForm.tsx +++ b/plugins/cost-insights/src/forms/AlertDismissForm.tsx @@ -21,16 +21,14 @@ import React, { forwardRef, FormEventHandler, } from 'react'; -import { - Box, - Collapse, - FormControl, - FormControlLabel, - TextField, - Typography, - Radio, - RadioGroup, -} from '@material-ui/core'; +import Box from '@material-ui/core/Box'; +import Collapse from '@material-ui/core/Collapse'; +import FormControl from '@material-ui/core/FormControl'; +import FormControlLabel from '@material-ui/core/FormControlLabel'; +import TextField from '@material-ui/core/TextField'; +import Typography from '@material-ui/core/Typography'; +import Radio from '@material-ui/core/Radio'; +import RadioGroup from '@material-ui/core/RadioGroup'; import { Alert, AlertFormProps, diff --git a/plugins/cost-insights/src/forms/AlertSnoozeForm.tsx b/plugins/cost-insights/src/forms/AlertSnoozeForm.tsx index 3f87c87771..95ceb4b7e8 100644 --- a/plugins/cost-insights/src/forms/AlertSnoozeForm.tsx +++ b/plugins/cost-insights/src/forms/AlertSnoozeForm.tsx @@ -22,14 +22,12 @@ import React, { FormEventHandler, } from 'react'; import { DateTime } from 'luxon'; -import { - Box, - FormControl, - FormControlLabel, - RadioGroup, - Radio, - Typography, -} from '@material-ui/core'; +import Box from '@material-ui/core/Box'; +import FormControl from '@material-ui/core/FormControl'; +import FormControlLabel from '@material-ui/core/FormControlLabel'; +import RadioGroup from '@material-ui/core/RadioGroup'; +import Radio from '@material-ui/core/Radio'; +import Typography from '@material-ui/core/Typography'; import { Alert, AlertFormProps, diff --git a/plugins/cost-insights/src/hooks/useFilters.tsx b/plugins/cost-insights/src/hooks/useFilters.tsx index e888da369e..49ae2b3b43 100644 --- a/plugins/cost-insights/src/hooks/useFilters.tsx +++ b/plugins/cost-insights/src/hooks/useFilters.tsx @@ -22,7 +22,7 @@ import React, { useEffect, useState, } from 'react'; -import { Alert } from '@material-ui/lab'; +import Alert from '@material-ui/lab/Alert'; import { PageFilters, ProductFilters } from '../types'; import { Maybe } from '@backstage/plugin-cost-insights-common'; import { useLocation, useNavigate } from 'react-router-dom'; diff --git a/plugins/cost-insights/src/hooks/useGroups.tsx b/plugins/cost-insights/src/hooks/useGroups.tsx index ec10faa7de..2dc4f624d1 100644 --- a/plugins/cost-insights/src/hooks/useGroups.tsx +++ b/plugins/cost-insights/src/hooks/useGroups.tsx @@ -20,7 +20,7 @@ import React, { useEffect, useState, } from 'react'; -import { Alert } from '@material-ui/lab'; +import Alert from '@material-ui/lab/Alert'; import { costInsightsApiRef } from '../api'; import { MapLoadingToProps, useLoading } from './useLoading'; import { Group, Maybe } from '@backstage/plugin-cost-insights-common'; diff --git a/plugins/cost-insights/src/hooks/useLastCompleteBillingDate.tsx b/plugins/cost-insights/src/hooks/useLastCompleteBillingDate.tsx index 24c5716442..c75e510395 100644 --- a/plugins/cost-insights/src/hooks/useLastCompleteBillingDate.tsx +++ b/plugins/cost-insights/src/hooks/useLastCompleteBillingDate.tsx @@ -21,7 +21,7 @@ import React, { useState, } from 'react'; import * as yup from 'yup'; -import { Alert } from '@material-ui/lab'; +import Alert from '@material-ui/lab/Alert'; import { costInsightsApiRef } from '../api'; import { MapLoadingToProps, useLoading } from './useLoading'; import { DefaultLoadingAction } from '../utils/loading'; diff --git a/plugins/cost-insights/src/hooks/useLoading.tsx b/plugins/cost-insights/src/hooks/useLoading.tsx index 84828491de..9242c05410 100644 --- a/plugins/cost-insights/src/hooks/useLoading.tsx +++ b/plugins/cost-insights/src/hooks/useLoading.tsx @@ -25,7 +25,8 @@ import React, { useReducer, useState, } from 'react'; -import { Backdrop, CircularProgress } from '@material-ui/core'; +import Backdrop from '@material-ui/core/Backdrop'; +import CircularProgress from '@material-ui/core/CircularProgress'; import { Loading } from '../types'; import { DefaultLoadingAction, diff --git a/plugins/cost-insights/src/utils/styles.ts b/plugins/cost-insights/src/utils/styles.ts index c4c330138b..179f7eb295 100644 --- a/plugins/cost-insights/src/utils/styles.ts +++ b/plugins/cost-insights/src/utils/styles.ts @@ -15,14 +15,12 @@ */ import { - createStyles, emphasize, + lighten, darken, getLuminance, - lighten, - makeStyles, - Theme, -} from '@material-ui/core'; +} from '@material-ui/core/styles/colorManipulator'; +import { createStyles, makeStyles, Theme } from '@material-ui/core/styles'; import { CostInsightsTheme, CostInsightsThemeOptions } from '../types'; export const costInsightsLightTheme = { diff --git a/plugins/devtools-backend/src/plugin.ts b/plugins/devtools-backend/src/plugin.ts index 28447e02cc..fb0bb8b048 100644 --- a/plugins/devtools-backend/src/plugin.ts +++ b/plugins/devtools-backend/src/plugin.ts @@ -55,6 +55,10 @@ export const devtoolsPlugin = createBackendPlugin({ httpAuth, }), ); + httpRouter.addAuthPolicy({ + path: '/health', + allow: 'unauthenticated', + }); }, }); }, diff --git a/plugins/example-todo-list-backend/src/plugin.ts b/plugins/example-todo-list-backend/src/plugin.ts index 6bdae201f1..1838a8a165 100644 --- a/plugins/example-todo-list-backend/src/plugin.ts +++ b/plugins/example-todo-list-backend/src/plugin.ts @@ -42,6 +42,10 @@ export const exampleTodoListPlugin = createBackendPlugin({ logger: loggerToWinstonLogger(logger), }), ); + httpRouter.addAuthPolicy({ + path: '/health', + allow: 'unauthenticated', + }); }, }); }, diff --git a/plugins/fossa/.eslintrc.js b/plugins/fossa/.eslintrc.js index e2a53a6ad2..6f6668b53d 100644 --- a/plugins/fossa/.eslintrc.js +++ b/plugins/fossa/.eslintrc.js @@ -1 +1,5 @@ -module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname, { + rules: { + '@backstage/no-top-level-material-ui-4-imports': 'error', + }, +}); diff --git a/plugins/fossa/dev/index.tsx b/plugins/fossa/dev/index.tsx index 78c0ad380b..6560561bd1 100644 --- a/plugins/fossa/dev/index.tsx +++ b/plugins/fossa/dev/index.tsx @@ -21,7 +21,7 @@ import { catalogApiRef, EntityProvider, } from '@backstage/plugin-catalog-react'; -import { Grid } from '@material-ui/core'; +import Grid from '@material-ui/core/Grid'; import React from 'react'; import { EntityFossaCard, fossaPlugin } from '../src'; import { FindingSummary, FossaApi, fossaApiRef } from '../src/api'; diff --git a/plugins/fossa/src/components/FossaCard/FossaCard.tsx b/plugins/fossa/src/components/FossaCard/FossaCard.tsx index fb6c2abdb0..d5be8362fa 100644 --- a/plugins/fossa/src/components/FossaCard/FossaCard.tsx +++ b/plugins/fossa/src/components/FossaCard/FossaCard.tsx @@ -18,7 +18,8 @@ import { useEntity, MissingAnnotationEmptyState, } from '@backstage/plugin-catalog-react'; -import { Grid, Tooltip } from '@material-ui/core'; +import Grid from '@material-ui/core/Grid'; +import Tooltip from '@material-ui/core/Tooltip'; import { makeStyles } from '@material-ui/core/styles'; import Typography from '@material-ui/core/Typography'; import { DateTime } from 'luxon'; diff --git a/plugins/fossa/src/components/FossaPage/FossaPage.tsx b/plugins/fossa/src/components/FossaPage/FossaPage.tsx index 4b82fab220..f3b8114320 100644 --- a/plugins/fossa/src/components/FossaPage/FossaPage.tsx +++ b/plugins/fossa/src/components/FossaPage/FossaPage.tsx @@ -26,9 +26,9 @@ import { humanizeEntityRef, getEntityRelations, } from '@backstage/plugin-catalog-react'; -import { Tooltip } from '@material-ui/core'; +import Tooltip from '@material-ui/core/Tooltip'; import Typography from '@material-ui/core/Typography'; -import { Skeleton } from '@material-ui/lab'; +import Skeleton from '@material-ui/lab/Skeleton'; import { DateTime } from 'luxon'; import * as React from 'react'; import { useMemo, useState } from 'react'; diff --git a/plugins/gcalendar/.eslintrc.js b/plugins/gcalendar/.eslintrc.js index e2a53a6ad2..8a594f42ab 100644 --- a/plugins/gcalendar/.eslintrc.js +++ b/plugins/gcalendar/.eslintrc.js @@ -1 +1,5 @@ -module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname, { + rules: { + '@backstage/no-top-level-material-ui-4-imports': 'error', + }, +}); diff --git a/plugins/gcalendar/src/components/CalendarCard/AttendeeChip.tsx b/plugins/gcalendar/src/components/CalendarCard/AttendeeChip.tsx index 9008f263bf..184a5b0a27 100644 --- a/plugins/gcalendar/src/components/CalendarCard/AttendeeChip.tsx +++ b/plugins/gcalendar/src/components/CalendarCard/AttendeeChip.tsx @@ -15,7 +15,9 @@ */ import React from 'react'; -import { Badge, Chip, makeStyles } from '@material-ui/core'; +import Badge from '@material-ui/core/Badge'; +import Chip from '@material-ui/core/Chip'; +import { makeStyles } from '@material-ui/core/styles'; import CancelIcon from '@material-ui/icons/Cancel'; import CheckIcon from '@material-ui/icons/CheckCircle'; import { EventAttendee, ResponseStatus } from '../../api'; diff --git a/plugins/gcalendar/src/components/CalendarCard/CalendarCard.tsx b/plugins/gcalendar/src/components/CalendarCard/CalendarCard.tsx index 26d6f1eed0..e26e245174 100644 --- a/plugins/gcalendar/src/components/CalendarCard/CalendarCard.tsx +++ b/plugins/gcalendar/src/components/CalendarCard/CalendarCard.tsx @@ -21,7 +21,9 @@ import React, { useState } from 'react'; import { InfoCard, Progress } from '@backstage/core-components'; import { useAnalytics } from '@backstage/core-plugin-api'; -import { Box, IconButton, Typography } from '@material-ui/core'; +import Box from '@material-ui/core/Box'; +import IconButton from '@material-ui/core/IconButton'; +import Typography from '@material-ui/core/Typography'; import PrevIcon from '@material-ui/icons/NavigateBefore'; import NextIcon from '@material-ui/icons/NavigateNext'; diff --git a/plugins/gcalendar/src/components/CalendarCard/CalendarEvent.tsx b/plugins/gcalendar/src/components/CalendarCard/CalendarEvent.tsx index 5ea538df86..d1c9791354 100644 --- a/plugins/gcalendar/src/components/CalendarCard/CalendarEvent.tsx +++ b/plugins/gcalendar/src/components/CalendarCard/CalendarEvent.tsx @@ -24,14 +24,12 @@ import React, { useState } from 'react'; import { useAnalytics } from '@backstage/core-plugin-api'; import { Link } from '@backstage/core-components'; -import { - Box, - Paper, - Popover, - Tooltip, - Typography, - makeStyles, -} from '@material-ui/core'; +import Box from '@material-ui/core/Box'; +import Paper from '@material-ui/core/Paper'; +import Popover from '@material-ui/core/Popover'; +import Tooltip from '@material-ui/core/Tooltip'; +import Typography from '@material-ui/core/Typography'; +import { makeStyles } from '@material-ui/core/styles'; import zoomIcon from '../../icons/zoomIcon.svg'; import { CalendarEventPopoverContent } from './CalendarEventPopoverContent'; diff --git a/plugins/gcalendar/src/components/CalendarCard/CalendarEventPopoverContent.tsx b/plugins/gcalendar/src/components/CalendarCard/CalendarEventPopoverContent.tsx index 45e793470b..36dfa493e4 100644 --- a/plugins/gcalendar/src/components/CalendarCard/CalendarEventPopoverContent.tsx +++ b/plugins/gcalendar/src/components/CalendarCard/CalendarEventPopoverContent.tsx @@ -19,14 +19,12 @@ import DOMPurify from 'dompurify'; import { useAnalytics } from '@backstage/core-plugin-api'; import { Link } from '@backstage/core-components'; -import { - Box, - Divider, - IconButton, - Tooltip, - Typography, - makeStyles, -} from '@material-ui/core'; +import Box from '@material-ui/core/Box'; +import Divider from '@material-ui/core/Divider'; +import IconButton from '@material-ui/core/IconButton'; +import Tooltip from '@material-ui/core/Tooltip'; +import Typography from '@material-ui/core/Typography'; +import { makeStyles } from '@material-ui/core/styles'; import ArrowForwardIcon from '@material-ui/icons/ArrowForward'; import { AttendeeChip } from './AttendeeChip'; diff --git a/plugins/gcalendar/src/components/CalendarCard/CalendarSelect.tsx b/plugins/gcalendar/src/components/CalendarCard/CalendarSelect.tsx index cd48d9ad3e..cd69db2230 100644 --- a/plugins/gcalendar/src/components/CalendarCard/CalendarSelect.tsx +++ b/plugins/gcalendar/src/components/CalendarCard/CalendarSelect.tsx @@ -16,16 +16,14 @@ import { sortBy } from 'lodash'; import React from 'react'; -import { - Checkbox, - FormControl, - Input, - ListItemText, - MenuItem, - Select, - Typography, - makeStyles, -} from '@material-ui/core'; +import Checkbox from '@material-ui/core/Checkbox'; +import FormControl from '@material-ui/core/FormControl'; +import Input from '@material-ui/core/Input'; +import ListItemText from '@material-ui/core/ListItemText'; +import MenuItem from '@material-ui/core/MenuItem'; +import Select from '@material-ui/core/Select'; +import Typography from '@material-ui/core/Typography'; +import { makeStyles } from '@material-ui/core/styles'; import { GCalendar } from '../../api'; diff --git a/plugins/gcalendar/src/components/CalendarCard/SignInContent.tsx b/plugins/gcalendar/src/components/CalendarCard/SignInContent.tsx index 544d761102..4e1690cd84 100644 --- a/plugins/gcalendar/src/components/CalendarCard/SignInContent.tsx +++ b/plugins/gcalendar/src/components/CalendarCard/SignInContent.tsx @@ -15,7 +15,9 @@ */ import React from 'react'; -import { Box, Button, styled } from '@material-ui/core'; +import Box from '@material-ui/core/Box'; +import Button from '@material-ui/core/Button'; +import { styled } from '@material-ui/core/styles'; import { CalendarEvent } from './CalendarEvent'; import { eventsMock } from './signInEventMock'; import { GCalendarEvent } from '../../api'; diff --git a/plugins/home/.eslintrc.js b/plugins/home/.eslintrc.js index e2a53a6ad2..e487f765b2 100644 --- a/plugins/home/.eslintrc.js +++ b/plugins/home/.eslintrc.js @@ -1 +1,5 @@ -module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname, { + rules: { + '@backstage/no-top-level-material-ui-4-imports': 'error', + }, +}); diff --git a/plugins/home/src/assets/TemplateBackstageLogoIcon.tsx b/plugins/home/src/assets/TemplateBackstageLogoIcon.tsx index afa7d94ca0..a8e3c311db 100644 --- a/plugins/home/src/assets/TemplateBackstageLogoIcon.tsx +++ b/plugins/home/src/assets/TemplateBackstageLogoIcon.tsx @@ -15,7 +15,7 @@ */ import React from 'react'; -import { makeStyles } from '@material-ui/core'; +import { makeStyles } from '@material-ui/core/styles'; const useStyles = makeStyles({ svg: { diff --git a/plugins/home/src/componentRenderers/ComponentAccordion.tsx b/plugins/home/src/componentRenderers/ComponentAccordion.tsx index 2a6f74b2dd..6b3242518d 100644 --- a/plugins/home/src/componentRenderers/ComponentAccordion.tsx +++ b/plugins/home/src/componentRenderers/ComponentAccordion.tsx @@ -16,14 +16,12 @@ import React from 'react'; import { SettingsModal } from '@backstage/plugin-home-react'; -import { - Accordion, - AccordionDetails, - AccordionSummary, - Typography, - IconButton, - Theme, -} from '@material-ui/core'; +import Accordion from '@material-ui/core/Accordion'; +import AccordionDetails from '@material-ui/core/AccordionDetails'; +import AccordionSummary from '@material-ui/core/AccordionSummary'; +import Typography from '@material-ui/core/Typography'; +import IconButton from '@material-ui/core/IconButton'; +import { Theme } from '@material-ui/core/styles'; import { makeStyles } from '@material-ui/core/styles'; import ExpandMoreIcon from '@material-ui/icons/ExpandMore'; import SettingsIcon from '@material-ui/icons/Settings'; diff --git a/plugins/home/src/componentRenderers/ComponentTabs/ComponentTabs.tsx b/plugins/home/src/componentRenderers/ComponentTabs/ComponentTabs.tsx index 20fc9c79b6..4e7053bfcb 100644 --- a/plugins/home/src/componentRenderers/ComponentTabs/ComponentTabs.tsx +++ b/plugins/home/src/componentRenderers/ComponentTabs/ComponentTabs.tsx @@ -15,7 +15,8 @@ */ import React from 'react'; -import { Tabs, Tab } from '@material-ui/core'; +import Tabs from '@material-ui/core/Tabs'; +import Tab from '@material-ui/core/Tab'; import { InfoCard } from '@backstage/core-components'; type TabType = { diff --git a/plugins/home/src/components/CustomHomepage/AddWidgetDialog.tsx b/plugins/home/src/components/CustomHomepage/AddWidgetDialog.tsx index ee3ed98cbc..b983983224 100644 --- a/plugins/home/src/components/CustomHomepage/AddWidgetDialog.tsx +++ b/plugins/home/src/components/CustomHomepage/AddWidgetDialog.tsx @@ -17,7 +17,9 @@ import { Widget } from './types'; import List from '@material-ui/core/List'; import ListItem from '@material-ui/core/ListItem'; -import { DialogContent, DialogTitle, ListItemAvatar } from '@material-ui/core'; +import DialogContent from '@material-ui/core/DialogContent'; +import DialogTitle from '@material-ui/core/DialogTitle'; +import ListItemAvatar from '@material-ui/core/ListItemAvatar'; import AddIcon from '@material-ui/icons/Add'; import ListItemText from '@material-ui/core/ListItemText'; import React from 'react'; diff --git a/plugins/home/src/components/CustomHomepage/CustomHomepageButtons.tsx b/plugins/home/src/components/CustomHomepage/CustomHomepageButtons.tsx index 22c88a30c7..5236eef811 100644 --- a/plugins/home/src/components/CustomHomepage/CustomHomepageButtons.tsx +++ b/plugins/home/src/components/CustomHomepage/CustomHomepageButtons.tsx @@ -15,7 +15,7 @@ */ import Button from '@material-ui/core/Button'; import React from 'react'; -import { createStyles, makeStyles, Theme } from '@material-ui/core'; +import { createStyles, makeStyles, Theme } from '@material-ui/core/styles'; import SaveIcon from '@material-ui/icons/Save'; import DeleteIcon from '@material-ui/icons/Delete'; import AddIcon from '@material-ui/icons/Add'; diff --git a/plugins/home/src/components/CustomHomepage/CustomHomepageGrid.tsx b/plugins/home/src/components/CustomHomepage/CustomHomepageGrid.tsx index 07e21ff8e2..700f307dec 100644 --- a/plugins/home/src/components/CustomHomepage/CustomHomepageGrid.tsx +++ b/plugins/home/src/components/CustomHomepage/CustomHomepageGrid.tsx @@ -25,13 +25,13 @@ import { } from '@backstage/core-plugin-api'; import 'react-grid-layout/css/styles.css'; import 'react-resizable/css/styles.css'; +import Dialog from '@material-ui/core/Dialog'; import { createStyles, - Dialog, makeStyles, Theme, useTheme, -} from '@material-ui/core'; +} from '@material-ui/core/styles'; import { compact } from 'lodash'; import useObservable from 'react-use/lib/useObservable'; import { ContentHeader, ErrorBoundary } from '@backstage/core-components'; diff --git a/plugins/home/src/components/CustomHomepage/WidgetSettingsOverlay.tsx b/plugins/home/src/components/CustomHomepage/WidgetSettingsOverlay.tsx index 735720ac13..5fe4f65136 100644 --- a/plugins/home/src/components/CustomHomepage/WidgetSettingsOverlay.tsx +++ b/plugins/home/src/components/CustomHomepage/WidgetSettingsOverlay.tsx @@ -13,15 +13,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { - createStyles, - Dialog, - DialogContent, - Grid, - makeStyles, - Theme, - Tooltip, -} from '@material-ui/core'; +import Dialog from '@material-ui/core/Dialog'; +import DialogContent from '@material-ui/core/DialogContent'; +import Grid from '@material-ui/core/Grid'; +import Tooltip from '@material-ui/core/Tooltip'; +import { createStyles, makeStyles, Theme } from '@material-ui/core/styles'; import IconButton from '@material-ui/core/IconButton'; import SettingsIcon from '@material-ui/icons/Settings'; import DeleteIcon from '@material-ui/icons/Delete'; diff --git a/plugins/home/src/components/StarredEntityListItem/StarredEntityListItem.tsx b/plugins/home/src/components/StarredEntityListItem/StarredEntityListItem.tsx index 2a8960e469..579116b9a9 100644 --- a/plugins/home/src/components/StarredEntityListItem/StarredEntityListItem.tsx +++ b/plugins/home/src/components/StarredEntityListItem/StarredEntityListItem.tsx @@ -15,13 +15,11 @@ */ import { Entity, stringifyEntityRef } from '@backstage/catalog-model'; import { entityRouteParams } from '@backstage/plugin-catalog-react'; -import { - ListItem, - ListItemIcon, - Tooltip, - IconButton, - ListItemText, -} from '@material-ui/core'; +import ListItem from '@material-ui/core/ListItem'; +import ListItemIcon from '@material-ui/core/ListItemIcon'; +import Tooltip from '@material-ui/core/Tooltip'; +import IconButton from '@material-ui/core/IconButton'; +import ListItemText from '@material-ui/core/ListItemText'; import React from 'react'; import { Link } from 'react-router-dom'; import { entityRouteRef } from '@backstage/plugin-catalog-react'; diff --git a/plugins/home/src/components/VisitList/ItemCategory.tsx b/plugins/home/src/components/VisitList/ItemCategory.tsx index 0f9636ce31..953bc12fc7 100644 --- a/plugins/home/src/components/VisitList/ItemCategory.tsx +++ b/plugins/home/src/components/VisitList/ItemCategory.tsx @@ -15,7 +15,8 @@ */ import React from 'react'; -import { Chip, makeStyles } from '@material-ui/core'; +import Chip from '@material-ui/core/Chip'; +import { makeStyles } from '@material-ui/core/styles'; import { colorVariants } from '@backstage/theme'; import { Visit } from '../../api/VisitsApi'; import { CompoundEntityRef, parseEntityRef } from '@backstage/catalog-model'; diff --git a/plugins/home/src/components/VisitList/ItemDetail.tsx b/plugins/home/src/components/VisitList/ItemDetail.tsx index 3f55557f73..fed8c5549c 100644 --- a/plugins/home/src/components/VisitList/ItemDetail.tsx +++ b/plugins/home/src/components/VisitList/ItemDetail.tsx @@ -15,7 +15,7 @@ */ import React from 'react'; -import { Typography } from '@material-ui/core'; +import Typography from '@material-ui/core/Typography'; import { Visit } from '../../api/VisitsApi'; import { DateTime } from 'luxon'; diff --git a/plugins/home/src/components/VisitList/ItemName.tsx b/plugins/home/src/components/VisitList/ItemName.tsx index 965ad80d5e..00c2273993 100644 --- a/plugins/home/src/components/VisitList/ItemName.tsx +++ b/plugins/home/src/components/VisitList/ItemName.tsx @@ -15,7 +15,8 @@ */ import React from 'react'; -import { Typography, makeStyles } from '@material-ui/core'; +import Typography from '@material-ui/core/Typography'; +import { makeStyles } from '@material-ui/core/styles'; import { Visit } from '../../api/VisitsApi'; import { Link } from '@backstage/core-components'; diff --git a/plugins/home/src/components/VisitList/VisitList.tsx b/plugins/home/src/components/VisitList/VisitList.tsx index 7e79d5439f..225547d5a4 100644 --- a/plugins/home/src/components/VisitList/VisitList.tsx +++ b/plugins/home/src/components/VisitList/VisitList.tsx @@ -15,7 +15,8 @@ */ import React from 'react'; -import { Collapse, List } from '@material-ui/core'; +import Collapse from '@material-ui/core/Collapse'; +import List from '@material-ui/core/List'; import { Visit } from '../../api/VisitsApi'; import { VisitListItem } from './VisitListItem'; import { ItemDetailType } from './ItemDetail'; diff --git a/plugins/home/src/components/VisitList/VisitListEmpty.tsx b/plugins/home/src/components/VisitList/VisitListEmpty.tsx index 3996f0f863..b956361a2e 100644 --- a/plugins/home/src/components/VisitList/VisitListEmpty.tsx +++ b/plugins/home/src/components/VisitList/VisitListEmpty.tsx @@ -15,7 +15,7 @@ */ import React from 'react'; -import { Typography } from '@material-ui/core'; +import Typography from '@material-ui/core/Typography'; export const VisitListEmpty = () => ( <> diff --git a/plugins/home/src/components/VisitList/VisitListFew.tsx b/plugins/home/src/components/VisitList/VisitListFew.tsx index c28f1af931..acee23af4f 100644 --- a/plugins/home/src/components/VisitList/VisitListFew.tsx +++ b/plugins/home/src/components/VisitList/VisitListFew.tsx @@ -15,7 +15,7 @@ */ import React from 'react'; -import { Typography } from '@material-ui/core'; +import Typography from '@material-ui/core/Typography'; export const VisitListFew = () => ( <> diff --git a/plugins/home/src/components/VisitList/VisitListItem.tsx b/plugins/home/src/components/VisitList/VisitListItem.tsx index 20087c884a..f9ef3ecf35 100644 --- a/plugins/home/src/components/VisitList/VisitListItem.tsx +++ b/plugins/home/src/components/VisitList/VisitListItem.tsx @@ -15,12 +15,10 @@ */ import React from 'react'; -import { - ListItem, - ListItemAvatar, - ListItemText, - makeStyles, -} from '@material-ui/core'; +import ListItem from '@material-ui/core/ListItem'; +import ListItemAvatar from '@material-ui/core/ListItemAvatar'; +import ListItemText from '@material-ui/core/ListItemText'; +import { makeStyles } from '@material-ui/core/styles'; import { Visit } from '../../api/VisitsApi'; import { ItemName } from './ItemName'; import { ItemDetail, ItemDetailType } from './ItemDetail'; diff --git a/plugins/home/src/components/VisitList/VisitListSkeleton.tsx b/plugins/home/src/components/VisitList/VisitListSkeleton.tsx index 94ba840d9d..c597798e63 100644 --- a/plugins/home/src/components/VisitList/VisitListSkeleton.tsx +++ b/plugins/home/src/components/VisitList/VisitListSkeleton.tsx @@ -15,14 +15,12 @@ */ import React from 'react'; -import { - Collapse, - ListItem, - ListItemAvatar, - ListItemText, - makeStyles, -} from '@material-ui/core'; -import { Skeleton } from '@material-ui/lab'; +import Collapse from '@material-ui/core/Collapse'; +import ListItem from '@material-ui/core/ListItem'; +import ListItemAvatar from '@material-ui/core/ListItemAvatar'; +import ListItemText from '@material-ui/core/ListItemText'; +import { makeStyles } from '@material-ui/core/styles'; +import Skeleton from '@material-ui/lab/Skeleton'; const useStyles = makeStyles(_theme => ({ skeleton: { diff --git a/plugins/home/src/homePageComponents/CompanyLogo/CompanyLogo.stories.tsx b/plugins/home/src/homePageComponents/CompanyLogo/CompanyLogo.stories.tsx index da5c318af2..9ce1ab9e6b 100644 --- a/plugins/home/src/homePageComponents/CompanyLogo/CompanyLogo.stories.tsx +++ b/plugins/home/src/homePageComponents/CompanyLogo/CompanyLogo.stories.tsx @@ -20,7 +20,8 @@ import { rootRouteRef } from '../../routes'; import { wrapInTestApp, TestApiProvider } from '@backstage/test-utils'; import { configApiRef } from '@backstage/core-plugin-api'; import { ConfigReader } from '@backstage/core-app-api'; -import { Grid, makeStyles } from '@material-ui/core'; +import Grid from '@material-ui/core/Grid'; +import { makeStyles } from '@material-ui/core/styles'; import React, { ComponentType, PropsWithChildren } from 'react'; export default { diff --git a/plugins/home/src/homePageComponents/CompanyLogo/CompanyLogo.test.tsx b/plugins/home/src/homePageComponents/CompanyLogo/CompanyLogo.test.tsx index 3cd08bc70b..8664e10c42 100644 --- a/plugins/home/src/homePageComponents/CompanyLogo/CompanyLogo.test.tsx +++ b/plugins/home/src/homePageComponents/CompanyLogo/CompanyLogo.test.tsx @@ -17,7 +17,7 @@ import { CompanyLogo } from './CompanyLogo'; import { renderInTestApp, TestApiProvider } from '@backstage/test-utils'; import { configApiRef } from '@backstage/core-plugin-api'; import { ConfigReader } from '@backstage/core-app-api'; -import { Typography } from '@material-ui/core'; +import Typography from '@material-ui/core/Typography'; import React from 'react'; describe('', () => { diff --git a/plugins/home/src/homePageComponents/CompanyLogo/CompanyLogo.tsx b/plugins/home/src/homePageComponents/CompanyLogo/CompanyLogo.tsx index 998c2d46b1..93c3d46f92 100644 --- a/plugins/home/src/homePageComponents/CompanyLogo/CompanyLogo.tsx +++ b/plugins/home/src/homePageComponents/CompanyLogo/CompanyLogo.tsx @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { Typography } from '@material-ui/core'; +import Typography from '@material-ui/core/Typography'; import { configApiRef, useApi } from '@backstage/core-plugin-api'; import React from 'react'; diff --git a/plugins/home/src/homePageComponents/FeaturedDocsCard/Content.tsx b/plugins/home/src/homePageComponents/FeaturedDocsCard/Content.tsx index a7ba4d5e9b..769b68f5e7 100644 --- a/plugins/home/src/homePageComponents/FeaturedDocsCard/Content.tsx +++ b/plugins/home/src/homePageComponents/FeaturedDocsCard/Content.tsx @@ -31,7 +31,8 @@ import { import { useApi } from '@backstage/core-plugin-api'; import { EntityFilterQuery } from '@backstage/catalog-client'; -import { makeStyles, Typography } from '@material-ui/core'; +import Typography from '@material-ui/core/Typography'; +import { makeStyles } from '@material-ui/core/styles'; import { stringifyEntityRef } from '@backstage/catalog-model'; /** diff --git a/plugins/home/src/homePageComponents/FeaturedDocsCard/FeaturedDocsCard.stories.tsx b/plugins/home/src/homePageComponents/FeaturedDocsCard/FeaturedDocsCard.stories.tsx index 91f0dbf27e..4d04a1788c 100644 --- a/plugins/home/src/homePageComponents/FeaturedDocsCard/FeaturedDocsCard.stories.tsx +++ b/plugins/home/src/homePageComponents/FeaturedDocsCard/FeaturedDocsCard.stories.tsx @@ -18,7 +18,7 @@ import { FeaturedDocsCard } from '../../plugin'; import React, { ComponentType, PropsWithChildren } from 'react'; import { wrapInTestApp, TestApiProvider } from '@backstage/test-utils'; import { catalogApiRef, entityRouteRef } from '@backstage/plugin-catalog-react'; -import { Grid } from '@material-ui/core'; +import Grid from '@material-ui/core/Grid'; const docsEntities = [ { diff --git a/plugins/home/src/homePageComponents/RandomJoke/Actions.tsx b/plugins/home/src/homePageComponents/RandomJoke/Actions.tsx index cebb0400ab..8cbed8dace 100644 --- a/plugins/home/src/homePageComponents/RandomJoke/Actions.tsx +++ b/plugins/home/src/homePageComponents/RandomJoke/Actions.tsx @@ -16,7 +16,7 @@ import React from 'react'; -import { Button } from '@material-ui/core'; +import Button from '@material-ui/core/Button'; import { useRandomJoke } from './Context'; export const Actions = () => { diff --git a/plugins/home/src/homePageComponents/RandomJoke/Settings.tsx b/plugins/home/src/homePageComponents/RandomJoke/Settings.tsx index 20e7f0b813..7cbf231ac4 100644 --- a/plugins/home/src/homePageComponents/RandomJoke/Settings.tsx +++ b/plugins/home/src/homePageComponents/RandomJoke/Settings.tsx @@ -13,13 +13,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { - FormControl, - FormLabel, - RadioGroup, - FormControlLabel, - Radio, -} from '@material-ui/core'; +import FormControl from '@material-ui/core/FormControl'; +import FormLabel from '@material-ui/core/FormLabel'; +import RadioGroup from '@material-ui/core/RadioGroup'; +import FormControlLabel from '@material-ui/core/FormControlLabel'; +import Radio from '@material-ui/core/Radio'; import React from 'react'; import { useRandomJoke, JokeType } from './Context'; import upperFirst from 'lodash/upperFirst'; diff --git a/plugins/home/src/homePageComponents/StarredEntities/Content.tsx b/plugins/home/src/homePageComponents/StarredEntities/Content.tsx index b3d4caf44e..214f51d81c 100644 --- a/plugins/home/src/homePageComponents/StarredEntities/Content.tsx +++ b/plugins/home/src/homePageComponents/StarredEntities/Content.tsx @@ -21,7 +21,10 @@ import { import { Entity, stringifyEntityRef } from '@backstage/catalog-model'; import { useApi } from '@backstage/core-plugin-api'; import { Progress, ResponseErrorPanel } from '@backstage/core-components'; -import { List, Typography, Tabs, Tab } from '@material-ui/core'; +import List from '@material-ui/core/List'; +import Typography from '@material-ui/core/Typography'; +import Tabs from '@material-ui/core/Tabs'; +import Tab from '@material-ui/core/Tab'; import React from 'react'; import useAsync from 'react-use/lib/useAsync'; import { StarredEntityListItem } from '../../components/StarredEntityListItem/StarredEntityListItem'; diff --git a/plugins/home/src/homePageComponents/StarredEntities/StarredEntities.stories.tsx b/plugins/home/src/homePageComponents/StarredEntities/StarredEntities.stories.tsx index 8172041f94..d260a1681b 100644 --- a/plugins/home/src/homePageComponents/StarredEntities/StarredEntities.stories.tsx +++ b/plugins/home/src/homePageComponents/StarredEntities/StarredEntities.stories.tsx @@ -22,7 +22,7 @@ import { MockStarredEntitiesApi, entityRouteRef, } from '@backstage/plugin-catalog-react'; -import { Grid } from '@material-ui/core'; +import Grid from '@material-ui/core/Grid'; import React, { ComponentType, PropsWithChildren } from 'react'; const starredEntitiesApi = new MockStarredEntitiesApi(); diff --git a/plugins/home/src/homePageComponents/Toolkit/Content.tsx b/plugins/home/src/homePageComponents/Toolkit/Content.tsx index a1ada00b0b..2547184c44 100644 --- a/plugins/home/src/homePageComponents/Toolkit/Content.tsx +++ b/plugins/home/src/homePageComponents/Toolkit/Content.tsx @@ -15,12 +15,10 @@ */ import { Link } from '@backstage/core-components'; -import { - makeStyles, - List, - ListItemIcon, - ListItemText, -} from '@material-ui/core'; +import List from '@material-ui/core/List'; +import ListItemIcon from '@material-ui/core/ListItemIcon'; +import ListItemText from '@material-ui/core/ListItemText'; +import { makeStyles } from '@material-ui/core/styles'; import React from 'react'; import { useToolkit, Tool } from './Context'; diff --git a/plugins/home/src/homePageComponents/Toolkit/Toolkit.stories.tsx b/plugins/home/src/homePageComponents/Toolkit/Toolkit.stories.tsx index 9a7ab95fa1..8ab0b2a8bd 100644 --- a/plugins/home/src/homePageComponents/Toolkit/Toolkit.stories.tsx +++ b/plugins/home/src/homePageComponents/Toolkit/Toolkit.stories.tsx @@ -16,7 +16,7 @@ import { InfoCard } from '@backstage/core-components'; import { wrapInTestApp } from '@backstage/test-utils'; -import { Grid } from '@material-ui/core'; +import Grid from '@material-ui/core/Grid'; import React, { ComponentType, PropsWithChildren } from 'react'; import { ComponentAccordion } from '../../componentRenderers'; import { HomePageToolkit } from '../../plugin'; diff --git a/plugins/home/src/homePageComponents/VisitedByType/Actions.tsx b/plugins/home/src/homePageComponents/VisitedByType/Actions.tsx index 45e67802c9..cad204d0e3 100644 --- a/plugins/home/src/homePageComponents/VisitedByType/Actions.tsx +++ b/plugins/home/src/homePageComponents/VisitedByType/Actions.tsx @@ -15,7 +15,7 @@ */ import React, { useCallback } from 'react'; -import { Button } from '@material-ui/core'; +import Button from '@material-ui/core/Button'; import { useContext } from './Context'; export const Actions = () => { diff --git a/plugins/home/src/homePageComponents/VisitedByType/HomePageVisitedByType.stories.tsx b/plugins/home/src/homePageComponents/VisitedByType/HomePageVisitedByType.stories.tsx index d20d5344ae..baf2a092d9 100644 --- a/plugins/home/src/homePageComponents/VisitedByType/HomePageVisitedByType.stories.tsx +++ b/plugins/home/src/homePageComponents/VisitedByType/HomePageVisitedByType.stories.tsx @@ -17,7 +17,7 @@ import React from 'react'; import { TestApiProvider, wrapInTestApp } from '@backstage/test-utils'; import { ComponentType, PropsWithChildren } from 'react'; -import { Grid } from '@material-ui/core'; +import Grid from '@material-ui/core/Grid'; import { homePlugin } from '../../plugin'; import { Visit, visitsApiRef } from '../../api/VisitsApi'; import { createCardExtension } from '@backstage/plugin-home-react'; diff --git a/plugins/home/src/homePageComponents/WelcomeTitle/WelcomeTitle.tsx b/plugins/home/src/homePageComponents/WelcomeTitle/WelcomeTitle.tsx index 9981d91873..62eade6fd0 100644 --- a/plugins/home/src/homePageComponents/WelcomeTitle/WelcomeTitle.tsx +++ b/plugins/home/src/homePageComponents/WelcomeTitle/WelcomeTitle.tsx @@ -18,7 +18,8 @@ import { identityApiRef, useApi, } from '@backstage/core-plugin-api'; -import { Tooltip, Typography } from '@material-ui/core'; +import Tooltip from '@material-ui/core/Tooltip'; +import Typography from '@material-ui/core/Typography'; import React, { useEffect, useMemo } from 'react'; import useAsync from 'react-use/lib/useAsync'; import { getTimeBasedGreeting } from './timeUtil'; diff --git a/plugins/jenkins/.eslintrc.js b/plugins/jenkins/.eslintrc.js index e2a53a6ad2..a2d8179106 100644 --- a/plugins/jenkins/.eslintrc.js +++ b/plugins/jenkins/.eslintrc.js @@ -1 +1,5 @@ -module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname, { + rules: { + '@backstage/no-top-level-material-ui-4-imports': 'error', + }, +}); diff --git a/plugins/jenkins/src/components/BuildWithStepsPage/BuildWithStepsPage.tsx b/plugins/jenkins/src/components/BuildWithStepsPage/BuildWithStepsPage.tsx index 3b52c65930..88c7d12ff6 100644 --- a/plugins/jenkins/src/components/BuildWithStepsPage/BuildWithStepsPage.tsx +++ b/plugins/jenkins/src/components/BuildWithStepsPage/BuildWithStepsPage.tsx @@ -13,16 +13,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { - Box, - Paper, - Table, - TableBody, - TableCell, - TableContainer, - TableRow, - Typography, -} from '@material-ui/core'; +import Box from '@material-ui/core/Box'; +import Paper from '@material-ui/core/Paper'; +import Table from '@material-ui/core/Table'; +import TableBody from '@material-ui/core/TableBody'; +import TableCell from '@material-ui/core/TableCell'; +import TableContainer from '@material-ui/core/TableContainer'; +import TableRow from '@material-ui/core/TableRow'; +import Typography from '@material-ui/core/Typography'; import { makeStyles } from '@material-ui/core/styles'; import ExternalLinkIcon from '@material-ui/icons/Launch'; import React from 'react'; diff --git a/plugins/jenkins/src/components/BuildWithStepsPage/lib/ActionOutput/ActionOutput.tsx b/plugins/jenkins/src/components/BuildWithStepsPage/lib/ActionOutput/ActionOutput.tsx index 2cfc4eb073..750c79ff9f 100644 --- a/plugins/jenkins/src/components/BuildWithStepsPage/lib/ActionOutput/ActionOutput.tsx +++ b/plugins/jenkins/src/components/BuildWithStepsPage/lib/ActionOutput/ActionOutput.tsx @@ -14,12 +14,10 @@ * limitations under the License. */ -import { - Accordion, - AccordionDetails, - AccordionSummary, - Typography, -} from '@material-ui/core'; +import Accordion from '@material-ui/core/Accordion'; +import AccordionDetails from '@material-ui/core/AccordionDetails'; +import AccordionSummary from '@material-ui/core/AccordionSummary'; +import Typography from '@material-ui/core/Typography'; import { makeStyles } from '@material-ui/core/styles'; import ExpandMoreIcon from '@material-ui/icons/ExpandMore'; import React, { useEffect } from 'react'; diff --git a/plugins/jenkins/src/components/BuildsPage/lib/CITable/CITable.tsx b/plugins/jenkins/src/components/BuildsPage/lib/CITable/CITable.tsx index 1f5d272c61..5318c4feb1 100644 --- a/plugins/jenkins/src/components/BuildsPage/lib/CITable/CITable.tsx +++ b/plugins/jenkins/src/components/BuildsPage/lib/CITable/CITable.tsx @@ -14,7 +14,8 @@ * limitations under the License. */ import { Table, TableColumn } from '@backstage/core-components'; -import { Box, Typography } from '@material-ui/core'; +import Box from '@material-ui/core/Box'; +import Typography from '@material-ui/core/Typography'; import RetryIcon from '@material-ui/icons/Replay'; import { default as React } from 'react'; import { Project } from '../../../../api/JenkinsApi'; diff --git a/plugins/jenkins/src/components/BuildsPage/lib/CITable/columns.tsx b/plugins/jenkins/src/components/BuildsPage/lib/CITable/columns.tsx index f18d3e5b21..cdf2b2febe 100644 --- a/plugins/jenkins/src/components/BuildsPage/lib/CITable/columns.tsx +++ b/plugins/jenkins/src/components/BuildsPage/lib/CITable/columns.tsx @@ -16,7 +16,10 @@ import { Link, Progress, TableColumn } from '@backstage/core-components'; import { alertApiRef, useApi, useRouteRef } from '@backstage/core-plugin-api'; import { useEntityPermission } from '@backstage/plugin-catalog-react/alpha'; -import { Box, IconButton, Tooltip, Typography } from '@material-ui/core'; +import Box from '@material-ui/core/Box'; +import IconButton from '@material-ui/core/IconButton'; +import Tooltip from '@material-ui/core/Tooltip'; +import Typography from '@material-ui/core/Typography'; import RetryIcon from '@material-ui/icons/Replay'; import VisibilityIcon from '@material-ui/icons/Visibility'; import HistoryIcon from '@material-ui/icons/History'; diff --git a/plugins/jenkins/src/components/Cards/Cards.tsx b/plugins/jenkins/src/components/Cards/Cards.tsx index 1cbc3e5d9f..0ae46a346f 100644 --- a/plugins/jenkins/src/components/Cards/Cards.tsx +++ b/plugins/jenkins/src/components/Cards/Cards.tsx @@ -14,7 +14,8 @@ * limitations under the License. */ -import { LinearProgress, makeStyles } from '@material-ui/core'; +import LinearProgress from '@material-ui/core/LinearProgress'; +import { makeStyles } from '@material-ui/core/styles'; import ExternalLinkIcon from '@material-ui/icons/Launch'; import { DateTime, Duration } from 'luxon'; import React from 'react'; diff --git a/plugins/jenkins/src/components/JobRunsTable/JobRunsTable.tsx b/plugins/jenkins/src/components/JobRunsTable/JobRunsTable.tsx index 78b66b98eb..9fa2f71448 100644 --- a/plugins/jenkins/src/components/JobRunsTable/JobRunsTable.tsx +++ b/plugins/jenkins/src/components/JobRunsTable/JobRunsTable.tsx @@ -14,7 +14,10 @@ * limitations under the License. */ import { Link, Table, TableColumn } from '@backstage/core-components'; -import { Box, IconButton, Tooltip, Typography } from '@material-ui/core'; +import Box from '@material-ui/core/Box'; +import IconButton from '@material-ui/core/IconButton'; +import Tooltip from '@material-ui/core/Tooltip'; +import Typography from '@material-ui/core/Typography'; import { default as React } from 'react'; import JenkinsLogo from './../../assets/JenkinsLogo.svg'; import { useJobRuns } from './../useJobRuns'; diff --git a/plugins/kafka/.eslintrc.js b/plugins/kafka/.eslintrc.js index e2a53a6ad2..a2d8179106 100644 --- a/plugins/kafka/.eslintrc.js +++ b/plugins/kafka/.eslintrc.js @@ -1 +1,5 @@ -module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname, { + rules: { + '@backstage/no-top-level-material-ui-4-imports': 'error', + }, +}); diff --git a/plugins/kafka/src/components/ConsumerGroupOffsets/ConsumerGroupOffsets.tsx b/plugins/kafka/src/components/ConsumerGroupOffsets/ConsumerGroupOffsets.tsx index d166195cf9..5aab647b25 100644 --- a/plugins/kafka/src/components/ConsumerGroupOffsets/ConsumerGroupOffsets.tsx +++ b/plugins/kafka/src/components/ConsumerGroupOffsets/ConsumerGroupOffsets.tsx @@ -14,7 +14,9 @@ * limitations under the License. */ -import { Box, Grid, Typography } from '@material-ui/core'; +import Box from '@material-ui/core/Box'; +import Grid from '@material-ui/core/Grid'; +import Typography from '@material-ui/core/Typography'; import RetryIcon from '@material-ui/icons/Replay'; import React from 'react'; import { useConsumerGroupsOffsetsForEntity } from './useConsumerGroupsOffsetsForEntity'; diff --git a/plugins/lighthouse/.eslintrc.js b/plugins/lighthouse/.eslintrc.js index e2a53a6ad2..a2d8179106 100644 --- a/plugins/lighthouse/.eslintrc.js +++ b/plugins/lighthouse/.eslintrc.js @@ -1 +1,5 @@ -module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname, { + rules: { + '@backstage/no-top-level-material-ui-4-imports': 'error', + }, +}); diff --git a/plugins/lighthouse/src/components/AuditList/AuditListForEntity.tsx b/plugins/lighthouse/src/components/AuditList/AuditListForEntity.tsx index 4c8de4d786..779309c648 100644 --- a/plugins/lighthouse/src/components/AuditList/AuditListForEntity.tsx +++ b/plugins/lighthouse/src/components/AuditList/AuditListForEntity.tsx @@ -24,7 +24,7 @@ import { Progress, WarningPanel, } from '@backstage/core-components'; -import { Button } from '@material-ui/core'; +import Button from '@material-ui/core/Button'; import { resolvePath, useNavigate } from 'react-router-dom'; import { useEntity } from '@backstage/plugin-catalog-react'; import { useRouteRef } from '@backstage/core-plugin-api'; diff --git a/plugins/lighthouse/src/components/AuditList/index.tsx b/plugins/lighthouse/src/components/AuditList/index.tsx index f030ec4708..77df8217c5 100644 --- a/plugins/lighthouse/src/components/AuditList/index.tsx +++ b/plugins/lighthouse/src/components/AuditList/index.tsx @@ -14,7 +14,8 @@ * limitations under the License. */ -import { Button, Grid } from '@material-ui/core'; +import Button from '@material-ui/core/Button'; +import Grid from '@material-ui/core/Grid'; import Pagination from '@material-ui/lab/Pagination'; import React, { ChangeEvent, ReactNode, useMemo, useState } from 'react'; import { useNavigate } from 'react-router-dom'; diff --git a/plugins/lighthouse/src/components/AuditView/index.tsx b/plugins/lighthouse/src/components/AuditView/index.tsx index 8d82f920cd..66a3880148 100644 --- a/plugins/lighthouse/src/components/AuditView/index.tsx +++ b/plugins/lighthouse/src/components/AuditView/index.tsx @@ -14,15 +14,13 @@ * limitations under the License. */ -import { - Button, - Grid, - List, - ListItem, - ListItemIcon, - ListItemText, - makeStyles, -} from '@material-ui/core'; +import Button from '@material-ui/core/Button'; +import Grid from '@material-ui/core/Grid'; +import List from '@material-ui/core/List'; +import ListItem from '@material-ui/core/ListItem'; +import ListItemIcon from '@material-ui/core/ListItemIcon'; +import ListItemText from '@material-ui/core/ListItemText'; +import { makeStyles } from '@material-ui/core/styles'; import Alert from '@material-ui/lab/Alert'; import React, { ReactNode, useEffect, useState } from 'react'; import { diff --git a/plugins/lighthouse/src/components/CreateAudit/index.tsx b/plugins/lighthouse/src/components/CreateAudit/index.tsx index a76b031796..1e941256e8 100644 --- a/plugins/lighthouse/src/components/CreateAudit/index.tsx +++ b/plugins/lighthouse/src/components/CreateAudit/index.tsx @@ -14,15 +14,13 @@ * limitations under the License. */ -import { - Button, - Grid, - List, - ListItem, - makeStyles, - MenuItem, - TextField, -} from '@material-ui/core'; +import Button from '@material-ui/core/Button'; +import Grid from '@material-ui/core/Grid'; +import List from '@material-ui/core/List'; +import ListItem from '@material-ui/core/ListItem'; +import MenuItem from '@material-ui/core/MenuItem'; +import TextField from '@material-ui/core/TextField'; +import { makeStyles } from '@material-ui/core/styles'; import React, { useCallback, useState } from 'react'; import { useNavigate } from 'react-router-dom'; import { diff --git a/plugins/lighthouse/src/components/Intro/index.tsx b/plugins/lighthouse/src/components/Intro/index.tsx index 4c102b7587..044d4cc408 100644 --- a/plugins/lighthouse/src/components/Intro/index.tsx +++ b/plugins/lighthouse/src/components/Intro/index.tsx @@ -14,7 +14,11 @@ * limitations under the License. */ -import { Button, Grid, makeStyles, Tab, Tabs } from '@material-ui/core'; +import Button from '@material-ui/core/Button'; +import Grid from '@material-ui/core/Grid'; +import Tab from '@material-ui/core/Tab'; +import Tabs from '@material-ui/core/Tabs'; +import { makeStyles } from '@material-ui/core/styles'; import CloseIcon from '@material-ui/icons/Close'; import React, { useState } from 'react'; import useLocalStorage from 'react-use/lib/useLocalStorage'; diff --git a/plugins/linguist-backend/src/plugin.ts b/plugins/linguist-backend/src/plugin.ts index e569b00233..e6de4297ad 100644 --- a/plugins/linguist-backend/src/plugin.ts +++ b/plugins/linguist-backend/src/plugin.ts @@ -68,6 +68,10 @@ export const linguistPlugin = createBackendPlugin({ tokenManager, }), ); + httpRouter.addAuthPolicy({ + path: '/health', + allow: 'unauthenticated', + }); }, }); }, diff --git a/plugins/nomad-backend/src/plugin.ts b/plugins/nomad-backend/src/plugin.ts index f3a43c4a91..3c6a34f5fa 100644 --- a/plugins/nomad-backend/src/plugin.ts +++ b/plugins/nomad-backend/src/plugin.ts @@ -46,6 +46,10 @@ export const nomadPlugin = createBackendPlugin({ config, }), ); + httpRouter.addAuthPolicy({ + path: '/health', + allow: 'unauthenticated', + }); }, }); }, diff --git a/plugins/notifications-backend/package.json b/plugins/notifications-backend/package.json index 68c7b9b22b..1e86c6bcda 100644 --- a/plugins/notifications-backend/package.json +++ b/plugins/notifications-backend/package.json @@ -18,7 +18,8 @@ "main": "src/index.ts", "types": "src/index.ts", "files": [ - "dist" + "dist", + "migrations/**/*.{js,d.ts}" ], "scripts": { "build": "backstage-cli package build", diff --git a/plugins/notifications-backend/src/database/DatabaseNotificationsStore.test.ts b/plugins/notifications-backend/src/database/DatabaseNotificationsStore.test.ts index e8cb9daca5..6204629821 100644 --- a/plugins/notifications-backend/src/database/DatabaseNotificationsStore.test.ts +++ b/plugins/notifications-backend/src/database/DatabaseNotificationsStore.test.ts @@ -405,8 +405,7 @@ describe.each(databases.eachSupportedId())( it('should sort created asc', async () => { const notificationsCreatedAsc = await storage.getNotifications({ user, - sort: 'created', - sortOrder: 'asc', + orderField: [{ field: 'created', order: 'asc' }], }); expect(notificationsCreatedAsc.map(idOnly)).toEqual([id1, id3, id2]); }); @@ -414,8 +413,7 @@ describe.each(databases.eachSupportedId())( it('should sort created desc', async () => { const notificationsCreatedDesc = await storage.getNotifications({ user, - sort: 'created', - sortOrder: 'desc', + orderField: [{ field: 'created', order: 'desc' }], }); expect(notificationsCreatedDesc.map(idOnly)).toEqual([id2, id3, id1]); }); @@ -423,8 +421,7 @@ describe.each(databases.eachSupportedId())( it('should sort topic asc', async () => { const notificationsTopicAsc = await storage.getNotifications({ user, - sort: 'topic', - sortOrder: 'asc', + orderField: [{ field: 'topic', order: 'asc' }], }); expect(notificationsTopicAsc.map(idOnly)).toEqual([id1, id3, id2]); }); @@ -432,8 +429,7 @@ describe.each(databases.eachSupportedId())( it('should sort topic desc', async () => { const notificationsTopicDesc = await storage.getNotifications({ user, - sort: 'topic', - sortOrder: 'desc', + orderField: [{ field: 'topic', order: 'desc' }], }); expect(notificationsTopicDesc.map(idOnly)).toEqual([id2, id3, id1]); }); @@ -441,8 +437,7 @@ describe.each(databases.eachSupportedId())( it('should sort origin asc', async () => { const notificationsOrigin = await storage.getNotifications({ user, - sort: 'origin', - sortOrder: 'asc', + orderField: [{ field: 'origin', order: 'asc' }], limit: 2, offset: 0, }); @@ -452,8 +447,7 @@ describe.each(databases.eachSupportedId())( it('should sort origin desc', async () => { const notificationsOriginNext = await storage.getNotifications({ user, - sort: 'origin', - sortOrder: 'desc', + orderField: [{ field: 'origin', order: 'desc' }], limit: 2, offset: 2, }); diff --git a/plugins/notifications-backend/src/database/DatabaseNotificationsStore.ts b/plugins/notifications-backend/src/database/DatabaseNotificationsStore.ts index 722489add4..f4f1f174be 100644 --- a/plugins/notifications-backend/src/database/DatabaseNotificationsStore.ts +++ b/plugins/notifications-backend/src/database/DatabaseNotificationsStore.ts @@ -160,7 +160,7 @@ export class DatabaseNotificationsStore implements NotificationsStore { private getNotificationsBaseQuery = ( options: NotificationGetOptions | NotificationModifyOptions, ) => { - const { user } = options; + const { user, orderField } = options; const subQuery = this.db('notification') .select(NOTIFICATION_COLUMNS) @@ -171,10 +171,12 @@ export class DatabaseNotificationsStore implements NotificationsStore { q.where('user', user).orWhereNull('user'); }); - if (options.sort !== undefined && options.sort !== null) { - query.orderBy(options.sort, options.sortOrder ?? 'desc'); - } else if (options.sort !== null) { - query.orderBy('created', options.sortOrder ?? 'desc'); + if (orderField && orderField.length > 0) { + orderField.forEach(orderBy => { + query.orderBy(orderBy.field, orderBy.order); + }); + } else if (!orderField) { + query.orderBy('created', 'desc'); } if (options.createdAfter) { @@ -235,7 +237,7 @@ export class DatabaseNotificationsStore implements NotificationsStore { const countOptions: NotificationGetOptions = { ...options }; countOptions.limit = undefined; countOptions.offset = undefined; - countOptions.sort = null; + countOptions.orderField = []; const notificationQuery = this.getNotificationsBaseQuery(countOptions); const response = await notificationQuery.count('id as CNT'); return Number(response[0].CNT); @@ -266,7 +268,7 @@ export class DatabaseNotificationsStore implements NotificationsStore { async getStatus(options: NotificationGetOptions) { const notificationQuery = this.getNotificationsBaseQuery({ ...options, - sort: null, + orderField: [], }); const readSubQuery = notificationQuery .clone() diff --git a/plugins/notifications-backend/src/database/NotificationsStore.ts b/plugins/notifications-backend/src/database/NotificationsStore.ts index 77f7df61df..901ea1695d 100644 --- a/plugins/notifications-backend/src/database/NotificationsStore.ts +++ b/plugins/notifications-backend/src/database/NotificationsStore.ts @@ -20,6 +20,12 @@ import { NotificationStatus, } from '@backstage/plugin-notifications-common'; +/** @internal */ +export type EntityOrder = { + field: string; + order: 'asc' | 'desc'; +}; + // TODO: reuse the common part of the type with front-end /** @internal */ export type NotificationGetOptions = { @@ -28,8 +34,7 @@ export type NotificationGetOptions = { offset?: number; limit?: number; search?: string; - sort?: 'created' | 'topic' | 'origin' | null; - sortOrder?: 'asc' | 'desc'; + orderField?: EntityOrder[]; read?: boolean; saved?: boolean; createdAfter?: Date; diff --git a/plugins/notifications-backend/src/plugin.ts b/plugins/notifications-backend/src/plugin.ts index 9f4c5912fd..c0344fb06f 100644 --- a/plugins/notifications-backend/src/plugin.ts +++ b/plugins/notifications-backend/src/plugin.ts @@ -90,6 +90,10 @@ export const notificationsPlugin = createBackendPlugin({ processors: processingExtensions.processors, }), ); + httpRouter.addAuthPolicy({ + path: '/health', + allow: 'unauthenticated', + }); }, }); }, diff --git a/plugins/notifications-backend/src/service/parseEntityOrderFieldParams.test.ts b/plugins/notifications-backend/src/service/parseEntityOrderFieldParams.test.ts new file mode 100644 index 0000000000..1d494df0ca --- /dev/null +++ b/plugins/notifications-backend/src/service/parseEntityOrderFieldParams.test.ts @@ -0,0 +1,57 @@ +/* + * Copyright 2024 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { parseEntityOrderFieldParams } from './parseEntityOrderFieldParams'; + +describe('parseEntityOrderFieldParams', () => { + it('supports no order fields', () => { + const result = parseEntityOrderFieldParams({}); + expect(result).toEqual(undefined); + }); + + it('supports single orderField', () => { + const result = parseEntityOrderFieldParams({ + orderField: ['metadata.name,desc'], + })!; + expect(result).toEqual([{ field: 'metadata.name', order: 'desc' }]); + }); + + it('supports single orderField without order', () => { + const result = parseEntityOrderFieldParams({ + orderField: ['metadata.name'], + })!; + expect(result).toEqual([{ field: 'metadata.name' }]); + }); + + it('supports multiple order fields', () => { + const result = parseEntityOrderFieldParams({ + orderField: ['metadata.name,desc', 'metadata.uid,asc'], + }); + + expect(result).toEqual([ + { field: 'metadata.name', order: 'desc' }, + { field: 'metadata.uid', order: 'asc' }, + ]); + }); + + it('throws if orderField order is not valid', () => { + expect(() => + parseEntityOrderFieldParams({ + orderField: ['metadata.name,desc', 'metadata.uid,invalid'], + }), + ).toThrow(/Invalid order field order/); + }); +}); diff --git a/plugins/notifications-backend/src/service/parseEntityOrderFieldParams.ts b/plugins/notifications-backend/src/service/parseEntityOrderFieldParams.ts new file mode 100644 index 0000000000..913e04993c --- /dev/null +++ b/plugins/notifications-backend/src/service/parseEntityOrderFieldParams.ts @@ -0,0 +1,62 @@ +/* + * Copyright 2024 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// This file is based on the plugins/catalog-backend + +import { InputError } from '@backstage/errors'; +import { EntityOrder } from '../database'; + +/** + * Takes a single unknown parameter and makes sure that it's a single string or + * an array of strings, and returns as an array. + */ +export function parseStringsParam( + param: unknown, + ctx: string, +): string[] | undefined { + if (param === undefined) { + return undefined; + } + + const array = [param].flat(); + if (array.some(p => typeof p !== 'string')) { + throw new InputError(`Invalid ${ctx}, not a string`); + } + + return array as string[]; +} + +export function parseEntityOrderFieldParams( + params: Record, +): EntityOrder[] | undefined { + const orderFieldStrings = parseStringsParam(params.orderField, 'orderField'); + if (!orderFieldStrings) { + return undefined; + } + + return orderFieldStrings.map(orderFieldString => { + const [field, order] = orderFieldString.split(','); + + if (order !== undefined && !isOrder(order)) { + throw new InputError('Invalid order field order, must be asc or desc'); + } + return { field, order }; + }); +} + +export function isOrder(order: string): order is 'asc' | 'desc' { + return ['asc', 'desc'].includes(order); +} diff --git a/plugins/notifications-backend/src/service/router.ts b/plugins/notifications-backend/src/service/router.ts index 4a24763e40..f9e87335ed 100644 --- a/plugins/notifications-backend/src/service/router.ts +++ b/plugins/notifications-backend/src/service/router.ts @@ -45,6 +45,7 @@ import { Notification, NotificationReadSignal, } from '@backstage/plugin-notifications-common'; +import { parseEntityOrderFieldParams } from './parseEntityOrderFieldParams'; /** @internal */ export interface RouterOptions { @@ -59,28 +60,6 @@ export interface RouterOptions { processors?: NotificationProcessor[]; } -const getSort = (input: string): NotificationGetOptions['sort'] | undefined => { - const valid: NotificationGetOptions['sort'][] = [ - 'created', - 'topic', - 'origin', - ]; - - if ((valid as string[]).includes(input)) { - return input as NotificationGetOptions['sort']; - } - return undefined; -}; - -const getSortOrder = (input: string): NotificationGetOptions['sortOrder'] => { - const valid: NotificationGetOptions['sortOrder'][] = ['asc', 'desc']; - - if ((valid as string[]).includes(input)) { - return input as NotificationGetOptions['sortOrder']; - } - return 'desc'; -}; - /** @internal */ export async function createRouter( options: RouterOptions, @@ -209,11 +188,8 @@ export async function createRouter( if (req.query.limit) { opts.limit = Number.parseInt(req.query.limit.toString(), 10); } - if (req.query.sort) { - opts.sort = getSort(req.query.sort.toString()); - } - if (req.query.sort_order) { - opts.sortOrder = getSortOrder(req.query.sort_order.toString()); + if (req.query.orderField) { + opts.orderField = parseEntityOrderFieldParams(req.query); } if (req.query.search) { opts.search = req.query.search.toString(); @@ -230,8 +206,8 @@ export async function createRouter( opts.saved = false; // or keep undefined } - if (req.query.created_after) { - const sinceEpoch = Date.parse(String(req.query.created_after)); + if (req.query.createdAfter) { + const sinceEpoch = Date.parse(String(req.query.createdAfter)); if (isNaN(sinceEpoch)) { throw new InputError('Unexpected date format'); } @@ -286,7 +262,7 @@ export async function createRouter( if (signals) { await signals.publish({ - recipients: [user], + recipients: { type: 'user', entityRef: [user] }, message: { action: 'notification_read', notification_ids: ids }, channel: 'notifications', }); @@ -296,7 +272,7 @@ export async function createRouter( if (signals) { await signals.publish({ - recipients: [user], + recipients: { type: 'user', entityRef: [user] }, message: { action: 'notification_unread', notification_ids: ids }, channel: 'notifications', }); @@ -348,7 +324,7 @@ export async function createRouter( if (signals) { await signals.publish({ - recipients: null, + recipients: { type: 'broadcast' }, message: { action: 'new_notification', notification_id: ret.id, @@ -400,7 +376,7 @@ export async function createRouter( if (signals) { await signals.publish({ - recipients: user, + recipients: { type: 'user', entityRef: [user] }, message: { action: 'new_notification', notification_id: ret.id, diff --git a/plugins/notifications/src/api/NotificationsClient.test.ts b/plugins/notifications/src/api/NotificationsClient.test.ts index daf9e71232..e9acd04fc9 100644 --- a/plugins/notifications/src/api/NotificationsClient.test.ts +++ b/plugins/notifications/src/api/NotificationsClient.test.ts @@ -60,7 +60,7 @@ describe('NotificationsClient', () => { server.use( rest.get(`${mockBaseUrl}/`, (req, res, ctx) => { expect(req.url.search).toBe( - '?limit=10&offset=0&search=find+me&read=true&created_after=1970-01-01T00%3A00%3A00.005Z', + '?limit=10&offset=0&search=find+me&read=true&createdAfter=1970-01-01T00%3A00%3A00.005Z', ); return res(ctx.json(expectedResp)); }), diff --git a/plugins/notifications/src/api/NotificationsClient.ts b/plugins/notifications/src/api/NotificationsClient.ts index 1e2e289bbe..c4fffded9e 100644 --- a/plugins/notifications/src/api/NotificationsClient.ts +++ b/plugins/notifications/src/api/NotificationsClient.ts @@ -50,10 +50,10 @@ export class NotificationsClient implements NotificationsApi { queryString.append('offset', options.offset.toString(10)); } if (options?.sort !== undefined) { - queryString.append('sort', options.sort); - } - if (options?.sortOrder !== undefined) { - queryString.append('sort_order', options.sortOrder); + queryString.append( + 'orderField', + `${options.sort},${options?.sortOrder ?? 'desc'}`, + ); } if (options?.search) { queryString.append('search', options.search); @@ -65,7 +65,7 @@ export class NotificationsClient implements NotificationsApi { queryString.append('saved', options.saved ? 'true' : 'false'); } if (options?.createdAfter !== undefined) { - queryString.append('created_after', options.createdAfter.toISOString()); + queryString.append('createdAfter', options.createdAfter.toISOString()); } if (options?.minimumSeverity !== undefined) { queryString.append('minimal_severity', options.minimumSeverity); diff --git a/plugins/org/api-report.md b/plugins/org/api-report.md index 922b25b610..1960ce839b 100644 --- a/plugins/org/api-report.md +++ b/plugins/org/api-report.md @@ -23,6 +23,7 @@ export const EntityMembersListCard: (props: { memberDisplayTitle?: string | undefined; pageSize?: number | undefined; showAggregateMembersToggle?: boolean | undefined; + relationsType?: EntityRelationAggregation | undefined; }) => JSX_2.Element; // @public (undocumented) @@ -54,6 +55,7 @@ export const MembersListCard: (props: { memberDisplayTitle?: string; pageSize?: number; showAggregateMembersToggle?: boolean; + relationsType?: EntityRelationAggregation; }) => React_2.JSX.Element; // @public diff --git a/plugins/org/src/components/Cards/Group/MembersList/MembersListCard.test.tsx b/plugins/org/src/components/Cards/Group/MembersList/MembersListCard.test.tsx index cd5801ac71..06ec3b0ebd 100644 --- a/plugins/org/src/components/Cards/Group/MembersList/MembersListCard.test.tsx +++ b/plugins/org/src/components/Cards/Group/MembersList/MembersListCard.test.tsx @@ -311,15 +311,20 @@ describe('MemberTab Test', () => { }, }, ); + + // Should show only direct users on initial load + const displayedMemberNamesBefore = screen.queryAllByTestId('user-link'); + expect(displayedMemberNamesBefore).toHaveLength(2); + // Click the toggle switch await userEvent.click(screen.getByRole('checkbox')); - const displayedMemberNames = screen.queryAllByTestId('user-link'); + const displayedMemberNamesAfter = screen.queryAllByTestId('user-link'); const duplicatedUserText = screen.getByText('Duplicated User'); const groupAUserOneText = screen.getByText('Group A User One'); const groupBUserOneText = screen.getByText('Group B User One'); const groupDUserOneText = screen.getByText('Group D User One'); const groupEUserOneText = screen.getByText('Group E User One'); - expect(displayedMemberNames).toHaveLength(5); + expect(displayedMemberNamesAfter).toHaveLength(5); expect(duplicatedUserText).toBeInTheDocument(); expect(groupAUserOneText).toBeInTheDocument(); expect(groupBUserOneText).toBeInTheDocument(); @@ -339,4 +344,77 @@ describe('MemberTab Test', () => { ); }); }); + + it('Can default to show aggregated members with the aggregate members toggle', async () => { + await renderInTestApp( + + + + + + + + + , + { + mountedRoutes: { + '/catalog/:namespace/:kind/:name': entityRouteRef, + '/catalog': rootRouteRef, + }, + }, + ); + + // Should show aggregated users on initial load + const displayedMemberNamesBefore = screen.queryAllByTestId('user-link'); + expect(displayedMemberNamesBefore).toHaveLength(5); + + // Click the toggle switch + await userEvent.click(screen.getByRole('checkbox')); + + // Should now show only direct users + const displayedMemberNamesAfter = screen.queryAllByTestId('user-link'); + expect(displayedMemberNamesAfter).toHaveLength(2); + }); + + it('Can show aggregated members without the aggregate members toggle', async () => { + await renderInTestApp( + + + + + + + + + , + { + mountedRoutes: { + '/catalog/:namespace/:kind/:name': entityRouteRef, + '/catalog': rootRouteRef, + }, + }, + ); + + // aggregated relations checkbox should not be rendered + expect(screen.queryByRole('checkbox')).toBeNull(); + + // Should show all descendant users on load + const displayedMemberNames = screen.queryAllByTestId('user-link'); + expect(displayedMemberNames).toHaveLength(5); + }); }); diff --git a/plugins/org/src/components/Cards/Group/MembersList/MembersListCard.tsx b/plugins/org/src/components/Cards/Group/MembersList/MembersListCard.tsx index 8967e7cdd7..005e426149 100644 --- a/plugins/org/src/components/Cards/Group/MembersList/MembersListCard.tsx +++ b/plugins/org/src/components/Cards/Group/MembersList/MembersListCard.tsx @@ -48,6 +48,7 @@ import { removeDuplicateEntitiesFrom, } from '../../../../helpers/helpers'; import { EntityRefLink } from '@backstage/plugin-catalog-react'; +import { EntityRelationAggregation } from '../../types'; const useStyles = makeStyles((theme: Theme) => createStyles({ @@ -138,11 +139,13 @@ export const MembersListCard = (props: { memberDisplayTitle?: string; pageSize?: number; showAggregateMembersToggle?: boolean; + relationsType?: EntityRelationAggregation; }) => { const { memberDisplayTitle = 'Members', pageSize = 50, showAggregateMembersToggle, + relationsType = 'direct', } = props; const classes = useListStyles(); @@ -162,11 +165,13 @@ export const MembersListCard = (props: { setPage(pageIndex); }; - const [showAggregateMembers, setShowAggregateMembers] = useState(false); + const [showAggregateMembers, setShowAggregateMembers] = useState( + relationsType === 'aggregated', + ); const { loading: loadingDescendantMembers, value: descendantMembers } = useAsync(async () => { - if (!showAggregateMembersToggle) { + if (!showAggregateMembers) { return [] as UserEntity[]; } @@ -174,7 +179,7 @@ export const MembersListCard = (props: { groupEntity, catalogApi, ); - }, [catalogApi, groupEntity, showAggregateMembersToggle]); + }, [catalogApi, groupEntity, showAggregateMembers]); const { loading, error, @@ -229,7 +234,7 @@ export const MembersListCard = (props: { memberList = ( {members.slice(pageSize * (page - 1), pageSize * page).map(member => ( - + ))} ); diff --git a/plugins/org/src/components/Cards/OwnershipCard/ComponentsGrid.tsx b/plugins/org/src/components/Cards/OwnershipCard/ComponentsGrid.tsx index 1eb2a95ff6..928f242e0d 100644 --- a/plugins/org/src/components/Cards/OwnershipCard/ComponentsGrid.tsx +++ b/plugins/org/src/components/Cards/OwnershipCard/ComponentsGrid.tsx @@ -33,7 +33,7 @@ import React from 'react'; import pluralize from 'pluralize'; import { catalogIndexRouteRef } from '../../../routes'; import { useGetEntities } from './useGetEntities'; -import { EntityRelationAggregation } from './types'; +import { EntityRelationAggregation } from '../types'; const useStyles = makeStyles(theme => createStyles({ diff --git a/plugins/org/src/components/Cards/OwnershipCard/OwnershipCard.tsx b/plugins/org/src/components/Cards/OwnershipCard/OwnershipCard.tsx index 278e2f4b70..0747f710ef 100644 --- a/plugins/org/src/components/Cards/OwnershipCard/OwnershipCard.tsx +++ b/plugins/org/src/components/Cards/OwnershipCard/OwnershipCard.tsx @@ -27,7 +27,7 @@ import { } from '@material-ui/core'; import React, { useEffect, useState } from 'react'; import { ComponentsGrid } from './ComponentsGrid'; -import { EntityRelationAggregation } from './types'; +import { EntityRelationAggregation } from '../types'; const useStyles = makeStyles(theme => ({ card: { diff --git a/plugins/org/src/components/Cards/OwnershipCard/index.ts b/plugins/org/src/components/Cards/OwnershipCard/index.ts index a4798cc4bf..dc0cef0226 100644 --- a/plugins/org/src/components/Cards/OwnershipCard/index.ts +++ b/plugins/org/src/components/Cards/OwnershipCard/index.ts @@ -14,4 +14,3 @@ * limitations under the License. */ export * from './OwnershipCard'; -export * from './types'; diff --git a/plugins/org/src/components/Cards/OwnershipCard/useGetEntities.ts b/plugins/org/src/components/Cards/OwnershipCard/useGetEntities.ts index b6fa9cbfd1..c5bf4a7279 100644 --- a/plugins/org/src/components/Cards/OwnershipCard/useGetEntities.ts +++ b/plugins/org/src/components/Cards/OwnershipCard/useGetEntities.ts @@ -31,7 +31,7 @@ import limiterFactory from 'p-limit'; import { useApi } from '@backstage/core-plugin-api'; import useAsync from 'react-use/lib/useAsync'; import qs from 'qs'; -import { EntityRelationAggregation as EntityRelationsAggregation } from './types'; +import { EntityRelationAggregation } from '../types'; import { uniq } from 'lodash'; const limiter = limiterFactory(10); @@ -125,7 +125,7 @@ const getChildOwnershipEntityRefs = async ( const getOwners = async ( entity: Entity, - relations: EntityRelationsAggregation, + relations: EntityRelationAggregation, catalogApi: CatalogApi, ): Promise => { const isGroup = entity.kind === 'Group'; @@ -166,7 +166,7 @@ const getOwnedEntitiesByOwners = ( export function useGetEntities( entity: Entity, - relations: EntityRelationsAggregation, + relations: EntityRelationAggregation, entityFilterKind?: string[], entityLimit = 6, ): { diff --git a/plugins/org/src/components/Cards/index.ts b/plugins/org/src/components/Cards/index.ts index aec3d8da5e..4c57f5a422 100644 --- a/plugins/org/src/components/Cards/index.ts +++ b/plugins/org/src/components/Cards/index.ts @@ -16,3 +16,4 @@ export * from './Group'; export * from './User'; export * from './OwnershipCard'; +export type { EntityRelationAggregation } from './types'; diff --git a/plugins/org/src/components/Cards/OwnershipCard/types.ts b/plugins/org/src/components/Cards/types.ts similarity index 100% rename from plugins/org/src/components/Cards/OwnershipCard/types.ts rename to plugins/org/src/components/Cards/types.ts diff --git a/plugins/periskop-backend/src/alpha.ts b/plugins/periskop-backend/src/alpha.ts index 59271e02fc..c18e0dc87d 100644 --- a/plugins/periskop-backend/src/alpha.ts +++ b/plugins/periskop-backend/src/alpha.ts @@ -39,6 +39,10 @@ export default createBackendPlugin({ httpRouter.use( await createRouter({ config, logger: loggerToWinstonLogger(logger) }), ); + httpRouter.addAuthPolicy({ + allow: 'unauthenticated', + path: '/health', + }); }, }); }, diff --git a/plugins/permission-backend/src/plugin.ts b/plugins/permission-backend/src/plugin.ts index cc7f31dfdd..28555b1836 100644 --- a/plugins/permission-backend/src/plugin.ts +++ b/plugins/permission-backend/src/plugin.ts @@ -86,6 +86,10 @@ export const permissionPlugin = createBackendPlugin({ userInfo, }), ); + http.addAuthPolicy({ + path: '/health', + allow: 'unauthenticated', + }); }, }); }, diff --git a/plugins/playlist/.eslintrc.js b/plugins/playlist/.eslintrc.js index e2a53a6ad2..e487f765b2 100644 --- a/plugins/playlist/.eslintrc.js +++ b/plugins/playlist/.eslintrc.js @@ -1 +1,5 @@ -module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname, { + rules: { + '@backstage/no-top-level-material-ui-4-imports': 'error', + }, +}); diff --git a/plugins/playlist/src/components/CreatePlaylistButton/CreatePlaylistButton.test.tsx b/plugins/playlist/src/components/CreatePlaylistButton/CreatePlaylistButton.test.tsx index ab839c9a85..589f85b369 100644 --- a/plugins/playlist/src/components/CreatePlaylistButton/CreatePlaylistButton.test.tsx +++ b/plugins/playlist/src/components/CreatePlaylistButton/CreatePlaylistButton.test.tsx @@ -21,7 +21,7 @@ import { permissionApiRef, } from '@backstage/plugin-permission-react'; import { renderInTestApp, TestApiProvider } from '@backstage/test-utils'; -import { Button } from '@material-ui/core'; +import Button from '@material-ui/core/Button'; import { fireEvent, waitFor, act } from '@testing-library/react'; import React from 'react'; import { SWRConfig } from 'swr'; diff --git a/plugins/playlist/src/components/CreatePlaylistButton/CreatePlaylistButton.tsx b/plugins/playlist/src/components/CreatePlaylistButton/CreatePlaylistButton.tsx index 26c7b3fd45..bbbb97392b 100644 --- a/plugins/playlist/src/components/CreatePlaylistButton/CreatePlaylistButton.tsx +++ b/plugins/playlist/src/components/CreatePlaylistButton/CreatePlaylistButton.tsx @@ -25,7 +25,10 @@ import { permissions, PlaylistMetadata, } from '@backstage/plugin-playlist-common'; -import { Button, IconButton, Theme, useMediaQuery } from '@material-ui/core'; +import Button from '@material-ui/core/Button'; +import IconButton from '@material-ui/core/IconButton'; +import useMediaQuery from '@material-ui/core/useMediaQuery'; +import { Theme } from '@material-ui/core/styles'; import AddCircleOutline from '@material-ui/icons/AddCircleOutline'; import React, { useCallback, useState } from 'react'; import { useNavigate } from 'react-router-dom'; diff --git a/plugins/playlist/src/components/EntityPlaylistDialog/EntityPlaylistDialog.test.tsx b/plugins/playlist/src/components/EntityPlaylistDialog/EntityPlaylistDialog.test.tsx index 3595f42d00..cf51f4d44e 100644 --- a/plugins/playlist/src/components/EntityPlaylistDialog/EntityPlaylistDialog.test.tsx +++ b/plugins/playlist/src/components/EntityPlaylistDialog/EntityPlaylistDialog.test.tsx @@ -23,7 +23,7 @@ import { PermissionApi, permissionApiRef, } from '@backstage/plugin-permission-react'; -import { Button } from '@material-ui/core'; +import Button from '@material-ui/core/Button'; import { fireEvent, getByRole, waitFor, act } from '@testing-library/react'; import React from 'react'; import { SWRConfig } from 'swr'; diff --git a/plugins/playlist/src/components/EntityPlaylistDialog/EntityPlaylistDialog.tsx b/plugins/playlist/src/components/EntityPlaylistDialog/EntityPlaylistDialog.tsx index 38ea156320..b3cb472714 100644 --- a/plugins/playlist/src/components/EntityPlaylistDialog/EntityPlaylistDialog.tsx +++ b/plugins/playlist/src/components/EntityPlaylistDialog/EntityPlaylistDialog.tsx @@ -27,22 +27,20 @@ import { Playlist, PlaylistMetadata, } from '@backstage/plugin-playlist-common'; -import { - Button, - Dialog, - DialogActions, - DialogContent, - DialogTitle, - IconButton, - InputAdornment, - LinearProgress, - List, - ListItem, - ListItemIcon, - ListItemText, - makeStyles, - TextField, -} from '@material-ui/core'; +import Button from '@material-ui/core/Button'; +import Dialog from '@material-ui/core/Dialog'; +import DialogActions from '@material-ui/core/DialogActions'; +import DialogContent from '@material-ui/core/DialogContent'; +import DialogTitle from '@material-ui/core/DialogTitle'; +import IconButton from '@material-ui/core/IconButton'; +import InputAdornment from '@material-ui/core/InputAdornment'; +import LinearProgress from '@material-ui/core/LinearProgress'; +import List from '@material-ui/core/List'; +import ListItem from '@material-ui/core/ListItem'; +import ListItemIcon from '@material-ui/core/ListItemIcon'; +import ListItemText from '@material-ui/core/ListItemText'; +import TextField from '@material-ui/core/TextField'; +import { makeStyles } from '@material-ui/core/styles'; import ClearButton from '@material-ui/icons/Clear'; import PlaylistAddIcon from '@material-ui/icons/PlaylistAdd'; import SearchIcon from '@material-ui/icons/Search'; diff --git a/plugins/playlist/src/components/PersonalListPicker/PersonalListPicker.tsx b/plugins/playlist/src/components/PersonalListPicker/PersonalListPicker.tsx index 0691d26732..bfd633e084 100644 --- a/plugins/playlist/src/components/PersonalListPicker/PersonalListPicker.tsx +++ b/plugins/playlist/src/components/PersonalListPicker/PersonalListPicker.tsx @@ -21,16 +21,14 @@ import { useApi, } from '@backstage/core-plugin-api'; import { Playlist } from '@backstage/plugin-playlist-common'; -import { - Card, - List, - ListItemIcon, - ListItemSecondaryAction, - ListItemText, - makeStyles, - MenuItem, - Typography, -} from '@material-ui/core'; +import Card from '@material-ui/core/Card'; +import List from '@material-ui/core/List'; +import ListItemIcon from '@material-ui/core/ListItemIcon'; +import ListItemSecondaryAction from '@material-ui/core/ListItemSecondaryAction'; +import ListItemText from '@material-ui/core/ListItemText'; +import MenuItem from '@material-ui/core/MenuItem'; +import Typography from '@material-ui/core/Typography'; +import { makeStyles } from '@material-ui/core/styles'; import PlaylistPlayIcon from '@material-ui/icons/PlaylistPlay'; import SettingsIcon from '@material-ui/icons/Settings'; import { compact } from 'lodash'; diff --git a/plugins/playlist/src/components/PlaylistCard/PlaylistCard.tsx b/plugins/playlist/src/components/PlaylistCard/PlaylistCard.tsx index 8b52bcc1de..755798b13a 100644 --- a/plugins/playlist/src/components/PlaylistCard/PlaylistCard.tsx +++ b/plugins/playlist/src/components/PlaylistCard/PlaylistCard.tsx @@ -22,17 +22,15 @@ import { import { useRouteRef } from '@backstage/core-plugin-api'; import { EntityRefLinks } from '@backstage/plugin-catalog-react'; import { Playlist } from '@backstage/plugin-playlist-common'; -import { - Box, - Card, - CardActions, - CardContent, - CardMedia, - Chip, - makeStyles, - Tooltip, - Typography, -} from '@material-ui/core'; +import Box from '@material-ui/core/Box'; +import Card from '@material-ui/core/Card'; +import CardActions from '@material-ui/core/CardActions'; +import CardContent from '@material-ui/core/CardContent'; +import CardMedia from '@material-ui/core/CardMedia'; +import Chip from '@material-ui/core/Chip'; +import Tooltip from '@material-ui/core/Tooltip'; +import Typography from '@material-ui/core/Typography'; +import { makeStyles } from '@material-ui/core/styles'; import LockIcon from '@material-ui/icons/Lock'; import React from 'react'; import { playlistRouteRef } from '../../routes'; diff --git a/plugins/playlist/src/components/PlaylistEditDialog/PlaylistEditDialog.tsx b/plugins/playlist/src/components/PlaylistEditDialog/PlaylistEditDialog.tsx index 97bd4728b9..a7e7b6d976 100644 --- a/plugins/playlist/src/components/PlaylistEditDialog/PlaylistEditDialog.tsx +++ b/plugins/playlist/src/components/PlaylistEditDialog/PlaylistEditDialog.tsx @@ -19,23 +19,21 @@ import { identityApiRef, useApi } from '@backstage/core-plugin-api'; import { humanizeEntityRef } from '@backstage/plugin-catalog-react'; import { PlaylistMetadata } from '@backstage/plugin-playlist-common'; import { playlistApiRef } from '../../api'; -import { - Button, - CircularProgress, - Dialog, - DialogActions, - DialogContent, - FormControl, - FormControlLabel, - InputLabel, - makeStyles, - MenuItem, - LinearProgress, - Radio, - RadioGroup, - Select, - TextField, -} from '@material-ui/core'; +import Button from '@material-ui/core/Button'; +import CircularProgress from '@material-ui/core/CircularProgress'; +import Dialog from '@material-ui/core/Dialog'; +import DialogActions from '@material-ui/core/DialogActions'; +import DialogContent from '@material-ui/core/DialogContent'; +import FormControl from '@material-ui/core/FormControl'; +import FormControlLabel from '@material-ui/core/FormControlLabel'; +import InputLabel from '@material-ui/core/InputLabel'; +import MenuItem from '@material-ui/core/MenuItem'; +import LinearProgress from '@material-ui/core/LinearProgress'; +import Radio from '@material-ui/core/Radio'; +import RadioGroup from '@material-ui/core/RadioGroup'; +import Select from '@material-ui/core/Select'; +import TextField from '@material-ui/core/TextField'; +import { makeStyles } from '@material-ui/core/styles'; import React, { useState } from 'react'; import { useForm, Controller } from 'react-hook-form'; import useAsync from 'react-use/lib/useAsync'; diff --git a/plugins/playlist/src/components/PlaylistList/PlaylistList.tsx b/plugins/playlist/src/components/PlaylistList/PlaylistList.tsx index 6ec06f3e05..b81ae0125c 100644 --- a/plugins/playlist/src/components/PlaylistList/PlaylistList.tsx +++ b/plugins/playlist/src/components/PlaylistList/PlaylistList.tsx @@ -21,7 +21,7 @@ import { Progress, WarningPanel, } from '@backstage/core-components'; -import { Typography } from '@material-ui/core'; +import Typography from '@material-ui/core/Typography'; import { useTitle, usePlaylistList } from '../../hooks'; import { PlaylistCard } from '../PlaylistCard'; diff --git a/plugins/playlist/src/components/PlaylistOwnerPicker/PlaylistOwnerPicker.tsx b/plugins/playlist/src/components/PlaylistOwnerPicker/PlaylistOwnerPicker.tsx index d7fd97ff19..f031d53aa8 100644 --- a/plugins/playlist/src/components/PlaylistOwnerPicker/PlaylistOwnerPicker.tsx +++ b/plugins/playlist/src/components/PlaylistOwnerPicker/PlaylistOwnerPicker.tsx @@ -17,18 +17,16 @@ import { parseEntityRef } from '@backstage/catalog-model'; import { humanizeEntityRef } from '@backstage/plugin-catalog-react'; import { Playlist } from '@backstage/plugin-playlist-common'; -import { - Box, - Checkbox, - Chip, - FormControlLabel, - TextField, - Typography, -} from '@material-ui/core'; +import Box from '@material-ui/core/Box'; +import Checkbox from '@material-ui/core/Checkbox'; +import Chip from '@material-ui/core/Chip'; +import FormControlLabel from '@material-ui/core/FormControlLabel'; +import TextField from '@material-ui/core/TextField'; +import Typography from '@material-ui/core/Typography'; import CheckBoxIcon from '@material-ui/icons/CheckBox'; import CheckBoxOutlineBlankIcon from '@material-ui/icons/CheckBoxOutlineBlank'; import ExpandMoreIcon from '@material-ui/icons/ExpandMore'; -import { Autocomplete } from '@material-ui/lab'; +import Autocomplete from '@material-ui/lab/Autocomplete'; import React, { useEffect, useMemo, useState } from 'react'; import { usePlaylistList } from '../../hooks'; diff --git a/plugins/playlist/src/components/PlaylistPage/AddEntitiesDrawer.tsx b/plugins/playlist/src/components/PlaylistPage/AddEntitiesDrawer.tsx index 529327776e..5f404ef8f7 100644 --- a/plugins/playlist/src/components/PlaylistPage/AddEntitiesDrawer.tsx +++ b/plugins/playlist/src/components/PlaylistPage/AddEntitiesDrawer.tsx @@ -32,23 +32,19 @@ import { SearchResultPager, useSearch, } from '@backstage/plugin-search-react'; -import { - Box, - Button, - Chip, - createStyles, - Divider, - Drawer, - Grid, - List, - ListItem, - ListItemSecondaryAction, - ListItemText, - makeStyles, - Paper, - Theme, - Typography, -} from '@material-ui/core'; +import Box from '@material-ui/core/Box'; +import Button from '@material-ui/core/Button'; +import Chip from '@material-ui/core/Chip'; +import Divider from '@material-ui/core/Divider'; +import Drawer from '@material-ui/core/Drawer'; +import Grid from '@material-ui/core/Grid'; +import List from '@material-ui/core/List'; +import ListItem from '@material-ui/core/ListItem'; +import ListItemSecondaryAction from '@material-ui/core/ListItemSecondaryAction'; +import ListItemText from '@material-ui/core/ListItemText'; +import Paper from '@material-ui/core/Paper'; +import Typography from '@material-ui/core/Typography'; +import { createStyles, makeStyles, Theme } from '@material-ui/core/styles'; import React, { useCallback, useEffect, useMemo } from 'react'; const useStyles = makeStyles((theme: Theme) => diff --git a/plugins/playlist/src/components/PlaylistPage/PlaylistEntitiesTable.test.tsx b/plugins/playlist/src/components/PlaylistPage/PlaylistEntitiesTable.test.tsx index ba6f94e945..0ee1bf7ebc 100644 --- a/plugins/playlist/src/components/PlaylistPage/PlaylistEntitiesTable.test.tsx +++ b/plugins/playlist/src/components/PlaylistPage/PlaylistEntitiesTable.test.tsx @@ -22,7 +22,7 @@ import { permissionApiRef, } from '@backstage/plugin-permission-react'; import { renderInTestApp, TestApiProvider } from '@backstage/test-utils'; -import { Button } from '@material-ui/core'; +import Button from '@material-ui/core/Button'; import { fireEvent, waitFor, act } from '@testing-library/react'; import React from 'react'; import { SWRConfig } from 'swr'; diff --git a/plugins/playlist/src/components/PlaylistPage/PlaylistHeader.test.tsx b/plugins/playlist/src/components/PlaylistPage/PlaylistHeader.test.tsx index 480ac038f2..7a9283b163 100644 --- a/plugins/playlist/src/components/PlaylistPage/PlaylistHeader.test.tsx +++ b/plugins/playlist/src/components/PlaylistPage/PlaylistHeader.test.tsx @@ -26,7 +26,7 @@ import { } from '@backstage/plugin-permission-react'; import { permissions, Playlist } from '@backstage/plugin-playlist-common'; import { renderInTestApp, TestApiProvider } from '@backstage/test-utils'; -import { Button } from '@material-ui/core'; +import Button from '@material-ui/core/Button'; import { fireEvent, waitFor, act } from '@testing-library/react'; import React from 'react'; import { SWRConfig } from 'swr'; diff --git a/plugins/playlist/src/components/PlaylistPage/PlaylistHeader.tsx b/plugins/playlist/src/components/PlaylistPage/PlaylistHeader.tsx index 23a41b734b..868559695f 100644 --- a/plugins/playlist/src/components/PlaylistPage/PlaylistHeader.tsx +++ b/plugins/playlist/src/components/PlaylistPage/PlaylistHeader.tsx @@ -32,15 +32,13 @@ import { Playlist, PlaylistMetadata, } from '@backstage/plugin-playlist-common'; -import { - Button, - Chip, - CircularProgress, - Dialog, - DialogActions, - DialogContent, - makeStyles, -} from '@material-ui/core'; +import Button from '@material-ui/core/Button'; +import Chip from '@material-ui/core/Chip'; +import CircularProgress from '@material-ui/core/CircularProgress'; +import Dialog from '@material-ui/core/Dialog'; +import DialogActions from '@material-ui/core/DialogActions'; +import DialogContent from '@material-ui/core/DialogContent'; +import { makeStyles } from '@material-ui/core/styles'; import EditIcon from '@material-ui/icons/Edit'; import DeleteIcon from '@material-ui/icons/Delete'; import React, { useCallback, useState } from 'react'; diff --git a/plugins/playlist/src/components/PlaylistPage/PlaylistPage.tsx b/plugins/playlist/src/components/PlaylistPage/PlaylistPage.tsx index b17fbd2fb7..ebd5c407f1 100644 --- a/plugins/playlist/src/components/PlaylistPage/PlaylistPage.tsx +++ b/plugins/playlist/src/components/PlaylistPage/PlaylistPage.tsx @@ -19,16 +19,14 @@ import { errorApiRef, useApi } from '@backstage/core-plugin-api'; import { ResponseError } from '@backstage/errors'; import { usePermission } from '@backstage/plugin-permission-react'; import { permissions } from '@backstage/plugin-playlist-common'; -import { - Button, - Card, - CardContent, - CardHeader, - Divider, - LinearProgress, - makeStyles, - Typography, -} from '@material-ui/core'; +import Button from '@material-ui/core/Button'; +import Card from '@material-ui/core/Card'; +import CardContent from '@material-ui/core/CardContent'; +import CardHeader from '@material-ui/core/CardHeader'; +import Divider from '@material-ui/core/Divider'; +import LinearProgress from '@material-ui/core/LinearProgress'; +import Typography from '@material-ui/core/Typography'; +import { makeStyles } from '@material-ui/core/styles'; import React, { useEffect } from 'react'; import { useParams } from 'react-router-dom'; import useAsyncFn from 'react-use/lib/useAsyncFn'; diff --git a/plugins/playlist/src/components/PlaylistSearchBar/PlaylistSearchBar.tsx b/plugins/playlist/src/components/PlaylistSearchBar/PlaylistSearchBar.tsx index 44e0b28c13..566240cf1d 100644 --- a/plugins/playlist/src/components/PlaylistSearchBar/PlaylistSearchBar.tsx +++ b/plugins/playlist/src/components/PlaylistSearchBar/PlaylistSearchBar.tsx @@ -15,14 +15,12 @@ */ import { Playlist } from '@backstage/plugin-playlist-common'; -import { - FormControl, - IconButton, - Input, - InputAdornment, - makeStyles, - Toolbar, -} from '@material-ui/core'; +import FormControl from '@material-ui/core/FormControl'; +import IconButton from '@material-ui/core/IconButton'; +import Input from '@material-ui/core/Input'; +import InputAdornment from '@material-ui/core/InputAdornment'; +import Toolbar from '@material-ui/core/Toolbar'; +import { makeStyles } from '@material-ui/core/styles'; import Clear from '@material-ui/icons/Clear'; import Search from '@material-ui/icons/Search'; import React, { useState } from 'react'; diff --git a/plugins/playlist/src/components/PlaylistSortPicker/PlaylistSortPicker.tsx b/plugins/playlist/src/components/PlaylistSortPicker/PlaylistSortPicker.tsx index 219792e2dc..4f6e7baf6d 100644 --- a/plugins/playlist/src/components/PlaylistSortPicker/PlaylistSortPicker.tsx +++ b/plugins/playlist/src/components/PlaylistSortPicker/PlaylistSortPicker.tsx @@ -15,13 +15,11 @@ */ import { Playlist } from '@backstage/plugin-playlist-common'; -import { - ListSubheader, - makeStyles, - MenuItem, - Select, - Typography, -} from '@material-ui/core'; +import ListSubheader from '@material-ui/core/ListSubheader'; +import MenuItem from '@material-ui/core/MenuItem'; +import Select from '@material-ui/core/Select'; +import Typography from '@material-ui/core/Typography'; +import { makeStyles } from '@material-ui/core/styles'; import SwapVertIcon from '@material-ui/icons/SwapVert'; import React from 'react'; import useEffectOnce from 'react-use/lib/useEffectOnce'; diff --git a/plugins/rollbar/.eslintrc.js b/plugins/rollbar/.eslintrc.js index e2a53a6ad2..e487f765b2 100644 --- a/plugins/rollbar/.eslintrc.js +++ b/plugins/rollbar/.eslintrc.js @@ -1 +1,5 @@ -module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname, { + rules: { + '@backstage/no-top-level-material-ui-4-imports': 'error', + }, +}); diff --git a/plugins/rollbar/src/components/RollbarTopItemsTable/RollbarTopItemsTable.tsx b/plugins/rollbar/src/components/RollbarTopItemsTable/RollbarTopItemsTable.tsx index 89fa7596b0..c6eb8888ab 100644 --- a/plugins/rollbar/src/components/RollbarTopItemsTable/RollbarTopItemsTable.tsx +++ b/plugins/rollbar/src/components/RollbarTopItemsTable/RollbarTopItemsTable.tsx @@ -14,8 +14,9 @@ * limitations under the License. */ -import { Box, Typography } from '@material-ui/core'; -import { Alert } from '@material-ui/lab'; +import Box from '@material-ui/core/Box'; +import Typography from '@material-ui/core/Typography'; +import Alert from '@material-ui/lab/Alert'; import React from 'react'; import { RollbarFrameworkId, diff --git a/plugins/scaffolder-backend/scripts/Cookiecutter.dockerfile b/plugins/scaffolder-backend/scripts/Cookiecutter.dockerfile index 6aa3c0dfa0..ecaefee183 100644 --- a/plugins/scaffolder-backend/scripts/Cookiecutter.dockerfile +++ b/plugins/scaffolder-backend/scripts/Cookiecutter.dockerfile @@ -1,4 +1,4 @@ -FROM alpine:3.18 +FROM alpine:3.19 RUN apk add --update \ git \ diff --git a/plugins/scaffolder-backend/src/scaffolder/tasks/DatabaseTaskStore.test.ts b/plugins/scaffolder-backend/src/scaffolder/tasks/DatabaseTaskStore.test.ts index fe9cf3c661..ab80dcff04 100644 --- a/plugins/scaffolder-backend/src/scaffolder/tasks/DatabaseTaskStore.test.ts +++ b/plugins/scaffolder-backend/src/scaffolder/tasks/DatabaseTaskStore.test.ts @@ -161,6 +161,44 @@ describe('DatabaseTaskStore', () => { expect(claimedTask.status).toBe('processing'); }); + it('should restore the state of the task after the task recovery', async () => { + const { store } = await createStore(); + const { taskId } = await store.createTask({ + spec: {} as TaskSpec, + createdBy: 'me', + }); + + const task = await store.getTask(taskId); + expect(task.status).toBe('open'); + await store.claimTask(); + + const state = { + state: { + checkpoints: { + 'v1.task.checkpoint.deploy.to.stg': { + status: 'success', + value: true, + }, + 'v1.task.checkpoint.deploy.to.pro': { + status: 'success', + value: true, + }, + }, + }, + }; + + await store.saveTaskState({ + taskId, + state, + }); + + await store.recoverTasks({ timeout: { milliseconds: 0 } }); + await store.claimTask(); + + const claimedTask = await store.getTask(taskId); + expect(claimedTask.state).toEqual({ state: state.state }); + }); + it('should shutdown the running task', async () => { const { store } = await createStore(); const { taskId } = await store.createTask({ diff --git a/plugins/scaffolder-backend/src/scaffolder/tasks/DatabaseTaskStore.ts b/plugins/scaffolder-backend/src/scaffolder/tasks/DatabaseTaskStore.ts index 2a39440775..ac391ea2b6 100644 --- a/plugins/scaffolder-backend/src/scaffolder/tasks/DatabaseTaskStore.ts +++ b/plugins/scaffolder-backend/src/scaffolder/tasks/DatabaseTaskStore.ts @@ -212,6 +212,7 @@ export class DatabaseTaskStore implements TaskStore { try { const spec = JSON.parse(result.spec); const secrets = result.secrets ? JSON.parse(result.secrets) : undefined; + const state = result.state ? JSON.parse(result.state).state : undefined; return { id: result.id, spec, @@ -220,6 +221,7 @@ export class DatabaseTaskStore implements TaskStore { createdAt: parseSqlDateToIsoString(result.created_at), createdBy: result.created_by ?? undefined, secrets, + state, }; } catch (error) { throw new Error(`Failed to parse spec of task '${taskId}', ${error}`); @@ -268,6 +270,16 @@ export class DatabaseTaskStore implements TaskStore { return undefined; } + const getState = () => { + try { + return task.state ? JSON.parse(task.state).state : undefined; + } catch (error) { + throw new Error( + `Failed to parse state of the task '${task.id}', ${error}`, + ); + } + }; + const secrets = this.parseTaskSecrets(task); return { id: task.id, @@ -277,6 +289,7 @@ export class DatabaseTaskStore implements TaskStore { createdAt: task.created_at, createdBy: task.created_by ?? undefined, secrets, + state: getState(), }; }); } @@ -532,7 +545,7 @@ export class DatabaseTaskStore implements TaskStore { for (const { id, spec } of result) { const taskSpec = JSON.parse(spec as string) as TaskSpec; - await this.db('task_events').insert({ + await tx('task_events').insert({ task_id: id, event_type: 'recovered', body: JSON.stringify({ diff --git a/plugins/scaffolder-backend/src/scaffolder/tasks/StorageTaskBroker.ts b/plugins/scaffolder-backend/src/scaffolder/tasks/StorageTaskBroker.ts index a2018fe127..29a22716ba 100644 --- a/plugins/scaffolder-backend/src/scaffolder/tasks/StorageTaskBroker.ts +++ b/plugins/scaffolder-backend/src/scaffolder/tasks/StorageTaskBroker.ts @@ -314,6 +314,7 @@ export class StorageTaskBroker implements TaskBroker { spec: pendingTask.spec, secrets: pendingTask.secrets, createdBy: pendingTask.createdBy, + state: pendingTask.state, }, this.storage, abortController.signal, diff --git a/plugins/scaffolder-node/api-report.md b/plugins/scaffolder-node/api-report.md index f1362f5a8a..c757301249 100644 --- a/plugins/scaffolder-node/api-report.md +++ b/plugins/scaffolder-node/api-report.md @@ -286,6 +286,7 @@ export type SerializedTask = { lastHeartbeatAt?: string; createdBy?: string; secrets?: TaskSecrets; + state?: JsonObject; }; // @public diff --git a/plugins/scaffolder-node/src/tasks/types.ts b/plugins/scaffolder-node/src/tasks/types.ts index a072bb5f5e..aef2c5f360 100644 --- a/plugins/scaffolder-node/src/tasks/types.ts +++ b/plugins/scaffolder-node/src/tasks/types.ts @@ -59,6 +59,7 @@ export type SerializedTask = { lastHeartbeatAt?: string; createdBy?: string; secrets?: TaskSecrets; + state?: JsonObject; }; /** diff --git a/plugins/scaffolder/.eslintrc.js b/plugins/scaffolder/.eslintrc.js index e2a53a6ad2..e487f765b2 100644 --- a/plugins/scaffolder/.eslintrc.js +++ b/plugins/scaffolder/.eslintrc.js @@ -1 +1,5 @@ -module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname, { + rules: { + '@backstage/no-top-level-material-ui-4-imports': 'error', + }, +}); diff --git a/plugins/scaffolder/src/components/ActionsPage/ActionsPage.tsx b/plugins/scaffolder/src/components/ActionsPage/ActionsPage.tsx index 9c0276fa28..9129b87f25 100644 --- a/plugins/scaffolder/src/components/ActionsPage/ActionsPage.tsx +++ b/plugins/scaffolder/src/components/ActionsPage/ActionsPage.tsx @@ -19,23 +19,21 @@ import { ActionExample, scaffolderApiRef, } from '@backstage/plugin-scaffolder-react'; -import { - Accordion, - AccordionDetails, - AccordionSummary, - Box, - Collapse, - Grid, - makeStyles, - Paper, - Table, - TableBody, - TableCell, - TableContainer, - TableHead, - TableRow, - Typography, -} from '@material-ui/core'; +import Accordion from '@material-ui/core/Accordion'; +import AccordionDetails from '@material-ui/core/AccordionDetails'; +import AccordionSummary from '@material-ui/core/AccordionSummary'; +import Box from '@material-ui/core/Box'; +import Collapse from '@material-ui/core/Collapse'; +import Grid from '@material-ui/core/Grid'; +import Paper from '@material-ui/core/Paper'; +import Table from '@material-ui/core/Table'; +import TableBody from '@material-ui/core/TableBody'; +import TableCell from '@material-ui/core/TableCell'; +import TableContainer from '@material-ui/core/TableContainer'; +import TableHead from '@material-ui/core/TableHead'; +import TableRow from '@material-ui/core/TableRow'; +import Typography from '@material-ui/core/Typography'; +import { makeStyles } from '@material-ui/core/styles'; import { JSONSchema7, JSONSchema7Definition } from 'json-schema'; import classNames from 'classnames'; import ExpandMoreIcon from '@material-ui/icons/ExpandMore'; diff --git a/plugins/scaffolder/src/components/ListTasksPage/OwnerListPicker.tsx b/plugins/scaffolder/src/components/ListTasksPage/OwnerListPicker.tsx index fdb13b68a0..d2489303d3 100644 --- a/plugins/scaffolder/src/components/ListTasksPage/OwnerListPicker.tsx +++ b/plugins/scaffolder/src/components/ListTasksPage/OwnerListPicker.tsx @@ -14,15 +14,13 @@ * limitations under the License. */ import { IconComponent } from '@backstage/core-plugin-api'; -import { - Card, - List, - ListItemIcon, - ListItemText, - makeStyles, - MenuItem, - Typography, -} from '@material-ui/core'; +import Card from '@material-ui/core/Card'; +import List from '@material-ui/core/List'; +import ListItemIcon from '@material-ui/core/ListItemIcon'; +import ListItemText from '@material-ui/core/ListItemText'; +import MenuItem from '@material-ui/core/MenuItem'; +import Typography from '@material-ui/core/Typography'; +import { makeStyles } from '@material-ui/core/styles'; import SettingsIcon from '@material-ui/icons/Settings'; import React, { Fragment } from 'react'; diff --git a/plugins/scaffolder/src/components/OngoingTask/ContextMenu.tsx b/plugins/scaffolder/src/components/OngoingTask/ContextMenu.tsx index 1612b943c2..99d9235791 100644 --- a/plugins/scaffolder/src/components/OngoingTask/ContextMenu.tsx +++ b/plugins/scaffolder/src/components/OngoingTask/ContextMenu.tsx @@ -14,17 +14,13 @@ * limitations under the License. */ -import { - IconButton, - ListItemIcon, - ListItemText, - makeStyles, - MenuItem, - MenuList, - Popover, - Theme, - useTheme, -} from '@material-ui/core'; +import IconButton from '@material-ui/core/IconButton'; +import ListItemIcon from '@material-ui/core/ListItemIcon'; +import ListItemText from '@material-ui/core/ListItemText'; +import MenuItem from '@material-ui/core/MenuItem'; +import MenuList from '@material-ui/core/MenuList'; +import Popover from '@material-ui/core/Popover'; +import { makeStyles, Theme, useTheme } from '@material-ui/core/styles'; import { useAsync } from '@react-hookz/web'; import Cancel from '@material-ui/icons/Cancel'; import Retry from '@material-ui/icons/Repeat'; diff --git a/plugins/scaffolder/src/components/OngoingTask/OngoingTask.tsx b/plugins/scaffolder/src/components/OngoingTask/OngoingTask.tsx index 984b38dcdd..3e7a3b8f52 100644 --- a/plugins/scaffolder/src/components/OngoingTask/OngoingTask.tsx +++ b/plugins/scaffolder/src/components/OngoingTask/OngoingTask.tsx @@ -16,7 +16,10 @@ import React, { useCallback, useEffect, useMemo, useState } from 'react'; import { Content, ErrorPanel, Header, Page } from '@backstage/core-components'; import { useNavigate, useParams } from 'react-router-dom'; -import { Box, Button, makeStyles, Paper } from '@material-ui/core'; +import Box from '@material-ui/core/Box'; +import Button from '@material-ui/core/Button'; +import Paper from '@material-ui/core/Paper'; +import { makeStyles } from '@material-ui/core/styles'; import { ScaffolderTaskOutput, scaffolderApiRef, diff --git a/plugins/scaffolder/src/components/TemplateTypePicker/TemplateTypePicker.tsx b/plugins/scaffolder/src/components/TemplateTypePicker/TemplateTypePicker.tsx index 0eed8cde75..c6386853e8 100644 --- a/plugins/scaffolder/src/components/TemplateTypePicker/TemplateTypePicker.tsx +++ b/plugins/scaffolder/src/components/TemplateTypePicker/TemplateTypePicker.tsx @@ -17,17 +17,15 @@ import React from 'react'; import capitalize from 'lodash/capitalize'; import { Progress } from '@backstage/core-components'; -import { - Box, - Checkbox, - FormControlLabel, - TextField, - Typography, -} from '@material-ui/core'; +import Box from '@material-ui/core/Box'; +import Checkbox from '@material-ui/core/Checkbox'; +import FormControlLabel from '@material-ui/core/FormControlLabel'; +import TextField from '@material-ui/core/TextField'; +import Typography from '@material-ui/core/Typography'; import CheckBoxIcon from '@material-ui/icons/CheckBox'; import CheckBoxOutlineBlankIcon from '@material-ui/icons/CheckBoxOutlineBlank'; import ExpandMoreIcon from '@material-ui/icons/ExpandMore'; -import { Autocomplete } from '@material-ui/lab'; +import Autocomplete from '@material-ui/lab/Autocomplete'; import { useEntityTypeFilter } from '@backstage/plugin-catalog-react'; import { alertApiRef, useApi } from '@backstage/core-plugin-api'; diff --git a/plugins/scaffolder/src/components/fields/EntityNamePicker/EntityNamePicker.tsx b/plugins/scaffolder/src/components/fields/EntityNamePicker/EntityNamePicker.tsx index 555b726917..bc3ca95ae0 100644 --- a/plugins/scaffolder/src/components/fields/EntityNamePicker/EntityNamePicker.tsx +++ b/plugins/scaffolder/src/components/fields/EntityNamePicker/EntityNamePicker.tsx @@ -15,7 +15,7 @@ */ import React from 'react'; import { EntityNamePickerProps } from './schema'; -import { TextField } from '@material-ui/core'; +import TextField from '@material-ui/core/TextField'; export { EntityNamePickerSchema } from './schema'; diff --git a/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.tsx b/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.tsx index 76dbe42332..f8dd29d9d3 100644 --- a/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.tsx +++ b/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.tsx @@ -27,7 +27,7 @@ import { catalogApiRef, humanizeEntityRef, } from '@backstage/plugin-catalog-react'; -import { TextField } from '@material-ui/core'; +import TextField from '@material-ui/core/TextField'; import FormControl from '@material-ui/core/FormControl'; import Autocomplete, { AutocompleteChangeReason, diff --git a/plugins/scaffolder/src/components/fields/EntityTagsPicker/EntityTagsPicker.tsx b/plugins/scaffolder/src/components/fields/EntityTagsPicker/EntityTagsPicker.tsx index 549ccdb8aa..4625e3b803 100644 --- a/plugins/scaffolder/src/components/fields/EntityTagsPicker/EntityTagsPicker.tsx +++ b/plugins/scaffolder/src/components/fields/EntityTagsPicker/EntityTagsPicker.tsx @@ -20,8 +20,9 @@ import { GetEntityFacetsRequest } from '@backstage/catalog-client'; import { makeValidator } from '@backstage/catalog-model'; import { useApi } from '@backstage/core-plugin-api'; import { catalogApiRef } from '@backstage/plugin-catalog-react'; -import { FormControl, TextField } from '@material-ui/core'; -import { Autocomplete } from '@material-ui/lab'; +import FormControl from '@material-ui/core/FormControl'; +import TextField from '@material-ui/core/TextField'; +import Autocomplete from '@material-ui/lab/Autocomplete'; import { EntityTagsPickerProps } from './schema'; export { EntityTagsPickerSchema } from './schema'; diff --git a/plugins/scaffolder/src/components/fields/MultiEntityPicker/MultiEntityPicker.tsx b/plugins/scaffolder/src/components/fields/MultiEntityPicker/MultiEntityPicker.tsx index d850bbd435..a74a3da7f2 100644 --- a/plugins/scaffolder/src/components/fields/MultiEntityPicker/MultiEntityPicker.tsx +++ b/plugins/scaffolder/src/components/fields/MultiEntityPicker/MultiEntityPicker.tsx @@ -27,7 +27,7 @@ import { catalogApiRef, humanizeEntityRef, } from '@backstage/plugin-catalog-react'; -import { TextField } from '@material-ui/core'; +import TextField from '@material-ui/core/TextField'; import FormControl from '@material-ui/core/FormControl'; import Autocomplete, { AutocompleteChangeReason, diff --git a/plugins/scaffolder/src/components/fields/MyGroupsPicker/MyGroupsPicker.tsx b/plugins/scaffolder/src/components/fields/MyGroupsPicker/MyGroupsPicker.tsx index fefdd4230c..d421759789 100644 --- a/plugins/scaffolder/src/components/fields/MyGroupsPicker/MyGroupsPicker.tsx +++ b/plugins/scaffolder/src/components/fields/MyGroupsPicker/MyGroupsPicker.tsx @@ -20,9 +20,10 @@ import { identityApiRef, useApi, } from '@backstage/core-plugin-api'; -import { TextField, FormControl } from '@material-ui/core'; +import TextField from '@material-ui/core/TextField'; +import FormControl from '@material-ui/core/FormControl'; import { MyGroupsPickerProps, MyGroupsPickerSchema } from './schema'; -import { Autocomplete } from '@material-ui/lab'; +import Autocomplete from '@material-ui/lab/Autocomplete'; import { catalogApiRef } from '@backstage/plugin-catalog-react'; import { NotFoundError } from '@backstage/errors'; import useAsync from 'react-use/lib/useAsync'; diff --git a/plugins/scaffolder/src/components/fields/OwnedEntityPicker/OwnedEntityPicker.tsx b/plugins/scaffolder/src/components/fields/OwnedEntityPicker/OwnedEntityPicker.tsx index d7999c8c0c..d349f55893 100644 --- a/plugins/scaffolder/src/components/fields/OwnedEntityPicker/OwnedEntityPicker.tsx +++ b/plugins/scaffolder/src/components/fields/OwnedEntityPicker/OwnedEntityPicker.tsx @@ -15,7 +15,7 @@ */ import { RELATION_OWNED_BY } from '@backstage/catalog-model'; import { identityApiRef, useApi } from '@backstage/core-plugin-api'; -import { TextField } from '@material-ui/core'; +import TextField from '@material-ui/core/TextField'; import Autocomplete from '@material-ui/lab/Autocomplete'; import React from 'react'; import useAsync from 'react-use/lib/useAsync'; diff --git a/plugins/scaffolder/src/components/fields/RepoUrlPicker/RepoUrlPicker.tsx b/plugins/scaffolder/src/components/fields/RepoUrlPicker/RepoUrlPicker.tsx index ba333088ab..67b18c4ebd 100644 --- a/plugins/scaffolder/src/components/fields/RepoUrlPicker/RepoUrlPicker.tsx +++ b/plugins/scaffolder/src/components/fields/RepoUrlPicker/RepoUrlPicker.tsx @@ -32,7 +32,9 @@ import { RepoUrlPickerProps } from './schema'; import { RepoUrlPickerState } from './types'; import useDebounce from 'react-use/lib/useDebounce'; import { useTemplateSecrets } from '@backstage/plugin-scaffolder-react'; -import { Box, Divider, Typography } from '@material-ui/core'; +import Box from '@material-ui/core/Box'; +import Divider from '@material-ui/core/Divider'; +import Typography from '@material-ui/core/Typography'; export { RepoUrlPickerSchema } from './schema'; diff --git a/plugins/scaffolder/src/components/fields/SecretInput/SecretInput.tsx b/plugins/scaffolder/src/components/fields/SecretInput/SecretInput.tsx index e6eea9fc72..aac0cf809a 100644 --- a/plugins/scaffolder/src/components/fields/SecretInput/SecretInput.tsx +++ b/plugins/scaffolder/src/components/fields/SecretInput/SecretInput.tsx @@ -17,7 +17,8 @@ import React from 'react'; import { useTemplateSecrets } from '@backstage/plugin-scaffolder-react'; import { ScaffolderRJSFFieldProps } from '@backstage/plugin-scaffolder-react'; import { ScaffolderField } from '@backstage/plugin-scaffolder-react/alpha'; -import { Input, InputLabel } from '@material-ui/core'; +import Input from '@material-ui/core/Input'; +import InputLabel from '@material-ui/core/InputLabel'; export const SecretInput = (props: ScaffolderRJSFFieldProps) => { const { setSecrets, secrets } = useTemplateSecrets(); diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/CustomFieldExplorer.tsx b/plugins/scaffolder/src/next/TemplateEditorPage/CustomFieldExplorer.tsx index 2a4326c432..bddf891ec6 100644 --- a/plugins/scaffolder/src/next/TemplateEditorPage/CustomFieldExplorer.tsx +++ b/plugins/scaffolder/src/next/TemplateEditorPage/CustomFieldExplorer.tsx @@ -15,18 +15,16 @@ */ import { StreamLanguage } from '@codemirror/language'; import { yaml as yamlSupport } from '@codemirror/legacy-modes/mode/yaml'; -import { - Button, - Card, - CardContent, - CardHeader, - FormControl, - IconButton, - InputLabel, - makeStyles, - MenuItem, - Select, -} from '@material-ui/core'; +import Button from '@material-ui/core/Button'; +import Card from '@material-ui/core/Card'; +import CardContent from '@material-ui/core/CardContent'; +import CardHeader from '@material-ui/core/CardHeader'; +import FormControl from '@material-ui/core/FormControl'; +import IconButton from '@material-ui/core/IconButton'; +import InputLabel from '@material-ui/core/InputLabel'; +import MenuItem from '@material-ui/core/MenuItem'; +import Select from '@material-ui/core/Select'; +import { makeStyles } from '@material-ui/core/styles'; import CloseIcon from '@material-ui/icons/Close'; import CodeMirror from '@uiw/react-codemirror'; import React, { useCallback, useMemo, useState } from 'react'; diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/IconLink.tsx b/plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/IconLink.tsx index 6676c622fa..079294cc50 100644 --- a/plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/IconLink.tsx +++ b/plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/IconLink.tsx @@ -14,7 +14,10 @@ * limitations under the License. */ import React from 'react'; -import { Grid, LinkProps, makeStyles, Typography } from '@material-ui/core'; +import { makeStyles } from '@material-ui/core/styles'; +import Typography from '@material-ui/core/Typography'; +import Grid from '@material-ui/core/Grid'; +import { LinkProps } from '@material-ui/core/Link'; import LanguageIcon from '@material-ui/icons/Language'; import { IconComponent } from '@backstage/core-plugin-api'; diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/TaskPageLinks.tsx b/plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/TaskPageLinks.tsx index 59c1515b79..5f62509551 100644 --- a/plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/TaskPageLinks.tsx +++ b/plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/TaskPageLinks.tsx @@ -16,7 +16,7 @@ import { parseEntityRef } from '@backstage/catalog-model'; import { entityRouteRef } from '@backstage/plugin-catalog-react'; -import { Box } from '@material-ui/core'; +import Box from '@material-ui/core/Box'; import LanguageIcon from '@material-ui/icons/Language'; import React from 'react'; import { ScaffolderTaskOutput } from '@backstage/plugin-scaffolder-react'; diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/TaskStatusStepper.tsx b/plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/TaskStatusStepper.tsx index f776d133e0..4a79338912 100644 --- a/plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/TaskStatusStepper.tsx +++ b/plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/TaskStatusStepper.tsx @@ -14,19 +14,15 @@ * limitations under the License. */ import React, { useState } from 'react'; +import { makeStyles, createStyles, Theme } from '@material-ui/core/styles'; import { memo } from 'react'; import Step from '@material-ui/core/Step'; import StepLabel from '@material-ui/core/StepLabel'; import Stepper from '@material-ui/core/Stepper'; import { ScaffolderTaskStatus } from '@backstage/plugin-scaffolder-react'; -import { - StepButton, - StepIconProps, - Theme, - createStyles, - makeStyles, - CircularProgress, -} from '@material-ui/core'; +import StepButton from '@material-ui/core/StepButton'; +import { StepIconProps } from '@material-ui/core/StepIcon'; +import CircularProgress from '@material-ui/core/CircularProgress'; import Cancel from '@material-ui/icons/Cancel'; import Check from '@material-ui/icons/Check'; import FiberManualRecordIcon from '@material-ui/icons/FiberManualRecord'; diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditor.tsx b/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditor.tsx index a348f5e513..0b6b60661a 100644 --- a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditor.tsx +++ b/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditor.tsx @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { makeStyles } from '@material-ui/core'; +import { makeStyles } from '@material-ui/core/styles'; import React, { useState } from 'react'; import type { LayoutOptions } from '@backstage/plugin-scaffolder-react'; import { FieldExtensionOptions } from '@backstage/plugin-scaffolder-react'; diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorBrowser.tsx b/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorBrowser.tsx index 996da98d4a..489ec05bbe 100644 --- a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorBrowser.tsx +++ b/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorBrowser.tsx @@ -13,7 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { Divider, IconButton, makeStyles, Tooltip } from '@material-ui/core'; +import Divider from '@material-ui/core/Divider'; +import IconButton from '@material-ui/core/IconButton'; +import Tooltip from '@material-ui/core/Tooltip'; +import { makeStyles } from '@material-ui/core/styles'; import CloseIcon from '@material-ui/icons/Close'; import RefreshIcon from '@material-ui/icons/Refresh'; import SaveIcon from '@material-ui/icons/Save'; diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorTextArea.tsx b/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorTextArea.tsx index 588b0cd4ba..ce8db485ea 100644 --- a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorTextArea.tsx +++ b/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorTextArea.tsx @@ -17,7 +17,10 @@ import { StreamLanguage } from '@codemirror/language'; import { yaml as yamlSupport } from '@codemirror/legacy-modes/mode/yaml'; import { showPanel } from '@codemirror/view'; -import { IconButton, makeStyles, Paper, Tooltip } from '@material-ui/core'; +import IconButton from '@material-ui/core/IconButton'; +import Paper from '@material-ui/core/Paper'; +import Tooltip from '@material-ui/core/Tooltip'; +import { makeStyles } from '@material-ui/core/styles'; import RefreshIcon from '@material-ui/icons/Refresh'; import SaveIcon from '@material-ui/icons/Save'; import { useKeyboardEvent } from '@react-hookz/web'; diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateFormPreviewer.tsx b/plugins/scaffolder/src/next/TemplateEditorPage/TemplateFormPreviewer.tsx index c253bc0a5f..e9515d11a8 100644 --- a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateFormPreviewer.tsx +++ b/plugins/scaffolder/src/next/TemplateEditorPage/TemplateFormPreviewer.tsx @@ -19,15 +19,13 @@ import { catalogApiRef, humanizeEntityRef, } from '@backstage/plugin-catalog-react'; -import { - FormControl, - IconButton, - InputLabel, - LinearProgress, - makeStyles, - MenuItem, - Select, -} from '@material-ui/core'; +import FormControl from '@material-ui/core/FormControl'; +import IconButton from '@material-ui/core/IconButton'; +import InputLabel from '@material-ui/core/InputLabel'; +import LinearProgress from '@material-ui/core/LinearProgress'; +import MenuItem from '@material-ui/core/MenuItem'; +import Select from '@material-ui/core/Select'; +import { makeStyles } from '@material-ui/core/styles'; import CloseIcon from '@material-ui/icons/Close'; import React, { useCallback, useState } from 'react'; import useAsync from 'react-use/lib/useAsync'; diff --git a/plugins/scaffolder/src/next/TemplateListPage/RegisterExistingButton.tsx b/plugins/scaffolder/src/next/TemplateListPage/RegisterExistingButton.tsx index eab7ce4485..abec7c47e1 100644 --- a/plugins/scaffolder/src/next/TemplateListPage/RegisterExistingButton.tsx +++ b/plugins/scaffolder/src/next/TemplateListPage/RegisterExistingButton.tsx @@ -22,7 +22,7 @@ import { Link as RouterLink, LinkProps } from 'react-router-dom'; import AddCircleOutline from '@material-ui/icons/AddCircleOutline'; import { catalogEntityCreatePermission } from '@backstage/plugin-catalog-common/alpha'; import { usePermission } from '@backstage/plugin-permission-react'; -import { Theme } from '@material-ui/core'; +import { Theme } from '@material-ui/core/styles'; /** * Properties for {@link RegisterExistingButton} diff --git a/plugins/sentry/.eslintrc.js b/plugins/sentry/.eslintrc.js index e2a53a6ad2..a2d8179106 100644 --- a/plugins/sentry/.eslintrc.js +++ b/plugins/sentry/.eslintrc.js @@ -1 +1,5 @@ -module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname, { + rules: { + '@backstage/no-top-level-material-ui-4-imports': 'error', + }, +}); diff --git a/plugins/sentry/dev/index.tsx b/plugins/sentry/dev/index.tsx index 667f965354..11207ea20c 100644 --- a/plugins/sentry/dev/index.tsx +++ b/plugins/sentry/dev/index.tsx @@ -17,7 +17,7 @@ import { Entity } from '@backstage/catalog-model'; import { createDevApp, EntityGridItem } from '@backstage/dev-utils'; import { EntityProvider } from '@backstage/plugin-catalog-react'; -import { Grid } from '@material-ui/core'; +import Grid from '@material-ui/core/Grid'; import React from 'react'; import { EntitySentryCard, diff --git a/plugins/sentry/src/components/ErrorCell/ErrorCell.tsx b/plugins/sentry/src/components/ErrorCell/ErrorCell.tsx index 2a0e0fbb69..26e1687a72 100644 --- a/plugins/sentry/src/components/ErrorCell/ErrorCell.tsx +++ b/plugins/sentry/src/components/ErrorCell/ErrorCell.tsx @@ -16,7 +16,7 @@ import React from 'react'; import { SentryIssue } from '../../api'; -import { Typography } from '@material-ui/core'; +import Typography from '@material-ui/core/Typography'; import { makeStyles } from '@material-ui/core/styles'; import { Link } from '@backstage/core-components'; diff --git a/plugins/sentry/src/components/SentryIssuesTable/SentryIssuesTable.tsx b/plugins/sentry/src/components/SentryIssuesTable/SentryIssuesTable.tsx index 8f336c629b..f9130a2ab4 100644 --- a/plugins/sentry/src/components/SentryIssuesTable/SentryIssuesTable.tsx +++ b/plugins/sentry/src/components/SentryIssuesTable/SentryIssuesTable.tsx @@ -22,7 +22,9 @@ import { ErrorGraph } from '../ErrorGraph/ErrorGraph'; import { Table, TableColumn } from '@backstage/core-components'; import Select from '@material-ui/core/Select'; import { Options } from '@material-table/core'; -import { FormControl, Grid, MenuItem } from '@material-ui/core'; +import FormControl from '@material-ui/core/FormControl'; +import Grid from '@material-ui/core/Grid'; +import MenuItem from '@material-ui/core/MenuItem'; const ONE_DAY_IN_MILLIS = 86400000; const SEVEN_DAYS_IN_MILLIS = ONE_DAY_IN_MILLIS * 7; diff --git a/plugins/shortcuts/.eslintrc.js b/plugins/shortcuts/.eslintrc.js index e2a53a6ad2..a2d8179106 100644 --- a/plugins/shortcuts/.eslintrc.js +++ b/plugins/shortcuts/.eslintrc.js @@ -1 +1,5 @@ -module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname, { + rules: { + '@backstage/no-top-level-material-ui-4-imports': 'error', + }, +}); diff --git a/plugins/shortcuts/src/AddShortcut.tsx b/plugins/shortcuts/src/AddShortcut.tsx index 15850ab389..76d3a76a03 100644 --- a/plugins/shortcuts/src/AddShortcut.tsx +++ b/plugins/shortcuts/src/AddShortcut.tsx @@ -17,13 +17,11 @@ import React, { useState } from 'react'; import { useLocation } from 'react-router-dom'; import { SubmitHandler } from 'react-hook-form'; -import { - Button, - Card, - CardHeader, - makeStyles, - Popover, -} from '@material-ui/core'; +import Button from '@material-ui/core/Button'; +import Card from '@material-ui/core/Card'; +import CardHeader from '@material-ui/core/CardHeader'; +import Popover from '@material-ui/core/Popover'; +import { makeStyles } from '@material-ui/core/styles'; import { ShortcutForm } from './ShortcutForm'; import { FormValues, Shortcut } from './types'; import { ShortcutApi } from './api'; diff --git a/plugins/shortcuts/src/EditShortcut.tsx b/plugins/shortcuts/src/EditShortcut.tsx index 9f2ffe10be..47ca1cb546 100644 --- a/plugins/shortcuts/src/EditShortcut.tsx +++ b/plugins/shortcuts/src/EditShortcut.tsx @@ -16,13 +16,11 @@ import React from 'react'; import { SubmitHandler } from 'react-hook-form'; -import { - Button, - Card, - CardHeader, - makeStyles, - Popover, -} from '@material-ui/core'; +import Button from '@material-ui/core/Button'; +import Card from '@material-ui/core/Card'; +import CardHeader from '@material-ui/core/CardHeader'; +import Popover from '@material-ui/core/Popover'; +import { makeStyles } from '@material-ui/core/styles'; import { ShortcutForm } from './ShortcutForm'; import { FormValues, Shortcut } from './types'; import DeleteIcon from '@material-ui/icons/Delete'; diff --git a/plugins/shortcuts/src/ShortcutForm.tsx b/plugins/shortcuts/src/ShortcutForm.tsx index 4d6fdcbc27..efb5829768 100644 --- a/plugins/shortcuts/src/ShortcutForm.tsx +++ b/plugins/shortcuts/src/ShortcutForm.tsx @@ -17,13 +17,11 @@ import React, { useEffect, useRef } from 'react'; import useObservable from 'react-use/lib/useObservable'; import { useForm, SubmitHandler, Controller } from 'react-hook-form'; -import { - Button, - CardActions, - CardContent, - makeStyles, - TextField, -} from '@material-ui/core'; +import Button from '@material-ui/core/Button'; +import CardActions from '@material-ui/core/CardActions'; +import CardContent from '@material-ui/core/CardContent'; +import TextField from '@material-ui/core/TextField'; +import { makeStyles } from '@material-ui/core/styles'; import { FormValues } from './types'; import { shortcutsApiRef } from './api'; import { useApi } from '@backstage/core-plugin-api'; diff --git a/plugins/signals-backend/src/plugin.ts b/plugins/signals-backend/src/plugin.ts index 2cd1917bfb..d20506f004 100644 --- a/plugins/signals-backend/src/plugin.ts +++ b/plugins/signals-backend/src/plugin.ts @@ -57,6 +57,10 @@ export const signalsPlugin = createBackendPlugin({ events, }), ); + httpRouter.addAuthPolicy({ + path: '/health', + allow: 'unauthenticated', + }); }, }); }, diff --git a/plugins/signals-backend/src/service/SignalManager.test.ts b/plugins/signals-backend/src/service/SignalManager.test.ts index e6d0cab21b..3ee99bb34b 100644 --- a/plugins/signals-backend/src/service/SignalManager.test.ts +++ b/plugins/signals-backend/src/service/SignalManager.test.ts @@ -89,7 +89,7 @@ describe('SignalManager', () => { await onEvent({ topic: 'signals', eventPayload: { - recipients: null, + recipients: { type: 'broadcast' }, channel: 'test', message: { msg: 'test' }, }, @@ -109,7 +109,7 @@ describe('SignalManager', () => { await onEvent({ topic: 'signals', eventPayload: { - recipients: null, + recipients: { type: 'broadcast' }, channel: 'test', message: { msg: 'test' }, }, @@ -152,7 +152,7 @@ describe('SignalManager', () => { await onEvent({ topic: 'signals', eventPayload: { - recipients: 'user:default/john.doe', + recipients: { type: 'user', entityRef: 'user:default/john.doe' }, channel: 'test', message: { msg: 'test' }, }, diff --git a/plugins/signals-backend/src/service/SignalManager.ts b/plugins/signals-backend/src/service/SignalManager.ts index 775af143f4..3211c51c9c 100644 --- a/plugins/signals-backend/src/service/SignalManager.ts +++ b/plugins/signals-backend/src/service/SignalManager.ts @@ -134,8 +134,10 @@ export class SignalManager { const { channel, recipients, message } = eventPayload; const jsonMessage = JSON.stringify({ channel, message }); let users: string[] = []; - if (recipients !== null) { - users = Array.isArray(recipients) ? recipients : [recipients]; + if (recipients.type === 'user') { + users = Array.isArray(recipients.entityRef) + ? recipients.entityRef + : [recipients.entityRef]; } // Actual websocket message sending @@ -143,9 +145,10 @@ export class SignalManager { if (!conn.subscriptions.has(channel)) { return; } - // Sending to all users can be done with null + + // Sending to all users can be done with broadcast if ( - recipients !== null && + recipients.type !== 'broadcast' && !conn.ownershipEntityRefs.some((ref: string) => users.includes(ref)) ) { return; diff --git a/plugins/signals-backend/src/service/standaloneServer.ts b/plugins/signals-backend/src/service/standaloneServer.ts index c92ab3797e..efb7ecedee 100644 --- a/plugins/signals-backend/src/service/standaloneServer.ts +++ b/plugins/signals-backend/src/service/standaloneServer.ts @@ -97,7 +97,7 @@ export async function startStandaloneServer( setInterval(() => { signals.publish({ - recipients: null, + recipients: { type: 'broadcast' }, channel: 'test', message: { hello: 'world' }, }); diff --git a/plugins/signals-node/README.md b/plugins/signals-node/README.md index c8b056577a..9315e65680 100644 --- a/plugins/signals-node/README.md +++ b/plugins/signals-node/README.md @@ -91,13 +91,13 @@ To allow connections from the frontend, you should also install the `@backstage/ Once you have both of the backend plugins installed, you can utilize the signal service by calling the `publish` method. This will publish the message to all subscribers in the frontend. To send message to -all subscribers, you can use `null` as `recipients` parameter. +all subscribers, you can use `broadcast` type: ```ts // Periodic sending example setInterval(async () => { await signals.publish({ - recipients: null, + recipients: { type: 'broadcast' }, channel: 'my_plugin', message: { message: 'hello world', @@ -118,7 +118,7 @@ to work: eventBroker.publish({ topic: 'signals', eventPayload: { - recipients: ['user:default/user1'], + recipients: { type: 'user', entityRef: 'user:default/user1' }, message: { message: 'hello world', }, diff --git a/plugins/signals-node/api-report.md b/plugins/signals-node/api-report.md index 16f6277ff2..cf4ab84aff 100644 --- a/plugins/signals-node/api-report.md +++ b/plugins/signals-node/api-report.md @@ -21,7 +21,14 @@ export class DefaultSignalsService implements SignalsService { // @public (undocumented) export type SignalPayload = { - recipients: string[] | string | null; + recipients: + | { + type: 'user'; + entityRef: string | string[]; + } + | { + type: 'broadcast'; + }; channel: string; message: TMessage; }; diff --git a/plugins/signals-node/src/DefaultSignalsService.test.ts b/plugins/signals-node/src/DefaultSignalsService.test.ts index 194b3c0077..982ca20d53 100644 --- a/plugins/signals-node/src/DefaultSignalsService.test.ts +++ b/plugins/signals-node/src/DefaultSignalsService.test.ts @@ -14,6 +14,7 @@ * limitations under the License. */ import { DefaultSignalsService } from './DefaultSignalsService'; +import { SignalPayload } from './types'; describe('DefaultSignalsService', () => { const mockEvents = { @@ -24,9 +25,9 @@ describe('DefaultSignalsService', () => { const service = DefaultSignalsService.create({ events: mockEvents }); it('should publish signal', () => { - const signal = { + const signal: SignalPayload = { channel: 'test-channel', - recipients: null, + recipients: { type: 'broadcast' }, message: { msg: 'hello world' }, }; service.publish(signal); diff --git a/plugins/signals-node/src/types.ts b/plugins/signals-node/src/types.ts index 9ea5ffa031..4decef6272 100644 --- a/plugins/signals-node/src/types.ts +++ b/plugins/signals-node/src/types.ts @@ -25,7 +25,9 @@ export type SignalsServiceOptions = { /** @public */ export type SignalPayload = { - recipients: string[] | string | null; + recipients: + | { type: 'user'; entityRef: string | string[] } + | { type: 'broadcast' }; channel: string; message: TMessage; }; diff --git a/plugins/signals/.eslintrc.js b/plugins/signals/.eslintrc.js index e2a53a6ad2..a2d8179106 100644 --- a/plugins/signals/.eslintrc.js +++ b/plugins/signals/.eslintrc.js @@ -1 +1,5 @@ -module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname, { + rules: { + '@backstage/no-top-level-material-ui-4-imports': 'error', + }, +}); diff --git a/plugins/signals/dev/index.tsx b/plugins/signals/dev/index.tsx index e8c7928f57..2b22424eee 100644 --- a/plugins/signals/dev/index.tsx +++ b/plugins/signals/dev/index.tsx @@ -17,7 +17,7 @@ import React from 'react'; import { createDevApp } from '@backstage/dev-utils'; import { signalsPlugin } from '../src/plugin'; import { Content, Header, Page } from '@backstage/core-components'; -import { Typography } from '@material-ui/core'; +import Typography from '@material-ui/core/Typography'; createDevApp() .registerPlugin(signalsPlugin) diff --git a/plugins/sonarqube/.eslintrc.js b/plugins/sonarqube/.eslintrc.js index e2a53a6ad2..a2d8179106 100644 --- a/plugins/sonarqube/.eslintrc.js +++ b/plugins/sonarqube/.eslintrc.js @@ -1 +1,5 @@ -module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname, { + rules: { + '@backstage/no-top-level-material-ui-4-imports': 'error', + }, +}); diff --git a/plugins/sonarqube/dev/index.tsx b/plugins/sonarqube/dev/index.tsx index 33a36bcaef..24b1894a7b 100644 --- a/plugins/sonarqube/dev/index.tsx +++ b/plugins/sonarqube/dev/index.tsx @@ -16,7 +16,7 @@ import { Entity } from '@backstage/catalog-model'; import { createDevApp, EntityGridItem } from '@backstage/dev-utils'; -import { Grid } from '@material-ui/core'; +import Grid from '@material-ui/core/Grid'; import React from 'react'; import { EntitySonarQubeCard, sonarQubePlugin } from '../src'; import { Content, Header, Page } from '@backstage/core-components'; diff --git a/plugins/sonarqube/src/components/SonarQubeCard/Percentage.tsx b/plugins/sonarqube/src/components/SonarQubeCard/Percentage.tsx index efc19d4bf5..1cbed3311f 100644 --- a/plugins/sonarqube/src/components/SonarQubeCard/Percentage.tsx +++ b/plugins/sonarqube/src/components/SonarQubeCard/Percentage.tsx @@ -15,7 +15,7 @@ */ import { makeStyles } from '@material-ui/core/styles'; -import { useTheme } from '@material-ui/core'; +import { useTheme } from '@material-ui/core/styles'; import { Circle } from 'rc-progress'; import React from 'react'; diff --git a/plugins/sonarqube/src/components/SonarQubeCard/Rating.tsx b/plugins/sonarqube/src/components/SonarQubeCard/Rating.tsx index fb722fd857..ce73fa3f2e 100644 --- a/plugins/sonarqube/src/components/SonarQubeCard/Rating.tsx +++ b/plugins/sonarqube/src/components/SonarQubeCard/Rating.tsx @@ -14,9 +14,9 @@ * limitations under the License. */ -import { Avatar } from '@material-ui/core'; +import Avatar from '@material-ui/core/Avatar'; import { lighten, makeStyles } from '@material-ui/core/styles'; -import { CSSProperties } from '@material-ui/styles'; +import { CSSProperties } from '@material-ui/styles/withStyles'; import React, { useMemo } from 'react'; const useStyles = makeStyles(theme => { diff --git a/plugins/sonarqube/src/components/SonarQubeCard/RatingCard.tsx b/plugins/sonarqube/src/components/SonarQubeCard/RatingCard.tsx index 547c3008c0..a8e0cf1c78 100644 --- a/plugins/sonarqube/src/components/SonarQubeCard/RatingCard.tsx +++ b/plugins/sonarqube/src/components/SonarQubeCard/RatingCard.tsx @@ -15,7 +15,8 @@ */ import { Link } from '@backstage/core-components'; -import { Grid, Typography } from '@material-ui/core'; +import Grid from '@material-ui/core/Grid'; +import Typography from '@material-ui/core/Typography'; import { makeStyles } from '@material-ui/core/styles'; import React, { ReactNode } from 'react'; diff --git a/plugins/sonarqube/src/components/SonarQubeCard/SonarQubeCard.tsx b/plugins/sonarqube/src/components/SonarQubeCard/SonarQubeCard.tsx index 9a6e9fb8ed..4f4f4e4fd7 100644 --- a/plugins/sonarqube/src/components/SonarQubeCard/SonarQubeCard.tsx +++ b/plugins/sonarqube/src/components/SonarQubeCard/SonarQubeCard.tsx @@ -23,7 +23,8 @@ import { useProjectInfo, } from '@backstage/plugin-sonarqube-react'; import { SONARQUBE_PROJECT_KEY_ANNOTATION } from '@backstage/plugin-sonarqube-react'; -import { Chip, Grid } from '@material-ui/core'; +import Chip from '@material-ui/core/Chip'; +import Grid from '@material-ui/core/Grid'; import { makeStyles } from '@material-ui/core/styles'; import BugReport from '@material-ui/icons/BugReport'; import Lock from '@material-ui/icons/Lock'; diff --git a/plugins/splunk-on-call/.eslintrc.js b/plugins/splunk-on-call/.eslintrc.js index e2a53a6ad2..a2d8179106 100644 --- a/plugins/splunk-on-call/.eslintrc.js +++ b/plugins/splunk-on-call/.eslintrc.js @@ -1 +1,5 @@ -module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname, { + rules: { + '@backstage/no-top-level-material-ui-4-imports': 'error', + }, +}); diff --git a/plugins/splunk-on-call/src/components/EntitySplunkOnCallCard.tsx b/plugins/splunk-on-call/src/components/EntitySplunkOnCallCard.tsx index 5800ea98b6..84770c6d6e 100644 --- a/plugins/splunk-on-call/src/components/EntitySplunkOnCallCard.tsx +++ b/plugins/splunk-on-call/src/components/EntitySplunkOnCallCard.tsx @@ -20,17 +20,15 @@ import { useEntity, MissingAnnotationEmptyState, } from '@backstage/plugin-catalog-react'; -import { - Card, - CardContent, - CardHeader, - Divider, - makeStyles, - Typography, -} from '@material-ui/core'; +import Card from '@material-ui/core/Card'; +import CardContent from '@material-ui/core/CardContent'; +import CardHeader from '@material-ui/core/CardHeader'; +import Divider from '@material-ui/core/Divider'; +import Typography from '@material-ui/core/Typography'; +import { makeStyles } from '@material-ui/core/styles'; import AlarmAddIcon from '@material-ui/icons/AlarmAdd'; import WebIcon from '@material-ui/icons/Web'; -import { Alert } from '@material-ui/lab'; +import Alert from '@material-ui/lab/Alert'; import { splunkOnCallApiRef, UnauthorizedError } from '../api'; import { MissingApiKeyOrApiIdError } from './Errors'; import { EscalationPolicy } from './Escalation'; diff --git a/plugins/splunk-on-call/src/components/Errors/MissingApiKeyOrApiIdError.tsx b/plugins/splunk-on-call/src/components/Errors/MissingApiKeyOrApiIdError.tsx index bc8aa05813..e302a25105 100644 --- a/plugins/splunk-on-call/src/components/Errors/MissingApiKeyOrApiIdError.tsx +++ b/plugins/splunk-on-call/src/components/Errors/MissingApiKeyOrApiIdError.tsx @@ -14,7 +14,7 @@ * limitations under the License. */ import React from 'react'; -import { Button } from '@material-ui/core'; +import Button from '@material-ui/core/Button'; import { EmptyState } from '@backstage/core-components'; export const MissingApiKeyOrApiIdError = () => ( diff --git a/plugins/splunk-on-call/src/components/Escalation/EscalationPolicy.tsx b/plugins/splunk-on-call/src/components/Escalation/EscalationPolicy.tsx index 7902453490..b35464f303 100644 --- a/plugins/splunk-on-call/src/components/Escalation/EscalationPolicy.tsx +++ b/plugins/splunk-on-call/src/components/Escalation/EscalationPolicy.tsx @@ -15,18 +15,14 @@ */ import React from 'react'; -import { - createStyles, - List, - ListSubheader, - makeStyles, - Theme, -} from '@material-ui/core'; +import List from '@material-ui/core/List'; +import ListSubheader from '@material-ui/core/ListSubheader'; +import { createStyles, makeStyles, Theme } from '@material-ui/core/styles'; import { EscalationUsersEmptyState } from './EscalationUsersEmptyState'; import { EscalationUser } from './EscalationUser'; import useAsync from 'react-use/lib/useAsync'; import { splunkOnCallApiRef } from '../../api'; -import { Alert } from '@material-ui/lab'; +import Alert from '@material-ui/lab/Alert'; import { User } from '../types'; import { useApi } from '@backstage/core-plugin-api'; diff --git a/plugins/splunk-on-call/src/components/Escalation/EscalationUser.tsx b/plugins/splunk-on-call/src/components/Escalation/EscalationUser.tsx index ba7abbddab..8f7944753f 100644 --- a/plugins/splunk-on-call/src/components/Escalation/EscalationUser.tsx +++ b/plugins/splunk-on-call/src/components/Escalation/EscalationUser.tsx @@ -15,16 +15,14 @@ */ import React from 'react'; -import { - ListItem, - ListItemIcon, - ListItemSecondaryAction, - Tooltip, - ListItemText, - makeStyles, - IconButton, - Typography, -} from '@material-ui/core'; +import ListItem from '@material-ui/core/ListItem'; +import ListItemIcon from '@material-ui/core/ListItemIcon'; +import ListItemSecondaryAction from '@material-ui/core/ListItemSecondaryAction'; +import Tooltip from '@material-ui/core/Tooltip'; +import ListItemText from '@material-ui/core/ListItemText'; +import IconButton from '@material-ui/core/IconButton'; +import Typography from '@material-ui/core/Typography'; +import { makeStyles } from '@material-ui/core/styles'; import Avatar from '@material-ui/core/Avatar'; import EmailIcon from '@material-ui/icons/Email'; import { User } from '../types'; diff --git a/plugins/splunk-on-call/src/components/Escalation/EscalationUsersEmptyState.tsx b/plugins/splunk-on-call/src/components/Escalation/EscalationUsersEmptyState.tsx index b4c10ddcf8..8a32069a50 100644 --- a/plugins/splunk-on-call/src/components/Escalation/EscalationUsersEmptyState.tsx +++ b/plugins/splunk-on-call/src/components/Escalation/EscalationUsersEmptyState.tsx @@ -15,12 +15,10 @@ */ import React from 'react'; -import { - ListItem, - ListItemIcon, - ListItemText, - makeStyles, -} from '@material-ui/core'; +import ListItem from '@material-ui/core/ListItem'; +import ListItemIcon from '@material-ui/core/ListItemIcon'; +import ListItemText from '@material-ui/core/ListItemText'; +import { makeStyles } from '@material-ui/core/styles'; import { StatusWarning } from '@backstage/core-components'; const useStyles = makeStyles({ diff --git a/plugins/splunk-on-call/src/components/Incident/IncidentEmptyState.tsx b/plugins/splunk-on-call/src/components/Incident/IncidentEmptyState.tsx index 87108f3d74..181ff6ad84 100644 --- a/plugins/splunk-on-call/src/components/Incident/IncidentEmptyState.tsx +++ b/plugins/splunk-on-call/src/components/Incident/IncidentEmptyState.tsx @@ -15,7 +15,8 @@ */ import React from 'react'; -import { Grid, Typography } from '@material-ui/core'; +import Grid from '@material-ui/core/Grid'; +import Typography from '@material-ui/core/Typography'; import EmptyStateImage from '../../assets/emptystate.svg'; export const IncidentsEmptyState = () => { diff --git a/plugins/splunk-on-call/src/components/Incident/IncidentListItem.tsx b/plugins/splunk-on-call/src/components/Incident/IncidentListItem.tsx index d8b6a56efc..3689db9b0a 100644 --- a/plugins/splunk-on-call/src/components/Incident/IncidentListItem.tsx +++ b/plugins/splunk-on-call/src/components/Incident/IncidentListItem.tsx @@ -15,16 +15,14 @@ */ import React, { useEffect } from 'react'; -import { - ListItem, - ListItemIcon, - ListItemSecondaryAction, - Tooltip, - ListItemText, - makeStyles, - IconButton, - Typography, -} from '@material-ui/core'; +import ListItem from '@material-ui/core/ListItem'; +import ListItemIcon from '@material-ui/core/ListItemIcon'; +import ListItemSecondaryAction from '@material-ui/core/ListItemSecondaryAction'; +import Tooltip from '@material-ui/core/Tooltip'; +import ListItemText from '@material-ui/core/ListItemText'; +import IconButton from '@material-ui/core/IconButton'; +import Typography from '@material-ui/core/Typography'; +import { makeStyles } from '@material-ui/core/styles'; import DoneIcon from '@material-ui/icons/Done'; import DoneAllIcon from '@material-ui/icons/DoneAll'; import { DateTime, Duration } from 'luxon'; diff --git a/plugins/splunk-on-call/src/components/Incident/Incidents.tsx b/plugins/splunk-on-call/src/components/Incident/Incidents.tsx index 6dcb4f9989..fba7e540da 100644 --- a/plugins/splunk-on-call/src/components/Incident/Incidents.tsx +++ b/plugins/splunk-on-call/src/components/Incident/Incidents.tsx @@ -15,18 +15,14 @@ */ import React, { useEffect } from 'react'; -import { - createStyles, - List, - ListSubheader, - makeStyles, - Theme, -} from '@material-ui/core'; +import List from '@material-ui/core/List'; +import ListSubheader from '@material-ui/core/ListSubheader'; +import { createStyles, makeStyles, Theme } from '@material-ui/core/styles'; import { IncidentListItem } from './IncidentListItem'; import { IncidentsEmptyState } from './IncidentEmptyState'; import useAsyncFn from 'react-use/lib/useAsyncFn'; import { splunkOnCallApiRef } from '../../api'; -import { Alert } from '@material-ui/lab'; +import Alert from '@material-ui/lab/Alert'; import { useApi } from '@backstage/core-plugin-api'; import { Progress } from '@backstage/core-components'; diff --git a/plugins/splunk-on-call/src/components/SplunkOnCallPage.tsx b/plugins/splunk-on-call/src/components/SplunkOnCallPage.tsx index 4cbefa244d..58df3e3304 100644 --- a/plugins/splunk-on-call/src/components/SplunkOnCallPage.tsx +++ b/plugins/splunk-on-call/src/components/SplunkOnCallPage.tsx @@ -15,7 +15,8 @@ */ import React from 'react'; -import { Grid, makeStyles } from '@material-ui/core'; +import Grid from '@material-ui/core/Grid'; +import { makeStyles } from '@material-ui/core/styles'; import { EntitySplunkOnCallCard } from './EntitySplunkOnCallCard'; import { Content, diff --git a/plugins/splunk-on-call/src/components/TriggerDialog/TriggerDialog.tsx b/plugins/splunk-on-call/src/components/TriggerDialog/TriggerDialog.tsx index dd8f0b1909..db16c12c04 100644 --- a/plugins/splunk-on-call/src/components/TriggerDialog/TriggerDialog.tsx +++ b/plugins/splunk-on-call/src/components/TriggerDialog/TriggerDialog.tsx @@ -15,26 +15,22 @@ */ import React, { useState, useEffect } from 'react'; -import { - Dialog, - DialogTitle, - TextField, - DialogActions, - Button, - DialogContent, - Typography, - CircularProgress, - Select, - MenuItem, - createStyles, - makeStyles, - Theme, - FormControl, - InputLabel, -} from '@material-ui/core'; +import Dialog from '@material-ui/core/Dialog'; +import DialogTitle from '@material-ui/core/DialogTitle'; +import TextField from '@material-ui/core/TextField'; +import DialogActions from '@material-ui/core/DialogActions'; +import Button from '@material-ui/core/Button'; +import DialogContent from '@material-ui/core/DialogContent'; +import Typography from '@material-ui/core/Typography'; +import CircularProgress from '@material-ui/core/CircularProgress'; +import Select from '@material-ui/core/Select'; +import MenuItem from '@material-ui/core/MenuItem'; +import FormControl from '@material-ui/core/FormControl'; +import InputLabel from '@material-ui/core/InputLabel'; +import { createStyles, makeStyles, Theme } from '@material-ui/core/styles'; import useAsyncFn from 'react-use/lib/useAsyncFn'; import { splunkOnCallApiRef } from '../../api'; -import { Alert } from '@material-ui/lab'; +import Alert from '@material-ui/lab/Alert'; import { TriggerAlarmRequest } from '../../api'; import { useApi, alertApiRef } from '@backstage/core-plugin-api'; diff --git a/plugins/stack-overflow/.eslintrc.js b/plugins/stack-overflow/.eslintrc.js index e2a53a6ad2..a2d8179106 100644 --- a/plugins/stack-overflow/.eslintrc.js +++ b/plugins/stack-overflow/.eslintrc.js @@ -1 +1,5 @@ -module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname, { + rules: { + '@backstage/no-top-level-material-ui-4-imports': 'error', + }, +}); diff --git a/plugins/stack-overflow/src/home/StackOverflowQuestions/Content.tsx b/plugins/stack-overflow/src/home/StackOverflowQuestions/Content.tsx index 8d8aeccb3b..d74f296614 100644 --- a/plugins/stack-overflow/src/home/StackOverflowQuestions/Content.tsx +++ b/plugins/stack-overflow/src/home/StackOverflowQuestions/Content.tsx @@ -16,14 +16,12 @@ import { useApi } from '@backstage/core-plugin-api'; import { Link } from '@backstage/core-components'; -import { - IconButton, - List, - ListItem, - ListItemText, - ListItemSecondaryAction, - ListItemIcon, -} from '@material-ui/core'; +import IconButton from '@material-ui/core/IconButton'; +import List from '@material-ui/core/List'; +import ListItem from '@material-ui/core/ListItem'; +import ListItemText from '@material-ui/core/ListItemText'; +import ListItemSecondaryAction from '@material-ui/core/ListItemSecondaryAction'; +import ListItemIcon from '@material-ui/core/ListItemIcon'; import Typography from '@material-ui/core/Typography'; import OpenInNewIcon from '@material-ui/icons/OpenInNew'; import useAsync from 'react-use/lib/useAsync'; diff --git a/plugins/stack-overflow/src/home/StackOverflowQuestions/StackOverflowQuestions.stories.tsx b/plugins/stack-overflow/src/home/StackOverflowQuestions/StackOverflowQuestions.stories.tsx index 9f0fd75341..b9ac36f588 100644 --- a/plugins/stack-overflow/src/home/StackOverflowQuestions/StackOverflowQuestions.stories.tsx +++ b/plugins/stack-overflow/src/home/StackOverflowQuestions/StackOverflowQuestions.stories.tsx @@ -18,7 +18,7 @@ import { HomePageStackOverflowQuestions } from '../../plugin'; import { wrapInTestApp, TestApiProvider } from '@backstage/test-utils'; import { configApiRef } from '@backstage/core-plugin-api'; import { ConfigReader } from '@backstage/config'; -import { Grid } from '@material-ui/core'; +import Grid from '@material-ui/core/Grid'; import React, { ComponentType, PropsWithChildren } from 'react'; import { StackOverflowIcon } from '../../icons'; import { stackOverflowApiRef } from '../../api'; diff --git a/plugins/stack-overflow/src/search/StackOverflowSearchResultListItem/StackOverflowSearchResultListItem.tsx b/plugins/stack-overflow/src/search/StackOverflowSearchResultListItem/StackOverflowSearchResultListItem.tsx index 70e182b86d..90c129b901 100644 --- a/plugins/stack-overflow/src/search/StackOverflowSearchResultListItem/StackOverflowSearchResultListItem.tsx +++ b/plugins/stack-overflow/src/search/StackOverflowSearchResultListItem/StackOverflowSearchResultListItem.tsx @@ -16,14 +16,12 @@ import React from 'react'; import { Link } from '@backstage/core-components'; -import { - Divider, - ListItem, - ListItemText, - ListItemIcon, - Box, - Chip, -} from '@material-ui/core'; +import Divider from '@material-ui/core/Divider'; +import ListItem from '@material-ui/core/ListItem'; +import ListItemText from '@material-ui/core/ListItemText'; +import ListItemIcon from '@material-ui/core/ListItemIcon'; +import Box from '@material-ui/core/Box'; +import Chip from '@material-ui/core/Chip'; import { useAnalytics } from '@backstage/core-plugin-api'; import type { ResultHighlight } from '@backstage/plugin-search-common'; import { HighlightedSearchResultText } from '@backstage/plugin-search-react'; diff --git a/plugins/stackstorm/.eslintrc.js b/plugins/stackstorm/.eslintrc.js index e2a53a6ad2..a2d8179106 100644 --- a/plugins/stackstorm/.eslintrc.js +++ b/plugins/stackstorm/.eslintrc.js @@ -1 +1,5 @@ -module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname, { + rules: { + '@backstage/no-top-level-material-ui-4-imports': 'error', + }, +}); diff --git a/plugins/stackstorm/src/components/ActionsList/ActionsList.tsx b/plugins/stackstorm/src/components/ActionsList/ActionsList.tsx index 1080f67373..bd5fc56c2f 100644 --- a/plugins/stackstorm/src/components/ActionsList/ActionsList.tsx +++ b/plugins/stackstorm/src/components/ActionsList/ActionsList.tsx @@ -17,14 +17,12 @@ import React, { useState } from 'react'; import useAsync from 'react-use/lib/useAsync'; import { Link, Progress, ResponseErrorPanel } from '@backstage/core-components'; import { useApi } from '@backstage/core-plugin-api'; -import { - List, - ListItemText, - Collapse, - ListItem, - ListItemSecondaryAction, - ListItemIcon, -} from '@material-ui/core'; +import List from '@material-ui/core/List'; +import ListItemText from '@material-ui/core/ListItemText'; +import Collapse from '@material-ui/core/Collapse'; +import ListItem from '@material-ui/core/ListItem'; +import ListItemSecondaryAction from '@material-ui/core/ListItemSecondaryAction'; +import ListItemIcon from '@material-ui/core/ListItemIcon'; import { makeStyles } from '@material-ui/core/styles'; import ExpandMore from '@material-ui/icons/ExpandMore'; import ExpandLess from '@material-ui/icons/ExpandLess'; diff --git a/plugins/stackstorm/src/components/ExecutionsTable/ExecutionPanel.tsx b/plugins/stackstorm/src/components/ExecutionsTable/ExecutionPanel.tsx index 8a55c31246..cd22120898 100644 --- a/plugins/stackstorm/src/components/ExecutionsTable/ExecutionPanel.tsx +++ b/plugins/stackstorm/src/components/ExecutionsTable/ExecutionPanel.tsx @@ -22,19 +22,16 @@ import { import { useApi } from '@backstage/core-plugin-api'; import { Execution, stackstormApiRef } from '../../api'; import useAsync from 'react-use/lib/useAsync'; -import { - Button, - Card, - CardActions, - CardContent, - makeStyles, - Table, - TableBody, - TableCell, - TableRow, - Typography, - withStyles, -} from '@material-ui/core'; +import Button from '@material-ui/core/Button'; +import Card from '@material-ui/core/Card'; +import CardActions from '@material-ui/core/CardActions'; +import CardContent from '@material-ui/core/CardContent'; +import Table from '@material-ui/core/Table'; +import TableBody from '@material-ui/core/TableBody'; +import TableCell from '@material-ui/core/TableCell'; +import TableRow from '@material-ui/core/TableRow'; +import Typography from '@material-ui/core/Typography'; +import { makeStyles, withStyles } from '@material-ui/core/styles'; import { Status } from './Status'; const useStyles = makeStyles(theme => ({ diff --git a/plugins/stackstorm/src/components/StackstormHome/StackstormHome.tsx b/plugins/stackstorm/src/components/StackstormHome/StackstormHome.tsx index 1bb9031815..13b1e181b5 100644 --- a/plugins/stackstorm/src/components/StackstormHome/StackstormHome.tsx +++ b/plugins/stackstorm/src/components/StackstormHome/StackstormHome.tsx @@ -14,7 +14,7 @@ * limitations under the License. */ import React, { Fragment } from 'react'; -import { IconButton } from '@material-ui/core'; +import IconButton from '@material-ui/core/IconButton'; import { Header, Page, diff --git a/plugins/tech-insights-backend-module-jsonfc/config.json b/plugins/tech-insights-backend-module-jsonfc/config.json index b95b5e52bb..347d4aa54f 100644 --- a/plugins/tech-insights-backend-module-jsonfc/config.json +++ b/plugins/tech-insights-backend-module-jsonfc/config.json @@ -109,7 +109,7 @@ ] }, "rule": { - "type": "string", + "type": "object", "required": ["conditions"], "properties": { "conditions": { diff --git a/plugins/tech-insights/.eslintrc.js b/plugins/tech-insights/.eslintrc.js index e2a53a6ad2..a2d8179106 100644 --- a/plugins/tech-insights/.eslintrc.js +++ b/plugins/tech-insights/.eslintrc.js @@ -1 +1,5 @@ -module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname, { + rules: { + '@backstage/no-top-level-material-ui-4-imports': 'error', + }, +}); diff --git a/plugins/tech-insights/src/components/ScorecardsContent/ScorecardContent.tsx b/plugins/tech-insights/src/components/ScorecardsContent/ScorecardContent.tsx index f8871b87c1..c144833ea7 100644 --- a/plugins/tech-insights/src/components/ScorecardsContent/ScorecardContent.tsx +++ b/plugins/tech-insights/src/components/ScorecardsContent/ScorecardContent.tsx @@ -21,7 +21,7 @@ import { useApi } from '@backstage/core-plugin-api'; import { ScorecardInfo } from '../ScorecardsInfo'; import Alert from '@material-ui/lab/Alert'; import { techInsightsApiRef } from '../../api/TechInsightsApi'; -import { makeStyles } from '@material-ui/core'; +import { makeStyles } from '@material-ui/core/styles'; import { useEntity } from '@backstage/plugin-catalog-react'; import { getCompoundEntityRef } from '@backstage/catalog-model'; diff --git a/plugins/tech-insights/src/components/ScorecardsInfo/ScorecardInfo.tsx b/plugins/tech-insights/src/components/ScorecardsInfo/ScorecardInfo.tsx index cfff074368..2a2ca982d1 100644 --- a/plugins/tech-insights/src/components/ScorecardsInfo/ScorecardInfo.tsx +++ b/plugins/tech-insights/src/components/ScorecardsInfo/ScorecardInfo.tsx @@ -15,10 +15,12 @@ */ import React from 'react'; -import { makeStyles, Grid, Typography } from '@material-ui/core'; +import Grid from '@material-ui/core/Grid'; +import Typography from '@material-ui/core/Typography'; +import { makeStyles } from '@material-ui/core/styles'; import { InfoCard } from '@backstage/core-components'; import { CheckResult } from '@backstage/plugin-tech-insights-common'; -import { Alert } from '@material-ui/lab'; +import Alert from '@material-ui/lab/Alert'; import { ScorecardsList } from '../ScorecardsList'; const useStyles = makeStyles(theme => ({ diff --git a/plugins/tech-insights/src/components/ScorecardsList/ScorecardsList.tsx b/plugins/tech-insights/src/components/ScorecardsList/ScorecardsList.tsx index 1a9d04a9de..dcd94eb0d7 100644 --- a/plugins/tech-insights/src/components/ScorecardsList/ScorecardsList.tsx +++ b/plugins/tech-insights/src/components/ScorecardsList/ScorecardsList.tsx @@ -16,10 +16,13 @@ import React from 'react'; import { useApi } from '@backstage/core-plugin-api'; -import { makeStyles, List, ListItem, ListItemText } from '@material-ui/core'; +import List from '@material-ui/core/List'; +import ListItem from '@material-ui/core/ListItem'; +import ListItemText from '@material-ui/core/ListItemText'; +import { makeStyles } from '@material-ui/core/styles'; import { techInsightsApiRef } from '../../api'; import { CheckResult } from '@backstage/plugin-tech-insights-common'; -import { Alert } from '@material-ui/lab'; +import Alert from '@material-ui/lab/Alert'; import { MarkdownContent } from '@backstage/core-components'; const useStyles = makeStyles(theme => ({ diff --git a/plugins/techdocs-addons-test-utils/src/test-utils.tsx b/plugins/techdocs-addons-test-utils/src/test-utils.tsx index f26dfea6fd..51a4650f99 100644 --- a/plugins/techdocs-addons-test-utils/src/test-utils.tsx +++ b/plugins/techdocs-addons-test-utils/src/test-utils.tsx @@ -24,7 +24,11 @@ import { act, render } from '@testing-library/react'; import { wrapInTestApp, TestApiProvider } from '@backstage/test-utils'; import { FlatRoutes } from '@backstage/core-app-api'; -import { ApiRef } from '@backstage/core-plugin-api'; +import { + ApiRef, + discoveryApiRef, + fetchApiRef, +} from '@backstage/core-plugin-api'; import { TechDocsAddons, @@ -69,6 +73,22 @@ const scmIntegrationsApi = { fromConfig: jest.fn().mockReturnValue({}), }; +const discoveryApi = { + getBaseUrl: jest + .fn() + .mockResolvedValue('https://backstage.example.com/api/techdocs'), +}; + +const fetchApi = { + fetch: jest.fn().mockResolvedValue({ + ok: true, + json: jest.fn().mockResolvedValue({ + // Expires in 10 minutes + expiresAt: new Date(Date.now() + 10 * 60 * 1000).toISOString(), + }), + }), +}; + /** @ignore */ type TechDocsAddonTesterTestApiPair = TApi extends infer TImpl ? readonly [ApiRef, Partial] @@ -204,6 +224,8 @@ export class TechDocsAddonTester { */ build() { const apis: TechdocsAddonTesterApis = [ + [fetchApiRef, fetchApi], + [discoveryApiRef, discoveryApi], [techdocsApiRef, techdocsApi], [techdocsStorageApiRef, techdocsStorageApi], [searchApiRef, searchApi], diff --git a/plugins/techdocs/.eslintrc.js b/plugins/techdocs/.eslintrc.js index e2a53a6ad2..e487f765b2 100644 --- a/plugins/techdocs/.eslintrc.js +++ b/plugins/techdocs/.eslintrc.js @@ -1 +1,5 @@ -module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname, { + rules: { + '@backstage/no-top-level-material-ui-4-imports': 'error', + }, +}); diff --git a/plugins/techdocs/api-report.md b/plugins/techdocs/api-report.md index dd26cf2f98..06b972bf5f 100644 --- a/plugins/techdocs/api-report.md +++ b/plugins/techdocs/api-report.md @@ -9,7 +9,7 @@ import { ApiRef } from '@backstage/core-plugin-api'; import { BackstagePlugin } from '@backstage/core-plugin-api'; import { CompoundEntityRef } from '@backstage/catalog-model'; import { Config } from '@backstage/config'; -import { CSSProperties } from '@material-ui/styles'; +import { CSSProperties } from '@material-ui/styles/withStyles'; import { DiscoveryApi } from '@backstage/core-plugin-api'; import { Entity } from '@backstage/catalog-model'; import { FetchApi } from '@backstage/core-plugin-api'; @@ -29,7 +29,7 @@ import { TechDocsApi as TechDocsApi_2 } from '@backstage/plugin-techdocs-react'; import { TechDocsEntityMetadata as TechDocsEntityMetadata_2 } from '@backstage/plugin-techdocs-react'; import { TechDocsMetadata as TechDocsMetadata_2 } from '@backstage/plugin-techdocs-react'; import { TechDocsStorageApi as TechDocsStorageApi_2 } from '@backstage/plugin-techdocs-react'; -import { ToolbarProps } from '@material-ui/core'; +import { ToolbarProps } from '@material-ui/core/Toolbar'; import { UserListFilterKind } from '@backstage/plugin-catalog-react'; // @public diff --git a/plugins/techdocs/package.json b/plugins/techdocs/package.json index 533736c3bc..a51eb5f723 100644 --- a/plugins/techdocs/package.json +++ b/plugins/techdocs/package.json @@ -60,6 +60,7 @@ "@backstage/frontend-plugin-api": "workspace:^", "@backstage/integration": "workspace:^", "@backstage/integration-react": "workspace:^", + "@backstage/plugin-auth-react": "workspace:^", "@backstage/plugin-catalog-react": "workspace:^", "@backstage/plugin-search-common": "workspace:^", "@backstage/plugin-search-react": "workspace:^", diff --git a/plugins/techdocs/src/home/components/Grids/DocsCardGrid.tsx b/plugins/techdocs/src/home/components/Grids/DocsCardGrid.tsx index 8843249291..d2947b5f64 100644 --- a/plugins/techdocs/src/home/components/Grids/DocsCardGrid.tsx +++ b/plugins/techdocs/src/home/components/Grids/DocsCardGrid.tsx @@ -23,7 +23,10 @@ import { ItemCardGrid, ItemCardHeader, } from '@backstage/core-components'; -import { Card, CardActions, CardContent, CardMedia } from '@material-ui/core'; +import Card from '@material-ui/core/Card'; +import CardActions from '@material-ui/core/CardActions'; +import CardContent from '@material-ui/core/CardContent'; +import CardMedia from '@material-ui/core/CardMedia'; import React from 'react'; /** diff --git a/plugins/techdocs/src/home/components/Grids/EntityListDocsGrid.tsx b/plugins/techdocs/src/home/components/Grids/EntityListDocsGrid.tsx index b86dde8226..2f62c24646 100644 --- a/plugins/techdocs/src/home/components/Grids/EntityListDocsGrid.tsx +++ b/plugins/techdocs/src/home/components/Grids/EntityListDocsGrid.tsx @@ -28,7 +28,7 @@ import { useEntityList, useEntityOwnership, } from '@backstage/plugin-catalog-react'; -import { Typography } from '@material-ui/core'; +import Typography from '@material-ui/core/Typography'; import React from 'react'; /** diff --git a/plugins/techdocs/src/home/components/Tables/actions.tsx b/plugins/techdocs/src/home/components/Tables/actions.tsx index e722a9929b..c95dd8b94c 100644 --- a/plugins/techdocs/src/home/components/Tables/actions.tsx +++ b/plugins/techdocs/src/home/components/Tables/actions.tsx @@ -17,7 +17,7 @@ import React from 'react'; import ShareIcon from '@material-ui/icons/Share'; import { DocsTableRow } from './types'; -import { withStyles } from '@material-ui/styles'; +import { withStyles } from '@material-ui/core/styles'; import Star from '@material-ui/icons/Star'; import StarBorder from '@material-ui/icons/StarBorder'; diff --git a/plugins/techdocs/src/home/components/TechDocsCustomHome.tsx b/plugins/techdocs/src/home/components/TechDocsCustomHome.tsx index 7023560e83..95c50d3912 100644 --- a/plugins/techdocs/src/home/components/TechDocsCustomHome.tsx +++ b/plugins/techdocs/src/home/components/TechDocsCustomHome.tsx @@ -16,8 +16,8 @@ import React, { useState } from 'react'; import useAsync from 'react-use/lib/useAsync'; -import { makeStyles } from '@material-ui/core'; -import { CSSProperties } from '@material-ui/styles'; +import { makeStyles } from '@material-ui/core/styles'; +import { CSSProperties } from '@material-ui/styles/withStyles'; import { CATALOG_FILTER_EXISTS, catalogApiRef, diff --git a/plugins/techdocs/src/reader/components/TechDocsBuildLogs.tsx b/plugins/techdocs/src/reader/components/TechDocsBuildLogs.tsx index 01e638e59c..483c60d607 100644 --- a/plugins/techdocs/src/reader/components/TechDocsBuildLogs.tsx +++ b/plugins/techdocs/src/reader/components/TechDocsBuildLogs.tsx @@ -15,16 +15,12 @@ */ import { LogViewer } from '@backstage/core-components'; -import { - Button, - createStyles, - Drawer, - Grid, - IconButton, - makeStyles, - Theme, - Typography, -} from '@material-ui/core'; +import Button from '@material-ui/core/Button'; +import Drawer from '@material-ui/core/Drawer'; +import Grid from '@material-ui/core/Grid'; +import IconButton from '@material-ui/core/IconButton'; +import Typography from '@material-ui/core/Typography'; +import { createStyles, makeStyles, Theme } from '@material-ui/core/styles'; import Close from '@material-ui/icons/Close'; import React, { useState } from 'react'; diff --git a/plugins/techdocs/src/reader/components/TechDocsReaderPage/TechDocsAuthProvider.tsx b/plugins/techdocs/src/reader/components/TechDocsReaderPage/TechDocsAuthProvider.tsx deleted file mode 100644 index d248af6d1f..0000000000 --- a/plugins/techdocs/src/reader/components/TechDocsReaderPage/TechDocsAuthProvider.tsx +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Copyright 2024 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import React, { ReactNode, useEffect, useState, useCallback } from 'react'; -import { ErrorPanel } from '@backstage/core-components'; -import { techdocsApiRef } from '@backstage/plugin-techdocs-react'; -import { useApi, useApp } from '@backstage/core-plugin-api'; -import useAsyncRetry from 'react-use/lib/useAsyncRetry'; -import { Button } from '@material-ui/core'; - -type TechDocsRefreshCookieMessage = MessageEvent<{ - action: string; - payload: { - expiresAt: string; - }; -}>; - -function useTechDocsCookie() { - const techdocsApi = useApi(techdocsApiRef); - - const { retry, ...state } = useAsyncRetry(async () => { - return await techdocsApi.getCookie(); - }, [techdocsApi]); - - const refresh = useCallback( - (expiresAt: string) => { - // Randomize the refreshing margin to avoid all tabs refreshing at the same time - const refreshingMargin = (1 + 3 * Math.random()) * 60000; - const delay = Date.parse(expiresAt) - Date.now() - refreshingMargin; - const timeout = setTimeout(retry, delay); - return () => clearTimeout(timeout); - }, - [retry], - ); - - return { ...state, retry, refresh }; -} - -export function TechDocsAuthProvider({ children }: { children: ReactNode }) { - const app = useApp(); - const { Progress } = app.getComponents(); - - const [channel] = useState( - () => new BroadcastChannel('techdocs-cookie-refresh'), - ); - - const { loading, error, value, retry, refresh } = useTechDocsCookie(); - - useEffect(() => { - if (!value) return () => {}; - - channel.postMessage({ - action: 'TECHDOCS_COOKIE_REFRESHED', - payload: value, - }); - - let cancel = refresh(value.expiresAt); - - const handleMessage = (event: TechDocsRefreshCookieMessage): void => { - const { action, payload } = event.data; - if (action === 'TECHDOCS_COOKIE_REFRESHED') { - cancel(); - cancel = refresh(payload.expiresAt); - } - }; - - channel.addEventListener('message', handleMessage); - - return () => { - cancel(); - channel.removeEventListener('message', handleMessage); - }; - }, [value, refresh, channel]); - - if (error) { - return ( - - - - ); - } - - if (loading) { - return ; - } - - return children; -} diff --git a/plugins/techdocs/src/reader/components/TechDocsReaderPage/TechDocsReaderPage.test.tsx b/plugins/techdocs/src/reader/components/TechDocsReaderPage/TechDocsReaderPage.test.tsx index 605decae12..ed8b05c661 100644 --- a/plugins/techdocs/src/reader/components/TechDocsReaderPage/TechDocsReaderPage.test.tsx +++ b/plugins/techdocs/src/reader/components/TechDocsReaderPage/TechDocsReaderPage.test.tsx @@ -34,7 +34,11 @@ import { ReportIssue } from '@backstage/plugin-techdocs-module-addons-contrib'; import { FlatRoutes } from '@backstage/core-app-api'; import { Page } from '@backstage/core-components'; -import { configApiRef } from '@backstage/core-plugin-api'; +import { + configApiRef, + discoveryApiRef, + fetchApiRef, +} from '@backstage/core-plugin-api'; const mockEntityMetadata = { locationMetadata: { @@ -76,6 +80,22 @@ const techdocsStorageApiMock: jest.Mocked = { syncEntityDocs: jest.fn(), }; +const discoveryApiMock = { + getBaseUrl: jest + .fn() + .mockResolvedValue('https://localhost:7000/api/techdocs'), +}; + +const fetchApiMock = { + fetch: jest.fn().mockResolvedValue({ + ok: true, + json: jest.fn().mockResolvedValue({ + // Expires in 10 minutes + expiresAt: new Date(Date.now() + 10 * 60 * 1000).toISOString(), + }), + }), +}; + const PageMock = () => { const { namespace, kind, name } = useParams(); return <>{`PageMock: ${namespace}#${kind}#${name}`}; @@ -96,6 +116,8 @@ const Wrapper = ({ children }: { children: React.ReactNode }) => { return ( ', () => { beforeEach(() => { - type Listener = (event: { data: any }) => void; - - global.BroadcastChannel = jest - .fn() - .mockImplementation((_channelName: string) => { - let listeners: Listener[] = []; - return { - postMessage: jest.fn((message: any) => { - listeners.forEach(listener => listener({ data: message })); - }), - addEventListener: jest.fn((event: string, listener: Listener) => { - if (event === 'message') { - listeners.push(listener); - } - }), - removeEventListener: jest.fn((event: string, listener: Listener) => { - if (event === 'message') { - listeners = listeners.filter(l => l !== listener); - } - }), - }; - }); - getEntityMetadata.mockResolvedValue(mockEntityMetadata); getTechDocsMetadata.mockResolvedValue(mockTechDocsMetadata); getCookie.mockResolvedValue({ @@ -147,7 +146,7 @@ describe('', () => { }); afterEach(() => { - jest.resetAllMocks(); + jest.clearAllMocks(); }); beforeEach(() => { diff --git a/plugins/techdocs/src/reader/components/TechDocsReaderPage/TechDocsReaderPage.tsx b/plugins/techdocs/src/reader/components/TechDocsReaderPage/TechDocsReaderPage.tsx index d7f3843ebb..b1b9ecb13b 100644 --- a/plugins/techdocs/src/reader/components/TechDocsReaderPage/TechDocsReaderPage.tsx +++ b/plugins/techdocs/src/reader/components/TechDocsReaderPage/TechDocsReaderPage.tsx @@ -35,7 +35,8 @@ import { getComponentData, useRouteRefParams, } from '@backstage/core-plugin-api'; -import { TechDocsAuthProvider } from './TechDocsAuthProvider'; + +import { CookieAuthRefreshProvider } from '@backstage/plugin-auth-react'; /* An explanation for the multiple ways of customizing the TechDocs reader page @@ -178,17 +179,17 @@ export const TechDocsReaderPage = (props: TechDocsReaderPageProps) => { // As explained above, "page" is configuration 4 and is 1 return ( - + {(page as JSX.Element) || } - + ); } // As explained above, a render function is configuration 3 and React element is 2 return ( - + {({ metadata, entityMetadata, onReady }) => (
@@ -205,6 +206,6 @@ export const TechDocsReaderPage = (props: TechDocsReaderPageProps) => {
)}
-
+ ); }; diff --git a/plugins/techdocs/src/reader/components/TechDocsReaderPage/context.test.tsx b/plugins/techdocs/src/reader/components/TechDocsReaderPage/context.test.tsx index 670653ce6b..d8e87c3686 100644 --- a/plugins/techdocs/src/reader/components/TechDocsReaderPage/context.test.tsx +++ b/plugins/techdocs/src/reader/components/TechDocsReaderPage/context.test.tsx @@ -17,7 +17,7 @@ import React from 'react'; import { renderHook, waitFor } from '@testing-library/react'; -import { ThemeProvider } from '@material-ui/core'; +import { ThemeProvider } from '@material-ui/core/styles'; import { lightTheme } from '@backstage/theme'; import { TestApiProvider } from '@backstage/test-utils'; diff --git a/plugins/techdocs/src/reader/components/TechDocsReaderPageContent/TechDocsReaderPageContent.tsx b/plugins/techdocs/src/reader/components/TechDocsReaderPageContent/TechDocsReaderPageContent.tsx index f4c5ad8745..3692ed22d3 100644 --- a/plugins/techdocs/src/reader/components/TechDocsReaderPageContent/TechDocsReaderPageContent.tsx +++ b/plugins/techdocs/src/reader/components/TechDocsReaderPageContent/TechDocsReaderPageContent.tsx @@ -16,7 +16,8 @@ import React, { useCallback, useEffect } from 'react'; -import { makeStyles, Grid } from '@material-ui/core'; +import Grid from '@material-ui/core/Grid'; +import { makeStyles } from '@material-ui/core/styles'; import { TechDocsShadowDom, diff --git a/plugins/techdocs/src/reader/components/TechDocsReaderPageContent/TechDocsReaderPageContentAddons.tsx b/plugins/techdocs/src/reader/components/TechDocsReaderPageContent/TechDocsReaderPageContentAddons.tsx index 744fd8c732..edcc90359d 100644 --- a/plugins/techdocs/src/reader/components/TechDocsReaderPageContent/TechDocsReaderPageContentAddons.tsx +++ b/plugins/techdocs/src/reader/components/TechDocsReaderPageContent/TechDocsReaderPageContentAddons.tsx @@ -15,7 +15,7 @@ */ import React from 'react'; -import { Portal } from '@material-ui/core'; +import Portal from '@material-ui/core/Portal'; import { useTechDocsAddons, TechDocsAddonLocations as locations, diff --git a/plugins/techdocs/src/reader/components/TechDocsReaderPageContent/dom.tsx b/plugins/techdocs/src/reader/components/TechDocsReaderPageContent/dom.tsx index bf8a1309b2..de2460a543 100644 --- a/plugins/techdocs/src/reader/components/TechDocsReaderPageContent/dom.tsx +++ b/plugins/techdocs/src/reader/components/TechDocsReaderPageContent/dom.tsx @@ -16,7 +16,8 @@ import { useCallback, useEffect, useState } from 'react'; -import { useTheme, useMediaQuery } from '@material-ui/core'; +import useMediaQuery from '@material-ui/core/useMediaQuery'; +import { useTheme } from '@material-ui/core/styles'; import { CompoundEntityRef } from '@backstage/catalog-model'; import { useAnalytics, useApi } from '@backstage/core-plugin-api'; diff --git a/plugins/techdocs/src/reader/components/TechDocsReaderPageHeader/TechDocsReaderPageHeader.tsx b/plugins/techdocs/src/reader/components/TechDocsReaderPageHeader/TechDocsReaderPageHeader.tsx index d84c5c5347..0399dea4f7 100644 --- a/plugins/techdocs/src/reader/components/TechDocsReaderPageHeader/TechDocsReaderPageHeader.tsx +++ b/plugins/techdocs/src/reader/components/TechDocsReaderPageHeader/TechDocsReaderPageHeader.tsx @@ -17,8 +17,8 @@ import React, { PropsWithChildren, useEffect } from 'react'; import Helmet from 'react-helmet'; -import { Grid } from '@material-ui/core'; -import { Skeleton } from '@material-ui/lab'; +import Grid from '@material-ui/core/Grid'; +import Skeleton from '@material-ui/lab/Skeleton'; import { useTheme } from '@material-ui/core/styles'; import CodeIcon from '@material-ui/icons/Code'; diff --git a/plugins/techdocs/src/reader/components/TechDocsReaderPageSubheader/TechDocsReaderPageSubheader.tsx b/plugins/techdocs/src/reader/components/TechDocsReaderPageSubheader/TechDocsReaderPageSubheader.tsx index 85f04655fd..64faaa1ea3 100644 --- a/plugins/techdocs/src/reader/components/TechDocsReaderPageSubheader/TechDocsReaderPageSubheader.tsx +++ b/plugins/techdocs/src/reader/components/TechDocsReaderPageSubheader/TechDocsReaderPageSubheader.tsx @@ -16,15 +16,13 @@ import React, { MouseEvent, useState, useCallback } from 'react'; -import { - Box, - makeStyles, - Toolbar, - ToolbarProps, - Menu, - Tooltip, - IconButton, -} from '@material-ui/core'; +import { makeStyles } from '@material-ui/core/styles'; +import IconButton from '@material-ui/core/IconButton'; +import Toolbar from '@material-ui/core/Toolbar'; +import { ToolbarProps } from '@material-ui/core/Toolbar'; +import Tooltip from '@material-ui/core/Tooltip'; +import Menu from '@material-ui/core/Menu'; +import Box from '@material-ui/core/Box'; import SettingsIcon from '@material-ui/icons/Settings'; import { diff --git a/plugins/techdocs/src/reader/components/TechDocsStateIndicator.tsx b/plugins/techdocs/src/reader/components/TechDocsStateIndicator.tsx index 772c92aeff..f27b8e5430 100644 --- a/plugins/techdocs/src/reader/components/TechDocsStateIndicator.tsx +++ b/plugins/techdocs/src/reader/components/TechDocsStateIndicator.tsx @@ -15,8 +15,10 @@ */ import React from 'react'; -import { CircularProgress, Button, makeStyles } from '@material-ui/core'; -import { Alert } from '@material-ui/lab'; +import CircularProgress from '@material-ui/core/CircularProgress'; +import Button from '@material-ui/core/Button'; +import { makeStyles } from '@material-ui/core/styles'; +import Alert from '@material-ui/lab/Alert'; import { TechDocsBuildLogs } from './TechDocsBuildLogs'; import { TechDocsNotFound } from './TechDocsNotFound'; diff --git a/plugins/techdocs/src/reader/transformers/copyToClipboard.tsx b/plugins/techdocs/src/reader/transformers/copyToClipboard.tsx index 1fd9d179a3..0d178c2970 100644 --- a/plugins/techdocs/src/reader/transformers/copyToClipboard.tsx +++ b/plugins/techdocs/src/reader/transformers/copyToClipboard.tsx @@ -16,13 +16,10 @@ import React, { useState, useCallback } from 'react'; import { renderReactElement } from './renderReactElement'; -import { - withStyles, - Theme, - ThemeProvider, - SvgIcon, - Tooltip, -} from '@material-ui/core'; +import { ThemeProvider } from '@material-ui/core/styles'; +import SvgIcon from '@material-ui/core/SvgIcon'; +import Tooltip from '@material-ui/core/Tooltip'; +import { withStyles, Theme } from '@material-ui/core/styles'; import IconButton from '@material-ui/core/IconButton'; import type { Transformer } from './transformer'; import useCopyToClipboard from 'react-use/lib/useCopyToClipboard'; diff --git a/plugins/techdocs/src/reader/transformers/styles/rules/types.ts b/plugins/techdocs/src/reader/transformers/styles/rules/types.ts index defdc4ad90..e2747ad85a 100644 --- a/plugins/techdocs/src/reader/transformers/styles/rules/types.ts +++ b/plugins/techdocs/src/reader/transformers/styles/rules/types.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { Theme } from '@material-ui/core'; +import { Theme } from '@material-ui/core/styles'; /** * A Backstage sidebar object that contains properties such as its pin state. diff --git a/plugins/techdocs/src/reader/transformers/styles/rules/variables.ts b/plugins/techdocs/src/reader/transformers/styles/rules/variables.ts index 07a667ed8e..a858d17354 100644 --- a/plugins/techdocs/src/reader/transformers/styles/rules/variables.ts +++ b/plugins/techdocs/src/reader/transformers/styles/rules/variables.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { alpha, lighten } from '@material-ui/core'; +import { alpha, lighten } from '@material-ui/core/styles'; import { RuleOptions } from './types'; export default ({ theme }: RuleOptions) => ` diff --git a/plugins/techdocs/src/reader/transformers/styles/transformer.ts b/plugins/techdocs/src/reader/transformers/styles/transformer.ts index dee77fb1ed..b1b1b437c2 100644 --- a/plugins/techdocs/src/reader/transformers/styles/transformer.ts +++ b/plugins/techdocs/src/reader/transformers/styles/transformer.ts @@ -15,7 +15,7 @@ */ import { useCallback, useMemo } from 'react'; -import { useTheme } from '@material-ui/core'; +import { useTheme } from '@material-ui/core/styles'; import { useSidebarPinState } from '@backstage/core-components'; import { Transformer } from '../transformer'; import { rules } from './rules'; diff --git a/plugins/techdocs/src/search/components/TechDocsSearchResultListItem.tsx b/plugins/techdocs/src/search/components/TechDocsSearchResultListItem.tsx index eae4ee7ce9..4f7deab47c 100644 --- a/plugins/techdocs/src/search/components/TechDocsSearchResultListItem.tsx +++ b/plugins/techdocs/src/search/components/TechDocsSearchResultListItem.tsx @@ -15,7 +15,9 @@ */ import React, { PropsWithChildren, ReactNode } from 'react'; -import { ListItemIcon, ListItemText, makeStyles } from '@material-ui/core'; +import ListItemIcon from '@material-ui/core/ListItemIcon'; +import ListItemText from '@material-ui/core/ListItemText'; +import { makeStyles } from '@material-ui/core/styles'; import Typography from '@material-ui/core/Typography'; import { Link } from '@backstage/core-components'; import { ResultHighlight } from '@backstage/plugin-search-common'; diff --git a/plugins/techdocs/src/setupTests.ts b/plugins/techdocs/src/setupTests.ts index 0bdcc73ccb..6c7fc2d3e3 100644 --- a/plugins/techdocs/src/setupTests.ts +++ b/plugins/techdocs/src/setupTests.ts @@ -17,28 +17,3 @@ import '@testing-library/jest-dom'; Element.prototype.scrollIntoView = jest.fn(); - -type Listener = (event: { data: any }) => void; - -global.BroadcastChannel = jest - .fn() - .mockImplementation((_channelName: string) => { - let listeners: Listener[] = []; - return { - postMessage: jest.fn((message: any) => { - // Simulate message event for all listeners - listeners.forEach(listener => listener({ data: message })); - }), - addEventListener: jest.fn((event: string, listener: Listener) => { - if (event === 'message') { - listeners.push(listener); - } - }), - removeEventListener: jest.fn((event: string, listener: Listener) => { - if (event === 'message') { - listeners = listeners.filter(l => l !== listener); - } - }), - close: jest.fn(), - }; - }); diff --git a/plugins/user-settings/.eslintrc.js b/plugins/user-settings/.eslintrc.js index e2a53a6ad2..a2d8179106 100644 --- a/plugins/user-settings/.eslintrc.js +++ b/plugins/user-settings/.eslintrc.js @@ -1 +1,5 @@ -module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname, { + rules: { + '@backstage/no-top-level-material-ui-4-imports': 'error', + }, +}); diff --git a/plugins/user-settings/api-report.md b/plugins/user-settings/api-report.md index b92677f8ce..d485320fe8 100644 --- a/plugins/user-settings/api-report.md +++ b/plugins/user-settings/api-report.md @@ -24,7 +24,7 @@ import { RouteRef } from '@backstage/core-plugin-api'; import { SessionApi } from '@backstage/core-plugin-api'; import { StorageApi } from '@backstage/core-plugin-api'; import { StorageValueSnapshot } from '@backstage/core-plugin-api'; -import { TabProps } from '@material-ui/core'; +import { TabProps } from '@material-ui/core/Tab'; // @public (undocumented) export const DefaultProviderSettings: (props: { diff --git a/plugins/user-settings/src/components/AuthProviders/EmptyProviders.tsx b/plugins/user-settings/src/components/AuthProviders/EmptyProviders.tsx index 082cb5e8ac..952ba3af30 100644 --- a/plugins/user-settings/src/components/AuthProviders/EmptyProviders.tsx +++ b/plugins/user-settings/src/components/AuthProviders/EmptyProviders.tsx @@ -15,7 +15,8 @@ */ import React from 'react'; -import { Button, Typography } from '@material-ui/core'; +import Button from '@material-ui/core/Button'; +import Typography from '@material-ui/core/Typography'; import { CodeSnippet, EmptyState } from '@backstage/core-components'; const EXAMPLE = `auth: diff --git a/plugins/user-settings/src/components/AuthProviders/ProviderSettingsAvatar.tsx b/plugins/user-settings/src/components/AuthProviders/ProviderSettingsAvatar.tsx index 07e9b4aa55..c09dac5985 100644 --- a/plugins/user-settings/src/components/AuthProviders/ProviderSettingsAvatar.tsx +++ b/plugins/user-settings/src/components/AuthProviders/ProviderSettingsAvatar.tsx @@ -15,7 +15,8 @@ */ import React from 'react'; -import { makeStyles, Avatar, Theme } from '@material-ui/core'; +import Avatar from '@material-ui/core/Avatar'; +import { makeStyles, Theme } from '@material-ui/core/styles'; import { sidebarConfig } from '@backstage/core-components'; const useStyles = makeStyles(theme => ({ diff --git a/plugins/user-settings/src/components/AuthProviders/ProviderSettingsItem.tsx b/plugins/user-settings/src/components/AuthProviders/ProviderSettingsItem.tsx index e9a710036f..07afd8083e 100644 --- a/plugins/user-settings/src/components/AuthProviders/ProviderSettingsItem.tsx +++ b/plugins/user-settings/src/components/AuthProviders/ProviderSettingsItem.tsx @@ -15,16 +15,14 @@ */ import React, { useEffect, useState } from 'react'; -import { - Button, - Grid, - ListItem, - ListItemIcon, - ListItemSecondaryAction, - ListItemText, - Tooltip, - Typography, -} from '@material-ui/core'; +import Button from '@material-ui/core/Button'; +import Grid from '@material-ui/core/Grid'; +import ListItem from '@material-ui/core/ListItem'; +import ListItemIcon from '@material-ui/core/ListItemIcon'; +import ListItemSecondaryAction from '@material-ui/core/ListItemSecondaryAction'; +import ListItemText from '@material-ui/core/ListItemText'; +import Tooltip from '@material-ui/core/Tooltip'; +import Typography from '@material-ui/core/Typography'; import { ApiRef, SessionApi, diff --git a/plugins/user-settings/src/components/AuthProviders/UserSettingsAuthProviders.tsx b/plugins/user-settings/src/components/AuthProviders/UserSettingsAuthProviders.tsx index d23716c2bf..e83440e0c5 100644 --- a/plugins/user-settings/src/components/AuthProviders/UserSettingsAuthProviders.tsx +++ b/plugins/user-settings/src/components/AuthProviders/UserSettingsAuthProviders.tsx @@ -15,7 +15,7 @@ */ import React from 'react'; -import { List } from '@material-ui/core'; +import List from '@material-ui/core/List'; import { EmptyProviders } from './EmptyProviders'; import { DefaultProviderSettings } from './DefaultProviderSettings'; import { configApiRef, useApi } from '@backstage/core-plugin-api'; diff --git a/plugins/user-settings/src/components/FeatureFlags/EmptyFlags.tsx b/plugins/user-settings/src/components/FeatureFlags/EmptyFlags.tsx index 0e2b911978..55c70ba7a2 100644 --- a/plugins/user-settings/src/components/FeatureFlags/EmptyFlags.tsx +++ b/plugins/user-settings/src/components/FeatureFlags/EmptyFlags.tsx @@ -15,7 +15,8 @@ */ import React from 'react'; -import { Button, Typography } from '@material-ui/core'; +import Button from '@material-ui/core/Button'; +import Typography from '@material-ui/core/Typography'; import { CodeSnippet, EmptyState } from '@backstage/core-components'; const EXAMPLE = `import { createPlugin } from '@backstage/core-plugin-api'; diff --git a/plugins/user-settings/src/components/FeatureFlags/FeatureFlagsItem.tsx b/plugins/user-settings/src/components/FeatureFlags/FeatureFlagsItem.tsx index a5f0d480cb..96f8166c4a 100644 --- a/plugins/user-settings/src/components/FeatureFlags/FeatureFlagsItem.tsx +++ b/plugins/user-settings/src/components/FeatureFlags/FeatureFlagsItem.tsx @@ -15,13 +15,11 @@ */ import React from 'react'; -import { - ListItem, - ListItemText, - ListItemIcon, - Switch, - Tooltip, -} from '@material-ui/core'; +import ListItem from '@material-ui/core/ListItem'; +import ListItemText from '@material-ui/core/ListItemText'; +import ListItemIcon from '@material-ui/core/ListItemIcon'; +import Switch from '@material-ui/core/Switch'; +import Tooltip from '@material-ui/core/Tooltip'; import { FeatureFlag } from '@backstage/core-plugin-api'; type Props = { diff --git a/plugins/user-settings/src/components/FeatureFlags/UserSettingsFeatureFlags.tsx b/plugins/user-settings/src/components/FeatureFlags/UserSettingsFeatureFlags.tsx index 60b951ab60..1522001ac5 100644 --- a/plugins/user-settings/src/components/FeatureFlags/UserSettingsFeatureFlags.tsx +++ b/plugins/user-settings/src/components/FeatureFlags/UserSettingsFeatureFlags.tsx @@ -15,13 +15,11 @@ */ import React, { useCallback, useState } from 'react'; -import { - List, - TextField, - IconButton, - Grid, - Typography, -} from '@material-ui/core'; +import List from '@material-ui/core/List'; +import TextField from '@material-ui/core/TextField'; +import IconButton from '@material-ui/core/IconButton'; +import Grid from '@material-ui/core/Grid'; +import Typography from '@material-ui/core/Typography'; import { EmptyFlags } from './EmptyFlags'; import { FlagItem } from './FeatureFlagsItem'; import { diff --git a/plugins/user-settings/src/components/General/UserSettingsAppearanceCard.tsx b/plugins/user-settings/src/components/General/UserSettingsAppearanceCard.tsx index 8a32c0bd9b..b8e3c44672 100644 --- a/plugins/user-settings/src/components/General/UserSettingsAppearanceCard.tsx +++ b/plugins/user-settings/src/components/General/UserSettingsAppearanceCard.tsx @@ -15,7 +15,7 @@ */ import { InfoCard, useSidebarPinState } from '@backstage/core-components'; -import { List } from '@material-ui/core'; +import List from '@material-ui/core/List'; import React from 'react'; import { UserSettingsPinToggle } from './UserSettingsPinToggle'; import { UserSettingsThemeToggle } from './UserSettingsThemeToggle'; diff --git a/plugins/user-settings/src/components/General/UserSettingsGeneral.tsx b/plugins/user-settings/src/components/General/UserSettingsGeneral.tsx index 8dde87ba5c..6c663ed1bc 100644 --- a/plugins/user-settings/src/components/General/UserSettingsGeneral.tsx +++ b/plugins/user-settings/src/components/General/UserSettingsGeneral.tsx @@ -14,7 +14,7 @@ * limitations under the License. */ -import { Grid } from '@material-ui/core'; +import Grid from '@material-ui/core/Grid'; import React from 'react'; import { UserSettingsProfileCard } from './UserSettingsProfileCard'; import { UserSettingsAppearanceCard } from './UserSettingsAppearanceCard'; diff --git a/plugins/user-settings/src/components/General/UserSettingsLanguageToggle.tsx b/plugins/user-settings/src/components/General/UserSettingsLanguageToggle.tsx index 15c6e9ea9c..337960932e 100644 --- a/plugins/user-settings/src/components/General/UserSettingsLanguageToggle.tsx +++ b/plugins/user-settings/src/components/General/UserSettingsLanguageToggle.tsx @@ -19,12 +19,10 @@ import { useTranslationRef, appLanguageApiRef, } from '@backstage/core-plugin-api/alpha'; -import { - ListItem, - ListItemText, - ListItemSecondaryAction, - makeStyles, -} from '@material-ui/core'; +import ListItem from '@material-ui/core/ListItem'; +import ListItemText from '@material-ui/core/ListItemText'; +import ListItemSecondaryAction from '@material-ui/core/ListItemSecondaryAction'; +import { makeStyles } from '@material-ui/core/styles'; import { userSettingsTranslationRef } from '../../translation'; import { useApi } from '@backstage/core-plugin-api'; import useObservable from 'react-use/lib/useObservable'; diff --git a/plugins/user-settings/src/components/General/UserSettingsMenu.tsx b/plugins/user-settings/src/components/General/UserSettingsMenu.tsx index c83bdd5b74..8ef2f380f3 100644 --- a/plugins/user-settings/src/components/General/UserSettingsMenu.tsx +++ b/plugins/user-settings/src/components/General/UserSettingsMenu.tsx @@ -15,7 +15,10 @@ */ import React from 'react'; -import { IconButton, ListItemIcon, Menu, MenuItem } from '@material-ui/core'; +import IconButton from '@material-ui/core/IconButton'; +import ListItemIcon from '@material-ui/core/ListItemIcon'; +import Menu from '@material-ui/core/Menu'; +import MenuItem from '@material-ui/core/MenuItem'; import SignOutIcon from '@material-ui/icons/MeetingRoom'; import MoreVertIcon from '@material-ui/icons/MoreVert'; import { diff --git a/plugins/user-settings/src/components/General/UserSettingsPinToggle.tsx b/plugins/user-settings/src/components/General/UserSettingsPinToggle.tsx index a06b079e8e..95317147cf 100644 --- a/plugins/user-settings/src/components/General/UserSettingsPinToggle.tsx +++ b/plugins/user-settings/src/components/General/UserSettingsPinToggle.tsx @@ -15,13 +15,11 @@ */ import React from 'react'; -import { - ListItem, - ListItemSecondaryAction, - ListItemText, - Switch, - Tooltip, -} from '@material-ui/core'; +import ListItem from '@material-ui/core/ListItem'; +import ListItemSecondaryAction from '@material-ui/core/ListItemSecondaryAction'; +import ListItemText from '@material-ui/core/ListItemText'; +import Switch from '@material-ui/core/Switch'; +import Tooltip from '@material-ui/core/Tooltip'; import { useSidebarPinState } from '@backstage/core-components'; /** @public */ diff --git a/plugins/user-settings/src/components/General/UserSettingsProfileCard.tsx b/plugins/user-settings/src/components/General/UserSettingsProfileCard.tsx index c96d2bb21e..c04710650c 100644 --- a/plugins/user-settings/src/components/General/UserSettingsProfileCard.tsx +++ b/plugins/user-settings/src/components/General/UserSettingsProfileCard.tsx @@ -14,7 +14,8 @@ * limitations under the License. */ -import { Grid, Typography } from '@material-ui/core'; +import Grid from '@material-ui/core/Grid'; +import Typography from '@material-ui/core/Typography'; import React from 'react'; import { UserSettingsSignInAvatar } from './UserSettingsSignInAvatar'; import { UserSettingsMenu } from './UserSettingsMenu'; diff --git a/plugins/user-settings/src/components/General/UserSettingsSignInAvatar.tsx b/plugins/user-settings/src/components/General/UserSettingsSignInAvatar.tsx index 85c616ec72..80621d1a53 100644 --- a/plugins/user-settings/src/components/General/UserSettingsSignInAvatar.tsx +++ b/plugins/user-settings/src/components/General/UserSettingsSignInAvatar.tsx @@ -15,7 +15,8 @@ */ import React from 'react'; -import { makeStyles, Avatar, Theme } from '@material-ui/core'; +import Avatar from '@material-ui/core/Avatar'; +import { makeStyles, Theme } from '@material-ui/core/styles'; import { useUserProfile } from '../useUserProfileInfo'; import { sidebarConfig } from '@backstage/core-components'; diff --git a/plugins/user-settings/src/components/General/UserSettingsThemeToggle.tsx b/plugins/user-settings/src/components/General/UserSettingsThemeToggle.tsx index 37d91ecae0..3c19b0ab88 100644 --- a/plugins/user-settings/src/components/General/UserSettingsThemeToggle.tsx +++ b/plugins/user-settings/src/components/General/UserSettingsThemeToggle.tsx @@ -19,13 +19,11 @@ import useObservable from 'react-use/lib/useObservable'; import AutoIcon from '@material-ui/icons/BrightnessAuto'; import ToggleButton from '@material-ui/lab/ToggleButton'; import ToggleButtonGroup from '@material-ui/lab/ToggleButtonGroup'; -import { - ListItem, - ListItemText, - ListItemSecondaryAction, - Tooltip, - makeStyles, -} from '@material-ui/core'; +import ListItem from '@material-ui/core/ListItem'; +import ListItemText from '@material-ui/core/ListItemText'; +import ListItemSecondaryAction from '@material-ui/core/ListItemSecondaryAction'; +import Tooltip from '@material-ui/core/Tooltip'; +import { makeStyles } from '@material-ui/core/styles'; import { appThemeApiRef, useApi } from '@backstage/core-plugin-api'; import { useTranslationRef } from '@backstage/core-plugin-api/alpha'; import { userSettingsTranslationRef } from '../../translation'; diff --git a/plugins/user-settings/src/components/SettingsLayout/SettingsLayout.tsx b/plugins/user-settings/src/components/SettingsLayout/SettingsLayout.tsx index 9855fdd048..c17333571d 100644 --- a/plugins/user-settings/src/components/SettingsLayout/SettingsLayout.tsx +++ b/plugins/user-settings/src/components/SettingsLayout/SettingsLayout.tsx @@ -15,7 +15,7 @@ */ import React from 'react'; -import { TabProps } from '@material-ui/core'; +import { TabProps } from '@material-ui/core/Tab'; import { Header, Page, diff --git a/plugins/vault-backend/src/service/plugin.ts b/plugins/vault-backend/src/service/plugin.ts index cf9d2cf87b..200bc092d5 100644 --- a/plugins/vault-backend/src/service/plugin.ts +++ b/plugins/vault-backend/src/service/plugin.ts @@ -68,6 +68,10 @@ export const vaultPlugin = createBackendPlugin({ const { router } = builder.build(); httpRouter.use(router); + httpRouter.addAuthPolicy({ + path: '/health', + allow: 'unauthenticated', + }); }, }); }, diff --git a/plugins/vault-backend/src/service/vaultApi.ts b/plugins/vault-backend/src/service/vaultApi.ts index 789cdeeda5..b337a877b9 100644 --- a/plugins/vault-backend/src/service/vaultApi.ts +++ b/plugins/vault-backend/src/service/vaultApi.ts @@ -147,11 +147,9 @@ export class VaultClient implements VaultApi { result.data.keys.map(async secret => { if (secret.endsWith('/')) { secrets.push( - ...(await this.limit(() => - this.listSecrets(`${secretPath}/${secret.slice(0, -1)}`, { - secretEngine: mount, - }), - )), + ...(await this.listSecrets(`${secretPath}/${secret.slice(0, -1)}`, { + secretEngine: mount, + })), ); } else { const vaultUrl = diff --git a/plugins/vault/.eslintrc.js b/plugins/vault/.eslintrc.js index e2a53a6ad2..a2d8179106 100644 --- a/plugins/vault/.eslintrc.js +++ b/plugins/vault/.eslintrc.js @@ -1 +1,5 @@ -module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname, { + rules: { + '@backstage/no-top-level-material-ui-4-imports': 'error', + }, +}); diff --git a/plugins/vault/dev/index.tsx b/plugins/vault/dev/index.tsx index 8d902e14c5..97dde1f3bf 100644 --- a/plugins/vault/dev/index.tsx +++ b/plugins/vault/dev/index.tsx @@ -19,7 +19,8 @@ import { Content, Header, HeaderLabel, Page } from '@backstage/core-components'; import { createDevApp } from '@backstage/dev-utils'; import { EntityProvider } from '@backstage/plugin-catalog-react'; import { TestApiProvider } from '@backstage/test-utils'; -import { Box, Typography } from '@material-ui/core'; +import Box from '@material-ui/core/Box'; +import Typography from '@material-ui/core/Typography'; import SomeIcon from '@material-ui/icons/Storage'; import React from 'react'; import { VaultApi, vaultApiRef } from '../src/api'; diff --git a/plugins/vault/src/components/EntityVaultTable/EntityVaultTable.tsx b/plugins/vault/src/components/EntityVaultTable/EntityVaultTable.tsx index 4d169611ca..412a3404d1 100644 --- a/plugins/vault/src/components/EntityVaultTable/EntityVaultTable.tsx +++ b/plugins/vault/src/components/EntityVaultTable/EntityVaultTable.tsx @@ -17,7 +17,8 @@ import React from 'react'; import { Entity } from '@backstage/catalog-model'; import { Link, Table, TableColumn } from '@backstage/core-components'; import { useApi } from '@backstage/core-plugin-api'; -import { Box, Typography } from '@material-ui/core'; +import Box from '@material-ui/core/Box'; +import Typography from '@material-ui/core/Typography'; import Edit from '@material-ui/icons/Edit'; import Visibility from '@material-ui/icons/Visibility'; import Alert from '@material-ui/lab/Alert'; diff --git a/plugins/xcmetrics/.eslintrc.js b/plugins/xcmetrics/.eslintrc.js index e2a53a6ad2..a2d8179106 100644 --- a/plugins/xcmetrics/.eslintrc.js +++ b/plugins/xcmetrics/.eslintrc.js @@ -1 +1,5 @@ -module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname, { + rules: { + '@backstage/no-top-level-material-ui-4-imports': 'error', + }, +}); diff --git a/plugins/xcmetrics/src/components/Accordion/Accordion.tsx b/plugins/xcmetrics/src/components/Accordion/Accordion.tsx index 5c418de496..866b4148e8 100644 --- a/plugins/xcmetrics/src/components/Accordion/Accordion.tsx +++ b/plugins/xcmetrics/src/components/Accordion/Accordion.tsx @@ -14,14 +14,11 @@ * limitations under the License. */ -import { - Accordion as MuiAccordion, - AccordionSummary as MuiAccordionSummary, - Typography, - AccordionDetails, - makeStyles, - createStyles, -} from '@material-ui/core'; +import MuiAccordion from '@material-ui/core/Accordion'; +import MuiAccordionSummary from '@material-ui/core/AccordionSummary'; +import Typography from '@material-ui/core/Typography'; +import AccordionDetails from '@material-ui/core/AccordionDetails'; +import { makeStyles, createStyles } from '@material-ui/core/styles'; import React, { PropsWithChildren } from 'react'; import ExpandMoreIcon from '@material-ui/icons/ExpandMore'; diff --git a/plugins/xcmetrics/src/components/BuildDetails/BuildDetails.tsx b/plugins/xcmetrics/src/components/BuildDetails/BuildDetails.tsx index 86db3be858..52806797dc 100644 --- a/plugins/xcmetrics/src/components/BuildDetails/BuildDetails.tsx +++ b/plugins/xcmetrics/src/components/BuildDetails/BuildDetails.tsx @@ -14,11 +14,13 @@ * limitations under the License. */ -import { createStyles, Divider, Grid, makeStyles } from '@material-ui/core'; +import Divider from '@material-ui/core/Divider'; +import Grid from '@material-ui/core/Grid'; +import { createStyles, makeStyles } from '@material-ui/core/styles'; import React from 'react'; import { BuildResponse, xcmetricsApiRef } from '../../api'; import { Progress, StructuredMetadataTable } from '@backstage/core-components'; -import { Alert } from '@material-ui/lab'; +import Alert from '@material-ui/lab/Alert'; import useAsync from 'react-use/lib/useAsync'; import { useApi } from '@backstage/core-plugin-api'; import { formatDuration, formatStatus, formatTime } from '../../utils'; diff --git a/plugins/xcmetrics/src/components/BuildList/BuildList.tsx b/plugins/xcmetrics/src/components/BuildList/BuildList.tsx index 85eee6009d..0ddcd75aca 100644 --- a/plugins/xcmetrics/src/components/BuildList/BuildList.tsx +++ b/plugins/xcmetrics/src/components/BuildList/BuildList.tsx @@ -18,7 +18,8 @@ import React, { useRef, useState } from 'react'; import { Table } from '@backstage/core-components'; import { useApi } from '@backstage/core-plugin-api'; import { BuildFilters, xcmetricsApiRef } from '../../api'; -import { createStyles, Grid, makeStyles } from '@material-ui/core'; +import Grid from '@material-ui/core/Grid'; +import { createStyles, makeStyles } from '@material-ui/core/styles'; import { BuildListFilter as Filters } from '../BuildListFilter'; import { DateTime } from 'luxon'; import { buildPageColumns } from '../BuildTableColumns'; diff --git a/plugins/xcmetrics/src/components/BuildListFilter/BuildListFilter.tsx b/plugins/xcmetrics/src/components/BuildListFilter/BuildListFilter.tsx index ce2a2f4c05..121a5cafab 100644 --- a/plugins/xcmetrics/src/components/BuildListFilter/BuildListFilter.tsx +++ b/plugins/xcmetrics/src/components/BuildListFilter/BuildListFilter.tsx @@ -15,7 +15,10 @@ */ import React, { useEffect, useState } from 'react'; -import { makeStyles, IconButton, Grid, Button } from '@material-ui/core'; +import IconButton from '@material-ui/core/IconButton'; +import Grid from '@material-ui/core/Grid'; +import Button from '@material-ui/core/Button'; +import { makeStyles } from '@material-ui/core/styles'; import FilterList from '@material-ui/icons/FilterList'; import { InfoCard, Select } from '@backstage/core-components'; import { useApi } from '@backstage/core-plugin-api'; diff --git a/plugins/xcmetrics/src/components/BuildTableColumns.tsx b/plugins/xcmetrics/src/components/BuildTableColumns.tsx index 0d1141dfae..709dc7bc90 100644 --- a/plugins/xcmetrics/src/components/BuildTableColumns.tsx +++ b/plugins/xcmetrics/src/components/BuildTableColumns.tsx @@ -14,7 +14,7 @@ * limitations under the License. */ -import { Chip } from '@material-ui/core'; +import Chip from '@material-ui/core/Chip'; import React from 'react'; import { TableColumn } from '@backstage/core-components'; import { Build } from '../api'; diff --git a/plugins/xcmetrics/src/components/BuildTimeline/BuildTimeline.tsx b/plugins/xcmetrics/src/components/BuildTimeline/BuildTimeline.tsx index 5c0a1b1e67..ca4ce39d16 100644 --- a/plugins/xcmetrics/src/components/BuildTimeline/BuildTimeline.tsx +++ b/plugins/xcmetrics/src/components/BuildTimeline/BuildTimeline.tsx @@ -14,7 +14,7 @@ * limitations under the License. */ -import { createStyles, makeStyles, useTheme } from '@material-ui/core'; +import { createStyles, makeStyles, useTheme } from '@material-ui/core/styles'; import Typography from '@material-ui/core/Typography'; import React from 'react'; import { diff --git a/plugins/xcmetrics/src/components/DataValue/DataValue.tsx b/plugins/xcmetrics/src/components/DataValue/DataValue.tsx index 78f1cdcaea..fc38bd3bd6 100644 --- a/plugins/xcmetrics/src/components/DataValue/DataValue.tsx +++ b/plugins/xcmetrics/src/components/DataValue/DataValue.tsx @@ -13,7 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { Grid, GridSize, Typography } from '@material-ui/core'; +import Grid from '@material-ui/core/Grid'; +import { GridSize } from '@material-ui/core/Grid'; +import Typography from '@material-ui/core/Typography'; import React from 'react'; interface DataValueProps { diff --git a/plugins/xcmetrics/src/components/DatePicker/DatePicker.tsx b/plugins/xcmetrics/src/components/DatePicker/DatePicker.tsx index e247f05cb6..58104e1b53 100644 --- a/plugins/xcmetrics/src/components/DatePicker/DatePicker.tsx +++ b/plugins/xcmetrics/src/components/DatePicker/DatePicker.tsx @@ -15,15 +15,13 @@ */ import React from 'react'; -import { - createStyles, - InputBase, - InputProps, - makeStyles, - Theme, - Typography, - withStyles, -} from '@material-ui/core'; +import { createStyles } from '@material-ui/core/styles'; +import { InputProps } from '@material-ui/core/Input'; +import withStyles from '@material-ui/core/styles/withStyles'; +import { Theme } from '@material-ui/core/styles/createTheme'; +import InputBase from '@material-ui/core/InputBase/InputBase'; +import makeStyles from '@material-ui/core/styles/makeStyles'; +import Typography from '@material-ui/core/Typography/Typography'; const BootstrapInput = withStyles((theme: Theme) => createStyles({ diff --git a/plugins/xcmetrics/src/components/Overview/Overview.tsx b/plugins/xcmetrics/src/components/Overview/Overview.tsx index 22fd3185a0..84e0b5e23e 100644 --- a/plugins/xcmetrics/src/components/Overview/Overview.tsx +++ b/plugins/xcmetrics/src/components/Overview/Overview.tsx @@ -25,9 +25,9 @@ import { import { useApi } from '@backstage/core-plugin-api'; import { xcmetricsApiRef } from '../../api'; import useAsync from 'react-use/lib/useAsync'; -import { Alert } from '@material-ui/lab'; +import Alert from '@material-ui/lab/Alert'; import { StatusMatrix } from '../StatusMatrix'; -import { Grid } from '@material-ui/core'; +import Grid from '@material-ui/core/Grid'; import { OverviewTrends } from '../OverviewTrends'; import { overviewColumns } from '../BuildTableColumns'; diff --git a/plugins/xcmetrics/src/components/OverviewTrends/OverviewTrends.tsx b/plugins/xcmetrics/src/components/OverviewTrends/OverviewTrends.tsx index e6a1601e37..012b1a5df2 100644 --- a/plugins/xcmetrics/src/components/OverviewTrends/OverviewTrends.tsx +++ b/plugins/xcmetrics/src/components/OverviewTrends/OverviewTrends.tsx @@ -14,11 +14,13 @@ * limitations under the License. */ -import { Grid, makeStyles, useTheme } from '@material-ui/core'; +import Grid from '@material-ui/core/Grid'; +import { makeStyles, useTheme } from '@material-ui/core/styles'; import React, { useState } from 'react'; import { Progress, Select } from '@backstage/core-components'; import { Trend } from '../Trend'; -import { Alert, AlertTitle } from '@material-ui/lab'; +import Alert from '@material-ui/lab/Alert'; +import AlertTitle from '@material-ui/lab/AlertTitle'; import { xcmetricsApiRef } from '../../api'; import useAsync from 'react-use/lib/useAsync'; import { useApi } from '@backstage/core-plugin-api'; diff --git a/plugins/xcmetrics/src/components/PreformattedText/PreformattedText.tsx b/plugins/xcmetrics/src/components/PreformattedText/PreformattedText.tsx index 2b6a77cc9d..712d94f8aa 100644 --- a/plugins/xcmetrics/src/components/PreformattedText/PreformattedText.tsx +++ b/plugins/xcmetrics/src/components/PreformattedText/PreformattedText.tsx @@ -14,16 +14,13 @@ * limitations under the License. */ -import { - Button, - createStyles, - Dialog, - DialogActions, - DialogContent, - DialogTitle, - IconButton, - makeStyles, -} from '@material-ui/core'; +import Button from '@material-ui/core/Button'; +import Dialog from '@material-ui/core/Dialog'; +import DialogActions from '@material-ui/core/DialogActions'; +import DialogContent from '@material-ui/core/DialogContent'; +import DialogTitle from '@material-ui/core/DialogTitle'; +import IconButton from '@material-ui/core/IconButton'; +import { createStyles, makeStyles } from '@material-ui/core/styles'; import CloseIcon from '@material-ui/icons/Close'; import React, { useState } from 'react'; import { cn } from '../../utils'; diff --git a/plugins/xcmetrics/src/components/StatusCell/StatusCell.tsx b/plugins/xcmetrics/src/components/StatusCell/StatusCell.tsx index 98ddadc1ff..7e73d8483a 100644 --- a/plugins/xcmetrics/src/components/StatusCell/StatusCell.tsx +++ b/plugins/xcmetrics/src/components/StatusCell/StatusCell.tsx @@ -14,7 +14,8 @@ * limitations under the License. */ -import { makeStyles, Theme, Tooltip } from '@material-ui/core'; +import Tooltip from '@material-ui/core/Tooltip'; +import { makeStyles, Theme } from '@material-ui/core/styles'; import React from 'react'; import { BuildStatus, BuildStatusResult, xcmetricsApiRef } from '../../api'; import { cn, formatDuration, formatStatus } from '../../utils'; diff --git a/plugins/xcmetrics/src/components/StatusMatrix/StatusMatrix.tsx b/plugins/xcmetrics/src/components/StatusMatrix/StatusMatrix.tsx index 4c5af54017..b51852607f 100644 --- a/plugins/xcmetrics/src/components/StatusMatrix/StatusMatrix.tsx +++ b/plugins/xcmetrics/src/components/StatusMatrix/StatusMatrix.tsx @@ -15,13 +15,13 @@ */ import React from 'react'; -import { makeStyles } from '@material-ui/core'; +import { makeStyles } from '@material-ui/core/styles'; import { xcmetricsApiRef } from '../../api'; import useAsync from 'react-use/lib/useAsync'; import useMeasure from 'react-use/lib/useMeasure'; import { cn } from '../../utils'; import { useApi } from '@backstage/core-plugin-api'; -import { Alert } from '@material-ui/lab'; +import Alert from '@material-ui/lab/Alert'; import { StatusCell } from '../StatusCell'; const CELL_SIZE = 12; diff --git a/plugins/xcmetrics/src/components/Trend/Trend.tsx b/plugins/xcmetrics/src/components/Trend/Trend.tsx index 575872e813..29ed737a71 100644 --- a/plugins/xcmetrics/src/components/Trend/Trend.tsx +++ b/plugins/xcmetrics/src/components/Trend/Trend.tsx @@ -15,7 +15,7 @@ */ import React from 'react'; import { TrendLine } from '@backstage/core-components'; -import { Typography } from '@material-ui/core'; +import Typography from '@material-ui/core/Typography'; interface TrendProps { data?: number[]; diff --git a/scripts/snyk-github-issue-sync.ts b/scripts/snyk-github-issue-sync.ts index ea7d42a2a4..21bb852b5f 100755 --- a/scripts/snyk-github-issue-sync.ts +++ b/scripts/snyk-github-issue-sync.ts @@ -1,4 +1,4 @@ -#!/usr/bin/env yarn ts-node --transpile-only +#!/usr/bin/env node --require @backstage/cli/config/nodeTransform.cjs /* * Copyright 2021 The Backstage Authors * diff --git a/storybook/yarn.lock b/storybook/yarn.lock index ffb632f758..5cda56a327 100644 --- a/storybook/yarn.lock +++ b/storybook/yarn.lock @@ -2842,90 +2842,90 @@ __metadata: languageName: node linkType: hard -"@swc/core-darwin-arm64@npm:1.4.2": - version: 1.4.2 - resolution: "@swc/core-darwin-arm64@npm:1.4.2" +"@swc/core-darwin-arm64@npm:1.4.8": + version: 1.4.8 + resolution: "@swc/core-darwin-arm64@npm:1.4.8" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@swc/core-darwin-x64@npm:1.4.2": - version: 1.4.2 - resolution: "@swc/core-darwin-x64@npm:1.4.2" +"@swc/core-darwin-x64@npm:1.4.8": + version: 1.4.8 + resolution: "@swc/core-darwin-x64@npm:1.4.8" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@swc/core-linux-arm-gnueabihf@npm:1.4.2": - version: 1.4.2 - resolution: "@swc/core-linux-arm-gnueabihf@npm:1.4.2" +"@swc/core-linux-arm-gnueabihf@npm:1.4.8": + version: 1.4.8 + resolution: "@swc/core-linux-arm-gnueabihf@npm:1.4.8" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@swc/core-linux-arm64-gnu@npm:1.4.2": - version: 1.4.2 - resolution: "@swc/core-linux-arm64-gnu@npm:1.4.2" +"@swc/core-linux-arm64-gnu@npm:1.4.8": + version: 1.4.8 + resolution: "@swc/core-linux-arm64-gnu@npm:1.4.8" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-arm64-musl@npm:1.4.2": - version: 1.4.2 - resolution: "@swc/core-linux-arm64-musl@npm:1.4.2" +"@swc/core-linux-arm64-musl@npm:1.4.8": + version: 1.4.8 + resolution: "@swc/core-linux-arm64-musl@npm:1.4.8" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@swc/core-linux-x64-gnu@npm:1.4.2": - version: 1.4.2 - resolution: "@swc/core-linux-x64-gnu@npm:1.4.2" +"@swc/core-linux-x64-gnu@npm:1.4.8": + version: 1.4.8 + resolution: "@swc/core-linux-x64-gnu@npm:1.4.8" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-x64-musl@npm:1.4.2": - version: 1.4.2 - resolution: "@swc/core-linux-x64-musl@npm:1.4.2" +"@swc/core-linux-x64-musl@npm:1.4.8": + version: 1.4.8 + resolution: "@swc/core-linux-x64-musl@npm:1.4.8" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@swc/core-win32-arm64-msvc@npm:1.4.2": - version: 1.4.2 - resolution: "@swc/core-win32-arm64-msvc@npm:1.4.2" +"@swc/core-win32-arm64-msvc@npm:1.4.8": + version: 1.4.8 + resolution: "@swc/core-win32-arm64-msvc@npm:1.4.8" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@swc/core-win32-ia32-msvc@npm:1.4.2": - version: 1.4.2 - resolution: "@swc/core-win32-ia32-msvc@npm:1.4.2" +"@swc/core-win32-ia32-msvc@npm:1.4.8": + version: 1.4.8 + resolution: "@swc/core-win32-ia32-msvc@npm:1.4.8" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@swc/core-win32-x64-msvc@npm:1.4.2": - version: 1.4.2 - resolution: "@swc/core-win32-x64-msvc@npm:1.4.2" +"@swc/core-win32-x64-msvc@npm:1.4.8": + version: 1.4.8 + resolution: "@swc/core-win32-x64-msvc@npm:1.4.8" conditions: os=win32 & cpu=x64 languageName: node linkType: hard "@swc/core@npm:^1.3.46": - version: 1.4.2 - resolution: "@swc/core@npm:1.4.2" + version: 1.4.8 + resolution: "@swc/core@npm:1.4.8" dependencies: - "@swc/core-darwin-arm64": 1.4.2 - "@swc/core-darwin-x64": 1.4.2 - "@swc/core-linux-arm-gnueabihf": 1.4.2 - "@swc/core-linux-arm64-gnu": 1.4.2 - "@swc/core-linux-arm64-musl": 1.4.2 - "@swc/core-linux-x64-gnu": 1.4.2 - "@swc/core-linux-x64-musl": 1.4.2 - "@swc/core-win32-arm64-msvc": 1.4.2 - "@swc/core-win32-ia32-msvc": 1.4.2 - "@swc/core-win32-x64-msvc": 1.4.2 + "@swc/core-darwin-arm64": 1.4.8 + "@swc/core-darwin-x64": 1.4.8 + "@swc/core-linux-arm-gnueabihf": 1.4.8 + "@swc/core-linux-arm64-gnu": 1.4.8 + "@swc/core-linux-arm64-musl": 1.4.8 + "@swc/core-linux-x64-gnu": 1.4.8 + "@swc/core-linux-x64-musl": 1.4.8 + "@swc/core-win32-arm64-msvc": 1.4.8 + "@swc/core-win32-ia32-msvc": 1.4.8 + "@swc/core-win32-x64-msvc": 1.4.8 "@swc/counter": ^0.1.2 "@swc/types": ^0.1.5 peerDependencies: @@ -2954,7 +2954,7 @@ __metadata: peerDependenciesMeta: "@swc/helpers": optional: true - checksum: b17afda692b2627d3a82e589f1b29cef31bdee626a2dd997d78312dcbfc6eb701850fbab22e85f02b1261da39f0b0afb6a236c6065f6d0d7478cff939ca5a888 + checksum: 3284e64fe72896d1be8637f7fdcbba575d86e02da056a8c5208c93877250bfb1922fc5194281926650d5694e2434b7906efc0db8925769a4558f5fbd93028fd6 languageName: node linkType: hard diff --git a/yarn.lock b/yarn.lock index 067d6a0229..9d0a80908d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -363,569 +363,568 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/client-cognito-identity@npm:3.521.0": - version: 3.521.0 - resolution: "@aws-sdk/client-cognito-identity@npm:3.521.0" +"@aws-sdk/client-cognito-identity@npm:3.535.0": + version: 3.535.0 + resolution: "@aws-sdk/client-cognito-identity@npm:3.535.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/client-sts": 3.521.0 - "@aws-sdk/core": 3.521.0 - "@aws-sdk/credential-provider-node": 3.521.0 - "@aws-sdk/middleware-host-header": 3.521.0 - "@aws-sdk/middleware-logger": 3.521.0 - "@aws-sdk/middleware-recursion-detection": 3.521.0 - "@aws-sdk/middleware-user-agent": 3.521.0 - "@aws-sdk/region-config-resolver": 3.521.0 - "@aws-sdk/types": 3.521.0 - "@aws-sdk/util-endpoints": 3.521.0 - "@aws-sdk/util-user-agent-browser": 3.521.0 - "@aws-sdk/util-user-agent-node": 3.521.0 - "@smithy/config-resolver": ^2.1.2 - "@smithy/core": ^1.3.3 - "@smithy/fetch-http-handler": ^2.4.2 - "@smithy/hash-node": ^2.1.2 - "@smithy/invalid-dependency": ^2.1.2 - "@smithy/middleware-content-length": ^2.1.2 - "@smithy/middleware-endpoint": ^2.4.2 - "@smithy/middleware-retry": ^2.1.2 - "@smithy/middleware-serde": ^2.1.2 - "@smithy/middleware-stack": ^2.1.2 - "@smithy/node-config-provider": ^2.2.2 - "@smithy/node-http-handler": ^2.4.0 - "@smithy/protocol-http": ^3.2.0 - "@smithy/smithy-client": ^2.4.0 - "@smithy/types": ^2.10.0 - "@smithy/url-parser": ^2.1.2 - "@smithy/util-base64": ^2.1.1 - "@smithy/util-body-length-browser": ^2.1.1 - "@smithy/util-body-length-node": ^2.2.1 - "@smithy/util-defaults-mode-browser": ^2.1.2 - "@smithy/util-defaults-mode-node": ^2.2.1 - "@smithy/util-endpoints": ^1.1.2 - "@smithy/util-middleware": ^2.1.2 - "@smithy/util-retry": ^2.1.2 - "@smithy/util-utf8": ^2.1.1 - tslib: ^2.5.0 - checksum: e664da040d7688b97603dc49310c40acaae95c87dd2b32786664d5ee553a5e4079677b5ebcf5e85137434eafebe20c1d9f6f49b05926394d5b82cac2bcc2bbb8 + "@aws-sdk/client-sts": 3.535.0 + "@aws-sdk/core": 3.535.0 + "@aws-sdk/credential-provider-node": 3.535.0 + "@aws-sdk/middleware-host-header": 3.535.0 + "@aws-sdk/middleware-logger": 3.535.0 + "@aws-sdk/middleware-recursion-detection": 3.535.0 + "@aws-sdk/middleware-user-agent": 3.535.0 + "@aws-sdk/region-config-resolver": 3.535.0 + "@aws-sdk/types": 3.535.0 + "@aws-sdk/util-endpoints": 3.535.0 + "@aws-sdk/util-user-agent-browser": 3.535.0 + "@aws-sdk/util-user-agent-node": 3.535.0 + "@smithy/config-resolver": ^2.2.0 + "@smithy/core": ^1.4.0 + "@smithy/fetch-http-handler": ^2.5.0 + "@smithy/hash-node": ^2.2.0 + "@smithy/invalid-dependency": ^2.2.0 + "@smithy/middleware-content-length": ^2.2.0 + "@smithy/middleware-endpoint": ^2.5.0 + "@smithy/middleware-retry": ^2.2.0 + "@smithy/middleware-serde": ^2.3.0 + "@smithy/middleware-stack": ^2.2.0 + "@smithy/node-config-provider": ^2.3.0 + "@smithy/node-http-handler": ^2.5.0 + "@smithy/protocol-http": ^3.3.0 + "@smithy/smithy-client": ^2.5.0 + "@smithy/types": ^2.12.0 + "@smithy/url-parser": ^2.2.0 + "@smithy/util-base64": ^2.3.0 + "@smithy/util-body-length-browser": ^2.2.0 + "@smithy/util-body-length-node": ^2.3.0 + "@smithy/util-defaults-mode-browser": ^2.2.0 + "@smithy/util-defaults-mode-node": ^2.3.0 + "@smithy/util-endpoints": ^1.2.0 + "@smithy/util-middleware": ^2.2.0 + "@smithy/util-retry": ^2.2.0 + "@smithy/util-utf8": ^2.3.0 + tslib: ^2.6.2 + checksum: 146eecad358a7aa88fb7301b708441d30a51adb649a0e36575d3e2af08b9063455b0e4027bd801fa93728eb14b5112e87d132821414a9aa4b3d1eaa85092643c languageName: node linkType: hard "@aws-sdk/client-eks@npm:^3.350.0": - version: 3.521.0 - resolution: "@aws-sdk/client-eks@npm:3.521.0" + version: 3.535.0 + resolution: "@aws-sdk/client-eks@npm:3.535.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/client-sts": 3.521.0 - "@aws-sdk/core": 3.521.0 - "@aws-sdk/credential-provider-node": 3.521.0 - "@aws-sdk/middleware-host-header": 3.521.0 - "@aws-sdk/middleware-logger": 3.521.0 - "@aws-sdk/middleware-recursion-detection": 3.521.0 - "@aws-sdk/middleware-user-agent": 3.521.0 - "@aws-sdk/region-config-resolver": 3.521.0 - "@aws-sdk/types": 3.521.0 - "@aws-sdk/util-endpoints": 3.521.0 - "@aws-sdk/util-user-agent-browser": 3.521.0 - "@aws-sdk/util-user-agent-node": 3.521.0 - "@smithy/config-resolver": ^2.1.2 - "@smithy/core": ^1.3.3 - "@smithy/fetch-http-handler": ^2.4.2 - "@smithy/hash-node": ^2.1.2 - "@smithy/invalid-dependency": ^2.1.2 - "@smithy/middleware-content-length": ^2.1.2 - "@smithy/middleware-endpoint": ^2.4.2 - "@smithy/middleware-retry": ^2.1.2 - "@smithy/middleware-serde": ^2.1.2 - "@smithy/middleware-stack": ^2.1.2 - "@smithy/node-config-provider": ^2.2.2 - "@smithy/node-http-handler": ^2.4.0 - "@smithy/protocol-http": ^3.2.0 - "@smithy/smithy-client": ^2.4.0 - "@smithy/types": ^2.10.0 - "@smithy/url-parser": ^2.1.2 - "@smithy/util-base64": ^2.1.1 - "@smithy/util-body-length-browser": ^2.1.1 - "@smithy/util-body-length-node": ^2.2.1 - "@smithy/util-defaults-mode-browser": ^2.1.2 - "@smithy/util-defaults-mode-node": ^2.2.1 - "@smithy/util-endpoints": ^1.1.2 - "@smithy/util-middleware": ^2.1.2 - "@smithy/util-retry": ^2.1.2 - "@smithy/util-utf8": ^2.1.1 - "@smithy/util-waiter": ^2.1.2 - tslib: ^2.5.0 + "@aws-sdk/client-sts": 3.535.0 + "@aws-sdk/core": 3.535.0 + "@aws-sdk/credential-provider-node": 3.535.0 + "@aws-sdk/middleware-host-header": 3.535.0 + "@aws-sdk/middleware-logger": 3.535.0 + "@aws-sdk/middleware-recursion-detection": 3.535.0 + "@aws-sdk/middleware-user-agent": 3.535.0 + "@aws-sdk/region-config-resolver": 3.535.0 + "@aws-sdk/types": 3.535.0 + "@aws-sdk/util-endpoints": 3.535.0 + "@aws-sdk/util-user-agent-browser": 3.535.0 + "@aws-sdk/util-user-agent-node": 3.535.0 + "@smithy/config-resolver": ^2.2.0 + "@smithy/core": ^1.4.0 + "@smithy/fetch-http-handler": ^2.5.0 + "@smithy/hash-node": ^2.2.0 + "@smithy/invalid-dependency": ^2.2.0 + "@smithy/middleware-content-length": ^2.2.0 + "@smithy/middleware-endpoint": ^2.5.0 + "@smithy/middleware-retry": ^2.2.0 + "@smithy/middleware-serde": ^2.3.0 + "@smithy/middleware-stack": ^2.2.0 + "@smithy/node-config-provider": ^2.3.0 + "@smithy/node-http-handler": ^2.5.0 + "@smithy/protocol-http": ^3.3.0 + "@smithy/smithy-client": ^2.5.0 + "@smithy/types": ^2.12.0 + "@smithy/url-parser": ^2.2.0 + "@smithy/util-base64": ^2.3.0 + "@smithy/util-body-length-browser": ^2.2.0 + "@smithy/util-body-length-node": ^2.3.0 + "@smithy/util-defaults-mode-browser": ^2.2.0 + "@smithy/util-defaults-mode-node": ^2.3.0 + "@smithy/util-endpoints": ^1.2.0 + "@smithy/util-middleware": ^2.2.0 + "@smithy/util-retry": ^2.2.0 + "@smithy/util-utf8": ^2.3.0 + "@smithy/util-waiter": ^2.2.0 + tslib: ^2.6.2 uuid: ^9.0.1 - checksum: c31d933e4f64173276e6c3a9cba1e699fc25d8b43daff15cc52e23c4bbfdbac63f7e6cc8c55910bde551b568c6c7f928b432d518fe6251c5d1fad65854d44861 + checksum: 2f4096b60ae4000191e167eec512d0571ff2532959e8ddc52332ea277bca787c791e2cab35fb9c313a3753d5d928aa78c0b760a73b43fcde45fb5732161ec9b2 languageName: node linkType: hard "@aws-sdk/client-organizations@npm:^3.350.0": - version: 3.521.0 - resolution: "@aws-sdk/client-organizations@npm:3.521.0" + version: 3.535.0 + resolution: "@aws-sdk/client-organizations@npm:3.535.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/client-sts": 3.521.0 - "@aws-sdk/core": 3.521.0 - "@aws-sdk/credential-provider-node": 3.521.0 - "@aws-sdk/middleware-host-header": 3.521.0 - "@aws-sdk/middleware-logger": 3.521.0 - "@aws-sdk/middleware-recursion-detection": 3.521.0 - "@aws-sdk/middleware-user-agent": 3.521.0 - "@aws-sdk/region-config-resolver": 3.521.0 - "@aws-sdk/types": 3.521.0 - "@aws-sdk/util-endpoints": 3.521.0 - "@aws-sdk/util-user-agent-browser": 3.521.0 - "@aws-sdk/util-user-agent-node": 3.521.0 - "@smithy/config-resolver": ^2.1.2 - "@smithy/core": ^1.3.3 - "@smithy/fetch-http-handler": ^2.4.2 - "@smithy/hash-node": ^2.1.2 - "@smithy/invalid-dependency": ^2.1.2 - "@smithy/middleware-content-length": ^2.1.2 - "@smithy/middleware-endpoint": ^2.4.2 - "@smithy/middleware-retry": ^2.1.2 - "@smithy/middleware-serde": ^2.1.2 - "@smithy/middleware-stack": ^2.1.2 - "@smithy/node-config-provider": ^2.2.2 - "@smithy/node-http-handler": ^2.4.0 - "@smithy/protocol-http": ^3.2.0 - "@smithy/smithy-client": ^2.4.0 - "@smithy/types": ^2.10.0 - "@smithy/url-parser": ^2.1.2 - "@smithy/util-base64": ^2.1.1 - "@smithy/util-body-length-browser": ^2.1.1 - "@smithy/util-body-length-node": ^2.2.1 - "@smithy/util-defaults-mode-browser": ^2.1.2 - "@smithy/util-defaults-mode-node": ^2.2.1 - "@smithy/util-endpoints": ^1.1.2 - "@smithy/util-middleware": ^2.1.2 - "@smithy/util-retry": ^2.1.2 - "@smithy/util-utf8": ^2.1.1 - tslib: ^2.5.0 - checksum: 1191e702f2123f2316f175dc81e3c00df05c79a53be709f166834c8425a600cff4d61bb0db7befc1fa3fc801dcccc05faab87f74adf0100b8428b4ee26c0a963 + "@aws-sdk/client-sts": 3.535.0 + "@aws-sdk/core": 3.535.0 + "@aws-sdk/credential-provider-node": 3.535.0 + "@aws-sdk/middleware-host-header": 3.535.0 + "@aws-sdk/middleware-logger": 3.535.0 + "@aws-sdk/middleware-recursion-detection": 3.535.0 + "@aws-sdk/middleware-user-agent": 3.535.0 + "@aws-sdk/region-config-resolver": 3.535.0 + "@aws-sdk/types": 3.535.0 + "@aws-sdk/util-endpoints": 3.535.0 + "@aws-sdk/util-user-agent-browser": 3.535.0 + "@aws-sdk/util-user-agent-node": 3.535.0 + "@smithy/config-resolver": ^2.2.0 + "@smithy/core": ^1.4.0 + "@smithy/fetch-http-handler": ^2.5.0 + "@smithy/hash-node": ^2.2.0 + "@smithy/invalid-dependency": ^2.2.0 + "@smithy/middleware-content-length": ^2.2.0 + "@smithy/middleware-endpoint": ^2.5.0 + "@smithy/middleware-retry": ^2.2.0 + "@smithy/middleware-serde": ^2.3.0 + "@smithy/middleware-stack": ^2.2.0 + "@smithy/node-config-provider": ^2.3.0 + "@smithy/node-http-handler": ^2.5.0 + "@smithy/protocol-http": ^3.3.0 + "@smithy/smithy-client": ^2.5.0 + "@smithy/types": ^2.12.0 + "@smithy/url-parser": ^2.2.0 + "@smithy/util-base64": ^2.3.0 + "@smithy/util-body-length-browser": ^2.2.0 + "@smithy/util-body-length-node": ^2.3.0 + "@smithy/util-defaults-mode-browser": ^2.2.0 + "@smithy/util-defaults-mode-node": ^2.3.0 + "@smithy/util-endpoints": ^1.2.0 + "@smithy/util-middleware": ^2.2.0 + "@smithy/util-retry": ^2.2.0 + "@smithy/util-utf8": ^2.3.0 + tslib: ^2.6.2 + checksum: a8983d8b9af5075174335c0c37867b1b9377feb5f10b31e3af70b8fd212a418ed1390b0a82d2af06ed4106d023a84344611d308109c6e0a2615874c21314134e languageName: node linkType: hard "@aws-sdk/client-s3@npm:^3.350.0": - version: 3.521.0 - resolution: "@aws-sdk/client-s3@npm:3.521.0" + version: 3.535.0 + resolution: "@aws-sdk/client-s3@npm:3.535.0" dependencies: "@aws-crypto/sha1-browser": 3.0.0 "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/client-sts": 3.521.0 - "@aws-sdk/core": 3.521.0 - "@aws-sdk/credential-provider-node": 3.521.0 - "@aws-sdk/middleware-bucket-endpoint": 3.521.0 - "@aws-sdk/middleware-expect-continue": 3.521.0 - "@aws-sdk/middleware-flexible-checksums": 3.521.0 - "@aws-sdk/middleware-host-header": 3.521.0 - "@aws-sdk/middleware-location-constraint": 3.521.0 - "@aws-sdk/middleware-logger": 3.521.0 - "@aws-sdk/middleware-recursion-detection": 3.521.0 - "@aws-sdk/middleware-sdk-s3": 3.521.0 - "@aws-sdk/middleware-signing": 3.521.0 - "@aws-sdk/middleware-ssec": 3.521.0 - "@aws-sdk/middleware-user-agent": 3.521.0 - "@aws-sdk/region-config-resolver": 3.521.0 - "@aws-sdk/signature-v4-multi-region": 3.521.0 - "@aws-sdk/types": 3.521.0 - "@aws-sdk/util-endpoints": 3.521.0 - "@aws-sdk/util-user-agent-browser": 3.521.0 - "@aws-sdk/util-user-agent-node": 3.521.0 - "@aws-sdk/xml-builder": 3.521.0 - "@smithy/config-resolver": ^2.1.2 - "@smithy/core": ^1.3.3 - "@smithy/eventstream-serde-browser": ^2.1.2 - "@smithy/eventstream-serde-config-resolver": ^2.1.2 - "@smithy/eventstream-serde-node": ^2.1.2 - "@smithy/fetch-http-handler": ^2.4.2 - "@smithy/hash-blob-browser": ^2.1.2 - "@smithy/hash-node": ^2.1.2 - "@smithy/hash-stream-node": ^2.1.2 - "@smithy/invalid-dependency": ^2.1.2 - "@smithy/md5-js": ^2.1.2 - "@smithy/middleware-content-length": ^2.1.2 - "@smithy/middleware-endpoint": ^2.4.2 - "@smithy/middleware-retry": ^2.1.2 - "@smithy/middleware-serde": ^2.1.2 - "@smithy/middleware-stack": ^2.1.2 - "@smithy/node-config-provider": ^2.2.2 - "@smithy/node-http-handler": ^2.4.0 - "@smithy/protocol-http": ^3.2.0 - "@smithy/smithy-client": ^2.4.0 - "@smithy/types": ^2.10.0 - "@smithy/url-parser": ^2.1.2 - "@smithy/util-base64": ^2.1.1 - "@smithy/util-body-length-browser": ^2.1.1 - "@smithy/util-body-length-node": ^2.2.1 - "@smithy/util-defaults-mode-browser": ^2.1.2 - "@smithy/util-defaults-mode-node": ^2.2.1 - "@smithy/util-endpoints": ^1.1.2 - "@smithy/util-retry": ^2.1.2 - "@smithy/util-stream": ^2.1.2 - "@smithy/util-utf8": ^2.1.1 - "@smithy/util-waiter": ^2.1.2 - fast-xml-parser: 4.2.5 - tslib: ^2.5.0 - checksum: bf3c5d6a42df6812f5645751bdbbb6cd69f8b28c3f0dd5ba7697a631e7573494e7cdc2bdc8081e49e5159a73c5a32259575a9d79f170753e8fbc53613e3ecc9c + "@aws-sdk/client-sts": 3.535.0 + "@aws-sdk/core": 3.535.0 + "@aws-sdk/credential-provider-node": 3.535.0 + "@aws-sdk/middleware-bucket-endpoint": 3.535.0 + "@aws-sdk/middleware-expect-continue": 3.535.0 + "@aws-sdk/middleware-flexible-checksums": 3.535.0 + "@aws-sdk/middleware-host-header": 3.535.0 + "@aws-sdk/middleware-location-constraint": 3.535.0 + "@aws-sdk/middleware-logger": 3.535.0 + "@aws-sdk/middleware-recursion-detection": 3.535.0 + "@aws-sdk/middleware-sdk-s3": 3.535.0 + "@aws-sdk/middleware-signing": 3.535.0 + "@aws-sdk/middleware-ssec": 3.535.0 + "@aws-sdk/middleware-user-agent": 3.535.0 + "@aws-sdk/region-config-resolver": 3.535.0 + "@aws-sdk/signature-v4-multi-region": 3.535.0 + "@aws-sdk/types": 3.535.0 + "@aws-sdk/util-endpoints": 3.535.0 + "@aws-sdk/util-user-agent-browser": 3.535.0 + "@aws-sdk/util-user-agent-node": 3.535.0 + "@aws-sdk/xml-builder": 3.535.0 + "@smithy/config-resolver": ^2.2.0 + "@smithy/core": ^1.4.0 + "@smithy/eventstream-serde-browser": ^2.2.0 + "@smithy/eventstream-serde-config-resolver": ^2.2.0 + "@smithy/eventstream-serde-node": ^2.2.0 + "@smithy/fetch-http-handler": ^2.5.0 + "@smithy/hash-blob-browser": ^2.2.0 + "@smithy/hash-node": ^2.2.0 + "@smithy/hash-stream-node": ^2.2.0 + "@smithy/invalid-dependency": ^2.2.0 + "@smithy/md5-js": ^2.2.0 + "@smithy/middleware-content-length": ^2.2.0 + "@smithy/middleware-endpoint": ^2.5.0 + "@smithy/middleware-retry": ^2.2.0 + "@smithy/middleware-serde": ^2.3.0 + "@smithy/middleware-stack": ^2.2.0 + "@smithy/node-config-provider": ^2.3.0 + "@smithy/node-http-handler": ^2.5.0 + "@smithy/protocol-http": ^3.3.0 + "@smithy/smithy-client": ^2.5.0 + "@smithy/types": ^2.12.0 + "@smithy/url-parser": ^2.2.0 + "@smithy/util-base64": ^2.3.0 + "@smithy/util-body-length-browser": ^2.2.0 + "@smithy/util-body-length-node": ^2.3.0 + "@smithy/util-defaults-mode-browser": ^2.2.0 + "@smithy/util-defaults-mode-node": ^2.3.0 + "@smithy/util-endpoints": ^1.2.0 + "@smithy/util-retry": ^2.2.0 + "@smithy/util-stream": ^2.2.0 + "@smithy/util-utf8": ^2.3.0 + "@smithy/util-waiter": ^2.2.0 + tslib: ^2.6.2 + checksum: e2cfbcf91c65a0ee111d1c6f9b7c42f1464384d4ab7afe401a2dc584b1f0faab86593ad5c9b2d49a353cf1df2288adab95de2959d5fc70a2df3eefd71aa2d536 languageName: node linkType: hard "@aws-sdk/client-sqs@npm:^3.350.0": - version: 3.521.0 - resolution: "@aws-sdk/client-sqs@npm:3.521.0" + version: 3.535.0 + resolution: "@aws-sdk/client-sqs@npm:3.535.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/client-sts": 3.521.0 - "@aws-sdk/core": 3.521.0 - "@aws-sdk/credential-provider-node": 3.521.0 - "@aws-sdk/middleware-host-header": 3.521.0 - "@aws-sdk/middleware-logger": 3.521.0 - "@aws-sdk/middleware-recursion-detection": 3.521.0 - "@aws-sdk/middleware-sdk-sqs": 3.521.0 - "@aws-sdk/middleware-user-agent": 3.521.0 - "@aws-sdk/region-config-resolver": 3.521.0 - "@aws-sdk/types": 3.521.0 - "@aws-sdk/util-endpoints": 3.521.0 - "@aws-sdk/util-user-agent-browser": 3.521.0 - "@aws-sdk/util-user-agent-node": 3.521.0 - "@smithy/config-resolver": ^2.1.2 - "@smithy/core": ^1.3.3 - "@smithy/fetch-http-handler": ^2.4.2 - "@smithy/hash-node": ^2.1.2 - "@smithy/invalid-dependency": ^2.1.2 - "@smithy/md5-js": ^2.1.2 - "@smithy/middleware-content-length": ^2.1.2 - "@smithy/middleware-endpoint": ^2.4.2 - "@smithy/middleware-retry": ^2.1.2 - "@smithy/middleware-serde": ^2.1.2 - "@smithy/middleware-stack": ^2.1.2 - "@smithy/node-config-provider": ^2.2.2 - "@smithy/node-http-handler": ^2.4.0 - "@smithy/protocol-http": ^3.2.0 - "@smithy/smithy-client": ^2.4.0 - "@smithy/types": ^2.10.0 - "@smithy/url-parser": ^2.1.2 - "@smithy/util-base64": ^2.1.1 - "@smithy/util-body-length-browser": ^2.1.1 - "@smithy/util-body-length-node": ^2.2.1 - "@smithy/util-defaults-mode-browser": ^2.1.2 - "@smithy/util-defaults-mode-node": ^2.2.1 - "@smithy/util-endpoints": ^1.1.2 - "@smithy/util-middleware": ^2.1.2 - "@smithy/util-retry": ^2.1.2 - "@smithy/util-utf8": ^2.1.1 - tslib: ^2.5.0 - checksum: 9f65ffa57f0da1279f00754234e504b9f2250085a2bc843605f591b54a67929b73ee4402a40a291a5f9ce9e9936ad1d31676e37a12bb30c4c24f2bcb17483c5b + "@aws-sdk/client-sts": 3.535.0 + "@aws-sdk/core": 3.535.0 + "@aws-sdk/credential-provider-node": 3.535.0 + "@aws-sdk/middleware-host-header": 3.535.0 + "@aws-sdk/middleware-logger": 3.535.0 + "@aws-sdk/middleware-recursion-detection": 3.535.0 + "@aws-sdk/middleware-sdk-sqs": 3.535.0 + "@aws-sdk/middleware-user-agent": 3.535.0 + "@aws-sdk/region-config-resolver": 3.535.0 + "@aws-sdk/types": 3.535.0 + "@aws-sdk/util-endpoints": 3.535.0 + "@aws-sdk/util-user-agent-browser": 3.535.0 + "@aws-sdk/util-user-agent-node": 3.535.0 + "@smithy/config-resolver": ^2.2.0 + "@smithy/core": ^1.4.0 + "@smithy/fetch-http-handler": ^2.5.0 + "@smithy/hash-node": ^2.2.0 + "@smithy/invalid-dependency": ^2.2.0 + "@smithy/md5-js": ^2.2.0 + "@smithy/middleware-content-length": ^2.2.0 + "@smithy/middleware-endpoint": ^2.5.0 + "@smithy/middleware-retry": ^2.2.0 + "@smithy/middleware-serde": ^2.3.0 + "@smithy/middleware-stack": ^2.2.0 + "@smithy/node-config-provider": ^2.3.0 + "@smithy/node-http-handler": ^2.5.0 + "@smithy/protocol-http": ^3.3.0 + "@smithy/smithy-client": ^2.5.0 + "@smithy/types": ^2.12.0 + "@smithy/url-parser": ^2.2.0 + "@smithy/util-base64": ^2.3.0 + "@smithy/util-body-length-browser": ^2.2.0 + "@smithy/util-body-length-node": ^2.3.0 + "@smithy/util-defaults-mode-browser": ^2.2.0 + "@smithy/util-defaults-mode-node": ^2.3.0 + "@smithy/util-endpoints": ^1.2.0 + "@smithy/util-middleware": ^2.2.0 + "@smithy/util-retry": ^2.2.0 + "@smithy/util-utf8": ^2.3.0 + tslib: ^2.6.2 + checksum: 83ba35e18a4ed40a0d39b51d80cab9021705f176bbebac83fc917997cc685b903d57d483fd83ea873bfe211a4bba76a664533ddc0158b4da3246475d52d680e0 languageName: node linkType: hard -"@aws-sdk/client-sso-oidc@npm:3.521.0": - version: 3.521.0 - resolution: "@aws-sdk/client-sso-oidc@npm:3.521.0" +"@aws-sdk/client-sso-oidc@npm:3.535.0": + version: 3.535.0 + resolution: "@aws-sdk/client-sso-oidc@npm:3.535.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/client-sts": 3.521.0 - "@aws-sdk/core": 3.521.0 - "@aws-sdk/middleware-host-header": 3.521.0 - "@aws-sdk/middleware-logger": 3.521.0 - "@aws-sdk/middleware-recursion-detection": 3.521.0 - "@aws-sdk/middleware-user-agent": 3.521.0 - "@aws-sdk/region-config-resolver": 3.521.0 - "@aws-sdk/types": 3.521.0 - "@aws-sdk/util-endpoints": 3.521.0 - "@aws-sdk/util-user-agent-browser": 3.521.0 - "@aws-sdk/util-user-agent-node": 3.521.0 - "@smithy/config-resolver": ^2.1.2 - "@smithy/core": ^1.3.3 - "@smithy/fetch-http-handler": ^2.4.2 - "@smithy/hash-node": ^2.1.2 - "@smithy/invalid-dependency": ^2.1.2 - "@smithy/middleware-content-length": ^2.1.2 - "@smithy/middleware-endpoint": ^2.4.2 - "@smithy/middleware-retry": ^2.1.2 - "@smithy/middleware-serde": ^2.1.2 - "@smithy/middleware-stack": ^2.1.2 - "@smithy/node-config-provider": ^2.2.2 - "@smithy/node-http-handler": ^2.4.0 - "@smithy/protocol-http": ^3.2.0 - "@smithy/smithy-client": ^2.4.0 - "@smithy/types": ^2.10.0 - "@smithy/url-parser": ^2.1.2 - "@smithy/util-base64": ^2.1.1 - "@smithy/util-body-length-browser": ^2.1.1 - "@smithy/util-body-length-node": ^2.2.1 - "@smithy/util-defaults-mode-browser": ^2.1.2 - "@smithy/util-defaults-mode-node": ^2.2.1 - "@smithy/util-endpoints": ^1.1.2 - "@smithy/util-middleware": ^2.1.2 - "@smithy/util-retry": ^2.1.2 - "@smithy/util-utf8": ^2.1.1 - tslib: ^2.5.0 + "@aws-sdk/client-sts": 3.535.0 + "@aws-sdk/core": 3.535.0 + "@aws-sdk/middleware-host-header": 3.535.0 + "@aws-sdk/middleware-logger": 3.535.0 + "@aws-sdk/middleware-recursion-detection": 3.535.0 + "@aws-sdk/middleware-user-agent": 3.535.0 + "@aws-sdk/region-config-resolver": 3.535.0 + "@aws-sdk/types": 3.535.0 + "@aws-sdk/util-endpoints": 3.535.0 + "@aws-sdk/util-user-agent-browser": 3.535.0 + "@aws-sdk/util-user-agent-node": 3.535.0 + "@smithy/config-resolver": ^2.2.0 + "@smithy/core": ^1.4.0 + "@smithy/fetch-http-handler": ^2.5.0 + "@smithy/hash-node": ^2.2.0 + "@smithy/invalid-dependency": ^2.2.0 + "@smithy/middleware-content-length": ^2.2.0 + "@smithy/middleware-endpoint": ^2.5.0 + "@smithy/middleware-retry": ^2.2.0 + "@smithy/middleware-serde": ^2.3.0 + "@smithy/middleware-stack": ^2.2.0 + "@smithy/node-config-provider": ^2.3.0 + "@smithy/node-http-handler": ^2.5.0 + "@smithy/protocol-http": ^3.3.0 + "@smithy/smithy-client": ^2.5.0 + "@smithy/types": ^2.12.0 + "@smithy/url-parser": ^2.2.0 + "@smithy/util-base64": ^2.3.0 + "@smithy/util-body-length-browser": ^2.2.0 + "@smithy/util-body-length-node": ^2.3.0 + "@smithy/util-defaults-mode-browser": ^2.2.0 + "@smithy/util-defaults-mode-node": ^2.3.0 + "@smithy/util-endpoints": ^1.2.0 + "@smithy/util-middleware": ^2.2.0 + "@smithy/util-retry": ^2.2.0 + "@smithy/util-utf8": ^2.3.0 + tslib: ^2.6.2 peerDependencies: - "@aws-sdk/credential-provider-node": ^3.521.0 - checksum: da6b724cd91f128192eba0bbf0827c7e6fccb30f899240eb908eb62d0a57437e1ac7e28097d31b8af1d616a35a37af97f8dcf9137230cb98e1b6cc33a9f38d36 + "@aws-sdk/credential-provider-node": ^3.535.0 + checksum: fb532eeda1294bcaacefbfe0dc6674189c68a530d491d4cf6685d46d7fa5115184ba0b16c9a1f15014709a78f49d3e04d7f1caaf78fe21a4f9a47b6d67f29db6 languageName: node linkType: hard -"@aws-sdk/client-sso@npm:3.521.0": - version: 3.521.0 - resolution: "@aws-sdk/client-sso@npm:3.521.0" +"@aws-sdk/client-sso@npm:3.535.0": + version: 3.535.0 + resolution: "@aws-sdk/client-sso@npm:3.535.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/core": 3.521.0 - "@aws-sdk/middleware-host-header": 3.521.0 - "@aws-sdk/middleware-logger": 3.521.0 - "@aws-sdk/middleware-recursion-detection": 3.521.0 - "@aws-sdk/middleware-user-agent": 3.521.0 - "@aws-sdk/region-config-resolver": 3.521.0 - "@aws-sdk/types": 3.521.0 - "@aws-sdk/util-endpoints": 3.521.0 - "@aws-sdk/util-user-agent-browser": 3.521.0 - "@aws-sdk/util-user-agent-node": 3.521.0 - "@smithy/config-resolver": ^2.1.2 - "@smithy/core": ^1.3.3 - "@smithy/fetch-http-handler": ^2.4.2 - "@smithy/hash-node": ^2.1.2 - "@smithy/invalid-dependency": ^2.1.2 - "@smithy/middleware-content-length": ^2.1.2 - "@smithy/middleware-endpoint": ^2.4.2 - "@smithy/middleware-retry": ^2.1.2 - "@smithy/middleware-serde": ^2.1.2 - "@smithy/middleware-stack": ^2.1.2 - "@smithy/node-config-provider": ^2.2.2 - "@smithy/node-http-handler": ^2.4.0 - "@smithy/protocol-http": ^3.2.0 - "@smithy/smithy-client": ^2.4.0 - "@smithy/types": ^2.10.0 - "@smithy/url-parser": ^2.1.2 - "@smithy/util-base64": ^2.1.1 - "@smithy/util-body-length-browser": ^2.1.1 - "@smithy/util-body-length-node": ^2.2.1 - "@smithy/util-defaults-mode-browser": ^2.1.2 - "@smithy/util-defaults-mode-node": ^2.2.1 - "@smithy/util-endpoints": ^1.1.2 - "@smithy/util-middleware": ^2.1.2 - "@smithy/util-retry": ^2.1.2 - "@smithy/util-utf8": ^2.1.1 - tslib: ^2.5.0 - checksum: 1035c3beb9d090d6f3858be022c66127d246e2b6c88336c808300814628acd18666cb76f6f6dfcf622b3b67dd195a29230602608bea9b40dde54b98079331359 + "@aws-sdk/core": 3.535.0 + "@aws-sdk/middleware-host-header": 3.535.0 + "@aws-sdk/middleware-logger": 3.535.0 + "@aws-sdk/middleware-recursion-detection": 3.535.0 + "@aws-sdk/middleware-user-agent": 3.535.0 + "@aws-sdk/region-config-resolver": 3.535.0 + "@aws-sdk/types": 3.535.0 + "@aws-sdk/util-endpoints": 3.535.0 + "@aws-sdk/util-user-agent-browser": 3.535.0 + "@aws-sdk/util-user-agent-node": 3.535.0 + "@smithy/config-resolver": ^2.2.0 + "@smithy/core": ^1.4.0 + "@smithy/fetch-http-handler": ^2.5.0 + "@smithy/hash-node": ^2.2.0 + "@smithy/invalid-dependency": ^2.2.0 + "@smithy/middleware-content-length": ^2.2.0 + "@smithy/middleware-endpoint": ^2.5.0 + "@smithy/middleware-retry": ^2.2.0 + "@smithy/middleware-serde": ^2.3.0 + "@smithy/middleware-stack": ^2.2.0 + "@smithy/node-config-provider": ^2.3.0 + "@smithy/node-http-handler": ^2.5.0 + "@smithy/protocol-http": ^3.3.0 + "@smithy/smithy-client": ^2.5.0 + "@smithy/types": ^2.12.0 + "@smithy/url-parser": ^2.2.0 + "@smithy/util-base64": ^2.3.0 + "@smithy/util-body-length-browser": ^2.2.0 + "@smithy/util-body-length-node": ^2.3.0 + "@smithy/util-defaults-mode-browser": ^2.2.0 + "@smithy/util-defaults-mode-node": ^2.3.0 + "@smithy/util-endpoints": ^1.2.0 + "@smithy/util-middleware": ^2.2.0 + "@smithy/util-retry": ^2.2.0 + "@smithy/util-utf8": ^2.3.0 + tslib: ^2.6.2 + checksum: baed386827455e43160d4dfccacc382e348729e3b78b01f2a6fb9989c790ac8f9264513a3c963ace39ba5c3e0ffbaf3bf57ea8824ba537c4c1d5486b186d0596 languageName: node linkType: hard -"@aws-sdk/client-sts@npm:3.521.0, @aws-sdk/client-sts@npm:^3.350.0": - version: 3.521.0 - resolution: "@aws-sdk/client-sts@npm:3.521.0" +"@aws-sdk/client-sts@npm:3.535.0, @aws-sdk/client-sts@npm:^3.350.0": + version: 3.535.0 + resolution: "@aws-sdk/client-sts@npm:3.535.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/core": 3.521.0 - "@aws-sdk/middleware-host-header": 3.521.0 - "@aws-sdk/middleware-logger": 3.521.0 - "@aws-sdk/middleware-recursion-detection": 3.521.0 - "@aws-sdk/middleware-user-agent": 3.521.0 - "@aws-sdk/region-config-resolver": 3.521.0 - "@aws-sdk/types": 3.521.0 - "@aws-sdk/util-endpoints": 3.521.0 - "@aws-sdk/util-user-agent-browser": 3.521.0 - "@aws-sdk/util-user-agent-node": 3.521.0 - "@smithy/config-resolver": ^2.1.2 - "@smithy/core": ^1.3.3 - "@smithy/fetch-http-handler": ^2.4.2 - "@smithy/hash-node": ^2.1.2 - "@smithy/invalid-dependency": ^2.1.2 - "@smithy/middleware-content-length": ^2.1.2 - "@smithy/middleware-endpoint": ^2.4.2 - "@smithy/middleware-retry": ^2.1.2 - "@smithy/middleware-serde": ^2.1.2 - "@smithy/middleware-stack": ^2.1.2 - "@smithy/node-config-provider": ^2.2.2 - "@smithy/node-http-handler": ^2.4.0 - "@smithy/protocol-http": ^3.2.0 - "@smithy/smithy-client": ^2.4.0 - "@smithy/types": ^2.10.0 - "@smithy/url-parser": ^2.1.2 - "@smithy/util-base64": ^2.1.1 - "@smithy/util-body-length-browser": ^2.1.1 - "@smithy/util-body-length-node": ^2.2.1 - "@smithy/util-defaults-mode-browser": ^2.1.2 - "@smithy/util-defaults-mode-node": ^2.2.1 - "@smithy/util-endpoints": ^1.1.2 - "@smithy/util-middleware": ^2.1.2 - "@smithy/util-retry": ^2.1.2 - "@smithy/util-utf8": ^2.1.1 + "@aws-sdk/core": 3.535.0 + "@aws-sdk/middleware-host-header": 3.535.0 + "@aws-sdk/middleware-logger": 3.535.0 + "@aws-sdk/middleware-recursion-detection": 3.535.0 + "@aws-sdk/middleware-user-agent": 3.535.0 + "@aws-sdk/region-config-resolver": 3.535.0 + "@aws-sdk/types": 3.535.0 + "@aws-sdk/util-endpoints": 3.535.0 + "@aws-sdk/util-user-agent-browser": 3.535.0 + "@aws-sdk/util-user-agent-node": 3.535.0 + "@smithy/config-resolver": ^2.2.0 + "@smithy/core": ^1.4.0 + "@smithy/fetch-http-handler": ^2.5.0 + "@smithy/hash-node": ^2.2.0 + "@smithy/invalid-dependency": ^2.2.0 + "@smithy/middleware-content-length": ^2.2.0 + "@smithy/middleware-endpoint": ^2.5.0 + "@smithy/middleware-retry": ^2.2.0 + "@smithy/middleware-serde": ^2.3.0 + "@smithy/middleware-stack": ^2.2.0 + "@smithy/node-config-provider": ^2.3.0 + "@smithy/node-http-handler": ^2.5.0 + "@smithy/protocol-http": ^3.3.0 + "@smithy/smithy-client": ^2.5.0 + "@smithy/types": ^2.12.0 + "@smithy/url-parser": ^2.2.0 + "@smithy/util-base64": ^2.3.0 + "@smithy/util-body-length-browser": ^2.2.0 + "@smithy/util-body-length-node": ^2.3.0 + "@smithy/util-defaults-mode-browser": ^2.2.0 + "@smithy/util-defaults-mode-node": ^2.3.0 + "@smithy/util-endpoints": ^1.2.0 + "@smithy/util-middleware": ^2.2.0 + "@smithy/util-retry": ^2.2.0 + "@smithy/util-utf8": ^2.3.0 + tslib: ^2.6.2 + peerDependencies: + "@aws-sdk/credential-provider-node": ^3.535.0 + checksum: c4be32eb99dbf332a38c3d5ffa02abb3c1cd83b736e29277c309deff981e95895efb124825a44a24e8de3f34711fd018db5f984eedc92e1dc902cf29073f777a + languageName: node + linkType: hard + +"@aws-sdk/core@npm:3.535.0": + version: 3.535.0 + resolution: "@aws-sdk/core@npm:3.535.0" + dependencies: + "@smithy/core": ^1.4.0 + "@smithy/protocol-http": ^3.3.0 + "@smithy/signature-v4": ^2.2.0 + "@smithy/smithy-client": ^2.5.0 + "@smithy/types": ^2.12.0 fast-xml-parser: 4.2.5 - tslib: ^2.5.0 - peerDependencies: - "@aws-sdk/credential-provider-node": ^3.521.0 - checksum: 1ca480532746fa6d81bf84bebf6e38ab3d2565789654465ec22bd8c34daf2c64165a90d70e29da8170da7ba9a18041c3da4a037f37689939798bf39c03348a50 + tslib: ^2.6.2 + checksum: bc14b1db2bdc743c1ab16b48e5df7423d6eeef5a69400c84ea7ce6a6d01a17b940fab199bf84b7d63bbbc252969be79439b67676cccd5fc59ce0a9f89b62b376 languageName: node linkType: hard -"@aws-sdk/core@npm:3.521.0": - version: 3.521.0 - resolution: "@aws-sdk/core@npm:3.521.0" +"@aws-sdk/credential-provider-cognito-identity@npm:3.535.0": + version: 3.535.0 + resolution: "@aws-sdk/credential-provider-cognito-identity@npm:3.535.0" dependencies: - "@smithy/core": ^1.3.3 - "@smithy/protocol-http": ^3.2.0 - "@smithy/signature-v4": ^2.1.1 - "@smithy/smithy-client": ^2.4.0 - "@smithy/types": ^2.10.0 - tslib: ^2.5.0 - checksum: 43d02d64563b6fc5c55be1fd62dc67a95b862e8355d9c8d574c09fdc3668f7524723aec7a23ce29a40188d56479cba705dd8470787bebfd30b98c046f3b29606 + "@aws-sdk/client-cognito-identity": 3.535.0 + "@aws-sdk/types": 3.535.0 + "@smithy/property-provider": ^2.2.0 + "@smithy/types": ^2.12.0 + tslib: ^2.6.2 + checksum: a4a2fff27b24a837af656ade92f75018e263aadd5e3756c8b1d1ced7b1603aae9e124782b38cc4a2a82595381efa1dcf3462c72e4e2a306b92669cd578558f4f languageName: node linkType: hard -"@aws-sdk/credential-provider-cognito-identity@npm:3.521.0": - version: 3.521.0 - resolution: "@aws-sdk/credential-provider-cognito-identity@npm:3.521.0" +"@aws-sdk/credential-provider-env@npm:3.535.0": + version: 3.535.0 + resolution: "@aws-sdk/credential-provider-env@npm:3.535.0" dependencies: - "@aws-sdk/client-cognito-identity": 3.521.0 - "@aws-sdk/types": 3.521.0 - "@smithy/property-provider": ^2.1.1 - "@smithy/types": ^2.10.0 - tslib: ^2.5.0 - checksum: fce4a6b934839cb347fa603eb2c50f70e96e939528d3747492658de98e27d4f412256a40d3b63bb8d983ba81b695c7fff718632bd311c3d74e14194ea4553d95 + "@aws-sdk/types": 3.535.0 + "@smithy/property-provider": ^2.2.0 + "@smithy/types": ^2.12.0 + tslib: ^2.6.2 + checksum: ec7d011051d69643efd26fe7f3767b1301c6e6bdba12640dad542b60efb2b5fe31df01f8137703d814cf857a69485cc928d0de49ab56c5d05f79815dce19bdbf languageName: node linkType: hard -"@aws-sdk/credential-provider-env@npm:3.521.0": - version: 3.521.0 - resolution: "@aws-sdk/credential-provider-env@npm:3.521.0" +"@aws-sdk/credential-provider-http@npm:3.535.0": + version: 3.535.0 + resolution: "@aws-sdk/credential-provider-http@npm:3.535.0" dependencies: - "@aws-sdk/types": 3.521.0 - "@smithy/property-provider": ^2.1.1 - "@smithy/types": ^2.10.0 - tslib: ^2.5.0 - checksum: 5b217fa1fc86f1d553bab39ac30942e06dddbffe3061cfcafb978f61740749eec9155271ba241df8889c49e73b498a2e4036b384b8b6de8c63da8f5682228d41 + "@aws-sdk/types": 3.535.0 + "@smithy/fetch-http-handler": ^2.5.0 + "@smithy/node-http-handler": ^2.5.0 + "@smithy/property-provider": ^2.2.0 + "@smithy/protocol-http": ^3.3.0 + "@smithy/smithy-client": ^2.5.0 + "@smithy/types": ^2.12.0 + "@smithy/util-stream": ^2.2.0 + tslib: ^2.6.2 + checksum: a0ddcdf0538aa6a80e8705e21ef0c469d3756c762a3772e8d45b8bea173d5aa0aaf14e7a0c4e963a0530687a5dbd0777dcdaa4a363861de30620c68e752cdad9 languageName: node linkType: hard -"@aws-sdk/credential-provider-http@npm:3.521.0": - version: 3.521.0 - resolution: "@aws-sdk/credential-provider-http@npm:3.521.0" +"@aws-sdk/credential-provider-ini@npm:3.535.0": + version: 3.535.0 + resolution: "@aws-sdk/credential-provider-ini@npm:3.535.0" dependencies: - "@aws-sdk/types": 3.521.0 - "@smithy/fetch-http-handler": ^2.4.2 - "@smithy/node-http-handler": ^2.4.0 - "@smithy/property-provider": ^2.1.1 - "@smithy/protocol-http": ^3.2.0 - "@smithy/smithy-client": ^2.4.0 - "@smithy/types": ^2.10.0 - "@smithy/util-stream": ^2.1.2 - tslib: ^2.5.0 - checksum: b953861a460c2c871a390036e6ed5acdfd545e23204c56d2ae7835c46a43a598103175b9071107f9e817b9c386edc98a3b5e677ecc42b313b2d48cea2d11ca8e + "@aws-sdk/client-sts": 3.535.0 + "@aws-sdk/credential-provider-env": 3.535.0 + "@aws-sdk/credential-provider-process": 3.535.0 + "@aws-sdk/credential-provider-sso": 3.535.0 + "@aws-sdk/credential-provider-web-identity": 3.535.0 + "@aws-sdk/types": 3.535.0 + "@smithy/credential-provider-imds": ^2.3.0 + "@smithy/property-provider": ^2.2.0 + "@smithy/shared-ini-file-loader": ^2.4.0 + "@smithy/types": ^2.12.0 + tslib: ^2.6.2 + checksum: b35d5bfe064ca24a73443976521ac1176fda534d73aea9ffba6fb5a8e879c561e0b95b4b968191ad64976738e8b1f45c9a70072af3c4ba0beff490104f14d6cc languageName: node linkType: hard -"@aws-sdk/credential-provider-ini@npm:3.521.0": - version: 3.521.0 - resolution: "@aws-sdk/credential-provider-ini@npm:3.521.0" +"@aws-sdk/credential-provider-node@npm:3.535.0, @aws-sdk/credential-provider-node@npm:^3.350.0": + version: 3.535.0 + resolution: "@aws-sdk/credential-provider-node@npm:3.535.0" dependencies: - "@aws-sdk/client-sts": 3.521.0 - "@aws-sdk/credential-provider-env": 3.521.0 - "@aws-sdk/credential-provider-process": 3.521.0 - "@aws-sdk/credential-provider-sso": 3.521.0 - "@aws-sdk/credential-provider-web-identity": 3.521.0 - "@aws-sdk/types": 3.521.0 - "@smithy/credential-provider-imds": ^2.2.1 - "@smithy/property-provider": ^2.1.1 - "@smithy/shared-ini-file-loader": ^2.3.1 - "@smithy/types": ^2.10.0 - tslib: ^2.5.0 - checksum: 41c9eda9ec49927999aab9137c46392576b84611c434c369c004eb99fcad212188dcf8dbc3bb9388a65b0077b52835b5219c0f68cfd640c2119772678608fad1 + "@aws-sdk/credential-provider-env": 3.535.0 + "@aws-sdk/credential-provider-http": 3.535.0 + "@aws-sdk/credential-provider-ini": 3.535.0 + "@aws-sdk/credential-provider-process": 3.535.0 + "@aws-sdk/credential-provider-sso": 3.535.0 + "@aws-sdk/credential-provider-web-identity": 3.535.0 + "@aws-sdk/types": 3.535.0 + "@smithy/credential-provider-imds": ^2.3.0 + "@smithy/property-provider": ^2.2.0 + "@smithy/shared-ini-file-loader": ^2.4.0 + "@smithy/types": ^2.12.0 + tslib: ^2.6.2 + checksum: 79d4cea828e69ce38b7ebc987eae9292aec33520205093289ba0d8166464fb2c7c31a4c76b4c724e100150fd23c71020dda27c6a3a794b2644dcfdc1243e8dc4 languageName: node linkType: hard -"@aws-sdk/credential-provider-node@npm:3.521.0, @aws-sdk/credential-provider-node@npm:^3.350.0": - version: 3.521.0 - resolution: "@aws-sdk/credential-provider-node@npm:3.521.0" +"@aws-sdk/credential-provider-process@npm:3.535.0": + version: 3.535.0 + resolution: "@aws-sdk/credential-provider-process@npm:3.535.0" dependencies: - "@aws-sdk/credential-provider-env": 3.521.0 - "@aws-sdk/credential-provider-http": 3.521.0 - "@aws-sdk/credential-provider-ini": 3.521.0 - "@aws-sdk/credential-provider-process": 3.521.0 - "@aws-sdk/credential-provider-sso": 3.521.0 - "@aws-sdk/credential-provider-web-identity": 3.521.0 - "@aws-sdk/types": 3.521.0 - "@smithy/credential-provider-imds": ^2.2.1 - "@smithy/property-provider": ^2.1.1 - "@smithy/shared-ini-file-loader": ^2.3.1 - "@smithy/types": ^2.10.0 - tslib: ^2.5.0 - checksum: eaa75f81151113f84ccd7e26964a139fd598645f93074431ec5979a5ebf926df1da8659ecb46b4d79e4b83de30f7136954ea72fadc60a4e8bc5e828f193b7556 + "@aws-sdk/types": 3.535.0 + "@smithy/property-provider": ^2.2.0 + "@smithy/shared-ini-file-loader": ^2.4.0 + "@smithy/types": ^2.12.0 + tslib: ^2.6.2 + checksum: af5fad70513e8d0bc10013f220588e45e83d488e0780873d7e76bf5b7099e70c9b4e49b6409d16add64ae212c53a472b12a2178e8bafd7878fdf121d6e2fd112 languageName: node linkType: hard -"@aws-sdk/credential-provider-process@npm:3.521.0": - version: 3.521.0 - resolution: "@aws-sdk/credential-provider-process@npm:3.521.0" +"@aws-sdk/credential-provider-sso@npm:3.535.0": + version: 3.535.0 + resolution: "@aws-sdk/credential-provider-sso@npm:3.535.0" dependencies: - "@aws-sdk/types": 3.521.0 - "@smithy/property-provider": ^2.1.1 - "@smithy/shared-ini-file-loader": ^2.3.1 - "@smithy/types": ^2.10.0 - tslib: ^2.5.0 - checksum: 7770461063e9c330331f48401a16d0f792c97c5392b2f393e09f1be6c5ec0f97316c7fa11c2ebfc7392984acced03d5205558b264ed6417697993a9a466185b2 + "@aws-sdk/client-sso": 3.535.0 + "@aws-sdk/token-providers": 3.535.0 + "@aws-sdk/types": 3.535.0 + "@smithy/property-provider": ^2.2.0 + "@smithy/shared-ini-file-loader": ^2.4.0 + "@smithy/types": ^2.12.0 + tslib: ^2.6.2 + checksum: 255d1575127b1acc1c4c4281c878a48160ac506d34cd7ff0a3b4a250684a98e1f3637f679368a4171fdf73fd0e29f95f5df21043b7d6f7d64a9f673178949e47 languageName: node linkType: hard -"@aws-sdk/credential-provider-sso@npm:3.521.0": - version: 3.521.0 - resolution: "@aws-sdk/credential-provider-sso@npm:3.521.0" +"@aws-sdk/credential-provider-web-identity@npm:3.535.0": + version: 3.535.0 + resolution: "@aws-sdk/credential-provider-web-identity@npm:3.535.0" dependencies: - "@aws-sdk/client-sso": 3.521.0 - "@aws-sdk/token-providers": 3.521.0 - "@aws-sdk/types": 3.521.0 - "@smithy/property-provider": ^2.1.1 - "@smithy/shared-ini-file-loader": ^2.3.1 - "@smithy/types": ^2.10.0 - tslib: ^2.5.0 - checksum: 76fbed5935eb4f7cd244f9d90bb5b9f1069226ecaaf03d69f16b4f607864541cc6b8e6d038a07eef27acff75df8f539c3c61d6b672f5bda4db1a1a3966815566 - languageName: node - linkType: hard - -"@aws-sdk/credential-provider-web-identity@npm:3.521.0": - version: 3.521.0 - resolution: "@aws-sdk/credential-provider-web-identity@npm:3.521.0" - dependencies: - "@aws-sdk/client-sts": 3.521.0 - "@aws-sdk/types": 3.521.0 - "@smithy/property-provider": ^2.1.1 - "@smithy/types": ^2.10.0 - tslib: ^2.5.0 - checksum: 4e9360d0e6a55b7f60d837addb87dbd5d804e4202c2fadc75d11196a54dbb6099fa977fb0a51191d8c62373f17279c379a304b697ddd15abe5508a30c2a34556 + "@aws-sdk/client-sts": 3.535.0 + "@aws-sdk/types": 3.535.0 + "@smithy/property-provider": ^2.2.0 + "@smithy/types": ^2.12.0 + tslib: ^2.6.2 + checksum: 9aa0c7c14efcdf3238a53237942b40d91a3b1064e4d64ceffb988dd019f7fc94b49f8d5e0ca4271c592e5adfa92be9e54befee57a9dd5476763f174d376628ee languageName: node linkType: hard "@aws-sdk/credential-providers@npm:^3.350.0": - version: 3.521.0 - resolution: "@aws-sdk/credential-providers@npm:3.521.0" + version: 3.535.0 + resolution: "@aws-sdk/credential-providers@npm:3.535.0" dependencies: - "@aws-sdk/client-cognito-identity": 3.521.0 - "@aws-sdk/client-sso": 3.521.0 - "@aws-sdk/client-sts": 3.521.0 - "@aws-sdk/credential-provider-cognito-identity": 3.521.0 - "@aws-sdk/credential-provider-env": 3.521.0 - "@aws-sdk/credential-provider-http": 3.521.0 - "@aws-sdk/credential-provider-ini": 3.521.0 - "@aws-sdk/credential-provider-node": 3.521.0 - "@aws-sdk/credential-provider-process": 3.521.0 - "@aws-sdk/credential-provider-sso": 3.521.0 - "@aws-sdk/credential-provider-web-identity": 3.521.0 - "@aws-sdk/types": 3.521.0 - "@smithy/credential-provider-imds": ^2.2.1 - "@smithy/property-provider": ^2.1.1 - "@smithy/types": ^2.10.0 - tslib: ^2.5.0 - checksum: c4b3ca40a4e7a9843847f81f0a3f3ac568986e87054e44df8cad8ddf3f8df6314c4e67ca27b150b05cdfe6e96ccca32457654a121b09a9ba017819b9000d534b + "@aws-sdk/client-cognito-identity": 3.535.0 + "@aws-sdk/client-sso": 3.535.0 + "@aws-sdk/client-sts": 3.535.0 + "@aws-sdk/credential-provider-cognito-identity": 3.535.0 + "@aws-sdk/credential-provider-env": 3.535.0 + "@aws-sdk/credential-provider-http": 3.535.0 + "@aws-sdk/credential-provider-ini": 3.535.0 + "@aws-sdk/credential-provider-node": 3.535.0 + "@aws-sdk/credential-provider-process": 3.535.0 + "@aws-sdk/credential-provider-sso": 3.535.0 + "@aws-sdk/credential-provider-web-identity": 3.535.0 + "@aws-sdk/types": 3.535.0 + "@smithy/credential-provider-imds": ^2.3.0 + "@smithy/property-provider": ^2.2.0 + "@smithy/types": ^2.12.0 + tslib: ^2.6.2 + checksum: 4ad4c8fafe621d42125dbac81841986e4e2c88cf065f925d26c5703c4354d9aee2afbb3fa6fb46984fc2d5ebd02783005354fbf53d525bd1389e306897ed0ea4 languageName: node linkType: hard @@ -951,34 +950,34 @@ __metadata: linkType: hard "@aws-sdk/lib-storage@npm:^3.350.0": - version: 3.521.0 - resolution: "@aws-sdk/lib-storage@npm:3.521.0" + version: 3.535.0 + resolution: "@aws-sdk/lib-storage@npm:3.535.0" dependencies: - "@smithy/abort-controller": ^2.1.1 - "@smithy/middleware-endpoint": ^2.4.2 - "@smithy/smithy-client": ^2.4.0 + "@smithy/abort-controller": ^2.2.0 + "@smithy/middleware-endpoint": ^2.5.0 + "@smithy/smithy-client": ^2.5.0 buffer: 5.6.0 events: 3.3.0 stream-browserify: 3.0.0 - tslib: ^2.5.0 + tslib: ^2.6.2 peerDependencies: "@aws-sdk/client-s3": ^3.0.0 - checksum: b55cdbe2744970f863f30e84ba39dc25d123032cf5e7b11a3fb8d6dc0aff7f3311f00112c72b686f4833ff6494c3b1c346cdb03cc5727652933ebd98dc1f8cf7 + checksum: 35fc2db9860acdb4b3e3000c07a2adf7a4e5d3c16ad852f430a9648794d57db2eea12f13fcec834df76e8752013fa971842dfe9633ba626b3abe4f8fb1360af7 languageName: node linkType: hard -"@aws-sdk/middleware-bucket-endpoint@npm:3.521.0": - version: 3.521.0 - resolution: "@aws-sdk/middleware-bucket-endpoint@npm:3.521.0" +"@aws-sdk/middleware-bucket-endpoint@npm:3.535.0": + version: 3.535.0 + resolution: "@aws-sdk/middleware-bucket-endpoint@npm:3.535.0" dependencies: - "@aws-sdk/types": 3.521.0 - "@aws-sdk/util-arn-parser": 3.495.0 - "@smithy/node-config-provider": ^2.2.2 - "@smithy/protocol-http": ^3.2.0 - "@smithy/types": ^2.10.0 - "@smithy/util-config-provider": ^2.2.1 - tslib: ^2.5.0 - checksum: 407ea1c7d64159fa86ccc002333c646b841fa7cbec70400798af3b688418a1f44bea31dac4e462383f9221144b113c9ee33c5e585e1ef9d7d207cb91a2439cc7 + "@aws-sdk/types": 3.535.0 + "@aws-sdk/util-arn-parser": 3.535.0 + "@smithy/node-config-provider": ^2.3.0 + "@smithy/protocol-http": ^3.3.0 + "@smithy/types": ^2.12.0 + "@smithy/util-config-provider": ^2.3.0 + tslib: ^2.6.2 + checksum: d72dfd197dc9aa1ed8ea3de6fb0a18363688fa8e18f6a9d01cb2f425087c5b72aa4bfd0955715c84da86adf9a46029755cff55a02a6ffbf4459009982a5a5415 languageName: node linkType: hard @@ -995,108 +994,108 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/middleware-expect-continue@npm:3.521.0": - version: 3.521.0 - resolution: "@aws-sdk/middleware-expect-continue@npm:3.521.0" +"@aws-sdk/middleware-expect-continue@npm:3.535.0": + version: 3.535.0 + resolution: "@aws-sdk/middleware-expect-continue@npm:3.535.0" dependencies: - "@aws-sdk/types": 3.521.0 - "@smithy/protocol-http": ^3.2.0 - "@smithy/types": ^2.10.0 - tslib: ^2.5.0 - checksum: 28ed930f9e4d9d90d705c371c2ac3055fa1fdb8c6de44d1db899f6ade1231cbe3de7d4f6e7fa7dae41fe0d79d5ee5b068ba8ecaa885dc6a2a6100cc230b0847a + "@aws-sdk/types": 3.535.0 + "@smithy/protocol-http": ^3.3.0 + "@smithy/types": ^2.12.0 + tslib: ^2.6.2 + checksum: fdac9bc59833ca9688155f115f85c31f690df5ef690e9a8921b94b87c4faac3eb3ff10641699822faaaf9a6cc4ce4c67e693a7b4befe8baf8138a9d276d6714d languageName: node linkType: hard -"@aws-sdk/middleware-flexible-checksums@npm:3.521.0": - version: 3.521.0 - resolution: "@aws-sdk/middleware-flexible-checksums@npm:3.521.0" +"@aws-sdk/middleware-flexible-checksums@npm:3.535.0": + version: 3.535.0 + resolution: "@aws-sdk/middleware-flexible-checksums@npm:3.535.0" dependencies: "@aws-crypto/crc32": 3.0.0 "@aws-crypto/crc32c": 3.0.0 - "@aws-sdk/types": 3.521.0 - "@smithy/is-array-buffer": ^2.1.1 - "@smithy/protocol-http": ^3.2.0 - "@smithy/types": ^2.10.0 - "@smithy/util-utf8": ^2.1.1 - tslib: ^2.5.0 - checksum: 60a77546090174ca7cfd8d6894c6d4583ae5ad311f85dc407c1d98128fa16322850a7284a4f75260d4ab5529296110b0952997c1726c325813988c14e2aba792 + "@aws-sdk/types": 3.535.0 + "@smithy/is-array-buffer": ^2.2.0 + "@smithy/protocol-http": ^3.3.0 + "@smithy/types": ^2.12.0 + "@smithy/util-utf8": ^2.3.0 + tslib: ^2.6.2 + checksum: 14c04cd932bdb9029466079b248c1fa8222183de4c288bf12ad661cdc7717938485fdb973b7948da729e5be218573cfd2cbe74b51a1bc2bd27131ca7d67909c1 languageName: node linkType: hard -"@aws-sdk/middleware-host-header@npm:3.521.0": - version: 3.521.0 - resolution: "@aws-sdk/middleware-host-header@npm:3.521.0" +"@aws-sdk/middleware-host-header@npm:3.535.0": + version: 3.535.0 + resolution: "@aws-sdk/middleware-host-header@npm:3.535.0" dependencies: - "@aws-sdk/types": 3.521.0 - "@smithy/protocol-http": ^3.2.0 - "@smithy/types": ^2.10.0 - tslib: ^2.5.0 - checksum: e0e0597f436bce61c9fc2598d65db68610d8a4a8576e2d9073d8ffa0fe3099a76570c997fc9ab46ef18b1530102ef73101db04d28ce0a40f40ca76bf502d8db9 + "@aws-sdk/types": 3.535.0 + "@smithy/protocol-http": ^3.3.0 + "@smithy/types": ^2.12.0 + tslib: ^2.6.2 + checksum: 13a22a5b19912a86fe872c9c0f6ba9ab758ba9483ce9a2e73fa68acae498b68404e38e7fc1e3962639a6c3f80ebe19ea5c5340e1024e11ab417998696c8a5dca languageName: node linkType: hard -"@aws-sdk/middleware-location-constraint@npm:3.521.0": - version: 3.521.0 - resolution: "@aws-sdk/middleware-location-constraint@npm:3.521.0" +"@aws-sdk/middleware-location-constraint@npm:3.535.0": + version: 3.535.0 + resolution: "@aws-sdk/middleware-location-constraint@npm:3.535.0" dependencies: - "@aws-sdk/types": 3.521.0 - "@smithy/types": ^2.10.0 - tslib: ^2.5.0 - checksum: 62b8ac417945c826a3042369116250e17b31df2f7f949494320de695985db0801986968503b366965dd0e1beaf25bd37890261dbc2e5fdbf2b0f3cf581ace603 + "@aws-sdk/types": 3.535.0 + "@smithy/types": ^2.12.0 + tslib: ^2.6.2 + checksum: 4e89b6c5d4253568e599f0e8be37e80cf12a755ba89b89d9c9ae2ced75213850c41922fa1871a9c92345057e15d5db956a353841eb63353d8f2bb69a61d4a10d languageName: node linkType: hard -"@aws-sdk/middleware-logger@npm:3.521.0": - version: 3.521.0 - resolution: "@aws-sdk/middleware-logger@npm:3.521.0" +"@aws-sdk/middleware-logger@npm:3.535.0": + version: 3.535.0 + resolution: "@aws-sdk/middleware-logger@npm:3.535.0" dependencies: - "@aws-sdk/types": 3.521.0 - "@smithy/types": ^2.10.0 - tslib: ^2.5.0 - checksum: 9ff749309bd457be1356d3efea53d9067c15baa631d4ba7d874172f087030d4ccbb7df38ccdecb6823944af2732b01caa3cd495a245fa5a4975a5442e2059532 + "@aws-sdk/types": 3.535.0 + "@smithy/types": ^2.12.0 + tslib: ^2.6.2 + checksum: e264d05aa88fadd94d17000b1df79bf1931c5fbc2c871616de9b836bab7254d8c21e0fc2ac509a07af578bd823b795efafaf48daca805bc4493986288ed0c4ab languageName: node linkType: hard -"@aws-sdk/middleware-recursion-detection@npm:3.521.0": - version: 3.521.0 - resolution: "@aws-sdk/middleware-recursion-detection@npm:3.521.0" +"@aws-sdk/middleware-recursion-detection@npm:3.535.0": + version: 3.535.0 + resolution: "@aws-sdk/middleware-recursion-detection@npm:3.535.0" dependencies: - "@aws-sdk/types": 3.521.0 - "@smithy/protocol-http": ^3.2.0 - "@smithy/types": ^2.10.0 - tslib: ^2.5.0 - checksum: a097d83c411944d30105a997520791d9a16800a4d5b5b8a77ef5dd8edb3616ecf358a669a4c116314bf60d2ab1c23d54f0c1d79a2e2bcfa38b84a5ec3b418b86 + "@aws-sdk/types": 3.535.0 + "@smithy/protocol-http": ^3.3.0 + "@smithy/types": ^2.12.0 + tslib: ^2.6.2 + checksum: b6b518243a10dcdcea7c1fd4790cf2e1e0e3d4363ebce51ac364c9b15631a6f3d1db44d00e7c75cbdf1d558a0d868583d6e1853e571e15e23d0d2901f168e2e4 languageName: node linkType: hard -"@aws-sdk/middleware-sdk-s3@npm:3.521.0": - version: 3.521.0 - resolution: "@aws-sdk/middleware-sdk-s3@npm:3.521.0" +"@aws-sdk/middleware-sdk-s3@npm:3.535.0": + version: 3.535.0 + resolution: "@aws-sdk/middleware-sdk-s3@npm:3.535.0" dependencies: - "@aws-sdk/types": 3.521.0 - "@aws-sdk/util-arn-parser": 3.495.0 - "@smithy/node-config-provider": ^2.2.2 - "@smithy/protocol-http": ^3.2.0 - "@smithy/signature-v4": ^2.1.1 - "@smithy/smithy-client": ^2.4.0 - "@smithy/types": ^2.10.0 - "@smithy/util-config-provider": ^2.2.1 - tslib: ^2.5.0 - checksum: f29d1eed5f3f4de2bb0e85bd572d31f41f494f83f3903edaa45bb79024b6e7cca4bc404a57bb2d69dad58ea1ab92942016a7cd9a5295a54e96851e44a9ce649f + "@aws-sdk/types": 3.535.0 + "@aws-sdk/util-arn-parser": 3.535.0 + "@smithy/node-config-provider": ^2.3.0 + "@smithy/protocol-http": ^3.3.0 + "@smithy/signature-v4": ^2.2.0 + "@smithy/smithy-client": ^2.5.0 + "@smithy/types": ^2.12.0 + "@smithy/util-config-provider": ^2.3.0 + tslib: ^2.6.2 + checksum: 8a43f4a9b2bd502b377cc1635aa928b2d75b3b326c24168956d73c2cd794b0834578fa514d2148dcb01753909f06b7161f0143db584e995b1ce0b81eb261cc4d languageName: node linkType: hard -"@aws-sdk/middleware-sdk-sqs@npm:3.521.0": - version: 3.521.0 - resolution: "@aws-sdk/middleware-sdk-sqs@npm:3.521.0" +"@aws-sdk/middleware-sdk-sqs@npm:3.535.0": + version: 3.535.0 + resolution: "@aws-sdk/middleware-sdk-sqs@npm:3.535.0" dependencies: - "@aws-sdk/types": 3.521.0 - "@smithy/smithy-client": ^2.4.0 - "@smithy/types": ^2.10.0 - "@smithy/util-hex-encoding": ^2.1.1 - "@smithy/util-utf8": ^2.1.1 - tslib: ^2.5.0 - checksum: 4fcb19c74ce0a667b78fb053b25a4c6c57d84f8eb2167045922a6310d7ecc9def78abe6f2f310ac78327dc41f54347df0497098db00b571cf26029bee7eff1f7 + "@aws-sdk/types": 3.535.0 + "@smithy/smithy-client": ^2.5.0 + "@smithy/types": ^2.12.0 + "@smithy/util-hex-encoding": ^2.2.0 + "@smithy/util-utf8": ^2.3.0 + tslib: ^2.6.2 + checksum: 9822ffdf3d1795de297f7c17f8824f8b2dd5b5319c64c4b6c179a516332e13f43e3b469bc33f324bb33fdfd7e14c5ec4921549916402ed391fd8b2c299060895 languageName: node linkType: hard @@ -1110,42 +1109,42 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/middleware-signing@npm:3.521.0": - version: 3.521.0 - resolution: "@aws-sdk/middleware-signing@npm:3.521.0" +"@aws-sdk/middleware-signing@npm:3.535.0": + version: 3.535.0 + resolution: "@aws-sdk/middleware-signing@npm:3.535.0" dependencies: - "@aws-sdk/types": 3.521.0 - "@smithy/property-provider": ^2.1.1 - "@smithy/protocol-http": ^3.2.0 - "@smithy/signature-v4": ^2.1.1 - "@smithy/types": ^2.10.0 - "@smithy/util-middleware": ^2.1.2 - tslib: ^2.5.0 - checksum: 545225d39d0e6133f14ca6ac721b78293b7ae2b522d9229f3c4afa00efe5ccd38c2b11a508bbec050f2b91a68f51fe6260db57853e8c28f7f80d09b93ef6120f + "@aws-sdk/types": 3.535.0 + "@smithy/property-provider": ^2.2.0 + "@smithy/protocol-http": ^3.3.0 + "@smithy/signature-v4": ^2.2.0 + "@smithy/types": ^2.12.0 + "@smithy/util-middleware": ^2.2.0 + tslib: ^2.6.2 + checksum: 2070122081660b0be7337feed61f17d93177cff3362f813c32d66080f2f05f5da1b0f6d7a32889a32b1bf1ee4301dd6311028ffb84fed8c7f9b70699880a6058 languageName: node linkType: hard -"@aws-sdk/middleware-ssec@npm:3.521.0": - version: 3.521.0 - resolution: "@aws-sdk/middleware-ssec@npm:3.521.0" +"@aws-sdk/middleware-ssec@npm:3.535.0": + version: 3.535.0 + resolution: "@aws-sdk/middleware-ssec@npm:3.535.0" dependencies: - "@aws-sdk/types": 3.521.0 - "@smithy/types": ^2.10.0 - tslib: ^2.5.0 - checksum: 86b31dcc825d194898dbcc72e9a7590e9693bfbe8d3e0707f7b82814f735dfb73c06f77d68785b061faf173b8a1da6f47f98564602437532c75f8da77f820aca + "@aws-sdk/types": 3.535.0 + "@smithy/types": ^2.12.0 + tslib: ^2.6.2 + checksum: 4634dabe8c98c3f625b27b1f9ab50d0c04e72924746f59d8d4037a1e7c1597e484150b3216c5a32b47dc2f4166d9e0242de7daf7895f6446d6200d765e9ab60a languageName: node linkType: hard -"@aws-sdk/middleware-user-agent@npm:3.521.0": - version: 3.521.0 - resolution: "@aws-sdk/middleware-user-agent@npm:3.521.0" +"@aws-sdk/middleware-user-agent@npm:3.535.0": + version: 3.535.0 + resolution: "@aws-sdk/middleware-user-agent@npm:3.535.0" dependencies: - "@aws-sdk/types": 3.521.0 - "@aws-sdk/util-endpoints": 3.521.0 - "@smithy/protocol-http": ^3.2.0 - "@smithy/types": ^2.10.0 - tslib: ^2.5.0 - checksum: 5d1461de4d6d6c7cfd6f7bca9753f3c8340b3bb27638940000d14811ff9a3e63ffecc9c9e4b8784e53a834815d58f902ae9e4a07b60b62d56629359de80fbe6c + "@aws-sdk/types": 3.535.0 + "@aws-sdk/util-endpoints": 3.535.0 + "@smithy/protocol-http": ^3.3.0 + "@smithy/types": ^2.12.0 + tslib: ^2.6.2 + checksum: a6ea7871977143aa1ba25e59d7e2b8346c0b2a5cff44d1e6f615513ef6a2da0181044278f4345b34e7ac2c00f4d8a6dc00e7b4512730701bc27db7f2bc5e3597 languageName: node linkType: hard @@ -1193,31 +1192,31 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/region-config-resolver@npm:3.521.0": - version: 3.521.0 - resolution: "@aws-sdk/region-config-resolver@npm:3.521.0" +"@aws-sdk/region-config-resolver@npm:3.535.0": + version: 3.535.0 + resolution: "@aws-sdk/region-config-resolver@npm:3.535.0" dependencies: - "@aws-sdk/types": 3.521.0 - "@smithy/node-config-provider": ^2.2.2 - "@smithy/types": ^2.10.0 - "@smithy/util-config-provider": ^2.2.1 - "@smithy/util-middleware": ^2.1.2 - tslib: ^2.5.0 - checksum: ce0ec289d6ca59747c1e96dd3b45f11fe690fc2b0407beacadfd07e04258474c2be51a265851ef7bca0feb5f0e7ba6520ee2c5de2b112dff1fbd5c37901e2e72 + "@aws-sdk/types": 3.535.0 + "@smithy/node-config-provider": ^2.3.0 + "@smithy/types": ^2.12.0 + "@smithy/util-config-provider": ^2.3.0 + "@smithy/util-middleware": ^2.2.0 + tslib: ^2.6.2 + checksum: 7b556e47c721c0829ae635203a1dbcab7040e2885d2bdc37898eb3139dabb5f6da580b860202e3b7737330bfc02de5084a98ff8f8b5c36adcfe8e076b82d3487 languageName: node linkType: hard -"@aws-sdk/signature-v4-multi-region@npm:3.521.0": - version: 3.521.0 - resolution: "@aws-sdk/signature-v4-multi-region@npm:3.521.0" +"@aws-sdk/signature-v4-multi-region@npm:3.535.0": + version: 3.535.0 + resolution: "@aws-sdk/signature-v4-multi-region@npm:3.535.0" dependencies: - "@aws-sdk/middleware-sdk-s3": 3.521.0 - "@aws-sdk/types": 3.521.0 - "@smithy/protocol-http": ^3.2.0 - "@smithy/signature-v4": ^2.1.1 - "@smithy/types": ^2.10.0 - tslib: ^2.5.0 - checksum: 312334438f12927e842d0a5c1d3fd837bedb54bc96caa7a7c0f1168a87532ee1b2e90090a2e1369c28cc0dc4b24c79ae7bf9aca66cbb811b61c8fdda775c4581 + "@aws-sdk/middleware-sdk-s3": 3.535.0 + "@aws-sdk/types": 3.535.0 + "@smithy/protocol-http": ^3.3.0 + "@smithy/signature-v4": ^2.2.0 + "@smithy/types": ^2.12.0 + tslib: ^2.6.2 + checksum: 7ed94a61a4ae29c76ab4ba556c05be26309c33f7f3966ca9a6e0e218f49c32ef6ee5b30d34ca24206605d86f27092bea928aa5435f8aecf1255dd5fc75716dbe languageName: node linkType: hard @@ -1237,17 +1236,17 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/token-providers@npm:3.521.0": - version: 3.521.0 - resolution: "@aws-sdk/token-providers@npm:3.521.0" +"@aws-sdk/token-providers@npm:3.535.0": + version: 3.535.0 + resolution: "@aws-sdk/token-providers@npm:3.535.0" dependencies: - "@aws-sdk/client-sso-oidc": 3.521.0 - "@aws-sdk/types": 3.521.0 - "@smithy/property-provider": ^2.1.1 - "@smithy/shared-ini-file-loader": ^2.3.1 - "@smithy/types": ^2.10.0 - tslib: ^2.5.0 - checksum: e34671eaab24dac569d0a98a87b21e2a6ff0960cdc931276f446a31310bff343af33dcf742738a02c9eb8e01226981ab64abd8e59e7758ed695f0045bb524af6 + "@aws-sdk/client-sso-oidc": 3.535.0 + "@aws-sdk/types": 3.535.0 + "@smithy/property-provider": ^2.2.0 + "@smithy/shared-ini-file-loader": ^2.4.0 + "@smithy/types": ^2.12.0 + tslib: ^2.6.2 + checksum: 79548a8cd1f2aa0f44104a46d979d215f5422f851e5858e01405500c2aa923bbdddbe8467a41e38fbcef5c587bd9b3fff32587f652e4857bdc9fbf07be52291e languageName: node linkType: hard @@ -1261,13 +1260,13 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/types@npm:3.521.0, @aws-sdk/types@npm:^3.222.0, @aws-sdk/types@npm:^3.347.0": - version: 3.521.0 - resolution: "@aws-sdk/types@npm:3.521.0" +"@aws-sdk/types@npm:3.535.0, @aws-sdk/types@npm:^3.222.0, @aws-sdk/types@npm:^3.347.0": + version: 3.535.0 + resolution: "@aws-sdk/types@npm:3.535.0" dependencies: - "@smithy/types": ^2.10.0 - tslib: ^2.5.0 - checksum: 28d9ab39ad19e74ca721100131152bec975cea3c78e5013e70e9684b051c5115623430a923f0e92426b298033be94ebd554925ec4a5fb64273c48df90ea6c6eb + "@smithy/types": ^2.12.0 + tslib: ^2.6.2 + checksum: 3f735c78ea3a6f37d05387286f6d18b0e5deb41442095bd2f7c27b000659962872d1c801fa8484a6ac4b7d2725b2e176dc628c3fa2a903a3141d4be76488d48f languageName: node linkType: hard @@ -1282,12 +1281,12 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/util-arn-parser@npm:3.495.0, @aws-sdk/util-arn-parser@npm:^3.310.0": - version: 3.495.0 - resolution: "@aws-sdk/util-arn-parser@npm:3.495.0" +"@aws-sdk/util-arn-parser@npm:3.535.0, @aws-sdk/util-arn-parser@npm:^3.310.0": + version: 3.535.0 + resolution: "@aws-sdk/util-arn-parser@npm:3.535.0" dependencies: - tslib: ^2.5.0 - checksum: 130f1b1c0d2b9917782049693aa4ab6aec98858d6e2b46c14a3a6c4979e65073f731aec96aa0e1c04e927d0b32ad2d4a6a701e2a6d5d416c6ea35e670e4eb987 + tslib: ^2.6.2 + checksum: 0e4c4ea080c7c6da00d359c337a1f9d961eac20c35cebad9cb6bb9b618f981955643990de7bfd6b53c29367a6d33550fe27b2a7539efdff08e01bdd303f0c5c2 languageName: node linkType: hard @@ -1301,15 +1300,15 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/util-endpoints@npm:3.521.0": - version: 3.521.0 - resolution: "@aws-sdk/util-endpoints@npm:3.521.0" +"@aws-sdk/util-endpoints@npm:3.535.0": + version: 3.535.0 + resolution: "@aws-sdk/util-endpoints@npm:3.535.0" dependencies: - "@aws-sdk/types": 3.521.0 - "@smithy/types": ^2.10.0 - "@smithy/util-endpoints": ^1.1.2 - tslib: ^2.5.0 - checksum: a8f01159d4114a7893200a3a782ccec091da7a46b4de5bb1c4db253ad836de123fbb314c376798044119b49f21b9d3bfd61eecb4328da9a73279719079baba48 + "@aws-sdk/types": 3.535.0 + "@smithy/types": ^2.12.0 + "@smithy/util-endpoints": ^1.2.0 + tslib: ^2.6.2 + checksum: 26d70c540cdf2ac29148a1ce06d67511751f356f88d21422ed73a47e8bb1e75571252441e13b3f956351d837788f8ba0fe57cc0d0d0ed0fd04c4636bd3d184eb languageName: node linkType: hard @@ -1361,32 +1360,32 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/util-user-agent-browser@npm:3.521.0": - version: 3.521.0 - resolution: "@aws-sdk/util-user-agent-browser@npm:3.521.0" +"@aws-sdk/util-user-agent-browser@npm:3.535.0": + version: 3.535.0 + resolution: "@aws-sdk/util-user-agent-browser@npm:3.535.0" dependencies: - "@aws-sdk/types": 3.521.0 - "@smithy/types": ^2.10.0 + "@aws-sdk/types": 3.535.0 + "@smithy/types": ^2.12.0 bowser: ^2.11.0 - tslib: ^2.5.0 - checksum: 1938f4e00873a3d0ba55988d562fe987352abf6c57fef7c27dc28f561a7752af73d34883eb89eba1173b42b8d31ed0d0a4fc2592b46c28e775545bdb27b0bc80 + tslib: ^2.6.2 + checksum: 148b82900e4b9efd24f5fc4152a8d6010c90eb019517fa3c00c3ac42205055f7611ef3834fb63397def40e600ea20f901177a7dd5b6aefa2aef4208e994f7d90 languageName: node linkType: hard -"@aws-sdk/util-user-agent-node@npm:3.521.0": - version: 3.521.0 - resolution: "@aws-sdk/util-user-agent-node@npm:3.521.0" +"@aws-sdk/util-user-agent-node@npm:3.535.0": + version: 3.535.0 + resolution: "@aws-sdk/util-user-agent-node@npm:3.535.0" dependencies: - "@aws-sdk/types": 3.521.0 - "@smithy/node-config-provider": ^2.2.2 - "@smithy/types": ^2.10.0 - tslib: ^2.5.0 + "@aws-sdk/types": 3.535.0 + "@smithy/node-config-provider": ^2.3.0 + "@smithy/types": ^2.12.0 + tslib: ^2.6.2 peerDependencies: aws-crt: ">=1.0.0" peerDependenciesMeta: aws-crt: optional: true - checksum: d78a47e32fef990da97635af88484649636bf452320ce80ed6376302d18014f7b191f5da3c096e44aa4f9054639c31c3b2e62d06e7708f747ef7847bad019aa7 + checksum: f214c406fccde14591d1df25fed662e573510cdf1d5829d22e7a93e517ea4a3905acd123eaaeafdb8b217400e8c8e159231d37be02b67307922023996b398f42 languageName: node linkType: hard @@ -1409,13 +1408,13 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/xml-builder@npm:3.521.0": - version: 3.521.0 - resolution: "@aws-sdk/xml-builder@npm:3.521.0" +"@aws-sdk/xml-builder@npm:3.535.0": + version: 3.535.0 + resolution: "@aws-sdk/xml-builder@npm:3.535.0" dependencies: - "@smithy/types": ^2.10.0 - tslib: ^2.5.0 - checksum: 33a86fdcf93029706725f829b9cea1846c8c51d0170410e19c75564256cb5825fb4c9e65ecbb7930c5ee14855bb63425b596fc2660978c5724197fee1b09c8f5 + "@smithy/types": ^2.12.0 + tslib: ^2.6.2 + checksum: 9320f6600c7852b681ed4171f1521eda166321ef7ffea5a6b99a1d328835bb12f7423431ea23a696c678ec4fc8e6dbb2f979d941289f6e0cb55c3da7d5eee140 languageName: node linkType: hard @@ -3134,13 +3133,13 @@ __metadata: languageName: node linkType: hard -"@babel/runtime-corejs3@npm:^7.20.7, @babel/runtime-corejs3@npm:^7.22.15, @babel/runtime-corejs3@npm:^7.23.9": - version: 7.23.9 - resolution: "@babel/runtime-corejs3@npm:7.23.9" +"@babel/runtime-corejs3@npm:^7.20.7, @babel/runtime-corejs3@npm:^7.22.15, @babel/runtime-corejs3@npm:^7.24.0": + version: 7.24.0 + resolution: "@babel/runtime-corejs3@npm:7.24.0" dependencies: core-js-pure: ^3.30.2 regenerator-runtime: ^0.14.0 - checksum: 715d916b6cf60013597aa9a5823fd04a9c6cc6ba6221bb8611e76c369cbf1b4baf1d0ad63b6522736593a38e89a6502213a38f57a9c24e5586628e930c4fd52c + checksum: cd4f2cde0878c911b2eeebf1cb48df819c862492da163bb9001ba690c82e9addd1d14087a8b0dd87fb1da2d916fa3b85d9a8cece4d46f8e5c51d734acda5a8bd languageName: node linkType: hard @@ -3610,9 +3609,9 @@ __metadata: "@rollup/plugin-json": ^6.0.0 "@rollup/plugin-node-resolve": ^15.0.0 "@rollup/plugin-yaml": ^4.0.0 - "@spotify/eslint-config-base": ^14.0.0 - "@spotify/eslint-config-react": ^14.0.0 - "@spotify/eslint-config-typescript": ^14.0.0 + "@spotify/eslint-config-base": ^15.0.0 + "@spotify/eslint-config-react": ^15.0.0 + "@spotify/eslint-config-typescript": ^15.0.0 "@sucrase/webpack-loader": ^2.0.0 "@svgr/core": 6.5.x "@svgr/plugin-jsx": 6.5.x @@ -3642,6 +3641,7 @@ __metadata: "@types/yarnpkg__lockfile": ^1.1.4 "@typescript-eslint/eslint-plugin": ^6.12.0 "@typescript-eslint/parser": ^6.7.2 + "@vitejs/plugin-react": ^4.0.4 "@yarnpkg/lockfile": ^1.1.0 "@yarnpkg/parsers": ^3.0.0-rc.4 bfj: ^8.0.0 @@ -3693,6 +3693,7 @@ __metadata: ora: ^5.3.0 p-limit: ^3.1.0 p-queue: ^6.6.2 + pirates: ^4.0.6 postcss: ^8.1.0 process: ^0.11.10 react-dev-utils: ^12.0.0-next.60 @@ -3710,9 +3711,10 @@ __metadata: swc-loader: ^0.2.3 tar: ^6.1.12 terser-webpack-plugin: ^5.1.3 - ts-node: ^10.0.0 - tsx: ^4.0.0 util: ^0.12.3 + vite: ^4.4.9 + vite-plugin-html: ^3.2.0 + vite-plugin-node-polyfills: ^0.21.0 webpack: ^5.70.0 webpack-dev-server: ^4.7.3 webpack-node-externals: ^3.0.0 @@ -3751,7 +3753,6 @@ __metadata: commander: ^12.0.0 jscodeshift: ^0.15.0 jscodeshift-add-imports: ^1.0.10 - ts-node: ^10.0.0 bin: backstage-codemods: bin/backstage-codemods languageName: unknown @@ -3868,7 +3869,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/core-components@npm:^0.13.10, @backstage/core-components@npm:^0.13.8": +"@backstage/core-components@npm:^0.13.10": version: 0.13.10 resolution: "@backstage/core-components@npm:0.13.10" dependencies: @@ -4025,7 +4026,7 @@ __metadata: rc-progress: 3.5.1 react-helmet: 6.1.0 react-hook-form: ^7.12.2 - react-idle-timer: 5.6.2 + react-idle-timer: 5.7.2 react-markdown: ^8.0.0 react-sparklines: ^1.7.0 react-syntax-highlighter: ^15.4.5 @@ -4043,7 +4044,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/core-plugin-api@npm:^1.8.0, @backstage/core-plugin-api@npm:^1.8.2, @backstage/core-plugin-api@npm:^1.9.0": +"@backstage/core-plugin-api@npm:^1.8.2, @backstage/core-plugin-api@npm:^1.9.0": version: 1.9.0 resolution: "@backstage/core-plugin-api@npm:1.9.0" dependencies: @@ -4107,7 +4108,6 @@ __metadata: nodemon: ^3.0.1 ora: ^5.3.0 recursive-readdir: ^2.2.2 - ts-node: ^10.0.0 bin: backstage-create-app: bin/backstage-create-app languageName: unknown @@ -4654,7 +4654,7 @@ __metadata: "@testing-library/user-event": ^14.0.0 "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 "@types/swagger-ui-react": ^4.18.0 - graphiql: 3.1.0 + graphiql: 3.1.1 graphql: ^16.0.0 graphql-config: ^5.0.2 graphql-ws: ^5.4.1 @@ -5110,6 +5110,26 @@ __metadata: languageName: unknown linkType: soft +"@backstage/plugin-auth-react@workspace:^, @backstage/plugin-auth-react@workspace:plugins/auth-react": + version: 0.0.0-use.local + resolution: "@backstage/plugin-auth-react@workspace:plugins/auth-react" + dependencies: + "@backstage/cli": "workspace:^" + "@backstage/core-components": "workspace:^" + "@backstage/core-plugin-api": "workspace:^" + "@backstage/errors": "workspace:^" + "@backstage/test-utils": "workspace:^" + "@material-ui/core": ^4.9.13 + "@react-hookz/web": ^24.0.0 + "@testing-library/jest-dom": ^6.0.0 + "@testing-library/react": ^14.0.0 + "@testing-library/user-event": ^14.0.0 + "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 + peerDependencies: + react: ^16.13.1 || ^17.0.0 || ^18.0.0 + languageName: unknown + linkType: soft + "@backstage/plugin-azure-devops-backend@workspace:^, @backstage/plugin-azure-devops-backend@workspace:plugins/azure-devops-backend": version: 0.0.0-use.local resolution: "@backstage/plugin-azure-devops-backend@workspace:plugins/azure-devops-backend" @@ -5772,9 +5792,16 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-catalog-backend-module-unprocessed@workspace:plugins/catalog-backend-module-unprocessed" dependencies: + "@backstage/backend-common": "workspace:^" "@backstage/backend-plugin-api": "workspace:^" "@backstage/catalog-model": "workspace:^" "@backstage/cli": "workspace:^" + "@backstage/errors": "workspace:^" + "@backstage/plugin-auth-node": "workspace:^" + "@backstage/plugin-catalog-unprocessed-entities-common": "workspace:^" + "@backstage/plugin-permission-common": "workspace:^" + "@backstage/plugin-permission-node": "workspace:^" + "@types/express": ^4.17.6 express-promise-router: ^4.1.1 knex: ^3.0.0 languageName: unknown @@ -5956,7 +5983,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-catalog-react@npm:^1.10.0, @backstage/plugin-catalog-react@npm:^1.9.1, @backstage/plugin-catalog-react@npm:^1.9.3": +"@backstage/plugin-catalog-react@npm:^1.10.0, @backstage/plugin-catalog-react@npm:^1.9.3": version: 1.10.0 resolution: "@backstage/plugin-catalog-react@npm:1.10.0" dependencies: @@ -6037,6 +6064,15 @@ __metadata: languageName: unknown linkType: soft +"@backstage/plugin-catalog-unprocessed-entities-common@workspace:^, @backstage/plugin-catalog-unprocessed-entities-common@workspace:plugins/catalog-unprocessed-entities-common": + version: 0.0.0-use.local + resolution: "@backstage/plugin-catalog-unprocessed-entities-common@workspace:plugins/catalog-unprocessed-entities-common" + dependencies: + "@backstage/cli": "workspace:^" + "@backstage/plugin-permission-common": "workspace:^" + languageName: unknown + linkType: soft + "@backstage/plugin-catalog-unprocessed-entities@workspace:^, @backstage/plugin-catalog-unprocessed-entities@workspace:plugins/catalog-unprocessed-entities": version: 0.0.0-use.local resolution: "@backstage/plugin-catalog-unprocessed-entities@workspace:plugins/catalog-unprocessed-entities" @@ -9852,6 +9888,7 @@ __metadata: "@backstage/frontend-plugin-api": "workspace:^" "@backstage/integration": "workspace:^" "@backstage/integration-react": "workspace:^" + "@backstage/plugin-auth-react": "workspace:^" "@backstage/plugin-catalog-react": "workspace:^" "@backstage/plugin-search-common": "workspace:^" "@backstage/plugin-search-react": "workspace:^" @@ -10139,7 +10176,6 @@ __metadata: minimatch: ^9.0.0 p-limit: ^3.0.2 portfinder: ^1.0.32 - ts-node: ^10.0.0 yaml-diff-patch: ^2.0.0 peerDependencies: "@microsoft/api-extractor-model": "*" @@ -10184,22 +10220,6 @@ __metadata: languageName: unknown linkType: soft -"@backstage/theme@npm:^0.4.4": - version: 0.4.4 - resolution: "@backstage/theme@npm:0.4.4" - dependencies: - "@emotion/react": ^11.10.5 - "@emotion/styled": ^11.10.5 - "@mui/material": ^5.12.2 - peerDependencies: - "@material-ui/core": ^4.12.2 - "@types/react": ^16.13.1 || ^17.0.0 - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - checksum: 562ce0f0fd07202b44971b55bba9c39cd13c91a65873034d2e68fb5833c0d9882c2fd967d6c779a8563618ce035ec159823c865b0163911b7004f1bfce3ce4a1 - languageName: node - linkType: hard - "@backstage/theme@npm:^0.5.0, @backstage/theme@npm:^0.5.1": version: 0.5.1 resolution: "@backstage/theme@npm:0.5.1" @@ -10656,13 +10676,13 @@ __metadata: linkType: hard "@codemirror/view@npm:^6.0.0, @codemirror/view@npm:^6.23.0": - version: 6.24.1 - resolution: "@codemirror/view@npm:6.24.1" + version: 6.26.0 + resolution: "@codemirror/view@npm:6.26.0" dependencies: "@codemirror/state": ^6.4.0 style-mod: ^4.1.0 w3c-keyname: ^2.2.4 - checksum: 376a9dd6ba3d626373f06a241defa7b61dfa80dda021e8dac8aa05261873b5e8bdf2f7d378f844c8bea2b644659020729bbf43330a272a76143e9995d77a452c + checksum: 93c824334228d0ed81c0db8f58a627b69dad1300f4b64df6e19b487aa36cbd8bf624121092119fc09d49c290cd4e1c88680de62bd138a15f89570832f7addd80 languageName: node linkType: hard @@ -10974,16 +10994,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/aix-ppc64@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/aix-ppc64@npm:0.19.12" - conditions: os=aix & cpu=ppc64 - languageName: node - linkType: hard - -"@esbuild/aix-ppc64@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/aix-ppc64@npm:0.20.1" +"@esbuild/aix-ppc64@npm:0.20.2": + version: 0.20.2 + resolution: "@esbuild/aix-ppc64@npm:0.20.2" conditions: os=aix & cpu=ppc64 languageName: node linkType: hard @@ -10995,16 +11008,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-arm64@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/android-arm64@npm:0.19.12" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/android-arm64@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/android-arm64@npm:0.20.1" +"@esbuild/android-arm64@npm:0.20.2": + version: 0.20.2 + resolution: "@esbuild/android-arm64@npm:0.20.2" conditions: os=android & cpu=arm64 languageName: node linkType: hard @@ -11016,16 +11022,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-arm@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/android-arm@npm:0.19.12" - conditions: os=android & cpu=arm - languageName: node - linkType: hard - -"@esbuild/android-arm@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/android-arm@npm:0.20.1" +"@esbuild/android-arm@npm:0.20.2": + version: 0.20.2 + resolution: "@esbuild/android-arm@npm:0.20.2" conditions: os=android & cpu=arm languageName: node linkType: hard @@ -11037,16 +11036,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-x64@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/android-x64@npm:0.19.12" - conditions: os=android & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/android-x64@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/android-x64@npm:0.20.1" +"@esbuild/android-x64@npm:0.20.2": + version: 0.20.2 + resolution: "@esbuild/android-x64@npm:0.20.2" conditions: os=android & cpu=x64 languageName: node linkType: hard @@ -11058,16 +11050,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/darwin-arm64@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/darwin-arm64@npm:0.19.12" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/darwin-arm64@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/darwin-arm64@npm:0.20.1" +"@esbuild/darwin-arm64@npm:0.20.2": + version: 0.20.2 + resolution: "@esbuild/darwin-arm64@npm:0.20.2" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard @@ -11079,16 +11064,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/darwin-x64@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/darwin-x64@npm:0.19.12" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/darwin-x64@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/darwin-x64@npm:0.20.1" +"@esbuild/darwin-x64@npm:0.20.2": + version: 0.20.2 + resolution: "@esbuild/darwin-x64@npm:0.20.2" conditions: os=darwin & cpu=x64 languageName: node linkType: hard @@ -11100,16 +11078,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/freebsd-arm64@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/freebsd-arm64@npm:0.19.12" - conditions: os=freebsd & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/freebsd-arm64@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/freebsd-arm64@npm:0.20.1" +"@esbuild/freebsd-arm64@npm:0.20.2": + version: 0.20.2 + resolution: "@esbuild/freebsd-arm64@npm:0.20.2" conditions: os=freebsd & cpu=arm64 languageName: node linkType: hard @@ -11121,16 +11092,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/freebsd-x64@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/freebsd-x64@npm:0.19.12" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/freebsd-x64@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/freebsd-x64@npm:0.20.1" +"@esbuild/freebsd-x64@npm:0.20.2": + version: 0.20.2 + resolution: "@esbuild/freebsd-x64@npm:0.20.2" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard @@ -11142,16 +11106,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-arm64@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/linux-arm64@npm:0.19.12" - conditions: os=linux & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/linux-arm64@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/linux-arm64@npm:0.20.1" +"@esbuild/linux-arm64@npm:0.20.2": + version: 0.20.2 + resolution: "@esbuild/linux-arm64@npm:0.20.2" conditions: os=linux & cpu=arm64 languageName: node linkType: hard @@ -11163,16 +11120,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-arm@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/linux-arm@npm:0.19.12" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - -"@esbuild/linux-arm@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/linux-arm@npm:0.20.1" +"@esbuild/linux-arm@npm:0.20.2": + version: 0.20.2 + resolution: "@esbuild/linux-arm@npm:0.20.2" conditions: os=linux & cpu=arm languageName: node linkType: hard @@ -11184,16 +11134,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-ia32@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/linux-ia32@npm:0.19.12" - conditions: os=linux & cpu=ia32 - languageName: node - linkType: hard - -"@esbuild/linux-ia32@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/linux-ia32@npm:0.20.1" +"@esbuild/linux-ia32@npm:0.20.2": + version: 0.20.2 + resolution: "@esbuild/linux-ia32@npm:0.20.2" conditions: os=linux & cpu=ia32 languageName: node linkType: hard @@ -11205,16 +11148,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-loong64@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/linux-loong64@npm:0.19.12" - conditions: os=linux & cpu=loong64 - languageName: node - linkType: hard - -"@esbuild/linux-loong64@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/linux-loong64@npm:0.20.1" +"@esbuild/linux-loong64@npm:0.20.2": + version: 0.20.2 + resolution: "@esbuild/linux-loong64@npm:0.20.2" conditions: os=linux & cpu=loong64 languageName: node linkType: hard @@ -11226,16 +11162,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-mips64el@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/linux-mips64el@npm:0.19.12" - conditions: os=linux & cpu=mips64el - languageName: node - linkType: hard - -"@esbuild/linux-mips64el@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/linux-mips64el@npm:0.20.1" +"@esbuild/linux-mips64el@npm:0.20.2": + version: 0.20.2 + resolution: "@esbuild/linux-mips64el@npm:0.20.2" conditions: os=linux & cpu=mips64el languageName: node linkType: hard @@ -11247,16 +11176,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-ppc64@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/linux-ppc64@npm:0.19.12" - conditions: os=linux & cpu=ppc64 - languageName: node - linkType: hard - -"@esbuild/linux-ppc64@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/linux-ppc64@npm:0.20.1" +"@esbuild/linux-ppc64@npm:0.20.2": + version: 0.20.2 + resolution: "@esbuild/linux-ppc64@npm:0.20.2" conditions: os=linux & cpu=ppc64 languageName: node linkType: hard @@ -11268,16 +11190,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-riscv64@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/linux-riscv64@npm:0.19.12" - conditions: os=linux & cpu=riscv64 - languageName: node - linkType: hard - -"@esbuild/linux-riscv64@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/linux-riscv64@npm:0.20.1" +"@esbuild/linux-riscv64@npm:0.20.2": + version: 0.20.2 + resolution: "@esbuild/linux-riscv64@npm:0.20.2" conditions: os=linux & cpu=riscv64 languageName: node linkType: hard @@ -11289,16 +11204,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-s390x@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/linux-s390x@npm:0.19.12" - conditions: os=linux & cpu=s390x - languageName: node - linkType: hard - -"@esbuild/linux-s390x@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/linux-s390x@npm:0.20.1" +"@esbuild/linux-s390x@npm:0.20.2": + version: 0.20.2 + resolution: "@esbuild/linux-s390x@npm:0.20.2" conditions: os=linux & cpu=s390x languageName: node linkType: hard @@ -11310,16 +11218,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-x64@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/linux-x64@npm:0.19.12" - conditions: os=linux & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/linux-x64@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/linux-x64@npm:0.20.1" +"@esbuild/linux-x64@npm:0.20.2": + version: 0.20.2 + resolution: "@esbuild/linux-x64@npm:0.20.2" conditions: os=linux & cpu=x64 languageName: node linkType: hard @@ -11331,16 +11232,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/netbsd-x64@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/netbsd-x64@npm:0.19.12" - conditions: os=netbsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/netbsd-x64@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/netbsd-x64@npm:0.20.1" +"@esbuild/netbsd-x64@npm:0.20.2": + version: 0.20.2 + resolution: "@esbuild/netbsd-x64@npm:0.20.2" conditions: os=netbsd & cpu=x64 languageName: node linkType: hard @@ -11352,16 +11246,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/openbsd-x64@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/openbsd-x64@npm:0.19.12" - conditions: os=openbsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/openbsd-x64@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/openbsd-x64@npm:0.20.1" +"@esbuild/openbsd-x64@npm:0.20.2": + version: 0.20.2 + resolution: "@esbuild/openbsd-x64@npm:0.20.2" conditions: os=openbsd & cpu=x64 languageName: node linkType: hard @@ -11373,16 +11260,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/sunos-x64@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/sunos-x64@npm:0.19.12" - conditions: os=sunos & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/sunos-x64@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/sunos-x64@npm:0.20.1" +"@esbuild/sunos-x64@npm:0.20.2": + version: 0.20.2 + resolution: "@esbuild/sunos-x64@npm:0.20.2" conditions: os=sunos & cpu=x64 languageName: node linkType: hard @@ -11394,16 +11274,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/win32-arm64@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/win32-arm64@npm:0.19.12" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/win32-arm64@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/win32-arm64@npm:0.20.1" +"@esbuild/win32-arm64@npm:0.20.2": + version: 0.20.2 + resolution: "@esbuild/win32-arm64@npm:0.20.2" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard @@ -11415,16 +11288,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/win32-ia32@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/win32-ia32@npm:0.19.12" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - -"@esbuild/win32-ia32@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/win32-ia32@npm:0.20.1" +"@esbuild/win32-ia32@npm:0.20.2": + version: 0.20.2 + resolution: "@esbuild/win32-ia32@npm:0.20.2" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard @@ -11436,16 +11302,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/win32-x64@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/win32-x64@npm:0.19.12" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/win32-x64@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/win32-x64@npm:0.20.1" +"@esbuild/win32-x64@npm:0.20.2": + version: 0.20.2 + resolution: "@esbuild/win32-x64@npm:0.20.2" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -11678,23 +11537,23 @@ __metadata: linkType: hard "@google-cloud/container@npm:^5.0.0": - version: 5.8.0 - resolution: "@google-cloud/container@npm:5.8.0" + version: 5.10.0 + resolution: "@google-cloud/container@npm:5.10.0" dependencies: google-gax: ^4.0.3 - checksum: 6d82c417d7819fee322397f482785f3dfec28a82f0f1cf1a3f5059a7822f2b438b893eb068bb7ac9909011a63b22e6f1115e7c1386adf3fbfa93980b2657cfc1 + checksum: 068ed2afb6b59a597ea2abfdbb9cf6152e729fd447ae52e5c16da5a2ef95d70e7774438fdaefce8275a37bca3658c1db326915e09429ea42327cb6da8cd05a36 languageName: node linkType: hard "@google-cloud/firestore@npm:^7.0.0": - version: 7.3.1 - resolution: "@google-cloud/firestore@npm:7.3.1" + version: 7.4.0 + resolution: "@google-cloud/firestore@npm:7.4.0" dependencies: fast-deep-equal: ^3.1.1 functional-red-black-tree: ^1.0.1 google-gax: ^4.0.4 protobufjs: ^7.2.5 - checksum: 635f1dbe17091cff6b822e83ca8b9931def442779a0cec5b80b9387cc7ec6c052ae3d658561df2e021421d4869f57b92bb610086d05a8698be8376a3c2b3e98a + checksum: df0094c3be5473a96f925d7bcd4234f376e4928065bdd96bdc2debc73b4c976df160c2553dfc8ed3d73f859778996159e69770983fa0224a53afbe4e77754db3 languageName: node linkType: hard @@ -11723,8 +11582,8 @@ __metadata: linkType: hard "@google-cloud/storage@npm:^7.0.0": - version: 7.7.0 - resolution: "@google-cloud/storage@npm:7.7.0" + version: 7.8.0 + resolution: "@google-cloud/storage@npm:7.8.0" dependencies: "@google-cloud/paginator": ^5.0.0 "@google-cloud/projectify": ^4.0.0 @@ -11732,22 +11591,22 @@ __metadata: abort-controller: ^3.0.0 async-retry: ^1.3.3 compressible: ^2.0.12 - duplexify: ^4.0.0 + duplexify: ^4.1.3 ent: ^2.2.0 fast-xml-parser: ^4.3.0 gaxios: ^6.0.2 - google-auth-library: ^9.0.0 + google-auth-library: ^9.6.3 mime: ^3.0.0 mime-types: ^2.0.8 p-limit: ^3.0.1 retry-request: ^7.0.0 teeny-request: ^9.0.0 uuid: ^8.0.0 - checksum: b63069b7e591e55f9132aab9e8f9cd03b72a5b6e531c1f37fc44c4cd34eb02dd50e8007739dad6f0ac2ddb216eb5a80bc3b062d1d8c42aad7351e6cc6008d27f + checksum: 2f72d5c6f6d88ddd69c7df1a1eed05a9fe422d11b1885382c11265a0695d1b6ecae6b1e24c739ca619116536c5ae7262564a99a7256774f405b224f906ab2e90 languageName: node linkType: hard -"@graphiql/react@npm:^0.20.0, @graphiql/react@npm:^0.20.2, @graphiql/react@npm:^0.20.3": +"@graphiql/react@npm:^0.20.0, @graphiql/react@npm:^0.20.3": version: 0.20.3 resolution: "@graphiql/react@npm:0.20.3" dependencies: @@ -12419,15 +12278,6 @@ __metadata: languageName: node linkType: hard -"@jest/expect-utils@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/expect-utils@npm:28.1.3" - dependencies: - jest-get-type: ^28.0.2 - checksum: 808ea3a68292a7e0b95490fdd55605c430b4cf209ea76b5b61bfb2a1badcb41bc046810fe4e364bd5fe04663978aa2bd73d8f8465a761dd7c655aeb44cf22987 - languageName: node - linkType: hard - "@jest/expect-utils@npm:^29.7.0": version: 29.7.0 resolution: "@jest/expect-utils@npm:29.7.0" @@ -12510,15 +12360,6 @@ __metadata: languageName: node linkType: hard -"@jest/schemas@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/schemas@npm:28.1.3" - dependencies: - "@sinclair/typebox": ^0.24.1 - checksum: 3cf1d4b66c9c4ffda58b246de1ddcba8e6ad085af63dccdf07922511f13b68c0cc480a7bc620cb4f3099a6f134801c747e1df7bfc7a4ef4dceefbdea3e31e1de - languageName: node - linkType: hard - "@jest/schemas@npm:^29.6.3": version: 29.6.3 resolution: "@jest/schemas@npm:29.6.3" @@ -12586,20 +12427,6 @@ __metadata: languageName: node linkType: hard -"@jest/types@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/types@npm:28.1.3" - dependencies: - "@jest/schemas": ^28.1.3 - "@types/istanbul-lib-coverage": ^2.0.0 - "@types/istanbul-reports": ^3.0.0 - "@types/node": "*" - "@types/yargs": ^17.0.8 - chalk: ^4.0.0 - checksum: 1e258d9c063fcf59ebc91e46d5ea5984674ac7ae6cae3e50aa780d22b4405bf2c925f40350bf30013839eb5d4b5e521d956ddf8f3b7c78debef0e75a07f57350 - languageName: node - linkType: hard - "@jest/types@npm:^29.6.3": version: 29.6.3 resolution: "@jest/types@npm:29.6.3" @@ -12872,8 +12699,8 @@ __metadata: linkType: hard "@material-table/core@npm:^3.1.0": - version: 3.1.0 - resolution: "@material-table/core@npm:3.1.0" + version: 3.2.5 + resolution: "@material-table/core@npm:3.2.5" dependencies: "@babel/runtime": ^7.12.5 "@date-io/date-fns": ^1.3.13 @@ -12886,12 +12713,13 @@ __metadata: prop-types: ^15.7.2 react-beautiful-dnd: ^13.0.0 react-double-scrollbar: 0.0.15 + uuid: ^3.4.0 peerDependencies: "@date-io/core": ^1.3.13 "@material-ui/core": ^4.11.2 react: ">=16.8.0" react-dom: ">=16.8.0" - checksum: c54114733c061d99424859465c25fdd0c51314f533d37269ee41062195bb34b5bd7eabae8e7b14532b90baee9363d00333b00d1619c01b821a7ee974053c4947 + checksum: 707e85cfcb8c1cfc8eb78ea6991509879f774081d7a54ad428f702fe00478b6d3707d0fd85f4ad443ebcfac0c0cab79c046c4d5083adcbc767615445667b50cf languageName: node linkType: hard @@ -12933,7 +12761,7 @@ __metadata: languageName: node linkType: hard -"@material-ui/core@npm:^4.11.3, @material-ui/core@npm:^4.12.2, @material-ui/core@npm:^4.12.4, @material-ui/core@npm:^4.9.13": +"@material-ui/core@npm:^4.12.2, @material-ui/core@npm:^4.12.4, @material-ui/core@npm:^4.9.13": version: 4.12.4 resolution: "@material-ui/core@npm:4.12.4" dependencies: @@ -14742,8 +14570,8 @@ __metadata: linkType: hard "@openapitools/openapi-generator-cli@npm:^2.4.26, @openapitools/openapi-generator-cli@npm:^2.7.0": - version: 2.9.0 - resolution: "@openapitools/openapi-generator-cli@npm:2.9.0" + version: 2.12.0 + resolution: "@openapitools/openapi-generator-cli@npm:2.12.0" dependencies: "@nestjs/axios": 3.0.1 "@nestjs/common": 10.3.0 @@ -14764,20 +14592,20 @@ __metadata: tslib: 2.6.2 bin: openapi-generator-cli: main.js - checksum: 102040381b42edbab4fa34aa49c3cf8188fdb892c3e251bcb5bdf7c599597f3572d52d44fed7bead5fcaec24d624491c20dc96d2f164fa44e7fc232c7d787f69 + checksum: 83c6a6f24b663bca5fd81d39d14af0565d20e317e139f697a96a0758e0b20ea96610de926542bb9447d3fc672f18b8c2068dc63a4d3157cb0f61d2739798fa9a languageName: node linkType: hard "@opensearch-project/opensearch@npm:^2.2.1": - version: 2.5.0 - resolution: "@opensearch-project/opensearch@npm:2.5.0" + version: 2.6.0 + resolution: "@opensearch-project/opensearch@npm:2.6.0" dependencies: aws4: ^1.11.0 debug: ^4.3.1 hpagent: ^1.2.0 ms: ^2.1.3 secure-json-parse: ^2.4.0 - checksum: f9a4afa06c2917ffb76baac1ee1df9b8cf4594af6aded451b7c4838a4a0320101a432c0cbd3586d3533a4eb662fc414d4f1b315b73fac5b7a0c1d5f0ff0ac6ed + checksum: d958bb83bdf4975f342da9d355aa39f3daaed322fa72fae715501cf760101e3ef50e3e216cab5b008df5f7d7976d5feee7541a6dd9d1f6791ffb01134fafa227 languageName: node linkType: hard @@ -14878,13 +14706,13 @@ __metadata: linkType: hard "@playwright/test@npm:^1.32.3": - version: 1.41.2 - resolution: "@playwright/test@npm:1.41.2" + version: 1.42.1 + resolution: "@playwright/test@npm:1.42.1" dependencies: - playwright: 1.41.2 + playwright: 1.42.1 bin: playwright: cli.js - checksum: 87d9e725106111b2af1b2dec32454cd2a2d9665ff735669dc751caa30240e6db595ecfb9422719fa65dcff6ca19dea93ac2ae70d587efddde31def0754549d4c + checksum: a41505f02a4dac358e645452a190cac620b8d4eae79ab5d90ea1fb7ca06d86a9f5749b1a803dea789b662d1cbfd216380f722bed72093897e18b4238f4a07a4d languageName: node linkType: hard @@ -14945,12 +14773,12 @@ __metadata: languageName: node linkType: hard -"@pnpm/error@npm:5.0.2": - version: 5.0.2 - resolution: "@pnpm/error@npm:5.0.2" +"@pnpm/error@npm:5.0.3": + version: 5.0.3 + resolution: "@pnpm/error@npm:5.0.3" dependencies: "@pnpm/constants": 7.1.1 - checksum: 490e90b3a6fa6527a5a2b07dfd46982e005d8834036871a30cf03fcb389497b9828ed01c0d39e88b6352a340556de316eae9dbefcb3246f368815a03241576e6 + checksum: b0c5b8b18c4302aeef59554b07107046679189d24eac6b34df59a28f6567f999bd589d7f64c75fcfee2e25f4175f5c0b1089fb2c5b633257836ced185e531726 languageName: node linkType: hard @@ -14994,12 +14822,12 @@ __metadata: languageName: node linkType: hard -"@pnpm/npm-resolver@npm:18.1.0": - version: 18.1.0 - resolution: "@pnpm/npm-resolver@npm:18.1.0" +"@pnpm/npm-resolver@npm:18.1.1": + version: 18.1.1 + resolution: "@pnpm/npm-resolver@npm:18.1.1" dependencies: "@pnpm/core-loggers": 9.0.6 - "@pnpm/error": 5.0.2 + "@pnpm/error": 5.0.3 "@pnpm/fetching-types": 5.0.0 "@pnpm/graceful-fs": 3.2.0 "@pnpm/resolve-workspace-range": 5.0.1 @@ -15021,7 +14849,7 @@ __metadata: version-selector-type: ^3.0.0 peerDependencies: "@pnpm/logger": ^5.0.0 - checksum: 81b0dd97a0062374db7aecd68a94e7e52dd19c9675bd052c7fa7a2b5edb6219dc525e71dccb70bf4bae90faf44f6e1cd0d4f155606bc754ffcec4f9ab6852c08 + checksum: 6157882e654c088b2a4b4948e911fd0e8e9e1eca8cf54637757b17ac13330d3a22f429b0183cb7dbbd1015830acdd476e4b719d038ebe0c020f34e33f2b823d5 languageName: node linkType: hard @@ -15050,15 +14878,15 @@ __metadata: languageName: node linkType: hard -"@pnpm/workspace.pkgs-graph@npm:^2.0.14": - version: 2.0.14 - resolution: "@pnpm/workspace.pkgs-graph@npm:2.0.14" +"@pnpm/workspace.pkgs-graph@npm:^2.0.15": + version: 2.0.15 + resolution: "@pnpm/workspace.pkgs-graph@npm:2.0.15" dependencies: "@pnpm/npm-package-arg": ^1.0.0 - "@pnpm/npm-resolver": 18.1.0 + "@pnpm/npm-resolver": 18.1.1 "@pnpm/resolve-workspace-range": 5.0.1 ramda: "npm:@pnpm/ramda@0.28.1" - checksum: ff3b5234611da1ec4b636616554abcb4720c4fcd3db33bcb7b4b1e4ed5ebd091a854163876c1b1f7d56d2ec6e4f344c22eaf02054f2963d9a50a49462412793d + checksum: f16cebedb0aed369ffe744792859e8cca016069013e4a0e0317f9e4dec72fd0f44042999b30d490f37ed29aaa64fcb92e0ff715069b1854a3c96926f417d3255 languageName: node linkType: hard @@ -15739,10 +15567,10 @@ __metadata: languageName: node linkType: hard -"@remix-run/router@npm:1.15.1": - version: 1.15.1 - resolution: "@remix-run/router@npm:1.15.1" - checksum: 5c404e64a95da7d2a06811c15e8b213cd1079bca546d8a78a1626264ac0b71361b9ce93269bda7209a938e5a22c25993902841f81240c58eb7ed0934e1781197 +"@remix-run/router@npm:1.15.3": + version: 1.15.3 + resolution: "@remix-run/router@npm:1.15.3" + checksum: 9e70bd334d99fdf9285f0885c10353d7e25f66369080f551d997e3ce204e1af3a12d6f12b091f94a2dc9a54c80598bbe3c5194b57cbae17b7b40ab815dcd49a0 languageName: node linkType: hard @@ -15915,15 +15743,15 @@ __metadata: linkType: hard "@roadiehq/backstage-plugin-travis-ci@npm:^2.0.5": - version: 2.1.17 - resolution: "@roadiehq/backstage-plugin-travis-ci@npm:2.1.17" + version: 2.1.21 + resolution: "@roadiehq/backstage-plugin-travis-ci@npm:2.1.21" dependencies: - "@backstage/catalog-model": ^1.4.3 - "@backstage/core-components": ^0.13.8 - "@backstage/core-plugin-api": ^1.8.0 - "@backstage/plugin-catalog-react": ^1.9.1 - "@backstage/theme": ^0.4.4 - "@material-ui/core": ^4.11.3 + "@backstage/catalog-model": ^1.4.4 + "@backstage/core-components": ^0.14.0 + "@backstage/core-plugin-api": ^1.9.0 + "@backstage/plugin-catalog-react": ^1.10.0 + "@backstage/theme": ^0.5.1 + "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.11.2 "@material-ui/lab": 4.0.0-alpha.57 cross-fetch: ^3.1.3 @@ -15932,11 +15760,11 @@ __metadata: moment: ^2.29.1 react-use: ^17.2.4 peerDependencies: - react: ^16.13.1 || ^17.0.0 - react-dom: ^16.13.1 || ^17.0.0 + react: ^16.13.1 || ^17.0.0 || ^18.0.0 + react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 react-router: 6.0.0-beta.0 || ^6.3.0 react-router-dom: 6.0.0-beta.0 || ^6.3.0 - checksum: fcf0b788a2f004a6eff181ff9f9babd07aceb630333b1a3e8ce7fb37b6e9a303444ecc9521a920f6aced2c9a081fa3024ee9079d1bb9f453e2d322af04f57113 + checksum: 542a4e2239c18c29923e27fddcde7e39a036907ab7e04255b05d3e55a44530b76ab2af8866697fbbf42a1445d63dcf1b4cd9a8062c71f211b74679a19785623d languageName: node linkType: hard @@ -16195,13 +16023,6 @@ __metadata: languageName: node linkType: hard -"@sinclair/typebox@npm:^0.24.1": - version: 0.24.42 - resolution: "@sinclair/typebox@npm:0.24.42" - checksum: 83a3083b71063ad270669308634f7c5b473272da71cbc405343b2ff774d641ec2be0993e0a61386f8ef3f8b786c173dc01921a5bc6627d95657eb98f19f1a4c4 - languageName: node - linkType: hard - "@sinclair/typebox@npm:^0.27.8": version: 0.27.8 resolution: "@sinclair/typebox@npm:0.27.8" @@ -16275,385 +16096,385 @@ __metadata: languageName: node linkType: hard -"@smithy/abort-controller@npm:^2.1.1, @smithy/abort-controller@npm:^2.1.2": - version: 2.1.2 - resolution: "@smithy/abort-controller@npm:2.1.2" +"@smithy/abort-controller@npm:^2.2.0": + version: 2.2.0 + resolution: "@smithy/abort-controller@npm:2.2.0" dependencies: - "@smithy/types": ^2.10.0 - tslib: ^2.5.0 - checksum: 0646908e0afce70bc15484bdddff2b862ebdc9566f96e6ff4e0dd7bc430b3c71a503f822786d2fc0f67b109e5c14d58cf29468d43dc2356662f03069c6d41508 + "@smithy/types": ^2.12.0 + tslib: ^2.6.2 + checksum: d0d7fcaa7b67b04c9ad825017110cc294ff06af07f8054ac3b75d8de88ff5fbef1d08f5c1ae672db1839d14ce25f277c459d2b7b7263cbe9e6c3d4518a19230e languageName: node linkType: hard -"@smithy/chunked-blob-reader-native@npm:^2.1.1": - version: 2.1.1 - resolution: "@smithy/chunked-blob-reader-native@npm:2.1.1" +"@smithy/chunked-blob-reader-native@npm:^2.2.0": + version: 2.2.0 + resolution: "@smithy/chunked-blob-reader-native@npm:2.2.0" dependencies: - "@smithy/util-base64": ^2.1.1 - tslib: ^2.5.0 - checksum: 82f475b9090e12306292d46b27cca841691a251db5c9b5520830f7e5c947bbe69b497619773b25754dcdd8580620fd3677f478e1325501549f6182d78e95c583 + "@smithy/util-base64": ^2.3.0 + tslib: ^2.6.2 + checksum: ac619f18844e8a8288672c40b8967a82b78f5398119638b3e4fcadf451a3356139307c2d9f24c8c041530238f1ce6e0f90ce82adfcb050d08afefa2f0541c2d0 languageName: node linkType: hard -"@smithy/chunked-blob-reader@npm:^2.1.1": - version: 2.1.1 - resolution: "@smithy/chunked-blob-reader@npm:2.1.1" +"@smithy/chunked-blob-reader@npm:^2.2.0": + version: 2.2.0 + resolution: "@smithy/chunked-blob-reader@npm:2.2.0" dependencies: - tslib: ^2.5.0 - checksum: e9d7f6f80fffccb5b615aa4eecf0e48849e625a70a79acc371b74b3d5e6dffed3b0d21d8beafe2e1cc1ebc235b8c24ed7d7e31e8c3565d97efe1238dda82c813 + tslib: ^2.6.2 + checksum: f5acb1e812f97d7c233ccf955557ac10c7e94c8c9610d2fad715d1010fe30ee686a93a5d6e589ce8ae4eb7cf201d5eab61cee5e8646bbebdfa8a5f23693d7a5a languageName: node linkType: hard -"@smithy/config-resolver@npm:^2.1.2": - version: 2.1.2 - resolution: "@smithy/config-resolver@npm:2.1.2" +"@smithy/config-resolver@npm:^2.2.0": + version: 2.2.0 + resolution: "@smithy/config-resolver@npm:2.2.0" dependencies: - "@smithy/node-config-provider": ^2.2.2 - "@smithy/types": ^2.10.0 - "@smithy/util-config-provider": ^2.2.1 - "@smithy/util-middleware": ^2.1.2 - tslib: ^2.5.0 - checksum: 20ac9423e416bbb486d1bca247d7a37a2cbffe30c2e292b15c25e411c6cc5af438362ba2aa8e2218e93ef10c7d7fa04873646c4dd82bbcb4df6203efd1f1d3c9 + "@smithy/node-config-provider": ^2.3.0 + "@smithy/types": ^2.12.0 + "@smithy/util-config-provider": ^2.3.0 + "@smithy/util-middleware": ^2.2.0 + tslib: ^2.6.2 + checksum: dcb15d40faf46c370cd83dfbf1e632fae29c64c500b33b53850a520cfb02c9fa6f7e239c07824793b47645462567d51cb1554c02f9ec4531bd51bc759aede2ed languageName: node linkType: hard -"@smithy/core@npm:^1.3.3": - version: 1.3.3 - resolution: "@smithy/core@npm:1.3.3" +"@smithy/core@npm:^1.4.0": + version: 1.4.0 + resolution: "@smithy/core@npm:1.4.0" dependencies: - "@smithy/middleware-endpoint": ^2.4.2 - "@smithy/middleware-retry": ^2.1.2 - "@smithy/middleware-serde": ^2.1.2 - "@smithy/protocol-http": ^3.2.0 - "@smithy/smithy-client": ^2.4.0 - "@smithy/types": ^2.10.0 - "@smithy/util-middleware": ^2.1.2 - tslib: ^2.5.0 - checksum: bb8a79f51517049064f1b5fb2233b9410d8c6dfeafa2ecda31b9d5326f05ffa4773c38ec72d90b380366e8a9b4c21b93231aaadce262c0d87989904950358cd3 + "@smithy/middleware-endpoint": ^2.5.0 + "@smithy/middleware-retry": ^2.2.0 + "@smithy/middleware-serde": ^2.3.0 + "@smithy/protocol-http": ^3.3.0 + "@smithy/smithy-client": ^2.5.0 + "@smithy/types": ^2.12.0 + "@smithy/util-middleware": ^2.2.0 + tslib: ^2.6.2 + checksum: 3fbec263e4b40af33be38a7555167e30f0e1f2bec27635ae75ace8f80c53cd9c474fc9b73f856b308f7da08db9281d7d31b2b51781611278bfe4164512882a7e languageName: node linkType: hard -"@smithy/credential-provider-imds@npm:^2.2.1, @smithy/credential-provider-imds@npm:^2.2.2": - version: 2.2.2 - resolution: "@smithy/credential-provider-imds@npm:2.2.2" +"@smithy/credential-provider-imds@npm:^2.3.0": + version: 2.3.0 + resolution: "@smithy/credential-provider-imds@npm:2.3.0" dependencies: - "@smithy/node-config-provider": ^2.2.2 - "@smithy/property-provider": ^2.1.2 - "@smithy/types": ^2.10.0 - "@smithy/url-parser": ^2.1.2 - tslib: ^2.5.0 - checksum: 85cc9a6e2c52a8f47c0db3dd11c31ff550e5ddd0f6d1917169e22fbf242bb5a5c05bc426da5d04bce79cf0633d0c645e83ca02d42e243f3b40c2ace07aeb1b56 + "@smithy/node-config-provider": ^2.3.0 + "@smithy/property-provider": ^2.2.0 + "@smithy/types": ^2.12.0 + "@smithy/url-parser": ^2.2.0 + tslib: ^2.6.2 + checksum: dd57e09e60bd51ed103f7a5363a43e1373470ea3cee04ace66f5bbaafab005355ffbfa3e137e2ecac34aa28911fb5b6ecac60845846c6a4a5432f3e57a74b837 languageName: node linkType: hard -"@smithy/eventstream-codec@npm:^2.1.1, @smithy/eventstream-codec@npm:^2.1.2": - version: 2.1.2 - resolution: "@smithy/eventstream-codec@npm:2.1.2" +"@smithy/eventstream-codec@npm:^2.2.0": + version: 2.2.0 + resolution: "@smithy/eventstream-codec@npm:2.2.0" dependencies: "@aws-crypto/crc32": 3.0.0 - "@smithy/types": ^2.10.0 - "@smithy/util-hex-encoding": ^2.1.1 - tslib: ^2.5.0 - checksum: ea455826916906a480c7abc517ceb043b578a95994842f802f71e409c45a5575a4f337c376c0c371055371bebafb81119a044cdb4c7de057304e6b1c0527d1d9 + "@smithy/types": ^2.12.0 + "@smithy/util-hex-encoding": ^2.2.0 + tslib: ^2.6.2 + checksum: ae59067964e19c6728b1be74a6e19793e4d3decdcbcea546bd40f77c3cc1eacc48c30272ef68927ba477c2b6450d023474f2dec516dfd93e204150ba18cab697 languageName: node linkType: hard -"@smithy/eventstream-serde-browser@npm:^2.1.2": - version: 2.1.2 - resolution: "@smithy/eventstream-serde-browser@npm:2.1.2" +"@smithy/eventstream-serde-browser@npm:^2.2.0": + version: 2.2.0 + resolution: "@smithy/eventstream-serde-browser@npm:2.2.0" dependencies: - "@smithy/eventstream-serde-universal": ^2.1.2 - "@smithy/types": ^2.10.0 - tslib: ^2.5.0 - checksum: 855118cd6ffc99a05d4950a01af23f727599e7fb127323d508b935617005e3d0e45cf1025fe7ba5079d9def82c73dc8d3e703c36f4b71288fd945c1433b41777 + "@smithy/eventstream-serde-universal": ^2.2.0 + "@smithy/types": ^2.12.0 + tslib: ^2.6.2 + checksum: c00bd592365f42ddafcad83f06d3c85ce8ee21bd806de903043ef132de9acca8bf1592ed811b11daba1742332928fc73a66c9032b06df2f6526da0339918f8d5 languageName: node linkType: hard -"@smithy/eventstream-serde-config-resolver@npm:^2.1.2": - version: 2.1.2 - resolution: "@smithy/eventstream-serde-config-resolver@npm:2.1.2" +"@smithy/eventstream-serde-config-resolver@npm:^2.2.0": + version: 2.2.0 + resolution: "@smithy/eventstream-serde-config-resolver@npm:2.2.0" dependencies: - "@smithy/types": ^2.10.0 - tslib: ^2.5.0 - checksum: 397d91a492948bced849c5a90422ff6a2d49d4d300ec9fff09eea7256931402966d0285e8fd33a2df3745c10ff5dc88bbfafbf0ce53f0858371d02e7057fd033 + "@smithy/types": ^2.12.0 + tslib: ^2.6.2 + checksum: a35dbcbc14ad1825ce22a9e7daac93067d8ade6173a3ce33b819eed61390f8d93ea63b70945f6d1bced175fad58def3d09a14ee3043c63a798ecef407b2d1701 languageName: node linkType: hard -"@smithy/eventstream-serde-node@npm:^2.1.2": - version: 2.1.2 - resolution: "@smithy/eventstream-serde-node@npm:2.1.2" +"@smithy/eventstream-serde-node@npm:^2.2.0": + version: 2.2.0 + resolution: "@smithy/eventstream-serde-node@npm:2.2.0" dependencies: - "@smithy/eventstream-serde-universal": ^2.1.2 - "@smithy/types": ^2.10.0 - tslib: ^2.5.0 - checksum: 56a65908d8ac07fd72dfa06a4709972c997a10696c0850de398804590fcc33144afbe1aa70b80ce7d98f6003dffa2b0f5d29228586fb2cb0f076b3d4c03ed20a + "@smithy/eventstream-serde-universal": ^2.2.0 + "@smithy/types": ^2.12.0 + tslib: ^2.6.2 + checksum: 1d4971b99654c4672716608a63e668ccefd78cc1806c0ea4df5c3cc0ca0208b7647f7914d2c77a37d0a29b31b66cff660ce2ab2f46f56d997c9a58ea6b6241b2 languageName: node linkType: hard -"@smithy/eventstream-serde-universal@npm:^2.1.2": - version: 2.1.2 - resolution: "@smithy/eventstream-serde-universal@npm:2.1.2" +"@smithy/eventstream-serde-universal@npm:^2.2.0": + version: 2.2.0 + resolution: "@smithy/eventstream-serde-universal@npm:2.2.0" dependencies: - "@smithy/eventstream-codec": ^2.1.2 - "@smithy/types": ^2.10.0 - tslib: ^2.5.0 - checksum: 693be21ef300c26f638fd7f9b9b36652aff319d7316893a661f32a5f1f29369bc216eb6f1d9c80d5e42473ccdd83e332163a8c9fce012c08df4305a52dea09c7 + "@smithy/eventstream-codec": ^2.2.0 + "@smithy/types": ^2.12.0 + tslib: ^2.6.2 + checksum: c28038c2f57deed7b5e0e5f8ab8150d4a7947f2971241da96ef1d53b45d83dfa661717065f059099c420ee66ae2455818ae124bb8601b609558040d4a7509227 languageName: node linkType: hard -"@smithy/fetch-http-handler@npm:^2.4.2": - version: 2.4.2 - resolution: "@smithy/fetch-http-handler@npm:2.4.2" +"@smithy/fetch-http-handler@npm:^2.5.0": + version: 2.5.0 + resolution: "@smithy/fetch-http-handler@npm:2.5.0" dependencies: - "@smithy/protocol-http": ^3.2.0 - "@smithy/querystring-builder": ^2.1.2 - "@smithy/types": ^2.10.0 - "@smithy/util-base64": ^2.1.1 - tslib: ^2.5.0 - checksum: 7d87d5c6674623250972ac673a3317eeaeeba0647d8095c92e63ec9a002e96bb56dd7aa75172e474e226a4971f2abbd2506025cb1bf131d3b45698dbff27220d + "@smithy/protocol-http": ^3.3.0 + "@smithy/querystring-builder": ^2.2.0 + "@smithy/types": ^2.12.0 + "@smithy/util-base64": ^2.3.0 + tslib: ^2.6.2 + checksum: 91a58ac32c6b4afc6d7fb2b9ac3e3b817171f76e09b013a6506308b044455054444a92e1acbd8f98bdd159b15fdd44b1e3fb52c21cbb2e69be8e3698d2206021 languageName: node linkType: hard -"@smithy/hash-blob-browser@npm:^2.1.2": - version: 2.1.2 - resolution: "@smithy/hash-blob-browser@npm:2.1.2" +"@smithy/hash-blob-browser@npm:^2.2.0": + version: 2.2.0 + resolution: "@smithy/hash-blob-browser@npm:2.2.0" dependencies: - "@smithy/chunked-blob-reader": ^2.1.1 - "@smithy/chunked-blob-reader-native": ^2.1.1 - "@smithy/types": ^2.10.0 - tslib: ^2.5.0 - checksum: e8d9fcedcfd03d03603753d6e4aafd7ad7c26e9ed629bf54a8dbb2ecd14b9e29cd267209453479eab698cb19329bfc80632823b40f49cb6d8b949aa4cb6db7c4 + "@smithy/chunked-blob-reader": ^2.2.0 + "@smithy/chunked-blob-reader-native": ^2.2.0 + "@smithy/types": ^2.12.0 + tslib: ^2.6.2 + checksum: 1b748b4449ccee723c8b47a412491283fa7b5a2a6c27b0b73e03d905c2af70b56b74d63a658d8ef0bd330cc4617bc11431c86e24a4932b4722aad08e1b25e576 languageName: node linkType: hard -"@smithy/hash-node@npm:^2.1.2": - version: 2.1.2 - resolution: "@smithy/hash-node@npm:2.1.2" +"@smithy/hash-node@npm:^2.2.0": + version: 2.2.0 + resolution: "@smithy/hash-node@npm:2.2.0" dependencies: - "@smithy/types": ^2.10.0 - "@smithy/util-buffer-from": ^2.1.1 - "@smithy/util-utf8": ^2.1.1 - tslib: ^2.5.0 - checksum: 2f4fe6120a177afbc540c0ba904a3285a0b81de576a57bb28dbee94186635ab585034e7f48eeff0950d3a6442f5fd932cd66c366199c42f4314a540d02261eba + "@smithy/types": ^2.12.0 + "@smithy/util-buffer-from": ^2.2.0 + "@smithy/util-utf8": ^2.3.0 + tslib: ^2.6.2 + checksum: 3305b5778fa99558375b16629ad98fd00a1fb33ea905037977b0a7c93d92c8de1481756ef7dbc004e45210b23f983dec04bcd13d43c98f36a5f47291cbed9d89 languageName: node linkType: hard -"@smithy/hash-stream-node@npm:^2.1.2": - version: 2.1.2 - resolution: "@smithy/hash-stream-node@npm:2.1.2" +"@smithy/hash-stream-node@npm:^2.2.0": + version: 2.2.0 + resolution: "@smithy/hash-stream-node@npm:2.2.0" dependencies: - "@smithy/types": ^2.10.0 - "@smithy/util-utf8": ^2.1.1 - tslib: ^2.5.0 - checksum: 5a1a4d4fff29a4ba048900c606c98baeac0daabbaeba77c0c5b603d5896eff7f1eba2b012d41344638ce3d7fe10cb7d8d88551d34f1c637e807adb61efe3f43e + "@smithy/types": ^2.12.0 + "@smithy/util-utf8": ^2.3.0 + tslib: ^2.6.2 + checksum: 191d76fd1df705c32d24463794f8b8b391061c7ca7265591cd4f070259fa80395c2f115fd3d37f6bb3a4a2303b3811a31509ea767d0c3d0a9644789ae8283118 languageName: node linkType: hard -"@smithy/invalid-dependency@npm:^2.1.2": - version: 2.1.2 - resolution: "@smithy/invalid-dependency@npm:2.1.2" +"@smithy/invalid-dependency@npm:^2.2.0": + version: 2.2.0 + resolution: "@smithy/invalid-dependency@npm:2.2.0" dependencies: - "@smithy/types": ^2.10.0 - tslib: ^2.5.0 - checksum: 5f5ce3d408c67c3e8b80c7dbc3504662c437ded360c360f072ed731c0bae6b57386ba37dc059883dfe7d23711680a5119a68e05b3ea6ccc7fc124cf0e6f90024 + "@smithy/types": ^2.12.0 + tslib: ^2.6.2 + checksum: ed17980ccdf4c564cfcb517f3959dfeb7c7dbddd76eaf2c9e10031ebd19e78e56609df3377626215e51a6c4b98db03cfa88ad46f15ba26bb55c34351f3182a98 languageName: node linkType: hard -"@smithy/is-array-buffer@npm:^2.1.1": - version: 2.1.1 - resolution: "@smithy/is-array-buffer@npm:2.1.1" +"@smithy/is-array-buffer@npm:^2.2.0": + version: 2.2.0 + resolution: "@smithy/is-array-buffer@npm:2.2.0" dependencies: - tslib: ^2.5.0 - checksum: 5dbf9ed59715c871321d0624e3842340c1d662d2e8b78313d1658d39eb793b3ac5c379d573eba0a2ca3add9b313848d4d93fd04bb8565c75fbab749928b239a6 + tslib: ^2.6.2 + checksum: cd12c2e27884fec89ca8966d33c9dc34d3234efe89b33a9b309c61ebcde463e6f15f6a02d31d4fddbfd6e5904743524ca5b95021b517b98fe10957c2da0cd5fc languageName: node linkType: hard -"@smithy/md5-js@npm:^2.1.2": - version: 2.1.2 - resolution: "@smithy/md5-js@npm:2.1.2" +"@smithy/md5-js@npm:^2.2.0": + version: 2.2.0 + resolution: "@smithy/md5-js@npm:2.2.0" dependencies: - "@smithy/types": ^2.10.0 - "@smithy/util-utf8": ^2.1.1 - tslib: ^2.5.0 - checksum: c6e4bdb779e9af5146e502d1e0d757e09a991b70e39fdb089efbcb8e511761942330034b215b66814c3627b0b0bb7bd028d0f26e8558b0ec5b2ea07c46b5f4e5 + "@smithy/types": ^2.12.0 + "@smithy/util-utf8": ^2.3.0 + tslib: ^2.6.2 + checksum: ae343c198a8d8c6689bcb1d7f766e29578d370e8d79180db9b6183b5c74ac091829e8abe3053df0589f53324c01a79c7f9e889e5cd92094e3b5c4be96fb7b970 languageName: node linkType: hard -"@smithy/middleware-content-length@npm:^2.1.2": - version: 2.1.2 - resolution: "@smithy/middleware-content-length@npm:2.1.2" +"@smithy/middleware-content-length@npm:^2.2.0": + version: 2.2.0 + resolution: "@smithy/middleware-content-length@npm:2.2.0" dependencies: - "@smithy/protocol-http": ^3.2.0 - "@smithy/types": ^2.10.0 - tslib: ^2.5.0 - checksum: ddea93b236e5f916da8e1574317967d5aa449e78b0c7153c60c821d117f1648b00effad5301095919de9225810cd8f90f8ee76e7b95c346fc616d8598ad54447 + "@smithy/protocol-http": ^3.3.0 + "@smithy/types": ^2.12.0 + tslib: ^2.6.2 + checksum: 1eae8d2b6f432ce9a849e741d4f2426baee8a51f22a5262c11802e125078ee33d9d8f4183fb142043ba9d1371adad9c835c784333a394d865fb248339f7482e6 languageName: node linkType: hard -"@smithy/middleware-endpoint@npm:^2.4.2": - version: 2.4.2 - resolution: "@smithy/middleware-endpoint@npm:2.4.2" +"@smithy/middleware-endpoint@npm:^2.5.0": + version: 2.5.0 + resolution: "@smithy/middleware-endpoint@npm:2.5.0" dependencies: - "@smithy/middleware-serde": ^2.1.2 - "@smithy/node-config-provider": ^2.2.2 - "@smithy/shared-ini-file-loader": ^2.3.2 - "@smithy/types": ^2.10.0 - "@smithy/url-parser": ^2.1.2 - "@smithy/util-middleware": ^2.1.2 - tslib: ^2.5.0 - checksum: 3e989123fc608c9a32abf30c4033718b3da665a63bd84e8e2869d4aecb0545d461506e75f82b91bbc35a07915ddadf1432643e4c937c11447847a9a45b3de9fa + "@smithy/middleware-serde": ^2.3.0 + "@smithy/node-config-provider": ^2.3.0 + "@smithy/shared-ini-file-loader": ^2.4.0 + "@smithy/types": ^2.12.0 + "@smithy/url-parser": ^2.2.0 + "@smithy/util-middleware": ^2.2.0 + tslib: ^2.6.2 + checksum: 1243567c611d33995dcfb48b5468fbe636db7c2303abafd6a311e6350926f6960c08b58cd5d2133e58b3e13b21f765b281b78b78d14b21092b8bb7cf12de0e76 languageName: node linkType: hard -"@smithy/middleware-retry@npm:^2.1.2": - version: 2.1.2 - resolution: "@smithy/middleware-retry@npm:2.1.2" +"@smithy/middleware-retry@npm:^2.2.0": + version: 2.2.0 + resolution: "@smithy/middleware-retry@npm:2.2.0" dependencies: - "@smithy/node-config-provider": ^2.2.2 - "@smithy/protocol-http": ^3.2.0 - "@smithy/service-error-classification": ^2.1.2 - "@smithy/smithy-client": ^2.4.0 - "@smithy/types": ^2.10.0 - "@smithy/util-middleware": ^2.1.2 - "@smithy/util-retry": ^2.1.2 - tslib: ^2.5.0 + "@smithy/node-config-provider": ^2.3.0 + "@smithy/protocol-http": ^3.3.0 + "@smithy/service-error-classification": ^2.1.5 + "@smithy/smithy-client": ^2.5.0 + "@smithy/types": ^2.12.0 + "@smithy/util-middleware": ^2.2.0 + "@smithy/util-retry": ^2.2.0 + tslib: ^2.6.2 uuid: ^8.3.2 - checksum: ec04fd0c362070529ecd52f2dadd6fd4d638a4e35c62a67309791f1a288550ee8fcd6406ec27fea78d3c89b08a9c6d29ce63bf7cb5a1b0269f86a759b233dac4 + checksum: f0f0ec06b798a0323168b151caf6b1b54078a0e71da6115dfe1b6465873dcde2689216a3aa12d7eea19f651f2883a2e4ed2ee529f7fcc18979ac378b10f8b3ac languageName: node linkType: hard -"@smithy/middleware-serde@npm:^2.1.2": - version: 2.1.2 - resolution: "@smithy/middleware-serde@npm:2.1.2" +"@smithy/middleware-serde@npm:^2.3.0": + version: 2.3.0 + resolution: "@smithy/middleware-serde@npm:2.3.0" dependencies: - "@smithy/types": ^2.10.0 - tslib: ^2.5.0 - checksum: 4f5bd5ee173cf20cd1c12838b0802f96df5a14c3bdab2d50a6009965c128596863c095633958f0c74d82bca3cc9343f8a4c659c033b9a75e614e3a85e34e0665 + "@smithy/types": ^2.12.0 + tslib: ^2.6.2 + checksum: 5393370c0f8a820d8ca36eccecff5b6434c4f81fbaad8800088fb4c8dad5312bf3eb47f67533784de959807bbb3379c23d81a1bcbaf8824254034dd2b83fd76b languageName: node linkType: hard -"@smithy/middleware-stack@npm:^2.1.2": - version: 2.1.2 - resolution: "@smithy/middleware-stack@npm:2.1.2" +"@smithy/middleware-stack@npm:^2.2.0": + version: 2.2.0 + resolution: "@smithy/middleware-stack@npm:2.2.0" dependencies: - "@smithy/types": ^2.10.0 - tslib: ^2.5.0 - checksum: f93dda40f08051a6391e213cc3b90f30ebb31399b000bba882cbf37f942786030822e10ccfe576005361ef6341b571460ce791fbdc7dad971c99a33a92e400dd + "@smithy/types": ^2.12.0 + tslib: ^2.6.2 + checksum: 293d76764e327a5ada4ea7de268f451e62a6a56983ba7dcdbc63fdbb0427c01071a9a81d7807b16586977df829ce5d9587facbd9367b089841bbc9fc329ce6af languageName: node linkType: hard -"@smithy/node-config-provider@npm:^2.2.2": - version: 2.2.2 - resolution: "@smithy/node-config-provider@npm:2.2.2" +"@smithy/node-config-provider@npm:^2.3.0": + version: 2.3.0 + resolution: "@smithy/node-config-provider@npm:2.3.0" dependencies: - "@smithy/property-provider": ^2.1.2 - "@smithy/shared-ini-file-loader": ^2.3.2 - "@smithy/types": ^2.10.0 - tslib: ^2.5.0 - checksum: 666d80d893985e6af5aa88a2f3ed07bd68c6873805974331fd148ec5a5d331e5116e2dca8656ef57c60e22cec03aee0717061a03ce703a691765bf94d809f2eb + "@smithy/property-provider": ^2.2.0 + "@smithy/shared-ini-file-loader": ^2.4.0 + "@smithy/types": ^2.12.0 + tslib: ^2.6.2 + checksum: 9c1dc6d97e0379d947498e7d64e593ea183d5f2c89dace4561c1c613850bf264581b597105c15d64ceabdea954e57ad8e6bf9e42642ddc3f737464f350ffbb5b languageName: node linkType: hard -"@smithy/node-http-handler@npm:^2.1.7, @smithy/node-http-handler@npm:^2.4.0": +"@smithy/node-http-handler@npm:^2.1.7, @smithy/node-http-handler@npm:^2.5.0": + version: 2.5.0 + resolution: "@smithy/node-http-handler@npm:2.5.0" + dependencies: + "@smithy/abort-controller": ^2.2.0 + "@smithy/protocol-http": ^3.3.0 + "@smithy/querystring-builder": ^2.2.0 + "@smithy/types": ^2.12.0 + tslib: ^2.6.2 + checksum: 2e63fafdac5bef62181994af2ec065b0f7f04eaed88fb2990a21a9925226fead5013cf4f232b527f3f4d9ffb68ccbe8cd263ad22a7351d36b0dc23e975929a0c + languageName: node + linkType: hard + +"@smithy/property-provider@npm:^2.2.0": + version: 2.2.0 + resolution: "@smithy/property-provider@npm:2.2.0" + dependencies: + "@smithy/types": ^2.12.0 + tslib: ^2.6.2 + checksum: 8d257cbc5222baf6706e288c3b51196588f135878141f8af76fcb3f0abafc027ed46cf4bb938266d1906111175082ee85f73806d5a2b1c929aee16ec8b5283e6 + languageName: node + linkType: hard + +"@smithy/protocol-http@npm:^3.3.0": + version: 3.3.0 + resolution: "@smithy/protocol-http@npm:3.3.0" + dependencies: + "@smithy/types": ^2.12.0 + tslib: ^2.6.2 + checksum: 6c1aaaee9f6ecfb841766938312268f30cbda253f172de7467463aae7d7bfea19a801ab570f3737334e992d2d0ee7446e6af6a6fd82b08533790c489289dff76 + languageName: node + linkType: hard + +"@smithy/querystring-builder@npm:^2.2.0": + version: 2.2.0 + resolution: "@smithy/querystring-builder@npm:2.2.0" + dependencies: + "@smithy/types": ^2.12.0 + "@smithy/util-uri-escape": ^2.2.0 + tslib: ^2.6.2 + checksum: db492903302a694a0e982c37b9a74314160c5ee485742f24f8b6d0da66f121e7ff8588742a3a1964f6b983c15cacd52b883c5efa714882a754f575da7a7e014d + languageName: node + linkType: hard + +"@smithy/querystring-parser@npm:^2.2.0": + version: 2.2.0 + resolution: "@smithy/querystring-parser@npm:2.2.0" + dependencies: + "@smithy/types": ^2.12.0 + tslib: ^2.6.2 + checksum: 9b27751c329fecc84bdfe7f128ab766c7e5f1d4bdda6184699a0df8999e95aef21fafc6179d6c693e519c78874e738fd9afb5ac4679901cb68d092a86a612419 + languageName: node + linkType: hard + +"@smithy/service-error-classification@npm:^2.1.5": + version: 2.1.5 + resolution: "@smithy/service-error-classification@npm:2.1.5" + dependencies: + "@smithy/types": ^2.12.0 + checksum: 00ac54110a258c7a47c62d4f655d4998bd40e5adb47e10281b28df7a585f2f1e960dc35325eac006636280e7fb2b81dbeb32b89e08bac87acc136c4d29a4dc53 + languageName: node + linkType: hard + +"@smithy/shared-ini-file-loader@npm:^2.4.0": version: 2.4.0 - resolution: "@smithy/node-http-handler@npm:2.4.0" + resolution: "@smithy/shared-ini-file-loader@npm:2.4.0" dependencies: - "@smithy/abort-controller": ^2.1.2 - "@smithy/protocol-http": ^3.2.0 - "@smithy/querystring-builder": ^2.1.2 - "@smithy/types": ^2.10.0 - tslib: ^2.5.0 - checksum: f4f4171b9b527d142752e2bcf2fc2cc86924bf4f807c435dd8decfdeef88667fd2bba5bb2ed8459f94f0373793aeecfa57960527ffc2ac1a4c71d424f7e7a64b + "@smithy/types": ^2.12.0 + tslib: ^2.6.2 + checksum: b0c9e045bfe2150e07f4b31ae7d69d3646679337df9fec1e1201b845cc64ea2250c37db8e8d0e7573fc3c11188164adba43bbaf32275fa8a9f70e8bbc77146bf languageName: node linkType: hard -"@smithy/property-provider@npm:^2.1.1, @smithy/property-provider@npm:^2.1.2": - version: 2.1.2 - resolution: "@smithy/property-provider@npm:2.1.2" +"@smithy/signature-v4@npm:^2.2.0": + version: 2.2.0 + resolution: "@smithy/signature-v4@npm:2.2.0" dependencies: - "@smithy/types": ^2.10.0 - tslib: ^2.5.0 - checksum: df2b72912ede1843a75220a458e3ff8ec70e5544c990c0915e615507380cea4c28bb39b425b7ee600f5c3c90d53b5c82ceaf14d641348f465c14640c556ac9bd + "@smithy/eventstream-codec": ^2.2.0 + "@smithy/is-array-buffer": ^2.2.0 + "@smithy/types": ^2.12.0 + "@smithy/util-hex-encoding": ^2.2.0 + "@smithy/util-middleware": ^2.2.0 + "@smithy/util-uri-escape": ^2.2.0 + "@smithy/util-utf8": ^2.3.0 + tslib: ^2.6.2 + checksum: c25b35545978f507d28df6742ac6e8c703cf7c45938fd3304ce29fee11f05b05a9cf2693eeda44ba4ce1b9deaeb995c41da9dfb752f55a1ae04f247336477fdd languageName: node linkType: hard -"@smithy/protocol-http@npm:^3.2.0": - version: 3.2.0 - resolution: "@smithy/protocol-http@npm:3.2.0" +"@smithy/smithy-client@npm:^2.5.0": + version: 2.5.0 + resolution: "@smithy/smithy-client@npm:2.5.0" dependencies: - "@smithy/types": ^2.10.0 - tslib: ^2.5.0 - checksum: a2082228ea933734795db27b3d5c893f31fa6c80154ddb3b8cce46494fb429088f636db202a482fb67686908fd829d20adc04c1786f09e8c67b9835c6eb1a918 - languageName: node - linkType: hard - -"@smithy/querystring-builder@npm:^2.1.2": - version: 2.1.2 - resolution: "@smithy/querystring-builder@npm:2.1.2" - dependencies: - "@smithy/types": ^2.10.0 - "@smithy/util-uri-escape": ^2.1.1 - tslib: ^2.5.0 - checksum: 480bfc64d5beb6da9c0ecdcd6cb0961cf5afa30c5188b32e3a70608e8f5205d6dc56b13e854b5f541dfdb78b9d9e88a349ec6fc5db8f8d00f11ad137e0b81085 - languageName: node - linkType: hard - -"@smithy/querystring-parser@npm:^2.1.2": - version: 2.1.2 - resolution: "@smithy/querystring-parser@npm:2.1.2" - dependencies: - "@smithy/types": ^2.10.0 - tslib: ^2.5.0 - checksum: 02a1e3a31b37b59adb162d3a2cb084852c2ea01dec948b0669939e77241b05fd7f5b00734418b925248f0b6c164bc483e897438cb2b1a750829f6b4aab0fa8d1 - languageName: node - linkType: hard - -"@smithy/service-error-classification@npm:^2.1.2": - version: 2.1.2 - resolution: "@smithy/service-error-classification@npm:2.1.2" - dependencies: - "@smithy/types": ^2.10.0 - checksum: 8a26f553fd2a823179b701f87c0952e58580c9297166e608a036c7b313d5cc1399bc8b4b056b038003aedc0145643c6c6323e7f683b1a2d1140d9a7982e6bf7c - languageName: node - linkType: hard - -"@smithy/shared-ini-file-loader@npm:^2.3.1, @smithy/shared-ini-file-loader@npm:^2.3.2": - version: 2.3.2 - resolution: "@smithy/shared-ini-file-loader@npm:2.3.2" - dependencies: - "@smithy/types": ^2.10.0 - tslib: ^2.5.0 - checksum: 6db5ac83a76a15f3bf49496747ef4d20343e87a4de35b87892c5ac5c69a7046ffe7276230a4e9cbc075183d8b0584f1530a878f58324279cf936103c578aa70a - languageName: node - linkType: hard - -"@smithy/signature-v4@npm:^2.1.1": - version: 2.1.1 - resolution: "@smithy/signature-v4@npm:2.1.1" - dependencies: - "@smithy/eventstream-codec": ^2.1.1 - "@smithy/is-array-buffer": ^2.1.1 - "@smithy/types": ^2.9.1 - "@smithy/util-hex-encoding": ^2.1.1 - "@smithy/util-middleware": ^2.1.1 - "@smithy/util-uri-escape": ^2.1.1 - "@smithy/util-utf8": ^2.1.1 - tslib: ^2.5.0 - checksum: fa3d4728b0bcf98e606a6e13a47f91efc6eb9edb6925ba48c3b9cecdf8170adf27e28a0684dabe385e8a7379d0743f52b19cd9a1a01884cd0f75c048c4324fd2 - languageName: node - linkType: hard - -"@smithy/smithy-client@npm:^2.4.0": - version: 2.4.0 - resolution: "@smithy/smithy-client@npm:2.4.0" - dependencies: - "@smithy/middleware-endpoint": ^2.4.2 - "@smithy/middleware-stack": ^2.1.2 - "@smithy/protocol-http": ^3.2.0 - "@smithy/types": ^2.10.0 - "@smithy/util-stream": ^2.1.2 - tslib: ^2.5.0 - checksum: af17a6334e0b19323145482d829b664fcc3102cfbea9682753b9bc328840b9bc1968cd3cf64677cdc23c824194061f8fdf3a905d6f71431547a4ec413d557f92 + "@smithy/middleware-endpoint": ^2.5.0 + "@smithy/middleware-stack": ^2.2.0 + "@smithy/protocol-http": ^3.3.0 + "@smithy/types": ^2.12.0 + "@smithy/util-stream": ^2.2.0 + tslib: ^2.6.2 + checksum: 37a26dd19bc413cd8132c8585588031a25984c24c475db47bae02476e05f698f17511947fc47b89c4ed4f10a29046ba3542d6d338428aeff35e1178a9ecc7a47 languageName: node linkType: hard @@ -16666,185 +16487,186 @@ __metadata: languageName: node linkType: hard -"@smithy/types@npm:^2.10.0, @smithy/types@npm:^2.9.1": - version: 2.10.0 - resolution: "@smithy/types@npm:2.10.0" +"@smithy/types@npm:^2.12.0": + version: 2.12.0 + resolution: "@smithy/types@npm:2.12.0" dependencies: - tslib: ^2.5.0 - checksum: f353ff0d8f91454288585c7e03485c698af70d46490856abe21d1e2f2154f704a68599328297a1151c1585cd5b0f80a83c759f6d8e02ab168ce616e33cba18c4 + tslib: ^2.6.2 + checksum: 2dd93746624d87afbf51c22116fc69f82e95004b78cf681c4a283d908155c22a2b7a3afbd64a3aff7deefb6619276f186e212422ad200df3b42c32ef5330374e languageName: node linkType: hard -"@smithy/url-parser@npm:^2.1.2": - version: 2.1.2 - resolution: "@smithy/url-parser@npm:2.1.2" +"@smithy/url-parser@npm:^2.2.0": + version: 2.2.0 + resolution: "@smithy/url-parser@npm:2.2.0" dependencies: - "@smithy/querystring-parser": ^2.1.2 - "@smithy/types": ^2.10.0 - tslib: ^2.5.0 - checksum: 83aca5a6474e85d835958caed5b486d5e6438682e6c17a5817ebda48ec9936c68b7b39c35a050f7eb4bd3902e83d8008b26d9fc5df7a168502d6ed93848005c6 + "@smithy/querystring-parser": ^2.2.0 + "@smithy/types": ^2.12.0 + tslib: ^2.6.2 + checksum: f21f1e44bc2a4634220465990651f5ee0708cb6759b3685b8a8c00cc2cd64bbbc7807f66cd79ec6e654f7245867d4fb4ced406ad5c14612ebc47eae3f34e63c5 languageName: node linkType: hard -"@smithy/util-base64@npm:^2.1.1": - version: 2.1.1 - resolution: "@smithy/util-base64@npm:2.1.1" +"@smithy/util-base64@npm:^2.3.0": + version: 2.3.0 + resolution: "@smithy/util-base64@npm:2.3.0" dependencies: - "@smithy/util-buffer-from": ^2.1.1 - tslib: ^2.5.0 - checksum: 6dbb93b8745798d56476d37c99dc9f53fe5fc29329b8161fc9e5c55c5a3062916b3e5e4dd596541b248979eefa550d8da7fbb6ab254bf069cb4c920aea6c3590 + "@smithy/util-buffer-from": ^2.2.0 + "@smithy/util-utf8": ^2.3.0 + tslib: ^2.6.2 + checksum: 2ce995c5d12037e9518bb2732f24090bc493d48118dfd6519faa41e19cd91863895bc0b5958b790d2cdeb919a8c410790dcffa3a452d560f0eeab73dc0c92cbd languageName: node linkType: hard -"@smithy/util-body-length-browser@npm:^2.1.1": - version: 2.1.1 - resolution: "@smithy/util-body-length-browser@npm:2.1.1" +"@smithy/util-body-length-browser@npm:^2.2.0": + version: 2.2.0 + resolution: "@smithy/util-body-length-browser@npm:2.2.0" dependencies: - tslib: ^2.5.0 - checksum: 6f7808a41b57a5ab1334f0d036ecec6809a959bcfe6a200f985f35e0c96e72f34fdcb6154873f795835d1d927098055e2dec31ebfb5e5382d1c4c612c80a37c0 + tslib: ^2.6.2 + checksum: e9c1d16b3b95d529011476e6154eaf282d3a983204b29dcf1e7ef04a9f5c2deae30167e06190f315771c813c768f19f486d3139fe9fcaf34d12c2333350f3412 languageName: node linkType: hard -"@smithy/util-body-length-node@npm:^2.2.1": - version: 2.2.1 - resolution: "@smithy/util-body-length-node@npm:2.2.1" +"@smithy/util-body-length-node@npm:^2.3.0": + version: 2.3.0 + resolution: "@smithy/util-body-length-node@npm:2.3.0" dependencies: - tslib: ^2.5.0 - checksum: 6bddc6fac7c9875ae7baaf6088d91192fbe4405bc5c1b69100d52aa1bfebabcc194f5f1b159d8f6f3ade3b54e416f185781970c30a97d4b0a7cec6d02fc490c4 + tslib: ^2.6.2 + checksum: 5d5c31b071e0b3222dcfe863ea2d179253f0dfaa30d03f40ebfa352ed292e00a451053cc523e27527e61094d5ed475069d2287ef19a857c6da0364ca71cfdf3c languageName: node linkType: hard -"@smithy/util-buffer-from@npm:^2.1.1": - version: 2.1.1 - resolution: "@smithy/util-buffer-from@npm:2.1.1" +"@smithy/util-buffer-from@npm:^2.2.0": + version: 2.2.0 + resolution: "@smithy/util-buffer-from@npm:2.2.0" dependencies: - "@smithy/is-array-buffer": ^2.1.1 - tslib: ^2.5.0 - checksum: 8dc7f9afaa356696f14a80cd983a750cbad8eba7c46498ed74fb8ec0cb307f14df64fb10ceb30b2d4792395bb8b216c89155a93dee0f2b3e5cab94fef459a195 + "@smithy/is-array-buffer": ^2.2.0 + tslib: ^2.6.2 + checksum: 424c5b7368ae5880a8f2732e298d17879a19ca925f24ca45e1c6c005f717bb15b76eb28174d308d81631ad457ea0088aab0fd3255dd42f45a535c81944ad64d3 languageName: node linkType: hard -"@smithy/util-config-provider@npm:^2.2.1": - version: 2.2.1 - resolution: "@smithy/util-config-provider@npm:2.2.1" +"@smithy/util-config-provider@npm:^2.3.0": + version: 2.3.0 + resolution: "@smithy/util-config-provider@npm:2.3.0" dependencies: - tslib: ^2.5.0 - checksum: f5b34bcf6ef944779f20d7639070e87a521e1a5620e5a91f2d2dbd764824985930a68b71b0b2bde12e1eaac947155789b73a8c09c1aa7ab923f08e42a4173ef4 + tslib: ^2.6.2 + checksum: 0f3f113c2658bd5a79f98dc28d53ca9c0adf8ec3c8c86c7dd91d2cd37149b4cf83d85cc89d5fe67ffe5cd319ec85f139ef229844eb039017193b307a4c315399 languageName: node linkType: hard -"@smithy/util-defaults-mode-browser@npm:^2.1.2": - version: 2.1.2 - resolution: "@smithy/util-defaults-mode-browser@npm:2.1.2" +"@smithy/util-defaults-mode-browser@npm:^2.2.0": + version: 2.2.0 + resolution: "@smithy/util-defaults-mode-browser@npm:2.2.0" dependencies: - "@smithy/property-provider": ^2.1.2 - "@smithy/smithy-client": ^2.4.0 - "@smithy/types": ^2.10.0 + "@smithy/property-provider": ^2.2.0 + "@smithy/smithy-client": ^2.5.0 + "@smithy/types": ^2.12.0 bowser: ^2.11.0 - tslib: ^2.5.0 - checksum: bc0621f1d5ca46830a4b525def4b829e23336707af28e305758de7f97170024f387a9f3d73e2e29b033ea4963466373df644a304a87291c980159b31cf5ffbcf + tslib: ^2.6.2 + checksum: 4e9d40de4badac66bf786ff3e5bd795e6ccd99f078da5b74881570b0d1401df07441fb9c5abc04dd0735e3efd4f30ee3355f034d42939c1d16015bd7ec65e9b7 languageName: node linkType: hard -"@smithy/util-defaults-mode-node@npm:^2.2.1": - version: 2.2.1 - resolution: "@smithy/util-defaults-mode-node@npm:2.2.1" +"@smithy/util-defaults-mode-node@npm:^2.3.0": + version: 2.3.0 + resolution: "@smithy/util-defaults-mode-node@npm:2.3.0" dependencies: - "@smithy/config-resolver": ^2.1.2 - "@smithy/credential-provider-imds": ^2.2.2 - "@smithy/node-config-provider": ^2.2.2 - "@smithy/property-provider": ^2.1.2 - "@smithy/smithy-client": ^2.4.0 - "@smithy/types": ^2.10.0 - tslib: ^2.5.0 - checksum: 672c13329e37d61170fb6c997b416fe9216efb6308b2e15560f5a96089bd839018d4705fb541aed0717dd1e1574e3dfc835f37a9608679713ee679d1d7c17642 + "@smithy/config-resolver": ^2.2.0 + "@smithy/credential-provider-imds": ^2.3.0 + "@smithy/node-config-provider": ^2.3.0 + "@smithy/property-provider": ^2.2.0 + "@smithy/smithy-client": ^2.5.0 + "@smithy/types": ^2.12.0 + tslib: ^2.6.2 + checksum: d7dc243ec364b2b246dbeb096b305c4aaa8b95950c7cd716a5dcf69b70255ae06595009f944924589ae798fb4cb2638a814252daf0d843980cb3facf99086836 languageName: node linkType: hard -"@smithy/util-endpoints@npm:^1.1.2": - version: 1.1.2 - resolution: "@smithy/util-endpoints@npm:1.1.2" +"@smithy/util-endpoints@npm:^1.2.0": + version: 1.2.0 + resolution: "@smithy/util-endpoints@npm:1.2.0" dependencies: - "@smithy/node-config-provider": ^2.2.2 - "@smithy/types": ^2.10.0 - tslib: ^2.5.0 - checksum: 261f383e64116f767cc8e304a647c47261fee8425c43e517511e1bf8ec5e72652b8a12c65259ca4557f3fba477662606253d4cf89ccab5af184a05c59d2d735f + "@smithy/node-config-provider": ^2.3.0 + "@smithy/types": ^2.12.0 + tslib: ^2.6.2 + checksum: 19a59b1c9b214457371d4d7109b190c237de5ebd06f5b4f3665dddc5fe0879dbb19bcdc5dec23d1825cd04388b7f9bf7fddf354e1a23e84d9c690ad21e71cb86 languageName: node linkType: hard -"@smithy/util-hex-encoding@npm:^2.1.1": - version: 2.1.1 - resolution: "@smithy/util-hex-encoding@npm:2.1.1" +"@smithy/util-hex-encoding@npm:^2.2.0": + version: 2.2.0 + resolution: "@smithy/util-hex-encoding@npm:2.2.0" dependencies: - tslib: ^2.5.0 - checksum: eae5c94fd4d57dccbae5ad4d7684787b1e9b1df944cf9fcb497cbefaed6aec49c0a777cc1ea4d10fa7002b82f0b73b8830ae2efe98ed35a62dcf3c4f7d08a4cd + tslib: ^2.6.2 + checksum: 7d14589bc4a44eebf878595290c53ee4d90cc6b5445b5fe130608d6dea477c292730b85e4e08190a1555ef7664214f0f00dc478ba725516787a49fff658e725e languageName: node linkType: hard -"@smithy/util-middleware@npm:^2.1.1, @smithy/util-middleware@npm:^2.1.2": - version: 2.1.2 - resolution: "@smithy/util-middleware@npm:2.1.2" +"@smithy/util-middleware@npm:^2.2.0": + version: 2.2.0 + resolution: "@smithy/util-middleware@npm:2.2.0" dependencies: - "@smithy/types": ^2.10.0 - tslib: ^2.5.0 - checksum: 8a05c05ba1358515aa6881189cd4a6a57701e8cd9e036c8d7219662fd12bce1695a4970c247314e0020f13bb506a558545ab5c519373647be89d79af08d5bcdf + "@smithy/types": ^2.12.0 + tslib: ^2.6.2 + checksum: 312dc86e5415a12e2580a02311750b350aec8fb9da5a60c3010c10694990ded869b7ca5b87aa20e5facbacdd233e928e418b7765d7797019cd48177052aedd03 languageName: node linkType: hard -"@smithy/util-retry@npm:^2.1.2": - version: 2.1.2 - resolution: "@smithy/util-retry@npm:2.1.2" +"@smithy/util-retry@npm:^2.2.0": + version: 2.2.0 + resolution: "@smithy/util-retry@npm:2.2.0" dependencies: - "@smithy/service-error-classification": ^2.1.2 - "@smithy/types": ^2.10.0 - tslib: ^2.5.0 - checksum: 3be4b984b0f1daa54948fe158568a41003f725464ef32f0ccf32e02b566545364bd6f89a380a218397742edd1ad1d214906fab27debce531c137bfceca0c9c6d + "@smithy/service-error-classification": ^2.1.5 + "@smithy/types": ^2.12.0 + tslib: ^2.6.2 + checksum: 1a8071c8ac5a2646b3d3894e3bd9c36a9db045f52eadb194f32b02d2fdedd69fb267a2b02bcef9f91d0f8f3fe061754ac075d07ac166d90894acb27d68c62a41 languageName: node linkType: hard -"@smithy/util-stream@npm:^2.1.2": - version: 2.1.2 - resolution: "@smithy/util-stream@npm:2.1.2" +"@smithy/util-stream@npm:^2.2.0": + version: 2.2.0 + resolution: "@smithy/util-stream@npm:2.2.0" dependencies: - "@smithy/fetch-http-handler": ^2.4.2 - "@smithy/node-http-handler": ^2.4.0 - "@smithy/types": ^2.10.0 - "@smithy/util-base64": ^2.1.1 - "@smithy/util-buffer-from": ^2.1.1 - "@smithy/util-hex-encoding": ^2.1.1 - "@smithy/util-utf8": ^2.1.1 - tslib: ^2.5.0 - checksum: 8b95535323fcf3ce86cbb070791405afd4de1513a38fef209bfc4d5b2ed91ae16ae40393dd8a5f8b127194ec023cc264808f87beef0678219f56b2bcb580eb65 + "@smithy/fetch-http-handler": ^2.5.0 + "@smithy/node-http-handler": ^2.5.0 + "@smithy/types": ^2.12.0 + "@smithy/util-base64": ^2.3.0 + "@smithy/util-buffer-from": ^2.2.0 + "@smithy/util-hex-encoding": ^2.2.0 + "@smithy/util-utf8": ^2.3.0 + tslib: ^2.6.2 + checksum: f0febd1a7558201d9178c0018478f89729800e9b8962dc735ec99f41ce01d1128373e3bd6008f0b4ff79b25ee4476db4fd5fa18d6feeb8b5b715d416da7027c3 languageName: node linkType: hard -"@smithy/util-uri-escape@npm:^2.1.1": - version: 2.1.1 - resolution: "@smithy/util-uri-escape@npm:2.1.1" +"@smithy/util-uri-escape@npm:^2.2.0": + version: 2.2.0 + resolution: "@smithy/util-uri-escape@npm:2.2.0" dependencies: - tslib: ^2.5.0 - checksum: 822ed7390e28d5c7b8dab5e5c5a8de998e0778220137962a71b47b2d8900289d48a3a2c9945e68e1cac921d43f61660045e7fdffe8df9e63004575fcf2aa99b2 + tslib: ^2.6.2 + checksum: bade35312d75d1c84226f2a81b70dfef91766c02ecb6c6854b6f920cddb423e01963f7d0c183d523b5991f8e7ca93bcf73f8b3c6923979152b8350c9f3c24fd6 languageName: node linkType: hard -"@smithy/util-utf8@npm:^2.0.0, @smithy/util-utf8@npm:^2.1.1": - version: 2.1.1 - resolution: "@smithy/util-utf8@npm:2.1.1" +"@smithy/util-utf8@npm:^2.0.0, @smithy/util-utf8@npm:^2.3.0": + version: 2.3.0 + resolution: "@smithy/util-utf8@npm:2.3.0" dependencies: - "@smithy/util-buffer-from": ^2.1.1 - tslib: ^2.5.0 - checksum: 286ce5cba3f45a8abd3d6c28e40b3204dd64300340818d77e42c1cbb0c2f6ad0c42f0e47ffaf38d74d0895b0dfd1750c5b55222ab4d205a3b39da4325971d303 + "@smithy/util-buffer-from": ^2.2.0 + tslib: ^2.6.2 + checksum: 00e55d4b4e37d48be0eef3599082402b933c52a1407fed7e8e8ad76d94d81a0b30b8bfaf2047c59d9c3af31e5f20e7a8c959cb7ae270f894255e05a2229964f0 languageName: node linkType: hard -"@smithy/util-waiter@npm:^2.1.2": - version: 2.1.2 - resolution: "@smithy/util-waiter@npm:2.1.2" +"@smithy/util-waiter@npm:^2.2.0": + version: 2.2.0 + resolution: "@smithy/util-waiter@npm:2.2.0" dependencies: - "@smithy/abort-controller": ^2.1.2 - "@smithy/types": ^2.10.0 - tslib: ^2.5.0 - checksum: 089e777701ff2d6d8910f843c73de0d504221064401a02e56f104b5a50c66abfe8c8fa41c9e9ec62c8b6088f234cd995afccd9e2220fa7b7c8fcbf67fe343062 + "@smithy/abort-controller": ^2.2.0 + "@smithy/types": ^2.12.0 + tslib: ^2.6.2 + checksum: 303f56beb9ba4afada862eff4950a17d904a4fdfc01bd8acb932b0457e457730981162777004414252e700014c554d894a1ce9d32e0bad75e1a4a2ca6492429e languageName: node linkType: hard @@ -16861,54 +16683,54 @@ __metadata: languageName: node linkType: hard -"@spotify/eslint-config-base@npm:^14.0.0": - version: 14.0.1 - resolution: "@spotify/eslint-config-base@npm:14.0.1" +"@spotify/eslint-config-base@npm:^15.0.0": + version: 15.0.0 + resolution: "@spotify/eslint-config-base@npm:15.0.0" peerDependencies: eslint: ">=7.x" - checksum: 8893e7c903c07ede7f3a03b5b6af03b65d2f334615d30fecb527ce4d888970168b73dbaef43275f9ece9e7b0193e13e6807e506507b32bdde9b64000cc52c8b1 + checksum: 265a4d807b5236030466a3a8373f41e51a9b4939b450d47ed2cb4704485004a5d64b2f9e024e865b4f5eea61ab6bbe439442e4ca2ac06e52a3b5c7e94c2d6b27 languageName: node linkType: hard -"@spotify/eslint-config-react@npm:^14.0.0": - version: 14.0.1 - resolution: "@spotify/eslint-config-react@npm:14.0.1" +"@spotify/eslint-config-react@npm:^15.0.0": + version: 15.0.0 + resolution: "@spotify/eslint-config-react@npm:15.0.0" peerDependencies: eslint: ">=8.x" eslint-plugin-jsx-a11y: 6.x eslint-plugin-react: ">=7.7.0 <8" eslint-plugin-react-hooks: ^4.0.0 - checksum: d8545c3c3967bb8b923bd55dad2c50b5e2eb6d716cd9dcbbfa32417c3a6e786537ee3263ebedae99bd45abe3378acb0879c9644a729820ea61dd5d9e45e55465 + checksum: 42e16f63d51b2230d2e4eba6524d2d9278d480827c5d2ab32f96253bafd4d8ceb87c37d8429601e36642ff30c86b92011ad4efd26c83db4037478ad118497cce languageName: node linkType: hard -"@spotify/eslint-config-typescript@npm:^14.0.0": - version: 14.0.1 - resolution: "@spotify/eslint-config-typescript@npm:14.0.1" +"@spotify/eslint-config-typescript@npm:^15.0.0": + version: 15.0.0 + resolution: "@spotify/eslint-config-typescript@npm:15.0.0" peerDependencies: "@typescript-eslint/eslint-plugin": ">=5" "@typescript-eslint/parser": ">=5" eslint: ">=8.x" - checksum: faf3ab89880e626d388e9ae212dd3486d6f91ca4d079020066c22d44c3df215dc61439c4e65ef3fc4eb5c3ea9893d5b504a2d251694d7a333d8803991349535b + checksum: d30d07e1e2e0e18cc583a72ca74b5fdb80ee26e6529de26e1e85d1416ca5396c942efaccc2613287365c7ac3659378b0ba0cdda3df25c7e5cdbd7317f1cbe885 languageName: node linkType: hard -"@spotify/eslint-plugin@npm:^14.1.3": - version: 14.1.3 - resolution: "@spotify/eslint-plugin@npm:14.1.3" +"@spotify/eslint-plugin@npm:^15.0.0": + version: 15.0.0 + resolution: "@spotify/eslint-plugin@npm:15.0.0" peerDependencies: "@typescript-eslint/parser": ^5.13.0 - eslint: ^8.10.0 - checksum: 788f5d9aab6f7b6c0ad7e414ebd5f4504f058f26a769dc4bcd0088dd8e6d9e5334965c8f6fffcf5b7ed52dbe25de0dc7bba403bcffa79b6d94c7ba3094757b5f + eslint: ">=8.x" + checksum: 899166abb108f1f53867729a35fb711d89dc70d5fc0a725a80386adb85805149008f7226262619044680264c64c0a8a0e9703059f64d0b390650bcae86727ed6 languageName: node linkType: hard -"@spotify/prettier-config@npm:^14.0.0": - version: 14.0.1 - resolution: "@spotify/prettier-config@npm:14.0.1" +"@spotify/prettier-config@npm:^15.0.0": + version: 15.0.0 + resolution: "@spotify/prettier-config@npm:15.0.0" peerDependencies: prettier: 2.x - checksum: 07fb33ff3bb4678ab3bfe2f6f5da2cfb366de427c544e94178f5f8c75b3708282f7ea1a4344404e4ad1bbc5b38fccfde10795528cdfe7f61a8afed62076f8fe9 + checksum: aa5ec5739427f9acdb9d62ae6c04f04a344898567239f7ee45c75c6205ebdffbc61747ea8de6e83baf0bc3785359967de4b7097a8723c4b4063ff57dc5cb6c44 languageName: node linkType: hard @@ -17364,409 +17186,408 @@ __metadata: languageName: node linkType: hard -"@swagger-api/apidom-ast@npm:^0.92.0": - version: 0.92.0 - resolution: "@swagger-api/apidom-ast@npm:0.92.0" +"@swagger-api/apidom-ast@npm:^0.97.0": + version: 0.97.0 + resolution: "@swagger-api/apidom-ast@npm:0.97.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-error": ^0.92.0 + "@swagger-api/apidom-error": ^0.97.0 "@types/ramda": ~0.29.6 ramda: ~0.29.1 ramda-adjunct: ^4.1.1 - stampit: ^4.3.2 unraw: ^3.0.0 - checksum: 11770246944b3bb5964a88e71a7e32e37691b7a3b6ec9ae6acf58cd580571ca75c079d749bb952cd08c86be2155cbef3ed418ad6194681e1e2fea643a2128af2 + checksum: 447d66bd742a8bbea8b3d0d2d6ddef2e1384107ef6e0105342694f6fc087c1712cc82f165d7349cbd64ce0703e684892f0d6c3e5303c743d20f101348cdf54dc languageName: node linkType: hard -"@swagger-api/apidom-core@npm:>=0.90.0 <1.0.0, @swagger-api/apidom-core@npm:^0.92.0": - version: 0.92.0 - resolution: "@swagger-api/apidom-core@npm:0.92.0" +"@swagger-api/apidom-core@npm:>=0.97.0 <1.0.0, @swagger-api/apidom-core@npm:^0.97.0": + version: 0.97.0 + resolution: "@swagger-api/apidom-core@npm:0.97.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-ast": ^0.92.0 - "@swagger-api/apidom-error": ^0.92.0 + "@swagger-api/apidom-ast": ^0.97.0 + "@swagger-api/apidom-error": ^0.97.0 "@types/ramda": ~0.29.6 minim: ~0.23.8 ramda: ~0.29.1 ramda-adjunct: ^4.1.1 short-unique-id: ^5.0.2 stampit: ^4.3.2 - checksum: e02f1a838ab1d811960a48f98922c66bb306f1a5a1a154b8fe4c6445fb0a20c671409fee14a2e49051387bc7b5c28e218161bcc1519c6ad9cbc767bf432ee05d + checksum: 8d2658fcb3f1241cf78c7b551a55930ab8b530fe7a579993f5265bf2d70c9c2e4d73863bd99d5b7ea6c94d5de49a7f7f6b0abcab7370317cacc1f4221709f056 languageName: node linkType: hard -"@swagger-api/apidom-error@npm:>=0.90.0 <1.0.0, @swagger-api/apidom-error@npm:^0.92.0": - version: 0.92.0 - resolution: "@swagger-api/apidom-error@npm:0.92.0" +"@swagger-api/apidom-error@npm:>=0.97.0 <1.0.0, @swagger-api/apidom-error@npm:^0.97.0": + version: 0.97.0 + resolution: "@swagger-api/apidom-error@npm:0.97.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - checksum: bdd3051a47f4300344c0f1f2a55c4bb3dbe147ba8ebd27c94a77db2c90e8cc371bca63b72dfb49d0034794b82929edbf70d20ab33f59ba9f8c2d2fc8dc0430db + checksum: a32322d59dd6b2cf0c209d1af9efdc645869136d7655ab49749e5daf3c6851ea2204256f7343d080e0989b896448b879aabfe98b3e6245919c1cf622705a9cde languageName: node linkType: hard -"@swagger-api/apidom-json-pointer@npm:>=0.90.0 <1.0.0, @swagger-api/apidom-json-pointer@npm:^0.92.0": - version: 0.92.0 - resolution: "@swagger-api/apidom-json-pointer@npm:0.92.0" +"@swagger-api/apidom-json-pointer@npm:>=0.97.0 <1.0.0, @swagger-api/apidom-json-pointer@npm:^0.97.0": + version: 0.97.0 + resolution: "@swagger-api/apidom-json-pointer@npm:0.97.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.92.0 - "@swagger-api/apidom-error": ^0.92.0 + "@swagger-api/apidom-core": ^0.97.0 + "@swagger-api/apidom-error": ^0.97.0 "@types/ramda": ~0.29.6 ramda: ~0.29.1 ramda-adjunct: ^4.0.0 - checksum: 89d748fd1f52fce381d4e07710244d94c4d9f8a20411ca8bcfb33e7ec515432c7766660b296a9c603fa6b861b39eca4917151f98f3688f1bdcf10f25f9d90134 + checksum: d41bfd104ef57128225e0235b7454828cfd9d0ab4ee9fa9089a9ec12d60446c4b3a3840ec215076b45d58d251aa98766907898bcbee92404a19ecd3cb89b8817 languageName: node linkType: hard -"@swagger-api/apidom-ns-api-design-systems@npm:^0.92.0": - version: 0.92.0 - resolution: "@swagger-api/apidom-ns-api-design-systems@npm:0.92.0" +"@swagger-api/apidom-ns-api-design-systems@npm:^0.97.0": + version: 0.97.0 + resolution: "@swagger-api/apidom-ns-api-design-systems@npm:0.97.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.92.0 - "@swagger-api/apidom-error": ^0.92.0 - "@swagger-api/apidom-ns-openapi-3-1": ^0.92.0 + "@swagger-api/apidom-core": ^0.97.0 + "@swagger-api/apidom-error": ^0.97.0 + "@swagger-api/apidom-ns-openapi-3-1": ^0.97.0 + "@types/ramda": ~0.29.6 + ramda: ~0.29.1 + ramda-adjunct: ^4.1.1 + ts-mixer: ^6.0.3 + checksum: 1413919eff2b1d0a2962299ac32375707b1aaa1f8575778a2cd200dd4add1118d6191ad6501c73e4ffe9c48c35446d74dc86743821535d726e4c3d566acef2c6 + languageName: node + linkType: hard + +"@swagger-api/apidom-ns-asyncapi-2@npm:^0.97.0": + version: 0.97.0 + resolution: "@swagger-api/apidom-ns-asyncapi-2@npm:0.97.0" + dependencies: + "@babel/runtime-corejs3": ^7.20.7 + "@swagger-api/apidom-core": ^0.97.0 + "@swagger-api/apidom-ns-json-schema-draft-7": ^0.97.0 + "@types/ramda": ~0.29.6 + ramda: ~0.29.1 + ramda-adjunct: ^4.1.1 + ts-mixer: ^6.0.3 + checksum: 13fff868db0ef2cc9ced74fb4e34a67fb15fb815228b81034a9dc4229ad5587acff58ee73e4c49494a1ee0f2f91b75f1c1d07fb43cb57370847b7dbab0af4ba3 + languageName: node + linkType: hard + +"@swagger-api/apidom-ns-json-schema-draft-4@npm:^0.97.0": + version: 0.97.0 + resolution: "@swagger-api/apidom-ns-json-schema-draft-4@npm:0.97.0" + dependencies: + "@babel/runtime-corejs3": ^7.20.7 + "@swagger-api/apidom-ast": ^0.97.0 + "@swagger-api/apidom-core": ^0.97.0 "@types/ramda": ~0.29.6 ramda: ~0.29.1 ramda-adjunct: ^4.1.1 stampit: ^4.3.2 - checksum: 8e993f6b8cd37cb9857a34437e2b16e087ccce524373726a167bf98ab622c44a03c47c81e218ff4b00aa7bd973a25bd696e2437c5fd018ace09ba2ad0fcda9de + checksum: 404dbc22dbc612753768af6f2d254ac9b85004fb4f16039513277b08e58528d305e4bc965f1dd2f4967df195723d0d887a6c9ed6948dc7cf98f1428b0aa3dcaf languageName: node linkType: hard -"@swagger-api/apidom-ns-asyncapi-2@npm:^0.92.0": - version: 0.92.0 - resolution: "@swagger-api/apidom-ns-asyncapi-2@npm:0.92.0" +"@swagger-api/apidom-ns-json-schema-draft-6@npm:^0.97.0": + version: 0.97.0 + resolution: "@swagger-api/apidom-ns-json-schema-draft-6@npm:0.97.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.92.0 - "@swagger-api/apidom-ns-json-schema-draft-7": ^0.92.0 + "@swagger-api/apidom-core": ^0.97.0 + "@swagger-api/apidom-error": ^0.97.0 + "@swagger-api/apidom-ns-json-schema-draft-4": ^0.97.0 "@types/ramda": ~0.29.6 ramda: ~0.29.1 ramda-adjunct: ^4.1.1 stampit: ^4.3.2 - checksum: bef3de2c2a854590c8bb1cd892a5b170b65e14119a97528652457bf1e3e19f4a05d7da41ddb697f64de9972c8fad8afc7e6ccfa97ce8809fc9eba8c1305d509c + checksum: 7c8f4c12096bc7f029dee35d13a2675b970f6bb2cc03d0f698d4e4f9b3b239294eb1b3d8456edbaa1f29dbe2c89bfa58b0cd91084c3c2394d2692b5debe87675 languageName: node linkType: hard -"@swagger-api/apidom-ns-json-schema-draft-4@npm:^0.92.0": - version: 0.92.0 - resolution: "@swagger-api/apidom-ns-json-schema-draft-4@npm:0.92.0" +"@swagger-api/apidom-ns-json-schema-draft-7@npm:^0.97.0": + version: 0.97.0 + resolution: "@swagger-api/apidom-ns-json-schema-draft-7@npm:0.97.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-ast": ^0.92.0 - "@swagger-api/apidom-core": ^0.92.0 + "@swagger-api/apidom-core": ^0.97.0 + "@swagger-api/apidom-error": ^0.97.0 + "@swagger-api/apidom-ns-json-schema-draft-6": ^0.97.0 "@types/ramda": ~0.29.6 ramda: ~0.29.1 ramda-adjunct: ^4.1.1 stampit: ^4.3.2 - checksum: 6b0d57acf1c34df314c401ab25d0feb3ad5638fc8c848f6b84c76691fef177a39a9e8ebfa16309d22c764d9bfb292ed5ad39943b2cece67dde746a6e9d5fdc12 + checksum: b59d769d67d718a5a9124164cf9f22408a0ef11457d3fd8e82c006096a17e20ad92def5711b6f7f12c7865232f5b01d8d30da95718b625223d67312a39e05cde languageName: node linkType: hard -"@swagger-api/apidom-ns-json-schema-draft-6@npm:^0.92.0": - version: 0.92.0 - resolution: "@swagger-api/apidom-ns-json-schema-draft-6@npm:0.92.0" +"@swagger-api/apidom-ns-openapi-2@npm:^0.97.0": + version: 0.97.0 + resolution: "@swagger-api/apidom-ns-openapi-2@npm:0.97.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.92.0 - "@swagger-api/apidom-error": ^0.92.0 - "@swagger-api/apidom-ns-json-schema-draft-4": ^0.92.0 + "@swagger-api/apidom-core": ^0.97.0 + "@swagger-api/apidom-error": ^0.97.0 + "@swagger-api/apidom-ns-json-schema-draft-4": ^0.97.0 "@types/ramda": ~0.29.6 ramda: ~0.29.1 ramda-adjunct: ^4.1.1 - stampit: ^4.3.2 - checksum: 5660459753ff1359527e61820db59a6465ecc8b51cc5a6c14e155b2144b67570c6fc2c7c41d97617470d1478b85e26879fadc3f1ff4460c6309411c13db209e6 + ts-mixer: ^6.0.3 + checksum: bd9527915eaa454e290abbbc29ff59798e1be47e29ebf269b8aed799da25c507cd413b07c655c38cad2d442cc754970f91e1e657b46ec92df72bab71868face6 languageName: node linkType: hard -"@swagger-api/apidom-ns-json-schema-draft-7@npm:^0.92.0": - version: 0.92.0 - resolution: "@swagger-api/apidom-ns-json-schema-draft-7@npm:0.92.0" +"@swagger-api/apidom-ns-openapi-3-0@npm:^0.97.0": + version: 0.97.0 + resolution: "@swagger-api/apidom-ns-openapi-3-0@npm:0.97.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.92.0 - "@swagger-api/apidom-error": ^0.92.0 - "@swagger-api/apidom-ns-json-schema-draft-6": ^0.92.0 + "@swagger-api/apidom-core": ^0.97.0 + "@swagger-api/apidom-error": ^0.97.0 + "@swagger-api/apidom-ns-json-schema-draft-4": ^0.97.0 "@types/ramda": ~0.29.6 ramda: ~0.29.1 ramda-adjunct: ^4.1.1 - stampit: ^4.3.2 - checksum: 838d2b9917b4086880156e895d67adfd6400236e97b2a75814356dc55b0d45afd3e458bfe97b52af39aeea4c3483fc40f7a1551af14285977009513a168fb87c + ts-mixer: ^6.0.3 + checksum: 7d4d63af782486fa6899f8fbc8c01296d08973034605ff9433016a4e4233f595a27baa118f9b553225897aee3777d1a6db607b00089f551820e5dc2d0b4152da languageName: node linkType: hard -"@swagger-api/apidom-ns-openapi-2@npm:^0.92.0": - version: 0.92.0 - resolution: "@swagger-api/apidom-ns-openapi-2@npm:0.92.0" +"@swagger-api/apidom-ns-openapi-3-1@npm:>=0.97.0 <1.0.0, @swagger-api/apidom-ns-openapi-3-1@npm:^0.97.0": + version: 0.97.0 + resolution: "@swagger-api/apidom-ns-openapi-3-1@npm:0.97.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.92.0 - "@swagger-api/apidom-error": ^0.92.0 - "@swagger-api/apidom-ns-json-schema-draft-4": ^0.92.0 + "@swagger-api/apidom-ast": ^0.97.0 + "@swagger-api/apidom-core": ^0.97.0 + "@swagger-api/apidom-ns-openapi-3-0": ^0.97.0 "@types/ramda": ~0.29.6 ramda: ~0.29.1 ramda-adjunct: ^4.1.1 - stampit: ^4.3.2 - checksum: 154de0b299a3ff0fcac40cf995dafb8c173cb4e294c75f952a9fa9cd5452eaab7783a9e5abb425fbc6e7135466155645e9b96fa9495f3effa7aec18f3152e6c3 + ts-mixer: ^6.0.3 + checksum: ab87430addb3e57d760e7435c1a09c107077c55213cd423d985e9a78c355123001f547b1637fcf9ba50af54c45be6dc4390cd1824d55e2b837f042e4ab0b3f36 languageName: node linkType: hard -"@swagger-api/apidom-ns-openapi-3-0@npm:^0.92.0": - version: 0.92.0 - resolution: "@swagger-api/apidom-ns-openapi-3-0@npm:0.92.0" +"@swagger-api/apidom-ns-workflows-1@npm:^0.97.0": + version: 0.97.0 + resolution: "@swagger-api/apidom-ns-workflows-1@npm:0.97.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.92.0 - "@swagger-api/apidom-error": ^0.92.0 - "@swagger-api/apidom-ns-json-schema-draft-4": ^0.92.0 + "@swagger-api/apidom-core": ^0.97.0 + "@swagger-api/apidom-ns-openapi-3-1": ^0.97.0 "@types/ramda": ~0.29.6 ramda: ~0.29.1 ramda-adjunct: ^4.1.1 - stampit: ^4.3.2 - checksum: 9ae883feea63c06f2514ba834b637bd00d6a56c35fe9b875507698d991199202d307a90bd06ebeaeb5642e3e42fe54238249858568c8a61a1797792fa5fff259 + ts-mixer: ^6.0.3 + checksum: 70079907606c264b82c591ec9bf659f210770d9facf5cea3ae8a3887aa6fdb61c4e1bc1988bea83c75000322e70873cdc0e4fd27132f19a9ffb97bb8b0ea04dd languageName: node linkType: hard -"@swagger-api/apidom-ns-openapi-3-1@npm:>=0.90.0 <1.0.0, @swagger-api/apidom-ns-openapi-3-1@npm:^0.92.0": - version: 0.92.0 - resolution: "@swagger-api/apidom-ns-openapi-3-1@npm:0.92.0" +"@swagger-api/apidom-parser-adapter-api-design-systems-json@npm:^0.97.0": + version: 0.97.0 + resolution: "@swagger-api/apidom-parser-adapter-api-design-systems-json@npm:0.97.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-ast": ^0.92.0 - "@swagger-api/apidom-core": ^0.92.0 - "@swagger-api/apidom-ns-openapi-3-0": ^0.92.0 - "@types/ramda": ~0.29.6 - ramda: ~0.29.1 - ramda-adjunct: ^4.1.1 - stampit: ^4.3.2 - checksum: 316861ccd563d28c46039fa4202337f2266e0b99bf803bc71f64d307d824a74dcf7e4cdf7fc4ac25d6cf3521aebc74938c2001eb74ef0c364bc02470a1ffc723 - languageName: node - linkType: hard - -"@swagger-api/apidom-ns-workflows-1@npm:^0.92.0": - version: 0.92.0 - resolution: "@swagger-api/apidom-ns-workflows-1@npm:0.92.0" - dependencies: - "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.92.0 - "@swagger-api/apidom-ns-openapi-3-1": ^0.92.0 - "@types/ramda": ~0.29.6 - ramda: ~0.29.1 - ramda-adjunct: ^4.1.1 - stampit: ^4.3.2 - checksum: 684804790b58b52a28ae10ffc7fc2fa5bf6b99d8cb3e5d9409e28325c4d4b9ce5b5cc10e0cc401fb21788753ea65287e33db79337388afccd54f6902f60d9159 - languageName: node - linkType: hard - -"@swagger-api/apidom-parser-adapter-api-design-systems-json@npm:^0.92.0": - version: 0.92.0 - resolution: "@swagger-api/apidom-parser-adapter-api-design-systems-json@npm:0.92.0" - dependencies: - "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.92.0 - "@swagger-api/apidom-ns-api-design-systems": ^0.92.0 - "@swagger-api/apidom-parser-adapter-json": ^0.92.0 + "@swagger-api/apidom-core": ^0.97.0 + "@swagger-api/apidom-ns-api-design-systems": ^0.97.0 + "@swagger-api/apidom-parser-adapter-json": ^0.97.0 "@types/ramda": ~0.29.6 ramda: ~0.29.1 ramda-adjunct: ^4.0.0 - checksum: d9c361b8bb7b8a056acc2c52ef70a2d7304c511efc836cfebc315558ced7e93fe4e958dd554030a3315702d49ace30082ff7f2f91e9a76aaa2fff944a19fe39e + checksum: 36283626a9bd68d6d9c972666e6470fcaa3d45d57278d0f3aed6be37f9fe58fe842812fa082aca280456b21267b415c25b144aa636b1b588832925f795b8c508 languageName: node linkType: hard -"@swagger-api/apidom-parser-adapter-api-design-systems-yaml@npm:^0.92.0": - version: 0.92.0 - resolution: "@swagger-api/apidom-parser-adapter-api-design-systems-yaml@npm:0.92.0" +"@swagger-api/apidom-parser-adapter-api-design-systems-yaml@npm:^0.97.0": + version: 0.97.0 + resolution: "@swagger-api/apidom-parser-adapter-api-design-systems-yaml@npm:0.97.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.92.0 - "@swagger-api/apidom-ns-api-design-systems": ^0.92.0 - "@swagger-api/apidom-parser-adapter-yaml-1-2": ^0.92.0 + "@swagger-api/apidom-core": ^0.97.0 + "@swagger-api/apidom-ns-api-design-systems": ^0.97.0 + "@swagger-api/apidom-parser-adapter-yaml-1-2": ^0.97.0 "@types/ramda": ~0.29.6 ramda: ~0.29.1 ramda-adjunct: ^4.0.0 - checksum: 248e61ed6e202eeab048c7c5e3eff0e0f2b6bfea958a02cbc6d8b831693a015d063db118af25c2e7380a4828ab84bf991764d200409a8eb99ffadb0dc6db65c0 + checksum: c5ca7eb0f789ebb86c89e5b098d62e2e1dd67e11be84362a85718dadf858cabdfab7da52f594adaa4ce06b112918f08f43b374aaf8e8723ca3ee4d0a97062a3a languageName: node linkType: hard -"@swagger-api/apidom-parser-adapter-asyncapi-json-2@npm:^0.92.0": - version: 0.92.0 - resolution: "@swagger-api/apidom-parser-adapter-asyncapi-json-2@npm:0.92.0" +"@swagger-api/apidom-parser-adapter-asyncapi-json-2@npm:^0.97.0": + version: 0.97.0 + resolution: "@swagger-api/apidom-parser-adapter-asyncapi-json-2@npm:0.97.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.92.0 - "@swagger-api/apidom-ns-asyncapi-2": ^0.92.0 - "@swagger-api/apidom-parser-adapter-json": ^0.92.0 + "@swagger-api/apidom-core": ^0.97.0 + "@swagger-api/apidom-ns-asyncapi-2": ^0.97.0 + "@swagger-api/apidom-parser-adapter-json": ^0.97.0 "@types/ramda": ~0.29.6 ramda: ~0.29.1 ramda-adjunct: ^4.0.0 - checksum: 0fc981bc839758af1b3a8dfa0695376919a515a11ae71e6f9f1e0c91dd1530aa659fa7405cb73109db28fd95f594f09b5ee941611cc4ce4f3d1817335b12ec4b + checksum: 1665752ed68e4ea4193cd2d5bd486d8c19db9a065804606f0b731af0e909a4cb312a0b1c55893a6b7221e38e32132a1dc40558327c9cebc2b7a768fad131edc6 languageName: node linkType: hard -"@swagger-api/apidom-parser-adapter-asyncapi-yaml-2@npm:^0.92.0": - version: 0.92.0 - resolution: "@swagger-api/apidom-parser-adapter-asyncapi-yaml-2@npm:0.92.0" +"@swagger-api/apidom-parser-adapter-asyncapi-yaml-2@npm:^0.97.0": + version: 0.97.0 + resolution: "@swagger-api/apidom-parser-adapter-asyncapi-yaml-2@npm:0.97.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.92.0 - "@swagger-api/apidom-ns-asyncapi-2": ^0.92.0 - "@swagger-api/apidom-parser-adapter-yaml-1-2": ^0.92.0 + "@swagger-api/apidom-core": ^0.97.0 + "@swagger-api/apidom-ns-asyncapi-2": ^0.97.0 + "@swagger-api/apidom-parser-adapter-yaml-1-2": ^0.97.0 "@types/ramda": ~0.29.6 ramda: ~0.29.1 ramda-adjunct: ^4.0.0 - checksum: a1554f73cc20b75df71296322f6bdf5b5a0f1d775bd9bff89d7798843606e1a383c48960ddc2b1f879c962d2d56962e6096c3000ec2ad6091d49627aa2992b2e + checksum: 365806b5475670b8556bd818c2507003a6e42158f563b954368d0de173a0f140b9b339bcb3f8f2eb883799444b926284fd05e65cbd18556cf01fb7e172f38537 languageName: node linkType: hard -"@swagger-api/apidom-parser-adapter-json@npm:^0.92.0": - version: 0.92.0 - resolution: "@swagger-api/apidom-parser-adapter-json@npm:0.92.0" +"@swagger-api/apidom-parser-adapter-json@npm:^0.97.0": + version: 0.97.0 + resolution: "@swagger-api/apidom-parser-adapter-json@npm:0.97.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-ast": ^0.92.0 - "@swagger-api/apidom-core": ^0.92.0 - "@swagger-api/apidom-error": ^0.92.0 + "@swagger-api/apidom-ast": ^0.97.0 + "@swagger-api/apidom-core": ^0.97.0 + "@swagger-api/apidom-error": ^0.97.0 "@types/ramda": ~0.29.6 node-gyp: latest ramda: ~0.29.1 ramda-adjunct: ^4.1.1 tree-sitter: =0.20.4 - tree-sitter-json: =0.20.1 + tree-sitter-json: =0.20.2 web-tree-sitter: =0.20.3 - checksum: ca66dd9fffaa84249398420b9cf2301721d2b173340e0f07097348b73654f54698a370a94d814d7f51b7e662f968054b7fc745607074dbd71892c53714a18b62 + checksum: 5aa68b41e496f527e4413d82183ca6dad6631f315cc9cedaf6e73a773d564cc7276f5f3e6710bbf5cea7c03980b88499752330a78abbb7c383f90b6f07da8c56 languageName: node linkType: hard -"@swagger-api/apidom-parser-adapter-openapi-json-2@npm:^0.92.0": - version: 0.92.0 - resolution: "@swagger-api/apidom-parser-adapter-openapi-json-2@npm:0.92.0" +"@swagger-api/apidom-parser-adapter-openapi-json-2@npm:^0.97.0": + version: 0.97.0 + resolution: "@swagger-api/apidom-parser-adapter-openapi-json-2@npm:0.97.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.92.0 - "@swagger-api/apidom-ns-openapi-2": ^0.92.0 - "@swagger-api/apidom-parser-adapter-json": ^0.92.0 + "@swagger-api/apidom-core": ^0.97.0 + "@swagger-api/apidom-ns-openapi-2": ^0.97.0 + "@swagger-api/apidom-parser-adapter-json": ^0.97.0 "@types/ramda": ~0.29.6 ramda: ~0.29.1 ramda-adjunct: ^4.0.0 - checksum: 383827eec8fbc2bb36c095c8db4f8dce5264e5ffdfa7aca9a938d603294d99f0a552d57947222c160fbbbc1b79be7d08a7091348f3b373bbe25bd52a34bee529 + checksum: 61e012547438ab0bef23de008cdcabe479ac5447a0bd1375412b686a19655241eb26cb2197b3a5ed26969c1fc435eff9df33b74df1823f2efcc3d28650c339bb languageName: node linkType: hard -"@swagger-api/apidom-parser-adapter-openapi-json-3-0@npm:^0.92.0": - version: 0.92.0 - resolution: "@swagger-api/apidom-parser-adapter-openapi-json-3-0@npm:0.92.0" +"@swagger-api/apidom-parser-adapter-openapi-json-3-0@npm:^0.97.0": + version: 0.97.0 + resolution: "@swagger-api/apidom-parser-adapter-openapi-json-3-0@npm:0.97.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.92.0 - "@swagger-api/apidom-ns-openapi-3-0": ^0.92.0 - "@swagger-api/apidom-parser-adapter-json": ^0.92.0 + "@swagger-api/apidom-core": ^0.97.0 + "@swagger-api/apidom-ns-openapi-3-0": ^0.97.0 + "@swagger-api/apidom-parser-adapter-json": ^0.97.0 "@types/ramda": ~0.29.6 ramda: ~0.29.1 ramda-adjunct: ^4.0.0 - checksum: 592c1149d901a3c21594aca5c96a997382648ff559fb67cd6b75630440248a52f26df91ad96fa762e585e297725e20eb6f5623f91a6b6a5e2c950f57df4de760 + checksum: 3f4dab2959bb73c70beb2dcb79f9e026dad1975591dfe312fb321b5935097563ac977d0f8e7b9b5bbf171ad88c912a83abab2ca6eae3d2b31a36ee994d4ed0de languageName: node linkType: hard -"@swagger-api/apidom-parser-adapter-openapi-json-3-1@npm:^0.92.0": - version: 0.92.0 - resolution: "@swagger-api/apidom-parser-adapter-openapi-json-3-1@npm:0.92.0" +"@swagger-api/apidom-parser-adapter-openapi-json-3-1@npm:^0.97.0": + version: 0.97.0 + resolution: "@swagger-api/apidom-parser-adapter-openapi-json-3-1@npm:0.97.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.92.0 - "@swagger-api/apidom-ns-openapi-3-1": ^0.92.0 - "@swagger-api/apidom-parser-adapter-json": ^0.92.0 + "@swagger-api/apidom-core": ^0.97.0 + "@swagger-api/apidom-ns-openapi-3-1": ^0.97.0 + "@swagger-api/apidom-parser-adapter-json": ^0.97.0 "@types/ramda": ~0.29.6 ramda: ~0.29.1 ramda-adjunct: ^4.0.0 - checksum: feaa0b825921ea9defde642b65a07049a8539905142baa113b3b5e90c76630a58ef2557a6f770740e32e5cfa46486fc9f7d3c468b8ec29aaa53cb507c4ad3469 + checksum: 5f7b30b231c3d371ffe7fb39a8f7c4607d4bdab13a0dc7f183146f189eef90cd90e63d7c1c67420e3f8b9c39d441ffe441da7ef0523c94904c9ee9bc93c08ebc languageName: node linkType: hard -"@swagger-api/apidom-parser-adapter-openapi-yaml-2@npm:^0.92.0": - version: 0.92.0 - resolution: "@swagger-api/apidom-parser-adapter-openapi-yaml-2@npm:0.92.0" +"@swagger-api/apidom-parser-adapter-openapi-yaml-2@npm:^0.97.0": + version: 0.97.0 + resolution: "@swagger-api/apidom-parser-adapter-openapi-yaml-2@npm:0.97.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.92.0 - "@swagger-api/apidom-ns-openapi-2": ^0.92.0 - "@swagger-api/apidom-parser-adapter-yaml-1-2": ^0.92.0 + "@swagger-api/apidom-core": ^0.97.0 + "@swagger-api/apidom-ns-openapi-2": ^0.97.0 + "@swagger-api/apidom-parser-adapter-yaml-1-2": ^0.97.0 "@types/ramda": ~0.29.6 ramda: ~0.29.1 ramda-adjunct: ^4.0.0 - checksum: efd8dbd705592accadce53b25fc293ee48d1d11ec191f618df4243e6fdfea1add502ef3a5d433051883092dd29bf0a9f2026f2314a0cced1b8f04af59e63e995 + checksum: 1bcb9df1dc597601896ea80b41cb813b9134ef45b0f4982ee4dec878415f9fe38059fb05d6eb8651bbdf440204129dbb2d8698a28cb48e9e5490901af594f54f languageName: node linkType: hard -"@swagger-api/apidom-parser-adapter-openapi-yaml-3-0@npm:^0.92.0": - version: 0.92.0 - resolution: "@swagger-api/apidom-parser-adapter-openapi-yaml-3-0@npm:0.92.0" +"@swagger-api/apidom-parser-adapter-openapi-yaml-3-0@npm:^0.97.0": + version: 0.97.0 + resolution: "@swagger-api/apidom-parser-adapter-openapi-yaml-3-0@npm:0.97.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.92.0 - "@swagger-api/apidom-ns-openapi-3-0": ^0.92.0 - "@swagger-api/apidom-parser-adapter-yaml-1-2": ^0.92.0 + "@swagger-api/apidom-core": ^0.97.0 + "@swagger-api/apidom-ns-openapi-3-0": ^0.97.0 + "@swagger-api/apidom-parser-adapter-yaml-1-2": ^0.97.0 "@types/ramda": ~0.29.6 ramda: ~0.29.1 ramda-adjunct: ^4.0.0 - checksum: 47a034efae971b56d13e96bc64d0973a2015ca303bf63334117ebbcfb2b2676d50a0b68aa24ea5a3b669786a524035762d52ae1cc795f3c3dc65249297a23068 + checksum: b651c47b062f219f60235d0f184f485e1e3c9a47757d2363b28bfd3692176eda57b095b047b8f5ed3e2a733ff1b6a24ff7016ed45de5c610ea4135694b51ad86 languageName: node linkType: hard -"@swagger-api/apidom-parser-adapter-openapi-yaml-3-1@npm:^0.92.0": - version: 0.92.0 - resolution: "@swagger-api/apidom-parser-adapter-openapi-yaml-3-1@npm:0.92.0" +"@swagger-api/apidom-parser-adapter-openapi-yaml-3-1@npm:^0.97.0": + version: 0.97.0 + resolution: "@swagger-api/apidom-parser-adapter-openapi-yaml-3-1@npm:0.97.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.92.0 - "@swagger-api/apidom-ns-openapi-3-1": ^0.92.0 - "@swagger-api/apidom-parser-adapter-yaml-1-2": ^0.92.0 + "@swagger-api/apidom-core": ^0.97.0 + "@swagger-api/apidom-ns-openapi-3-1": ^0.97.0 + "@swagger-api/apidom-parser-adapter-yaml-1-2": ^0.97.0 "@types/ramda": ~0.29.6 ramda: ~0.29.1 ramda-adjunct: ^4.0.0 - checksum: c565913065e401109e7e4494f1024d24958959c742e5f842247a56eca6b75dcc9c3495a4c550912a62d62db896b2803bd317642336b4b18c851adc141fa38b61 + checksum: 0f1cc4538c7523246da1462ae5f2fd23dd5ac3dd31f71c79098c6561ea52a3fe38f577b629a68d51ca8282d908594136076ab1a58ef7b59e3c4afd21dd2f95a2 languageName: node linkType: hard -"@swagger-api/apidom-parser-adapter-workflows-json-1@npm:^0.92.0": - version: 0.92.0 - resolution: "@swagger-api/apidom-parser-adapter-workflows-json-1@npm:0.92.0" +"@swagger-api/apidom-parser-adapter-workflows-json-1@npm:^0.97.0": + version: 0.97.0 + resolution: "@swagger-api/apidom-parser-adapter-workflows-json-1@npm:0.97.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.92.0 - "@swagger-api/apidom-ns-workflows-1": ^0.92.0 - "@swagger-api/apidom-parser-adapter-json": ^0.92.0 + "@swagger-api/apidom-core": ^0.97.0 + "@swagger-api/apidom-ns-workflows-1": ^0.97.0 + "@swagger-api/apidom-parser-adapter-json": ^0.97.0 "@types/ramda": ~0.29.6 ramda: ~0.29.1 ramda-adjunct: ^4.0.0 - checksum: 570f8323aaa5c67da3b5421d6ca6a9f0c3bf486a602584fa5969476e6a4943abe9a7f8f2bd7dfc1a7019286746e65cc76b050cadfabab276e0d452fbad4db59f + checksum: 42234b5609d32560f777cfc2d20e7cb56072c8e13b0451015cf2f5b61ab3f8348985e68a0dbb85ce65efc32ba17be6a4463e5cb5c44933d7604d31001b48726b languageName: node linkType: hard -"@swagger-api/apidom-parser-adapter-workflows-yaml-1@npm:^0.92.0": - version: 0.92.0 - resolution: "@swagger-api/apidom-parser-adapter-workflows-yaml-1@npm:0.92.0" +"@swagger-api/apidom-parser-adapter-workflows-yaml-1@npm:^0.97.0": + version: 0.97.0 + resolution: "@swagger-api/apidom-parser-adapter-workflows-yaml-1@npm:0.97.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.92.0 - "@swagger-api/apidom-ns-workflows-1": ^0.92.0 - "@swagger-api/apidom-parser-adapter-yaml-1-2": ^0.92.0 + "@swagger-api/apidom-core": ^0.97.0 + "@swagger-api/apidom-ns-workflows-1": ^0.97.0 + "@swagger-api/apidom-parser-adapter-yaml-1-2": ^0.97.0 "@types/ramda": ~0.29.6 ramda: ~0.29.1 ramda-adjunct: ^4.0.0 - checksum: 020ecd34fb45ba57977377f71dc0b28ebba95b950bb873e1f6222eb6b544f91243dfb6b1f7555fe5f279d7bee044089337216a3f4b8e58612fb7066530938f32 + checksum: c5c7024be74365f42c98636bcad082de0dd1f5e4f7e3cdcee99cb5ca45aad21d04bd9cdf2304ed6e08274b63922c92bbe6267cbd75e9512e6bfa5ec68d57e341 languageName: node linkType: hard -"@swagger-api/apidom-parser-adapter-yaml-1-2@npm:^0.92.0": - version: 0.92.0 - resolution: "@swagger-api/apidom-parser-adapter-yaml-1-2@npm:0.92.0" +"@swagger-api/apidom-parser-adapter-yaml-1-2@npm:^0.97.0": + version: 0.97.0 + resolution: "@swagger-api/apidom-parser-adapter-yaml-1-2@npm:0.97.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-ast": ^0.92.0 - "@swagger-api/apidom-core": ^0.92.0 - "@swagger-api/apidom-error": ^0.92.0 + "@swagger-api/apidom-ast": ^0.97.0 + "@swagger-api/apidom-core": ^0.97.0 + "@swagger-api/apidom-error": ^0.97.0 "@types/ramda": ~0.29.6 node-gyp: latest ramda: ~0.29.1 @@ -17774,37 +17595,37 @@ __metadata: tree-sitter: =0.20.4 tree-sitter-yaml: =0.5.0 web-tree-sitter: =0.20.3 - checksum: 1ee0bf2c2f7fed54ff194917034f31080ad4ad36e14dc2018c80d8bda38f8b6574ace974eca1a65aa336a86df375dabd0661215909551031e796dcee9d0d1a14 + checksum: d1d43dbda9990fec3cc0934d489ec66d229d5ae270dfdd26d35649daaed894871c880c743c7478d9ed1a96b5e9d4def038535572d2679f863e419922220465b0 languageName: node linkType: hard -"@swagger-api/apidom-reference@npm:>=0.90.0 <1.0.0": - version: 0.92.0 - resolution: "@swagger-api/apidom-reference@npm:0.92.0" +"@swagger-api/apidom-reference@npm:>=0.97.0 <1.0.0": + version: 0.97.1 + resolution: "@swagger-api/apidom-reference@npm:0.97.1" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.92.0 - "@swagger-api/apidom-error": ^0.92.0 - "@swagger-api/apidom-json-pointer": ^0.92.0 - "@swagger-api/apidom-ns-asyncapi-2": ^0.92.0 - "@swagger-api/apidom-ns-openapi-2": ^0.92.0 - "@swagger-api/apidom-ns-openapi-3-0": ^0.92.0 - "@swagger-api/apidom-ns-openapi-3-1": ^0.92.0 - "@swagger-api/apidom-ns-workflows-1": ^0.92.0 - "@swagger-api/apidom-parser-adapter-api-design-systems-json": ^0.92.0 - "@swagger-api/apidom-parser-adapter-api-design-systems-yaml": ^0.92.0 - "@swagger-api/apidom-parser-adapter-asyncapi-json-2": ^0.92.0 - "@swagger-api/apidom-parser-adapter-asyncapi-yaml-2": ^0.92.0 - "@swagger-api/apidom-parser-adapter-json": ^0.92.0 - "@swagger-api/apidom-parser-adapter-openapi-json-2": ^0.92.0 - "@swagger-api/apidom-parser-adapter-openapi-json-3-0": ^0.92.0 - "@swagger-api/apidom-parser-adapter-openapi-json-3-1": ^0.92.0 - "@swagger-api/apidom-parser-adapter-openapi-yaml-2": ^0.92.0 - "@swagger-api/apidom-parser-adapter-openapi-yaml-3-0": ^0.92.0 - "@swagger-api/apidom-parser-adapter-openapi-yaml-3-1": ^0.92.0 - "@swagger-api/apidom-parser-adapter-workflows-json-1": ^0.92.0 - "@swagger-api/apidom-parser-adapter-workflows-yaml-1": ^0.92.0 - "@swagger-api/apidom-parser-adapter-yaml-1-2": ^0.92.0 + "@swagger-api/apidom-core": ^0.97.0 + "@swagger-api/apidom-error": ^0.97.0 + "@swagger-api/apidom-json-pointer": ^0.97.0 + "@swagger-api/apidom-ns-asyncapi-2": ^0.97.0 + "@swagger-api/apidom-ns-openapi-2": ^0.97.0 + "@swagger-api/apidom-ns-openapi-3-0": ^0.97.0 + "@swagger-api/apidom-ns-openapi-3-1": ^0.97.0 + "@swagger-api/apidom-ns-workflows-1": ^0.97.0 + "@swagger-api/apidom-parser-adapter-api-design-systems-json": ^0.97.0 + "@swagger-api/apidom-parser-adapter-api-design-systems-yaml": ^0.97.0 + "@swagger-api/apidom-parser-adapter-asyncapi-json-2": ^0.97.0 + "@swagger-api/apidom-parser-adapter-asyncapi-yaml-2": ^0.97.0 + "@swagger-api/apidom-parser-adapter-json": ^0.97.0 + "@swagger-api/apidom-parser-adapter-openapi-json-2": ^0.97.0 + "@swagger-api/apidom-parser-adapter-openapi-json-3-0": ^0.97.0 + "@swagger-api/apidom-parser-adapter-openapi-json-3-1": ^0.97.0 + "@swagger-api/apidom-parser-adapter-openapi-yaml-2": ^0.97.0 + "@swagger-api/apidom-parser-adapter-openapi-yaml-3-0": ^0.97.0 + "@swagger-api/apidom-parser-adapter-openapi-yaml-3-1": ^0.97.0 + "@swagger-api/apidom-parser-adapter-workflows-json-1": ^0.97.0 + "@swagger-api/apidom-parser-adapter-workflows-yaml-1": ^0.97.0 + "@swagger-api/apidom-parser-adapter-yaml-1-2": ^0.97.0 "@types/ramda": ~0.29.6 axios: ^1.4.0 minimatch: ^7.4.3 @@ -17855,94 +17676,94 @@ __metadata: optional: true "@swagger-api/apidom-parser-adapter-yaml-1-2": optional: true - checksum: 05b2c97233f2f60879d2dc62a811a4b31520acb7b3c730d47e60e5927f861c1bf1376e790648b773b242ccb1e24596c567014c570d123655dc59fc2c590668c7 + checksum: db92999b3b1f723c81b05d3c6992e440ec281d271d89dd005b7cdac56d21b0944fb1747deb535f9b485a0a765dfa1c6c71a8607514bb7080a94242e3056263b8 languageName: node linkType: hard -"@swc/core-darwin-arm64@npm:1.4.2": - version: 1.4.2 - resolution: "@swc/core-darwin-arm64@npm:1.4.2" +"@swc/core-darwin-arm64@npm:1.4.8": + version: 1.4.8 + resolution: "@swc/core-darwin-arm64@npm:1.4.8" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@swc/core-darwin-x64@npm:1.4.2": - version: 1.4.2 - resolution: "@swc/core-darwin-x64@npm:1.4.2" +"@swc/core-darwin-x64@npm:1.4.8": + version: 1.4.8 + resolution: "@swc/core-darwin-x64@npm:1.4.8" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@swc/core-linux-arm-gnueabihf@npm:1.4.2": - version: 1.4.2 - resolution: "@swc/core-linux-arm-gnueabihf@npm:1.4.2" +"@swc/core-linux-arm-gnueabihf@npm:1.4.8": + version: 1.4.8 + resolution: "@swc/core-linux-arm-gnueabihf@npm:1.4.8" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@swc/core-linux-arm64-gnu@npm:1.4.2": - version: 1.4.2 - resolution: "@swc/core-linux-arm64-gnu@npm:1.4.2" +"@swc/core-linux-arm64-gnu@npm:1.4.8": + version: 1.4.8 + resolution: "@swc/core-linux-arm64-gnu@npm:1.4.8" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-arm64-musl@npm:1.4.2": - version: 1.4.2 - resolution: "@swc/core-linux-arm64-musl@npm:1.4.2" +"@swc/core-linux-arm64-musl@npm:1.4.8": + version: 1.4.8 + resolution: "@swc/core-linux-arm64-musl@npm:1.4.8" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@swc/core-linux-x64-gnu@npm:1.4.2": - version: 1.4.2 - resolution: "@swc/core-linux-x64-gnu@npm:1.4.2" +"@swc/core-linux-x64-gnu@npm:1.4.8": + version: 1.4.8 + resolution: "@swc/core-linux-x64-gnu@npm:1.4.8" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-x64-musl@npm:1.4.2": - version: 1.4.2 - resolution: "@swc/core-linux-x64-musl@npm:1.4.2" +"@swc/core-linux-x64-musl@npm:1.4.8": + version: 1.4.8 + resolution: "@swc/core-linux-x64-musl@npm:1.4.8" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@swc/core-win32-arm64-msvc@npm:1.4.2": - version: 1.4.2 - resolution: "@swc/core-win32-arm64-msvc@npm:1.4.2" +"@swc/core-win32-arm64-msvc@npm:1.4.8": + version: 1.4.8 + resolution: "@swc/core-win32-arm64-msvc@npm:1.4.8" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@swc/core-win32-ia32-msvc@npm:1.4.2": - version: 1.4.2 - resolution: "@swc/core-win32-ia32-msvc@npm:1.4.2" +"@swc/core-win32-ia32-msvc@npm:1.4.8": + version: 1.4.8 + resolution: "@swc/core-win32-ia32-msvc@npm:1.4.8" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@swc/core-win32-x64-msvc@npm:1.4.2": - version: 1.4.2 - resolution: "@swc/core-win32-x64-msvc@npm:1.4.2" +"@swc/core-win32-x64-msvc@npm:1.4.8": + version: 1.4.8 + resolution: "@swc/core-win32-x64-msvc@npm:1.4.8" conditions: os=win32 & cpu=x64 languageName: node linkType: hard "@swc/core@npm:^1.3.46": - version: 1.4.2 - resolution: "@swc/core@npm:1.4.2" + version: 1.4.8 + resolution: "@swc/core@npm:1.4.8" dependencies: - "@swc/core-darwin-arm64": 1.4.2 - "@swc/core-darwin-x64": 1.4.2 - "@swc/core-linux-arm-gnueabihf": 1.4.2 - "@swc/core-linux-arm64-gnu": 1.4.2 - "@swc/core-linux-arm64-musl": 1.4.2 - "@swc/core-linux-x64-gnu": 1.4.2 - "@swc/core-linux-x64-musl": 1.4.2 - "@swc/core-win32-arm64-msvc": 1.4.2 - "@swc/core-win32-ia32-msvc": 1.4.2 - "@swc/core-win32-x64-msvc": 1.4.2 + "@swc/core-darwin-arm64": 1.4.8 + "@swc/core-darwin-x64": 1.4.8 + "@swc/core-linux-arm-gnueabihf": 1.4.8 + "@swc/core-linux-arm64-gnu": 1.4.8 + "@swc/core-linux-arm64-musl": 1.4.8 + "@swc/core-linux-x64-gnu": 1.4.8 + "@swc/core-linux-x64-musl": 1.4.8 + "@swc/core-win32-arm64-msvc": 1.4.8 + "@swc/core-win32-ia32-msvc": 1.4.8 + "@swc/core-win32-x64-msvc": 1.4.8 "@swc/counter": ^0.1.2 "@swc/types": ^0.1.5 peerDependencies: @@ -17971,7 +17792,7 @@ __metadata: peerDependenciesMeta: "@swc/helpers": optional: true - checksum: b17afda692b2627d3a82e589f1b29cef31bdee626a2dd997d78312dcbfc6eb701850fbab22e85f02b1261da39f0b0afb6a236c6065f6d0d7478cff939ca5a888 + checksum: 3284e64fe72896d1be8637f7fdcbba575d86e02da056a8c5208c93877250bfb1922fc5194281926650d5694e2434b7906efc0db8925769a4558f5fbd93028fd6 languageName: node linkType: hard @@ -18082,7 +17903,6 @@ __metadata: react-dev-utils: ^12.0.0-next.60 serve-handler: ^6.1.3 techdocs-cli-embedded-app: "link:../techdocs-cli-embedded-app" - ts-node: ^10.0.0 winston: ^3.2.1 bin: techdocs-cli: bin/techdocs-cli @@ -18735,7 +18555,7 @@ __metadata: languageName: node linkType: hard -"@types/dockerode@npm:^3.3.0, @types/dockerode@npm:^3.3.21": +"@types/dockerode@npm:^3.3.0, @types/dockerode@npm:^3.3.24": version: 3.3.26 resolution: "@types/dockerode@npm:3.3.26" dependencies: @@ -18789,13 +18609,13 @@ __metadata: languageName: node linkType: hard -"@types/eslint@npm:*, @types/eslint@npm:^8.37.0": - version: 8.56.2 - resolution: "@types/eslint@npm:8.56.2" +"@types/eslint@npm:*, @types/eslint@npm:^8.56.5": + version: 8.56.5 + resolution: "@types/eslint@npm:8.56.5" dependencies: "@types/estree": "*" "@types/json-schema": "*" - checksum: 38e054971596f5c0413f66a62dc26b10e0a21ac46ceacb06fbf8cfb838d20820787209b17218b3916e4c23d990ff77cfdb482d655cac0e0d2b837d430fcc5db8 + checksum: 95a7a23ca38c78e5c27a2ed36ef60f094d5e6589e3473c320b6ff69eb3ca6333d5b7f0d5053416369f5ab2fb86874df19562d4d67a98237c17def6e30abff540 languageName: node linkType: hard @@ -18840,11 +18660,11 @@ __metadata: linkType: hard "@types/express-session@npm:^1.17.2": - version: 1.17.10 - resolution: "@types/express-session@npm:1.17.10" + version: 1.18.0 + resolution: "@types/express-session@npm:1.18.0" dependencies: "@types/express": "*" - checksum: 2fb63b53e164f615a538d4be292695789a7f3105ce3246b8d3816e78eca05c8cce43d703af55c4f675c99cfb6fa512ae70a787e536e2b064f001fda897e0d5ab + checksum: f624bc956d223eda618dc3ee5908cfc91d5cf67252aa83e667c1260b96c2d2ac302407d57d2a57b29728a21bf521f09c6409da5e727509c01a2b50d7a012f0a1 languageName: node linkType: hard @@ -19057,16 +18877,6 @@ __metadata: languageName: node linkType: hard -"@types/jest@npm:^28.1.3": - version: 28.1.8 - resolution: "@types/jest@npm:28.1.8" - dependencies: - expect: ^28.0.0 - pretty-format: ^28.0.0 - checksum: d4cd36158a3ae1d4b42cc48a77c95de74bc56b84cf81e09af3ee0399c34f4a7da8ab9e787570f10004bd642f9e781b0033c37327fbbf4a8e4b6e37e8ee3693a7 - languageName: node - linkType: hard - "@types/jquery@npm:^3.3.34": version: 3.5.29 resolution: "@types/jquery@npm:3.5.29" @@ -19195,9 +19005,9 @@ __metadata: linkType: hard "@types/lodash@npm:^4.14.151, @types/lodash@npm:^4.14.173": - version: 4.14.202 - resolution: "@types/lodash@npm:4.14.202" - checksum: a91acf3564a568c6f199912f3eb2c76c99c5a0d7e219394294213b3f2d54f672619f0fde4da22b29dc5d4c31457cd799acc2e5cb6bd90f9af04a1578483b6ff7 + version: 4.17.0 + resolution: "@types/lodash@npm:4.17.0" + checksum: 3f98c0b67a93994cbc3403d4fa9dbaf52b0b6bb7f07a764d73875c2dcd5ef91222621bd5bcf8eee7b417a74d175c2f7191b9f595f8603956fd06f0674c0cba93 languageName: node linkType: hard @@ -19778,12 +19588,11 @@ __metadata: linkType: hard "@types/rollup-plugin-peer-deps-external@npm:^2.2.0": - version: 2.2.4 - resolution: "@types/rollup-plugin-peer-deps-external@npm:2.2.4" + version: 2.2.5 + resolution: "@types/rollup-plugin-peer-deps-external@npm:2.2.5" dependencies: - "@types/node": "*" rollup: ^0.63.4 - checksum: 215849a0ae0f5bd4aec0ae2c1f05defaca1a88013b1c89ebfd207a4732799b970b0aaf7d3fe1797548f08c972e1bd028352d3193d00cb570d58cd86fd4da9447 + checksum: 3f0d130fc15c80eac737391e180e77597da1200ff1f6d28a44f785a0de7f29144df805ab5b020ba38b243af6959e9da0757efa4141c4e737cd04eebe50f59c07 languageName: node linkType: hard @@ -21130,7 +20939,7 @@ __metadata: languageName: node linkType: hard -"ajv-keywords@npm:^5.0.0": +"ajv-keywords@npm:^5.1.0": version: 5.1.0 resolution: "ajv-keywords@npm:5.1.0" dependencies: @@ -21153,7 +20962,7 @@ __metadata: languageName: node linkType: hard -"ajv@npm:^8.0.0, ajv@npm:^8.10.0, ajv@npm:^8.11.0, ajv@npm:^8.11.2, ajv@npm:^8.12.0, ajv@npm:^8.6.0, ajv@npm:^8.6.3, ajv@npm:^8.8.0, ajv@npm:^8.8.2": +"ajv@npm:^8.0.0, ajv@npm:^8.10.0, ajv@npm:^8.11.0, ajv@npm:^8.11.2, ajv@npm:^8.12.0, ajv@npm:^8.6.0, ajv@npm:^8.6.3, ajv@npm:^8.8.2, ajv@npm:^8.9.0": version: 8.12.0 resolution: "ajv@npm:8.12.0" dependencies: @@ -21396,8 +21205,8 @@ __metadata: linkType: hard "archiver@npm:^6.0.0": - version: 6.0.1 - resolution: "archiver@npm:6.0.1" + version: 6.0.2 + resolution: "archiver@npm:6.0.2" dependencies: archiver-utils: ^4.0.1 async: ^3.2.4 @@ -21406,7 +21215,7 @@ __metadata: readdir-glob: ^1.1.2 tar-stream: ^3.0.0 zip-stream: ^5.0.1 - checksum: 20549eef7366173440a86873387412226568744a410626f826998b0dda85fe84e739c542d9db9aca3923b772436eb795eafdff29c2983e683355fdd9faaa0fdb + checksum: 17a20a1291d9bf41e25c96f029373bec5306d6e381063b3ab06ea805d234afaf55a7829c3577dd003558c188c6631769a80c51f245175fdb8310631df36ceb4b languageName: node linkType: hard @@ -21499,13 +21308,13 @@ __metadata: languageName: node linkType: hard -"array-buffer-byte-length@npm:^1.0.0": - version: 1.0.0 - resolution: "array-buffer-byte-length@npm:1.0.0" +"array-buffer-byte-length@npm:^1.0.1": + version: 1.0.1 + resolution: "array-buffer-byte-length@npm:1.0.1" dependencies: - call-bind: ^1.0.2 - is-array-buffer: ^3.0.1 - checksum: 044e101ce150f4804ad19c51d6c4d4cfa505c5b2577bd179256e4aa3f3f6a0a5e9874c78cd428ee566ac574c8a04d7ce21af9fe52e844abfdccb82b33035a7c3 + call-bind: ^1.0.5 + is-array-buffer: ^3.0.4 + checksum: 53524e08f40867f6a9f35318fafe467c32e45e9c682ba67b11943e167344d2febc0f6977a17e699b05699e805c3e8f073d876f8bbf1b559ed494ad2cd0fae09e languageName: node linkType: hard @@ -21559,6 +21368,19 @@ __metadata: languageName: node linkType: hard +"array.prototype.findlast@npm:^1.2.4": + version: 1.2.4 + resolution: "array.prototype.findlast@npm:1.2.4" + dependencies: + call-bind: ^1.0.5 + define-properties: ^1.2.1 + es-abstract: ^1.22.3 + es-errors: ^1.3.0 + es-shim-unscopables: ^1.0.2 + checksum: b4c76571adf6c3cffbbbb8acd7ac39d94af6b120dd388dcf44637c22d77ba3ae13dd43d1be25d90956848fae5a01191fbdebe48ce4c0aa0989d7ee269a94a5a4 + languageName: node + linkType: hard + "array.prototype.findlastindex@npm:^1.2.3": version: 1.2.3 resolution: "array.prototype.findlastindex@npm:1.2.3" @@ -21584,7 +21406,7 @@ __metadata: languageName: node linkType: hard -"array.prototype.flatmap@npm:^1.3.1, array.prototype.flatmap@npm:^1.3.2": +"array.prototype.flatmap@npm:^1.3.2": version: 1.3.2 resolution: "array.prototype.flatmap@npm:1.3.2" dependencies: @@ -21596,31 +21418,44 @@ __metadata: languageName: node linkType: hard -"array.prototype.tosorted@npm:^1.1.1": - version: 1.1.1 - resolution: "array.prototype.tosorted@npm:1.1.1" +"array.prototype.toreversed@npm:^1.1.2": + version: 1.1.2 + resolution: "array.prototype.toreversed@npm:1.1.2" dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.20.4 - es-shim-unscopables: ^1.0.0 - get-intrinsic: ^1.1.3 - checksum: 7923324a67e70a2fc0a6e40237405d92395e45ebd76f5cb89c2a5cf1e66b47aca6baacd0cd628ffd88830b90d47fff268071493d09c9ae123645613dac2c2ca3 - languageName: node - linkType: hard - -"arraybuffer.prototype.slice@npm:^1.0.2": - version: 1.0.2 - resolution: "arraybuffer.prototype.slice@npm:1.0.2" - dependencies: - array-buffer-byte-length: ^1.0.0 call-bind: ^1.0.2 define-properties: ^1.2.0 es-abstract: ^1.22.1 - get-intrinsic: ^1.2.1 - is-array-buffer: ^3.0.2 + es-shim-unscopables: ^1.0.0 + checksum: 58598193426282155297bedf950dc8d464624a0d81659822fb73124286688644cb7e0e4927a07f3ab2daaeb6617b647736cc3a5e6ca7ade5bb8e573b284e6240 + languageName: node + linkType: hard + +"array.prototype.tosorted@npm:^1.1.3": + version: 1.1.3 + resolution: "array.prototype.tosorted@npm:1.1.3" + dependencies: + call-bind: ^1.0.5 + define-properties: ^1.2.1 + es-abstract: ^1.22.3 + es-errors: ^1.1.0 + es-shim-unscopables: ^1.0.2 + checksum: 555e8808086bbde9e634c5dc5a8c0a2f1773075447b43b2fa76ab4f94f4e90f416d2a4f881024e1ce1a2931614caf76cd6b408af901c9d7cd13061d0d268f5af + languageName: node + linkType: hard + +"arraybuffer.prototype.slice@npm:^1.0.3": + version: 1.0.3 + resolution: "arraybuffer.prototype.slice@npm:1.0.3" + dependencies: + array-buffer-byte-length: ^1.0.1 + call-bind: ^1.0.5 + define-properties: ^1.2.1 + es-abstract: ^1.22.3 + es-errors: ^1.2.1 + get-intrinsic: ^1.2.3 + is-array-buffer: ^3.0.4 is-shared-array-buffer: ^1.0.2 - checksum: c200faf437786f5b2c80d4564ff5481c886a16dee642ef02abdc7306c7edd523d1f01d1dd12b769c7eb42ac9bc53874510db19a92a2c035c0f6696172aafa5d3 + checksum: 352259cba534dcdd969c92ab002efd2ba5025b2e3b9bead3973150edbdf0696c629d7f4b3f061c5931511e8207bdc2306da614703c820b45dabce39e3daf7e3e languageName: node linkType: hard @@ -21752,7 +21587,7 @@ __metadata: languageName: node linkType: hard -"async-lock@npm:^1.1.0, async-lock@npm:^1.4.0": +"async-lock@npm:^1.1.0, async-lock@npm:^1.4.1": version: 1.4.1 resolution: "async-lock@npm:1.4.1" checksum: 29e70cd892932b7c202437786cedc39ff62123cb6941014739bd3cabd6106326416e9e7c21285a5d1dc042cad239a0f7ec9c44658491ee4a615fd36a21c1d10a @@ -21784,15 +21619,6 @@ __metadata: languageName: node linkType: hard -"asynciterator.prototype@npm:^1.0.0": - version: 1.0.0 - resolution: "asynciterator.prototype@npm:1.0.0" - dependencies: - has-symbols: ^1.0.3 - checksum: e8ebfd9493ac651cf9b4165e9d64030b3da1d17181bb1963627b59e240cdaf021d9b59d44b827dc1dde4e22387ec04c2d0f8720cf58a1c282e34e40cc12721b3 - languageName: node - linkType: hard - "asynckit@npm:^0.4.0": version: 0.4.0 resolution: "asynckit@npm:0.4.0" @@ -21840,10 +21666,12 @@ __metadata: languageName: node linkType: hard -"available-typed-arrays@npm:^1.0.5": - version: 1.0.5 - resolution: "available-typed-arrays@npm:1.0.5" - checksum: 20eb47b3cefd7db027b9bbb993c658abd36d4edd3fe1060e83699a03ee275b0c9b216cc076ff3f2db29073225fb70e7613987af14269ac1fe2a19803ccc97f1a +"available-typed-arrays@npm:^1.0.7": + version: 1.0.7 + resolution: "available-typed-arrays@npm:1.0.7" + dependencies: + possible-typed-array-names: ^1.0.0 + checksum: 1aa3ffbfe6578276996de660848b6e95669d9a95ad149e3dd0c0cda77db6ee1dbd9d1dd723b65b6d277b882dd0c4b91a654ae9d3cf9e1254b7e93e4908d78fd3 languageName: node linkType: hard @@ -21855,25 +21683,25 @@ __metadata: linkType: hard "aws-sdk-client-mock-jest@npm:^3.0.0": - version: 3.0.1 - resolution: "aws-sdk-client-mock-jest@npm:3.0.1" + version: 3.1.0 + resolution: "aws-sdk-client-mock-jest@npm:3.1.0" dependencies: - "@types/jest": ^28.1.3 + expect: ">28.1.3" tslib: ^2.1.0 peerDependencies: - aws-sdk-client-mock: 3.0.1 - checksum: c5c72ae63c9d3862636b833c66ebc708a1c170ba1159508f9a1e56c8e71ba82f7f85a00e68148b72cc699ab3e7ce6945d29bfd23151ae62c3f78133d56585ddd + aws-sdk-client-mock: 3.1.0 + checksum: d619e3dbc58009ffa9db766a7781ec1159809825a8e8246f41adeeffa81aa4ec0319cf0ba5a113e4937101b56401396eb117cab4da3fac4974b094ac8fdbeaa3 languageName: node linkType: hard "aws-sdk-client-mock@npm:^3.0.0": - version: 3.0.1 - resolution: "aws-sdk-client-mock@npm:3.0.1" + version: 3.1.0 + resolution: "aws-sdk-client-mock@npm:3.1.0" dependencies: "@types/sinon": ^10.0.10 sinon: ^16.1.3 tslib: ^2.1.0 - checksum: e875af24a765d7883059c101a629a58bbb2ec3a055443562f9410ebd96823691dfae25d69b962dc3c22ad5867971c37b378d05f3c8344bbb992b1a624a0fb836 + checksum: fbb11b5783fe6ba9b5c10a4395193d5b4b1583040cce61bcd341dce25327ee86e3b00166c2fb3d47aedaa890c129e1c3fabe944086419d50ba12a417ebe2ede9 languageName: node linkType: hard @@ -21959,13 +21787,13 @@ __metadata: linkType: hard "axios@npm:^1.0.0, axios@npm:^1.4.0, axios@npm:^1.6.0": - version: 1.6.7 - resolution: "axios@npm:1.6.7" + version: 1.6.8 + resolution: "axios@npm:1.6.8" dependencies: - follow-redirects: ^1.15.4 + follow-redirects: ^1.15.6 form-data: ^4.0.0 proxy-from-env: ^1.1.0 - checksum: 87d4d429927d09942771f3b3a6c13580c183e31d7be0ee12f09be6d5655304996bb033d85e54be81606f4e89684df43be7bf52d14becb73a12727bf33298a082 + checksum: bf007fa4b207d102459300698620b3b0873503c6d47bf5a8f6e43c0c64c90035a4f698b55027ca1958f61ab43723df2781c38a99711848d232cad7accbcdfcdd languageName: node linkType: hard @@ -21979,12 +21807,12 @@ __metadata: linkType: hard "azure-devops-node-api@npm:^12.0.0": - version: 12.4.0 - resolution: "azure-devops-node-api@npm:12.4.0" + version: 12.5.0 + resolution: "azure-devops-node-api@npm:12.5.0" dependencies: tunnel: 0.0.6 typed-rest-client: ^1.8.4 - checksum: d7207c2bb0e021a25e11d1f6e4b4ac02efdbe4467b0c28bfb19260b2a1a799393978e6ff0b916cf81e309ba8b9a80015d8638751bed253695ef779a3a904efd2 + checksum: 7c2c3ae21eaf1bc3627ba4ea87bdac1085a3594eacf40eb6d7b11292f057988db38f718f4597733c6861d854c28bfe146bcf3964a13adddebe1085270bb63097 languageName: node linkType: hard @@ -22483,27 +22311,7 @@ __metadata: languageName: node linkType: hard -"body-parser@npm:1.20.1": - version: 1.20.1 - resolution: "body-parser@npm:1.20.1" - dependencies: - bytes: 3.1.2 - content-type: ~1.0.4 - debug: 2.6.9 - depd: 2.0.0 - destroy: 1.2.0 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - on-finished: 2.4.1 - qs: 6.11.0 - raw-body: 2.5.1 - type-is: ~1.6.18 - unpipe: 1.0.0 - checksum: f1050dbac3bede6a78f0b87947a8d548ce43f91ccc718a50dd774f3c81f2d8b04693e52acf62659fad23101827dd318da1fb1363444ff9a8482b886a3e4a5266 - languageName: node - linkType: hard - -"body-parser@npm:^1.15.2, body-parser@npm:^1.20.0": +"body-parser@npm:1.20.2, body-parser@npm:^1.15.2, body-parser@npm:^1.20.0": version: 1.20.2 resolution: "body-parser@npm:1.20.2" dependencies: @@ -23032,14 +22840,16 @@ __metadata: languageName: node linkType: hard -"call-bind@npm:^1.0.0, call-bind@npm:^1.0.2, call-bind@npm:^1.0.4, call-bind@npm:^1.0.5": - version: 1.0.5 - resolution: "call-bind@npm:1.0.5" +"call-bind@npm:^1.0.0, call-bind@npm:^1.0.2, call-bind@npm:^1.0.5, call-bind@npm:^1.0.6, call-bind@npm:^1.0.7": + version: 1.0.7 + resolution: "call-bind@npm:1.0.7" dependencies: + es-define-property: ^1.0.0 + es-errors: ^1.3.0 function-bind: ^1.1.2 - get-intrinsic: ^1.2.1 - set-function-length: ^1.1.1 - checksum: 449e83ecbd4ba48e7eaac5af26fea3b50f8f6072202c2dd7c5a6e7a6308f2421abe5e13a3bbd55221087f76320c5e09f25a8fdad1bab2b77c68ae74d92234ea5 + get-intrinsic: ^1.2.4 + set-function-length: ^1.2.1 + checksum: 295c0c62b90dd6522e6db3b0ab1ce26bdf9e7404215bda13cfee25b626b5ff1a7761324d58d38b1ef1607fc65aca2d06e44d2e18d0dfc6c14b465b00d8660029 languageName: node linkType: hard @@ -25243,6 +25053,39 @@ __metadata: languageName: node linkType: hard +"data-view-buffer@npm:^1.0.1": + version: 1.0.1 + resolution: "data-view-buffer@npm:1.0.1" + dependencies: + call-bind: ^1.0.6 + es-errors: ^1.3.0 + is-data-view: ^1.0.1 + checksum: ce24348f3c6231223b216da92e7e6a57a12b4af81a23f27eff8feabdf06acfb16c00639c8b705ca4d167f761cfc756e27e5f065d0a1f840c10b907fdaf8b988c + languageName: node + linkType: hard + +"data-view-byte-length@npm:^1.0.1": + version: 1.0.1 + resolution: "data-view-byte-length@npm:1.0.1" + dependencies: + call-bind: ^1.0.7 + es-errors: ^1.3.0 + is-data-view: ^1.0.1 + checksum: dbb3200edcb7c1ef0d68979834f81d64fd8cab2f7691b3a4c6b97e67f22182f3ec2c8602efd7b76997b55af6ff8bce485829c1feda4fa2165a6b71fb7baa4269 + languageName: node + linkType: hard + +"data-view-byte-offset@npm:^1.0.0": + version: 1.0.0 + resolution: "data-view-byte-offset@npm:1.0.0" + dependencies: + call-bind: ^1.0.6 + es-errors: ^1.3.0 + is-data-view: ^1.0.1 + checksum: 7f0bf8720b7414ca719eedf1846aeec392f2054d7af707c5dc9a753cc77eb8625f067fa901e0b5127e831f9da9056138d894b9c2be79c27a21f6db5824f009c2 + languageName: node + linkType: hard + "dataloader@npm:^2.0.0, dataloader@npm:^2.2.2": version: 2.2.2 resolution: "dataloader@npm:2.2.2" @@ -25260,9 +25103,9 @@ __metadata: linkType: hard "date-fns@npm:^3.0.0": - version: 3.3.1 - resolution: "date-fns@npm:3.3.1" - checksum: 6245e93a47de28ac96dffd4d62877f86e6b64854860ae1e00a4f83174d80bc8e59bd1259cf265223fb2ddce5c8e586dc9cc210f0d052faba2f7660e265877283 + version: 3.6.0 + resolution: "date-fns@npm:3.6.0" + checksum: 0daa1e9a436cf99f9f2ae9232b55e11f3dd46132bee10987164f3eebd29f245b2e066d7d7db40782627411ecf18551d8f4c9fcdf2226e48bb66545407d448ab7 languageName: node linkType: hard @@ -25511,14 +25354,14 @@ __metadata: languageName: node linkType: hard -"define-data-property@npm:^1.0.1, define-data-property@npm:^1.1.1": - version: 1.1.1 - resolution: "define-data-property@npm:1.1.1" +"define-data-property@npm:^1.0.1, define-data-property@npm:^1.1.4": + version: 1.1.4 + resolution: "define-data-property@npm:1.1.4" dependencies: - get-intrinsic: ^1.2.1 + es-define-property: ^1.0.0 + es-errors: ^1.3.0 gopd: ^1.0.1 - has-property-descriptors: ^1.0.0 - checksum: a29855ad3f0630ea82e3c5012c812efa6ca3078d5c2aa8df06b5f597c1cde6f7254692df41945851d903e05a1668607b6d34e778f402b9ff9ffb38111f1a3f0d + checksum: 8068ee6cab694d409ac25936eb861eea704b7763f7f342adbdfe337fc27c78d7ae0eff2364b2917b58c508d723c7a074326d068eef2e45c4edcd85cf94d0313b languageName: node linkType: hard @@ -25735,13 +25578,6 @@ __metadata: languageName: node linkType: hard -"diff-sequences@npm:^28.1.1": - version: 28.1.1 - resolution: "diff-sequences@npm:28.1.1" - checksum: e2529036505567c7ca5a2dea86b6bcd1ca0e3ae63bf8ebf529b8a99cfa915bbf194b7021dc1c57361a4017a6d95578d4ceb29fabc3232a4f4cb866a2726c7690 - languageName: node - linkType: hard - "diff-sequences@npm:^29.6.3": version: 29.6.3 resolution: "diff-sequences@npm:29.6.3" @@ -25813,12 +25649,12 @@ __metadata: languageName: node linkType: hard -"docker-compose@npm:^0.24.2": - version: 0.24.6 - resolution: "docker-compose@npm:0.24.6" +"docker-compose@npm:^0.24.6": + version: 0.24.7 + resolution: "docker-compose@npm:0.24.7" dependencies: yaml: ^2.2.2 - checksum: 7926e72d7feb9e7feb9e9d46460e18a61cf759cdb9004d7783b58a815eb22b3fbd6402db903cdb764be289cacb1960ef6d19904a9ee435991d8937b146be590f + checksum: 54daa1985fd7a57a1881dfdb7d294a189b9ba4e097de81127bfb4ff2f7727d249cc1514ee6a5a06c0085f9f6b5bcafe55b3e463f30b87c4d682bd8b0dac0450e languageName: node linkType: hard @@ -26125,15 +25961,15 @@ __metadata: languageName: node linkType: hard -"duplexify@npm:^4.0.0": - version: 4.1.1 - resolution: "duplexify@npm:4.1.1" +"duplexify@npm:^4.0.0, duplexify@npm:^4.1.3": + version: 4.1.3 + resolution: "duplexify@npm:4.1.3" dependencies: end-of-stream: ^1.4.1 inherits: ^2.0.3 readable-stream: ^3.1.1 - stream-shift: ^1.0.0 - checksum: 1cf800f1dc1647d6e0272b811421d4ce78b7d9b12dd85c7ecd78b9e4bfba374d309ac9e3440c66461fc62adb69db49aebf49da15962c98a84d8fd33c7e9c5c5a + stream-shift: ^1.0.2 + checksum: 9636a027345de3dd3c801594d01a7c73d9ce260019538beb1ee650bba7544e72f40a4d4902b52e1ab283dc32a06f210d42748773af02ff15e3064a9659deab7f languageName: node linkType: hard @@ -26167,7 +26003,6 @@ __metadata: nodemon: ^3.0.1 pgtools: ^1.0.0 tree-kill: ^1.2.2 - ts-node: ^10.0.0 bin: e2e-test: bin/e2e-test languageName: unknown @@ -26465,50 +26300,57 @@ __metadata: languageName: node linkType: hard -"es-abstract@npm:^1.20.4, es-abstract@npm:^1.22.1": - version: 1.22.3 - resolution: "es-abstract@npm:1.22.3" +"es-abstract@npm:^1.20.4, es-abstract@npm:^1.22.1, es-abstract@npm:^1.22.3, es-abstract@npm:^1.23.0": + version: 1.23.1 + resolution: "es-abstract@npm:1.23.1" dependencies: - array-buffer-byte-length: ^1.0.0 - arraybuffer.prototype.slice: ^1.0.2 - available-typed-arrays: ^1.0.5 - call-bind: ^1.0.5 - es-set-tostringtag: ^2.0.1 + array-buffer-byte-length: ^1.0.1 + arraybuffer.prototype.slice: ^1.0.3 + available-typed-arrays: ^1.0.7 + call-bind: ^1.0.7 + data-view-buffer: ^1.0.1 + data-view-byte-length: ^1.0.1 + data-view-byte-offset: ^1.0.0 + es-define-property: ^1.0.0 + es-errors: ^1.3.0 + es-object-atoms: ^1.0.0 + es-set-tostringtag: ^2.0.3 es-to-primitive: ^1.2.1 function.prototype.name: ^1.1.6 - get-intrinsic: ^1.2.2 - get-symbol-description: ^1.0.0 + get-intrinsic: ^1.2.4 + get-symbol-description: ^1.0.2 globalthis: ^1.0.3 gopd: ^1.0.1 - has-property-descriptors: ^1.0.0 - has-proto: ^1.0.1 + has-property-descriptors: ^1.0.2 + has-proto: ^1.0.3 has-symbols: ^1.0.3 - hasown: ^2.0.0 - internal-slot: ^1.0.5 - is-array-buffer: ^3.0.2 + hasown: ^2.0.2 + internal-slot: ^1.0.7 + is-array-buffer: ^3.0.4 is-callable: ^1.2.7 - is-negative-zero: ^2.0.2 + is-data-view: ^1.0.1 + is-negative-zero: ^2.0.3 is-regex: ^1.1.4 - is-shared-array-buffer: ^1.0.2 + is-shared-array-buffer: ^1.0.3 is-string: ^1.0.7 - is-typed-array: ^1.1.12 + is-typed-array: ^1.1.13 is-weakref: ^1.0.2 object-inspect: ^1.13.1 object-keys: ^1.1.1 - object.assign: ^4.1.4 - regexp.prototype.flags: ^1.5.1 - safe-array-concat: ^1.0.1 - safe-regex-test: ^1.0.0 + object.assign: ^4.1.5 + regexp.prototype.flags: ^1.5.2 + safe-array-concat: ^1.1.2 + safe-regex-test: ^1.0.3 string.prototype.trim: ^1.2.8 string.prototype.trimend: ^1.0.7 string.prototype.trimstart: ^1.0.7 - typed-array-buffer: ^1.0.0 - typed-array-byte-length: ^1.0.0 - typed-array-byte-offset: ^1.0.0 - typed-array-length: ^1.0.4 + typed-array-buffer: ^1.0.2 + typed-array-byte-length: ^1.0.1 + typed-array-byte-offset: ^1.0.2 + typed-array-length: ^1.0.5 unbox-primitive: ^1.0.2 - which-typed-array: ^1.1.13 - checksum: b1bdc962856836f6e72be10b58dc128282bdf33771c7a38ae90419d920fc3b36cc5d2b70a222ad8016e3fc322c367bf4e9e89fc2bc79b7e933c05b218e83d79a + which-typed-array: ^1.1.15 + checksum: a55b01af616898bfb1167fc567f3a6e22bb2800811a7f41f1c037f10bdc653894fc4c7000cce3a01e852628fd85044dff51d6d41f65f356a2ea847de3178b6ec languageName: node linkType: hard @@ -26527,6 +26369,22 @@ __metadata: languageName: node linkType: hard +"es-define-property@npm:^1.0.0": + version: 1.0.0 + resolution: "es-define-property@npm:1.0.0" + dependencies: + get-intrinsic: ^1.2.4 + checksum: f66ece0a887b6dca71848fa71f70461357c0e4e7249696f81bad0a1f347eed7b31262af4a29f5d726dc026426f085483b6b90301855e647aa8e21936f07293c6 + languageName: node + linkType: hard + +"es-errors@npm:^1.1.0, es-errors@npm:^1.2.1, es-errors@npm:^1.3.0": + version: 1.3.0 + resolution: "es-errors@npm:1.3.0" + checksum: ec1414527a0ccacd7f15f4a3bc66e215f04f595ba23ca75cdae0927af099b5ec865f9f4d33e9d7e86f512f252876ac77d4281a7871531a50678132429b1271b5 + languageName: node + linkType: hard + "es-get-iterator@npm:^1.1.2": version: 1.1.2 resolution: "es-get-iterator@npm:1.1.2" @@ -26543,25 +26401,25 @@ __metadata: languageName: node linkType: hard -"es-iterator-helpers@npm:^1.0.12, es-iterator-helpers@npm:^1.0.15": - version: 1.0.15 - resolution: "es-iterator-helpers@npm:1.0.15" +"es-iterator-helpers@npm:^1.0.15, es-iterator-helpers@npm:^1.0.17": + version: 1.0.18 + resolution: "es-iterator-helpers@npm:1.0.18" dependencies: - asynciterator.prototype: ^1.0.0 - call-bind: ^1.0.2 + call-bind: ^1.0.7 define-properties: ^1.2.1 - es-abstract: ^1.22.1 - es-set-tostringtag: ^2.0.1 - function-bind: ^1.1.1 - get-intrinsic: ^1.2.1 + es-abstract: ^1.23.0 + es-errors: ^1.3.0 + es-set-tostringtag: ^2.0.3 + function-bind: ^1.1.2 + get-intrinsic: ^1.2.4 globalthis: ^1.0.3 - has-property-descriptors: ^1.0.0 - has-proto: ^1.0.1 + has-property-descriptors: ^1.0.2 + has-proto: ^1.0.3 has-symbols: ^1.0.3 - internal-slot: ^1.0.5 + internal-slot: ^1.0.7 iterator.prototype: ^1.1.2 - safe-array-concat: ^1.0.1 - checksum: 50081ae5c549efe62e5c1d244df0194b40b075f7897fc2116b7e1aa437eb3c41f946d2afda18c33f9b31266ec544765932542765af839f76fa6d7b7855d1e0e1 + safe-array-concat: ^1.1.2 + checksum: 1594324ff3ca8890fe30c98b2419d3007d2b14b35f9773f188114408ff973e13c526f6045d88209e932f58dc0c55fc9a4ae1554636f8938ed7d926ffc27d3e1a languageName: node linkType: hard @@ -26579,23 +26437,32 @@ __metadata: languageName: node linkType: hard -"es-set-tostringtag@npm:^2.0.1": - version: 2.0.1 - resolution: "es-set-tostringtag@npm:2.0.1" +"es-object-atoms@npm:^1.0.0": + version: 1.0.0 + resolution: "es-object-atoms@npm:1.0.0" dependencies: - get-intrinsic: ^1.1.3 - has: ^1.0.3 - has-tostringtag: ^1.0.0 - checksum: ec416a12948cefb4b2a5932e62093a7cf36ddc3efd58d6c58ca7ae7064475ace556434b869b0bbeb0c365f1032a8ccd577211101234b69837ad83ad204fff884 + es-errors: ^1.3.0 + checksum: 26f0ff78ab93b63394e8403c353842b2272836968de4eafe97656adfb8a7c84b9099bf0fe96ed58f4a4cddc860f6e34c77f91649a58a5daa4a9c40b902744e3c languageName: node linkType: hard -"es-shim-unscopables@npm:^1.0.0": - version: 1.0.0 - resolution: "es-shim-unscopables@npm:1.0.0" +"es-set-tostringtag@npm:^2.0.3": + version: 2.0.3 + resolution: "es-set-tostringtag@npm:2.0.3" dependencies: - has: ^1.0.3 - checksum: 83e95cadbb6ee44d3644dfad60dcad7929edbc42c85e66c3e99aefd68a3a5c5665f2686885cddb47dfeabfd77bd5ea5a7060f2092a955a729bbd8834f0d86fa1 + get-intrinsic: ^1.2.4 + has-tostringtag: ^1.0.2 + hasown: ^2.0.1 + checksum: 7227fa48a41c0ce83e0377b11130d324ac797390688135b8da5c28994c0165be8b252e15cd1de41e1325e5a5412511586960213e88f9ab4a5e7d028895db5129 + languageName: node + linkType: hard + +"es-shim-unscopables@npm:^1.0.0, es-shim-unscopables@npm:^1.0.2": + version: 1.0.2 + resolution: "es-shim-unscopables@npm:1.0.2" + dependencies: + hasown: ^2.0.0 + checksum: 432bd527c62065da09ed1d37a3f8e623c423683285e6188108286f4a1e8e164a5bcbfbc0051557c7d14633cd2a41ce24c7048e6bbb66a985413fd32f1be72626 languageName: node linkType: hard @@ -26670,16 +26537,16 @@ __metadata: linkType: hard "esbuild-loader@npm:^4.0.0": - version: 4.0.3 - resolution: "esbuild-loader@npm:4.0.3" + version: 4.1.0 + resolution: "esbuild-loader@npm:4.1.0" dependencies: - esbuild: ^0.19.0 + esbuild: ^0.20.0 get-tsconfig: ^4.7.0 loader-utils: ^2.0.4 webpack-sources: ^1.4.3 peerDependencies: webpack: ^4.40.0 || ^5.0.0 - checksum: 8303a106ec9e74fb4ad2c10f5e23fb082d742cfa7bc42b1476886a9f49ef1bff99cb39c1a569827195865d2d179a09a54bedfd34fae82841ce1f02beebfd9127 + checksum: 51e76c36dd1fb70545889b07e3c4b4a437aaf1a2acc836e83141f06bcb8fbf96af778cf21b37355ea724c30504ad288ba76b0554ff94af260bb12ece647de861 languageName: node linkType: hard @@ -26760,113 +26627,33 @@ __metadata: languageName: node linkType: hard -"esbuild@npm:^0.19.0, esbuild@npm:~0.19.10": - version: 0.19.12 - resolution: "esbuild@npm:0.19.12" - dependencies: - "@esbuild/aix-ppc64": 0.19.12 - "@esbuild/android-arm": 0.19.12 - "@esbuild/android-arm64": 0.19.12 - "@esbuild/android-x64": 0.19.12 - "@esbuild/darwin-arm64": 0.19.12 - "@esbuild/darwin-x64": 0.19.12 - "@esbuild/freebsd-arm64": 0.19.12 - "@esbuild/freebsd-x64": 0.19.12 - "@esbuild/linux-arm": 0.19.12 - "@esbuild/linux-arm64": 0.19.12 - "@esbuild/linux-ia32": 0.19.12 - "@esbuild/linux-loong64": 0.19.12 - "@esbuild/linux-mips64el": 0.19.12 - "@esbuild/linux-ppc64": 0.19.12 - "@esbuild/linux-riscv64": 0.19.12 - "@esbuild/linux-s390x": 0.19.12 - "@esbuild/linux-x64": 0.19.12 - "@esbuild/netbsd-x64": 0.19.12 - "@esbuild/openbsd-x64": 0.19.12 - "@esbuild/sunos-x64": 0.19.12 - "@esbuild/win32-arm64": 0.19.12 - "@esbuild/win32-ia32": 0.19.12 - "@esbuild/win32-x64": 0.19.12 - dependenciesMeta: - "@esbuild/aix-ppc64": - optional: true - "@esbuild/android-arm": - optional: true - "@esbuild/android-arm64": - optional: true - "@esbuild/android-x64": - optional: true - "@esbuild/darwin-arm64": - optional: true - "@esbuild/darwin-x64": - optional: true - "@esbuild/freebsd-arm64": - optional: true - "@esbuild/freebsd-x64": - optional: true - "@esbuild/linux-arm": - optional: true - "@esbuild/linux-arm64": - optional: true - "@esbuild/linux-ia32": - optional: true - "@esbuild/linux-loong64": - optional: true - "@esbuild/linux-mips64el": - optional: true - "@esbuild/linux-ppc64": - optional: true - "@esbuild/linux-riscv64": - optional: true - "@esbuild/linux-s390x": - optional: true - "@esbuild/linux-x64": - optional: true - "@esbuild/netbsd-x64": - optional: true - "@esbuild/openbsd-x64": - optional: true - "@esbuild/sunos-x64": - optional: true - "@esbuild/win32-arm64": - optional: true - "@esbuild/win32-ia32": - optional: true - "@esbuild/win32-x64": - optional: true - bin: - esbuild: bin/esbuild - checksum: 2936e29107b43e65a775b78b7bc66ddd7d76febd73840ac7e825fb22b65029422ff51038a08d19b05154f543584bd3afe7d1ef1c63900429475b17fbe61cb61f - languageName: node - linkType: hard - "esbuild@npm:^0.20.0": - version: 0.20.1 - resolution: "esbuild@npm:0.20.1" + version: 0.20.2 + resolution: "esbuild@npm:0.20.2" dependencies: - "@esbuild/aix-ppc64": 0.20.1 - "@esbuild/android-arm": 0.20.1 - "@esbuild/android-arm64": 0.20.1 - "@esbuild/android-x64": 0.20.1 - "@esbuild/darwin-arm64": 0.20.1 - "@esbuild/darwin-x64": 0.20.1 - "@esbuild/freebsd-arm64": 0.20.1 - "@esbuild/freebsd-x64": 0.20.1 - "@esbuild/linux-arm": 0.20.1 - "@esbuild/linux-arm64": 0.20.1 - "@esbuild/linux-ia32": 0.20.1 - "@esbuild/linux-loong64": 0.20.1 - "@esbuild/linux-mips64el": 0.20.1 - "@esbuild/linux-ppc64": 0.20.1 - "@esbuild/linux-riscv64": 0.20.1 - "@esbuild/linux-s390x": 0.20.1 - "@esbuild/linux-x64": 0.20.1 - "@esbuild/netbsd-x64": 0.20.1 - "@esbuild/openbsd-x64": 0.20.1 - "@esbuild/sunos-x64": 0.20.1 - "@esbuild/win32-arm64": 0.20.1 - "@esbuild/win32-ia32": 0.20.1 - "@esbuild/win32-x64": 0.20.1 + "@esbuild/aix-ppc64": 0.20.2 + "@esbuild/android-arm": 0.20.2 + "@esbuild/android-arm64": 0.20.2 + "@esbuild/android-x64": 0.20.2 + "@esbuild/darwin-arm64": 0.20.2 + "@esbuild/darwin-x64": 0.20.2 + "@esbuild/freebsd-arm64": 0.20.2 + "@esbuild/freebsd-x64": 0.20.2 + "@esbuild/linux-arm": 0.20.2 + "@esbuild/linux-arm64": 0.20.2 + "@esbuild/linux-ia32": 0.20.2 + "@esbuild/linux-loong64": 0.20.2 + "@esbuild/linux-mips64el": 0.20.2 + "@esbuild/linux-ppc64": 0.20.2 + "@esbuild/linux-riscv64": 0.20.2 + "@esbuild/linux-s390x": 0.20.2 + "@esbuild/linux-x64": 0.20.2 + "@esbuild/netbsd-x64": 0.20.2 + "@esbuild/openbsd-x64": 0.20.2 + "@esbuild/sunos-x64": 0.20.2 + "@esbuild/win32-arm64": 0.20.2 + "@esbuild/win32-ia32": 0.20.2 + "@esbuild/win32-x64": 0.20.2 dependenciesMeta: "@esbuild/aix-ppc64": optional: true @@ -26916,7 +26703,7 @@ __metadata: optional: true bin: esbuild: bin/esbuild - checksum: af8b3c79e48d303501cac8551bf1ac5ebf5d86eebf2d1eb9d2a7018f4c5506bb120ed2454a013e3387e499de780a916bbffc9edd4ef132be403cd39771ace045 + checksum: bc88050fc1ca5c1bd03648f9979e514bdefb956a63aa3974373bb7b9cbac0b3aac9b9da1b5bdca0b3490e39d6b451c72815dbd6b7d7f978c91fbe9c9e9aa4e4c languageName: node linkType: hard @@ -27161,28 +26948,30 @@ __metadata: linkType: hard "eslint-plugin-react@npm:^7.28.0": - version: 7.33.2 - resolution: "eslint-plugin-react@npm:7.33.2" + version: 7.34.1 + resolution: "eslint-plugin-react@npm:7.34.1" dependencies: - array-includes: ^3.1.6 - array.prototype.flatmap: ^1.3.1 - array.prototype.tosorted: ^1.1.1 + array-includes: ^3.1.7 + array.prototype.findlast: ^1.2.4 + array.prototype.flatmap: ^1.3.2 + array.prototype.toreversed: ^1.1.2 + array.prototype.tosorted: ^1.1.3 doctrine: ^2.1.0 - es-iterator-helpers: ^1.0.12 + es-iterator-helpers: ^1.0.17 estraverse: ^5.3.0 jsx-ast-utils: ^2.4.1 || ^3.0.0 minimatch: ^3.1.2 - object.entries: ^1.1.6 - object.fromentries: ^2.0.6 - object.hasown: ^1.1.2 - object.values: ^1.1.6 + object.entries: ^1.1.7 + object.fromentries: ^2.0.7 + object.hasown: ^1.1.3 + object.values: ^1.1.7 prop-types: ^15.8.1 - resolve: ^2.0.0-next.4 + resolve: ^2.0.0-next.5 semver: ^6.3.1 - string.prototype.matchall: ^4.0.8 + string.prototype.matchall: ^4.0.10 peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - checksum: b4c3d76390b0ae6b6f9fed78170604cc2c04b48e6778a637db339e8e3911ec9ef22510b0ae77c429698151d0f1b245f282177f384105b6830e7b29b9c9b26610 + checksum: 82f391c5a093235c3bc2f664c54e009c49460778ee7d1b86c1536df9ac4d2a80d1dedc9241ac797df4a9dced936e955d9c89042fb3ac8d017b5359d1320d3c0f languageName: node linkType: hard @@ -27247,18 +27036,18 @@ __metadata: linkType: hard "eslint-webpack-plugin@npm:^4.0.0": - version: 4.0.1 - resolution: "eslint-webpack-plugin@npm:4.0.1" + version: 4.1.0 + resolution: "eslint-webpack-plugin@npm:4.1.0" dependencies: - "@types/eslint": ^8.37.0 - jest-worker: ^29.5.0 + "@types/eslint": ^8.56.5 + jest-worker: ^29.7.0 micromatch: ^4.0.5 normalize-path: ^3.0.0 - schema-utils: ^4.0.0 + schema-utils: ^4.2.0 peerDependencies: eslint: ^8.0.0 webpack: ^5.0.0 - checksum: 94fe0817fc580729dc6edc4a31c9f7dbeb97ad134c6c4192feab66aae711ed5afe35c5bc8d5e99b39626b469300196df72e631f5e53c55723adbf850765924e5 + checksum: 1676ff08b0424e4656aa638a0c2a7b2f3f6a504651689a2d86b237c9a52ad65e17aeb5abbe13663e25353d8a706dcf45f49dbe4795dad27b6b0650db8aa21b16 languageName: node linkType: hard @@ -27930,20 +27719,7 @@ __metadata: languageName: node linkType: hard -"expect@npm:^28.0.0": - version: 28.1.3 - resolution: "expect@npm:28.1.3" - dependencies: - "@jest/expect-utils": ^28.1.3 - jest-get-type: ^28.0.2 - jest-matcher-utils: ^28.1.3 - jest-message-util: ^28.1.3 - jest-util: ^28.1.3 - checksum: 101e0090de300bcafedb7dbfd19223368a2251ce5fe0105bbb6de5720100b89fb6b64290ebfb42febc048324c76d6a4979cdc4b61eb77747857daf7a5de9b03d - languageName: node - linkType: hard - -"expect@npm:^29.0.0, expect@npm:^29.7.0": +"expect@npm:>28.1.3, expect@npm:^29.0.0, expect@npm:^29.7.0": version: 29.7.0 resolution: "expect@npm:29.7.0" dependencies: @@ -28041,12 +27817,12 @@ __metadata: linkType: hard "express@npm:^4.14.0, express@npm:^4.17.1, express@npm:^4.17.3, express@npm:^4.18.1, express@npm:^4.18.2": - version: 4.18.2 - resolution: "express@npm:4.18.2" + version: 4.18.3 + resolution: "express@npm:4.18.3" dependencies: accepts: ~1.3.8 array-flatten: 1.1.1 - body-parser: 1.20.1 + body-parser: 1.20.2 content-disposition: 0.5.4 content-type: ~1.0.4 cookie: 0.5.0 @@ -28075,7 +27851,7 @@ __metadata: type-is: ~1.6.18 utils-merge: 1.0.1 vary: ~1.1.2 - checksum: 3c4b9b076879442f6b968fe53d85d9f1eeacbb4f4c41e5f16cc36d77ce39a2b0d81b3f250514982110d815b2f7173f5561367f9110fcc541f9371948e8c8b037 + checksum: 3d7fc8762a81dee0adf0b604f11627db2af082c5f2234e78a4aa8134f22c51f96c6282063f2f8b87f5dbc70679a3087caccb93b6107e324c6feb3a70960a5864 languageName: node linkType: hard @@ -28660,13 +28436,13 @@ __metadata: languageName: node linkType: hard -"follow-redirects@npm:^1.0.0, follow-redirects@npm:^1.14.0, follow-redirects@npm:^1.14.9, follow-redirects@npm:^1.15.4": - version: 1.15.4 - resolution: "follow-redirects@npm:1.15.4" +"follow-redirects@npm:^1.0.0, follow-redirects@npm:^1.14.0, follow-redirects@npm:^1.14.9, follow-redirects@npm:^1.15.4, follow-redirects@npm:^1.15.6": + version: 1.15.6 + resolution: "follow-redirects@npm:1.15.6" peerDependenciesMeta: debug: optional: true - checksum: e178d1deff8b23d5d24ec3f7a94cde6e47d74d0dc649c35fc9857041267c12ec5d44650a0c5597ef83056ada9ea6ca0c30e7c4f97dbf07d035086be9e6a5b7b6 + checksum: a62c378dfc8c00f60b9c80cab158ba54e99ba0239a5dd7c81245e5a5b39d10f0c35e249c3379eae719ff0285fff88c365dd446fab19dee771f1d76252df1bbf5 languageName: node linkType: hard @@ -28995,7 +28771,7 @@ __metadata: languageName: node linkType: hard -"fsevents@npm:^2.3.2, fsevents@npm:~2.3.2, fsevents@npm:~2.3.3": +"fsevents@npm:^2.3.2, fsevents@npm:~2.3.2": version: 2.3.3 resolution: "fsevents@npm:2.3.3" dependencies: @@ -29014,7 +28790,7 @@ __metadata: languageName: node linkType: hard -"fsevents@patch:fsevents@^2.3.2#~builtin, fsevents@patch:fsevents@~2.3.2#~builtin, fsevents@patch:fsevents@~2.3.3#~builtin": +"fsevents@patch:fsevents@^2.3.2#~builtin, fsevents@patch:fsevents@~2.3.2#~builtin": version: 2.3.3 resolution: "fsevents@patch:fsevents@npm%3A2.3.3#~builtin::version=2.3.3&hash=df0bf1" dependencies: @@ -29161,15 +28937,16 @@ __metadata: languageName: node linkType: hard -"get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.0, get-intrinsic@npm:^1.1.1, get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.0, get-intrinsic@npm:^1.2.1, get-intrinsic@npm:^1.2.2": - version: 1.2.2 - resolution: "get-intrinsic@npm:1.2.2" +"get-intrinsic@npm:^1.1.0, get-intrinsic@npm:^1.1.1, get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.1, get-intrinsic@npm:^1.2.3, get-intrinsic@npm:^1.2.4": + version: 1.2.4 + resolution: "get-intrinsic@npm:1.2.4" dependencies: + es-errors: ^1.3.0 function-bind: ^1.1.2 has-proto: ^1.0.1 has-symbols: ^1.0.3 hasown: ^2.0.0 - checksum: 447ff0724df26829908dc033b62732359596fcf66027bc131ab37984afb33842d9cd458fd6cecadfe7eac22fd8a54b349799ed334cf2726025c921c7250e7417 + checksum: 414e3cdf2c203d1b9d7d33111df746a4512a1aa622770b361dadddf8ed0b5aeb26c560f49ca077e24bfafb0acb55ca908d1f709216ccba33ffc548ec8a79a951 languageName: node linkType: hard @@ -29240,17 +29017,18 @@ __metadata: languageName: node linkType: hard -"get-symbol-description@npm:^1.0.0": - version: 1.0.0 - resolution: "get-symbol-description@npm:1.0.0" +"get-symbol-description@npm:^1.0.2": + version: 1.0.2 + resolution: "get-symbol-description@npm:1.0.2" dependencies: - call-bind: ^1.0.2 - get-intrinsic: ^1.1.1 - checksum: 9ceff8fe968f9270a37a1f73bf3f1f7bda69ca80f4f80850670e0e7b9444ff99323f7ac52f96567f8b5f5fbe7ac717a0d81d3407c7313e82810c6199446a5247 + call-bind: ^1.0.5 + es-errors: ^1.3.0 + get-intrinsic: ^1.2.4 + checksum: e1cb53bc211f9dbe9691a4f97a46837a553c4e7caadd0488dc24ac694db8a390b93edd412b48dcdd0b4bbb4c595de1709effc75fc87c0839deedc6968f5bd973 languageName: node linkType: hard -"get-tsconfig@npm:^4.7.0, get-tsconfig@npm:^4.7.2": +"get-tsconfig@npm:^4.7.0": version: 4.7.2 resolution: "get-tsconfig@npm:4.7.2" dependencies: @@ -29500,9 +29278,9 @@ __metadata: languageName: node linkType: hard -"google-auth-library@npm:^9.0.0": - version: 9.6.3 - resolution: "google-auth-library@npm:9.6.3" +"google-auth-library@npm:^9.0.0, google-auth-library@npm:^9.6.3": + version: 9.7.0 + resolution: "google-auth-library@npm:9.7.0" dependencies: base64-js: ^1.3.0 ecdsa-sig-formatter: ^1.0.11 @@ -29510,7 +29288,7 @@ __metadata: gcp-metadata: ^6.1.0 gtoken: ^7.0.0 jws: ^4.0.0 - checksum: 46174191de15ec56110ac0394ae9d1c56fb6aa293809d45170b2ff570130d7e3f3e82fa78d413908862a2d0da3fa946b72f1074000f4d52579eb17367e49e44d + checksum: b0f273fa08ac69cf38f037c195c137ef9d1f3d197c31fd57db957bd5c38c4a110e1c029504f09574a59fa6c9c85fc6fb9d7748c2ed75f30ecae0c71daa369c23 languageName: node linkType: hard @@ -29608,23 +29386,7 @@ __metadata: languageName: node linkType: hard -"graphiql@npm:3.1.0": - version: 3.1.0 - resolution: "graphiql@npm:3.1.0" - dependencies: - "@graphiql/react": ^0.20.2 - "@graphiql/toolkit": ^0.9.1 - graphql-language-service: ^5.2.0 - markdown-it: ^12.2.0 - peerDependencies: - graphql: ^15.5.0 || ^16.0.0 - react: ^16.8.0 || ^17 || ^18 - react-dom: ^16.8.0 || ^17 || ^18 - checksum: a8969ea299561fe627ba566fb72dd90eda31b195e9983af87c4079bf807f5b356d116ece133e46d5098d6809a88b8f3b64b04a9e95dfe34cd84eb8fd109e2b8a - languageName: node - linkType: hard - -"graphiql@npm:^3.0.6": +"graphiql@npm:3.1.1, graphiql@npm:^3.0.6": version: 3.1.1 resolution: "graphiql@npm:3.1.1" dependencies: @@ -29897,19 +29659,19 @@ __metadata: languageName: node linkType: hard -"has-property-descriptors@npm:^1.0.0": - version: 1.0.0 - resolution: "has-property-descriptors@npm:1.0.0" +"has-property-descriptors@npm:^1.0.0, has-property-descriptors@npm:^1.0.2": + version: 1.0.2 + resolution: "has-property-descriptors@npm:1.0.2" dependencies: - get-intrinsic: ^1.1.1 - checksum: a6d3f0a266d0294d972e354782e872e2fe1b6495b321e6ef678c9b7a06a40408a6891817350c62e752adced73a94ac903c54734fee05bf65b1905ee1368194bb + es-define-property: ^1.0.0 + checksum: fcbb246ea2838058be39887935231c6d5788babed499d0e9d0cc5737494c48aba4fe17ba1449e0d0fbbb1e36175442faa37f9c427ae357d6ccb1d895fbcd3de3 languageName: node linkType: hard -"has-proto@npm:^1.0.1": - version: 1.0.1 - resolution: "has-proto@npm:1.0.1" - checksum: febc5b5b531de8022806ad7407935e2135f1cc9e64636c3916c6842bd7995994ca3b29871ecd7954bd35f9e2986c17b3b227880484d22259e2f8e6ce63fd383e +"has-proto@npm:^1.0.1, has-proto@npm:^1.0.3": + version: 1.0.3 + resolution: "has-proto@npm:1.0.3" + checksum: fe7c3d50b33f50f3933a04413ed1f69441d21d2d2944f81036276d30635cad9279f6b43bc8f32036c31ebdfcf6e731150f46c1907ad90c669ffe9b066c3ba5c4 languageName: node linkType: hard @@ -29920,12 +29682,12 @@ __metadata: languageName: node linkType: hard -"has-tostringtag@npm:^1.0.0": - version: 1.0.0 - resolution: "has-tostringtag@npm:1.0.0" +"has-tostringtag@npm:^1.0.0, has-tostringtag@npm:^1.0.2": + version: 1.0.2 + resolution: "has-tostringtag@npm:1.0.2" dependencies: - has-symbols: ^1.0.2 - checksum: cc12eb28cb6ae22369ebaad3a8ab0799ed61270991be88f208d508076a1e99abe4198c965935ce85ea90b60c94ddda73693b0920b58e7ead048b4a391b502c1c + has-symbols: ^1.0.3 + checksum: 999d60bb753ad714356b2c6c87b7fb74f32463b8426e159397da4bde5bca7e598ab1073f4d8d4deafac297f2eb311484cd177af242776bf05f0d11565680468d languageName: node linkType: hard @@ -29943,15 +29705,6 @@ __metadata: languageName: node linkType: hard -"has@npm:^1.0.3": - version: 1.0.3 - resolution: "has@npm:1.0.3" - dependencies: - function-bind: ^1.1.1 - checksum: b9ad53d53be4af90ce5d1c38331e712522417d017d5ef1ebd0507e07c2fbad8686fffb8e12ddecd4c39ca9b9b47431afbb975b8abf7f3c3b82c98e9aad052792 - languageName: node - linkType: hard - "hash-base@npm:^3.0.0": version: 3.0.4 resolution: "hash-base@npm:3.0.4" @@ -29979,12 +29732,12 @@ __metadata: languageName: node linkType: hard -"hasown@npm:^2.0.0": - version: 2.0.0 - resolution: "hasown@npm:2.0.0" +"hasown@npm:^2.0.0, hasown@npm:^2.0.1, hasown@npm:^2.0.2": + version: 2.0.2 + resolution: "hasown@npm:2.0.2" dependencies: function-bind: ^1.1.2 - checksum: 6151c75ca12554565098641c98a40f4cc86b85b0fd5b6fe92360967e4605a4f9610f7757260b4e8098dd1c2ce7f4b095f2006fe72a570e3b6d2d28de0298c176 + checksum: e8516f776a15149ca6c6ed2ae3110c417a00b62260e222590e54aa367cbcd6ed99122020b37b7fbdf05748df57b265e70095d7bf35a47660587619b15ffb93db languageName: node linkType: hard @@ -30799,14 +30552,14 @@ __metadata: languageName: node linkType: hard -"internal-slot@npm:^1.0.3, internal-slot@npm:^1.0.5": - version: 1.0.5 - resolution: "internal-slot@npm:1.0.5" +"internal-slot@npm:^1.0.5, internal-slot@npm:^1.0.7": + version: 1.0.7 + resolution: "internal-slot@npm:1.0.7" dependencies: - get-intrinsic: ^1.2.0 - has: ^1.0.3 + es-errors: ^1.3.0 + hasown: ^2.0.0 side-channel: ^1.0.4 - checksum: 97e84046bf9e7574d0956bd98d7162313ce7057883b6db6c5c7b5e5f05688864b0978ba07610c726d15d66544ffe4b1050107d93f8a39ebc59b15d8b429b497a + checksum: cadc5eea5d7d9bc2342e93aae9f31f04c196afebb11bde97448327049f492cd7081e18623ae71388aac9cd237b692ca3a105be9c68ac39c1dec679d7409e33eb languageName: node linkType: hard @@ -30955,14 +30708,13 @@ __metadata: languageName: node linkType: hard -"is-array-buffer@npm:^3.0.1, is-array-buffer@npm:^3.0.2": - version: 3.0.2 - resolution: "is-array-buffer@npm:3.0.2" +"is-array-buffer@npm:^3.0.1, is-array-buffer@npm:^3.0.4": + version: 3.0.4 + resolution: "is-array-buffer@npm:3.0.4" dependencies: call-bind: ^1.0.2 - get-intrinsic: ^1.2.0 - is-typed-array: ^1.1.10 - checksum: dcac9dda66ff17df9cabdc58214172bf41082f956eab30bb0d86bc0fab1e44b690fc8e1f855cf2481245caf4e8a5a006a982a71ddccec84032ed41f9d8da8c14 + get-intrinsic: ^1.2.1 + checksum: e4e3e6ef0ff2239e75371d221f74bc3c26a03564a22efb39f6bb02609b598917ddeecef4e8c877df2a25888f247a98198959842a5e73236bc7f22cabdf6351a7 languageName: node linkType: hard @@ -31058,7 +30810,7 @@ __metadata: languageName: node linkType: hard -"is-core-module@npm:^2.1.0, is-core-module@npm:^2.13.0, is-core-module@npm:^2.13.1, is-core-module@npm:^2.8.1, is-core-module@npm:^2.9.0": +"is-core-module@npm:^2.1.0, is-core-module@npm:^2.13.0, is-core-module@npm:^2.13.1, is-core-module@npm:^2.8.1": version: 2.13.1 resolution: "is-core-module@npm:2.13.1" dependencies: @@ -31067,6 +30819,15 @@ __metadata: languageName: node linkType: hard +"is-data-view@npm:^1.0.1": + version: 1.0.1 + resolution: "is-data-view@npm:1.0.1" + dependencies: + is-typed-array: ^1.1.13 + checksum: 4ba4562ac2b2ec005fefe48269d6bd0152785458cd253c746154ffb8a8ab506a29d0cfb3b74af87513843776a88e4981ae25c89457bf640a33748eab1a7216b5 + languageName: node + linkType: hard + "is-date-object@npm:^1.0.1, is-date-object@npm:^1.0.5": version: 1.0.5 resolution: "is-date-object@npm:1.0.5" @@ -31249,10 +31010,10 @@ __metadata: languageName: node linkType: hard -"is-negative-zero@npm:^2.0.2": - version: 2.0.2 - resolution: "is-negative-zero@npm:2.0.2" - checksum: f3232194c47a549da60c3d509c9a09be442507616b69454716692e37ae9f37c4dea264fb208ad0c9f3efd15a796a46b79df07c7e53c6227c32170608b809149a +"is-negative-zero@npm:^2.0.3": + version: 2.0.3 + resolution: "is-negative-zero@npm:2.0.3" + checksum: c1e6b23d2070c0539d7b36022d5a94407132411d01aba39ec549af824231f3804b1aea90b5e4e58e807a65d23ceb538ed6e355ce76b267bdd86edb757ffcbdcd languageName: node linkType: hard @@ -31449,12 +31210,12 @@ __metadata: languageName: node linkType: hard -"is-shared-array-buffer@npm:^1.0.2": - version: 1.0.2 - resolution: "is-shared-array-buffer@npm:1.0.2" +"is-shared-array-buffer@npm:^1.0.2, is-shared-array-buffer@npm:^1.0.3": + version: 1.0.3 + resolution: "is-shared-array-buffer@npm:1.0.3" dependencies: - call-bind: ^1.0.2 - checksum: 9508929cf14fdc1afc9d61d723c6e8d34f5e117f0bffda4d97e7a5d88c3a8681f633a74f8e3ad1fe92d5113f9b921dc5ca44356492079612f9a247efbce7032a + call-bind: ^1.0.7 + checksum: a4fff602c309e64ccaa83b859255a43bb011145a42d3f56f67d9268b55bc7e6d98a5981a1d834186ad3105d6739d21547083fe7259c76c0468483fc538e716d8 languageName: node linkType: hard @@ -31515,12 +31276,12 @@ __metadata: languageName: node linkType: hard -"is-typed-array@npm:^1.1.10, is-typed-array@npm:^1.1.12, is-typed-array@npm:^1.1.3, is-typed-array@npm:^1.1.9": - version: 1.1.12 - resolution: "is-typed-array@npm:1.1.12" +"is-typed-array@npm:^1.1.13, is-typed-array@npm:^1.1.3": + version: 1.1.13 + resolution: "is-typed-array@npm:1.1.13" dependencies: - which-typed-array: ^1.1.11 - checksum: 4c89c4a3be07186caddadf92197b17fda663a9d259ea0d44a85f171558270d36059d1c386d34a12cba22dfade5aba497ce22778e866adc9406098c8fc4771796 + which-typed-array: ^1.1.14 + checksum: 150f9ada183a61554c91e1c4290086d2c100b0dff45f60b028519be72a8db964da403c48760723bf5253979b8dffe7b544246e0e5351dcd05c5fdb1dcc1dc0f0 languageName: node linkType: hard @@ -32004,18 +31765,6 @@ __metadata: languageName: node linkType: hard -"jest-diff@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-diff@npm:28.1.3" - dependencies: - chalk: ^4.0.0 - diff-sequences: ^28.1.1 - jest-get-type: ^28.0.2 - pretty-format: ^28.1.3 - checksum: fa8583e0ccbe775714ce850b009be1b0f6b17a4b6759f33ff47adef27942ebc610dbbcc8a5f7cfb7f12b3b3b05afc9fb41d5f766674616025032ff1e4f9866e0 - languageName: node - linkType: hard - "jest-diff@npm:^29.2.0, jest-diff@npm:^29.7.0": version: 29.7.0 resolution: "jest-diff@npm:29.7.0" @@ -32085,13 +31834,6 @@ __metadata: languageName: node linkType: hard -"jest-get-type@npm:^28.0.2": - version: 28.0.2 - resolution: "jest-get-type@npm:28.0.2" - checksum: 5281d7c89bc8156605f6d15784f45074f4548501195c26e9b188742768f72d40948252d13230ea905b5349038865a1a8eeff0e614cc530ff289dfc41fe843abd - languageName: node - linkType: hard - "jest-get-type@npm:^29.6.3": version: 29.6.3 resolution: "jest-get-type@npm:29.6.3" @@ -32155,18 +31897,6 @@ __metadata: languageName: node linkType: hard -"jest-matcher-utils@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-matcher-utils@npm:28.1.3" - dependencies: - chalk: ^4.0.0 - jest-diff: ^28.1.3 - jest-get-type: ^28.0.2 - pretty-format: ^28.1.3 - checksum: 6b34f0cf66f6781e92e3bec97bf27796bd2ba31121e5c5997218d9adba6deea38a30df5203937d6785b68023ed95cbad73663cc9aad6fb0cb59aeb5813a58daf - languageName: node - linkType: hard - "jest-matcher-utils@npm:^29.7.0": version: 29.7.0 resolution: "jest-matcher-utils@npm:29.7.0" @@ -32179,23 +31909,6 @@ __metadata: languageName: node linkType: hard -"jest-message-util@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-message-util@npm:28.1.3" - dependencies: - "@babel/code-frame": ^7.12.13 - "@jest/types": ^28.1.3 - "@types/stack-utils": ^2.0.0 - chalk: ^4.0.0 - graceful-fs: ^4.2.9 - micromatch: ^4.0.4 - pretty-format: ^28.1.3 - slash: ^3.0.0 - stack-utils: ^2.0.3 - checksum: 1f266854166dcc6900d75a88b54a25225a2f3710d463063ff1c99021569045c35c7d58557b25447a17eb3a65ce763b2f9b25550248b468a9d4657db365f39e96 - languageName: node - linkType: hard - "jest-message-util@npm:^29.7.0": version: 29.7.0 resolution: "jest-message-util@npm:29.7.0" @@ -32357,20 +32070,6 @@ __metadata: languageName: node linkType: hard -"jest-util@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-util@npm:28.1.3" - dependencies: - "@jest/types": ^28.1.3 - "@types/node": "*" - chalk: ^4.0.0 - ci-info: ^3.2.0 - graceful-fs: ^4.2.9 - picomatch: ^2.2.3 - checksum: fd6459742c941f070223f25e38a2ac0719aad92561591e9fb2a50d602a5d19d754750b79b4074327a42b00055662b95da3b006542ceb8b54309da44d4a62e721 - languageName: node - linkType: hard - "jest-util@npm:^29.7.0": version: 29.7.0 resolution: "jest-util@npm:29.7.0" @@ -32445,7 +32144,7 @@ __metadata: languageName: node linkType: hard -"jest-worker@npm:^29.5.0, jest-worker@npm:^29.7.0": +"jest-worker@npm:^29.7.0": version: 29.7.0 resolution: "jest-worker@npm:29.7.0" dependencies: @@ -32506,17 +32205,17 @@ __metadata: languageName: node linkType: hard -"jose@npm:^4.15.4": - version: 4.15.4 - resolution: "jose@npm:4.15.4" - checksum: dccad91cb3357f36423774a0b89ad830dd84b31090de65cd139b85488439f16a00f8c59c0773825e8a1adb0dd9d13ad725ad66e6ea33880ecb3959bb99e1ea5b +"jose@npm:^4.15.5": + version: 4.15.5 + resolution: "jose@npm:4.15.5" + checksum: 7dde76447c7707bd4b448f914b216f3858e701aa83f00447434252461af5b9e159dcbffb88badea3f9616739526763581267c9560622f0a058df8d68c86d7f79 languageName: node linkType: hard "jose@npm:^5.0.0": - version: 5.2.2 - resolution: "jose@npm:5.2.2" - checksum: d23def3c1df8aae1ae59d1c027a073804034fe8b971dafe51f0452ca8f6eb7e5cd3e3c90b6e544776443e01e58c8f8eefbd1984dbcde378e693e0ebbd176584d + version: 5.2.3 + resolution: "jose@npm:5.2.3" + checksum: 7c41025d3e449f654a4cbf0e18e3a4a3bcb74b242d716e2e665a20be5c93b3f68421032a4531fd984d4bad6aa225c7c517da18da6e0cf778b104cd7e30bde5de languageName: node linkType: hard @@ -32858,13 +32557,12 @@ __metadata: linkType: hard "json-schema-to-ts@npm:^3.0.0": - version: 3.0.0 - resolution: "json-schema-to-ts@npm:3.0.0" + version: 3.0.1 + resolution: "json-schema-to-ts@npm:3.0.1" dependencies: "@babel/runtime": ^7.18.3 - "@types/json-schema": ^7.0.9 ts-algebra: ^1.2.2 - checksum: 4f33a0fee49cc058b16b4e4effd83cfb0c6000c6916990fda61b3622fa7967c9edbad59e34991eb869ebcd4989383d4c72f99a51a77163ac47f80da2c57d2aa8 + checksum: 32013ac5cc28b55d056d3241e50360f69fe86d7a6efeeed097e3b6c30c17d30e655b2565ff27d2e7cc232dcbcf9180f77556c154482b30a8d32bc428a0692c62 languageName: node linkType: hard @@ -33415,15 +33113,15 @@ __metadata: linkType: hard "knip@npm:^5.0.0": - version: 5.0.2 - resolution: "knip@npm:5.0.2" + version: 5.1.2 + resolution: "knip@npm:5.1.2" dependencies: "@ericcornelissen/bash-parser": 0.5.2 "@nodelib/fs.walk": 2.0.0 "@npmcli/map-workspaces": 3.0.4 "@npmcli/package-json": 5.0.0 "@pnpm/logger": 5.0.0 - "@pnpm/workspace.pkgs-graph": ^2.0.14 + "@pnpm/workspace.pkgs-graph": ^2.0.15 "@snyk/github-codeowners": 1.1.0 "@types/picomatch": 2.3.3 easy-table: 1.2.0 @@ -33435,18 +33133,17 @@ __metadata: picocolors: 1.0.0 picomatch: 4.0.1 pretty-ms: 9.0.0 - semver: 7.6.0 smol-toml: 1.1.4 strip-json-comments: 5.0.1 summary: 2.1.0 zod: 3.22.4 - zod-validation-error: 3.0.2 + zod-validation-error: 3.0.3 peerDependencies: "@types/node": ">=18" typescript: ">=5.0.4" bin: knip: bin/knip.js - checksum: af0e395ab1f8a9974fa0e83711d13b252017cc7aacd92293d13b8a0219c9f4d98a04f0ea074202c9adf5af3aa3fd22a1b5bbbbe3f00effc143656961b92c6512 + checksum: ff27c3ffa20b188ac2bc7a84b6aff49016236fa41c57b4c6650e5dae0d292747159e08045aabf858d24195214a3421bef73651235530828c1d238a598f68b95f languageName: node linkType: hard @@ -34505,11 +34202,11 @@ __metadata: linkType: hard "marked@npm:^12.0.0": - version: 12.0.0 - resolution: "marked@npm:12.0.0" + version: 12.0.1 + resolution: "marked@npm:12.0.1" bin: marked: bin/marked.js - checksum: 973e803debf7eca946213cd583792c2968ecab1b6698653604272d5406f9f07375a4865a7a28633a7200c8a4682761f8d866198fb36c10c686e3bda3a9b36fc9 + checksum: 35ebc6c4612fcc028a1cd6419321e336be5b29d3feb68dfd5aaa7fcddb399c7873cd3291d60daf342db3eede747757e4e18515f349f0ee7b84ec24254f3a4190 languageName: node linkType: hard @@ -35379,14 +35076,14 @@ __metadata: linkType: hard "mini-css-extract-plugin@npm:^2.4.2": - version: 2.8.0 - resolution: "mini-css-extract-plugin@npm:2.8.0" + version: 2.8.1 + resolution: "mini-css-extract-plugin@npm:2.8.1" dependencies: schema-utils: ^4.0.0 tapable: ^2.2.1 peerDependencies: webpack: ^5.0.0 - checksum: c1edc3ee0e1b3514c3323fa72ad38e993f357964e76737f1d7bb6cf50a0af1ac071080ec16b4e1a94688d23f78533944badad50cd0f00d2ae176f9c58c1f2029 + checksum: 209f15a18cc304b0f12911927ea7e6ca4f0c3168dcc95d741811c933c4610fdb02a8486fc1a7782a6cde75c8e1880e175b7acf04e5ddfba2b8ed045d306ef04f languageName: node linkType: hard @@ -35798,8 +35495,8 @@ __metadata: linkType: hard "msw@npm:^1.0.0, msw@npm:^1.0.1, msw@npm:^1.2.1, msw@npm:^1.2.3, msw@npm:^1.3.0, msw@npm:^1.3.1": - version: 1.3.2 - resolution: "msw@npm:1.3.2" + version: 1.3.3 + resolution: "msw@npm:1.3.3" dependencies: "@mswjs/cookies": ^0.2.2 "@mswjs/interceptors": ^0.17.10 @@ -35821,19 +35518,19 @@ __metadata: type-fest: ^2.19.0 yargs: ^17.3.1 peerDependencies: - typescript: ">= 4.4.x <= 5.2.x" + typescript: ">= 4.4.x" peerDependenciesMeta: typescript: optional: true bin: msw: cli/index.js - checksum: c2d4f7747f5806f0fd8d8cc3ca250ee1c2a7a6cd608de43f95bd072ba1fb13cdce0b52932ce9bf8f4a21b194d2815db535501e224ec8f7052593447fe1c0cb70 + checksum: cb3fda1519485f219d36c4e5ac1e1190ffe77dab66121c88cb9db0bace1ecb5a45c83db49e68e7c688b330ce43eed17d00939e09812dc710c0d4b3e59925730c languageName: node linkType: hard "msw@npm:^2.0.0, msw@npm:^2.0.8": - version: 2.2.1 - resolution: "msw@npm:2.2.1" + version: 2.2.7 + resolution: "msw@npm:2.2.7" dependencies: "@bundled-es-modules/cookie": ^2.0.0 "@bundled-es-modules/statuses": ^1.0.1 @@ -35853,13 +35550,13 @@ __metadata: type-fest: ^4.9.0 yargs: ^17.7.2 peerDependencies: - typescript: ">= 4.7.x <= 5.3.x" + typescript: ">= 4.7.x" peerDependenciesMeta: typescript: optional: true bin: msw: cli/index.js - checksum: 4ff02f095a2ec373cef18b71ba4a07d0b744a64199bd81b104128f3617c1d64fd46359e7b820b8d37887881022435c2f9ebe203ac0faeea62322aff4d36c1aa8 + checksum: 9a9c12a59fabe56634558a9831bae46a83c306cd828a903f0df4f6ca38724466e1f5b3b217737a787c20a30c713b83676a14bef69e22820da5805ab7381a5163 languageName: node linkType: hard @@ -36786,7 +36483,7 @@ __metadata: languageName: node linkType: hard -"object-inspect@npm:^1.13.1, object-inspect@npm:^1.9.0": +"object-inspect@npm:^1.13.1": version: 1.13.1 resolution: "object-inspect@npm:1.13.1" checksum: 7d9fa9221de3311dcb5c7c307ee5dc011cdd31dc43624b7c184b3840514e118e05ef0002be5388304c416c0eb592feb46e983db12577fc47e47d5752fbbfb61f @@ -36824,19 +36521,19 @@ __metadata: languageName: node linkType: hard -"object.assign@npm:^4.1.4": - version: 4.1.4 - resolution: "object.assign@npm:4.1.4" +"object.assign@npm:^4.1.4, object.assign@npm:^4.1.5": + version: 4.1.5 + resolution: "object.assign@npm:4.1.5" dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.4 + call-bind: ^1.0.5 + define-properties: ^1.2.1 has-symbols: ^1.0.3 object-keys: ^1.1.1 - checksum: 76cab513a5999acbfe0ff355f15a6a125e71805fcf53de4e9d4e082e1989bdb81d1e329291e1e4e0ae7719f0e4ef80e88fb2d367ae60500d79d25a6224ac8864 + checksum: f9aeac0541661370a1fc86e6a8065eb1668d3e771f7dbb33ee54578201336c057b21ee61207a186dd42db0c62201d91aac703d20d12a79fc79c353eed44d4e25 languageName: node linkType: hard -"object.entries@npm:^1.1.6, object.entries@npm:^1.1.7": +"object.entries@npm:^1.1.7": version: 1.1.7 resolution: "object.entries@npm:1.1.7" dependencies: @@ -36847,7 +36544,7 @@ __metadata: languageName: node linkType: hard -"object.fromentries@npm:^2.0.6, object.fromentries@npm:^2.0.7": +"object.fromentries@npm:^2.0.7": version: 2.0.7 resolution: "object.fromentries@npm:2.0.7" dependencies: @@ -36870,13 +36567,13 @@ __metadata: languageName: node linkType: hard -"object.hasown@npm:^1.1.2": - version: 1.1.2 - resolution: "object.hasown@npm:1.1.2" +"object.hasown@npm:^1.1.3": + version: 1.1.3 + resolution: "object.hasown@npm:1.1.3" dependencies: - define-properties: ^1.1.4 - es-abstract: ^1.20.4 - checksum: b936572536db0cdf38eb30afd2f1026a8b6f2cc5d2c4497c9d9bbb01eaf3e980dead4fd07580cfdd098e6383e5a9db8212d3ea0c6bdd2b5e68c60aa7e3b45566 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + checksum: 76bc17356f6124542fb47e5d0e78d531eafa4bba3fc2d6fc4b1a8ce8b6878912366c0d99f37ce5c84ada8fd79df7aa6ea1214fddf721f43e093ad2df51f27da1 languageName: node linkType: hard @@ -37061,14 +36758,14 @@ __metadata: linkType: hard "openid-client@npm:^5.2.1, openid-client@npm:^5.3.0, openid-client@npm:^5.4.3, openid-client@npm:^5.5.0": - version: 5.6.4 - resolution: "openid-client@npm:5.6.4" + version: 5.6.5 + resolution: "openid-client@npm:5.6.5" dependencies: - jose: ^4.15.4 + jose: ^4.15.5 lru-cache: ^6.0.0 object-hash: ^2.2.0 oidc-token-hash: ^5.0.3 - checksum: 69843f078dacbbc6bad6d65ca6689414ac73f095dfe2f8e606822e6cfc9d9cd7d0dfaf2649352eda604653806f0ea65326ad2d6266da897e4740ec93d26d21f6 + checksum: 2240079f761173b10635ce5fefbac04b6820f54e00d588ab2afdddb6c0f0ab6568e663cf1ab6a4a2297fbdbb73e42d78b8190f91dba7e1b80d287b2127fcbc7c languageName: node linkType: hard @@ -38186,7 +37883,7 @@ __metadata: languageName: node linkType: hard -"pirates@npm:^4.0.1, pirates@npm:^4.0.4, pirates@npm:^4.0.5": +"pirates@npm:^4.0.1, pirates@npm:^4.0.4, pirates@npm:^4.0.5, pirates@npm:^4.0.6": version: 4.0.6 resolution: "pirates@npm:4.0.6" checksum: 46a65fefaf19c6f57460388a5af9ab81e3d7fd0e7bc44ca59d753cb5c4d0df97c6c6e583674869762101836d68675f027d60f841c105d72734df9dfca97cbcc6 @@ -38243,27 +37940,27 @@ __metadata: languageName: node linkType: hard -"playwright-core@npm:1.41.2": - version: 1.41.2 - resolution: "playwright-core@npm:1.41.2" +"playwright-core@npm:1.42.1": + version: 1.42.1 + resolution: "playwright-core@npm:1.42.1" bin: playwright-core: cli.js - checksum: b41ede0db3fd3e3f7e0b0efbdfb2dbc4db345e113cf9c4451af21d1d5b5d9ab5e969f5662852925e37b2198ae5daab92aa48108fe3d4eb81c849ba8752aaf8cc + checksum: e7081ff0f43b4b9053255109eb1d82164b7c6b55c7d022e25fca935d0f4fc547cb2e02a7b64f0c2a9462729be7bb45edb082f8b038306415944f1061d00d9c90 languageName: node linkType: hard -"playwright@npm:1.41.2": - version: 1.41.2 - resolution: "playwright@npm:1.41.2" +"playwright@npm:1.42.1": + version: 1.42.1 + resolution: "playwright@npm:1.42.1" dependencies: fsevents: 2.3.2 - playwright-core: 1.41.2 + playwright-core: 1.42.1 dependenciesMeta: fsevents: optional: true bin: playwright: cli.js - checksum: acf166003ec42cd795f5fca096c5135880d78e84ec2d0a1911b2cab984cf75dc06e50d3aa24b56cbcbc5369ca8c61831e76c5f8674531a272fbd0f6e624fa387 + checksum: 06c16bcd07d03993126ee6c168bde28c59d3cab7f7d4721eaf57bd5c51e9c929e10a286758de062b5fc02874413ceae2684d14cbb7865c0a51fc8df6d9001ad1 languageName: node linkType: hard @@ -38329,6 +38026,13 @@ __metadata: languageName: node linkType: hard +"possible-typed-array-names@npm:^1.0.0": + version: 1.0.0 + resolution: "possible-typed-array-names@npm:1.0.0" + checksum: b32d403ece71e042385cc7856385cecf1cd8e144fa74d2f1de40d1e16035dba097bc189715925e79b67bdd1472796ff168d3a90d296356c9c94d272d5b95f3ae + languageName: node + linkType: hard + "postcss-calc@npm:^8.0.0": version: 8.0.0 resolution: "postcss-calc@npm:8.0.0" @@ -38731,13 +38435,13 @@ __metadata: linkType: hard "postcss@npm:^8.1.0, postcss@npm:^8.4.27, postcss@npm:^8.4.33": - version: 8.4.35 - resolution: "postcss@npm:8.4.35" + version: 8.4.36 + resolution: "postcss@npm:8.4.36" dependencies: nanoid: ^3.3.7 picocolors: ^1.0.0 - source-map-js: ^1.0.2 - checksum: cf3c3124d3912a507603f6d9a49b3783f741075e9aa73eb592a6dd9194f9edab9d20a8875d16d137d4f779fe7b6fbd1f5727e39bfd1c3003724980ee4995e1da + source-map-js: ^1.1.0 + checksum: 1bb0f2bdfccd5a3ea0ed39700c09098f15501d38110208bfba2df5e3925e4ff7e9a4eaf8abb87bc692ae4d122d9aa0ec13bf4f4d8fd1ad8d8ceaa1f345e50ed1 languageName: node linkType: hard @@ -38935,18 +38639,6 @@ __metadata: languageName: node linkType: hard -"pretty-format@npm:^28.0.0, pretty-format@npm:^28.1.3": - version: 28.1.3 - resolution: "pretty-format@npm:28.1.3" - dependencies: - "@jest/schemas": ^28.1.3 - ansi-regex: ^5.0.1 - ansi-styles: ^5.0.0 - react-is: ^18.0.0 - checksum: e69f857358a3e03d271252d7524bec758c35e44680287f36c1cb905187fbc82da9981a6eb07edfd8a03bc3cbeebfa6f5234c13a3d5b59f2bbdf9b4c4053e0a7f - languageName: node - linkType: hard - "pretty-format@npm:^29.0.0, pretty-format@npm:^29.7.0": version: 29.7.0 resolution: "pretty-format@npm:29.7.0" @@ -39304,11 +38996,11 @@ __metadata: linkType: hard "qs@npm:^6.10.1, qs@npm:^6.10.2, qs@npm:^6.11.0, qs@npm:^6.11.2, qs@npm:^6.9.1, qs@npm:^6.9.4, qs@npm:^6.9.6": - version: 6.11.2 - resolution: "qs@npm:6.11.2" + version: 6.12.0 + resolution: "qs@npm:6.12.0" dependencies: - side-channel: ^1.0.4 - checksum: e812f3c590b2262548647d62f1637b6989cc56656dc960b893fe2098d96e1bd633f36576f4cd7564dfbff9db42e17775884db96d846bebe4f37420d073ecdc0b + side-channel: ^1.0.6 + checksum: ba007fb2488880b9c6c3df356fe6888b9c1f4c5127552edac214486cfe83a332de09a5c40d490d79bb27bef977ba1085a8497512ff52eaac72e26564f77ce908 languageName: node linkType: hard @@ -39491,18 +39183,6 @@ __metadata: languageName: node linkType: hard -"raw-body@npm:2.5.1": - version: 2.5.1 - resolution: "raw-body@npm:2.5.1" - dependencies: - bytes: 3.1.2 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - unpipe: 1.0.0 - checksum: 5362adff1575d691bb3f75998803a0ffed8c64eabeaa06e54b4ada25a0cd1b2ae7f4f5ec46565d1bec337e08b5ac90c76eaa0758de6f72a633f025d754dec29e - languageName: node - linkType: hard - "raw-body@npm:2.5.2, raw-body@npm:^2.4.1": version: 2.5.2 resolution: "raw-body@npm:2.5.2" @@ -39777,11 +39457,11 @@ __metadata: linkType: hard "react-hook-form@npm:^7.12.2, react-hook-form@npm:^7.13.0": - version: 7.50.1 - resolution: "react-hook-form@npm:7.50.1" + version: 7.51.1 + resolution: "react-hook-form@npm:7.51.1" peerDependencies: react: ^16.8.0 || ^17 || ^18 - checksum: 40dcb64d2ff631f6da76db2c5788957da3429f07649a6f3aed76545c616fae8eee557a6b06d0d0842be1f80ac8244f44d87f4d8d83fddabec76d7ab9921f8781 + checksum: 6ed9060ac9230a7e9e6ca46fc001cc5f44f35e6485e0c951ab1a5e85bd698c200a7230c5514f0642875e4f45f6cb8f79479deac0253f1c2b8db1445d1c96d796 languageName: node linkType: hard @@ -39795,6 +39475,16 @@ __metadata: languageName: node linkType: hard +"react-idle-timer@npm:5.7.2": + version: 5.7.2 + resolution: "react-idle-timer@npm:5.7.2" + peerDependencies: + react: ">=16" + react-dom: ">=16" + checksum: 6faf3cfa87c9d65ae7a87078a2d82db5b821936a45565a98d69e7341e4b4acd5610b1f26cf1a6809b5551e4c30357f2ab5ce729c4c33751f66cb9ce6072dfb02 + languageName: node + linkType: hard + "react-immutable-proptypes@npm:2.2.0": version: 2.2.0 resolution: "react-immutable-proptypes@npm:2.2.0" @@ -40041,15 +39731,15 @@ __metadata: linkType: hard "react-router-dom@npm:^6.3.0": - version: 6.22.1 - resolution: "react-router-dom@npm:6.22.1" + version: 6.22.3 + resolution: "react-router-dom@npm:6.22.3" dependencies: - "@remix-run/router": 1.15.1 - react-router: 6.22.1 + "@remix-run/router": 1.15.3 + react-router: 6.22.3 peerDependencies: react: ">=16.8" react-dom: ">=16.8" - checksum: 01a074518663db1b64d9ee7fa22eb628544b74316057aab0c39ef58ad665f012df081e8523eb62c4e060272a67c8d90cccedb6a6dac4e8f71290f9be8aaab1f6 + checksum: 5ae3759a70e4123cd4b8efbb82199a69f5d8c4a7a434d186d2ec7b532b6ef3302df2a98e5c27db977d3f0d725c7a279010a16ae77a3bf6257f1fee96123d8b77 languageName: node linkType: hard @@ -40064,14 +39754,14 @@ __metadata: languageName: node linkType: hard -"react-router@npm:6.22.1, react-router@npm:^6.3.0": - version: 6.22.1 - resolution: "react-router@npm:6.22.1" +"react-router@npm:6.22.3, react-router@npm:^6.3.0": + version: 6.22.3 + resolution: "react-router@npm:6.22.3" dependencies: - "@remix-run/router": 1.15.1 + "@remix-run/router": 1.15.3 peerDependencies: react: ">=16.8" - checksum: b53fab4c507eca8af03581387e37d9a1616f5cda0639abd84ba223c502528324171c4fee0ad8b86a92ba00eb3de4bd77c25c107e1754eb62988c874a059f3060 + checksum: 1f7d9a5a849761ff69ef8f3d3131b4c1c25d18b76317ba5ad6f0d9421192c0b8b71ab0cc818c57aad7b81ada725559e513307d0ab43296a460262f0358602672 languageName: node linkType: hard @@ -40247,12 +39937,12 @@ __metadata: linkType: hard "react-virtualized-auto-sizer@npm:^1.0.11": - version: 1.0.23 - resolution: "react-virtualized-auto-sizer@npm:1.0.23" + version: 1.0.24 + resolution: "react-virtualized-auto-sizer@npm:1.0.24" peerDependencies: react: ^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0 react-dom: ^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0 - checksum: a5b37b2201f09f957d2398f1415fcec9b2aa0cbfb75ae193bd324a0bc5ef00dc30d3a40f60b31fe5a450d8ec66c0911213f9f3be0e8410ae1b180547030fd8e8 + checksum: e7d98563735dabbd1c58727c9d3e9f08f6a60a9964d25507cf4ef08f8964b6e421491c892ee0a99e47630118fdca42f1c60cef15ebda3659face58025dba3e98 languageName: node linkType: hard @@ -40462,8 +40152,8 @@ __metadata: linkType: hard "recharts@npm:^2.5.0": - version: 2.12.1 - resolution: "recharts@npm:2.12.1" + version: 2.12.3 + resolution: "recharts@npm:2.12.3" dependencies: clsx: ^2.0.0 eventemitter3: ^4.0.1 @@ -40476,7 +40166,7 @@ __metadata: peerDependencies: react: ^16.0.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.0.0 || ^17.0.0 || ^18.0.0 - checksum: 768024e18bab43de2378241891748c562c57ddedfc31c3cec932a21a8b41cd662555d7c2bc26e86e7534c5e5c7ef2ebc0faa6d5fdc34d28057020837b4e3bf50 + checksum: 2fbab7e6a9a68f16bd7ff9c70a4f12814c08bc33ed5d279ea1ba6212cdb911aa6211f994e23f442a3dcea27476d2bdf7d233158ee7f9cc999dabd1fb6ba32b22 languageName: node linkType: hard @@ -40652,14 +40342,15 @@ __metadata: languageName: node linkType: hard -"regexp.prototype.flags@npm:^1.4.3, regexp.prototype.flags@npm:^1.5.1": - version: 1.5.1 - resolution: "regexp.prototype.flags@npm:1.5.1" +"regexp.prototype.flags@npm:^1.4.3, regexp.prototype.flags@npm:^1.5.0, regexp.prototype.flags@npm:^1.5.2": + version: 1.5.2 + resolution: "regexp.prototype.flags@npm:1.5.2" dependencies: - call-bind: ^1.0.2 - define-properties: ^1.2.0 - set-function-name: ^2.0.0 - checksum: 869edff00288442f8d7fa4c9327f91d85f3b3acf8cbbef9ea7a220345cf23e9241b6def9263d2c1ebcf3a316b0aa52ad26a43a84aa02baca3381717b3e307f47 + call-bind: ^1.0.6 + define-properties: ^1.2.1 + es-errors: ^1.3.0 + set-function-name: ^2.0.1 + checksum: d7f333667d5c564e2d7a97c56c3075d64c722c9bb51b2b4df6822b2e8096d623a5e63088fb4c83df919b6951ef8113841de8b47de7224872fa6838bc5d8a7d64 languageName: node linkType: hard @@ -40945,16 +40636,16 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^2.0.0-next.4": - version: 2.0.0-next.4 - resolution: "resolve@npm:2.0.0-next.4" +"resolve@npm:^2.0.0-next.5": + version: 2.0.0-next.5 + resolution: "resolve@npm:2.0.0-next.5" dependencies: - is-core-module: ^2.9.0 + is-core-module: ^2.13.0 path-parse: ^1.0.7 supports-preserve-symlinks-flag: ^1.0.0 bin: resolve: bin/resolve - checksum: c438ac9a650f2030fd074219d7f12ceb983b475da2d89ad3d6dd05fbf6b7a0a8cd37d4d10b43cb1f632bc19f22246ab7f36ebda54d84a29bfb2910a0680906d3 + checksum: a73ac69a1c4bd34c56b213d91f5b17ce390688fdb4a1a96ed3025cc7e08e7bfb90b3a06fcce461780cb0b589c958afcb0080ab802c71c01a7ecc8c64feafc89f languageName: node linkType: hard @@ -40981,16 +40672,16 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@^2.0.0-next.4#~builtin": - version: 2.0.0-next.4 - resolution: "resolve@patch:resolve@npm%3A2.0.0-next.4#~builtin::version=2.0.0-next.4&hash=c3c19d" +"resolve@patch:resolve@^2.0.0-next.5#~builtin": + version: 2.0.0-next.5 + resolution: "resolve@patch:resolve@npm%3A2.0.0-next.5#~builtin::version=2.0.0-next.5&hash=c3c19d" dependencies: - is-core-module: ^2.9.0 + is-core-module: ^2.13.0 path-parse: ^1.0.7 supports-preserve-symlinks-flag: ^1.0.0 bin: resolve: bin/resolve - checksum: 4bf9f4f8a458607af90518ff73c67a4bc1a38b5a23fef2bb0ccbd45e8be89820a1639b637b0ba377eb2be9eedfb1739a84cde24fe4cd670c8207d8fea922b011 + checksum: 064d09c1808d0c51b3d90b5d27e198e6d0c5dad0eb57065fd40803d6a20553e5398b07f76739d69cbabc12547058bec6b32106ea66622375fb0d7e8fca6a846c languageName: node linkType: hard @@ -41323,8 +41014,8 @@ __metadata: "@manypkg/get-packages": ^1.1.3 "@octokit/rest": ^19.0.3 "@playwright/test": ^1.32.3 - "@spotify/eslint-plugin": ^14.1.3 - "@spotify/prettier-config": ^14.0.0 + "@spotify/eslint-plugin": ^15.0.0 + "@spotify/prettier-config": ^15.0.0 "@techdocs/cli": "workspace:*" "@types/node": ^18.17.8 "@types/webpack": ^5.28.0 @@ -41347,7 +41038,6 @@ __metadata: shx: ^0.3.2 sloc: ^0.3.1 sort-package-json: ^2.8.0 - ts-node: ^10.4.0 typescript: ~5.1.0 languageName: unknown linkType: soft @@ -41452,15 +41142,15 @@ __metadata: languageName: node linkType: hard -"safe-array-concat@npm:^1.0.1": - version: 1.0.1 - resolution: "safe-array-concat@npm:1.0.1" +"safe-array-concat@npm:^1.1.2": + version: 1.1.2 + resolution: "safe-array-concat@npm:1.1.2" dependencies: - call-bind: ^1.0.2 - get-intrinsic: ^1.2.1 + call-bind: ^1.0.7 + get-intrinsic: ^1.2.4 has-symbols: ^1.0.3 isarray: ^2.0.5 - checksum: 001ecf1d8af398251cbfabaf30ed66e3855127fbceee178179524b24160b49d15442f94ed6c0db0b2e796da76bb05b73bf3cc241490ec9c2b741b41d33058581 + checksum: a3b259694754ddfb73ae0663829e396977b99ff21cbe8607f35a469655656da8e271753497e59da8a7575baa94d2e684bea3e10ddd74ba046c0c9b4418ffa0c4 languageName: node linkType: hard @@ -41485,14 +41175,14 @@ __metadata: languageName: node linkType: hard -"safe-regex-test@npm:^1.0.0": - version: 1.0.0 - resolution: "safe-regex-test@npm:1.0.0" +"safe-regex-test@npm:^1.0.3": + version: 1.0.3 + resolution: "safe-regex-test@npm:1.0.3" dependencies: - call-bind: ^1.0.2 - get-intrinsic: ^1.1.3 + call-bind: ^1.0.6 + es-errors: ^1.3.0 is-regex: ^1.1.4 - checksum: bc566d8beb8b43c01b94e67de3f070fd2781685e835959bbbaaec91cc53381145ca91f69bd837ce6ec244817afa0a5e974fc4e40a2957f0aca68ac3add1ddd34 + checksum: 6c7d392ff1ae7a3ae85273450ed02d1d131f1d2c76e177d6b03eb88e6df8fa062639070e7d311802c1615f351f18dc58f9454501c58e28d5ffd9b8f502ba6489 languageName: node linkType: hard @@ -41592,15 +41282,15 @@ __metadata: languageName: node linkType: hard -"schema-utils@npm:^4.0.0": - version: 4.0.0 - resolution: "schema-utils@npm:4.0.0" +"schema-utils@npm:^4.0.0, schema-utils@npm:^4.2.0": + version: 4.2.0 + resolution: "schema-utils@npm:4.2.0" dependencies: "@types/json-schema": ^7.0.9 - ajv: ^8.8.0 + ajv: ^8.9.0 ajv-formats: ^2.1.1 - ajv-keywords: ^5.0.0 - checksum: c843e92fdd1a5c145dbb6ffdae33e501867f9703afac67bdf35a685e49f85b1dcc10ea250033175a64bd9d31f0555bc6785b8359da0c90bcea30cf6dfbb55a8f + ajv-keywords: ^5.1.0 + checksum: 26a0463d47683258106e6652e9aeb0823bf0b85843039e068b57da1892f7ae6b6b1094d48e9ed5ba5cbe9f7166469d880858b9d91abe8bd249421eb813850cde languageName: node linkType: hard @@ -41701,7 +41391,16 @@ __metadata: languageName: node linkType: hard -"semver@npm:7.6.0, semver@npm:^7.0.0, semver@npm:^7.1.1, semver@npm:^7.1.3, semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8, semver@npm:^7.4.0, semver@npm:^7.5.3, semver@npm:^7.5.4": +"semver@npm:^6.0.0, semver@npm:^6.1.0, semver@npm:^6.2.0, semver@npm:^6.3.0, semver@npm:^6.3.1": + version: 6.3.1 + resolution: "semver@npm:6.3.1" + bin: + semver: bin/semver.js + checksum: ae47d06de28836adb9d3e25f22a92943477371292d9b665fb023fae278d345d508ca1958232af086d85e0155aee22e313e100971898bbb8d5d89b8b1d4054ca2 + languageName: node + linkType: hard + +"semver@npm:^7.0.0, semver@npm:^7.1.1, semver@npm:^7.1.3, semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8, semver@npm:^7.4.0, semver@npm:^7.5.3, semver@npm:^7.5.4": version: 7.6.0 resolution: "semver@npm:7.6.0" dependencies: @@ -41712,15 +41411,6 @@ __metadata: languageName: node linkType: hard -"semver@npm:^6.0.0, semver@npm:^6.1.0, semver@npm:^6.2.0, semver@npm:^6.3.0, semver@npm:^6.3.1": - version: 6.3.1 - resolution: "semver@npm:6.3.1" - bin: - semver: bin/semver.js - checksum: ae47d06de28836adb9d3e25f22a92943477371292d9b665fb023fae278d345d508ca1958232af086d85e0155aee22e313e100971898bbb8d5d89b8b1d4054ca2 - languageName: node - linkType: hard - "send@npm:0.18.0": version: 0.18.0 resolution: "send@npm:0.18.0" @@ -41833,15 +41523,17 @@ __metadata: languageName: node linkType: hard -"set-function-length@npm:^1.1.1": - version: 1.1.1 - resolution: "set-function-length@npm:1.1.1" +"set-function-length@npm:^1.2.1": + version: 1.2.2 + resolution: "set-function-length@npm:1.2.2" dependencies: - define-data-property: ^1.1.1 - get-intrinsic: ^1.2.1 + define-data-property: ^1.1.4 + es-errors: ^1.3.0 + function-bind: ^1.1.2 + get-intrinsic: ^1.2.4 gopd: ^1.0.1 - has-property-descriptors: ^1.0.0 - checksum: c131d7569cd7e110cafdfbfbb0557249b538477624dfac4fc18c376d879672fa52563b74029ca01f8f4583a8acb35bb1e873d573a24edb80d978a7ee607c6e06 + has-property-descriptors: ^1.0.2 + checksum: a8248bdacdf84cb0fab4637774d9fb3c7a8e6089866d04c817583ff48e14149c87044ce683d7f50759a8c50fb87c7a7e173535b06169c87ef76f5fb276dfff72 languageName: node linkType: hard @@ -42003,14 +41695,15 @@ __metadata: languageName: node linkType: hard -"side-channel@npm:^1.0.4": - version: 1.0.4 - resolution: "side-channel@npm:1.0.4" +"side-channel@npm:^1.0.4, side-channel@npm:^1.0.6": + version: 1.0.6 + resolution: "side-channel@npm:1.0.6" dependencies: - call-bind: ^1.0.0 - get-intrinsic: ^1.0.2 - object-inspect: ^1.9.0 - checksum: 351e41b947079c10bd0858364f32bb3a7379514c399edb64ab3dce683933483fc63fb5e4efe0a15a2e8a7e3c436b6a91736ddb8d8c6591b0460a24bb4a1ee245 + call-bind: ^1.0.7 + es-errors: ^1.3.0 + get-intrinsic: ^1.2.4 + object-inspect: ^1.13.1 + checksum: bfc1afc1827d712271453e91b7cd3878ac0efd767495fd4e594c4c2afaa7963b7b510e249572bfd54b0527e66e4a12b61b80c061389e129755f34c493aad9b97 languageName: node linkType: hard @@ -42312,10 +42005,10 @@ __metadata: languageName: node linkType: hard -"source-map-js@npm:^1.0.2": - version: 1.0.2 - resolution: "source-map-js@npm:1.0.2" - checksum: c049a7fc4deb9a7e9b481ae3d424cc793cb4845daa690bc5a05d428bf41bf231ced49b4cf0c9e77f9d42fdb3d20d6187619fc586605f5eabe995a316da8d377c +"source-map-js@npm:^1.1.0": + version: 1.1.0 + resolution: "source-map-js@npm:1.1.0" + checksum: 6ef39381cdf5451c3db406e4b0fa95657be3c35db76fe6df3be430174b2e6af3c0b57d9728328dc62a211ae6209a0295d6a26442a55d5fccbf7cf1211fffa80e languageName: node linkType: hard @@ -42784,10 +42477,10 @@ __metadata: languageName: node linkType: hard -"stream-shift@npm:^1.0.0": - version: 1.0.1 - resolution: "stream-shift@npm:1.0.1" - checksum: 59b82b44b29ec3699b5519a49b3cedcc6db58c72fb40c04e005525dfdcab1c75c4e0c180b923c380f204bed78211b9bad8faecc7b93dece4d004c3f6ec75737b +"stream-shift@npm:^1.0.0, stream-shift@npm:^1.0.2": + version: 1.0.3 + resolution: "stream-shift@npm:1.0.3" + checksum: a24c0a3f66a8f9024bd1d579a533a53be283b4475d4e6b4b3211b964031447bdf6532dd1f3c2b0ad66752554391b7c62bd7ca4559193381f766534e723d50242 languageName: node linkType: hard @@ -42922,19 +42615,20 @@ __metadata: languageName: node linkType: hard -"string.prototype.matchall@npm:^4.0.8": - version: 4.0.8 - resolution: "string.prototype.matchall@npm:4.0.8" +"string.prototype.matchall@npm:^4.0.10": + version: 4.0.10 + resolution: "string.prototype.matchall@npm:4.0.10" dependencies: call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.20.4 - get-intrinsic: ^1.1.3 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + get-intrinsic: ^1.2.1 has-symbols: ^1.0.3 - internal-slot: ^1.0.3 - regexp.prototype.flags: ^1.4.3 + internal-slot: ^1.0.5 + regexp.prototype.flags: ^1.5.0 + set-function-name: ^2.0.0 side-channel: ^1.0.4 - checksum: 952da3a818de42ad1c10b576140a5e05b4de7b34b8d9dbf00c3ac8c1293e9c0f533613a39c5cda53e0a8221f2e710bc2150e730b1c2278d60004a8a35726efb6 + checksum: 3c78bdeff39360c8e435d7c4c6ea19f454aa7a63eda95fa6fadc3a5b984446a2f9f2c02d5c94171ce22268a573524263fbd0c8edbe3ce2e9890d7cc036cdc3ed languageName: node linkType: hard @@ -43372,16 +43066,16 @@ __metadata: languageName: node linkType: hard -"swagger-client@npm:^3.25.3": - version: 3.25.3 - resolution: "swagger-client@npm:3.25.3" +"swagger-client@npm:^3.26.0": + version: 3.26.0 + resolution: "swagger-client@npm:3.26.0" dependencies: "@babel/runtime-corejs3": ^7.22.15 - "@swagger-api/apidom-core": ">=0.90.0 <1.0.0" - "@swagger-api/apidom-error": ">=0.90.0 <1.0.0" - "@swagger-api/apidom-json-pointer": ">=0.90.0 <1.0.0" - "@swagger-api/apidom-ns-openapi-3-1": ">=0.90.0 <1.0.0" - "@swagger-api/apidom-reference": ">=0.90.0 <1.0.0" + "@swagger-api/apidom-core": ">=0.97.0 <1.0.0" + "@swagger-api/apidom-error": ">=0.97.0 <1.0.0" + "@swagger-api/apidom-json-pointer": ">=0.97.0 <1.0.0" + "@swagger-api/apidom-ns-openapi-3-1": ">=0.97.0 <1.0.0" + "@swagger-api/apidom-reference": ">=0.97.0 <1.0.0" cookie: ~0.6.0 deepmerge: ~4.3.0 fast-json-patch: ^3.0.0-1 @@ -43391,15 +43085,15 @@ __metadata: node-fetch-commonjs: ^3.3.2 qs: ^6.10.2 traverse: ~0.6.6 - checksum: 01ef0298c6b078db42d3eb191d418cd82645cff35887c6e7f533940153c01f44265a2a03140b0d309b010843ea5bc3bf71edaf09e7090c59fcf25fda644c4c24 + checksum: 8897d7e8da535266475bdf8b85c31268f005276c13e8955e863e8502868ac6bcd86a4605d459eed9dd7e4eaf5ce6ef7b28b496b99fc912918e5a53361894a4df languageName: node linkType: hard "swagger-ui-react@npm:^5.0.0": - version: 5.11.8 - resolution: "swagger-ui-react@npm:5.11.8" + version: 5.12.0 + resolution: "swagger-ui-react@npm:5.12.0" dependencies: - "@babel/runtime-corejs3": ^7.23.9 + "@babel/runtime-corejs3": ^7.24.0 "@braintree/sanitize-url": =7.0.0 base64-js: ^1.5.1 classnames: ^2.5.1 @@ -43428,7 +43122,7 @@ __metadata: reselect: ^5.1.0 serialize-error: ^8.1.0 sha.js: ^2.4.11 - swagger-client: ^3.25.3 + swagger-client: ^3.26.0 url-parse: ^1.5.10 xml: =1.0.1 xml-but-prettier: ^1.0.1 @@ -43436,7 +43130,7 @@ __metadata: peerDependencies: react: ">=16.8.0 <19" react-dom: ">=16.8.0 <19" - checksum: 131a3421e182225368822e49944e72e51cae10d8263263fbd4bcc4c5eed9782314bb6b42ca471d9542393961c1305190c149cc19c7163b3ec1540f1e288509ce + checksum: 322611f2adf4d358920c324fe3a08711b490e53a6f2b706a50de16c04344acbea1050d705f59ea7945f7126ece061b44366c70a7d0e645185d8bd5e1ec8b608d languageName: node linkType: hard @@ -43504,7 +43198,7 @@ __metadata: languageName: node linkType: hard -"tar-fs@npm:^3.0.4": +"tar-fs@npm:^3.0.5": version: 3.0.5 resolution: "tar-fs@npm:3.0.5" dependencies: @@ -43704,25 +43398,25 @@ __metadata: linkType: hard "testcontainers@npm:^10.0.0": - version: 10.7.1 - resolution: "testcontainers@npm:10.7.1" + version: 10.7.2 + resolution: "testcontainers@npm:10.7.2" dependencies: "@balena/dockerignore": ^1.0.2 - "@types/dockerode": ^3.3.21 + "@types/dockerode": ^3.3.24 archiver: ^5.3.2 - async-lock: ^1.4.0 + async-lock: ^1.4.1 byline: ^5.0.0 debug: ^4.3.4 - docker-compose: ^0.24.2 + docker-compose: ^0.24.6 dockerode: ^3.3.5 get-port: ^5.1.1 node-fetch: ^2.7.0 proper-lockfile: ^4.1.2 properties-reader: ^2.3.0 ssh-remote-port-forward: ^1.0.4 - tar-fs: ^3.0.4 + tar-fs: ^3.0.5 tmp: ^0.2.1 - checksum: 3ecb439914fab1147943d7d97e4021309fa69f3fcdbc153f4cf3fcf1feb03415da402fb914811189a3606409d58de1174910e144fb4c6c7e3510cc2cb59911b2 + checksum: b4650509e3e072b96cd8ed75fdeeaa8a51a81cc9d45aabec26d4915cf9942e051f14fce4d23a29e70a007c2e8b3ce46f72dac602962f21c5a8d27976c846ef24 languageName: node linkType: hard @@ -44055,13 +43749,13 @@ __metadata: languageName: node linkType: hard -"tree-sitter-json@npm:=0.20.1": - version: 0.20.1 - resolution: "tree-sitter-json@npm:0.20.1" +"tree-sitter-json@npm:=0.20.2": + version: 0.20.2 + resolution: "tree-sitter-json@npm:0.20.2" dependencies: nan: ^2.18.0 node-gyp: latest - checksum: fb77f3e3f148a4ce48a58ac478c5ab12fb5ea29b426fbf4978f07c659de982bfa62268c556e262ecc3ef192d50f7e6f6fe650abd566e6be87debb31332c81a26 + checksum: 4f5eba7fc86855d15510647e3e5803ea05a8cd5ab2a2a25c8d173a103ca02a6cc25b4cc925b3d234e31e6180f7eed4a50351d39e2c5254b06d6dd0fabeb6c3d8 languageName: node linkType: hard @@ -44167,6 +43861,13 @@ __metadata: languageName: node linkType: hard +"ts-mixer@npm:^6.0.3": + version: 6.0.4 + resolution: "ts-mixer@npm:6.0.4" + checksum: 36b1af526befd74345e736e9aa16f5c28876ebcea07784da14d929149fd7e6028cfd2fe9304c8efe8cb91b588443a9cc9e991df58e4c6e602326edbaae2af3ab + languageName: node + linkType: hard + "ts-morph@npm:^21.0.0": version: 21.0.1 resolution: "ts-morph@npm:21.0.1" @@ -44177,7 +43878,7 @@ __metadata: languageName: node linkType: hard -"ts-node@npm:^10.0.0, ts-node@npm:^10.4.0, ts-node@npm:^10.9.1": +"ts-node@npm:^10.9.1": version: 10.9.2 resolution: "ts-node@npm:10.9.2" dependencies: @@ -44266,22 +43967,6 @@ __metadata: languageName: node linkType: hard -"tsx@npm:^4.0.0": - version: 4.7.1 - resolution: "tsx@npm:4.7.1" - dependencies: - esbuild: ~0.19.10 - fsevents: ~2.3.3 - get-tsconfig: ^4.7.2 - dependenciesMeta: - fsevents: - optional: true - bin: - tsx: dist/cli.mjs - checksum: 7f77294c0eee9a9b203f89eb299ee80b393d6b4bf79ec01b650502213a23ea08d0dfc52e938b302ef27c97b70557f7f5a590c3174a7e3c8f1140c668eea4a3a2 - languageName: node - linkType: hard - "tty-browserify@npm:0.0.0": version: 0.0.0 resolution: "tty-browserify@npm:0.0.0" @@ -44441,50 +44126,55 @@ __metadata: languageName: node linkType: hard -"typed-array-buffer@npm:^1.0.0": - version: 1.0.0 - resolution: "typed-array-buffer@npm:1.0.0" +"typed-array-buffer@npm:^1.0.2": + version: 1.0.2 + resolution: "typed-array-buffer@npm:1.0.2" dependencies: - call-bind: ^1.0.2 - get-intrinsic: ^1.2.1 - is-typed-array: ^1.1.10 - checksum: 3e0281c79b2a40cd97fe715db803884301993f4e8c18e8d79d75fd18f796e8cd203310fec8c7fdb5e6c09bedf0af4f6ab8b75eb3d3a85da69328f28a80456bd3 + call-bind: ^1.0.7 + es-errors: ^1.3.0 + is-typed-array: ^1.1.13 + checksum: 02ffc185d29c6df07968272b15d5319a1610817916ec8d4cd670ded5d1efe72901541ff2202fcc622730d8a549c76e198a2f74e312eabbfb712ed907d45cbb0b languageName: node linkType: hard -"typed-array-byte-length@npm:^1.0.0": - version: 1.0.0 - resolution: "typed-array-byte-length@npm:1.0.0" +"typed-array-byte-length@npm:^1.0.1": + version: 1.0.1 + resolution: "typed-array-byte-length@npm:1.0.1" dependencies: - call-bind: ^1.0.2 + call-bind: ^1.0.7 for-each: ^0.3.3 - has-proto: ^1.0.1 - is-typed-array: ^1.1.10 - checksum: b03db16458322b263d87a702ff25388293f1356326c8a678d7515767ef563ef80e1e67ce648b821ec13178dd628eb2afdc19f97001ceae7a31acf674c849af94 + gopd: ^1.0.1 + has-proto: ^1.0.3 + is-typed-array: ^1.1.13 + checksum: f65e5ecd1cf76b1a2d0d6f631f3ea3cdb5e08da106c6703ffe687d583e49954d570cc80434816d3746e18be889ffe53c58bf3e538081ea4077c26a41055b216d languageName: node linkType: hard -"typed-array-byte-offset@npm:^1.0.0": - version: 1.0.0 - resolution: "typed-array-byte-offset@npm:1.0.0" +"typed-array-byte-offset@npm:^1.0.2": + version: 1.0.2 + resolution: "typed-array-byte-offset@npm:1.0.2" dependencies: - available-typed-arrays: ^1.0.5 - call-bind: ^1.0.2 + available-typed-arrays: ^1.0.7 + call-bind: ^1.0.7 for-each: ^0.3.3 - has-proto: ^1.0.1 - is-typed-array: ^1.1.10 - checksum: 04f6f02d0e9a948a95fbfe0d5a70b002191fae0b8fe0fe3130a9b2336f043daf7a3dda56a31333c35a067a97e13f539949ab261ca0f3692c41603a46a94e960b + gopd: ^1.0.1 + has-proto: ^1.0.3 + is-typed-array: ^1.1.13 + checksum: c8645c8794a621a0adcc142e0e2c57b1823bbfa4d590ad2c76b266aa3823895cf7afb9a893bf6685e18454ab1b0241e1a8d885a2d1340948efa4b56add4b5f67 languageName: node linkType: hard -"typed-array-length@npm:^1.0.4": - version: 1.0.4 - resolution: "typed-array-length@npm:1.0.4" +"typed-array-length@npm:^1.0.5": + version: 1.0.5 + resolution: "typed-array-length@npm:1.0.5" dependencies: - call-bind: ^1.0.2 + call-bind: ^1.0.7 for-each: ^0.3.3 - is-typed-array: ^1.1.9 - checksum: 2228febc93c7feff142b8c96a58d4a0d7623ecde6c7a24b2b98eb3170e99f7c7eff8c114f9b283085cd59dcd2bd43aadf20e25bba4b034a53c5bb292f71f8956 + gopd: ^1.0.1 + has-proto: ^1.0.3 + is-typed-array: ^1.1.13 + possible-typed-array-names: ^1.0.0 + checksum: 82f5b666155cff1b345a1f3ab018d3f7667990f525435e4c8448cc094ab0f8ea283bb7cbde4d7bc82ea0b9b1072523bf31e86620d72615951d7fa9ccb4f42dfa languageName: node linkType: hard @@ -45246,7 +44936,7 @@ __metadata: languageName: node linkType: hard -"uuid@npm:^3.3.2": +"uuid@npm:^3.3.2, uuid@npm:^3.4.0": version: 3.4.0 resolution: "uuid@npm:3.4.0" bin: @@ -46048,16 +45738,16 @@ __metadata: languageName: node linkType: hard -"which-typed-array@npm:^1.1.11, which-typed-array@npm:^1.1.13, which-typed-array@npm:^1.1.2, which-typed-array@npm:^1.1.9": - version: 1.1.13 - resolution: "which-typed-array@npm:1.1.13" +"which-typed-array@npm:^1.1.14, which-typed-array@npm:^1.1.15, which-typed-array@npm:^1.1.2, which-typed-array@npm:^1.1.9": + version: 1.1.15 + resolution: "which-typed-array@npm:1.1.15" dependencies: - available-typed-arrays: ^1.0.5 - call-bind: ^1.0.4 + available-typed-arrays: ^1.0.7 + call-bind: ^1.0.7 for-each: ^0.3.3 gopd: ^1.0.1 - has-tostringtag: ^1.0.0 - checksum: 3828a0d5d72c800e369d447e54c7620742a4cc0c9baf1b5e8c17e9b6ff90d8d861a3a6dd4800f1953dbf80e5e5cec954a289e5b4a223e3bee4aeb1f8c5f33309 + has-tostringtag: ^1.0.2 + checksum: 65227dcbfadf5677aacc43ec84356d17b5500cb8b8753059bb4397de5cd0c2de681d24e1a7bd575633f976a95f88233abfd6549c2105ef4ebd58af8aa1807c75 languageName: node linkType: hard @@ -46112,7 +45802,7 @@ __metadata: languageName: node linkType: hard -"winston-transport@npm:^4.5.0": +"winston-transport@npm:^4.5.0, winston-transport@npm:^4.7.0": version: 4.7.0 resolution: "winston-transport@npm:4.7.0" dependencies: @@ -46124,8 +45814,8 @@ __metadata: linkType: hard "winston@npm:^3.2.1": - version: 3.11.0 - resolution: "winston@npm:3.11.0" + version: 3.12.0 + resolution: "winston@npm:3.12.0" dependencies: "@colors/colors": ^1.6.0 "@dabh/diagnostics": ^2.0.2 @@ -46137,8 +45827,8 @@ __metadata: safe-stable-stringify: ^2.3.1 stack-trace: 0.0.x triple-beam: ^1.3.0 - winston-transport: ^4.5.0 - checksum: ca4454070f7a71b19f53c8c1765c59a013dab220edb49161b2e81917751d3e9edc3382430e4fb050feda04fb8463290ecab7cbc9240ec8d3d3b32a121849bbb0 + winston-transport: ^4.7.0 + checksum: 7549e90d471312f3678c86fc51c86da05717be0390ecc0dc1a312a57f4ab3eb22e4fae1829291a05334376db8caa5f118d1de019d8c67e5f031ed70678363703 languageName: node linkType: hard @@ -46509,11 +46199,11 @@ __metadata: linkType: hard "yaml@npm:^2.0.0, yaml@npm:^2.0.0-10, yaml@npm:^2.1.1, yaml@npm:^2.2.1, yaml@npm:^2.2.2, yaml@npm:^2.3.2, yaml@npm:^2.3.3": - version: 2.4.0 - resolution: "yaml@npm:2.4.0" + version: 2.4.1 + resolution: "yaml@npm:2.4.1" bin: yaml: bin.mjs - checksum: 3c25ebae34ee702af772ebbd1855a980b1487cd21d6220d952592edb4f7d89322aafd14753d99924ba7076eb4c5b3d809c64bb532402b01af280f7af674277f1 + checksum: 4c391d07a5d5e935e058babb71026c9cdc9a6fd889e35dd91b53cfb0a12691b67c6c5c740858e71345fef18cd9c13c554a6dda9196f59820d769d94041badb0b languageName: node linkType: hard @@ -46591,12 +46281,12 @@ __metadata: linkType: hard "yauzl@npm:^3.0.0": - version: 3.1.0 - resolution: "yauzl@npm:3.1.0" + version: 3.1.2 + resolution: "yauzl@npm:3.1.2" dependencies: buffer-crc32: ~0.2.3 pend: ~1.2.0 - checksum: 0464b49b0c10f0ab19136c917358b025c7f86bab0699a1f8afd681e09f3782688d3106b4e7eadfcc81e54779cca5c6de0843fabf5ceb07e1638ec2fd8371d0b7 + checksum: 8ed80d4b2dfe749498b77120089bd216f50bbcd463a7a719e84cd92d1ba9ffc64eb90f3a8590f93521fccfc6dad5c757e4cef9aef3d78d94890aab2194450005 languageName: node linkType: hard @@ -46686,14 +46376,14 @@ __metadata: linkType: hard "yup@npm:^1.0.0": - version: 1.3.3 - resolution: "yup@npm:1.3.3" + version: 1.4.0 + resolution: "yup@npm:1.4.0" dependencies: property-expr: ^2.0.5 tiny-case: ^1.0.3 toposort: ^2.0.2 type-fest: ^2.19.0 - checksum: 7b9e19fedc85deb8cffd6b24617f79542c904f11a9c4ca8bb72fb003e61bd6c5278cc799fa9421c6a1a96ff04e7117bf0c000c9f10b543d6cd32a1e35e8f5f65 + checksum: 20a2ee0c1e891979ca16b34805b3a3be9ab4bea6ea3d2f9005b998b4dc992d0e4d7b53e5f4d8d9423420046630fb44fdf0ecf7e83bc34dd83392bca046c5229d languageName: node linkType: hard @@ -46775,12 +46465,12 @@ __metadata: languageName: node linkType: hard -"zod-validation-error@npm:3.0.2": - version: 3.0.2 - resolution: "zod-validation-error@npm:3.0.2" +"zod-validation-error@npm:3.0.3": + version: 3.0.3 + resolution: "zod-validation-error@npm:3.0.3" peerDependencies: zod: ^3.18.0 - checksum: 5127ff75f50db2f195d739142d4e56b1d8f7294b82c08d1b308978bc546afc7c3b2958f677d00eca1e3254342704d48a34ba93f8e88ae5799feefda6b6dc911e + checksum: 08ff4ccb2eb27bc1dd24dbf5cbd3196a21304cac05e554e4ef3e65ca7269fc4311fad2d0047878ed745077b8990b4f274c69f8ef79a29d13d255736889b87df3 languageName: node linkType: hard