From 097df3fcf3ec59254fca677a39e71b87d90040a5 Mon Sep 17 00:00:00 2001 From: Patrick McDonnell Date: Mon, 13 Oct 2025 09:02:39 +0200 Subject: [PATCH 01/73] Include slack channel ID in error message if message could not be delivered Signed-off-by: Patrick McDonnell --- .../src/lib/SlackNotificationProcessor.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/notifications-backend-module-slack/src/lib/SlackNotificationProcessor.ts b/plugins/notifications-backend-module-slack/src/lib/SlackNotificationProcessor.ts index 96d4b2ff3e..f9b00c9a58 100644 --- a/plugins/notifications-backend-module-slack/src/lib/SlackNotificationProcessor.ts +++ b/plugins/notifications-backend-module-slack/src/lib/SlackNotificationProcessor.ts @@ -148,12 +148,12 @@ export class SlackNotificationProcessor implements NotificationProcessor { let successCount = 0; let failureCount = 0; - results.forEach(result => { + results.forEach((result, index) => { if (result.status === 'fulfilled') { successCount++; } else { this.logger.error( - `Failed to send Slack channel notification: ${result.reason.message}`, + `Failed to send Slack channel notification to ${opts[index].channel}: ${result.reason.message}`, ); failureCount++; } From d959bec54024eb5d075009b233b97c095eb0db76 Mon Sep 17 00:00:00 2001 From: Patrick McDonnell Date: Tue, 14 Oct 2025 09:07:46 +0200 Subject: [PATCH 02/73] Add changeset Signed-off-by: Patrick McDonnell --- .changeset/sad-rockets-rule.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/sad-rockets-rule.md diff --git a/.changeset/sad-rockets-rule.md b/.changeset/sad-rockets-rule.md new file mode 100644 index 0000000000..fe15580f99 --- /dev/null +++ b/.changeset/sad-rockets-rule.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-notifications-backend-module-slack': patch +--- + +When an error message is logged due to inability to send a message with the Slack SDK, include the Slack Channel ID in the message to aid debugging. From 1c7e1cefeca352765dba6b772c6b45a20440b8c2 Mon Sep 17 00:00:00 2001 From: Antonio Ereiz Date: Mon, 27 Oct 2025 19:14:19 +0100 Subject: [PATCH 03/73] revert viewBox back on DependencyGraph and add allowFullscreen prop to EntityRelationsGraph Signed-off-by: Antonio Ereiz --- .changeset/real-trains-visit.md | 6 ++++++ .../src/components/DependencyGraph/DependencyGraph.tsx | 2 +- plugins/catalog-graph/report.api.md | 1 + .../EntityRelationsGraph/EntityRelationsGraph.tsx | 3 +++ 4 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 .changeset/real-trains-visit.md diff --git a/.changeset/real-trains-visit.md b/.changeset/real-trains-visit.md new file mode 100644 index 0000000000..ea62189631 --- /dev/null +++ b/.changeset/real-trains-visit.md @@ -0,0 +1,6 @@ +--- +'@backstage/core-components': patch +'@backstage/plugin-catalog-graph': patch +--- + +Reverted back viewbox to old values. Also, added fullScreen prop to EntityCatalogGraphCard diff --git a/packages/core-components/src/components/DependencyGraph/DependencyGraph.tsx b/packages/core-components/src/components/DependencyGraph/DependencyGraph.tsx index 4b99402c3a..db22a2951b 100644 --- a/packages/core-components/src/components/DependencyGraph/DependencyGraph.tsx +++ b/packages/core-components/src/components/DependencyGraph/DependencyGraph.tsx @@ -533,7 +533,7 @@ export function DependencyGraph( height={graphHeight} y={maxHeight / 2 - graphHeight / 2} x={maxWidth / 2 - graphWidth / 2} - viewBox={`-25 -25 ${graphWidth + 50} ${graphHeight + 50}`} + viewBox={`0 0 ${graphWidth} ${graphHeight}`} > {graphEdges.map(e => { const edge = graph.current.edge(e) as GraphEdge; diff --git a/plugins/catalog-graph/report.api.md b/plugins/catalog-graph/report.api.md index b7621d05ef..23c131659a 100644 --- a/plugins/catalog-graph/report.api.md +++ b/plugins/catalog-graph/report.api.md @@ -182,6 +182,7 @@ export type EntityRelationsGraphProps = { renderEdge?: DependencyGraphTypes.RenderEdgeFunction; curve?: 'curveStepBefore' | 'curveMonotoneX'; showArrowHeads?: boolean; + allowFullscreen?: boolean; }; // @public diff --git a/plugins/catalog-graph/src/components/EntityRelationsGraph/EntityRelationsGraph.tsx b/plugins/catalog-graph/src/components/EntityRelationsGraph/EntityRelationsGraph.tsx index e71f928c15..b1443e8292 100644 --- a/plugins/catalog-graph/src/components/EntityRelationsGraph/EntityRelationsGraph.tsx +++ b/plugins/catalog-graph/src/components/EntityRelationsGraph/EntityRelationsGraph.tsx @@ -92,6 +92,7 @@ export type EntityRelationsGraphProps = { renderEdge?: DependencyGraphTypes.RenderEdgeFunction; curve?: 'curveStepBefore' | 'curveMonotoneX'; showArrowHeads?: boolean; + allowFullscreen?: boolean; }; /** @@ -118,6 +119,7 @@ export const EntityRelationsGraph = (props: EntityRelationsGraphProps) => { renderEdge, curve, showArrowHeads, + allowFullscreen, } = props; const theme = useTheme(); @@ -169,6 +171,7 @@ export const EntityRelationsGraph = (props: EntityRelationsGraphProps) => { zoom={zoom} curve={curve} showArrowHeads={showArrowHeads} + allowFullscreen={allowFullscreen} /> )} From ee4759567a1265e3ed9387eac0d554ac29e93700 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 10 Nov 2025 14:16:21 +0000 Subject: [PATCH 04/73] chore(deps): update dependency @dagrejs/dagre to v1.1.8 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index e05ebac865..024757d0dc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8354,11 +8354,11 @@ __metadata: linkType: hard "@dagrejs/dagre@npm:^1.1.4": - version: 1.1.5 - resolution: "@dagrejs/dagre@npm:1.1.5" + version: 1.1.8 + resolution: "@dagrejs/dagre@npm:1.1.8" dependencies: "@dagrejs/graphlib": "npm:2.2.4" - checksum: 10/c00abd1e04d19f90ad8dfa0a4e16365371bc4309affead3827a1b39f6b0b946643b8af0b1e5519011deca3fda4c7471b27e9ebb03423309a94f95ac0b881ac4f + checksum: 10/648f60b8d6c05ec3367d1c7a4f2da32b7c26273e40234ce37bace606cd1e4f882ef7947452a0f0df4b34f1bbbc9f3cbae29f0f6af19fbffb8bc9f5e9b97fc3e8 languageName: node linkType: hard From 93b61d847c5a0e8a8e250655f711fc44f55faa51 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 11 Nov 2025 15:24:09 +0000 Subject: [PATCH 05/73] chore(deps): update step-security/harden-runner action to v2.13.2 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/api-breaking-changes-comment.yml | 2 +- .github/workflows/api-breaking-changes.yml | 2 +- .github/workflows/automate_area-labels.yml | 2 +- .github/workflows/automate_changeset_feedback.yml | 2 +- .github/workflows/automate_merge_message.yml | 2 +- .github/workflows/automate_stale.yml | 2 +- .github/workflows/ci-noop.yml | 2 +- .github/workflows/ci.yml | 4 ++-- .github/workflows/cron.yml | 2 +- .github/workflows/deploy_docker-image.yml | 2 +- .github/workflows/deploy_microsite.yml | 6 +++--- .github/workflows/deploy_packages.yml | 2 +- .github/workflows/issue.yaml | 2 +- .github/workflows/mui-migration-tracker.yml | 2 +- .github/workflows/pr-review-comment-trigger.yaml | 2 +- .github/workflows/pr-review-comment.yaml | 2 +- .github/workflows/pr.yaml | 2 +- .github/workflows/scorecard.yml | 2 +- .github/workflows/sync_canon.yml | 2 +- .github/workflows/sync_code-formatting.yml | 2 +- .github/workflows/sync_dependabot-changesets.yml | 2 +- .github/workflows/sync_release-manifest.yml | 2 +- .github/workflows/sync_renovate-changesets.yml | 2 +- .github/workflows/sync_snyk-github-issues.yml | 2 +- .github/workflows/sync_snyk-monitor.yml | 2 +- .github/workflows/sync_version-packages.yml | 2 +- .github/workflows/verify_accessibility-noop.yml | 2 +- .github/workflows/verify_accessibility.yml | 2 +- .github/workflows/verify_chromatic-noop.yml | 2 +- .github/workflows/verify_chromatic.yml | 2 +- .github/workflows/verify_codeql.yml | 2 +- .github/workflows/verify_docs-quality.yml | 2 +- .github/workflows/verify_e2e-linux-noop.yml | 2 +- .github/workflows/verify_e2e-linux.yml | 2 +- .github/workflows/verify_e2e-techdocs.yml | 2 +- .github/workflows/verify_e2e-windows-noop.yml | 2 +- .github/workflows/verify_e2e-windows.yml | 2 +- .github/workflows/verify_fossa.yml | 2 +- .github/workflows/verify_microsite-noop.yml | 2 +- .github/workflows/verify_microsite.yml | 6 +++--- .github/workflows/verify_microsite_accessibility-noop.yml | 2 +- .github/workflows/verify_microsite_accessibility.yml | 2 +- .github/workflows/verify_windows.yml | 2 +- 43 files changed, 48 insertions(+), 48 deletions(-) diff --git a/.github/workflows/api-breaking-changes-comment.yml b/.github/workflows/api-breaking-changes-comment.yml index 981d5cb4d6..e1413193e3 100644 --- a/.github/workflows/api-breaking-changes-comment.yml +++ b/.github/workflows/api-breaking-changes-comment.yml @@ -23,7 +23,7 @@ jobs: comment-cache-key: ${{ steps.hash.outputs.COMMENT_FILE_HASH }} steps: - name: Harden Runner - uses: step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911 # v2.13.0 + uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2 with: disable-sudo: true egress-policy: block diff --git a/.github/workflows/api-breaking-changes.yml b/.github/workflows/api-breaking-changes.yml index f72d9c29bf..913035fd30 100644 --- a/.github/workflows/api-breaking-changes.yml +++ b/.github/workflows/api-breaking-changes.yml @@ -14,7 +14,7 @@ jobs: if: ${{ github.event_name != 'pull_request' || github.event.action != 'closed' }} steps: - name: Harden Runner - uses: step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911 # v2.13.0 + uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2 with: egress-policy: audit diff --git a/.github/workflows/automate_area-labels.yml b/.github/workflows/automate_area-labels.yml index f21ef62d8d..b1663d1629 100644 --- a/.github/workflows/automate_area-labels.yml +++ b/.github/workflows/automate_area-labels.yml @@ -13,7 +13,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911 # v2.13.0 + uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2 with: egress-policy: audit diff --git a/.github/workflows/automate_changeset_feedback.yml b/.github/workflows/automate_changeset_feedback.yml index c41f4dd8f3..ecd4de4ffe 100644 --- a/.github/workflows/automate_changeset_feedback.yml +++ b/.github/workflows/automate_changeset_feedback.yml @@ -23,7 +23,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911 # v2.13.0 + uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2 with: egress-policy: audit diff --git a/.github/workflows/automate_merge_message.yml b/.github/workflows/automate_merge_message.yml index 59da292109..f9d73778f7 100644 --- a/.github/workflows/automate_merge_message.yml +++ b/.github/workflows/automate_merge_message.yml @@ -24,7 +24,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911 # v2.13.0 + uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2 with: egress-policy: audit diff --git a/.github/workflows/automate_stale.yml b/.github/workflows/automate_stale.yml index 5b92c6211b..cbdab4414a 100644 --- a/.github/workflows/automate_stale.yml +++ b/.github/workflows/automate_stale.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911 # v2.13.0 + uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2 with: egress-policy: audit diff --git a/.github/workflows/ci-noop.yml b/.github/workflows/ci-noop.yml index 0fce9ad6b9..d046686002 100644 --- a/.github/workflows/ci-noop.yml +++ b/.github/workflows/ci-noop.yml @@ -40,7 +40,7 @@ jobs: name: Test ${{ matrix.node-version }} steps: - name: Harden Runner - uses: step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911 # v2.13.0 + uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2 with: egress-policy: audit diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8aabe7de58..b63c408100 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -28,7 +28,7 @@ jobs: name: Install ${{ matrix.node-version }} steps: - name: Harden Runner - uses: step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911 # v2.13.0 + uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2 with: egress-policy: audit @@ -64,7 +64,7 @@ jobs: name: Verify ${{ matrix.node-version }} steps: - name: Harden Runner - uses: step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911 # v2.13.0 + uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2 with: egress-policy: audit diff --git a/.github/workflows/cron.yml b/.github/workflows/cron.yml index 285c2e6c41..bb759971b7 100644 --- a/.github/workflows/cron.yml +++ b/.github/workflows/cron.yml @@ -10,7 +10,7 @@ jobs: timeout-minutes: 10 steps: - name: Harden Runner - uses: step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911 # v2.13.0 + uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2 with: egress-policy: audit diff --git a/.github/workflows/deploy_docker-image.yml b/.github/workflows/deploy_docker-image.yml index e0f4ec29ed..6daad796cd 100644 --- a/.github/workflows/deploy_docker-image.yml +++ b/.github/workflows/deploy_docker-image.yml @@ -20,7 +20,7 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911 # v2.13.0 + uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2 with: egress-policy: audit diff --git a/.github/workflows/deploy_microsite.yml b/.github/workflows/deploy_microsite.yml index ecf75f1444..97fcd5d22a 100644 --- a/.github/workflows/deploy_microsite.yml +++ b/.github/workflows/deploy_microsite.yml @@ -23,7 +23,7 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911 # v2.13.0 + uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2 with: egress-policy: audit @@ -135,7 +135,7 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911 # v2.13.0 + uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2 with: egress-policy: audit @@ -240,7 +240,7 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911 # v2.13.0 + uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2 with: egress-policy: audit diff --git a/.github/workflows/deploy_packages.yml b/.github/workflows/deploy_packages.yml index 9e4e504e60..227382c04e 100644 --- a/.github/workflows/deploy_packages.yml +++ b/.github/workflows/deploy_packages.yml @@ -151,7 +151,7 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911 # v2.13.0 + uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2 with: egress-policy: audit diff --git a/.github/workflows/issue.yaml b/.github/workflows/issue.yaml index a759adcb46..2eefcfcd88 100644 --- a/.github/workflows/issue.yaml +++ b/.github/workflows/issue.yaml @@ -16,7 +16,7 @@ jobs: if: github.repository == 'backstage/backstage' steps: - name: Harden Runner - uses: step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911 # v2.13.0 + uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2 with: egress-policy: audit diff --git a/.github/workflows/mui-migration-tracker.yml b/.github/workflows/mui-migration-tracker.yml index 4754ec51b0..8c91e0e8a0 100644 --- a/.github/workflows/mui-migration-tracker.yml +++ b/.github/workflows/mui-migration-tracker.yml @@ -18,7 +18,7 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911 # v2.13.0 + uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2 with: egress-policy: audit diff --git a/.github/workflows/pr-review-comment-trigger.yaml b/.github/workflows/pr-review-comment-trigger.yaml index d5970deae8..968bc4ab12 100644 --- a/.github/workflows/pr-review-comment-trigger.yaml +++ b/.github/workflows/pr-review-comment-trigger.yaml @@ -20,7 +20,7 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911 # v2.13.0 + uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2 with: egress-policy: audit diff --git a/.github/workflows/pr-review-comment.yaml b/.github/workflows/pr-review-comment.yaml index 9db0792eaa..8259a42d2d 100644 --- a/.github/workflows/pr-review-comment.yaml +++ b/.github/workflows/pr-review-comment.yaml @@ -17,7 +17,7 @@ jobs: steps: # Inspired by https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#using-data-from-the-triggering-workflow - name: Harden Runner - uses: step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911 # v2.13.0 + uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2 with: egress-policy: audit diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index 33dd3d00ce..4067326890 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -18,7 +18,7 @@ jobs: if: github.repository == 'backstage/backstage' && ( github.event.pull_request || github.event.issue.pull_request ) steps: - name: Harden Runner - uses: step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911 # v2.13.0 + uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2 with: egress-policy: audit diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 232d055072..b8ea97d85e 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -29,7 +29,7 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911 # v2.13.0 + uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2 with: egress-policy: audit diff --git a/.github/workflows/sync_canon.yml b/.github/workflows/sync_canon.yml index 3b85c1c49d..1f1f5cebd9 100644 --- a/.github/workflows/sync_canon.yml +++ b/.github/workflows/sync_canon.yml @@ -8,7 +8,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911 # v2.13.0 + uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2 with: egress-policy: audit diff --git a/.github/workflows/sync_code-formatting.yml b/.github/workflows/sync_code-formatting.yml index 33cab94280..c6e397debf 100644 --- a/.github/workflows/sync_code-formatting.yml +++ b/.github/workflows/sync_code-formatting.yml @@ -10,7 +10,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911 # v2.13.0 + uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2 with: egress-policy: audit diff --git a/.github/workflows/sync_dependabot-changesets.yml b/.github/workflows/sync_dependabot-changesets.yml index 181d48eb38..26a64d2bf9 100644 --- a/.github/workflows/sync_dependabot-changesets.yml +++ b/.github/workflows/sync_dependabot-changesets.yml @@ -11,7 +11,7 @@ jobs: if: github.actor == 'dependabot[bot]' && github.repository == 'backstage/backstage' steps: - name: Harden Runner - uses: step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911 # v2.13.0 + uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2 with: egress-policy: audit diff --git a/.github/workflows/sync_release-manifest.yml b/.github/workflows/sync_release-manifest.yml index a9c4b3722b..31598715fd 100644 --- a/.github/workflows/sync_release-manifest.yml +++ b/.github/workflows/sync_release-manifest.yml @@ -8,7 +8,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911 # v2.13.0 + uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2 with: egress-policy: audit diff --git a/.github/workflows/sync_renovate-changesets.yml b/.github/workflows/sync_renovate-changesets.yml index 2331e2c30f..26d7ded9c1 100644 --- a/.github/workflows/sync_renovate-changesets.yml +++ b/.github/workflows/sync_renovate-changesets.yml @@ -11,7 +11,7 @@ jobs: if: github.actor == 'renovate[bot]' && github.repository == 'backstage/backstage' steps: - name: Harden Runner - uses: step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911 # v2.13.0 + uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2 with: egress-policy: audit diff --git a/.github/workflows/sync_snyk-github-issues.yml b/.github/workflows/sync_snyk-github-issues.yml index f18455f5fc..2c485d8986 100644 --- a/.github/workflows/sync_snyk-github-issues.yml +++ b/.github/workflows/sync_snyk-github-issues.yml @@ -12,7 +12,7 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911 # v2.13.0 + uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2 with: egress-policy: audit diff --git a/.github/workflows/sync_snyk-monitor.yml b/.github/workflows/sync_snyk-monitor.yml index b928586aa8..1a56fea1fd 100644 --- a/.github/workflows/sync_snyk-monitor.yml +++ b/.github/workflows/sync_snyk-monitor.yml @@ -25,7 +25,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911 # v2.13.0 + uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2 with: egress-policy: audit diff --git a/.github/workflows/sync_version-packages.yml b/.github/workflows/sync_version-packages.yml index 66a798bd58..15b8d5bfd8 100644 --- a/.github/workflows/sync_version-packages.yml +++ b/.github/workflows/sync_version-packages.yml @@ -14,7 +14,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911 # v2.13.0 + uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2 with: egress-policy: audit diff --git a/.github/workflows/verify_accessibility-noop.yml b/.github/workflows/verify_accessibility-noop.yml index df6f004171..abb3abc665 100644 --- a/.github/workflows/verify_accessibility-noop.yml +++ b/.github/workflows/verify_accessibility-noop.yml @@ -26,7 +26,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911 # v2.13.0 + uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2 with: egress-policy: audit diff --git a/.github/workflows/verify_accessibility.yml b/.github/workflows/verify_accessibility.yml index 48e243b002..034a7355fb 100644 --- a/.github/workflows/verify_accessibility.yml +++ b/.github/workflows/verify_accessibility.yml @@ -20,7 +20,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911 # v2.13.0 + uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2 with: egress-policy: audit diff --git a/.github/workflows/verify_chromatic-noop.yml b/.github/workflows/verify_chromatic-noop.yml index 4de52a3258..2a2ad7d43d 100644 --- a/.github/workflows/verify_chromatic-noop.yml +++ b/.github/workflows/verify_chromatic-noop.yml @@ -20,7 +20,7 @@ jobs: name: Chromatic steps: - name: Harden Runner - uses: step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911 # v2.13.0 + uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2 with: egress-policy: audit diff --git a/.github/workflows/verify_chromatic.yml b/.github/workflows/verify_chromatic.yml index e6649c3e55..ca10eb9305 100644 --- a/.github/workflows/verify_chromatic.yml +++ b/.github/workflows/verify_chromatic.yml @@ -24,7 +24,7 @@ jobs: name: Chromatic steps: - name: Harden Runner - uses: step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911 # v2.13.0 + uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2 with: egress-policy: audit diff --git a/.github/workflows/verify_codeql.yml b/.github/workflows/verify_codeql.yml index 254938ecc8..fc60f1fa0d 100644 --- a/.github/workflows/verify_codeql.yml +++ b/.github/workflows/verify_codeql.yml @@ -42,7 +42,7 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911 # v2.13.0 + uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2 with: egress-policy: audit diff --git a/.github/workflows/verify_docs-quality.yml b/.github/workflows/verify_docs-quality.yml index 6c855eeea4..46201d1b6c 100644 --- a/.github/workflows/verify_docs-quality.yml +++ b/.github/workflows/verify_docs-quality.yml @@ -12,7 +12,7 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911 # v2.13.0 + uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2 with: egress-policy: audit diff --git a/.github/workflows/verify_e2e-linux-noop.yml b/.github/workflows/verify_e2e-linux-noop.yml index aa3358f2f7..cc25b2db58 100644 --- a/.github/workflows/verify_e2e-linux-noop.yml +++ b/.github/workflows/verify_e2e-linux-noop.yml @@ -29,7 +29,7 @@ jobs: name: E2E Linux ${{ matrix.node-version }} steps: - name: Harden Runner - uses: step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911 # v2.13.0 + uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2 with: egress-policy: audit diff --git a/.github/workflows/verify_e2e-linux.yml b/.github/workflows/verify_e2e-linux.yml index dc81d42e8a..b630577f24 100644 --- a/.github/workflows/verify_e2e-linux.yml +++ b/.github/workflows/verify_e2e-linux.yml @@ -43,7 +43,7 @@ jobs: name: E2E Linux ${{ matrix.node-version }} steps: - name: Harden Runner - uses: step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911 # v2.13.0 + uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2 with: egress-policy: audit diff --git a/.github/workflows/verify_e2e-techdocs.yml b/.github/workflows/verify_e2e-techdocs.yml index e933efe3f8..557e41f210 100644 --- a/.github/workflows/verify_e2e-techdocs.yml +++ b/.github/workflows/verify_e2e-techdocs.yml @@ -32,7 +32,7 @@ jobs: name: Techdocs steps: - name: Harden Runner - uses: step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911 # v2.13.0 + uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2 with: egress-policy: audit diff --git a/.github/workflows/verify_e2e-windows-noop.yml b/.github/workflows/verify_e2e-windows-noop.yml index b1a4344bfc..f8681e8b10 100644 --- a/.github/workflows/verify_e2e-windows-noop.yml +++ b/.github/workflows/verify_e2e-windows-noop.yml @@ -25,7 +25,7 @@ jobs: name: E2E Windows ${{ matrix.node-version }} steps: - name: Harden Runner - uses: step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911 # v2.13.0 + uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2 with: egress-policy: audit diff --git a/.github/workflows/verify_e2e-windows.yml b/.github/workflows/verify_e2e-windows.yml index eefcf22b35..ce05355620 100644 --- a/.github/workflows/verify_e2e-windows.yml +++ b/.github/workflows/verify_e2e-windows.yml @@ -33,7 +33,7 @@ jobs: name: E2E Windows ${{ matrix.node-version }} steps: - name: Harden Runner - uses: step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911 # v2.13.0 + uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2 with: egress-policy: audit diff --git a/.github/workflows/verify_fossa.yml b/.github/workflows/verify_fossa.yml index 9c811fbe9f..85ec8cf927 100644 --- a/.github/workflows/verify_fossa.yml +++ b/.github/workflows/verify_fossa.yml @@ -14,7 +14,7 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911 # v2.13.0 + uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2 with: egress-policy: audit diff --git a/.github/workflows/verify_microsite-noop.yml b/.github/workflows/verify_microsite-noop.yml index 3466826cae..a6edeb8415 100644 --- a/.github/workflows/verify_microsite-noop.yml +++ b/.github/workflows/verify_microsite-noop.yml @@ -21,7 +21,7 @@ jobs: name: Microsite steps: - name: Harden Runner - uses: step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911 # v2.13.0 + uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2 with: egress-policy: audit diff --git a/.github/workflows/verify_microsite.yml b/.github/workflows/verify_microsite.yml index 67ac397d43..2418a4061d 100644 --- a/.github/workflows/verify_microsite.yml +++ b/.github/workflows/verify_microsite.yml @@ -28,7 +28,7 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911 # v2.13.0 + uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2 with: egress-policy: audit @@ -137,7 +137,7 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911 # v2.13.0 + uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2 with: egress-policy: audit @@ -234,7 +234,7 @@ jobs: name: Microsite steps: - name: Harden Runner - uses: step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911 # v2.13.0 + uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2 with: egress-policy: audit diff --git a/.github/workflows/verify_microsite_accessibility-noop.yml b/.github/workflows/verify_microsite_accessibility-noop.yml index 5e0bc35cc0..f4263e1398 100644 --- a/.github/workflows/verify_microsite_accessibility-noop.yml +++ b/.github/workflows/verify_microsite_accessibility-noop.yml @@ -24,7 +24,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911 # v2.13.0 + uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2 with: egress-policy: audit diff --git a/.github/workflows/verify_microsite_accessibility.yml b/.github/workflows/verify_microsite_accessibility.yml index 40e1866b5f..19912c9cf0 100644 --- a/.github/workflows/verify_microsite_accessibility.yml +++ b/.github/workflows/verify_microsite_accessibility.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911 # v2.13.0 + uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2 with: egress-policy: audit diff --git a/.github/workflows/verify_windows.yml b/.github/workflows/verify_windows.yml index 363bc075b8..52e3b6d6ce 100644 --- a/.github/workflows/verify_windows.yml +++ b/.github/workflows/verify_windows.yml @@ -29,7 +29,7 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911 # v2.13.0 + uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2 with: egress-policy: audit From 36be7d8753806771d416a7f1ef5082282e1a6902 Mon Sep 17 00:00:00 2001 From: Ben Lambert Date: Tue, 11 Nov 2025 10:24:23 -0500 Subject: [PATCH 06/73] Revert viewbox changes and add fullScreen prop Signed-off-by: Ben Lambert --- .changeset/real-trains-visit.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.changeset/real-trains-visit.md b/.changeset/real-trains-visit.md index ea62189631..c229562ec4 100644 --- a/.changeset/real-trains-visit.md +++ b/.changeset/real-trains-visit.md @@ -3,4 +3,5 @@ '@backstage/plugin-catalog-graph': patch --- -Reverted back viewbox to old values. Also, added fullScreen prop to EntityCatalogGraphCard +- Revert `viewbox` back to old values. +- Added `fullScreen` prop to `EntityCatalogGraphCard` From 796f24e483a41ca66986561cf91c9986872f88ca Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 11 Nov 2025 15:25:24 +0000 Subject: [PATCH 07/73] chore(deps): update actions/cache action to v4.3.0 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/api-breaking-changes-comment.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/api-breaking-changes-comment.yml b/.github/workflows/api-breaking-changes-comment.yml index 981d5cb4d6..eeebb332a4 100644 --- a/.github/workflows/api-breaking-changes-comment.yml +++ b/.github/workflows/api-breaking-changes-comment.yml @@ -74,7 +74,7 @@ jobs: - name: Cache Comment if: ${{ steps.event.outputs.ACTION != 'closed' }} - uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4 + uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 with: path: comment.md key: ${{ steps.hash.outputs.COMMENT_FILE_HASH }} From ebefb234c3d0d76c1e2c2a86f44091f497dd303f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 11 Nov 2025 16:10:06 +0000 Subject: [PATCH 08/73] chore(deps): update actions/checkout action to v4.3.0 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/api-breaking-changes.yml | 2 +- .github/workflows/automate_changeset_feedback.yml | 2 +- .github/workflows/automate_merge_message.yml | 2 +- .github/workflows/ci.yml | 6 +++--- .github/workflows/deploy_docker-image.yml | 2 +- .github/workflows/deploy_microsite.yml | 8 ++++---- .github/workflows/deploy_packages.yml | 2 +- .github/workflows/scorecard.yml | 2 +- .github/workflows/sync_canon.yml | 4 ++-- .github/workflows/sync_code-formatting.yml | 2 +- .github/workflows/sync_dependabot-changesets.yml | 2 +- .github/workflows/sync_release-manifest.yml | 4 ++-- .github/workflows/sync_renovate-changesets.yml | 2 +- .github/workflows/sync_snyk-github-issues.yml | 2 +- .github/workflows/sync_snyk-monitor.yml | 2 +- .github/workflows/sync_version-packages.yml | 2 +- .github/workflows/verify_accessibility.yml | 2 +- .github/workflows/verify_chromatic.yml | 2 +- .github/workflows/verify_codeql.yml | 2 +- .github/workflows/verify_docs-quality.yml | 2 +- .github/workflows/verify_e2e-linux.yml | 2 +- .github/workflows/verify_e2e-techdocs.yml | 2 +- .github/workflows/verify_e2e-windows.yml | 2 +- .github/workflows/verify_fossa.yml | 2 +- .github/workflows/verify_microsite.yml | 8 ++++---- .github/workflows/verify_microsite_accessibility.yml | 2 +- .github/workflows/verify_windows.yml | 2 +- 27 files changed, 37 insertions(+), 37 deletions(-) diff --git a/.github/workflows/api-breaking-changes.yml b/.github/workflows/api-breaking-changes.yml index f72d9c29bf..74ca3cb6a1 100644 --- a/.github/workflows/api-breaking-changes.yml +++ b/.github/workflows/api-breaking-changes.yml @@ -18,7 +18,7 @@ jobs: with: egress-policy: audit - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 with: # Fetch the commit that's merged into the base rather than the target ref # This will let us diff only the contents of the PR, without fetching more history diff --git a/.github/workflows/automate_changeset_feedback.yml b/.github/workflows/automate_changeset_feedback.yml index c41f4dd8f3..a6c826a716 100644 --- a/.github/workflows/automate_changeset_feedback.yml +++ b/.github/workflows/automate_changeset_feedback.yml @@ -27,7 +27,7 @@ jobs: with: egress-policy: audit - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 with: # Fetch the commit that's merged into the base rather than the target ref # This will let us diff only the contents of the PR, without fetching more history diff --git a/.github/workflows/automate_merge_message.yml b/.github/workflows/automate_merge_message.yml index 59da292109..39055d70fb 100644 --- a/.github/workflows/automate_merge_message.yml +++ b/.github/workflows/automate_merge_message.yml @@ -28,7 +28,7 @@ jobs: with: egress-policy: audit - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 with: ref: '${{ github.event.pull_request.merge_commit_sha }}' diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8aabe7de58..cfd37434c6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -32,7 +32,7 @@ jobs: with: egress-policy: audit - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 - name: use node.js ${{ matrix.node-version }} uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 @@ -68,7 +68,7 @@ jobs: with: egress-policy: audit - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 - name: use node.js ${{ matrix.node-version }} uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 @@ -210,7 +210,7 @@ jobs: INTEGRATION_TEST_AZURE_TOKEN: ${{ secrets.INTEGRATION_TEST_AZURE_TOKEN }} steps: - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 - name: fetch master branch run: git fetch origin master diff --git a/.github/workflows/deploy_docker-image.yml b/.github/workflows/deploy_docker-image.yml index e0f4ec29ed..bc861394c5 100644 --- a/.github/workflows/deploy_docker-image.yml +++ b/.github/workflows/deploy_docker-image.yml @@ -25,7 +25,7 @@ jobs: egress-policy: audit - name: checkout - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 with: path: backstage ref: ${{ github.event.client_payload.version && env.RELEASE_VERSION || github.ref }} diff --git a/.github/workflows/deploy_microsite.yml b/.github/workflows/deploy_microsite.yml index 2d61bcc19b..1b3ab09da1 100644 --- a/.github/workflows/deploy_microsite.yml +++ b/.github/workflows/deploy_microsite.yml @@ -54,7 +54,7 @@ jobs: result-encoding: string - name: checkout latest release - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 with: ref: refs/tags/${{ steps.find-release.outputs.result }} @@ -140,7 +140,7 @@ jobs: egress-policy: audit - name: checkout master - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 - name: Use Node.js 20.x uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 @@ -252,7 +252,7 @@ jobs: # Stable docs - name: checkout latest release - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 with: ref: refs/tags/${{ needs.stable.outputs.release }} @@ -286,7 +286,7 @@ jobs: # Next docs - name: checkout master - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 with: clean: false diff --git a/.github/workflows/deploy_packages.yml b/.github/workflows/deploy_packages.yml index 9e4e504e60..cd70911963 100644 --- a/.github/workflows/deploy_packages.yml +++ b/.github/workflows/deploy_packages.yml @@ -68,7 +68,7 @@ jobs: INTEGRATION_TEST_AZURE_TOKEN: ${{ secrets.INTEGRATION_TEST_AZURE_TOKEN }} steps: - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 - name: use node.js ${{ matrix.node-version }} uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 0766d1c8a5..53abaa9ee3 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -34,7 +34,7 @@ jobs: egress-policy: audit - name: 'Checkout code' - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 with: persist-credentials: false diff --git a/.github/workflows/sync_canon.yml b/.github/workflows/sync_canon.yml index 3b85c1c49d..5f1c8979e6 100644 --- a/.github/workflows/sync_canon.yml +++ b/.github/workflows/sync_canon.yml @@ -13,7 +13,7 @@ jobs: egress-policy: audit - name: Checkout - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 - name: Use Node.js 20.x uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 @@ -27,7 +27,7 @@ jobs: cache-prefix: ${{ runner.os }}-v20.x - name: Checkout backstage/docs-ui - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 with: repository: backstage/docs-ui path: bui-external-docs diff --git a/.github/workflows/sync_code-formatting.yml b/.github/workflows/sync_code-formatting.yml index 33cab94280..362555a0f5 100644 --- a/.github/workflows/sync_code-formatting.yml +++ b/.github/workflows/sync_code-formatting.yml @@ -14,7 +14,7 @@ jobs: with: egress-policy: audit - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 with: # Fetch changes to previous commit - required for 'only_changed' in Prettier action fetch-depth: 0 diff --git a/.github/workflows/sync_dependabot-changesets.yml b/.github/workflows/sync_dependabot-changesets.yml index 181d48eb38..1366dbf1fc 100644 --- a/.github/workflows/sync_dependabot-changesets.yml +++ b/.github/workflows/sync_dependabot-changesets.yml @@ -16,7 +16,7 @@ jobs: egress-policy: audit - name: Checkout - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 with: fetch-depth: 2 ref: ${{ github.head_ref }} diff --git a/.github/workflows/sync_release-manifest.yml b/.github/workflows/sync_release-manifest.yml index a9c4b3722b..13272bf458 100644 --- a/.github/workflows/sync_release-manifest.yml +++ b/.github/workflows/sync_release-manifest.yml @@ -13,7 +13,7 @@ jobs: egress-policy: audit - name: Checkout - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 with: # 'v' prefix is added here for the tag, we keep it out of the manifest logic ref: v${{ github.event.client_payload.version }} @@ -35,7 +35,7 @@ jobs: # Checkout backstage/versions into /backstage/versions, which is where store the output - name: Checkout versions - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 with: repository: backstage/versions path: versions diff --git a/.github/workflows/sync_renovate-changesets.yml b/.github/workflows/sync_renovate-changesets.yml index 2331e2c30f..a3b21f2c17 100644 --- a/.github/workflows/sync_renovate-changesets.yml +++ b/.github/workflows/sync_renovate-changesets.yml @@ -16,7 +16,7 @@ jobs: egress-policy: audit - name: Checkout - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 with: fetch-depth: 2 ref: ${{ github.head_ref }} diff --git a/.github/workflows/sync_snyk-github-issues.yml b/.github/workflows/sync_snyk-github-issues.yml index f18455f5fc..6ccee239e8 100644 --- a/.github/workflows/sync_snyk-github-issues.yml +++ b/.github/workflows/sync_snyk-github-issues.yml @@ -16,7 +16,7 @@ jobs: with: egress-policy: audit - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 - name: Use Node.js 20.x uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 diff --git a/.github/workflows/sync_snyk-monitor.yml b/.github/workflows/sync_snyk-monitor.yml index b928586aa8..86bd1d35ee 100644 --- a/.github/workflows/sync_snyk-monitor.yml +++ b/.github/workflows/sync_snyk-monitor.yml @@ -29,7 +29,7 @@ jobs: with: egress-policy: audit - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 - name: Monitor and Synchronize Snyk Policies uses: snyk/actions/node@9adf32b1121593767fc3c057af55b55db032dc04 # master with: diff --git a/.github/workflows/sync_version-packages.yml b/.github/workflows/sync_version-packages.yml index 66a798bd58..f4b14e1192 100644 --- a/.github/workflows/sync_version-packages.yml +++ b/.github/workflows/sync_version-packages.yml @@ -18,7 +18,7 @@ jobs: with: egress-policy: audit - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 with: fetch-depth: 20000 fetch-tags: true diff --git a/.github/workflows/verify_accessibility.yml b/.github/workflows/verify_accessibility.yml index 48e243b002..96c9f2ea8b 100644 --- a/.github/workflows/verify_accessibility.yml +++ b/.github/workflows/verify_accessibility.yml @@ -24,7 +24,7 @@ jobs: with: egress-policy: audit - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 - name: Use Node.js 20.x uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 with: diff --git a/.github/workflows/verify_chromatic.yml b/.github/workflows/verify_chromatic.yml index e6649c3e55..e091b552c4 100644 --- a/.github/workflows/verify_chromatic.yml +++ b/.github/workflows/verify_chromatic.yml @@ -29,7 +29,7 @@ jobs: egress-policy: audit - name: Checkout code - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 with: fetch-depth: 10000 # Required to retrieve git history diff --git a/.github/workflows/verify_codeql.yml b/.github/workflows/verify_codeql.yml index 254938ecc8..b3401de16e 100644 --- a/.github/workflows/verify_codeql.yml +++ b/.github/workflows/verify_codeql.yml @@ -47,7 +47,7 @@ jobs: egress-policy: audit - name: Checkout repository - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 with: # We must fetch at least the immediate parents so that if this is # a pull request then we can checkout the head. diff --git a/.github/workflows/verify_docs-quality.yml b/.github/workflows/verify_docs-quality.yml index 6c855eeea4..dee3ab1549 100644 --- a/.github/workflows/verify_docs-quality.yml +++ b/.github/workflows/verify_docs-quality.yml @@ -16,7 +16,7 @@ jobs: with: egress-policy: audit - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 # Vale does not support file excludes, so we use the script to generate a list of files instead # The action also does not allow args or a local config file to be passed in, so the files array diff --git a/.github/workflows/verify_e2e-linux.yml b/.github/workflows/verify_e2e-linux.yml index dc81d42e8a..12a83ed6fc 100644 --- a/.github/workflows/verify_e2e-linux.yml +++ b/.github/workflows/verify_e2e-linux.yml @@ -47,7 +47,7 @@ jobs: with: egress-policy: audit - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 - name: Configure Git run: | diff --git a/.github/workflows/verify_e2e-techdocs.yml b/.github/workflows/verify_e2e-techdocs.yml index e933efe3f8..d65b45db91 100644 --- a/.github/workflows/verify_e2e-techdocs.yml +++ b/.github/workflows/verify_e2e-techdocs.yml @@ -36,7 +36,7 @@ jobs: with: egress-policy: audit - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0 with: python-version: '3.9' diff --git a/.github/workflows/verify_e2e-windows.yml b/.github/workflows/verify_e2e-windows.yml index eefcf22b35..9557924383 100644 --- a/.github/workflows/verify_e2e-windows.yml +++ b/.github/workflows/verify_e2e-windows.yml @@ -44,7 +44,7 @@ jobs: git config --global core.autocrlf false git config --global core.eol lf - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 - name: Configure Git run: | diff --git a/.github/workflows/verify_fossa.yml b/.github/workflows/verify_fossa.yml index 9c811fbe9f..75ff570600 100644 --- a/.github/workflows/verify_fossa.yml +++ b/.github/workflows/verify_fossa.yml @@ -19,7 +19,7 @@ jobs: egress-policy: audit - name: Checkout - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 - name: Install Fossa run: "curl -H 'Cache-Control: no-cache' https://raw.githubusercontent.com/fossas/fossa-cli/master/install.sh | bash" diff --git a/.github/workflows/verify_microsite.yml b/.github/workflows/verify_microsite.yml index 67ac397d43..1ad0f2f792 100644 --- a/.github/workflows/verify_microsite.yml +++ b/.github/workflows/verify_microsite.yml @@ -59,7 +59,7 @@ jobs: result-encoding: string - name: checkout latest release - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 with: ref: refs/tags/${{ steps.find-release.outputs.result }} @@ -142,7 +142,7 @@ jobs: egress-policy: audit - name: checkout master - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 - name: Use Node.js 20.x uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 @@ -238,7 +238,7 @@ jobs: with: egress-policy: audit - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 - name: Use Node.js 20.x uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 @@ -295,7 +295,7 @@ jobs: run: yarn build:api-docs - name: checkout master - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 with: clean: false diff --git a/.github/workflows/verify_microsite_accessibility.yml b/.github/workflows/verify_microsite_accessibility.yml index 40e1866b5f..99a66bc69c 100644 --- a/.github/workflows/verify_microsite_accessibility.yml +++ b/.github/workflows/verify_microsite_accessibility.yml @@ -19,7 +19,7 @@ jobs: with: egress-policy: audit - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 - name: Use Node.js 20.x uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 diff --git a/.github/workflows/verify_windows.yml b/.github/workflows/verify_windows.yml index 363bc075b8..af34163b5c 100644 --- a/.github/workflows/verify_windows.yml +++ b/.github/workflows/verify_windows.yml @@ -33,7 +33,7 @@ jobs: with: egress-policy: audit - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 - name: use node.js ${{ matrix.node-version }} uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 From 5967139a40241f3dbbba973c79c72702c96532c8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 11 Nov 2025 16:10:14 +0000 Subject: [PATCH 09/73] chore(deps): update actions/github-script action to v7.1.0 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/api-breaking-changes-comment.yml | 2 +- .github/workflows/automate_merge_message.yml | 2 +- .github/workflows/pr-review-comment.yaml | 2 +- .github/workflows/sync_dependabot-changesets.yml | 2 +- .github/workflows/sync_release-manifest.yml | 2 +- .github/workflows/sync_renovate-changesets.yml | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/api-breaking-changes-comment.yml b/.github/workflows/api-breaking-changes-comment.yml index 981d5cb4d6..0d7b4bd34d 100644 --- a/.github/workflows/api-breaking-changes-comment.yml +++ b/.github/workflows/api-breaking-changes-comment.yml @@ -32,7 +32,7 @@ jobs: - name: 'Download artifacts' # Fetch output (zip archive) from the workflow run that triggered this workflow. - uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 + uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7.1.0 with: script: | let allArtifacts = await github.rest.actions.listWorkflowRunArtifacts({ diff --git a/.github/workflows/automate_merge_message.yml b/.github/workflows/automate_merge_message.yml index 59da292109..7fd30c6a03 100644 --- a/.github/workflows/automate_merge_message.yml +++ b/.github/workflows/automate_merge_message.yml @@ -44,7 +44,7 @@ jobs: node generate.js ${{ github.event.pull_request.base.sha }} ${{ github.event.pull_request.head.sha }} > message.txt - name: Post Message - uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 + uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7.1.0 env: ISSUE_NUMBER: ${{ github.event.pull_request.number }} with: diff --git a/.github/workflows/pr-review-comment.yaml b/.github/workflows/pr-review-comment.yaml index 9db0792eaa..f17a5c963b 100644 --- a/.github/workflows/pr-review-comment.yaml +++ b/.github/workflows/pr-review-comment.yaml @@ -23,7 +23,7 @@ jobs: - name: Read PR Number id: pr-number - uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 + uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7.1.0 with: github-token: ${{ secrets.GITHUB_TOKEN }} script: | diff --git a/.github/workflows/sync_dependabot-changesets.yml b/.github/workflows/sync_dependabot-changesets.yml index 181d48eb38..55707a4077 100644 --- a/.github/workflows/sync_dependabot-changesets.yml +++ b/.github/workflows/sync_dependabot-changesets.yml @@ -26,7 +26,7 @@ jobs: git config --global user.email noreply@backstage.io git config --global user.name 'Github changeset workflow' - name: Generate changeset - uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 + uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7.1.0 with: script: | const { promises: fs } = require('fs'); diff --git a/.github/workflows/sync_release-manifest.yml b/.github/workflows/sync_release-manifest.yml index a9c4b3722b..918fbc0377 100644 --- a/.github/workflows/sync_release-manifest.yml +++ b/.github/workflows/sync_release-manifest.yml @@ -71,7 +71,7 @@ jobs: git push - name: Dispatch update-helper update - uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 + uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7.1.0 with: github-token: ${{ secrets.GH_SERVICE_ACCOUNT_TOKEN }} # TODO(Rugvip): Remove the create-app dispatch once we've been on the release version for a while diff --git a/.github/workflows/sync_renovate-changesets.yml b/.github/workflows/sync_renovate-changesets.yml index 2331e2c30f..3d766696d2 100644 --- a/.github/workflows/sync_renovate-changesets.yml +++ b/.github/workflows/sync_renovate-changesets.yml @@ -26,7 +26,7 @@ jobs: git config --global user.email noreply@backstage.io git config --global user.name 'Github changeset workflow' - name: Generate changeset - uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 + uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7.1.0 with: script: | const { promises: fs } = require("fs"); From b36562d90b3b77f770c10fc81891322d1826a29e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 12 Nov 2025 03:11:10 +0000 Subject: [PATCH 10/73] chore(deps): update dependency @remixicon/react to v4.7.0 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- docs-ui/yarn.lock | 6 +++--- yarn.lock | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs-ui/yarn.lock b/docs-ui/yarn.lock index 480f7592f8..be6a272a69 100644 --- a/docs-ui/yarn.lock +++ b/docs-ui/yarn.lock @@ -1007,11 +1007,11 @@ __metadata: linkType: hard "@remixicon/react@npm:^4.6.0": - version: 4.6.0 - resolution: "@remixicon/react@npm:4.6.0" + version: 4.7.0 + resolution: "@remixicon/react@npm:4.7.0" peerDependencies: react: ">=18.2.0" - checksum: 10/d92c8131734062fca8d82d55dd8f3f4e28cb72c5eefda528c8aba5f3298f0c847342eecdbd7787d6da5af21b699d735f6cf27f151f0c982c1c9f06a78b235c94 + checksum: 10/9ecee093dd4aec3744bcc7562eddb987bf9c7c059787dfecfbcc25a64c2f4833dc815dff715aa2a7f75011d65f877b3751a401d19cf2d725b5bcc685587d37f4 languageName: node linkType: hard diff --git a/yarn.lock b/yarn.lock index 2232608285..a97ecad284 100644 --- a/yarn.lock +++ b/yarn.lock @@ -16633,11 +16633,11 @@ __metadata: linkType: hard "@remixicon/react@npm:^4.6.0": - version: 4.6.0 - resolution: "@remixicon/react@npm:4.6.0" + version: 4.7.0 + resolution: "@remixicon/react@npm:4.7.0" peerDependencies: react: ">=18.2.0" - checksum: 10/d92c8131734062fca8d82d55dd8f3f4e28cb72c5eefda528c8aba5f3298f0c847342eecdbd7787d6da5af21b699d735f6cf27f151f0c982c1c9f06a78b235c94 + checksum: 10/9ecee093dd4aec3744bcc7562eddb987bf9c7c059787dfecfbcc25a64c2f4833dc815dff715aa2a7f75011d65f877b3751a401d19cf2d725b5bcc685587d37f4 languageName: node linkType: hard From 429062bde9bc7a4e7e20001b5052428c22eb10e6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 12 Nov 2025 07:50:49 +0000 Subject: [PATCH 11/73] chore(deps): update dependency @uiw/react-codemirror to v4.25.3 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- docs-ui/yarn.lock | 16 ++++++++-------- yarn.lock | 16 ++++++++-------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/docs-ui/yarn.lock b/docs-ui/yarn.lock index 480f7592f8..13757aa997 100644 --- a/docs-ui/yarn.lock +++ b/docs-ui/yarn.lock @@ -1470,9 +1470,9 @@ __metadata: languageName: node linkType: hard -"@uiw/codemirror-extensions-basic-setup@npm:4.25.1": - version: 4.25.1 - resolution: "@uiw/codemirror-extensions-basic-setup@npm:4.25.1" +"@uiw/codemirror-extensions-basic-setup@npm:4.25.3": + version: 4.25.3 + resolution: "@uiw/codemirror-extensions-basic-setup@npm:4.25.3" dependencies: "@codemirror/autocomplete": "npm:^6.0.0" "@codemirror/commands": "npm:^6.0.0" @@ -1489,7 +1489,7 @@ __metadata: "@codemirror/search": ">=6.0.0" "@codemirror/state": ">=6.0.0" "@codemirror/view": ">=6.0.0" - checksum: 10/61d128a7896e086c3cc0558e0b5f85715f5387ee983cc9f1e341db4b383ade1973f389a63cdf9312a5421a0f5a6044755a573d6dd7bb805dc256d9f9ce4f0d15 + checksum: 10/6ece4ee0fd6433a81bb6b2e18623db3df097d31d13c53184fbf4355cf3aaac5201d73dfa984f58390f0f6f7cfb631bd2ee20f3613b99b7259e2e1352e954c179 languageName: node linkType: hard @@ -1509,14 +1509,14 @@ __metadata: linkType: hard "@uiw/react-codemirror@npm:^4.23.7": - version: 4.25.1 - resolution: "@uiw/react-codemirror@npm:4.25.1" + version: 4.25.3 + resolution: "@uiw/react-codemirror@npm:4.25.3" dependencies: "@babel/runtime": "npm:^7.18.6" "@codemirror/commands": "npm:^6.1.0" "@codemirror/state": "npm:^6.1.1" "@codemirror/theme-one-dark": "npm:^6.0.0" - "@uiw/codemirror-extensions-basic-setup": "npm:4.25.1" + "@uiw/codemirror-extensions-basic-setup": "npm:4.25.3" codemirror: "npm:^6.0.0" peerDependencies: "@babel/runtime": ">=7.11.0" @@ -1526,7 +1526,7 @@ __metadata: codemirror: ">=6.0.0" react: ">=17.0.0" react-dom: ">=17.0.0" - checksum: 10/32311a3b2037bf57533bd4d7c50117385c6e3cfce8dcd45f2c2ff8d9170f8ae53bc868b4ac91a58f5502ed065fce11bfffb8af5e829e8a5609290053dcdb0b2e + checksum: 10/a3ece671a48cce623da6c9d890f07bdbb1597b2fb2a6f8f6ef65f2b14b5d5b4fa90791476539b4fba3ac13d226fe00d283a5165d3632f34f5db3b49139a8887d languageName: node linkType: hard diff --git a/yarn.lock b/yarn.lock index 6fef5116f5..9c9eb799dd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -22405,9 +22405,9 @@ __metadata: languageName: node linkType: hard -"@uiw/codemirror-extensions-basic-setup@npm:4.24.2": - version: 4.24.2 - resolution: "@uiw/codemirror-extensions-basic-setup@npm:4.24.2" +"@uiw/codemirror-extensions-basic-setup@npm:4.25.3": + version: 4.25.3 + resolution: "@uiw/codemirror-extensions-basic-setup@npm:4.25.3" dependencies: "@codemirror/autocomplete": "npm:^6.0.0" "@codemirror/commands": "npm:^6.0.0" @@ -22424,19 +22424,19 @@ __metadata: "@codemirror/search": ">=6.0.0" "@codemirror/state": ">=6.0.0" "@codemirror/view": ">=6.0.0" - checksum: 10/077f64b4bbb6178038d30a3cb2961c0ff89c0836b73210d0ac3fca828c3ba8fbce61e42635ec2e2997cdffff5472b75ad58541c4e62f98d52b83d475da0c56eb + checksum: 10/6ece4ee0fd6433a81bb6b2e18623db3df097d31d13c53184fbf4355cf3aaac5201d73dfa984f58390f0f6f7cfb631bd2ee20f3613b99b7259e2e1352e954c179 languageName: node linkType: hard "@uiw/react-codemirror@npm:^4.9.3": - version: 4.24.2 - resolution: "@uiw/react-codemirror@npm:4.24.2" + version: 4.25.3 + resolution: "@uiw/react-codemirror@npm:4.25.3" dependencies: "@babel/runtime": "npm:^7.18.6" "@codemirror/commands": "npm:^6.1.0" "@codemirror/state": "npm:^6.1.1" "@codemirror/theme-one-dark": "npm:^6.0.0" - "@uiw/codemirror-extensions-basic-setup": "npm:4.24.2" + "@uiw/codemirror-extensions-basic-setup": "npm:4.25.3" codemirror: "npm:^6.0.0" peerDependencies: "@babel/runtime": ">=7.11.0" @@ -22446,7 +22446,7 @@ __metadata: codemirror: ">=6.0.0" react: ">=17.0.0" react-dom: ">=17.0.0" - checksum: 10/f0816fcf40c451c8bc15319d62f5b8d62a04c12c2bc053569212b31edba7c7164e45fd161ebb683a03fd5a50697b91a6ac4cab2d2d1a45da5f2626d959c399a0 + checksum: 10/a3ece671a48cce623da6c9d890f07bdbb1597b2fb2a6f8f6ef65f2b14b5d5b4fa90791476539b4fba3ac13d226fe00d283a5165d3632f34f5db3b49139a8887d languageName: node linkType: hard From 7c281a5b5cbd704456fa51f546435ea32d197793 Mon Sep 17 00:00:00 2001 From: Christoph Jerolimov Date: Wed, 12 Nov 2025 12:47:48 +0100 Subject: [PATCH 12/73] fix(api-docs): Add i18n support for Raw tab title and an error message Signed-off-by: Christoph Jerolimov --- .changeset/afraid-trees-show.md | 5 +++++ plugins/api-docs/report-alpha.api.md | 3 +++ .../ApiDefinitionCard/ApiDefinitionCard.tsx | 14 ++++++++------ .../ApiDefinitionDialog/ApiDefinitionDialog.tsx | 8 ++++++-- plugins/api-docs/src/translation.ts | 7 +++++++ 5 files changed, 29 insertions(+), 8 deletions(-) create mode 100644 .changeset/afraid-trees-show.md diff --git a/.changeset/afraid-trees-show.md b/.changeset/afraid-trees-show.md new file mode 100644 index 0000000000..c9bf17adcc --- /dev/null +++ b/.changeset/afraid-trees-show.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-api-docs': patch +--- + +Add i18n support for Raw tab title and an error message diff --git a/plugins/api-docs/report-alpha.api.md b/plugins/api-docs/report-alpha.api.md index 43c45c1a1d..e71121d87e 100644 --- a/plugins/api-docs/report-alpha.api.md +++ b/plugins/api-docs/report-alpha.api.md @@ -25,8 +25,11 @@ import { TranslationRef } from '@backstage/frontend-plugin-api'; export const apiDocsTranslationRef: TranslationRef< 'api-docs', { + readonly 'apiDefinitionCard.error.title': 'Could not fetch the API'; + readonly 'apiDefinitionCard.rawButtonTitle': 'Raw'; readonly 'apiDefinitionDialog.closeButtonTitle': 'Close'; readonly 'apiDefinitionDialog.tabsAriaLabel': 'API definition options'; + readonly 'apiDefinitionDialog.rawButtonTitle': 'Raw'; readonly 'apiDefinitionDialog.toggleButtonAriaLabel': 'Toggle API Definition Dialog'; readonly 'defaultApiExplorerPage.title': 'APIs'; readonly 'defaultApiExplorerPage.subtitle': '{{orgName}} API Explorer'; diff --git a/plugins/api-docs/src/components/ApiDefinitionCard/ApiDefinitionCard.tsx b/plugins/api-docs/src/components/ApiDefinitionCard/ApiDefinitionCard.tsx index e033f93b3c..96419fa6e7 100644 --- a/plugins/api-docs/src/components/ApiDefinitionCard/ApiDefinitionCard.tsx +++ b/plugins/api-docs/src/components/ApiDefinitionCard/ApiDefinitionCard.tsx @@ -16,21 +16,23 @@ import { ApiEntity } from '@backstage/catalog-model'; import { useEntity } from '@backstage/plugin-catalog-react'; -import Alert from '@material-ui/lab/Alert'; -import { apiDocsConfigRef } from '../../config'; -import { PlainApiDefinitionWidget } from '../PlainApiDefinitionWidget'; - import { CardTab, TabbedCard } from '@backstage/core-components'; import { useApi } from '@backstage/core-plugin-api'; +import { useTranslationRef } from '@backstage/frontend-plugin-api'; +import Alert from '@material-ui/lab/Alert'; +import { apiDocsConfigRef } from '../../config'; +import { apiDocsTranslationRef } from '../../translation'; +import { PlainApiDefinitionWidget } from '../PlainApiDefinitionWidget'; /** @public */ export const ApiDefinitionCard = () => { const { entity } = useEntity(); const config = useApi(apiDocsConfigRef); const { getApiDefinitionWidget } = config; + const { t } = useTranslationRef(apiDocsTranslationRef); if (!entity) { - return Could not fetch the API; + return {t('apiDefinitionCard.error.title')}; } const definitionWidget = getApiDefinitionWidget(entity); @@ -42,7 +44,7 @@ export const ApiDefinitionCard = () => { {definitionWidget.component(entity.spec.definition)} - + - API - {definitionWidget?.title ?? 'Raw'} + API -{' '} + {definitionWidget?.title ?? t('apiDefinitionDialog.rawButtonTitle')} {entity.metadata.title ?? entity.metadata.name} @@ -151,7 +152,10 @@ export function ApiDefinitionDialog(props: { {definitionWidget ? ( ) : null} - + {definitionWidget ? ( diff --git a/plugins/api-docs/src/translation.ts b/plugins/api-docs/src/translation.ts index 6ae2668c7c..385f5ecbaf 100644 --- a/plugins/api-docs/src/translation.ts +++ b/plugins/api-docs/src/translation.ts @@ -22,10 +22,17 @@ import { createTranslationRef } from '@backstage/frontend-plugin-api'; export const apiDocsTranslationRef = createTranslationRef({ id: 'api-docs', messages: { + apiDefinitionCard: { + error: { + title: 'Could not fetch the API', + }, + rawButtonTitle: 'Raw', + }, apiDefinitionDialog: { closeButtonTitle: 'Close', tabsAriaLabel: 'API definition options', toggleButtonAriaLabel: 'Toggle API Definition Dialog', + rawButtonTitle: 'Raw', }, defaultApiExplorerPage: { title: 'APIs', From 4e4d4cfee7a526ac0c150e688f4ee966393a0791 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Wed, 12 Nov 2025 15:29:31 -0500 Subject: [PATCH 13/73] scripts/verify-links: add support for verifying links to new API reference Signed-off-by: Patrik Oldsberg --- scripts/verify-links.js | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/scripts/verify-links.js b/scripts/verify-links.js index cb7385d972..cec1b5545e 100755 --- a/scripts/verify-links.js +++ b/scripts/verify-links.js @@ -99,6 +99,17 @@ async function verifyUrl(basePath, absUrl, docPages) { } } + if (url.startsWith('/api/stable/')) { + const apiPath = resolvePath( + projectRoot, + `type-docs/${url.slice('/api/stable/'.length)}`, + ); + if (existsSync(apiPath)) { + return undefined; + } + return { url, basePath, apiPath, problem: 'api-missing' }; + } + const staticPath = resolvePath(projectRoot, 'microsite/static', `.${url}`); if (existsSync(staticPath)) { return undefined; @@ -182,7 +193,6 @@ async function main() { process.chdir(projectRoot); const isCI = Boolean(process.env.CI); - const hasReference = existsSync(resolvePath(projectRoot, 'docs/reference')); const files = await listFiles('.'); const mdFiles = files.filter(f => f.endsWith('.md')); @@ -196,15 +206,24 @@ async function main() { badUrls.push(...badFileUrls); } + const hasReference = existsSync(resolvePath(projectRoot, 'docs/reference')); if (!hasReference) { console.log( "Skipping API reference link validation, no docs/reference/ dir. Reference docs can be built with 'yarn build:api-docs'", ); } + const hasApiDocs = existsSync(resolvePath(projectRoot, 'type-docs')); + if (!hasApiDocs) { + console.log( + "Skipping API docs link validation, no type-docs/ dir. API docs can be built with 'yarn backstage-repo-tools package-docs'", + ); + } + if (badUrls.length) { console.log(`Found ${badUrls.length} bad links within repo`); - for (const { url, basePath, problem } of badUrls) { + for (const badUrl of badUrls) { + const { url, basePath, problem } = badUrl; if (problem === 'missing') { if (url.startsWith('../reference/') && !isCI && !hasReference) { continue; @@ -238,6 +257,14 @@ async function main() { if (suggestion) { console.error(` Replace with: ${suggestion}`); } + } else if (problem === 'api-missing') { + if (!hasApiDocs) { + continue; + } + console.error('Invalid API docs link'); + console.error(` From: ${basePath}`); + console.error(` To: ${url}`); + console.error(` Resolved path: ${badUrl.apiPath}`); } else if (problem === 'not-relative') { console.error('Links within /docs/ must be relative'); console.error(` From: ${basePath}`); From 35f3bbb4bec1f72d8f67b71e2533d6cd52c85e26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Thu, 13 Nov 2025 12:04:59 +0100 Subject: [PATCH 14/73] Fix all current docs quality script warnings MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- .changeset/eighty-mails-leave.md | 2 +- .changeset/heavy-cars-wash.md | 8 ++++---- .changeset/warm-carrots-lead.md | 2 +- .github/vale/config/vocabularies/Backstage/accept.txt | 3 +++ contrib/docs/tutorials/heroku-deployment.md | 2 +- docs/api/deprecations.md | 2 +- plugins/home/README.md | 4 ++-- 7 files changed, 13 insertions(+), 10 deletions(-) diff --git a/.changeset/eighty-mails-leave.md b/.changeset/eighty-mails-leave.md index 3c6ec5ab8f..e8266f6459 100644 --- a/.changeset/eighty-mails-leave.md +++ b/.changeset/eighty-mails-leave.md @@ -2,4 +2,4 @@ '@backstage/plugin-home': patch --- -Allow customization of VisitList by adding optional enrichVisit, transformPathname, canSave functions to VisitsStorageApi, along with VisitDisplayProvider for colors, labels +Allow customization of `VisitList` by adding optional `enrichVisit`, `transformPathname`, `canSave` functions to `VisitsStorageApi`, along with `VisitDisplayProvider` for colors, labels diff --git a/.changeset/heavy-cars-wash.md b/.changeset/heavy-cars-wash.md index 87da5a6d95..f3f80d9cc8 100644 --- a/.changeset/heavy-cars-wash.md +++ b/.changeset/heavy-cars-wash.md @@ -8,8 +8,8 @@ Moved from `ldapjs` dependency to `ldapts` **Type Migration** -Custom transformers must now accept `Entry` from ldapts instead of `SearchEntry` -from ldapjs The Entry type provides direct property access without need for +Custom transformers must now accept `Entry` from `ldapts` instead of `SearchEntry` +from `ldapjs` The Entry type provides direct property access without need for `.object()` or `.raw()` methods. If you have custom user or group transformers, update the signature from: @@ -29,7 +29,7 @@ to **Search Options** Updated LDAP search configuration `typesOnly: false` → `attributeValues: true` -This inverts the boolean logic: ldapjs used negative form while ldapts uses +This inverts the boolean logic: `ldapjs` used negative form while `ldapts` uses positive form. Both achieve the same result: retrieving attribute values rather than just attribute names. @@ -66,5 +66,5 @@ for (const entry of entries) { ``` > **_NOTE:_**: Both methods have always loaded all entries into memory. The -> searchStreaming method was only needed internally to handle ldapjs's +> `searchStreaming` method was only needed internally to handle `ldapjs`'s > event-based API. diff --git a/.changeset/warm-carrots-lead.md b/.changeset/warm-carrots-lead.md index fdc84d026a..81a254a6a3 100644 --- a/.changeset/warm-carrots-lead.md +++ b/.changeset/warm-carrots-lead.md @@ -2,4 +2,4 @@ '@backstage/ui': patch --- -Fixed Table Row component to properly support opening links in new tabs via right-click or Cmd+Click when using the href prop. +Fixed Table Row component to properly support opening links in new tabs via right-click or Cmd+Click when using the `href` prop. diff --git a/.github/vale/config/vocabularies/Backstage/accept.txt b/.github/vale/config/vocabularies/Backstage/accept.txt index 80d55d498a..7c780c1079 100644 --- a/.github/vale/config/vocabularies/Backstage/accept.txt +++ b/.github/vale/config/vocabularies/Backstage/accept.txt @@ -59,6 +59,7 @@ Chanwit CI/CD classname cli +CLIs cloudbuild Cloudflare Cloudformation @@ -149,6 +150,7 @@ etag Expedia facto failover +faq Fargate faqs featureful @@ -325,6 +327,7 @@ onboarded onboarding Onboarding onelogin +openapi OpenSearch OpenShift openssl diff --git a/contrib/docs/tutorials/heroku-deployment.md b/contrib/docs/tutorials/heroku-deployment.md index 2dea1f021c..8d0b8740b7 100644 --- a/contrib/docs/tutorials/heroku-deployment.md +++ b/contrib/docs/tutorials/heroku-deployment.md @@ -49,7 +49,7 @@ Add a build script in `package.json` to compile frontend during deployment: ## Start Command -Create a [Procfile](https://devcenter.heroku.com/articles/procfile) in the app's root: +Create a [`Procfile`](https://devcenter.heroku.com/articles/procfile) in the app's root: ```shell echo "web: yarn workspace backend start --config ../../app-config.yaml --config ../../app-config.production.yaml" > Procfile diff --git a/docs/api/deprecations.md b/docs/api/deprecations.md index a9127426f0..84c0300543 100644 --- a/docs/api/deprecations.md +++ b/docs/api/deprecations.md @@ -124,7 +124,7 @@ createApiFactory({ ``` Provider specific factory implementations, copy the code you need into the -factory method depending on which apiRef you previously used. +factory method depending on which API ref you previously used. ```ts // samlAuthApiRef diff --git a/plugins/home/README.md b/plugins/home/README.md index b08e785403..242e66ff40 100644 --- a/plugins/home/README.md +++ b/plugins/home/README.md @@ -358,7 +358,7 @@ In order to validate the config you can use `backstage/cli config:check` ### Customizing the VisitList -If you want more control over the recent and top visited lists, you can write your own functions to transform the pathnames and determine which visits to save. You can also enrich each visit with other fields and customize the chip colors/labels in the visit lists. +If you want more control over the recent and top visited lists, you can write your own functions to transform the path names and determine which visits to save. You can also enrich each visit with other fields and customize the chip colors/labels in the visit lists. #### Transform Pathname Function @@ -490,7 +490,7 @@ export const apis: AnyApiFactory[] = [ #### Custom Chip Colors and Labels -To provide your own chip colors and/or labels for the recent and top visited lists, wrap the components in `VisitDisplayProvider` with `getChipColor` and `getChipLabel` functions. The colors provided will be used instead of the hard coded [colorVariants](https://github.com/backstage/backstage/blob/2da352043425bcab4c4422e4d2820c26c0a83382/packages/theme/src/base/pageTheme.ts#L46) provided via `@backstage/theme`. +To provide your own chip colors and/or labels for the recent and top visited lists, wrap the components in `VisitDisplayProvider` with `getChipColor` and `getChipLabel` functions. The colors provided will be used instead of the hard coded [`colorVariants`](https://github.com/backstage/backstage/blob/2da352043425bcab4c4422e4d2820c26c0a83382/packages/theme/src/base/pageTheme.ts#L46) provided via `@backstage/theme`. ```tsx import { From e9589d960025bf8df489a8e36c98929695b91bd9 Mon Sep 17 00:00:00 2001 From: ivangonzalezacuna Date: Tue, 23 Sep 2025 17:01:07 +0200 Subject: [PATCH 15/73] Replace package aws-sdk/signature-v4 with smithy This package is not modified since 2 years now, and the replacement is also mentioned in the documentation: https://www.npmjs.com/package/@aws-sdk/signature-v4?activeTab=readme This PR is simply replacing the packages in the code, this is a drop-in replacement and there's no need to apply any other changes. This has been already done in one of the open-source plugins we own, as well as in our Backstage instance, and all worked just like before. Signed-off-by: ivangonzalezacuna --- .changeset/gentle-trains-juggle.md | 6 + plugins/kubernetes-backend/package.json | 2 +- .../src/auth/AwsIamStrategy.test.ts | 2 +- .../src/auth/AwsIamStrategy.ts | 2 +- yarn.lock | 106 +++--------------- 5 files changed, 23 insertions(+), 95 deletions(-) create mode 100644 .changeset/gentle-trains-juggle.md diff --git a/.changeset/gentle-trains-juggle.md b/.changeset/gentle-trains-juggle.md new file mode 100644 index 0000000000..e8b1397180 --- /dev/null +++ b/.changeset/gentle-trains-juggle.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-kubernetes-backend': patch +--- + +Replace `@aws-sdk/signature-v4` with `@smithy/signature-v4`, +as stated in the [package documentation](https://www.npmjs.com/package/@aws-sdk/signature-v4?activeTab=readme) diff --git a/plugins/kubernetes-backend/package.json b/plugins/kubernetes-backend/package.json index 84cf786152..94f8beb49a 100644 --- a/plugins/kubernetes-backend/package.json +++ b/plugins/kubernetes-backend/package.json @@ -45,7 +45,6 @@ "dependencies": { "@aws-crypto/sha256-js": "^5.0.0", "@aws-sdk/credential-providers": "^3.350.0", - "@aws-sdk/signature-v4": "^3.347.0", "@azure/identity": "^4.0.0", "@backstage/backend-plugin-api": "workspace:^", "@backstage/catalog-client": "workspace:^", @@ -62,6 +61,7 @@ "@google-cloud/container": "^5.0.0", "@jest-mock/express": "^2.0.1", "@kubernetes/client-node": "1.4.0", + "@smithy/signature-v4": "^4.1.0", "@types/http-proxy-middleware": "^1.0.0", "express": "^4.17.1", "express-promise-router": "^4.1.0", diff --git a/plugins/kubernetes-backend/src/auth/AwsIamStrategy.test.ts b/plugins/kubernetes-backend/src/auth/AwsIamStrategy.test.ts index e6e69cc05d..86976fda7e 100644 --- a/plugins/kubernetes-backend/src/auth/AwsIamStrategy.test.ts +++ b/plugins/kubernetes-backend/src/auth/AwsIamStrategy.test.ts @@ -43,7 +43,7 @@ const signer = { }), }; -jest.mock('@aws-sdk/signature-v4', () => ({ +jest.mock('@smithy/signature-v4', () => ({ SignatureV4: jest.fn().mockImplementation(() => signer), })); diff --git a/plugins/kubernetes-backend/src/auth/AwsIamStrategy.ts b/plugins/kubernetes-backend/src/auth/AwsIamStrategy.ts index 4c56f86a30..4ac4af6581 100644 --- a/plugins/kubernetes-backend/src/auth/AwsIamStrategy.ts +++ b/plugins/kubernetes-backend/src/auth/AwsIamStrategy.ts @@ -14,7 +14,7 @@ * limitations under the License. */ import { fromTemporaryCredentials } from '@aws-sdk/credential-providers'; -import { SignatureV4 } from '@aws-sdk/signature-v4'; +import { SignatureV4 } from '@smithy/signature-v4'; import { Sha256 } from '@aws-crypto/sha256-js'; import { AwsCredentialsManager, diff --git a/yarn.lock b/yarn.lock index 6fef5116f5..9067bf3077 100644 --- a/yarn.lock +++ b/yarn.lock @@ -355,17 +355,6 @@ __metadata: languageName: node linkType: hard -"@aws-crypto/crc32@npm:3.0.0": - version: 3.0.0 - resolution: "@aws-crypto/crc32@npm:3.0.0" - dependencies: - "@aws-crypto/util": "npm:^3.0.0" - "@aws-sdk/types": "npm:^3.222.0" - tslib: "npm:^1.11.1" - checksum: 10/672d593fd98a88709a1b488db92aabf584b6dad3e8099e04b6d2870e34a2ee668cbbe0e5406e60c0d776b9c34a91cfc427999230ad959518fed56a3db037704c - languageName: node - linkType: hard - "@aws-crypto/crc32@npm:5.2.0": version: 5.2.0 resolution: "@aws-crypto/crc32@npm:5.2.0" @@ -437,17 +426,6 @@ __metadata: languageName: node linkType: hard -"@aws-crypto/util@npm:^3.0.0": - version: 3.0.0 - resolution: "@aws-crypto/util@npm:3.0.0" - dependencies: - "@aws-sdk/types": "npm:^3.222.0" - "@aws-sdk/util-utf8-browser": "npm:^3.0.0" - tslib: "npm:^1.11.1" - checksum: 10/92c835b83d7a888b37b2f2a37c82e58bb8fabb617e371173c488d2a71b916c69ee566f0ea0b3f7f4e16296226c49793f95b3d59fc07a7ca00af91f8f9f29e6c4 - languageName: node - linkType: hard - "@aws-crypto/util@npm:^5.2.0": version: 5.2.0 resolution: "@aws-crypto/util@npm:5.2.0" @@ -1327,18 +1305,6 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/eventstream-codec@npm:3.370.0": - version: 3.370.0 - resolution: "@aws-sdk/eventstream-codec@npm:3.370.0" - dependencies: - "@aws-crypto/crc32": "npm:3.0.0" - "@aws-sdk/types": "npm:3.370.0" - "@aws-sdk/util-hex-encoding": "npm:3.310.0" - tslib: "npm:^2.5.0" - checksum: 10/9ded697e5922972734899f2ac81941a5d1686de55eecadaaf36411d099f94708556ffc5a4adf9591299875b9f604dd4dea1846df9a94bdd0acc85f2d9e3f7a98 - languageName: node - linkType: hard - "@aws-sdk/is-array-buffer@npm:3.310.0": version: 3.310.0 resolution: "@aws-sdk/is-array-buffer@npm:3.310.0" @@ -1758,22 +1724,6 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/signature-v4@npm:^3.347.0": - version: 3.370.0 - resolution: "@aws-sdk/signature-v4@npm:3.370.0" - dependencies: - "@aws-sdk/eventstream-codec": "npm:3.370.0" - "@aws-sdk/is-array-buffer": "npm:3.310.0" - "@aws-sdk/types": "npm:3.370.0" - "@aws-sdk/util-hex-encoding": "npm:3.310.0" - "@aws-sdk/util-middleware": "npm:3.370.0" - "@aws-sdk/util-uri-escape": "npm:3.310.0" - "@aws-sdk/util-utf8": "npm:3.310.0" - tslib: "npm:^2.5.0" - checksum: 10/23a71ee99217d9eda1a5d3c9a4d614b76da46ba830d947a511a1609b71b6e426ef0a5503e394999a14c1e229c9ca720f3cd323c7567f101949a1207ef72f0dd3 - languageName: node - linkType: hard - "@aws-sdk/token-providers@npm:3.649.0": version: 3.649.0 resolution: "@aws-sdk/token-providers@npm:3.649.0" @@ -1898,15 +1848,6 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/util-hex-encoding@npm:3.310.0": - version: 3.310.0 - resolution: "@aws-sdk/util-hex-encoding@npm:3.310.0" - dependencies: - tslib: "npm:^2.5.0" - checksum: 10/9ec0388c9667d4d616c61530be88422a315e3d92bf93b941d6f6d8339d6e703f4cacb2e11402658d716b1166e90d0fddb497284220e11075a0c17821c468c44b - languageName: node - linkType: hard - "@aws-sdk/util-locate-window@npm:^3.0.0": version: 3.183.0 resolution: "@aws-sdk/util-locate-window@npm:3.183.0" @@ -2005,25 +1946,6 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/util-utf8-browser@npm:^3.0.0": - version: 3.188.0 - resolution: "@aws-sdk/util-utf8-browser@npm:3.188.0" - dependencies: - tslib: "npm:^2.3.1" - checksum: 10/ee5d2c005ca2bb6514526869c88b2d794572eb8de3d43a5bafd0843dfc93dd0060596f852159bc3fcfbb9b443c6d0fbf5613cfbcde0e43331a3a105d462f7788 - languageName: node - linkType: hard - -"@aws-sdk/util-utf8@npm:3.310.0": - version: 3.310.0 - resolution: "@aws-sdk/util-utf8@npm:3.310.0" - dependencies: - "@aws-sdk/util-buffer-from": "npm:3.310.0" - tslib: "npm:^2.5.0" - checksum: 10/88bf031527a1fe99712b4e2cb00bc47436b39aa29ce0ceeace3bd0bc7d436d14940f190c249b9a69e684f8d3f01f96847848f5d8ebab7e3103c0084c1e609ce4 - languageName: node - linkType: hard - "@aws-sdk/xml-builder@npm:3.649.0": version: 3.649.0 resolution: "@aws-sdk/xml-builder@npm:3.649.0" @@ -5864,7 +5786,6 @@ __metadata: dependencies: "@aws-crypto/sha256-js": "npm:^5.0.0" "@aws-sdk/credential-providers": "npm:^3.350.0" - "@aws-sdk/signature-v4": "npm:^3.347.0" "@azure/identity": "npm:^4.0.0" "@backstage/backend-defaults": "workspace:^" "@backstage/backend-plugin-api": "workspace:^" @@ -5886,6 +5807,7 @@ __metadata: "@google-cloud/container": "npm:^5.0.0" "@jest-mock/express": "npm:^2.0.1" "@kubernetes/client-node": "npm:1.4.0" + "@smithy/signature-v4": "npm:^4.1.0" "@types/express": "npm:^4.17.6" "@types/http-proxy-middleware": "npm:^1.0.0" "@types/luxon": "npm:^3.0.0" @@ -18225,19 +18147,19 @@ __metadata: languageName: node linkType: hard -"@smithy/signature-v4@npm:^4.1.1": - version: 4.1.1 - resolution: "@smithy/signature-v4@npm:4.1.1" +"@smithy/signature-v4@npm:^4.1.0, @smithy/signature-v4@npm:^4.1.1": + version: 4.2.4 + resolution: "@smithy/signature-v4@npm:4.2.4" dependencies: "@smithy/is-array-buffer": "npm:^3.0.0" - "@smithy/protocol-http": "npm:^4.1.1" - "@smithy/types": "npm:^3.4.0" + "@smithy/protocol-http": "npm:^4.1.8" + "@smithy/types": "npm:^3.7.2" "@smithy/util-hex-encoding": "npm:^3.0.0" - "@smithy/util-middleware": "npm:^3.0.4" + "@smithy/util-middleware": "npm:^3.0.11" "@smithy/util-uri-escape": "npm:^3.0.0" "@smithy/util-utf8": "npm:^3.0.0" tslib: "npm:^2.6.2" - checksum: 10/f77d8b6cb384a0b9a0925ce6a693fbbcbf13c6f9ddf12cb9e1b39fb06452d001b17164d5e2618ea103edb427f2f1225d057827e2815e629b582115b2d533194f + checksum: 10/1389616fb798963fae989191ad044b821c7543d9df7bef4eaaf21d59e9b0a9e1e529a87f9013389408d0227e1acd32a916f694487ae6144b0d0217f16d65d06b languageName: node linkType: hard @@ -18536,13 +18458,13 @@ __metadata: languageName: node linkType: hard -"@smithy/util-middleware@npm:^3.0.4": - version: 3.0.4 - resolution: "@smithy/util-middleware@npm:3.0.4" +"@smithy/util-middleware@npm:^3.0.11, @smithy/util-middleware@npm:^3.0.4": + version: 3.0.11 + resolution: "@smithy/util-middleware@npm:3.0.11" dependencies: - "@smithy/types": "npm:^3.4.0" + "@smithy/types": "npm:^3.7.2" tslib: "npm:^2.6.2" - checksum: 10/d358c8e5ab462b749b32421135f1660302de8b2a942e5cf92b63b1489e87d0fc57aa4cc578fee46a7192472946b06a898d98b1f01c8cf4b9fccc4ad489ffde5a + checksum: 10/d8197dc223ddc5ed6e9b40bb44f58793b0fe09d39734e70729ed7606c5497047f1dbf0d616764767b3c8812d49d76d94679a29dc7c879211b0e918e68715bde4 languageName: node linkType: hard @@ -48099,7 +48021,7 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^1.11.1, tslib@npm:^1.13.0, tslib@npm:^1.14.1, tslib@npm:^1.8.1, tslib@npm:^1.9.0, tslib@npm:^1.9.3": +"tslib@npm:^1.13.0, tslib@npm:^1.14.1, tslib@npm:^1.8.1, tslib@npm:^1.9.0, tslib@npm:^1.9.3": version: 1.14.1 resolution: "tslib@npm:1.14.1" checksum: 10/7dbf34e6f55c6492637adb81b555af5e3b4f9cc6b998fb440dac82d3b42bdc91560a35a5fb75e20e24a076c651438234da6743d139e4feabf0783f3cdfe1dddb From 99b27a27a34619adb820b91da7fa0c0da7572105 Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Thu, 13 Nov 2025 20:30:27 +0100 Subject: [PATCH 16/73] catalog-import: authorize catalog.entity.create permission in page extension Signed-off-by: Vincenzo Scamporlino --- plugins/catalog-import/package.json | 1 + plugins/catalog-import/src/alpha.tsx | 8 +++++++- yarn.lock | 1 + 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/plugins/catalog-import/package.json b/plugins/catalog-import/package.json index e3a646d895..cffe9a230d 100644 --- a/plugins/catalog-import/package.json +++ b/plugins/catalog-import/package.json @@ -66,6 +66,7 @@ "@backstage/integration-react": "workspace:^", "@backstage/plugin-catalog-common": "workspace:^", "@backstage/plugin-catalog-react": "workspace:^", + "@backstage/plugin-permission-react": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.61", diff --git a/plugins/catalog-import/src/alpha.tsx b/plugins/catalog-import/src/alpha.tsx index ab9d06ef19..2d9e5deaba 100644 --- a/plugins/catalog-import/src/alpha.tsx +++ b/plugins/catalog-import/src/alpha.tsx @@ -35,6 +35,8 @@ import { import { CatalogImportClient, catalogImportApiRef } from './api'; import { rootRouteRef } from './plugin'; import { catalogApiRef } from '@backstage/plugin-catalog-react'; +import { RequirePermission } from '@backstage/plugin-permission-react'; +import { catalogEntityCreatePermission } from '@backstage/plugin-catalog-common/alpha'; export * from './translation'; @@ -46,7 +48,11 @@ const catalogImportPage = PageBlueprint.make({ routeRef: convertLegacyRouteRef(rootRouteRef), loader: () => import('./components/ImportPage').then(m => - compatWrapper(), + compatWrapper( + + + , + ), ), }, }); diff --git a/yarn.lock b/yarn.lock index 6fef5116f5..ac9aa1aec5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5253,6 +5253,7 @@ __metadata: "@backstage/plugin-catalog": "workspace:^" "@backstage/plugin-catalog-common": "workspace:^" "@backstage/plugin-catalog-react": "workspace:^" + "@backstage/plugin-permission-react": "workspace:^" "@backstage/test-utils": "workspace:^" "@material-ui/core": "npm:^4.12.2" "@material-ui/icons": "npm:^4.9.1" From b500bcc39f03613de6b26060e0a82bcef0b0f041 Mon Sep 17 00:00:00 2001 From: Stephen Glass Date: Thu, 13 Nov 2025 21:48:33 -0500 Subject: [PATCH 17/73] fix(catalog): fix unstable keys Signed-off-by: Stephen Glass --- .changeset/early-berries-bet.md | 5 +++++ .../src/alpha/DefaultEntityContentLayout.tsx | 22 +++++++++++++++---- 2 files changed, 23 insertions(+), 4 deletions(-) create mode 100644 .changeset/early-berries-bet.md diff --git a/.changeset/early-berries-bet.md b/.changeset/early-berries-bet.md new file mode 100644 index 0000000000..7540c41efd --- /dev/null +++ b/.changeset/early-berries-bet.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog': patch +--- + +Fix React warnings for elements not having stable keys. diff --git a/plugins/catalog/src/alpha/DefaultEntityContentLayout.tsx b/plugins/catalog/src/alpha/DefaultEntityContentLayout.tsx index 3188b98437..77b84af275 100644 --- a/plugins/catalog/src/alpha/DefaultEntityContentLayout.tsx +++ b/plugins/catalog/src/alpha/DefaultEntityContentLayout.tsx @@ -14,6 +14,7 @@ * limitations under the License. */ +import { Fragment } from 'react'; import Grid from '@material-ui/core/Grid'; import { makeStyles, Theme } from '@material-ui/core/styles'; import { EntityContentLayoutProps } from '@backstage/plugin-catalog-react/alpha'; @@ -168,22 +169,35 @@ export function DefaultEntityContentLayout(props: EntityContentLayoutProps) {
{infoCards.length > 0 ? (
- {infoCards.map(card => card.element)} + {infoCards.map((card, index) => ( + + {card.element} + + ))}
) : null}
{summaryCards.length > 0 ? (
- {summaryCards.map(card => ( -
{card.element}
+ {summaryCards.map((card, index) => ( +
+ {card.element} +
))}
) : null} {contentCards.length > 0 ? (
- {contentCards.map(card => card.element)} + {contentCards.map((card, index) => ( + + {card.element} + + ))}
) : null}
From aff04d30f79da60821c173daf00c686a78efe162 Mon Sep 17 00:00:00 2001 From: Stephen Glass Date: Thu, 13 Nov 2025 22:18:44 -0500 Subject: [PATCH 18/73] fix(catalog): add margin for entity warning conent area in nfs catalog page Signed-off-by: Stephen Glass --- .changeset/purple-pants-speak.md | 5 ++ .../src/alpha/DefaultEntityContentLayout.tsx | 58 +++++++++---------- 2 files changed, 33 insertions(+), 30 deletions(-) create mode 100644 .changeset/purple-pants-speak.md diff --git a/.changeset/purple-pants-speak.md b/.changeset/purple-pants-speak.md new file mode 100644 index 0000000000..b46c4b991f --- /dev/null +++ b/.changeset/purple-pants-speak.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog': patch +--- + +Fixed missing margins for entity warning content area on catalog entity page in NFS. diff --git a/plugins/catalog/src/alpha/DefaultEntityContentLayout.tsx b/plugins/catalog/src/alpha/DefaultEntityContentLayout.tsx index 77b84af275..7b5b6fbcbc 100644 --- a/plugins/catalog/src/alpha/DefaultEntityContentLayout.tsx +++ b/plugins/catalog/src/alpha/DefaultEntityContentLayout.tsx @@ -15,7 +15,6 @@ */ import { Fragment } from 'react'; -import Grid from '@material-ui/core/Grid'; import { makeStyles, Theme } from '@material-ui/core/styles'; import { EntityContentLayoutProps } from '@backstage/plugin-catalog-react/alpha'; import { EntitySwitch } from '../components/EntitySwitch'; @@ -42,6 +41,15 @@ const useStyles = makeStyles< flexFlow: 'column nowrap', gap: theme.spacing(3), }, + warningArea: { + display: 'grid', + gap: theme.spacing(2), + marginBottom: theme.spacing(3), + '&:empty': { + marginBottom: 0, + display: 'none', + }, + }, mainContent: { display: 'flex', flexFlow: 'column', @@ -120,34 +128,6 @@ const useStyles = makeStyles< }, })); -const entityWarningContent = ( - <> - - - - - - - - - - - - - - - - - - - - - - - - -); - export function DefaultEntityContentLayout(props: EntityContentLayoutProps) { const { cards } = props; @@ -165,7 +145,25 @@ export function DefaultEntityContentLayout(props: EntityContentLayoutProps) { return ( <> - {entityWarningContent} +
+ + + + + + + + + + + + + + + + + +
{infoCards.length > 0 ? (
From 72b7f041786f2f74b04af028a126c8a36f1ca95e Mon Sep 17 00:00:00 2001 From: Stephen Glass Date: Thu, 13 Nov 2025 22:28:26 -0500 Subject: [PATCH 19/73] fix(catalog): use flex instead of grid in warning area to be consistent Signed-off-by: Stephen Glass --- plugins/catalog/src/alpha/DefaultEntityContentLayout.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plugins/catalog/src/alpha/DefaultEntityContentLayout.tsx b/plugins/catalog/src/alpha/DefaultEntityContentLayout.tsx index 7b5b6fbcbc..01340037b4 100644 --- a/plugins/catalog/src/alpha/DefaultEntityContentLayout.tsx +++ b/plugins/catalog/src/alpha/DefaultEntityContentLayout.tsx @@ -42,7 +42,8 @@ const useStyles = makeStyles< gap: theme.spacing(3), }, warningArea: { - display: 'grid', + display: 'flex', + flexDirection: 'column', gap: theme.spacing(2), marginBottom: theme.spacing(3), '&:empty': { From a87c0a5ab6e7a119df5be69f314c9910a49521f1 Mon Sep 17 00:00:00 2001 From: Stephen Glass Date: Thu, 13 Nov 2025 23:10:10 -0500 Subject: [PATCH 20/73] fix(catalog): fix responsiveness for catalog entity in nfs Signed-off-by: Stephen Glass --- .changeset/lucky-parrots-yell.md | 5 +++++ .../catalog/src/alpha/DefaultEntityContentLayout.tsx | 10 +++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) create mode 100644 .changeset/lucky-parrots-yell.md diff --git a/.changeset/lucky-parrots-yell.md b/.changeset/lucky-parrots-yell.md new file mode 100644 index 0000000000..7533ed6e56 --- /dev/null +++ b/.changeset/lucky-parrots-yell.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog': patch +--- + +Fixed responsiveness issues with catalog entity content layout using the new frontend system. diff --git a/plugins/catalog/src/alpha/DefaultEntityContentLayout.tsx b/plugins/catalog/src/alpha/DefaultEntityContentLayout.tsx index 77b84af275..9611999041 100644 --- a/plugins/catalog/src/alpha/DefaultEntityContentLayout.tsx +++ b/plugins/catalog/src/alpha/DefaultEntityContentLayout.tsx @@ -52,7 +52,7 @@ const useStyles = makeStyles< infoArea: { display: 'flex', flexFlow: 'column nowrap', - alignItems: 'flex-start', + alignItems: 'stretch', gap: theme.spacing(3), minWidth: 0, '& > *': { @@ -62,10 +62,11 @@ const useStyles = makeStyles< }, summaryArea: { minWidth: 0, - margin: theme.spacing(1.5), // To counteract MUI negative grid margin + margin: theme.spacing(1), // To counteract MUI negative grid margin }, summaryCard: { flex: '0 0 auto', + width: '100%', '& + &': { marginLeft: theme.spacing(3), }, @@ -96,7 +97,7 @@ const useStyles = makeStyles< }, summaryArea: { gridArea: 'summary', - marginBottom: theme.spacing(3), + margin: theme.spacing(1), // To counteract MUI negative grid margin }, infoArea: { gridArea: 'info', @@ -117,6 +118,9 @@ const useStyles = makeStyles< display: 'none', }, }, + summaryCard: { + width: 'auto', + }, }, })); From 774696ea897a1a1bbd612dbceaca9cd962a37116 Mon Sep 17 00:00:00 2001 From: Kurt King Date: Fri, 14 Nov 2025 09:31:41 -0700 Subject: [PATCH 21/73] Update author information in announcements.yaml Signed-off-by: Kurt King --- microsite/data/plugins/announcements.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/microsite/data/plugins/announcements.yaml b/microsite/data/plugins/announcements.yaml index a9c66d6203..f24965f10a 100644 --- a/microsite/data/plugins/announcements.yaml +++ b/microsite/data/plugins/announcements.yaml @@ -1,7 +1,7 @@ --- title: Announcements -author: procore-oss -authorUrl: https://github.com/procore-oss +author: kurtaking +authorUrl: https://github.com/kurtaking category: Discovery description: Write and share announcements within Backstage. documentation: https://github.com/backstage/community-plugins/tree/main/workspaces/announcements/ From bfa0caf62cb5dc71ec1695518baa6941f43f34b6 Mon Sep 17 00:00:00 2001 From: Kurt King Date: Fri, 14 Nov 2025 09:34:32 -0700 Subject: [PATCH 22/73] Update Procore entry in ADOPTERS.md Signed-off-by: Kurt King --- ADOPTERS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ADOPTERS.md b/ADOPTERS.md index 208cd370ba..961d9d534e 100644 --- a/ADOPTERS.md +++ b/ADOPTERS.md @@ -94,7 +94,7 @@ _You can do this by using the [Adopter form](https://info.backstage.spotify.com/ | [IKEA IT AB](https://www.ingka.com) | [@bjornramberg](https://github.com/bjornramberg), [@supriyachitale](https://github.com/supriyachitale) | Supporting engineers at scale with self serve access and connecting the dots of our engineering platform and services, enabling product teams to move faster and go further, and unleashing innovation, reuse and co-creation across the organisation. | | [Invitae](https://www.invitae.com/en) | [@ryan-hanchett](https://github.com/ryan-hanchett), [@gmandler42](https://github.com/gmandler42) | Centralized Developer Experience portal, putting all of our tooling behind a single pane of glass and creating a living service catalog. | | [Fortum](https://www.fortum.com/) | [@brunoamaroalmeida](https://github.com/brunoamaroalmeida), [@dhaval-vithalani](https://github.com/dhaval-vithalani), [@sunilkumarmohanty](https://github.com/sunilkumarmohanty) | A central portal containing information about our applications, services, processes and other software assets to be used by Fortum software engineering community. | -| [Procore](https://www.procore.com/jobs/engineering) | [@shayon](https://github.com/Shayon), [@jamesdabbs-procore](https://github.com/jamesdabbs-procore) | Developer portal - centralized software catalog and templates to enable self serve and reduce cognitive load. | +| [Procore](https://www.procore.com/jobs/engineering) | [@shayon](https://github.com/Shayon), [@kurtaking](https://github.com/kurtaking), [@pc-bob](https://github.com/pc-bob) | Developer portal - centralized software catalog and templates to enable self serve and reduce cognitive load. | | [Bradesco](https://banco.bradesco/html/classic/sobre/index.shtm) | [@danilosoarescardoso](https://github.com/danilosoarescardoso) | Centralized developer portal with software catalog, software templates, techdocs and some plugins from community and by our own. | | [SeatGeek](https://seatgeek.com) | [@zhammer](https://github.com/zhammer) | Software catalog and documentation platform | | [Grupo Boticário](https://www.grupoboticario.com.br/) | [@chicoribas](https://github.com/chicoribas), [@fndiaz](https://github.com/fndiaz), [@digogid](https://github.com/digogid), [@manumbs](https://github.com/manumbs), [@haooliveira84](https://github.com/haooliveira84), [@Rhullyam](https://github.com/Rhullyam) | Centralized developer portal with catalog, documentation, and software templates to build a ready to go application, including pipelines (CI/CD) and cloud services provisioning | From 35074cae19f702d7c72e20780ca57bdde55dcce1 Mon Sep 17 00:00:00 2001 From: ElaineDeMattosSilvaB Date: Sat, 15 Nov 2025 06:56:43 +0100 Subject: [PATCH 23/73] fix(cli): prevent double @ prefix when using --scope flag Signed-off-by: ElaineDeMattosSilvaB --- packages/cli/src/modules/new/commands/new.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/cli/src/modules/new/commands/new.ts b/packages/cli/src/modules/new/commands/new.ts index 9d09f42cf3..a38316dd62 100644 --- a/packages/cli/src/modules/new/commands/new.ts +++ b/packages/cli/src/modules/new/commands/new.ts @@ -42,7 +42,10 @@ export default async (opts: ArgOptions) => { let pluginInfix: string | undefined = undefined; let packagePrefix: string | undefined = undefined; if (scope) { - packagePrefix = scope.includes('/') ? `@${scope}` : `@${scope}/`; + const normalizedScope = scope.startsWith('@') ? scope : `@${scope}`; + packagePrefix = normalizedScope.includes('/') + ? normalizedScope + : `${normalizedScope}/`; pluginInfix = scope.includes('backstage') ? 'plugin-' : 'backstage-plugin-'; } From 279279c0583fe50098d93e726218acab6140df3c Mon Sep 17 00:00:00 2001 From: ElaineDeMattosSilvaB Date: Sat, 15 Nov 2025 07:05:45 +0100 Subject: [PATCH 24/73] fix: add changeset Signed-off-by: ElaineDeMattosSilvaB --- .changeset/true-results-shake.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/true-results-shake.md diff --git a/.changeset/true-results-shake.md b/.changeset/true-results-shake.md new file mode 100644 index 0000000000..ab0f1210b3 --- /dev/null +++ b/.changeset/true-results-shake.md @@ -0,0 +1,5 @@ +--- +'@backstage/cli': patch +--- + +Fixes an issue where using the `backstage-cli new --scope` command with a scope that already includes the `@` symbol (e.g., `@backstage-community`) would result in a double `@@` prefix in the generated package name, causing invalid `package.json` files. From 8e04d757d98426796e2e4d0f694205d84acdc29f Mon Sep 17 00:00:00 2001 From: ElaineDeMattosSilvaB Date: Sat, 15 Nov 2025 07:20:46 +0100 Subject: [PATCH 25/73] fix(tests): add test case for scopes starting with @ Signed-off-by: ElaineDeMattosSilvaB --- packages/cli/src/modules/new/commands/new.test.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/cli/src/modules/new/commands/new.test.ts b/packages/cli/src/modules/new/commands/new.test.ts index 77ee96cd09..2183d80062 100644 --- a/packages/cli/src/modules/new/commands/new.test.ts +++ b/packages/cli/src/modules/new/commands/new.test.ts @@ -23,6 +23,8 @@ describe.each([ [undefined, undefined, undefined], ['internal', '@internal/', 'backstage-plugin-'], ['internal/', '@internal/', 'backstage-plugin-'], + ['@internal', '@internal/', 'backstage-plugin-'], + ['@internal/', '@internal/', 'backstage-plugin-'], ['acme-backstage', '@acme-backstage/', 'plugin-'], ['acme-backstage/', '@acme-backstage/', 'plugin-'], ['acme-backstage-plugins', '@acme-backstage-plugins/', 'plugin-'], From 559ceb07269092490bf90d93e662a7fabc81d7c4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 15 Nov 2025 10:53:21 +0000 Subject: [PATCH 26/73] chore(deps): bump js-yaml from 4.1.0 to 4.1.1 in /docs-ui Bumps [js-yaml](https://github.com/nodeca/js-yaml) from 4.1.0 to 4.1.1. - [Changelog](https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md) - [Commits](https://github.com/nodeca/js-yaml/compare/4.1.0...4.1.1) --- updated-dependencies: - dependency-name: js-yaml dependency-version: 4.1.1 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- docs-ui/yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs-ui/yarn.lock b/docs-ui/yarn.lock index 480f7592f8..2038688ef6 100644 --- a/docs-ui/yarn.lock +++ b/docs-ui/yarn.lock @@ -4213,13 +4213,13 @@ __metadata: linkType: hard "js-yaml@npm:^4.1.0": - version: 4.1.0 - resolution: "js-yaml@npm:4.1.0" + version: 4.1.1 + resolution: "js-yaml@npm:4.1.1" dependencies: argparse: "npm:^2.0.1" bin: js-yaml: bin/js-yaml.js - checksum: 10/c138a34a3fd0d08ebaf71273ad4465569a483b8a639e0b118ff65698d257c2791d3199e3f303631f2cb98213fa7b5f5d6a4621fd0fff819421b990d30d967140 + checksum: 10/a52d0519f0f4ef5b4adc1cde466cb54c50d56e2b4a983b9d5c9c0f2f99462047007a6274d7e95617a21d3c91fde3ee6115536ed70991cd645ba8521058b78f77 languageName: node linkType: hard From 904d136368ac52b91765671698a4434924d7f30b Mon Sep 17 00:00:00 2001 From: Stephen Glass Date: Sat, 15 Nov 2025 22:37:29 -0500 Subject: [PATCH 27/73] fix(catalog-react): fixed initially selected all filter not appearing as selected Signed-off-by: Stephen Glass --- .changeset/warm-dancers-battle.md | 5 + .../src/hooks/useEntityListProvider.test.tsx | 46 ++++++++ .../src/hooks/useEntityListProvider.tsx | 110 ++++++++++-------- 3 files changed, 115 insertions(+), 46 deletions(-) create mode 100644 .changeset/warm-dancers-battle.md diff --git a/.changeset/warm-dancers-battle.md b/.changeset/warm-dancers-battle.md new file mode 100644 index 0000000000..8aa3f765e8 --- /dev/null +++ b/.changeset/warm-dancers-battle.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-react': patch +--- + +Fixed catalog filter "all" not appearing as selected when set as the initially selected filter. diff --git a/plugins/catalog-react/src/hooks/useEntityListProvider.test.tsx b/plugins/catalog-react/src/hooks/useEntityListProvider.test.tsx index 8ef1707bb1..f7090f330b 100644 --- a/plugins/catalog-react/src/hooks/useEntityListProvider.test.tsx +++ b/plugins/catalog-react/src/hooks/useEntityListProvider.test.tsx @@ -498,6 +498,29 @@ describe('', () => { }); }); + it('applies frontend-only filters without refetching', async () => { + const { result } = renderHook(() => useEntityList(), { + wrapper: createWrapper({ pagination }), + }); + + await waitFor(() => { + expect(result.current.backendEntities.length).toBe(2); + expect(result.current.filters.kind?.value).toBe('component'); + }); + + act(() => + result.current.updateFilters({ + user: EntityUserFilter.all(), + }), + ); + + await waitFor(() => { + expect(result.current.filters.user?.value).toBe('all'); + expect(result.current.entities.length).toBe(2); + }); + expect(mockCatalogApi.queryEntities).toHaveBeenCalledTimes(1); + }); + it('resolves query param filter values', async () => { const query = qs.stringify({ filters: { kind: 'component', type: 'service' }, @@ -801,6 +824,29 @@ describe(``, () => { }); }); + it('applies frontend-only filters without refetching', async () => { + const { result } = renderHook(() => useEntityList(), { + wrapper: createWrapper({ pagination }), + }); + + await waitFor(() => { + expect(result.current.backendEntities.length).toBe(2); + expect(result.current.filters.kind?.value).toBe('component'); + }); + + act(() => + result.current.updateFilters({ + user: EntityUserFilter.all(), + }), + ); + + await waitFor(() => { + expect(result.current.filters.user?.value).toBe('all'); + expect(result.current.entities.length).toBe(2); + }); + expect(mockCatalogApi.queryEntities).toHaveBeenCalledTimes(1); + }); + it('resolves query param filter values', async () => { const query = qs.stringify({ filters: { kind: 'component', type: 'service' }, diff --git a/plugins/catalog-react/src/hooks/useEntityListProvider.tsx b/plugins/catalog-react/src/hooks/useEntityListProvider.tsx index 319740e70e..8c4927ad0a 100644 --- a/plugins/catalog-react/src/hooks/useEntityListProvider.tsx +++ b/plugins/catalog-react/src/hooks/useEntityListProvider.tsx @@ -249,11 +249,11 @@ export const EntityListProvider = ( ? { ...requestedFilters, owners: undefined } : requestedFilters; const compacted = compact(Object.values(adjustedFilters)); + const entityFilter = reduceEntityFilters(compacted); if (paginationMode !== 'none') { if (cursor) { if (cursor !== outputState.appliedCursor) { - const entityFilter = reduceEntityFilters(compacted); const response = await catalogApi.queryEntities({ cursor, limit, @@ -267,58 +267,42 @@ export const EntityListProvider = ( totalItems: response.totalItems, }; } - } else { - const entityFilter = reduceEntityFilters(compacted); - const backendFilter = reduceCatalogFilters(compacted); - const previousBackendFilter = reduceCatalogFilters( - compact(Object.values(outputState.appliedFilters)), - ); - - if ( - (paginationMode === 'offset' && - (outputState.limit !== limit || outputState.offset !== offset)) || - !isEqual(previousBackendFilter, backendFilter) - ) { - const response = await catalogApi.queryEntities({ - ...backendFilter, - limit, - offset, - }); - return { - appliedFilters: requestedFilters, - backendEntities: response.items, - entities: response.items.filter(entityFilter), - pageInfo: response.pageInfo, - totalItems: response.totalItems, - limit, - offset, - }; - } + const entities = outputState.backendEntities.filter(entityFilter); + return { + appliedFilters: requestedFilters, + appliedCursor: outputState.appliedCursor, + backendEntities: outputState.backendEntities, + entities, + pageInfo: outputState.pageInfo, + totalItems: outputState.totalItems, + limit: outputState.limit, + offset: outputState.offset, + }; } - } else { - const entityFilter = reduceEntityFilters(compacted); - const backendFilter = reduceBackendCatalogFilters(compacted); - const { orderFields } = reduceCatalogFilters(compacted); - const previousBackendFilter = reduceBackendCatalogFilters( + + const backendFilter = reduceCatalogFilters(compacted); + const previousBackendFilter = reduceCatalogFilters( compact(Object.values(outputState.appliedFilters)), ); - // TODO(mtlewis): currently entities will never be requested unless - // there's at least one filter, we should allow an initial request - // to happen with no filters. - if (!isEqual(previousBackendFilter, backendFilter)) { - // TODO(timbonicus): should limit fields here, but would need filter - // fields + table columns - const response = await catalogApi.getEntities({ - filter: backendFilter, - order: orderFields, + if ( + (paginationMode === 'offset' && + (outputState.limit !== limit || outputState.offset !== offset)) || + !isEqual(previousBackendFilter, backendFilter) + ) { + const response = await catalogApi.queryEntities({ + ...backendFilter, + limit, + offset, }); - const entities = response.items.filter(entityFilter); return { appliedFilters: requestedFilters, backendEntities: response.items, - entities, - totalItems: entities.length, + entities: response.items.filter(entityFilter), + pageInfo: response.pageInfo, + totalItems: response.totalItems, + limit, + offset, }; } const entities = outputState.backendEntities.filter(entityFilter); @@ -326,10 +310,44 @@ export const EntityListProvider = ( appliedFilters: requestedFilters, backendEntities: outputState.backendEntities, entities, + pageInfo: outputState.pageInfo, + totalItems: outputState.totalItems, + limit: outputState.limit, + offset: outputState.offset, + }; + } + + const backendFilter = reduceBackendCatalogFilters(compacted); + const { orderFields } = reduceCatalogFilters(compacted); + const previousBackendFilter = reduceBackendCatalogFilters( + compact(Object.values(outputState.appliedFilters)), + ); + + // TODO(mtlewis): currently entities will never be requested unless + // there's at least one filter, we should allow an initial request + // to happen with no filters. + if (!isEqual(previousBackendFilter, backendFilter)) { + // TODO(timbonicus): should limit fields here, but would need filter + // fields + table columns + const response = await catalogApi.getEntities({ + filter: backendFilter, + order: orderFields, + }); + const entities = response.items.filter(entityFilter); + return { + appliedFilters: requestedFilters, + backendEntities: response.items, + entities, totalItems: entities.length, }; } - return undefined; + const entities = outputState.backendEntities.filter(entityFilter); + return { + appliedFilters: requestedFilters, + backendEntities: outputState.backendEntities, + entities, + totalItems: entities.length, + }; }, [ catalogApi, From 8ccf04d330b9ad76283a49e38b9e15af15cf1294 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Sun, 16 Nov 2025 21:37:06 +0100 Subject: [PATCH 28/73] exit prerelease MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- .changeset/pre.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/pre.json b/.changeset/pre.json index f068415e9f..f65042692e 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -1,5 +1,5 @@ { - "mode": "pre", + "mode": "exit", "tag": "next", "initialVersions": { "example-app": "0.2.114", From 7d87b4f6ad1c7c4a36dbd62a27c1130ca405344d Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sat, 20 Sep 2025 23:09:02 +0200 Subject: [PATCH 29/73] frontend-plugin-api: add OverridableExtensionDefinition Signed-off-by: Patrik Oldsberg --- .changeset/plenty-spiders-lead.md | 5 +++++ .../src/wiring/InternalExtensionDefinition.ts | 4 ++-- .../src/wiring/createExtension.ts | 21 ++++++++++++------- .../src/wiring/createExtensionBlueprint.ts | 10 ++++----- .../src/wiring/createFrontendPlugin.ts | 9 ++++++-- .../frontend-plugin-api/src/wiring/index.ts | 3 ++- 6 files changed, 34 insertions(+), 18 deletions(-) create mode 100644 .changeset/plenty-spiders-lead.md diff --git a/.changeset/plenty-spiders-lead.md b/.changeset/plenty-spiders-lead.md new file mode 100644 index 0000000000..48db0d5522 --- /dev/null +++ b/.changeset/plenty-spiders-lead.md @@ -0,0 +1,5 @@ +--- +'@backstage/frontend-plugin-api': minor +--- + +Renamed `ExtensionDefinition` to `OverridableExtensionDefinition` and introduced a slimmer `ExtensionDefinition` type that does not include override methods. The overridable type is generally used as an output type, while plain `ExtensionDefinition`s are used for input. This reduces type conflicts across different of `@backstage/frontend-plugin-api`, improving long-term compatibility. diff --git a/packages/frontend-internal/src/wiring/InternalExtensionDefinition.ts b/packages/frontend-internal/src/wiring/InternalExtensionDefinition.ts index 54953c169a..b7c3674f9a 100644 --- a/packages/frontend-internal/src/wiring/InternalExtensionDefinition.ts +++ b/packages/frontend-internal/src/wiring/InternalExtensionDefinition.ts @@ -20,7 +20,7 @@ import { ExtensionDefinitionAttachTo, ExtensionDataValue, ExtensionDataRef, - ExtensionDefinition, + OverridableExtensionDefinition, ExtensionDefinitionParameters, ExtensionInput, PortableSchema, @@ -29,7 +29,7 @@ import { import { OpaqueType } from '@internal/opaque'; export const OpaqueExtensionDefinition = OpaqueType.create<{ - public: ExtensionDefinition; + public: OverridableExtensionDefinition; versions: | { readonly version: 'v1'; diff --git a/packages/frontend-plugin-api/src/wiring/createExtension.ts b/packages/frontend-plugin-api/src/wiring/createExtension.ts index 0fec40f4c9..0268cadf51 100644 --- a/packages/frontend-plugin-api/src/wiring/createExtension.ts +++ b/packages/frontend-plugin-api/src/wiring/createExtension.ts @@ -233,12 +233,17 @@ type AnyParamsInput = ) => ReturnType>); /** @public */ -export type ExtensionDefinition< - T extends ExtensionDefinitionParameters = ExtensionDefinitionParameters, -> = { +export interface ExtensionDefinition< + TParams extends ExtensionDefinitionParameters = ExtensionDefinitionParameters, +> { $$type: '@backstage/ExtensionDefinition'; - readonly T: T; + readonly T: TParams; +} +/** @public */ +export interface OverridableExtensionDefinition< + T extends ExtensionDefinitionParameters = ExtensionDefinitionParameters, +> extends ExtensionDefinition { /** * References to the inputs of this extension, which can be used to attach child extensions. */ @@ -327,7 +332,7 @@ export type ExtensionDefinition< : UNewOutput, UFactoryOutput >, - ): ExtensionDefinition<{ + ): OverridableExtensionDefinition<{ kind: T['kind']; name: T['name']; output: ExtensionDataRef extends UNewOutput ? T['output'] : UNewOutput; @@ -346,7 +351,7 @@ export type ExtensionDefinition< }> >; }>; -}; +} /** * @internal @@ -425,7 +430,7 @@ export function createExtension< UFactoryOutput, UParentInputs >, -): ExtensionDefinition<{ +): OverridableExtensionDefinition<{ config: string extends keyof TConfigSchema ? {} : { @@ -638,7 +643,7 @@ export function createExtension< return deduplicatedResult.values(); }, - }) as ExtensionDefinition; + }) as OverridableExtensionDefinition; }, }); } diff --git a/packages/frontend-plugin-api/src/wiring/createExtensionBlueprint.ts b/packages/frontend-plugin-api/src/wiring/createExtensionBlueprint.ts index f9a3731743..70b6209ae3 100644 --- a/packages/frontend-plugin-api/src/wiring/createExtensionBlueprint.ts +++ b/packages/frontend-plugin-api/src/wiring/createExtensionBlueprint.ts @@ -19,7 +19,7 @@ import { Expand } from '@backstage/types'; import { OpaqueType } from '@internal/opaque'; import { ExtensionDefinitionAttachTo, - ExtensionDefinition, + OverridableExtensionDefinition, ResolvedExtensionInputs, VerifyExtensionFactoryOutput, createExtension, @@ -226,7 +226,7 @@ export interface ExtensionBlueprint< : T['params'] extends ExtensionBlueprintDefineParams ? 'Error: This blueprint uses advanced parameter types and requires you to pass parameters as using the following callback syntax: `.make({ params: defineParams => defineParams() })`' : T['params']; - }): ExtensionDefinition<{ + }): OverridableExtensionDefinition<{ kind: T['kind']; name: string | undefined extends TName ? undefined : TName; config: T['config']; @@ -303,7 +303,7 @@ export interface ExtensionBlueprint< : UNewOutput, UFactoryOutput >; - }): ExtensionDefinition<{ + }): OverridableExtensionDefinition<{ config: (string extends keyof TExtensionConfigSchema ? {} : { @@ -514,7 +514,7 @@ export function createExtensionBlueprint< unwrapParams(args.params, ctx, defineParams, options.kind), ctx, ) as Iterable>, - }) as ExtensionDefinition; + }) as OverridableExtensionDefinition; }, makeWithOverrides(args) { return createExtension({ @@ -572,7 +572,7 @@ export function createExtensionBlueprint< }, ) as Iterable>; }, - }) as ExtensionDefinition; + }) as OverridableExtensionDefinition; }, } as ExtensionBlueprint<{ kind: TKind; diff --git a/packages/frontend-plugin-api/src/wiring/createFrontendPlugin.ts b/packages/frontend-plugin-api/src/wiring/createFrontendPlugin.ts index 5555a0b47c..68b5826baa 100644 --- a/packages/frontend-plugin-api/src/wiring/createFrontendPlugin.ts +++ b/packages/frontend-plugin-api/src/wiring/createFrontendPlugin.ts @@ -18,7 +18,10 @@ import { OpaqueExtensionDefinition, OpaqueFrontendPlugin, } from '@internal/frontend'; -import { ExtensionDefinition } from './createExtension'; +import { + ExtensionDefinition, + OverridableExtensionDefinition, +} from './createExtension'; import { Extension, resolveExtensionDefinition, @@ -104,7 +107,9 @@ export interface OverridableFrontendPlugin< [id in string]: ExtensionDefinition; }, > extends FrontendPlugin { - getExtension(id: TId): TExtensionMap[TId]; + getExtension( + id: TId, + ): OverridableExtensionDefinition; withOverrides(options: { extensions: Array; diff --git a/packages/frontend-plugin-api/src/wiring/index.ts b/packages/frontend-plugin-api/src/wiring/index.ts index 1bbdf68b13..6ce1bb4998 100644 --- a/packages/frontend-plugin-api/src/wiring/index.ts +++ b/packages/frontend-plugin-api/src/wiring/index.ts @@ -15,12 +15,13 @@ */ export { coreExtensionData } from './coreExtensionData'; +export { createExtension } from './createExtension'; export { - createExtension, type ExtensionDefinition, type ExtensionDefinitionAttachTo, type ExtensionDefinitionParameters, type CreateExtensionOptions, + type OverridableExtensionDefinition, type ResolvedExtensionInput, type ResolvedExtensionInputs, } from './createExtension'; From a1c58124a71fc7736477e1f4c9a03345524a143a Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sat, 20 Sep 2025 23:09:13 +0200 Subject: [PATCH 30/73] sync API reports Signed-off-by: Patrik Oldsberg --- .../app-next-example-plugin/report.api.md | 4 +- packages/frontend-plugin-api/report.api.md | 239 +++++++++--------- plugins/api-docs/report-alpha.api.md | 24 +- plugins/app-visualizer/report.api.md | 6 +- plugins/app/report.api.md | 88 +++---- plugins/auth/report.api.md | 4 +- plugins/catalog-graph/report-alpha.api.md | 8 +- plugins/catalog-import/report-alpha.api.md | 6 +- .../report-alpha.api.md | 8 +- plugins/catalog/report-alpha.api.md | 62 ++--- plugins/devtools/report-alpha.api.md | 8 +- plugins/home/report-alpha.api.md | 8 +- plugins/kubernetes/report-alpha.api.md | 14 +- plugins/mui-to-bui/report.api.md | 4 +- plugins/notifications/report-alpha.api.md | 6 +- plugins/org/report-alpha.api.md | 10 +- plugins/scaffolder-react/report-alpha.api.md | 4 +- plugins/scaffolder/report-alpha.api.md | 34 +-- plugins/search/report-alpha.api.md | 14 +- plugins/signals/report-alpha.api.md | 4 +- plugins/techdocs/report-alpha.api.md | 22 +- plugins/user-settings/report-alpha.api.md | 8 +- 22 files changed, 298 insertions(+), 287 deletions(-) diff --git a/packages/app-next-example-plugin/report.api.md b/packages/app-next-example-plugin/report.api.md index 12346d908c..bfcafbe2d2 100644 --- a/packages/app-next-example-plugin/report.api.md +++ b/packages/app-next-example-plugin/report.api.md @@ -5,9 +5,9 @@ ```ts import { AnyRouteRefParams } from '@backstage/frontend-plugin-api'; import { ExtensionDataRef } from '@backstage/frontend-plugin-api'; -import { ExtensionDefinition } from '@backstage/frontend-plugin-api'; import { JSX as JSX_2 } from 'react'; import { JSX as JSX_3 } from 'react/jsx-runtime'; +import { OverridableExtensionDefinition } from '@backstage/frontend-plugin-api'; import { OverridableFrontendPlugin } from '@backstage/frontend-plugin-api'; import { RouteRef } from '@backstage/frontend-plugin-api'; @@ -16,7 +16,7 @@ const examplePlugin: OverridableFrontendPlugin< {}, {}, { - 'page:example': ExtensionDefinition<{ + 'page:example': OverridableExtensionDefinition<{ kind: 'page'; name: undefined; config: { diff --git a/packages/frontend-plugin-api/report.api.md b/packages/frontend-plugin-api/report.api.md index c3dd12119f..f2fe60c82a 100644 --- a/packages/frontend-plugin-api/report.api.md +++ b/packages/frontend-plugin-api/report.api.md @@ -418,7 +418,7 @@ export function createExtension< UFactoryOutput, UParentInputs >, -): ExtensionDefinition<{ +): OverridableExtensionDefinition<{ config: string extends keyof TConfigSchema ? {} : { @@ -881,7 +881,7 @@ export interface ExtensionBlueprint< : T['params'] extends ExtensionBlueprintDefineParams ? 'Error: This blueprint uses advanced parameter types and requires you to pass parameters as using the following callback syntax: `.make({ params: defineParams => defineParams() })`' : T['params']; - }): ExtensionDefinition<{ + }): OverridableExtensionDefinition<{ kind: T['kind']; name: string | undefined extends TName ? undefined : TName; config: T['config']; @@ -953,7 +953,7 @@ export interface ExtensionBlueprint< : UNewOutput, UFactoryOutput >; - }): ExtensionDefinition<{ + }): OverridableExtensionDefinition<{ config: (string extends keyof TExtensionConfigSchema ? {} : { @@ -1088,117 +1088,14 @@ export type ExtensionDataValue = { }; // @public (undocumented) -export type ExtensionDefinition< - T extends ExtensionDefinitionParameters = ExtensionDefinitionParameters, -> = { +export interface ExtensionDefinition< + TParams extends ExtensionDefinitionParameters = ExtensionDefinitionParameters, +> { + // (undocumented) $$type: '@backstage/ExtensionDefinition'; - readonly T: T; - readonly inputs: { - [K in keyof T['inputs']]: ExtensionInput< - T['inputs'][K] extends ExtensionInput ? IData : never - >; - }; - override< - TExtensionConfigSchema extends { - [key in string]: (zImpl: typeof z) => z.ZodType; - }, - UFactoryOutput extends ExtensionDataValue, - UNewOutput extends ExtensionDataRef, - TExtraInputs extends { - [inputName in string]: ExtensionInput; - }, - TParamsInput extends AnyParamsInput_2>, - UParentInputs extends ExtensionDataRef, - >( - args: Expand< - { - attachTo?: ExtensionDefinitionAttachTo & - VerifyExtensionAttachTo< - ExtensionDataRef extends UNewOutput - ? NonNullable - : UNewOutput, - UParentInputs - >; - disabled?: boolean; - inputs?: TExtraInputs & { - [KName in keyof T['inputs']]?: `Error: Input '${KName & - string}' is already defined in parent definition`; - }; - output?: Array; - config?: { - schema: TExtensionConfigSchema & { - [KName in keyof T['config']]?: `Error: Config key '${KName & - string}' is already defined in parent schema`; - }; - }; - factory?( - originalFactory: < - TFactoryParamsReturn extends AnyParamsInput_2< - NonNullable - >, - >( - context?: Expand< - { - config?: T['config']; - inputs?: ResolvedInputValueOverrides>; - } & ([T['params']] extends [never] - ? {} - : { - params?: TFactoryParamsReturn extends ExtensionBlueprintDefineParams - ? TFactoryParamsReturn - : T['params'] extends ExtensionBlueprintDefineParams - ? 'Error: This blueprint uses advanced parameter types and requires you to pass parameters as using the following callback syntax: `originalFactory(defineParams => defineParams())`' - : Partial; - }) - >, - ) => ExtensionDataContainer>, - context: { - node: AppNode; - apis: ApiHolder; - config: T['config'] & { - [key in keyof TExtensionConfigSchema]: z.infer< - ReturnType - >; - }; - inputs: Expand>; - }, - ): Iterable; - } & ([T['params']] extends [never] - ? {} - : { - params?: TParamsInput extends ExtensionBlueprintDefineParams - ? TParamsInput - : T['params'] extends ExtensionBlueprintDefineParams - ? 'Error: This blueprint uses advanced parameter types and requires you to pass parameters as using the following callback syntax: `originalFactory(defineParams => defineParams())`' - : Partial; - }) - > & - VerifyExtensionFactoryOutput< - ExtensionDataRef extends UNewOutput - ? NonNullable - : UNewOutput, - UFactoryOutput - >, - ): ExtensionDefinition<{ - kind: T['kind']; - name: T['name']; - output: ExtensionDataRef extends UNewOutput ? T['output'] : UNewOutput; - inputs: T['inputs'] & TExtraInputs; - config: T['config'] & { - [key in keyof TExtensionConfigSchema]: z.infer< - ReturnType - >; - }; - configInput: T['configInput'] & - z.input< - z.ZodObject<{ - [key in keyof TExtensionConfigSchema]: ReturnType< - TExtensionConfigSchema[key] - >; - }> - >; - }>; -}; + // (undocumented) + readonly T: TParams; +} // @public export type ExtensionDefinitionAttachTo< @@ -1544,6 +1441,118 @@ export { OpenIdConnectApi }; export { openshiftAuthApiRef }; +// @public (undocumented) +export interface OverridableExtensionDefinition< + T extends ExtensionDefinitionParameters = ExtensionDefinitionParameters, +> extends ExtensionDefinition { + readonly inputs: { + [K in keyof T['inputs']]: ExtensionInput< + T['inputs'][K] extends ExtensionInput ? IData : never + >; + }; + // (undocumented) + override< + TExtensionConfigSchema extends { + [key in string]: (zImpl: typeof z) => z.ZodType; + }, + UFactoryOutput extends ExtensionDataValue, + UNewOutput extends ExtensionDataRef, + TExtraInputs extends { + [inputName in string]: ExtensionInput; + }, + TParamsInput extends AnyParamsInput_2>, + UParentInputs extends ExtensionDataRef, + >( + args: Expand< + { + attachTo?: ExtensionDefinitionAttachTo & + VerifyExtensionAttachTo< + ExtensionDataRef extends UNewOutput + ? NonNullable + : UNewOutput, + UParentInputs + >; + disabled?: boolean; + inputs?: TExtraInputs & { + [KName in keyof T['inputs']]?: `Error: Input '${KName & + string}' is already defined in parent definition`; + }; + output?: Array; + config?: { + schema: TExtensionConfigSchema & { + [KName in keyof T['config']]?: `Error: Config key '${KName & + string}' is already defined in parent schema`; + }; + }; + factory?( + originalFactory: < + TFactoryParamsReturn extends AnyParamsInput_2< + NonNullable + >, + >( + context?: Expand< + { + config?: T['config']; + inputs?: ResolvedInputValueOverrides>; + } & ([T['params']] extends [never] + ? {} + : { + params?: TFactoryParamsReturn extends ExtensionBlueprintDefineParams + ? TFactoryParamsReturn + : T['params'] extends ExtensionBlueprintDefineParams + ? 'Error: This blueprint uses advanced parameter types and requires you to pass parameters as using the following callback syntax: `originalFactory(defineParams => defineParams())`' + : Partial; + }) + >, + ) => ExtensionDataContainer>, + context: { + node: AppNode; + apis: ApiHolder; + config: T['config'] & { + [key in keyof TExtensionConfigSchema]: z.infer< + ReturnType + >; + }; + inputs: Expand>; + }, + ): Iterable; + } & ([T['params']] extends [never] + ? {} + : { + params?: TParamsInput extends ExtensionBlueprintDefineParams + ? TParamsInput + : T['params'] extends ExtensionBlueprintDefineParams + ? 'Error: This blueprint uses advanced parameter types and requires you to pass parameters as using the following callback syntax: `originalFactory(defineParams => defineParams())`' + : Partial; + }) + > & + VerifyExtensionFactoryOutput< + ExtensionDataRef extends UNewOutput + ? NonNullable + : UNewOutput, + UFactoryOutput + >, + ): OverridableExtensionDefinition<{ + kind: T['kind']; + name: T['name']; + output: ExtensionDataRef extends UNewOutput ? T['output'] : UNewOutput; + inputs: T['inputs'] & TExtraInputs; + config: T['config'] & { + [key in keyof TExtensionConfigSchema]: z.infer< + ReturnType + >; + }; + configInput: T['configInput'] & + z.input< + z.ZodObject<{ + [key in keyof TExtensionConfigSchema]: ReturnType< + TExtensionConfigSchema[key] + >; + }> + >; + }>; +} + // @public export interface OverridableFrontendPlugin< TRoutes extends { @@ -1563,7 +1572,9 @@ export interface OverridableFrontendPlugin< }, > extends FrontendPlugin { // (undocumented) - getExtension(id: TId): TExtensionMap[TId]; + getExtension( + id: TId, + ): OverridableExtensionDefinition; // (undocumented) withOverrides(options: { extensions: Array; diff --git a/plugins/api-docs/report-alpha.api.md b/plugins/api-docs/report-alpha.api.md index 43c45c1a1d..7d134dcb6d 100644 --- a/plugins/api-docs/report-alpha.api.md +++ b/plugins/api-docs/report-alpha.api.md @@ -12,11 +12,11 @@ import { EntityCardType } from '@backstage/plugin-catalog-react/alpha'; import { EntityPredicate } from '@backstage/plugin-catalog-react/alpha'; import { ExtensionBlueprintParams } from '@backstage/frontend-plugin-api'; import { ExtensionDataRef } from '@backstage/frontend-plugin-api'; -import { ExtensionDefinition } from '@backstage/frontend-plugin-api'; import { ExtensionInput } from '@backstage/frontend-plugin-api'; import { ExternalRouteRef } from '@backstage/frontend-plugin-api'; import { IconComponent } from '@backstage/core-plugin-api'; import { JSX as JSX_2 } from 'react'; +import { OverridableExtensionDefinition } from '@backstage/frontend-plugin-api'; import { OverridableFrontendPlugin } from '@backstage/frontend-plugin-api'; import { RouteRef } from '@backstage/frontend-plugin-api'; import { TranslationRef } from '@backstage/frontend-plugin-api'; @@ -63,7 +63,7 @@ const _default: OverridableFrontendPlugin< registerApi: ExternalRouteRef; }, { - 'api:api-docs/config': ExtensionDefinition<{ + 'api:api-docs/config': OverridableExtensionDefinition<{ kind: 'api'; name: 'config'; config: {}; @@ -78,7 +78,7 @@ const _default: OverridableFrontendPlugin< params: ApiFactory, ) => ExtensionBlueprintParams; }>; - 'entity-card:api-docs/consumed-apis': ExtensionDefinition<{ + 'entity-card:api-docs/consumed-apis': OverridableExtensionDefinition<{ kind: 'entity-card'; name: 'consumed-apis'; config: { @@ -119,7 +119,7 @@ const _default: OverridableFrontendPlugin< type?: EntityCardType; }; }>; - 'entity-card:api-docs/consuming-components': ExtensionDefinition<{ + 'entity-card:api-docs/consuming-components': OverridableExtensionDefinition<{ kind: 'entity-card'; name: 'consuming-components'; config: { @@ -160,7 +160,7 @@ const _default: OverridableFrontendPlugin< type?: EntityCardType; }; }>; - 'entity-card:api-docs/definition': ExtensionDefinition<{ + 'entity-card:api-docs/definition': OverridableExtensionDefinition<{ kind: 'entity-card'; name: 'definition'; config: { @@ -201,7 +201,7 @@ const _default: OverridableFrontendPlugin< type?: EntityCardType; }; }>; - 'entity-card:api-docs/has-apis': ExtensionDefinition<{ + 'entity-card:api-docs/has-apis': OverridableExtensionDefinition<{ kind: 'entity-card'; name: 'has-apis'; config: { @@ -242,7 +242,7 @@ const _default: OverridableFrontendPlugin< type?: EntityCardType; }; }>; - 'entity-card:api-docs/provided-apis': ExtensionDefinition<{ + 'entity-card:api-docs/provided-apis': OverridableExtensionDefinition<{ kind: 'entity-card'; name: 'provided-apis'; config: { @@ -283,7 +283,7 @@ const _default: OverridableFrontendPlugin< type?: EntityCardType; }; }>; - 'entity-card:api-docs/providing-components': ExtensionDefinition<{ + 'entity-card:api-docs/providing-components': OverridableExtensionDefinition<{ kind: 'entity-card'; name: 'providing-components'; config: { @@ -324,7 +324,7 @@ const _default: OverridableFrontendPlugin< type?: EntityCardType; }; }>; - 'entity-content:api-docs/apis': ExtensionDefinition<{ + 'entity-content:api-docs/apis': OverridableExtensionDefinition<{ kind: 'entity-content'; name: 'apis'; config: { @@ -384,7 +384,7 @@ const _default: OverridableFrontendPlugin< filter?: string | EntityPredicate | ((entity: Entity) => boolean); }; }>; - 'entity-content:api-docs/definition': ExtensionDefinition<{ + 'entity-content:api-docs/definition': OverridableExtensionDefinition<{ kind: 'entity-content'; name: 'definition'; config: { @@ -444,7 +444,7 @@ const _default: OverridableFrontendPlugin< filter?: string | EntityPredicate | ((entity: Entity) => boolean); }; }>; - 'nav-item:api-docs': ExtensionDefinition<{ + 'nav-item:api-docs': OverridableExtensionDefinition<{ kind: 'nav-item'; name: undefined; config: {}; @@ -465,7 +465,7 @@ const _default: OverridableFrontendPlugin< routeRef: RouteRef; }; }>; - 'page:api-docs': ExtensionDefinition<{ + 'page:api-docs': OverridableExtensionDefinition<{ config: { initiallySelectedFilter: 'all' | 'owned' | 'starred' | undefined; } & { diff --git a/plugins/app-visualizer/report.api.md b/plugins/app-visualizer/report.api.md index 1283df5486..f3b7e6ae61 100644 --- a/plugins/app-visualizer/report.api.md +++ b/plugins/app-visualizer/report.api.md @@ -5,9 +5,9 @@ ```ts import { AnyRouteRefParams } from '@backstage/frontend-plugin-api'; import { ExtensionDataRef } from '@backstage/frontend-plugin-api'; -import { ExtensionDefinition } from '@backstage/frontend-plugin-api'; import { IconComponent } from '@backstage/core-plugin-api'; import { JSX as JSX_2 } from 'react'; +import { OverridableExtensionDefinition } from '@backstage/frontend-plugin-api'; import { OverridableFrontendPlugin } from '@backstage/frontend-plugin-api'; import { RouteRef } from '@backstage/frontend-plugin-api'; @@ -16,7 +16,7 @@ const visualizerPlugin: OverridableFrontendPlugin< {}, {}, { - 'nav-item:app-visualizer': ExtensionDefinition<{ + 'nav-item:app-visualizer': OverridableExtensionDefinition<{ kind: 'nav-item'; name: undefined; config: {}; @@ -37,7 +37,7 @@ const visualizerPlugin: OverridableFrontendPlugin< routeRef: RouteRef; }; }>; - 'page:app-visualizer': ExtensionDefinition<{ + 'page:app-visualizer': OverridableExtensionDefinition<{ kind: 'page'; name: undefined; config: { diff --git a/plugins/app/report.api.md b/plugins/app/report.api.md index 595cc9bc19..bd8c05bfe4 100644 --- a/plugins/app/report.api.md +++ b/plugins/app/report.api.md @@ -12,12 +12,12 @@ import { ComponentType } from 'react'; import { ConfigurableExtensionDataRef } from '@backstage/frontend-plugin-api'; import { ExtensionBlueprintParams } from '@backstage/frontend-plugin-api'; import { ExtensionDataRef } from '@backstage/frontend-plugin-api'; -import { ExtensionDefinition } from '@backstage/frontend-plugin-api'; import { ExtensionInput } from '@backstage/frontend-plugin-api'; import { IconComponent } from '@backstage/core-plugin-api'; import { IconComponent as IconComponent_2 } from '@backstage/frontend-plugin-api'; import { JSX as JSX_2 } from 'react'; import { NavContentComponent } from '@backstage/frontend-plugin-api'; +import { OverridableExtensionDefinition } from '@backstage/frontend-plugin-api'; import { OverridableFrontendPlugin } from '@backstage/frontend-plugin-api'; import { ReactNode } from 'react'; import { RouteRef } from '@backstage/frontend-plugin-api'; @@ -31,7 +31,7 @@ const appPlugin: OverridableFrontendPlugin< {}, {}, { - app: ExtensionDefinition<{ + app: OverridableExtensionDefinition<{ config: {}; configInput: {}; output: ExtensionDataRef; @@ -48,7 +48,7 @@ const appPlugin: OverridableFrontendPlugin< kind: undefined; name: undefined; }>; - 'app/layout': ExtensionDefinition<{ + 'app/layout': OverridableExtensionDefinition<{ config: {}; configInput: {}; output: ExtensionDataRef; @@ -72,7 +72,7 @@ const appPlugin: OverridableFrontendPlugin< kind: undefined; name: 'layout'; }>; - 'app/nav': ExtensionDefinition<{ + 'app/nav': OverridableExtensionDefinition<{ config: {}; configInput: {}; output: ExtensionDataRef; @@ -108,7 +108,7 @@ const appPlugin: OverridableFrontendPlugin< kind: undefined; name: 'nav'; }>; - 'app/root': ExtensionDefinition<{ + 'app/root': OverridableExtensionDefinition<{ config: {}; configInput: {}; output: ExtensionDataRef; @@ -165,7 +165,7 @@ const appPlugin: OverridableFrontendPlugin< kind: undefined; name: 'root'; }>; - 'app/routes': ExtensionDefinition<{ + 'app/routes': OverridableExtensionDefinition<{ config: {}; configInput: {}; output: ExtensionDataRef; @@ -190,7 +190,7 @@ const appPlugin: OverridableFrontendPlugin< kind: undefined; name: 'routes'; }>; - 'api:app/alert': ExtensionDefinition<{ + 'api:app/alert': OverridableExtensionDefinition<{ kind: 'api'; name: 'alert'; config: {}; @@ -205,7 +205,7 @@ const appPlugin: OverridableFrontendPlugin< params: ApiFactory, ) => ExtensionBlueprintParams; }>; - 'api:app/analytics': ExtensionDefinition<{ + 'api:app/analytics': OverridableExtensionDefinition<{ config: {}; configInput: {}; output: ExtensionDataRef; @@ -232,7 +232,7 @@ const appPlugin: OverridableFrontendPlugin< params: ApiFactory, ) => ExtensionBlueprintParams; }>; - 'api:app/app-language': ExtensionDefinition<{ + 'api:app/app-language': OverridableExtensionDefinition<{ kind: 'api'; name: 'app-language'; config: {}; @@ -247,7 +247,7 @@ const appPlugin: OverridableFrontendPlugin< params: ApiFactory, ) => ExtensionBlueprintParams; }>; - 'api:app/app-theme': ExtensionDefinition<{ + 'api:app/app-theme': OverridableExtensionDefinition<{ config: {}; configInput: {}; output: ExtensionDataRef; @@ -270,7 +270,7 @@ const appPlugin: OverridableFrontendPlugin< params: ApiFactory, ) => ExtensionBlueprintParams; }>; - 'api:app/atlassian-auth': ExtensionDefinition<{ + 'api:app/atlassian-auth': OverridableExtensionDefinition<{ kind: 'api'; name: 'atlassian-auth'; config: {}; @@ -285,7 +285,7 @@ const appPlugin: OverridableFrontendPlugin< params: ApiFactory, ) => ExtensionBlueprintParams; }>; - 'api:app/bitbucket-auth': ExtensionDefinition<{ + 'api:app/bitbucket-auth': OverridableExtensionDefinition<{ kind: 'api'; name: 'bitbucket-auth'; config: {}; @@ -300,7 +300,7 @@ const appPlugin: OverridableFrontendPlugin< params: ApiFactory, ) => ExtensionBlueprintParams; }>; - 'api:app/bitbucket-server-auth': ExtensionDefinition<{ + 'api:app/bitbucket-server-auth': OverridableExtensionDefinition<{ kind: 'api'; name: 'bitbucket-server-auth'; config: {}; @@ -315,7 +315,7 @@ const appPlugin: OverridableFrontendPlugin< params: ApiFactory, ) => ExtensionBlueprintParams; }>; - 'api:app/components': ExtensionDefinition<{ + 'api:app/components': OverridableExtensionDefinition<{ kind: 'api'; name: 'components'; config: {}; @@ -330,7 +330,7 @@ const appPlugin: OverridableFrontendPlugin< params: ApiFactory, ) => ExtensionBlueprintParams; }>; - 'api:app/dialog': ExtensionDefinition<{ + 'api:app/dialog': OverridableExtensionDefinition<{ kind: 'api'; name: 'dialog'; config: {}; @@ -345,7 +345,7 @@ const appPlugin: OverridableFrontendPlugin< params: ApiFactory, ) => ExtensionBlueprintParams; }>; - 'api:app/discovery': ExtensionDefinition<{ + 'api:app/discovery': OverridableExtensionDefinition<{ kind: 'api'; name: 'discovery'; config: {}; @@ -360,7 +360,7 @@ const appPlugin: OverridableFrontendPlugin< params: ApiFactory, ) => ExtensionBlueprintParams; }>; - 'api:app/error': ExtensionDefinition<{ + 'api:app/error': OverridableExtensionDefinition<{ kind: 'api'; name: 'error'; config: {}; @@ -375,7 +375,7 @@ const appPlugin: OverridableFrontendPlugin< params: ApiFactory, ) => ExtensionBlueprintParams; }>; - 'api:app/feature-flags': ExtensionDefinition<{ + 'api:app/feature-flags': OverridableExtensionDefinition<{ kind: 'api'; name: 'feature-flags'; config: {}; @@ -390,7 +390,7 @@ const appPlugin: OverridableFrontendPlugin< params: ApiFactory, ) => ExtensionBlueprintParams; }>; - 'api:app/fetch': ExtensionDefinition<{ + 'api:app/fetch': OverridableExtensionDefinition<{ kind: 'api'; name: 'fetch'; config: {}; @@ -405,7 +405,7 @@ const appPlugin: OverridableFrontendPlugin< params: ApiFactory, ) => ExtensionBlueprintParams; }>; - 'api:app/github-auth': ExtensionDefinition<{ + 'api:app/github-auth': OverridableExtensionDefinition<{ kind: 'api'; name: 'github-auth'; config: {}; @@ -420,7 +420,7 @@ const appPlugin: OverridableFrontendPlugin< params: ApiFactory, ) => ExtensionBlueprintParams; }>; - 'api:app/gitlab-auth': ExtensionDefinition<{ + 'api:app/gitlab-auth': OverridableExtensionDefinition<{ kind: 'api'; name: 'gitlab-auth'; config: {}; @@ -435,7 +435,7 @@ const appPlugin: OverridableFrontendPlugin< params: ApiFactory, ) => ExtensionBlueprintParams; }>; - 'api:app/google-auth': ExtensionDefinition<{ + 'api:app/google-auth': OverridableExtensionDefinition<{ kind: 'api'; name: 'google-auth'; config: {}; @@ -450,7 +450,7 @@ const appPlugin: OverridableFrontendPlugin< params: ApiFactory, ) => ExtensionBlueprintParams; }>; - 'api:app/icons': ExtensionDefinition<{ + 'api:app/icons': OverridableExtensionDefinition<{ config: {}; configInput: {}; output: ExtensionDataRef; @@ -479,7 +479,7 @@ const appPlugin: OverridableFrontendPlugin< params: ApiFactory, ) => ExtensionBlueprintParams; }>; - 'api:app/microsoft-auth': ExtensionDefinition<{ + 'api:app/microsoft-auth': OverridableExtensionDefinition<{ kind: 'api'; name: 'microsoft-auth'; config: {}; @@ -494,7 +494,7 @@ const appPlugin: OverridableFrontendPlugin< params: ApiFactory, ) => ExtensionBlueprintParams; }>; - 'api:app/oauth-request': ExtensionDefinition<{ + 'api:app/oauth-request': OverridableExtensionDefinition<{ kind: 'api'; name: 'oauth-request'; config: {}; @@ -509,7 +509,7 @@ const appPlugin: OverridableFrontendPlugin< params: ApiFactory, ) => ExtensionBlueprintParams; }>; - 'api:app/okta-auth': ExtensionDefinition<{ + 'api:app/okta-auth': OverridableExtensionDefinition<{ kind: 'api'; name: 'okta-auth'; config: {}; @@ -524,7 +524,7 @@ const appPlugin: OverridableFrontendPlugin< params: ApiFactory, ) => ExtensionBlueprintParams; }>; - 'api:app/onelogin-auth': ExtensionDefinition<{ + 'api:app/onelogin-auth': OverridableExtensionDefinition<{ kind: 'api'; name: 'onelogin-auth'; config: {}; @@ -539,7 +539,7 @@ const appPlugin: OverridableFrontendPlugin< params: ApiFactory, ) => ExtensionBlueprintParams; }>; - 'api:app/openshift-auth': ExtensionDefinition<{ + 'api:app/openshift-auth': OverridableExtensionDefinition<{ kind: 'api'; name: 'openshift-auth'; config: {}; @@ -554,7 +554,7 @@ const appPlugin: OverridableFrontendPlugin< params: ApiFactory, ) => ExtensionBlueprintParams; }>; - 'api:app/permission': ExtensionDefinition<{ + 'api:app/permission': OverridableExtensionDefinition<{ kind: 'api'; name: 'permission'; config: {}; @@ -569,7 +569,7 @@ const appPlugin: OverridableFrontendPlugin< params: ApiFactory, ) => ExtensionBlueprintParams; }>; - 'api:app/scm-auth': ExtensionDefinition<{ + 'api:app/scm-auth': OverridableExtensionDefinition<{ kind: 'api'; name: 'scm-auth'; config: {}; @@ -584,7 +584,7 @@ const appPlugin: OverridableFrontendPlugin< params: ApiFactory, ) => ExtensionBlueprintParams; }>; - 'api:app/scm-integrations': ExtensionDefinition<{ + 'api:app/scm-integrations': OverridableExtensionDefinition<{ kind: 'api'; name: 'scm-integrations'; config: {}; @@ -599,7 +599,7 @@ const appPlugin: OverridableFrontendPlugin< params: ApiFactory, ) => ExtensionBlueprintParams; }>; - 'api:app/storage': ExtensionDefinition<{ + 'api:app/storage': OverridableExtensionDefinition<{ kind: 'api'; name: 'storage'; config: {}; @@ -614,7 +614,7 @@ const appPlugin: OverridableFrontendPlugin< params: ApiFactory, ) => ExtensionBlueprintParams; }>; - 'api:app/swappable-components': ExtensionDefinition<{ + 'api:app/swappable-components': OverridableExtensionDefinition<{ config: {}; configInput: {}; output: ExtensionDataRef; @@ -646,7 +646,7 @@ const appPlugin: OverridableFrontendPlugin< params: ApiFactory, ) => ExtensionBlueprintParams; }>; - 'api:app/translations': ExtensionDefinition<{ + 'api:app/translations': OverridableExtensionDefinition<{ config: {}; configInput: {}; output: ExtensionDataRef; @@ -680,7 +680,7 @@ const appPlugin: OverridableFrontendPlugin< params: ApiFactory, ) => ExtensionBlueprintParams; }>; - 'api:app/vmware-cloud-auth': ExtensionDefinition<{ + 'api:app/vmware-cloud-auth': OverridableExtensionDefinition<{ kind: 'api'; name: 'vmware-cloud-auth'; config: {}; @@ -695,7 +695,7 @@ const appPlugin: OverridableFrontendPlugin< params: ApiFactory, ) => ExtensionBlueprintParams; }>; - 'app-root-element:app/alert-display': ExtensionDefinition<{ + 'app-root-element:app/alert-display': OverridableExtensionDefinition<{ config: { transientTimeoutMs: number; anchorOrigin: { @@ -728,7 +728,7 @@ const appPlugin: OverridableFrontendPlugin< element: JSX.Element; }; }>; - 'app-root-element:app/dialog-display': ExtensionDefinition<{ + 'app-root-element:app/dialog-display': OverridableExtensionDefinition<{ config: {}; configInput: {}; output: ExtensionDataRef; @@ -747,7 +747,7 @@ const appPlugin: OverridableFrontendPlugin< element: JSX.Element; }; }>; - 'app-root-element:app/oauth-request-dialog': ExtensionDefinition<{ + 'app-root-element:app/oauth-request-dialog': OverridableExtensionDefinition<{ kind: 'app-root-element'; name: 'oauth-request-dialog'; config: {}; @@ -758,7 +758,7 @@ const appPlugin: OverridableFrontendPlugin< element: JSX.Element; }; }>; - 'component:app/core-error-display': ExtensionDefinition<{ + 'component:app/core-error-display': OverridableExtensionDefinition<{ kind: 'component'; name: 'core-error-display'; config: {}; @@ -814,7 +814,7 @@ const appPlugin: OverridableFrontendPlugin< : never; }>; }>; - 'component:app/core-not-found-error-page': ExtensionDefinition<{ + 'component:app/core-not-found-error-page': OverridableExtensionDefinition<{ kind: 'component'; name: 'core-not-found-error-page'; config: {}; @@ -870,7 +870,7 @@ const appPlugin: OverridableFrontendPlugin< : never; }>; }>; - 'component:app/core-progress': ExtensionDefinition<{ + 'component:app/core-progress': OverridableExtensionDefinition<{ kind: 'component'; name: 'core-progress'; config: {}; @@ -926,7 +926,7 @@ const appPlugin: OverridableFrontendPlugin< : never; }>; }>; - 'sign-in-page:app': ExtensionDefinition<{ + 'sign-in-page:app': OverridableExtensionDefinition<{ kind: 'sign-in-page'; name: undefined; config: {}; @@ -941,7 +941,7 @@ const appPlugin: OverridableFrontendPlugin< loader: () => Promise>; }; }>; - 'theme:app/dark': ExtensionDefinition<{ + 'theme:app/dark': OverridableExtensionDefinition<{ kind: 'theme'; name: 'dark'; config: {}; @@ -952,7 +952,7 @@ const appPlugin: OverridableFrontendPlugin< theme: AppTheme; }; }>; - 'theme:app/light': ExtensionDefinition<{ + 'theme:app/light': OverridableExtensionDefinition<{ kind: 'theme'; name: 'light'; config: {}; diff --git a/plugins/auth/report.api.md b/plugins/auth/report.api.md index 4c7d2d4a11..1d346a9ce4 100644 --- a/plugins/auth/report.api.md +++ b/plugins/auth/report.api.md @@ -5,8 +5,8 @@ ```ts import { AnyRouteRefParams } from '@backstage/frontend-plugin-api'; import { ExtensionDataRef } from '@backstage/frontend-plugin-api'; -import { ExtensionDefinition } from '@backstage/frontend-plugin-api'; import { JSX as JSX_2 } from 'react'; +import { OverridableExtensionDefinition } from '@backstage/frontend-plugin-api'; import { OverridableFrontendPlugin } from '@backstage/frontend-plugin-api'; import { RouteRef } from '@backstage/frontend-plugin-api'; @@ -17,7 +17,7 @@ const _default: OverridableFrontendPlugin< }, {}, { - 'page:auth': ExtensionDefinition<{ + 'page:auth': OverridableExtensionDefinition<{ kind: 'page'; name: undefined; config: { diff --git a/plugins/catalog-graph/report-alpha.api.md b/plugins/catalog-graph/report-alpha.api.md index 0d06beacc4..285b8b3119 100644 --- a/plugins/catalog-graph/report-alpha.api.md +++ b/plugins/catalog-graph/report-alpha.api.md @@ -11,10 +11,10 @@ import { EntityCardType } from '@backstage/plugin-catalog-react/alpha'; import { EntityPredicate } from '@backstage/plugin-catalog-react/alpha'; import { ExtensionBlueprintParams } from '@backstage/frontend-plugin-api'; import { ExtensionDataRef } from '@backstage/frontend-plugin-api'; -import { ExtensionDefinition } from '@backstage/frontend-plugin-api'; import { ExtensionInput } from '@backstage/frontend-plugin-api'; import { ExternalRouteRef } from '@backstage/frontend-plugin-api'; import { JSX as JSX_2 } from 'react'; +import { OverridableExtensionDefinition } from '@backstage/frontend-plugin-api'; import { OverridableFrontendPlugin } from '@backstage/frontend-plugin-api'; import { RouteRef } from '@backstage/frontend-plugin-api'; import { TranslationRef } from '@backstage/frontend-plugin-api'; @@ -60,7 +60,7 @@ const _default: OverridableFrontendPlugin< }>; }, { - 'api:catalog-graph': ExtensionDefinition<{ + 'api:catalog-graph': OverridableExtensionDefinition<{ kind: 'api'; name: undefined; config: {}; @@ -75,7 +75,7 @@ const _default: OverridableFrontendPlugin< params: ApiFactory, ) => ExtensionBlueprintParams; }>; - 'entity-card:catalog-graph/relations': ExtensionDefinition<{ + 'entity-card:catalog-graph/relations': OverridableExtensionDefinition<{ config: { kinds: string[] | undefined; relations: string[] | undefined; @@ -148,7 +148,7 @@ const _default: OverridableFrontendPlugin< type?: EntityCardType; }; }>; - 'page:catalog-graph': ExtensionDefinition<{ + 'page:catalog-graph': OverridableExtensionDefinition<{ config: { selectedKinds: string[] | undefined; selectedRelations: string[] | undefined; diff --git a/plugins/catalog-import/report-alpha.api.md b/plugins/catalog-import/report-alpha.api.md index 051e38cd19..5dfa90388a 100644 --- a/plugins/catalog-import/report-alpha.api.md +++ b/plugins/catalog-import/report-alpha.api.md @@ -8,8 +8,8 @@ import { AnyRouteRefParams } from '@backstage/frontend-plugin-api'; import { ApiFactory } from '@backstage/core-plugin-api'; import { ExtensionBlueprintParams } from '@backstage/frontend-plugin-api'; import { ExtensionDataRef } from '@backstage/frontend-plugin-api'; -import { ExtensionDefinition } from '@backstage/frontend-plugin-api'; import { JSX as JSX_2 } from 'react'; +import { OverridableExtensionDefinition } from '@backstage/frontend-plugin-api'; import { OverridableFrontendPlugin } from '@backstage/frontend-plugin-api'; import { RouteRef } from '@backstage/frontend-plugin-api'; import { TranslationRef } from '@backstage/core-plugin-api/alpha'; @@ -94,7 +94,7 @@ const _default: OverridableFrontendPlugin< }, {}, { - 'api:catalog-import': ExtensionDefinition<{ + 'api:catalog-import': OverridableExtensionDefinition<{ kind: 'api'; name: undefined; config: {}; @@ -109,7 +109,7 @@ const _default: OverridableFrontendPlugin< params: ApiFactory, ) => ExtensionBlueprintParams; }>; - 'page:catalog-import': ExtensionDefinition<{ + 'page:catalog-import': OverridableExtensionDefinition<{ kind: 'page'; name: undefined; config: { diff --git a/plugins/catalog-unprocessed-entities/report-alpha.api.md b/plugins/catalog-unprocessed-entities/report-alpha.api.md index 17d28ee165..5518f6d273 100644 --- a/plugins/catalog-unprocessed-entities/report-alpha.api.md +++ b/plugins/catalog-unprocessed-entities/report-alpha.api.md @@ -8,9 +8,9 @@ import { AnyRouteRefParams } from '@backstage/frontend-plugin-api'; import { ApiFactory } from '@backstage/frontend-plugin-api'; import { ExtensionBlueprintParams } from '@backstage/frontend-plugin-api'; import { ExtensionDataRef } from '@backstage/frontend-plugin-api'; -import { ExtensionDefinition } from '@backstage/frontend-plugin-api'; import { IconComponent } from '@backstage/core-plugin-api'; import { JSX as JSX_2 } from 'react'; +import { OverridableExtensionDefinition } from '@backstage/frontend-plugin-api'; import { OverridableFrontendPlugin } from '@backstage/frontend-plugin-api'; import { RouteRef } from '@backstage/frontend-plugin-api'; @@ -21,7 +21,7 @@ const _default: OverridableFrontendPlugin< }, {}, { - 'api:catalog-unprocessed-entities': ExtensionDefinition<{ + 'api:catalog-unprocessed-entities': OverridableExtensionDefinition<{ kind: 'api'; name: undefined; config: {}; @@ -36,7 +36,7 @@ const _default: OverridableFrontendPlugin< params: ApiFactory, ) => ExtensionBlueprintParams; }>; - 'nav-item:catalog-unprocessed-entities': ExtensionDefinition<{ + 'nav-item:catalog-unprocessed-entities': OverridableExtensionDefinition<{ kind: 'nav-item'; name: undefined; config: {}; @@ -57,7 +57,7 @@ const _default: OverridableFrontendPlugin< routeRef: RouteRef; }; }>; - 'page:catalog-unprocessed-entities': ExtensionDefinition<{ + 'page:catalog-unprocessed-entities': OverridableExtensionDefinition<{ kind: 'page'; name: undefined; config: { diff --git a/plugins/catalog/report-alpha.api.md b/plugins/catalog/report-alpha.api.md index fee768978d..6f63f50b0b 100644 --- a/plugins/catalog/report-alpha.api.md +++ b/plugins/catalog/report-alpha.api.md @@ -15,12 +15,12 @@ import { EntityContextMenuItemParams } from '@backstage/plugin-catalog-react/alp import { EntityPredicate } from '@backstage/plugin-catalog-react/alpha'; import { ExtensionBlueprintParams } from '@backstage/frontend-plugin-api'; import { ExtensionDataRef } from '@backstage/frontend-plugin-api'; -import { ExtensionDefinition } from '@backstage/frontend-plugin-api'; import { ExtensionInput } from '@backstage/frontend-plugin-api'; import { ExternalRouteRef } from '@backstage/frontend-plugin-api'; import { IconComponent } from '@backstage/core-plugin-api'; import { IconLinkVerticalProps } from '@backstage/core-components'; import { JSX as JSX_2 } from 'react'; +import { OverridableExtensionDefinition } from '@backstage/frontend-plugin-api'; import { OverridableFrontendPlugin } from '@backstage/frontend-plugin-api'; import { RouteRef } from '@backstage/frontend-plugin-api'; import { SearchResultItemExtensionComponent } from '@backstage/plugin-search-react/alpha'; @@ -137,7 +137,7 @@ const _default: OverridableFrontendPlugin< unregisterRedirect: ExternalRouteRef; }, { - 'api:catalog': ExtensionDefinition<{ + 'api:catalog': OverridableExtensionDefinition<{ kind: 'api'; name: undefined; config: {}; @@ -152,7 +152,7 @@ const _default: OverridableFrontendPlugin< params: ApiFactory, ) => ExtensionBlueprintParams; }>; - 'api:catalog/entity-presentation': ExtensionDefinition<{ + 'api:catalog/entity-presentation': OverridableExtensionDefinition<{ kind: 'api'; name: 'entity-presentation'; config: {}; @@ -167,7 +167,7 @@ const _default: OverridableFrontendPlugin< params: ApiFactory, ) => ExtensionBlueprintParams; }>; - 'api:catalog/starred-entities': ExtensionDefinition<{ + 'api:catalog/starred-entities': OverridableExtensionDefinition<{ kind: 'api'; name: 'starred-entities'; config: {}; @@ -182,7 +182,7 @@ const _default: OverridableFrontendPlugin< params: ApiFactory, ) => ExtensionBlueprintParams; }>; - 'catalog-filter:catalog/kind': ExtensionDefinition<{ + 'catalog-filter:catalog/kind': OverridableExtensionDefinition<{ config: { initialFilter: string; }; @@ -205,7 +205,7 @@ const _default: OverridableFrontendPlugin< loader: () => Promise; }; }>; - 'catalog-filter:catalog/lifecycle': ExtensionDefinition<{ + 'catalog-filter:catalog/lifecycle': OverridableExtensionDefinition<{ kind: 'catalog-filter'; name: 'lifecycle'; config: {}; @@ -216,7 +216,7 @@ const _default: OverridableFrontendPlugin< loader: () => Promise; }; }>; - 'catalog-filter:catalog/list': ExtensionDefinition<{ + 'catalog-filter:catalog/list': OverridableExtensionDefinition<{ config: { initialFilter: 'all' | 'owned' | 'starred'; }; @@ -239,7 +239,7 @@ const _default: OverridableFrontendPlugin< loader: () => Promise; }; }>; - 'catalog-filter:catalog/mode': ExtensionDefinition<{ + 'catalog-filter:catalog/mode': OverridableExtensionDefinition<{ config: { mode: 'all' | 'owners-only' | undefined; }; @@ -262,7 +262,7 @@ const _default: OverridableFrontendPlugin< loader: () => Promise; }; }>; - 'catalog-filter:catalog/namespace': ExtensionDefinition<{ + 'catalog-filter:catalog/namespace': OverridableExtensionDefinition<{ kind: 'catalog-filter'; name: 'namespace'; config: {}; @@ -273,7 +273,7 @@ const _default: OverridableFrontendPlugin< loader: () => Promise; }; }>; - 'catalog-filter:catalog/processing-status': ExtensionDefinition<{ + 'catalog-filter:catalog/processing-status': OverridableExtensionDefinition<{ kind: 'catalog-filter'; name: 'processing-status'; config: {}; @@ -284,7 +284,7 @@ const _default: OverridableFrontendPlugin< loader: () => Promise; }; }>; - 'catalog-filter:catalog/tag': ExtensionDefinition<{ + 'catalog-filter:catalog/tag': OverridableExtensionDefinition<{ kind: 'catalog-filter'; name: 'tag'; config: {}; @@ -295,7 +295,7 @@ const _default: OverridableFrontendPlugin< loader: () => Promise; }; }>; - 'catalog-filter:catalog/type': ExtensionDefinition<{ + 'catalog-filter:catalog/type': OverridableExtensionDefinition<{ kind: 'catalog-filter'; name: 'type'; config: {}; @@ -306,7 +306,7 @@ const _default: OverridableFrontendPlugin< loader: () => Promise; }; }>; - 'entity-card:catalog/about': ExtensionDefinition<{ + 'entity-card:catalog/about': OverridableExtensionDefinition<{ config: { filter: EntityPredicate | undefined; type: 'content' | 'summary' | 'info' | undefined; @@ -373,7 +373,7 @@ const _default: OverridableFrontendPlugin< type?: EntityCardType; }; }>; - 'entity-card:catalog/depends-on-components': ExtensionDefinition<{ + 'entity-card:catalog/depends-on-components': OverridableExtensionDefinition<{ kind: 'entity-card'; name: 'depends-on-components'; config: { @@ -414,7 +414,7 @@ const _default: OverridableFrontendPlugin< type?: EntityCardType; }; }>; - 'entity-card:catalog/depends-on-resources': ExtensionDefinition<{ + 'entity-card:catalog/depends-on-resources': OverridableExtensionDefinition<{ kind: 'entity-card'; name: 'depends-on-resources'; config: { @@ -455,7 +455,7 @@ const _default: OverridableFrontendPlugin< type?: EntityCardType; }; }>; - 'entity-card:catalog/has-components': ExtensionDefinition<{ + 'entity-card:catalog/has-components': OverridableExtensionDefinition<{ kind: 'entity-card'; name: 'has-components'; config: { @@ -496,7 +496,7 @@ const _default: OverridableFrontendPlugin< type?: EntityCardType; }; }>; - 'entity-card:catalog/has-resources': ExtensionDefinition<{ + 'entity-card:catalog/has-resources': OverridableExtensionDefinition<{ kind: 'entity-card'; name: 'has-resources'; config: { @@ -537,7 +537,7 @@ const _default: OverridableFrontendPlugin< type?: EntityCardType; }; }>; - 'entity-card:catalog/has-subcomponents': ExtensionDefinition<{ + 'entity-card:catalog/has-subcomponents': OverridableExtensionDefinition<{ kind: 'entity-card'; name: 'has-subcomponents'; config: { @@ -578,7 +578,7 @@ const _default: OverridableFrontendPlugin< type?: EntityCardType; }; }>; - 'entity-card:catalog/has-subdomains': ExtensionDefinition<{ + 'entity-card:catalog/has-subdomains': OverridableExtensionDefinition<{ kind: 'entity-card'; name: 'has-subdomains'; config: { @@ -619,7 +619,7 @@ const _default: OverridableFrontendPlugin< type?: EntityCardType; }; }>; - 'entity-card:catalog/has-systems': ExtensionDefinition<{ + 'entity-card:catalog/has-systems': OverridableExtensionDefinition<{ kind: 'entity-card'; name: 'has-systems'; config: { @@ -660,7 +660,7 @@ const _default: OverridableFrontendPlugin< type?: EntityCardType; }; }>; - 'entity-card:catalog/labels': ExtensionDefinition<{ + 'entity-card:catalog/labels': OverridableExtensionDefinition<{ kind: 'entity-card'; name: 'labels'; config: { @@ -701,7 +701,7 @@ const _default: OverridableFrontendPlugin< type?: EntityCardType; }; }>; - 'entity-card:catalog/links': ExtensionDefinition<{ + 'entity-card:catalog/links': OverridableExtensionDefinition<{ kind: 'entity-card'; name: 'links'; config: { @@ -742,7 +742,7 @@ const _default: OverridableFrontendPlugin< type?: EntityCardType; }; }>; - 'entity-content:catalog/overview': ExtensionDefinition<{ + 'entity-content:catalog/overview': OverridableExtensionDefinition<{ config: { path: string | undefined; title: string | undefined; @@ -856,7 +856,7 @@ const _default: OverridableFrontendPlugin< filter?: string | EntityPredicate | ((entity: Entity) => boolean); }; }>; - 'entity-context-menu-item:catalog/copy-entity-url': ExtensionDefinition<{ + 'entity-context-menu-item:catalog/copy-entity-url': OverridableExtensionDefinition<{ kind: 'entity-context-menu-item'; name: 'copy-entity-url'; config: { @@ -877,7 +877,7 @@ const _default: OverridableFrontendPlugin< inputs: {}; params: EntityContextMenuItemParams; }>; - 'entity-context-menu-item:catalog/inspect-entity': ExtensionDefinition<{ + 'entity-context-menu-item:catalog/inspect-entity': OverridableExtensionDefinition<{ kind: 'entity-context-menu-item'; name: 'inspect-entity'; config: { @@ -898,7 +898,7 @@ const _default: OverridableFrontendPlugin< inputs: {}; params: EntityContextMenuItemParams; }>; - 'entity-context-menu-item:catalog/unregister-entity': ExtensionDefinition<{ + 'entity-context-menu-item:catalog/unregister-entity': OverridableExtensionDefinition<{ kind: 'entity-context-menu-item'; name: 'unregister-entity'; config: { @@ -919,7 +919,7 @@ const _default: OverridableFrontendPlugin< inputs: {}; params: EntityContextMenuItemParams; }>; - 'entity-icon-link:catalog/view-source': ExtensionDefinition<{ + 'entity-icon-link:catalog/view-source': OverridableExtensionDefinition<{ kind: 'entity-icon-link'; name: 'view-source'; config: { @@ -958,7 +958,7 @@ const _default: OverridableFrontendPlugin< filter?: EntityPredicate | ((entity: Entity) => boolean); }; }>; - 'nav-item:catalog': ExtensionDefinition<{ + 'nav-item:catalog': OverridableExtensionDefinition<{ kind: 'nav-item'; name: undefined; config: {}; @@ -979,7 +979,7 @@ const _default: OverridableFrontendPlugin< routeRef: RouteRef; }; }>; - 'page:catalog': ExtensionDefinition<{ + 'page:catalog': OverridableExtensionDefinition<{ config: { pagination: | boolean @@ -1031,7 +1031,7 @@ const _default: OverridableFrontendPlugin< routeRef?: RouteRef; }; }>; - 'page:catalog/entity': ExtensionDefinition<{ + 'page:catalog/entity': OverridableExtensionDefinition<{ config: { groups: | Record< @@ -1152,7 +1152,7 @@ const _default: OverridableFrontendPlugin< routeRef?: RouteRef; }; }>; - 'search-result-list-item:catalog': ExtensionDefinition<{ + 'search-result-list-item:catalog': OverridableExtensionDefinition<{ kind: 'search-result-list-item'; name: undefined; config: { diff --git a/plugins/devtools/report-alpha.api.md b/plugins/devtools/report-alpha.api.md index 7696267c35..c114924f4a 100644 --- a/plugins/devtools/report-alpha.api.md +++ b/plugins/devtools/report-alpha.api.md @@ -8,9 +8,9 @@ import { AnyRouteRefParams } from '@backstage/frontend-plugin-api'; import { ApiFactory } from '@backstage/frontend-plugin-api'; import { ExtensionBlueprintParams } from '@backstage/frontend-plugin-api'; import { ExtensionDataRef } from '@backstage/frontend-plugin-api'; -import { ExtensionDefinition } from '@backstage/frontend-plugin-api'; import { IconComponent } from '@backstage/core-plugin-api'; import { JSX as JSX_2 } from 'react'; +import { OverridableExtensionDefinition } from '@backstage/frontend-plugin-api'; import { OverridableFrontendPlugin } from '@backstage/frontend-plugin-api'; import { RouteRef } from '@backstage/frontend-plugin-api'; @@ -21,7 +21,7 @@ const _default: OverridableFrontendPlugin< }, {}, { - 'api:devtools': ExtensionDefinition<{ + 'api:devtools': OverridableExtensionDefinition<{ kind: 'api'; name: undefined; config: {}; @@ -36,7 +36,7 @@ const _default: OverridableFrontendPlugin< params: ApiFactory, ) => ExtensionBlueprintParams; }>; - 'nav-item:devtools': ExtensionDefinition<{ + 'nav-item:devtools': OverridableExtensionDefinition<{ kind: 'nav-item'; name: undefined; config: {}; @@ -57,7 +57,7 @@ const _default: OverridableFrontendPlugin< routeRef: RouteRef; }; }>; - 'page:devtools': ExtensionDefinition<{ + 'page:devtools': OverridableExtensionDefinition<{ kind: 'page'; name: undefined; config: { diff --git a/plugins/home/report-alpha.api.md b/plugins/home/report-alpha.api.md index 8dbbb99b5d..58ceef751d 100644 --- a/plugins/home/report-alpha.api.md +++ b/plugins/home/report-alpha.api.md @@ -9,9 +9,9 @@ import { ApiFactory } from '@backstage/frontend-plugin-api'; import { ConfigurableExtensionDataRef } from '@backstage/frontend-plugin-api'; import { ExtensionBlueprintParams } from '@backstage/frontend-plugin-api'; import { ExtensionDataRef } from '@backstage/frontend-plugin-api'; -import { ExtensionDefinition } from '@backstage/frontend-plugin-api'; import { ExtensionInput } from '@backstage/frontend-plugin-api'; import { JSX as JSX_2 } from 'react'; +import { OverridableExtensionDefinition } from '@backstage/frontend-plugin-api'; import { OverridableFrontendPlugin } from '@backstage/frontend-plugin-api'; import { RouteRef } from '@backstage/frontend-plugin-api'; import { TranslationRef } from '@backstage/frontend-plugin-api'; @@ -23,7 +23,7 @@ const _default: OverridableFrontendPlugin< }, {}, { - 'api:home/visits': ExtensionDefinition<{ + 'api:home/visits': OverridableExtensionDefinition<{ kind: 'api'; name: 'visits'; config: {}; @@ -38,7 +38,7 @@ const _default: OverridableFrontendPlugin< params: ApiFactory, ) => ExtensionBlueprintParams; }>; - 'app-root-element:home/visit-listener': ExtensionDefinition<{ + 'app-root-element:home/visit-listener': OverridableExtensionDefinition<{ kind: 'app-root-element'; name: 'visit-listener'; config: {}; @@ -49,7 +49,7 @@ const _default: OverridableFrontendPlugin< element: JSX.Element; }; }>; - 'page:home': ExtensionDefinition<{ + 'page:home': OverridableExtensionDefinition<{ config: { path: string | undefined; }; diff --git a/plugins/kubernetes/report-alpha.api.md b/plugins/kubernetes/report-alpha.api.md index 9bcbeb4ede..571e09d546 100644 --- a/plugins/kubernetes/report-alpha.api.md +++ b/plugins/kubernetes/report-alpha.api.md @@ -11,8 +11,8 @@ import { Entity } from '@backstage/catalog-model'; import { EntityPredicate } from '@backstage/plugin-catalog-react/alpha'; import { ExtensionBlueprintParams } from '@backstage/frontend-plugin-api'; import { ExtensionDataRef } from '@backstage/frontend-plugin-api'; -import { ExtensionDefinition } from '@backstage/frontend-plugin-api'; import { JSX as JSX_2 } from 'react'; +import { OverridableExtensionDefinition } from '@backstage/frontend-plugin-api'; import { OverridableFrontendPlugin } from '@backstage/frontend-plugin-api'; import { RouteRef } from '@backstage/frontend-plugin-api'; import { TranslationRef } from '@backstage/core-plugin-api/alpha'; @@ -24,7 +24,7 @@ const _default: OverridableFrontendPlugin< }, {}, { - 'api:kubernetes': ExtensionDefinition<{ + 'api:kubernetes': OverridableExtensionDefinition<{ kind: 'api'; name: undefined; config: {}; @@ -39,7 +39,7 @@ const _default: OverridableFrontendPlugin< params: ApiFactory, ) => ExtensionBlueprintParams; }>; - 'api:kubernetes/auth-providers': ExtensionDefinition<{ + 'api:kubernetes/auth-providers': OverridableExtensionDefinition<{ kind: 'api'; name: 'auth-providers'; config: {}; @@ -54,7 +54,7 @@ const _default: OverridableFrontendPlugin< params: ApiFactory, ) => ExtensionBlueprintParams; }>; - 'api:kubernetes/cluster-link-formatter': ExtensionDefinition<{ + 'api:kubernetes/cluster-link-formatter': OverridableExtensionDefinition<{ kind: 'api'; name: 'cluster-link-formatter'; config: {}; @@ -69,7 +69,7 @@ const _default: OverridableFrontendPlugin< params: ApiFactory, ) => ExtensionBlueprintParams; }>; - 'api:kubernetes/proxy': ExtensionDefinition<{ + 'api:kubernetes/proxy': OverridableExtensionDefinition<{ kind: 'api'; name: 'proxy'; config: {}; @@ -84,7 +84,7 @@ const _default: OverridableFrontendPlugin< params: ApiFactory, ) => ExtensionBlueprintParams; }>; - 'entity-content:kubernetes/kubernetes': ExtensionDefinition<{ + 'entity-content:kubernetes/kubernetes': OverridableExtensionDefinition<{ kind: 'entity-content'; name: 'kubernetes'; config: { @@ -144,7 +144,7 @@ const _default: OverridableFrontendPlugin< filter?: string | EntityPredicate | ((entity: Entity) => boolean); }; }>; - 'page:kubernetes': ExtensionDefinition<{ + 'page:kubernetes': OverridableExtensionDefinition<{ kind: 'page'; name: undefined; config: { diff --git a/plugins/mui-to-bui/report.api.md b/plugins/mui-to-bui/report.api.md index 593130ea86..519f0c1bc7 100644 --- a/plugins/mui-to-bui/report.api.md +++ b/plugins/mui-to-bui/report.api.md @@ -6,9 +6,9 @@ import { AnyRouteRefParams } from '@backstage/frontend-plugin-api'; import { BackstagePlugin } from '@backstage/core-plugin-api'; import { ExtensionDataRef } from '@backstage/frontend-plugin-api'; -import { ExtensionDefinition } from '@backstage/frontend-plugin-api'; import { JSX as JSX_2 } from 'react'; import { JSX as JSX_3 } from 'react/jsx-runtime'; +import { OverridableExtensionDefinition } from '@backstage/frontend-plugin-api'; import { OverridableFrontendPlugin } from '@backstage/frontend-plugin-api'; import { RouteRef } from '@backstage/frontend-plugin-api'; import { RouteRef as RouteRef_2 } from '@backstage/core-plugin-api'; @@ -31,7 +31,7 @@ const _default: OverridableFrontendPlugin< }, {}, { - 'page:mui-to-bui': ExtensionDefinition<{ + 'page:mui-to-bui': OverridableExtensionDefinition<{ kind: 'page'; name: undefined; config: { diff --git a/plugins/notifications/report-alpha.api.md b/plugins/notifications/report-alpha.api.md index bec9d5ae13..713d4c3998 100644 --- a/plugins/notifications/report-alpha.api.md +++ b/plugins/notifications/report-alpha.api.md @@ -8,8 +8,8 @@ import { AnyRouteRefParams } from '@backstage/frontend-plugin-api'; import { ApiFactory } from '@backstage/frontend-plugin-api'; import { ExtensionBlueprintParams } from '@backstage/frontend-plugin-api'; import { ExtensionDataRef } from '@backstage/frontend-plugin-api'; -import { ExtensionDefinition } from '@backstage/frontend-plugin-api'; import { JSX as JSX_2 } from 'react'; +import { OverridableExtensionDefinition } from '@backstage/frontend-plugin-api'; import { OverridableFrontendPlugin } from '@backstage/frontend-plugin-api'; import { RouteRef } from '@backstage/frontend-plugin-api'; @@ -20,7 +20,7 @@ const _default: OverridableFrontendPlugin< }, {}, { - 'api:notifications': ExtensionDefinition<{ + 'api:notifications': OverridableExtensionDefinition<{ kind: 'api'; name: undefined; config: {}; @@ -35,7 +35,7 @@ const _default: OverridableFrontendPlugin< params: ApiFactory, ) => ExtensionBlueprintParams; }>; - 'page:notifications': ExtensionDefinition<{ + 'page:notifications': OverridableExtensionDefinition<{ kind: 'page'; name: undefined; config: { diff --git a/plugins/org/report-alpha.api.md b/plugins/org/report-alpha.api.md index 8cefd7dd11..3e113868a6 100644 --- a/plugins/org/report-alpha.api.md +++ b/plugins/org/report-alpha.api.md @@ -7,10 +7,10 @@ import { Entity } from '@backstage/catalog-model'; import { EntityCardType } from '@backstage/plugin-catalog-react/alpha'; import { EntityPredicate } from '@backstage/plugin-catalog-react/alpha'; import { ExtensionDataRef } from '@backstage/frontend-plugin-api'; -import { ExtensionDefinition } from '@backstage/frontend-plugin-api'; import { ExtensionInput } from '@backstage/frontend-plugin-api'; import { ExternalRouteRef } from '@backstage/frontend-plugin-api'; import { JSX as JSX_2 } from 'react'; +import { OverridableExtensionDefinition } from '@backstage/frontend-plugin-api'; import { OverridableFrontendPlugin } from '@backstage/frontend-plugin-api'; import { TranslationRef } from '@backstage/frontend-plugin-api'; @@ -21,7 +21,7 @@ const _default: OverridableFrontendPlugin< catalogIndex: ExternalRouteRef; }, { - 'entity-card:org/group-profile': ExtensionDefinition<{ + 'entity-card:org/group-profile': OverridableExtensionDefinition<{ kind: 'entity-card'; name: 'group-profile'; config: { @@ -62,7 +62,7 @@ const _default: OverridableFrontendPlugin< type?: EntityCardType; }; }>; - 'entity-card:org/members-list': ExtensionDefinition<{ + 'entity-card:org/members-list': OverridableExtensionDefinition<{ config: { initialRelationAggregation: 'direct' | 'aggregated' | undefined; showAggregateMembersToggle: boolean | undefined; @@ -117,7 +117,7 @@ const _default: OverridableFrontendPlugin< type?: EntityCardType; }; }>; - 'entity-card:org/ownership': ExtensionDefinition<{ + 'entity-card:org/ownership': OverridableExtensionDefinition<{ config: { initialRelationAggregation: 'direct' | 'aggregated' | undefined; showAggregateMembersToggle: boolean | undefined; @@ -172,7 +172,7 @@ const _default: OverridableFrontendPlugin< type?: EntityCardType; }; }>; - 'entity-card:org/user-profile': ExtensionDefinition<{ + 'entity-card:org/user-profile': OverridableExtensionDefinition<{ config: { maxRelations: number | undefined; hideIcons: boolean; diff --git a/plugins/scaffolder-react/report-alpha.api.md b/plugins/scaffolder-react/report-alpha.api.md index 6f81cd8a32..7497902e5b 100644 --- a/plugins/scaffolder-react/report-alpha.api.md +++ b/plugins/scaffolder-react/report-alpha.api.md @@ -15,7 +15,6 @@ import { Dispatch } from 'react'; import { ExtensionBlueprint } from '@backstage/frontend-plugin-api'; import { ExtensionBlueprintParams } from '@backstage/frontend-plugin-api'; import { ExtensionDataRef } from '@backstage/frontend-plugin-api'; -import { ExtensionDefinition } from '@backstage/frontend-plugin-api'; import { ExtensionInput } from '@backstage/frontend-plugin-api'; import { FieldExtensionComponentProps } from '@backstage/plugin-scaffolder-react'; import { FieldExtensionOptions } from '@backstage/plugin-scaffolder-react'; @@ -27,6 +26,7 @@ import { JsonObject } from '@backstage/types'; import { JsonValue } from '@backstage/types'; import { JSX as JSX_2 } from 'react/jsx-runtime'; import { LayoutOptions } from '@backstage/plugin-scaffolder-react'; +import { OverridableExtensionDefinition } from '@backstage/frontend-plugin-api'; import { Overrides } from '@material-ui/core/styles/overrides'; import { PropsWithChildren } from 'react'; import { ReactElement } from 'react'; @@ -205,7 +205,7 @@ export type FormFieldExtensionData< }; // @alpha (undocumented) -export const formFieldsApi: ExtensionDefinition<{ +export const formFieldsApi: OverridableExtensionDefinition<{ config: {}; configInput: {}; output: ExtensionDataRef; diff --git a/plugins/scaffolder/report-alpha.api.md b/plugins/scaffolder/report-alpha.api.md index a5dd2a22d1..b6c5af9f17 100644 --- a/plugins/scaffolder/report-alpha.api.md +++ b/plugins/scaffolder/report-alpha.api.md @@ -13,7 +13,6 @@ import { Entity } from '@backstage/catalog-model'; import { EntityPredicate } from '@backstage/plugin-catalog-react/alpha'; import { ExtensionBlueprintParams } from '@backstage/frontend-plugin-api'; import { ExtensionDataRef } from '@backstage/frontend-plugin-api'; -import { ExtensionDefinition } from '@backstage/frontend-plugin-api'; import { ExtensionInput } from '@backstage/frontend-plugin-api'; import { ExternalRouteRef } from '@backstage/frontend-plugin-api'; import { FieldExtensionOptions } from '@backstage/plugin-scaffolder-react'; @@ -25,6 +24,7 @@ import { IconComponent } from '@backstage/core-plugin-api'; import { IconLinkVerticalProps } from '@backstage/core-components'; import { JSX as JSX_2 } from 'react'; import { LayoutOptions } from '@backstage/plugin-scaffolder-react'; +import { OverridableExtensionDefinition } from '@backstage/frontend-plugin-api'; import { OverridableFrontendPlugin } from '@backstage/frontend-plugin-api'; import { PathParams } from '@backstage/core-plugin-api'; import { ReviewStepProps } from '@backstage/plugin-scaffolder-react'; @@ -58,7 +58,7 @@ const _default: OverridableFrontendPlugin< }>; }, { - 'api:scaffolder': ExtensionDefinition<{ + 'api:scaffolder': OverridableExtensionDefinition<{ kind: 'api'; name: undefined; config: {}; @@ -73,7 +73,7 @@ const _default: OverridableFrontendPlugin< params: ApiFactory, ) => ExtensionBlueprintParams; }>; - 'api:scaffolder/form-decorators': ExtensionDefinition<{ + 'api:scaffolder/form-decorators': OverridableExtensionDefinition<{ config: {}; configInput: {}; output: ExtensionDataRef; @@ -100,7 +100,7 @@ const _default: OverridableFrontendPlugin< params: ApiFactory, ) => ExtensionBlueprintParams; }>; - 'api:scaffolder/form-fields': ExtensionDefinition<{ + 'api:scaffolder/form-fields': OverridableExtensionDefinition<{ config: {}; configInput: {}; output: ExtensionDataRef; @@ -127,7 +127,7 @@ const _default: OverridableFrontendPlugin< params: ApiFactory, ) => ExtensionBlueprintParams; }>; - 'entity-icon-link:scaffolder/launch-template': ExtensionDefinition<{ + 'entity-icon-link:scaffolder/launch-template': OverridableExtensionDefinition<{ kind: 'entity-icon-link'; name: 'launch-template'; config: { @@ -166,7 +166,7 @@ const _default: OverridableFrontendPlugin< filter?: EntityPredicate | ((entity: Entity) => boolean); }; }>; - 'nav-item:scaffolder': ExtensionDefinition<{ + 'nav-item:scaffolder': OverridableExtensionDefinition<{ kind: 'nav-item'; name: undefined; config: {}; @@ -187,7 +187,7 @@ const _default: OverridableFrontendPlugin< routeRef: RouteRef; }; }>; - 'page:scaffolder': ExtensionDefinition<{ + 'page:scaffolder': OverridableExtensionDefinition<{ config: { path: string | undefined; }; @@ -226,7 +226,7 @@ const _default: OverridableFrontendPlugin< routeRef?: RouteRef; }; }>; - 'scaffolder-form-field:scaffolder/entity-name-picker': ExtensionDefinition<{ + 'scaffolder-form-field:scaffolder/entity-name-picker': OverridableExtensionDefinition<{ kind: 'scaffolder-form-field'; name: 'entity-name-picker'; config: {}; @@ -241,7 +241,7 @@ const _default: OverridableFrontendPlugin< field: () => Promise; }; }>; - 'scaffolder-form-field:scaffolder/entity-picker': ExtensionDefinition<{ + 'scaffolder-form-field:scaffolder/entity-picker': OverridableExtensionDefinition<{ kind: 'scaffolder-form-field'; name: 'entity-picker'; config: {}; @@ -256,7 +256,7 @@ const _default: OverridableFrontendPlugin< field: () => Promise; }; }>; - 'scaffolder-form-field:scaffolder/entity-tags-picker': ExtensionDefinition<{ + 'scaffolder-form-field:scaffolder/entity-tags-picker': OverridableExtensionDefinition<{ kind: 'scaffolder-form-field'; name: 'entity-tags-picker'; config: {}; @@ -271,7 +271,7 @@ const _default: OverridableFrontendPlugin< field: () => Promise; }; }>; - 'scaffolder-form-field:scaffolder/multi-entity-picker': ExtensionDefinition<{ + 'scaffolder-form-field:scaffolder/multi-entity-picker': OverridableExtensionDefinition<{ kind: 'scaffolder-form-field'; name: 'multi-entity-picker'; config: {}; @@ -286,7 +286,7 @@ const _default: OverridableFrontendPlugin< field: () => Promise; }; }>; - 'scaffolder-form-field:scaffolder/my-groups-picker': ExtensionDefinition<{ + 'scaffolder-form-field:scaffolder/my-groups-picker': OverridableExtensionDefinition<{ kind: 'scaffolder-form-field'; name: 'my-groups-picker'; config: {}; @@ -301,7 +301,7 @@ const _default: OverridableFrontendPlugin< field: () => Promise; }; }>; - 'scaffolder-form-field:scaffolder/owned-entity-picker': ExtensionDefinition<{ + 'scaffolder-form-field:scaffolder/owned-entity-picker': OverridableExtensionDefinition<{ kind: 'scaffolder-form-field'; name: 'owned-entity-picker'; config: {}; @@ -316,7 +316,7 @@ const _default: OverridableFrontendPlugin< field: () => Promise; }; }>; - 'scaffolder-form-field:scaffolder/owner-picker': ExtensionDefinition<{ + 'scaffolder-form-field:scaffolder/owner-picker': OverridableExtensionDefinition<{ kind: 'scaffolder-form-field'; name: 'owner-picker'; config: {}; @@ -331,7 +331,7 @@ const _default: OverridableFrontendPlugin< field: () => Promise; }; }>; - 'scaffolder-form-field:scaffolder/repo-branch-picker': ExtensionDefinition<{ + 'scaffolder-form-field:scaffolder/repo-branch-picker': OverridableExtensionDefinition<{ kind: 'scaffolder-form-field'; name: 'repo-branch-picker'; config: {}; @@ -346,7 +346,7 @@ const _default: OverridableFrontendPlugin< field: () => Promise; }; }>; - 'scaffolder-form-field:scaffolder/repo-url-picker': ExtensionDefinition<{ + 'scaffolder-form-field:scaffolder/repo-url-picker': OverridableExtensionDefinition<{ kind: 'scaffolder-form-field'; name: 'repo-url-picker'; config: {}; @@ -378,7 +378,7 @@ export class DefaultScaffolderFormDecoratorsApi } // @alpha (undocumented) -export const formDecoratorsApi: ExtensionDefinition<{ +export const formDecoratorsApi: OverridableExtensionDefinition<{ config: {}; configInput: {}; output: ExtensionDataRef; diff --git a/plugins/search/report-alpha.api.md b/plugins/search/report-alpha.api.md index 9a385c6fae..5ac036ca68 100644 --- a/plugins/search/report-alpha.api.md +++ b/plugins/search/report-alpha.api.md @@ -9,10 +9,10 @@ import { ApiFactory } from '@backstage/core-plugin-api'; import { ConfigurableExtensionDataRef } from '@backstage/frontend-plugin-api'; import { ExtensionBlueprintParams } from '@backstage/frontend-plugin-api'; import { ExtensionDataRef } from '@backstage/frontend-plugin-api'; -import { ExtensionDefinition } from '@backstage/frontend-plugin-api'; import { ExtensionInput } from '@backstage/frontend-plugin-api'; import { IconComponent } from '@backstage/core-plugin-api'; import { JSX as JSX_2 } from 'react'; +import { OverridableExtensionDefinition } from '@backstage/frontend-plugin-api'; import { OverridableFrontendPlugin } from '@backstage/frontend-plugin-api'; import { RouteRef } from '@backstage/frontend-plugin-api'; import { SearchFilterExtensionComponent } from '@backstage/plugin-search-react/alpha'; @@ -27,7 +27,7 @@ const _default: OverridableFrontendPlugin< }, {}, { - 'api:search': ExtensionDefinition<{ + 'api:search': OverridableExtensionDefinition<{ kind: 'api'; name: undefined; config: {}; @@ -42,7 +42,7 @@ const _default: OverridableFrontendPlugin< params: ApiFactory, ) => ExtensionBlueprintParams; }>; - 'nav-item:search': ExtensionDefinition<{ + 'nav-item:search': OverridableExtensionDefinition<{ kind: 'nav-item'; name: undefined; config: {}; @@ -63,7 +63,7 @@ const _default: OverridableFrontendPlugin< routeRef: RouteRef; }; }>; - 'page:search': ExtensionDefinition<{ + 'page:search': OverridableExtensionDefinition<{ config: { noTrack: boolean; } & { @@ -143,7 +143,7 @@ const _default: OverridableFrontendPlugin< export default _default; // @alpha (undocumented) -export const searchApi: ExtensionDefinition<{ +export const searchApi: OverridableExtensionDefinition<{ kind: 'api'; name: undefined; config: {}; @@ -160,7 +160,7 @@ export const searchApi: ExtensionDefinition<{ }>; // @alpha (undocumented) -export const searchNavItem: ExtensionDefinition<{ +export const searchNavItem: OverridableExtensionDefinition<{ kind: 'nav-item'; name: undefined; config: {}; @@ -183,7 +183,7 @@ export const searchNavItem: ExtensionDefinition<{ }>; // @alpha (undocumented) -export const searchPage: ExtensionDefinition<{ +export const searchPage: OverridableExtensionDefinition<{ config: { noTrack: boolean; } & { diff --git a/plugins/signals/report-alpha.api.md b/plugins/signals/report-alpha.api.md index 91bd2b6726..b1cae370ed 100644 --- a/plugins/signals/report-alpha.api.md +++ b/plugins/signals/report-alpha.api.md @@ -7,7 +7,7 @@ import { AnyApiFactory } from '@backstage/frontend-plugin-api'; import { ApiFactory } from '@backstage/frontend-plugin-api'; import { ExtensionBlueprintParams } from '@backstage/frontend-plugin-api'; import { ExtensionDataRef } from '@backstage/frontend-plugin-api'; -import { ExtensionDefinition } from '@backstage/frontend-plugin-api'; +import { OverridableExtensionDefinition } from '@backstage/frontend-plugin-api'; import { OverridableFrontendPlugin } from '@backstage/frontend-plugin-api'; // @alpha (undocumented) @@ -15,7 +15,7 @@ const _default: OverridableFrontendPlugin< {}, {}, { - 'api:signals': ExtensionDefinition<{ + 'api:signals': OverridableExtensionDefinition<{ kind: 'api'; name: undefined; config: {}; diff --git a/plugins/techdocs/report-alpha.api.md b/plugins/techdocs/report-alpha.api.md index 076b2c0cfe..8a17625ac2 100644 --- a/plugins/techdocs/report-alpha.api.md +++ b/plugins/techdocs/report-alpha.api.md @@ -12,11 +12,11 @@ import { Entity } from '@backstage/catalog-model'; import { EntityPredicate } from '@backstage/plugin-catalog-react/alpha'; import { ExtensionBlueprintParams } from '@backstage/frontend-plugin-api'; import { ExtensionDataRef } from '@backstage/frontend-plugin-api'; -import { ExtensionDefinition } from '@backstage/frontend-plugin-api'; import { ExtensionInput } from '@backstage/frontend-plugin-api'; import { IconComponent } from '@backstage/core-plugin-api'; import { IconLinkVerticalProps } from '@backstage/core-components'; import { JSX as JSX_2 } from 'react'; +import { OverridableExtensionDefinition } from '@backstage/frontend-plugin-api'; import { OverridableFrontendPlugin } from '@backstage/frontend-plugin-api'; import { RouteRef } from '@backstage/frontend-plugin-api'; import { SearchResultItemExtensionComponent } from '@backstage/plugin-search-react/alpha'; @@ -37,7 +37,7 @@ const _default: OverridableFrontendPlugin< }, {}, { - 'api:techdocs': ExtensionDefinition<{ + 'api:techdocs': OverridableExtensionDefinition<{ kind: 'api'; name: undefined; config: {}; @@ -52,7 +52,7 @@ const _default: OverridableFrontendPlugin< params: ApiFactory, ) => ExtensionBlueprintParams; }>; - 'api:techdocs/storage': ExtensionDefinition<{ + 'api:techdocs/storage': OverridableExtensionDefinition<{ kind: 'api'; name: 'storage'; config: {}; @@ -67,7 +67,7 @@ const _default: OverridableFrontendPlugin< params: ApiFactory, ) => ExtensionBlueprintParams; }>; - 'empty-state:techdocs/entity-content': ExtensionDefinition<{ + 'empty-state:techdocs/entity-content': OverridableExtensionDefinition<{ config: {}; configInput: {}; output: ExtensionDataRef< @@ -90,7 +90,7 @@ const _default: OverridableFrontendPlugin< kind: 'empty-state'; name: 'entity-content'; }>; - 'entity-content:techdocs': ExtensionDefinition<{ + 'entity-content:techdocs': OverridableExtensionDefinition<{ config: { path: string | undefined; title: string | undefined; @@ -175,7 +175,7 @@ const _default: OverridableFrontendPlugin< filter?: string | EntityPredicate | ((entity: Entity) => boolean); }; }>; - 'entity-icon-link:techdocs/read-docs': ExtensionDefinition<{ + 'entity-icon-link:techdocs/read-docs': OverridableExtensionDefinition<{ kind: 'entity-icon-link'; name: 'read-docs'; config: { @@ -214,7 +214,7 @@ const _default: OverridableFrontendPlugin< filter?: EntityPredicate | ((entity: Entity) => boolean); }; }>; - 'nav-item:techdocs': ExtensionDefinition<{ + 'nav-item:techdocs': OverridableExtensionDefinition<{ kind: 'nav-item'; name: undefined; config: {}; @@ -235,7 +235,7 @@ const _default: OverridableFrontendPlugin< routeRef: RouteRef; }; }>; - 'page:techdocs': ExtensionDefinition<{ + 'page:techdocs': OverridableExtensionDefinition<{ kind: 'page'; name: undefined; config: { @@ -262,7 +262,7 @@ const _default: OverridableFrontendPlugin< routeRef?: RouteRef; }; }>; - 'page:techdocs/reader': ExtensionDefinition<{ + 'page:techdocs/reader': OverridableExtensionDefinition<{ config: { path: string | undefined; }; @@ -301,7 +301,7 @@ const _default: OverridableFrontendPlugin< routeRef?: RouteRef; }; }>; - 'search-result-list-item:techdocs': ExtensionDefinition<{ + 'search-result-list-item:techdocs': OverridableExtensionDefinition<{ config: { title: string | undefined; lineClamp: number; @@ -345,7 +345,7 @@ const _default: OverridableFrontendPlugin< export default _default; // @alpha (undocumented) -export const techDocsSearchResultListItemExtension: ExtensionDefinition<{ +export const techDocsSearchResultListItemExtension: OverridableExtensionDefinition<{ config: { title: string | undefined; lineClamp: number; diff --git a/plugins/user-settings/report-alpha.api.md b/plugins/user-settings/report-alpha.api.md index 1c8e844d05..a900e5600c 100644 --- a/plugins/user-settings/report-alpha.api.md +++ b/plugins/user-settings/report-alpha.api.md @@ -6,10 +6,10 @@ import { AnyRouteRefParams } from '@backstage/frontend-plugin-api'; import { ConfigurableExtensionDataRef } from '@backstage/frontend-plugin-api'; import { ExtensionDataRef } from '@backstage/frontend-plugin-api'; -import { ExtensionDefinition } from '@backstage/frontend-plugin-api'; import { ExtensionInput } from '@backstage/frontend-plugin-api'; import { IconComponent } from '@backstage/core-plugin-api'; import { JSX as JSX_2 } from 'react'; +import { OverridableExtensionDefinition } from '@backstage/frontend-plugin-api'; import { OverridableFrontendPlugin } from '@backstage/frontend-plugin-api'; import { RouteRef } from '@backstage/frontend-plugin-api'; import { TranslationRef } from '@backstage/core-plugin-api/alpha'; @@ -21,7 +21,7 @@ const _default: OverridableFrontendPlugin< }, {}, { - 'nav-item:user-settings': ExtensionDefinition<{ + 'nav-item:user-settings': OverridableExtensionDefinition<{ kind: 'nav-item'; name: undefined; config: {}; @@ -42,7 +42,7 @@ const _default: OverridableFrontendPlugin< routeRef: RouteRef; }; }>; - 'page:user-settings': ExtensionDefinition<{ + 'page:user-settings': OverridableExtensionDefinition<{ config: { path: string | undefined; }; @@ -82,7 +82,7 @@ const _default: OverridableFrontendPlugin< export default _default; // @alpha (undocumented) -export const settingsNavItem: ExtensionDefinition<{ +export const settingsNavItem: OverridableExtensionDefinition<{ kind: 'nav-item'; name: undefined; config: {}; From 67f531055742ca86d0d9fd1c4db75dea542c9481 Mon Sep 17 00:00:00 2001 From: Johan Persson Date: Tue, 11 Nov 2025 09:43:44 +0100 Subject: [PATCH 31/73] feat(docs-ui): add automated changelog sync from @backstage/ui MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds automated synchronization of component changelogs from @backstage/ui package to the documentation site, eliminating manual changelog maintenance. The sync script parses CHANGELOG.md using remark/unified, extracts component-specific entries via "Affected components:" tags, and generates per-version TypeScript files with preserved markdown formatting. Includes GitHub API integration to automatically fetch PR numbers for changelog entries. Key features: - Version comparison to sync only new releases - Per-version file structure (changelogs/v0.2.0.ts, etc.) - Markdown preservation via AST position slicing - Component name mapping (PascalCase → kebab-case) - Duplicate detection for idempotent syncing - GitHub authentication via gh CLI or GITHUB_TOKEN - Dry-run mode with preview Usage: ```bash yarn sync:changelog # Sync new entries yarn sync:changelog:dry-run # Preview changes ``` Technical changes: - Added scripts/sync-changelog.mjs (991 lines) - Refactored changelog.ts to import per-version files - Extracted types to separate types.ts file - Added dependencies: @octokit/rest, unified (remark-parse via @mdx-js/mdx) - Added documentation in README.md Signed-off-by: Johan Persson --- docs-ui/README.md | 25 + docs-ui/package.json | 6 +- docs-ui/scripts/sync-changelog.mjs | 991 ++++++++++++++++++ docs-ui/src/components/Changelog/index.tsx | 17 +- .../components/ChangelogComponent/index.tsx | 19 +- docs-ui/src/utils/changelog.ts | 548 +--------- docs-ui/src/utils/changelogs/v0.2.0.ts | 98 ++ docs-ui/src/utils/changelogs/v0.3.0.ts | 139 +++ docs-ui/src/utils/changelogs/v0.4.0.ts | 87 ++ docs-ui/src/utils/changelogs/v0.5.0.ts | 86 ++ docs-ui/src/utils/changelogs/v0.6.0.ts | 105 ++ docs-ui/src/utils/types.ts | 46 + docs-ui/yarn.lock | 149 ++- packages/ui/README.md | 23 + 14 files changed, 1785 insertions(+), 554 deletions(-) create mode 100644 docs-ui/scripts/sync-changelog.mjs create mode 100644 docs-ui/src/utils/changelogs/v0.2.0.ts create mode 100644 docs-ui/src/utils/changelogs/v0.3.0.ts create mode 100644 docs-ui/src/utils/changelogs/v0.4.0.ts create mode 100644 docs-ui/src/utils/changelogs/v0.5.0.ts create mode 100644 docs-ui/src/utils/changelogs/v0.6.0.ts create mode 100644 docs-ui/src/utils/types.ts diff --git a/docs-ui/README.md b/docs-ui/README.md index 41b9921413..b943f1ce7c 100644 --- a/docs-ui/README.md +++ b/docs-ui/README.md @@ -13,3 +13,28 @@ yarn start ## Deployment Deployments are done automatically when a PR is merged into the `master` branch. We host the website using Github pages. + +## Maintaining Component Changelogs + +After a `@backstage/ui` release, sync the component changelogs to keep documentation up-to-date: + +```bash +yarn sync:changelog +``` + +This script: + +- Parses `packages/ui/CHANGELOG.md` for new versions +- Extracts entries tagged with "Affected components: ..." +- Updates `src/utils/changelog.ts` with new entries +- Handles both component-specific and general package changes + +After running, review the changes in `src/utils/changelog.ts` and commit them. + +**Preview changes before writing:** + +```bash +yarn sync:changelog:dry-run +``` + +Running this gives you a summary of what would be written, without actually adding or changing any files. diff --git a/docs-ui/package.json b/docs-ui/package.json index d05fdf81bb..319c0e130f 100644 --- a/docs-ui/package.json +++ b/docs-ui/package.json @@ -8,6 +8,8 @@ "lint": "next lint", "prestart": "yarn sync:css", "start": "next dev", + "sync:changelog": "node scripts/sync-changelog.mjs", + "sync:changelog:dry-run": "node scripts/sync-changelog.mjs --dry-run", "sync:css": "node scripts/sync-css.js", "sync:css:watch": "node scripts/sync-css.js --watch" }, @@ -39,6 +41,7 @@ "storybook": "^8.6.12" }, "devDependencies": { + "@octokit/rest": "^22.0.1", "@shikijs/transformers": "^3.13.0", "@types/mdx": "^2.0.13", "@types/node": "^20", @@ -48,6 +51,7 @@ "eslint": "^8", "eslint-config-next": "15.3.4", "lightningcss": "^1.28.2", - "typescript": "^5" + "typescript": "^5", + "unified": "^11.0.4" } } diff --git a/docs-ui/scripts/sync-changelog.mjs b/docs-ui/scripts/sync-changelog.mjs new file mode 100644 index 0000000000..5eab3616dd --- /dev/null +++ b/docs-ui/scripts/sync-changelog.mjs @@ -0,0 +1,991 @@ +#!/usr/bin/env node +/* eslint-disable no-restricted-syntax */ + +import fs from 'fs'; +import path from 'path'; +import { fileURLToPath } from 'url'; +import { unified } from 'unified'; +import remarkParse from 'remark-parse'; +import { Octokit } from '@octokit/rest'; +import { execSync } from 'child_process'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +/** + * Compare two semantic versions. + * Returns: 1 if versionA > versionB, -1 if versionA < versionB, 0 if equal + * Handles pre-release versions (e.g., "0.9.0-next.2") + */ +function compareVersions(versionA, versionB) { + // Strip 'v' prefix if present + versionA = versionA.replace(/^v/, ''); + versionB = versionB.replace(/^v/, ''); + + // Split into [major.minor.patch, prerelease] + const [versionABase, versionAPre] = versionA.split('-'); + const [versionBBase, versionBPre] = versionB.split('-'); + + // Compare base versions + const versionAParts = versionABase.split('.').map(Number); + const versionBParts = versionBBase.split('.').map(Number); + + for ( + let i = 0; + i < Math.max(versionAParts.length, versionBParts.length); + i++ + ) { + const versionAPart = versionAParts[i] || 0; + const versionBPart = versionBParts[i] || 0; + + if (versionAPart > versionBPart) return 1; + if (versionAPart < versionBPart) return -1; + } + + // If base versions equal, compare pre-release + if (!versionAPre && !versionBPre) return 0; + if (!versionAPre) return 1; // versionA is release, versionB is pre-release + if (!versionBPre) return -1; // versionA is pre-release, versionB is release + + // Both have pre-release, compare them + return versionAPre.localeCompare(versionBPre); +} + +/** + * Check if versionA is newer than versionB + */ +function isNewerVersion(versionA, versionB) { + return compareVersions(versionA, versionB) > 0; +} + +/** + * Normalize version to base version (remove pre-release suffix) + * "0.9.0-next.3" → "0.9.0" + * "0.9.0" → "0.9.0" + */ +function normalizeVersion(version) { + return version.split('-')[0]; +} + +/** + * Read the existing changelog.ts and find the highest version number + * by scanning the changelogs/ directory for version files + */ +function getLastSyncedVersion(changelogPath) { + try { + // Scan changelogs/ directory for latest version file + const changelogsDir = path.join(path.dirname(changelogPath), 'changelogs'); + + if (!fs.existsSync(changelogsDir)) { + return null; + } + + // Read all version files (v0.1.0.ts, v0.2.0.ts, etc.) + const files = fs + .readdirSync(changelogsDir) + .filter(f => f.match(/^v\d+\.\d+\.\d+\.ts$/)) + .map(f => f.replace(/^v/, '').replace(/\.ts$/, '')); + + if (files.length === 0) { + return null; + } + + // Find highest version + let highest = files[0]; + for (const version of files) { + if (compareVersions(version, highest) > 0) { + highest = version; + } + } + + return highest; + } catch (error) { + console.error(`Error reading changelog file: ${error.message}`); + return null; + } +} + +/** + * Convert PascalCase component name to kebab-case slug + * Avatar -> avatar + * ButtonIcon -> button-icon + * SearchField -> searchfield (special case per existing data) + */ +function pascalToKebab(str) { + // Special cases observed in changelog.ts + const specialCases = { + SearchField: 'searchfield', + TextField: 'textfield', + DataTable: 'datatable', + ScrollArea: 'scrollarea', + }; + + if (specialCases[str]) { + return specialCases[str]; + } + + // General conversion: insert hyphen before uppercase letters + return str + .replace(/([A-Z])/g, '-$1') + .toLowerCase() + .replace(/^-/, ''); // Remove leading hyphen +} + +/** + * Map component name to valid Component type slug + * Returns null if component not recognized + */ +function mapComponentName(name, validComponents) { + const kebab = pascalToKebab(name.trim()); + const kebabLower = kebab.toLowerCase(); + + // Check if it's a valid component + const valid = validComponents.find(c => c.toLowerCase() === kebabLower); + + return valid || null; +} + +/** + * Get valid component names from types.ts Component type + */ +function getValidComponents(changelogPath) { + // Read from types.ts instead of changelog.ts + const typesPath = changelogPath.replace('changelog.ts', 'types.ts'); + const content = fs.readFileSync(typesPath, 'utf-8'); + + // Extract Component type union + const typeMatch = content.match(/export type Component =([^;]+);/s); + if (!typeMatch) { + throw new Error('Could not find Component type definition'); + } + + // Extract string literals from the union + const components = typeMatch[1] + .match(/['"]([^'"]+)['"]/g) + .map(s => s.replace(/['"]/g, '')); + + return components; +} + +/** + * Parse CHANGELOG.md and extract entries newer than sinceVersion + */ +async function parseChangelogMd(changelogPath, sinceVersion, validComponents) { + const content = fs.readFileSync(changelogPath, 'utf-8'); + const tree = unified().use(remarkParse).parse(content); + + const entries = []; + let currentVersion = null; + let currentSection = null; // 'Minor Changes', 'Patch Changes', 'Major Changes' + let processedCount = 0; + + // Walk through the markdown AST + async function walk(node, depth = 0) { + // Version headers (## 0.9.0) + if (node.type === 'heading' && node.depth === 2) { + const versionText = extractText(node).trim(); + // Validate that this is actually a version number (X.Y.Z or X.Y.Z-pre.N) + // Skip headings that are just markdown content within changelog entries + if (/^\d+\.\d+\.\d+/.test(versionText)) { + currentVersion = versionText; + currentSection = null; + } + return; + } + + // Section headers (### Minor Changes) + if (node.type === 'heading' && node.depth === 3) { + const sectionText = extractText(node); + currentSection = sectionText.trim(); + return; + } + + // List items (- 539cf26: description) + if (node.type === 'listItem' && currentVersion && currentSection) { + // Only process if version is newer than sinceVersion + if (!sinceVersion || isNewerVersion(currentVersion, sinceVersion)) { + const entry = await parseListItem( + node, + currentVersion, + currentSection, + validComponents, + content, + ); + if (entry) { + entries.push(entry); + processedCount++; + // Progress logging every 50 entries + if (processedCount % 50 === 0) { + process.stdout.write(`\r Processed ${processedCount} entries...`); + } + } + } + } + + // Recurse into children + if (node.children) { + for (const child of node.children) { + await walk(child, depth + 1); + } + } + } + + await walk(tree); + + // Clear progress line + if (processedCount > 0) { + process.stdout.write(`\r Processed ${processedCount} entries - done!\n`); + } + + return entries; +} + +/** + * Extract plain text from a markdown node + */ +function extractText(node) { + if (node.type === 'text') { + return node.value; + } + if (node.children) { + return node.children.map(extractText).join(''); + } + return ''; +} + +/** + * Extract raw markdown content from a node using position offsets + * This preserves all formatting: code blocks, lists, bold/italic, etc. + */ +function extractMarkdown(node, sourceText) { + if (!node.position) { + return extractText(node); // Fallback to text extraction + } + + const start = node.position.start.offset; + const end = node.position.end.offset; + + if (start === undefined || end === undefined) { + return extractText(node); + } + + return sourceText.slice(start, end).trim(); +} + +/** + * Parse a list item to extract changelog entry + * NOTE: PR numbers are NOT fetched here - they're fetched later only for new entries + */ +async function parseListItem( + node, + version, + section, + validComponents, + sourceText, +) { + // Extract the full text content for SHA parsing + const fullText = extractText(node); + + // Parse commit SHA and description + // Format: "- 539cf26: description..." + const match = fullText.match(/^-?\s*([a-f0-9]+):\s*(.+)/s); + if (!match) { + return null; + } + + const commitSha = match[1]; + + // Extract full markdown content from the list item + let fullMarkdown = extractMarkdown(node, sourceText); + + // Remove the commit SHA prefix from markdown + let description = fullMarkdown.replace(/^-?\s*[a-f0-9]+:\s*/, '').trim(); + + // Auto-detect components from "Affected components:" line + let components = []; + const componentMatch = description.match(/Affected components?:\s*([^\n]+)/i); + if (componentMatch) { + const componentNames = componentMatch[1] + .split(',') + .map(name => name.trim()) + .filter(Boolean); + + components = componentNames + .map(name => mapComponentName(name, validComponents)) + .filter(Boolean); + + // Optionally strip "Affected components:" line from description + description = description + .replace(/\n*Affected components?:[ \t]*[^\n]+/i, '') + .trim(); + } + + const prs = []; // Will be populated later by fetchPRNumbers() + + // Infer type from section and description + const type = inferChangeType(section, description, version); + + return { + version: normalizeVersion(version), + section, + commitSha, + description, + components, + prs, + type, + }; +} + +/** + * Infer change type from section and description + */ +function inferChangeType(section, description, version) { + const isPre1 = version.startsWith('0.'); + + // Check description keywords first + if (description.match(/^(New|Add(ed)?)\s/i)) { + return 'new'; + } + if (description.includes('BREAKING')) { + return 'breaking'; + } + + // Infer from section + if (section === 'Minor Changes') { + return isPre1 ? 'breaking' : undefined; + } else if (section === 'Major Changes') { + return 'breaking'; + } else if (section === 'Patch Changes') { + return 'fix'; + } + + return undefined; +} + +/** + * Generate new changelog entries and update changelog.ts + */ +/** + * Fetch PR numbers for entries that need them + * Only fetches for entries with empty prs array (new entries) + */ +async function fetchPRNumbers(entries, dryRun = false) { + const entriesNeedingPRs = entries.filter( + e => e.prs.length === 0 && e.commitSha, + ); + + if (entriesNeedingPRs.length === 0) { + return; + } + + console.log( + `\n🔍 Fetching PR numbers for ${entriesNeedingPRs.length} new entries...`, + ); + + let fetchedCount = 0; + const startTime = Date.now(); + + for (const entry of entriesNeedingPRs) { + const prNumber = await findPRNumber(entry.commitSha); + if (prNumber) { + entry.prs.push(prNumber); + } + + fetchedCount++; + // Progress every 10 lookups + if (fetchedCount % 10 === 0 || fetchedCount === entriesNeedingPRs.length) { + const elapsed = ((Date.now() - startTime) / 1000).toFixed(1); + const rate = ((fetchedCount / (Date.now() - startTime)) * 1000).toFixed( + 1, + ); + process.stdout.write( + `\r Fetched ${fetchedCount}/${entriesNeedingPRs.length} PR numbers (${elapsed}s, ~${rate} req/s)`, + ); + } + } + + const totalTime = ((Date.now() - startTime) / 1000).toFixed(1); + const foundCount = entriesNeedingPRs.filter(e => e.prs.length > 0).length; + console.log( + `\n ✓ Found ${foundCount}/${entriesNeedingPRs.length} PR numbers in ${totalTime}s`, + ); +} + +/** + * Generate per-version changelog files in changelogs/ directory + */ +async function generateVersionFiles(entries, changelogsDir, dryRun = false) { + // Group entries by normalized version + const byVersion = {}; + entries.forEach(entry => { + const version = entry.version; + if (!byVersion[version]) { + byVersion[version] = []; + } + byVersion[version].push(entry); + }); + + const versionFiles = []; + const skippedVersions = []; + const generatedVersions = []; + + for (const [version, versionEntries] of Object.entries(byVersion)) { + const fileName = `v${version}.ts`; + const filePath = path.join(changelogsDir, fileName); + const varName = `changelog_${version.replace(/\./g, '_')}`; + + // Check if file already exists - skip if it does + if (fs.existsSync(filePath)) { + skippedVersions.push(version); + // Still add to versionFiles array so main changelog.ts can import it + versionFiles.push({ + version, + fileName, + filePath, + varName, + content: null, // No content needed for existing files + skipped: true, + }); + continue; + } + + // Generate TypeScript code for this version + const entryObjects = versionEntries + .map(entry => { + const componentsStr = `[${entry.components + .map(c => `'${c}'`) + .join(', ')}]`; + const prsStr = `[${entry.prs.map(pr => `'${pr}'`).join(', ')}]`; + const typeStr = entry.type ? `type: '${entry.type}',` : ''; + const shaStr = entry.commitSha + ? `commitSha: '${entry.commitSha}',` + : ''; + + // Escape description for template literal + const descEscaped = entry.description + .replace(/\\/g, '\\\\') + .replace(/`/g, '\\`') + .replace(/\${/g, '\\${'); + + return ` { + components: ${componentsStr}, + version: '${entry.version}', + prs: ${prsStr}, + description: \`${descEscaped}\`, + ${typeStr} + ${shaStr} + }`; + }) + .join(',\n'); + + const fileContent = `import type { ChangelogProps } from '../types'; + +export const ${varName}: ChangelogProps[] = [ +${entryObjects} +]; +`; + + generatedVersions.push(version); + versionFiles.push({ + version, + fileName, + filePath, + varName, + content: fileContent, + skipped: false, + }); + + if (!dryRun) { + fs.writeFileSync(filePath, fileContent, 'utf-8'); + } + } + + // Log summary + if (skippedVersions.length > 0) { + console.log( + `\n⏭️ Skipped ${ + skippedVersions.length + } existing version files: ${skippedVersions + .sort((a, b) => compareVersions(a, b)) + .join(', ')}`, + ); + } + if (generatedVersions.length > 0) { + console.log( + `\n✨ ${dryRun ? 'Would generate' : 'Generated'} ${ + generatedVersions.length + } new version files: ${generatedVersions + .sort((a, b) => compareVersions(a, b)) + .join(', ')}`, + ); + } + + return versionFiles; +} + +/** + * Generate main changelog.ts that imports and spreads all version files + */ +async function generateMainChangelog( + versionFiles, + changelogPath, + dryRun = false, +) { + // Get the changelogs directory path + const changelogsDir = path.join(path.dirname(changelogPath), 'changelogs'); + + // Read all version files from the changelogs directory + const allVersionFiles = new Map(); + + // First, add all files from the directory (if it exists) + if (fs.existsSync(changelogsDir)) { + const files = fs.readdirSync(changelogsDir); + files.forEach(file => { + if (file.match(/^v\d+\.\d+\.\d+\.ts$/)) { + const version = file.replace(/^v/, '').replace(/\.ts$/, ''); + const varName = `changelog_${version.replace(/\./g, '_')}`; + allVersionFiles.set(version, { + version, + fileName: file, + varName, + }); + } + }); + } + + // Then, add/update with files from this run (in case new ones were generated) + versionFiles.forEach(vf => { + allVersionFiles.set(vf.version, { + version: vf.version, + fileName: vf.fileName, + varName: vf.varName, + }); + }); + + // Sort versions in descending order + const sortedVersions = Array.from(allVersionFiles.values()).sort((a, b) => + compareVersions(b.version, a.version), + ); + + const imports = sortedVersions + .map( + v => + `import { ${v.varName} } from './changelogs/${v.fileName.replace( + '.ts', + '', + )}';`, + ) + .join('\n'); + + const spreads = sortedVersions.map(v => ` ...${v.varName},`).join('\n'); + + const content = `export * from './types'; +${imports} + +export const changelog = [ +${spreads} +]; +`; + + console.log( + `\n📝 Main changelog.ts will import all ${sortedVersions.length} version files`, + ); + + if (!dryRun) { + fs.writeFileSync(changelogPath, content, 'utf-8'); + } + + return content; +} + +/** + * Check if an entry already exists in changelog.ts + */ +function isDuplicate(entry, existingContent) { + // Simple check: look for version + description substring + const descStart = entry.description.substring(0, 50); + const pattern = `version: '${entry.version}'`; + + const versionIndex = existingContent.indexOf(pattern); + if (versionIndex === -1) return false; + + // Check if description appears near this version + const contextWindow = existingContent.substring( + Math.max(0, versionIndex - 200), + versionIndex + 500, + ); + + return contextWindow.includes(descStart); +} + +/** + * Detect GitHub authentication method + * Priority: gh CLI → GITHUB_TOKEN env → unauthenticated + */ +function getGitHubAuth() { + // 1. Try gh CLI (preferred - uses keyring auth) + try { + // Check specifically for github.com authentication + const output = execSync('gh auth status -h github.com 2>&1', { + encoding: 'utf-8', + }); + if (output.includes('Logged in to github.com')) { + console.log('✓ Using gh CLI authentication'); + return { method: 'gh-cli' }; + } + } catch { + // gh not installed or not authenticated to github.com + } + + // 2. Try GITHUB_TOKEN env var + if (process.env.GITHUB_TOKEN) { + console.log('✓ Using GITHUB_TOKEN authentication'); + return { method: 'token', token: process.env.GITHUB_TOKEN }; + } + + // 3. Fallback to unauthenticated (60 req/hour limit) + console.warn('⚠️ Using unauthenticated GitHub API (60 requests/hour)'); + console.warn(' For higher limits: authenticate gh CLI or set GITHUB_TOKEN'); + return { method: 'unauthenticated' }; +} + +// Initialize auth and Octokit +const githubAuth = getGitHubAuth(); +const octokit = + githubAuth.method === 'token' + ? new Octokit({ auth: githubAuth.token }) + : new Octokit(); + +// Cache for PR lookups +const prCache = new Map(); + +/** + * Expand a truncated SHA to full SHA using local git repository + * Falls back to GitHub API if git rev-parse fails + */ +async function expandCommitSha(shortSha) { + try { + // First try local git repository (fastest, works for all commits) + // We need to run this from the backstage monorepo root + const repoRoot = path.join(__dirname, '../../'); + + try { + const fullSha = execSync(`git rev-parse ${shortSha}`, { + encoding: 'utf-8', + cwd: repoRoot, + stdio: ['pipe', 'pipe', 'pipe'], + }).trim(); + + if (fullSha && fullSha.length === 40) { + return fullSha; + } + } catch (gitError) { + // Handle ambiguous SHA - parse git's error output to find commit candidates + if (gitError.stderr && gitError.stderr.includes('ambiguous')) { + const stderr = gitError.stderr.toString(); + // Extract commit SHAs from git's hint output + // Format: "hint: 83c100e6accfb commit 2025-10-22 - message" + const commitMatch = stderr.match(/hint:\s+([a-f0-9]+)\s+commit\s+/); + if (commitMatch && commitMatch[1]) { + // Found the commit SHA from the ambiguous candidates + const candidateSha = commitMatch[1]; + // Verify this is a valid commit + try { + const fullSha = execSync(`git rev-parse ${candidateSha}`, { + encoding: 'utf-8', + cwd: repoRoot, + }).trim(); + if (fullSha && fullSha.length === 40) { + return fullSha; + } + } catch { + // Candidate didn't work, continue to GitHub API + } + } + } + // Commit not in local repo, try GitHub API + } + } catch (error) { + // Error setting up git command, try GitHub API + } + + try { + // Fallback to GitHub API + if (githubAuth.method === 'gh-cli') { + const result = execSync( + `gh api repos/backstage/backstage/commits/${shortSha} --jq '.sha' 2>/dev/null`, + { encoding: 'utf-8' }, + ).trim(); + return result || null; + } else { + // Use Octokit + const { data: commit } = await octokit.rest.repos.getCommit({ + owner: 'backstage', + repo: 'backstage', + ref: shortSha, + }); + return commit.sha; + } + } catch (error) { + // Commit not found or other error - return null silently + return null; + } +} + +/** + * Find PR number for a commit SHA using GitHub API + */ +async function findPRNumber(commitSha) { + // Check cache first + if (prCache.has(commitSha)) { + return prCache.get(commitSha); + } + + try { + // If SHA is truncated (7 chars), expand it first + let fullSha = commitSha; + if (commitSha.length === 7) { + fullSha = await expandCommitSha(commitSha); + if (!fullSha) { + // Commit not found + console.warn(`⚠️ Commit not found: ${commitSha}`); + prCache.set(commitSha, null); + return null; + } + } + + let prNumber = null; + + // Use gh CLI if available (faster, uses existing auth) + if (githubAuth.method === 'gh-cli') { + try { + const result = execSync( + `gh api repos/backstage/backstage/commits/${fullSha}/pulls --jq '.[0].number' 2>/dev/null`, + { encoding: 'utf-8' }, + ).trim(); + prNumber = result || null; + } catch (ghError) { + // Handle gh CLI errors gracefully - commit exists but has no PR + prNumber = null; + } + } else { + // Otherwise use Octokit (token or unauthenticated) + const { data: prs } = + await octokit.rest.repos.listPullRequestsAssociatedWithCommit({ + owner: 'backstage', + repo: 'backstage', + commit_sha: fullSha, + }); + prNumber = prs.length > 0 ? prs[0].number.toString() : null; + } + + // Cache the result + prCache.set(commitSha, prNumber); + return prNumber; + } catch (error) { + if (error.message?.includes('rate limit')) { + console.error('⚠️ GitHub API rate limit exceeded'); + console.error( + ' Authenticate gh CLI or set GITHUB_TOKEN for higher limits', + ); + } else { + console.warn(`⚠️ Error finding PR for ${commitSha}: ${error.message}`); + } + prCache.set(commitSha, null); + return null; + } +} + +/** + * Main sync function + */ +async function main() { + const args = process.argv.slice(2); + const dryRun = args.includes('--dry-run'); + + const changelogTsPath = path.join(__dirname, '../src/utils/changelog.ts'); + const changelogMdPath = path.join( + __dirname, + '../../packages/ui/CHANGELOG.md', + ); + + // Validate files exist + if (!fs.existsSync(changelogTsPath)) { + throw new Error(`changelog.ts not found at: ${changelogTsPath}`); + } + if (!fs.existsSync(changelogMdPath)) { + throw new Error(`CHANGELOG.md not found at: ${changelogMdPath}`); + } + + console.log('📋 Syncing UI component changelogs...\n'); + + // Get last synced version + const lastVersion = getLastSyncedVersion(changelogTsPath); + console.log(`Last synced version: ${lastVersion || '(none)'}`); + + // Get valid components + const validComponents = getValidComponents(changelogTsPath); + console.log(`Valid components: ${validComponents.length}`); + + // Parse CHANGELOG.md + console.log('\n📖 Parsing CHANGELOG.md...'); + const allEntries = await parseChangelogMd( + changelogMdPath, + lastVersion, + validComponents, + ); + console.log(`Found ${allEntries.length} total entries since ${lastVersion}`); + + // Read existing changelog content for duplicate detection + const existingContent = fs.readFileSync(changelogTsPath, 'utf-8'); + + // Filter to only new, non-duplicate entries + const relevantEntries = allEntries.filter(e => { + const hasComponents = e.components.length > 0 || e.components.length === 0; + const notDuplicate = !isDuplicate(e, existingContent); + return hasComponents && notDuplicate; + }); + + const duplicatesCount = allEntries.length - relevantEntries.length; + if (duplicatesCount > 0) { + console.log(`Skipped ${duplicatesCount} duplicate entries`); + } + + console.log( + `Relevant entries (with or without components): ${relevantEntries.length}`, + ); + + if (relevantEntries.length === 0) { + console.log('\n✅ No new entries to sync'); + return; + } + + // Fetch PR numbers for new entries (lazy fetch - only for entries that will be written) + await fetchPRNumbers(relevantEntries, dryRun); + + // Show summary + console.log('\n📝 New entries by component:'); + const byComponent = {}; + relevantEntries.forEach(entry => { + if (entry.components.length === 0) { + byComponent['(general)'] = (byComponent['(general)'] || 0) + 1; + } else { + entry.components.forEach(comp => { + byComponent[comp] = (byComponent[comp] || 0) + 1; + }); + } + }); + Object.entries(byComponent).forEach(([comp, count]) => { + console.log(` - ${comp}: ${count} ${count === 1 ? 'entry' : 'entries'}`); + }); + + // Warn about unknown components + const unknownComponents = []; + allEntries.forEach(entry => { + const fullText = entry.description; + const componentMatch = fullText.match( + /Affected components?:[ \t]*([^\n]+)/i, + ); + if (componentMatch) { + const names = componentMatch[1].split(',').map(n => n.trim()); + names.forEach(name => { + if (!mapComponentName(name, validComponents)) { + unknownComponents.push(name); + } + }); + } + }); + + if (unknownComponents.length > 0) { + console.log('\n⚠️ Unknown components (skipped):'); + [...new Set(unknownComponents)].forEach(name => { + console.log(` - ${name}`); + }); + } + + // Create changelogs directory if it doesn't exist + const changelogsDir = path.join(__dirname, '../src/utils/changelogs'); + if (!fs.existsSync(changelogsDir) && !dryRun) { + fs.mkdirSync(changelogsDir, { recursive: true }); + } + + // Generate version files + console.log( + `\n${ + dryRun ? '🔍 Dry run - would generate' : '✍️ Generating' + } version files...`, + ); + + const versionFiles = await generateVersionFiles( + relevantEntries, + changelogsDir, + dryRun, + ); + + // Generate main changelog.ts + const mainContent = await generateMainChangelog( + versionFiles, + changelogTsPath, + dryRun, + ); + + if (!dryRun) { + console.log('\n✅ Changelog sync complete!'); + const newFiles = versionFiles.filter(vf => !vf.skipped).length; + const skippedFiles = versionFiles.filter(vf => vf.skipped).length; + if (newFiles > 0) { + console.log( + ` Generated ${newFiles} new version file${newFiles === 1 ? '' : 's'}`, + ); + } + if (skippedFiles > 0) { + console.log( + ` Preserved ${skippedFiles} existing version file${ + skippedFiles === 1 ? '' : 's' + }`, + ); + } + console.log(` Updated ${changelogTsPath}`); + } else { + console.log('\n📄 Sample version file content:\n'); + // Find first non-skipped version file for sample + const sampleFile = versionFiles.find(vf => !vf.skipped && vf.content); + if (sampleFile) { + const sample = sampleFile.content.split('\n').slice(0, 30).join('\n'); + console.log(sample); + console.log('...\n'); + } else { + console.log('(No new version files to generate)\n'); + } + + console.log('\n📄 Main changelog.ts content:\n'); + console.log(mainContent); + + const newFiles = versionFiles.filter(vf => !vf.skipped).length; + const skippedFiles = versionFiles.filter(vf => vf.skipped).length; + + console.log('\n✅ Dry run complete - no files were modified'); + if (newFiles > 0) { + console.log( + ` Run without --dry-run to generate ${newFiles} new version file${ + newFiles === 1 ? '' : 's' + }`, + ); + } + if (skippedFiles > 0) { + console.log( + ` ${skippedFiles} existing version file${ + skippedFiles === 1 ? '' : 's' + } will be preserved`, + ); + } + } +} + +// Run main if executed directly +if (import.meta.url === `file://${process.argv[1]}`) { + main().catch(error => { + console.error('❌ Error:', error.message); + process.exit(1); + }); +} diff --git a/docs-ui/src/components/Changelog/index.tsx b/docs-ui/src/components/Changelog/index.tsx index 224e23d668..d7a547b901 100644 --- a/docs-ui/src/components/Changelog/index.tsx +++ b/docs-ui/src/components/Changelog/index.tsx @@ -52,14 +52,15 @@ export function Changelog() { ${bumpEntries .map(e => { const prs = - e.prs.length > 0 && - e.prs - .map( - pr => - `[#${pr}](https://github.com/backstage/backstage/pull/${pr})`, - ) - .join(', '); - return `- ${e.description} ${prs}`; + e.prs.length > 0 + ? e.prs + .map( + pr => + `[#${pr}](https://github.com/backstage/backstage/pull/${pr})`, + ) + .join(', ') + : ''; + return `- ${e.description}${prs ? ` ${prs}` : ''}`; }) .join('\n')}`; }) diff --git a/docs-ui/src/components/ChangelogComponent/index.tsx b/docs-ui/src/components/ChangelogComponent/index.tsx index f8832b0731..ff86433268 100644 --- a/docs-ui/src/components/ChangelogComponent/index.tsx +++ b/docs-ui/src/components/ChangelogComponent/index.tsx @@ -17,14 +17,17 @@ export const ChangelogComponent = ({ component }: { component: Component }) => { ${componentChangelog ?.map(change => { const prs = - change.prs.length > 0 && - change.prs - .map( - pr => - `[#${pr}](https://github.com/backstage/backstage/pull/${pr})`, - ) - .join(', '); - return `- \`${change.version}\` - ${change.description} ${prs}`; + change.prs.length > 0 + ? change.prs + .map( + pr => + `[#${pr}](https://github.com/backstage/backstage/pull/${pr})`, + ) + .join(', ') + : ''; + return `- \`${change.version}\` - ${change.description}${ + prs ? ` ${prs}` : '' + }`; }) .join('\n')}`} /> diff --git a/docs-ui/src/utils/changelog.ts b/docs-ui/src/utils/changelog.ts index 05a06fdb9f..dafc974a51 100644 --- a/docs-ui/src/utils/changelog.ts +++ b/docs-ui/src/utils/changelog.ts @@ -1,538 +1,14 @@ -export type Component = - | 'avatar' - | 'box' - | 'button' - | 'button-link' - | 'heading' - | 'text' - | 'button-icon' - | 'icon' - | 'tabs' - | 'menu' - | 'textfield' - | 'datatable' - | 'select' - | 'collapsible' - | 'accordion' - | 'checkbox' - | 'container' - | 'link' - | 'tooltip' - | 'scrollarea' - | 'flex' - | 'switch' - | 'grid' - | 'searchfield' - | 'radio-group' - | 'card' - | 'skeleton' - | 'header' - | 'passwordfield'; +export * from './types'; +import { changelog_0_6_0 } from './changelogs/v0.6.0'; +import { changelog_0_5_0 } from './changelogs/v0.5.0'; +import { changelog_0_4_0 } from './changelogs/v0.4.0'; +import { changelog_0_3_0 } from './changelogs/v0.3.0'; +import { changelog_0_2_0 } from './changelogs/v0.2.0'; -export type Version = `${number}.${number}.${number}`; - -export interface ChangelogProps { - components: Component[]; - description: string; - version: Version; - prs: string[]; - type?: 'breaking' | 'new' | 'fix'; -} - -export const changelog: ChangelogProps[] = [ - { - components: ['tooltip'], - version: '0.6.0', - description: 'New `Tooltip` component.', - prs: ['30461'], - type: 'new', - }, - { - components: ['card'], - version: '0.6.0', - description: 'New `Card` component.', - prs: ['30467'], - type: 'new', - }, - { - components: ['header'], - version: '0.6.0', - description: 'New `Header` component.', - prs: ['30410', '30459', '30493'], - type: 'new', - }, - { - components: ['button', 'button-link', 'button-icon'], - version: '0.6.0', - description: 'Improve `Button`, `ButtonIcon` and `ButtonLink` styling.', - prs: ['30448'], - type: 'fix', - }, - { - components: ['text', 'heading'], - version: '0.6.0', - description: - 'Update return types for `Heading` & `Text` components for React 19.', - prs: ['30440'], - type: 'fix', - }, - { - components: ['button', 'button-link', 'button-icon'], - version: '0.6.0', - description: - 'New `tertiary` variant to `Button`, `ButtonIcon` and `ButtonLink`.', - prs: ['30453'], - type: 'new', - }, - { - components: ['skeleton'], - version: '0.6.0', - description: 'New `Skeleton` component.', - prs: ['30466'], - type: 'new', - }, - { - components: ['button-icon'], - version: '0.6.0', - description: 'Rename `IconButton` to `ButtonIcon`.', - prs: ['30297'], - type: 'breaking', - }, - { - components: ['button-link'], - version: '0.6.0', - description: - 'New `ButtonLink`, which replaces the previous render prop pattern on `Button` and `IconButton`.', - prs: ['30297'], - type: 'new', - }, - { - components: ['button', 'button-link', 'button-icon'], - version: '0.6.0', - description: 'Remove the `render` prop from all button-related components.', - prs: ['30297'], - type: 'breaking', - }, - { - components: [], - version: '0.6.0', - description: 'We are consolidating all css files into a single styles.css.', - prs: ['30325'], - type: 'fix', - }, - { - components: ['searchfield'], - version: '0.6.0', - description: 'New `SearchField` component.', - prs: ['30357'], - type: 'new', - }, - { - components: ['radio-group'], - version: '0.6.0', - description: 'New `RadioGroup` + `Radio` component.', - prs: ['30327'], - type: 'new', - }, - { - components: ['textfield'], - version: '0.6.0', - description: 'Added placeholder prop back to `TextField` component.', - prs: ['30286'], - type: 'fix', - }, - { - components: ['textfield'], - version: '0.5.0', - description: '`TextField` now has multiple label sizes.', - prs: ['30249'], - type: 'breaking', - }, - { - components: ['textfield'], - version: '0.5.0', - description: - '`TextField` can now hide label and description while keeping them available for screen readers.', - prs: ['30249'], - type: 'breaking', - }, - { - components: ['textfield'], - version: '0.5.0', - description: - 'We are removing the `render` prop in favour of the `as` prop on `Heading` and `Text`.', - prs: ['30291'], - type: 'breaking', - }, - { - components: ['textfield'], - version: '0.5.0', - description: 'Move `TextField` component to use react Aria under the hood.', - prs: ['30286'], - type: 'breaking', - }, - { - components: ['button', 'button-link'], - version: '0.5.0', - description: - 'Added a render prop to the `Button` component to use it as a link.', - prs: ['30165'], - type: 'new', - }, - { - components: ['heading'], - version: '0.5.0', - description: 'Fix styling for the title4 prop on the Heading component.', - prs: ['30167'], - type: 'fix', - }, - { - components: ['flex'], - version: '0.5.0', - description: - 'Add `min-width: 0;` by default on Flex components to support truncated text.', - prs: ['30168'], - type: 'fix', - }, - { - components: ['button', 'button-link', 'button-icon'], - version: '0.5.0', - description: - '`Button`, `ButtonLink`, `ButtonIcon` now default to size `small` instead of `medium`', - prs: ['30085', '30097'], - type: 'breaking', - }, - { - components: ['grid'], - version: '0.5.0', - description: 'Rename Grid component to ``', - prs: ['30013'], - type: 'breaking', - }, - { - components: ['flex', 'container', 'grid', 'box'], - version: '0.5.0', - description: 'Fixes spacing props on layout components', - prs: ['30013'], - type: 'fix', - }, - { - components: ['switch'], - version: '0.5.0', - description: 'New `Switch` component', - prs: ['30251'], - type: 'new', - }, - { - components: ['tabs'], - version: '0.4.0', - description: 'New `Tabs` component', - prs: ['29996'], - type: 'new', - }, - { - components: ['text', 'heading'], - version: '0.4.0', - description: 'Add `truncate` prop to `Text` and `Heading`', - prs: ['29988'], - type: 'new', - }, - { - components: ['menu'], - version: '0.4.0', - description: 'Add combobox option to `Menu`', - prs: ['29986'], - type: 'new', - }, - { - components: ['textfield'], - version: '0.4.0', - description: 'Add icon prop on `TextField`', - prs: ['29820'], - type: 'new', - }, - { - components: ['button', 'button-icon'], - version: '0.4.0', - description: 'Improve icon props on `Button` and `IconButton`', - prs: ['29667'], - }, - { - components: ['text', 'heading'], - version: '0.4.0', - description: - 'Improve the way we treat custom render on `Text` and `Heading`', - prs: ['29989'], - }, - { - components: ['menu'], - version: '0.4.0', - description: 'Improve `Menu` styles', - prs: ['29986'], - }, - { - components: ['textfield'], - version: '0.4.0', - description: 'Improve `TextField` styles', - prs: ['29974'], - }, - { - components: ['textfield'], - version: '0.4.0', - description: 'Improve clear button on `TextField`', - prs: ['29878'], - }, - { - components: ['flex'], - version: '0.4.0', - description: 'Fix spacing props on all layout components', - prs: ['30013'], - }, - { - components: [], - version: '0.4.0', - description: 'Fix - Pin Base UI version', - prs: ['29782'], - }, - { - components: ['select'], - version: '0.4.0', - description: 'Fix - Clicking `Select` label moves focus to trigger', - prs: ['29755'], - }, - { - components: ['datatable'], - version: '0.4.0', - description: 'Fix `DataTable.Pagination` count issue', - prs: ['29688'], - }, - { - components: ['datatable'], - version: '0.3.0', - description: 'Add `DataTable` component', - prs: ['29484', '29603'], - type: 'new', - }, - { - components: ['select'], - version: '0.3.0', - description: 'Add `Select` component', - prs: ['29440'], - type: 'new', - }, - { - components: ['avatar'], - version: '0.3.0', - description: 'Add `Avatar` component', - prs: ['29594'], - type: 'new', - }, - { - components: ['collapsible'], - version: '0.3.0', - description: 'Add `Collapsible` component', - prs: ['29617'], - type: 'new', - }, - { - components: ['textfield'], - version: '0.3.0', - description: 'Add `TextField` component instead of `Field` + `Input`', - prs: ['29364'], - type: 'new', - }, - { - components: ['datatable'], - version: '0.3.0', - description: 'Add `TableCellProfile`', - prs: ['29600'], - type: 'new', - }, - { - components: [], - version: '0.3.0', - description: 'Add breakpoint hooks - `up()` and `down()`', - prs: ['29564'], - type: 'new', - }, - { - components: [], - version: '0.3.0', - description: 'Add gray scale css tokens', - prs: ['29543'], - type: 'new', - }, - { - components: [], - version: '0.3.0', - description: - 'Update CSS styling API using `[data-___]` instead of class names for props', - prs: ['29560'], - }, - { - components: ['checkbox'], - version: '0.3.0', - description: 'Update `Checkbox` dark mode', - prs: ['29544'], - }, - { - components: ['container'], - version: '0.3.0', - description: 'Update `Container` styles', - prs: ['29475'], - }, - { - components: ['menu'], - version: '0.3.0', - description: 'Update `Menu` styles', - prs: ['29351'], - }, - { - components: ['select'], - version: '0.3.0', - description: 'Fix `Select` styles on small sizes + with long option names', - prs: ['29545'], - }, - { - components: ['link'], - version: '0.3.0', - description: 'Fix render prop on `Link`', - prs: ['29247'], - }, - { - components: ['textfield', 'select'], - version: '0.3.0', - description: 'Remove `Field` from `TextField` + `Select`', - prs: ['29482'], - }, - { - components: ['text', 'heading'], - version: '0.3.0', - description: 'Update `textDecoration` to `none` on `Text` / `Heading`', - prs: ['29357'], - }, - { - components: ['text', 'heading'], - version: '0.3.0', - description: 'Update `textDecoration` to `none` on `Text` / `Heading`', - prs: ['29357'], - }, - { - components: [], - version: '0.3.0', - description: 'Docs - Use stories from Storybook for all examples in Nextjs', - prs: ['29306'], - }, - { - components: [], - version: '0.3.0', - description: 'Docs - Add release page (this one 🤗)', - prs: ['29461'], - }, - { - components: [], - version: '0.3.0', - description: 'Docs - Add docs for Menu, Link', - prs: ['29576'], - }, - { - components: [], - version: '0.3.0', - description: 'Fix CSS watch mode', - prs: ['29352'], - }, - { - components: ['menu'], - version: '0.2.0', - description: 'New `Menu` component', - prs: ['29151'], - type: 'new', - }, - { - components: ['button-icon'], - version: '0.2.0', - description: 'New `IconButton` component', - prs: ['29239'], - type: 'new', - }, - { - components: ['scrollarea'], - version: '0.2.0', - description: 'New `ScrollArea` component', - prs: ['29240'], - type: 'new', - }, - { - components: ['button', 'checkbox'], - version: '0.2.0', - description: 'Improve `Button` & `Checkbox` styles', - prs: ['29127', '28789'], - }, - { - components: ['text'], - version: '0.2.0', - description: 'Improve `Text` styles', - prs: ['29200'], - }, - { - components: ['icon'], - version: '0.2.0', - description: 'Renamed `CanonProvider` to `IconProvider`', - prs: ['29002'], - }, - { - components: ['icon'], - version: '0.2.0', - description: 'Added about 40+ new icons', - prs: ['29264'], - }, - { - components: [], - version: '0.2.0', - description: 'Simplified styling into a unique styles.css file', - prs: ['29199'], - }, - { - components: [], - version: '0.2.0', - description: 'Added global styles to Backstage', - prs: ['29137'], - type: 'new', - }, - { - components: [], - version: '0.2.0', - description: 'Update global CSS tokens', - prs: ['28804'], - }, - { - components: ['flex'], - version: '0.2.0', - description: 'Merge Stack + Inline into Flex', - prs: ['28634'], - }, - { - components: ['button'], - version: '0.2.0', - description: 'Improve `Button` types', - prs: ['29205'], - }, - { - components: [], - version: '0.2.0', - description: 'Move font weight and family back to each components', - prs: ['28972'], - }, - { - components: [], - version: '0.2.0', - description: 'Fix custom values in spacing props', - prs: ['28770'], - }, - { - components: [], - version: '0.2.0', - description: 'Multiple updates on the docs site', - prs: ['28760'], - }, +export const changelog = [ + ...changelog_0_6_0, + ...changelog_0_5_0, + ...changelog_0_4_0, + ...changelog_0_3_0, + ...changelog_0_2_0, ]; diff --git a/docs-ui/src/utils/changelogs/v0.2.0.ts b/docs-ui/src/utils/changelogs/v0.2.0.ts new file mode 100644 index 0000000000..b90cec0309 --- /dev/null +++ b/docs-ui/src/utils/changelogs/v0.2.0.ts @@ -0,0 +1,98 @@ +import type { ChangelogProps } from '../types'; + +export const changelog_0_2_0: ChangelogProps[] = [ + { + components: ['menu'], + version: '0.2.0', + description: 'New `Menu` component', + prs: ['29151'], + type: 'new', + }, + { + components: ['button-icon'], + version: '0.2.0', + description: 'New `IconButton` component', + prs: ['29239'], + type: 'new', + }, + { + components: ['scrollarea'], + version: '0.2.0', + description: 'New `ScrollArea` component', + prs: ['29240'], + type: 'new', + }, + { + components: ['button', 'checkbox'], + version: '0.2.0', + description: 'Improve `Button` & `Checkbox` styles', + prs: ['29127', '28789'], + }, + { + components: ['text'], + version: '0.2.0', + description: 'Improve `Text` styles', + prs: ['29200'], + }, + { + components: ['icon'], + version: '0.2.0', + description: 'Renamed `CanonProvider` to `IconProvider`', + prs: ['29002'], + }, + { + components: ['icon'], + version: '0.2.0', + description: 'Added about 40+ new icons', + prs: ['29264'], + }, + { + components: [], + version: '0.2.0', + description: 'Simplified styling into a unique styles.css file', + prs: ['29199'], + }, + { + components: [], + version: '0.2.0', + description: 'Added global styles to Backstage', + prs: ['29137'], + type: 'new', + }, + { + components: [], + version: '0.2.0', + description: 'Update global CSS tokens', + prs: ['28804'], + }, + { + components: ['flex'], + version: '0.2.0', + description: 'Merge Stack + Inline into Flex', + prs: ['28634'], + }, + { + components: ['button'], + version: '0.2.0', + description: 'Improve `Button` types', + prs: ['29205'], + }, + { + components: [], + version: '0.2.0', + description: 'Move font weight and family back to each components', + prs: ['28972'], + }, + { + components: [], + version: '0.2.0', + description: 'Fix custom values in spacing props', + prs: ['28770'], + }, + { + components: [], + version: '0.2.0', + description: 'Multiple updates on the docs site', + prs: ['28760'], + }, +]; diff --git a/docs-ui/src/utils/changelogs/v0.3.0.ts b/docs-ui/src/utils/changelogs/v0.3.0.ts new file mode 100644 index 0000000000..750ad292cf --- /dev/null +++ b/docs-ui/src/utils/changelogs/v0.3.0.ts @@ -0,0 +1,139 @@ +import type { ChangelogProps } from '../types'; + +export const changelog_0_3_0: ChangelogProps[] = [ + { + components: ['datatable'], + version: '0.3.0', + description: 'Add `DataTable` component', + prs: ['29484', '29603'], + type: 'new', + }, + { + components: ['select'], + version: '0.3.0', + description: 'Add `Select` component', + prs: ['29440'], + type: 'new', + }, + { + components: ['avatar'], + version: '0.3.0', + description: 'Add `Avatar` component', + prs: ['29594'], + type: 'new', + }, + { + components: ['collapsible'], + version: '0.3.0', + description: 'Add `Collapsible` component', + prs: ['29617'], + type: 'new', + }, + { + components: ['textfield'], + version: '0.3.0', + description: 'Add `TextField` component instead of `Field` + `Input`', + prs: ['29364'], + type: 'new', + }, + { + components: ['datatable'], + version: '0.3.0', + description: 'Add `TableCellProfile`', + prs: ['29600'], + type: 'new', + }, + { + components: [], + version: '0.3.0', + description: 'Add breakpoint hooks - `up()` and `down()`', + prs: ['29564'], + type: 'new', + }, + { + components: [], + version: '0.3.0', + description: 'Add gray scale css tokens', + prs: ['29543'], + type: 'new', + }, + { + components: [], + version: '0.3.0', + description: + 'Update CSS styling API using `[data-___]` instead of class names for props', + prs: ['29560'], + }, + { + components: ['checkbox'], + version: '0.3.0', + description: 'Update `Checkbox` dark mode', + prs: ['29544'], + }, + { + components: ['container'], + version: '0.3.0', + description: 'Update `Container` styles', + prs: ['29475'], + }, + { + components: ['menu'], + version: '0.3.0', + description: 'Update `Menu` styles', + prs: ['29351'], + }, + { + components: ['select'], + version: '0.3.0', + description: 'Fix `Select` styles on small sizes + with long option names', + prs: ['29545'], + }, + { + components: ['link'], + version: '0.3.0', + description: 'Fix render prop on `Link`', + prs: ['29247'], + }, + { + components: ['textfield', 'select'], + version: '0.3.0', + description: 'Remove `Field` from `TextField` + `Select`', + prs: ['29482'], + }, + { + components: ['text', 'heading'], + version: '0.3.0', + description: 'Update `textDecoration` to `none` on `Text` / `Heading`', + prs: ['29357'], + }, + { + components: ['text', 'heading'], + version: '0.3.0', + description: 'Update `textDecoration` to `none` on `Text` / `Heading`', + prs: ['29357'], + }, + { + components: [], + version: '0.3.0', + description: 'Docs - Use stories from Storybook for all examples in Nextjs', + prs: ['29306'], + }, + { + components: [], + version: '0.3.0', + description: 'Docs - Add release page (this one 🤗)', + prs: ['29461'], + }, + { + components: [], + version: '0.3.0', + description: 'Docs - Add docs for Menu, Link', + prs: ['29576'], + }, + { + components: [], + version: '0.3.0', + description: 'Fix CSS watch mode', + prs: ['29352'], + }, +]; diff --git a/docs-ui/src/utils/changelogs/v0.4.0.ts b/docs-ui/src/utils/changelogs/v0.4.0.ts new file mode 100644 index 0000000000..91cd641f4d --- /dev/null +++ b/docs-ui/src/utils/changelogs/v0.4.0.ts @@ -0,0 +1,87 @@ +import type { ChangelogProps } from '../types'; + +export const changelog_0_4_0: ChangelogProps[] = [ + { + components: ['tabs'], + version: '0.4.0', + description: 'New `Tabs` component', + prs: ['29996'], + type: 'new', + }, + { + components: ['text', 'heading'], + version: '0.4.0', + description: 'Add `truncate` prop to `Text` and `Heading`', + prs: ['29988'], + type: 'new', + }, + { + components: ['menu'], + version: '0.4.0', + description: 'Add combobox option to `Menu`', + prs: ['29986'], + type: 'new', + }, + { + components: ['textfield'], + version: '0.4.0', + description: 'Add icon prop on `TextField`', + prs: ['29820'], + type: 'new', + }, + { + components: ['button', 'button-icon'], + version: '0.4.0', + description: 'Improve icon props on `Button` and `IconButton`', + prs: ['29667'], + }, + { + components: ['text', 'heading'], + version: '0.4.0', + description: + 'Improve the way we treat custom render on `Text` and `Heading`', + prs: ['29989'], + }, + { + components: ['menu'], + version: '0.4.0', + description: 'Improve `Menu` styles', + prs: ['29986'], + }, + { + components: ['textfield'], + version: '0.4.0', + description: 'Improve `TextField` styles', + prs: ['29974'], + }, + { + components: ['textfield'], + version: '0.4.0', + description: 'Improve clear button on `TextField`', + prs: ['29878'], + }, + { + components: ['flex'], + version: '0.4.0', + description: 'Fix spacing props on all layout components', + prs: ['30013'], + }, + { + components: [], + version: '0.4.0', + description: 'Fix - Pin Base UI version', + prs: ['29782'], + }, + { + components: ['select'], + version: '0.4.0', + description: 'Fix - Clicking `Select` label moves focus to trigger', + prs: ['29755'], + }, + { + components: ['datatable'], + version: '0.4.0', + description: 'Fix `DataTable.Pagination` count issue', + prs: ['29688'], + }, +]; diff --git a/docs-ui/src/utils/changelogs/v0.5.0.ts b/docs-ui/src/utils/changelogs/v0.5.0.ts new file mode 100644 index 0000000000..a48cb96dcc --- /dev/null +++ b/docs-ui/src/utils/changelogs/v0.5.0.ts @@ -0,0 +1,86 @@ +import type { ChangelogProps } from '../types'; + +export const changelog_0_5_0: ChangelogProps[] = [ + { + components: ['textfield'], + version: '0.5.0', + description: '`TextField` now has multiple label sizes.', + prs: ['30249'], + type: 'breaking', + }, + { + components: ['textfield'], + version: '0.5.0', + description: + '`TextField` can now hide label and description while keeping them available for screen readers.', + prs: ['30249'], + type: 'breaking', + }, + { + components: ['textfield'], + version: '0.5.0', + description: + 'We are removing the `render` prop in favour of the `as` prop on `Heading` and `Text`.', + prs: ['30291'], + type: 'breaking', + }, + { + components: ['textfield'], + version: '0.5.0', + description: 'Move `TextField` component to use react Aria under the hood.', + prs: ['30286'], + type: 'breaking', + }, + { + components: ['button', 'button-link'], + version: '0.5.0', + description: + 'Added a render prop to the `Button` component to use it as a link.', + prs: ['30165'], + type: 'new', + }, + { + components: ['heading'], + version: '0.5.0', + description: 'Fix styling for the title4 prop on the Heading component.', + prs: ['30167'], + type: 'fix', + }, + { + components: ['flex'], + version: '0.5.0', + description: + 'Add `min-width: 0;` by default on Flex components to support truncated text.', + prs: ['30168'], + type: 'fix', + }, + { + components: ['button', 'button-link', 'button-icon'], + version: '0.5.0', + description: + '`Button`, `ButtonLink`, `ButtonIcon` now default to size `small` instead of `medium`', + prs: ['30085', '30097'], + type: 'breaking', + }, + { + components: ['grid'], + version: '0.5.0', + description: 'Rename Grid component to ``', + prs: ['30013'], + type: 'breaking', + }, + { + components: ['flex', 'container', 'grid', 'box'], + version: '0.5.0', + description: 'Fixes spacing props on layout components', + prs: ['30013'], + type: 'fix', + }, + { + components: ['switch'], + version: '0.5.0', + description: 'New `Switch` component', + prs: ['30251'], + type: 'new', + }, +]; diff --git a/docs-ui/src/utils/changelogs/v0.6.0.ts b/docs-ui/src/utils/changelogs/v0.6.0.ts new file mode 100644 index 0000000000..d892f2a78d --- /dev/null +++ b/docs-ui/src/utils/changelogs/v0.6.0.ts @@ -0,0 +1,105 @@ +import type { ChangelogProps } from '../types'; + +export const changelog_0_6_0: ChangelogProps[] = [ + { + components: ['tooltip'], + version: '0.6.0', + description: 'New `Tooltip` component.', + prs: ['30461'], + type: 'new', + }, + { + components: ['card'], + version: '0.6.0', + description: 'New `Card` component.', + prs: ['30467'], + type: 'new', + }, + { + components: ['header'], + version: '0.6.0', + description: 'New `Header` component.', + prs: ['30410', '30459', '30493'], + type: 'new', + }, + { + components: ['button', 'button-link', 'button-icon'], + version: '0.6.0', + description: 'Improve `Button`, `ButtonIcon` and `ButtonLink` styling.', + prs: ['30448'], + type: 'fix', + }, + { + components: ['text', 'heading'], + version: '0.6.0', + description: + 'Update return types for `Heading` & `Text` components for React 19.', + prs: ['30440'], + type: 'fix', + }, + { + components: ['button', 'button-link', 'button-icon'], + version: '0.6.0', + description: + 'New `tertiary` variant to `Button`, `ButtonIcon` and `ButtonLink`.', + prs: ['30453'], + type: 'new', + }, + { + components: ['skeleton'], + version: '0.6.0', + description: 'New `Skeleton` component.', + prs: ['30466'], + type: 'new', + }, + { + components: ['button-icon'], + version: '0.6.0', + description: 'Rename `IconButton` to `ButtonIcon`.', + prs: ['30297'], + type: 'breaking', + }, + { + components: ['button-link'], + version: '0.6.0', + description: + 'New `ButtonLink`, which replaces the previous render prop pattern on `Button` and `IconButton`.', + prs: ['30297'], + type: 'new', + }, + { + components: ['button', 'button-link', 'button-icon'], + version: '0.6.0', + description: 'Remove the `render` prop from all button-related components.', + prs: ['30297'], + type: 'breaking', + }, + { + components: [], + version: '0.6.0', + description: 'We are consolidating all css files into a single styles.css.', + prs: ['30325'], + type: 'fix', + }, + { + components: ['searchfield'], + version: '0.6.0', + description: 'New `SearchField` component.', + prs: ['30357'], + type: 'new', + }, + { + components: ['radio-group'], + version: '0.6.0', + description: 'New `RadioGroup` + `Radio` component.', + prs: ['30327'], + type: 'new', + }, + { + components: ['textfield'], + version: '0.6.0', + description: 'Added placeholder prop back to `TextField` component.', + prs: ['30286'], + type: 'fix', + }, +]; diff --git a/docs-ui/src/utils/types.ts b/docs-ui/src/utils/types.ts new file mode 100644 index 0000000000..f2f773ebc2 --- /dev/null +++ b/docs-ui/src/utils/types.ts @@ -0,0 +1,46 @@ +export type Component = + | 'avatar' + | 'box' + | 'button' + | 'button-link' + | 'heading' + | 'text' + | 'button-icon' + | 'icon' + | 'tabs' + | 'menu' + | 'textfield' + | 'datatable' + | 'select' + | 'collapsible' + | 'accordion' + | 'checkbox' + | 'container' + | 'link' + | 'tooltip' + | 'scrollarea' + | 'flex' + | 'switch' + | 'grid' + | 'searchfield' + | 'radio-group' + | 'card' + | 'skeleton' + | 'header' + | 'header-page' + | 'password-field' + | 'table' + | 'visually-hidden' + | 'dialog' + | 'tag-group'; + +export type Version = `${number}.${number}.${number}`; + +export interface ChangelogProps { + components: Component[]; + description: string; + version: Version; + prs: string[]; + type?: 'breaking' | 'new' | 'fix'; + commitSha?: string; +} diff --git a/docs-ui/yarn.lock b/docs-ui/yarn.lock index 480f7592f8..da7cc2b620 100644 --- a/docs-ui/yarn.lock +++ b/docs-ui/yarn.lock @@ -999,6 +999,130 @@ __metadata: languageName: node linkType: hard +"@octokit/auth-token@npm:^6.0.0": + version: 6.0.0 + resolution: "@octokit/auth-token@npm:6.0.0" + checksum: 10/a30f5c4c984964b57193de5b6f67169f74e4779fedbe716157dd3558dd9de3ca5c105cae521b7bd8ce1ae180773a2ef01afe2306ad5a329f4fd291eba2b7c7d1 + languageName: node + linkType: hard + +"@octokit/core@npm:^7.0.6": + version: 7.0.6 + resolution: "@octokit/core@npm:7.0.6" + dependencies: + "@octokit/auth-token": "npm:^6.0.0" + "@octokit/graphql": "npm:^9.0.3" + "@octokit/request": "npm:^10.0.6" + "@octokit/request-error": "npm:^7.0.2" + "@octokit/types": "npm:^16.0.0" + before-after-hook: "npm:^4.0.0" + universal-user-agent: "npm:^7.0.0" + checksum: 10/852d41fc3150d2a891156427dd0575c77889f1c7a109894ee541594e3fd47c0d4e0a93fee22966c507dfd6158b522e42846c2ac46b9d896078194c95fa81f4ae + languageName: node + linkType: hard + +"@octokit/endpoint@npm:^11.0.2": + version: 11.0.2 + resolution: "@octokit/endpoint@npm:11.0.2" + dependencies: + "@octokit/types": "npm:^16.0.0" + universal-user-agent: "npm:^7.0.2" + checksum: 10/0d088747baf94eafbba69da23ba840b40cd3f5d0bfbc51c692ff9d9d78de6d81f06366e6e30df8c1783355be826c27d38ab9ab0708396af8f430b06cfa29db35 + languageName: node + linkType: hard + +"@octokit/graphql@npm:^9.0.3": + version: 9.0.3 + resolution: "@octokit/graphql@npm:9.0.3" + dependencies: + "@octokit/request": "npm:^10.0.6" + "@octokit/types": "npm:^16.0.0" + universal-user-agent: "npm:^7.0.0" + checksum: 10/7b16f281f8571dce55280b3986fbb8d15465a7236164a5f6497ded7597ff9ee95d5796924555b979903fe8c6706fe6be1b3e140d807297f85ac8edeadc28f9fe + languageName: node + linkType: hard + +"@octokit/openapi-types@npm:^27.0.0": + version: 27.0.0 + resolution: "@octokit/openapi-types@npm:27.0.0" + checksum: 10/5cd2cdf4e41fdf522e15e3d53f3ece8380d98dda9173a6fc905828fb2c33e8733d5f5d2a757ae3a572525f4749748e66cb40e7939372132988d8eb4ba978d54f + languageName: node + linkType: hard + +"@octokit/plugin-paginate-rest@npm:^14.0.0": + version: 14.0.0 + resolution: "@octokit/plugin-paginate-rest@npm:14.0.0" + dependencies: + "@octokit/types": "npm:^16.0.0" + peerDependencies: + "@octokit/core": ">=6" + checksum: 10/57ddd857528dad9c02431bc6254c2374c06057872cf9656a4a88b162ebe1c2bc9f34fbec360f2ccff72c940f29b120758ce14e8135bd027223d381eb1b8b6579 + languageName: node + linkType: hard + +"@octokit/plugin-request-log@npm:^6.0.0": + version: 6.0.0 + resolution: "@octokit/plugin-request-log@npm:6.0.0" + peerDependencies: + "@octokit/core": ">=6" + checksum: 10/8a79973b1429bfead9113c4117f418aaef5ff368795daded3415ba14623d97d5fc08d1e822dbd566ecc9f041119e1a48a11853a9c48d9eb1caa62baa79c17f83 + languageName: node + linkType: hard + +"@octokit/plugin-rest-endpoint-methods@npm:^17.0.0": + version: 17.0.0 + resolution: "@octokit/plugin-rest-endpoint-methods@npm:17.0.0" + dependencies: + "@octokit/types": "npm:^16.0.0" + peerDependencies: + "@octokit/core": ">=6" + checksum: 10/e9d9ad4d9755cc7fb82fdcbfa870ddea8a432180f0f76c8469095557fd1e26f8caea8cae58401209be17c4f3d8cc48c0e16a3643e37e48f4d23c39e058bf2c55 + languageName: node + linkType: hard + +"@octokit/request-error@npm:^7.0.2": + version: 7.0.2 + resolution: "@octokit/request-error@npm:7.0.2" + dependencies: + "@octokit/types": "npm:^16.0.0" + checksum: 10/8edfaca9f5271115b090f470ebfe1006841ee152dd52cb39786e026236e2c13545aa3cf3187b7b1de717167696a42f91d8fa2f870bf9be0832fb2b11d11a741d + languageName: node + linkType: hard + +"@octokit/request@npm:^10.0.6": + version: 10.0.6 + resolution: "@octokit/request@npm:10.0.6" + dependencies: + "@octokit/endpoint": "npm:^11.0.2" + "@octokit/request-error": "npm:^7.0.2" + "@octokit/types": "npm:^16.0.0" + fast-content-type-parse: "npm:^3.0.0" + universal-user-agent: "npm:^7.0.2" + checksum: 10/b8c5cd43d3225c8c3b803e889ff251808ae180c953ca92642522843123dafcd84d919b20ca2969b6e4080ee3c2197a99afda15b5649ee51d0715f8249a5c9ca4 + languageName: node + linkType: hard + +"@octokit/rest@npm:^22.0.1": + version: 22.0.1 + resolution: "@octokit/rest@npm:22.0.1" + dependencies: + "@octokit/core": "npm:^7.0.6" + "@octokit/plugin-paginate-rest": "npm:^14.0.0" + "@octokit/plugin-request-log": "npm:^6.0.0" + "@octokit/plugin-rest-endpoint-methods": "npm:^17.0.0" + checksum: 10/ec2e94cfa8766716faeb3ca18527d9af746482d35aaa6e4265a30cb669ae3f31f4ebb6235edebe5ae62bc2cec2b8e88902584f698df2e7cabac3a15fd27da665 + languageName: node + linkType: hard + +"@octokit/types@npm:^16.0.0": + version: 16.0.0 + resolution: "@octokit/types@npm:16.0.0" + dependencies: + "@octokit/openapi-types": "npm:^27.0.0" + checksum: 10/03d5cfc29556a9b53eae8beb1bf15c0b704dc722db2c51b53f093f3c3ee6c1d8e20b682be8117a3a17034b458be7746d1b22aaefb959ceb5152ad7589b39e2c9 + languageName: node + linkType: hard + "@pkgjs/parseargs@npm:^0.11.0": version: 0.11.0 resolution: "@pkgjs/parseargs@npm:0.11.0" @@ -1946,6 +2070,13 @@ __metadata: languageName: node linkType: hard +"before-after-hook@npm:^4.0.0": + version: 4.0.0 + resolution: "before-after-hook@npm:4.0.0" + checksum: 10/9fd52bc0c3cca0fb115e04dacbeeaacff38fa23e1af725d62392254c31ef433b15da60efcba61552e44d64e26f25ea259f72dba005115924389e88d2fd56e19f + languageName: node + linkType: hard + "better-opn@npm:^3.0.2": version: 3.0.2 resolution: "better-opn@npm:3.0.2" @@ -2385,6 +2516,7 @@ __metadata: "@mdx-js/loader": "npm:^3.1.0" "@mdx-js/react": "npm:^3.1.0" "@next/mdx": "npm:15.3.4" + "@octokit/rest": "npm:^22.0.1" "@remixicon/react": "npm:^4.6.0" "@shikijs/transformers": "npm:^3.13.0" "@storybook/react": "npm:^8.6.12" @@ -2409,6 +2541,7 @@ __metadata: shiki: "npm:^3.13.0" storybook: "npm:^8.6.12" typescript: "npm:^5" + unified: "npm:^11.0.4" languageName: unknown linkType: soft @@ -3178,6 +3311,13 @@ __metadata: languageName: node linkType: hard +"fast-content-type-parse@npm:^3.0.0": + version: 3.0.0 + resolution: "fast-content-type-parse@npm:3.0.0" + checksum: 10/8616a8aa6c9b4f8f4f3c90eaa4e7bfc2240cfa6f41f0eef5b5aa2b2c8b38bd9ad435f1488b6d817ffd725c54651e2777b882ae9dd59366e71e7896f1ec11d473 + languageName: node + linkType: hard + "fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": version: 3.1.3 resolution: "fast-deep-equal@npm:3.1.3" @@ -6763,7 +6903,7 @@ __metadata: languageName: node linkType: hard -"unified@npm:^11.0.0": +"unified@npm:^11.0.0, unified@npm:^11.0.4": version: 11.0.5 resolution: "unified@npm:11.0.5" dependencies: @@ -6864,6 +7004,13 @@ __metadata: languageName: node linkType: hard +"universal-user-agent@npm:^7.0.0, universal-user-agent@npm:^7.0.2": + version: 7.0.3 + resolution: "universal-user-agent@npm:7.0.3" + checksum: 10/c497e85f8b11eb8fa4dce584d7a39cc98710164959f494cafc3c269b51abb20fff269951838efd7424d15f6b3d001507f3cb8b52bb5676fdb642019dfd17e63e + languageName: node + linkType: hard + "unrs-resolver@npm:^1.6.2": version: 1.11.1 resolution: "unrs-resolver@npm:1.11.1" diff --git a/packages/ui/README.md b/packages/ui/README.md index 1a0fb84a0c..271b78fca4 100644 --- a/packages/ui/README.md +++ b/packages/ui/README.md @@ -16,3 +16,26 @@ yarn add @backstage/ui - [Backstage UI Documentation](https://ui.backstage.io) - [Backstage Readme](https://github.com/backstage/backstage/blob/master/README.md) - [Backstage Documentation](https://backstage.io/docs) + +## Writing Changesets for Components + +When creating changesets for component-specific changes, add component metadata to help maintain documentation: + +```markdown +--- +'@backstage/ui': patch +--- + +Fixed size prop handling for Avatar component. + +Affected components: Avatar +``` + +**Guidelines:** + +- **Component names**: Use PascalCase as they appear in imports (Avatar, ButtonIcon, SearchField) +- **Multiple components**: `Affected components: Button, ButtonLink, ButtonIcon` +- **General changes**: Omit the metadata line (build changes, package-level updates) +- **Placement**: The line can appear anywhere in the description + +The changelog sync tool will parse these tags and update the documentation site automatically. From f3ae275cfd8b0de0d061739ab42e31c89877041d Mon Sep 17 00:00:00 2001 From: Johan Persson Date: Thu, 13 Nov 2025 14:41:31 +0100 Subject: [PATCH 32/73] chore(docs-ui): sync changelogs for @backstage/ui v0.1.0-v0.8.2 Syncs component changelogs from @backstage/ui package using the automated changelog sync script. Adds missing version changelogs (v0.1.0, v0.2.1, v0.3.2, v0.7.0-v0.8.2) and updates changelog.ts to import all versions in descending order. Affected components for each changelog entry were manually inferred using AI to categorize changes by component. Signed-off-by: Johan Persson --- docs-ui/src/utils/changelog.ts | 16 ++ docs-ui/src/utils/changelogs/v0.1.0.ts | 116 ++++++++++++++ docs-ui/src/utils/changelogs/v0.2.1.ts | 44 +++++ docs-ui/src/utils/changelogs/v0.3.2.ts | 12 ++ docs-ui/src/utils/changelogs/v0.7.0.ts | 212 +++++++++++++++++++++++++ docs-ui/src/utils/changelogs/v0.7.1.ts | 44 +++++ docs-ui/src/utils/changelogs/v0.7.2.ts | 68 ++++++++ docs-ui/src/utils/changelogs/v0.8.0.ts | 172 ++++++++++++++++++++ docs-ui/src/utils/changelogs/v0.8.2.ts | 44 +++++ 9 files changed, 728 insertions(+) create mode 100644 docs-ui/src/utils/changelogs/v0.1.0.ts create mode 100644 docs-ui/src/utils/changelogs/v0.2.1.ts create mode 100644 docs-ui/src/utils/changelogs/v0.3.2.ts create mode 100644 docs-ui/src/utils/changelogs/v0.7.0.ts create mode 100644 docs-ui/src/utils/changelogs/v0.7.1.ts create mode 100644 docs-ui/src/utils/changelogs/v0.7.2.ts create mode 100644 docs-ui/src/utils/changelogs/v0.8.0.ts create mode 100644 docs-ui/src/utils/changelogs/v0.8.2.ts diff --git a/docs-ui/src/utils/changelog.ts b/docs-ui/src/utils/changelog.ts index dafc974a51..1179d7e189 100644 --- a/docs-ui/src/utils/changelog.ts +++ b/docs-ui/src/utils/changelog.ts @@ -1,14 +1,30 @@ export * from './types'; +import { changelog_0_8_2 } from './changelogs/v0.8.2'; +import { changelog_0_8_0 } from './changelogs/v0.8.0'; +import { changelog_0_7_2 } from './changelogs/v0.7.2'; +import { changelog_0_7_1 } from './changelogs/v0.7.1'; +import { changelog_0_7_0 } from './changelogs/v0.7.0'; import { changelog_0_6_0 } from './changelogs/v0.6.0'; import { changelog_0_5_0 } from './changelogs/v0.5.0'; import { changelog_0_4_0 } from './changelogs/v0.4.0'; +import { changelog_0_3_2 } from './changelogs/v0.3.2'; import { changelog_0_3_0 } from './changelogs/v0.3.0'; +import { changelog_0_2_1 } from './changelogs/v0.2.1'; import { changelog_0_2_0 } from './changelogs/v0.2.0'; +import { changelog_0_1_0 } from './changelogs/v0.1.0'; export const changelog = [ + ...changelog_0_8_2, + ...changelog_0_8_0, + ...changelog_0_7_2, + ...changelog_0_7_1, + ...changelog_0_7_0, ...changelog_0_6_0, ...changelog_0_5_0, ...changelog_0_4_0, + ...changelog_0_3_2, ...changelog_0_3_0, + ...changelog_0_2_1, ...changelog_0_2_0, + ...changelog_0_1_0, ]; diff --git a/docs-ui/src/utils/changelogs/v0.1.0.ts b/docs-ui/src/utils/changelogs/v0.1.0.ts new file mode 100644 index 0000000000..cf333e92e9 --- /dev/null +++ b/docs-ui/src/utils/changelogs/v0.1.0.ts @@ -0,0 +1,116 @@ +import type { ChangelogProps } from '../types'; + +export const changelog_0_1_0: ChangelogProps[] = [ + { + components: [], + version: '0.1.0', + description: `**BREAKING**: Merged the Stack and Inline component into a single component called Flex.`, + prs: ['28634'], + type: 'breaking', + commitSha: '72c9800', + }, + { + components: [], + version: '0.1.0', + description: `This is the first alpha release for Canon. As part of this release we are introducing 5 layout components and 7 components. All theming is done through CSS variables.`, + prs: ['28562'], + type: 'breaking', + commitSha: '65f4acc', + }, + { + components: [], + version: '0.1.0', + description: `**BREAKING**: Fixing css structure and making sure that props are applying the correct styles for all responsive values.`, + prs: ['28630'], + type: 'breaking', + commitSha: '1e4ccce', + }, + { + components: [], + version: '0.1.0', + description: `Updated core CSS tokens and fixing the Button component accordingly.`, + prs: ['28789'], + type: 'breaking', + commitSha: '8309bdb', + }, + { + components: [], + version: '0.1.0', + description: `Removed client directive as they are not needed in React 18.`, + prs: ['28626'], + type: 'fix', + commitSha: '989af25', + }, + { + components: [], + version: '0.1.0', + description: `Fix spacing props not being applied for custom values.`, + prs: ['28770'], + type: 'fix', + commitSha: 'f44e5cf', + }, + { + components: [], + version: '0.1.0', + description: `Removed older versions of React packages as a preparatory step for upgrading to React 19. This commit does not introduce any functional changes, but removes dependencies on previous React versions, allowing for a cleaner upgrade path in subsequent commits.`, + prs: ['28579'], + type: 'fix', + commitSha: '58ec9e7', + }, + { + components: [], + version: '0.1.0', + description: `Updated core CSS tokens and fixing the Button component accordingly.`, + prs: ['28789'], + type: 'breaking', + commitSha: '8309bdb', + }, + { + components: [], + version: '0.1.0', + description: `Fix spacing props not being applied for custom values.`, + prs: ['28770'], + type: 'fix', + commitSha: 'f44e5cf', + }, + { + components: [], + version: '0.1.0', + description: `**BREAKING**: Merged the Stack and Inline component into a single component called Flex.`, + prs: ['28634'], + type: 'breaking', + commitSha: '72c9800', + }, + { + components: [], + version: '0.1.0', + description: `**BREAKING**: Fixing css structure and making sure that props are applying the correct styles for all responsive values.`, + prs: ['28630'], + type: 'breaking', + commitSha: '1e4ccce', + }, + { + components: [], + version: '0.1.0', + description: `Removed client directive as they are not needed in React 18.`, + prs: ['28626'], + type: 'fix', + commitSha: '989af25', + }, + { + components: [], + version: '0.1.0', + description: `Removed older versions of React packages as a preparatory step for upgrading to React 19. This commit does not introduce any functional changes, but removes dependencies on previous React versions, allowing for a cleaner upgrade path in subsequent commits.`, + prs: ['28579'], + type: 'fix', + commitSha: '58ec9e7', + }, + { + components: [], + version: '0.1.0', + description: `This is the first alpha release for Canon. As part of this release we are introducing 5 layout components and 7 components. All theming is done through CSS variables.`, + prs: ['28562'], + type: 'breaking', + commitSha: '65f4acc', + }, +]; diff --git a/docs-ui/src/utils/changelogs/v0.2.1.ts b/docs-ui/src/utils/changelogs/v0.2.1.ts new file mode 100644 index 0000000000..cbf0f9be0f --- /dev/null +++ b/docs-ui/src/utils/changelogs/v0.2.1.ts @@ -0,0 +1,44 @@ +import type { ChangelogProps } from '../types'; + +export const changelog_0_2_1: ChangelogProps[] = [ + { + components: [], + version: '0.2.1', + description: `Internal refactor and fixes to the prop extraction logic for layout components.`, + prs: ['29389'], + type: 'fix', + commitSha: 'f7cb538', + }, + { + components: [], + version: '0.2.1', + description: `Fix types on the Icon component.`, + prs: ['29306'], + type: 'fix', + commitSha: '5e80f0b', + }, + { + components: [], + version: '0.2.1', + description: `Updated styles for the Menu component in Canon.`, + prs: ['29351'], + type: 'fix', + commitSha: '6af7b16', + }, + { + components: [], + version: '0.2.1', + description: `Add global CSS reset for anchor tags.`, + prs: ['29357'], + type: 'new', + commitSha: '513477f', + }, + { + components: [], + version: '0.2.1', + description: `Fix the Icon component when the name is not found to return null instead of an empty SVG.`, + prs: ['29280'], + type: 'fix', + commitSha: '05a5003', + }, +]; diff --git a/docs-ui/src/utils/changelogs/v0.3.2.ts b/docs-ui/src/utils/changelogs/v0.3.2.ts new file mode 100644 index 0000000000..26dd225299 --- /dev/null +++ b/docs-ui/src/utils/changelogs/v0.3.2.ts @@ -0,0 +1,12 @@ +import type { ChangelogProps } from '../types'; + +export const changelog_0_3_2: ChangelogProps[] = [ + { + components: [], + version: '0.3.2', + description: `Fix Canon missing dependencies`, + prs: ['29642'], + type: 'fix', + commitSha: 'e996368', + }, +]; diff --git a/docs-ui/src/utils/changelogs/v0.7.0.ts b/docs-ui/src/utils/changelogs/v0.7.0.ts new file mode 100644 index 0000000000..be49afc931 --- /dev/null +++ b/docs-ui/src/utils/changelogs/v0.7.0.ts @@ -0,0 +1,212 @@ +import type { ChangelogProps } from '../types'; + +export const changelog_0_7_0: ChangelogProps[] = [ + { + components: ['datatable', 'table'], + version: '0.7.0', + description: `We are moving our DataTable component to React Aria. We removed our DataTable to only use Table as a single and opinionated option for tables. This new structure is made possible by using React Aria under the hood.`, + prs: ['30654'], + type: 'breaking', + commitSha: '0615e54', + }, + { + components: ['header-page'], + version: '0.7.0', + description: `Backstage UI - HeaderPage - We are updating the breadcrumb to be more visible and accessible.`, + prs: ['30874'], + type: 'breaking', + commitSha: 'b245c9d', + }, + { + components: ['menu'], + version: '0.7.0', + description: `**Breaking change** We are updating the Menu component to use React Aria under the hood. The structure and all props are changing to follow React Aria's guidance.`, + prs: ['30908'], + type: 'breaking', + commitSha: '800f593', + }, + { + components: ['text', 'heading', 'link'], + version: '0.7.0', + description: `**Breaking** We are upgrading our \`Text\` component to support all font sizes making the \`Heading\` component redundant. The new \`Text\` component introduces 4 sizes for title and 4 sizes for body text. All of these work in multiple colors and font weights. We improved the \`as\` prop to include all possible values. The \`Link\` component has also been updated to match the new \`Text\` component.`, + prs: ['30592'], + type: 'breaking', + commitSha: 'b0e47f3', + }, + { + components: ['select'], + version: '0.7.0', + description: `Fixes some styles on the Select component in BUI.`, + prs: ['30642'], + type: 'fix', + commitSha: 'de89a3d', + }, + { + components: ['card'], + version: '0.7.0', + description: `Export CardHeader, CardBody and CardFooter from Card component index`, + prs: ['30882'], + type: 'fix', + commitSha: 'a251b3e', + }, + { + components: ['tag-group'], + version: '0.7.0', + description: `Add new TagGroup component to Backstage UI.`, + prs: ['30919'], + type: 'new', + commitSha: 'f761306', + }, + { + components: ['header', 'header-page'], + version: '0.7.0', + description: `Fixes a couple of small bugs in BUI including setting H1 and H2 correctly on the Header and HeaderPage.`, + prs: ['30636'], + type: 'fix', + commitSha: '75fead9', + }, + { + components: ['tooltip'], + version: '0.7.0', + description: `Update styling of Tooltip element`, + prs: ['30591'], + type: 'fix', + commitSha: 'e7ff178', + }, + { + components: ['header-page', 'header'], + version: '0.7.0', + description: `**Breaking change** Move breadcrumb to fit in the \`HeaderPage\` instead of the \`Header\` in Backstage UI.`, + prs: ['30701'], + type: 'fix', + commitSha: '230b410', + }, + { + components: [], + version: '0.7.0', + description: `We are motion away from \`motion\` to use \`gsap\` instead to make Backstage UI backward compatible with React 17.`, + prs: ['30626'], + type: 'fix', + commitSha: '2f9a084', + }, + { + components: ['menu'], + version: '0.7.0', + description: `Updated Menu component in Backstage UI to use useId() from React Aria instead of React to support React 17.`, + prs: ['30675'], + type: 'fix', + commitSha: 'd4e603e', + }, + { + components: ['select'], + version: '0.7.0', + description: `Remove stylesheet import from Select component.`, + prs: ['30800'], + type: 'fix', + commitSha: '8bdc491', + }, + { + components: ['searchfield'], + version: '0.7.0', + description: `Add \`startCollapsed\` prop on the \`SearchField\` component in BUI.`, + prs: ['30729'], + type: 'new', + commitSha: '404b426', + }, + { + components: ['header'], + version: '0.7.0', + description: `Adds onTabSelectionChange to ui header component.`, + prs: ['30588'], + type: 'fix', + commitSha: 'e0e886f', + }, + { + components: ['datatable', 'table'], + version: '0.7.0', + description: `We are moving our DataTable component to React Aria. We removed our DataTable to only use Table as a single and opinionated option for tables. This new structure is made possible by using React Aria under the hood.`, + prs: ['30654'], + type: 'breaking', + commitSha: '0615e54', + }, + { + components: ['header-page', 'header'], + version: '0.7.0', + description: `**Breaking change** Move breadcrumb to fit in the \`HeaderPage\` instead of the \`Header\` in Backstage UI.`, + prs: ['30701'], + type: 'fix', + commitSha: '230b410', + }, + { + components: ['select'], + version: '0.7.0', + description: `Remove stylesheet import from Select component.`, + prs: ['30800'], + type: 'fix', + commitSha: '8bdc491', + }, + { + components: ['searchfield'], + version: '0.7.0', + description: `Add \`startCollapsed\` prop on the \`SearchField\` component in BUI.`, + prs: ['30729'], + type: 'new', + commitSha: '404b426', + }, + { + components: ['menu'], + version: '0.7.0', + description: `Updated Menu component in Backstage UI to use useId() from React Aria instead of React to support React 17.`, + prs: ['30675'], + type: 'fix', + commitSha: 'd4e603e', + }, + { + components: ['select'], + version: '0.7.0', + description: `Fixes some styles on the Select component in BUI.`, + prs: ['30642'], + type: 'fix', + commitSha: 'de89a3d', + }, + { + components: ['header', 'header-page'], + version: '0.7.0', + description: `Fixes a couple of small bugs in BUI including setting H1 and H2 correctly on the Header and HeaderPage.`, + prs: ['30636'], + type: 'fix', + commitSha: '75fead9', + }, + { + components: [], + version: '0.7.0', + description: `We are motion away from \`motion\` to use \`gsap\` instead to make Backstage UI backward compatible with React 17.`, + prs: ['30626'], + type: 'fix', + commitSha: '2f9a084', + }, + { + components: ['text', 'heading', 'link'], + version: '0.7.0', + description: `**Breaking** We are upgrading our \`Text\` component to support all font sizes making the \`Heading\` component redundant. The new \`Text\` component introduces 4 sizes for title and 4 sizes for body text. All of these work in multiple colors and font weights. We improved the \`as\` prop to include all possible values. The \`Link\` component has also been updated to match the new \`Text\` component.`, + prs: ['30592'], + type: 'breaking', + commitSha: 'b0e47f3', + }, + { + components: ['tooltip'], + version: '0.7.0', + description: `Update styling of Tooltip element`, + prs: ['30591'], + type: 'fix', + commitSha: 'e7ff178', + }, + { + components: ['header'], + version: '0.7.0', + description: `Adds onTabSelectionChange to ui header component.`, + prs: ['30588'], + type: 'fix', + commitSha: 'e0e886f', + }, +]; diff --git a/docs-ui/src/utils/changelogs/v0.7.1.ts b/docs-ui/src/utils/changelogs/v0.7.1.ts new file mode 100644 index 0000000000..0f9f4cec5c --- /dev/null +++ b/docs-ui/src/utils/changelogs/v0.7.1.ts @@ -0,0 +1,44 @@ +import type { ChangelogProps } from '../types'; + +export const changelog_0_7_1: ChangelogProps[] = [ + { + components: ['flex'], + version: '0.7.1', + description: `Add missing class for flex: baseline`, + prs: ['31013'], + type: 'new', + commitSha: '7307930', + }, + { + components: ['select'], + version: '0.7.1', + description: `Fix Select component to properly attach aria-label and aria-labelledby props to the rendered element for improved accessibility.`, + prs: ['31037'], + type: 'fix', + commitSha: '89da341', + }, + { + components: [], + version: '0.7.1', + description: `Removed the need to mock \`window.matchMedia\` in tests, falling back to default breakpoint values instead.`, + prs: ['31148'], + type: 'fix', + commitSha: '0ffa4c7', + }, + { + components: ['flex'], + version: '0.7.1', + description: `Add missing class for flex: baseline`, + prs: ['31013'], + type: 'new', + commitSha: '7307930', + }, + { + components: ['select'], + version: '0.7.1', + description: `Fix Select component to properly attach aria-label and aria-labelledby props to the rendered element for improved accessibility.`, + prs: ['31037'], + type: 'fix', + commitSha: '89da341', + }, +]; diff --git a/docs-ui/src/utils/changelogs/v0.7.2.ts b/docs-ui/src/utils/changelogs/v0.7.2.ts new file mode 100644 index 0000000000..4a47d3d0e9 --- /dev/null +++ b/docs-ui/src/utils/changelogs/v0.7.2.ts @@ -0,0 +1,68 @@ +import type { ChangelogProps } from '../types'; + +export const changelog_0_7_2: ChangelogProps[] = [ + { + components: ['tabs', 'header'], + version: '0.7.2', + description: `Making href mandatory in tabs that are part of a Header component`, + prs: ['31343'], + type: 'fix', + commitSha: '3c921c5', + }, + { + components: ['button-link'], + version: '0.7.2', + description: `Add react router for internal routing for ButtonLinks`, + prs: ['31276'], + type: 'new', + commitSha: '5c21e45', + }, + { + components: ['tabs'], + version: '0.7.2', + description: `Remove auto selection of tabs for tabs that all have href defined`, + prs: ['31281'], + type: 'fix', + commitSha: '9781815', + }, + { + components: ['menu'], + version: '0.7.2', + description: `Using react router for internal links in the Menu component`, + prs: ['31339'], + type: 'fix', + commitSha: 'f6dff5b', + }, + { + components: ['button', 'tooltip'], + version: '0.7.2', + description: `Enable tooltips on disabled buttons with automatic wrapper`, + prs: ['31230'], + type: 'fix', + commitSha: 'a9b88be', + }, + { + components: [], + version: '0.7.2', + description: `Avoid overriding onChange when spreading props`, + prs: ['31232'], + type: 'fix', + commitSha: '4adbb03', + }, + { + components: ['tabs'], + version: '0.7.2', + description: `remove default selection of tab`, + prs: ['31216'], + type: 'fix', + commitSha: '827340f', + }, + { + components: ['searchfield', 'header'], + version: '0.7.2', + description: `Improved SearchField component flex layout and animations. Fixed SearchField behavior in Header components by switching from width-based transitions to flex-basis transitions for better responsive behavior. Added new Storybook stories to test SearchField integration with Header component.`, + prs: ['31158'], + type: 'fix', + commitSha: '9a47125', + }, +]; diff --git a/docs-ui/src/utils/changelogs/v0.8.0.ts b/docs-ui/src/utils/changelogs/v0.8.0.ts new file mode 100644 index 0000000000..8a76937150 --- /dev/null +++ b/docs-ui/src/utils/changelogs/v0.8.0.ts @@ -0,0 +1,172 @@ +import type { ChangelogProps } from '../types'; + +export const changelog_0_8_0: ChangelogProps[] = [ + { + components: ['password-field', 'textfield'], + version: '0.8.0', + description: `**BREAKING**: Added a new \`PasswordField\` component. As part of this change, the \`password\` and \`search\` types have been removed from \`TextField\`.`, + prs: ['31238'], + type: 'breaking', + commitSha: '9acc1d6', + }, + { + components: [], + version: '0.8.0', + description: `**BREAKING** Restructure Backstage UI component styling to use CSS Modules instead of pure CSS. We don't expect this to be an issue in practice but it is important to call out that all styles are now loaded through CSS modules with generated class names. We are still providing fixed class names for all components to allow anyone to style their Backstage instance.`, + prs: ['31399'], + type: 'breaking', + commitSha: 'b0d11b5', + }, + { + components: ['scrollarea'], + version: '0.8.0', + description: `**BREAKING** The ScrollArea component has been removed from Backstage UI because it did not meet our accessibility standards.`, + prs: ['31409'], + type: 'breaking', + commitSha: '0c53517', + }, + { + components: ['icon'], + version: '0.8.0', + description: `**BREAKING** Remove Icon component in Backstage UI. This component was creating issue for tree-shaking. It is recommended to use icons from @remixicon/react until we found a better alternative in Backstage UI.`, + prs: ['31407'], + type: 'breaking', + commitSha: '7b319c5', + }, + { + components: ['dialog'], + version: '0.8.0', + description: `Adding a new Dialog component to Backstage UI.`, + prs: ['31371'], + type: 'fix', + commitSha: '2591b42', + }, + { + components: ['tabs'], + version: '0.8.0', + description: `remove default selection of tab`, + prs: ['31216'], + type: 'fix', + commitSha: '827340f', + }, + { + components: [], + version: '0.8.0', + description: `Fix margin utility classes in Backstage UI.`, + prs: ['31389'], + type: 'fix', + commitSha: '5dc17cc', + }, + { + components: ['menu'], + version: '0.8.0', + description: `Fix scroll jumping when opening menu in Backstage UI.`, + prs: ['31394'], + type: 'fix', + commitSha: '85faee0', + }, + { + components: ['tabs', 'header'], + version: '0.8.0', + description: `Making href mandatory in tabs that are part of a Header component`, + prs: ['31343'], + type: 'fix', + commitSha: '3c921c5', + }, + { + components: [], + version: '0.8.0', + description: `Update react-aria-components to version 1.13.0`, + prs: ['31367'], + type: 'fix', + commitSha: 'df7d2cf', + }, + { + components: ['table'], + version: '0.8.0', + description: `Fix table sorting icon position in Backstage UI.`, + prs: ['31393'], + type: 'fix', + commitSha: '507ee55', + }, + { + components: ['menu'], + version: '0.8.0', + description: `Add new \`virtualized\`, \`maxWidth\` and \`maxHeight\` props to \`Menu\`, \`MenuListBox\`, \`MenuAutocomplete\` and \`MenuAutocompleteListBox\` to allow for virtalization of long lists inside menus.`, + prs: ['31375'], + type: 'new', + commitSha: '8b7c3c9', + }, + { + components: ['box', 'container', 'flex', 'grid'], + version: '0.8.0', + description: `Added support for data attributes in \`\`, \`\`, \`\`, and \`\` components, ensuring they are correctly applied to the rendered elements.`, + prs: ['31374'], + type: 'new', + commitSha: 'b940062', + }, + { + components: ['scrollarea', 'card'], + version: '0.8.0', + description: `Cleaning up Backstage UI props definitions as well as removing ScrollArea in Card to improve accessibility.`, + prs: ['31404'], + type: 'fix', + commitSha: '206c801', + }, + { + components: ['button-link'], + version: '0.8.0', + description: `Add react router for internal routing for ButtonLinks`, + prs: ['31276'], + type: 'new', + commitSha: '5c21e45', + }, + { + components: [], + version: '0.8.0', + description: `Added a background color default on the body`, + prs: ['31365'], + type: 'new', + commitSha: '865bce8', + }, + { + components: [], + version: '0.8.0', + description: `We are restructuring our CSS to have a better layer structure.`, + prs: ['31362'], + type: 'fix', + commitSha: 'af4d9b4', + }, + { + components: ['searchfield', 'header'], + version: '0.8.0', + description: `Improved SearchField component flex layout and animations. Fixed SearchField behavior in Header components by switching from width-based transitions to flex-basis transitions for better responsive behavior. Added new Storybook stories to test SearchField integration with Header component.`, + prs: ['31158'], + type: 'fix', + commitSha: '9a47125', + }, + { + components: ['tabs'], + version: '0.8.0', + description: `Remove auto selection of tabs for tabs that all have href defined`, + prs: ['31281'], + type: 'fix', + commitSha: '9781815', + }, + { + components: [], + version: '0.8.0', + description: `Avoid overriding onChange when spreading props`, + prs: ['31232'], + type: 'fix', + commitSha: '4adbb03', + }, + { + components: ['menu'], + version: '0.8.0', + description: `Using react router for internal links in the Menu component`, + prs: ['31339'], + type: 'fix', + commitSha: 'f6dff5b', + }, +]; diff --git a/docs-ui/src/utils/changelogs/v0.8.2.ts b/docs-ui/src/utils/changelogs/v0.8.2.ts new file mode 100644 index 0000000000..1f78c7385b --- /dev/null +++ b/docs-ui/src/utils/changelogs/v0.8.2.ts @@ -0,0 +1,44 @@ +import type { ChangelogProps } from '../types'; + +export const changelog_0_8_2: ChangelogProps[] = [ + { + components: ['text'], + version: '0.8.2', + description: `Fix default text color in Backstage UI`, + prs: ['31429'], + type: 'fix', + commitSha: '26c6a78', + }, + { + components: ['text'], + version: '0.8.2', + description: `Fix the default font size in Backstage UI.`, + prs: ['31435'], + type: 'fix', + commitSha: 'dac851f', + }, + { + components: [], + version: '0.8.2', + description: `Fix CSS layer ordering in Backstage UI to make sure component styles are loaded after tokens and base declarations.`, + prs: ['31448'], + type: 'fix', + commitSha: '3c0ea67', + }, + { + components: [], + version: '0.8.2', + description: `Fix font smoothing as default in Backstage UI.`, + prs: ['31444'], + type: 'fix', + commitSha: '4eb455c', + }, + { + components: ['text'], + version: '0.8.2', + description: `Fix default font wight and font family in Backstage UI.`, + prs: ['31432'], + type: 'fix', + commitSha: '00bfb83', + }, +]; From a67670d240c6c5599a61dd9d825a8941cdb69da0 Mon Sep 17 00:00:00 2001 From: Johan Persson Date: Mon, 10 Nov 2025 16:35:28 +0100 Subject: [PATCH 33/73] refactor(ui): migrate to component-owned definitions Eliminates the central componentDefinitions registry in favor of component-owned definition files. Each of the 33 components now exports its own definition object. Changes: - Created definition.ts for all 33 components (Accordion, Avatar, Box, Button, etc.) - Updated useStyles hook to accept definition objects instead of string lookups - Removed central componentDefinitions file and related type utilities - Updated docs-ui to import and use component definitions directly - Added @backstage/ui/definitions subpath export to avoid importing component code in docs-ui, preventing Next.js SSR issues Breaking changes: - componentDefinitions object removed - ComponentDefinitionName type removed - ComponentClassNames type removed - useStyles now accepts ComponentDefinition object instead of string (internal) Migration: Component definitions are primarily for documenting the CSS class API for theming. If using definitions programmatically, migrate to either: - Use Backstage UI components directly as building blocks, or - Duplicate component CSS in your own stylesheets Signed-off-by: Johan Persson --- .changeset/little-dingos-study.md | 14 + docs-ui/src/components/Theming/index.tsx | 19 +- docs-ui/src/content/accordion.mdx | 3 +- docs-ui/src/content/avatar.mdx | 3 +- docs-ui/src/content/box.mdx | 3 +- docs-ui/src/content/button-icon.mdx | 3 +- docs-ui/src/content/button-link.mdx | 3 +- docs-ui/src/content/button.mdx | 3 +- docs-ui/src/content/card.mdx | 3 +- docs-ui/src/content/checkbox.mdx | 3 +- docs-ui/src/content/container.mdx | 3 +- docs-ui/src/content/dialog.mdx | 3 +- docs-ui/src/content/flex.mdx | 3 +- docs-ui/src/content/grid.mdx | 3 +- docs-ui/src/content/header-page.mdx | 3 +- docs-ui/src/content/header.mdx | 3 +- docs-ui/src/content/link.mdx | 3 +- docs-ui/src/content/menu.mdx | 3 +- docs-ui/src/content/password-field.mdx | 3 +- docs-ui/src/content/radio-group.mdx | 3 +- docs-ui/src/content/search-field.mdx | 3 +- docs-ui/src/content/select.mdx | 3 +- docs-ui/src/content/skeleton.mdx | 3 +- docs-ui/src/content/switch.mdx | 3 +- docs-ui/src/content/table.mdx | 3 +- docs-ui/src/content/tabs.mdx | 3 +- docs-ui/src/content/tag-group.mdx | 3 +- docs-ui/src/content/text-field.mdx | 3 +- docs-ui/src/content/text.mdx | 3 +- docs-ui/src/content/tooltip.mdx | 3 +- docs-ui/src/content/visually-hidden.mdx | 3 +- docs-ui/src/utils/definitions.ts | 1 + packages/ui/report.api.md | 859 +++++++++--------- .../ui/src/components/Accordion/Accordion.tsx | 9 +- .../ui/src/components/Accordion/definition.ts | 34 + packages/ui/src/components/Accordion/index.ts | 1 + packages/ui/src/components/Avatar/Avatar.tsx | 14 +- .../ui/src/components/Avatar/definition.ts | 32 + packages/ui/src/components/Avatar/index.ts | 1 + packages/ui/src/components/Box/Box.tsx | 3 +- packages/ui/src/components/Box/definition.ts | 51 ++ packages/ui/src/components/Box/index.tsx | 1 + packages/ui/src/components/Button/Button.tsx | 14 +- .../ui/src/components/Button/definition.ts | 34 + packages/ui/src/components/Button/index.ts | 1 + .../src/components/ButtonIcon/ButtonIcon.tsx | 18 +- .../src/components/ButtonIcon/definition.ts | 29 + .../ui/src/components/ButtonIcon/index.tsx | 1 + .../src/components/ButtonLink/ButtonLink.tsx | 18 +- .../src/components/ButtonLink/definition.ts | 27 + .../ui/src/components/ButtonLink/index.ts | 1 + packages/ui/src/components/Card/Card.tsx | 9 +- packages/ui/src/components/Card/definition.ts | 30 + packages/ui/src/components/Card/index.ts | 1 + .../ui/src/components/Checkbox/Checkbox.tsx | 3 +- .../ui/src/components/Checkbox/definition.ts | 31 + packages/ui/src/components/Checkbox/index.ts | 1 + .../ui/src/components/Container/Container.tsx | 3 +- .../ui/src/components/Container/definition.ts | 28 + .../ui/src/components/Container/index.tsx | 1 + packages/ui/src/components/Dialog/Dialog.tsx | 9 +- .../ui/src/components/Dialog/definition.ts | 32 + packages/ui/src/components/Dialog/index.ts | 1 + .../src/components/FieldError/FieldError.tsx | 3 +- .../src/components/FieldError/definition.ts | 27 + .../ui/src/components/FieldError/index.ts | 1 + .../src/components/FieldLabel/FieldLabel.tsx | 3 +- .../src/components/FieldLabel/definition.ts | 30 + .../ui/src/components/FieldLabel/index.ts | 1 + packages/ui/src/components/Flex/Flex.tsx | 3 +- packages/ui/src/components/Flex/definition.ts | 47 + packages/ui/src/components/Flex/index.ts | 1 + packages/ui/src/components/Grid/Grid.tsx | 5 +- packages/ui/src/components/Grid/definition.ts | 56 ++ packages/ui/src/components/Grid/index.ts | 1 + packages/ui/src/components/Header/Header.tsx | 3 +- .../src/components/Header/HeaderToolbar.tsx | 3 +- .../ui/src/components/Header/definition.ts | 33 + packages/ui/src/components/Header/index.tsx | 1 + .../src/components/HeaderPage/HeaderPage.tsx | 3 +- .../src/components/HeaderPage/definition.ts | 31 + .../ui/src/components/HeaderPage/index.tsx | 1 + packages/ui/src/components/Link/Link.tsx | 16 +- packages/ui/src/components/Link/definition.ts | 33 + packages/ui/src/components/Link/index.ts | 1 + packages/ui/src/components/Menu/Menu.tsx | 19 +- packages/ui/src/components/Menu/definition.ts | 42 + packages/ui/src/components/Menu/index.ts | 1 + .../PasswordField/PasswordField.tsx | 3 +- .../components/PasswordField/definition.ts | 34 + .../ui/src/components/PasswordField/index.ts | 1 + .../ui/src/components/Popover/definition.ts | 27 + packages/ui/src/components/Popover/index.ts | 17 + .../src/components/RadioGroup/RadioGroup.tsx | 5 +- .../src/components/RadioGroup/definition.ts | 29 + .../ui/src/components/RadioGroup/index.ts | 1 + .../components/SearchField/SearchField.tsx | 3 +- .../src/components/SearchField/definition.ts | 35 + .../ui/src/components/SearchField/index.ts | 1 + packages/ui/src/components/Select/Select.tsx | 17 +- .../src/components/Select/SelectContent.tsx | 3 +- .../src/components/Select/SelectListBox.tsx | 5 +- .../src/components/Select/SelectTrigger.tsx | 3 +- .../ui/src/components/Select/definition.ts | 42 + packages/ui/src/components/Select/index.ts | 1 + .../ui/src/components/Skeleton/Skeleton.tsx | 3 +- .../ui/src/components/Skeleton/definition.ts | 27 + packages/ui/src/components/Skeleton/index.tsx | 1 + packages/ui/src/components/Switch/Switch.tsx | 3 +- .../ui/src/components/Switch/definition.ts | 28 + packages/ui/src/components/Switch/index.tsx | 1 + .../src/components/Table/components/Cell.tsx | 5 +- .../Table/components/CellProfile.tsx | 12 +- .../components/Table/components/Column.tsx | 6 +- .../src/components/Table/components/Row.tsx | 6 +- .../src/components/Table/components/Table.tsx | 6 +- .../components/Table/components/TableBody.tsx | 6 +- .../Table/components/TableHeader.tsx | 6 +- .../ui/src/components/Table/definition.ts | 43 + packages/ui/src/components/Table/index.ts | 2 + packages/ui/src/components/Table/types.ts | 5 +- .../TablePagination/TablePagination.tsx | 3 +- .../components/TablePagination/definition.ts | 30 + .../src/components/TablePagination/index.ts | 1 + packages/ui/src/components/Tabs/Tabs.tsx | 9 +- .../ui/src/components/Tabs/TabsIndicators.tsx | 3 +- packages/ui/src/components/Tabs/definition.ts | 33 + packages/ui/src/components/Tabs/index.ts | 1 + .../ui/src/components/TagGroup/TagGroup.tsx | 5 +- .../ui/src/components/TagGroup/definition.ts | 31 + packages/ui/src/components/TagGroup/index.ts | 1 + packages/ui/src/components/Text/Text.tsx | 16 +- packages/ui/src/components/Text/definition.ts | 33 + packages/ui/src/components/Text/index.ts | 1 + .../ui/src/components/TextField/TextField.tsx | 3 +- .../ui/src/components/TextField/definition.ts | 36 + packages/ui/src/components/TextField/index.ts | 1 + .../ui/src/components/Tooltip/Tooltip.tsx | 3 +- .../ui/src/components/Tooltip/definition.ts | 28 + packages/ui/src/components/Tooltip/index.ts | 1 + .../VisuallyHidden/VisuallyHidden.tsx | 6 +- .../components/VisuallyHidden/definition.ts | 27 + .../ui/src/components/VisuallyHidden/index.ts | 1 + packages/ui/src/definitions.ts | 57 ++ packages/ui/src/hooks/useStyles.ts | 14 +- packages/ui/src/index.ts | 3 - packages/ui/src/types.ts | 15 - packages/ui/src/utils/componentDefinitions.ts | 425 --------- 148 files changed, 1915 insertions(+), 1042 deletions(-) create mode 100644 .changeset/little-dingos-study.md create mode 100644 docs-ui/src/utils/definitions.ts create mode 100644 packages/ui/src/components/Accordion/definition.ts create mode 100644 packages/ui/src/components/Avatar/definition.ts create mode 100644 packages/ui/src/components/Box/definition.ts create mode 100644 packages/ui/src/components/Button/definition.ts create mode 100644 packages/ui/src/components/ButtonIcon/definition.ts create mode 100644 packages/ui/src/components/ButtonLink/definition.ts create mode 100644 packages/ui/src/components/Card/definition.ts create mode 100644 packages/ui/src/components/Checkbox/definition.ts create mode 100644 packages/ui/src/components/Container/definition.ts create mode 100644 packages/ui/src/components/Dialog/definition.ts create mode 100644 packages/ui/src/components/FieldError/definition.ts create mode 100644 packages/ui/src/components/FieldLabel/definition.ts create mode 100644 packages/ui/src/components/Flex/definition.ts create mode 100644 packages/ui/src/components/Grid/definition.ts create mode 100644 packages/ui/src/components/Header/definition.ts create mode 100644 packages/ui/src/components/HeaderPage/definition.ts create mode 100644 packages/ui/src/components/Link/definition.ts create mode 100644 packages/ui/src/components/Menu/definition.ts create mode 100644 packages/ui/src/components/PasswordField/definition.ts create mode 100644 packages/ui/src/components/Popover/definition.ts create mode 100644 packages/ui/src/components/Popover/index.ts create mode 100644 packages/ui/src/components/RadioGroup/definition.ts create mode 100644 packages/ui/src/components/SearchField/definition.ts create mode 100644 packages/ui/src/components/Select/definition.ts create mode 100644 packages/ui/src/components/Skeleton/definition.ts create mode 100644 packages/ui/src/components/Switch/definition.ts create mode 100644 packages/ui/src/components/Table/definition.ts create mode 100644 packages/ui/src/components/TablePagination/definition.ts create mode 100644 packages/ui/src/components/Tabs/definition.ts create mode 100644 packages/ui/src/components/TagGroup/definition.ts create mode 100644 packages/ui/src/components/Text/definition.ts create mode 100644 packages/ui/src/components/TextField/definition.ts create mode 100644 packages/ui/src/components/Tooltip/definition.ts create mode 100644 packages/ui/src/components/VisuallyHidden/definition.ts create mode 100644 packages/ui/src/definitions.ts delete mode 100644 packages/ui/src/utils/componentDefinitions.ts diff --git a/.changeset/little-dingos-study.md b/.changeset/little-dingos-study.md new file mode 100644 index 0000000000..2defb8ed1f --- /dev/null +++ b/.changeset/little-dingos-study.md @@ -0,0 +1,14 @@ +--- +'@backstage/ui': minor +--- + +**BREAKING**: Removed central `componentDefinitions` object and related type utilities (`ComponentDefinitionName`, `ComponentClassNames`). + +Component definitions are primarily intended for documenting the CSS class API for theming purposes, not for programmatic use in JavaScript/TypeScript. + +**Migration Guide:** + +If you were using component definitions or class names to build custom components, we recommend migrating to either: + +- Use Backstage UI components directly as building blocks, or +- Duplicate the component CSS in your own stylesheets instead of relying on internal class names diff --git a/docs-ui/src/components/Theming/index.tsx b/docs-ui/src/components/Theming/index.tsx index fb669253a2..d06f51348b 100644 --- a/docs-ui/src/components/Theming/index.tsx +++ b/docs-ui/src/components/Theming/index.tsx @@ -1,18 +1,13 @@ import { MDXRemote } from 'next-mdx-remote-client/rsc'; import { formattedMDXComponents } from '@/mdx-components'; -import { Component } from '@/utils/changelog'; -import { componentDefinitions } from '../../../../packages/ui/src/utils/componentDefinitions'; -import type { DataAttributeValues } from '../../../../packages/ui/src/types'; +import type { + ComponentDefinition, + DataAttributeValues, +} from '../../../../packages/ui/src/types'; -export function Theming({ component }: { component: Component }) { - const componentDefinition = componentDefinitions[component]; - - if (!componentDefinition) { - return null; - } - - const classNames = componentDefinition.classNames; - const dataAttributes = componentDefinition.dataAttributes; +export function Theming({ definition }: { definition: ComponentDefinition }) { + const classNames = definition.classNames; + const dataAttributes = definition.dataAttributes; // Get the first class name const firstClassName = Object.values(classNames)[0]; diff --git a/docs-ui/src/content/accordion.mdx b/docs-ui/src/content/accordion.mdx index 2694f8d144..fc4bad1f8e 100644 --- a/docs-ui/src/content/accordion.mdx +++ b/docs-ui/src/content/accordion.mdx @@ -16,6 +16,7 @@ import { } from './accordion.props'; import { PageTitle } from '@/components/PageTitle'; import { Theming } from '@/components/Theming'; +import { AccordionDefinition } from '../utils/definitions'; import { ChangelogComponent } from '@/components/ChangelogComponent'; - + diff --git a/docs-ui/src/content/avatar.mdx b/docs-ui/src/content/avatar.mdx index 6e0b550101..047485c2cc 100644 --- a/docs-ui/src/content/avatar.mdx +++ b/docs-ui/src/content/avatar.mdx @@ -11,6 +11,7 @@ import { } from './avatar.props'; import { PageTitle } from '@/components/PageTitle'; import { Theming } from '@/components/Theming'; +import { AvatarDefinition } from '../utils/definitions'; import { ChangelogComponent } from '@/components/ChangelogComponent'; - + diff --git a/docs-ui/src/content/box.mdx b/docs-ui/src/content/box.mdx index d1a9dd43fe..66e99ec19a 100644 --- a/docs-ui/src/content/box.mdx +++ b/docs-ui/src/content/box.mdx @@ -12,6 +12,7 @@ import { import { spacingPropDefs } from '@/utils/propDefs'; import { PageTitle } from '@/components/PageTitle'; import { Theming } from '@/components/Theming'; +import { BoxDefinition } from '../utils/definitions'; import { ChangelogComponent } from '@/components/ChangelogComponent'; - + diff --git a/docs-ui/src/content/button-icon.mdx b/docs-ui/src/content/button-icon.mdx index fbc0c8c54c..b0595cc9bc 100644 --- a/docs-ui/src/content/button-icon.mdx +++ b/docs-ui/src/content/button-icon.mdx @@ -15,6 +15,7 @@ import { } from './button-icon.props'; import { PageTitle } from '@/components/PageTitle'; import { Theming } from '@/components/Theming'; +import { ButtonIconDefinition } from '../utils/definitions'; import { ChangelogComponent } from '@/components/ChangelogComponent'; - + diff --git a/docs-ui/src/content/button-link.mdx b/docs-ui/src/content/button-link.mdx index 5ce538838d..4f3f376aee 100644 --- a/docs-ui/src/content/button-link.mdx +++ b/docs-ui/src/content/button-link.mdx @@ -13,6 +13,7 @@ import { } from './button-link.props'; import { PageTitle } from '@/components/PageTitle'; import { Theming } from '@/components/Theming'; +import { ButtonLinkDefinition } from '../utils/definitions'; import { ChangelogComponent } from '@/components/ChangelogComponent'; - + diff --git a/docs-ui/src/content/button.mdx b/docs-ui/src/content/button.mdx index b60f32ff07..d161c97edf 100644 --- a/docs-ui/src/content/button.mdx +++ b/docs-ui/src/content/button.mdx @@ -16,6 +16,7 @@ import { import { ChangelogComponent } from '@/components/ChangelogComponent'; import { PageTitle } from '@/components/PageTitle'; import { Theming } from '@/components/Theming'; +import { ButtonDefinition } from '../utils/definitions'; - + diff --git a/docs-ui/src/content/card.mdx b/docs-ui/src/content/card.mdx index 06c3a5bc2e..c38a07e920 100644 --- a/docs-ui/src/content/card.mdx +++ b/docs-ui/src/content/card.mdx @@ -14,6 +14,7 @@ import { } from './card.props'; import { PageTitle } from '@/components/PageTitle'; import { Theming } from '@/components/Theming'; +import { CardDefinition } from '../utils/definitions'; import { ChangelogComponent } from '@/components/ChangelogComponent'; - + diff --git a/docs-ui/src/content/checkbox.mdx b/docs-ui/src/content/checkbox.mdx index 5770396ebb..c574e8fed4 100644 --- a/docs-ui/src/content/checkbox.mdx +++ b/docs-ui/src/content/checkbox.mdx @@ -10,6 +10,7 @@ import { } from './checkbox.props'; import { PageTitle } from '@/components/PageTitle'; import { Theming } from '@/components/Theming'; +import { CheckboxDefinition } from '../utils/definitions'; import { ChangelogComponent } from '@/components/ChangelogComponent'; - + diff --git a/docs-ui/src/content/container.mdx b/docs-ui/src/content/container.mdx index 05615cb1c2..56c2d5d405 100644 --- a/docs-ui/src/content/container.mdx +++ b/docs-ui/src/content/container.mdx @@ -11,6 +11,7 @@ import { } from './container.props'; import { PageTitle } from '@/components/PageTitle'; import { Theming } from '@/components/Theming'; +import { ContainerDefinition } from '../utils/definitions'; import { ChangelogComponent } from '@/components/ChangelogComponent'; - + diff --git a/docs-ui/src/content/dialog.mdx b/docs-ui/src/content/dialog.mdx index 4aa43c69de..e1e4ec436e 100644 --- a/docs-ui/src/content/dialog.mdx +++ b/docs-ui/src/content/dialog.mdx @@ -18,6 +18,7 @@ import { } from './dialog.props'; import { PageTitle } from '@/components/PageTitle'; import { Theming } from '@/components/Theming'; +import { DialogDefinition } from '../utils/definitions'; import { ChangelogComponent } from '@/components/ChangelogComponent'; - + diff --git a/docs-ui/src/content/flex.mdx b/docs-ui/src/content/flex.mdx index 89cd2e380a..36284f1f0b 100644 --- a/docs-ui/src/content/flex.mdx +++ b/docs-ui/src/content/flex.mdx @@ -14,6 +14,7 @@ import { import { spacingPropDefs } from '@/utils/propDefs'; import { PageTitle } from '@/components/PageTitle'; import { Theming } from '@/components/Theming'; +import { FlexDefinition } from '../utils/definitions'; import { ChangelogComponent } from '@/components/ChangelogComponent'; - + diff --git a/docs-ui/src/content/grid.mdx b/docs-ui/src/content/grid.mdx index 0ffdba6a66..5f179b9e14 100644 --- a/docs-ui/src/content/grid.mdx +++ b/docs-ui/src/content/grid.mdx @@ -16,6 +16,7 @@ import { } from './grid.props'; import { PageTitle } from '@/components/PageTitle'; import { Theming } from '@/components/Theming'; +import { GridDefinition } from '../utils/definitions'; import { ChangelogComponent } from '@/components/ChangelogComponent'; - + diff --git a/docs-ui/src/content/header-page.mdx b/docs-ui/src/content/header-page.mdx index d3f93058ee..12ef2c32ee 100644 --- a/docs-ui/src/content/header-page.mdx +++ b/docs-ui/src/content/header-page.mdx @@ -14,6 +14,7 @@ import { } from './header-page.props'; import { PageTitle } from '@/components/PageTitle'; import { Theming } from '@/components/Theming'; +import { HeaderPageDefinition } from '../utils/definitions'; import { ChangelogComponent } from '@/components/ChangelogComponent'; - + diff --git a/docs-ui/src/content/header.mdx b/docs-ui/src/content/header.mdx index af4e8010c5..eb505d7a62 100644 --- a/docs-ui/src/content/header.mdx +++ b/docs-ui/src/content/header.mdx @@ -13,6 +13,7 @@ import { } from './header.props'; import { PageTitle } from '@/components/PageTitle'; import { Theming } from '@/components/Theming'; +import { HeaderDefinition } from '../utils/definitions'; import { ChangelogComponent } from '@/components/ChangelogComponent'; - + diff --git a/docs-ui/src/content/link.mdx b/docs-ui/src/content/link.mdx index e0c1be353f..486c06b298 100644 --- a/docs-ui/src/content/link.mdx +++ b/docs-ui/src/content/link.mdx @@ -19,6 +19,7 @@ import { import { PageTitle } from '@/components/PageTitle'; import { Theming } from '@/components/Theming'; import { ChangelogComponent } from '@/components/ChangelogComponent'; +import { LinkDefinition } from '../utils/definitions'; - + diff --git a/docs-ui/src/content/menu.mdx b/docs-ui/src/content/menu.mdx index 743d884809..9ede0885e2 100644 --- a/docs-ui/src/content/menu.mdx +++ b/docs-ui/src/content/menu.mdx @@ -27,6 +27,7 @@ import { import { PageTitle } from '@/components/PageTitle'; import { Theming } from '@/components/Theming'; import { ChangelogComponent } from '@/components/ChangelogComponent'; +import { MenuDefinition } from '../utils/definitions'; - + diff --git a/docs-ui/src/content/password-field.mdx b/docs-ui/src/content/password-field.mdx index 14fbc9e34d..8dda2b4f2a 100644 --- a/docs-ui/src/content/password-field.mdx +++ b/docs-ui/src/content/password-field.mdx @@ -12,6 +12,7 @@ import { PageTitle } from '@/components/PageTitle'; import { Theming } from '@/components/Theming'; import { ChangelogComponent } from '@/components/ChangelogComponent'; import { CodeBlock } from '@/components/CodeBlock'; +import { PasswordFieldDefinition } from '../utils/definitions'; - + diff --git a/docs-ui/src/content/radio-group.mdx b/docs-ui/src/content/radio-group.mdx index ab3d28ad81..ba9352c026 100644 --- a/docs-ui/src/content/radio-group.mdx +++ b/docs-ui/src/content/radio-group.mdx @@ -16,6 +16,7 @@ import { PageTitle } from '@/components/PageTitle'; import { Theming } from '@/components/Theming'; import { ChangelogComponent } from '@/components/ChangelogComponent'; import { CodeBlock } from '@/components/CodeBlock'; +import { RadioGroupDefinition } from '../utils/definitions'; - + diff --git a/docs-ui/src/content/search-field.mdx b/docs-ui/src/content/search-field.mdx index 2a2d93f262..6b33feea42 100644 --- a/docs-ui/src/content/search-field.mdx +++ b/docs-ui/src/content/search-field.mdx @@ -13,6 +13,7 @@ import { PageTitle } from '@/components/PageTitle'; import { Theming } from '@/components/Theming'; import { ChangelogComponent } from '@/components/ChangelogComponent'; import { CodeBlock } from '@/components/CodeBlock'; +import { SearchFieldDefinition } from '../utils/definitions'; - + diff --git a/docs-ui/src/content/select.mdx b/docs-ui/src/content/select.mdx index eb53e9ea35..436129d749 100644 --- a/docs-ui/src/content/select.mdx +++ b/docs-ui/src/content/select.mdx @@ -18,6 +18,7 @@ import { import { PageTitle } from '@/components/PageTitle'; import { Theming } from '@/components/Theming'; import { ChangelogComponent } from '@/components/ChangelogComponent'; +import { SelectDefinition } from '../utils/definitions'; - + diff --git a/docs-ui/src/content/skeleton.mdx b/docs-ui/src/content/skeleton.mdx index f0d3fbc39a..07cd4b3332 100644 --- a/docs-ui/src/content/skeleton.mdx +++ b/docs-ui/src/content/skeleton.mdx @@ -12,6 +12,7 @@ import { import { PageTitle } from '@/components/PageTitle'; import { Theming } from '@/components/Theming'; import { ChangelogComponent } from '@/components/ChangelogComponent'; +import { SkeletonDefinition } from '../utils/definitions'; - + diff --git a/docs-ui/src/content/switch.mdx b/docs-ui/src/content/switch.mdx index acf588e37d..965cc7832b 100644 --- a/docs-ui/src/content/switch.mdx +++ b/docs-ui/src/content/switch.mdx @@ -6,6 +6,7 @@ import { switchPropDefs, snippetUsage } from './switch.props'; import { PageTitle } from '@/components/PageTitle'; import { Theming } from '@/components/Theming'; import { ChangelogComponent } from '@/components/ChangelogComponent'; +import { SwitchDefinition } from '../utils/definitions'; `} /> - + diff --git a/docs-ui/src/content/table.mdx b/docs-ui/src/content/table.mdx index 4ea5fd1677..d1a190e9dd 100644 --- a/docs-ui/src/content/table.mdx +++ b/docs-ui/src/content/table.mdx @@ -22,6 +22,7 @@ import { import { ChangelogComponent } from '@/components/ChangelogComponent'; import { PageTitle } from '@/components/PageTitle'; import { Theming } from '@/components/Theming'; +import { TableDefinition } from '../utils/definitions'; + diff --git a/docs-ui/src/content/tabs.mdx b/docs-ui/src/content/tabs.mdx index 26905d4733..1fc7448eba 100644 --- a/docs-ui/src/content/tabs.mdx +++ b/docs-ui/src/content/tabs.mdx @@ -13,6 +13,7 @@ import { } from './tabs.props'; import { PageTitle } from '@/components/PageTitle'; import { Theming } from '@/components/Theming'; +import { TabsDefinition } from '../utils/definitions'; import { ChangelogComponent } from '@/components/ChangelogComponent'; - + diff --git a/docs-ui/src/content/tag-group.mdx b/docs-ui/src/content/tag-group.mdx index 8d7fb3c3d0..88e60b31f5 100644 --- a/docs-ui/src/content/tag-group.mdx +++ b/docs-ui/src/content/tag-group.mdx @@ -15,6 +15,7 @@ import { } from './tag-group.props'; import { PageTitle } from '@/components/PageTitle'; import { Theming } from '@/components/Theming'; +import { TagGroupDefinition } from '../utils/definitions'; import { ChangelogComponent } from '@/components/ChangelogComponent'; - + diff --git a/docs-ui/src/content/text-field.mdx b/docs-ui/src/content/text-field.mdx index ad90783ffb..9f14a82975 100644 --- a/docs-ui/src/content/text-field.mdx +++ b/docs-ui/src/content/text-field.mdx @@ -10,6 +10,7 @@ import { } from './text-field.props'; import { PageTitle } from '@/components/PageTitle'; import { Theming } from '@/components/Theming'; +import { TextFieldDefinition } from '../utils/definitions'; import { ChangelogComponent } from '@/components/ChangelogComponent'; import { CodeBlock } from '@/components/CodeBlock'; @@ -59,6 +60,6 @@ Here's a simple TextField with a description. code={textFieldDescriptionSnippet} /> - + diff --git a/docs-ui/src/content/text.mdx b/docs-ui/src/content/text.mdx index 48b461aa8c..c987b8e5f7 100644 --- a/docs-ui/src/content/text.mdx +++ b/docs-ui/src/content/text.mdx @@ -14,6 +14,7 @@ import { } from './text.props'; import { PageTitle } from '@/components/PageTitle'; import { Theming } from '@/components/Theming'; +import { TextDefinition } from '../utils/definitions'; import { ChangelogComponent } from '@/components/ChangelogComponent'; - + diff --git a/docs-ui/src/content/tooltip.mdx b/docs-ui/src/content/tooltip.mdx index dd2add5308..8ebf6539d6 100644 --- a/docs-ui/src/content/tooltip.mdx +++ b/docs-ui/src/content/tooltip.mdx @@ -10,6 +10,7 @@ import { } from './tooltip.props'; import { PageTitle } from '@/components/PageTitle'; import { Theming } from '@/components/Theming'; +import { TooltipDefinition } from '../utils/definitions'; import { ChangelogComponent } from '@/components/ChangelogComponent'; - + diff --git a/docs-ui/src/content/visually-hidden.mdx b/docs-ui/src/content/visually-hidden.mdx index 26a609b245..72ffc7a1d4 100644 --- a/docs-ui/src/content/visually-hidden.mdx +++ b/docs-ui/src/content/visually-hidden.mdx @@ -10,6 +10,7 @@ import { } from './visually-hidden.props'; import { PageTitle } from '@/components/PageTitle'; import { Theming } from '@/components/Theming'; +import { VisuallyHiddenDefinition } from '../utils/definitions'; import { ChangelogComponent } from '@/components/ChangelogComponent'; - + diff --git a/docs-ui/src/utils/definitions.ts b/docs-ui/src/utils/definitions.ts new file mode 100644 index 0000000000..d279d73775 --- /dev/null +++ b/docs-ui/src/utils/definitions.ts @@ -0,0 +1 @@ +export * from '../../../packages/ui/src/definitions'; diff --git a/packages/ui/report.api.md b/packages/ui/report.api.md index 4f6087b0f0..30910724eb 100644 --- a/packages/ui/report.api.md +++ b/packages/ui/report.api.md @@ -58,6 +58,20 @@ export const Accordion: ForwardRefExoticComponent< AccordionProps & RefAttributes >; +// @public +export const AccordionDefinition: { + readonly classNames: { + readonly root: 'bui-Accordion'; + readonly trigger: 'bui-AccordionTrigger'; + readonly triggerButton: 'bui-AccordionTriggerButton'; + readonly triggerTitle: 'bui-AccordionTriggerTitle'; + readonly triggerSubtitle: 'bui-AccordionTriggerSubtitle'; + readonly triggerIcon: 'bui-AccordionTriggerIcon'; + readonly panel: 'bui-AccordionPanel'; + readonly group: 'bui-AccordionGroup'; + }; +}; + // @public (undocumented) export const AccordionGroup: ForwardRefExoticComponent< AccordionGroupProps & RefAttributes @@ -112,6 +126,18 @@ export const Avatar: ForwardRefExoticComponent< AvatarProps & RefAttributes >; +// @public +export const AvatarDefinition: { + readonly classNames: { + readonly root: 'bui-AvatarRoot'; + readonly image: 'bui-AvatarImage'; + readonly fallback: 'bui-AvatarFallback'; + }; + readonly dataAttributes: { + readonly size: readonly ['small', 'medium', 'large']; + }; +}; + // @public (undocumented) export interface AvatarProps extends React.ComponentPropsWithoutRef<'div'> { name: string; @@ -139,6 +165,37 @@ export const Box: ForwardRefExoticComponent< BoxProps & RefAttributes >; +// @public +export const BoxDefinition: { + readonly classNames: { + readonly root: 'bui-Box'; + }; + readonly utilityProps: [ + 'm', + 'mb', + 'ml', + 'mr', + 'mt', + 'mx', + 'my', + 'p', + 'pb', + 'pl', + 'pr', + 'pt', + 'px', + 'py', + 'position', + 'display', + 'width', + 'minWidth', + 'maxWidth', + 'height', + 'minHeight', + 'maxHeight', + ]; +}; + // @public (undocumented) export interface BoxProps extends SpaceProps { // (undocumented) @@ -177,11 +234,34 @@ export const Button: ForwardRefExoticComponent< ButtonProps & RefAttributes >; +// @public +export const ButtonDefinition: { + readonly classNames: { + readonly root: 'bui-Button'; + readonly content: 'bui-ButtonContent'; + readonly spinner: 'bui-ButtonSpinner'; + }; + readonly dataAttributes: { + readonly size: readonly ['small', 'medium', 'large']; + readonly variant: readonly ['primary', 'secondary', 'tertiary']; + readonly loading: readonly [true, false]; + }; +}; + // @public (undocumented) export const ButtonIcon: ForwardRefExoticComponent< ButtonIconProps & RefAttributes >; +// @public +export const ButtonIconDefinition: { + readonly classNames: { + readonly root: 'bui-ButtonIcon'; + readonly content: 'bui-ButtonIconContent'; + readonly spinner: 'bui-ButtonIconSpinner'; + }; +}; + // @public export interface ButtonIconProps extends ButtonProps_2 { // (undocumented) @@ -203,6 +283,13 @@ export const ButtonLink: ForwardRefExoticComponent< ButtonLinkProps & RefAttributes >; +// @public +export const ButtonLinkDefinition: { + readonly classNames: { + readonly root: 'bui-ButtonLink'; + }; +}; + // @public export interface ButtonLinkProps extends LinkProps_2 { // (undocumented) @@ -257,6 +344,16 @@ export interface CardBodyProps extends React.HTMLAttributes { children?: React.ReactNode; } +// @public +export const CardDefinition: { + readonly classNames: { + readonly root: 'bui-Card'; + readonly header: 'bui-CardHeader'; + readonly body: 'bui-CardBody'; + readonly footer: 'bui-CardFooter'; + }; +}; + // @public export const CardFooter: ForwardRefExoticComponent< CardFooterProps & RefAttributes @@ -297,7 +394,7 @@ export const CellProfile: (props: CellProfileProps) => JSX_2.Element; // @public (undocumented) export interface CellProfileProps extends CellProps_2 { // (undocumented) - color?: 'primary' | 'secondary'; + color?: TextColors; // (undocumented) description?: string; // (undocumented) @@ -311,7 +408,7 @@ export interface CellProfileProps extends CellProps_2 { // @public (undocumented) export interface CellProps extends CellProps_2 { // (undocumented) - color?: 'primary' | 'secondary'; + color?: TextColors; // (undocumented) description?: string; // (undocumented) @@ -327,6 +424,17 @@ export const Checkbox: ForwardRefExoticComponent< CheckboxProps & RefAttributes >; +// @public +export const CheckboxDefinition: { + readonly classNames: { + readonly root: 'bui-Checkbox'; + readonly indicator: 'bui-CheckboxIndicator'; + }; + readonly dataAttributes: { + readonly selected: readonly [true, false]; + }; +}; + // @public (undocumented) export interface CheckboxProps extends CheckboxProps_2 { // (undocumented) @@ -361,10 +469,6 @@ export type Columns = | '12' | 'auto'; -// @public -export type ComponentClassNames = - (typeof componentDefinitions)[T]['classNames']; - // @public export interface ComponentDefinition { // (undocumented) @@ -375,431 +479,19 @@ export interface ComponentDefinition { utilityProps?: string[]; } -// @public -export type ComponentDefinitionName = keyof typeof componentDefinitions; - -// @public -export const componentDefinitions: { - readonly Avatar: { - readonly classNames: { - readonly root: 'bui-AvatarRoot'; - readonly image: 'bui-AvatarImage'; - readonly fallback: 'bui-AvatarFallback'; - }; - readonly dataAttributes: { - readonly size: readonly ['small', 'medium', 'large']; - }; - }; - readonly Box: { - readonly classNames: { - readonly root: 'bui-Box'; - }; - readonly utilityProps: [ - 'm', - 'mb', - 'ml', - 'mr', - 'mt', - 'mx', - 'my', - 'p', - 'pb', - 'pl', - 'pr', - 'pt', - 'px', - 'py', - 'position', - 'display', - 'width', - 'minWidth', - 'maxWidth', - 'height', - 'minHeight', - 'maxHeight', - ]; - }; - readonly Button: { - readonly classNames: { - readonly root: 'bui-Button'; - readonly content: 'bui-ButtonContent'; - readonly spinner: 'bui-ButtonSpinner'; - }; - readonly dataAttributes: { - readonly size: readonly ['small', 'medium', 'large']; - readonly variant: readonly ['primary', 'secondary', 'tertiary']; - readonly loading: readonly [true, false]; - }; - }; - readonly ButtonIcon: { - readonly classNames: { - readonly root: 'bui-ButtonIcon'; - readonly content: 'bui-ButtonIconContent'; - readonly spinner: 'bui-ButtonIconSpinner'; - }; - }; - readonly ButtonLink: { - readonly classNames: { - readonly root: 'bui-ButtonLink'; - }; - }; - readonly Card: { - readonly classNames: { - readonly root: 'bui-Card'; - readonly header: 'bui-CardHeader'; - readonly body: 'bui-CardBody'; - readonly footer: 'bui-CardFooter'; - }; - }; - readonly Checkbox: { - readonly classNames: { - readonly root: 'bui-Checkbox'; - readonly indicator: 'bui-CheckboxIndicator'; - }; - readonly dataAttributes: { - readonly selected: readonly [true, false]; - }; - }; - readonly Container: { - readonly classNames: { - readonly root: 'bui-Container'; - }; - readonly utilityProps: ['my', 'mt', 'mb', 'py', 'pt', 'pb', 'display']; - }; - readonly Dialog: { - readonly classNames: { - readonly overlay: 'bui-DialogOverlay'; - readonly dialog: 'bui-Dialog'; - readonly header: 'bui-DialogHeader'; - readonly headerTitle: 'bui-DialogHeaderTitle'; - readonly body: 'bui-DialogBody'; - readonly footer: 'bui-DialogFooter'; - }; - }; - readonly Accordion: { - readonly classNames: { - readonly root: 'bui-Accordion'; - readonly trigger: 'bui-AccordionTrigger'; - readonly triggerButton: 'bui-AccordionTriggerButton'; - readonly triggerTitle: 'bui-AccordionTriggerTitle'; - readonly triggerSubtitle: 'bui-AccordionTriggerSubtitle'; - readonly triggerIcon: 'bui-AccordionTriggerIcon'; - readonly panel: 'bui-AccordionPanel'; - readonly group: 'bui-AccordionGroup'; - }; - }; - readonly FieldError: { - readonly classNames: { - readonly root: 'bui-FieldError'; - }; - }; - readonly FieldLabel: { - readonly classNames: { - readonly root: 'bui-FieldLabelWrapper'; - readonly label: 'bui-FieldLabel'; - readonly secondaryLabel: 'bui-FieldSecondaryLabel'; - readonly description: 'bui-FieldDescription'; - }; - }; - readonly Flex: { - readonly classNames: { - readonly root: 'bui-Flex'; - }; - readonly utilityProps: [ - 'm', - 'mb', - 'ml', - 'mr', - 'mt', - 'mx', - 'my', - 'p', - 'pb', - 'pl', - 'pr', - 'pt', - 'px', - 'py', - 'gap', - 'align', - 'justify', - 'direction', - ]; - }; - readonly Grid: { - readonly classNames: { - readonly root: 'bui-Grid'; - }; - readonly utilityProps: [ - 'columns', - 'gap', - 'm', - 'mb', - 'ml', - 'mr', - 'mt', - 'mx', - 'my', - 'p', - 'pb', - 'pl', - 'pr', - 'pt', - 'px', - 'py', - ]; - }; - readonly GridItem: { - readonly classNames: { - readonly root: 'bui-GridItem'; - }; - readonly utilityProps: ['colSpan', 'colEnd', 'colStart', 'rowSpan']; - }; - readonly Header: { - readonly classNames: { - readonly toolbar: 'bui-HeaderToolbar'; - readonly toolbarWrapper: 'bui-HeaderToolbarWrapper'; - readonly toolbarContent: 'bui-HeaderToolbarContent'; - readonly toolbarControls: 'bui-HeaderToolbarControls'; - readonly toolbarIcon: 'bui-HeaderToolbarIcon'; - readonly toolbarName: 'bui-HeaderToolbarName'; - readonly tabsWrapper: 'bui-HeaderTabsWrapper'; - }; - }; - readonly HeaderPage: { - readonly classNames: { - readonly root: 'bui-HeaderPage'; - readonly content: 'bui-HeaderPageContent'; - readonly breadcrumbs: 'bui-HeaderPageBreadcrumbs'; - readonly tabsWrapper: 'bui-HeaderPageTabsWrapper'; - readonly controls: 'bui-HeaderPageControls'; - }; - }; - readonly Heading: { - readonly classNames: { - readonly root: 'bui-Heading'; - }; - readonly dataAttributes: { - readonly variant: readonly ['title1', 'title2', 'title3', 'subtitle']; - readonly color: readonly ['primary', 'secondary', 'muted']; - readonly truncate: readonly [true, false]; - }; - }; - readonly Icon: { - readonly classNames: { - readonly root: 'bui-Icon'; - }; - }; - readonly Link: { - readonly classNames: { - readonly root: 'bui-Link'; - }; - readonly dataAttributes: { - readonly variant: readonly ['subtitle', 'body', 'caption', 'label']; - readonly weight: readonly ['regular', 'bold']; - readonly color: readonly [ - 'primary', - 'secondary', - 'danger', - 'warning', - 'success', - ]; - readonly truncate: readonly [true, false]; - }; - }; - readonly List: { - readonly classNames: { - readonly root: 'bui-List'; - readonly row: 'bui-ListRow'; - readonly label: 'bui-ListLabel'; - }; - }; - readonly Menu: { - readonly classNames: { - readonly root: 'bui-Menu'; - readonly popover: 'bui-MenuPopover'; - readonly content: 'bui-MenuContent'; - readonly section: 'bui-MenuSection'; - readonly sectionHeader: 'bui-MenuSectionHeader'; - readonly item: 'bui-MenuItem'; - readonly itemListBox: 'bui-MenuItemListBox'; - readonly itemListBoxCheck: 'bui-MenuItemListBoxCheck'; - readonly itemWrapper: 'bui-MenuItemWrapper'; - readonly itemContent: 'bui-MenuItemContent'; - readonly itemArrow: 'bui-MenuItemArrow'; - readonly separator: 'bui-MenuSeparator'; - readonly searchField: 'bui-MenuSearchField'; - readonly searchFieldInput: 'bui-MenuSearchFieldInput'; - readonly searchFieldClear: 'bui-MenuSearchFieldClear'; - readonly emptyState: 'bui-MenuEmptyState'; - }; - }; - readonly PasswordField: { - readonly classNames: { - readonly root: 'bui-PasswordField'; - readonly inputWrapper: 'bui-PasswordFieldInputWrapper'; - readonly input: 'bui-PasswordFieldInput'; - readonly inputIcon: 'bui-PasswordFieldIcon'; - readonly inputVisibility: 'bui-PasswordFieldVisibility'; - }; - readonly dataAttributes: { - readonly size: readonly ['small', 'medium']; - }; - }; - readonly Popover: { - readonly classNames: { - readonly root: 'bui-Popover'; - }; - }; - readonly RadioGroup: { - readonly classNames: { - readonly root: 'bui-RadioGroup'; - readonly content: 'bui-RadioGroupContent'; - readonly radio: 'bui-Radio'; - }; - }; - readonly SearchField: { - readonly classNames: { - readonly root: 'bui-SearchField'; - readonly clear: 'bui-SearchFieldClear'; - readonly inputWrapper: 'bui-SearchFieldInputWrapper'; - readonly input: 'bui-SearchFieldInput'; - readonly inputIcon: 'bui-SearchFieldInputIcon'; - }; - readonly dataAttributes: { - readonly startCollapsed: readonly [true, false]; - readonly size: readonly ['small', 'medium']; - }; - }; - readonly Select: { - readonly classNames: { - readonly root: 'bui-Select'; - readonly popover: 'bui-SelectPopover'; - readonly trigger: 'bui-SelectTrigger'; - readonly chevron: 'bui-SelectTriggerChevron'; - readonly value: 'bui-SelectValue'; - readonly list: 'bui-SelectList'; - readonly item: 'bui-SelectItem'; - readonly itemIndicator: 'bui-SelectItemIndicator'; - readonly itemLabel: 'bui-SelectItemLabel'; - readonly searchWrapper: 'bui-SelectSearchWrapper'; - readonly search: 'bui-SelectSearch'; - readonly searchClear: 'bui-SelectSearchClear'; - readonly noResults: 'bui-SelectNoResults'; - }; - readonly dataAttributes: { - readonly size: readonly ['small', 'medium']; - }; - }; - readonly Skeleton: { - readonly classNames: { - readonly root: 'bui-Skeleton'; - }; - }; - readonly Switch: { - readonly classNames: { - readonly root: 'bui-Switch'; - readonly indicator: 'bui-SwitchIndicator'; - }; - }; - readonly Table: { - readonly classNames: { - readonly table: 'bui-Table'; - readonly header: 'bui-TableHeader'; - readonly body: 'bui-TableBody'; - readonly row: 'bui-TableRow'; - readonly head: 'bui-TableHead'; - readonly headContent: 'bui-TableHeadContent'; - readonly headSortButton: 'bui-TableHeadSortButton'; - readonly caption: 'bui-TableCaption'; - readonly cell: 'bui-TableCell'; - readonly cellContentWrapper: 'bui-TableCellContentWrapper'; - readonly cellContent: 'bui-TableCellContent'; - readonly cellIcon: 'bui-TableCellIcon'; - readonly cellProfileAvatar: 'bui-TableCellProfileAvatar'; - readonly cellProfileAvatarImage: 'bui-TableCellProfileAvatarImage'; - readonly cellProfileAvatarFallback: 'bui-TableCellProfileAvatarFallback'; - readonly cellProfileName: 'bui-TableCellProfileName'; - readonly cellProfileLink: 'bui-TableCellProfileLink'; - }; - }; - readonly TablePagination: { - readonly classNames: { - readonly root: 'bui-TablePagination'; - readonly left: 'bui-TablePaginationLeft'; - readonly right: 'bui-TablePaginationRight'; - readonly select: 'bui-TablePaginationSelect'; - }; - }; - readonly Tabs: { - readonly classNames: { - readonly tabs: 'bui-Tabs'; - readonly tabList: 'bui-TabList'; - readonly tabListWrapper: 'bui-TabListWrapper'; - readonly tab: 'bui-Tab'; - readonly tabActive: 'bui-TabActive'; - readonly tabHovered: 'bui-TabHovered'; - readonly panel: 'bui-TabPanel'; - }; - }; - readonly TagGroup: { - readonly classNames: { - readonly group: 'bui-TagGroup'; - readonly list: 'bui-TagList'; - readonly tag: 'bui-Tag'; - readonly tagIcon: 'bui-TagIcon'; - readonly tagRemoveButton: 'bui-TagRemoveButton'; - }; - }; - readonly Text: { - readonly classNames: { - readonly root: 'bui-Text'; - }; - readonly dataAttributes: { - readonly variant: readonly ['subtitle', 'body', 'caption', 'label']; - readonly weight: readonly ['regular', 'bold']; - readonly color: readonly [ - 'primary', - 'secondary', - 'danger', - 'warning', - 'success', - ]; - readonly truncate: readonly [true, false]; - }; - }; - readonly TextField: { - readonly classNames: { - readonly root: 'bui-TextField'; - readonly inputWrapper: 'bui-InputWrapper'; - readonly input: 'bui-Input'; - readonly inputIcon: 'bui-InputIcon'; - readonly inputAction: 'bui-InputAction'; - }; - readonly dataAttributes: { - readonly invalid: readonly [true, false]; - readonly disabled: readonly [true, false]; - readonly size: readonly ['small', 'medium']; - }; - }; - readonly Tooltip: { - readonly classNames: { - readonly tooltip: 'bui-Tooltip'; - readonly arrow: 'bui-TooltipArrow'; - }; - }; - readonly VisuallyHidden: { - readonly classNames: { - readonly root: 'bui-VisuallyHidden'; - }; - }; -}; - // @public (undocumented) export const Container: ForwardRefExoticComponent< ContainerProps & RefAttributes >; +// @public +export const ContainerDefinition: { + readonly classNames: { + readonly root: 'bui-Container'; + }; + readonly utilityProps: ['my', 'mt', 'mb', 'py', 'pt', 'pb', 'display']; +}; + // @public (undocumented) export interface ContainerProps { // (undocumented) @@ -846,6 +538,18 @@ export interface DialogBodyProps { className?: string; } +// @public +export const DialogDefinition: { + readonly classNames: { + readonly overlay: 'bui-DialogOverlay'; + readonly dialog: 'bui-Dialog'; + readonly header: 'bui-DialogHeader'; + readonly headerTitle: 'bui-DialogHeaderTitle'; + readonly body: 'bui-DialogBody'; + readonly footer: 'bui-DialogFooter'; + }; +}; + // @public (undocumented) export const DialogFooter: ForwardRefExoticComponent< Omit< @@ -894,6 +598,16 @@ export const FieldLabel: ForwardRefExoticComponent< FieldLabelProps & RefAttributes >; +// @public +export const FieldLabelDefinition: { + readonly classNames: { + readonly root: 'bui-FieldLabelWrapper'; + readonly label: 'bui-FieldLabel'; + readonly secondaryLabel: 'bui-FieldSecondaryLabel'; + readonly description: 'bui-FieldDescription'; + }; +}; + // @public (undocumented) export interface FieldLabelProps extends Pick, 'className'> { @@ -909,6 +623,33 @@ export const Flex: ForwardRefExoticComponent< FlexProps & RefAttributes >; +// @public +export const FlexDefinition: { + readonly classNames: { + readonly root: 'bui-Flex'; + }; + readonly utilityProps: [ + 'm', + 'mb', + 'ml', + 'mr', + 'mt', + 'mx', + 'my', + 'p', + 'pb', + 'pl', + 'pr', + 'pt', + 'px', + 'py', + 'gap', + 'align', + 'justify', + 'direction', + ]; +}; + // @public (undocumented) export type FlexDirection = 'row' | 'column'; @@ -941,6 +682,39 @@ export const Grid: { >; }; +// @public +export const GridDefinition: { + readonly classNames: { + readonly root: 'bui-Grid'; + }; + readonly utilityProps: [ + 'columns', + 'gap', + 'm', + 'mb', + 'ml', + 'mr', + 'mt', + 'mx', + 'my', + 'p', + 'pb', + 'pl', + 'pr', + 'pt', + 'px', + 'py', + ]; +}; + +// @public +export const GridItemDefinition: { + readonly classNames: { + readonly root: 'bui-GridItem'; + }; + readonly utilityProps: ['colSpan', 'colEnd', 'colStart', 'rowSpan']; +}; + // @public (undocumented) export interface GridItemProps { // (undocumented) @@ -976,6 +750,19 @@ export interface GridProps extends SpaceProps { // @public export const Header: (props: HeaderProps) => JSX_2.Element; +// @public +export const HeaderDefinition: { + readonly classNames: { + readonly toolbar: 'bui-HeaderToolbar'; + readonly toolbarWrapper: 'bui-HeaderToolbarWrapper'; + readonly toolbarContent: 'bui-HeaderToolbarContent'; + readonly toolbarControls: 'bui-HeaderToolbarControls'; + readonly toolbarIcon: 'bui-HeaderToolbarIcon'; + readonly toolbarName: 'bui-HeaderToolbarName'; + readonly tabsWrapper: 'bui-HeaderTabsWrapper'; + }; +}; + // @public export const HeaderPage: (props: HeaderPageProps) => JSX_2.Element; @@ -987,6 +774,17 @@ export interface HeaderPageBreadcrumb { label: string; } +// @public +export const HeaderPageDefinition: { + readonly classNames: { + readonly root: 'bui-HeaderPage'; + readonly content: 'bui-HeaderPageContent'; + readonly breadcrumbs: 'bui-HeaderPageBreadcrumbs'; + readonly tabsWrapper: 'bui-HeaderPageTabsWrapper'; + readonly controls: 'bui-HeaderPageControls'; + }; +}; + // @public export interface HeaderPageProps { // (undocumented) @@ -1044,6 +842,25 @@ export const Link: ForwardRefExoticComponent< LinkProps & RefAttributes >; +// @public +export const LinkDefinition: { + readonly classNames: { + readonly root: 'bui-Link'; + }; + readonly dataAttributes: { + readonly variant: readonly ['subtitle', 'body', 'caption', 'label']; + readonly weight: readonly ['regular', 'bold']; + readonly color: readonly [ + 'primary', + 'secondary', + 'danger', + 'warning', + 'success', + ]; + readonly truncate: readonly [true, false]; + }; +}; + // @public (undocumented) export interface LinkProps extends LinkProps_2 { // (undocumented) @@ -1104,6 +921,28 @@ export interface MenuAutocompleteProps virtualized?: boolean; } +// @public +export const MenuDefinition: { + readonly classNames: { + readonly root: 'bui-Menu'; + readonly popover: 'bui-MenuPopover'; + readonly content: 'bui-MenuContent'; + readonly section: 'bui-MenuSection'; + readonly sectionHeader: 'bui-MenuSectionHeader'; + readonly item: 'bui-MenuItem'; + readonly itemListBox: 'bui-MenuItemListBox'; + readonly itemListBoxCheck: 'bui-MenuItemListBoxCheck'; + readonly itemWrapper: 'bui-MenuItemWrapper'; + readonly itemContent: 'bui-MenuItemContent'; + readonly itemArrow: 'bui-MenuItemArrow'; + readonly separator: 'bui-MenuSeparator'; + readonly searchField: 'bui-MenuSearchField'; + readonly searchFieldInput: 'bui-MenuSearchFieldInput'; + readonly searchFieldClear: 'bui-MenuSearchFieldClear'; + readonly emptyState: 'bui-MenuEmptyState'; + }; +}; + // @public (undocumented) export const MenuItem: (props: MenuItemProps) => JSX_2.Element; @@ -1204,6 +1043,15 @@ export const RadioGroup: ForwardRefExoticComponent< RadioGroupProps & RefAttributes >; +// @public +export const RadioGroupDefinition: { + readonly classNames: { + readonly root: 'bui-RadioGroup'; + readonly content: 'bui-RadioGroupContent'; + readonly radio: 'bui-Radio'; + }; +}; + // @public (undocumented) export interface RadioGroupProps extends Omit, @@ -1226,6 +1074,21 @@ export const SearchField: ForwardRefExoticComponent< SearchFieldProps & RefAttributes >; +// @public +export const SearchFieldDefinition: { + readonly classNames: { + readonly root: 'bui-SearchField'; + readonly clear: 'bui-SearchFieldClear'; + readonly inputWrapper: 'bui-SearchFieldInputWrapper'; + readonly input: 'bui-SearchFieldInput'; + readonly inputIcon: 'bui-SearchFieldInputIcon'; + }; + readonly dataAttributes: { + readonly startCollapsed: readonly [true, false]; + readonly size: readonly ['small', 'medium']; + }; +}; + // @public (undocumented) export interface SearchFieldProps extends SearchFieldProps_2, @@ -1241,6 +1104,28 @@ export const Select: ForwardRefExoticComponent< SelectProps<'multiple' | 'single'> & RefAttributes >; +// @public +export const SelectDefinition: { + readonly classNames: { + readonly root: 'bui-Select'; + readonly popover: 'bui-SelectPopover'; + readonly trigger: 'bui-SelectTrigger'; + readonly chevron: 'bui-SelectTriggerChevron'; + readonly value: 'bui-SelectValue'; + readonly list: 'bui-SelectList'; + readonly item: 'bui-SelectItem'; + readonly itemIndicator: 'bui-SelectItemIndicator'; + readonly itemLabel: 'bui-SelectItemLabel'; + readonly searchWrapper: 'bui-SelectSearchWrapper'; + readonly search: 'bui-SelectSearch'; + readonly searchClear: 'bui-SelectSearchClear'; + readonly noResults: 'bui-SelectNoResults'; + }; + readonly dataAttributes: { + readonly size: readonly ['small', 'medium']; + }; +}; + // @public (undocumented) export interface SelectProps extends SelectProps_2, @@ -1256,6 +1141,13 @@ export interface SelectProps // @public (undocumented) export const Skeleton: (props: SkeletonProps) => JSX_2.Element; +// @public +export const SkeletonDefinition: { + readonly classNames: { + readonly root: 'bui-Skeleton'; + }; +}; + // @public (undocumented) export interface SkeletonProps extends ComponentProps<'div'> { // (undocumented) @@ -1329,6 +1221,14 @@ export const Switch: ForwardRefExoticComponent< SwitchProps & RefAttributes >; +// @public +export const SwitchDefinition: { + readonly classNames: { + readonly root: 'bui-Switch'; + readonly indicator: 'bui-SwitchIndicator'; + }; +}; + // @public (undocumented) export interface SwitchProps extends SwitchProps_2 { label?: string; @@ -1345,6 +1245,29 @@ export const TableBody: ( props: TableBodyProps, ) => JSX_2.Element; +// @public +export const TableDefinition: { + readonly classNames: { + readonly table: 'bui-Table'; + readonly header: 'bui-TableHeader'; + readonly body: 'bui-TableBody'; + readonly row: 'bui-TableRow'; + readonly head: 'bui-TableHead'; + readonly headContent: 'bui-TableHeadContent'; + readonly headSortButton: 'bui-TableHeadSortButton'; + readonly caption: 'bui-TableCaption'; + readonly cell: 'bui-TableCell'; + readonly cellContentWrapper: 'bui-TableCellContentWrapper'; + readonly cellContent: 'bui-TableCellContent'; + readonly cellIcon: 'bui-TableCellIcon'; + readonly cellProfileAvatar: 'bui-TableCellProfileAvatar'; + readonly cellProfileAvatarImage: 'bui-TableCellProfileAvatarImage'; + readonly cellProfileAvatarFallback: 'bui-TableCellProfileAvatarFallback'; + readonly cellProfileName: 'bui-TableCellProfileName'; + readonly cellProfileLink: 'bui-TableCellProfileLink'; + }; +}; + // @public (undocumented) export const TableHeader: ( props: TableHeaderProps, @@ -1353,6 +1276,16 @@ export const TableHeader: ( // @public export function TablePagination(props: TablePaginationProps): JSX_2.Element; +// @public +export const TablePaginationDefinition: { + readonly classNames: { + readonly root: 'bui-TablePagination'; + readonly left: 'bui-TablePaginationLeft'; + readonly right: 'bui-TablePaginationRight'; + readonly select: 'bui-TablePaginationSelect'; + }; +}; + // @public (undocumented) export interface TablePaginationProps extends React.HTMLAttributes { @@ -1399,6 +1332,19 @@ export interface TabProps extends TabProps_2 { // @public export const Tabs: (props: TabsProps) => JSX_2.Element | null; +// @public +export const TabsDefinition: { + readonly classNames: { + readonly tabs: 'bui-Tabs'; + readonly tabList: 'bui-TabList'; + readonly tabListWrapper: 'bui-TabListWrapper'; + readonly tab: 'bui-Tab'; + readonly tabActive: 'bui-TabActive'; + readonly tabHovered: 'bui-TabHovered'; + readonly panel: 'bui-TabPanel'; + }; +}; + // @public export interface TabsProps extends TabsProps_2 {} @@ -1410,6 +1356,17 @@ export const TagGroup: ( props: TagGroupProps, ) => JSX_2.Element; +// @public +export const TagGroupDefinition: { + readonly classNames: { + readonly group: 'bui-TagGroup'; + readonly list: 'bui-TagList'; + readonly tag: 'bui-Tag'; + readonly tagIcon: 'bui-TagIcon'; + readonly tagRemoveButton: 'bui-TagRemoveButton'; + }; +}; + // @public export interface TagGroupProps extends Omit, @@ -1438,11 +1395,46 @@ export type TextColors = 'primary' | 'secondary'; // @public (undocumented) export type TextColorStatus = 'danger' | 'warning' | 'success'; +// @public +export const TextDefinition: { + readonly classNames: { + readonly root: 'bui-Text'; + }; + readonly dataAttributes: { + readonly variant: readonly ['subtitle', 'body', 'caption', 'label']; + readonly weight: readonly ['regular', 'bold']; + readonly color: readonly [ + 'primary', + 'secondary', + 'danger', + 'warning', + 'success', + ]; + readonly truncate: readonly [true, false]; + }; +}; + // @public (undocumented) export const TextField: ForwardRefExoticComponent< TextFieldProps & RefAttributes >; +// @public +export const TextFieldDefinition: { + readonly classNames: { + readonly root: 'bui-TextField'; + readonly inputWrapper: 'bui-InputWrapper'; + readonly input: 'bui-Input'; + readonly inputIcon: 'bui-InputIcon'; + readonly inputAction: 'bui-InputAction'; + }; + readonly dataAttributes: { + readonly invalid: readonly [true, false]; + readonly disabled: readonly [true, false]; + readonly size: readonly ['small', 'medium']; + }; +}; + // @public (undocumented) export interface TextFieldProps extends TextFieldProps_2, @@ -1502,6 +1494,14 @@ export const Tooltip: ForwardRefExoticComponent< TooltipProps & RefAttributes >; +// @public +export const TooltipDefinition: { + readonly classNames: { + readonly tooltip: 'bui-Tooltip'; + readonly arrow: 'bui-TooltipArrow'; + }; +}; + // @public (undocumented) export interface TooltipProps extends Omit { // (undocumented) @@ -1597,6 +1597,13 @@ export interface UtilityProps extends SpaceProps { // @public export const VisuallyHidden: (props: VisuallyHiddenProps) => JSX_2.Element; +// @public +export const VisuallyHiddenDefinition: { + readonly classNames: { + readonly root: 'bui-VisuallyHidden'; + }; +}; + // @public export interface VisuallyHiddenProps extends ComponentProps<'div'> { // (undocumented) diff --git a/packages/ui/src/components/Accordion/Accordion.tsx b/packages/ui/src/components/Accordion/Accordion.tsx index 3f35ab7554..f31b923490 100644 --- a/packages/ui/src/components/Accordion/Accordion.tsx +++ b/packages/ui/src/components/Accordion/Accordion.tsx @@ -31,6 +31,7 @@ import type { AccordionGroupProps, } from './types'; import { useStyles } from '../../hooks/useStyles'; +import { AccordionDefinition } from './definition'; import styles from './Accordion.module.css'; import { Flex } from '../Flex'; @@ -39,7 +40,7 @@ export const Accordion = forwardRef< React.ElementRef, AccordionProps >(({ className, ...props }, ref) => { - const { classNames, cleanedProps } = useStyles('Accordion', props); + const { classNames, cleanedProps } = useStyles(AccordionDefinition, props); return ( , AccordionTriggerProps >(({ className, title, subtitle, children, ...props }, ref) => { - const { classNames, cleanedProps } = useStyles('Accordion', props); + const { classNames, cleanedProps } = useStyles(AccordionDefinition, props); return ( , AccordionPanelProps >(({ className, ...props }, ref) => { - const { classNames, cleanedProps } = useStyles('Accordion', props); + const { classNames, cleanedProps } = useStyles(AccordionDefinition, props); return ( , AccordionGroupProps >(({ className, allowsMultiple = false, ...props }, ref) => { - const { classNames, cleanedProps } = useStyles('Accordion', props); + const { classNames, cleanedProps } = useStyles(AccordionDefinition, props); return ( ((props, ref) => { - const { classNames, dataAttributes, cleanedProps } = useStyles('Avatar', { - size: 'medium', - purpose: 'informative', - ...props, - }); + const { classNames, dataAttributes, cleanedProps } = useStyles( + AvatarDefinition, + { + size: 'medium', + purpose: 'informative', + ...props, + }, + ); const { className, src, name, purpose, ...rest } = cleanedProps; diff --git a/packages/ui/src/components/Avatar/definition.ts b/packages/ui/src/components/Avatar/definition.ts new file mode 100644 index 0000000000..8ad2c31bdc --- /dev/null +++ b/packages/ui/src/components/Avatar/definition.ts @@ -0,0 +1,32 @@ +/* + * 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 type { ComponentDefinition } from '../../types'; + +/** + * Component definition for Avatar + * @public + */ +export const AvatarDefinition = { + classNames: { + root: 'bui-AvatarRoot', + image: 'bui-AvatarImage', + fallback: 'bui-AvatarFallback', + }, + dataAttributes: { + size: ['small', 'medium', 'large'] as const, + }, +} as const satisfies ComponentDefinition; diff --git a/packages/ui/src/components/Avatar/index.ts b/packages/ui/src/components/Avatar/index.ts index d5ab42beb2..38e896bdb4 100644 --- a/packages/ui/src/components/Avatar/index.ts +++ b/packages/ui/src/components/Avatar/index.ts @@ -15,4 +15,5 @@ */ export { Avatar } from './Avatar'; +export { AvatarDefinition } from './definition'; export type { AvatarProps } from './types'; diff --git a/packages/ui/src/components/Box/Box.tsx b/packages/ui/src/components/Box/Box.tsx index fdcee3d382..34c337824b 100644 --- a/packages/ui/src/components/Box/Box.tsx +++ b/packages/ui/src/components/Box/Box.tsx @@ -19,11 +19,12 @@ import { BoxProps } from './types'; import clsx from 'clsx'; import { useStyles } from '../../hooks/useStyles'; import styles from './Box.module.css'; +import { BoxDefinition } from './definition'; /** @public */ export const Box = forwardRef((props, ref) => { const { classNames, utilityClasses, style, cleanedProps } = useStyles( - 'Box', + BoxDefinition, props, ); diff --git a/packages/ui/src/components/Box/definition.ts b/packages/ui/src/components/Box/definition.ts new file mode 100644 index 0000000000..f5b6fc6553 --- /dev/null +++ b/packages/ui/src/components/Box/definition.ts @@ -0,0 +1,51 @@ +/* + * 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 type { ComponentDefinition } from '../../types'; + +/** + * Component definition for Box + * @public + */ +export const BoxDefinition = { + classNames: { + root: 'bui-Box', + }, + utilityProps: [ + 'm', + 'mb', + 'ml', + 'mr', + 'mt', + 'mx', + 'my', + 'p', + 'pb', + 'pl', + 'pr', + 'pt', + 'px', + 'py', + 'position', + 'display', + 'width', + 'minWidth', + 'maxWidth', + 'height', + 'minHeight', + 'maxHeight', + ], +} as const satisfies ComponentDefinition; diff --git a/packages/ui/src/components/Box/index.tsx b/packages/ui/src/components/Box/index.tsx index d47e653dfd..a2b2861efb 100644 --- a/packages/ui/src/components/Box/index.tsx +++ b/packages/ui/src/components/Box/index.tsx @@ -14,4 +14,5 @@ * limitations under the License. */ export { Box } from './Box'; +export { BoxDefinition } from './definition'; export type * from './types'; diff --git a/packages/ui/src/components/Button/Button.tsx b/packages/ui/src/components/Button/Button.tsx index 45228ff6ef..f010e5e57d 100644 --- a/packages/ui/src/components/Button/Button.tsx +++ b/packages/ui/src/components/Button/Button.tsx @@ -20,16 +20,20 @@ import { Button as RAButton, ProgressBar } from 'react-aria-components'; import { RiLoader4Line } from '@remixicon/react'; import type { ButtonProps } from './types'; import { useStyles } from '../../hooks/useStyles'; +import { ButtonDefinition } from './definition'; import styles from './Button.module.css'; /** @public */ export const Button = forwardRef( (props: ButtonProps, ref: Ref) => { - const { classNames, dataAttributes, cleanedProps } = useStyles('Button', { - size: 'small', - variant: 'primary', - ...props, - }); + const { classNames, dataAttributes, cleanedProps } = useStyles( + ButtonDefinition, + { + size: 'small', + variant: 'primary', + ...props, + }, + ); const { children, className, iconStart, iconEnd, loading, ...rest } = cleanedProps; diff --git a/packages/ui/src/components/Button/definition.ts b/packages/ui/src/components/Button/definition.ts new file mode 100644 index 0000000000..a017157774 --- /dev/null +++ b/packages/ui/src/components/Button/definition.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 type { ComponentDefinition } from '../../types'; + +/** + * Component definition for Button + * @public + */ +export const ButtonDefinition = { + classNames: { + root: 'bui-Button', + content: 'bui-ButtonContent', + spinner: 'bui-ButtonSpinner', + }, + dataAttributes: { + size: ['small', 'medium', 'large'] as const, + variant: ['primary', 'secondary', 'tertiary'] as const, + loading: [true, false] as const, + }, +} as const satisfies ComponentDefinition; diff --git a/packages/ui/src/components/Button/index.ts b/packages/ui/src/components/Button/index.ts index b9c497ae1f..e624fcedde 100644 --- a/packages/ui/src/components/Button/index.ts +++ b/packages/ui/src/components/Button/index.ts @@ -16,3 +16,4 @@ export * from './Button'; export * from './types'; +export { ButtonDefinition } from './definition'; diff --git a/packages/ui/src/components/ButtonIcon/ButtonIcon.tsx b/packages/ui/src/components/ButtonIcon/ButtonIcon.tsx index fecccd6a37..d3596da799 100644 --- a/packages/ui/src/components/ButtonIcon/ButtonIcon.tsx +++ b/packages/ui/src/components/ButtonIcon/ButtonIcon.tsx @@ -20,19 +20,25 @@ import { Button as RAButton, ProgressBar } from 'react-aria-components'; import { RiLoader4Line } from '@remixicon/react'; import type { ButtonIconProps } from './types'; import { useStyles } from '../../hooks/useStyles'; +import { ButtonDefinition } from '../Button/definition'; +import { ButtonIconDefinition } from './definition'; import stylesButtonIcon from './ButtonIcon.module.css'; import stylesButton from '../Button/Button.module.css'; /** @public */ export const ButtonIcon = forwardRef( (props: ButtonIconProps, ref: Ref) => { - const { classNames, dataAttributes, cleanedProps } = useStyles('Button', { - size: 'small', - variant: 'primary', - ...props, - }); + const { classNames, dataAttributes, cleanedProps } = useStyles( + ButtonDefinition, + { + size: 'small', + variant: 'primary', + ...props, + }, + ); - const { classNames: classNamesButtonIcon } = useStyles('ButtonIcon'); + const { classNames: classNamesButtonIcon } = + useStyles(ButtonIconDefinition); const { className, icon, loading, ...rest } = cleanedProps; diff --git a/packages/ui/src/components/ButtonIcon/definition.ts b/packages/ui/src/components/ButtonIcon/definition.ts new file mode 100644 index 0000000000..48d0a558ab --- /dev/null +++ b/packages/ui/src/components/ButtonIcon/definition.ts @@ -0,0 +1,29 @@ +/* + * 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 type { ComponentDefinition } from '../../types'; + +/** + * Component definition for ButtonIcon + * @public + */ +export const ButtonIconDefinition = { + classNames: { + root: 'bui-ButtonIcon', + content: 'bui-ButtonIconContent', + spinner: 'bui-ButtonIconSpinner', + }, +} as const satisfies ComponentDefinition; diff --git a/packages/ui/src/components/ButtonIcon/index.tsx b/packages/ui/src/components/ButtonIcon/index.tsx index 686fd844e8..acede912ad 100644 --- a/packages/ui/src/components/ButtonIcon/index.tsx +++ b/packages/ui/src/components/ButtonIcon/index.tsx @@ -15,4 +15,5 @@ */ export * from './ButtonIcon'; +export { ButtonIconDefinition } from './definition'; export * from './types'; diff --git a/packages/ui/src/components/ButtonLink/ButtonLink.tsx b/packages/ui/src/components/ButtonLink/ButtonLink.tsx index 28a67105bb..db3c95ee54 100644 --- a/packages/ui/src/components/ButtonLink/ButtonLink.tsx +++ b/packages/ui/src/components/ButtonLink/ButtonLink.tsx @@ -20,6 +20,8 @@ import { Link as RALink, RouterProvider } from 'react-aria-components'; import { useNavigate, useHref } from 'react-router-dom'; import type { ButtonLinkProps } from './types'; import { useStyles } from '../../hooks/useStyles'; +import { ButtonDefinition } from '../Button/definition'; +import { ButtonLinkDefinition } from './definition'; import { isExternalLink } from '../../utils/isExternalLink'; import stylesButton from '../Button/Button.module.css'; @@ -28,13 +30,17 @@ export const ButtonLink = forwardRef( (props: ButtonLinkProps, ref: Ref) => { const navigate = useNavigate(); - const { classNames, dataAttributes, cleanedProps } = useStyles('Button', { - size: 'small', - variant: 'primary', - ...props, - }); + const { classNames, dataAttributes, cleanedProps } = useStyles( + ButtonDefinition, + { + size: 'small', + variant: 'primary', + ...props, + }, + ); - const { classNames: classNamesButtonLink } = useStyles('ButtonLink'); + const { classNames: classNamesButtonLink } = + useStyles(ButtonLinkDefinition); const { children, className, iconStart, iconEnd, href, ...rest } = cleanedProps; diff --git a/packages/ui/src/components/ButtonLink/definition.ts b/packages/ui/src/components/ButtonLink/definition.ts new file mode 100644 index 0000000000..daf3fae1ea --- /dev/null +++ b/packages/ui/src/components/ButtonLink/definition.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. + */ + +import type { ComponentDefinition } from '../../types'; + +/** + * Component definition for ButtonLink + * @public + */ +export const ButtonLinkDefinition = { + classNames: { + root: 'bui-ButtonLink', + }, +} as const satisfies ComponentDefinition; diff --git a/packages/ui/src/components/ButtonLink/index.ts b/packages/ui/src/components/ButtonLink/index.ts index bbfc696c67..b98f84d489 100644 --- a/packages/ui/src/components/ButtonLink/index.ts +++ b/packages/ui/src/components/ButtonLink/index.ts @@ -15,4 +15,5 @@ */ export * from './ButtonLink'; +export { ButtonLinkDefinition } from './definition'; export * from './types'; diff --git a/packages/ui/src/components/Card/Card.tsx b/packages/ui/src/components/Card/Card.tsx index b942b70649..a3f4995588 100644 --- a/packages/ui/src/components/Card/Card.tsx +++ b/packages/ui/src/components/Card/Card.tsx @@ -17,6 +17,7 @@ import { forwardRef } from 'react'; import clsx from 'clsx'; import { useStyles } from '../../hooks/useStyles'; +import { CardDefinition } from './definition'; import type { CardProps, CardHeaderProps, @@ -31,7 +32,7 @@ import styles from './Card.module.css'; * @public */ export const Card = forwardRef((props, ref) => { - const { classNames, cleanedProps } = useStyles('Card', props); + const { classNames, cleanedProps } = useStyles(CardDefinition, props); const { className, ...rest } = cleanedProps; return ( @@ -50,7 +51,7 @@ export const Card = forwardRef((props, ref) => { */ export const CardHeader = forwardRef( (props, ref) => { - const { classNames, cleanedProps } = useStyles('Card', props); + const { classNames, cleanedProps } = useStyles(CardDefinition, props); const { className, ...rest } = cleanedProps; return ( @@ -74,7 +75,7 @@ export const CardHeader = forwardRef( */ export const CardBody = forwardRef( (props, ref) => { - const { classNames, cleanedProps } = useStyles('Card', props); + const { classNames, cleanedProps } = useStyles(CardDefinition, props); const { className, ...rest } = cleanedProps; return ( @@ -94,7 +95,7 @@ export const CardBody = forwardRef( */ export const CardFooter = forwardRef( (props, ref) => { - const { classNames, cleanedProps } = useStyles('Card', props); + const { classNames, cleanedProps } = useStyles(CardDefinition, props); const { className, ...rest } = cleanedProps; return ( diff --git a/packages/ui/src/components/Card/definition.ts b/packages/ui/src/components/Card/definition.ts new file mode 100644 index 0000000000..cd0c5f634b --- /dev/null +++ b/packages/ui/src/components/Card/definition.ts @@ -0,0 +1,30 @@ +/* + * 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 type { ComponentDefinition } from '../../types'; + +/** + * Component definition for Card + * @public + */ +export const CardDefinition = { + classNames: { + root: 'bui-Card', + header: 'bui-CardHeader', + body: 'bui-CardBody', + footer: 'bui-CardFooter', + }, +} as const satisfies ComponentDefinition; diff --git a/packages/ui/src/components/Card/index.ts b/packages/ui/src/components/Card/index.ts index 4b710ee7f1..dc7dbd4ead 100644 --- a/packages/ui/src/components/Card/index.ts +++ b/packages/ui/src/components/Card/index.ts @@ -15,6 +15,7 @@ */ export { Card, CardHeader, CardBody, CardFooter } from './Card'; +export { CardDefinition } from './definition'; export type { CardProps, diff --git a/packages/ui/src/components/Checkbox/Checkbox.tsx b/packages/ui/src/components/Checkbox/Checkbox.tsx index 49019370a4..97a603daf2 100644 --- a/packages/ui/src/components/Checkbox/Checkbox.tsx +++ b/packages/ui/src/components/Checkbox/Checkbox.tsx @@ -18,6 +18,7 @@ import { forwardRef } from 'react'; import { Checkbox as RACheckbox } from 'react-aria-components'; import type { CheckboxProps } from './types'; import { useStyles } from '../../hooks/useStyles'; +import { CheckboxDefinition } from './definition'; import clsx from 'clsx'; import styles from './Checkbox.module.css'; import { RiCheckLine } from '@remixicon/react'; @@ -25,7 +26,7 @@ import { RiCheckLine } from '@remixicon/react'; /** @public */ export const Checkbox = forwardRef( (props, ref) => { - const { classNames } = useStyles('Checkbox'); + const { classNames } = useStyles(CheckboxDefinition); const { className, children, ...rest } = props; return ( diff --git a/packages/ui/src/components/Checkbox/definition.ts b/packages/ui/src/components/Checkbox/definition.ts new file mode 100644 index 0000000000..022f2a0af1 --- /dev/null +++ b/packages/ui/src/components/Checkbox/definition.ts @@ -0,0 +1,31 @@ +/* + * 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 type { ComponentDefinition } from '../../types'; + +/** + * Component definition for Checkbox + * @public + */ +export const CheckboxDefinition = { + classNames: { + root: 'bui-Checkbox', + indicator: 'bui-CheckboxIndicator', + }, + dataAttributes: { + selected: [true, false] as const, + }, +} as const satisfies ComponentDefinition; diff --git a/packages/ui/src/components/Checkbox/index.ts b/packages/ui/src/components/Checkbox/index.ts index f6dfbf6beb..7c0cb5b414 100644 --- a/packages/ui/src/components/Checkbox/index.ts +++ b/packages/ui/src/components/Checkbox/index.ts @@ -14,4 +14,5 @@ * limitations under the License. */ export { Checkbox } from './Checkbox'; +export { CheckboxDefinition } from './definition'; export type { CheckboxProps } from './types'; diff --git a/packages/ui/src/components/Container/Container.tsx b/packages/ui/src/components/Container/Container.tsx index 9b15cd162e..7e3627f0b9 100644 --- a/packages/ui/src/components/Container/Container.tsx +++ b/packages/ui/src/components/Container/Container.tsx @@ -18,13 +18,14 @@ import { forwardRef } from 'react'; import { ContainerProps } from './types'; import clsx from 'clsx'; import { useStyles } from '../../hooks/useStyles'; +import { ContainerDefinition } from './definition'; import styles from './Container.module.css'; /** @public */ export const Container = forwardRef( (props, ref) => { const { classNames, utilityClasses, style, cleanedProps } = useStyles( - 'Container', + ContainerDefinition, props, ); diff --git a/packages/ui/src/components/Container/definition.ts b/packages/ui/src/components/Container/definition.ts new file mode 100644 index 0000000000..330e6adf2f --- /dev/null +++ b/packages/ui/src/components/Container/definition.ts @@ -0,0 +1,28 @@ +/* + * 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 type { ComponentDefinition } from '../../types'; + +/** + * Component definition for Container + * @public + */ +export const ContainerDefinition = { + classNames: { + root: 'bui-Container', + }, + utilityProps: ['my', 'mt', 'mb', 'py', 'pt', 'pb', 'display'], +} as const satisfies ComponentDefinition; diff --git a/packages/ui/src/components/Container/index.tsx b/packages/ui/src/components/Container/index.tsx index 81614c352d..73d1a0ab6e 100644 --- a/packages/ui/src/components/Container/index.tsx +++ b/packages/ui/src/components/Container/index.tsx @@ -14,4 +14,5 @@ * limitations under the License. */ export { Container } from './Container'; +export { ContainerDefinition } from './definition'; export type { ContainerProps } from './types'; diff --git a/packages/ui/src/components/Dialog/Dialog.tsx b/packages/ui/src/components/Dialog/Dialog.tsx index 5dcd421b04..1c33588306 100644 --- a/packages/ui/src/components/Dialog/Dialog.tsx +++ b/packages/ui/src/components/Dialog/Dialog.tsx @@ -31,6 +31,7 @@ import type { import { RiCloseLine } from '@remixicon/react'; import { Button } from '../Button'; import { useStyles } from '../../hooks/useStyles'; +import { DialogDefinition } from './definition'; import { Flex } from '../Flex'; import styles from './Dialog.module.css'; @@ -42,7 +43,7 @@ export const DialogTrigger = (props: DialogTriggerProps) => { /** @public */ export const Dialog = forwardRef, DialogProps>( (props, ref) => { - const { classNames, cleanedProps } = useStyles('Dialog', props); + const { classNames, cleanedProps } = useStyles(DialogDefinition, props); const { className, children, width, height, style, ...rest } = cleanedProps; return ( @@ -84,7 +85,7 @@ export const DialogHeader = forwardRef< React.ElementRef<'div'>, DialogHeaderProps >((props, ref) => { - const { classNames, cleanedProps } = useStyles('Dialog', props); + const { classNames, cleanedProps } = useStyles(DialogDefinition, props); const { className, children, ...rest } = cleanedProps; return ( @@ -110,7 +111,7 @@ DialogHeader.displayName = 'DialogHeader'; /** @public */ export const DialogBody = forwardRef, DialogBodyProps>( (props, ref) => { - const { classNames, cleanedProps } = useStyles('Dialog', props); + const { classNames, cleanedProps } = useStyles(DialogDefinition, props); const { className, children, ...rest } = cleanedProps; return ( @@ -132,7 +133,7 @@ export const DialogFooter = forwardRef< React.ElementRef<'div'>, React.ComponentPropsWithoutRef<'div'> >((props, ref) => { - const { classNames, cleanedProps } = useStyles('Dialog', props); + const { classNames, cleanedProps } = useStyles(DialogDefinition, props); const { className, children, ...rest } = cleanedProps; return ( diff --git a/packages/ui/src/components/Dialog/definition.ts b/packages/ui/src/components/Dialog/definition.ts new file mode 100644 index 0000000000..d2fcb7bb4d --- /dev/null +++ b/packages/ui/src/components/Dialog/definition.ts @@ -0,0 +1,32 @@ +/* + * 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 type { ComponentDefinition } from '../../types'; + +/** + * Component definition for Dialog + * @public + */ +export const DialogDefinition = { + classNames: { + overlay: 'bui-DialogOverlay', + dialog: 'bui-Dialog', + header: 'bui-DialogHeader', + headerTitle: 'bui-DialogHeaderTitle', + body: 'bui-DialogBody', + footer: 'bui-DialogFooter', + }, +} as const satisfies ComponentDefinition; diff --git a/packages/ui/src/components/Dialog/index.ts b/packages/ui/src/components/Dialog/index.ts index 8db1b29ff8..57dc8aae4b 100644 --- a/packages/ui/src/components/Dialog/index.ts +++ b/packages/ui/src/components/Dialog/index.ts @@ -14,4 +14,5 @@ * limitations under the License. */ export * from './Dialog'; +export { DialogDefinition } from './definition'; export * from './types'; diff --git a/packages/ui/src/components/FieldError/FieldError.tsx b/packages/ui/src/components/FieldError/FieldError.tsx index 4c4bfb9455..0016486fe7 100644 --- a/packages/ui/src/components/FieldError/FieldError.tsx +++ b/packages/ui/src/components/FieldError/FieldError.tsx @@ -22,11 +22,12 @@ import { import clsx from 'clsx'; import styles from './FieldError.module.css'; import { useStyles } from '../../hooks/useStyles'; +import { FieldErrorDefinition } from './definition'; /** @public */ export const FieldError = forwardRef( (props: FieldErrorProps, ref) => { - const { classNames, cleanedProps } = useStyles('FieldError', props); + const { classNames, cleanedProps } = useStyles(FieldErrorDefinition, props); const { className, ...rest } = cleanedProps; return ( diff --git a/packages/ui/src/components/FieldError/definition.ts b/packages/ui/src/components/FieldError/definition.ts new file mode 100644 index 0000000000..d7174dfc99 --- /dev/null +++ b/packages/ui/src/components/FieldError/definition.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. + */ + +import type { ComponentDefinition } from '../../types'; + +/** + * Component definition for FieldError + * @public + */ +export const FieldErrorDefinition = { + classNames: { + root: 'bui-FieldError', + }, +} as const satisfies ComponentDefinition; diff --git a/packages/ui/src/components/FieldError/index.ts b/packages/ui/src/components/FieldError/index.ts index 5b61f83ace..1d3abf8398 100644 --- a/packages/ui/src/components/FieldError/index.ts +++ b/packages/ui/src/components/FieldError/index.ts @@ -15,3 +15,4 @@ */ export * from './FieldError'; +export { FieldErrorDefinition } from './definition'; diff --git a/packages/ui/src/components/FieldLabel/FieldLabel.tsx b/packages/ui/src/components/FieldLabel/FieldLabel.tsx index 5b27dd876f..3c685f9479 100644 --- a/packages/ui/src/components/FieldLabel/FieldLabel.tsx +++ b/packages/ui/src/components/FieldLabel/FieldLabel.tsx @@ -17,13 +17,14 @@ import { Label } from 'react-aria-components'; import { forwardRef } from 'react'; import type { FieldLabelProps } from './types'; import { useStyles } from '../../hooks/useStyles'; +import { FieldLabelDefinition } from './definition'; import styles from './FieldLabel.module.css'; import clsx from 'clsx'; /** @public */ export const FieldLabel = forwardRef( (props: FieldLabelProps, ref) => { - const { classNames, cleanedProps } = useStyles('FieldLabel', props); + const { classNames, cleanedProps } = useStyles(FieldLabelDefinition, props); const { className, label, diff --git a/packages/ui/src/components/FieldLabel/definition.ts b/packages/ui/src/components/FieldLabel/definition.ts new file mode 100644 index 0000000000..d6833a9478 --- /dev/null +++ b/packages/ui/src/components/FieldLabel/definition.ts @@ -0,0 +1,30 @@ +/* + * 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 type { ComponentDefinition } from '../../types'; + +/** + * Component definition for FieldLabel + * @public + */ +export const FieldLabelDefinition = { + classNames: { + root: 'bui-FieldLabelWrapper', + label: 'bui-FieldLabel', + secondaryLabel: 'bui-FieldSecondaryLabel', + description: 'bui-FieldDescription', + }, +} as const satisfies ComponentDefinition; diff --git a/packages/ui/src/components/FieldLabel/index.ts b/packages/ui/src/components/FieldLabel/index.ts index b9cebb1bf7..0b4a8adf5f 100644 --- a/packages/ui/src/components/FieldLabel/index.ts +++ b/packages/ui/src/components/FieldLabel/index.ts @@ -15,4 +15,5 @@ */ export * from './FieldLabel'; +export { FieldLabelDefinition } from './definition'; export * from './types'; diff --git a/packages/ui/src/components/Flex/Flex.tsx b/packages/ui/src/components/Flex/Flex.tsx index 27564539bd..878bcfe0ea 100644 --- a/packages/ui/src/components/Flex/Flex.tsx +++ b/packages/ui/src/components/Flex/Flex.tsx @@ -18,12 +18,13 @@ import { forwardRef } from 'react'; import { FlexProps } from './types'; import clsx from 'clsx'; import { useStyles } from '../../hooks/useStyles'; +import { FlexDefinition } from './definition'; import styles from './Flex.module.css'; /** @public */ export const Flex = forwardRef((props, ref) => { const { classNames, utilityClasses, style, cleanedProps } = useStyles( - 'Flex', + FlexDefinition, { gap: '4', ...props }, ); diff --git a/packages/ui/src/components/Flex/definition.ts b/packages/ui/src/components/Flex/definition.ts new file mode 100644 index 0000000000..d6902e2f47 --- /dev/null +++ b/packages/ui/src/components/Flex/definition.ts @@ -0,0 +1,47 @@ +/* + * 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 type { ComponentDefinition } from '../../types'; + +/** + * Component definition for Flex + * @public + */ +export const FlexDefinition = { + classNames: { + root: 'bui-Flex', + }, + utilityProps: [ + 'm', + 'mb', + 'ml', + 'mr', + 'mt', + 'mx', + 'my', + 'p', + 'pb', + 'pl', + 'pr', + 'pt', + 'px', + 'py', + 'gap', + 'align', + 'justify', + 'direction', + ], +} as const satisfies ComponentDefinition; diff --git a/packages/ui/src/components/Flex/index.ts b/packages/ui/src/components/Flex/index.ts index 4e4c883119..c9c5890ad9 100644 --- a/packages/ui/src/components/Flex/index.ts +++ b/packages/ui/src/components/Flex/index.ts @@ -14,4 +14,5 @@ * limitations under the License. */ export { Flex } from './Flex'; +export { FlexDefinition } from './definition'; export type { FlexProps } from './types'; diff --git a/packages/ui/src/components/Grid/Grid.tsx b/packages/ui/src/components/Grid/Grid.tsx index 61cd2fb7c7..aa30d25fc0 100644 --- a/packages/ui/src/components/Grid/Grid.tsx +++ b/packages/ui/src/components/Grid/Grid.tsx @@ -18,11 +18,12 @@ import { forwardRef } from 'react'; import clsx from 'clsx'; import type { GridItemProps, GridProps } from './types'; import { useStyles } from '../../hooks/useStyles'; +import { GridDefinition, GridItemDefinition } from './definition'; import styles from './Grid.module.css'; const GridRoot = forwardRef((props, ref) => { const { classNames, utilityClasses, style, cleanedProps } = useStyles( - 'Grid', + GridDefinition, { columns: 'auto', gap: '4', ...props }, ); @@ -45,7 +46,7 @@ const GridRoot = forwardRef((props, ref) => { const GridItem = forwardRef((props, ref) => { const { classNames, utilityClasses, style, cleanedProps } = useStyles( - 'GridItem', + GridItemDefinition, props, ); diff --git a/packages/ui/src/components/Grid/definition.ts b/packages/ui/src/components/Grid/definition.ts new file mode 100644 index 0000000000..201ef4dc66 --- /dev/null +++ b/packages/ui/src/components/Grid/definition.ts @@ -0,0 +1,56 @@ +/* + * 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 type { ComponentDefinition } from '../../types'; + +/** + * Component definition for Grid + * @public + */ +export const GridDefinition = { + classNames: { + root: 'bui-Grid', + }, + utilityProps: [ + 'columns', + 'gap', + 'm', + 'mb', + 'ml', + 'mr', + 'mt', + 'mx', + 'my', + 'p', + 'pb', + 'pl', + 'pr', + 'pt', + 'px', + 'py', + ], +} as const satisfies ComponentDefinition; + +/** + * Component definition for GridItem + * @public + */ +export const GridItemDefinition = { + classNames: { + root: 'bui-GridItem', + }, + utilityProps: ['colSpan', 'colEnd', 'colStart', 'rowSpan'], +} as const satisfies ComponentDefinition; diff --git a/packages/ui/src/components/Grid/index.ts b/packages/ui/src/components/Grid/index.ts index 870ab55856..aa95e3370e 100644 --- a/packages/ui/src/components/Grid/index.ts +++ b/packages/ui/src/components/Grid/index.ts @@ -15,4 +15,5 @@ */ export { Grid } from './Grid'; +export { GridDefinition, GridItemDefinition } from './definition'; export type { GridProps, GridItemProps } from './types'; diff --git a/packages/ui/src/components/Header/Header.tsx b/packages/ui/src/components/Header/Header.tsx index 6f42820be4..56ec200e29 100644 --- a/packages/ui/src/components/Header/Header.tsx +++ b/packages/ui/src/components/Header/Header.tsx @@ -18,6 +18,7 @@ import type { HeaderProps } from './types'; import { HeaderToolbar } from './HeaderToolbar'; import { Tabs, TabList, Tab } from '../Tabs'; import { useStyles } from '../../hooks/useStyles'; +import { HeaderDefinition } from './definition'; import { type NavigateOptions } from 'react-router-dom'; import styles from './Header.module.css'; import clsx from 'clsx'; @@ -34,7 +35,7 @@ declare module 'react-aria-components' { * @public */ export const Header = (props: HeaderProps) => { - const { classNames, cleanedProps } = useStyles('Header', props); + const { classNames, cleanedProps } = useStyles(HeaderDefinition, props); const { className, tabs, diff --git a/packages/ui/src/components/Header/HeaderToolbar.tsx b/packages/ui/src/components/Header/HeaderToolbar.tsx index 373f3462be..6ba03ab3a6 100644 --- a/packages/ui/src/components/Header/HeaderToolbar.tsx +++ b/packages/ui/src/components/Header/HeaderToolbar.tsx @@ -16,6 +16,7 @@ import { Link } from 'react-aria-components'; import { useStyles } from '../../hooks/useStyles'; +import { HeaderDefinition } from './definition'; import { useRef } from 'react'; import { RiShapesLine } from '@remixicon/react'; import type { HeaderToolbarProps } from './types'; @@ -29,7 +30,7 @@ import clsx from 'clsx'; * @internal */ export const HeaderToolbar = (props: HeaderToolbarProps) => { - const { classNames, cleanedProps } = useStyles('Header', props); + const { classNames, cleanedProps } = useStyles(HeaderDefinition, props); const { className, icon, title, titleLink, customActions, hasTabs } = cleanedProps; diff --git a/packages/ui/src/components/Header/definition.ts b/packages/ui/src/components/Header/definition.ts new file mode 100644 index 0000000000..5969d7d8fa --- /dev/null +++ b/packages/ui/src/components/Header/definition.ts @@ -0,0 +1,33 @@ +/* + * 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 type { ComponentDefinition } from '../../types'; + +/** + * Component definition for Header + * @public + */ +export const HeaderDefinition = { + classNames: { + toolbar: 'bui-HeaderToolbar', + toolbarWrapper: 'bui-HeaderToolbarWrapper', + toolbarContent: 'bui-HeaderToolbarContent', + toolbarControls: 'bui-HeaderToolbarControls', + toolbarIcon: 'bui-HeaderToolbarIcon', + toolbarName: 'bui-HeaderToolbarName', + tabsWrapper: 'bui-HeaderTabsWrapper', + }, +} as const satisfies ComponentDefinition; diff --git a/packages/ui/src/components/Header/index.tsx b/packages/ui/src/components/Header/index.tsx index b0ae2821b2..60685cfaa6 100644 --- a/packages/ui/src/components/Header/index.tsx +++ b/packages/ui/src/components/Header/index.tsx @@ -15,4 +15,5 @@ */ export { Header } from './Header'; +export { HeaderDefinition } from './definition'; export type { HeaderProps, HeaderTab } from './types'; diff --git a/packages/ui/src/components/HeaderPage/HeaderPage.tsx b/packages/ui/src/components/HeaderPage/HeaderPage.tsx index 6fcbbe258b..efa7ea8d58 100644 --- a/packages/ui/src/components/HeaderPage/HeaderPage.tsx +++ b/packages/ui/src/components/HeaderPage/HeaderPage.tsx @@ -19,6 +19,7 @@ import { Text } from '../Text'; import { RiArrowRightSLine } from '@remixicon/react'; import { Tabs, TabList, Tab } from '../Tabs'; import { useStyles } from '../../hooks/useStyles'; +import { HeaderPageDefinition } from './definition'; import { Container } from '../Container'; import { Link } from '../Link'; import { Fragment } from 'react/jsx-runtime'; @@ -31,7 +32,7 @@ import clsx from 'clsx'; * @public */ export const HeaderPage = (props: HeaderPageProps) => { - const { classNames, cleanedProps } = useStyles('HeaderPage', props); + const { classNames, cleanedProps } = useStyles(HeaderPageDefinition, props); const { className, title, tabs, customActions, breadcrumbs } = cleanedProps; return ( diff --git a/packages/ui/src/components/HeaderPage/definition.ts b/packages/ui/src/components/HeaderPage/definition.ts new file mode 100644 index 0000000000..be93aaae6a --- /dev/null +++ b/packages/ui/src/components/HeaderPage/definition.ts @@ -0,0 +1,31 @@ +/* + * 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 type { ComponentDefinition } from '../../types'; + +/** + * Component definition for HeaderPage + * @public + */ +export const HeaderPageDefinition = { + classNames: { + root: 'bui-HeaderPage', + content: 'bui-HeaderPageContent', + breadcrumbs: 'bui-HeaderPageBreadcrumbs', + tabsWrapper: 'bui-HeaderPageTabsWrapper', + controls: 'bui-HeaderPageControls', + }, +} as const satisfies ComponentDefinition; diff --git a/packages/ui/src/components/HeaderPage/index.tsx b/packages/ui/src/components/HeaderPage/index.tsx index 040d226a1f..7b277149f1 100644 --- a/packages/ui/src/components/HeaderPage/index.tsx +++ b/packages/ui/src/components/HeaderPage/index.tsx @@ -15,4 +15,5 @@ */ export { HeaderPage } from './HeaderPage'; +export { HeaderPageDefinition } from './definition'; export type { HeaderPageProps, HeaderPageBreadcrumb } from './types'; diff --git a/packages/ui/src/components/Link/Link.tsx b/packages/ui/src/components/Link/Link.tsx index c121fd9551..56b0cae5bb 100644 --- a/packages/ui/src/components/Link/Link.tsx +++ b/packages/ui/src/components/Link/Link.tsx @@ -18,6 +18,7 @@ import { forwardRef } from 'react'; import { Link as AriaLink, RouterProvider } from 'react-aria-components'; import clsx from 'clsx'; import { useStyles } from '../../hooks/useStyles'; +import { LinkDefinition } from './definition'; import type { LinkProps } from './types'; import { useNavigate, useHref } from 'react-router-dom'; import { isExternalLink } from '../../utils/isExternalLink'; @@ -26,12 +27,15 @@ import styles from './Link.module.css'; /** @public */ export const Link = forwardRef((props, ref) => { const navigate = useNavigate(); - const { classNames, dataAttributes, cleanedProps } = useStyles('Link', { - variant: 'body', - weight: 'regular', - color: 'primary', - ...props, - }); + const { classNames, dataAttributes, cleanedProps } = useStyles( + LinkDefinition, + { + variant: 'body', + weight: 'regular', + color: 'primary', + ...props, + }, + ); const { className, href, ...restProps } = cleanedProps; diff --git a/packages/ui/src/components/Link/definition.ts b/packages/ui/src/components/Link/definition.ts new file mode 100644 index 0000000000..cece929f11 --- /dev/null +++ b/packages/ui/src/components/Link/definition.ts @@ -0,0 +1,33 @@ +/* + * 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 type { ComponentDefinition } from '../../types'; + +/** + * Component definition for Link + * @public + */ +export const LinkDefinition = { + classNames: { + root: 'bui-Link', + }, + dataAttributes: { + variant: ['subtitle', 'body', 'caption', 'label'] as const, + weight: ['regular', 'bold'] as const, + color: ['primary', 'secondary', 'danger', 'warning', 'success'] as const, + truncate: [true, false] as const, + }, +} as const satisfies ComponentDefinition; diff --git a/packages/ui/src/components/Link/index.ts b/packages/ui/src/components/Link/index.ts index 1b38e89d62..7c17668029 100644 --- a/packages/ui/src/components/Link/index.ts +++ b/packages/ui/src/components/Link/index.ts @@ -15,4 +15,5 @@ */ export { Link } from './Link'; +export { LinkDefinition } from './definition'; export type { LinkProps } from './types'; diff --git a/packages/ui/src/components/Menu/Menu.tsx b/packages/ui/src/components/Menu/Menu.tsx index 6edbeaca20..12048776be 100644 --- a/packages/ui/src/components/Menu/Menu.tsx +++ b/packages/ui/src/components/Menu/Menu.tsx @@ -36,6 +36,7 @@ import { OverlayTriggerStateContext, } from 'react-aria-components'; import { useStyles } from '../../hooks/useStyles'; +import { MenuDefinition } from './definition'; import type { MenuTriggerProps, SubmenuTriggerProps, @@ -63,7 +64,7 @@ import clsx from 'clsx'; const rowHeight = 32; const MenuEmptyState = () => { - const { classNames } = useStyles('Menu'); + const { classNames } = useStyles(MenuDefinition); return (
@@ -84,7 +85,7 @@ export const SubmenuTrigger = (props: SubmenuTriggerProps) => { /** @public */ export const Menu = (props: MenuProps) => { - const { classNames, cleanedProps } = useStyles('Menu', props); + const { classNames, cleanedProps } = useStyles(MenuDefinition, props); const { className, placement = 'bottom start', @@ -166,7 +167,7 @@ export const Menu = (props: MenuProps) => { /** @public */ export const MenuListBox = (props: MenuListBoxProps) => { - const { classNames, cleanedProps } = useStyles('Menu', props); + const { classNames, cleanedProps } = useStyles(MenuDefinition, props); const { className, selectionMode = 'single', @@ -215,7 +216,7 @@ export const MenuListBox = (props: MenuListBoxProps) => { /** @public */ export const MenuAutocomplete = (props: MenuAutocompleteProps) => { - const { classNames, cleanedProps } = useStyles('Menu', props); + const { classNames, cleanedProps } = useStyles(MenuDefinition, props); const { className, placement = 'bottom start', @@ -294,7 +295,7 @@ export const MenuAutocomplete = (props: MenuAutocompleteProps) => { export const MenuAutocompleteListbox = ( props: MenuAutocompleteListBoxProps, ) => { - const { classNames, cleanedProps } = useStyles('Menu', props); + const { classNames, cleanedProps } = useStyles(MenuDefinition, props); const { className, selectionMode = 'single', @@ -370,7 +371,7 @@ export const MenuAutocompleteListbox = ( /** @public */ export const MenuItem = (props: MenuItemProps) => { - const { classNames, cleanedProps } = useStyles('Menu', props); + const { classNames, cleanedProps } = useStyles(MenuDefinition, props); const { className, iconStart, @@ -449,7 +450,7 @@ export const MenuItem = (props: MenuItemProps) => { /** @public */ export const MenuListBoxItem = (props: MenuListBoxItemProps) => { - const { classNames, cleanedProps } = useStyles('Menu', props); + const { classNames, cleanedProps } = useStyles(MenuDefinition, props); const { children, className, ...rest } = cleanedProps; return ( @@ -490,7 +491,7 @@ export const MenuListBoxItem = (props: MenuListBoxItemProps) => { /** @public */ export const MenuSection = (props: MenuSectionProps) => { - const { classNames, cleanedProps } = useStyles('Menu', props); + const { classNames, cleanedProps } = useStyles(MenuDefinition, props); const { children, className, title, ...rest } = cleanedProps; return ( @@ -517,7 +518,7 @@ export const MenuSection = (props: MenuSectionProps) => { /** @public */ export const MenuSeparator = (props: MenuSeparatorProps) => { - const { classNames, cleanedProps } = useStyles('Menu', props); + const { classNames, cleanedProps } = useStyles(MenuDefinition, props); const { className, ...rest } = cleanedProps; return ( diff --git a/packages/ui/src/components/Menu/definition.ts b/packages/ui/src/components/Menu/definition.ts new file mode 100644 index 0000000000..e4ba0d83ab --- /dev/null +++ b/packages/ui/src/components/Menu/definition.ts @@ -0,0 +1,42 @@ +/* + * 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 type { ComponentDefinition } from '../../types'; + +/** + * Component definition for Menu + * @public + */ +export const MenuDefinition = { + classNames: { + root: 'bui-Menu', + popover: 'bui-MenuPopover', + content: 'bui-MenuContent', + section: 'bui-MenuSection', + sectionHeader: 'bui-MenuSectionHeader', + item: 'bui-MenuItem', + itemListBox: 'bui-MenuItemListBox', + itemListBoxCheck: 'bui-MenuItemListBoxCheck', + itemWrapper: 'bui-MenuItemWrapper', + itemContent: 'bui-MenuItemContent', + itemArrow: 'bui-MenuItemArrow', + separator: 'bui-MenuSeparator', + searchField: 'bui-MenuSearchField', + searchFieldInput: 'bui-MenuSearchFieldInput', + searchFieldClear: 'bui-MenuSearchFieldClear', + emptyState: 'bui-MenuEmptyState', + }, +} as const satisfies ComponentDefinition; diff --git a/packages/ui/src/components/Menu/index.ts b/packages/ui/src/components/Menu/index.ts index 00237712df..f42de8a7eb 100644 --- a/packages/ui/src/components/Menu/index.ts +++ b/packages/ui/src/components/Menu/index.ts @@ -26,6 +26,7 @@ export { MenuSection, MenuSeparator, } from './Menu'; +export { MenuDefinition } from './definition'; export type { MenuTriggerProps, SubmenuTriggerProps, diff --git a/packages/ui/src/components/PasswordField/PasswordField.tsx b/packages/ui/src/components/PasswordField/PasswordField.tsx index 412128ca32..c2cfdd1081 100644 --- a/packages/ui/src/components/PasswordField/PasswordField.tsx +++ b/packages/ui/src/components/PasswordField/PasswordField.tsx @@ -26,6 +26,7 @@ import { FieldError } from '../FieldError'; import type { PasswordFieldProps } from './types'; import { useStyles } from '../../hooks/useStyles'; +import { PasswordFieldDefinition } from './definition'; import { RiEyeLine, RiEyeOffLine } from '@remixicon/react'; import stylesPasswordField from './PasswordField.module.css'; @@ -50,7 +51,7 @@ export const PasswordField = forwardRef( classNames: classNamesPasswordField, dataAttributes, cleanedProps, - } = useStyles('PasswordField', { + } = useStyles(PasswordFieldDefinition, { size: 'small', ...props, }); diff --git a/packages/ui/src/components/PasswordField/definition.ts b/packages/ui/src/components/PasswordField/definition.ts new file mode 100644 index 0000000000..11272494b4 --- /dev/null +++ b/packages/ui/src/components/PasswordField/definition.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 type { ComponentDefinition } from '../../types'; + +/** + * Component definition for PasswordField + * @public + */ +export const PasswordFieldDefinition = { + classNames: { + root: 'bui-PasswordField', + inputWrapper: 'bui-PasswordFieldInputWrapper', + input: 'bui-PasswordFieldInput', + inputIcon: 'bui-PasswordFieldIcon', + inputVisibility: 'bui-PasswordFieldVisibility', + }, + dataAttributes: { + size: ['small', 'medium'] as const, + }, +} as const satisfies ComponentDefinition; diff --git a/packages/ui/src/components/PasswordField/index.ts b/packages/ui/src/components/PasswordField/index.ts index df7874e1c2..705bf68c04 100644 --- a/packages/ui/src/components/PasswordField/index.ts +++ b/packages/ui/src/components/PasswordField/index.ts @@ -15,4 +15,5 @@ */ export * from './PasswordField'; +export { PasswordFieldDefinition } from './definition'; export * from './types'; diff --git a/packages/ui/src/components/Popover/definition.ts b/packages/ui/src/components/Popover/definition.ts new file mode 100644 index 0000000000..8b85180973 --- /dev/null +++ b/packages/ui/src/components/Popover/definition.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. + */ + +import type { ComponentDefinition } from '../../types'; + +/** + * Component definition for Popover + * @public + */ +export const PopoverDefinition = { + classNames: { + root: 'bui-Popover', + }, +} as const satisfies ComponentDefinition; diff --git a/packages/ui/src/components/Popover/index.ts b/packages/ui/src/components/Popover/index.ts new file mode 100644 index 0000000000..1e31b8657b --- /dev/null +++ b/packages/ui/src/components/Popover/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 { PopoverDefinition } from './definition'; diff --git a/packages/ui/src/components/RadioGroup/RadioGroup.tsx b/packages/ui/src/components/RadioGroup/RadioGroup.tsx index 355e181f37..de6cc3793b 100644 --- a/packages/ui/src/components/RadioGroup/RadioGroup.tsx +++ b/packages/ui/src/components/RadioGroup/RadioGroup.tsx @@ -23,6 +23,7 @@ import clsx from 'clsx'; import { FieldLabel } from '../FieldLabel'; import { FieldError } from '../FieldError'; import { useStyles } from '../../hooks/useStyles'; +import { RadioGroupDefinition } from './definition'; import styles from './RadioGroup.module.css'; import type { RadioGroupProps, RadioProps } from './types'; @@ -30,7 +31,7 @@ import type { RadioGroupProps, RadioProps } from './types'; /** @public */ export const RadioGroup = forwardRef( (props, ref) => { - const { classNames, cleanedProps } = useStyles('RadioGroup', props); + const { classNames, cleanedProps } = useStyles(RadioGroupDefinition, props); const { className, label, @@ -83,7 +84,7 @@ RadioGroup.displayName = 'RadioGroup'; export const Radio = forwardRef((props, ref) => { const { className, ...rest } = props; - const { classNames } = useStyles('RadioGroup'); + const { classNames } = useStyles(RadioGroupDefinition); return ( ( }, [label, ariaLabel, ariaLabelledBy]); const { classNames, dataAttributes, style, cleanedProps } = useStyles( - 'SearchField', + SearchFieldDefinition, { size: 'small', placeholder: 'Search', diff --git a/packages/ui/src/components/SearchField/definition.ts b/packages/ui/src/components/SearchField/definition.ts new file mode 100644 index 0000000000..7de1411bb4 --- /dev/null +++ b/packages/ui/src/components/SearchField/definition.ts @@ -0,0 +1,35 @@ +/* + * 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 type { ComponentDefinition } from '../../types'; + +/** + * Component definition for SearchField + * @public + */ +export const SearchFieldDefinition = { + classNames: { + root: 'bui-SearchField', + clear: 'bui-SearchFieldClear', + inputWrapper: 'bui-SearchFieldInputWrapper', + input: 'bui-SearchFieldInput', + inputIcon: 'bui-SearchFieldInputIcon', + }, + dataAttributes: { + startCollapsed: [true, false] as const, + size: ['small', 'medium'] as const, + }, +} as const satisfies ComponentDefinition; diff --git a/packages/ui/src/components/SearchField/index.ts b/packages/ui/src/components/SearchField/index.ts index 288c3fe44a..9e01b47fc1 100644 --- a/packages/ui/src/components/SearchField/index.ts +++ b/packages/ui/src/components/SearchField/index.ts @@ -16,3 +16,4 @@ export * from './SearchField'; export * from './types'; +export { SearchFieldDefinition } from './definition'; diff --git a/packages/ui/src/components/Select/Select.tsx b/packages/ui/src/components/Select/Select.tsx index 0b133d07c5..04231d1cd9 100644 --- a/packages/ui/src/components/Select/Select.tsx +++ b/packages/ui/src/components/Select/Select.tsx @@ -19,6 +19,8 @@ import { Select as AriaSelect, Popover } from 'react-aria-components'; import clsx from 'clsx'; import { SelectProps } from './types'; import { useStyles } from '../../hooks/useStyles'; +import { SelectDefinition } from './definition'; +import { PopoverDefinition } from '../Popover/definition'; import { FieldLabel } from '../FieldLabel'; import { FieldError } from '../FieldError'; import styles from './Select.module.css'; @@ -31,12 +33,15 @@ export const Select = forwardRef< HTMLDivElement, SelectProps<'single' | 'multiple'> >((props, ref) => { - const { classNames: popoverClassNames } = useStyles('Popover'); - const { classNames, dataAttributes, cleanedProps } = useStyles('Select', { - size: 'small', - placeholder: 'Select an option', - ...props, - }); + const { classNames: popoverClassNames } = useStyles(PopoverDefinition); + const { classNames, dataAttributes, cleanedProps } = useStyles( + SelectDefinition, + { + size: 'small', + placeholder: 'Select an option', + ...props, + }, + ); const { className, diff --git a/packages/ui/src/components/Select/SelectContent.tsx b/packages/ui/src/components/Select/SelectContent.tsx index 42070321a3..7f63ad2a0a 100644 --- a/packages/ui/src/components/Select/SelectContent.tsx +++ b/packages/ui/src/components/Select/SelectContent.tsx @@ -24,6 +24,7 @@ import { useFilter } from 'react-aria'; import { RiCloseCircleLine } from '@remixicon/react'; import clsx from 'clsx'; import { useStyles } from '../../hooks/useStyles'; +import { SelectDefinition } from './definition'; import { SelectListBox } from './SelectListBox'; import styles from './Select.module.css'; import type { Option } from './types'; @@ -40,7 +41,7 @@ export function SelectContent({ options, }: SelectContentProps) { const { contains } = useFilter({ sensitivity: 'base' }); - const { classNames } = useStyles('Select'); + const { classNames } = useStyles(SelectDefinition); if (!searchable) { return ; diff --git a/packages/ui/src/components/Select/SelectListBox.tsx b/packages/ui/src/components/Select/SelectListBox.tsx index aa050ba766..3b14292729 100644 --- a/packages/ui/src/components/Select/SelectListBox.tsx +++ b/packages/ui/src/components/Select/SelectListBox.tsx @@ -18,6 +18,7 @@ import { ListBox, ListBoxItem, Text } from 'react-aria-components'; import { RiCheckLine } from '@remixicon/react'; import clsx from 'clsx'; import { useStyles } from '../../hooks/useStyles'; +import { SelectDefinition } from './definition'; import styles from './Select.module.css'; import type { Option } from './types'; @@ -26,7 +27,7 @@ interface SelectListBoxProps { } const NoResults = () => { - const { classNames } = useStyles('Select'); + const { classNames } = useStyles(SelectDefinition); return (
@@ -36,7 +37,7 @@ const NoResults = () => { }; export function SelectListBox({ options, ...props }: SelectListBoxProps) { - const { classNames } = useStyles('Select', props); + const { classNames } = useStyles(SelectDefinition, props); return ( diff --git a/packages/ui/src/components/Select/definition.ts b/packages/ui/src/components/Select/definition.ts new file mode 100644 index 0000000000..5a085cc770 --- /dev/null +++ b/packages/ui/src/components/Select/definition.ts @@ -0,0 +1,42 @@ +/* + * 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 type { ComponentDefinition } from '../../types'; + +/** + * Component definition for Select + * @public + */ +export const SelectDefinition = { + classNames: { + root: 'bui-Select', + popover: 'bui-SelectPopover', + trigger: 'bui-SelectTrigger', + chevron: 'bui-SelectTriggerChevron', + value: 'bui-SelectValue', + list: 'bui-SelectList', + item: 'bui-SelectItem', + itemIndicator: 'bui-SelectItemIndicator', + itemLabel: 'bui-SelectItemLabel', + searchWrapper: 'bui-SelectSearchWrapper', + search: 'bui-SelectSearch', + searchClear: 'bui-SelectSearchClear', + noResults: 'bui-SelectNoResults', + }, + dataAttributes: { + size: ['small', 'medium'] as const, + }, +} as const satisfies ComponentDefinition; diff --git a/packages/ui/src/components/Select/index.ts b/packages/ui/src/components/Select/index.ts index 2cddf1fe62..786cc4d03f 100644 --- a/packages/ui/src/components/Select/index.ts +++ b/packages/ui/src/components/Select/index.ts @@ -16,3 +16,4 @@ export * from './Select'; export * from './types'; +export { SelectDefinition } from './definition'; diff --git a/packages/ui/src/components/Skeleton/Skeleton.tsx b/packages/ui/src/components/Skeleton/Skeleton.tsx index ca2f4ae493..c85a9b23cb 100644 --- a/packages/ui/src/components/Skeleton/Skeleton.tsx +++ b/packages/ui/src/components/Skeleton/Skeleton.tsx @@ -15,13 +15,14 @@ */ import { useStyles } from '../../hooks/useStyles'; +import { SkeletonDefinition } from './definition'; import { SkeletonProps } from './types'; import styles from './Skeleton.module.css'; import clsx from 'clsx'; /** @public */ export const Skeleton = (props: SkeletonProps) => { - const { classNames, cleanedProps } = useStyles('Skeleton', { + const { classNames, cleanedProps } = useStyles(SkeletonDefinition, { width: 80, height: 24, rounded: false, diff --git a/packages/ui/src/components/Skeleton/definition.ts b/packages/ui/src/components/Skeleton/definition.ts new file mode 100644 index 0000000000..42c4d6c444 --- /dev/null +++ b/packages/ui/src/components/Skeleton/definition.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. + */ + +import type { ComponentDefinition } from '../../types'; + +/** + * Component definition for Skeleton + * @public + */ +export const SkeletonDefinition = { + classNames: { + root: 'bui-Skeleton', + }, +} as const satisfies ComponentDefinition; diff --git a/packages/ui/src/components/Skeleton/index.tsx b/packages/ui/src/components/Skeleton/index.tsx index f1e76b1851..ab44364f8b 100644 --- a/packages/ui/src/components/Skeleton/index.tsx +++ b/packages/ui/src/components/Skeleton/index.tsx @@ -16,3 +16,4 @@ export { Skeleton } from './Skeleton'; export type { SkeletonProps } from './types'; +export { SkeletonDefinition } from './definition'; diff --git a/packages/ui/src/components/Switch/Switch.tsx b/packages/ui/src/components/Switch/Switch.tsx index ffc1fdef05..b50db839df 100644 --- a/packages/ui/src/components/Switch/Switch.tsx +++ b/packages/ui/src/components/Switch/Switch.tsx @@ -18,13 +18,14 @@ import { forwardRef } from 'react'; import { Switch as AriaSwitch } from 'react-aria-components'; import type { SwitchProps } from './types'; import { useStyles } from '../../hooks/useStyles'; +import { SwitchDefinition } from './definition'; import styles from './Switch.module.css'; import clsx from 'clsx'; /** @public */ export const Switch = forwardRef( (props, ref) => { - const { classNames, cleanedProps } = useStyles('Switch', props); + const { classNames, cleanedProps } = useStyles(SwitchDefinition, props); const { className, label, ...rest } = cleanedProps; return ( diff --git a/packages/ui/src/components/Switch/definition.ts b/packages/ui/src/components/Switch/definition.ts new file mode 100644 index 0000000000..c8dd004991 --- /dev/null +++ b/packages/ui/src/components/Switch/definition.ts @@ -0,0 +1,28 @@ +/* + * 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 type { ComponentDefinition } from '../../types'; + +/** + * Component definition for Switch + * @public + */ +export const SwitchDefinition = { + classNames: { + root: 'bui-Switch', + indicator: 'bui-SwitchIndicator', + }, +} as const satisfies ComponentDefinition; diff --git a/packages/ui/src/components/Switch/index.tsx b/packages/ui/src/components/Switch/index.tsx index 171969809d..72c08f5cb0 100644 --- a/packages/ui/src/components/Switch/index.tsx +++ b/packages/ui/src/components/Switch/index.tsx @@ -16,3 +16,4 @@ export * from './Switch'; export * from './types'; +export { SwitchDefinition } from './definition'; diff --git a/packages/ui/src/components/Table/components/Cell.tsx b/packages/ui/src/components/Table/components/Cell.tsx index ad0a92cb94..65be8482a7 100644 --- a/packages/ui/src/components/Table/components/Cell.tsx +++ b/packages/ui/src/components/Table/components/Cell.tsx @@ -20,12 +20,13 @@ import { Link } from '../../Link'; import { Cell as ReactAriaCell } from 'react-aria-components'; import type { CellProps } from '../types'; import { useStyles } from '../../../hooks/useStyles'; +import { TableDefinition } from '../definition'; import styles from '../Table.module.css'; /** @public */ const Cell = (props: CellProps) => { - const { classNames, cleanedProps } = useStyles<'Table', CellProps>('Table', { - color: 'primary', + const { classNames, cleanedProps } = useStyles(TableDefinition, { + color: 'primary' as const, ...props, }); const { className, title, description, color, leadingIcon, href, ...rest } = diff --git a/packages/ui/src/components/Table/components/CellProfile.tsx b/packages/ui/src/components/Table/components/CellProfile.tsx index 3f665dec02..4abef56e01 100644 --- a/packages/ui/src/components/Table/components/CellProfile.tsx +++ b/packages/ui/src/components/Table/components/CellProfile.tsx @@ -20,18 +20,16 @@ import { Text } from '../../Text/Text'; import { Link } from '../../Link/Link'; import { Avatar } from '../../Avatar'; import { useStyles } from '../../../hooks/useStyles'; +import { TableDefinition } from '../definition'; import { Cell as ReactAriaCell } from 'react-aria-components'; import styles from '../Table.module.css'; /** @public */ export const CellProfile = (props: CellProfileProps) => { - const { classNames, cleanedProps } = useStyles<'Table', CellProfileProps>( - 'Table', - { - color: 'primary', - ...props, - }, - ); + const { classNames, cleanedProps } = useStyles(TableDefinition, { + color: 'primary' as const, + ...props, + }); const { className, src, name, href, description, color, ...rest } = cleanedProps; diff --git a/packages/ui/src/components/Table/components/Column.tsx b/packages/ui/src/components/Table/components/Column.tsx index 6ebd263d3f..f534da565a 100644 --- a/packages/ui/src/components/Table/components/Column.tsx +++ b/packages/ui/src/components/Table/components/Column.tsx @@ -16,6 +16,7 @@ import { Column as ReactAriaColumn } from 'react-aria-components'; import { useStyles } from '../../../hooks/useStyles'; +import { TableDefinition } from '../definition'; import styles from '../Table.module.css'; import clsx from 'clsx'; import { ColumnProps } from '../types'; @@ -23,10 +24,7 @@ import { RiArrowUpLine, RiArrowDownLine } from '@remixicon/react'; /** @public */ export const Column = (props: ColumnProps) => { - const { classNames, cleanedProps } = useStyles<'Table', ColumnProps>( - 'Table', - props, - ); + const { classNames, cleanedProps } = useStyles(TableDefinition, props); const { children, ...rest } = cleanedProps; return ( diff --git a/packages/ui/src/components/Table/components/Row.tsx b/packages/ui/src/components/Table/components/Row.tsx index 70c8330e68..106f97baff 100644 --- a/packages/ui/src/components/Table/components/Row.tsx +++ b/packages/ui/src/components/Table/components/Row.tsx @@ -24,6 +24,7 @@ import { RouterProvider, } from 'react-aria-components'; import { useStyles } from '../../../hooks/useStyles'; +import { TableDefinition } from '../definition'; import { useNavigate } from 'react-router-dom'; import { useHref } from 'react-router-dom'; import { isExternalLink } from '../../../utils/isExternalLink'; @@ -32,10 +33,7 @@ import clsx from 'clsx'; /** @public */ export function Row(props: RowProps) { - const { classNames, cleanedProps } = useStyles<'Table', RowProps>( - 'Table', - props, - ); + const { classNames, cleanedProps } = useStyles(TableDefinition, props); const { id, columns, children, href, ...rest } = cleanedProps; const navigate = useNavigate(); const isExternal = isExternalLink(href); diff --git a/packages/ui/src/components/Table/components/Table.tsx b/packages/ui/src/components/Table/components/Table.tsx index a430b9cff2..ffd0ab231d 100644 --- a/packages/ui/src/components/Table/components/Table.tsx +++ b/packages/ui/src/components/Table/components/Table.tsx @@ -15,6 +15,7 @@ */ import { useStyles } from '../../../hooks/useStyles'; +import { TableDefinition } from '../definition'; import { Table as ReactAriaTable, type TableProps, @@ -24,10 +25,7 @@ import clsx from 'clsx'; /** @public */ export const Table = (props: TableProps) => { - const { classNames, cleanedProps } = useStyles<'Table', TableProps>( - 'Table', - props, - ); + const { classNames, cleanedProps } = useStyles(TableDefinition, props); return ( (props: TableBodyProps) => { - const { classNames, cleanedProps } = useStyles<'Table', TableBodyProps>( - 'Table', - props, - ); + const { classNames, cleanedProps } = useStyles(TableDefinition, props); return ( (props: TableHeaderProps) => { let { selectionBehavior, selectionMode, allowsDragging } = useTableOptions(); - const { classNames, cleanedProps } = useStyles<'Table', TableHeaderProps>( - 'Table', - props, - ); + const { classNames, cleanedProps } = useStyles(TableDefinition, props); const { columns, children, ...rest } = cleanedProps; return ( diff --git a/packages/ui/src/components/Table/definition.ts b/packages/ui/src/components/Table/definition.ts new file mode 100644 index 0000000000..8ec9dfb1f0 --- /dev/null +++ b/packages/ui/src/components/Table/definition.ts @@ -0,0 +1,43 @@ +/* + * Copyright 2024 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import type { ComponentDefinition } from '../../types'; + +/** + * Component definition for Table + * @public + */ +export const TableDefinition = { + classNames: { + table: 'bui-Table', + header: 'bui-TableHeader', + body: 'bui-TableBody', + row: 'bui-TableRow', + head: 'bui-TableHead', + headContent: 'bui-TableHeadContent', + headSortButton: 'bui-TableHeadSortButton', + caption: 'bui-TableCaption', + cell: 'bui-TableCell', + cellContentWrapper: 'bui-TableCellContentWrapper', + cellContent: 'bui-TableCellContent', + cellIcon: 'bui-TableCellIcon', + cellProfileAvatar: 'bui-TableCellProfileAvatar', + cellProfileAvatarImage: 'bui-TableCellProfileAvatarImage', + cellProfileAvatarFallback: 'bui-TableCellProfileAvatarFallback', + cellProfileName: 'bui-TableCellProfileName', + cellProfileLink: 'bui-TableCellProfileLink', + }, +} as const satisfies ComponentDefinition; diff --git a/packages/ui/src/components/Table/index.ts b/packages/ui/src/components/Table/index.ts index fb4ec6147d..8d6603ee00 100644 --- a/packages/ui/src/components/Table/index.ts +++ b/packages/ui/src/components/Table/index.ts @@ -30,3 +30,5 @@ export type { UseTablePagination, UseTablePaginationConfig, } from './hooks/types'; + +export { TableDefinition } from './definition'; diff --git a/packages/ui/src/components/Table/types.ts b/packages/ui/src/components/Table/types.ts index 293e76fdca..be9e860a0c 100644 --- a/packages/ui/src/components/Table/types.ts +++ b/packages/ui/src/components/Table/types.ts @@ -18,12 +18,13 @@ import { CellProps as ReactAriaCellProps, ColumnProps as AriaColumnProps, } from 'react-aria-components'; +import type { TextColors } from '../../types'; /** @public */ export interface CellProps extends ReactAriaCellProps { title: string; description?: string; - color?: 'primary' | 'secondary'; + color?: TextColors; leadingIcon?: React.ReactNode | null; href?: string; } @@ -34,7 +35,7 @@ export interface CellProfileProps extends ReactAriaCellProps { name?: string; href?: string; description?: string; - color?: 'primary' | 'secondary'; + color?: TextColors; } /** @public */ diff --git a/packages/ui/src/components/TablePagination/TablePagination.tsx b/packages/ui/src/components/TablePagination/TablePagination.tsx index ebd585a0c3..fd891be073 100644 --- a/packages/ui/src/components/TablePagination/TablePagination.tsx +++ b/packages/ui/src/components/TablePagination/TablePagination.tsx @@ -18,6 +18,7 @@ import clsx from 'clsx'; import { Text, ButtonIcon, Select } from '../..'; import type { TablePaginationProps } from './types'; import { useStyles } from '../../hooks/useStyles'; +import { TablePaginationDefinition } from './definition'; import styles from './TablePagination.module.css'; import { RiArrowLeftSLine, RiArrowRightSLine } from '@remixicon/react'; @@ -27,7 +28,7 @@ import { RiArrowLeftSLine, RiArrowRightSLine } from '@remixicon/react'; * @public */ export function TablePagination(props: TablePaginationProps) { - const { classNames, cleanedProps } = useStyles('TablePagination', { + const { classNames, cleanedProps } = useStyles(TablePaginationDefinition, { showPageSizeOptions: true, ...props, }); diff --git a/packages/ui/src/components/TablePagination/definition.ts b/packages/ui/src/components/TablePagination/definition.ts new file mode 100644 index 0000000000..d72a706da1 --- /dev/null +++ b/packages/ui/src/components/TablePagination/definition.ts @@ -0,0 +1,30 @@ +/* + * 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 type { ComponentDefinition } from '../../types'; + +/** + * Component definition for TablePagination + * @public + */ +export const TablePaginationDefinition = { + classNames: { + root: 'bui-TablePagination', + left: 'bui-TablePaginationLeft', + right: 'bui-TablePaginationRight', + select: 'bui-TablePaginationSelect', + }, +} as const satisfies ComponentDefinition; diff --git a/packages/ui/src/components/TablePagination/index.ts b/packages/ui/src/components/TablePagination/index.ts index 9fb26ad728..42642fb162 100644 --- a/packages/ui/src/components/TablePagination/index.ts +++ b/packages/ui/src/components/TablePagination/index.ts @@ -16,3 +16,4 @@ export { TablePagination } from './TablePagination'; export type { TablePaginationProps } from './types'; +export { TablePaginationDefinition } from './definition'; diff --git a/packages/ui/src/components/Tabs/Tabs.tsx b/packages/ui/src/components/Tabs/Tabs.tsx index f627199b4b..5c44fae8af 100644 --- a/packages/ui/src/components/Tabs/Tabs.tsx +++ b/packages/ui/src/components/Tabs/Tabs.tsx @@ -42,6 +42,7 @@ import { TabProps as AriaTabProps, } from 'react-aria-components'; import { useStyles } from '../../hooks/useStyles'; +import { TabsDefinition } from './definition'; import styles from './Tabs.module.css'; import clsx from 'clsx'; @@ -84,7 +85,7 @@ const isTabActive = ( * @public */ export const Tabs = (props: TabsProps) => { - const { classNames, cleanedProps } = useStyles('Tabs', props); + const { classNames, cleanedProps } = useStyles(TabsDefinition, props); const { className, children, ...rest } = cleanedProps; const tabsRef = useRef(null); const tabRefs = useRef>(new Map()); @@ -168,7 +169,7 @@ export const Tabs = (props: TabsProps) => { * @public */ export const TabList = (props: TabListProps) => { - const { classNames, cleanedProps } = useStyles('Tabs', props); + const { classNames, cleanedProps } = useStyles(TabsDefinition, props); const { className, children, ...rest } = cleanedProps; const { setHoveredKey, tabRefs, tabsRef, hoveredKey, prevHoveredKey } = useTabsContext(); @@ -219,7 +220,7 @@ export const TabList = (props: TabListProps) => { * @public */ export const Tab = (props: TabProps) => { - const { classNames, cleanedProps } = useStyles('Tabs', props); + const { classNames, cleanedProps } = useStyles(TabsDefinition, props); const { className, href, @@ -249,7 +250,7 @@ export const Tab = (props: TabProps) => { * @public */ export const TabPanel = (props: TabPanelProps) => { - const { classNames, cleanedProps } = useStyles('Tabs', props); + const { classNames, cleanedProps } = useStyles(TabsDefinition, props); const { className, children, ...rest } = cleanedProps; return ( diff --git a/packages/ui/src/components/Tabs/TabsIndicators.tsx b/packages/ui/src/components/Tabs/TabsIndicators.tsx index 6347c5c55c..2aa4f72508 100644 --- a/packages/ui/src/components/Tabs/TabsIndicators.tsx +++ b/packages/ui/src/components/Tabs/TabsIndicators.tsx @@ -16,6 +16,7 @@ import { TabListStateContext } from 'react-aria-components'; import { useStyles } from '../../hooks/useStyles'; +import { TabsDefinition } from './definition'; import { useContext, useEffect, useCallback, useRef } from 'react'; import type { TabsIndicatorsProps } from './types'; import styles from './Tabs.module.css'; @@ -28,7 +29,7 @@ import clsx from 'clsx'; */ export const TabsIndicators = (props: TabsIndicatorsProps) => { const { tabRefs, tabsRef, hoveredKey, prevHoveredKey } = props; - const { classNames } = useStyles('Tabs'); + const { classNames } = useStyles(TabsDefinition); const state = useContext(TabListStateContext); const prevSelectedKey = useRef(null); diff --git a/packages/ui/src/components/Tabs/definition.ts b/packages/ui/src/components/Tabs/definition.ts new file mode 100644 index 0000000000..10e9247372 --- /dev/null +++ b/packages/ui/src/components/Tabs/definition.ts @@ -0,0 +1,33 @@ +/* + * 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 type { ComponentDefinition } from '../../types'; + +/** + * Component definition for Tabs + * @public + */ +export const TabsDefinition = { + classNames: { + tabs: 'bui-Tabs', + tabList: 'bui-TabList', + tabListWrapper: 'bui-TabListWrapper', + tab: 'bui-Tab', + tabActive: 'bui-TabActive', + tabHovered: 'bui-TabHovered', + panel: 'bui-TabPanel', + }, +} as const satisfies ComponentDefinition; diff --git a/packages/ui/src/components/Tabs/index.ts b/packages/ui/src/components/Tabs/index.ts index 38a6f20ea7..009d515294 100644 --- a/packages/ui/src/components/Tabs/index.ts +++ b/packages/ui/src/components/Tabs/index.ts @@ -22,3 +22,4 @@ export type { TabProps, TabMatchStrategy, } from './types'; +export { TabsDefinition } from './definition'; diff --git a/packages/ui/src/components/TagGroup/TagGroup.tsx b/packages/ui/src/components/TagGroup/TagGroup.tsx index 04f3027f02..54557e5849 100644 --- a/packages/ui/src/components/TagGroup/TagGroup.tsx +++ b/packages/ui/src/components/TagGroup/TagGroup.tsx @@ -26,6 +26,7 @@ import type { ReactNode } from 'react'; import { RiCloseCircleLine } from '@remixicon/react'; import clsx from 'clsx'; import { useStyles } from '../../hooks/useStyles'; +import { TagGroupDefinition } from './definition'; import { isExternalLink } from '../../utils/isExternalLink'; import { useNavigate, useHref } from 'react-router-dom'; import styles from './TagGroup.module.css'; @@ -36,7 +37,7 @@ import styles from './TagGroup.module.css'; * @public */ export const TagGroup = (props: TagGroupProps) => { - const { classNames, cleanedProps } = useStyles('TagGroup', props); + const { classNames, cleanedProps } = useStyles(TagGroupDefinition, props); const { items, children, renderEmptyState, ...rest } = cleanedProps; return ( @@ -61,7 +62,7 @@ export const TagGroup = (props: TagGroupProps) => { * @public */ export const Tag = (props: TagProps) => { - const { classNames, cleanedProps } = useStyles('TagGroup', { + const { classNames, cleanedProps } = useStyles(TagGroupDefinition, { size: 'small', ...props, }); diff --git a/packages/ui/src/components/TagGroup/definition.ts b/packages/ui/src/components/TagGroup/definition.ts new file mode 100644 index 0000000000..8ad3d17805 --- /dev/null +++ b/packages/ui/src/components/TagGroup/definition.ts @@ -0,0 +1,31 @@ +/* + * 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 type { ComponentDefinition } from '../../types'; + +/** + * Component definition for TagGroup + * @public + */ +export const TagGroupDefinition = { + classNames: { + group: 'bui-TagGroup', + list: 'bui-TagList', + tag: 'bui-Tag', + tagIcon: 'bui-TagIcon', + tagRemoveButton: 'bui-TagRemoveButton', + }, +} as const satisfies ComponentDefinition; diff --git a/packages/ui/src/components/TagGroup/index.ts b/packages/ui/src/components/TagGroup/index.ts index b7434ce574..7c58cf69fc 100644 --- a/packages/ui/src/components/TagGroup/index.ts +++ b/packages/ui/src/components/TagGroup/index.ts @@ -16,3 +16,4 @@ export { TagGroup, Tag } from './TagGroup'; export type { TagGroupProps, TagProps } from './types'; +export { TagGroupDefinition } from './definition'; diff --git a/packages/ui/src/components/Text/Text.tsx b/packages/ui/src/components/Text/Text.tsx index 5b09d10663..857ae3ef0e 100644 --- a/packages/ui/src/components/Text/Text.tsx +++ b/packages/ui/src/components/Text/Text.tsx @@ -20,6 +20,7 @@ import type { ElementType } from 'react'; import type { TextProps } from './types'; import { useStyles } from '../../hooks/useStyles'; import styles from './Text.module.css'; +import { TextDefinition } from './definition'; function TextComponent( props: TextProps, @@ -27,12 +28,15 @@ function TextComponent( ) { const Component = props.as || 'span'; - const { classNames, dataAttributes, cleanedProps } = useStyles('Text', { - variant: 'body-medium', - weight: 'regular', - color: 'primary', - ...props, - }); + const { classNames, dataAttributes, cleanedProps } = useStyles( + TextDefinition, + { + variant: 'body-medium', + weight: 'regular', + color: 'primary', + ...props, + }, + ); const { className, truncate, ...restProps } = cleanedProps; diff --git a/packages/ui/src/components/Text/definition.ts b/packages/ui/src/components/Text/definition.ts new file mode 100644 index 0000000000..dbbfd6b72a --- /dev/null +++ b/packages/ui/src/components/Text/definition.ts @@ -0,0 +1,33 @@ +/* + * 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 type { ComponentDefinition } from '../../types'; + +/** + * Component definition for Text + * @public + */ +export const TextDefinition = { + classNames: { + root: 'bui-Text', + }, + dataAttributes: { + variant: ['subtitle', 'body', 'caption', 'label'] as const, + weight: ['regular', 'bold'] as const, + color: ['primary', 'secondary', 'danger', 'warning', 'success'] as const, + truncate: [true, false] as const, + }, +} as const satisfies ComponentDefinition; diff --git a/packages/ui/src/components/Text/index.ts b/packages/ui/src/components/Text/index.ts index 423288a8a4..df6ac23eb4 100644 --- a/packages/ui/src/components/Text/index.ts +++ b/packages/ui/src/components/Text/index.ts @@ -16,3 +16,4 @@ export * from './Text'; export * from './types'; +export { TextDefinition } from './definition'; diff --git a/packages/ui/src/components/TextField/TextField.tsx b/packages/ui/src/components/TextField/TextField.tsx index 632f5e9f86..24c038fdb8 100644 --- a/packages/ui/src/components/TextField/TextField.tsx +++ b/packages/ui/src/components/TextField/TextField.tsx @@ -21,6 +21,7 @@ import { FieldLabel } from '../FieldLabel'; import { FieldError } from '../FieldError'; import type { TextFieldProps } from './types'; import { useStyles } from '../../hooks/useStyles'; +import { TextFieldDefinition } from './definition'; import styles from './TextField.module.css'; /** @public */ @@ -41,7 +42,7 @@ export const TextField = forwardRef( }, [label, ariaLabel, ariaLabelledBy]); const { classNames, dataAttributes, style, cleanedProps } = useStyles( - 'TextField', + TextFieldDefinition, { size: 'small', ...props, diff --git a/packages/ui/src/components/TextField/definition.ts b/packages/ui/src/components/TextField/definition.ts new file mode 100644 index 0000000000..c1cab8095d --- /dev/null +++ b/packages/ui/src/components/TextField/definition.ts @@ -0,0 +1,36 @@ +/* + * 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 type { ComponentDefinition } from '../../types'; + +/** + * Component definition for TextField + * @public + */ +export const TextFieldDefinition = { + classNames: { + root: 'bui-TextField', + inputWrapper: 'bui-InputWrapper', + input: 'bui-Input', + inputIcon: 'bui-InputIcon', + inputAction: 'bui-InputAction', + }, + dataAttributes: { + invalid: [true, false] as const, + disabled: [true, false] as const, + size: ['small', 'medium'] as const, + }, +} as const satisfies ComponentDefinition; diff --git a/packages/ui/src/components/TextField/index.ts b/packages/ui/src/components/TextField/index.ts index 95a838fb46..a9d061047d 100644 --- a/packages/ui/src/components/TextField/index.ts +++ b/packages/ui/src/components/TextField/index.ts @@ -16,3 +16,4 @@ export * from './TextField'; export * from './types'; +export { TextFieldDefinition } from './definition'; diff --git a/packages/ui/src/components/Tooltip/Tooltip.tsx b/packages/ui/src/components/Tooltip/Tooltip.tsx index fc8b25547b..9099f1eef2 100644 --- a/packages/ui/src/components/Tooltip/Tooltip.tsx +++ b/packages/ui/src/components/Tooltip/Tooltip.tsx @@ -24,6 +24,7 @@ import { import clsx from 'clsx'; import { TooltipProps } from './types'; import { useStyles } from '../../hooks/useStyles'; +import { TooltipDefinition } from './definition'; import styles from './Tooltip.module.css'; /** @public */ @@ -36,7 +37,7 @@ export const TooltipTrigger = (props: TooltipTriggerComponentProps) => { /** @public */ export const Tooltip = forwardRef( (props, ref) => { - const { classNames, cleanedProps } = useStyles('Tooltip', props); + const { classNames, cleanedProps } = useStyles(TooltipDefinition, props); const { className, children, ...rest } = cleanedProps; return ( diff --git a/packages/ui/src/components/Tooltip/definition.ts b/packages/ui/src/components/Tooltip/definition.ts new file mode 100644 index 0000000000..a5b3d61ea8 --- /dev/null +++ b/packages/ui/src/components/Tooltip/definition.ts @@ -0,0 +1,28 @@ +/* + * 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 type { ComponentDefinition } from '../../types'; + +/** + * Component definition for Tooltip + * @public + */ +export const TooltipDefinition = { + classNames: { + tooltip: 'bui-Tooltip', + arrow: 'bui-TooltipArrow', + }, +} as const satisfies ComponentDefinition; diff --git a/packages/ui/src/components/Tooltip/index.ts b/packages/ui/src/components/Tooltip/index.ts index 613631091b..43bd385c65 100644 --- a/packages/ui/src/components/Tooltip/index.ts +++ b/packages/ui/src/components/Tooltip/index.ts @@ -16,3 +16,4 @@ export { TooltipTrigger, Tooltip } from './Tooltip'; export type { TooltipProps } from './types'; +export { TooltipDefinition } from './definition'; diff --git a/packages/ui/src/components/VisuallyHidden/VisuallyHidden.tsx b/packages/ui/src/components/VisuallyHidden/VisuallyHidden.tsx index 305f8fc424..cfc796ef9e 100644 --- a/packages/ui/src/components/VisuallyHidden/VisuallyHidden.tsx +++ b/packages/ui/src/components/VisuallyHidden/VisuallyHidden.tsx @@ -15,6 +15,7 @@ */ import { useStyles } from '../../hooks/useStyles'; +import { VisuallyHiddenDefinition } from './definition'; import { VisuallyHiddenProps } from './types'; import styles from './VisuallyHidden.module.css'; import clsx from 'clsx'; @@ -29,7 +30,10 @@ import clsx from 'clsx'; * @public */ export const VisuallyHidden = (props: VisuallyHiddenProps) => { - const { classNames, cleanedProps } = useStyles('VisuallyHidden', props); + const { classNames, cleanedProps } = useStyles( + VisuallyHiddenDefinition, + props, + ); const { className, ...rest } = cleanedProps; return ( diff --git a/packages/ui/src/components/VisuallyHidden/definition.ts b/packages/ui/src/components/VisuallyHidden/definition.ts new file mode 100644 index 0000000000..5be52f89ec --- /dev/null +++ b/packages/ui/src/components/VisuallyHidden/definition.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. + */ + +import type { ComponentDefinition } from '../../types'; + +/** + * Component definition for VisuallyHidden + * @public + */ +export const VisuallyHiddenDefinition = { + classNames: { + root: 'bui-VisuallyHidden', + }, +} as const satisfies ComponentDefinition; diff --git a/packages/ui/src/components/VisuallyHidden/index.ts b/packages/ui/src/components/VisuallyHidden/index.ts index 6946ec00e5..c3668df403 100644 --- a/packages/ui/src/components/VisuallyHidden/index.ts +++ b/packages/ui/src/components/VisuallyHidden/index.ts @@ -16,3 +16,4 @@ export { VisuallyHidden } from './VisuallyHidden'; export type { VisuallyHiddenProps } from './types'; +export { VisuallyHiddenDefinition } from './definition'; diff --git a/packages/ui/src/definitions.ts b/packages/ui/src/definitions.ts new file mode 100644 index 0000000000..a0dc412697 --- /dev/null +++ b/packages/ui/src/definitions.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. + */ + +/** + * Component definitions barrel export + * @packageDocumentation + */ + +export { AccordionDefinition } from './components/Accordion/definition'; +export { AvatarDefinition } from './components/Avatar/definition'; +export { BoxDefinition } from './components/Box/definition'; +export { ButtonDefinition } from './components/Button/definition'; +export { ButtonIconDefinition } from './components/ButtonIcon/definition'; +export { ButtonLinkDefinition } from './components/ButtonLink/definition'; +export { CardDefinition } from './components/Card/definition'; +export { CheckboxDefinition } from './components/Checkbox/definition'; +export { ContainerDefinition } from './components/Container/definition'; +export { DialogDefinition } from './components/Dialog/definition'; +export { FieldErrorDefinition } from './components/FieldError/definition'; +export { FieldLabelDefinition } from './components/FieldLabel/definition'; +export { FlexDefinition } from './components/Flex/definition'; +export { + GridDefinition, + GridItemDefinition, +} from './components/Grid/definition'; +export { HeaderDefinition } from './components/Header/definition'; +export { HeaderPageDefinition } from './components/HeaderPage/definition'; +export { LinkDefinition } from './components/Link/definition'; +export { MenuDefinition } from './components/Menu/definition'; +export { PasswordFieldDefinition } from './components/PasswordField/definition'; +export { PopoverDefinition } from './components/Popover/definition'; +export { RadioGroupDefinition } from './components/RadioGroup/definition'; +export { SearchFieldDefinition } from './components/SearchField/definition'; +export { SelectDefinition } from './components/Select/definition'; +export { SkeletonDefinition } from './components/Skeleton/definition'; +export { SwitchDefinition } from './components/Switch/definition'; +export { TableDefinition } from './components/Table/definition'; +export { TablePaginationDefinition } from './components/TablePagination/definition'; +export { TabsDefinition } from './components/Tabs/definition'; +export { TagGroupDefinition } from './components/TagGroup/definition'; +export { TextDefinition } from './components/Text/definition'; +export { TextFieldDefinition } from './components/TextField/definition'; +export { TooltipDefinition } from './components/Tooltip/definition'; +export { VisuallyHiddenDefinition } from './components/VisuallyHidden/definition'; diff --git a/packages/ui/src/hooks/useStyles.ts b/packages/ui/src/hooks/useStyles.ts index b141eca582..cc05f5f362 100644 --- a/packages/ui/src/hooks/useStyles.ts +++ b/packages/ui/src/hooks/useStyles.ts @@ -14,8 +14,7 @@ * limitations under the License. */ import { useBreakpoint, breakpoints } from './useBreakpoint'; -import { componentDefinitions } from '../utils/componentDefinitions'; -import type { ComponentDefinitionName, ComponentClassNames } from '../types'; +import type { ComponentDefinition } from '../types'; import { utilityClassMap } from '../utils/utilityClassMap'; /** @@ -55,26 +54,25 @@ function resolveResponsiveValue( /** * React hook to get class names and data attributes for a component with responsive support - * @param componentName - The name of the component + * @param componentDefinition - The component's definition object * @param props - All component props * @returns Object with classNames, dataAttributes, utilityClasses, style, and cleanedProps */ export function useStyles< - T extends ComponentDefinitionName, + T extends ComponentDefinition, P extends Record = Record, >( - componentName: T, + componentDefinition: T, props: P = {} as P, ): { - classNames: ComponentClassNames; + classNames: T['classNames']; dataAttributes: Record; utilityClasses: string; style: React.CSSProperties; cleanedProps: P; } { const { breakpoint } = useBreakpoint(); - const componentDefinition = componentDefinitions[componentName]; - const classNames = componentDefinition.classNames as ComponentClassNames; + const classNames = componentDefinition.classNames; const utilityPropNames = ('utilityProps' in componentDefinition ? componentDefinition.utilityProps diff --git a/packages/ui/src/index.ts b/packages/ui/src/index.ts index baa4c3e5dc..03ae3245e3 100644 --- a/packages/ui/src/index.ts +++ b/packages/ui/src/index.ts @@ -59,6 +59,3 @@ export * from './types'; // Hooks export { useBreakpoint } from './hooks/useBreakpoint'; - -// Component Definitions -export * from './utils/componentDefinitions'; diff --git a/packages/ui/src/types.ts b/packages/ui/src/types.ts index db23974186..7166194091 100644 --- a/packages/ui/src/types.ts +++ b/packages/ui/src/types.ts @@ -14,8 +14,6 @@ * limitations under the License. */ -import { componentDefinitions } from './utils/componentDefinitions'; - /** @public */ export type Breakpoint = 'initial' | 'xs' | 'sm' | 'md' | 'lg' | 'xl'; @@ -175,16 +173,3 @@ export interface ComponentDefinition { dataAttributes?: DataAttributesMap; utilityProps?: string[]; } - -/** - * Type utilities for extracting information from the component styles - * @public - */ -export type ComponentDefinitionName = keyof typeof componentDefinitions; - -/** - * Helper type to extract class names for a component - * @public - */ -export type ComponentClassNames = - (typeof componentDefinitions)[T]['classNames']; diff --git a/packages/ui/src/utils/componentDefinitions.ts b/packages/ui/src/utils/componentDefinitions.ts deleted file mode 100644 index cc45dbefe1..0000000000 --- a/packages/ui/src/utils/componentDefinitions.ts +++ /dev/null @@ -1,425 +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 type { ComponentDefinition } from '../types'; - -/** - * Component definitions for the Backstage UI library - * @public - */ -export const componentDefinitions = { - Avatar: { - classNames: { - root: 'bui-AvatarRoot', - image: 'bui-AvatarImage', - fallback: 'bui-AvatarFallback', - }, - dataAttributes: { - size: ['small', 'medium', 'large'] as const, - }, - }, - Box: { - classNames: { - root: 'bui-Box', - }, - utilityProps: [ - 'm', - 'mb', - 'ml', - 'mr', - 'mt', - 'mx', - 'my', - 'p', - 'pb', - 'pl', - 'pr', - 'pt', - 'px', - 'py', - 'position', - 'display', - 'width', - 'minWidth', - 'maxWidth', - 'height', - 'minHeight', - 'maxHeight', - ], - }, - Button: { - classNames: { - root: 'bui-Button', - content: 'bui-ButtonContent', - spinner: 'bui-ButtonSpinner', - }, - dataAttributes: { - size: ['small', 'medium', 'large'] as const, - variant: ['primary', 'secondary', 'tertiary'] as const, - loading: [true, false] as const, - }, - }, - ButtonIcon: { - classNames: { - root: 'bui-ButtonIcon', - content: 'bui-ButtonIconContent', - spinner: 'bui-ButtonIconSpinner', - }, - }, - ButtonLink: { - classNames: { - root: 'bui-ButtonLink', - }, - }, - Card: { - classNames: { - root: 'bui-Card', - header: 'bui-CardHeader', - body: 'bui-CardBody', - footer: 'bui-CardFooter', - }, - }, - Checkbox: { - classNames: { - root: 'bui-Checkbox', - indicator: 'bui-CheckboxIndicator', - }, - dataAttributes: { - selected: [true, false] as const, - }, - }, - Container: { - classNames: { - root: 'bui-Container', - }, - utilityProps: ['my', 'mt', 'mb', 'py', 'pt', 'pb', 'display'], - }, - Dialog: { - classNames: { - overlay: 'bui-DialogOverlay', - dialog: 'bui-Dialog', - header: 'bui-DialogHeader', - headerTitle: 'bui-DialogHeaderTitle', - body: 'bui-DialogBody', - footer: 'bui-DialogFooter', - }, - }, - Accordion: { - classNames: { - root: 'bui-Accordion', - trigger: 'bui-AccordionTrigger', - triggerButton: 'bui-AccordionTriggerButton', - triggerTitle: 'bui-AccordionTriggerTitle', - triggerSubtitle: 'bui-AccordionTriggerSubtitle', - triggerIcon: 'bui-AccordionTriggerIcon', - panel: 'bui-AccordionPanel', - group: 'bui-AccordionGroup', - }, - }, - FieldError: { - classNames: { - root: 'bui-FieldError', - }, - }, - FieldLabel: { - classNames: { - root: 'bui-FieldLabelWrapper', - label: 'bui-FieldLabel', - secondaryLabel: 'bui-FieldSecondaryLabel', - description: 'bui-FieldDescription', - }, - }, - Flex: { - classNames: { - root: 'bui-Flex', - }, - utilityProps: [ - 'm', - 'mb', - 'ml', - 'mr', - 'mt', - 'mx', - 'my', - 'p', - 'pb', - 'pl', - 'pr', - 'pt', - 'px', - 'py', - 'gap', - 'align', - 'justify', - 'direction', - ], - }, - Grid: { - classNames: { - root: 'bui-Grid', - }, - utilityProps: [ - 'columns', - 'gap', - 'm', - 'mb', - 'ml', - 'mr', - 'mt', - 'mx', - 'my', - 'p', - 'pb', - 'pl', - 'pr', - 'pt', - 'px', - 'py', - ], - }, - GridItem: { - classNames: { - root: 'bui-GridItem', - }, - utilityProps: ['colSpan', 'colEnd', 'colStart', 'rowSpan'], - }, - Header: { - classNames: { - toolbar: 'bui-HeaderToolbar', - toolbarWrapper: 'bui-HeaderToolbarWrapper', - toolbarContent: 'bui-HeaderToolbarContent', - toolbarControls: 'bui-HeaderToolbarControls', - toolbarIcon: 'bui-HeaderToolbarIcon', - toolbarName: 'bui-HeaderToolbarName', - tabsWrapper: 'bui-HeaderTabsWrapper', - }, - }, - HeaderPage: { - classNames: { - root: 'bui-HeaderPage', - content: 'bui-HeaderPageContent', - breadcrumbs: 'bui-HeaderPageBreadcrumbs', - tabsWrapper: 'bui-HeaderPageTabsWrapper', - controls: 'bui-HeaderPageControls', - }, - }, - Heading: { - classNames: { - root: 'bui-Heading', - }, - dataAttributes: { - variant: ['title1', 'title2', 'title3', 'subtitle'] as const, - color: ['primary', 'secondary', 'muted'] as const, - truncate: [true, false] as const, - }, - }, - Icon: { - classNames: { - root: 'bui-Icon', - }, - }, - Link: { - classNames: { - root: 'bui-Link', - }, - dataAttributes: { - variant: ['subtitle', 'body', 'caption', 'label'] as const, - weight: ['regular', 'bold'] as const, - color: ['primary', 'secondary', 'danger', 'warning', 'success'] as const, - truncate: [true, false] as const, - }, - }, - List: { - classNames: { - root: 'bui-List', - row: 'bui-ListRow', - label: 'bui-ListLabel', - }, - }, - Menu: { - classNames: { - root: 'bui-Menu', - popover: 'bui-MenuPopover', - content: 'bui-MenuContent', - section: 'bui-MenuSection', - sectionHeader: 'bui-MenuSectionHeader', - item: 'bui-MenuItem', - itemListBox: 'bui-MenuItemListBox', - itemListBoxCheck: 'bui-MenuItemListBoxCheck', - itemWrapper: 'bui-MenuItemWrapper', - itemContent: 'bui-MenuItemContent', - itemArrow: 'bui-MenuItemArrow', - separator: 'bui-MenuSeparator', - searchField: 'bui-MenuSearchField', - searchFieldInput: 'bui-MenuSearchFieldInput', - searchFieldClear: 'bui-MenuSearchFieldClear', - emptyState: 'bui-MenuEmptyState', - }, - }, - PasswordField: { - classNames: { - root: 'bui-PasswordField', - inputWrapper: 'bui-PasswordFieldInputWrapper', - input: 'bui-PasswordFieldInput', - inputIcon: 'bui-PasswordFieldIcon', - inputVisibility: 'bui-PasswordFieldVisibility', - }, - dataAttributes: { - size: ['small', 'medium'] as const, - }, - }, - Popover: { - classNames: { - root: 'bui-Popover', - }, - }, - RadioGroup: { - classNames: { - root: 'bui-RadioGroup', - content: 'bui-RadioGroupContent', - radio: 'bui-Radio', - }, - }, - SearchField: { - classNames: { - root: 'bui-SearchField', - clear: 'bui-SearchFieldClear', - inputWrapper: 'bui-SearchFieldInputWrapper', - input: 'bui-SearchFieldInput', - inputIcon: 'bui-SearchFieldInputIcon', - }, - dataAttributes: { - startCollapsed: [true, false] as const, - size: ['small', 'medium'] as const, - }, - }, - Select: { - classNames: { - root: 'bui-Select', - popover: 'bui-SelectPopover', - trigger: 'bui-SelectTrigger', - chevron: 'bui-SelectTriggerChevron', - value: 'bui-SelectValue', - list: 'bui-SelectList', - item: 'bui-SelectItem', - itemIndicator: 'bui-SelectItemIndicator', - itemLabel: 'bui-SelectItemLabel', - searchWrapper: 'bui-SelectSearchWrapper', - search: 'bui-SelectSearch', - searchClear: 'bui-SelectSearchClear', - noResults: 'bui-SelectNoResults', - }, - dataAttributes: { - size: ['small', 'medium'] as const, - }, - }, - Skeleton: { - classNames: { - root: 'bui-Skeleton', - }, - }, - Switch: { - classNames: { - root: 'bui-Switch', - indicator: 'bui-SwitchIndicator', - }, - }, - Table: { - classNames: { - table: 'bui-Table', - header: 'bui-TableHeader', - body: 'bui-TableBody', - row: 'bui-TableRow', - head: 'bui-TableHead', - headContent: 'bui-TableHeadContent', - headSortButton: 'bui-TableHeadSortButton', - caption: 'bui-TableCaption', - cell: 'bui-TableCell', - cellContentWrapper: 'bui-TableCellContentWrapper', - cellContent: 'bui-TableCellContent', - cellIcon: 'bui-TableCellIcon', - cellProfileAvatar: 'bui-TableCellProfileAvatar', - cellProfileAvatarImage: 'bui-TableCellProfileAvatarImage', - cellProfileAvatarFallback: 'bui-TableCellProfileAvatarFallback', - cellProfileName: 'bui-TableCellProfileName', - cellProfileLink: 'bui-TableCellProfileLink', - }, - }, - TablePagination: { - classNames: { - root: 'bui-TablePagination', - left: 'bui-TablePaginationLeft', - right: 'bui-TablePaginationRight', - select: 'bui-TablePaginationSelect', - }, - }, - Tabs: { - classNames: { - tabs: 'bui-Tabs', - tabList: 'bui-TabList', - tabListWrapper: 'bui-TabListWrapper', - tab: 'bui-Tab', - tabActive: 'bui-TabActive', - tabHovered: 'bui-TabHovered', - panel: 'bui-TabPanel', - }, - }, - TagGroup: { - classNames: { - group: 'bui-TagGroup', - list: 'bui-TagList', - tag: 'bui-Tag', - tagIcon: 'bui-TagIcon', - tagRemoveButton: 'bui-TagRemoveButton', - }, - }, - Text: { - classNames: { - root: 'bui-Text', - }, - dataAttributes: { - variant: ['subtitle', 'body', 'caption', 'label'] as const, - weight: ['regular', 'bold'] as const, - color: ['primary', 'secondary', 'danger', 'warning', 'success'] as const, - truncate: [true, false] as const, - }, - }, - TextField: { - classNames: { - root: 'bui-TextField', - inputWrapper: 'bui-InputWrapper', - input: 'bui-Input', - inputIcon: 'bui-InputIcon', - inputAction: 'bui-InputAction', - }, - dataAttributes: { - invalid: [true, false] as const, - disabled: [true, false] as const, - size: ['small', 'medium'] as const, - }, - }, - Tooltip: { - classNames: { - tooltip: 'bui-Tooltip', - arrow: 'bui-TooltipArrow', - }, - }, - VisuallyHidden: { - classNames: { - root: 'bui-VisuallyHidden', - }, - }, -} as const satisfies Record; From f987bfda6d2abaae46e402dc78467541d9d7ed16 Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Thu, 13 Nov 2025 20:33:08 +0100 Subject: [PATCH 34/73] catalog-import: changeset Signed-off-by: Vincenzo Scamporlino --- .changeset/tidy-lines-hear.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/tidy-lines-hear.md diff --git a/.changeset/tidy-lines-hear.md b/.changeset/tidy-lines-hear.md new file mode 100644 index 0000000000..4cb28dfbac --- /dev/null +++ b/.changeset/tidy-lines-hear.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-import': patch +--- + +Fixed missing `catalog.entity.create` permission authorization in the default page extension. From bf1a4dcd223f87794015e0e0a52c3fa1d96d1c5e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 17 Nov 2025 12:55:40 +0000 Subject: [PATCH 35/73] chore(deps): update dependency @rspack/core to v1.6.3 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 174 +++++++++++++++++++++++++++--------------------------- 1 file changed, 87 insertions(+), 87 deletions(-) diff --git a/yarn.lock b/yarn.lock index 6b483cbbcf..fa920cb24f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11190,10 +11190,10 @@ __metadata: languageName: node linkType: hard -"@module-federation/error-codes@npm:0.21.2": - version: 0.21.2 - resolution: "@module-federation/error-codes@npm:0.21.2" - checksum: 10/04b6a80a6c1b6aa4d5e4396f0c02d46af8bf8c11bec55d4e409854a8f22e40599f2e1fa9ad9f93081893e48679af3850ecd42d05776c06b5cd8516aaefc0aded +"@module-federation/error-codes@npm:0.21.4": + version: 0.21.4 + resolution: "@module-federation/error-codes@npm:0.21.4" + checksum: 10/18b0ecdba0de4cd5b202f1f5e5aa76273de0e4513ba91b8e39a2a5b00ff6471f694c88d591624b0913a0c3b4c9a6112da29dc7eebbdc562e5455b591f1d70b31 languageName: node linkType: hard @@ -11261,13 +11261,13 @@ __metadata: languageName: node linkType: hard -"@module-federation/runtime-core@npm:0.21.2": - version: 0.21.2 - resolution: "@module-federation/runtime-core@npm:0.21.2" +"@module-federation/runtime-core@npm:0.21.4": + version: 0.21.4 + resolution: "@module-federation/runtime-core@npm:0.21.4" dependencies: - "@module-federation/error-codes": "npm:0.21.2" - "@module-federation/sdk": "npm:0.21.2" - checksum: 10/8bbd20aa7b6a40fcb7d0083cc169657fa18618372bd01c204e01f13acb4b9765c409e4c22100b5891201ddae2c6a5e2aab86cbc3e00f4411d32c7b9c6faec0cd + "@module-federation/error-codes": "npm:0.21.4" + "@module-federation/sdk": "npm:0.21.4" + checksum: 10/b90fe4147cd3302ea6b02098ff2bed7437425609ba0eb4d7b649b3643837810239f06f532af092a53f9b47e8fae1aeef84cfd964431fa4ab2fd4a800ad796d23 languageName: node linkType: hard @@ -11281,13 +11281,13 @@ __metadata: languageName: node linkType: hard -"@module-federation/runtime-tools@npm:0.21.2": - version: 0.21.2 - resolution: "@module-federation/runtime-tools@npm:0.21.2" +"@module-federation/runtime-tools@npm:0.21.4": + version: 0.21.4 + resolution: "@module-federation/runtime-tools@npm:0.21.4" dependencies: - "@module-federation/runtime": "npm:0.21.2" - "@module-federation/webpack-bundler-runtime": "npm:0.21.2" - checksum: 10/81070ce02e0508568ce51075617799d5ffac178ae5ad618cb07a806800995af0395993683ec71ec90680b112eca359e39af5d5035dada8264b8cf5b3e6b3a3fc + "@module-federation/runtime": "npm:0.21.4" + "@module-federation/webpack-bundler-runtime": "npm:0.21.4" + checksum: 10/1e453268122070e5512c1d74cb8b4efb87cd2c1b46daba1736dfee16b2e8332a779f8168dcb3f84e17eade31f965168df63dae487ccfb74b0469c32af1895675 languageName: node linkType: hard @@ -11301,14 +11301,14 @@ __metadata: languageName: node linkType: hard -"@module-federation/runtime@npm:0.21.2": - version: 0.21.2 - resolution: "@module-federation/runtime@npm:0.21.2" +"@module-federation/runtime@npm:0.21.4": + version: 0.21.4 + resolution: "@module-federation/runtime@npm:0.21.4" dependencies: - "@module-federation/error-codes": "npm:0.21.2" - "@module-federation/runtime-core": "npm:0.21.2" - "@module-federation/sdk": "npm:0.21.2" - checksum: 10/acec411a4b354001d2c8beb12ff8d8d857ec9251b21158f3ba78ba7e24999a85a30d290cab9f5f6cd9876347b2878bc291d69a756cd1d104f1067186f4a0ad91 + "@module-federation/error-codes": "npm:0.21.4" + "@module-federation/runtime-core": "npm:0.21.4" + "@module-federation/sdk": "npm:0.21.4" + checksum: 10/ae262bfe1643a381e571d7dff459108da3046eea04cc3dae85dce745dd294ef8a30f70098ffa602c266b8c5878c859dd2fcde787773303dac35f77fa6ed32ae4 languageName: node linkType: hard @@ -11323,10 +11323,10 @@ __metadata: languageName: node linkType: hard -"@module-federation/sdk@npm:0.21.2": - version: 0.21.2 - resolution: "@module-federation/sdk@npm:0.21.2" - checksum: 10/e71a85bc4daf16cbe065c4ee8c36d6652b0d9a2cd5cc4fc53494f1c7f1111a67a08c4817e5738a7e4f66b7f60769abceb955c23bf94eb3205d2646002852b10f +"@module-federation/sdk@npm:0.21.4": + version: 0.21.4 + resolution: "@module-federation/sdk@npm:0.21.4" + checksum: 10/74c9ee2a057babf4f2638f8644a6eee6bd2c76441440dcc3855fb01a0e527e88518b8cc9c2d6d8f6b28858e34e40a3a966c03bb5d42897b9ea9163985edfa159 languageName: node linkType: hard @@ -11348,13 +11348,13 @@ __metadata: languageName: node linkType: hard -"@module-federation/webpack-bundler-runtime@npm:0.21.2": - version: 0.21.2 - resolution: "@module-federation/webpack-bundler-runtime@npm:0.21.2" +"@module-federation/webpack-bundler-runtime@npm:0.21.4": + version: 0.21.4 + resolution: "@module-federation/webpack-bundler-runtime@npm:0.21.4" dependencies: - "@module-federation/runtime": "npm:0.21.2" - "@module-federation/sdk": "npm:0.21.2" - checksum: 10/ac99d3ad623d52640cf776dbd4dd1382368926e19607f0fdc204b61b645a0bf9bde7f9fabd64edc83e04079fb4b3abff7c1feec80ecd36caa6a1d9d1824271c6 + "@module-federation/runtime": "npm:0.21.4" + "@module-federation/sdk": "npm:0.21.4" + checksum: 10/a4f2a7ca7765651023af88f38ded9580b553cd8c6a88bc9056ec4dc58656a3d438f0498750462f424bf3aeaa5a3c7b6fd8189b7c7c76d084736474455838cb55 languageName: node linkType: hard @@ -16929,92 +16929,92 @@ __metadata: languageName: node linkType: hard -"@rspack/binding-darwin-arm64@npm:1.6.1": - version: 1.6.1 - resolution: "@rspack/binding-darwin-arm64@npm:1.6.1" +"@rspack/binding-darwin-arm64@npm:1.6.3": + version: 1.6.3 + resolution: "@rspack/binding-darwin-arm64@npm:1.6.3" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@rspack/binding-darwin-x64@npm:1.6.1": - version: 1.6.1 - resolution: "@rspack/binding-darwin-x64@npm:1.6.1" +"@rspack/binding-darwin-x64@npm:1.6.3": + version: 1.6.3 + resolution: "@rspack/binding-darwin-x64@npm:1.6.3" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@rspack/binding-linux-arm64-gnu@npm:1.6.1": - version: 1.6.1 - resolution: "@rspack/binding-linux-arm64-gnu@npm:1.6.1" +"@rspack/binding-linux-arm64-gnu@npm:1.6.3": + version: 1.6.3 + resolution: "@rspack/binding-linux-arm64-gnu@npm:1.6.3" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@rspack/binding-linux-arm64-musl@npm:1.6.1": - version: 1.6.1 - resolution: "@rspack/binding-linux-arm64-musl@npm:1.6.1" +"@rspack/binding-linux-arm64-musl@npm:1.6.3": + version: 1.6.3 + resolution: "@rspack/binding-linux-arm64-musl@npm:1.6.3" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@rspack/binding-linux-x64-gnu@npm:1.6.1": - version: 1.6.1 - resolution: "@rspack/binding-linux-x64-gnu@npm:1.6.1" +"@rspack/binding-linux-x64-gnu@npm:1.6.3": + version: 1.6.3 + resolution: "@rspack/binding-linux-x64-gnu@npm:1.6.3" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@rspack/binding-linux-x64-musl@npm:1.6.1": - version: 1.6.1 - resolution: "@rspack/binding-linux-x64-musl@npm:1.6.1" +"@rspack/binding-linux-x64-musl@npm:1.6.3": + version: 1.6.3 + resolution: "@rspack/binding-linux-x64-musl@npm:1.6.3" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@rspack/binding-wasm32-wasi@npm:1.6.1": - version: 1.6.1 - resolution: "@rspack/binding-wasm32-wasi@npm:1.6.1" +"@rspack/binding-wasm32-wasi@npm:1.6.3": + version: 1.6.3 + resolution: "@rspack/binding-wasm32-wasi@npm:1.6.3" dependencies: "@napi-rs/wasm-runtime": "npm:1.0.7" conditions: cpu=wasm32 languageName: node linkType: hard -"@rspack/binding-win32-arm64-msvc@npm:1.6.1": - version: 1.6.1 - resolution: "@rspack/binding-win32-arm64-msvc@npm:1.6.1" +"@rspack/binding-win32-arm64-msvc@npm:1.6.3": + version: 1.6.3 + resolution: "@rspack/binding-win32-arm64-msvc@npm:1.6.3" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@rspack/binding-win32-ia32-msvc@npm:1.6.1": - version: 1.6.1 - resolution: "@rspack/binding-win32-ia32-msvc@npm:1.6.1" +"@rspack/binding-win32-ia32-msvc@npm:1.6.3": + version: 1.6.3 + resolution: "@rspack/binding-win32-ia32-msvc@npm:1.6.3" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@rspack/binding-win32-x64-msvc@npm:1.6.1": - version: 1.6.1 - resolution: "@rspack/binding-win32-x64-msvc@npm:1.6.1" +"@rspack/binding-win32-x64-msvc@npm:1.6.3": + version: 1.6.3 + resolution: "@rspack/binding-win32-x64-msvc@npm:1.6.3" conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"@rspack/binding@npm:1.6.1": - version: 1.6.1 - resolution: "@rspack/binding@npm:1.6.1" +"@rspack/binding@npm:1.6.3": + version: 1.6.3 + resolution: "@rspack/binding@npm:1.6.3" dependencies: - "@rspack/binding-darwin-arm64": "npm:1.6.1" - "@rspack/binding-darwin-x64": "npm:1.6.1" - "@rspack/binding-linux-arm64-gnu": "npm:1.6.1" - "@rspack/binding-linux-arm64-musl": "npm:1.6.1" - "@rspack/binding-linux-x64-gnu": "npm:1.6.1" - "@rspack/binding-linux-x64-musl": "npm:1.6.1" - "@rspack/binding-wasm32-wasi": "npm:1.6.1" - "@rspack/binding-win32-arm64-msvc": "npm:1.6.1" - "@rspack/binding-win32-ia32-msvc": "npm:1.6.1" - "@rspack/binding-win32-x64-msvc": "npm:1.6.1" + "@rspack/binding-darwin-arm64": "npm:1.6.3" + "@rspack/binding-darwin-x64": "npm:1.6.3" + "@rspack/binding-linux-arm64-gnu": "npm:1.6.3" + "@rspack/binding-linux-arm64-musl": "npm:1.6.3" + "@rspack/binding-linux-x64-gnu": "npm:1.6.3" + "@rspack/binding-linux-x64-musl": "npm:1.6.3" + "@rspack/binding-wasm32-wasi": "npm:1.6.3" + "@rspack/binding-win32-arm64-msvc": "npm:1.6.3" + "@rspack/binding-win32-ia32-msvc": "npm:1.6.3" + "@rspack/binding-win32-x64-msvc": "npm:1.6.3" dependenciesMeta: "@rspack/binding-darwin-arm64": optional: true @@ -17036,23 +17036,23 @@ __metadata: optional: true "@rspack/binding-win32-x64-msvc": optional: true - checksum: 10/374f234febba8305821f61645257278dd8fdf5961ca49b1605ea4535a8e40102db2afa96474464cec98bfa321bcb9beded78e7c1a9c130b1321a516a7c36ef7e + checksum: 10/c2ae95df065a3fc00fe81b8aef72dc1a4b80db274656e0c03db82fd12fba2d3a40514a741e0c0d3422d896d49eb34863d81b5c23d29df6d5f692e5b15a916510 languageName: node linkType: hard "@rspack/core@npm:^1.4.11": - version: 1.6.1 - resolution: "@rspack/core@npm:1.6.1" + version: 1.6.3 + resolution: "@rspack/core@npm:1.6.3" dependencies: - "@module-federation/runtime-tools": "npm:0.21.2" - "@rspack/binding": "npm:1.6.1" - "@rspack/lite-tapable": "npm:1.0.1" + "@module-federation/runtime-tools": "npm:0.21.4" + "@rspack/binding": "npm:1.6.3" + "@rspack/lite-tapable": "npm:1.1.0" peerDependencies: "@swc/helpers": ">=0.5.1" peerDependenciesMeta: "@swc/helpers": optional: true - checksum: 10/6ba8ffff547e0185b9ab397d13d19304130e08050a82ebbf11d86b6b557b6a3cff2adc2bfeb21a737801cfcc0ba9391f2efccd3149409f22a0218b87e6af0951 + checksum: 10/01bb10cf18331b2d6af841bc33bd15c1a01f01c5b16fd9b598e6b013ff138f91a9124c39f85530fd2a66dd693d0fa1252fc0331f0be9d7f2452c315c0a6e619a languageName: node linkType: hard @@ -17071,10 +17071,10 @@ __metadata: languageName: node linkType: hard -"@rspack/lite-tapable@npm:1.0.1, @rspack/lite-tapable@npm:^1.0.1": - version: 1.0.1 - resolution: "@rspack/lite-tapable@npm:1.0.1" - checksum: 10/240b7832965bca5a52d1f03a8539dab5810958ce24b5a670405b2505d81350f10d668f4055648f5918bc18ac033e637bcb7f92189345f0f2f671b546019c2f9e +"@rspack/lite-tapable@npm:1.1.0, @rspack/lite-tapable@npm:^1.0.1": + version: 1.1.0 + resolution: "@rspack/lite-tapable@npm:1.1.0" + checksum: 10/41ff73fe5e1b8dccaad746c9c1bd36dd67649e1ad35776f311b5ba94333a397704e11158579e25a6a7e677c51abe35e66987b1b000faef48d4e4ad2470fea150 languageName: node linkType: hard From c6e7c23af7979c273d084735b183017a51c8ddfd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 17 Nov 2025 13:07:00 +0000 Subject: [PATCH 36/73] chore(deps): update dependency @types/rollup-plugin-peer-deps-external to v2.2.6 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 22 +++++----------------- 1 file changed, 5 insertions(+), 17 deletions(-) diff --git a/yarn.lock b/yarn.lock index e705e887ce..fe2dd0f929 100644 --- a/yarn.lock +++ b/yarn.lock @@ -21686,11 +21686,11 @@ __metadata: linkType: hard "@types/rollup-plugin-peer-deps-external@npm:^2.2.0": - version: 2.2.5 - resolution: "@types/rollup-plugin-peer-deps-external@npm:2.2.5" - dependencies: - rollup: "npm:^0.63.4" - checksum: 10/3f0d130fc15c80eac737391e180e77597da1200ff1f6d28a44f785a0de7f29144df805ab5b020ba38b243af6959e9da0757efa4141c4e737cd04eebe50f59c07 + version: 2.2.6 + resolution: "@types/rollup-plugin-peer-deps-external@npm:2.2.6" + peerDependencies: + rollup: "*" + checksum: 10/9fcee30d60d9d8de0f4bbf7694c254a18798b0ff415563a60fb2ed8c6c46423c64e1a977e0344b8393c26221dbd6e74d9e872c2694b518fcf149ba85d94e7eac languageName: node linkType: hard @@ -44789,18 +44789,6 @@ __metadata: languageName: node linkType: hard -"rollup@npm:^0.63.4": - version: 0.63.5 - resolution: "rollup@npm:0.63.5" - dependencies: - "@types/estree": "npm:0.0.39" - "@types/node": "npm:*" - bin: - rollup: ./bin/rollup - checksum: 10/c52ad022bb732ea0e962b3ec45779d9d0523f75283bded8d0c97788f97946781d617b971e7e732ad7a63af60aad76ca534c415d8b101c7ff7d3f5cc879aba025 - languageName: node - linkType: hard - "rollup@npm:^4.27.3, rollup@npm:^4.43.0": version: 4.46.2 resolution: "rollup@npm:4.46.2" From 0cd34d869d23a0c3480056a16686021c95e7029f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 17 Nov 2025 13:07:42 +0000 Subject: [PATCH 37/73] chore(deps): update dependency html-react-parser to v5.2.10 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- docs-ui/yarn.lock | 46 +++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/docs-ui/yarn.lock b/docs-ui/yarn.lock index 04e1d4715f..e06c55baf5 100644 --- a/docs-ui/yarn.lock +++ b/docs-ui/yarn.lock @@ -3804,31 +3804,31 @@ __metadata: languageName: node linkType: hard -"html-dom-parser@npm:5.1.1": - version: 5.1.1 - resolution: "html-dom-parser@npm:5.1.1" +"html-dom-parser@npm:5.1.2": + version: 5.1.2 + resolution: "html-dom-parser@npm:5.1.2" dependencies: domhandler: "npm:5.0.3" htmlparser2: "npm:10.0.0" - checksum: 10/85bbaa8699d40d54fd64f5472088199178a6c3dd6a907358ac476d9c511cb8ab10bff1469a785411e8b831a73ac08348392e56076eab6d100a3ec19dccc722ad + checksum: 10/d54fcdafbc0b2881c441a396965ad285072d2e4df62bebe7074d7aaa2a1fffc95e9286bcb81d6f241c4cdb10a84435fa623738985b635574acb3c84e994e8bb6 languageName: node linkType: hard "html-react-parser@npm:^5.2.5": - version: 5.2.8 - resolution: "html-react-parser@npm:5.2.8" + version: 5.2.10 + resolution: "html-react-parser@npm:5.2.10" dependencies: domhandler: "npm:5.0.3" - html-dom-parser: "npm:5.1.1" + html-dom-parser: "npm:5.1.2" react-property: "npm:2.0.2" - style-to-js: "npm:1.1.19" + style-to-js: "npm:1.1.21" peerDependencies: "@types/react": 0.14 || 15 || 16 || 17 || 18 || 19 react: 0.14 || 15 || 16 || 17 || 18 || 19 peerDependenciesMeta: "@types/react": optional: true - checksum: 10/492d44f65c2a8647bb7d6db3865363739a00696687024b978f5f5e29475c40bd470c91e9ddefe0f1a846c85761f046e9a92fa3fe0e5581df43ac587787703b31 + checksum: 10/3b0debac58e4b39d853731fd117b323a5d9582482cdc0b6dc5179d0c469acf63e64b8fdb3b678e758673633c579b09fd21d75d256c32104c65355f4434ba7f59 languageName: node linkType: hard @@ -3935,10 +3935,10 @@ __metadata: languageName: node linkType: hard -"inline-style-parser@npm:0.2.6": - version: 0.2.6 - resolution: "inline-style-parser@npm:0.2.6" - checksum: 10/0be8356fcd766b7b170991293c9ad953f057ac9719960f51f4eb54af1a79c34638f591691f2ab43f57bef2e28e9c1239b8ae5f6b72bff2c652f828ccc621c08c +"inline-style-parser@npm:0.2.7": + version: 0.2.7 + resolution: "inline-style-parser@npm:0.2.7" + checksum: 10/cdfe719bd694b53bfbad20a645a9a4dda89c3ff56ee2b95945ad4eea86c541501f49f852d23bc2f73cd8127b6b62ea9027f697838e323a7f7d0d9b760e27a632 languageName: node linkType: hard @@ -6642,21 +6642,21 @@ __metadata: languageName: node linkType: hard -"style-to-js@npm:1.1.19, style-to-js@npm:^1.0.0": - version: 1.1.19 - resolution: "style-to-js@npm:1.1.19" +"style-to-js@npm:1.1.21, style-to-js@npm:^1.0.0": + version: 1.1.21 + resolution: "style-to-js@npm:1.1.21" dependencies: - style-to-object: "npm:1.0.12" - checksum: 10/c25f3a96368f258c90a886ec20b8a15ae035664e46eeea6c36f105fbc1e099ee81eaac355b7f5f948d8bb9d103c048a97b3d09e785c680ff2b4dd6d77cb76a95 + style-to-object: "npm:1.0.14" + checksum: 10/5e30b4c52ed4e0294324adab2a43a0438b5495a77a72a6b1258637eebfc4dc8e0614f5ac7bf38a2f514879b3b448215d01fecf1f8d7468b8b95d90bed1d05d57 languageName: node linkType: hard -"style-to-object@npm:1.0.12": - version: 1.0.12 - resolution: "style-to-object@npm:1.0.12" +"style-to-object@npm:1.0.14": + version: 1.0.14 + resolution: "style-to-object@npm:1.0.14" dependencies: - inline-style-parser: "npm:0.2.6" - checksum: 10/97b91c2056f4fedb573224accba080aaa96b48a7b120a007b83415c9b18b727d0d6588b9168a1b85da06dd1abacc328f6dd774e907721901e40503a2e7a78c89 + inline-style-parser: "npm:0.2.7" + checksum: 10/06b86a5cf435dafac908d19082842983f9052d8cf3682915b1bd9251e3fe9b8065dbd2aef060dc5dfa0fa2ee24d717b587a5205f571513a10f30e3947f9d28ff languageName: node linkType: hard From 4d744bb728335468d6345da6f9d7f679d1dc70a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Mon, 17 Nov 2025 14:56:43 +0100 Subject: [PATCH 38/73] Bump old space for tsc MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 5039c29e2b..31429c425a 100644 --- a/package.json +++ b/package.json @@ -65,8 +65,8 @@ "test": "NODE_OPTIONS='--no-node-snapshot --experimental-vm-modules' backstage-cli repo test", "test:all": "NODE_OPTIONS='--no-node-snapshot --experimental-vm-modules' backstage-cli repo test --coverage", "test:e2e": "NODE_OPTIONS=--no-node-snapshot playwright test", - "tsc": "tsc", - "tsc:full": "backstage-cli repo clean && tsc --skipLibCheck false --incremental false" + "tsc": "NODE_OPTIONS='--max-old-space-size=8192' tsc", + "tsc:full": "backstage-cli repo clean && NODE_OPTIONS='--max-old-space-size=8192' tsc --skipLibCheck false --incremental false" }, "lint-staged": { "*.{js,jsx,ts,tsx,mjs,cjs}": [ From 7e6da9ed1074df3388da403ca8d4ccd55710c0c2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 17 Nov 2025 14:06:15 +0000 Subject: [PATCH 39/73] chore(deps): update dependency ansi-regex to v6.2.2 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 72268afa47..39500f3643 100644 --- a/yarn.lock +++ b/yarn.lock @@ -24170,9 +24170,9 @@ __metadata: linkType: hard "ansi-regex@npm:*, ansi-regex@npm:^6.0.1": - version: 6.1.0 - resolution: "ansi-regex@npm:6.1.0" - checksum: 10/495834a53b0856c02acd40446f7130cb0f8284f4a39afdab20d5dc42b2e198b1196119fe887beed8f9055c4ff2055e3b2f6d4641d0be018cdfb64fedf6fc1aac + version: 6.2.2 + resolution: "ansi-regex@npm:6.2.2" + checksum: 10/9b17ce2c6daecc75bcd5966b9ad672c23b184dc3ed9bf3c98a0702f0d2f736c15c10d461913568f2cf527a5e64291c7473358885dd493305c84a1cfed66ba94f languageName: node linkType: hard From b67c44d9bb982fada8d2bbd4c1aeab160aa66063 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 17 Nov 2025 14:06:49 +0000 Subject: [PATCH 40/73] chore(deps): update dependency better-sqlite3 to v12.4.1 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 72268afa47..3b6f58c8f4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -25217,13 +25217,13 @@ __metadata: linkType: hard "better-sqlite3@npm:^12.0.0": - version: 12.2.0 - resolution: "better-sqlite3@npm:12.2.0" + version: 12.4.1 + resolution: "better-sqlite3@npm:12.4.1" dependencies: bindings: "npm:^1.5.0" node-gyp: "npm:latest" prebuild-install: "npm:^7.1.1" - checksum: 10/2662e321237624d5813a7b97528dfc11fc5110b068d57f4096de82d7136e7e4a4b722a2a4266ddfb5095070712fd3d2542f6212ccb68e2d3eb2042498269e1cf + checksum: 10/e8133786677e88a2526c965658178e2e057e4b40ff554895a71ecb5e617e062fea619f31389ffbd6fc1f3396ef598812302be56c32e0f01fcb82610785d18186 languageName: node linkType: hard From f8bb503ff7e2f541732913858aa3b1364c01b762 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 17 Nov 2025 15:07:35 +0000 Subject: [PATCH 41/73] chore(deps): update dependency compression to v1.8.1 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/yarn.lock b/yarn.lock index 70b9f31120..ae2acc5612 100644 --- a/yarn.lock +++ b/yarn.lock @@ -20457,11 +20457,12 @@ __metadata: linkType: hard "@types/compression@npm:^1.7.5": - version: 1.7.5 - resolution: "@types/compression@npm:1.7.5" + version: 1.8.1 + resolution: "@types/compression@npm:1.8.1" dependencies: "@types/express": "npm:*" - checksum: 10/9d65485bfb8e20035dedbbbebea06ea0c0554ac7bedb11ec3f2c6582cb082d121a10a03b4803b56315ae31705043eddf97eaf49c3dad6f9e39f7875b27c8feb4 + "@types/node": "npm:*" + checksum: 10/cd746c830a5c981568d36989c3c43a55caf1872b54e3f9891b82fba04501de11882091df3ece11fbede2de01179c99d08639a08831e06c3966873f928407c01a languageName: node linkType: hard @@ -26877,17 +26878,17 @@ __metadata: linkType: hard "compression@npm:^1.7.4": - version: 1.7.5 - resolution: "compression@npm:1.7.5" + version: 1.8.1 + resolution: "compression@npm:1.8.1" dependencies: bytes: "npm:3.1.2" compressible: "npm:~2.0.18" debug: "npm:2.6.9" negotiator: "npm:~0.6.4" - on-headers: "npm:~1.0.2" + on-headers: "npm:~1.1.0" safe-buffer: "npm:5.2.1" vary: "npm:~1.1.2" - checksum: 10/c69cf6da151db6f9db2e242b6a0039ad41975ee886c385cff2920c5f8f7050678e0ee9a021437af033536c451791de529de376851b8d31fee42ca2d6adca03f0 + checksum: 10/e7552bfbd780f2003c6fe8decb44561f5cc6bc82f0c61e81122caff5ec656f37824084f52155b1e8ef31d7656cecbec9a2499b7a68e92e20780ffb39b479abb7 languageName: node linkType: hard @@ -40240,13 +40241,6 @@ __metadata: languageName: node linkType: hard -"on-headers@npm:~1.0.2": - version: 1.0.2 - resolution: "on-headers@npm:1.0.2" - checksum: 10/870766c16345855e2012e9422ba1ab110c7e44ad5891a67790f84610bd70a72b67fdd71baf497295f1d1bf38dd4c92248f825d48729c53c0eae5262fb69fa171 - languageName: node - linkType: hard - "on-headers@npm:~1.1.0": version: 1.1.0 resolution: "on-headers@npm:1.1.0" From 06dd620938f2fc43a0ebbf97b3c827cdf67fd213 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 17 Nov 2025 15:08:07 +0000 Subject: [PATCH 42/73] chore(deps): update dependency core-js to v3.46.0 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 70b9f31120..086f68010b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -27217,9 +27217,9 @@ __metadata: linkType: hard "core-js@npm:^3.6.5": - version: 3.39.0 - resolution: "core-js@npm:3.39.0" - checksum: 10/a3d34e669783dfc878e545f1983f60d9ff48a3867cd1d7ff8839b849e053002a208c7c14a5ca354b8e0b54982901e2f83dc87c3d9b95de0a94b4071d1c74e5f6 + version: 3.46.0 + resolution: "core-js@npm:3.46.0" + checksum: 10/82993ca487c6cbbf8bbf00e45eeb9705eb63dc2f9c90d7f35696733efbc3f4b52426e1f8dbef0f0b68ea16caa21e4f44cc5490e08120e1cad4a72b031ed8adaa languageName: node linkType: hard From dba1ddaa7eb1a405c8bd69da3a2a861b124af37b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 17 Nov 2025 16:03:27 +0000 Subject: [PATCH 43/73] chore(deps): update dependency @base-ui-components/react to v1.0.0-beta.5 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- docs-ui/yarn.lock | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/docs-ui/yarn.lock b/docs-ui/yarn.lock index e06c55baf5..7ebaeaf001 100644 --- a/docs-ui/yarn.lock +++ b/docs-ui/yarn.lock @@ -31,16 +31,16 @@ __metadata: linkType: hard "@base-ui-components/react@npm:^1.0.0-beta.4": - version: 1.0.0-beta.4 - resolution: "@base-ui-components/react@npm:1.0.0-beta.4" + version: 1.0.0-beta.5 + resolution: "@base-ui-components/react@npm:1.0.0-beta.5" dependencies: "@babel/runtime": "npm:^7.28.4" - "@base-ui-components/utils": "npm:0.1.2" + "@base-ui-components/utils": "npm:0.2.0" "@floating-ui/react-dom": "npm:^2.1.6" "@floating-ui/utils": "npm:^0.2.10" reselect: "npm:^5.1.1" - tabbable: "npm:^6.2.0" - use-sync-external-store: "npm:^1.5.0" + tabbable: "npm:^6.3.0" + use-sync-external-store: "npm:^1.6.0" peerDependencies: "@types/react": ^17 || ^18 || ^19 react: ^17 || ^18 || ^19 @@ -48,18 +48,18 @@ __metadata: peerDependenciesMeta: "@types/react": optional: true - checksum: 10/d2c6a779aaefa3454cc130244e839f0428460997f3ca8bbcd9636056bc5a4c77436cc0ceac064f34bdc7cb01489a4cbc4d8b0bf9668a023fa754e5a24bd3af4e + checksum: 10/db53c9fc05301263419ac0f3c7f655aa67262a434b7f752e3af879430e75aa5d0d808ecf8c40d38b70fb699df8028b68baa11a9608e3153bcc4a5c57d6fab1f1 languageName: node linkType: hard -"@base-ui-components/utils@npm:0.1.2": - version: 0.1.2 - resolution: "@base-ui-components/utils@npm:0.1.2" +"@base-ui-components/utils@npm:0.2.0": + version: 0.2.0 + resolution: "@base-ui-components/utils@npm:0.2.0" dependencies: "@babel/runtime": "npm:^7.28.4" "@floating-ui/utils": "npm:^0.2.10" reselect: "npm:^5.1.1" - use-sync-external-store: "npm:^1.5.0" + use-sync-external-store: "npm:^1.6.0" peerDependencies: "@types/react": ^17 || ^18 || ^19 react: ^17 || ^18 || ^19 @@ -67,7 +67,7 @@ __metadata: peerDependenciesMeta: "@types/react": optional: true - checksum: 10/b8408f5ad55886f793fb7580ffe2bb9565ff0713bec324f726b88ee1d135d75b26a1312338b19af743adf52e5b9d46892a47fb225e6abfe1077e75d32e88fb6e + checksum: 10/b5eae460e3f45fdb2c5116c94612c5b0c00190d4f0763836ba121e36e5c46c1caad862f4aa05827d90a8ebe924c29e42a7561c124de23ce3dc565dba2a6dff98 languageName: node linkType: hard @@ -6692,7 +6692,7 @@ __metadata: languageName: node linkType: hard -"tabbable@npm:^6.2.0": +"tabbable@npm:^6.3.0": version: 6.3.0 resolution: "tabbable@npm:6.3.0" checksum: 10/3e54a0b770d26bc20c3de5837652be19f5efa8bfa869f580af24bcf60de934506e9401a577213186b5e86ebcf6b5290a5429d354cc3041471815f5095e44e51a @@ -7087,7 +7087,7 @@ __metadata: languageName: node linkType: hard -"use-sync-external-store@npm:^1.5.0": +"use-sync-external-store@npm:^1.6.0": version: 1.6.0 resolution: "use-sync-external-store@npm:1.6.0" peerDependencies: From 5e3c84ded08510d0d870cdcceab26eccd47fd301 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 17 Nov 2025 16:07:29 +0000 Subject: [PATCH 44/73] chore(deps): update dependency cron to v3.5.0 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index b38a30f720..ebd5079f62 100644 --- a/yarn.lock +++ b/yarn.lock @@ -27423,12 +27423,12 @@ __metadata: linkType: hard "cron@npm:^3.0.0": - version: 3.3.2 - resolution: "cron@npm:3.3.2" + version: 3.5.0 + resolution: "cron@npm:3.5.0" dependencies: "@types/luxon": "npm:~3.4.0" luxon: "npm:~3.5.0" - checksum: 10/6be3309a2c56c75a90862987649e45d6ae17b45ef7949cc1ef3b5559665193efde2880c2729bf84ff4c9dc64a6e210d525e1e4f0a7ece4abe3acb9de2726386a + checksum: 10/0e667d87c9acc162db835439bff2664483f1fcbd471ae30a26c7426c736fa1798d27067cc4d0294d8a27890a1bc6c9deeefe47811cc339f11a8ba8288f51886d languageName: node linkType: hard From f9ee183de20e79b3d0d13ef7ecb0444a8f737209 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 17 Nov 2025 17:11:50 +0000 Subject: [PATCH 45/73] chore(deps): update dependency cronstrue to v2.59.0 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index ebd5079f62..df690c38b2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -27433,11 +27433,11 @@ __metadata: linkType: hard "cronstrue@npm:^2.32.0": - version: 2.52.0 - resolution: "cronstrue@npm:2.52.0" + version: 2.59.0 + resolution: "cronstrue@npm:2.59.0" bin: cronstrue: bin/cli.js - checksum: 10/123725180e7bd6e77a1fbe6205cd6c3d55f45edd7bf4ddeabee85a277e905d55bbde73efc98369c8011db198a65f5d629f6709e5d968e5e46eba87ede1a1ba65 + checksum: 10/daa7a1ea7e4a40cdb533df754489142358ecdc23462ec57309fec61e539b84ae886d3ac4666a6133403f1b13a98834ca107a09f5f78d31e6cfac8625dd3422c3 languageName: node linkType: hard From 5373bd87a183c9962bd19440c00e6012695bd87b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 17 Nov 2025 18:09:41 +0000 Subject: [PATCH 46/73] chore(deps): update dependency cross-fetch to v4.1.0 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/yarn.lock b/yarn.lock index df690c38b2..95c48ccf87 100644 --- a/yarn.lock +++ b/yarn.lock @@ -27454,20 +27454,20 @@ __metadata: linkType: hard "cross-fetch@npm:^3.1.5": - version: 3.1.8 - resolution: "cross-fetch@npm:3.1.8" + version: 3.2.0 + resolution: "cross-fetch@npm:3.2.0" dependencies: - node-fetch: "npm:^2.6.12" - checksum: 10/ac8c4ca87d2ac0e17a19b6a293a67ee8934881aee5ec9a5a8323c30e9a9a60a0f5291d3c0d633ec2a2f970cbc60978d628804dfaf03add92d7e720b6d37f392c + node-fetch: "npm:^2.7.0" + checksum: 10/e4ab1d390a5b6ca8bb0605f028af2ffc1127d2e407b954654949f506d04873c4863ece264662c074865d7874060e35f938cec74fe7b5736d46d545e2685f6aec languageName: node linkType: hard "cross-fetch@npm:^4.0.0": - version: 4.0.0 - resolution: "cross-fetch@npm:4.0.0" + version: 4.1.0 + resolution: "cross-fetch@npm:4.1.0" dependencies: - node-fetch: "npm:^2.6.12" - checksum: 10/e231a71926644ef122d334a3a4e73d9ba3ba4b480a8a277fb9badc434c1ba905b3d60c8034e18b348361a09afbec40ba9371036801ba2b675a7b84588f9f55d8 + node-fetch: "npm:^2.7.0" + checksum: 10/07624940607b64777d27ec9c668ddb6649e8c59ee0a5a10e63a51ce857e2bbb1294a45854a31c10eccb91b65909a5b199fcb0217339b44156f85900a7384f489 languageName: node linkType: hard @@ -39477,7 +39477,7 @@ __metadata: languageName: node linkType: hard -"node-fetch@npm:^2.6.0, node-fetch@npm:^2.6.1, node-fetch@npm:^2.6.12, node-fetch@npm:^2.6.7, node-fetch@npm:^2.6.9, node-fetch@npm:^2.7.0": +"node-fetch@npm:^2.6.0, node-fetch@npm:^2.6.1, node-fetch@npm:^2.6.7, node-fetch@npm:^2.6.9, node-fetch@npm:^2.7.0": version: 2.7.0 resolution: "node-fetch@npm:2.7.0" dependencies: From 2c792eeceedfc723efdb0e9523094d28eb4824b5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 17 Nov 2025 18:10:12 +0000 Subject: [PATCH 47/73] chore(deps): update dependency ctrlc-windows to v2.2.0 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index df690c38b2..4c724b3ed2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -27816,9 +27816,9 @@ __metadata: linkType: hard "ctrlc-windows@npm:^2.1.0": - version: 2.1.0 - resolution: "ctrlc-windows@npm:2.1.0" - checksum: 10/518015cf2ac9a12bc327d4eb68f5d5c9d17b7ee369b80d8bc94473a08343587f7a39cf32074bd9b4d4e4b441fad6399475cf353e1470eb443e4d230b80fa9c5f + version: 2.2.0 + resolution: "ctrlc-windows@npm:2.2.0" + checksum: 10/3d044eda5aa8c58d35e34b05249f9330e7258bec88999e50f25fd21807c2bedabbcab28e10a24e60c15748267ef0ebf9a915d4e430f484d5ce2ec5c75663c352 languageName: node linkType: hard From fa255f530a00a4f1e4216d274c86a53960459b1d Mon Sep 17 00:00:00 2001 From: Andre Wanlin Date: Mon, 17 Nov 2025 12:49:43 -0600 Subject: [PATCH 48/73] Bitbucket Cloud - API Token Support Signed-off-by: Andre Wanlin --- .changeset/every-breads-act.md | 18 +++ app-config.yaml | 2 +- docs/integrations/bitbucketCloud/locations.md | 18 ++- .../urlReader/lib/BitbucketCloudUrlReader.ts | 12 +- packages/integration/config.d.ts | 10 +- .../src/bitbucketCloud/config.test.ts | 141 +++++++++++++----- .../integration/src/bitbucketCloud/config.ts | 14 +- .../src/bitbucketCloud/core.test.ts | 32 ++-- .../integration/src/bitbucketCloud/core.ts | 16 +- .../src/BitbucketCloudClient.ts | 11 +- .../src/actions/helpers.ts | 27 ++-- .../src/actions/bitbucket.ts | 6 +- 12 files changed, 223 insertions(+), 84 deletions(-) create mode 100644 .changeset/every-breads-act.md diff --git a/.changeset/every-breads-act.md b/.changeset/every-breads-act.md new file mode 100644 index 0000000000..851dd13940 --- /dev/null +++ b/.changeset/every-breads-act.md @@ -0,0 +1,18 @@ +--- +'@backstage/plugin-scaffolder-backend-module-bitbucket-cloud': patch +'@backstage/plugin-scaffolder-backend-module-bitbucket': patch +'@backstage/plugin-bitbucket-cloud-common': patch +'@backstage/backend-defaults': patch +'@backstage/integration': patch +--- + +Support for Bitbucket Cloud's API token was added as `appPassword` is deprecated (no new creation from September 9, 2025) and will be removed on June 9, 2026. + +API token usage example: + +```yaml +integrations: + bitbucketCloud: + - username: user@domain.com + token: my-token +``` diff --git a/app-config.yaml b/app-config.yaml index b45255d26c..1489a39105 100644 --- a/app-config.yaml +++ b/app-config.yaml @@ -110,7 +110,7 @@ integrations: ### Example for how to add a bitbucket cloud integration # bitbucketCloud: # - username: ${BITBUCKET_USERNAME} - # appPassword: ${BITBUCKET_APP_PASSWORD} + # token: ${BITBUCKET_API_TOKEN} ### Example for how to add your bitbucket server instance using the API: # - host: server.bitbucket.com # apiBaseUrl: server.bitbucket.com diff --git a/docs/integrations/bitbucketCloud/locations.md b/docs/integrations/bitbucketCloud/locations.md index f0a032353c..6b735171a4 100644 --- a/docs/integrations/bitbucketCloud/locations.md +++ b/docs/integrations/bitbucketCloud/locations.md @@ -14,11 +14,22 @@ plugin. ## Configuration +API token usage example (recommended): + ```yaml integrations: bitbucketCloud: - - username: ${BITBUCKET_CLOUD_USERNAME} - appPassword: ${BITBUCKET_CLOUD_PASSWORD} + - username: user@domain.com # username -> user email + token: my-token +``` + +Legacy: + +```yaml +integrations: + bitbucketCloud: + - username: username + appPassword: my-password ``` :::note Note @@ -30,7 +41,7 @@ convenience, so you only need to list it if you want to supply credentials. :::note Note -The credential used for this is type [App Password](https://support.atlassian.com/bitbucket-cloud/docs/app-passwords/). An Atlassian Account API key will not work. +The credential required for this type is either an [Api token](https://support.atlassian.com/bitbucket-cloud/docs/using-api-tokens/) or an [App Password](https://support.atlassian.com/bitbucket-cloud/docs/app-passwords/). An Atlassian Account API key will not work. ::: @@ -42,4 +53,5 @@ This one entry will have the following elements: - `username`: The Bitbucket Cloud username to use in API requests. If neither a username nor token are supplied, anonymous access will be used. +- `token`: The token used to authenticate requests. - `appPassword`: The app password for the Bitbucket Cloud user. diff --git a/packages/backend-defaults/src/entrypoints/urlReader/lib/BitbucketCloudUrlReader.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/BitbucketCloudUrlReader.ts index 3a228f1e9c..f078b5c71e 100644 --- a/packages/backend-defaults/src/entrypoints/urlReader/lib/BitbucketCloudUrlReader.ts +++ b/packages/backend-defaults/src/entrypoints/urlReader/lib/BitbucketCloudUrlReader.ts @@ -68,11 +68,11 @@ export class BitbucketCloudUrlReader implements UrlReaderService { ) { this.integration = integration; this.deps = deps; - const { host, username, appPassword } = integration.config; + const { host, username, appPassword, token } = integration.config; - if (username && !appPassword) { + if (username && (!token || !appPassword)) { throw new Error( - `Bitbucket Cloud integration for '${host}' has configured a username but is missing a required appPassword.`, + `Bitbucket Cloud integration for '${host}' has configured a username but is missing a required token or appPassword.`, ); } } @@ -228,8 +228,10 @@ export class BitbucketCloudUrlReader implements UrlReaderService { } toString() { - const { host, username, appPassword } = this.integration.config; - const authed = Boolean(username && appPassword); + // TODO: appPassword can be removed once fully + // deprecated by BitBucket on 9th June 2026. + const { host, username, appPassword, token } = this.integration.config; + const authed = Boolean(username && (token ?? appPassword)); return `bitbucketCloud{host=${host},authed=${authed}}`; } diff --git a/packages/integration/config.d.ts b/packages/integration/config.d.ts index 298d765697..a601d63472 100644 --- a/packages/integration/config.d.ts +++ b/packages/integration/config.d.ts @@ -176,10 +176,16 @@ export interface Config { */ username: string; /** - * Bitbucket Cloud app password used to authenticate requests. + * Token used to authenticate requests. * @visibility secret */ - appPassword: string; + token?: string; + /** + * Bitbucket Cloud app password used to authenticate requests. + * @visibility secret + * @deprecated Use `token` instead. + */ + appPassword?: string; /** * PGP signing key for signing commits. * @visibility secret diff --git a/packages/integration/src/bitbucketCloud/config.test.ts b/packages/integration/src/bitbucketCloud/config.test.ts index 2c68059196..28322909a6 100644 --- a/packages/integration/src/bitbucketCloud/config.test.ts +++ b/packages/integration/src/bitbucketCloud/config.test.ts @@ -22,54 +22,58 @@ import { readBitbucketCloudIntegrationConfigs, } from './config'; +// Mock constants +const BITBUCKET_CLOUD_HOST = 'bitbucket.org'; +const BITBUCKET_CLOUD_API_BASE_URL = 'https://api.bitbucket.org/2.0'; + +async function buildFrontendConfig( + data: Partial, +): Promise { + const fullSchema = await loadConfigSchema({ + dependencies: ['@backstage/integration'], + }); + const serializedSchema = fullSchema.serialize() as { + schemas: { value: { properties?: { integrations?: object } } }[]; + }; + const schema = await loadConfigSchema({ + serialized: { + ...serializedSchema, // only include schemas that apply to integrations + schemas: serializedSchema.schemas.filter( + s => s.value?.properties?.integrations, + ), + }, + }); + const processed = schema.process( + [{ data: { integrations: { bitbucketCloud: [data] } }, context: 'app' }], + { visibility: ['frontend'] }, + ); + return new ConfigReader(processed[0].data as any); +} + describe('readBitbucketCloudIntegrationConfig', () => { function buildConfig(data: Partial): Config { return new ConfigReader(data); } - async function buildFrontendConfig( - data: Partial, - ): Promise { - const fullSchema = await loadConfigSchema({ - dependencies: ['@backstage/integration'], - }); - const serializedSchema = fullSchema.serialize() as { - schemas: { value: { properties?: { integrations?: object } } }[]; - }; - const schema = await loadConfigSchema({ - serialized: { - ...serializedSchema, // only include schemas that apply to integrations - schemas: serializedSchema.schemas.filter( - s => s.value?.properties?.integrations, - ), - }, - }); - const processed = schema.process( - [{ data: { integrations: { bitbucketCloud: [data] } }, context: 'app' }], - { visibility: ['frontend'] }, - ); - return new ConfigReader(processed[0].data as any); - } - it('reads all values', () => { const output = readBitbucketCloudIntegrationConfig( buildConfig({ username: 'u', - appPassword: '\n\n\np', + token: 't', }), ); expect(output).toEqual({ - apiBaseUrl: 'https://api.bitbucket.org/2.0', - appPassword: 'p', - host: 'bitbucket.org', + host: BITBUCKET_CLOUD_HOST, + apiBaseUrl: BITBUCKET_CLOUD_API_BASE_URL, username: 'u', + token: 't', }); }); it('rejects funky configs', () => { const valid: any = { username: 'u', - appPassword: 'p', + token: 't', }; expect(() => readBitbucketCloudIntegrationConfig( @@ -77,15 +81,13 @@ describe('readBitbucketCloudIntegrationConfig', () => { ), ).toThrow(/username/); expect(() => - readBitbucketCloudIntegrationConfig( - buildConfig({ ...valid, appPassword: 7 }), - ), - ).toThrow(/appPassword/); + readBitbucketCloudIntegrationConfig(buildConfig({ ...valid, token: 7 })), + ).toThrow(/token/); }); it('credentials hidden on the frontend', async () => { const frontendConfig = await buildFrontendConfig({ - appPassword: 'p', + token: 't', username: 'u', }); expect( @@ -95,11 +97,74 @@ describe('readBitbucketCloudIntegrationConfig', () => { ), ).toEqual([ { - apiBaseUrl: 'https://api.bitbucket.org/2.0', - host: 'bitbucket.org', + host: BITBUCKET_CLOUD_HOST, + apiBaseUrl: BITBUCKET_CLOUD_API_BASE_URL, }, ]); }); + + // TODO: appPassword can be removed once fully + // deprecated by BitBucket on 9th June 2026. + describe('handles deprecated appPassword', () => { + it('reads all values', () => { + const output = readBitbucketCloudIntegrationConfig( + buildConfig({ + appPassword: '\n\np', + username: 'u', + }), + ); + expect(output).toEqual({ + host: BITBUCKET_CLOUD_HOST, + apiBaseUrl: BITBUCKET_CLOUD_API_BASE_URL, + appPassword: 'p', + username: 'u', + }); + }); + + it('rejects funky configs', () => { + const valid: any = { + appPassword: 'p', + username: 'u', + }; + expect(() => + readBitbucketCloudIntegrationConfig( + buildConfig({ ...valid, appPassword: 7 }), + ), + ).toThrow(/appPassword/); + }); + + it('rejects if misconfigured', () => { + const valid: any = { + appPassword: 'p', + token: 't', + username: 'u', + }; + expect(() => + readBitbucketCloudIntegrationConfig( + buildConfig({ ...valid, appPassword: undefined, token: undefined }), + ), + ).toThrow(/must configure either a token or appPassword/); + }); + + it('credentials hidden on the frontend', async () => { + const frontendConfig = await buildFrontendConfig({ + appPassword: 'p', + username: 'u', + }); + expect( + readBitbucketCloudIntegrationConfigs( + frontendConfig.getOptionalConfigArray( + 'integrations.bitbucketCloud', + ) ?? [], + ), + ).toEqual([ + { + host: BITBUCKET_CLOUD_HOST, + apiBaseUrl: BITBUCKET_CLOUD_API_BASE_URL, + }, + ]); + }); + }); }); describe('readBitbucketCloudIntegrationConfigs', () => { @@ -114,15 +179,15 @@ describe('readBitbucketCloudIntegrationConfigs', () => { buildConfig([ { username: 'u', - appPassword: 'p', + token: 't', }, ]), ); expect(output).toContainEqual({ apiBaseUrl: 'https://api.bitbucket.org/2.0', - appPassword: 'p', host: 'bitbucket.org', username: 'u', + token: 't', }); }); diff --git a/packages/integration/src/bitbucketCloud/config.ts b/packages/integration/src/bitbucketCloud/config.ts index eb4b5c4904..b45a6ebb05 100644 --- a/packages/integration/src/bitbucketCloud/config.ts +++ b/packages/integration/src/bitbucketCloud/config.ts @@ -49,6 +49,8 @@ export type BitbucketCloudIntegrationConfig = { /** * The access token to use for requests to Bitbucket Cloud (bitbucket.org). + * + * See https://support.atlassian.com/bitbucket-cloud/docs/api-tokens/ */ token?: string; @@ -70,13 +72,23 @@ export function readBitbucketCloudIntegrationConfig( // If config is provided, we assume authenticated access is desired // (as the anonymous one is provided by default). const username = config.getString('username'); - const appPassword = config.getString('appPassword')?.trim(); + // TODO: appPassword can be removed once fully + // deprecated by BitBucket on 9th June 2026. + const appPassword = config.getOptionalString('appPassword')?.trim(); + const token = config.getOptionalString('token'); + + if (!token || !appPassword) { + throw new Error( + `Bitbucket Cloud integration must be configured with as username and either a token or an appPassword.`, + ); + } return { host, apiBaseUrl, username, appPassword, + token, commitSigningKey: config.getOptionalString('commitSigningKey'), }; } diff --git a/packages/integration/src/bitbucketCloud/core.test.ts b/packages/integration/src/bitbucketCloud/core.test.ts index 56a53b924d..fa8fc2ae43 100644 --- a/packages/integration/src/bitbucketCloud/core.test.ts +++ b/packages/integration/src/bitbucketCloud/core.test.ts @@ -25,22 +25,38 @@ import { getBitbucketCloudRequestOptions, } from './core'; +// Mock constants +const BITBUCKET_CLOUD_HOST = 'bitbucket.org'; +const BITBUCKET_CLOUD_API_BASE_URL = 'https://api.bitbucket.org/2.0'; + describe('bitbucketCloud core', () => { const worker = setupServer(); registerMswTestHooks(worker); describe('getBitbucketCloudRequestOptions', () => { it('insert basic auth when needed', () => { + const withUsernameAndToken: BitbucketCloudIntegrationConfig = { + host: BITBUCKET_CLOUD_HOST, + apiBaseUrl: BITBUCKET_CLOUD_API_BASE_URL, + username: 'some-user@domain.com', + token: 'my-token', + }; + // TODO: appPassword can be removed once fully + // deprecated by BitBucket on 9th June 2026. const withUsernameAndPassword: BitbucketCloudIntegrationConfig = { - host: 'bitbucket.org', - apiBaseUrl: 'https://api.bitbucket.org/2.0', + host: BITBUCKET_CLOUD_HOST, + apiBaseUrl: BITBUCKET_CLOUD_API_BASE_URL, username: 'some-user', appPassword: 'my-secret', }; - const withoutUsernameAndPassword: BitbucketCloudIntegrationConfig = { - host: 'bitbucket.org', - apiBaseUrl: 'https://api.bitbucket.org/2.0', + const withoutUsername: BitbucketCloudIntegrationConfig = { + host: BITBUCKET_CLOUD_HOST, + apiBaseUrl: BITBUCKET_CLOUD_API_BASE_URL, }; + expect( + (getBitbucketCloudRequestOptions(withUsernameAndToken).headers as any) + .Authorization, + ).toEqual('Basic c29tZS11c2VyQGRvbWFpbi5jb206bXktdG9rZW4='); expect( ( getBitbucketCloudRequestOptions(withUsernameAndPassword) @@ -48,10 +64,8 @@ describe('bitbucketCloud core', () => { ).Authorization, ).toEqual('Basic c29tZS11c2VyOm15LXNlY3JldA=='); expect( - ( - getBitbucketCloudRequestOptions(withoutUsernameAndPassword) - .headers as any - ).Authorization, + (getBitbucketCloudRequestOptions(withoutUsername).headers as any) + .Authorization, ).toBeUndefined(); }); }); diff --git a/packages/integration/src/bitbucketCloud/core.ts b/packages/integration/src/bitbucketCloud/core.ts index 37feb5dad6..a97de872de 100644 --- a/packages/integration/src/bitbucketCloud/core.ts +++ b/packages/integration/src/bitbucketCloud/core.ts @@ -117,24 +117,28 @@ export function getBitbucketCloudFileFetchUrl( /** * Gets the request options necessary to make requests to a given provider. + * Returns headers for authenticating with Bitbucket Cloud. + * Supports both username/token and username/appPassword auth. * * @param config - The relevant provider config * @public */ export function getBitbucketCloudRequestOptions( config: BitbucketCloudIntegrationConfig, -): { headers: Record } { +): { + headers: Record; +} { const headers: Record = {}; - if (config.username && config.appPassword) { + // TODO: appPassword can be removed once fully + // deprecated by BitBucket on 9th June 2026. + if (config.username && (config.token ?? config.appPassword)) { const buffer = Buffer.from( - `${config.username}:${config.appPassword}`, + `${config.username}:${config.token ?? config.appPassword}`, 'utf8', ); headers.Authorization = `Basic ${buffer.toString('base64')}`; } - return { - headers, - }; + return { headers }; } diff --git a/plugins/bitbucket-cloud-common/src/BitbucketCloudClient.ts b/plugins/bitbucket-cloud-common/src/BitbucketCloudClient.ts index d1d4a35561..adbf08cf40 100644 --- a/plugins/bitbucket-cloud-common/src/BitbucketCloudClient.ts +++ b/plugins/bitbucket-cloud-common/src/BitbucketCloudClient.ts @@ -155,14 +155,17 @@ export class BitbucketCloudClient { private getAuthHeaders(): Record { const headers: Record = {}; - if (this.config.username) { + if ( + this.config.username && + (this.config.token ?? this.config.appPassword) + ) { const buffer = Buffer.from( - `${this.config.username}:${this.config.appPassword}`, + `${this.config.username}:${ + this.config.token ?? this.config.appPassword + }`, 'utf8', ); headers.Authorization = `Basic ${buffer.toString('base64')}`; - } else if (this.config.token) { - headers.Authorization = `Bearer ${this.config.token}`; } return headers; diff --git a/plugins/scaffolder-backend-module-bitbucket-cloud/src/actions/helpers.ts b/plugins/scaffolder-backend-module-bitbucket-cloud/src/actions/helpers.ts index 1abffea393..da70d9252a 100644 --- a/plugins/scaffolder-backend-module-bitbucket-cloud/src/actions/helpers.ts +++ b/plugins/scaffolder-backend-module-bitbucket-cloud/src/actions/helpers.ts @@ -21,22 +21,24 @@ export const getBitbucketClient = (config: { username?: string; appPassword?: string; }) => { - if (config.username && config.appPassword) { + if (config.token) { + return new Bitbucket({ + auth: { + token: config.token, + }, + }); + } else if (config.username && config.appPassword) { + // TODO: appPassword can be removed once fully + // deprecated by BitBucket on 9th June 2026. return new Bitbucket({ auth: { username: config.username, password: config.appPassword, }, }); - } else if (config.token) { - return new Bitbucket({ - auth: { - token: config.token, - }, - }); } throw new Error( - `Authorization has not been provided for Bitbucket Cloud. Please add either username + appPassword to the Integrations config or a user login auth token`, + `Authorization has not been provided for Bitbucket Cloud. Please add either provide a username and token or username and appPassword to the Integrations config`, ); }; @@ -45,12 +47,13 @@ export const getAuthorizationHeader = (config: { appPassword?: string; token?: string; }) => { - if (config.username && config.appPassword) { + // TODO: appPassword can be removed once fully + // deprecated by BitBucket on 9th June 2026. + if (config.username && (config.token ?? config.appPassword)) { const buffer = Buffer.from( - `${config.username}:${config.appPassword}`, + `${config.username}:${config.token ?? config.appPassword}`, 'utf8', ); - return `Basic ${buffer.toString('base64')}`; } @@ -59,6 +62,6 @@ export const getAuthorizationHeader = (config: { } throw new Error( - `Authorization has not been provided for Bitbucket Cloud. Please add either username + appPassword to the Integrations config or a user login auth token`, + `Authorization has not been provided for Bitbucket Cloud. Please add either provide a username and token or username and appPassword to the Integrations config`, ); }; diff --git a/plugins/scaffolder-backend-module-bitbucket/src/actions/bitbucket.ts b/plugins/scaffolder-backend-module-bitbucket/src/actions/bitbucket.ts index f25bc0a7f1..113e642ee8 100644 --- a/plugins/scaffolder-backend-module-bitbucket/src/actions/bitbucket.ts +++ b/plugins/scaffolder-backend-module-bitbucket/src/actions/bitbucket.ts @@ -153,9 +153,9 @@ const createBitbucketServerRepository = async (opts: { }; const getAuthorizationHeader = (config: BitbucketIntegrationConfig) => { - if (config.username && config.appPassword) { + if (config.username && (config.token ?? config.appPassword)) { const buffer = Buffer.from( - `${config.username}:${config.appPassword}`, + `${config.username}:${config.token ?? config.appPassword}`, 'utf8', ); @@ -167,7 +167,7 @@ const getAuthorizationHeader = (config: BitbucketIntegrationConfig) => { } throw new Error( - `Authorization has not been provided for Bitbucket. Please add either username + appPassword or token to the Integrations config`, + `Authorization has not been provided for Bitbucket. Please add either provide a username and token or username and appPassword to the Integrations config`, ); }; From 9246b57e863b70ef8ed11b7e87d14616df44812e Mon Sep 17 00:00:00 2001 From: Andre Wanlin Date: Mon, 17 Nov 2025 14:31:48 -0600 Subject: [PATCH 49/73] Fixed config logic Signed-off-by: Andre Wanlin --- packages/integration/src/bitbucketCloud/config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/integration/src/bitbucketCloud/config.ts b/packages/integration/src/bitbucketCloud/config.ts index b45a6ebb05..0e08e95a79 100644 --- a/packages/integration/src/bitbucketCloud/config.ts +++ b/packages/integration/src/bitbucketCloud/config.ts @@ -77,7 +77,7 @@ export function readBitbucketCloudIntegrationConfig( const appPassword = config.getOptionalString('appPassword')?.trim(); const token = config.getOptionalString('token'); - if (!token || !appPassword) { + if (!token && !appPassword) { throw new Error( `Bitbucket Cloud integration must be configured with as username and either a token or an appPassword.`, ); From 70d394f3070b6f45dec4edd6f988d523f64ce806 Mon Sep 17 00:00:00 2001 From: Andre Wanlin Date: Mon, 17 Nov 2025 15:52:29 -0600 Subject: [PATCH 50/73] Fixed more tests Signed-off-by: Andre Wanlin --- .../src/entrypoints/urlReader/lib/BitbucketCloudUrlReader.ts | 2 +- packages/integration/src/bitbucketCloud/config.test.ts | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/backend-defaults/src/entrypoints/urlReader/lib/BitbucketCloudUrlReader.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/BitbucketCloudUrlReader.ts index f078b5c71e..ff6ec3bb27 100644 --- a/packages/backend-defaults/src/entrypoints/urlReader/lib/BitbucketCloudUrlReader.ts +++ b/packages/backend-defaults/src/entrypoints/urlReader/lib/BitbucketCloudUrlReader.ts @@ -70,7 +70,7 @@ export class BitbucketCloudUrlReader implements UrlReaderService { this.deps = deps; const { host, username, appPassword, token } = integration.config; - if (username && (!token || !appPassword)) { + if (username && !token && !appPassword) { throw new Error( `Bitbucket Cloud integration for '${host}' has configured a username but is missing a required token or appPassword.`, ); diff --git a/packages/integration/src/bitbucketCloud/config.test.ts b/packages/integration/src/bitbucketCloud/config.test.ts index 28322909a6..9488c8b5f7 100644 --- a/packages/integration/src/bitbucketCloud/config.test.ts +++ b/packages/integration/src/bitbucketCloud/config.test.ts @@ -143,7 +143,9 @@ describe('readBitbucketCloudIntegrationConfig', () => { readBitbucketCloudIntegrationConfig( buildConfig({ ...valid, appPassword: undefined, token: undefined }), ), - ).toThrow(/must configure either a token or appPassword/); + ).toThrow( + /must be configured with as username and either a token or an appPassword/, + ); }); it('credentials hidden on the frontend', async () => { From b4b6e26c385469d2405a07faf40c90cccf353e53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Tue, 18 Nov 2025 09:59:55 +0100 Subject: [PATCH 51/73] Update plugins/scaffolder-backend-module-bitbucket-cloud/src/actions/helpers.ts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- .../src/actions/helpers.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/scaffolder-backend-module-bitbucket-cloud/src/actions/helpers.ts b/plugins/scaffolder-backend-module-bitbucket-cloud/src/actions/helpers.ts index da70d9252a..3b4fc89c30 100644 --- a/plugins/scaffolder-backend-module-bitbucket-cloud/src/actions/helpers.ts +++ b/plugins/scaffolder-backend-module-bitbucket-cloud/src/actions/helpers.ts @@ -38,7 +38,7 @@ export const getBitbucketClient = (config: { }); } throw new Error( - `Authorization has not been provided for Bitbucket Cloud. Please add either provide a username and token or username and appPassword to the Integrations config`, + `Authorization has not been provided for Bitbucket Cloud. Please add either provide a username and token or username and appPassword to the Integrations config`, ); }; From d464902ab420d5856e026f4695276ff79905f673 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Tue, 18 Nov 2025 10:00:01 +0100 Subject: [PATCH 52/73] Update plugins/scaffolder-backend-module-bitbucket-cloud/src/actions/helpers.ts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- .../src/actions/helpers.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/scaffolder-backend-module-bitbucket-cloud/src/actions/helpers.ts b/plugins/scaffolder-backend-module-bitbucket-cloud/src/actions/helpers.ts index 3b4fc89c30..2e68d4e8b8 100644 --- a/plugins/scaffolder-backend-module-bitbucket-cloud/src/actions/helpers.ts +++ b/plugins/scaffolder-backend-module-bitbucket-cloud/src/actions/helpers.ts @@ -62,6 +62,6 @@ export const getAuthorizationHeader = (config: { } throw new Error( - `Authorization has not been provided for Bitbucket Cloud. Please add either provide a username and token or username and appPassword to the Integrations config`, + `Authorization has not been provided for Bitbucket Cloud. Please add either provide a username and token or username and appPassword to the Integrations config`, ); }; From 3fea34cf629ce706047b62d350492eab2a615784 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 18 Nov 2025 09:17:04 +0000 Subject: [PATCH 53/73] chore(deps): update dependency @base-ui-components/react to v1.0.0-beta.6 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- docs-ui/yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs-ui/yarn.lock b/docs-ui/yarn.lock index 644a9c5f60..a9e9b97305 100644 --- a/docs-ui/yarn.lock +++ b/docs-ui/yarn.lock @@ -31,8 +31,8 @@ __metadata: linkType: hard "@base-ui-components/react@npm:^1.0.0-beta.4": - version: 1.0.0-beta.5 - resolution: "@base-ui-components/react@npm:1.0.0-beta.5" + version: 1.0.0-beta.6 + resolution: "@base-ui-components/react@npm:1.0.0-beta.6" dependencies: "@babel/runtime": "npm:^7.28.4" "@base-ui-components/utils": "npm:0.2.0" @@ -48,7 +48,7 @@ __metadata: peerDependenciesMeta: "@types/react": optional: true - checksum: 10/db53c9fc05301263419ac0f3c7f655aa67262a434b7f752e3af879430e75aa5d0d808ecf8c40d38b70fb699df8028b68baa11a9608e3153bcc4a5c57d6fab1f1 + checksum: 10/b3cfa5449f596c6cb509017a33c31fad531c10ee3dc70ee98ca5a48dfc02a8333012bd29df660833f98b73ee895f34ff51037eeef35b58111492d98454881eee languageName: node linkType: hard From 4d03f08d19f6a7d046b5e8dc4b7775557e37e984 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Mon, 17 Nov 2025 10:35:21 +0100 Subject: [PATCH 54/73] frontend-plugin-api: refactor to use opaque type for route refs Signed-off-by: Patrik Oldsberg --- .changeset/busy-goats-kiss.md | 7 + packages/core-compat-api/package.json | 4 +- .../src/convertLegacyRouteRef.test.ts | 26 ++-- .../src/convertLegacyRouteRef.ts | 24 ++-- .../src/routing/RouteAliasResolver.ts | 5 +- .../src/routing/RouteResolver.ts | 25 ++-- .../src/routing/collectRouteIds.ts | 22 ++- .../src/routing/resolveRouteBindings.ts | 5 +- packages/frontend-internal/src/index.ts | 1 + .../src/routing/OpaqueExternalRouteRef.ts | 34 +++++ .../src/routing/OpaqueRouteRef.ts | 35 +++++ .../src/routing/OpaqueSubRouteRef.ts | 32 +++++ .../frontend-internal/src/routing/index.ts | 19 +++ .../src/routing/ExternalRouteRef.test.ts | 11 +- .../src/routing/ExternalRouteRef.ts | 74 +++++------ .../src/routing/RouteRef.test.ts | 7 +- .../src/routing/RouteRef.ts | 125 +++++------------- .../src/routing/SubRouteRef.test.ts | 19 ++- .../src/routing/SubRouteRef.ts | 85 +++--------- 19 files changed, 282 insertions(+), 278 deletions(-) create mode 100644 .changeset/busy-goats-kiss.md create mode 100644 packages/frontend-internal/src/routing/OpaqueExternalRouteRef.ts create mode 100644 packages/frontend-internal/src/routing/OpaqueRouteRef.ts create mode 100644 packages/frontend-internal/src/routing/OpaqueSubRouteRef.ts create mode 100644 packages/frontend-internal/src/routing/index.ts diff --git a/.changeset/busy-goats-kiss.md b/.changeset/busy-goats-kiss.md new file mode 100644 index 0000000000..558642be94 --- /dev/null +++ b/.changeset/busy-goats-kiss.md @@ -0,0 +1,7 @@ +--- +'@backstage/frontend-plugin-api': patch +'@backstage/frontend-app-api': patch +'@backstage/core-compat-api': patch +--- + +Internal refactor of route reference implementations with minor updates to the `toString` implementations. diff --git a/packages/core-compat-api/package.json b/packages/core-compat-api/package.json index cedf7e661e..7b3c5ff9b9 100644 --- a/packages/core-compat-api/package.json +++ b/packages/core-compat-api/package.json @@ -34,8 +34,10 @@ "@backstage/core-plugin-api": "workspace:^", "@backstage/frontend-plugin-api": "workspace:^", "@backstage/plugin-catalog-react": "workspace:^", + "@backstage/types": "workspace:^", "@backstage/version-bridge": "workspace:^", - "lodash": "^4.17.21" + "lodash": "^4.17.21", + "zod": "^3.22.4" }, "devDependencies": { "@backstage/cli": "workspace:^", diff --git a/packages/core-compat-api/src/convertLegacyRouteRef.test.ts b/packages/core-compat-api/src/convertLegacyRouteRef.test.ts index f09060212c..b61ba3a114 100644 --- a/packages/core-compat-api/src/convertLegacyRouteRef.test.ts +++ b/packages/core-compat-api/src/convertLegacyRouteRef.test.ts @@ -31,13 +31,11 @@ import { createExternalRouteRef as createNewExternalRouteRef, } from '@backstage/frontend-plugin-api'; import { convertLegacyRouteRef } from './convertLegacyRouteRef'; - -// eslint-disable-next-line @backstage/no-relative-monorepo-imports -import { toInternalRouteRef as toInternalNewRouteRef } from '../../frontend-plugin-api/src/routing/RouteRef'; -// eslint-disable-next-line @backstage/no-relative-monorepo-imports -import { toInternalSubRouteRef as toInternalNewSubRouteRef } from '../../frontend-plugin-api/src/routing/SubRouteRef'; -// eslint-disable-next-line @backstage/no-relative-monorepo-imports -import { toInternalExternalRouteRef as toInternalNewExternalRouteRef } from '../../frontend-plugin-api/src/routing/ExternalRouteRef'; +import { + OpaqueExternalRouteRef, + OpaqueRouteRef, + OpaqueSubRouteRef, +} from '@internal/frontend'; describe('convertLegacyRouteRef', () => { it('converts old to new', () => { @@ -85,13 +83,13 @@ describe('convertLegacyRouteRef', () => { expect(ref3).toBe(ref3Converted); expect(ref4).toBe(ref4Converted); - const ref1Internal = toInternalNewRouteRef(ref1Converted); - const ref2Internal = toInternalNewRouteRef(ref2Converted); - const ref1sub1Internal = toInternalNewSubRouteRef(ref1sub1Converted); - const ref1sub2Internal = toInternalNewSubRouteRef(ref1sub2Converted); - const ref2sub1Internal = toInternalNewSubRouteRef(ref2sub1Converted); - const ref3Internal = toInternalNewExternalRouteRef(ref3Converted); - const ref4Internal = toInternalNewExternalRouteRef(ref4Converted); + const ref1Internal = OpaqueRouteRef.toInternal(ref1Converted); + const ref2Internal = OpaqueRouteRef.toInternal(ref2Converted); + const ref1sub1Internal = OpaqueSubRouteRef.toInternal(ref1sub1Converted); + const ref1sub2Internal = OpaqueSubRouteRef.toInternal(ref1sub2Converted); + const ref2sub1Internal = OpaqueSubRouteRef.toInternal(ref2sub1Converted); + const ref3Internal = OpaqueExternalRouteRef.toInternal(ref3Converted); + const ref4Internal = OpaqueExternalRouteRef.toInternal(ref4Converted); expect(ref1Internal.getDescription()).toBe( 'routeRef{type=absolute,id=ref1}', diff --git a/packages/core-compat-api/src/convertLegacyRouteRef.ts b/packages/core-compat-api/src/convertLegacyRouteRef.ts index 40a95a81ff..a8dfd8193e 100644 --- a/packages/core-compat-api/src/convertLegacyRouteRef.ts +++ b/packages/core-compat-api/src/convertLegacyRouteRef.ts @@ -32,13 +32,11 @@ import { createSubRouteRef, createExternalRouteRef, } from '@backstage/frontend-plugin-api'; - -// eslint-disable-next-line @backstage/no-relative-monorepo-imports -import { toInternalRouteRef } from '../../frontend-plugin-api/src/routing/RouteRef'; -// eslint-disable-next-line @backstage/no-relative-monorepo-imports -import { toInternalSubRouteRef } from '../../frontend-plugin-api/src/routing/SubRouteRef'; -// eslint-disable-next-line @backstage/no-relative-monorepo-imports -import { toInternalExternalRouteRef } from '../../frontend-plugin-api/src/routing/ExternalRouteRef'; +import { + OpaqueRouteRef, + OpaqueSubRouteRef, + OpaqueExternalRouteRef, +} from '@internal/frontend'; /** * Converts a legacy route ref type to the new system. @@ -184,7 +182,7 @@ function convertNewToOld( ref: RouteRef | SubRouteRef | ExternalRouteRef, ): LegacyRouteRef | LegacySubRouteRef | LegacyExternalRouteRef { if (ref.$$type === '@backstage/RouteRef') { - const newRef = toInternalRouteRef(ref); + const newRef = OpaqueRouteRef.toInternal(ref); return Object.assign(ref, { [routeRefType]: 'absolute', params: newRef.getParams(), @@ -192,7 +190,7 @@ function convertNewToOld( } as Omit) as unknown as LegacyRouteRef; } if (ref.$$type === '@backstage/SubRouteRef') { - const newRef = toInternalSubRouteRef(ref); + const newRef = OpaqueSubRouteRef.toInternal(ref); return Object.assign(ref, { [routeRefType]: 'sub', parent: convertLegacyRouteRef(newRef.getParent()), @@ -200,7 +198,7 @@ function convertNewToOld( } as Omit) as unknown as LegacySubRouteRef; } if (ref.$$type === '@backstage/ExternalRouteRef') { - const newRef = toInternalExternalRouteRef(ref); + const newRef = OpaqueExternalRouteRef.toInternal(ref); return Object.assign(ref, { [routeRefType]: 'external', optional: true, @@ -221,7 +219,7 @@ function convertOldToNew( if (type === 'absolute') { const legacyRef = ref as LegacyRouteRef; const legacyRefStr = String(legacyRef); - const newRef = toInternalRouteRef( + const newRef = OpaqueRouteRef.toInternal( createRouteRef<{ [key in string]: string }>({ params: legacyRef.params as string[], }), @@ -247,7 +245,7 @@ function convertOldToNew( if (type === 'sub') { const legacyRef = ref as LegacySubRouteRef; const legacyRefStr = String(legacyRef); - const newRef = toInternalSubRouteRef( + const newRef = OpaqueSubRouteRef.toInternal( createSubRouteRef({ path: legacyRef.path, parent: convertLegacyRouteRef(legacyRef.parent), @@ -274,7 +272,7 @@ function convertOldToNew( if (type === 'external') { const legacyRef = ref as LegacyExternalRouteRef; const legacyRefStr = String(legacyRef); - const newRef = toInternalExternalRouteRef( + const newRef = OpaqueExternalRouteRef.toInternal( createExternalRouteRef<{ [key in string]: string }>({ params: legacyRef.params as string[], defaultTarget: diff --git a/packages/frontend-app-api/src/routing/RouteAliasResolver.ts b/packages/frontend-app-api/src/routing/RouteAliasResolver.ts index 64e5eb7ce8..badf27f964 100644 --- a/packages/frontend-app-api/src/routing/RouteAliasResolver.ts +++ b/packages/frontend-app-api/src/routing/RouteAliasResolver.ts @@ -16,8 +16,7 @@ import { RouteRef } from '@backstage/frontend-plugin-api'; import { RouteRefsById } from './collectRouteIds'; -// eslint-disable-next-line @backstage/no-relative-monorepo-imports -import { toInternalRouteRef } from '../../../frontend-plugin-api/src/routing/RouteRef'; +import { OpaqueRouteRef } from '@internal/frontend'; /** * @internal @@ -41,7 +40,7 @@ export function createRouteAliasResolver( let currentRef = routeRef; for (let i = 0; i < 100; i++) { - const alias = toInternalRouteRef(currentRef).alias; + const alias = OpaqueRouteRef.toInternal(currentRef).alias; if (alias) { if (pluginId) { const [aliasPluginId] = alias.split('.'); diff --git a/packages/frontend-app-api/src/routing/RouteResolver.ts b/packages/frontend-app-api/src/routing/RouteResolver.ts index 4c0ad0e3fa..7fd7ef934c 100644 --- a/packages/frontend-app-api/src/routing/RouteResolver.ts +++ b/packages/frontend-app-api/src/routing/RouteResolver.ts @@ -25,18 +25,11 @@ import { } from '@backstage/frontend-plugin-api'; import mapValues from 'lodash/mapValues'; import { AnyRouteRef, BackstageRouteObject } from './types'; -// eslint-disable-next-line @backstage/no-relative-monorepo-imports -import { isRouteRef } from '../../../frontend-plugin-api/src/routing/RouteRef'; -// eslint-disable-next-line @backstage/no-relative-monorepo-imports import { - isSubRouteRef, - toInternalSubRouteRef, -} from '../../../frontend-plugin-api/src/routing/SubRouteRef'; -// eslint-disable-next-line @backstage/no-relative-monorepo-imports -import { - isExternalRouteRef, - toInternalExternalRouteRef, -} from '../../../frontend-plugin-api/src/routing/ExternalRouteRef'; + OpaqueRouteRef, + OpaqueExternalRouteRef, + OpaqueSubRouteRef, +} from '@internal/frontend'; import { RouteAliasResolver } from './RouteAliasResolver'; // Joins a list of paths together, avoiding trailing and duplicate slashes @@ -65,10 +58,10 @@ function resolveTargetRef( let ref: AnyRouteRef = targetRouteRef; let path = ''; - if (isExternalRouteRef(ref)) { + if (OpaqueExternalRouteRef.isType(ref)) { let resolvedRoute = routeBindings.get(ref); if (!resolvedRoute) { - const internal = toInternalExternalRouteRef(ref); + const internal = OpaqueExternalRouteRef.toInternal(ref); const defaultTarget = internal.getDefaultTarget(); if (defaultTarget) { resolvedRoute = routeRefsById.get(defaultTarget); @@ -80,13 +73,13 @@ function resolveTargetRef( ref = resolvedRoute; } - if (isSubRouteRef(ref)) { - const internal = toInternalSubRouteRef(ref); + if (OpaqueSubRouteRef.isType(ref)) { + const internal = OpaqueSubRouteRef.toInternal(ref); path = ref.path; ref = internal.getParent(); } - if (!isRouteRef(ref)) { + if (!OpaqueRouteRef.isType(ref)) { throw new Error( `Unexpectedly resolved ${targetRouteRef} to a non-route ref ${ref}`, ); diff --git a/packages/frontend-app-api/src/routing/collectRouteIds.ts b/packages/frontend-app-api/src/routing/collectRouteIds.ts index 79afb07928..c99c28ac1a 100644 --- a/packages/frontend-app-api/src/routing/collectRouteIds.ts +++ b/packages/frontend-app-api/src/routing/collectRouteIds.ts @@ -20,16 +20,12 @@ import { ExternalRouteRef, FrontendFeature, } from '@backstage/frontend-plugin-api'; -// eslint-disable-next-line @backstage/no-relative-monorepo-imports import { - isRouteRef, - toInternalRouteRef, -} from '../../../frontend-plugin-api/src/routing/RouteRef'; -// eslint-disable-next-line @backstage/no-relative-monorepo-imports -import { toInternalExternalRouteRef } from '../../../frontend-plugin-api/src/routing/ExternalRouteRef'; -// eslint-disable-next-line @backstage/no-relative-monorepo-imports -import { toInternalSubRouteRef } from '../../../frontend-plugin-api/src/routing/SubRouteRef'; -import { OpaqueFrontendPlugin } from '@internal/frontend'; + OpaqueRouteRef, + OpaqueSubRouteRef, + OpaqueExternalRouteRef, + OpaqueFrontendPlugin, +} from '@internal/frontend'; import { ErrorCollector } from '../wiring/createErrorCollector'; /** @internal */ @@ -62,12 +58,12 @@ export function collectRouteIds( continue; } - if (isRouteRef(ref)) { - const internalRef = toInternalRouteRef(ref); + if (OpaqueRouteRef.isType(ref)) { + const internalRef = OpaqueRouteRef.toInternal(ref); internalRef.setId(refId); routesById.set(refId, ref); } else { - const internalRef = toInternalSubRouteRef(ref); + const internalRef = OpaqueSubRouteRef.toInternal(ref); routesById.set(refId, internalRef); } } @@ -82,7 +78,7 @@ export function collectRouteIds( continue; } - const internalRef = toInternalExternalRouteRef(ref); + const internalRef = OpaqueExternalRouteRef.toInternal(ref); internalRef.setId(refId); externalRoutesById.set(refId, ref); } diff --git a/packages/frontend-app-api/src/routing/resolveRouteBindings.ts b/packages/frontend-app-api/src/routing/resolveRouteBindings.ts index f9836d7107..44fe4ecbf5 100644 --- a/packages/frontend-app-api/src/routing/resolveRouteBindings.ts +++ b/packages/frontend-app-api/src/routing/resolveRouteBindings.ts @@ -23,8 +23,7 @@ import { RouteRefsById } from './collectRouteIds'; import { ErrorCollector } from '../wiring/createErrorCollector'; import { Config } from '@backstage/config'; import { JsonObject } from '@backstage/types'; -// eslint-disable-next-line @backstage/no-relative-monorepo-imports -import { toInternalExternalRouteRef } from '../../../frontend-plugin-api/src/routing/ExternalRouteRef'; +import { OpaqueExternalRouteRef } from '@internal/frontend'; /** * Extracts a union of the keys in a map whose value extends the given type @@ -166,7 +165,7 @@ export function resolveRouteBindings( for (const externalRef of routesById.externalRoutes.values()) { if (!result.has(externalRef) && !disabledExternalRefs.has(externalRef)) { const defaultRefId = - toInternalExternalRouteRef(externalRef).getDefaultTarget(); + OpaqueExternalRouteRef.toInternal(externalRef).getDefaultTarget(); if (defaultRefId) { const defaultRef = routesById.routes.get(defaultRefId); if (defaultRef) { diff --git a/packages/frontend-internal/src/index.ts b/packages/frontend-internal/src/index.ts index a5728f2ff6..38bfdc53f8 100644 --- a/packages/frontend-internal/src/index.ts +++ b/packages/frontend-internal/src/index.ts @@ -14,4 +14,5 @@ * limitations under the License. */ +export * from './routing'; export * from './wiring'; diff --git a/packages/frontend-internal/src/routing/OpaqueExternalRouteRef.ts b/packages/frontend-internal/src/routing/OpaqueExternalRouteRef.ts new file mode 100644 index 0000000000..9e70dc496a --- /dev/null +++ b/packages/frontend-internal/src/routing/OpaqueExternalRouteRef.ts @@ -0,0 +1,34 @@ +/* + * Copyright 2025 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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 { ExternalRouteRef } from '@backstage/frontend-plugin-api'; +import { OpaqueType } from '@internal/opaque'; + +export const OpaqueExternalRouteRef = OpaqueType.create<{ + public: ExternalRouteRef; + versions: { + readonly version: 'v1'; + + getParams(): string[]; + getDescription(): string; + getDefaultTarget(): string | undefined; + + setId(id: string): void; + }; +}>({ + type: '@backstage/ExternalRouteRef', + versions: ['v1'], +}); diff --git a/packages/frontend-internal/src/routing/OpaqueRouteRef.ts b/packages/frontend-internal/src/routing/OpaqueRouteRef.ts new file mode 100644 index 0000000000..83126de8e2 --- /dev/null +++ b/packages/frontend-internal/src/routing/OpaqueRouteRef.ts @@ -0,0 +1,35 @@ +/* + * Copyright 2025 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { RouteRef } from '@backstage/frontend-plugin-api'; +import { OpaqueType } from '@internal/opaque'; + +export const OpaqueRouteRef = OpaqueType.create<{ + public: RouteRef; + versions: { + readonly version: 'v1'; + + getParams(): string[]; + getDescription(): string; + + alias: string | undefined; + + setId(id: string): void; + }; +}>({ + type: '@backstage/RouteRef', + versions: ['v1'], +}); diff --git a/packages/frontend-internal/src/routing/OpaqueSubRouteRef.ts b/packages/frontend-internal/src/routing/OpaqueSubRouteRef.ts new file mode 100644 index 0000000000..a8559f76a2 --- /dev/null +++ b/packages/frontend-internal/src/routing/OpaqueSubRouteRef.ts @@ -0,0 +1,32 @@ +/* + * Copyright 2025 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { RouteRef, SubRouteRef } from '@backstage/frontend-plugin-api'; +import { OpaqueType } from '@internal/opaque'; + +export const OpaqueSubRouteRef = OpaqueType.create<{ + public: SubRouteRef; + versions: { + readonly version: 'v1'; + + getParams(): string[]; + getParent(): RouteRef; + getDescription(): string; + }; +}>({ + type: '@backstage/SubRouteRef', + versions: ['v1'], +}); diff --git a/packages/frontend-internal/src/routing/index.ts b/packages/frontend-internal/src/routing/index.ts new file mode 100644 index 0000000000..cc8c0ee5b8 --- /dev/null +++ b/packages/frontend-internal/src/routing/index.ts @@ -0,0 +1,19 @@ +/* + * Copyright 2025 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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 { OpaqueRouteRef } from './OpaqueRouteRef'; +export { OpaqueSubRouteRef } from './OpaqueSubRouteRef'; +export { OpaqueExternalRouteRef } from './OpaqueExternalRouteRef'; diff --git a/packages/frontend-plugin-api/src/routing/ExternalRouteRef.test.ts b/packages/frontend-plugin-api/src/routing/ExternalRouteRef.test.ts index 97d3dd2264..93b5ed727c 100644 --- a/packages/frontend-plugin-api/src/routing/ExternalRouteRef.test.ts +++ b/packages/frontend-plugin-api/src/routing/ExternalRouteRef.test.ts @@ -14,17 +14,14 @@ * limitations under the License. */ -import { - ExternalRouteRef, - createExternalRouteRef, - toInternalExternalRouteRef, -} from './ExternalRouteRef'; +import { ExternalRouteRef, createExternalRouteRef } from './ExternalRouteRef'; +import { OpaqueExternalRouteRef } from '@internal/frontend'; import { AnyRouteRefParams } from './types'; describe('ExternalRouteRef', () => { it('should be created', () => { const routeRef: ExternalRouteRef = createExternalRouteRef(); - const internal = toInternalExternalRouteRef(routeRef); + const internal = OpaqueExternalRouteRef.toInternal(routeRef); expect(internal.getParams()).toEqual([]); expect(String(internal)).toMatch( @@ -39,7 +36,7 @@ describe('ExternalRouteRef', () => { x: string; y: string; }> = createExternalRouteRef({ params: ['x', 'y'] }); - const internal = toInternalExternalRouteRef(routeRef); + const internal = OpaqueExternalRouteRef.toInternal(routeRef); expect(internal.getParams()).toEqual(['x', 'y']); }); diff --git a/packages/frontend-plugin-api/src/routing/ExternalRouteRef.ts b/packages/frontend-plugin-api/src/routing/ExternalRouteRef.ts index 3de276f85c..cd2f98f504 100644 --- a/packages/frontend-plugin-api/src/routing/ExternalRouteRef.ts +++ b/packages/frontend-plugin-api/src/routing/ExternalRouteRef.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { RouteRefImpl } from './RouteRef'; +import { OpaqueExternalRouteRef } from '@internal/frontend'; import { describeParentCallSite } from './describeParentCallSite'; import { AnyRouteRefParams } from './types'; @@ -58,37 +58,6 @@ export function toInternalExternalRouteRef< return r; } -/** @internal */ -export function isExternalRouteRef(opaque: { - $$type: string; -}): opaque is ExternalRouteRef { - return opaque.$$type === '@backstage/ExternalRouteRef'; -} - -/** @internal */ -class ExternalRouteRefImpl - extends RouteRefImpl - implements InternalExternalRouteRef -{ - readonly $$type = '@backstage/ExternalRouteRef' as any; - readonly params: string[]; - readonly defaultTarget: string | undefined; - - constructor( - params: string[] = [], - defaultTarget: string | undefined, - creationSite: string, - ) { - super(params, creationSite); - this.params = params; - this.defaultTarget = defaultTarget; - } - - getDefaultTarget() { - return this.defaultTarget; - } -} - /** * Creates a route descriptor, to be later bound to a concrete route by the app. Used to implement cross-plugin route references. * @@ -102,7 +71,7 @@ class ExternalRouteRefImpl export function createExternalRouteRef< TParams extends { [param in TParamKeys]: string } | undefined = undefined, TParamKeys extends string = string, ->(options?: { +>(config?: { /** * The parameters that will be provided to the external route reference. */ @@ -124,9 +93,38 @@ export function createExternalRouteRef< ? TParams : { [param in TParamKeys]: string } > { - return new ExternalRouteRefImpl( - options?.params as string[] | undefined, - options?.defaultTarget, - describeParentCallSite(), - ); + const params = (config?.params ?? []) as string[]; + const creationSite = describeParentCallSite(); + + let id: string | undefined = undefined; + + return OpaqueExternalRouteRef.createInstance('v1', { + T: undefined as unknown as TParams, + getParams() { + return params; + }, + getDescription() { + if (id) { + return id; + } + return `created at '${creationSite}'`; + }, + getDefaultTarget() { + return config?.defaultTarget; + }, + setId(newId: string) { + if (!newId) { + throw new Error(`ExternalRouteRef id must be a non-empty string`); + } + if (id && id !== newId) { + throw new Error( + `ExternalRouteRef was referenced twice as both '${id}' and '${newId}'`, + ); + } + id = newId; + }, + toString(): string { + return `externalRouteRef{id=${id},at='${creationSite}'}`; + }, + }); } diff --git a/packages/frontend-plugin-api/src/routing/RouteRef.test.ts b/packages/frontend-plugin-api/src/routing/RouteRef.test.ts index 570723df9a..f7b8e1b450 100644 --- a/packages/frontend-plugin-api/src/routing/RouteRef.test.ts +++ b/packages/frontend-plugin-api/src/routing/RouteRef.test.ts @@ -15,12 +15,13 @@ */ import { AnyRouteRefParams } from './types'; -import { RouteRef, createRouteRef, toInternalRouteRef } from './RouteRef'; +import { RouteRef, createRouteRef } from './RouteRef'; +import { OpaqueRouteRef } from '@internal/frontend'; describe('RouteRef', () => { it('should be created and have a mutable ID', () => { const routeRef: RouteRef = createRouteRef(); - const internal = toInternalRouteRef(routeRef); + const internal = OpaqueRouteRef.toInternal(routeRef); expect(internal.T).toBe(undefined); expect(internal.getParams()).toEqual([]); expect(internal.getDescription()).toMatch(/RouteRef\.test\.ts/); @@ -49,7 +50,7 @@ describe('RouteRef', () => { }> = createRouteRef({ params: ['x', 'y'], }); - const internal = toInternalRouteRef(routeRef); + const internal = OpaqueRouteRef.toInternal(routeRef); expect(internal.getParams()).toEqual(['x', 'y']); expect(internal.getDescription()).toMatch(/RouteRef\.test\.ts/); }); diff --git a/packages/frontend-plugin-api/src/routing/RouteRef.ts b/packages/frontend-plugin-api/src/routing/RouteRef.ts index 46076e6258..62f29adb86 100644 --- a/packages/frontend-plugin-api/src/routing/RouteRef.ts +++ b/packages/frontend-plugin-api/src/routing/RouteRef.ts @@ -14,6 +14,7 @@ * limitations under the License. */ +import { OpaqueRouteRef } from '@internal/frontend'; import { describeParentCallSite } from './describeParentCallSite'; import { AnyRouteRefParams } from './types'; @@ -33,93 +34,6 @@ export interface RouteRef< readonly T: TParams; } -/** @internal */ -export interface InternalRouteRef< - TParams extends AnyRouteRefParams = AnyRouteRefParams, -> extends RouteRef { - readonly version: 'v1'; - getParams(): string[]; - getDescription(): string; - - alias: string | undefined; - - setId(id: string): void; -} - -/** @internal */ -export function toInternalRouteRef< - TParams extends AnyRouteRefParams = AnyRouteRefParams, ->(resource: RouteRef): InternalRouteRef { - const r = resource as InternalRouteRef; - if (r.$$type !== '@backstage/RouteRef') { - throw new Error(`Invalid RouteRef, bad type '${r.$$type}'`); - } - - return r; -} - -/** @internal */ -export function isRouteRef(opaque: { $$type: string }): opaque is RouteRef { - return opaque.$$type === '@backstage/RouteRef'; -} - -/** @internal */ -export class RouteRefImpl implements InternalRouteRef { - readonly $$type = '@backstage/RouteRef'; - readonly version = 'v1'; - declare readonly T: never; - - #id?: string; - readonly #params: string[]; - readonly #creationSite: string; - readonly #alias?: string; - - constructor( - readonly params: string[] = [], - creationSite: string, - alias?: string, - ) { - this.#params = params; - this.#creationSite = creationSite; - this.#alias = alias; - } - - getParams(): string[] { - return this.#params; - } - - get alias(): string | undefined { - return this.#alias; - } - - getDescription(): string { - if (this.#id) { - return this.#id; - } - return `created at '${this.#creationSite}'`; - } - - get #name() { - return this.$$type.slice('@backstage/'.length); - } - - setId(id: string): void { - if (!id) { - throw new Error(`${this.#name} id must be a non-empty string`); - } - if (this.#id && this.#id !== id) { - throw new Error( - `${this.#name} was referenced twice as both '${this.#id}' and '${id}'`, - ); - } - this.#id = id; - } - - toString(): string { - return `${this.#name}{${this.getDescription()}}`; - } -} - /** * Create a {@link RouteRef} from a route descriptor. * @@ -145,9 +59,36 @@ export function createRouteRef< ? TParams : { [param in TParamKeys]: string } > { - return new RouteRefImpl( - config?.params as string[] | undefined, - describeParentCallSite(), - config?.aliasFor, - ) as RouteRef; + const params = (config?.params ?? []) as string[]; + const creationSite = describeParentCallSite(); + + let id: string | undefined = undefined; + + return OpaqueRouteRef.createInstance('v1', { + T: undefined as unknown as TParams, + getParams() { + return params; + }, + getDescription() { + if (id) { + return id; + } + return `created at '${creationSite}'`; + }, + alias: config?.aliasFor, + setId(newId: string) { + if (!newId) { + throw new Error(`RouteRef id must be a non-empty string`); + } + if (id && id !== newId) { + throw new Error( + `RouteRef was referenced twice as both '${id}' and '${newId}'`, + ); + } + id = newId; + }, + toString(): string { + return `routeRef{id=${id},at='${creationSite}'}`; + }, + }); } diff --git a/packages/frontend-plugin-api/src/routing/SubRouteRef.test.ts b/packages/frontend-plugin-api/src/routing/SubRouteRef.test.ts index b04728c49b..cd0b033d98 100644 --- a/packages/frontend-plugin-api/src/routing/SubRouteRef.test.ts +++ b/packages/frontend-plugin-api/src/routing/SubRouteRef.test.ts @@ -15,24 +15,21 @@ */ import { AnyRouteRefParams } from './types'; -import { - SubRouteRef, - createSubRouteRef, - toInternalSubRouteRef, -} from './SubRouteRef'; -import { createRouteRef, toInternalRouteRef } from './RouteRef'; +import { SubRouteRef, createSubRouteRef } from './SubRouteRef'; +import { createRouteRef } from './RouteRef'; +import { OpaqueRouteRef, OpaqueSubRouteRef } from '@internal/frontend'; const parent = createRouteRef(); const parentX = createRouteRef({ params: ['x'] }); describe('SubRouteRef', () => { it('should be created', () => { - const internalParent = toInternalRouteRef(createRouteRef()); + const internalParent = OpaqueRouteRef.toInternal(createRouteRef()); const routeRef: SubRouteRef = createSubRouteRef({ parent: internalParent, path: '/foo', }); - const internal = toInternalSubRouteRef(routeRef); + const internal = OpaqueSubRouteRef.toInternal(routeRef); expect(internal.path).toBe('/foo'); expect(internal.T).toBe(undefined); expect(internal.getParent()).toBe(internalParent); @@ -49,7 +46,7 @@ describe('SubRouteRef', () => { parent, path: '/foo/:bar', }); - const internal = toInternalSubRouteRef(routeRef); + const internal = OpaqueSubRouteRef.toInternal(routeRef); expect(internal.path).toBe('/foo/:bar'); expect(internal.getParent()).toBe(parent); expect(internal.getParams()).toEqual(['bar']); @@ -64,7 +61,7 @@ describe('SubRouteRef', () => { parent: parentX, path: '/foo/:y/:z', }); - const internal = toInternalSubRouteRef(routeRef); + const internal = OpaqueSubRouteRef.toInternal(routeRef); expect(internal.path).toBe('/foo/:y/:z'); expect(internal.getParent()).toBe(parentX); expect(internal.getParams()).toEqual(['x', 'y', 'z']); @@ -75,7 +72,7 @@ describe('SubRouteRef', () => { parent: parentX, path: '/foo/bar', }); - const internal = toInternalSubRouteRef(routeRef); + const internal = OpaqueSubRouteRef.toInternal(routeRef); expect(internal.path).toBe('/foo/bar'); expect(internal.getParent()).toBe(parentX); expect(internal.getParams()).toEqual(['x']); diff --git a/packages/frontend-plugin-api/src/routing/SubRouteRef.ts b/packages/frontend-plugin-api/src/routing/SubRouteRef.ts index 74996ab4e7..4fe11ff6fb 100644 --- a/packages/frontend-plugin-api/src/routing/SubRouteRef.ts +++ b/packages/frontend-plugin-api/src/routing/SubRouteRef.ts @@ -14,7 +14,8 @@ * limitations under the License. */ -import { RouteRef, toInternalRouteRef } from './RouteRef'; +import { OpaqueRouteRef, OpaqueSubRouteRef } from '@internal/frontend'; +import { RouteRef } from './RouteRef'; import { AnyRouteRefParams } from './types'; // Should match the pattern in react-router @@ -50,59 +51,6 @@ export interface InternalSubRouteRef< getDescription(): string; } -/** @internal */ -export function toInternalSubRouteRef< - TParams extends AnyRouteRefParams = AnyRouteRefParams, ->(resource: SubRouteRef): InternalSubRouteRef { - const r = resource as InternalSubRouteRef; - if (r.$$type !== '@backstage/SubRouteRef') { - throw new Error(`Invalid SubRouteRef, bad type '${r.$$type}'`); - } - - return r; -} - -/** @internal */ -export function isSubRouteRef(opaque: { - $$type: string; -}): opaque is SubRouteRef { - return opaque.$$type === '@backstage/SubRouteRef'; -} - -/** @internal */ -export class SubRouteRefImpl - implements SubRouteRef -{ - readonly $$type = '@backstage/SubRouteRef'; - readonly version = 'v1'; - declare readonly T: never; - - #params: string[]; - #parent: RouteRef; - - constructor(readonly path: string, params: string[], parent: RouteRef) { - this.#params = params; - this.#parent = parent; - } - - getParams(): string[] { - return this.#params; - } - - getParent(): RouteRef { - return this.#parent; - } - - getDescription(): string { - const parent = toInternalRouteRef(this.#parent); - return `at ${this.path} with parent ${parent.getDescription()}`; - } - - toString(): string { - return `SubRouteRef{${this.getDescription()}}`; - } -} - /** * Used in {@link PathParams} type declaration. * @ignore @@ -168,8 +116,9 @@ export function createSubRouteRef< const { path, parent } = config; type Params = PathParams; - const internalParent = toInternalRouteRef(parent); + const internalParent = OpaqueRouteRef.toInternal(parent); const parentParams = internalParent.getParams(); + const parentDescription = internalParent.getDescription(); // Collect runtime parameters from the path, e.g. ['bar', 'baz'] from '/foo/:bar/:baz' const pathParams = path @@ -195,14 +144,22 @@ export function createSubRouteRef< } } - // We ensure that the type of the return type is sane here - const subRouteRef = new SubRouteRefImpl( + return OpaqueSubRouteRef.createInstance('v1', { + T: undefined as unknown as TrimEmptyParams< + MergeParams + >, path, - params as string[], - parent, - ) as SubRouteRef>>; - - // But skip type checking of the return value itself, because the conditional - // type checking of the parent parameter overlap is tricky to express. - return subRouteRef as any; + getParams() { + return params; + }, + getParent() { + return parent; + }, + getDescription() { + return `at ${path} with parent ${parentDescription}`; + }, + toString() { + return `subRouteRef{path='${path}',parent=${parent}}`; + }, + }); } From 83439b1539d9c65c5555e6b1e7b1c7d3ed81e7b3 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Mon, 17 Nov 2025 21:19:03 +0100 Subject: [PATCH 55/73] core-plugin-api: add forwards compatibility for route refs Signed-off-by: Patrik Oldsberg --- .changeset/swift-ideas-fry.md | 5 + .../building-apps/08-migrating.md | 51 +---- .../building-plugins/05-migrating.md | 21 +- .../src/convertLegacyRouteRef.test.ts | 36 ++-- .../src/convertLegacyRouteRef.ts | 6 +- packages/core-plugin-api/package.json | 4 +- packages/core-plugin-api/report.api.md | 6 + .../src/routing/ExternalRouteRef.test.ts | 49 ++++- .../src/routing/ExternalRouteRef.ts | 35 ++- .../src/routing/RouteRef.test.ts | 38 +++- .../core-plugin-api/src/routing/RouteRef.ts | 34 ++- .../src/routing/SubRouteRef.test.ts | 50 ++++- .../src/routing/SubRouteRef.ts | 17 +- packages/core-plugin-api/src/routing/types.ts | 15 ++ .../src/routing/RouteResolver.test.ts | 199 +++++++++++++++++- .../src/routing/collectRouteIds.test.ts | 12 +- .../extractRouteInfoFromAppNode.test.ts | 4 +- packages/frontend-plugin-api/report.api.md | 2 +- .../src/routing/ExternalRouteRef.test.ts | 6 +- .../src/routing/RouteRef.test.ts | 6 +- .../src/routing/SubRouteRef.test.ts | 6 +- yarn.lock | 2 + 22 files changed, 496 insertions(+), 108 deletions(-) create mode 100644 .changeset/swift-ideas-fry.md diff --git a/.changeset/swift-ideas-fry.md b/.changeset/swift-ideas-fry.md new file mode 100644 index 0000000000..d0e308fce7 --- /dev/null +++ b/.changeset/swift-ideas-fry.md @@ -0,0 +1,5 @@ +--- +'@backstage/core-plugin-api': minor +--- + +All route references are now forwards compatible with the new frontend system, i.e. `@backstage/frontend-plugin-api`. This means they no longer need to be converted with `convertLegacyRouteRef` or `convertLegacyRouteRefs` from `@backstage/core-compat-api`. diff --git a/docs/frontend-system/building-apps/08-migrating.md b/docs/frontend-system/building-apps/08-migrating.md index f57c22db96..2b248b12a7 100644 --- a/docs/frontend-system/building-apps/08-migrating.md +++ b/docs/frontend-system/building-apps/08-migrating.md @@ -9,7 +9,7 @@ description: How to migrate existing apps to the new frontend system This section describes how to migrate an existing Backstage app package to use the new frontend system. The app package is typically found at `packages/app` in your project and is responsible for wiring together the Backstage frontend application. -> **Who is this for?** +> **Who is this for?** > This guide is intended for maintainers of Backstage app packages (`packages/app`) who want to upgrade from the legacy frontend system to the new extension-based architecture. > **Prerequisites:** @@ -22,10 +22,10 @@ This section describes how to migrate an existing Backstage app package to use t We recommend a **two-phase migration process** to ensure a smooth and manageable transition: -- **Phase 1: Minimal Changes for Hybrid Configuration** +- **Phase 1: Minimal Changes for Hybrid Configuration** In this phase, you make the smallest set of changes necessary to enable your app to run in a hybrid mode. This allows you to start using the new frontend system while still relying on compatibility helpers and legacy code. The goal is to unblock your migration quickly, so you can benefit from the new system without a full rewrite. -- **Phase 2: Complete Transition to the New Frontend System** +- **Phase 2: Complete Transition to the New Frontend System** After your app is running in hybrid mode, you can gradually refactor your codebase to remove legacy code and compatibility helpers. This phase focuses on fully adopting the new frontend architecture, ensuring your codebase is clean, maintainable, and takes full advantage of the new features. :::warning @@ -157,36 +157,6 @@ const app = createApp({ }); ``` -If you were binding routes from a legacy `createApp`, you will need to use the `convertLegacyRouteRefs` and/or `convertLegacyRouteRef` to convert the routes to be compatible with the new system. - -For example, if both the `catalogPlugin` and `scaffolderPlugin` are legacy plugins, you can bind their routes like this: - -```ts -import { createApp } from '@backstage/frontend-defaults'; -import { - // ... - convertLegacyRouteRefs, - convertLegacyRouteRef, -} from '@backstage/core-compat-api'; - -// Ommitting converted options changes -//... - -const app = createApp({ - features: [ - // ... - convertedOptionsModule, - ], - // highlight-add-start - bindRoutes({ bind }) { - bind(convertLegacyRouteRefs(catalogPlugin.externalRoutes), { - createComponent: convertLegacyRouteRef(scaffolderPlugin.routes.root), - }); - }, - // highlight-add-end -}); -``` - ### 3) Fixing the `app.createRoot` call The `app.createRoot(...)` no longer accepts any arguments. This represents a fundamental change that the new frontend system introduces. In the old system the app element tree that you passed to `app.createRoot(...)` was the primary way that you installed and configured plugins and features in your app. In the new system this is instead replaced by extensions that are wired together into an extension tree. Much more responsibility has now been shifted to plugins, for example you no longer have to manually provide the route path for each plugin page, but instead only configure it if you want to override the default. For more information on how the new system works, see the [architecture](../architecture/00-index.md) section. @@ -590,21 +560,6 @@ const app = createApp({ Route bindings can still be done using this option, but you now also have the ability to bind routes using static configuration instead. See the section on [binding routes](../architecture/36-routes.md#binding-external-route-references) for more information. -Note that if you are binding routes from a legacy plugin that was converted using `convertLegacyAppRoot`, you will need to use the `convertLegacyRouteRefs` and/or `convertLegacyRouteRef` to convert the routes to be compatible with the new system. - -For example, if both the `catalogPlugin` and `scaffolderPlugin` are legacy plugins, you can bind their routes like this: - -```ts -const app = createApp({ - features: convertLegacyAppRoot(...), - bindRoutes({ bind }) { - bind(convertLegacyRouteRefs(catalogPlugin.externalRoutes), { - createComponent: convertLegacyRouteRef(scaffolderPlugin.routes.root), - }); - }, -}); -``` - #### `__experimentalTranslations` Translations are now installed as extensions, created using `TranslationBlueprint`. diff --git a/docs/frontend-system/building-plugins/05-migrating.md b/docs/frontend-system/building-plugins/05-migrating.md index 2d954cb526..4940e0526b 100644 --- a/docs/frontend-system/building-plugins/05-migrating.md +++ b/docs/frontend-system/building-plugins/05-migrating.md @@ -38,7 +38,6 @@ In order to migrate the actual definition of the plugin you need to recreate the ```ts title="my-plugin/src/alpha.tsx" import { createFrontendPlugin } from '@backstage/frontend-plugin-api'; - import { convertLegacyRouteRefs } from '@backstage/core-compat-api'; export default createFrontendPlugin({ // The plugin ID is now provided as `pluginId` instead of `id` @@ -47,15 +46,12 @@ In order to migrate the actual definition of the plugin you need to recreate the // bind all the extensions to the plugin /* highlight-next-line */ extensions: [/* APIs will go here, but don't worry about those yet */], - // convert old route refs to the new system - /* highlight-next-line */ - routes: convertLegacyRouteRefs({ + routes: { ... - }), - /* highlight-next-line */ - externalRoutes: convertLegacyRouteRefs({ + }, + externalRoutes: { ... - }), + }, }); ``` @@ -110,18 +106,15 @@ it can be migrated as the following, keeping in mind that you may need to switch ```tsx import { PageBlueprint } from '@backstage/frontend-plugin-api'; -import { - compatWrapper, - convertLegacyRouteRef, -} from '@backstage/core-compat-api'; +import { compatWrapper } from '@backstage/core-compat-api'; const fooPage = PageBlueprint.make({ params: { // This is the path that was previously defined in the app code. // It's labelled as the default one because it can be changed via configuration. path: '/foo', - // You can reuse the existing routeRef by wrapping it with convertLegacyRouteRef. - routeRef: convertLegacyRouteRef(rootRouteRef), + // You can reuse the existing routeRef. + routeRef: rootRouteRef, // these inputs usually match the props required by the component. loader: () => import('./components/').then(m => diff --git a/packages/core-compat-api/src/convertLegacyRouteRef.test.ts b/packages/core-compat-api/src/convertLegacyRouteRef.test.ts index b61ba3a114..c21ac8c5bc 100644 --- a/packages/core-compat-api/src/convertLegacyRouteRef.test.ts +++ b/packages/core-compat-api/src/convertLegacyRouteRef.test.ts @@ -91,40 +91,32 @@ describe('convertLegacyRouteRef', () => { const ref3Internal = OpaqueExternalRouteRef.toInternal(ref3Converted); const ref4Internal = OpaqueExternalRouteRef.toInternal(ref4Converted); - expect(ref1Internal.getDescription()).toBe( - 'routeRef{type=absolute,id=ref1}', - ); + expect(ref1Internal.getDescription()).toBe('ref1'); expect(ref1Internal.getParams()).toEqual([]); - expect(ref2Internal.getDescription()).toBe( - 'routeRef{type=absolute,id=ref2}', - ); + expect(ref2Internal.getDescription()).toBe('ref2'); expect(ref2Internal.getParams()).toEqual(['p1', 'p2']); expect(ref1sub1Internal.getDescription()).toBe( - 'routeRef{type=sub,id=sub1}', + 'at /sub1 with parent routeRef{type=absolute,id=ref1}', ); expect(ref1sub1Internal.getParams()).toEqual([]); expect(ref1sub1Internal.getParent()).toBe(ref1); expect(ref1sub2Internal.getDescription()).toBe( - 'routeRef{type=sub,id=sub2}', + 'at /sub2/:p3 with parent routeRef{type=absolute,id=ref1}', ); expect(ref1sub2Internal.getParams()).toEqual(['p3']); expect(ref1sub2Internal.getParent()).toBe(ref1); expect(ref2sub1Internal.getDescription()).toBe( - 'routeRef{type=sub,id=sub1}', + 'at /sub1/:p3 with parent routeRef{type=absolute,id=ref2}', ); expect(ref2sub1Internal.getParams()).toEqual(['p1', 'p2', 'p3']); expect(ref2sub1Internal.getParent()).toBe(ref2); expect(ref3Internal.getDefaultTarget()).toBe(undefined); - expect(ref3Internal.getDescription()).toBe( - 'routeRef{type=external,id=ref3}', - ); + expect(ref3Internal.getDescription()).toBe('ref3'); expect(ref3Internal.getParams()).toEqual([]); expect(ref4Internal.getDefaultTarget()).toBe('ref2'); - expect(ref4Internal.getDescription()).toBe( - 'routeRef{type=external,id=ref4}', - ); + expect(ref4Internal.getDescription()).toBe('ref4'); expect(ref4Internal.getParams()).toEqual(['p1', 'p2']); }); @@ -166,34 +158,34 @@ describe('convertLegacyRouteRef', () => { expect(ref3).toBe(ref3Converted); expect(ref4).toBe(ref4Converted); - expect(String(ref1Converted)).toMatch(/^RouteRef\{created at '.*'\}$/); + expect(String(ref1Converted)).toMatch(/^routeRef\{id=undefined,at='.*'\}$/); expect(ref1Converted.params).toEqual([]); - expect(String(ref2Converted)).toMatch(/^RouteRef\{created at '.*'\}$/); + expect(String(ref2Converted)).toMatch(/^routeRef\{id=undefined,at='.*'\}$/); expect(ref2Converted.params).toEqual(['p1', 'p2']); expect(String(ref1sub1Converted)).toMatch( - /^SubRouteRef\{at \/sub1 with parent created at '.*'\}$/, + /^subRouteRef\{path='\/sub1',parent=routeRef\{id=undefined,at='.*'\}\}$/, ); expect(ref1sub1Converted.params).toEqual([]); expect(ref1sub1Converted.parent).toBe(ref1); expect(String(ref1sub2Converted)).toMatch( - /^SubRouteRef\{at \/sub2\/:p3 with parent created at '.*'\}$/, + /^subRouteRef\{path='\/sub2\/:p3',parent=routeRef\{id=undefined,at='.*'\}\}$/, ); expect(ref1sub2Converted.params).toEqual(['p3']); expect(ref1sub2Converted.parent).toBe(ref1); expect(String(ref2sub1Converted)).toMatch( - /^SubRouteRef\{at \/sub1\/:p3 with parent created at '.*'\}$/, + /^subRouteRef\{path='\/sub1\/:p3',parent=routeRef\{id=undefined,at='.*'\}\}$/, ); expect(ref2sub1Converted.params).toEqual(['p1', 'p2', 'p3']); expect(ref2sub1Converted.parent).toBe(ref2); expect(String(ref3Converted)).toMatch( - /^ExternalRouteRef\{created at '.*'\}$/, + /^externalRouteRef\{id=undefined,at='.*'\}$/, ); expect(ref3Converted.params).toEqual([]); expect(ref3Converted.optional).toBe(true); expect(String(ref4Converted)).toMatch( - /^ExternalRouteRef\{created at '.*'\}$/, + /^externalRouteRef\{id=undefined,at='.*'\}$/, ); expect(ref4Converted.params).toEqual(['p1', 'p2']); expect(ref4Converted.optional).toBe(true); diff --git a/packages/core-compat-api/src/convertLegacyRouteRef.ts b/packages/core-compat-api/src/convertLegacyRouteRef.ts index a8dfd8193e..e490d83a19 100644 --- a/packages/core-compat-api/src/convertLegacyRouteRef.ts +++ b/packages/core-compat-api/src/convertLegacyRouteRef.ts @@ -187,7 +187,7 @@ function convertNewToOld( [routeRefType]: 'absolute', params: newRef.getParams(), title: newRef.getDescription(), - } as Omit) as unknown as LegacyRouteRef; + } as Omit) as unknown as LegacyRouteRef; } if (ref.$$type === '@backstage/SubRouteRef') { const newRef = OpaqueSubRouteRef.toInternal(ref); @@ -195,7 +195,7 @@ function convertNewToOld( [routeRefType]: 'sub', parent: convertLegacyRouteRef(newRef.getParent()), params: newRef.getParams(), - } as Omit) as unknown as LegacySubRouteRef; + } as Omit) as unknown as LegacySubRouteRef; } if (ref.$$type === '@backstage/ExternalRouteRef') { const newRef = OpaqueExternalRouteRef.toInternal(ref); @@ -204,7 +204,7 @@ function convertNewToOld( optional: true, params: newRef.getParams(), defaultTarget: newRef.getDefaultTarget(), - } as Omit) as unknown as LegacyExternalRouteRef; + } as Omit) as unknown as LegacyExternalRouteRef; } throw new Error( diff --git a/packages/core-plugin-api/package.json b/packages/core-plugin-api/package.json index 430d081b49..921bc4af68 100644 --- a/packages/core-plugin-api/package.json +++ b/packages/core-plugin-api/package.json @@ -53,11 +53,13 @@ "@backstage/errors": "workspace:^", "@backstage/types": "workspace:^", "@backstage/version-bridge": "workspace:^", - "history": "^5.0.0" + "history": "^5.0.0", + "zod": "^3.22.4" }, "devDependencies": { "@backstage/cli": "workspace:^", "@backstage/core-app-api": "workspace:^", + "@backstage/frontend-plugin-api": "workspace:^", "@backstage/test-utils": "workspace:^", "@testing-library/dom": "^10.0.0", "@testing-library/jest-dom": "^6.0.0", diff --git a/packages/core-plugin-api/report.api.md b/packages/core-plugin-api/report.api.md index e1b1a243df..1e31cc5eb8 100644 --- a/packages/core-plugin-api/report.api.md +++ b/packages/core-plugin-api/report.api.md @@ -429,6 +429,8 @@ export type ExternalRouteRef< $$routeRefType: 'external'; params: ParamKeys; optional?: Optional; + readonly $$type: '@backstage/ExternalRouteRef'; + readonly T: Params; }; // @public @@ -698,6 +700,8 @@ export type RouteFunc = ( export type RouteRef = { $$routeRefType: 'absolute'; params: ParamKeys; + readonly $$type: '@backstage/RouteRef'; + readonly T: Params; }; // @public @@ -762,6 +766,8 @@ export type SubRouteRef = { parent: RouteRef; path: string; params: ParamKeys; + readonly $$type: '@backstage/SubRouteRef'; + readonly T: Params; }; // @public diff --git a/packages/core-plugin-api/src/routing/ExternalRouteRef.test.ts b/packages/core-plugin-api/src/routing/ExternalRouteRef.test.ts index 05e7a23d5d..8c3a5f0802 100644 --- a/packages/core-plugin-api/src/routing/ExternalRouteRef.test.ts +++ b/packages/core-plugin-api/src/routing/ExternalRouteRef.test.ts @@ -16,6 +16,7 @@ import { AnyParams, ExternalRouteRef } from './types'; import { createExternalRouteRef } from './ExternalRouteRef'; +import { RouteResolutionApi, RouteFunc } from '@backstage/frontend-plugin-api'; describe('ExternalRouteRef', () => { it('should be created', () => { @@ -24,7 +25,9 @@ describe('ExternalRouteRef', () => { }); expect(routeRef.params).toEqual([]); expect(routeRef.optional).toBe(false); - expect(String(routeRef)).toBe('routeRef{type=external,id=my-route-ref}'); + expect(String(routeRef)).toMatch( + /^routeRef\{type=external,id=my-route-ref\}$/, + ); }); it('should be created as optional', () => { @@ -109,4 +112,48 @@ describe('ExternalRouteRef', () => { // To avoid complains about missing expectations and unused vars expect([_1, _2, _3, _4, _5, _6].join('')).toEqual(expect.any(String)); }); + + describe('with new frontend system', () => { + const routeResolutionApi = { resolve: jest.fn() } as RouteResolutionApi; + + function expectType(): ( + v: U, + ) => [T, U] extends [U, T] ? { ok(): void } : { invalid: U } { + return () => ({ ok() {} } as any); + } + + it('should resolve routes correctly', () => { + expectType | undefined>()( + routeResolutionApi.resolve(createExternalRouteRef({ id: '1' })), + ).ok(); + expectType | undefined>()( + routeResolutionApi.resolve( + createExternalRouteRef({ id: '1', optional: true }), + ), + ).ok(); + expectType | undefined>()( + routeResolutionApi.resolve( + createExternalRouteRef({ id: '1', optional: false }), + ), + ).ok(); + + expectType | undefined>()( + routeResolutionApi.resolve( + createExternalRouteRef({ id: '1', params: ['x'] }), + ), + ).ok(); + expectType | undefined>()( + routeResolutionApi.resolve( + createExternalRouteRef({ id: '1', params: ['x'], optional: true }), + ), + ).ok(); + expectType | undefined>()( + routeResolutionApi.resolve( + createExternalRouteRef({ id: '1', params: ['x'], optional: false }), + ), + ).ok(); + + expect(1).toBe(1); + }); + }); }); diff --git a/packages/core-plugin-api/src/routing/ExternalRouteRef.ts b/packages/core-plugin-api/src/routing/ExternalRouteRef.ts index 16e2f9bc72..5d33aa7a67 100644 --- a/packages/core-plugin-api/src/routing/ExternalRouteRef.ts +++ b/packages/core-plugin-api/src/routing/ExternalRouteRef.ts @@ -52,12 +52,45 @@ export class ExternalRouteRefImpl< } toString() { + if (this.#nfsId) { + return `externalRouteRef{id=${this.#nfsId},legacyId=${this.id}}`; + } return `routeRef{type=external,id=${this.id}}`; } getDefaultTarget() { return this.defaultTarget; } + + // NFS implementation below + readonly $$type = '@backstage/ExternalRouteRef'; + readonly version = 'v1'; + readonly T = undefined as any; + + #nfsId: string | undefined = undefined; + + getParams(): string[] { + return this.params as string[]; + } + getDescription(): string { + if (this.#nfsId) { + return this.#nfsId; + } + return this.id; + } + setId(newId: string) { + if (!newId) { + throw new Error(`ExternalRouteRef id must be a non-empty string`); + } + if (this.#nfsId && this.#nfsId !== newId) { + throw new Error( + `ExternalRouteRef was referenced twice as both '${ + this.#nfsId + }' and '${newId}'`, + ); + } + this.#nfsId = newId; + } } /** @@ -106,5 +139,5 @@ export function createExternalRouteRef< (options.params ?? []) as ParamKeys>, Boolean(options.optional) as Optional, options?.defaultTarget, - ); + ) as ExternalRouteRef, Optional>; } diff --git a/packages/core-plugin-api/src/routing/RouteRef.test.ts b/packages/core-plugin-api/src/routing/RouteRef.test.ts index 489900d892..29ab228b9f 100644 --- a/packages/core-plugin-api/src/routing/RouteRef.test.ts +++ b/packages/core-plugin-api/src/routing/RouteRef.test.ts @@ -16,6 +16,7 @@ import { AnyParams, RouteRef, ParamKeys } from './types'; import { createRouteRef } from './RouteRef'; +import { RouteResolutionApi, RouteFunc } from '@backstage/frontend-plugin-api'; describe('RouteRef', () => { it('should be created', () => { @@ -23,7 +24,9 @@ describe('RouteRef', () => { id: 'my-route-ref', }); expect(routeRef.params).toEqual([]); - expect(String(routeRef)).toBe('routeRef{type=absolute,id=my-route-ref}'); + expect(String(routeRef)).toMatch( + /^routeRef\{type=absolute,id=my-route-ref\}$/, + ); }); it('should be created with params', () => { @@ -95,4 +98,37 @@ describe('RouteRef', () => { expect(true).toBeDefined(); }); + + describe('with new frontend system', () => { + const routeResolutionApi = { resolve: jest.fn() } as RouteResolutionApi; + + function expectType(): ( + v: U, + ) => [T, U] extends [U, T] ? { ok(): void } : { invalid: U } { + return () => ({ ok() {} } as any); + } + + it('should resolve routes correctly', () => { + expectType | undefined>()( + routeResolutionApi.resolve(createRouteRef({ id: '1' })), + ).ok(); + expectType | undefined>()( + routeResolutionApi.resolve(createRouteRef({ id: '1' })), + ).ok(); + expectType | undefined>()( + routeResolutionApi.resolve(createRouteRef({ id: '1', params: [] })), + ).ok(); + + expectType | undefined>()( + routeResolutionApi.resolve(createRouteRef({ id: '1', params: ['x'] })), + ).ok(); + expectType | undefined>()( + routeResolutionApi.resolve( + createRouteRef({ id: '1', params: ['x', 'y'] }), + ), + ).ok(); + + expect(1).toBe(1); + }); + }); }); diff --git a/packages/core-plugin-api/src/routing/RouteRef.ts b/packages/core-plugin-api/src/routing/RouteRef.ts index d78f3ddb8d..c8465dafde 100644 --- a/packages/core-plugin-api/src/routing/RouteRef.ts +++ b/packages/core-plugin-api/src/routing/RouteRef.ts @@ -45,8 +45,40 @@ export class RouteRefImpl } toString() { + if (this.#nfsId) { + return `routeRef{id=${this.#nfsId},legacyId=${this.id}}`; + } return `routeRef{type=absolute,id=${this.id}}`; } + + // NFS implementation below + readonly $$type = '@backstage/RouteRef'; + readonly version = 'v1'; + readonly T = undefined as any; + readonly alias = undefined; + + #nfsId: string | undefined = undefined; + + getParams() { + return this.params; + } + getDescription() { + if (this.#nfsId) { + return this.#nfsId; + } + return this.id; + } + setId(newId: string) { + if (!newId) { + throw new Error(`RouteRef id must be a non-empty string`); + } + if (this.#nfsId && this.#nfsId !== newId) { + throw new Error( + `RouteRef was referenced twice as both '${this.#nfsId}' and '${newId}'`, + ); + } + this.#nfsId = newId; + } } /** @@ -72,5 +104,5 @@ export function createRouteRef< return new RouteRefImpl( config.id, (config.params ?? []) as ParamKeys>, - ); + ) as RouteRef>; } diff --git a/packages/core-plugin-api/src/routing/SubRouteRef.test.ts b/packages/core-plugin-api/src/routing/SubRouteRef.test.ts index 1db429e178..ccec4c97d6 100644 --- a/packages/core-plugin-api/src/routing/SubRouteRef.test.ts +++ b/packages/core-plugin-api/src/routing/SubRouteRef.test.ts @@ -17,6 +17,7 @@ import { AnyParams, SubRouteRef } from './types'; import { createSubRouteRef } from './SubRouteRef'; import { createRouteRef } from './RouteRef'; +import { RouteResolutionApi, RouteFunc } from '@backstage/frontend-plugin-api'; const parent = createRouteRef({ id: 'parent' }); const parentX = createRouteRef({ id: 'parent-x', params: ['x'] }); @@ -31,7 +32,7 @@ describe('SubRouteRef', () => { expect(routeRef.path).toBe('/foo'); expect(routeRef.parent).toBe(parent); expect(routeRef.params).toEqual([]); - expect(String(routeRef)).toBe('routeRef{type=sub,id=my-route-ref}'); + expect(String(routeRef)).toMatch(/^routeRef\{type=sub,id=my-route-ref\}$/); }); it('should be created with params', () => { @@ -125,4 +126,51 @@ describe('SubRouteRef', () => { // To avoid complains about missing expectations and unused vars expect([_1, _2, _3, _4].join('')).toEqual(expect.any(String)); }); + + describe('with new frontend system', () => { + const routeResolutionApi = { resolve: jest.fn() } as RouteResolutionApi; + + function expectType(): ( + v: U, + ) => [T, U] extends [U, T] ? { ok(): void } : { invalid: U } { + return () => ({ ok() {} } as any); + } + + it('should resolve routes correctly', () => { + expectType | undefined>()( + routeResolutionApi.resolve( + createSubRouteRef({ id: '1', parent, path: '/foo' }), + ), + ).ok(); + expectType | undefined>()( + routeResolutionApi.resolve( + createSubRouteRef({ id: '1', parent: parentX, path: '/foo' }), + ), + ).ok(); + + expectType | undefined>()( + routeResolutionApi.resolve( + createSubRouteRef({ id: '1', parent, path: '/:y' }), + ), + ).ok(); + expectType | undefined>()( + routeResolutionApi.resolve( + createSubRouteRef({ id: '1', parent: parentX, path: '/:y' }), + ), + ).ok(); + + expectType | undefined>()( + routeResolutionApi.resolve( + createSubRouteRef({ id: '1', parent, path: '/:y/:z' }), + ), + ).ok(); + expectType | undefined>()( + routeResolutionApi.resolve( + createSubRouteRef({ id: '1', parent: parentX, path: '/:y/:z' }), + ), + ).ok(); + + expect(1).toBe(1); + }); + }); }); diff --git a/packages/core-plugin-api/src/routing/SubRouteRef.ts b/packages/core-plugin-api/src/routing/SubRouteRef.ts index ed9ded41d4..8db4c1947b 100644 --- a/packages/core-plugin-api/src/routing/SubRouteRef.ts +++ b/packages/core-plugin-api/src/routing/SubRouteRef.ts @@ -56,6 +56,21 @@ export class SubRouteRefImpl toString() { return `routeRef{type=sub,id=${this.id}}`; } + + // NFS implementation below + readonly $$type = '@backstage/SubRouteRef'; + readonly version = 'v1'; + readonly T = undefined as any; + + getParams(): string[] { + return this.params as string[]; + } + getParent(): RouteRef { + return this.parent; + } + getDescription(): string { + return `at ${this.path} with parent ${this.parent}`; + } } /** @@ -155,7 +170,7 @@ export function createSubRouteRef< path, parent, params as ParamKeys>, - ) as SubRouteRef>>; + ); // But skip type checking of the return value itself, because the conditional // type checking of the parent parameter overlap is tricky to express. diff --git a/packages/core-plugin-api/src/routing/types.ts b/packages/core-plugin-api/src/routing/types.ts index 4598574afb..b0a4d83918 100644 --- a/packages/core-plugin-api/src/routing/types.ts +++ b/packages/core-plugin-api/src/routing/types.ts @@ -98,6 +98,11 @@ export type RouteRef = { /** @deprecated access to this property will be removed in the future */ params: ParamKeys; + + /** Compatibility field for new frontend system */ + readonly $$type: '@backstage/RouteRef'; + /** Compatibility field for new frontend system */ + readonly T: Params; }; /** @@ -120,6 +125,11 @@ export type SubRouteRef = { /** @deprecated access to this property will be removed in the future */ params: ParamKeys; + + /** Compatibility field for new frontend system */ + readonly $$type: '@backstage/SubRouteRef'; + /** Compatibility field for new frontend system */ + readonly T: Params; }; /** @@ -142,6 +152,11 @@ export type ExternalRouteRef< params: ParamKeys; optional?: Optional; + + /** Compatibility field for new frontend system */ + readonly $$type: '@backstage/ExternalRouteRef'; + /** Compatibility field for new frontend system */ + readonly T: Params; }; /** diff --git a/packages/frontend-app-api/src/routing/RouteResolver.test.ts b/packages/frontend-app-api/src/routing/RouteResolver.test.ts index 1b23ac7131..7b9105f2ae 100644 --- a/packages/frontend-app-api/src/routing/RouteResolver.test.ts +++ b/packages/frontend-app-api/src/routing/RouteResolver.test.ts @@ -22,7 +22,12 @@ import { RouteRef, SubRouteRef, } from '@backstage/frontend-plugin-api'; -import { BackstagePlugin } from '@backstage/core-plugin-api'; +import { + BackstagePlugin, + createRouteRef as createLegacyRouteRef, + createSubRouteRef as createLegacySubRouteRef, + createExternalRouteRef as createLegacyExternalRouteRef, +} from '@backstage/core-plugin-api'; import { RouteResolver } from './RouteResolver'; import { MATCH_ALL_ROUTE } from './extractRouteInfoFromAppNode'; import { @@ -416,4 +421,196 @@ describe('RouteResolver', () => { '/my-parent/a%2F%23%26%3Fb', ); }); + + describe('with legacy route refs', () => { + const legacyRef1 = createLegacyRouteRef({ id: 'ref1' }); + const legacyRef2 = createLegacyRouteRef({ id: 'ref2', params: ['x'] }); + const legacyRef3 = createLegacyRouteRef({ id: 'ref3', params: ['y'] }); + const legacySubRef1 = createLegacySubRouteRef({ + id: 'sub1', + parent: legacyRef1, + path: '/foo', + }); + const legacySubRef2 = createLegacySubRouteRef({ + id: 'sub2', + parent: legacyRef1, + path: '/foo/:a', + }); + const legacySubRef3 = createLegacySubRouteRef({ + id: 'sub3', + parent: legacyRef2, + path: '/bar', + }); + const legacySubRef4 = createLegacySubRouteRef({ + id: 'sub4', + parent: legacyRef2, + path: '/bar/:a', + }); + const legacyExternalRef1 = createLegacyExternalRouteRef({ + id: 'external1', + }); + const legacyExternalRef2 = createLegacyExternalRouteRef({ + id: 'external2', + params: ['x'], + }); + + it('should not resolve anything with an empty resolver', () => { + const r = new RouteResolver( + new Map(), + new Map(), + [], + new Map(), + '', + emptyResolver, + new Map(), + ); + + expect(r.resolve(legacyRef1, src('/'))?.()).toBe(undefined); + expect(r.resolve(legacyRef2, src('/'))?.({ x: '1x' })).toBe(undefined); + expect(r.resolve(legacySubRef1, src('/'))?.()).toBe(undefined); + expect(r.resolve(legacySubRef2, src('/'))?.({ a: '2a' })).toBe(undefined); + expect(r.resolve(legacySubRef3, src('/'))?.({ x: '3x' })).toBe(undefined); + expect(r.resolve(legacySubRef4, src('/'))?.({ x: '4x', a: '4a' })).toBe( + undefined, + ); + expect(r.resolve(legacyExternalRef1, src('/'))?.()).toBe(undefined); + expect(r.resolve(legacyExternalRef2, src('/'))?.({ x: '5x' })).toBe( + undefined, + ); + }); + + it('should resolve an absolute route', () => { + const r = new RouteResolver( + new Map([[legacyRef1, 'my-route']]), + new Map(), + [{ routeRefs: new Set([legacyRef1]), path: 'my-route', ...rest }], + new Map(), + '', + emptyResolver, + new Map(), + ); + + expect(r.resolve(legacyRef1, src('/'))?.()).toBe('/my-route'); + expect(r.resolve(legacyRef2, src('/'))?.({ x: '1x' })).toBe(undefined); + expect(r.resolve(legacySubRef1, src('/'))?.()).toBe('/my-route/foo'); + expect(r.resolve(legacySubRef2, src('/'))?.({ a: '2a' })).toBe( + '/my-route/foo/2a', + ); + expect(r.resolve(legacySubRef3, src('/'))?.({ x: '3x' })).toBe(undefined); + expect(r.resolve(legacySubRef4, src('/'))?.({ x: '4x', a: '4a' })).toBe( + undefined, + ); + expect(r.resolve(legacyExternalRef1, src('/'))?.()).toBe(undefined); + expect(r.resolve(legacyExternalRef2, src('/'))?.({ x: '5x' })).toBe( + undefined, + ); + }); + + it('should resolve an absolute route with a param and with a parent', () => { + const r = new RouteResolver( + new Map([ + [legacyRef1, 'my-route'], + [legacyRef2, 'my-parent/:x'], + ]), + new Map([[legacyRef2, legacyRef1]]), + [ + { + routeRefs: new Set([legacyRef2]), + path: 'my-parent/:x', + ...rest, + children: [ + MATCH_ALL_ROUTE, + { routeRefs: new Set([legacyRef1]), path: 'my-route', ...rest }, + ], + }, + ], + new Map([ + [legacyExternalRef1, legacyRef1], + [legacyExternalRef2, legacySubRef3], + ]), + '', + emptyResolver, + new Map(), + ); + + expect(r.resolve(legacyRef1, src('/'))?.()).toBe('/my-route'); + expect(r.resolve(legacyRef2, src('/'))?.({ x: '1x' })).toBe( + '/my-route/my-parent/1x', + ); + expect(r.resolve(legacySubRef1, src('/'))?.()).toBe('/my-route/foo'); + expect(r.resolve(legacySubRef2, src('/'))?.({ a: '2a' })).toBe( + '/my-route/foo/2a', + ); + expect(r.resolve(legacySubRef3, src('/'))?.({ x: '3x' })).toBe( + '/my-route/my-parent/3x/bar', + ); + expect(r.resolve(legacySubRef4, src('/'))?.({ x: '4x', a: '4a' })).toBe( + '/my-route/my-parent/4x/bar/4a', + ); + expect(r.resolve(legacyExternalRef1, src('/'))?.()).toBe('/my-route'); + expect(r.resolve(legacyExternalRef2, src('/'))?.({ x: '6x' })).toBe( + '/my-route/my-parent/6x/bar', + ); + }); + + it('should resolve the most specific match', () => { + const r = new RouteResolver( + new Map([ + [legacyRef1, 'deep'], + [legacyRef2, 'root/:x'], + [legacyRef3, 'sub/:y'], + ]), + new Map([ + [legacyRef3, legacyRef2], + [legacyRef1, legacyRef3], + ]), + [ + { + routeRefs: new Set([legacyRef2]), + path: 'root/:x', + ...rest, + children: [ + MATCH_ALL_ROUTE, + { + routeRefs: new Set([legacyRef3]), + path: 'sub/:y', + ...rest, + children: [ + MATCH_ALL_ROUTE, + { + routeRefs: new Set([legacyRef1]), + path: 'deep', + ...rest, + }, + ], + }, + ], + }, + ], + new Map(), + '', + emptyResolver, + new Map(), + ); + + expect(r.resolve(legacyRef2, src('/'))?.({ x: 'x' })).toBe('/root/x'); + expect(r.resolve(legacyRef3, src('/root/x'))?.({ y: 'y' })).toBe( + '/root/x/sub/y', + ); + + expect(() => r.resolve(legacyRef1, src('/'))?.()).toThrow( + /^Cannot route.*with parent.*as it has parameters$/, + ); + expect(() => r.resolve(legacyRef1, src('/root/x'))?.()).toThrow( + /^Cannot route.*with parent.*as it has parameters$/, + ); + expect(r.resolve(legacyRef1, src('/root/x/sub/y'))?.()).toBe( + '/root/x/sub/y/deep', + ); + // Without the MATCH_ALL_ROUTE, we wouldn't properly match the route here + expect( + r.resolve(legacyRef1, src('/root/x/sub/y/any/nested/path/here'))?.(), + ).toBe('/root/x/sub/y/deep'); + }); + }); }); diff --git a/packages/frontend-app-api/src/routing/collectRouteIds.test.ts b/packages/frontend-app-api/src/routing/collectRouteIds.test.ts index b1bab3fbbe..9575603bf4 100644 --- a/packages/frontend-app-api/src/routing/collectRouteIds.test.ts +++ b/packages/frontend-app-api/src/routing/collectRouteIds.test.ts @@ -39,10 +39,10 @@ describe('collectRouteIds', () => { const extRef = createExternalRouteRef(); expect(String(ref)).toMatch( - /^RouteRef\{created at '.*collectRouteIds\.test\.ts.*'\}$/, + /^routeRef\{id=undefined,at='.*collectRouteIds\.test\.ts.*'\}$/, ); expect(String(extRef)).toMatch( - /^ExternalRouteRef\{created at '.*collectRouteIds\.test\.ts.*'\}$/, + /^externalRouteRef\{id=undefined,at='.*collectRouteIds\.test\.ts.*'\}$/, ); const collected = collectRouteIds( @@ -62,8 +62,12 @@ describe('collectRouteIds', () => { 'test.extRef': extRef, }); - expect(String(ref)).toBe('RouteRef{test.ref}'); - expect(String(extRef)).toBe('ExternalRouteRef{test.extRef}'); + expect(String(ref)).toMatch( + /^routeRef\{id=test.ref,at='.*collectRouteIds\.test\.ts.*'\}$/, + ); + expect(String(extRef)).toMatch( + /^externalRouteRef\{id=test.extRef,at='.*collectRouteIds\.test\.ts.*'\}$/, + ); }); it('should report duplicate route IDs', () => { diff --git a/packages/frontend-app-api/src/routing/extractRouteInfoFromAppNode.test.ts b/packages/frontend-app-api/src/routing/extractRouteInfoFromAppNode.test.ts index efcc9ef18c..8375cf6d3a 100644 --- a/packages/frontend-app-api/src/routing/extractRouteInfoFromAppNode.test.ts +++ b/packages/frontend-app-api/src/routing/extractRouteInfoFromAppNode.test.ts @@ -636,7 +636,7 @@ describe('discovery', () => { }, ), ).toThrow( - /Refused to resolve alias 'other.root' for RouteRef{created at 'at .*extractRouteInfoFromAppNode\.test\.ts:\d+:\d+'} as it points to a different plugin, the expected plugin is 'test' but the alias points to 'other'/, + /Refused to resolve alias 'other.root' for routeRef{id=undefined,at='.*extractRouteInfoFromAppNode\.test\.ts:\d+:\d+'} as it points to a different plugin, the expected plugin is 'test' but the alias points to 'other'/, ); }); @@ -662,7 +662,7 @@ describe('discovery', () => { }, ), ).toThrow( - /Alias loop detected for RouteRef{created at 'at .*extractRouteInfoFromAppNode\.test\.ts:\d+:\d+'}/, + /Alias loop detected for routeRef{id=undefined,at='.*extractRouteInfoFromAppNode\.test\.ts:\d+:\d+'}/, ); }); }); diff --git a/packages/frontend-plugin-api/report.api.md b/packages/frontend-plugin-api/report.api.md index f2fe60c82a..370e86727b 100644 --- a/packages/frontend-plugin-api/report.api.md +++ b/packages/frontend-plugin-api/report.api.md @@ -625,7 +625,7 @@ export function createExternalRouteRef< } | undefined = undefined, TParamKeys extends string = string, ->(options?: { +>(config?: { readonly params?: string extends TParamKeys ? (keyof TParams)[] : TParamKeys[]; diff --git a/packages/frontend-plugin-api/src/routing/ExternalRouteRef.test.ts b/packages/frontend-plugin-api/src/routing/ExternalRouteRef.test.ts index 93b5ed727c..15366c8a7a 100644 --- a/packages/frontend-plugin-api/src/routing/ExternalRouteRef.test.ts +++ b/packages/frontend-plugin-api/src/routing/ExternalRouteRef.test.ts @@ -25,10 +25,12 @@ describe('ExternalRouteRef', () => { expect(internal.getParams()).toEqual([]); expect(String(internal)).toMatch( - /^ExternalRouteRef\{created at '.*ExternalRouteRef\.test\.ts.*'\}$/, + /^externalRouteRef\{id=undefined,at='.*ExternalRouteRef\.test\.ts.*'\}$/, ); internal.setId('some-id'); - expect(String(internal)).toBe('ExternalRouteRef{some-id}'); + expect(String(internal)).toMatch( + /^externalRouteRef\{id=some-id,at='.*ExternalRouteRef\.test\.ts.*'\}$/, + ); }); it('should be created with params', () => { diff --git a/packages/frontend-plugin-api/src/routing/RouteRef.test.ts b/packages/frontend-plugin-api/src/routing/RouteRef.test.ts index f7b8e1b450..1bd546f821 100644 --- a/packages/frontend-plugin-api/src/routing/RouteRef.test.ts +++ b/packages/frontend-plugin-api/src/routing/RouteRef.test.ts @@ -27,7 +27,7 @@ describe('RouteRef', () => { expect(internal.getDescription()).toMatch(/RouteRef\.test\.ts/); expect(String(internal)).toMatch( - /^RouteRef\{created at .*RouteRef\.test\.ts.*\}$/, + /^routeRef\{id=undefined,at='.*RouteRef\.test\.ts.*'\}$/, ); expect(() => internal.setId('')).toThrow( @@ -35,7 +35,9 @@ describe('RouteRef', () => { ); internal.setId('some-id'); - expect(String(internal)).toBe('RouteRef{some-id}'); + expect(String(internal)).toMatch( + /^routeRef\{id=some-id,at='.*RouteRef\.test\.ts.*'\}$/, + ); internal.setId('some-id'); // Should allow same ID expect(() => internal.setId('some-other-id')).toThrow( diff --git a/packages/frontend-plugin-api/src/routing/SubRouteRef.test.ts b/packages/frontend-plugin-api/src/routing/SubRouteRef.test.ts index cd0b033d98..4746600f40 100644 --- a/packages/frontend-plugin-api/src/routing/SubRouteRef.test.ts +++ b/packages/frontend-plugin-api/src/routing/SubRouteRef.test.ts @@ -35,10 +35,12 @@ describe('SubRouteRef', () => { expect(internal.getParent()).toBe(internalParent); expect(internal.getParams()).toEqual([]); expect(String(internal)).toMatch( - /SubRouteRef\{at \/foo with parent created at '.*SubRouteRef\.test\.ts.*'\}/, + /^subRouteRef\{path='\/foo',parent=routeRef\{id=undefined,at='.*SubRouteRef\.test\.ts.*'\}\}$/, ); internalParent.setId('some-id'); - expect(String(internal)).toBe('SubRouteRef{at /foo with parent some-id}'); + expect(String(internal)).toMatch( + /^subRouteRef\{path='\/foo',parent=routeRef\{id=some-id,at='.*SubRouteRef\.test\.ts.*'\}\}$/, + ); }); it('should be created with params', () => { diff --git a/yarn.lock b/yarn.lock index 30725b6909..68357ca1da 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3641,6 +3641,7 @@ __metadata: "@backstage/config": "workspace:^" "@backstage/core-app-api": "workspace:^" "@backstage/errors": "workspace:^" + "@backstage/frontend-plugin-api": "workspace:^" "@backstage/test-utils": "workspace:^" "@backstage/types": "workspace:^" "@backstage/version-bridge": "workspace:^" @@ -3653,6 +3654,7 @@ __metadata: react: "npm:^18.0.2" react-dom: "npm:^18.0.2" react-router-dom: "npm:^6.3.0" + zod: "npm:^3.22.4" peerDependencies: "@types/react": ^17.0.0 || ^18.0.0 react: ^17.0.0 || ^18.0.0 From 92319b17e8c8db5c8ebc0b954581b8be17e64365 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Tue, 18 Nov 2025 10:26:53 +0100 Subject: [PATCH 56/73] bump glob MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- yarn.lock | 137 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 71 insertions(+), 66 deletions(-) diff --git a/yarn.lock b/yarn.lock index 30725b6909..680c967766 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11672,13 +11672,13 @@ __metadata: languageName: node linkType: hard -"@nestjs/common@npm:11.1.6": - version: 11.1.6 - resolution: "@nestjs/common@npm:11.1.6" +"@nestjs/common@npm:11.1.9": + version: 11.1.9 + resolution: "@nestjs/common@npm:11.1.9" dependencies: - file-type: "npm:21.0.0" + file-type: "npm:21.1.0" iterare: "npm:1.2.1" - load-esm: "npm:1.0.2" + load-esm: "npm:1.0.3" tslib: "npm:2.8.1" uid: "npm:2.0.2" peerDependencies: @@ -11691,18 +11691,18 @@ __metadata: optional: true class-validator: optional: true - checksum: 10/bb8a8f040ecaad5ea4938d166afa5e077060372001def3694999bdd8695dd6d69845c4569ade94aecb4f6b625198d3e848270ecc29be7ba5d73aefe5edd76984 + checksum: 10/996a13749f9ade78202b49421e64edf81be9df65b1b1bb4149d2adb8cbdbdf7033deafc2b89b8123ea0b647ea13d325a2aed4efa19b5b59a1e8d01dd4e554a76 languageName: node linkType: hard -"@nestjs/core@npm:11.1.6": - version: 11.1.6 - resolution: "@nestjs/core@npm:11.1.6" +"@nestjs/core@npm:11.1.9": + version: 11.1.9 + resolution: "@nestjs/core@npm:11.1.9" dependencies: "@nuxt/opencollective": "npm:0.4.1" fast-safe-stringify: "npm:2.1.1" iterare: "npm:1.2.1" - path-to-regexp: "npm:8.2.0" + path-to-regexp: "npm:8.3.0" tslib: "npm:2.8.1" uid: "npm:2.0.2" peerDependencies: @@ -11719,7 +11719,7 @@ __metadata: optional: true "@nestjs/websockets": optional: true - checksum: 10/d38c32eea96f9a475907e352b1f9f0441bf1bd4de2fa479836930e9670072deb1c1986253da324eb85bbcb884515d90ad2f10e88e49e491ac888b6893cc1faf3 + checksum: 10/2adc7440898574fc3715e0a5ea2a4faeae52bd13431a449645963d9aff0c06ac748cf2e439af29736406154634d033d0795b06069cc9cc9114ee29b167578b9d languageName: node linkType: hard @@ -12747,21 +12747,21 @@ __metadata: linkType: hard "@openapitools/openapi-generator-cli@npm:^2.4.26, @openapitools/openapi-generator-cli@npm:^2.7.0": - version: 2.25.0 - resolution: "@openapitools/openapi-generator-cli@npm:2.25.0" + version: 2.25.1 + resolution: "@openapitools/openapi-generator-cli@npm:2.25.1" dependencies: "@nestjs/axios": "npm:4.0.1" - "@nestjs/common": "npm:11.1.6" - "@nestjs/core": "npm:11.1.6" + "@nestjs/common": "npm:11.1.9" + "@nestjs/core": "npm:11.1.9" "@nuxtjs/opencollective": "npm:0.3.2" - axios: "npm:1.12.2" + axios: "npm:1.13.2" chalk: "npm:4.1.2" commander: "npm:8.3.0" compare-versions: "npm:6.1.1" concurrently: "npm:9.2.1" console.table: "npm:0.10.0" fs-extra: "npm:11.3.2" - glob: "npm:11.0.3" + glob: "npm:12.0.0" inquirer: "npm:8.2.7" proxy-agent: "npm:6.5.0" reflect-metadata: "npm:0.2.2" @@ -12769,7 +12769,7 @@ __metadata: tslib: "npm:2.8.1" bin: openapi-generator-cli: main.js - checksum: 10/6456debc95accaded1a85517634fc9cc61bd517ebe45d45f6a138de8d1fe11e100ec5a09c1e3607acb7469398625169fe52035550f8e32e61893cd9c537b402c + checksum: 10/4c414eb359de26c0b10e8cbec101298cfa1cc2745a36b982b95bb970a8260c3557fa0b2aa116fa5cb36e4b2e5146b81d7a75a2e5da71f1d529038304a02b59fc languageName: node linkType: hard @@ -20060,14 +20060,14 @@ __metadata: languageName: node linkType: hard -"@tokenizer/inflate@npm:^0.2.7": - version: 0.2.7 - resolution: "@tokenizer/inflate@npm:0.2.7" +"@tokenizer/inflate@npm:^0.3.1": + version: 0.3.1 + resolution: "@tokenizer/inflate@npm:0.3.1" dependencies: - debug: "npm:^4.4.0" + debug: "npm:^4.4.1" fflate: "npm:^0.8.2" token-types: "npm:^6.0.0" - checksum: 10/6cee1857e47ca0fc053d6cd87773b7c21857ab84cb847c7d9437a76d923e265c88f8e99a4ac9643c2f989f4b9791259ca17128f0480191449e2b412821a1b9a7 + checksum: 10/a505d1b43b1a6c0ce0aacc681558daad4fc2f595a938dcd23c99cf3d6845189c7e5bd8f1785253675bd73ff45df8b47beeeab96197d30ff578d81029ff923103 languageName: node linkType: hard @@ -24865,18 +24865,7 @@ __metadata: languageName: node linkType: hard -"axios@npm:1.12.2": - version: 1.12.2 - resolution: "axios@npm:1.12.2" - dependencies: - follow-redirects: "npm:^1.15.6" - form-data: "npm:^4.0.4" - proxy-from-env: "npm:^1.1.0" - checksum: 10/886a79770594eaad76493fecf90344b567bd956240609b5dcd09bd0afe8d3e6f1ad6d3257a93a483b6192b409d4b673d9515a34619e3e3ed1b2c0ec2a83b20ba - languageName: node - linkType: hard - -"axios@npm:^1.0.0, axios@npm:^1.11.0, axios@npm:^1.13.0, axios@npm:^1.7.4, axios@npm:^1.9.0": +"axios@npm:1.13.2, axios@npm:^1.0.0, axios@npm:^1.11.0, axios@npm:^1.13.0, axios@npm:^1.7.4, axios@npm:^1.9.0": version: 1.13.2 resolution: "axios@npm:1.13.2" dependencies: @@ -28074,7 +28063,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:4, debug@npm:^4, debug@npm:^4.0.0, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4, debug@npm:^4.3.5, debug@npm:^4.3.6, debug@npm:^4.3.7, debug@npm:^4.4.0": +"debug@npm:4, debug@npm:^4, debug@npm:^4.0.0, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4, debug@npm:^4.3.5, debug@npm:^4.3.6, debug@npm:^4.3.7, debug@npm:^4.4.0, debug@npm:^4.4.1": version: 4.4.3 resolution: "debug@npm:4.4.3" dependencies: @@ -31115,15 +31104,15 @@ __metadata: languageName: node linkType: hard -"file-type@npm:21.0.0": - version: 21.0.0 - resolution: "file-type@npm:21.0.0" +"file-type@npm:21.1.0": + version: 21.1.0 + resolution: "file-type@npm:21.1.0" dependencies: - "@tokenizer/inflate": "npm:^0.2.7" - strtok3: "npm:^10.2.2" + "@tokenizer/inflate": "npm:^0.3.1" + strtok3: "npm:^10.3.1" token-types: "npm:^6.0.0" uint8array-extras: "npm:^1.4.0" - checksum: 10/6980e8b0ef870a98b51ab2eac5db94a1884de8476fe49dc02d2f7e0c1d1d7d44d42b6c59e67867ae90f321ddf4edd00fcfda01821591e2fa05385d0e438a9dc1 + checksum: 10/951d1e224c643e961c2b51fce236526b9a4789ea59fee53da3bdf5d29de8cc58ffa4b4601f83739fd0df22324108eb4b55f2b7cefbe93489e554a9e5de95ce3f languageName: node linkType: hard @@ -32209,25 +32198,25 @@ __metadata: languageName: node linkType: hard -"glob@npm:11.0.3, glob@npm:^11.0.1": - version: 11.0.3 - resolution: "glob@npm:11.0.3" +"glob@npm:12.0.0": + version: 12.0.0 + resolution: "glob@npm:12.0.0" dependencies: foreground-child: "npm:^3.3.1" jackspeak: "npm:^4.1.1" - minimatch: "npm:^10.0.3" + minimatch: "npm:^10.1.1" minipass: "npm:^7.1.2" package-json-from-dist: "npm:^1.0.0" path-scurry: "npm:^2.0.0" bin: glob: dist/esm/bin.mjs - checksum: 10/2ae536c1360c0266b523b2bfa6aadc10144a8b7e08869b088e37ac3c27cd30774f82e4bfb291cde796776e878f9e13200c7ff44010eb7054e00f46f649397893 + checksum: 10/6e21b3f1f1fa635836d45e54bbe50704884cc3e310e0cc011cfb5429db65a030e12936d99b07e66236370efe45dc8c8b26fa5334dbf555d6f8709e0315c77c30 languageName: node linkType: hard "glob@npm:^10.0.0, glob@npm:^10.2.2, glob@npm:^10.3.10, glob@npm:^10.3.7, glob@npm:^10.4.1": - version: 10.4.5 - resolution: "glob@npm:10.4.5" + version: 10.5.0 + resolution: "glob@npm:10.5.0" dependencies: foreground-child: "npm:^3.1.0" jackspeak: "npm:^3.1.2" @@ -32237,7 +32226,23 @@ __metadata: path-scurry: "npm:^1.11.1" bin: glob: dist/esm/bin.mjs - checksum: 10/698dfe11828b7efd0514cd11e573eaed26b2dff611f0400907281ce3eab0c1e56143ef9b35adc7c77ecc71fba74717b510c7c223d34ca8a98ec81777b293d4ac + checksum: 10/ab3bccfefcc0afaedbd1f480cd0c4a2c0e322eb3f0aa7ceaa31b3f00b825069f17cf0f1fc8b6f256795074b903f37c0ade37ddda6a176aa57f1c2bbfe7240653 + languageName: node + linkType: hard + +"glob@npm:^11.0.1": + version: 11.1.0 + resolution: "glob@npm:11.1.0" + dependencies: + foreground-child: "npm:^3.3.1" + jackspeak: "npm:^4.1.1" + minimatch: "npm:^10.1.1" + minipass: "npm:^7.1.2" + package-json-from-dist: "npm:^1.0.0" + path-scurry: "npm:^2.0.0" + bin: + glob: dist/esm/bin.mjs + checksum: 10/da4501819633daff8822c007bb3f93d5c4d2cbc7b15a8e886660f4497dd251a1fb4f53a85fba1e760b31704eff7164aeb2c7a82db10f9f2c362d12c02fe52cf3 languageName: node linkType: hard @@ -36750,10 +36755,10 @@ __metadata: languageName: node linkType: hard -"load-esm@npm:1.0.2": - version: 1.0.2 - resolution: "load-esm@npm:1.0.2" - checksum: 10/1b4adb40c28c6fdbd4ca8c97942c04debddb3c93ae91413540ff5a21ca3511a651988c835cb80cad7288d1ecb869c4794b8a787ab02e09cc07ec951ad1eefcf9 +"load-esm@npm:1.0.3": + version: 1.0.3 + resolution: "load-esm@npm:1.0.3" + checksum: 10/6949e8c253dddccca2a0ded1e9e0bbbc81924439d99e3a7d0f946ba6cdcd16de22c3cef28d997fd950befda0826ca65c3f913d9ba893d50e9cfc0bbd9a2a1e90 languageName: node linkType: hard @@ -38600,12 +38605,12 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^10.0.3": - version: 10.0.3 - resolution: "minimatch@npm:10.0.3" +"minimatch@npm:^10.1.1": + version: 10.1.1 + resolution: "minimatch@npm:10.1.1" dependencies: "@isaacs/brace-expansion": "npm:^5.0.0" - checksum: 10/d5b8b2538b367f2cfd4aeef27539fddeee58d1efb692102b848e4a968a09780a302c530eb5aacfa8c57f7299155fb4b4e85219ad82664dcef5c66f657111d9b8 + checksum: 10/110f38921ea527022e90f7a5f43721838ac740d0a0c26881c03b57c261354fb9a0430e40b2c56dfcea2ef3c773768f27210d1106f1f2be19cde3eea93f26f45e languageName: node linkType: hard @@ -41244,10 +41249,10 @@ __metadata: languageName: node linkType: hard -"path-to-regexp@npm:8.2.0, path-to-regexp@npm:^8.0.0, path-to-regexp@npm:^8.1.0, path-to-regexp@npm:^8.2.0": - version: 8.2.0 - resolution: "path-to-regexp@npm:8.2.0" - checksum: 10/23378276a172b8ba5f5fb824475d1818ca5ccee7bbdb4674701616470f23a14e536c1db11da9c9e6d82b82c556a817bbf4eee6e41b9ed20090ef9427cbb38e13 +"path-to-regexp@npm:8.3.0, path-to-regexp@npm:^8.0.0, path-to-regexp@npm:^8.1.0, path-to-regexp@npm:^8.2.0": + version: 8.3.0 + resolution: "path-to-regexp@npm:8.3.0" + checksum: 10/568f148fc64f5fd1ecebf44d531383b28df924214eabf5f2570dce9587a228e36c37882805ff02d71c6209b080ea3ee6a4d2b712b5df09741b67f1f3cf91e55a languageName: node linkType: hard @@ -46809,12 +46814,12 @@ __metadata: languageName: node linkType: hard -"strtok3@npm:^10.2.2": - version: 10.3.1 - resolution: "strtok3@npm:10.3.1" +"strtok3@npm:^10.3.1": + version: 10.3.4 + resolution: "strtok3@npm:10.3.4" dependencies: "@tokenizer/token": "npm:^0.3.0" - checksum: 10/bb7950cc9ce98ec742a5db360630f0b004f16197959ae28d8c8dad4f8f0e405d71cfdc992483038ba29a0b4cbd7227618ad2492005b510d84a3fc5903df0c13f + checksum: 10/53be14a567dca149be56cb072eaa3c0fffd70d066acf800cf588b91558c6d475364ff8d550524ce0499fc4873a4b0d42ad8c542bfdb9fb39cba520ef2e2e9818 languageName: node linkType: hard From b4fcbbcb6e494244c4e0de574e12532a9ef26de5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 18 Nov 2025 09:52:56 +0000 Subject: [PATCH 57/73] chore(deps): update dependency js-yaml to v4.1.1 [security] Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- microsite/yarn.lock | 19 +++++++++++++++---- yarn.lock | 19 +++++++++++++++---- 2 files changed, 30 insertions(+), 8 deletions(-) diff --git a/microsite/yarn.lock b/microsite/yarn.lock index 20c3f39fbd..36f03d8db8 100644 --- a/microsite/yarn.lock +++ b/microsite/yarn.lock @@ -8508,7 +8508,7 @@ __metadata: languageName: node linkType: hard -"js-yaml@npm:4.1.0, js-yaml@npm:^4.1.0": +"js-yaml@npm:4.1.0": version: 4.1.0 resolution: "js-yaml@npm:4.1.0" dependencies: @@ -8520,14 +8520,25 @@ __metadata: linkType: hard "js-yaml@npm:^3.13.1": - version: 3.14.1 - resolution: "js-yaml@npm:3.14.1" + version: 3.14.2 + resolution: "js-yaml@npm:3.14.2" dependencies: argparse: "npm:^1.0.7" esprima: "npm:^4.0.0" bin: js-yaml: bin/js-yaml.js - checksum: 10/9e22d80b4d0105b9899135365f746d47466ed53ef4223c529b3c0f7a39907743fdbd3c4379f94f1106f02755b5e90b2faaf84801a891135544e1ea475d1a1379 + checksum: 10/172e0b6007b0bf0fc8d2469c94424f7dd765c64a047d2b790831fecef2204a4054eabf4d911eb73ab8c9a3256ab8ba1ee8d655b789bf24bf059c772acc2075a1 + languageName: node + linkType: hard + +"js-yaml@npm:^4.1.0": + version: 4.1.1 + resolution: "js-yaml@npm:4.1.1" + dependencies: + argparse: "npm:^2.0.1" + bin: + js-yaml: bin/js-yaml.js + checksum: 10/a52d0519f0f4ef5b4adc1cde466cb54c50d56e2b4a983b9d5c9c0f2f99462047007a6274d7e95617a21d3c91fde3ee6115536ed70991cd645ba8521058b78f77 languageName: node linkType: hard diff --git a/yarn.lock b/yarn.lock index 30725b6909..995347dfe1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -35532,7 +35532,7 @@ __metadata: languageName: node linkType: hard -"js-yaml@npm:=4.1.0, js-yaml@npm:^4.0.0, js-yaml@npm:^4.1.0": +"js-yaml@npm:=4.1.0": version: 4.1.0 resolution: "js-yaml@npm:4.1.0" dependencies: @@ -35544,14 +35544,25 @@ __metadata: linkType: hard "js-yaml@npm:^3.10.0, js-yaml@npm:^3.13.0, js-yaml@npm:^3.13.1, js-yaml@npm:^3.6.1, js-yaml@npm:^3.8.3": - version: 3.14.1 - resolution: "js-yaml@npm:3.14.1" + version: 3.14.2 + resolution: "js-yaml@npm:3.14.2" dependencies: argparse: "npm:^1.0.7" esprima: "npm:^4.0.0" bin: js-yaml: bin/js-yaml.js - checksum: 10/9e22d80b4d0105b9899135365f746d47466ed53ef4223c529b3c0f7a39907743fdbd3c4379f94f1106f02755b5e90b2faaf84801a891135544e1ea475d1a1379 + checksum: 10/172e0b6007b0bf0fc8d2469c94424f7dd765c64a047d2b790831fecef2204a4054eabf4d911eb73ab8c9a3256ab8ba1ee8d655b789bf24bf059c772acc2075a1 + languageName: node + linkType: hard + +"js-yaml@npm:^4.0.0, js-yaml@npm:^4.1.0": + version: 4.1.1 + resolution: "js-yaml@npm:4.1.1" + dependencies: + argparse: "npm:^2.0.1" + bin: + js-yaml: bin/js-yaml.js + checksum: 10/a52d0519f0f4ef5b4adc1cde466cb54c50d56e2b4a983b9d5c9c0f2f99462047007a6274d7e95617a21d3c91fde3ee6115536ed70991cd645ba8521058b78f77 languageName: node linkType: hard From debf9ea34f0874d5decb9b828189f842032d5fff Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Tue, 18 Nov 2025 11:02:00 +0100 Subject: [PATCH 58/73] catalog: add note about route ref conversion Signed-off-by: Patrik Oldsberg --- plugins/catalog/src/alpha/pages.tsx | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/plugins/catalog/src/alpha/pages.tsx b/plugins/catalog/src/alpha/pages.tsx index e4e1a78151..9d4e3b4bac 100644 --- a/plugins/catalog/src/alpha/pages.tsx +++ b/plugins/catalog/src/alpha/pages.tsx @@ -108,7 +108,13 @@ export const catalogEntityPage = PageBlueprint.makeWithOverrides({ factory(originalFactory, { config, inputs }) { return originalFactory({ path: '/catalog/:namespace/:kind/:name', - routeRef: convertLegacyRouteRef(entityRouteRef), + // NOTE: The `convertLegacyRouteRef` call here ensures that this route ref + // is mutated to support the new frontend system. Removing this conversion + // is a potentially breaking change since this is a singleton and the + // route refs from `core-plugin-api` used to not support the new format. + // This shouldn't be removed until we completely deprecate the + // `core-compat-api` package. + routeRef: convertLegacyRouteRef(entityRouteRef), // READ THE ABOVE loader: async () => { const { EntityLayout } = await import('./components/EntityLayout'); From 986bf8f3aa71c9f1fdf2504913a192d307667ef1 Mon Sep 17 00:00:00 2001 From: benjdlambert Date: Tue, 18 Nov 2025 11:03:39 +0100 Subject: [PATCH 59/73] feat: set state column to text instead of varchar Signed-off-by: benjdlambert --- .../20251118120000_oauth_state_text.js | 35 ++++++++++++ plugins/auth-backend/src/migrations.test.ts | 55 +++++++++++++++++++ 2 files changed, 90 insertions(+) create mode 100644 plugins/auth-backend/migrations/20251118120000_oauth_state_text.js diff --git a/plugins/auth-backend/migrations/20251118120000_oauth_state_text.js b/plugins/auth-backend/migrations/20251118120000_oauth_state_text.js new file mode 100644 index 0000000000..f082b8b9f0 --- /dev/null +++ b/plugins/auth-backend/migrations/20251118120000_oauth_state_text.js @@ -0,0 +1,35 @@ +/* + * Copyright 2025 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// @ts-check + +/** + * @param {import('knex').Knex} knex + */ +exports.up = async function up(knex) { + await knex.schema.alterTable('oauth_authorization_sessions', table => { + table.text('state').nullable().alter(); + }); +}; + +/** + * @param {import('knex').Knex} knex + */ +exports.down = async function down(knex) { + await knex.schema.alterTable('oauth_authorization_sessions', table => { + table.string('state').nullable().alter(); + }); +}; diff --git a/plugins/auth-backend/src/migrations.test.ts b/plugins/auth-backend/src/migrations.test.ts index df7063351a..89def54b71 100644 --- a/plugins/auth-backend/src/migrations.test.ts +++ b/plugins/auth-backend/src/migrations.test.ts @@ -304,4 +304,59 @@ describe('migrations', () => { await knex.destroy(); }, ); + + it.each(databases.eachSupportedId())( + '20251118120000_oauth_state_text.js, %p', + async databaseId => { + const knex = await databases.init(databaseId); + + await migrateUntilBefore(knex, '20251118120000_oauth_state_text.js'); + + // First create a client for the foreign key constraint + await knex + .insert({ + client_id: 'test-client-id', + client_secret: 'test-client-secret', + client_name: 'Test Client', + response_types: JSON.stringify(['code']), + grant_types: JSON.stringify(['authorization_code']), + redirect_uris: JSON.stringify(['https://example.com/callback']), + }) + .into('oidc_clients'); + + // Apply the migration that changes state to TEXT + await migrateUpOnce(knex); + + // Test inserting a state parameter longer than 255 characters + // This is based on the real-world example from the issue + const longState = 'a'.repeat(280); + + await knex + .insert({ + id: 'test-long-state-session', + client_id: 'test-client-id', + redirect_uri: 'https://example.com/callback', + state: longState, + response_type: 'code', + status: 'pending', + expires_at: new Date(Date.now() + 3600000), + }) + .into('oauth_authorization_sessions'); + + await expect( + knex('oauth_authorization_sessions') + .where('id', 'test-long-state-session') + .first(), + ).resolves.toEqual( + expect.objectContaining({ + id: 'test-long-state-session', + state: longState, + }), + ); + + await migrateDownOnce(knex); + + await knex.destroy(); + }, + ); }); From a9315d0f77b2d1cb7b41178bec692a48ca90ff0b Mon Sep 17 00:00:00 2001 From: benjdlambert Date: Tue, 18 Nov 2025 11:04:45 +0100 Subject: [PATCH 60/73] chore: add changeset Signed-off-by: benjdlambert --- .changeset/tiny-chefs-visit.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/tiny-chefs-visit.md diff --git a/.changeset/tiny-chefs-visit.md b/.changeset/tiny-chefs-visit.md new file mode 100644 index 0000000000..2a17de343e --- /dev/null +++ b/.changeset/tiny-chefs-visit.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-auth-backend': patch +--- + +Change internal `state` column to `text` to support state of over 255 characters From eb279cbe7b18b44a9c5c00bad796cfd12bb82fe5 Mon Sep 17 00:00:00 2001 From: benjdlambert Date: Tue, 18 Nov 2025 11:12:37 +0100 Subject: [PATCH 61/73] chore: codereview comments Signed-off-by: benjdlambert --- .../20251118120000_oauth_state_text.js | 2 +- plugins/auth-backend/src/migrations.test.ts | 26 +++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/plugins/auth-backend/migrations/20251118120000_oauth_state_text.js b/plugins/auth-backend/migrations/20251118120000_oauth_state_text.js index f082b8b9f0..3dbef647d4 100644 --- a/plugins/auth-backend/migrations/20251118120000_oauth_state_text.js +++ b/plugins/auth-backend/migrations/20251118120000_oauth_state_text.js @@ -21,7 +21,7 @@ */ exports.up = async function up(knex) { await knex.schema.alterTable('oauth_authorization_sessions', table => { - table.text('state').nullable().alter(); + table.text('state', 'longtext').nullable().alter(); }); }; diff --git a/plugins/auth-backend/src/migrations.test.ts b/plugins/auth-backend/src/migrations.test.ts index 89def54b71..1f6a3a5dc9 100644 --- a/plugins/auth-backend/src/migrations.test.ts +++ b/plugins/auth-backend/src/migrations.test.ts @@ -324,9 +324,35 @@ describe('migrations', () => { }) .into('oidc_clients'); + // Insert a session with state before migration + const existingState = 'existing-short-state'; + await knex + .insert({ + id: 'test-existing-session', + client_id: 'test-client-id', + redirect_uri: 'https://example.com/callback', + state: existingState, + response_type: 'code', + status: 'pending', + expires_at: new Date(Date.now() + 3600000), + }) + .into('oauth_authorization_sessions'); + // Apply the migration that changes state to TEXT await migrateUpOnce(knex); + // Verify existing state persists after migration + await expect( + knex('oauth_authorization_sessions') + .where('id', 'test-existing-session') + .first(), + ).resolves.toEqual( + expect.objectContaining({ + id: 'test-existing-session', + state: existingState, + }), + ); + // Test inserting a state parameter longer than 255 characters // This is based on the real-world example from the issue const longState = 'a'.repeat(280); From 064471c87fa7fe99b2f58b40048651abe1390356 Mon Sep 17 00:00:00 2001 From: benjdlambert Date: Tue, 18 Nov 2025 11:32:15 +0100 Subject: [PATCH 62/73] chore: update sql reports Signed-off-by: benjdlambert --- plugins/auth-backend/report.sql.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/auth-backend/report.sql.md b/plugins/auth-backend/report.sql.md index 7622a5750e..c2fa13c743 100644 --- a/plugins/auth-backend/report.sql.md +++ b/plugins/auth-backend/report.sql.md @@ -18,7 +18,7 @@ | `redirect_uri` | `text` | false | - | - | | `response_type` | `character varying` | false | 255 | - | | `scope` | `text` | true | - | - | -| `state` | `character varying` | true | 255 | - | +| `state` | `text` | true | - | - | | `status` | `text` | true | - | `'pending'::text` | | `user_entity_ref` | `character varying` | true | 255 | - | From 229f63ef2e9351dba16f987a0aef2e5532f1a1ec Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Tue, 18 Nov 2025 11:58:56 +0100 Subject: [PATCH 63/73] gateway-backend: add loop detection Signed-off-by: Patrik Oldsberg --- .changeset/modern-actors-warn.md | 5 +++++ plugins/gateway-backend/src/plugin.test.ts | 15 ++++++++++++++ plugins/gateway-backend/src/router.ts | 24 ++++++++++++++++++++++ 3 files changed, 44 insertions(+) create mode 100644 .changeset/modern-actors-warn.md diff --git a/.changeset/modern-actors-warn.md b/.changeset/modern-actors-warn.md new file mode 100644 index 0000000000..1654201c3a --- /dev/null +++ b/.changeset/modern-actors-warn.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-gateway-backend': minor +--- + +Added hop count tracking to prevent proxy loops. The gateway now tracks the number of proxy hops using the `backstage-gateway-hops` header and rejects requests that exceed 3 hops with a 508 Loop Detected error. diff --git a/plugins/gateway-backend/src/plugin.test.ts b/plugins/gateway-backend/src/plugin.test.ts index 078fde044e..b7619e3dfc 100644 --- a/plugins/gateway-backend/src/plugin.test.ts +++ b/plugins/gateway-backend/src/plugin.test.ts @@ -161,6 +161,21 @@ describe('gateway', () => { expect(data).toEqual({ bar: true }); }); + it('should detect looped requests', async () => { + const response = await fetch( + 'http://localhost:7777/api/nonexistent-plugin/foo', + ); + expect(response.status).toBe(508); + + const data = await response.json(); + expect(data).toEqual({ + error: { + name: 'LoopDetectedError', + message: 'Maximum proxy hop count exceeded (3)', + }, + }); + }); + it('should close the response for sse connections', async () => { const eventSource = new EventSource( 'http://localhost:7777/api/external-plugin/endpoint-sse', diff --git a/plugins/gateway-backend/src/router.ts b/plugins/gateway-backend/src/router.ts index 8263fb27ab..f04bd3ee58 100644 --- a/plugins/gateway-backend/src/router.ts +++ b/plugins/gateway-backend/src/router.ts @@ -23,9 +23,13 @@ import { createProxyMiddleware } from 'http-proxy-middleware'; import { context } from '@opentelemetry/api'; import { getRPCMetadata } from '@opentelemetry/core'; +const MAX_HOPS = 3; +const HOPS_HEADER = 'backstage-gateway-hops'; + export async function createRouter({ discovery, instanceMeta, + logger, }: { discovery: DiscoveryService; instanceMeta: RootInstanceMetadataService; @@ -41,6 +45,12 @@ export async function createRouter({ return discovery.getBaseUrl(pluginId); }, on: { + proxyReq(proxyReq, req: Request<{ pluginId: string }>) { + const currentHops = + parseInt(req.headers[HOPS_HEADER] as string, 10) || 0; + + proxyReq.setHeader(HOPS_HEADER, currentHops + 1); + }, proxyRes(proxyRes, _req, res) { // https://github.com/chimurai/http-proxy-middleware/discussions/765 proxyRes.on('close', () => { @@ -62,6 +72,20 @@ export async function createRouter({ return; } + const currentHops = parseInt(req.headers[HOPS_HEADER] as string, 10) || 0; + if (currentHops >= MAX_HOPS) { + logger.warn( + `Proxy loop detected for plugin '${req.params.pluginId}': request exceeded maximum hop count (${currentHops})`, + ); + res.status(508).json({ + error: { + name: 'LoopDetectedError', + message: `Maximum proxy hop count exceeded (${currentHops})`, + }, + }); + return; + } + const rpcMetadata = getRPCMetadata(context.active()); if (rpcMetadata) { rpcMetadata.route = req.baseUrl; From 3511ba4431ccf948ee91d29317d7cb41868b7f20 Mon Sep 17 00:00:00 2001 From: benjdlambert Date: Tue, 18 Nov 2025 12:29:24 +0100 Subject: [PATCH 64/73] chore: fix down migration Signed-off-by: benjdlambert --- .../migrations/20251118120000_oauth_state_text.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/plugins/auth-backend/migrations/20251118120000_oauth_state_text.js b/plugins/auth-backend/migrations/20251118120000_oauth_state_text.js index 3dbef647d4..41e128ec20 100644 --- a/plugins/auth-backend/migrations/20251118120000_oauth_state_text.js +++ b/plugins/auth-backend/migrations/20251118120000_oauth_state_text.js @@ -29,6 +29,12 @@ exports.up = async function up(knex) { * @param {import('knex').Knex} knex */ exports.down = async function down(knex) { + // Delete sessions with state > 255 chars since they won't fit in varchar(255) + // These sessions would be unusable with truncated state anyway + await knex('oauth_authorization_sessions') + .whereRaw('LENGTH(state) > 255') + .delete(); + await knex.schema.alterTable('oauth_authorization_sessions', table => { table.string('state').nullable().alter(); }); From 792f4d7e3d49d63ce5c455c51cdc91df688ebd48 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 18 Nov 2025 12:23:09 +0000 Subject: [PATCH 65/73] Version Packages --- .changeset/afraid-trees-show.md | 5 - .changeset/all-camels-agree.md | 5 - .changeset/all-parrots-change.md | 5 - .changeset/better-hats-cross.md | 5 - .changeset/better-steaks-act.md | 5 - .changeset/breezy-times-ring.md | 5 - .changeset/bright-ears-send.md | 5 - .changeset/busy-goats-create.md | 10 - .changeset/busy-goats-kiss.md | 7 - .changeset/clever-boats-clap.md | 8 - .changeset/create-app-1761312116.md | 5 - .changeset/create-app-1762897504.md | 5 - .changeset/cruel-items-dig.md | 27 - .changeset/cruel-plums-talk.md | 58 - .changeset/deep-gifts-slide.md | 5 - .changeset/early-berries-bet.md | 5 - .changeset/easy-hands-grow.md | 6 - .changeset/eighty-mails-leave.md | 5 - .changeset/eighty-results-prove.md | 5 - .changeset/eleven-carpets-win.md | 5 - .changeset/eleven-lights-taste.md | 5 - .changeset/every-ants-count.md | 7 - .changeset/every-breads-act.md | 18 - .changeset/every-clocks-arrive.md | 5 - .changeset/fancy-years-camp.md | 9 - .changeset/fast-tables-sink.md | 5 - .changeset/fast-tools-mate.md | 10 - .changeset/fine-hands-return.md | 5 - .changeset/five-seas-jam.md | 5 - .changeset/fix-text-truncate-prop.md | 5 - .changeset/flat-paws-do.md | 5 - .changeset/fruity-snails-laugh.md | 5 - .changeset/funny-stars-open.md | 5 - .changeset/gentle-bikes-relax.md | 5 - .changeset/giant-lamps-happen.md | 5 - .changeset/grumpy-planes-bet.md | 5 - .changeset/heavy-cars-wash.md | 70 - .changeset/honest-lamps-occur.md | 5 - .changeset/honest-pandas-win.md | 5 - .changeset/huge-taxis-grab.md | 5 - .changeset/itchy-bars-smell.md | 5 - .changeset/legal-weeks-walk.md | 5 - .changeset/lemon-spies-sleep.md | 5 - .changeset/little-dingos-study.md | 14 - .changeset/long-humans-sink.md | 5 - .changeset/long-impalas-burn.md | 5 - .changeset/loud-carpets-throw.md | 5 - .changeset/lucky-parrots-yell.md | 5 - .changeset/modern-actors-warn.md | 5 - .changeset/moody-plums-add.md | 5 - .changeset/ninety-cobras-feel.md | 5 - .changeset/odd-states-melt.md | 5 - .changeset/open-cloths-listen.md | 5 - .changeset/open-items-open.md | 5 - .changeset/plenty-spiders-lead.md | 5 - .changeset/plugin-relative-extensions.md | 17 - .changeset/polite-eggs-dance.md | 5 - .changeset/polite-seas-divide.md | 5 - .changeset/pre.json | 293 -- .changeset/pretty-kids-allow.md | 5 - .changeset/purple-deer-bet.md | 5 - .changeset/purple-pants-speak.md | 5 - .changeset/quiet-singers-pick.md | 5 - .changeset/real-trains-visit.md | 7 - .changeset/renovate-cd75086.md | 8 - .changeset/rich-streets-rule.md | 5 - .changeset/ripe-crabs-care.md | 5 - .changeset/sad-rockets-rule.md | 5 - .changeset/seven-cycles-pick.md | 17 - .changeset/sharp-dragons-relate.md | 5 - .changeset/short-sides-feel.md | 5 - .changeset/silver-garlics-thank.md | 5 - .changeset/sixty-clowns-run.md | 5 - .changeset/smart-donuts-teach.md | 5 - .changeset/solid-bees-agree.md | 5 - .changeset/solid-dancers-march.md | 5 - .changeset/stupid-doodles-love.md | 5 - .changeset/swift-ideas-fry.md | 5 - .changeset/ten-houses-attack.md | 15 - .changeset/tender-regions-know.md | 5 - .changeset/thirty-hoops-own.md | 5 - .changeset/tidy-lines-hear.md | 5 - .changeset/tiny-chefs-visit.md | 5 - .changeset/tough-sloths-spend.md | 5 - .changeset/true-results-shake.md | 5 - .changeset/true-taxes-cover.md | 5 - .changeset/twelve-spoons-feel.md | 6 - .changeset/typescript-constructor-refactor.md | 63 - .changeset/upset-teeth-add.md | 5 - .changeset/warm-carrots-lead.md | 5 - .changeset/warm-dancers-battle.md | 5 - .changeset/warm-ducks-notice.md | 39 - .changeset/warm-moments-repeat.md | 5 - .changeset/warm-shrimps-clap.md | 5 - .changeset/wicked-cycles-enter.md | 9 - .changeset/wide-papers-run.md | 5 - .changeset/wild-donkeys-sneeze.md | 5 - .changeset/wild-owls-divide.md | 5 - .changeset/yummy-socks-brake.md | 7 - docs/releases/v1.45.0-changelog.md | 2607 +++++++++++++++++ package.json | 2 +- packages/app-defaults/CHANGELOG.md | 10 + packages/app-defaults/package.json | 2 +- packages/app-next-example-plugin/CHANGELOG.md | 8 + packages/app-next-example-plugin/package.json | 2 +- packages/app-next/CHANGELOG.md | 46 + packages/app-next/package.json | 2 +- packages/app/CHANGELOG.md | 42 + packages/app/package.json | 2 +- packages/backend-app-api/CHANGELOG.md | 13 + packages/backend-app-api/package.json | 2 +- packages/backend-defaults/CHANGELOG.md | 31 + packages/backend-defaults/package.json | 2 +- .../CHANGELOG.md | 23 + .../package.json | 2 +- packages/backend-openapi-utils/CHANGELOG.md | 7 + packages/backend-openapi-utils/package.json | 2 +- packages/backend-plugin-api/CHANGELOG.md | 15 + packages/backend-plugin-api/package.json | 2 +- packages/backend-test-utils/CHANGELOG.md | 21 + packages/backend-test-utils/package.json | 2 +- packages/backend/CHANGELOG.md | 42 + packages/backend/package.json | 2 +- packages/catalog-client/CHANGELOG.md | 7 + packages/catalog-client/package.json | 2 +- packages/catalog-model/CHANGELOG.md | 6 + packages/catalog-model/package.json | 2 +- packages/cli-node/CHANGELOG.md | 6 + packages/cli-node/package.json | 2 +- packages/cli/CHANGELOG.md | 18 + packages/cli/package.json | 2 +- packages/config-loader/CHANGELOG.md | 8 + packages/config-loader/package.json | 2 +- packages/config/CHANGELOG.md | 6 + packages/config/package.json | 2 +- packages/core-app-api/CHANGELOG.md | 10 + packages/core-app-api/package.json | 2 +- packages/core-compat-api/CHANGELOG.md | 10 + packages/core-compat-api/package.json | 2 +- packages/core-components/CHANGELOG.md | 13 + packages/core-components/package.json | 2 +- packages/core-plugin-api/CHANGELOG.md | 13 + packages/core-plugin-api/package.json | 2 +- packages/create-app/CHANGELOG.md | 9 + packages/create-app/package.json | 2 +- packages/dev-utils/CHANGELOG.md | 15 + packages/dev-utils/package.json | 2 +- packages/e2e-test/CHANGELOG.md | 7 + packages/e2e-test/package.json | 2 +- packages/eslint-plugin/CHANGELOG.md | 6 + packages/eslint-plugin/package.json | 2 +- packages/frontend-app-api/CHANGELOG.md | 13 + packages/frontend-app-api/package.json | 2 +- packages/frontend-defaults/CHANGELOG.md | 11 + packages/frontend-defaults/package.json | 2 +- .../CHANGELOG.md | 8 + .../package.json | 2 +- packages/frontend-internal/CHANGELOG.md | 7 + packages/frontend-internal/package.json | 2 +- packages/frontend-plugin-api/CHANGELOG.md | 29 + packages/frontend-plugin-api/package.json | 2 +- packages/frontend-test-utils/CHANGELOG.md | 11 + packages/frontend-test-utils/package.json | 2 +- packages/integration-aws-node/CHANGELOG.md | 8 + packages/integration-aws-node/package.json | 2 +- packages/integration-react/CHANGELOG.md | 9 + packages/integration-react/package.json | 2 +- packages/integration/CHANGELOG.md | 19 + packages/integration/package.json | 2 +- packages/repo-tools/CHANGELOG.md | 16 + packages/repo-tools/package.json | 2 +- packages/scaffolder-internal/CHANGELOG.md | 8 + packages/scaffolder-internal/package.json | 2 +- .../techdocs-cli-embedded-app/CHANGELOG.md | 19 + .../techdocs-cli-embedded-app/package.json | 2 +- packages/techdocs-cli/CHANGELOG.md | 11 + packages/techdocs-cli/package.json | 2 +- packages/test-utils/CHANGELOG.md | 11 + packages/test-utils/package.json | 2 +- packages/ui/CHANGELOG.md | 174 ++ packages/ui/package.json | 2 +- plugins/api-docs/CHANGELOG.md | 16 + plugins/api-docs/package.json | 2 +- plugins/app-backend/CHANGELOG.md | 11 + plugins/app-backend/package.json | 2 +- plugins/app-node/CHANGELOG.md | 8 + plugins/app-node/package.json | 2 +- plugins/app-visualizer/CHANGELOG.md | 12 + plugins/app-visualizer/package.json | 2 +- plugins/app/CHANGELOG.md | 11 + plugins/app/package.json | 2 +- .../CHANGELOG.md | 8 + .../package.json | 2 +- .../CHANGELOG.md | 8 + .../package.json | 2 +- .../CHANGELOG.md | 9 + .../package.json | 2 +- .../CHANGELOG.md | 9 + .../package.json | 2 +- .../CHANGELOG.md | 8 + .../package.json | 2 +- .../CHANGELOG.md | 8 + .../package.json | 2 +- .../CHANGELOG.md | 10 + .../package.json | 2 +- .../CHANGELOG.md | 8 + .../package.json | 2 +- .../CHANGELOG.md | 8 + .../package.json | 2 +- .../CHANGELOG.md | 8 + .../package.json | 2 +- .../CHANGELOG.md | 8 + .../package.json | 2 +- .../CHANGELOG.md | 9 + .../package.json | 2 +- .../CHANGELOG.md | 8 + .../package.json | 2 +- .../CHANGELOG.md | 8 + .../package.json | 2 +- .../CHANGELOG.md | 8 + .../package.json | 2 +- .../CHANGELOG.md | 10 + .../package.json | 2 +- .../CHANGELOG.md | 8 + .../package.json | 2 +- .../CHANGELOG.md | 8 + .../package.json | 2 +- .../CHANGELOG.md | 9 + .../package.json | 2 +- .../CHANGELOG.md | 9 + .../package.json | 2 +- .../CHANGELOG.md | 9 + .../package.json | 2 +- plugins/auth-backend/CHANGELOG.md | 17 + plugins/auth-backend/package.json | 2 +- plugins/auth-node/CHANGELOG.md | 11 + plugins/auth-node/package.json | 2 +- plugins/auth-react/CHANGELOG.md | 8 + plugins/auth-react/package.json | 2 +- plugins/auth/CHANGELOG.md | 9 + plugins/auth/package.json | 2 +- plugins/bitbucket-cloud-common/CHANGELOG.md | 19 + plugins/bitbucket-cloud-common/package.json | 2 +- .../catalog-backend-module-aws/CHANGELOG.md | 16 + .../catalog-backend-module-aws/package.json | 2 +- .../catalog-backend-module-azure/CHANGELOG.md | 12 + .../catalog-backend-module-azure/package.json | 2 +- .../CHANGELOG.md | 12 + .../package.json | 2 +- .../CHANGELOG.md | 14 + .../package.json | 2 +- .../CHANGELOG.md | 13 + .../package.json | 2 +- .../catalog-backend-module-gcp/CHANGELOG.md | 11 + .../catalog-backend-module-gcp/package.json | 2 +- .../CHANGELOG.md | 11 + .../package.json | 2 +- .../catalog-backend-module-gitea/CHANGELOG.md | 11 + .../catalog-backend-module-gitea/package.json | 2 +- .../CHANGELOG.md | 12 + .../package.json | 2 +- .../CHANGELOG.md | 14 + .../package.json | 2 +- .../CHANGELOG.md | 10 + .../package.json | 2 +- .../CHANGELOG.md | 14 + .../package.json | 2 +- .../CHANGELOG.md | 15 + .../package.json | 2 +- .../catalog-backend-module-ldap/CHANGELOG.md | 81 + .../catalog-backend-module-ldap/package.json | 2 +- .../catalog-backend-module-logs/CHANGELOG.md | 9 + .../catalog-backend-module-logs/package.json | 2 +- .../CHANGELOG.md | 12 + .../package.json | 2 +- .../CHANGELOG.md | 12 + .../package.json | 2 +- .../CHANGELOG.md | 10 + .../package.json | 2 +- .../CHANGELOG.md | 11 + .../package.json | 2 +- .../CHANGELOG.md | 13 + .../package.json | 2 +- plugins/catalog-backend/CHANGELOG.md | 24 + plugins/catalog-backend/package.json | 2 +- plugins/catalog-common/CHANGELOG.md | 9 + plugins/catalog-common/package.json | 2 +- plugins/catalog-graph/CHANGELOG.md | 17 + plugins/catalog-graph/package.json | 2 +- plugins/catalog-import/CHANGELOG.md | 20 + plugins/catalog-import/package.json | 2 +- plugins/catalog-node/CHANGELOG.md | 17 + plugins/catalog-node/package.json | 2 +- plugins/catalog-react/CHANGELOG.md | 21 + plugins/catalog-react/package.json | 2 +- .../CHANGELOG.md | 7 + .../package.json | 2 +- .../catalog-unprocessed-entities/CHANGELOG.md | 12 + .../catalog-unprocessed-entities/package.json | 2 +- plugins/catalog/CHANGELOG.md | 27 + plugins/catalog/package.json | 2 +- plugins/config-schema/CHANGELOG.md | 8 + plugins/config-schema/package.json | 2 +- plugins/devtools-backend/CHANGELOG.md | 14 + plugins/devtools-backend/package.json | 2 +- plugins/devtools-common/CHANGELOG.md | 8 + plugins/devtools-common/package.json | 2 +- plugins/devtools/CHANGELOG.md | 12 + plugins/devtools/package.json | 2 +- .../CHANGELOG.md | 10 + .../package.json | 2 +- .../events-backend-module-azure/CHANGELOG.md | 8 + .../events-backend-module-azure/package.json | 2 +- .../CHANGELOG.md | 8 + .../package.json | 2 +- .../CHANGELOG.md | 8 + .../package.json | 2 +- .../events-backend-module-gerrit/CHANGELOG.md | 8 + .../events-backend-module-gerrit/package.json | 2 +- .../events-backend-module-github/CHANGELOG.md | 10 + .../events-backend-module-github/package.json | 2 +- .../events-backend-module-gitlab/CHANGELOG.md | 9 + .../events-backend-module-gitlab/package.json | 2 +- .../CHANGELOG.md | 9 + .../package.json | 2 +- .../events-backend-module-kafka/CHANGELOG.md | 10 + .../events-backend-module-kafka/package.json | 2 +- .../events-backend-test-utils/CHANGELOG.md | 7 + .../events-backend-test-utils/package.json | 2 +- plugins/events-backend/CHANGELOG.md | 11 + plugins/events-backend/package.json | 2 +- plugins/events-node/CHANGELOG.md | 8 + plugins/events-node/package.json | 2 +- .../example-todo-list-backend/CHANGELOG.md | 7 + .../example-todo-list-backend/package.json | 2 +- plugins/example-todo-list-common/CHANGELOG.md | 7 + plugins/example-todo-list-common/package.json | 2 +- plugins/example-todo-list/CHANGELOG.md | 8 + plugins/example-todo-list/package.json | 2 +- plugins/gateway-backend/CHANGELOG.md | 12 + plugins/gateway-backend/package.json | 2 +- plugins/home-react/CHANGELOG.md | 9 + plugins/home-react/package.json | 2 +- plugins/home/CHANGELOG.md | 17 + plugins/home/package.json | 2 +- plugins/kubernetes-backend/CHANGELOG.md | 19 + plugins/kubernetes-backend/package.json | 2 +- plugins/kubernetes-cluster/CHANGELOG.md | 13 + plugins/kubernetes-cluster/package.json | 2 +- plugins/kubernetes-common/CHANGELOG.md | 9 + plugins/kubernetes-common/package.json | 2 +- plugins/kubernetes-node/CHANGELOG.md | 11 + plugins/kubernetes-node/package.json | 2 +- plugins/kubernetes-react/CHANGELOG.md | 12 + plugins/kubernetes-react/package.json | 2 +- plugins/kubernetes/CHANGELOG.md | 15 + plugins/kubernetes/package.json | 2 +- plugins/mcp-actions-backend/CHANGELOG.md | 11 + plugins/mcp-actions-backend/package.json | 2 +- plugins/mui-to-bui/CHANGELOG.md | 11 + plugins/mui-to-bui/package.json | 2 +- .../CHANGELOG.md | 16 + .../package.json | 2 +- .../CHANGELOG.md | 13 + .../package.json | 2 +- plugins/notifications-backend/CHANGELOG.md | 28 + plugins/notifications-backend/package.json | 2 +- plugins/notifications-common/CHANGELOG.md | 14 + plugins/notifications-common/package.json | 2 +- plugins/notifications-node/CHANGELOG.md | 12 + plugins/notifications-node/package.json | 2 +- plugins/notifications/CHANGELOG.md | 12 + plugins/notifications/package.json | 2 +- plugins/org-react/CHANGELOG.md | 11 + plugins/org-react/package.json | 2 +- plugins/org/CHANGELOG.md | 14 + plugins/org/package.json | 2 +- .../CHANGELOG.md | 10 + .../package.json | 2 +- plugins/permission-backend/CHANGELOG.md | 12 + plugins/permission-backend/package.json | 2 +- plugins/permission-common/CHANGELOG.md | 8 + plugins/permission-common/package.json | 2 +- plugins/permission-node/CHANGELOG.md | 10 + plugins/permission-node/package.json | 2 +- plugins/permission-react/CHANGELOG.md | 10 + plugins/permission-react/package.json | 2 +- plugins/proxy-backend/CHANGELOG.md | 8 + plugins/proxy-backend/package.json | 2 +- plugins/proxy-node/CHANGELOG.md | 7 + plugins/proxy-node/package.json | 2 +- .../CHANGELOG.md | 10 + .../package.json | 2 +- .../CHANGELOG.md | 22 + .../package.json | 2 +- .../CHANGELOG.md | 10 + .../package.json | 2 +- .../CHANGELOG.md | 23 + .../package.json | 2 +- .../CHANGELOG.md | 10 + .../package.json | 2 +- .../CHANGELOG.md | 11 + .../package.json | 2 +- .../CHANGELOG.md | 11 + .../package.json | 2 +- .../CHANGELOG.md | 10 + .../package.json | 2 +- .../CHANGELOG.md | 10 + .../package.json | 2 +- .../CHANGELOG.md | 12 + .../package.json | 2 +- .../CHANGELOG.md | 15 + .../package.json | 2 +- .../CHANGELOG.md | 10 + .../package.json | 2 +- .../CHANGELOG.md | 11 + .../package.json | 2 +- .../CHANGELOG.md | 9 + .../package.json | 2 +- .../CHANGELOG.md | 9 + .../package.json | 2 +- plugins/scaffolder-backend/CHANGELOG.md | 30 + plugins/scaffolder-backend/package.json | 2 +- plugins/scaffolder-common/CHANGELOG.md | 9 + plugins/scaffolder-common/package.json | 2 +- .../scaffolder-node-test-utils/CHANGELOG.md | 10 + .../scaffolder-node-test-utils/package.json | 2 +- plugins/scaffolder-node/CHANGELOG.md | 12 + plugins/scaffolder-node/package.json | 2 +- plugins/scaffolder-react/CHANGELOG.md | 16 + plugins/scaffolder-react/package.json | 2 +- plugins/scaffolder/CHANGELOG.md | 21 + plugins/scaffolder/package.json | 2 +- .../CHANGELOG.md | 15 + .../package.json | 2 +- .../CHANGELOG.md | 13 + .../package.json | 2 +- .../CHANGELOG.md | 10 + .../package.json | 2 +- plugins/search-backend-module-pg/CHANGELOG.md | 11 + plugins/search-backend-module-pg/package.json | 2 +- .../CHANGELOG.md | 10 + .../package.json | 2 +- .../CHANGELOG.md | 16 + .../package.json | 2 +- plugins/search-backend-node/CHANGELOG.md | 11 + plugins/search-backend-node/package.json | 2 +- plugins/search-backend/CHANGELOG.md | 16 + plugins/search-backend/package.json | 2 +- plugins/search-common/CHANGELOG.md | 7 + plugins/search-common/package.json | 2 +- plugins/search-react/CHANGELOG.md | 15 + plugins/search-react/package.json | 2 +- plugins/search/CHANGELOG.md | 17 + plugins/search/package.json | 2 +- plugins/signals-backend/CHANGELOG.md | 11 + plugins/signals-backend/package.json | 2 +- plugins/signals-node/CHANGELOG.md | 10 + plugins/signals-node/package.json | 2 +- plugins/signals-react/CHANGELOG.md | 7 + plugins/signals-react/package.json | 2 +- plugins/signals/CHANGELOG.md | 14 + plugins/signals/package.json | 2 +- .../techdocs-addons-test-utils/CHANGELOG.md | 15 + .../techdocs-addons-test-utils/package.json | 2 +- plugins/techdocs-backend/CHANGELOG.md | 15 + plugins/techdocs-backend/package.json | 2 +- .../CHANGELOG.md | 13 + .../package.json | 2 +- plugins/techdocs-node/CHANGELOG.md | 13 + plugins/techdocs-node/package.json | 2 +- plugins/techdocs-react/CHANGELOG.md | 11 + plugins/techdocs-react/package.json | 2 +- plugins/techdocs/CHANGELOG.md | 26 + plugins/techdocs/package.json | 2 +- plugins/user-settings-backend/CHANGELOG.md | 11 + plugins/user-settings-backend/package.json | 2 +- plugins/user-settings/CHANGELOG.md | 16 + plugins/user-settings/package.json | 2 +- 479 files changed, 5388 insertions(+), 1295 deletions(-) delete mode 100644 .changeset/afraid-trees-show.md delete mode 100644 .changeset/all-camels-agree.md delete mode 100644 .changeset/all-parrots-change.md delete mode 100644 .changeset/better-hats-cross.md delete mode 100644 .changeset/better-steaks-act.md delete mode 100644 .changeset/breezy-times-ring.md delete mode 100644 .changeset/bright-ears-send.md delete mode 100644 .changeset/busy-goats-create.md delete mode 100644 .changeset/busy-goats-kiss.md delete mode 100644 .changeset/clever-boats-clap.md delete mode 100644 .changeset/create-app-1761312116.md delete mode 100644 .changeset/create-app-1762897504.md delete mode 100644 .changeset/cruel-items-dig.md delete mode 100644 .changeset/cruel-plums-talk.md delete mode 100644 .changeset/deep-gifts-slide.md delete mode 100644 .changeset/early-berries-bet.md delete mode 100644 .changeset/easy-hands-grow.md delete mode 100644 .changeset/eighty-mails-leave.md delete mode 100644 .changeset/eighty-results-prove.md delete mode 100644 .changeset/eleven-carpets-win.md delete mode 100644 .changeset/eleven-lights-taste.md delete mode 100644 .changeset/every-ants-count.md delete mode 100644 .changeset/every-breads-act.md delete mode 100644 .changeset/every-clocks-arrive.md delete mode 100644 .changeset/fancy-years-camp.md delete mode 100644 .changeset/fast-tables-sink.md delete mode 100644 .changeset/fast-tools-mate.md delete mode 100644 .changeset/fine-hands-return.md delete mode 100644 .changeset/five-seas-jam.md delete mode 100644 .changeset/fix-text-truncate-prop.md delete mode 100644 .changeset/flat-paws-do.md delete mode 100644 .changeset/fruity-snails-laugh.md delete mode 100644 .changeset/funny-stars-open.md delete mode 100644 .changeset/gentle-bikes-relax.md delete mode 100644 .changeset/giant-lamps-happen.md delete mode 100644 .changeset/grumpy-planes-bet.md delete mode 100644 .changeset/heavy-cars-wash.md delete mode 100644 .changeset/honest-lamps-occur.md delete mode 100644 .changeset/honest-pandas-win.md delete mode 100644 .changeset/huge-taxis-grab.md delete mode 100644 .changeset/itchy-bars-smell.md delete mode 100644 .changeset/legal-weeks-walk.md delete mode 100644 .changeset/lemon-spies-sleep.md delete mode 100644 .changeset/little-dingos-study.md delete mode 100644 .changeset/long-humans-sink.md delete mode 100644 .changeset/long-impalas-burn.md delete mode 100644 .changeset/loud-carpets-throw.md delete mode 100644 .changeset/lucky-parrots-yell.md delete mode 100644 .changeset/modern-actors-warn.md delete mode 100644 .changeset/moody-plums-add.md delete mode 100644 .changeset/ninety-cobras-feel.md delete mode 100644 .changeset/odd-states-melt.md delete mode 100644 .changeset/open-cloths-listen.md delete mode 100644 .changeset/open-items-open.md delete mode 100644 .changeset/plenty-spiders-lead.md delete mode 100644 .changeset/plugin-relative-extensions.md delete mode 100644 .changeset/polite-eggs-dance.md delete mode 100644 .changeset/polite-seas-divide.md delete mode 100644 .changeset/pre.json delete mode 100644 .changeset/pretty-kids-allow.md delete mode 100644 .changeset/purple-deer-bet.md delete mode 100644 .changeset/purple-pants-speak.md delete mode 100644 .changeset/quiet-singers-pick.md delete mode 100644 .changeset/real-trains-visit.md delete mode 100644 .changeset/renovate-cd75086.md delete mode 100644 .changeset/rich-streets-rule.md delete mode 100644 .changeset/ripe-crabs-care.md delete mode 100644 .changeset/sad-rockets-rule.md delete mode 100644 .changeset/seven-cycles-pick.md delete mode 100644 .changeset/sharp-dragons-relate.md delete mode 100644 .changeset/short-sides-feel.md delete mode 100644 .changeset/silver-garlics-thank.md delete mode 100644 .changeset/sixty-clowns-run.md delete mode 100644 .changeset/smart-donuts-teach.md delete mode 100644 .changeset/solid-bees-agree.md delete mode 100644 .changeset/solid-dancers-march.md delete mode 100644 .changeset/stupid-doodles-love.md delete mode 100644 .changeset/swift-ideas-fry.md delete mode 100644 .changeset/ten-houses-attack.md delete mode 100644 .changeset/tender-regions-know.md delete mode 100644 .changeset/thirty-hoops-own.md delete mode 100644 .changeset/tidy-lines-hear.md delete mode 100644 .changeset/tiny-chefs-visit.md delete mode 100644 .changeset/tough-sloths-spend.md delete mode 100644 .changeset/true-results-shake.md delete mode 100644 .changeset/true-taxes-cover.md delete mode 100644 .changeset/twelve-spoons-feel.md delete mode 100644 .changeset/typescript-constructor-refactor.md delete mode 100644 .changeset/upset-teeth-add.md delete mode 100644 .changeset/warm-carrots-lead.md delete mode 100644 .changeset/warm-dancers-battle.md delete mode 100644 .changeset/warm-ducks-notice.md delete mode 100644 .changeset/warm-moments-repeat.md delete mode 100644 .changeset/warm-shrimps-clap.md delete mode 100644 .changeset/wicked-cycles-enter.md delete mode 100644 .changeset/wide-papers-run.md delete mode 100644 .changeset/wild-donkeys-sneeze.md delete mode 100644 .changeset/wild-owls-divide.md delete mode 100644 .changeset/yummy-socks-brake.md create mode 100644 docs/releases/v1.45.0-changelog.md diff --git a/.changeset/afraid-trees-show.md b/.changeset/afraid-trees-show.md deleted file mode 100644 index c9bf17adcc..0000000000 --- a/.changeset/afraid-trees-show.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-api-docs': patch ---- - -Add i18n support for Raw tab title and an error message diff --git a/.changeset/all-camels-agree.md b/.changeset/all-camels-agree.md deleted file mode 100644 index 44d8a4f2c9..0000000000 --- a/.changeset/all-camels-agree.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/ui': patch ---- - -Fix broken external links in Backstage UI Header component. diff --git a/.changeset/all-parrots-change.md b/.changeset/all-parrots-change.md deleted file mode 100644 index 65d5c37658..0000000000 --- a/.changeset/all-parrots-change.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-org': patch ---- - -Improved responsiveness of GroupProfileCard component diff --git a/.changeset/better-hats-cross.md b/.changeset/better-hats-cross.md deleted file mode 100644 index 99444b7fbf..0000000000 --- a/.changeset/better-hats-cross.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-defaults': patch ---- - -Adjusted the log line wording of task worker starting diff --git a/.changeset/better-steaks-act.md b/.changeset/better-steaks-act.md deleted file mode 100644 index b3ce601245..0000000000 --- a/.changeset/better-steaks-act.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/cli': patch ---- - -The templates executed with the `yarn new` command now supports templating filenames. diff --git a/.changeset/breezy-times-ring.md b/.changeset/breezy-times-ring.md deleted file mode 100644 index f65dd6ff55..0000000000 --- a/.changeset/breezy-times-ring.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/repo-tools': patch ---- - -Updated knip-reports to detect dependencies in dev/alpha pattern diff --git a/.changeset/bright-ears-send.md b/.changeset/bright-ears-send.md deleted file mode 100644 index 5104f2377b..0000000000 --- a/.changeset/bright-ears-send.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend': minor ---- - -Enable YAML merge keys in yamlPlaceholderResolver diff --git a/.changeset/busy-goats-create.md b/.changeset/busy-goats-create.md deleted file mode 100644 index 78b8f65571..0000000000 --- a/.changeset/busy-goats-create.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -'@backstage/plugin-search-backend-module-elasticsearch': patch -'@backstage/plugin-kubernetes-backend': patch -'@backstage/plugin-techdocs-backend': patch -'@backstage/plugin-signals-backend': patch -'@backstage/plugin-techdocs': patch -'@backstage/plugin-signals': patch ---- - -Removed/moved unused dependencies diff --git a/.changeset/busy-goats-kiss.md b/.changeset/busy-goats-kiss.md deleted file mode 100644 index 558642be94..0000000000 --- a/.changeset/busy-goats-kiss.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@backstage/frontend-plugin-api': patch -'@backstage/frontend-app-api': patch -'@backstage/core-compat-api': patch ---- - -Internal refactor of route reference implementations with minor updates to the `toString` implementations. diff --git a/.changeset/clever-boats-clap.md b/.changeset/clever-boats-clap.md deleted file mode 100644 index 6b40f05a76..0000000000 --- a/.changeset/clever-boats-clap.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -'@backstage/plugin-search-react': minor -'@backstage/plugin-techdocs': minor -'@backstage/plugin-catalog': minor -'@backstage/plugin-search': minor ---- - -Add support for customizable icons in `SearchResultListItemBlueprint` and related components diff --git a/.changeset/create-app-1761312116.md b/.changeset/create-app-1761312116.md deleted file mode 100644 index b50d431d4b..0000000000 --- a/.changeset/create-app-1761312116.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/create-app': patch ---- - -Bumped create-app version. diff --git a/.changeset/create-app-1762897504.md b/.changeset/create-app-1762897504.md deleted file mode 100644 index b50d431d4b..0000000000 --- a/.changeset/create-app-1762897504.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/create-app': patch ---- - -Bumped create-app version. diff --git a/.changeset/cruel-items-dig.md b/.changeset/cruel-items-dig.md deleted file mode 100644 index 65f07956ac..0000000000 --- a/.changeset/cruel-items-dig.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -'@backstage/ui': minor ---- - -**BREAKING**: Migrated Avatar component from Base UI to custom implementation with size changes: - -- Base UI-specific props are no longer supported -- Size values have been updated: - - New `x-small` size added (1.25rem / 20px) - - `small` size unchanged (1.5rem / 24px) - - `medium` size unchanged (2rem / 32px, default) - - `large` size **changed from 3rem to 2.5rem** (40px) - - New `x-large` size added (3rem / 48px) - -Migration: - -```diff -# Remove Base UI-specific props -- -+ - -# Update large size usage to x-large for same visual size -- -+ -``` - -Added `purpose` prop for accessibility control (`'informative'` or `'decoration'`). diff --git a/.changeset/cruel-plums-talk.md b/.changeset/cruel-plums-talk.md deleted file mode 100644 index bc7a30b048..0000000000 --- a/.changeset/cruel-plums-talk.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -'@backstage/ui': minor ---- - -**BREAKING**: Migrated Checkbox component from Base UI to React Aria Components. - -API changes required: - -- `checked` → `isSelected` -- `defaultChecked` → `defaultSelected` -- `disabled` → `isDisabled` -- `required` → `isRequired` -- `label` prop removed - use `children` instead -- CSS: `bui-CheckboxLabel` class removed -- Data attribute: `data-checked` → `data-selected` -- Use without label is no longer supported - -Migration examples: - -Before: - -```tsx - -``` - -After: - -```tsx - - Accept terms - -``` - -Before: - -```tsx - -``` - -After: - -```tsx -Option -``` - -Before: - -```tsx - -``` - -After: - -```tsx - - Accessible label - -``` diff --git a/.changeset/deep-gifts-slide.md b/.changeset/deep-gifts-slide.md deleted file mode 100644 index f3be77e74d..0000000000 --- a/.changeset/deep-gifts-slide.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/ui': patch ---- - -Fixed CSS issues in Select component including popover width constraints, focus outline behavior, and overflow handling. diff --git a/.changeset/early-berries-bet.md b/.changeset/early-berries-bet.md deleted file mode 100644 index 7540c41efd..0000000000 --- a/.changeset/early-berries-bet.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog': patch ---- - -Fix React warnings for elements not having stable keys. diff --git a/.changeset/easy-hands-grow.md b/.changeset/easy-hands-grow.md deleted file mode 100644 index fc3cfd96e1..0000000000 --- a/.changeset/easy-hands-grow.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/plugin-catalog-backend': minor -'@backstage/plugin-catalog-node': minor ---- - -Make YAML merge (<<:) support configurable in the Backstage Catalog instead of always being enabled diff --git a/.changeset/eighty-mails-leave.md b/.changeset/eighty-mails-leave.md deleted file mode 100644 index e8266f6459..0000000000 --- a/.changeset/eighty-mails-leave.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-home': patch ---- - -Allow customization of `VisitList` by adding optional `enrichVisit`, `transformPathname`, `canSave` functions to `VisitsStorageApi`, along with `VisitDisplayProvider` for colors, labels diff --git a/.changeset/eighty-results-prove.md b/.changeset/eighty-results-prove.md deleted file mode 100644 index 6df2d2f11a..0000000000 --- a/.changeset/eighty-results-prove.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-app-visualizer': patch ---- - -Improve tree visualizer to use a horizontal layout and fill the content space. diff --git a/.changeset/eleven-carpets-win.md b/.changeset/eleven-carpets-win.md deleted file mode 100644 index 69d677786a..0000000000 --- a/.changeset/eleven-carpets-win.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-defaults': patch ---- - -Fix a bug in the Gitlab URL reader where `search` did not handle multiple globs diff --git a/.changeset/eleven-lights-taste.md b/.changeset/eleven-lights-taste.md deleted file mode 100644 index e575b909e6..0000000000 --- a/.changeset/eleven-lights-taste.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-react': patch ---- - -Added missing i18n diff --git a/.changeset/every-ants-count.md b/.changeset/every-ants-count.md deleted file mode 100644 index 963c3a521a..0000000000 --- a/.changeset/every-ants-count.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@backstage/backend-test-utils': minor ---- - -Added support for Postgres 18 to the available `TestDatabases`. - -Note that the set of _default_ databases to test against for users of the `TestDatabases` class was also updated to include Postgres 14 and 18, instead of 13 and 17. If you need to override this, you can pass in an explicit `ids` argument, for example `ids: ['POSTGRES_17', 'POSTGRES_13', 'SQLITE_3']`. diff --git a/.changeset/every-breads-act.md b/.changeset/every-breads-act.md deleted file mode 100644 index 851dd13940..0000000000 --- a/.changeset/every-breads-act.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend-module-bitbucket-cloud': patch -'@backstage/plugin-scaffolder-backend-module-bitbucket': patch -'@backstage/plugin-bitbucket-cloud-common': patch -'@backstage/backend-defaults': patch -'@backstage/integration': patch ---- - -Support for Bitbucket Cloud's API token was added as `appPassword` is deprecated (no new creation from September 9, 2025) and will be removed on June 9, 2026. - -API token usage example: - -```yaml -integrations: - bitbucketCloud: - - username: user@domain.com - token: my-token -``` diff --git a/.changeset/every-clocks-arrive.md b/.changeset/every-clocks-arrive.md deleted file mode 100644 index d2061913e3..0000000000 --- a/.changeset/every-clocks-arrive.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/dev-utils': patch ---- - -Fixed styling of the dev app by adding a lazy import of `@backstage/ui/css/styles.css`. diff --git a/.changeset/fancy-years-camp.md b/.changeset/fancy-years-camp.md deleted file mode 100644 index 41782d4e0c..0000000000 --- a/.changeset/fancy-years-camp.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -'@backstage/plugin-notifications-backend': minor -'@backstage/plugin-notifications-common': minor ---- - -Adds support for default configuration for an entire notification channel. -This setting will also be inherited down to origins and topics while still respecting the users individual choices. - -This will be handy if you want to use a "opt-in" strategy. diff --git a/.changeset/fast-tables-sink.md b/.changeset/fast-tables-sink.md deleted file mode 100644 index a7c240fc5d..0000000000 --- a/.changeset/fast-tables-sink.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/ui': patch ---- - -Improved visual consistency of PasswordField, SearchField, and MenuAutocomplete components. diff --git a/.changeset/fast-tools-mate.md b/.changeset/fast-tools-mate.md deleted file mode 100644 index 2e212ce1b3..0000000000 --- a/.changeset/fast-tools-mate.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -'@backstage/plugin-notifications-backend': patch ---- - -Show default settings for notifications even before receiving first notification. - -Previously, it was not possible for the users to see or modify their notification settings until they had received at -least one notification from specific origin or topic. -This update ensures that default settings are displayed from the outset, -allowing users to customize their preferences immediately. diff --git a/.changeset/fine-hands-return.md b/.changeset/fine-hands-return.md deleted file mode 100644 index d3bf69c9b9..0000000000 --- a/.changeset/fine-hands-return.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/ui': patch ---- - -Fix default text color in Backstage UI diff --git a/.changeset/five-seas-jam.md b/.changeset/five-seas-jam.md deleted file mode 100644 index 4aa481422f..0000000000 --- a/.changeset/five-seas-jam.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-notifications-backend-module-email': patch ---- - -Updated `AWS SES` client to version 2 to support `nodemailer` version 7. diff --git a/.changeset/fix-text-truncate-prop.md b/.changeset/fix-text-truncate-prop.md deleted file mode 100644 index 26aee3280c..0000000000 --- a/.changeset/fix-text-truncate-prop.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/ui': patch ---- - -Fixed Text component to prevent `truncate` prop from being spread to the underlying DOM element. diff --git a/.changeset/flat-paws-do.md b/.changeset/flat-paws-do.md deleted file mode 100644 index 13d78c1423..0000000000 --- a/.changeset/flat-paws-do.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-openapi': patch ---- - -fix wrong dereferencing for AsyncApi 3 documents diff --git a/.changeset/fruity-snails-laugh.md b/.changeset/fruity-snails-laugh.md deleted file mode 100644 index 3b7775efac..0000000000 --- a/.changeset/fruity-snails-laugh.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend-module-gitlab': minor ---- - -fix scaffolder action createDeployToken to allow usage of oauth tokens diff --git a/.changeset/funny-stars-open.md b/.changeset/funny-stars-open.md deleted file mode 100644 index 336e68bac1..0000000000 --- a/.changeset/funny-stars-open.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/cli': patch ---- - -Fix inconsistent behavior in the `new` command for the `@internal` scope: it now consistently defaults to the `backstage-plugin-` infix whether the `--scope` option is not set or it's set to `internal`. diff --git a/.changeset/gentle-bikes-relax.md b/.changeset/gentle-bikes-relax.md deleted file mode 100644 index 7a4aeda5f8..0000000000 --- a/.changeset/gentle-bikes-relax.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-techdocs-module-addons-contrib': patch ---- - -ExpandableCollapse Techdocs Addon was breaking native sidebar collapse on Firefox diff --git a/.changeset/giant-lamps-happen.md b/.changeset/giant-lamps-happen.md deleted file mode 100644 index 1bc4ae6eab..0000000000 --- a/.changeset/giant-lamps-happen.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/ui': patch ---- - -Improved the Link component structure in Backstage UI. diff --git a/.changeset/grumpy-planes-bet.md b/.changeset/grumpy-planes-bet.md deleted file mode 100644 index bf7d36be41..0000000000 --- a/.changeset/grumpy-planes-bet.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-react': patch ---- - -Fixed a bug in the Scaffolder's template parsing in the `useTemplateSchema` hook by removing the title instead of setting it to `undefined` diff --git a/.changeset/heavy-cars-wash.md b/.changeset/heavy-cars-wash.md deleted file mode 100644 index f3f80d9cc8..0000000000 --- a/.changeset/heavy-cars-wash.md +++ /dev/null @@ -1,70 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-ldap': minor ---- - -Moved from `ldapjs` dependency to `ldapts` - -### Breaking Changes - -**Type Migration** - -Custom transformers must now accept `Entry` from `ldapts` instead of `SearchEntry` -from `ldapjs` The Entry type provides direct property access without need for -`.object()` or `.raw()` methods. - -If you have custom user or group transformers, update the signature from: - -```typescript -(vendor: LdapVendor, config: UserConfig, entry: SearchEntry) => - Promise; -``` - -to - -```typescript -(vendor: LdapVendor, config: UserConfig, entry: Entry) => - Promise; -``` - -**Search Options** - -Updated LDAP search configuration `typesOnly: false` → `attributeValues: true` -This inverts the boolean logic: `ldapjs` used negative form while `ldapts` uses -positive form. Both achieve the same result: retrieving attribute values rather -than just attribute names. - -Update LDAP search options in configuration from - -```yaml -options: - typesOnly: false -``` - -to - -```yaml -options: - attributeValues: true -``` - -**API Changes** Removed `LdapClient.searchStreaming()` method. Users should -migrate to `LdapClient.search()` instead - -If you're using `searchStreaming` directly: - -```typescript -// Before -await client.searchStreaming(dn, options, async entry => { - // process each entry -}); - -// After -const entries = await client.search(dn, options); -for (const entry of entries) { - // process each entry -} -``` - -> **_NOTE:_**: Both methods have always loaded all entries into memory. The -> `searchStreaming` method was only needed internally to handle `ldapjs`'s -> event-based API. diff --git a/.changeset/honest-lamps-occur.md b/.changeset/honest-lamps-occur.md deleted file mode 100644 index 27b2eb44f5..0000000000 --- a/.changeset/honest-lamps-occur.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/ui': patch ---- - -Fixed dialog backdrop appearance in dark mode. diff --git a/.changeset/honest-pandas-win.md b/.changeset/honest-pandas-win.md deleted file mode 100644 index a9dc5d7e9d..0000000000 --- a/.changeset/honest-pandas-win.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-plugin-api': minor ---- - -Promote `instanceMetadata` service to main entrypoint. diff --git a/.changeset/huge-taxis-grab.md b/.changeset/huge-taxis-grab.md deleted file mode 100644 index a021fcb82c..0000000000 --- a/.changeset/huge-taxis-grab.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/ui': patch ---- - -Migrated CellProfile component from Base UI Avatar to Backstage UI Avatar component. diff --git a/.changeset/itchy-bars-smell.md b/.changeset/itchy-bars-smell.md deleted file mode 100644 index b82779502e..0000000000 --- a/.changeset/itchy-bars-smell.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/ui': minor ---- - -Fixing styles on SearchField in Backstage UI after migration to CSS modules. `SearchField` has now its own set of class names. We previously used class names from `TextField` but this approach was creating some confusion so going forward in your theme you'll be able to theme `TextField` and `SearchField` separately. diff --git a/.changeset/legal-weeks-walk.md b/.changeset/legal-weeks-walk.md deleted file mode 100644 index 2068ff40b2..0000000000 --- a/.changeset/legal-weeks-walk.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/create-app': patch ---- - -Added `@backstage/plugin-app-visualizer` to the app in the `--next` template. diff --git a/.changeset/lemon-spies-sleep.md b/.changeset/lemon-spies-sleep.md deleted file mode 100644 index 15ec451f62..0000000000 --- a/.changeset/lemon-spies-sleep.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-react': patch ---- - -Apply default ordering of templates diff --git a/.changeset/little-dingos-study.md b/.changeset/little-dingos-study.md deleted file mode 100644 index 2defb8ed1f..0000000000 --- a/.changeset/little-dingos-study.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -'@backstage/ui': minor ---- - -**BREAKING**: Removed central `componentDefinitions` object and related type utilities (`ComponentDefinitionName`, `ComponentClassNames`). - -Component definitions are primarily intended for documenting the CSS class API for theming purposes, not for programmatic use in JavaScript/TypeScript. - -**Migration Guide:** - -If you were using component definitions or class names to build custom components, we recommend migrating to either: - -- Use Backstage UI components directly as building blocks, or -- Duplicate the component CSS in your own stylesheets instead of relying on internal class names diff --git a/.changeset/long-humans-sink.md b/.changeset/long-humans-sink.md deleted file mode 100644 index 9959caf1b1..0000000000 --- a/.changeset/long-humans-sink.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/ui': patch ---- - -Avatar components in x-small and small sizes now display only one initial instead of two, improving readability at smaller dimensions. diff --git a/.changeset/long-impalas-burn.md b/.changeset/long-impalas-burn.md deleted file mode 100644 index ef70f65f78..0000000000 --- a/.changeset/long-impalas-burn.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/repo-tools': minor ---- - -The `package-docs` command will now automatically use a `typedoc.json` file if one exists at the root of your project. diff --git a/.changeset/loud-carpets-throw.md b/.changeset/loud-carpets-throw.md deleted file mode 100644 index 169703d815..0000000000 --- a/.changeset/loud-carpets-throw.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/cli': patch ---- - -Added a template for the `yarn new` command to create an catalog entity provider. To add this template to an explicit list in the root `package.json`, use `@backstage/cli/templates/catalog-provider-module`. diff --git a/.changeset/lucky-parrots-yell.md b/.changeset/lucky-parrots-yell.md deleted file mode 100644 index 7533ed6e56..0000000000 --- a/.changeset/lucky-parrots-yell.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog': patch ---- - -Fixed responsiveness issues with catalog entity content layout using the new frontend system. diff --git a/.changeset/modern-actors-warn.md b/.changeset/modern-actors-warn.md deleted file mode 100644 index 1654201c3a..0000000000 --- a/.changeset/modern-actors-warn.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-gateway-backend': minor ---- - -Added hop count tracking to prevent proxy loops. The gateway now tracks the number of proxy hops using the `backstage-gateway-hops` header and rejects requests that exceed 3 hops with a 508 Loop Detected error. diff --git a/.changeset/moody-plums-add.md b/.changeset/moody-plums-add.md deleted file mode 100644 index a88e11b347..0000000000 --- a/.changeset/moody-plums-add.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-gateway-backend': minor ---- - -Update usage of the `instanceMetadata` service. diff --git a/.changeset/ninety-cobras-feel.md b/.changeset/ninety-cobras-feel.md deleted file mode 100644 index e287ef33ed..0000000000 --- a/.changeset/ninety-cobras-feel.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-techdocs': patch ---- - -Fixed an issue where the entire TechDocs page would re-render when navigating between pages within the same entity's documentation. diff --git a/.changeset/odd-states-melt.md b/.changeset/odd-states-melt.md deleted file mode 100644 index 514e890bab..0000000000 --- a/.changeset/odd-states-melt.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-plugin-api': minor ---- - -Explicitly mark `coreServices.rootInstanceMetadata` as a root service. diff --git a/.changeset/open-cloths-listen.md b/.changeset/open-cloths-listen.md deleted file mode 100644 index 3af368c7ce..0000000000 --- a/.changeset/open-cloths-listen.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-test-utils': patch ---- - -Tweak some of the mock services to have more precise types diff --git a/.changeset/open-items-open.md b/.changeset/open-items-open.md deleted file mode 100644 index 12fcefab4a..0000000000 --- a/.changeset/open-items-open.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-app-api': minor ---- - -Updates API for `instanceMetadata` service to return a list of plugins not features. diff --git a/.changeset/plenty-spiders-lead.md b/.changeset/plenty-spiders-lead.md deleted file mode 100644 index 48db0d5522..0000000000 --- a/.changeset/plenty-spiders-lead.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/frontend-plugin-api': minor ---- - -Renamed `ExtensionDefinition` to `OverridableExtensionDefinition` and introduced a slimmer `ExtensionDefinition` type that does not include override methods. The overridable type is generally used as an output type, while plain `ExtensionDefinition`s are used for input. This reduces type conflicts across different of `@backstage/frontend-plugin-api`, improving long-term compatibility. diff --git a/.changeset/plugin-relative-extensions.md b/.changeset/plugin-relative-extensions.md deleted file mode 100644 index dc27a2283f..0000000000 --- a/.changeset/plugin-relative-extensions.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -'@backstage/frontend-plugin-api': patch ---- - -Added support for plugin-relative `attachTo` declarations for extension definitions. This allows for the creation of extension and extension blueprints that attach to other extensions of a particular `kind` in the same plugin, rather than needing to provide the exact extension ID. This is particularly useful when wanting to provide extension blueprints with a built-in hierarchy where the extensions created from one blueprint attach to extensions created from the other blueprint, for example: - -```ts -// kind: 'tabbed-page' -const parentPage = TabbedPageBlueprint.make({ - params: {....} -}) -// attachTo: { kind: 'tabbed-page', input: 'tabs' } -const child1 = TabContentBlueprint.make({ - name: 'tab1', - params: {....} -}) -``` diff --git a/.changeset/polite-eggs-dance.md b/.changeset/polite-eggs-dance.md deleted file mode 100644 index e9725be567..0000000000 --- a/.changeset/polite-eggs-dance.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/ui': patch ---- - -Removed `@base-ui-components/react` dependency as all components now use React Aria Components. diff --git a/.changeset/polite-seas-divide.md b/.changeset/polite-seas-divide.md deleted file mode 100644 index e265e6df90..0000000000 --- a/.changeset/polite-seas-divide.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/ui': patch ---- - -Fix the default font size in Backstage UI. diff --git a/.changeset/pre.json b/.changeset/pre.json deleted file mode 100644 index f65042692e..0000000000 --- a/.changeset/pre.json +++ /dev/null @@ -1,293 +0,0 @@ -{ - "mode": "exit", - "tag": "next", - "initialVersions": { - "example-app": "0.2.114", - "@backstage/app-defaults": "1.7.1", - "example-app-next": "0.0.28", - "app-next-example-plugin": "0.0.28", - "example-backend": "0.0.43", - "@backstage/backend-app-api": "1.2.8", - "@backstage/backend-defaults": "0.13.0", - "@backstage/backend-dev-utils": "0.1.5", - "@backstage/backend-dynamic-feature-service": "0.7.5", - "@backstage/backend-openapi-utils": "0.6.2", - "@backstage/backend-plugin-api": "1.4.4", - "@backstage/backend-test-utils": "1.9.1", - "@backstage/catalog-client": "1.12.0", - "@backstage/catalog-model": "1.7.5", - "@backstage/cli": "0.34.4", - "@backstage/cli-common": "0.1.15", - "@backstage/cli-node": "0.2.14", - "@backstage/codemods": "0.1.52", - "@backstage/config": "1.3.5", - "@backstage/config-loader": "1.10.5", - "@backstage/core-app-api": "1.19.1", - "@backstage/core-compat-api": "0.5.3", - "@backstage/core-components": "0.18.2", - "@backstage/core-plugin-api": "1.11.1", - "@backstage/create-app": "0.7.5", - "@backstage/dev-utils": "1.1.15", - "e2e-test": "0.2.33", - "@backstage/e2e-test-utils": "0.1.1", - "@backstage/errors": "1.2.7", - "@backstage/eslint-plugin": "0.1.12", - "@backstage/frontend-app-api": "0.13.1", - "@backstage/frontend-defaults": "0.3.2", - "@backstage/frontend-dynamic-feature-loader": "0.1.6", - "@internal/frontend": "0.0.14", - "@backstage/frontend-plugin-api": "0.12.1", - "@backstage/frontend-test-utils": "0.4.0", - "@backstage/integration": "1.18.1", - "@backstage/integration-aws-node": "0.1.18", - "@backstage/integration-react": "1.2.11", - "@internal/opaque": "0.0.1", - "@backstage/release-manifests": "0.0.13", - "@backstage/repo-tools": "0.15.3", - "@internal/scaffolder": "0.0.14", - "@techdocs/cli": "1.10.0", - "techdocs-cli-embedded-app": "0.2.113", - "@backstage/test-utils": "1.7.12", - "@backstage/theme": "0.7.0", - "@backstage/types": "1.2.2", - "@backstage/ui": "0.8.0", - "@backstage/version-bridge": "1.0.11", - "yarn-plugin-backstage": "0.0.7", - "@backstage/plugin-api-docs": "0.13.0", - "@backstage/plugin-api-docs-module-protoc-gen-doc": "0.1.10", - "@backstage/plugin-app": "0.3.1", - "@backstage/plugin-app-backend": "0.5.7", - "@backstage/plugin-app-node": "0.1.38", - "@backstage/plugin-app-visualizer": "0.1.24", - "@backstage/plugin-auth": "0.1.1", - "@backstage/plugin-auth-backend": "0.25.5", - "@backstage/plugin-auth-backend-module-atlassian-provider": "0.4.8", - "@backstage/plugin-auth-backend-module-auth0-provider": "0.2.8", - "@backstage/plugin-auth-backend-module-aws-alb-provider": "0.4.8", - "@backstage/plugin-auth-backend-module-azure-easyauth-provider": "0.2.13", - "@backstage/plugin-auth-backend-module-bitbucket-provider": "0.3.8", - "@backstage/plugin-auth-backend-module-bitbucket-server-provider": "0.2.8", - "@backstage/plugin-auth-backend-module-cloudflare-access-provider": "0.4.8", - "@backstage/plugin-auth-backend-module-gcp-iap-provider": "0.4.8", - "@backstage/plugin-auth-backend-module-github-provider": "0.3.8", - "@backstage/plugin-auth-backend-module-gitlab-provider": "0.3.8", - "@backstage/plugin-auth-backend-module-google-provider": "0.3.8", - "@backstage/plugin-auth-backend-module-guest-provider": "0.2.13", - "@backstage/plugin-auth-backend-module-microsoft-provider": "0.3.8", - "@backstage/plugin-auth-backend-module-oauth2-provider": "0.4.8", - "@backstage/plugin-auth-backend-module-oauth2-proxy-provider": "0.2.13", - "@backstage/plugin-auth-backend-module-oidc-provider": "0.4.8", - "@backstage/plugin-auth-backend-module-okta-provider": "0.2.8", - "@backstage/plugin-auth-backend-module-onelogin-provider": "0.3.8", - "@backstage/plugin-auth-backend-module-openshift-provider": "0.1.1", - "@backstage/plugin-auth-backend-module-pinniped-provider": "0.3.8", - "@backstage/plugin-auth-backend-module-vmware-cloud-provider": "0.5.8", - "@backstage/plugin-auth-node": "0.6.8", - "@backstage/plugin-auth-react": "0.1.20", - "@backstage/plugin-bitbucket-cloud-common": "0.3.3", - "@backstage/plugin-catalog": "1.31.4", - "@backstage/plugin-catalog-backend": "3.1.2", - "@backstage/plugin-catalog-backend-module-aws": "0.4.16", - "@backstage/plugin-catalog-backend-module-azure": "0.3.10", - "@backstage/plugin-catalog-backend-module-backstage-openapi": "0.5.7", - "@backstage/plugin-catalog-backend-module-bitbucket-cloud": "0.5.4", - "@backstage/plugin-catalog-backend-module-bitbucket-server": "0.5.4", - "@backstage/plugin-catalog-backend-module-gcp": "0.3.13", - "@backstage/plugin-catalog-backend-module-gerrit": "0.3.7", - "@backstage/plugin-catalog-backend-module-gitea": "0.1.5", - "@backstage/plugin-catalog-backend-module-github": "0.11.1", - "@backstage/plugin-catalog-backend-module-github-org": "0.3.15", - "@backstage/plugin-catalog-backend-module-gitlab": "0.7.4", - "@backstage/plugin-catalog-backend-module-gitlab-org": "0.2.14", - "@backstage/plugin-catalog-backend-module-incremental-ingestion": "0.7.5", - "@backstage/plugin-catalog-backend-module-ldap": "0.11.10", - "@backstage/plugin-catalog-backend-module-logs": "0.1.15", - "@backstage/plugin-catalog-backend-module-msgraph": "0.8.1", - "@backstage/plugin-catalog-backend-module-openapi": "0.2.15", - "@backstage/plugin-catalog-backend-module-puppetdb": "0.2.15", - "@backstage/plugin-catalog-backend-module-scaffolder-entity-model": "0.2.13", - "@backstage/plugin-catalog-backend-module-unprocessed": "0.6.5", - "@backstage/plugin-catalog-common": "1.1.6", - "@backstage/plugin-catalog-graph": "0.5.2", - "@backstage/plugin-catalog-import": "0.13.6", - "@backstage/plugin-catalog-node": "1.19.1", - "@backstage/plugin-catalog-react": "1.21.2", - "@backstage/plugin-catalog-unprocessed-entities": "0.2.22", - "@backstage/plugin-catalog-unprocessed-entities-common": "0.0.10", - "@backstage/plugin-config-schema": "0.1.73", - "@backstage/plugin-devtools": "0.1.32", - "@backstage/plugin-devtools-backend": "0.5.10", - "@backstage/plugin-devtools-common": "0.1.18", - "@backstage/plugin-events-backend": "0.5.7", - "@backstage/plugin-events-backend-module-aws-sqs": "0.4.16", - "@backstage/plugin-events-backend-module-azure": "0.2.25", - "@backstage/plugin-events-backend-module-bitbucket-cloud": "0.2.25", - "@backstage/plugin-events-backend-module-bitbucket-server": "0.1.6", - "@backstage/plugin-events-backend-module-gerrit": "0.2.25", - "@backstage/plugin-events-backend-module-github": "0.4.5", - "@backstage/plugin-events-backend-module-gitlab": "0.3.6", - "@backstage/plugin-events-backend-module-google-pubsub": "0.1.5", - "@backstage/plugin-events-backend-module-kafka": "0.1.4", - "@backstage/plugin-events-backend-test-utils": "0.1.49", - "@backstage/plugin-events-node": "0.4.16", - "@internal/plugin-todo-list": "1.0.44", - "@internal/plugin-todo-list-backend": "1.0.44", - "@internal/plugin-todo-list-common": "1.0.27", - "@backstage/plugin-gateway-backend": "1.0.6", - "@backstage/plugin-home": "0.8.13", - "@backstage/plugin-home-react": "0.1.31", - "@backstage/plugin-kubernetes": "0.12.12", - "@backstage/plugin-kubernetes-backend": "0.20.3", - "@backstage/plugin-kubernetes-cluster": "0.0.30", - "@backstage/plugin-kubernetes-common": "0.9.7", - "@backstage/plugin-kubernetes-node": "0.3.5", - "@backstage/plugin-kubernetes-react": "0.5.12", - "@backstage/plugin-mcp-actions-backend": "0.1.4", - "@backstage/plugin-mui-to-bui": "0.2.0", - "@backstage/plugin-notifications": "0.5.10", - "@backstage/plugin-notifications-backend": "0.5.11", - "@backstage/plugin-notifications-backend-module-email": "0.3.14", - "@backstage/plugin-notifications-backend-module-slack": "0.2.0", - "@backstage/plugin-notifications-common": "0.1.1", - "@backstage/plugin-notifications-node": "0.2.20", - "@backstage/plugin-org": "0.6.45", - "@backstage/plugin-org-react": "0.1.43", - "@backstage/plugin-permission-backend": "0.7.5", - "@backstage/plugin-permission-backend-module-allow-all-policy": "0.2.13", - "@backstage/plugin-permission-common": "0.9.2", - "@backstage/plugin-permission-node": "0.10.5", - "@backstage/plugin-permission-react": "0.4.37", - "@backstage/plugin-proxy-backend": "0.6.7", - "@backstage/plugin-proxy-node": "0.1.9", - "@backstage/plugin-scaffolder": "1.34.2", - "@backstage/plugin-scaffolder-backend": "3.0.0", - "@backstage/plugin-scaffolder-backend-module-azure": "0.2.14", - "@backstage/plugin-scaffolder-backend-module-bitbucket": "0.3.15", - "@backstage/plugin-scaffolder-backend-module-bitbucket-cloud": "0.2.14", - "@backstage/plugin-scaffolder-backend-module-bitbucket-server": "0.2.14", - "@backstage/plugin-scaffolder-backend-module-confluence-to-markdown": "0.3.14", - "@backstage/plugin-scaffolder-backend-module-cookiecutter": "0.3.16", - "@backstage/plugin-scaffolder-backend-module-gcp": "0.2.14", - "@backstage/plugin-scaffolder-backend-module-gerrit": "0.2.14", - "@backstage/plugin-scaffolder-backend-module-gitea": "0.2.14", - "@backstage/plugin-scaffolder-backend-module-github": "0.9.1", - "@backstage/plugin-scaffolder-backend-module-gitlab": "0.9.6", - "@backstage/plugin-scaffolder-backend-module-notifications": "0.1.15", - "@backstage/plugin-scaffolder-backend-module-rails": "0.5.14", - "@backstage/plugin-scaffolder-backend-module-sentry": "0.2.14", - "@backstage/plugin-scaffolder-backend-module-yeoman": "0.4.15", - "@backstage/plugin-scaffolder-common": "1.7.2", - "@backstage/plugin-scaffolder-node": "0.12.0", - "@backstage/plugin-scaffolder-node-test-utils": "0.3.4", - "@backstage/plugin-scaffolder-react": "1.19.2", - "@backstage/plugin-search": "1.4.31", - "@backstage/plugin-search-backend": "2.0.7", - "@backstage/plugin-search-backend-module-catalog": "0.3.9", - "@backstage/plugin-search-backend-module-elasticsearch": "1.7.7", - "@backstage/plugin-search-backend-module-explore": "0.3.8", - "@backstage/plugin-search-backend-module-pg": "0.5.49", - "@backstage/plugin-search-backend-module-stack-overflow-collator": "0.3.14", - "@backstage/plugin-search-backend-module-techdocs": "0.4.7", - "@backstage/plugin-search-backend-node": "1.3.16", - "@backstage/plugin-search-common": "1.2.20", - "@backstage/plugin-search-react": "1.9.5", - "@backstage/plugin-signals": "0.0.24", - "@backstage/plugin-signals-backend": "0.3.9", - "@backstage/plugin-signals-node": "0.1.25", - "@backstage/plugin-signals-react": "0.0.16", - "@backstage/plugin-techdocs": "1.15.1", - "@backstage/plugin-techdocs-addons-test-utils": "1.1.1", - "@backstage/plugin-techdocs-backend": "2.1.1", - "@backstage/plugin-techdocs-common": "0.1.1", - "@backstage/plugin-techdocs-module-addons-contrib": "1.1.29", - "@backstage/plugin-techdocs-node": "1.13.8", - "@backstage/plugin-techdocs-react": "1.3.4", - "@backstage/plugin-user-settings": "0.8.27", - "@backstage/plugin-user-settings-backend": "0.3.7", - "@backstage/plugin-user-settings-common": "0.0.1" - }, - "changesets": [ - "all-camels-agree", - "all-parrots-change", - "better-hats-cross", - "better-steaks-act", - "breezy-times-ring", - "bright-ears-send", - "busy-goats-create", - "clever-boats-clap", - "create-app-1761312116", - "create-app-1762897504", - "cruel-items-dig", - "cruel-plums-talk", - "deep-gifts-slide", - "easy-hands-grow", - "eighty-mails-leave", - "eighty-results-prove", - "eleven-carpets-win", - "eleven-lights-taste", - "every-ants-count", - "every-clocks-arrive", - "fancy-years-camp", - "fast-tables-sink", - "fast-tools-mate", - "fine-hands-return", - "five-seas-jam", - "fix-text-truncate-prop", - "flat-paws-do", - "fruity-snails-laugh", - "funny-stars-open", - "gentle-bikes-relax", - "giant-lamps-happen", - "grumpy-planes-bet", - "heavy-cars-wash", - "honest-lamps-occur", - "honest-pandas-win", - "huge-taxis-grab", - "itchy-bars-smell", - "legal-weeks-walk", - "lemon-spies-sleep", - "long-humans-sink", - "long-impalas-burn", - "loud-carpets-throw", - "moody-plums-add", - "ninety-cobras-feel", - "odd-states-melt", - "open-cloths-listen", - "open-items-open", - "plugin-relative-extensions", - "polite-eggs-dance", - "polite-seas-divide", - "pretty-kids-allow", - "purple-deer-bet", - "quiet-singers-pick", - "renovate-cd75086", - "rich-streets-rule", - "ripe-crabs-care", - "seven-cycles-pick", - "sharp-dragons-relate", - "short-sides-feel", - "silver-garlics-thank", - "sixty-clowns-run", - "smart-donuts-teach", - "solid-bees-agree", - "solid-dancers-march", - "stupid-doodles-love", - "ten-houses-attack", - "tender-regions-know", - "thirty-hoops-own", - "tough-sloths-spend", - "true-taxes-cover", - "twelve-spoons-feel", - "typescript-constructor-refactor", - "upset-teeth-add", - "warm-carrots-lead", - "warm-ducks-notice", - "warm-moments-repeat", - "warm-shrimps-clap", - "wicked-cycles-enter", - "wide-papers-run", - "wild-donkeys-sneeze", - "wild-owls-divide", - "yummy-socks-brake" - ] -} diff --git a/.changeset/pretty-kids-allow.md b/.changeset/pretty-kids-allow.md deleted file mode 100644 index 6b3b11a895..0000000000 --- a/.changeset/pretty-kids-allow.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-github': patch ---- - -Added configurable `pageSizes` for GitHub GraphQL API queries to prevent `RESOURCE_LIMITS_EXCEEDED` errors with organizations with large number of repositories. Please see the [GitHub Discovery documentation](https://backstage.io/docs/integrations/github/discovery#configuration) for new configuration options. diff --git a/.changeset/purple-deer-bet.md b/.changeset/purple-deer-bet.md deleted file mode 100644 index c60f2ada7a..0000000000 --- a/.changeset/purple-deer-bet.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-graph': patch ---- - -Ensure the catalog graph entity card respects the height prop so the visualization scales down properly on wide screens. diff --git a/.changeset/purple-pants-speak.md b/.changeset/purple-pants-speak.md deleted file mode 100644 index b46c4b991f..0000000000 --- a/.changeset/purple-pants-speak.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog': patch ---- - -Fixed missing margins for entity warning content area on catalog entity page in NFS. diff --git a/.changeset/quiet-singers-pick.md b/.changeset/quiet-singers-pick.md deleted file mode 100644 index cc66db1bcd..0000000000 --- a/.changeset/quiet-singers-pick.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-signals': patch ---- - -Fixes a bug where the `SignalClient` would try to subscribe to the same channel twice after an error, instead of just once. diff --git a/.changeset/real-trains-visit.md b/.changeset/real-trains-visit.md deleted file mode 100644 index c229562ec4..0000000000 --- a/.changeset/real-trains-visit.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@backstage/core-components': patch -'@backstage/plugin-catalog-graph': patch ---- - -- Revert `viewbox` back to old values. -- Added `fullScreen` prop to `EntityCatalogGraphCard` diff --git a/.changeset/renovate-cd75086.md b/.changeset/renovate-cd75086.md deleted file mode 100644 index 5bc38af431..0000000000 --- a/.changeset/renovate-cd75086.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -'@backstage/plugin-kubernetes-backend': patch -'@backstage/plugin-kubernetes-common': patch -'@backstage/plugin-kubernetes-node': patch -'@backstage/plugin-kubernetes-react': patch ---- - -Updated dependency `@kubernetes/client-node` to `1.4.0`. diff --git a/.changeset/rich-streets-rule.md b/.changeset/rich-streets-rule.md deleted file mode 100644 index 07f431b6a7..0000000000 --- a/.changeset/rich-streets-rule.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/ui': patch ---- - -Fix CSS layer ordering in Backstage UI to make sure component styles are loaded after tokens and base declarations. diff --git a/.changeset/ripe-crabs-care.md b/.changeset/ripe-crabs-care.md deleted file mode 100644 index d8cdc27652..0000000000 --- a/.changeset/ripe-crabs-care.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/ui': patch ---- - -Fixed RadioGroup radio button ellipse distortion by preventing flex shrink and grow. diff --git a/.changeset/sad-rockets-rule.md b/.changeset/sad-rockets-rule.md deleted file mode 100644 index fe15580f99..0000000000 --- a/.changeset/sad-rockets-rule.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-notifications-backend-module-slack': patch ---- - -When an error message is logged due to inability to send a message with the Slack SDK, include the Slack Channel ID in the message to aid debugging. diff --git a/.changeset/seven-cycles-pick.md b/.changeset/seven-cycles-pick.md deleted file mode 100644 index fbd1a3895f..0000000000 --- a/.changeset/seven-cycles-pick.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -'@backstage/ui': minor ---- - -**BREAKING**: Changed className prop behavior to augment default styles instead of being ignored or overriding them. - -Affected components: - -- Menu, MenuListBox, MenuAutocomplete, MenuAutocompleteListbox, MenuItem, MenuListBoxItem, MenuSection, MenuSeparator -- Switch -- Skeleton -- FieldLabel -- Header, HeaderToolbar -- HeaderPage -- Tabs, TabList, Tab, TabPanel - -If you were passing custom className values to any of these components that relied on the previous behavior, you may need to adjust your styles to account for the default classes now being applied alongside your custom classes. diff --git a/.changeset/sharp-dragons-relate.md b/.changeset/sharp-dragons-relate.md deleted file mode 100644 index 1f7e5e0d4a..0000000000 --- a/.changeset/sharp-dragons-relate.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-app-visualizer': patch ---- - -Migrated to use `@backstage/ui`. diff --git a/.changeset/short-sides-feel.md b/.changeset/short-sides-feel.md deleted file mode 100644 index a7e3542ba1..0000000000 --- a/.changeset/short-sides-feel.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/create-app': patch ---- - -Added the new `@backstage/cli/templates/catalog-provider-module` template to the explicit template configuration for the `next-app` template. diff --git a/.changeset/silver-garlics-thank.md b/.changeset/silver-garlics-thank.md deleted file mode 100644 index d95781eb04..0000000000 --- a/.changeset/silver-garlics-thank.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/ui': patch ---- - -Fix font smoothing as default in Backstage UI. diff --git a/.changeset/sixty-clowns-run.md b/.changeset/sixty-clowns-run.md deleted file mode 100644 index 595049df8f..0000000000 --- a/.changeset/sixty-clowns-run.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/core-components': patch ---- - -Line numbers in LogViewer will not be selectable in UI anymore diff --git a/.changeset/smart-donuts-teach.md b/.changeset/smart-donuts-teach.md deleted file mode 100644 index f258dee394..0000000000 --- a/.changeset/smart-donuts-teach.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/ui': patch ---- - -Enable tree-shaking of imports other than `*.css`. diff --git a/.changeset/solid-bees-agree.md b/.changeset/solid-bees-agree.md deleted file mode 100644 index 8feecaf6d4..0000000000 --- a/.changeset/solid-bees-agree.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/eslint-plugin': minor ---- - -Added `@backstage/no-ui-css-imports-in-non-frontend` rule, which ensures that CSS from `@backstage/ui` is not imported outside of the frontend app. diff --git a/.changeset/solid-dancers-march.md b/.changeset/solid-dancers-march.md deleted file mode 100644 index 5633bb3e2e..0000000000 --- a/.changeset/solid-dancers-march.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-user-settings': patch ---- - -Revert `storageApiRef` implementation diff --git a/.changeset/stupid-doodles-love.md b/.changeset/stupid-doodles-love.md deleted file mode 100644 index 878ad853cd..0000000000 --- a/.changeset/stupid-doodles-love.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@techdocs/cli': patch ---- - -Fix for missing styles due to move to BUI. diff --git a/.changeset/swift-ideas-fry.md b/.changeset/swift-ideas-fry.md deleted file mode 100644 index d0e308fce7..0000000000 --- a/.changeset/swift-ideas-fry.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/core-plugin-api': minor ---- - -All route references are now forwards compatible with the new frontend system, i.e. `@backstage/frontend-plugin-api`. This means they no longer need to be converted with `convertLegacyRouteRef` or `convertLegacyRouteRefs` from `@backstage/core-compat-api`. diff --git a/.changeset/ten-houses-attack.md b/.changeset/ten-houses-attack.md deleted file mode 100644 index 9bb1ad2565..0000000000 --- a/.changeset/ten-houses-attack.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend-module-gitlab': patch -'@backstage/plugin-scaffolder-backend-module-rails': patch -'@backstage/plugin-permission-backend': patch -'@backstage/plugin-permission-common': patch -'@backstage/core-components': patch -'@backstage/core-plugin-api': patch -'@backstage/plugin-devtools-common': patch -'@backstage/plugin-search-backend': patch -'@backstage/core-app-api': patch -'@backstage/plugin-catalog-graph': patch -'@backstage/cli': patch ---- - -Convert all enums to erasable-syntax compliant patterns diff --git a/.changeset/tender-regions-know.md b/.changeset/tender-regions-know.md deleted file mode 100644 index 8f59567597..0000000000 --- a/.changeset/tender-regions-know.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-auth': patch ---- - -Authentication content screen now uses application title. diff --git a/.changeset/thirty-hoops-own.md b/.changeset/thirty-hoops-own.md deleted file mode 100644 index 88b55d5f98..0000000000 --- a/.changeset/thirty-hoops-own.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/frontend-plugin-api': patch ---- - -Updated to `ExtensionInput` to make all type parameters optional. diff --git a/.changeset/tidy-lines-hear.md b/.changeset/tidy-lines-hear.md deleted file mode 100644 index 4cb28dfbac..0000000000 --- a/.changeset/tidy-lines-hear.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-import': patch ---- - -Fixed missing `catalog.entity.create` permission authorization in the default page extension. diff --git a/.changeset/tiny-chefs-visit.md b/.changeset/tiny-chefs-visit.md deleted file mode 100644 index 2a17de343e..0000000000 --- a/.changeset/tiny-chefs-visit.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-auth-backend': patch ---- - -Change internal `state` column to `text` to support state of over 255 characters diff --git a/.changeset/tough-sloths-spend.md b/.changeset/tough-sloths-spend.md deleted file mode 100644 index ed6a4ab366..0000000000 --- a/.changeset/tough-sloths-spend.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-github-org': patch ---- - -Added configurable `pageSizes` for GitHub GraphQL API queries to prevent `RESOURCE_LIMITS_EXCEEDED` errors with organizations with large number of teams and members. Please see the [GitHub Org Data documentation](https://backstage.io/docs/integrations/github/org#configuration-details) for new configuration options. diff --git a/.changeset/true-results-shake.md b/.changeset/true-results-shake.md deleted file mode 100644 index ab0f1210b3..0000000000 --- a/.changeset/true-results-shake.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/cli': patch ---- - -Fixes an issue where using the `backstage-cli new --scope` command with a scope that already includes the `@` symbol (e.g., `@backstage-community`) would result in a double `@@` prefix in the generated package name, causing invalid `package.json` files. diff --git a/.changeset/true-taxes-cover.md b/.changeset/true-taxes-cover.md deleted file mode 100644 index ec204084d0..0000000000 --- a/.changeset/true-taxes-cover.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/ui': patch ---- - -Added `loading` prop to Button and ButtonIcon components for displaying spinner during async operations. diff --git a/.changeset/twelve-spoons-feel.md b/.changeset/twelve-spoons-feel.md deleted file mode 100644 index 21298b4e09..0000000000 --- a/.changeset/twelve-spoons-feel.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/plugin-catalog-backend': minor -'@backstage/plugin-catalog-node': minor ---- - -Enable YAML merge keys in yamlPlaceholderResolver diff --git a/.changeset/typescript-constructor-refactor.md b/.changeset/typescript-constructor-refactor.md deleted file mode 100644 index b24cb5dbd0..0000000000 --- a/.changeset/typescript-constructor-refactor.md +++ /dev/null @@ -1,63 +0,0 @@ ---- -'@backstage/plugin-catalog-backend': patch -'@backstage/plugin-kubernetes-react': patch -'@backstage/plugin-notifications-backend': patch -'@backstage/plugin-notifications-node': patch -'@backstage/plugin-permission-react': patch -'@backstage/plugin-scaffolder-backend-module-gcp': patch -'@backstage/plugin-scaffolder-backend': patch -'@backstage/plugin-search-backend-module-elasticsearch': patch -'@backstage/plugin-search-backend-module-pg': patch -'@backstage/plugin-search-backend': patch -'@backstage/plugin-search-backend-node': patch -'@backstage/plugin-search-react': patch -'@backstage/plugin-signals': patch -'@backstage/plugin-kubernetes-backend': patch -'@backstage/plugin-events-backend': patch -'@backstage/plugin-catalog-backend-module-backstage-openapi': patch -'@backstage/plugin-events-node': patch -'@backstage/plugin-user-settings': patch -'@backstage/plugin-auth-backend': patch -'@backstage/plugin-auth-backend-module-cloudflare-access-provider': patch -'@backstage/plugin-catalog-react': patch -'@backstage/plugin-notifications-backend-module-email': patch -'@backstage/plugin-events-backend-module-aws-sqs': patch -'@backstage/plugin-devtools-backend': patch -'@backstage/plugin-catalog-backend-module-unprocessed': patch -'@backstage/plugin-catalog-backend-module-azure': patch -'@backstage/plugin-catalog-backend-module-aws': patch -'@backstage/plugin-scaffolder': patch -'@backstage/plugin-techdocs-node': patch -'@backstage/plugin-catalog-unprocessed-entities': patch -'@backstage/plugin-catalog-backend-module-msgraph': patch -'@backstage/plugin-catalog-backend-module-ldap': patch -'@backstage/plugin-bitbucket-cloud-common': patch -'@backstage/plugin-auth-node': patch -'@backstage/backend-app-api': patch -'@backstage/backend-defaults': patch -'@backstage/config-loader': patch -'@backstage/core-app-api': patch -'@backstage/core-plugin-api': patch -'@backstage/frontend-app-api': patch -'@backstage/config': patch -'@backstage/backend-dynamic-feature-service': patch -'@backstage/core-components': patch -'@backstage/cli': patch -'@backstage/cli-node': patch -'@backstage/catalog-model': patch -'@backstage/integration': patch -'@backstage/frontend-plugin-api': patch -'@backstage/integration-aws-node': patch -'@backstage/repo-tools': patch -'@backstage/backend-test-utils': patch -'@backstage/plugin-catalog-import': patch -'@backstage/plugin-events-backend-module-kafka': patch -'@backstage/plugin-kubernetes-node': patch -'@backstage/plugin-mcp-actions-backend': patch -'@backstage/plugin-scaffolder-node-test-utils': patch -'@backstage/plugin-scaffolder-node': patch -'@backstage/plugin-scaffolder-react': patch -'@backstage/plugin-user-settings-backend': patch ---- - -Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. diff --git a/.changeset/upset-teeth-add.md b/.changeset/upset-teeth-add.md deleted file mode 100644 index 834ce7be2c..0000000000 --- a/.changeset/upset-teeth-add.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-mui-to-bui': patch ---- - -Updated BUI checkbox preview example to align with new component API. diff --git a/.changeset/warm-carrots-lead.md b/.changeset/warm-carrots-lead.md deleted file mode 100644 index 81a254a6a3..0000000000 --- a/.changeset/warm-carrots-lead.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/ui': patch ---- - -Fixed Table Row component to properly support opening links in new tabs via right-click or Cmd+Click when using the `href` prop. diff --git a/.changeset/warm-dancers-battle.md b/.changeset/warm-dancers-battle.md deleted file mode 100644 index 8aa3f765e8..0000000000 --- a/.changeset/warm-dancers-battle.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-react': patch ---- - -Fixed catalog filter "all" not appearing as selected when set as the initially selected filter. diff --git a/.changeset/warm-ducks-notice.md b/.changeset/warm-ducks-notice.md deleted file mode 100644 index 95e28b0836..0000000000 --- a/.changeset/warm-ducks-notice.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -'@backstage/ui': minor ---- - -**BREAKING**: Removed `Collapsible` component. Migrate to `Accordion` or use React Aria `Disclosure`. - -## Migration Path 1: Accordion (Opinionated Styled Component) - -Accordion provides preset styling with a similar component structure. - -```diff -- import { Collapsible } from '@backstage/ui'; -+ import { Accordion, AccordionTrigger, AccordionPanel } from '@backstage/ui'; - -- -- } /> -- Content -- - -+ -+ -+ Content -+ -``` - -CSS classes: `.bui-CollapsibleRoot` → `.bui-Accordion`, `.bui-CollapsibleTrigger` → `.bui-AccordionTrigger` (now on heading element), `.bui-CollapsiblePanel` → `.bui-AccordionPanel` - -## Migration Path 2: React Aria Disclosure (Full Customization) - -For custom styling without preset styles: - -```tsx -import { Disclosure, Button, DisclosurePanel } from 'react-aria-components'; - - - - Content -; -``` diff --git a/.changeset/warm-moments-repeat.md b/.changeset/warm-moments-repeat.md deleted file mode 100644 index a72387d720..0000000000 --- a/.changeset/warm-moments-repeat.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-defaults': patch ---- - -Fix #31348 issue where BitbucketUrlReader ignored provided token and instead always used integration credentials diff --git a/.changeset/warm-shrimps-clap.md b/.changeset/warm-shrimps-clap.md deleted file mode 100644 index 0386df05de..0000000000 --- a/.changeset/warm-shrimps-clap.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-incremental-ingestion': patch ---- - -Correctly handle entity removal computation when DB count query returns string diff --git a/.changeset/wicked-cycles-enter.md b/.changeset/wicked-cycles-enter.md deleted file mode 100644 index cea5cff371..0000000000 --- a/.changeset/wicked-cycles-enter.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -'@backstage/ui': minor ---- - -**BREAKING**: The `SelectProps` interface now accepts a generic type parameter for selection mode. - -Added searchable and multiple selection support to Select component. The component now accepts `searchable`, `selectionMode`, and `searchPlaceholder` props to enable filtering and multi-selection modes. - -Migration: If you're using `SelectProps` type directly, update from `SelectProps` to `SelectProps<'single' | 'multiple'>`. Component usage remains backward compatible. diff --git a/.changeset/wide-papers-run.md b/.changeset/wide-papers-run.md deleted file mode 100644 index e0e16d71af..0000000000 --- a/.changeset/wide-papers-run.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/ui': patch ---- - -Set the color-scheme property depending on theme diff --git a/.changeset/wild-donkeys-sneeze.md b/.changeset/wild-donkeys-sneeze.md deleted file mode 100644 index 5e2c4474c5..0000000000 --- a/.changeset/wild-donkeys-sneeze.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/ui': patch ---- - -Added new VisuallyHidden component for hiding content visually while keeping it accessible to screen readers. diff --git a/.changeset/wild-owls-divide.md b/.changeset/wild-owls-divide.md deleted file mode 100644 index d903b76bd0..0000000000 --- a/.changeset/wild-owls-divide.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/ui': patch ---- - -Fix default font wight and font family in Backstage UI. diff --git a/.changeset/yummy-socks-brake.md b/.changeset/yummy-socks-brake.md deleted file mode 100644 index 4f3dcfb598..0000000000 --- a/.changeset/yummy-socks-brake.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@backstage/plugin-auth-backend': patch ---- - -Allow configuring dynamic client registration token expiration with config `auth.experimentalDynamicClientRegistration.tokenExpiration`. - -Maximum expiration for the DCR token is 24 hours. Default expiration is 1 hour. diff --git a/docs/releases/v1.45.0-changelog.md b/docs/releases/v1.45.0-changelog.md new file mode 100644 index 0000000000..23def9a969 --- /dev/null +++ b/docs/releases/v1.45.0-changelog.md @@ -0,0 +1,2607 @@ +# Release v1.45.0 + +Upgrade Helper: [https://backstage.github.io/upgrade-helper/?to=1.45.0](https://backstage.github.io/upgrade-helper/?to=1.45.0) + +## @backstage/backend-app-api@1.3.0 + +### Minor Changes + +- a17d9df: Updates API for `instanceMetadata` service to return a list of plugins not features. + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/config@1.3.6 + +## @backstage/backend-plugin-api@1.5.0 + +### Minor Changes + +- a17d9df: Promote `instanceMetadata` service to main entrypoint. +- 62fc2de: Explicitly mark `coreServices.rootInstanceMetadata` as a root service. + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.9.3 + - @backstage/plugin-auth-node@0.6.9 + - @backstage/config@1.3.6 + - @backstage/plugin-permission-node@0.10.6 + +## @backstage/backend-test-utils@1.10.0 + +### Minor Changes + +- d57b13b: Added support for Postgres 18 to the available `TestDatabases`. + + Note that the set of _default_ databases to test against for users of the `TestDatabases` class was also updated to include Postgres 14 and 18, instead of 13 and 17. If you need to override this, you can pass in an explicit `ids` argument, for example `ids: ['POSTGRES_17', 'POSTGRES_13', 'SQLITE_3']`. + +### Patch Changes + +- f3001fd: Tweak some of the mock services to have more precise types +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/backend-defaults@0.13.1 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/backend-app-api@1.3.0 + - @backstage/plugin-permission-common@0.9.3 + - @backstage/plugin-events-node@0.4.17 + - @backstage/plugin-auth-node@0.6.9 + - @backstage/config@1.3.6 + +## @backstage/core-plugin-api@1.12.0 + +### Minor Changes + +- 83439b1: All route references are now forwards compatible with the new frontend system, i.e. `@backstage/frontend-plugin-api`. This means they no longer need to be converted with `convertLegacyRouteRef` or `convertLegacyRouteRefs` from `@backstage/core-compat-api`. + +### Patch Changes + +- b2bef92: Convert all enums to erasable-syntax compliant patterns +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/config@1.3.6 + +## @backstage/eslint-plugin@0.2.0 + +### Minor Changes + +- 926389b: Added `@backstage/no-ui-css-imports-in-non-frontend` rule, which ensures that CSS from `@backstage/ui` is not imported outside of the frontend app. + +## @backstage/frontend-plugin-api@0.13.0 + +### Minor Changes + +- 7d87b4f: Renamed `ExtensionDefinition` to `OverridableExtensionDefinition` and introduced a slimmer `ExtensionDefinition` type that does not include override methods. The overridable type is generally used as an output type, while plain `ExtensionDefinition`s are used for input. This reduces type conflicts across different of `@backstage/frontend-plugin-api`, improving long-term compatibility. + +### Patch Changes + +- 4d03f08: Internal refactor of route reference implementations with minor updates to the `toString` implementations. + +- 7c6a66d: Added support for plugin-relative `attachTo` declarations for extension definitions. This allows for the creation of extension and extension blueprints that attach to other extensions of a particular `kind` in the same plugin, rather than needing to provide the exact extension ID. This is particularly useful when wanting to provide extension blueprints with a built-in hierarchy where the extensions created from one blueprint attach to extensions created from the other blueprint, for example: + + ```ts + // kind: 'tabbed-page' + const parentPage = TabbedPageBlueprint.make({ + params: {....} + }) + // attachTo: { kind: 'tabbed-page', input: 'tabs' } + const child1 = TabContentBlueprint.make({ + name: 'tab1', + params: {....} + }) + ``` + +- 878c251: Updated to `ExtensionInput` to make all type parameters optional. + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. + +- Updated dependencies + - @backstage/core-components@0.18.3 + - @backstage/core-plugin-api@1.12.0 + +## @backstage/repo-tools@0.16.0 + +### Minor Changes + +- 11c61f2: The `package-docs` command will now automatically use a `typedoc.json` file if one exists at the root of your project. + +### Patch Changes + +- 8f56eae: Updated knip-reports to detect dependencies in dev/alpha pattern +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/config-loader@1.10.6 + - @backstage/cli-node@0.2.15 + - @backstage/catalog-model@1.7.6 + +## @backstage/ui@0.9.0 + +### Minor Changes + +- 539cf26: **BREAKING**: Migrated Avatar component from Base UI to custom implementation with size changes: + + - Base UI-specific props are no longer supported + - Size values have been updated: + - New `x-small` size added (1.25rem / 20px) + - `small` size unchanged (1.5rem / 24px) + - `medium` size unchanged (2rem / 32px, default) + - `large` size **changed from 3rem to 2.5rem** (40px) + - New `x-large` size added (3rem / 48px) + + Migration: + + ```diff + # Remove Base UI-specific props + - + + + + # Update large size usage to x-large for same visual size + - + + + ``` + + Added `purpose` prop for accessibility control (`'informative'` or `'decoration'`). + +- 5c614ff: **BREAKING**: Migrated Checkbox component from Base UI to React Aria Components. + + API changes required: + + - `checked` → `isSelected` + - `defaultChecked` → `defaultSelected` + - `disabled` → `isDisabled` + - `required` → `isRequired` + - `label` prop removed - use `children` instead + - CSS: `bui-CheckboxLabel` class removed + - Data attribute: `data-checked` → `data-selected` + - Use without label is no longer supported + + Migration examples: + + Before: + + ```tsx + + ``` + + After: + + ```tsx + + Accept terms + + ``` + + Before: + + ```tsx + + ``` + + After: + + ```tsx + Option + ``` + + Before: + + ```tsx + + ``` + + After: + + ```tsx + + Accessible label + + ``` + +- 134151f: Fixing styles on SearchField in Backstage UI after migration to CSS modules. `SearchField` has now its own set of class names. We previously used class names from `TextField` but this approach was creating some confusion so going forward in your theme you'll be able to theme `TextField` and `SearchField` separately. + +- a67670d: **BREAKING**: Removed central `componentDefinitions` object and related type utilities (`ComponentDefinitionName`, `ComponentClassNames`). + + Component definitions are primarily intended for documenting the CSS class API for theming purposes, not for programmatic use in JavaScript/TypeScript. + + **Migration Guide:** + + If you were using component definitions or class names to build custom components, we recommend migrating to either: + + - Use Backstage UI components directly as building blocks, or + - Duplicate the component CSS in your own stylesheets instead of relying on internal class names + +- b78fc45: **BREAKING**: Changed className prop behavior to augment default styles instead of being ignored or overriding them. + + Affected components: + + - Menu, MenuListBox, MenuAutocomplete, MenuAutocompleteListbox, MenuItem, MenuListBoxItem, MenuSection, MenuSeparator + - Switch + - Skeleton + - FieldLabel + - Header, HeaderToolbar + - HeaderPage + - Tabs, TabList, Tab, TabPanel + + If you were passing custom className values to any of these components that relied on the previous behavior, you may need to adjust your styles to account for the default classes now being applied alongside your custom classes. + +- 83c100e: **BREAKING**: Removed `Collapsible` component. Migrate to `Accordion` or use React Aria `Disclosure`. + + ## Migration Path 1: Accordion (Opinionated Styled Component) + + Accordion provides preset styling with a similar component structure. + + ```diff + - import { Collapsible } from '@backstage/ui'; + + import { Accordion, AccordionTrigger, AccordionPanel } from '@backstage/ui'; + + - + - } /> + - Content + - + + + + + + + Content + + + ``` + + CSS classes: `.bui-CollapsibleRoot` → `.bui-Accordion`, `.bui-CollapsibleTrigger` → `.bui-AccordionTrigger` (now on heading element), `.bui-CollapsiblePanel` → `.bui-AccordionPanel` + + ## Migration Path 2: React Aria Disclosure (Full Customization) + + For custom styling without preset styles: + + ```tsx + import { Disclosure, Button, DisclosurePanel } from 'react-aria-components'; + + + + Content + ; + ``` + +- 816af0f: **BREAKING**: The `SelectProps` interface now accepts a generic type parameter for selection mode. + + Added searchable and multiple selection support to Select component. The component now accepts `searchable`, `selectionMode`, and `searchPlaceholder` props to enable filtering and multi-selection modes. + + Migration: If you're using `SelectProps` type directly, update from `SelectProps` to `SelectProps<'single' | 'multiple'>`. Component usage remains backward compatible. + +### Patch Changes + +- d01de00: Fix broken external links in Backstage UI Header component. +- 35a3614: Fixed CSS issues in Select component including popover width constraints, focus outline behavior, and overflow handling. +- 01476f0: Improved visual consistency of PasswordField, SearchField, and MenuAutocomplete components. +- 26c6a78: Fix default text color in Backstage UI +- deaa427: Fixed Text component to prevent `truncate` prop from being spread to the underlying DOM element. +- 1059f95: Improved the Link component structure in Backstage UI. +- 836b0c7: Fixed dialog backdrop appearance in dark mode. +- 6874094: Migrated CellProfile component from Base UI Avatar to Backstage UI Avatar component. +- 719d772: Avatar components in x-small and small sizes now display only one initial instead of two, improving readability at smaller dimensions. +- 6d35a6b: Removed `@base-ui-components/react` dependency as all components now use React Aria Components. +- dac851f: Fix the default font size in Backstage UI. +- 3c0ea67: Fix CSS layer ordering in Backstage UI to make sure component styles are loaded after tokens and base declarations. +- 3b18d80: Fixed RadioGroup radio button ellipse distortion by preventing flex shrink and grow. +- 4eb455c: Fix font smoothing as default in Backstage UI. +- ff9f0c3: Enable tree-shaking of imports other than `*.css`. +- 7839e7b: Added `loading` prop to Button and ButtonIcon components for displaying spinner during async operations. +- a00fb88: Fixed Table Row component to properly support opening links in new tabs via right-click or Cmd+Click when using the `href` prop. +- e16ece5: Set the color-scheme property depending on theme +- 1ef3ca4: Added new VisuallyHidden component for hiding content visually while keeping it accessible to screen readers. +- 00bfb83: Fix default font wight and font family in Backstage UI. + +## @backstage/plugin-catalog@1.32.0 + +### Minor Changes + +- a521911: Add support for customizable icons in `SearchResultListItemBlueprint` and related components + +### Patch Changes + +- b500bcc: Fix React warnings for elements not having stable keys. +- a87c0a5: Fixed responsiveness issues with catalog entity content layout using the new frontend system. +- aff04d3: Fixed missing margins for entity warning content area on catalog entity page in NFS. +- Updated dependencies + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/core-compat-api@0.5.4 + - @backstage/plugin-search-react@1.10.0 + - @backstage/plugin-catalog-react@1.21.3 + - @backstage/core-components@0.18.3 + - @backstage/core-plugin-api@1.12.0 + - @backstage/plugin-permission-react@0.4.38 + - @backstage/catalog-model@1.7.6 + - @backstage/plugin-techdocs-react@1.3.5 + - @backstage/catalog-client@1.12.1 + - @backstage/integration-react@1.2.12 + - @backstage/plugin-catalog-common@1.1.7 + - @backstage/plugin-scaffolder-common@1.7.3 + - @backstage/plugin-search-common@1.2.21 + +## @backstage/plugin-catalog-backend@3.2.0 + +### Minor Changes + +- 2d229b2: Enable YAML merge keys in yamlPlaceholderResolver +- 9d3ec06: Make YAML merge (<<:) support configurable in the Backstage Catalog instead of always being enabled +- 8c26af4: Enable YAML merge keys in yamlPlaceholderResolver + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/plugin-catalog-node@1.20.0 + - @backstage/integration@1.18.2 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-permission-common@0.9.3 + - @backstage/plugin-events-node@0.4.17 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + - @backstage/backend-openapi-utils@0.6.3 + - @backstage/catalog-client@1.12.1 + - @backstage/plugin-catalog-common@1.1.7 + - @backstage/plugin-permission-node@0.10.6 + +## @backstage/plugin-catalog-backend-module-ldap@0.12.0 + +### Minor Changes + +- 980f240: Moved from `ldapjs` dependency to `ldapts` + + ### Breaking Changes + + **Type Migration** + + Custom transformers must now accept `Entry` from `ldapts` instead of `SearchEntry` + from `ldapjs` The Entry type provides direct property access without need for + `.object()` or `.raw()` methods. + + If you have custom user or group transformers, update the signature from: + + ```typescript + (vendor: LdapVendor, config: UserConfig, entry: SearchEntry) => + Promise; + ``` + + to + + ```typescript + (vendor: LdapVendor, config: UserConfig, entry: Entry) => + Promise; + ``` + + **Search Options** + + Updated LDAP search configuration `typesOnly: false` → `attributeValues: true` + This inverts the boolean logic: `ldapjs` used negative form while `ldapts` uses + positive form. Both achieve the same result: retrieving attribute values rather + than just attribute names. + + Update LDAP search options in configuration from + + ```yaml + options: + typesOnly: false + ``` + + to + + ```yaml + options: + attributeValues: true + ``` + + **API Changes** Removed `LdapClient.searchStreaming()` method. Users should + migrate to `LdapClient.search()` instead + + If you're using `searchStreaming` directly: + + ```typescript + // Before + await client.searchStreaming(dn, options, async entry => { + // process each entry + }); + + // After + const entries = await client.search(dn, options); + for (const entry of entries) { + // process each entry + } + ``` + + > **_NOTE:_**: Both methods have always loaded all entries into memory. The + > `searchStreaming` method was only needed internally to handle `ldapjs`'s + > event-based API. + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/plugin-catalog-node@1.20.0 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + - @backstage/plugin-catalog-common@1.1.7 + +## @backstage/plugin-catalog-node@1.20.0 + +### Minor Changes + +- 9d3ec06: Make YAML merge (<<:) support configurable in the Backstage Catalog instead of always being enabled +- 8c26af4: Enable YAML merge keys in yamlPlaceholderResolver + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-permission-common@0.9.3 + - @backstage/catalog-model@1.7.6 + - @backstage/catalog-client@1.12.1 + - @backstage/plugin-catalog-common@1.1.7 + - @backstage/plugin-permission-node@0.10.6 + +## @backstage/plugin-gateway-backend@1.1.0 + +### Minor Changes + +- 229f63e: Added hop count tracking to prevent proxy loops. The gateway now tracks the number of proxy hops using the `backstage-gateway-hops` header and rejects requests that exceed 3 hops with a 508 Loop Detected error. +- a17d9df: Update usage of the `instanceMetadata` service. + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + +## @backstage/plugin-notifications-backend@0.6.0 + +### Minor Changes + +- 87e597c: Adds support for default configuration for an entire notification channel. + This setting will also be inherited down to origins and topics while still respecting the users individual choices. + + This will be handy if you want to use a "opt-in" strategy. + +### Patch Changes + +- 15fb764: Show default settings for notifications even before receiving first notification. + + Previously, it was not possible for the users to see or modify their notification settings until they had received at + least one notification from specific origin or topic. + This update ensures that default settings are displayed from the outset, + allowing users to customize their preferences immediately. + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. + +- Updated dependencies + - @backstage/plugin-catalog-node@1.20.0 + - @backstage/plugin-notifications-common@0.2.0 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-notifications-node@0.2.21 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + - @backstage/plugin-signals-node@0.1.26 + +## @backstage/plugin-notifications-common@0.2.0 + +### Minor Changes + +- 87e597c: Adds support for default configuration for an entire notification channel. + This setting will also be inherited down to origins and topics while still respecting the users individual choices. + + This will be handy if you want to use a "opt-in" strategy. + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.3.6 + +## @backstage/plugin-scaffolder-backend-module-gitlab@0.10.0 + +### Minor Changes + +- ff96d7e: fix scaffolder action createDeployToken to allow usage of oauth tokens + +### Patch Changes + +- b2bef92: Convert all enums to erasable-syntax compliant patterns +- Updated dependencies + - @backstage/integration@1.18.2 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/config@1.3.6 + - @backstage/plugin-scaffolder-node@0.12.1 + +## @backstage/plugin-search@1.5.0 + +### Minor Changes + +- a521911: Add support for customizable icons in `SearchResultListItemBlueprint` and related components + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/core-compat-api@0.5.4 + - @backstage/plugin-search-react@1.10.0 + - @backstage/plugin-catalog-react@1.21.3 + - @backstage/core-components@0.18.3 + - @backstage/core-plugin-api@1.12.0 + - @backstage/plugin-search-common@1.2.21 + +## @backstage/plugin-search-react@1.10.0 + +### Minor Changes + +- a521911: Add support for customizable icons in `SearchResultListItemBlueprint` and related components + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/core-components@0.18.3 + - @backstage/core-plugin-api@1.12.0 + - @backstage/plugin-search-common@1.2.21 + +## @backstage/plugin-techdocs@1.16.0 + +### Minor Changes + +- a521911: Add support for customizable icons in `SearchResultListItemBlueprint` and related components + +### Patch Changes + +- 71c22f3: Removed/moved unused dependencies +- a4d4a70: Fixed an issue where the entire TechDocs page would re-render when navigating between pages within the same entity's documentation. +- Updated dependencies + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/core-compat-api@0.5.4 + - @backstage/plugin-search-react@1.10.0 + - @backstage/plugin-catalog-react@1.21.3 + - @backstage/integration@1.18.2 + - @backstage/core-components@0.18.3 + - @backstage/core-plugin-api@1.12.0 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + - @backstage/plugin-techdocs-react@1.3.5 + - @backstage/catalog-client@1.12.1 + - @backstage/integration-react@1.2.12 + - @backstage/plugin-auth-react@0.1.21 + - @backstage/plugin-search-common@1.2.21 + +## @backstage/app-defaults@1.7.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.18.3 + - @backstage/core-plugin-api@1.12.0 + - @backstage/core-app-api@1.19.2 + - @backstage/plugin-permission-react@0.4.38 + +## @backstage/backend-defaults@0.13.1 + +### Patch Changes + +- 9bcfa77: Adjusted the log line wording of task worker starting + +- 91ab2eb: Fix a bug in the Gitlab URL reader where `search` did not handle multiple globs + +- fa255f5: Support for Bitbucket Cloud's API token was added as `appPassword` is deprecated (no new creation from September 9, 2025) and will be removed on June 9, 2026. + + API token usage example: + + ```yaml + integrations: + bitbucketCloud: + - username: user@domain.com + token: my-token + ``` + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. + +- b2f6a5a: Fix #31348 issue where BitbucketUrlReader ignored provided token and instead always used integration credentials + +- Updated dependencies + - @backstage/integration@1.18.2 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/backend-app-api@1.3.0 + - @backstage/plugin-events-node@0.4.17 + - @backstage/plugin-auth-node@0.6.9 + - @backstage/config-loader@1.10.6 + - @backstage/config@1.3.6 + - @backstage/cli-node@0.2.15 + - @backstage/integration-aws-node@0.1.19 + - @backstage/plugin-permission-node@0.10.6 + +## @backstage/backend-dynamic-feature-service@0.7.6 + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/backend-defaults@0.13.1 + - @backstage/plugin-catalog-backend@3.2.0 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-permission-common@0.9.3 + - @backstage/plugin-search-backend-node@1.3.17 + - @backstage/plugin-events-backend@0.5.8 + - @backstage/plugin-events-node@0.4.17 + - @backstage/plugin-auth-node@0.6.9 + - @backstage/config-loader@1.10.6 + - @backstage/config@1.3.6 + - @backstage/cli-node@0.2.15 + - @backstage/plugin-scaffolder-node@0.12.1 + - @backstage/backend-openapi-utils@0.6.3 + - @backstage/plugin-app-node@0.1.39 + - @backstage/plugin-permission-node@0.10.6 + - @backstage/plugin-search-common@1.2.21 + +## @backstage/backend-openapi-utils@0.6.3 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + +## @backstage/catalog-client@1.12.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.7.6 + +## @backstage/catalog-model@1.7.6 + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. + +## @backstage/cli@0.34.5 + +### Patch Changes + +- fc7cbfc: The templates executed with the `yarn new` command now supports templating filenames. +- da19cb5: Fix inconsistent behavior in the `new` command for the `@internal` scope: it now consistently defaults to the `backstage-plugin-` infix whether the `--scope` option is not set or it's set to `internal`. +- fc7cbfc: Added a template for the `yarn new` command to create an catalog entity provider. To add this template to an explicit list in the root `package.json`, use `@backstage/cli/templates/catalog-provider-module`. +- b2bef92: Convert all enums to erasable-syntax compliant patterns +- 279279c: Fixes an issue where using the `backstage-cli new --scope` command with a scope that already includes the `@` symbol (e.g., `@backstage-community`) would result in a double `@@` prefix in the generated package name, causing invalid `package.json` files. +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/integration@1.18.2 + - @backstage/eslint-plugin@0.2.0 + - @backstage/config-loader@1.10.6 + - @backstage/config@1.3.6 + - @backstage/cli-node@0.2.15 + - @backstage/catalog-model@1.7.6 + +## @backstage/cli-node@0.2.15 + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. + +## @backstage/config@1.3.6 + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. + +## @backstage/config-loader@1.10.6 + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/config@1.3.6 + +## @backstage/core-app-api@1.19.2 + +### Patch Changes + +- b2bef92: Convert all enums to erasable-syntax compliant patterns +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/core-plugin-api@1.12.0 + - @backstage/config@1.3.6 + +## @backstage/core-compat-api@0.5.4 + +### Patch Changes + +- 4d03f08: Internal refactor of route reference implementations with minor updates to the `toString` implementations. +- Updated dependencies + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/plugin-catalog-react@1.21.3 + - @backstage/core-plugin-api@1.12.0 + +## @backstage/core-components@0.18.3 + +### Patch Changes + +- 1c7e1ce: - Revert `viewbox` back to old values. + - Added `fullScreen` prop to `EntityCatalogGraphCard` +- 96ad674: Line numbers in LogViewer will not be selectable in UI anymore +- b2bef92: Convert all enums to erasable-syntax compliant patterns +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/core-plugin-api@1.12.0 + - @backstage/config@1.3.6 + +## @backstage/create-app@0.7.6 + +### Patch Changes + +- 2c1fe37: Bumped create-app version. +- 20fae88: Bumped create-app version. +- 9f939a6: Added `@backstage/plugin-app-visualizer` to the app in the `--next` template. +- fc7cbfc: Added the new `@backstage/cli/templates/catalog-provider-module` template to the explicit template configuration for the `next-app` template. + +## @backstage/dev-utils@1.1.17 + +### Patch Changes + +- b29a856: Fixed styling of the dev app by adding a lazy import of `@backstage/ui/css/styles.css`. +- Updated dependencies + - @backstage/ui@0.9.0 + - @backstage/plugin-catalog-react@1.21.3 + - @backstage/core-components@0.18.3 + - @backstage/core-plugin-api@1.12.0 + - @backstage/core-app-api@1.19.2 + - @backstage/catalog-model@1.7.6 + - @backstage/app-defaults@1.7.2 + - @backstage/integration-react@1.2.12 + +## @backstage/frontend-app-api@0.13.2 + +### Patch Changes + +- 4d03f08: Internal refactor of route reference implementations with minor updates to the `toString` implementations. +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/core-plugin-api@1.12.0 + - @backstage/core-app-api@1.19.2 + - @backstage/config@1.3.6 + - @backstage/frontend-defaults@0.3.3 + +## @backstage/frontend-defaults@0.3.3 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/frontend-app-api@0.13.2 + - @backstage/core-components@0.18.3 + - @backstage/config@1.3.6 + - @backstage/plugin-app@0.3.2 + +## @backstage/frontend-dynamic-feature-loader@0.1.7 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/config@1.3.6 + +## @backstage/frontend-test-utils@0.4.1 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/frontend-app-api@0.13.2 + - @backstage/config@1.3.6 + - @backstage/plugin-app@0.3.2 + - @backstage/test-utils@1.7.13 + +## @backstage/integration@1.18.2 + +### Patch Changes + +- fa255f5: Support for Bitbucket Cloud's API token was added as `appPassword` is deprecated (no new creation from September 9, 2025) and will be removed on June 9, 2026. + + API token usage example: + + ```yaml + integrations: + bitbucketCloud: + - username: user@domain.com + token: my-token + ``` + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. + +- Updated dependencies + - @backstage/config@1.3.6 + +## @backstage/integration-aws-node@0.1.19 + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/config@1.3.6 + +## @backstage/integration-react@1.2.12 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.18.2 + - @backstage/core-plugin-api@1.12.0 + - @backstage/config@1.3.6 + +## @techdocs/cli@1.10.2 + +### Patch Changes + +- c2a2017: Fix for missing styles due to move to BUI. +- Updated dependencies + - @backstage/backend-defaults@0.13.1 + - @backstage/plugin-techdocs-node@1.13.9 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + +## @backstage/test-utils@1.7.13 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.12.0 + - @backstage/plugin-permission-common@0.9.3 + - @backstage/core-app-api@1.19.2 + - @backstage/plugin-permission-react@0.4.38 + - @backstage/config@1.3.6 + +## @backstage/plugin-api-docs@0.13.1 + +### Patch Changes + +- 7c281a5: Add i18n support for Raw tab title and an error message +- Updated dependencies + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/core-compat-api@0.5.4 + - @backstage/plugin-catalog@1.32.0 + - @backstage/plugin-catalog-react@1.21.3 + - @backstage/core-components@0.18.3 + - @backstage/core-plugin-api@1.12.0 + - @backstage/plugin-permission-react@0.4.38 + - @backstage/catalog-model@1.7.6 + - @backstage/plugin-catalog-common@1.1.7 + +## @backstage/plugin-app@0.3.2 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/core-components@0.18.3 + - @backstage/core-plugin-api@1.12.0 + - @backstage/plugin-permission-react@0.4.38 + - @backstage/integration-react@1.2.12 + +## @backstage/plugin-app-backend@0.5.8 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-auth-node@0.6.9 + - @backstage/config-loader@1.10.6 + - @backstage/config@1.3.6 + - @backstage/plugin-app-node@0.1.39 + +## @backstage/plugin-app-node@0.1.39 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/config-loader@1.10.6 + +## @backstage/plugin-app-visualizer@0.1.25 + +### Patch Changes + +- e81b3f0: Improve tree visualizer to use a horizontal layout and fill the content space. +- 722e2df: Migrated to use `@backstage/ui`. +- Updated dependencies + - @backstage/ui@0.9.0 + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/core-components@0.18.3 + - @backstage/core-plugin-api@1.12.0 + +## @backstage/plugin-auth@0.1.2 + +### Patch Changes + +- 1609e79: Authentication content screen now uses application title. +- Updated dependencies + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/core-components@0.18.3 + +## @backstage/plugin-auth-backend@0.25.6 + +### Patch Changes + +- a9315d0: Change internal `state` column to `text` to support state of over 255 characters + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. + +- 51ff7d8: Allow configuring dynamic client registration token expiration with config `auth.experimentalDynamicClientRegistration.tokenExpiration`. + + Maximum expiration for the DCR token is 24 hours. Default expiration is 1 hour. + +- Updated dependencies + - @backstage/plugin-catalog-node@1.20.0 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-auth-node@0.6.9 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + +## @backstage/plugin-auth-backend-module-atlassian-provider@0.4.9 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-auth-node@0.6.9 + +## @backstage/plugin-auth-backend-module-auth0-provider@0.2.9 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-auth-node@0.6.9 + +## @backstage/plugin-auth-backend-module-aws-alb-provider@0.4.9 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-auth-backend@0.25.6 + - @backstage/plugin-auth-node@0.6.9 + +## @backstage/plugin-auth-backend-module-azure-easyauth-provider@0.2.14 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-auth-node@0.6.9 + - @backstage/catalog-model@1.7.6 + +## @backstage/plugin-auth-backend-module-bitbucket-provider@0.3.9 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-auth-node@0.6.9 + +## @backstage/plugin-auth-backend-module-bitbucket-server-provider@0.2.9 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-auth-node@0.6.9 + +## @backstage/plugin-auth-backend-module-cloudflare-access-provider@0.4.9 + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-auth-node@0.6.9 + - @backstage/config@1.3.6 + +## @backstage/plugin-auth-backend-module-gcp-iap-provider@0.4.9 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-auth-node@0.6.9 + +## @backstage/plugin-auth-backend-module-github-provider@0.3.9 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-auth-node@0.6.9 + +## @backstage/plugin-auth-backend-module-gitlab-provider@0.3.9 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-auth-node@0.6.9 + +## @backstage/plugin-auth-backend-module-google-provider@0.3.9 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-auth-node@0.6.9 + +## @backstage/plugin-auth-backend-module-guest-provider@0.2.14 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-auth-node@0.6.9 + - @backstage/catalog-model@1.7.6 + +## @backstage/plugin-auth-backend-module-microsoft-provider@0.3.9 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-auth-node@0.6.9 + +## @backstage/plugin-auth-backend-module-oauth2-provider@0.4.9 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-auth-node@0.6.9 + +## @backstage/plugin-auth-backend-module-oauth2-proxy-provider@0.2.14 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-auth-node@0.6.9 + +## @backstage/plugin-auth-backend-module-oidc-provider@0.4.9 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-auth-backend@0.25.6 + - @backstage/plugin-auth-node@0.6.9 + - @backstage/config@1.3.6 + +## @backstage/plugin-auth-backend-module-okta-provider@0.2.9 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-auth-node@0.6.9 + +## @backstage/plugin-auth-backend-module-onelogin-provider@0.3.9 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-auth-node@0.6.9 + +## @backstage/plugin-auth-backend-module-openshift-provider@0.1.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-auth-node@0.6.9 + - @backstage/catalog-model@1.7.6 + +## @backstage/plugin-auth-backend-module-pinniped-provider@0.3.9 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-auth-node@0.6.9 + - @backstage/config@1.3.6 + +## @backstage/plugin-auth-backend-module-vmware-cloud-provider@0.5.9 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-auth-node@0.6.9 + - @backstage/catalog-model@1.7.6 + +## @backstage/plugin-auth-node@0.6.9 + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + - @backstage/catalog-client@1.12.1 + +## @backstage/plugin-auth-react@0.1.21 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.18.3 + - @backstage/core-plugin-api@1.12.0 + +## @backstage/plugin-bitbucket-cloud-common@0.3.4 + +### Patch Changes + +- fa255f5: Support for Bitbucket Cloud's API token was added as `appPassword` is deprecated (no new creation from September 9, 2025) and will be removed on June 9, 2026. + + API token usage example: + + ```yaml + integrations: + bitbucketCloud: + - username: user@domain.com + token: my-token + ``` + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. + +- Updated dependencies + - @backstage/integration@1.18.2 + +## @backstage/plugin-catalog-backend-module-aws@0.4.17 + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/backend-defaults@0.13.1 + - @backstage/plugin-catalog-node@1.20.0 + - @backstage/integration@1.18.2 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-kubernetes-common@0.9.8 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + - @backstage/integration-aws-node@0.1.19 + - @backstage/plugin-catalog-common@1.1.7 + +## @backstage/plugin-catalog-backend-module-azure@0.3.11 + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/plugin-catalog-node@1.20.0 + - @backstage/integration@1.18.2 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/config@1.3.6 + - @backstage/plugin-catalog-common@1.1.7 + +## @backstage/plugin-catalog-backend-module-backstage-openapi@0.5.8 + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/plugin-catalog-node@1.20.0 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + - @backstage/backend-openapi-utils@0.6.3 + +## @backstage/plugin-catalog-backend-module-bitbucket-cloud@0.5.5 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.20.0 + - @backstage/plugin-bitbucket-cloud-common@0.3.4 + - @backstage/integration@1.18.2 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-events-node@0.4.17 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + - @backstage/plugin-catalog-common@1.1.7 + +## @backstage/plugin-catalog-backend-module-bitbucket-server@0.5.5 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.20.0 + - @backstage/integration@1.18.2 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-events-node@0.4.17 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + - @backstage/plugin-catalog-common@1.1.7 + +## @backstage/plugin-catalog-backend-module-gcp@0.3.14 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.20.0 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-kubernetes-common@0.9.8 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + +## @backstage/plugin-catalog-backend-module-gerrit@0.3.8 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.20.0 + - @backstage/integration@1.18.2 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/config@1.3.6 + - @backstage/plugin-catalog-common@1.1.7 + +## @backstage/plugin-catalog-backend-module-gitea@0.1.6 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.20.0 + - @backstage/integration@1.18.2 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/config@1.3.6 + - @backstage/plugin-catalog-common@1.1.7 + +## @backstage/plugin-catalog-backend-module-github@0.11.2 + +### Patch Changes + +- 999d1c1: Added configurable `pageSizes` for GitHub GraphQL API queries to prevent `RESOURCE_LIMITS_EXCEEDED` errors with organizations with large number of repositories. Please see the [GitHub Discovery documentation](https://backstage.io/docs/integrations/github/discovery#configuration) for new configuration options. +- Updated dependencies + - @backstage/plugin-catalog-node@1.20.0 + - @backstage/integration@1.18.2 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-events-node@0.4.17 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + - @backstage/plugin-catalog-common@1.1.7 + +## @backstage/plugin-catalog-backend-module-github-org@0.3.16 + +### Patch Changes + +- 999d1c1: Added configurable `pageSizes` for GitHub GraphQL API queries to prevent `RESOURCE_LIMITS_EXCEEDED` errors with organizations with large number of teams and members. Please see the [GitHub Org Data documentation](https://backstage.io/docs/integrations/github/org#configuration-details) for new configuration options. +- Updated dependencies + - @backstage/plugin-catalog-node@1.20.0 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-catalog-backend-module-github@0.11.2 + - @backstage/plugin-events-node@0.4.17 + - @backstage/config@1.3.6 + +## @backstage/plugin-catalog-backend-module-gitlab@0.7.5 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.13.1 + - @backstage/plugin-catalog-node@1.20.0 + - @backstage/integration@1.18.2 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-events-node@0.4.17 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + - @backstage/plugin-catalog-common@1.1.7 + +## @backstage/plugin-catalog-backend-module-gitlab-org@0.2.15 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.20.0 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-events-node@0.4.17 + - @backstage/plugin-catalog-backend-module-gitlab@0.7.5 + +## @backstage/plugin-catalog-backend-module-incremental-ingestion@0.7.6 + +### Patch Changes + +- 70745c5: Correctly handle entity removal computation when DB count query returns string +- Updated dependencies + - @backstage/backend-defaults@0.13.1 + - @backstage/plugin-catalog-backend@3.2.0 + - @backstage/plugin-catalog-node@1.20.0 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-permission-common@0.9.3 + - @backstage/plugin-events-node@0.4.17 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + +## @backstage/plugin-catalog-backend-module-logs@0.1.16 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@3.2.0 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-events-node@0.4.17 + +## @backstage/plugin-catalog-backend-module-msgraph@0.8.2 + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/plugin-catalog-node@1.20.0 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + - @backstage/plugin-catalog-common@1.1.7 + +## @backstage/plugin-catalog-backend-module-openapi@0.2.16 + +### Patch Changes + +- a5bcb2a: fix wrong dereferencing for AsyncApi 3 documents +- Updated dependencies + - @backstage/plugin-catalog-node@1.20.0 + - @backstage/integration@1.18.2 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/catalog-model@1.7.6 + - @backstage/plugin-catalog-common@1.1.7 + +## @backstage/plugin-catalog-backend-module-puppetdb@0.2.16 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.20.0 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + +## @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.14 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.20.0 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/catalog-model@1.7.6 + - @backstage/plugin-catalog-common@1.1.7 + - @backstage/plugin-scaffolder-common@1.7.3 + +## @backstage/plugin-catalog-backend-module-unprocessed@0.6.6 + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/plugin-catalog-node@1.20.0 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-permission-common@0.9.3 + - @backstage/plugin-auth-node@0.6.9 + - @backstage/catalog-model@1.7.6 + - @backstage/plugin-catalog-unprocessed-entities-common@0.0.11 + +## @backstage/plugin-catalog-common@1.1.7 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.9.3 + - @backstage/catalog-model@1.7.6 + - @backstage/plugin-search-common@1.2.21 + +## @backstage/plugin-catalog-graph@0.5.3 + +### Patch Changes + +- a2d7ae7: Ensure the catalog graph entity card respects the height prop so the visualization scales down properly on wide screens. +- 1c7e1ce: - Revert `viewbox` back to old values. + - Added `fullScreen` prop to `EntityCatalogGraphCard` +- b2bef92: Convert all enums to erasable-syntax compliant patterns +- Updated dependencies + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/core-compat-api@0.5.4 + - @backstage/plugin-catalog-react@1.21.3 + - @backstage/core-components@0.18.3 + - @backstage/core-plugin-api@1.12.0 + - @backstage/catalog-model@1.7.6 + - @backstage/catalog-client@1.12.1 + +## @backstage/plugin-catalog-import@0.13.7 + +### Patch Changes + +- f987bfd: Fixed missing `catalog.entity.create` permission authorization in the default page extension. +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/core-compat-api@0.5.4 + - @backstage/plugin-catalog-react@1.21.3 + - @backstage/integration@1.18.2 + - @backstage/core-components@0.18.3 + - @backstage/core-plugin-api@1.12.0 + - @backstage/plugin-permission-react@0.4.38 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + - @backstage/catalog-client@1.12.1 + - @backstage/integration-react@1.2.12 + - @backstage/plugin-catalog-common@1.1.7 + +## @backstage/plugin-catalog-react@1.21.3 + +### Patch Changes + +- 36d7582: Added missing i18n +- 2b7924b: Apply default ordering of templates +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- 904d136: Fixed catalog filter "all" not appearing as selected when set as the initially selected filter. +- Updated dependencies + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/core-compat-api@0.5.4 + - @backstage/core-components@0.18.3 + - @backstage/core-plugin-api@1.12.0 + - @backstage/plugin-permission-common@0.9.3 + - @backstage/plugin-permission-react@0.4.38 + - @backstage/catalog-model@1.7.6 + - @backstage/frontend-test-utils@0.4.1 + - @backstage/catalog-client@1.12.1 + - @backstage/integration-react@1.2.12 + - @backstage/plugin-catalog-common@1.1.7 + +## @backstage/plugin-catalog-unprocessed-entities@0.2.23 + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/core-compat-api@0.5.4 + - @backstage/core-components@0.18.3 + - @backstage/core-plugin-api@1.12.0 + - @backstage/catalog-model@1.7.6 + +## @backstage/plugin-catalog-unprocessed-entities-common@0.0.11 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.9.3 + +## @backstage/plugin-config-schema@0.1.74 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.18.3 + - @backstage/core-plugin-api@1.12.0 + +## @backstage/plugin-devtools@0.1.33 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/core-compat-api@0.5.4 + - @backstage/core-components@0.18.3 + - @backstage/core-plugin-api@1.12.0 + - @backstage/plugin-devtools-common@0.1.19 + - @backstage/plugin-permission-react@0.4.38 + +## @backstage/plugin-devtools-backend@0.5.11 + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/backend-defaults@0.13.1 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-permission-common@0.9.3 + - @backstage/plugin-devtools-common@0.1.19 + - @backstage/config-loader@1.10.6 + - @backstage/config@1.3.6 + - @backstage/plugin-permission-node@0.10.6 + +## @backstage/plugin-devtools-common@0.1.19 + +### Patch Changes + +- b2bef92: Convert all enums to erasable-syntax compliant patterns +- Updated dependencies + - @backstage/plugin-permission-common@0.9.3 + +## @backstage/plugin-events-backend@0.5.8 + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-events-node@0.4.17 + - @backstage/config@1.3.6 + - @backstage/backend-openapi-utils@0.6.3 + +## @backstage/plugin-events-backend-module-aws-sqs@0.4.17 + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-events-node@0.4.17 + - @backstage/config@1.3.6 + +## @backstage/plugin-events-backend-module-azure@0.2.26 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-events-node@0.4.17 + +## @backstage/plugin-events-backend-module-bitbucket-cloud@0.2.26 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-events-node@0.4.17 + +## @backstage/plugin-events-backend-module-bitbucket-server@0.1.7 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-events-node@0.4.17 + +## @backstage/plugin-events-backend-module-gerrit@0.2.26 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-events-node@0.4.17 + +## @backstage/plugin-events-backend-module-github@0.4.6 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.18.2 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-events-node@0.4.17 + - @backstage/config@1.3.6 + +## @backstage/plugin-events-backend-module-gitlab@0.3.7 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-events-node@0.4.17 + - @backstage/config@1.3.6 + +## @backstage/plugin-events-backend-module-google-pubsub@0.1.6 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-events-node@0.4.17 + - @backstage/config@1.3.6 + +## @backstage/plugin-events-backend-module-kafka@0.1.5 + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-events-node@0.4.17 + - @backstage/config@1.3.6 + +## @backstage/plugin-events-backend-test-utils@0.1.50 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.17 + +## @backstage/plugin-events-node@0.4.17 + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + +## @backstage/plugin-home@0.8.14 + +### Patch Changes + +- 2ac5d29: Allow customization of `VisitList` by adding optional `enrichVisit`, `transformPathname`, `canSave` functions to `VisitsStorageApi`, along with `VisitDisplayProvider` for colors, labels +- Updated dependencies + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/core-compat-api@0.5.4 + - @backstage/plugin-catalog-react@1.21.3 + - @backstage/core-components@0.18.3 + - @backstage/core-plugin-api@1.12.0 + - @backstage/core-app-api@1.19.2 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + - @backstage/plugin-home-react@0.1.32 + - @backstage/catalog-client@1.12.1 + +## @backstage/plugin-home-react@0.1.32 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/core-components@0.18.3 + - @backstage/core-plugin-api@1.12.0 + +## @backstage/plugin-kubernetes@0.12.13 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/core-compat-api@0.5.4 + - @backstage/plugin-catalog-react@1.21.3 + - @backstage/core-components@0.18.3 + - @backstage/plugin-kubernetes-common@0.9.8 + - @backstage/plugin-kubernetes-react@0.5.13 + - @backstage/core-plugin-api@1.12.0 + - @backstage/plugin-permission-react@0.4.38 + - @backstage/catalog-model@1.7.6 + +## @backstage/plugin-kubernetes-backend@0.20.4 + +### Patch Changes + +- 71c22f3: Removed/moved unused dependencies +- 1906d37: Updated dependency `@kubernetes/client-node` to `1.4.0`. +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/plugin-catalog-node@1.20.0 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-kubernetes-common@0.9.8 + - @backstage/plugin-kubernetes-node@0.3.6 + - @backstage/plugin-permission-common@0.9.3 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + - @backstage/integration-aws-node@0.1.19 + - @backstage/catalog-client@1.12.1 + - @backstage/plugin-permission-node@0.10.6 + +## @backstage/plugin-kubernetes-cluster@0.0.31 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.21.3 + - @backstage/core-components@0.18.3 + - @backstage/plugin-kubernetes-common@0.9.8 + - @backstage/plugin-kubernetes-react@0.5.13 + - @backstage/core-plugin-api@1.12.0 + - @backstage/plugin-permission-react@0.4.38 + - @backstage/catalog-model@1.7.6 + +## @backstage/plugin-kubernetes-common@0.9.8 + +### Patch Changes + +- 1906d37: Updated dependency `@kubernetes/client-node` to `1.4.0`. +- Updated dependencies + - @backstage/plugin-permission-common@0.9.3 + - @backstage/catalog-model@1.7.6 + +## @backstage/plugin-kubernetes-node@0.3.6 + +### Patch Changes + +- 1906d37: Updated dependency `@kubernetes/client-node` to `1.4.0`. +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-kubernetes-common@0.9.8 + - @backstage/catalog-model@1.7.6 + +## @backstage/plugin-kubernetes-react@0.5.13 + +### Patch Changes + +- 1906d37: Updated dependency `@kubernetes/client-node` to `1.4.0`. +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/core-components@0.18.3 + - @backstage/plugin-kubernetes-common@0.9.8 + - @backstage/core-plugin-api@1.12.0 + - @backstage/catalog-model@1.7.6 + +## @backstage/plugin-mcp-actions-backend@0.1.5 + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/backend-defaults@0.13.1 + - @backstage/plugin-catalog-node@1.20.0 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/catalog-client@1.12.1 + +## @backstage/plugin-mui-to-bui@0.2.1 + +### Patch Changes + +- 5c614ff: Updated BUI checkbox preview example to align with new component API. +- Updated dependencies + - @backstage/ui@0.9.0 + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/core-compat-api@0.5.4 + - @backstage/core-plugin-api@1.12.0 + +## @backstage/plugin-notifications@0.5.11 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/core-compat-api@0.5.4 + - @backstage/plugin-notifications-common@0.2.0 + - @backstage/core-components@0.18.3 + - @backstage/core-plugin-api@1.12.0 + - @backstage/plugin-signals-react@0.0.17 + +## @backstage/plugin-notifications-backend-module-email@0.3.16 + +### Patch Changes + +- 22a5362: Updated `AWS SES` client to version 2 to support `nodemailer` version 7. +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/plugin-catalog-node@1.20.0 + - @backstage/plugin-notifications-common@0.2.0 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-notifications-node@0.2.21 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + - @backstage/integration-aws-node@0.1.19 + - @backstage/catalog-client@1.12.1 + +## @backstage/plugin-notifications-backend-module-slack@0.2.1 + +### Patch Changes + +- d959bec: When an error message is logged due to inability to send a message with the Slack SDK, include the Slack Channel ID in the message to aid debugging. +- Updated dependencies + - @backstage/plugin-catalog-node@1.20.0 + - @backstage/plugin-notifications-common@0.2.0 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-notifications-node@0.2.21 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + +## @backstage/plugin-notifications-node@0.2.21 + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/plugin-notifications-common@0.2.0 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/catalog-model@1.7.6 + - @backstage/catalog-client@1.12.1 + - @backstage/plugin-signals-node@0.1.26 + +## @backstage/plugin-org@0.6.46 + +### Patch Changes + +- 6db9e7e: Improved responsiveness of GroupProfileCard component +- Updated dependencies + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/core-compat-api@0.5.4 + - @backstage/plugin-catalog-react@1.21.3 + - @backstage/core-components@0.18.3 + - @backstage/core-plugin-api@1.12.0 + - @backstage/catalog-model@1.7.6 + - @backstage/plugin-catalog-common@1.1.7 + +## @backstage/plugin-org-react@0.1.44 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.21.3 + - @backstage/core-components@0.18.3 + - @backstage/core-plugin-api@1.12.0 + - @backstage/catalog-model@1.7.6 + - @backstage/catalog-client@1.12.1 + +## @backstage/plugin-permission-backend@0.7.6 + +### Patch Changes + +- b2bef92: Convert all enums to erasable-syntax compliant patterns +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-permission-common@0.9.3 + - @backstage/plugin-auth-node@0.6.9 + - @backstage/config@1.3.6 + - @backstage/plugin-permission-node@0.10.6 + +## @backstage/plugin-permission-backend-module-allow-all-policy@0.2.14 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-permission-common@0.9.3 + - @backstage/plugin-auth-node@0.6.9 + - @backstage/plugin-permission-node@0.10.6 + +## @backstage/plugin-permission-common@0.9.3 + +### Patch Changes + +- b2bef92: Convert all enums to erasable-syntax compliant patterns +- Updated dependencies + - @backstage/config@1.3.6 + +## @backstage/plugin-permission-node@0.10.6 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-permission-common@0.9.3 + - @backstage/plugin-auth-node@0.6.9 + - @backstage/config@1.3.6 + +## @backstage/plugin-permission-react@0.4.38 + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/core-plugin-api@1.12.0 + - @backstage/plugin-permission-common@0.9.3 + - @backstage/config@1.3.6 + +## @backstage/plugin-proxy-backend@0.6.8 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-proxy-node@0.1.10 + +## @backstage/plugin-proxy-node@0.1.10 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + +## @backstage/plugin-scaffolder@1.34.3 + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/core-compat-api@0.5.4 + - @backstage/plugin-catalog-react@1.21.3 + - @backstage/integration@1.18.2 + - @backstage/plugin-scaffolder-react@1.19.3 + - @backstage/core-components@0.18.3 + - @backstage/core-plugin-api@1.12.0 + - @backstage/plugin-permission-react@0.4.38 + - @backstage/catalog-model@1.7.6 + - @backstage/plugin-techdocs-react@1.3.5 + - @backstage/catalog-client@1.12.1 + - @backstage/integration-react@1.2.12 + - @backstage/plugin-catalog-common@1.1.7 + - @backstage/plugin-scaffolder-common@1.7.3 + +## @backstage/plugin-scaffolder-backend@3.0.1 + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/backend-defaults@0.13.1 + - @backstage/plugin-catalog-node@1.20.0 + - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.15 + - @backstage/plugin-scaffolder-backend-module-bitbucket@0.3.16 + - @backstage/plugin-bitbucket-cloud-common@0.3.4 + - @backstage/integration@1.18.2 + - @backstage/plugin-scaffolder-backend-module-gitlab@0.10.0 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-permission-common@0.9.3 + - @backstage/plugin-events-node@0.4.17 + - @backstage/plugin-auth-node@0.6.9 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + - @backstage/plugin-scaffolder-node@0.12.1 + - @backstage/backend-openapi-utils@0.6.3 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.14 + - @backstage/plugin-permission-node@0.10.6 + - @backstage/plugin-scaffolder-backend-module-azure@0.2.15 + - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.15 + - @backstage/plugin-scaffolder-backend-module-gerrit@0.2.15 + - @backstage/plugin-scaffolder-backend-module-gitea@0.2.15 + - @backstage/plugin-scaffolder-backend-module-github@0.9.2 + - @backstage/plugin-scaffolder-common@1.7.3 + +## @backstage/plugin-scaffolder-backend-module-azure@0.2.15 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.18.2 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/config@1.3.6 + - @backstage/plugin-scaffolder-node@0.12.1 + +## @backstage/plugin-scaffolder-backend-module-bitbucket@0.3.16 + +### Patch Changes + +- fa255f5: Support for Bitbucket Cloud's API token was added as `appPassword` is deprecated (no new creation from September 9, 2025) and will be removed on June 9, 2026. + + API token usage example: + + ```yaml + integrations: + bitbucketCloud: + - username: user@domain.com + token: my-token + ``` + +- Updated dependencies + - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.15 + - @backstage/integration@1.18.2 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/config@1.3.6 + - @backstage/plugin-scaffolder-node@0.12.1 + - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.15 + +## @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.15 + +### Patch Changes + +- fa255f5: Support for Bitbucket Cloud's API token was added as `appPassword` is deprecated (no new creation from September 9, 2025) and will be removed on June 9, 2026. + + API token usage example: + + ```yaml + integrations: + bitbucketCloud: + - username: user@domain.com + token: my-token + ``` + +- Updated dependencies + - @backstage/plugin-bitbucket-cloud-common@0.3.4 + - @backstage/integration@1.18.2 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/config@1.3.6 + - @backstage/plugin-scaffolder-node@0.12.1 + +## @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.15 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.18.2 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/config@1.3.6 + - @backstage/plugin-scaffolder-node@0.12.1 + +## @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.15 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.18.2 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/config@1.3.6 + - @backstage/plugin-scaffolder-node@0.12.1 + +## @backstage/plugin-scaffolder-backend-module-cookiecutter@0.3.17 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.13.1 + - @backstage/integration@1.18.2 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/config@1.3.6 + - @backstage/plugin-scaffolder-node@0.12.1 + +## @backstage/plugin-scaffolder-backend-module-gcp@0.2.15 + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/integration@1.18.2 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/config@1.3.6 + - @backstage/plugin-scaffolder-node@0.12.1 + +## @backstage/plugin-scaffolder-backend-module-gerrit@0.2.15 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.18.2 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/config@1.3.6 + - @backstage/plugin-scaffolder-node@0.12.1 + +## @backstage/plugin-scaffolder-backend-module-gitea@0.2.15 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.18.2 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/config@1.3.6 + - @backstage/plugin-scaffolder-node@0.12.1 + +## @backstage/plugin-scaffolder-backend-module-github@0.9.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.20.0 + - @backstage/integration@1.18.2 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + - @backstage/plugin-scaffolder-node@0.12.1 + +## @backstage/plugin-scaffolder-backend-module-notifications@0.1.16 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-notifications-common@0.2.0 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-notifications-node@0.2.21 + - @backstage/plugin-scaffolder-node@0.12.1 + +## @backstage/plugin-scaffolder-backend-module-rails@0.5.15 + +### Patch Changes + +- b2bef92: Convert all enums to erasable-syntax compliant patterns +- Updated dependencies + - @backstage/integration@1.18.2 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/config@1.3.6 + - @backstage/plugin-scaffolder-node@0.12.1 + +## @backstage/plugin-scaffolder-backend-module-sentry@0.2.15 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/config@1.3.6 + - @backstage/plugin-scaffolder-node@0.12.1 + +## @backstage/plugin-scaffolder-backend-module-yeoman@0.4.16 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-scaffolder-node-test-utils@0.3.5 + - @backstage/plugin-scaffolder-node@0.12.1 + +## @backstage/plugin-scaffolder-common@1.7.3 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.18.2 + - @backstage/plugin-permission-common@0.9.3 + - @backstage/catalog-model@1.7.6 + +## @backstage/plugin-scaffolder-node@0.12.1 + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/integration@1.18.2 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-permission-common@0.9.3 + - @backstage/catalog-model@1.7.6 + - @backstage/plugin-scaffolder-common@1.7.3 + +## @backstage/plugin-scaffolder-node-test-utils@0.3.5 + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/backend-test-utils@1.10.0 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-scaffolder-node@0.12.1 + +## @backstage/plugin-scaffolder-react@1.19.3 + +### Patch Changes + +- 886a8a1: Fixed a bug in the Scaffolder's template parsing in the `useTemplateSchema` hook by removing the title instead of setting it to `undefined` +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/plugin-catalog-react@1.21.3 + - @backstage/core-components@0.18.3 + - @backstage/core-plugin-api@1.12.0 + - @backstage/plugin-permission-react@0.4.38 + - @backstage/catalog-model@1.7.6 + - @backstage/catalog-client@1.12.1 + - @backstage/plugin-scaffolder-common@1.7.3 + +## @backstage/plugin-search-backend@2.0.8 + +### Patch Changes + +- b2bef92: Convert all enums to erasable-syntax compliant patterns +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/backend-defaults@0.13.1 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-permission-common@0.9.3 + - @backstage/plugin-search-backend-node@1.3.17 + - @backstage/config@1.3.6 + - @backstage/backend-openapi-utils@0.6.3 + - @backstage/plugin-permission-node@0.10.6 + - @backstage/plugin-search-common@1.2.21 + +## @backstage/plugin-search-backend-module-catalog@0.3.10 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.20.0 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-permission-common@0.9.3 + - @backstage/plugin-search-backend-node@1.3.17 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + - @backstage/catalog-client@1.12.1 + - @backstage/plugin-catalog-common@1.1.7 + - @backstage/plugin-search-common@1.2.21 + +## @backstage/plugin-search-backend-module-elasticsearch@1.7.8 + +### Patch Changes + +- 71c22f3: Removed/moved unused dependencies +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-search-backend-node@1.3.17 + - @backstage/config@1.3.6 + - @backstage/integration-aws-node@0.1.19 + - @backstage/plugin-search-common@1.2.21 + +## @backstage/plugin-search-backend-module-explore@0.3.9 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-search-backend-node@1.3.17 + - @backstage/config@1.3.6 + - @backstage/plugin-search-common@1.2.21 + +## @backstage/plugin-search-backend-module-pg@0.5.50 + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-search-backend-node@1.3.17 + - @backstage/config@1.3.6 + - @backstage/plugin-search-common@1.2.21 + +## @backstage/plugin-search-backend-module-stack-overflow-collator@0.3.15 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-search-backend-node@1.3.17 + - @backstage/config@1.3.6 + - @backstage/plugin-search-common@1.2.21 + +## @backstage/plugin-search-backend-module-techdocs@0.4.8 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.20.0 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-permission-common@0.9.3 + - @backstage/plugin-search-backend-node@1.3.17 + - @backstage/plugin-techdocs-node@1.13.9 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + - @backstage/catalog-client@1.12.1 + - @backstage/plugin-catalog-common@1.1.7 + - @backstage/plugin-search-common@1.2.21 + +## @backstage/plugin-search-backend-node@1.3.17 + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-permission-common@0.9.3 + - @backstage/config@1.3.6 + - @backstage/plugin-search-common@1.2.21 + +## @backstage/plugin-search-common@1.2.21 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.9.3 + +## @backstage/plugin-signals@0.0.25 + +### Patch Changes + +- 71c22f3: Removed/moved unused dependencies +- f0f006e: Fixes a bug where the `SignalClient` would try to subscribe to the same channel twice after an error, instead of just once. +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/core-compat-api@0.5.4 + - @backstage/core-components@0.18.3 + - @backstage/core-plugin-api@1.12.0 + - @backstage/plugin-signals-react@0.0.17 + +## @backstage/plugin-signals-backend@0.3.10 + +### Patch Changes + +- 71c22f3: Removed/moved unused dependencies +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-events-node@0.4.17 + - @backstage/config@1.3.6 + - @backstage/plugin-signals-node@0.1.26 + +## @backstage/plugin-signals-node@0.1.26 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-events-node@0.4.17 + - @backstage/plugin-auth-node@0.6.9 + - @backstage/config@1.3.6 + +## @backstage/plugin-signals-react@0.0.17 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.12.0 + +## @backstage/plugin-techdocs-addons-test-utils@1.1.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-techdocs@1.16.0 + - @backstage/plugin-search-react@1.10.0 + - @backstage/plugin-catalog@1.32.0 + - @backstage/plugin-catalog-react@1.21.3 + - @backstage/core-plugin-api@1.12.0 + - @backstage/core-app-api@1.19.2 + - @backstage/plugin-techdocs-react@1.3.5 + - @backstage/integration-react@1.2.12 + - @backstage/test-utils@1.7.13 + +## @backstage/plugin-techdocs-backend@2.1.2 + +### Patch Changes + +- 71c22f3: Removed/moved unused dependencies +- Updated dependencies + - @backstage/backend-defaults@0.13.1 + - @backstage/plugin-catalog-node@1.20.0 + - @backstage/integration@1.18.2 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-techdocs-node@1.13.9 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + - @backstage/catalog-client@1.12.1 + +## @backstage/plugin-techdocs-module-addons-contrib@1.1.30 + +### Patch Changes + +- 6929480: ExpandableCollapse Techdocs Addon was breaking native sidebar collapse on Firefox +- Updated dependencies + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/integration@1.18.2 + - @backstage/core-components@0.18.3 + - @backstage/core-plugin-api@1.12.0 + - @backstage/plugin-techdocs-react@1.3.5 + - @backstage/integration-react@1.2.12 + +## @backstage/plugin-techdocs-node@1.13.9 + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/integration@1.18.2 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + - @backstage/integration-aws-node@0.1.19 + - @backstage/plugin-search-common@1.2.21 + +## @backstage/plugin-techdocs-react@1.3.5 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/core-components@0.18.3 + - @backstage/core-plugin-api@1.12.0 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + +## @backstage/plugin-user-settings@0.8.29 + +### Patch Changes + +- 2b6fda3: Revert `storageApiRef` implementation +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/core-compat-api@0.5.4 + - @backstage/plugin-catalog-react@1.21.3 + - @backstage/core-components@0.18.3 + - @backstage/core-plugin-api@1.12.0 + - @backstage/core-app-api@1.19.2 + - @backstage/catalog-model@1.7.6 + - @backstage/plugin-signals-react@0.0.17 + +## @backstage/plugin-user-settings-backend@0.3.8 + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/backend-defaults@0.13.1 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-auth-node@0.6.9 + - @backstage/plugin-signals-node@0.1.26 + +## example-app@0.2.115 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-api-docs@0.13.1 + - @backstage/ui@0.9.0 + - @backstage/plugin-org@0.6.46 + - @backstage/cli@0.34.5 + - @backstage/plugin-techdocs@1.16.0 + - @backstage/plugin-signals@0.0.25 + - @backstage/frontend-app-api@0.13.2 + - @backstage/plugin-search-react@1.10.0 + - @backstage/plugin-catalog@1.32.0 + - @backstage/plugin-search@1.5.0 + - @backstage/plugin-home@0.8.14 + - @backstage/plugin-catalog-react@1.21.3 + - @backstage/plugin-techdocs-module-addons-contrib@1.1.30 + - @backstage/plugin-scaffolder-react@1.19.3 + - @backstage/plugin-catalog-graph@0.5.3 + - @backstage/core-components@0.18.3 + - @backstage/plugin-user-settings@0.8.29 + - @backstage/core-plugin-api@1.12.0 + - @backstage/core-app-api@1.19.2 + - @backstage/plugin-catalog-import@0.13.7 + - @backstage/plugin-permission-react@0.4.38 + - @backstage/plugin-scaffolder@1.34.3 + - @backstage/plugin-catalog-unprocessed-entities@0.2.23 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + - @backstage/plugin-mui-to-bui@0.2.1 + - @backstage/plugin-devtools@0.1.33 + - @backstage/plugin-kubernetes@0.12.13 + - @backstage/plugin-notifications@0.5.11 + - @backstage/plugin-techdocs-react@1.3.5 + - @backstage/app-defaults@1.7.2 + - @backstage/integration-react@1.2.12 + - @backstage/plugin-auth-react@0.1.21 + - @backstage/plugin-catalog-common@1.1.7 + - @backstage/plugin-kubernetes-cluster@0.0.31 + - @backstage/plugin-search-common@1.2.21 + +## example-app-next@0.0.29 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-api-docs@0.13.1 + - @backstage/ui@0.9.0 + - @backstage/plugin-org@0.6.46 + - @backstage/cli@0.34.5 + - @backstage/plugin-techdocs@1.16.0 + - @backstage/plugin-signals@0.0.25 + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/frontend-app-api@0.13.2 + - @backstage/core-compat-api@0.5.4 + - @backstage/plugin-search-react@1.10.0 + - @backstage/plugin-catalog@1.32.0 + - @backstage/plugin-search@1.5.0 + - @backstage/plugin-home@0.8.14 + - @backstage/plugin-app-visualizer@0.1.25 + - @backstage/plugin-catalog-react@1.21.3 + - @backstage/plugin-techdocs-module-addons-contrib@1.1.30 + - @backstage/plugin-scaffolder-react@1.19.3 + - @backstage/plugin-catalog-graph@0.5.3 + - @backstage/core-components@0.18.3 + - @backstage/plugin-user-settings@0.8.29 + - @backstage/core-plugin-api@1.12.0 + - @backstage/core-app-api@1.19.2 + - @backstage/plugin-auth@0.1.2 + - @backstage/plugin-catalog-import@0.13.7 + - @backstage/plugin-permission-react@0.4.38 + - @backstage/plugin-scaffolder@1.34.3 + - @backstage/plugin-catalog-unprocessed-entities@0.2.23 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + - @backstage/frontend-defaults@0.3.3 + - @backstage/plugin-app@0.3.2 + - @backstage/plugin-kubernetes@0.12.13 + - @backstage/plugin-notifications@0.5.11 + - @backstage/plugin-techdocs-react@1.3.5 + - @backstage/app-defaults@1.7.2 + - @backstage/integration-react@1.2.12 + - @backstage/plugin-auth-react@0.1.21 + - @backstage/plugin-catalog-common@1.1.7 + - @backstage/plugin-kubernetes-cluster@0.0.31 + - @backstage/plugin-search-common@1.2.21 + +## app-next-example-plugin@0.0.29 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/core-components@0.18.3 + +## example-backend@0.0.44 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.13.1 + - @backstage/plugin-catalog-backend@3.2.0 + - @backstage/plugin-search-backend-module-elasticsearch@1.7.8 + - @backstage/plugin-kubernetes-backend@0.20.4 + - @backstage/plugin-techdocs-backend@2.1.2 + - @backstage/plugin-signals-backend@0.3.10 + - @backstage/plugin-notifications-backend@0.6.0 + - @backstage/plugin-catalog-backend-module-openapi@0.2.16 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-permission-backend@0.7.6 + - @backstage/plugin-permission-common@0.9.3 + - @backstage/plugin-search-backend@2.0.8 + - @backstage/plugin-auth-backend@0.25.6 + - @backstage/plugin-scaffolder-backend@3.0.1 + - @backstage/plugin-search-backend-node@1.3.17 + - @backstage/plugin-events-backend@0.5.8 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.5.8 + - @backstage/plugin-devtools-backend@0.5.11 + - @backstage/plugin-catalog-backend-module-unprocessed@0.6.6 + - @backstage/plugin-auth-node@0.6.9 + - @backstage/catalog-model@1.7.6 + - @backstage/plugin-mcp-actions-backend@0.1.5 + - @backstage/plugin-app-backend@0.5.8 + - @backstage/plugin-auth-backend-module-github-provider@0.3.9 + - @backstage/plugin-auth-backend-module-guest-provider@0.2.14 + - @backstage/plugin-auth-backend-module-openshift-provider@0.1.2 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.14 + - @backstage/plugin-events-backend-module-google-pubsub@0.1.6 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.2.14 + - @backstage/plugin-permission-node@0.10.6 + - @backstage/plugin-proxy-backend@0.6.8 + - @backstage/plugin-scaffolder-backend-module-github@0.9.2 + - @backstage/plugin-scaffolder-backend-module-notifications@0.1.16 + - @backstage/plugin-search-backend-module-catalog@0.3.10 + - @backstage/plugin-search-backend-module-explore@0.3.9 + - @backstage/plugin-search-backend-module-techdocs@0.4.8 + +## e2e-test@0.2.34 + +### Patch Changes + +- Updated dependencies + - @backstage/create-app@0.7.6 + +## @internal/frontend@0.0.15 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.13.0 + +## @internal/scaffolder@0.0.15 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/plugin-scaffolder-react@1.19.3 + +## techdocs-cli-embedded-app@0.2.114 + +### Patch Changes + +- Updated dependencies + - @backstage/ui@0.9.0 + - @backstage/cli@0.34.5 + - @backstage/plugin-techdocs@1.16.0 + - @backstage/plugin-catalog@1.32.0 + - @backstage/core-components@0.18.3 + - @backstage/core-plugin-api@1.12.0 + - @backstage/core-app-api@1.19.2 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + - @backstage/plugin-techdocs-react@1.3.5 + - @backstage/app-defaults@1.7.2 + - @backstage/integration-react@1.2.12 + - @backstage/test-utils@1.7.13 + +## @internal/plugin-todo-list@1.0.45 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.18.3 + - @backstage/core-plugin-api@1.12.0 + +## @internal/plugin-todo-list-backend@1.0.45 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + +## @internal/plugin-todo-list-common@1.0.28 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.9.3 diff --git a/package.json b/package.json index 31429c425a..fd9c500b1c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "root", - "version": "1.45.0-next.3", + "version": "1.45.0", "backstage": { "cli": { "new": { diff --git a/packages/app-defaults/CHANGELOG.md b/packages/app-defaults/CHANGELOG.md index fbbbdf6569..5143f6deac 100644 --- a/packages/app-defaults/CHANGELOG.md +++ b/packages/app-defaults/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/app-defaults +## 1.7.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.18.3 + - @backstage/core-plugin-api@1.12.0 + - @backstage/core-app-api@1.19.2 + - @backstage/plugin-permission-react@0.4.38 + ## 1.7.2-next.0 ### Patch Changes diff --git a/packages/app-defaults/package.json b/packages/app-defaults/package.json index 8cd48112b2..a13f28414d 100644 --- a/packages/app-defaults/package.json +++ b/packages/app-defaults/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/app-defaults", - "version": "1.7.2-next.0", + "version": "1.7.2", "description": "Provides the default wiring of a Backstage App", "backstage": { "role": "web-library" diff --git a/packages/app-next-example-plugin/CHANGELOG.md b/packages/app-next-example-plugin/CHANGELOG.md index 74ba940174..ee662ff631 100644 --- a/packages/app-next-example-plugin/CHANGELOG.md +++ b/packages/app-next-example-plugin/CHANGELOG.md @@ -1,5 +1,13 @@ # app-next-example-plugin +## 0.0.29 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/core-components@0.18.3 + ## 0.0.29-next.0 ### Patch Changes diff --git a/packages/app-next-example-plugin/package.json b/packages/app-next-example-plugin/package.json index 5415d793b3..b3db6cac60 100644 --- a/packages/app-next-example-plugin/package.json +++ b/packages/app-next-example-plugin/package.json @@ -1,6 +1,6 @@ { "name": "app-next-example-plugin", - "version": "0.0.29-next.0", + "version": "0.0.29", "description": "Backstage internal example plugin", "backstage": { "role": "frontend-plugin", diff --git a/packages/app-next/CHANGELOG.md b/packages/app-next/CHANGELOG.md index c632471817..131819dd8e 100644 --- a/packages/app-next/CHANGELOG.md +++ b/packages/app-next/CHANGELOG.md @@ -1,5 +1,51 @@ # example-app-next +## 0.0.29 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-api-docs@0.13.1 + - @backstage/ui@0.9.0 + - @backstage/plugin-org@0.6.46 + - @backstage/cli@0.34.5 + - @backstage/plugin-techdocs@1.16.0 + - @backstage/plugin-signals@0.0.25 + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/frontend-app-api@0.13.2 + - @backstage/core-compat-api@0.5.4 + - @backstage/plugin-search-react@1.10.0 + - @backstage/plugin-catalog@1.32.0 + - @backstage/plugin-search@1.5.0 + - @backstage/plugin-home@0.8.14 + - @backstage/plugin-app-visualizer@0.1.25 + - @backstage/plugin-catalog-react@1.21.3 + - @backstage/plugin-techdocs-module-addons-contrib@1.1.30 + - @backstage/plugin-scaffolder-react@1.19.3 + - @backstage/plugin-catalog-graph@0.5.3 + - @backstage/core-components@0.18.3 + - @backstage/plugin-user-settings@0.8.29 + - @backstage/core-plugin-api@1.12.0 + - @backstage/core-app-api@1.19.2 + - @backstage/plugin-auth@0.1.2 + - @backstage/plugin-catalog-import@0.13.7 + - @backstage/plugin-permission-react@0.4.38 + - @backstage/plugin-scaffolder@1.34.3 + - @backstage/plugin-catalog-unprocessed-entities@0.2.23 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + - @backstage/frontend-defaults@0.3.3 + - @backstage/plugin-app@0.3.2 + - @backstage/plugin-kubernetes@0.12.13 + - @backstage/plugin-notifications@0.5.11 + - @backstage/plugin-techdocs-react@1.3.5 + - @backstage/app-defaults@1.7.2 + - @backstage/integration-react@1.2.12 + - @backstage/plugin-auth-react@0.1.21 + - @backstage/plugin-catalog-common@1.1.7 + - @backstage/plugin-kubernetes-cluster@0.0.31 + - @backstage/plugin-search-common@1.2.21 + ## 0.0.29-next.2 ### Patch Changes diff --git a/packages/app-next/package.json b/packages/app-next/package.json index 5dae3c9750..b5f9bcd7b1 100644 --- a/packages/app-next/package.json +++ b/packages/app-next/package.json @@ -1,6 +1,6 @@ { "name": "example-app-next", - "version": "0.0.29-next.2", + "version": "0.0.29", "backstage": { "role": "frontend" }, diff --git a/packages/app/CHANGELOG.md b/packages/app/CHANGELOG.md index 4609f1810a..f4a516501b 100644 --- a/packages/app/CHANGELOG.md +++ b/packages/app/CHANGELOG.md @@ -1,5 +1,47 @@ # example-app +## 0.2.115 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-api-docs@0.13.1 + - @backstage/ui@0.9.0 + - @backstage/plugin-org@0.6.46 + - @backstage/cli@0.34.5 + - @backstage/plugin-techdocs@1.16.0 + - @backstage/plugin-signals@0.0.25 + - @backstage/frontend-app-api@0.13.2 + - @backstage/plugin-search-react@1.10.0 + - @backstage/plugin-catalog@1.32.0 + - @backstage/plugin-search@1.5.0 + - @backstage/plugin-home@0.8.14 + - @backstage/plugin-catalog-react@1.21.3 + - @backstage/plugin-techdocs-module-addons-contrib@1.1.30 + - @backstage/plugin-scaffolder-react@1.19.3 + - @backstage/plugin-catalog-graph@0.5.3 + - @backstage/core-components@0.18.3 + - @backstage/plugin-user-settings@0.8.29 + - @backstage/core-plugin-api@1.12.0 + - @backstage/core-app-api@1.19.2 + - @backstage/plugin-catalog-import@0.13.7 + - @backstage/plugin-permission-react@0.4.38 + - @backstage/plugin-scaffolder@1.34.3 + - @backstage/plugin-catalog-unprocessed-entities@0.2.23 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + - @backstage/plugin-mui-to-bui@0.2.1 + - @backstage/plugin-devtools@0.1.33 + - @backstage/plugin-kubernetes@0.12.13 + - @backstage/plugin-notifications@0.5.11 + - @backstage/plugin-techdocs-react@1.3.5 + - @backstage/app-defaults@1.7.2 + - @backstage/integration-react@1.2.12 + - @backstage/plugin-auth-react@0.1.21 + - @backstage/plugin-catalog-common@1.1.7 + - @backstage/plugin-kubernetes-cluster@0.0.31 + - @backstage/plugin-search-common@1.2.21 + ## 0.2.115-next.2 ### Patch Changes diff --git a/packages/app/package.json b/packages/app/package.json index d6875be65b..1aac7276d9 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -1,6 +1,6 @@ { "name": "example-app", - "version": "0.2.115-next.2", + "version": "0.2.115", "backstage": { "role": "frontend" }, diff --git a/packages/backend-app-api/CHANGELOG.md b/packages/backend-app-api/CHANGELOG.md index 8514a08cf2..0352d670ef 100644 --- a/packages/backend-app-api/CHANGELOG.md +++ b/packages/backend-app-api/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/backend-app-api +## 1.3.0 + +### Minor Changes + +- a17d9df: Updates API for `instanceMetadata` service to return a list of plugins not features. + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/config@1.3.6 + ## 1.3.0-next.1 ### Minor Changes diff --git a/packages/backend-app-api/package.json b/packages/backend-app-api/package.json index b55d31a8a8..bb045c0ef7 100644 --- a/packages/backend-app-api/package.json +++ b/packages/backend-app-api/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/backend-app-api", - "version": "1.3.0-next.1", + "version": "1.3.0", "description": "Core API used by Backstage backend apps", "backstage": { "role": "node-library" diff --git a/packages/backend-defaults/CHANGELOG.md b/packages/backend-defaults/CHANGELOG.md index f168e43ee4..52b9168160 100644 --- a/packages/backend-defaults/CHANGELOG.md +++ b/packages/backend-defaults/CHANGELOG.md @@ -1,5 +1,36 @@ # @backstage/backend-defaults +## 0.13.1 + +### Patch Changes + +- 9bcfa77: Adjusted the log line wording of task worker starting +- 91ab2eb: Fix a bug in the Gitlab URL reader where `search` did not handle multiple globs +- fa255f5: Support for Bitbucket Cloud's API token was added as `appPassword` is deprecated (no new creation from September 9, 2025) and will be removed on June 9, 2026. + + API token usage example: + + ```yaml + integrations: + bitbucketCloud: + - username: user@domain.com + token: my-token + ``` + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- b2f6a5a: Fix #31348 issue where BitbucketUrlReader ignored provided token and instead always used integration credentials +- Updated dependencies + - @backstage/integration@1.18.2 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/backend-app-api@1.3.0 + - @backstage/plugin-events-node@0.4.17 + - @backstage/plugin-auth-node@0.6.9 + - @backstage/config-loader@1.10.6 + - @backstage/config@1.3.6 + - @backstage/cli-node@0.2.15 + - @backstage/integration-aws-node@0.1.19 + - @backstage/plugin-permission-node@0.10.6 + ## 0.13.1-next.1 ### Patch Changes diff --git a/packages/backend-defaults/package.json b/packages/backend-defaults/package.json index a089998dee..13d7b26224 100644 --- a/packages/backend-defaults/package.json +++ b/packages/backend-defaults/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/backend-defaults", - "version": "0.13.1-next.1", + "version": "0.13.1", "description": "Backend defaults used by Backstage backend apps", "backstage": { "role": "node-library" diff --git a/packages/backend-dynamic-feature-service/CHANGELOG.md b/packages/backend-dynamic-feature-service/CHANGELOG.md index 6e5ff62fd1..aaa91feebe 100644 --- a/packages/backend-dynamic-feature-service/CHANGELOG.md +++ b/packages/backend-dynamic-feature-service/CHANGELOG.md @@ -1,5 +1,28 @@ # @backstage/backend-dynamic-feature-service +## 0.7.6 + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/backend-defaults@0.13.1 + - @backstage/plugin-catalog-backend@3.2.0 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-permission-common@0.9.3 + - @backstage/plugin-search-backend-node@1.3.17 + - @backstage/plugin-events-backend@0.5.8 + - @backstage/plugin-events-node@0.4.17 + - @backstage/plugin-auth-node@0.6.9 + - @backstage/config-loader@1.10.6 + - @backstage/config@1.3.6 + - @backstage/cli-node@0.2.15 + - @backstage/plugin-scaffolder-node@0.12.1 + - @backstage/backend-openapi-utils@0.6.3 + - @backstage/plugin-app-node@0.1.39 + - @backstage/plugin-permission-node@0.10.6 + - @backstage/plugin-search-common@1.2.21 + ## 0.7.6-next.1 ### Patch Changes diff --git a/packages/backend-dynamic-feature-service/package.json b/packages/backend-dynamic-feature-service/package.json index c96ad18d94..39d59c679f 100644 --- a/packages/backend-dynamic-feature-service/package.json +++ b/packages/backend-dynamic-feature-service/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/backend-dynamic-feature-service", - "version": "0.7.6-next.1", + "version": "0.7.6", "description": "Backstage dynamic feature service", "backstage": { "role": "node-library" diff --git a/packages/backend-openapi-utils/CHANGELOG.md b/packages/backend-openapi-utils/CHANGELOG.md index 109df60032..dc84ed4c93 100644 --- a/packages/backend-openapi-utils/CHANGELOG.md +++ b/packages/backend-openapi-utils/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/backend-openapi-utils +## 0.6.3 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + ## 0.6.3-next.1 ### Patch Changes diff --git a/packages/backend-openapi-utils/package.json b/packages/backend-openapi-utils/package.json index d88bfb2a91..48834d3f26 100644 --- a/packages/backend-openapi-utils/package.json +++ b/packages/backend-openapi-utils/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/backend-openapi-utils", - "version": "0.6.3-next.1", + "version": "0.6.3", "description": "OpenAPI typescript support.", "backstage": { "role": "node-library" diff --git a/packages/backend-plugin-api/CHANGELOG.md b/packages/backend-plugin-api/CHANGELOG.md index a12734cc98..f9e6fb470f 100644 --- a/packages/backend-plugin-api/CHANGELOG.md +++ b/packages/backend-plugin-api/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/backend-plugin-api +## 1.5.0 + +### Minor Changes + +- a17d9df: Promote `instanceMetadata` service to main entrypoint. +- 62fc2de: Explicitly mark `coreServices.rootInstanceMetadata` as a root service. + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.9.3 + - @backstage/plugin-auth-node@0.6.9 + - @backstage/config@1.3.6 + - @backstage/plugin-permission-node@0.10.6 + ## 1.5.0-next.2 ### Minor Changes diff --git a/packages/backend-plugin-api/package.json b/packages/backend-plugin-api/package.json index 90d3959658..1095d18a9c 100644 --- a/packages/backend-plugin-api/package.json +++ b/packages/backend-plugin-api/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/backend-plugin-api", - "version": "1.5.0-next.2", + "version": "1.5.0", "description": "Core API used by Backstage backend plugins", "backstage": { "role": "node-library" diff --git a/packages/backend-test-utils/CHANGELOG.md b/packages/backend-test-utils/CHANGELOG.md index a30fc1fa68..ed13734949 100644 --- a/packages/backend-test-utils/CHANGELOG.md +++ b/packages/backend-test-utils/CHANGELOG.md @@ -1,5 +1,26 @@ # @backstage/backend-test-utils +## 1.10.0 + +### Minor Changes + +- d57b13b: Added support for Postgres 18 to the available `TestDatabases`. + + Note that the set of _default_ databases to test against for users of the `TestDatabases` class was also updated to include Postgres 14 and 18, instead of 13 and 17. If you need to override this, you can pass in an explicit `ids` argument, for example `ids: ['POSTGRES_17', 'POSTGRES_13', 'SQLITE_3']`. + +### Patch Changes + +- f3001fd: Tweak some of the mock services to have more precise types +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/backend-defaults@0.13.1 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/backend-app-api@1.3.0 + - @backstage/plugin-permission-common@0.9.3 + - @backstage/plugin-events-node@0.4.17 + - @backstage/plugin-auth-node@0.6.9 + - @backstage/config@1.3.6 + ## 1.10.0-next.2 ### Patch Changes diff --git a/packages/backend-test-utils/package.json b/packages/backend-test-utils/package.json index ea0c2d0c85..61ae7dbedb 100644 --- a/packages/backend-test-utils/package.json +++ b/packages/backend-test-utils/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/backend-test-utils", - "version": "1.10.0-next.2", + "version": "1.10.0", "description": "Test helpers library for Backstage backends", "backstage": { "role": "node-library" diff --git a/packages/backend/CHANGELOG.md b/packages/backend/CHANGELOG.md index cb84bcbc4c..0e7e6c3f24 100644 --- a/packages/backend/CHANGELOG.md +++ b/packages/backend/CHANGELOG.md @@ -1,5 +1,47 @@ # example-backend +## 0.0.44 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.13.1 + - @backstage/plugin-catalog-backend@3.2.0 + - @backstage/plugin-search-backend-module-elasticsearch@1.7.8 + - @backstage/plugin-kubernetes-backend@0.20.4 + - @backstage/plugin-techdocs-backend@2.1.2 + - @backstage/plugin-signals-backend@0.3.10 + - @backstage/plugin-notifications-backend@0.6.0 + - @backstage/plugin-catalog-backend-module-openapi@0.2.16 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-permission-backend@0.7.6 + - @backstage/plugin-permission-common@0.9.3 + - @backstage/plugin-search-backend@2.0.8 + - @backstage/plugin-auth-backend@0.25.6 + - @backstage/plugin-scaffolder-backend@3.0.1 + - @backstage/plugin-search-backend-node@1.3.17 + - @backstage/plugin-events-backend@0.5.8 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.5.8 + - @backstage/plugin-devtools-backend@0.5.11 + - @backstage/plugin-catalog-backend-module-unprocessed@0.6.6 + - @backstage/plugin-auth-node@0.6.9 + - @backstage/catalog-model@1.7.6 + - @backstage/plugin-mcp-actions-backend@0.1.5 + - @backstage/plugin-app-backend@0.5.8 + - @backstage/plugin-auth-backend-module-github-provider@0.3.9 + - @backstage/plugin-auth-backend-module-guest-provider@0.2.14 + - @backstage/plugin-auth-backend-module-openshift-provider@0.1.2 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.14 + - @backstage/plugin-events-backend-module-google-pubsub@0.1.6 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.2.14 + - @backstage/plugin-permission-node@0.10.6 + - @backstage/plugin-proxy-backend@0.6.8 + - @backstage/plugin-scaffolder-backend-module-github@0.9.2 + - @backstage/plugin-scaffolder-backend-module-notifications@0.1.16 + - @backstage/plugin-search-backend-module-catalog@0.3.10 + - @backstage/plugin-search-backend-module-explore@0.3.9 + - @backstage/plugin-search-backend-module-techdocs@0.4.8 + ## 0.0.44-next.2 ### Patch Changes diff --git a/packages/backend/package.json b/packages/backend/package.json index 199304ae5a..a3db44d8bf 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -1,6 +1,6 @@ { "name": "example-backend", - "version": "0.0.44-next.2", + "version": "0.0.44", "backstage": { "role": "backend" }, diff --git a/packages/catalog-client/CHANGELOG.md b/packages/catalog-client/CHANGELOG.md index 5eb97934f9..9ac3e62d06 100644 --- a/packages/catalog-client/CHANGELOG.md +++ b/packages/catalog-client/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/catalog-client +## 1.12.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.7.6 + ## 1.12.1-next.0 ### Patch Changes diff --git a/packages/catalog-client/package.json b/packages/catalog-client/package.json index e5c63b1e0d..fefca00189 100644 --- a/packages/catalog-client/package.json +++ b/packages/catalog-client/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/catalog-client", - "version": "1.12.1-next.0", + "version": "1.12.1", "description": "An isomorphic client for the catalog backend", "backstage": { "role": "common-library" diff --git a/packages/catalog-model/CHANGELOG.md b/packages/catalog-model/CHANGELOG.md index 9d42e9d675..2fb24c4943 100644 --- a/packages/catalog-model/CHANGELOG.md +++ b/packages/catalog-model/CHANGELOG.md @@ -1,5 +1,11 @@ # @backstage/catalog-model +## 1.7.6 + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. + ## 1.7.6-next.0 ### Patch Changes diff --git a/packages/catalog-model/package.json b/packages/catalog-model/package.json index 93a13b7edf..85c299e941 100644 --- a/packages/catalog-model/package.json +++ b/packages/catalog-model/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/catalog-model", - "version": "1.7.6-next.0", + "version": "1.7.6", "description": "Types and validators that help describe the model of a Backstage Catalog", "backstage": { "role": "common-library" diff --git a/packages/cli-node/CHANGELOG.md b/packages/cli-node/CHANGELOG.md index 7921933482..060289b753 100644 --- a/packages/cli-node/CHANGELOG.md +++ b/packages/cli-node/CHANGELOG.md @@ -1,5 +1,11 @@ # @backstage/cli-node +## 0.2.15 + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. + ## 0.2.15-next.0 ### Patch Changes diff --git a/packages/cli-node/package.json b/packages/cli-node/package.json index abd7c959a7..ea7be7b267 100644 --- a/packages/cli-node/package.json +++ b/packages/cli-node/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/cli-node", - "version": "0.2.15-next.0", + "version": "0.2.15", "description": "Node.js library for Backstage CLIs", "backstage": { "role": "node-library" diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md index 8f0c1a8a21..9b71f86074 100644 --- a/packages/cli/CHANGELOG.md +++ b/packages/cli/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/cli +## 0.34.5 + +### Patch Changes + +- fc7cbfc: The templates executed with the `yarn new` command now supports templating filenames. +- da19cb5: Fix inconsistent behavior in the `new` command for the `@internal` scope: it now consistently defaults to the `backstage-plugin-` infix whether the `--scope` option is not set or it's set to `internal`. +- fc7cbfc: Added a template for the `yarn new` command to create an catalog entity provider. To add this template to an explicit list in the root `package.json`, use `@backstage/cli/templates/catalog-provider-module`. +- b2bef92: Convert all enums to erasable-syntax compliant patterns +- 279279c: Fixes an issue where using the `backstage-cli new --scope` command with a scope that already includes the `@` symbol (e.g., `@backstage-community`) would result in a double `@@` prefix in the generated package name, causing invalid `package.json` files. +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/integration@1.18.2 + - @backstage/eslint-plugin@0.2.0 + - @backstage/config-loader@1.10.6 + - @backstage/config@1.3.6 + - @backstage/cli-node@0.2.15 + - @backstage/catalog-model@1.7.6 + ## 0.34.5-next.1 ### Patch Changes diff --git a/packages/cli/package.json b/packages/cli/package.json index bdd8a120c3..e6509c8736 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/cli", - "version": "0.34.5-next.1", + "version": "0.34.5", "description": "CLI for developing Backstage plugins and apps", "backstage": { "role": "cli" diff --git a/packages/config-loader/CHANGELOG.md b/packages/config-loader/CHANGELOG.md index c2433f3c35..b48612c854 100644 --- a/packages/config-loader/CHANGELOG.md +++ b/packages/config-loader/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/config-loader +## 1.10.6 + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/config@1.3.6 + ## 1.10.6-next.0 ### Patch Changes diff --git a/packages/config-loader/package.json b/packages/config-loader/package.json index 10afca8ba4..15118bfb06 100644 --- a/packages/config-loader/package.json +++ b/packages/config-loader/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/config-loader", - "version": "1.10.6-next.0", + "version": "1.10.6", "description": "Config loading functionality used by Backstage backend, and CLI", "backstage": { "role": "node-library" diff --git a/packages/config/CHANGELOG.md b/packages/config/CHANGELOG.md index 596a67a1ed..6bf73fb546 100644 --- a/packages/config/CHANGELOG.md +++ b/packages/config/CHANGELOG.md @@ -1,5 +1,11 @@ # @backstage/config +## 1.3.6 + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. + ## 1.3.6-next.0 ### Patch Changes diff --git a/packages/config/package.json b/packages/config/package.json index 75d15678c0..47e1e0a9e7 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/config", - "version": "1.3.6-next.0", + "version": "1.3.6", "description": "Config API used by Backstage core, backend, and CLI", "backstage": { "role": "common-library" diff --git a/packages/core-app-api/CHANGELOG.md b/packages/core-app-api/CHANGELOG.md index 0fd09f851b..34ba7e2146 100644 --- a/packages/core-app-api/CHANGELOG.md +++ b/packages/core-app-api/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/core-app-api +## 1.19.2 + +### Patch Changes + +- b2bef92: Convert all enums to erasable-syntax compliant patterns +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/core-plugin-api@1.12.0 + - @backstage/config@1.3.6 + ## 1.19.2-next.1 ### Patch Changes diff --git a/packages/core-app-api/package.json b/packages/core-app-api/package.json index 3ce23e2422..617ef4258f 100644 --- a/packages/core-app-api/package.json +++ b/packages/core-app-api/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/core-app-api", - "version": "1.19.2-next.1", + "version": "1.19.2", "description": "Core app API used by Backstage apps", "backstage": { "role": "web-library" diff --git a/packages/core-compat-api/CHANGELOG.md b/packages/core-compat-api/CHANGELOG.md index b8d03b5e1c..a8d28496f6 100644 --- a/packages/core-compat-api/CHANGELOG.md +++ b/packages/core-compat-api/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/core-compat-api +## 0.5.4 + +### Patch Changes + +- 4d03f08: Internal refactor of route reference implementations with minor updates to the `toString` implementations. +- Updated dependencies + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/plugin-catalog-react@1.21.3 + - @backstage/core-plugin-api@1.12.0 + ## 0.5.4-next.0 ### Patch Changes diff --git a/packages/core-compat-api/package.json b/packages/core-compat-api/package.json index 7b3c5ff9b9..012fb137b9 100644 --- a/packages/core-compat-api/package.json +++ b/packages/core-compat-api/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/core-compat-api", - "version": "0.5.4-next.0", + "version": "0.5.4", "backstage": { "role": "web-library" }, diff --git a/packages/core-components/CHANGELOG.md b/packages/core-components/CHANGELOG.md index b4d7f1c7b0..3238b8d627 100644 --- a/packages/core-components/CHANGELOG.md +++ b/packages/core-components/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/core-components +## 0.18.3 + +### Patch Changes + +- 1c7e1ce: - Revert `viewbox` back to old values. + - Added `fullScreen` prop to `EntityCatalogGraphCard` +- 96ad674: Line numbers in LogViewer will not be selectable in UI anymore +- b2bef92: Convert all enums to erasable-syntax compliant patterns +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/core-plugin-api@1.12.0 + - @backstage/config@1.3.6 + ## 0.18.3-next.2 ### Patch Changes diff --git a/packages/core-components/package.json b/packages/core-components/package.json index 958f566c88..30732b0b15 100644 --- a/packages/core-components/package.json +++ b/packages/core-components/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/core-components", - "version": "0.18.3-next.2", + "version": "0.18.3", "description": "Core components used by Backstage plugins and apps", "backstage": { "role": "web-library" diff --git a/packages/core-plugin-api/CHANGELOG.md b/packages/core-plugin-api/CHANGELOG.md index 29dedfe6a7..37e1b1f721 100644 --- a/packages/core-plugin-api/CHANGELOG.md +++ b/packages/core-plugin-api/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/core-plugin-api +## 1.12.0 + +### Minor Changes + +- 83439b1: All route references are now forwards compatible with the new frontend system, i.e. `@backstage/frontend-plugin-api`. This means they no longer need to be converted with `convertLegacyRouteRef` or `convertLegacyRouteRefs` from `@backstage/core-compat-api`. + +### Patch Changes + +- b2bef92: Convert all enums to erasable-syntax compliant patterns +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/config@1.3.6 + ## 1.11.2-next.1 ### Patch Changes diff --git a/packages/core-plugin-api/package.json b/packages/core-plugin-api/package.json index 921bc4af68..877abb6114 100644 --- a/packages/core-plugin-api/package.json +++ b/packages/core-plugin-api/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/core-plugin-api", - "version": "1.11.2-next.1", + "version": "1.12.0", "description": "Core API used by Backstage plugins", "backstage": { "role": "web-library" diff --git a/packages/create-app/CHANGELOG.md b/packages/create-app/CHANGELOG.md index f86586b990..7d745f36e5 100644 --- a/packages/create-app/CHANGELOG.md +++ b/packages/create-app/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/create-app +## 0.7.6 + +### Patch Changes + +- 2c1fe37: Bumped create-app version. +- 20fae88: Bumped create-app version. +- 9f939a6: Added `@backstage/plugin-app-visualizer` to the app in the `--next` template. +- fc7cbfc: Added the new `@backstage/cli/templates/catalog-provider-module` template to the explicit template configuration for the `next-app` template. + ## 0.7.6-next.3 ### Patch Changes diff --git a/packages/create-app/package.json b/packages/create-app/package.json index d0b5850d58..22c03cba3d 100644 --- a/packages/create-app/package.json +++ b/packages/create-app/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/create-app", - "version": "0.7.6-next.3", + "version": "0.7.6", "description": "A CLI that helps you create your own Backstage app", "backstage": { "role": "cli" diff --git a/packages/dev-utils/CHANGELOG.md b/packages/dev-utils/CHANGELOG.md index 056bc4d9f9..b46415a8cb 100644 --- a/packages/dev-utils/CHANGELOG.md +++ b/packages/dev-utils/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/dev-utils +## 1.1.17 + +### Patch Changes + +- b29a856: Fixed styling of the dev app by adding a lazy import of `@backstage/ui/css/styles.css`. +- Updated dependencies + - @backstage/ui@0.9.0 + - @backstage/plugin-catalog-react@1.21.3 + - @backstage/core-components@0.18.3 + - @backstage/core-plugin-api@1.12.0 + - @backstage/core-app-api@1.19.2 + - @backstage/catalog-model@1.7.6 + - @backstage/app-defaults@1.7.2 + - @backstage/integration-react@1.2.12 + ## 1.1.17-next.1 ### Patch Changes diff --git a/packages/dev-utils/package.json b/packages/dev-utils/package.json index c7147efda9..a2b5b89a85 100644 --- a/packages/dev-utils/package.json +++ b/packages/dev-utils/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/dev-utils", - "version": "1.1.17-next.1", + "version": "1.1.17", "description": "Utilities for developing Backstage plugins.", "backstage": { "role": "web-library" diff --git a/packages/e2e-test/CHANGELOG.md b/packages/e2e-test/CHANGELOG.md index a10481c28d..6190aa342d 100644 --- a/packages/e2e-test/CHANGELOG.md +++ b/packages/e2e-test/CHANGELOG.md @@ -1,5 +1,12 @@ # e2e-test +## 0.2.34 + +### Patch Changes + +- Updated dependencies + - @backstage/create-app@0.7.6 + ## 0.2.34-next.0 ### Patch Changes diff --git a/packages/e2e-test/package.json b/packages/e2e-test/package.json index 116c219359..c118650a41 100644 --- a/packages/e2e-test/package.json +++ b/packages/e2e-test/package.json @@ -1,6 +1,6 @@ { "name": "e2e-test", - "version": "0.2.34-next.0", + "version": "0.2.34", "description": "E2E test for verifying Backstage packages", "backstage": { "role": "cli" diff --git a/packages/eslint-plugin/CHANGELOG.md b/packages/eslint-plugin/CHANGELOG.md index 65acedd942..a823de9ee5 100644 --- a/packages/eslint-plugin/CHANGELOG.md +++ b/packages/eslint-plugin/CHANGELOG.md @@ -1,5 +1,11 @@ # @backstage/eslint-plugin +## 0.2.0 + +### Minor Changes + +- 926389b: Added `@backstage/no-ui-css-imports-in-non-frontend` rule, which ensures that CSS from `@backstage/ui` is not imported outside of the frontend app. + ## 0.2.0-next.0 ### Minor Changes diff --git a/packages/eslint-plugin/package.json b/packages/eslint-plugin/package.json index f7dc9eebcc..13db908e16 100644 --- a/packages/eslint-plugin/package.json +++ b/packages/eslint-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/eslint-plugin", - "version": "0.2.0-next.0", + "version": "0.2.0", "description": "Backstage ESLint plugin", "publishConfig": { "access": "public" diff --git a/packages/frontend-app-api/CHANGELOG.md b/packages/frontend-app-api/CHANGELOG.md index 38ec33c33a..447899badb 100644 --- a/packages/frontend-app-api/CHANGELOG.md +++ b/packages/frontend-app-api/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/frontend-app-api +## 0.13.2 + +### Patch Changes + +- 4d03f08: Internal refactor of route reference implementations with minor updates to the `toString` implementations. +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/core-plugin-api@1.12.0 + - @backstage/core-app-api@1.19.2 + - @backstage/config@1.3.6 + - @backstage/frontend-defaults@0.3.3 + ## 0.13.2-next.0 ### Patch Changes diff --git a/packages/frontend-app-api/package.json b/packages/frontend-app-api/package.json index 9bdf329f0f..ad5762a6f3 100644 --- a/packages/frontend-app-api/package.json +++ b/packages/frontend-app-api/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/frontend-app-api", - "version": "0.13.2-next.0", + "version": "0.13.2", "backstage": { "role": "web-library" }, diff --git a/packages/frontend-defaults/CHANGELOG.md b/packages/frontend-defaults/CHANGELOG.md index 651bdeb691..707062c0bb 100644 --- a/packages/frontend-defaults/CHANGELOG.md +++ b/packages/frontend-defaults/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/frontend-defaults +## 0.3.3 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/frontend-app-api@0.13.2 + - @backstage/core-components@0.18.3 + - @backstage/config@1.3.6 + - @backstage/plugin-app@0.3.2 + ## 0.3.3-next.0 ### Patch Changes diff --git a/packages/frontend-defaults/package.json b/packages/frontend-defaults/package.json index 3fcbb2c990..345bfcfb87 100644 --- a/packages/frontend-defaults/package.json +++ b/packages/frontend-defaults/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/frontend-defaults", - "version": "0.3.3-next.0", + "version": "0.3.3", "backstage": { "role": "web-library" }, diff --git a/packages/frontend-dynamic-feature-loader/CHANGELOG.md b/packages/frontend-dynamic-feature-loader/CHANGELOG.md index cc2c421a4e..347af8fff9 100644 --- a/packages/frontend-dynamic-feature-loader/CHANGELOG.md +++ b/packages/frontend-dynamic-feature-loader/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/frontend-dynamic-feature-loader +## 0.1.7 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/config@1.3.6 + ## 0.1.7-next.0 ### Patch Changes diff --git a/packages/frontend-dynamic-feature-loader/package.json b/packages/frontend-dynamic-feature-loader/package.json index ce61447770..4d15292803 100644 --- a/packages/frontend-dynamic-feature-loader/package.json +++ b/packages/frontend-dynamic-feature-loader/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/frontend-dynamic-feature-loader", - "version": "0.1.7-next.0", + "version": "0.1.7", "backstage": { "role": "web-library" }, diff --git a/packages/frontend-internal/CHANGELOG.md b/packages/frontend-internal/CHANGELOG.md index 7b31d280cb..f914c9036b 100644 --- a/packages/frontend-internal/CHANGELOG.md +++ b/packages/frontend-internal/CHANGELOG.md @@ -1,5 +1,12 @@ # @internal/frontend +## 0.0.15 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.13.0 + ## 0.0.15-next.0 ### Patch Changes diff --git a/packages/frontend-internal/package.json b/packages/frontend-internal/package.json index 37727cda97..216cdbc0fa 100644 --- a/packages/frontend-internal/package.json +++ b/packages/frontend-internal/package.json @@ -1,6 +1,6 @@ { "name": "@internal/frontend", - "version": "0.0.15-next.0", + "version": "0.0.15", "backstage": { "role": "web-library", "inline": true diff --git a/packages/frontend-plugin-api/CHANGELOG.md b/packages/frontend-plugin-api/CHANGELOG.md index 9c97055ceb..25396cf06b 100644 --- a/packages/frontend-plugin-api/CHANGELOG.md +++ b/packages/frontend-plugin-api/CHANGELOG.md @@ -1,5 +1,34 @@ # @backstage/frontend-plugin-api +## 0.13.0 + +### Minor Changes + +- 7d87b4f: Renamed `ExtensionDefinition` to `OverridableExtensionDefinition` and introduced a slimmer `ExtensionDefinition` type that does not include override methods. The overridable type is generally used as an output type, while plain `ExtensionDefinition`s are used for input. This reduces type conflicts across different of `@backstage/frontend-plugin-api`, improving long-term compatibility. + +### Patch Changes + +- 4d03f08: Internal refactor of route reference implementations with minor updates to the `toString` implementations. +- 7c6a66d: Added support for plugin-relative `attachTo` declarations for extension definitions. This allows for the creation of extension and extension blueprints that attach to other extensions of a particular `kind` in the same plugin, rather than needing to provide the exact extension ID. This is particularly useful when wanting to provide extension blueprints with a built-in hierarchy where the extensions created from one blueprint attach to extensions created from the other blueprint, for example: + + ```ts + // kind: 'tabbed-page' + const parentPage = TabbedPageBlueprint.make({ + params: {....} + }) + // attachTo: { kind: 'tabbed-page', input: 'tabs' } + const child1 = TabContentBlueprint.make({ + name: 'tab1', + params: {....} + }) + ``` + +- 878c251: Updated to `ExtensionInput` to make all type parameters optional. +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/core-components@0.18.3 + - @backstage/core-plugin-api@1.12.0 + ## 0.12.2-next.2 ### Patch Changes diff --git a/packages/frontend-plugin-api/package.json b/packages/frontend-plugin-api/package.json index fec762ff63..d5ee6427ad 100644 --- a/packages/frontend-plugin-api/package.json +++ b/packages/frontend-plugin-api/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/frontend-plugin-api", - "version": "0.12.2-next.2", + "version": "0.13.0", "backstage": { "role": "web-library" }, diff --git a/packages/frontend-test-utils/CHANGELOG.md b/packages/frontend-test-utils/CHANGELOG.md index 1fa18a1696..64b60b8a5e 100644 --- a/packages/frontend-test-utils/CHANGELOG.md +++ b/packages/frontend-test-utils/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/frontend-test-utils +## 0.4.1 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/frontend-app-api@0.13.2 + - @backstage/config@1.3.6 + - @backstage/plugin-app@0.3.2 + - @backstage/test-utils@1.7.13 + ## 0.4.1-next.0 ### Patch Changes diff --git a/packages/frontend-test-utils/package.json b/packages/frontend-test-utils/package.json index 18ab54d197..3c0c5098a7 100644 --- a/packages/frontend-test-utils/package.json +++ b/packages/frontend-test-utils/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/frontend-test-utils", - "version": "0.4.1-next.0", + "version": "0.4.1", "backstage": { "role": "web-library" }, diff --git a/packages/integration-aws-node/CHANGELOG.md b/packages/integration-aws-node/CHANGELOG.md index d49f70955d..60d231e612 100644 --- a/packages/integration-aws-node/CHANGELOG.md +++ b/packages/integration-aws-node/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/integration-aws-node +## 0.1.19 + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/config@1.3.6 + ## 0.1.19-next.0 ### Patch Changes diff --git a/packages/integration-aws-node/package.json b/packages/integration-aws-node/package.json index e3cd09cde0..0484a54e0a 100644 --- a/packages/integration-aws-node/package.json +++ b/packages/integration-aws-node/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/integration-aws-node", - "version": "0.1.19-next.0", + "version": "0.1.19", "description": "Helpers for fetching AWS account credentials", "backstage": { "role": "node-library" diff --git a/packages/integration-react/CHANGELOG.md b/packages/integration-react/CHANGELOG.md index 6956f04b08..55dc0ca100 100644 --- a/packages/integration-react/CHANGELOG.md +++ b/packages/integration-react/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/integration-react +## 1.2.12 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.18.2 + - @backstage/core-plugin-api@1.12.0 + - @backstage/config@1.3.6 + ## 1.2.12-next.0 ### Patch Changes diff --git a/packages/integration-react/package.json b/packages/integration-react/package.json index ca9dce00d9..3834dd7ff6 100644 --- a/packages/integration-react/package.json +++ b/packages/integration-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/integration-react", - "version": "1.2.12-next.0", + "version": "1.2.12", "description": "Frontend package for managing integrations towards external systems", "backstage": { "role": "web-library" diff --git a/packages/integration/CHANGELOG.md b/packages/integration/CHANGELOG.md index bcc2a938ae..6afb2d8ffb 100644 --- a/packages/integration/CHANGELOG.md +++ b/packages/integration/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/integration +## 1.18.2 + +### Patch Changes + +- fa255f5: Support for Bitbucket Cloud's API token was added as `appPassword` is deprecated (no new creation from September 9, 2025) and will be removed on June 9, 2026. + + API token usage example: + + ```yaml + integrations: + bitbucketCloud: + - username: user@domain.com + token: my-token + ``` + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/config@1.3.6 + ## 1.18.2-next.0 ### Patch Changes diff --git a/packages/integration/package.json b/packages/integration/package.json index 45928cd59b..3e3f792926 100644 --- a/packages/integration/package.json +++ b/packages/integration/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/integration", - "version": "1.18.2-next.0", + "version": "1.18.2", "description": "Helpers for managing integrations towards external systems", "backstage": { "role": "common-library" diff --git a/packages/repo-tools/CHANGELOG.md b/packages/repo-tools/CHANGELOG.md index d9ef90fe21..18eaffac1b 100644 --- a/packages/repo-tools/CHANGELOG.md +++ b/packages/repo-tools/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/repo-tools +## 0.16.0 + +### Minor Changes + +- 11c61f2: The `package-docs` command will now automatically use a `typedoc.json` file if one exists at the root of your project. + +### Patch Changes + +- 8f56eae: Updated knip-reports to detect dependencies in dev/alpha pattern +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/config-loader@1.10.6 + - @backstage/cli-node@0.2.15 + - @backstage/catalog-model@1.7.6 + ## 0.16.0-next.2 ### Minor Changes diff --git a/packages/repo-tools/package.json b/packages/repo-tools/package.json index b250018017..2d0e312c4e 100644 --- a/packages/repo-tools/package.json +++ b/packages/repo-tools/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/repo-tools", - "version": "0.16.0-next.2", + "version": "0.16.0", "description": "CLI for Backstage repo tooling ", "backstage": { "role": "cli" diff --git a/packages/scaffolder-internal/CHANGELOG.md b/packages/scaffolder-internal/CHANGELOG.md index 3b3a6f7c8c..87bc2660f6 100644 --- a/packages/scaffolder-internal/CHANGELOG.md +++ b/packages/scaffolder-internal/CHANGELOG.md @@ -1,5 +1,13 @@ # @internal/scaffolder +## 0.0.15 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/plugin-scaffolder-react@1.19.3 + ## 0.0.15-next.0 ### Patch Changes diff --git a/packages/scaffolder-internal/package.json b/packages/scaffolder-internal/package.json index 256ec5b5e3..b3a074a331 100644 --- a/packages/scaffolder-internal/package.json +++ b/packages/scaffolder-internal/package.json @@ -1,6 +1,6 @@ { "name": "@internal/scaffolder", - "version": "0.0.15-next.0", + "version": "0.0.15", "backstage": { "role": "web-library", "inline": true diff --git a/packages/techdocs-cli-embedded-app/CHANGELOG.md b/packages/techdocs-cli-embedded-app/CHANGELOG.md index 3fe53ec2d6..8c91814bdf 100644 --- a/packages/techdocs-cli-embedded-app/CHANGELOG.md +++ b/packages/techdocs-cli-embedded-app/CHANGELOG.md @@ -1,5 +1,24 @@ # techdocs-cli-embedded-app +## 0.2.114 + +### Patch Changes + +- Updated dependencies + - @backstage/ui@0.9.0 + - @backstage/cli@0.34.5 + - @backstage/plugin-techdocs@1.16.0 + - @backstage/plugin-catalog@1.32.0 + - @backstage/core-components@0.18.3 + - @backstage/core-plugin-api@1.12.0 + - @backstage/core-app-api@1.19.2 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + - @backstage/plugin-techdocs-react@1.3.5 + - @backstage/app-defaults@1.7.2 + - @backstage/integration-react@1.2.12 + - @backstage/test-utils@1.7.13 + ## 0.2.114-next.2 ### Patch Changes diff --git a/packages/techdocs-cli-embedded-app/package.json b/packages/techdocs-cli-embedded-app/package.json index 024d8039cd..44e183f47e 100644 --- a/packages/techdocs-cli-embedded-app/package.json +++ b/packages/techdocs-cli-embedded-app/package.json @@ -1,6 +1,6 @@ { "name": "techdocs-cli-embedded-app", - "version": "0.2.114-next.2", + "version": "0.2.114", "backstage": { "role": "frontend" }, diff --git a/packages/techdocs-cli/CHANGELOG.md b/packages/techdocs-cli/CHANGELOG.md index 13413f46c8..31d49db8ab 100644 --- a/packages/techdocs-cli/CHANGELOG.md +++ b/packages/techdocs-cli/CHANGELOG.md @@ -1,5 +1,16 @@ # @techdocs/cli +## 1.10.2 + +### Patch Changes + +- c2a2017: Fix for missing styles due to move to BUI. +- Updated dependencies + - @backstage/backend-defaults@0.13.1 + - @backstage/plugin-techdocs-node@1.13.9 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + ## 1.10.1-next.0 ### Patch Changes diff --git a/packages/techdocs-cli/package.json b/packages/techdocs-cli/package.json index 5f978adada..994838b332 100644 --- a/packages/techdocs-cli/package.json +++ b/packages/techdocs-cli/package.json @@ -1,6 +1,6 @@ { "name": "@techdocs/cli", - "version": "1.10.2-next.0", + "version": "1.10.2", "description": "Utility CLI for managing TechDocs sites in Backstage.", "backstage": { "role": "cli" diff --git a/packages/test-utils/CHANGELOG.md b/packages/test-utils/CHANGELOG.md index 7beeed27c1..4c2a959dbc 100644 --- a/packages/test-utils/CHANGELOG.md +++ b/packages/test-utils/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/test-utils +## 1.7.13 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.12.0 + - @backstage/plugin-permission-common@0.9.3 + - @backstage/core-app-api@1.19.2 + - @backstage/plugin-permission-react@0.4.38 + - @backstage/config@1.3.6 + ## 1.7.13-next.0 ### Patch Changes diff --git a/packages/test-utils/package.json b/packages/test-utils/package.json index b40fa8a0d8..8331af7f0d 100644 --- a/packages/test-utils/package.json +++ b/packages/test-utils/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/test-utils", - "version": "1.7.13-next.0", + "version": "1.7.13", "description": "Utilities to test Backstage plugins and apps.", "backstage": { "role": "web-library" diff --git a/packages/ui/CHANGELOG.md b/packages/ui/CHANGELOG.md index 7347058a0c..1e56ceda40 100644 --- a/packages/ui/CHANGELOG.md +++ b/packages/ui/CHANGELOG.md @@ -1,5 +1,179 @@ # @backstage/ui +## 0.9.0 + +### Minor Changes + +- 539cf26: **BREAKING**: Migrated Avatar component from Base UI to custom implementation with size changes: + + - Base UI-specific props are no longer supported + - Size values have been updated: + - New `x-small` size added (1.25rem / 20px) + - `small` size unchanged (1.5rem / 24px) + - `medium` size unchanged (2rem / 32px, default) + - `large` size **changed from 3rem to 2.5rem** (40px) + - New `x-large` size added (3rem / 48px) + + Migration: + + ```diff + # Remove Base UI-specific props + - + + + + # Update large size usage to x-large for same visual size + - + + + ``` + + Added `purpose` prop for accessibility control (`'informative'` or `'decoration'`). + +- 5c614ff: **BREAKING**: Migrated Checkbox component from Base UI to React Aria Components. + + API changes required: + + - `checked` → `isSelected` + - `defaultChecked` → `defaultSelected` + - `disabled` → `isDisabled` + - `required` → `isRequired` + - `label` prop removed - use `children` instead + - CSS: `bui-CheckboxLabel` class removed + - Data attribute: `data-checked` → `data-selected` + - Use without label is no longer supported + + Migration examples: + + Before: + + ```tsx + + ``` + + After: + + ```tsx + + Accept terms + + ``` + + Before: + + ```tsx + + ``` + + After: + + ```tsx + Option + ``` + + Before: + + ```tsx + + ``` + + After: + + ```tsx + + Accessible label + + ``` + +- 134151f: Fixing styles on SearchField in Backstage UI after migration to CSS modules. `SearchField` has now its own set of class names. We previously used class names from `TextField` but this approach was creating some confusion so going forward in your theme you'll be able to theme `TextField` and `SearchField` separately. +- a67670d: **BREAKING**: Removed central `componentDefinitions` object and related type utilities (`ComponentDefinitionName`, `ComponentClassNames`). + + Component definitions are primarily intended for documenting the CSS class API for theming purposes, not for programmatic use in JavaScript/TypeScript. + + **Migration Guide:** + + If you were using component definitions or class names to build custom components, we recommend migrating to either: + + - Use Backstage UI components directly as building blocks, or + - Duplicate the component CSS in your own stylesheets instead of relying on internal class names + +- b78fc45: **BREAKING**: Changed className prop behavior to augment default styles instead of being ignored or overriding them. + + Affected components: + + - Menu, MenuListBox, MenuAutocomplete, MenuAutocompleteListbox, MenuItem, MenuListBoxItem, MenuSection, MenuSeparator + - Switch + - Skeleton + - FieldLabel + - Header, HeaderToolbar + - HeaderPage + - Tabs, TabList, Tab, TabPanel + + If you were passing custom className values to any of these components that relied on the previous behavior, you may need to adjust your styles to account for the default classes now being applied alongside your custom classes. + +- 83c100e: **BREAKING**: Removed `Collapsible` component. Migrate to `Accordion` or use React Aria `Disclosure`. + + ## Migration Path 1: Accordion (Opinionated Styled Component) + + Accordion provides preset styling with a similar component structure. + + ```diff + - import { Collapsible } from '@backstage/ui'; + + import { Accordion, AccordionTrigger, AccordionPanel } from '@backstage/ui'; + + - + - } /> + - Content + - + + + + + + + Content + + + ``` + + CSS classes: `.bui-CollapsibleRoot` → `.bui-Accordion`, `.bui-CollapsibleTrigger` → `.bui-AccordionTrigger` (now on heading element), `.bui-CollapsiblePanel` → `.bui-AccordionPanel` + + ## Migration Path 2: React Aria Disclosure (Full Customization) + + For custom styling without preset styles: + + ```tsx + import { Disclosure, Button, DisclosurePanel } from 'react-aria-components'; + + + + Content + ; + ``` + +- 816af0f: **BREAKING**: The `SelectProps` interface now accepts a generic type parameter for selection mode. + + Added searchable and multiple selection support to Select component. The component now accepts `searchable`, `selectionMode`, and `searchPlaceholder` props to enable filtering and multi-selection modes. + + Migration: If you're using `SelectProps` type directly, update from `SelectProps` to `SelectProps<'single' | 'multiple'>`. Component usage remains backward compatible. + +### Patch Changes + +- d01de00: Fix broken external links in Backstage UI Header component. +- 35a3614: Fixed CSS issues in Select component including popover width constraints, focus outline behavior, and overflow handling. +- 01476f0: Improved visual consistency of PasswordField, SearchField, and MenuAutocomplete components. +- 26c6a78: Fix default text color in Backstage UI +- deaa427: Fixed Text component to prevent `truncate` prop from being spread to the underlying DOM element. +- 1059f95: Improved the Link component structure in Backstage UI. +- 836b0c7: Fixed dialog backdrop appearance in dark mode. +- 6874094: Migrated CellProfile component from Base UI Avatar to Backstage UI Avatar component. +- 719d772: Avatar components in x-small and small sizes now display only one initial instead of two, improving readability at smaller dimensions. +- 6d35a6b: Removed `@base-ui-components/react` dependency as all components now use React Aria Components. +- dac851f: Fix the default font size in Backstage UI. +- 3c0ea67: Fix CSS layer ordering in Backstage UI to make sure component styles are loaded after tokens and base declarations. +- 3b18d80: Fixed RadioGroup radio button ellipse distortion by preventing flex shrink and grow. +- 4eb455c: Fix font smoothing as default in Backstage UI. +- ff9f0c3: Enable tree-shaking of imports other than `*.css`. +- 7839e7b: Added `loading` prop to Button and ButtonIcon components for displaying spinner during async operations. +- a00fb88: Fixed Table Row component to properly support opening links in new tabs via right-click or Cmd+Click when using the `href` prop. +- e16ece5: Set the color-scheme property depending on theme +- 1ef3ca4: Added new VisuallyHidden component for hiding content visually while keeping it accessible to screen readers. +- 00bfb83: Fix default font wight and font family in Backstage UI. + ## 0.9.0-next.3 ### Minor Changes diff --git a/packages/ui/package.json b/packages/ui/package.json index 767af01601..b034dbe59f 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/ui", - "version": "0.9.0-next.3", + "version": "0.9.0", "backstage": { "role": "web-library" }, diff --git a/plugins/api-docs/CHANGELOG.md b/plugins/api-docs/CHANGELOG.md index abf9b70796..808fdd9a2a 100644 --- a/plugins/api-docs/CHANGELOG.md +++ b/plugins/api-docs/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-api-docs +## 0.13.1 + +### Patch Changes + +- 7c281a5: Add i18n support for Raw tab title and an error message +- Updated dependencies + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/core-compat-api@0.5.4 + - @backstage/plugin-catalog@1.32.0 + - @backstage/plugin-catalog-react@1.21.3 + - @backstage/core-components@0.18.3 + - @backstage/core-plugin-api@1.12.0 + - @backstage/plugin-permission-react@0.4.38 + - @backstage/catalog-model@1.7.6 + - @backstage/plugin-catalog-common@1.1.7 + ## 0.13.1-next.1 ### Patch Changes diff --git a/plugins/api-docs/package.json b/plugins/api-docs/package.json index 9215ed5101..f89c75b8f7 100644 --- a/plugins/api-docs/package.json +++ b/plugins/api-docs/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-api-docs", - "version": "0.13.1-next.1", + "version": "0.13.1", "description": "A Backstage plugin that helps represent API entities in the frontend", "backstage": { "role": "frontend-plugin", diff --git a/plugins/app-backend/CHANGELOG.md b/plugins/app-backend/CHANGELOG.md index 881a20e0f9..ccb3ebdaab 100644 --- a/plugins/app-backend/CHANGELOG.md +++ b/plugins/app-backend/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-app-backend +## 0.5.8 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-auth-node@0.6.9 + - @backstage/config-loader@1.10.6 + - @backstage/config@1.3.6 + - @backstage/plugin-app-node@0.1.39 + ## 0.5.8-next.1 ### Patch Changes diff --git a/plugins/app-backend/package.json b/plugins/app-backend/package.json index 67bec42447..3c3bba9c1c 100644 --- a/plugins/app-backend/package.json +++ b/plugins/app-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-app-backend", - "version": "0.5.8-next.1", + "version": "0.5.8", "description": "A Backstage backend plugin that serves the Backstage frontend app", "backstage": { "role": "backend-plugin", diff --git a/plugins/app-node/CHANGELOG.md b/plugins/app-node/CHANGELOG.md index fae80d8087..8ffa51a053 100644 --- a/plugins/app-node/CHANGELOG.md +++ b/plugins/app-node/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-app-node +## 0.1.39 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/config-loader@1.10.6 + ## 0.1.39-next.1 ### Patch Changes diff --git a/plugins/app-node/package.json b/plugins/app-node/package.json index dcd1c6f812..5dc2aee403 100644 --- a/plugins/app-node/package.json +++ b/plugins/app-node/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-app-node", - "version": "0.1.39-next.1", + "version": "0.1.39", "description": "Node.js library for the app plugin", "backstage": { "role": "node-library", diff --git a/plugins/app-visualizer/CHANGELOG.md b/plugins/app-visualizer/CHANGELOG.md index bca80d09ff..986a3d51bc 100644 --- a/plugins/app-visualizer/CHANGELOG.md +++ b/plugins/app-visualizer/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-app-visualizer +## 0.1.25 + +### Patch Changes + +- e81b3f0: Improve tree visualizer to use a horizontal layout and fill the content space. +- 722e2df: Migrated to use `@backstage/ui`. +- Updated dependencies + - @backstage/ui@0.9.0 + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/core-components@0.18.3 + - @backstage/core-plugin-api@1.12.0 + ## 0.1.25-next.2 ### Patch Changes diff --git a/plugins/app-visualizer/package.json b/plugins/app-visualizer/package.json index 1d664e951d..35adbbbb95 100644 --- a/plugins/app-visualizer/package.json +++ b/plugins/app-visualizer/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-app-visualizer", - "version": "0.1.25-next.2", + "version": "0.1.25", "description": "Visualizes the Backstage app structure", "backstage": { "role": "frontend-plugin", diff --git a/plugins/app/CHANGELOG.md b/plugins/app/CHANGELOG.md index c785f548ca..2035885939 100644 --- a/plugins/app/CHANGELOG.md +++ b/plugins/app/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-app +## 0.3.2 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/core-components@0.18.3 + - @backstage/core-plugin-api@1.12.0 + - @backstage/plugin-permission-react@0.4.38 + - @backstage/integration-react@1.2.12 + ## 0.3.2-next.0 ### Patch Changes diff --git a/plugins/app/package.json b/plugins/app/package.json index 403ee9095c..c43c664bf7 100644 --- a/plugins/app/package.json +++ b/plugins/app/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-app", - "version": "0.3.2-next.0", + "version": "0.3.2", "backstage": { "role": "frontend-plugin", "pluginId": "app", diff --git a/plugins/auth-backend-module-atlassian-provider/CHANGELOG.md b/plugins/auth-backend-module-atlassian-provider/CHANGELOG.md index 8f9a00af30..6bde076376 100644 --- a/plugins/auth-backend-module-atlassian-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-atlassian-provider/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-auth-backend-module-atlassian-provider +## 0.4.9 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-auth-node@0.6.9 + ## 0.4.9-next.1 ### Patch Changes diff --git a/plugins/auth-backend-module-atlassian-provider/package.json b/plugins/auth-backend-module-atlassian-provider/package.json index 740fed5800..f12ff657e3 100644 --- a/plugins/auth-backend-module-atlassian-provider/package.json +++ b/plugins/auth-backend-module-atlassian-provider/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend-module-atlassian-provider", - "version": "0.4.9-next.1", + "version": "0.4.9", "description": "The atlassian-provider backend module for the auth plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/auth-backend-module-auth0-provider/CHANGELOG.md b/plugins/auth-backend-module-auth0-provider/CHANGELOG.md index 1c4f4c41d7..bb860d2dfd 100644 --- a/plugins/auth-backend-module-auth0-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-auth0-provider/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-auth-backend-module-auth0-provider +## 0.2.9 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-auth-node@0.6.9 + ## 0.2.9-next.1 ### Patch Changes diff --git a/plugins/auth-backend-module-auth0-provider/package.json b/plugins/auth-backend-module-auth0-provider/package.json index a0ded12693..e58d80a053 100644 --- a/plugins/auth-backend-module-auth0-provider/package.json +++ b/plugins/auth-backend-module-auth0-provider/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend-module-auth0-provider", - "version": "0.2.9-next.1", + "version": "0.2.9", "description": "The auth0-provider backend module for the auth plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/auth-backend-module-aws-alb-provider/CHANGELOG.md b/plugins/auth-backend-module-aws-alb-provider/CHANGELOG.md index a79d5ce081..aaf6f60131 100644 --- a/plugins/auth-backend-module-aws-alb-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-aws-alb-provider/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-auth-backend-module-aws-alb-provider +## 0.4.9 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-auth-backend@0.25.6 + - @backstage/plugin-auth-node@0.6.9 + ## 0.4.9-next.1 ### Patch Changes diff --git a/plugins/auth-backend-module-aws-alb-provider/package.json b/plugins/auth-backend-module-aws-alb-provider/package.json index ef30829fb2..8e9b3dfda8 100644 --- a/plugins/auth-backend-module-aws-alb-provider/package.json +++ b/plugins/auth-backend-module-aws-alb-provider/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend-module-aws-alb-provider", - "version": "0.4.9-next.1", + "version": "0.4.9", "description": "The aws-alb provider module for the Backstage auth backend.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/auth-backend-module-azure-easyauth-provider/CHANGELOG.md b/plugins/auth-backend-module-azure-easyauth-provider/CHANGELOG.md index f7d74afd3c..5e1c17c705 100644 --- a/plugins/auth-backend-module-azure-easyauth-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-azure-easyauth-provider/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-auth-backend-module-azure-easyauth-provider +## 0.2.14 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-auth-node@0.6.9 + - @backstage/catalog-model@1.7.6 + ## 0.2.14-next.1 ### Patch Changes diff --git a/plugins/auth-backend-module-azure-easyauth-provider/package.json b/plugins/auth-backend-module-azure-easyauth-provider/package.json index 33f028fc7c..16327c7690 100644 --- a/plugins/auth-backend-module-azure-easyauth-provider/package.json +++ b/plugins/auth-backend-module-azure-easyauth-provider/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend-module-azure-easyauth-provider", - "version": "0.2.14-next.1", + "version": "0.2.14", "description": "The azure-easyauth-provider backend module for the auth plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/auth-backend-module-bitbucket-provider/CHANGELOG.md b/plugins/auth-backend-module-bitbucket-provider/CHANGELOG.md index 31124f2320..ddbab777d9 100644 --- a/plugins/auth-backend-module-bitbucket-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-bitbucket-provider/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-auth-backend-module-bitbucket-provider +## 0.3.9 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-auth-node@0.6.9 + ## 0.3.9-next.1 ### Patch Changes diff --git a/plugins/auth-backend-module-bitbucket-provider/package.json b/plugins/auth-backend-module-bitbucket-provider/package.json index 09e6601498..32761c010c 100644 --- a/plugins/auth-backend-module-bitbucket-provider/package.json +++ b/plugins/auth-backend-module-bitbucket-provider/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend-module-bitbucket-provider", - "version": "0.3.9-next.1", + "version": "0.3.9", "description": "The bitbucket-provider backend module for the auth plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/auth-backend-module-bitbucket-server-provider/CHANGELOG.md b/plugins/auth-backend-module-bitbucket-server-provider/CHANGELOG.md index 9ebda04766..cfab09eb79 100644 --- a/plugins/auth-backend-module-bitbucket-server-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-bitbucket-server-provider/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-auth-backend-module-bitbucket-server-provider +## 0.2.9 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-auth-node@0.6.9 + ## 0.2.9-next.1 ### Patch Changes diff --git a/plugins/auth-backend-module-bitbucket-server-provider/package.json b/plugins/auth-backend-module-bitbucket-server-provider/package.json index ad069abbdc..6129c6de0b 100644 --- a/plugins/auth-backend-module-bitbucket-server-provider/package.json +++ b/plugins/auth-backend-module-bitbucket-server-provider/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend-module-bitbucket-server-provider", - "version": "0.2.9-next.1", + "version": "0.2.9", "description": "The bitbucket-server-provider backend module for the auth plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/auth-backend-module-cloudflare-access-provider/CHANGELOG.md b/plugins/auth-backend-module-cloudflare-access-provider/CHANGELOG.md index 00ae9f1558..ebd323cd73 100644 --- a/plugins/auth-backend-module-cloudflare-access-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-cloudflare-access-provider/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-auth-backend-module-cloudflare-access-provider +## 0.4.9 + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-auth-node@0.6.9 + - @backstage/config@1.3.6 + ## 0.4.9-next.1 ### Patch Changes diff --git a/plugins/auth-backend-module-cloudflare-access-provider/package.json b/plugins/auth-backend-module-cloudflare-access-provider/package.json index 34a48309c2..0cb0b9eb1d 100644 --- a/plugins/auth-backend-module-cloudflare-access-provider/package.json +++ b/plugins/auth-backend-module-cloudflare-access-provider/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend-module-cloudflare-access-provider", - "version": "0.4.9-next.1", + "version": "0.4.9", "description": "The cloudflare-access-provider backend module for the auth plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/auth-backend-module-gcp-iap-provider/CHANGELOG.md b/plugins/auth-backend-module-gcp-iap-provider/CHANGELOG.md index 2e34793b2c..8601a01745 100644 --- a/plugins/auth-backend-module-gcp-iap-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-gcp-iap-provider/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-auth-backend-module-gcp-iap-provider +## 0.4.9 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-auth-node@0.6.9 + ## 0.4.9-next.1 ### Patch Changes diff --git a/plugins/auth-backend-module-gcp-iap-provider/package.json b/plugins/auth-backend-module-gcp-iap-provider/package.json index ceb6222e76..8f7e73f31d 100644 --- a/plugins/auth-backend-module-gcp-iap-provider/package.json +++ b/plugins/auth-backend-module-gcp-iap-provider/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend-module-gcp-iap-provider", - "version": "0.4.9-next.1", + "version": "0.4.9", "description": "A GCP IAP auth provider module for the Backstage auth backend", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/auth-backend-module-github-provider/CHANGELOG.md b/plugins/auth-backend-module-github-provider/CHANGELOG.md index 2e9de505da..79f7f297d5 100644 --- a/plugins/auth-backend-module-github-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-github-provider/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-auth-backend-module-github-provider +## 0.3.9 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-auth-node@0.6.9 + ## 0.3.9-next.1 ### Patch Changes diff --git a/plugins/auth-backend-module-github-provider/package.json b/plugins/auth-backend-module-github-provider/package.json index fe489fbf18..5e86e2c396 100644 --- a/plugins/auth-backend-module-github-provider/package.json +++ b/plugins/auth-backend-module-github-provider/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend-module-github-provider", - "version": "0.3.9-next.1", + "version": "0.3.9", "description": "The github-provider backend module for the auth plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/auth-backend-module-gitlab-provider/CHANGELOG.md b/plugins/auth-backend-module-gitlab-provider/CHANGELOG.md index 175bbede0a..58d6712600 100644 --- a/plugins/auth-backend-module-gitlab-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-gitlab-provider/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-auth-backend-module-gitlab-provider +## 0.3.9 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-auth-node@0.6.9 + ## 0.3.9-next.1 ### Patch Changes diff --git a/plugins/auth-backend-module-gitlab-provider/package.json b/plugins/auth-backend-module-gitlab-provider/package.json index 1f280fc206..beef074786 100644 --- a/plugins/auth-backend-module-gitlab-provider/package.json +++ b/plugins/auth-backend-module-gitlab-provider/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend-module-gitlab-provider", - "version": "0.3.9-next.1", + "version": "0.3.9", "description": "The gitlab-provider backend module for the auth plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/auth-backend-module-google-provider/CHANGELOG.md b/plugins/auth-backend-module-google-provider/CHANGELOG.md index 29ebe1776b..ccc4be07f8 100644 --- a/plugins/auth-backend-module-google-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-google-provider/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-auth-backend-module-google-provider +## 0.3.9 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-auth-node@0.6.9 + ## 0.3.9-next.1 ### Patch Changes diff --git a/plugins/auth-backend-module-google-provider/package.json b/plugins/auth-backend-module-google-provider/package.json index e21fef5580..288062c1c3 100644 --- a/plugins/auth-backend-module-google-provider/package.json +++ b/plugins/auth-backend-module-google-provider/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend-module-google-provider", - "version": "0.3.9-next.1", + "version": "0.3.9", "description": "A Google auth provider module for the Backstage auth backend", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/auth-backend-module-guest-provider/CHANGELOG.md b/plugins/auth-backend-module-guest-provider/CHANGELOG.md index c10ff0bf34..38aa29ccd7 100644 --- a/plugins/auth-backend-module-guest-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-guest-provider/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-auth-backend-module-guest-provider +## 0.2.14 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-auth-node@0.6.9 + - @backstage/catalog-model@1.7.6 + ## 0.2.14-next.1 ### Patch Changes diff --git a/plugins/auth-backend-module-guest-provider/package.json b/plugins/auth-backend-module-guest-provider/package.json index da0d6ceacb..c2517e7fb7 100644 --- a/plugins/auth-backend-module-guest-provider/package.json +++ b/plugins/auth-backend-module-guest-provider/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend-module-guest-provider", - "version": "0.2.14-next.1", + "version": "0.2.14", "description": "The guest-provider backend module for the auth plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/auth-backend-module-microsoft-provider/CHANGELOG.md b/plugins/auth-backend-module-microsoft-provider/CHANGELOG.md index 48c0642e80..5977b75aa9 100644 --- a/plugins/auth-backend-module-microsoft-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-microsoft-provider/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-auth-backend-module-microsoft-provider +## 0.3.9 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-auth-node@0.6.9 + ## 0.3.9-next.1 ### Patch Changes diff --git a/plugins/auth-backend-module-microsoft-provider/package.json b/plugins/auth-backend-module-microsoft-provider/package.json index 91e86947bf..fbb5106e14 100644 --- a/plugins/auth-backend-module-microsoft-provider/package.json +++ b/plugins/auth-backend-module-microsoft-provider/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend-module-microsoft-provider", - "version": "0.3.9-next.1", + "version": "0.3.9", "description": "The microsoft-provider backend module for the auth plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/auth-backend-module-oauth2-provider/CHANGELOG.md b/plugins/auth-backend-module-oauth2-provider/CHANGELOG.md index 88edfdd9f8..1b24f30d62 100644 --- a/plugins/auth-backend-module-oauth2-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-oauth2-provider/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-auth-backend-module-oauth2-provider +## 0.4.9 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-auth-node@0.6.9 + ## 0.4.9-next.1 ### Patch Changes diff --git a/plugins/auth-backend-module-oauth2-provider/package.json b/plugins/auth-backend-module-oauth2-provider/package.json index 51b485dc4b..056f7ad093 100644 --- a/plugins/auth-backend-module-oauth2-provider/package.json +++ b/plugins/auth-backend-module-oauth2-provider/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend-module-oauth2-provider", - "version": "0.4.9-next.1", + "version": "0.4.9", "description": "The oauth2-provider backend module for the auth plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/auth-backend-module-oauth2-proxy-provider/CHANGELOG.md b/plugins/auth-backend-module-oauth2-proxy-provider/CHANGELOG.md index f3c306c9c2..26c86f1902 100644 --- a/plugins/auth-backend-module-oauth2-proxy-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-oauth2-proxy-provider/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-auth-backend-module-oauth2-proxy-provider +## 0.2.14 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-auth-node@0.6.9 + ## 0.2.14-next.1 ### Patch Changes diff --git a/plugins/auth-backend-module-oauth2-proxy-provider/package.json b/plugins/auth-backend-module-oauth2-proxy-provider/package.json index 49e797604e..112a77fee5 100644 --- a/plugins/auth-backend-module-oauth2-proxy-provider/package.json +++ b/plugins/auth-backend-module-oauth2-proxy-provider/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend-module-oauth2-proxy-provider", - "version": "0.2.14-next.1", + "version": "0.2.14", "description": "The oauth2-proxy-provider backend module for the auth plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/auth-backend-module-oidc-provider/CHANGELOG.md b/plugins/auth-backend-module-oidc-provider/CHANGELOG.md index 387df1f87c..6ee64562dd 100644 --- a/plugins/auth-backend-module-oidc-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-oidc-provider/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-auth-backend-module-oidc-provider +## 0.4.9 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-auth-backend@0.25.6 + - @backstage/plugin-auth-node@0.6.9 + - @backstage/config@1.3.6 + ## 0.4.9-next.1 ### Patch Changes diff --git a/plugins/auth-backend-module-oidc-provider/package.json b/plugins/auth-backend-module-oidc-provider/package.json index dec8ef437e..379b1fc4b2 100644 --- a/plugins/auth-backend-module-oidc-provider/package.json +++ b/plugins/auth-backend-module-oidc-provider/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend-module-oidc-provider", - "version": "0.4.9-next.1", + "version": "0.4.9", "description": "The oidc-provider backend module for the auth plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/auth-backend-module-okta-provider/CHANGELOG.md b/plugins/auth-backend-module-okta-provider/CHANGELOG.md index 709dc4c97e..7a5d7232f3 100644 --- a/plugins/auth-backend-module-okta-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-okta-provider/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-auth-backend-module-okta-provider +## 0.2.9 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-auth-node@0.6.9 + ## 0.2.9-next.1 ### Patch Changes diff --git a/plugins/auth-backend-module-okta-provider/package.json b/plugins/auth-backend-module-okta-provider/package.json index 4e2e097a2f..6bfa6ad27f 100644 --- a/plugins/auth-backend-module-okta-provider/package.json +++ b/plugins/auth-backend-module-okta-provider/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend-module-okta-provider", - "version": "0.2.9-next.1", + "version": "0.2.9", "description": "The okta-provider backend module for the auth plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/auth-backend-module-onelogin-provider/CHANGELOG.md b/plugins/auth-backend-module-onelogin-provider/CHANGELOG.md index fff203e966..4f2928f49e 100644 --- a/plugins/auth-backend-module-onelogin-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-onelogin-provider/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-auth-backend-module-onelogin-provider +## 0.3.9 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-auth-node@0.6.9 + ## 0.3.9-next.1 ### Patch Changes diff --git a/plugins/auth-backend-module-onelogin-provider/package.json b/plugins/auth-backend-module-onelogin-provider/package.json index 4859d97b7c..ec55f461ee 100644 --- a/plugins/auth-backend-module-onelogin-provider/package.json +++ b/plugins/auth-backend-module-onelogin-provider/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend-module-onelogin-provider", - "version": "0.3.9-next.1", + "version": "0.3.9", "description": "The onelogin-provider backend module for the auth plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/auth-backend-module-openshift-provider/CHANGELOG.md b/plugins/auth-backend-module-openshift-provider/CHANGELOG.md index 7155199bcd..04c95f3936 100644 --- a/plugins/auth-backend-module-openshift-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-openshift-provider/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-auth-backend-module-openshift-provider +## 0.1.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-auth-node@0.6.9 + - @backstage/catalog-model@1.7.6 + ## 0.1.2-next.1 ### Patch Changes diff --git a/plugins/auth-backend-module-openshift-provider/package.json b/plugins/auth-backend-module-openshift-provider/package.json index e2fe7dc1ef..072bd451c3 100644 --- a/plugins/auth-backend-module-openshift-provider/package.json +++ b/plugins/auth-backend-module-openshift-provider/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend-module-openshift-provider", - "version": "0.1.2-next.1", + "version": "0.1.2", "description": "The OpenShift backend module for the auth plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/auth-backend-module-pinniped-provider/CHANGELOG.md b/plugins/auth-backend-module-pinniped-provider/CHANGELOG.md index 9349bd912f..e0ffc91aa2 100644 --- a/plugins/auth-backend-module-pinniped-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-pinniped-provider/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-auth-backend-module-pinniped-provider +## 0.3.9 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-auth-node@0.6.9 + - @backstage/config@1.3.6 + ## 0.3.9-next.1 ### Patch Changes diff --git a/plugins/auth-backend-module-pinniped-provider/package.json b/plugins/auth-backend-module-pinniped-provider/package.json index 185f3a1004..e7f23d80a3 100644 --- a/plugins/auth-backend-module-pinniped-provider/package.json +++ b/plugins/auth-backend-module-pinniped-provider/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend-module-pinniped-provider", - "version": "0.3.9-next.1", + "version": "0.3.9", "description": "The pinniped-provider backend module for the auth plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/auth-backend-module-vmware-cloud-provider/CHANGELOG.md b/plugins/auth-backend-module-vmware-cloud-provider/CHANGELOG.md index ca18a66089..b3b354c593 100644 --- a/plugins/auth-backend-module-vmware-cloud-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-vmware-cloud-provider/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-auth-backend-module-vmware-cloud-provider +## 0.5.9 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-auth-node@0.6.9 + - @backstage/catalog-model@1.7.6 + ## 0.5.9-next.1 ### Patch Changes diff --git a/plugins/auth-backend-module-vmware-cloud-provider/package.json b/plugins/auth-backend-module-vmware-cloud-provider/package.json index ff6fc4811f..2bfda71843 100644 --- a/plugins/auth-backend-module-vmware-cloud-provider/package.json +++ b/plugins/auth-backend-module-vmware-cloud-provider/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend-module-vmware-cloud-provider", - "version": "0.5.9-next.1", + "version": "0.5.9", "description": "The vmware-cloud-provider backend module for the auth plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/auth-backend/CHANGELOG.md b/plugins/auth-backend/CHANGELOG.md index 87219090d0..75e9261efa 100644 --- a/plugins/auth-backend/CHANGELOG.md +++ b/plugins/auth-backend/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-auth-backend +## 0.25.6 + +### Patch Changes + +- a9315d0: Change internal `state` column to `text` to support state of over 255 characters +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- 51ff7d8: Allow configuring dynamic client registration token expiration with config `auth.experimentalDynamicClientRegistration.tokenExpiration`. + + Maximum expiration for the DCR token is 24 hours. Default expiration is 1 hour. + +- Updated dependencies + - @backstage/plugin-catalog-node@1.20.0 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-auth-node@0.6.9 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + ## 0.25.6-next.1 ### Patch Changes diff --git a/plugins/auth-backend/package.json b/plugins/auth-backend/package.json index 3b0da601a7..a76637d74e 100644 --- a/plugins/auth-backend/package.json +++ b/plugins/auth-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend", - "version": "0.25.6-next.1", + "version": "0.25.6", "description": "A Backstage backend plugin that handles authentication", "backstage": { "role": "backend-plugin", diff --git a/plugins/auth-node/CHANGELOG.md b/plugins/auth-node/CHANGELOG.md index b519905e47..7d0b33de3f 100644 --- a/plugins/auth-node/CHANGELOG.md +++ b/plugins/auth-node/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-auth-node +## 0.6.9 + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + - @backstage/catalog-client@1.12.1 + ## 0.6.9-next.1 ### Patch Changes diff --git a/plugins/auth-node/package.json b/plugins/auth-node/package.json index 3cd0659f3c..c985217866 100644 --- a/plugins/auth-node/package.json +++ b/plugins/auth-node/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-node", - "version": "0.6.9-next.1", + "version": "0.6.9", "backstage": { "role": "node-library", "pluginId": "auth", diff --git a/plugins/auth-react/CHANGELOG.md b/plugins/auth-react/CHANGELOG.md index b98a1e9b63..476ce92908 100644 --- a/plugins/auth-react/CHANGELOG.md +++ b/plugins/auth-react/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-auth-react +## 0.1.21 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.18.3 + - @backstage/core-plugin-api@1.12.0 + ## 0.1.21-next.0 ### Patch Changes diff --git a/plugins/auth-react/package.json b/plugins/auth-react/package.json index 069ba57378..1383732d21 100644 --- a/plugins/auth-react/package.json +++ b/plugins/auth-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-react", - "version": "0.1.21-next.0", + "version": "0.1.21", "description": "Web library for the auth plugin", "backstage": { "role": "web-library", diff --git a/plugins/auth/CHANGELOG.md b/plugins/auth/CHANGELOG.md index 15114caa99..ddecec85b7 100644 --- a/plugins/auth/CHANGELOG.md +++ b/plugins/auth/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-auth +## 0.1.2 + +### Patch Changes + +- 1609e79: Authentication content screen now uses application title. +- Updated dependencies + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/core-components@0.18.3 + ## 0.1.2-next.0 ### Patch Changes diff --git a/plugins/auth/package.json b/plugins/auth/package.json index b1d0728bff..389cd038ac 100644 --- a/plugins/auth/package.json +++ b/plugins/auth/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth", - "version": "0.1.2-next.0", + "version": "0.1.2", "backstage": { "role": "frontend-plugin", "pluginId": "auth", diff --git a/plugins/bitbucket-cloud-common/CHANGELOG.md b/plugins/bitbucket-cloud-common/CHANGELOG.md index 0db2f1686c..1c0ef21684 100644 --- a/plugins/bitbucket-cloud-common/CHANGELOG.md +++ b/plugins/bitbucket-cloud-common/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/plugin-bitbucket-cloud-common +## 0.3.4 + +### Patch Changes + +- fa255f5: Support for Bitbucket Cloud's API token was added as `appPassword` is deprecated (no new creation from September 9, 2025) and will be removed on June 9, 2026. + + API token usage example: + + ```yaml + integrations: + bitbucketCloud: + - username: user@domain.com + token: my-token + ``` + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/integration@1.18.2 + ## 0.3.4-next.0 ### Patch Changes diff --git a/plugins/bitbucket-cloud-common/package.json b/plugins/bitbucket-cloud-common/package.json index 5c1d24ddfd..cd9bc6cfe3 100644 --- a/plugins/bitbucket-cloud-common/package.json +++ b/plugins/bitbucket-cloud-common/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-bitbucket-cloud-common", - "version": "0.3.4-next.0", + "version": "0.3.4", "description": "Common functionalities for bitbucket-cloud plugins", "backstage": { "role": "common-library", diff --git a/plugins/catalog-backend-module-aws/CHANGELOG.md b/plugins/catalog-backend-module-aws/CHANGELOG.md index e8aaf14ea8..46021f54e7 100644 --- a/plugins/catalog-backend-module-aws/CHANGELOG.md +++ b/plugins/catalog-backend-module-aws/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-catalog-backend-module-aws +## 0.4.17 + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/backend-defaults@0.13.1 + - @backstage/plugin-catalog-node@1.20.0 + - @backstage/integration@1.18.2 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-kubernetes-common@0.9.8 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + - @backstage/integration-aws-node@0.1.19 + - @backstage/plugin-catalog-common@1.1.7 + ## 0.4.17-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-aws/package.json b/plugins/catalog-backend-module-aws/package.json index 0636aa2258..787df3329e 100644 --- a/plugins/catalog-backend-module-aws/package.json +++ b/plugins/catalog-backend-module-aws/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-aws", - "version": "0.4.17-next.1", + "version": "0.4.17", "description": "A Backstage catalog backend module that helps integrate towards AWS", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/catalog-backend-module-azure/CHANGELOG.md b/plugins/catalog-backend-module-azure/CHANGELOG.md index c5bf588914..03aa3b8cb9 100644 --- a/plugins/catalog-backend-module-azure/CHANGELOG.md +++ b/plugins/catalog-backend-module-azure/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-catalog-backend-module-azure +## 0.3.11 + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/plugin-catalog-node@1.20.0 + - @backstage/integration@1.18.2 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/config@1.3.6 + - @backstage/plugin-catalog-common@1.1.7 + ## 0.3.11-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-azure/package.json b/plugins/catalog-backend-module-azure/package.json index 9e20cebd69..362d62401f 100644 --- a/plugins/catalog-backend-module-azure/package.json +++ b/plugins/catalog-backend-module-azure/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-azure", - "version": "0.3.11-next.1", + "version": "0.3.11", "description": "A Backstage catalog backend module that helps integrate towards Azure", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/catalog-backend-module-backstage-openapi/CHANGELOG.md b/plugins/catalog-backend-module-backstage-openapi/CHANGELOG.md index a381de9305..3abde81f7e 100644 --- a/plugins/catalog-backend-module-backstage-openapi/CHANGELOG.md +++ b/plugins/catalog-backend-module-backstage-openapi/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-catalog-backend-module-backstage-openapi +## 0.5.8 + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/plugin-catalog-node@1.20.0 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + - @backstage/backend-openapi-utils@0.6.3 + ## 0.5.8-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-backstage-openapi/package.json b/plugins/catalog-backend-module-backstage-openapi/package.json index 0aa83ac1a4..4acde5bc83 100644 --- a/plugins/catalog-backend-module-backstage-openapi/package.json +++ b/plugins/catalog-backend-module-backstage-openapi/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-backstage-openapi", - "version": "0.5.8-next.1", + "version": "0.5.8", "backstage": { "role": "backend-plugin-module", "pluginId": "catalog", diff --git a/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md b/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md index 45f56e8004..c60eb16b8a 100644 --- a/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md +++ b/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-catalog-backend-module-bitbucket-cloud +## 0.5.5 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.20.0 + - @backstage/plugin-bitbucket-cloud-common@0.3.4 + - @backstage/integration@1.18.2 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-events-node@0.4.17 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + - @backstage/plugin-catalog-common@1.1.7 + ## 0.5.5-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-bitbucket-cloud/package.json b/plugins/catalog-backend-module-bitbucket-cloud/package.json index 7a53e86963..7c1b136b69 100644 --- a/plugins/catalog-backend-module-bitbucket-cloud/package.json +++ b/plugins/catalog-backend-module-bitbucket-cloud/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-bitbucket-cloud", - "version": "0.5.5-next.1", + "version": "0.5.5", "description": "A Backstage catalog backend module that helps integrate towards Bitbucket Cloud", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md b/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md index e181658e7d..30969b2c13 100644 --- a/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md +++ b/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-catalog-backend-module-bitbucket-server +## 0.5.5 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.20.0 + - @backstage/integration@1.18.2 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-events-node@0.4.17 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + - @backstage/plugin-catalog-common@1.1.7 + ## 0.5.5-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-bitbucket-server/package.json b/plugins/catalog-backend-module-bitbucket-server/package.json index f6ad8924a7..90b8105590 100644 --- a/plugins/catalog-backend-module-bitbucket-server/package.json +++ b/plugins/catalog-backend-module-bitbucket-server/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-bitbucket-server", - "version": "0.5.5-next.1", + "version": "0.5.5", "backstage": { "role": "backend-plugin-module", "pluginId": "catalog", diff --git a/plugins/catalog-backend-module-gcp/CHANGELOG.md b/plugins/catalog-backend-module-gcp/CHANGELOG.md index b9bc254bc2..fe31b91cde 100644 --- a/plugins/catalog-backend-module-gcp/CHANGELOG.md +++ b/plugins/catalog-backend-module-gcp/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-catalog-backend-module-gcp +## 0.3.14 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.20.0 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-kubernetes-common@0.9.8 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + ## 0.3.14-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-gcp/package.json b/plugins/catalog-backend-module-gcp/package.json index 6847083d8c..9f73511184 100644 --- a/plugins/catalog-backend-module-gcp/package.json +++ b/plugins/catalog-backend-module-gcp/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-gcp", - "version": "0.3.14-next.1", + "version": "0.3.14", "description": "A Backstage catalog backend module that helps integrate towards GCP", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/catalog-backend-module-gerrit/CHANGELOG.md b/plugins/catalog-backend-module-gerrit/CHANGELOG.md index 96be7fddae..93c2ac9e6d 100644 --- a/plugins/catalog-backend-module-gerrit/CHANGELOG.md +++ b/plugins/catalog-backend-module-gerrit/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-catalog-backend-module-gerrit +## 0.3.8 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.20.0 + - @backstage/integration@1.18.2 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/config@1.3.6 + - @backstage/plugin-catalog-common@1.1.7 + ## 0.3.8-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-gerrit/package.json b/plugins/catalog-backend-module-gerrit/package.json index 42bea3486d..e85ca3dc13 100644 --- a/plugins/catalog-backend-module-gerrit/package.json +++ b/plugins/catalog-backend-module-gerrit/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-gerrit", - "version": "0.3.8-next.1", + "version": "0.3.8", "backstage": { "role": "backend-plugin-module", "pluginId": "catalog", diff --git a/plugins/catalog-backend-module-gitea/CHANGELOG.md b/plugins/catalog-backend-module-gitea/CHANGELOG.md index ee863610ae..a729a2bb85 100644 --- a/plugins/catalog-backend-module-gitea/CHANGELOG.md +++ b/plugins/catalog-backend-module-gitea/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-catalog-backend-module-gitea +## 0.1.6 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.20.0 + - @backstage/integration@1.18.2 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/config@1.3.6 + - @backstage/plugin-catalog-common@1.1.7 + ## 0.1.6-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-gitea/package.json b/plugins/catalog-backend-module-gitea/package.json index c8145fb282..5b47eaddb6 100644 --- a/plugins/catalog-backend-module-gitea/package.json +++ b/plugins/catalog-backend-module-gitea/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-gitea", - "version": "0.1.6-next.1", + "version": "0.1.6", "license": "Apache-2.0", "description": "The gitea backend module for the catalog plugin.", "main": "src/index.ts", diff --git a/plugins/catalog-backend-module-github-org/CHANGELOG.md b/plugins/catalog-backend-module-github-org/CHANGELOG.md index c0c121f555..9b7b85bcc9 100644 --- a/plugins/catalog-backend-module-github-org/CHANGELOG.md +++ b/plugins/catalog-backend-module-github-org/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-catalog-backend-module-github-org +## 0.3.16 + +### Patch Changes + +- 999d1c1: Added configurable `pageSizes` for GitHub GraphQL API queries to prevent `RESOURCE_LIMITS_EXCEEDED` errors with organizations with large number of teams and members. Please see the [GitHub Org Data documentation](https://backstage.io/docs/integrations/github/org#configuration-details) for new configuration options. +- Updated dependencies + - @backstage/plugin-catalog-node@1.20.0 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-catalog-backend-module-github@0.11.2 + - @backstage/plugin-events-node@0.4.17 + - @backstage/config@1.3.6 + ## 0.3.16-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-github-org/package.json b/plugins/catalog-backend-module-github-org/package.json index a9895a5c13..fb6aa27a7b 100644 --- a/plugins/catalog-backend-module-github-org/package.json +++ b/plugins/catalog-backend-module-github-org/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-github-org", - "version": "0.3.16-next.1", + "version": "0.3.16", "description": "The github-org backend module for the catalog plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/catalog-backend-module-github/CHANGELOG.md b/plugins/catalog-backend-module-github/CHANGELOG.md index d85c5ca829..00f185e694 100644 --- a/plugins/catalog-backend-module-github/CHANGELOG.md +++ b/plugins/catalog-backend-module-github/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-catalog-backend-module-github +## 0.11.2 + +### Patch Changes + +- 999d1c1: Added configurable `pageSizes` for GitHub GraphQL API queries to prevent `RESOURCE_LIMITS_EXCEEDED` errors with organizations with large number of repositories. Please see the [GitHub Discovery documentation](https://backstage.io/docs/integrations/github/discovery#configuration) for new configuration options. +- Updated dependencies + - @backstage/plugin-catalog-node@1.20.0 + - @backstage/integration@1.18.2 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-events-node@0.4.17 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + - @backstage/plugin-catalog-common@1.1.7 + ## 0.11.2-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-github/package.json b/plugins/catalog-backend-module-github/package.json index ab1d98489e..a9798decda 100644 --- a/plugins/catalog-backend-module-github/package.json +++ b/plugins/catalog-backend-module-github/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-github", - "version": "0.11.2-next.1", + "version": "0.11.2", "description": "A Backstage catalog backend module that helps integrate towards GitHub", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/catalog-backend-module-gitlab-org/CHANGELOG.md b/plugins/catalog-backend-module-gitlab-org/CHANGELOG.md index a3ed77c3ad..642a4cdc9b 100644 --- a/plugins/catalog-backend-module-gitlab-org/CHANGELOG.md +++ b/plugins/catalog-backend-module-gitlab-org/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-catalog-backend-module-gitlab-org +## 0.2.15 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.20.0 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-events-node@0.4.17 + - @backstage/plugin-catalog-backend-module-gitlab@0.7.5 + ## 0.2.15-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-gitlab-org/package.json b/plugins/catalog-backend-module-gitlab-org/package.json index a45c75ae1f..729ca171b4 100644 --- a/plugins/catalog-backend-module-gitlab-org/package.json +++ b/plugins/catalog-backend-module-gitlab-org/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-gitlab-org", - "version": "0.2.15-next.1", + "version": "0.2.15", "description": "The gitlab-org backend module for the catalog plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/catalog-backend-module-gitlab/CHANGELOG.md b/plugins/catalog-backend-module-gitlab/CHANGELOG.md index 7aa2ab6085..f0254bba71 100644 --- a/plugins/catalog-backend-module-gitlab/CHANGELOG.md +++ b/plugins/catalog-backend-module-gitlab/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-catalog-backend-module-gitlab +## 0.7.5 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.13.1 + - @backstage/plugin-catalog-node@1.20.0 + - @backstage/integration@1.18.2 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-events-node@0.4.17 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + - @backstage/plugin-catalog-common@1.1.7 + ## 0.7.5-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-gitlab/package.json b/plugins/catalog-backend-module-gitlab/package.json index daf666f87f..a045262440 100644 --- a/plugins/catalog-backend-module-gitlab/package.json +++ b/plugins/catalog-backend-module-gitlab/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-gitlab", - "version": "0.7.5-next.1", + "version": "0.7.5", "description": "A Backstage catalog backend module that helps integrate towards GitLab", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md b/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md index 6ee53564ca..cc6488d03a 100644 --- a/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md +++ b/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-catalog-backend-module-incremental-ingestion +## 0.7.6 + +### Patch Changes + +- 70745c5: Correctly handle entity removal computation when DB count query returns string +- Updated dependencies + - @backstage/backend-defaults@0.13.1 + - @backstage/plugin-catalog-backend@3.2.0 + - @backstage/plugin-catalog-node@1.20.0 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-permission-common@0.9.3 + - @backstage/plugin-events-node@0.4.17 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + ## 0.7.6-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-incremental-ingestion/package.json b/plugins/catalog-backend-module-incremental-ingestion/package.json index 1d1f1961f3..2e4d56c844 100644 --- a/plugins/catalog-backend-module-incremental-ingestion/package.json +++ b/plugins/catalog-backend-module-incremental-ingestion/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-incremental-ingestion", - "version": "0.7.6-next.1", + "version": "0.7.6", "description": "An entity provider for streaming large asset sources into the catalog", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/catalog-backend-module-ldap/CHANGELOG.md b/plugins/catalog-backend-module-ldap/CHANGELOG.md index 63df25563a..9fda9e4ba6 100644 --- a/plugins/catalog-backend-module-ldap/CHANGELOG.md +++ b/plugins/catalog-backend-module-ldap/CHANGELOG.md @@ -1,5 +1,86 @@ # @backstage/plugin-catalog-backend-module-ldap +## 0.12.0 + +### Minor Changes + +- 980f240: Moved from `ldapjs` dependency to `ldapts` + + ### Breaking Changes + + **Type Migration** + + Custom transformers must now accept `Entry` from `ldapts` instead of `SearchEntry` + from `ldapjs` The Entry type provides direct property access without need for + `.object()` or `.raw()` methods. + + If you have custom user or group transformers, update the signature from: + + ```typescript + (vendor: LdapVendor, config: UserConfig, entry: SearchEntry) => + Promise; + ``` + + to + + ```typescript + (vendor: LdapVendor, config: UserConfig, entry: Entry) => + Promise; + ``` + + **Search Options** + + Updated LDAP search configuration `typesOnly: false` → `attributeValues: true` + This inverts the boolean logic: `ldapjs` used negative form while `ldapts` uses + positive form. Both achieve the same result: retrieving attribute values rather + than just attribute names. + + Update LDAP search options in configuration from + + ```yaml + options: + typesOnly: false + ``` + + to + + ```yaml + options: + attributeValues: true + ``` + + **API Changes** Removed `LdapClient.searchStreaming()` method. Users should + migrate to `LdapClient.search()` instead + + If you're using `searchStreaming` directly: + + ```typescript + // Before + await client.searchStreaming(dn, options, async entry => { + // process each entry + }); + + // After + const entries = await client.search(dn, options); + for (const entry of entries) { + // process each entry + } + ``` + + > **_NOTE:_**: Both methods have always loaded all entries into memory. The + > `searchStreaming` method was only needed internally to handle `ldapjs`'s + > event-based API. + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/plugin-catalog-node@1.20.0 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + - @backstage/plugin-catalog-common@1.1.7 + ## 0.12.0-next.1 ### Minor Changes diff --git a/plugins/catalog-backend-module-ldap/package.json b/plugins/catalog-backend-module-ldap/package.json index b924201bb1..1b745dc94a 100644 --- a/plugins/catalog-backend-module-ldap/package.json +++ b/plugins/catalog-backend-module-ldap/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-ldap", - "version": "0.12.0-next.1", + "version": "0.12.0", "description": "A Backstage catalog backend module that helps integrate towards LDAP", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/catalog-backend-module-logs/CHANGELOG.md b/plugins/catalog-backend-module-logs/CHANGELOG.md index 3e64268f2d..c50fa18139 100644 --- a/plugins/catalog-backend-module-logs/CHANGELOG.md +++ b/plugins/catalog-backend-module-logs/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-catalog-backend-module-logs +## 0.1.16 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@3.2.0 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-events-node@0.4.17 + ## 0.1.16-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-logs/package.json b/plugins/catalog-backend-module-logs/package.json index 7cdae7ed70..f860a66a88 100644 --- a/plugins/catalog-backend-module-logs/package.json +++ b/plugins/catalog-backend-module-logs/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-logs", - "version": "0.1.16-next.1", + "version": "0.1.16", "description": "A module that subscribes to catalog related events and logs them.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/catalog-backend-module-msgraph/CHANGELOG.md b/plugins/catalog-backend-module-msgraph/CHANGELOG.md index 569b77cd7b..405c2675ed 100644 --- a/plugins/catalog-backend-module-msgraph/CHANGELOG.md +++ b/plugins/catalog-backend-module-msgraph/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-catalog-backend-module-msgraph +## 0.8.2 + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/plugin-catalog-node@1.20.0 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + - @backstage/plugin-catalog-common@1.1.7 + ## 0.8.2-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-msgraph/package.json b/plugins/catalog-backend-module-msgraph/package.json index c4cb8223b0..0cb6ba54ce 100644 --- a/plugins/catalog-backend-module-msgraph/package.json +++ b/plugins/catalog-backend-module-msgraph/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-msgraph", - "version": "0.8.2-next.1", + "version": "0.8.2", "description": "A Backstage catalog backend module that helps integrate towards Microsoft Graph", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/catalog-backend-module-openapi/CHANGELOG.md b/plugins/catalog-backend-module-openapi/CHANGELOG.md index fea4d2712e..bb7b64bcd6 100644 --- a/plugins/catalog-backend-module-openapi/CHANGELOG.md +++ b/plugins/catalog-backend-module-openapi/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-catalog-backend-module-openapi +## 0.2.16 + +### Patch Changes + +- a5bcb2a: fix wrong dereferencing for AsyncApi 3 documents +- Updated dependencies + - @backstage/plugin-catalog-node@1.20.0 + - @backstage/integration@1.18.2 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/catalog-model@1.7.6 + - @backstage/plugin-catalog-common@1.1.7 + ## 0.2.16-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-openapi/package.json b/plugins/catalog-backend-module-openapi/package.json index 626c7fe7e2..6a43946202 100644 --- a/plugins/catalog-backend-module-openapi/package.json +++ b/plugins/catalog-backend-module-openapi/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-openapi", - "version": "0.2.16-next.1", + "version": "0.2.16", "description": "A Backstage catalog backend module that helps with OpenAPI specifications", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/catalog-backend-module-puppetdb/CHANGELOG.md b/plugins/catalog-backend-module-puppetdb/CHANGELOG.md index bfe18ec55b..c61b2c8e39 100644 --- a/plugins/catalog-backend-module-puppetdb/CHANGELOG.md +++ b/plugins/catalog-backend-module-puppetdb/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-catalog-backend-module-puppetdb +## 0.2.16 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.20.0 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + ## 0.2.16-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-puppetdb/package.json b/plugins/catalog-backend-module-puppetdb/package.json index fb66c1f5c3..b3f1b09a09 100644 --- a/plugins/catalog-backend-module-puppetdb/package.json +++ b/plugins/catalog-backend-module-puppetdb/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-puppetdb", - "version": "0.2.16-next.1", + "version": "0.2.16", "description": "A Backstage catalog backend module that helps integrate towards PuppetDB", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/catalog-backend-module-scaffolder-entity-model/CHANGELOG.md b/plugins/catalog-backend-module-scaffolder-entity-model/CHANGELOG.md index 9bf0ab1e6b..4ae73ca96f 100644 --- a/plugins/catalog-backend-module-scaffolder-entity-model/CHANGELOG.md +++ b/plugins/catalog-backend-module-scaffolder-entity-model/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-catalog-backend-module-scaffolder-entity-model +## 0.2.14 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.20.0 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/catalog-model@1.7.6 + - @backstage/plugin-catalog-common@1.1.7 + - @backstage/plugin-scaffolder-common@1.7.3 + ## 0.2.14-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-scaffolder-entity-model/package.json b/plugins/catalog-backend-module-scaffolder-entity-model/package.json index 92d3f245ab..24cf91fe25 100644 --- a/plugins/catalog-backend-module-scaffolder-entity-model/package.json +++ b/plugins/catalog-backend-module-scaffolder-entity-model/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-scaffolder-entity-model", - "version": "0.2.14-next.1", + "version": "0.2.14", "description": "Adds support for the scaffolder specific entity model (e.g. the Template kind) to the catalog backend plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/catalog-backend-module-unprocessed/CHANGELOG.md b/plugins/catalog-backend-module-unprocessed/CHANGELOG.md index edd8723c84..7560631e59 100644 --- a/plugins/catalog-backend-module-unprocessed/CHANGELOG.md +++ b/plugins/catalog-backend-module-unprocessed/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-catalog-backend-module-unprocessed +## 0.6.6 + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/plugin-catalog-node@1.20.0 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-permission-common@0.9.3 + - @backstage/plugin-auth-node@0.6.9 + - @backstage/catalog-model@1.7.6 + - @backstage/plugin-catalog-unprocessed-entities-common@0.0.11 + ## 0.6.6-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-unprocessed/package.json b/plugins/catalog-backend-module-unprocessed/package.json index 0c91088d8c..0c9ed6f33c 100644 --- a/plugins/catalog-backend-module-unprocessed/package.json +++ b/plugins/catalog-backend-module-unprocessed/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-unprocessed", - "version": "0.6.6-next.1", + "version": "0.6.6", "description": "Backstage Catalog module to view unprocessed entities", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/catalog-backend/CHANGELOG.md b/plugins/catalog-backend/CHANGELOG.md index 63cf380a69..a48267dc3e 100644 --- a/plugins/catalog-backend/CHANGELOG.md +++ b/plugins/catalog-backend/CHANGELOG.md @@ -1,5 +1,29 @@ # @backstage/plugin-catalog-backend +## 3.2.0 + +### Minor Changes + +- 2d229b2: Enable YAML merge keys in yamlPlaceholderResolver +- 9d3ec06: Make YAML merge (<<:) support configurable in the Backstage Catalog instead of always being enabled +- 8c26af4: Enable YAML merge keys in yamlPlaceholderResolver + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/plugin-catalog-node@1.20.0 + - @backstage/integration@1.18.2 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-permission-common@0.9.3 + - @backstage/plugin-events-node@0.4.17 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + - @backstage/backend-openapi-utils@0.6.3 + - @backstage/catalog-client@1.12.1 + - @backstage/plugin-catalog-common@1.1.7 + - @backstage/plugin-permission-node@0.10.6 + ## 3.2.0-next.1 ### Minor Changes diff --git a/plugins/catalog-backend/package.json b/plugins/catalog-backend/package.json index cfc237ab06..67f5eaf0ba 100644 --- a/plugins/catalog-backend/package.json +++ b/plugins/catalog-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend", - "version": "3.2.0-next.1", + "version": "3.2.0", "description": "The Backstage backend plugin that provides the Backstage catalog", "backstage": { "role": "backend-plugin", diff --git a/plugins/catalog-common/CHANGELOG.md b/plugins/catalog-common/CHANGELOG.md index f4844708a1..af5ea94d04 100644 --- a/plugins/catalog-common/CHANGELOG.md +++ b/plugins/catalog-common/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-catalog-common +## 1.1.7 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.9.3 + - @backstage/catalog-model@1.7.6 + - @backstage/plugin-search-common@1.2.21 + ## 1.1.7-next.0 ### Patch Changes diff --git a/plugins/catalog-common/package.json b/plugins/catalog-common/package.json index ad4b758e5a..875a40e434 100644 --- a/plugins/catalog-common/package.json +++ b/plugins/catalog-common/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-common", - "version": "1.1.7-next.0", + "version": "1.1.7", "description": "Common functionalities for the catalog plugin", "backstage": { "role": "common-library", diff --git a/plugins/catalog-graph/CHANGELOG.md b/plugins/catalog-graph/CHANGELOG.md index 7871553741..8436760d17 100644 --- a/plugins/catalog-graph/CHANGELOG.md +++ b/plugins/catalog-graph/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-catalog-graph +## 0.5.3 + +### Patch Changes + +- a2d7ae7: Ensure the catalog graph entity card respects the height prop so the visualization scales down properly on wide screens. +- 1c7e1ce: - Revert `viewbox` back to old values. + - Added `fullScreen` prop to `EntityCatalogGraphCard` +- b2bef92: Convert all enums to erasable-syntax compliant patterns +- Updated dependencies + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/core-compat-api@0.5.4 + - @backstage/plugin-catalog-react@1.21.3 + - @backstage/core-components@0.18.3 + - @backstage/core-plugin-api@1.12.0 + - @backstage/catalog-model@1.7.6 + - @backstage/catalog-client@1.12.1 + ## 0.5.3-next.2 ### Patch Changes diff --git a/plugins/catalog-graph/package.json b/plugins/catalog-graph/package.json index bef23e5085..49f4a9836b 100644 --- a/plugins/catalog-graph/package.json +++ b/plugins/catalog-graph/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-graph", - "version": "0.5.3-next.2", + "version": "0.5.3", "backstage": { "role": "frontend-plugin", "pluginId": "catalog-graph", diff --git a/plugins/catalog-import/CHANGELOG.md b/plugins/catalog-import/CHANGELOG.md index 20fb1a5fa7..336ef7af15 100644 --- a/plugins/catalog-import/CHANGELOG.md +++ b/plugins/catalog-import/CHANGELOG.md @@ -1,5 +1,25 @@ # @backstage/plugin-catalog-import +## 0.13.7 + +### Patch Changes + +- f987bfd: Fixed missing `catalog.entity.create` permission authorization in the default page extension. +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/core-compat-api@0.5.4 + - @backstage/plugin-catalog-react@1.21.3 + - @backstage/integration@1.18.2 + - @backstage/core-components@0.18.3 + - @backstage/core-plugin-api@1.12.0 + - @backstage/plugin-permission-react@0.4.38 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + - @backstage/catalog-client@1.12.1 + - @backstage/integration-react@1.2.12 + - @backstage/plugin-catalog-common@1.1.7 + ## 0.13.7-next.0 ### Patch Changes diff --git a/plugins/catalog-import/package.json b/plugins/catalog-import/package.json index cffe9a230d..6d9b3dd66d 100644 --- a/plugins/catalog-import/package.json +++ b/plugins/catalog-import/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-import", - "version": "0.13.7-next.0", + "version": "0.13.7", "description": "A Backstage plugin the helps you import entities into your catalog", "backstage": { "role": "frontend-plugin", diff --git a/plugins/catalog-node/CHANGELOG.md b/plugins/catalog-node/CHANGELOG.md index 44dcbd2e93..2bda2e7fbc 100644 --- a/plugins/catalog-node/CHANGELOG.md +++ b/plugins/catalog-node/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-catalog-node +## 1.20.0 + +### Minor Changes + +- 9d3ec06: Make YAML merge (<<:) support configurable in the Backstage Catalog instead of always being enabled +- 8c26af4: Enable YAML merge keys in yamlPlaceholderResolver + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-permission-common@0.9.3 + - @backstage/catalog-model@1.7.6 + - @backstage/catalog-client@1.12.1 + - @backstage/plugin-catalog-common@1.1.7 + - @backstage/plugin-permission-node@0.10.6 + ## 1.20.0-next.1 ### Minor Changes diff --git a/plugins/catalog-node/package.json b/plugins/catalog-node/package.json index 59dbb49f07..5f6aecaf30 100644 --- a/plugins/catalog-node/package.json +++ b/plugins/catalog-node/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-node", - "version": "1.20.0-next.1", + "version": "1.20.0", "description": "The plugin-catalog-node module for @backstage/plugin-catalog-backend", "backstage": { "role": "node-library", diff --git a/plugins/catalog-react/CHANGELOG.md b/plugins/catalog-react/CHANGELOG.md index 5e5fbaa14b..4779ae878e 100644 --- a/plugins/catalog-react/CHANGELOG.md +++ b/plugins/catalog-react/CHANGELOG.md @@ -1,5 +1,26 @@ # @backstage/plugin-catalog-react +## 1.21.3 + +### Patch Changes + +- 36d7582: Added missing i18n +- 2b7924b: Apply default ordering of templates +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- 904d136: Fixed catalog filter "all" not appearing as selected when set as the initially selected filter. +- Updated dependencies + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/core-compat-api@0.5.4 + - @backstage/core-components@0.18.3 + - @backstage/core-plugin-api@1.12.0 + - @backstage/plugin-permission-common@0.9.3 + - @backstage/plugin-permission-react@0.4.38 + - @backstage/catalog-model@1.7.6 + - @backstage/frontend-test-utils@0.4.1 + - @backstage/catalog-client@1.12.1 + - @backstage/integration-react@1.2.12 + - @backstage/plugin-catalog-common@1.1.7 + ## 1.21.3-next.2 ### Patch Changes diff --git a/plugins/catalog-react/package.json b/plugins/catalog-react/package.json index 35054769ae..15251f6c46 100644 --- a/plugins/catalog-react/package.json +++ b/plugins/catalog-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-react", - "version": "1.21.3-next.2", + "version": "1.21.3", "description": "A frontend library that helps other Backstage plugins interact with the catalog", "backstage": { "role": "web-library", diff --git a/plugins/catalog-unprocessed-entities-common/CHANGELOG.md b/plugins/catalog-unprocessed-entities-common/CHANGELOG.md index 8bed47be6a..962c3dff33 100644 --- a/plugins/catalog-unprocessed-entities-common/CHANGELOG.md +++ b/plugins/catalog-unprocessed-entities-common/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-catalog-unprocessed-entities-common +## 0.0.11 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.9.3 + ## 0.0.11-next.0 ### Patch Changes diff --git a/plugins/catalog-unprocessed-entities-common/package.json b/plugins/catalog-unprocessed-entities-common/package.json index 82842b88bf..49ead8da1b 100644 --- a/plugins/catalog-unprocessed-entities-common/package.json +++ b/plugins/catalog-unprocessed-entities-common/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-unprocessed-entities-common", - "version": "0.0.11-next.0", + "version": "0.0.11", "description": "Common functionalities for the catalog-unprocessed-entities plugin", "backstage": { "role": "common-library", diff --git a/plugins/catalog-unprocessed-entities/CHANGELOG.md b/plugins/catalog-unprocessed-entities/CHANGELOG.md index 106b5edf2d..4250130363 100644 --- a/plugins/catalog-unprocessed-entities/CHANGELOG.md +++ b/plugins/catalog-unprocessed-entities/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-catalog-unprocessed-entities +## 0.2.23 + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/core-compat-api@0.5.4 + - @backstage/core-components@0.18.3 + - @backstage/core-plugin-api@1.12.0 + - @backstage/catalog-model@1.7.6 + ## 0.2.23-next.0 ### Patch Changes diff --git a/plugins/catalog-unprocessed-entities/package.json b/plugins/catalog-unprocessed-entities/package.json index 05984864cf..5610db4c50 100644 --- a/plugins/catalog-unprocessed-entities/package.json +++ b/plugins/catalog-unprocessed-entities/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-unprocessed-entities", - "version": "0.2.23-next.0", + "version": "0.2.23", "backstage": { "role": "frontend-plugin", "pluginId": "catalog-unprocessed-entities", diff --git a/plugins/catalog/CHANGELOG.md b/plugins/catalog/CHANGELOG.md index 20c29790d7..0982c99646 100644 --- a/plugins/catalog/CHANGELOG.md +++ b/plugins/catalog/CHANGELOG.md @@ -1,5 +1,32 @@ # @backstage/plugin-catalog +## 1.32.0 + +### Minor Changes + +- a521911: Add support for customizable icons in `SearchResultListItemBlueprint` and related components + +### Patch Changes + +- b500bcc: Fix React warnings for elements not having stable keys. +- a87c0a5: Fixed responsiveness issues with catalog entity content layout using the new frontend system. +- aff04d3: Fixed missing margins for entity warning content area on catalog entity page in NFS. +- Updated dependencies + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/core-compat-api@0.5.4 + - @backstage/plugin-search-react@1.10.0 + - @backstage/plugin-catalog-react@1.21.3 + - @backstage/core-components@0.18.3 + - @backstage/core-plugin-api@1.12.0 + - @backstage/plugin-permission-react@0.4.38 + - @backstage/catalog-model@1.7.6 + - @backstage/plugin-techdocs-react@1.3.5 + - @backstage/catalog-client@1.12.1 + - @backstage/integration-react@1.2.12 + - @backstage/plugin-catalog-common@1.1.7 + - @backstage/plugin-scaffolder-common@1.7.3 + - @backstage/plugin-search-common@1.2.21 + ## 1.32.0-next.1 ### Minor Changes diff --git a/plugins/catalog/package.json b/plugins/catalog/package.json index 31f0694844..d9a9726900 100644 --- a/plugins/catalog/package.json +++ b/plugins/catalog/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog", - "version": "1.32.0-next.1", + "version": "1.32.0", "description": "The Backstage plugin for browsing the Backstage catalog", "backstage": { "role": "frontend-plugin", diff --git a/plugins/config-schema/CHANGELOG.md b/plugins/config-schema/CHANGELOG.md index be1bf61051..babc867fde 100644 --- a/plugins/config-schema/CHANGELOG.md +++ b/plugins/config-schema/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-config-schema +## 0.1.74 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.18.3 + - @backstage/core-plugin-api@1.12.0 + ## 0.1.74-next.0 ### Patch Changes diff --git a/plugins/config-schema/package.json b/plugins/config-schema/package.json index af7fd4f06f..3d3f1c258e 100644 --- a/plugins/config-schema/package.json +++ b/plugins/config-schema/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-config-schema", - "version": "0.1.74-next.0", + "version": "0.1.74", "description": "A Backstage plugin that lets you browse the configuration schema of your app", "backstage": { "role": "frontend-plugin", diff --git a/plugins/devtools-backend/CHANGELOG.md b/plugins/devtools-backend/CHANGELOG.md index 9d89d50392..3a7677c330 100644 --- a/plugins/devtools-backend/CHANGELOG.md +++ b/plugins/devtools-backend/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-devtools-backend +## 0.5.11 + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/backend-defaults@0.13.1 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-permission-common@0.9.3 + - @backstage/plugin-devtools-common@0.1.19 + - @backstage/config-loader@1.10.6 + - @backstage/config@1.3.6 + - @backstage/plugin-permission-node@0.10.6 + ## 0.5.11-next.1 ### Patch Changes diff --git a/plugins/devtools-backend/package.json b/plugins/devtools-backend/package.json index f823902224..33259ac70c 100644 --- a/plugins/devtools-backend/package.json +++ b/plugins/devtools-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-devtools-backend", - "version": "0.5.11-next.1", + "version": "0.5.11", "backstage": { "role": "backend-plugin", "pluginId": "devtools", diff --git a/plugins/devtools-common/CHANGELOG.md b/plugins/devtools-common/CHANGELOG.md index 841994b7e2..6eeced0711 100644 --- a/plugins/devtools-common/CHANGELOG.md +++ b/plugins/devtools-common/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-devtools-common +## 0.1.19 + +### Patch Changes + +- b2bef92: Convert all enums to erasable-syntax compliant patterns +- Updated dependencies + - @backstage/plugin-permission-common@0.9.3 + ## 0.1.19-next.1 ### Patch Changes diff --git a/plugins/devtools-common/package.json b/plugins/devtools-common/package.json index 72c5ae7bbc..c442185e14 100644 --- a/plugins/devtools-common/package.json +++ b/plugins/devtools-common/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-devtools-common", - "version": "0.1.19-next.1", + "version": "0.1.19", "description": "Common functionalities for the devtools plugin", "backstage": { "role": "common-library", diff --git a/plugins/devtools/CHANGELOG.md b/plugins/devtools/CHANGELOG.md index c9a695ec75..dd2da6fdbd 100644 --- a/plugins/devtools/CHANGELOG.md +++ b/plugins/devtools/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-devtools +## 0.1.33 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/core-compat-api@0.5.4 + - @backstage/core-components@0.18.3 + - @backstage/core-plugin-api@1.12.0 + - @backstage/plugin-devtools-common@0.1.19 + - @backstage/plugin-permission-react@0.4.38 + ## 0.1.33-next.0 ### Patch Changes diff --git a/plugins/devtools/package.json b/plugins/devtools/package.json index 10959ac740..6ba69e0b56 100644 --- a/plugins/devtools/package.json +++ b/plugins/devtools/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-devtools", - "version": "0.1.33-next.0", + "version": "0.1.33", "backstage": { "role": "frontend-plugin", "pluginId": "devtools", diff --git a/plugins/events-backend-module-aws-sqs/CHANGELOG.md b/plugins/events-backend-module-aws-sqs/CHANGELOG.md index 397e319643..8d34a39490 100644 --- a/plugins/events-backend-module-aws-sqs/CHANGELOG.md +++ b/plugins/events-backend-module-aws-sqs/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-events-backend-module-aws-sqs +## 0.4.17 + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-events-node@0.4.17 + - @backstage/config@1.3.6 + ## 0.4.17-next.1 ### Patch Changes diff --git a/plugins/events-backend-module-aws-sqs/package.json b/plugins/events-backend-module-aws-sqs/package.json index afbcd821fc..c98f44f78c 100644 --- a/plugins/events-backend-module-aws-sqs/package.json +++ b/plugins/events-backend-module-aws-sqs/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-aws-sqs", - "version": "0.4.17-next.1", + "version": "0.4.17", "backstage": { "role": "backend-plugin-module", "pluginId": "events", diff --git a/plugins/events-backend-module-azure/CHANGELOG.md b/plugins/events-backend-module-azure/CHANGELOG.md index d2a07c5e2c..4dfc6d135d 100644 --- a/plugins/events-backend-module-azure/CHANGELOG.md +++ b/plugins/events-backend-module-azure/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-events-backend-module-azure +## 0.2.26 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-events-node@0.4.17 + ## 0.2.26-next.1 ### Patch Changes diff --git a/plugins/events-backend-module-azure/package.json b/plugins/events-backend-module-azure/package.json index 4b699250fa..ad3dd79847 100644 --- a/plugins/events-backend-module-azure/package.json +++ b/plugins/events-backend-module-azure/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-azure", - "version": "0.2.26-next.1", + "version": "0.2.26", "backstage": { "role": "backend-plugin-module", "pluginId": "events", diff --git a/plugins/events-backend-module-bitbucket-cloud/CHANGELOG.md b/plugins/events-backend-module-bitbucket-cloud/CHANGELOG.md index cfc5dd7526..8ec30a854c 100644 --- a/plugins/events-backend-module-bitbucket-cloud/CHANGELOG.md +++ b/plugins/events-backend-module-bitbucket-cloud/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-events-backend-module-bitbucket-cloud +## 0.2.26 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-events-node@0.4.17 + ## 0.2.26-next.1 ### Patch Changes diff --git a/plugins/events-backend-module-bitbucket-cloud/package.json b/plugins/events-backend-module-bitbucket-cloud/package.json index 9a7f477b10..7541186ba2 100644 --- a/plugins/events-backend-module-bitbucket-cloud/package.json +++ b/plugins/events-backend-module-bitbucket-cloud/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-bitbucket-cloud", - "version": "0.2.26-next.1", + "version": "0.2.26", "backstage": { "role": "backend-plugin-module", "pluginId": "events", diff --git a/plugins/events-backend-module-bitbucket-server/CHANGELOG.md b/plugins/events-backend-module-bitbucket-server/CHANGELOG.md index c02e3cc244..8af8640878 100644 --- a/plugins/events-backend-module-bitbucket-server/CHANGELOG.md +++ b/plugins/events-backend-module-bitbucket-server/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-events-backend-module-bitbucket-server +## 0.1.7 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-events-node@0.4.17 + ## 0.1.7-next.1 ### Patch Changes diff --git a/plugins/events-backend-module-bitbucket-server/package.json b/plugins/events-backend-module-bitbucket-server/package.json index a7a7f6caf1..8686ed7412 100644 --- a/plugins/events-backend-module-bitbucket-server/package.json +++ b/plugins/events-backend-module-bitbucket-server/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-bitbucket-server", - "version": "0.1.7-next.1", + "version": "0.1.7", "backstage": { "role": "backend-plugin-module", "pluginId": "events", diff --git a/plugins/events-backend-module-gerrit/CHANGELOG.md b/plugins/events-backend-module-gerrit/CHANGELOG.md index b06e283f18..7dc39f98b8 100644 --- a/plugins/events-backend-module-gerrit/CHANGELOG.md +++ b/plugins/events-backend-module-gerrit/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-events-backend-module-gerrit +## 0.2.26 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-events-node@0.4.17 + ## 0.2.26-next.1 ### Patch Changes diff --git a/plugins/events-backend-module-gerrit/package.json b/plugins/events-backend-module-gerrit/package.json index c45bccd840..482136ffe1 100644 --- a/plugins/events-backend-module-gerrit/package.json +++ b/plugins/events-backend-module-gerrit/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-gerrit", - "version": "0.2.26-next.1", + "version": "0.2.26", "backstage": { "role": "backend-plugin-module", "pluginId": "events", diff --git a/plugins/events-backend-module-github/CHANGELOG.md b/plugins/events-backend-module-github/CHANGELOG.md index 9fa76b1bd1..df3672dc00 100644 --- a/plugins/events-backend-module-github/CHANGELOG.md +++ b/plugins/events-backend-module-github/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-events-backend-module-github +## 0.4.6 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.18.2 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-events-node@0.4.17 + - @backstage/config@1.3.6 + ## 0.4.6-next.1 ### Patch Changes diff --git a/plugins/events-backend-module-github/package.json b/plugins/events-backend-module-github/package.json index fa74c6767f..c615eaea07 100644 --- a/plugins/events-backend-module-github/package.json +++ b/plugins/events-backend-module-github/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-github", - "version": "0.4.6-next.1", + "version": "0.4.6", "backstage": { "role": "backend-plugin-module", "pluginId": "events", diff --git a/plugins/events-backend-module-gitlab/CHANGELOG.md b/plugins/events-backend-module-gitlab/CHANGELOG.md index 696f147edc..34aae805b0 100644 --- a/plugins/events-backend-module-gitlab/CHANGELOG.md +++ b/plugins/events-backend-module-gitlab/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-events-backend-module-gitlab +## 0.3.7 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-events-node@0.4.17 + - @backstage/config@1.3.6 + ## 0.3.7-next.1 ### Patch Changes diff --git a/plugins/events-backend-module-gitlab/package.json b/plugins/events-backend-module-gitlab/package.json index 9f8810d87f..744d53d6c7 100644 --- a/plugins/events-backend-module-gitlab/package.json +++ b/plugins/events-backend-module-gitlab/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-gitlab", - "version": "0.3.7-next.1", + "version": "0.3.7", "backstage": { "role": "backend-plugin-module", "pluginId": "events", diff --git a/plugins/events-backend-module-google-pubsub/CHANGELOG.md b/plugins/events-backend-module-google-pubsub/CHANGELOG.md index 0416ecf6bd..da7f475c34 100644 --- a/plugins/events-backend-module-google-pubsub/CHANGELOG.md +++ b/plugins/events-backend-module-google-pubsub/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-events-backend-module-google-pubsub +## 0.1.6 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-events-node@0.4.17 + - @backstage/config@1.3.6 + ## 0.1.6-next.1 ### Patch Changes diff --git a/plugins/events-backend-module-google-pubsub/package.json b/plugins/events-backend-module-google-pubsub/package.json index a64a5363af..daed1fe289 100644 --- a/plugins/events-backend-module-google-pubsub/package.json +++ b/plugins/events-backend-module-google-pubsub/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-google-pubsub", - "version": "0.1.6-next.1", + "version": "0.1.6", "description": "The google-pubsub backend module for the events plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/events-backend-module-kafka/CHANGELOG.md b/plugins/events-backend-module-kafka/CHANGELOG.md index 711fbced96..9a59aeeeeb 100644 --- a/plugins/events-backend-module-kafka/CHANGELOG.md +++ b/plugins/events-backend-module-kafka/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-events-backend-module-kafka +## 0.1.5 + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-events-node@0.4.17 + - @backstage/config@1.3.6 + ## 0.1.5-next.1 ### Patch Changes diff --git a/plugins/events-backend-module-kafka/package.json b/plugins/events-backend-module-kafka/package.json index 160a56e6cb..93d624a97c 100644 --- a/plugins/events-backend-module-kafka/package.json +++ b/plugins/events-backend-module-kafka/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-kafka", - "version": "0.1.5-next.1", + "version": "0.1.5", "description": "The kafka backend module for the events plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/events-backend-test-utils/CHANGELOG.md b/plugins/events-backend-test-utils/CHANGELOG.md index 8c3f506f9b..a274420041 100644 --- a/plugins/events-backend-test-utils/CHANGELOG.md +++ b/plugins/events-backend-test-utils/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-events-backend-test-utils +## 0.1.50 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.17 + ## 0.1.50-next.0 ### Patch Changes diff --git a/plugins/events-backend-test-utils/package.json b/plugins/events-backend-test-utils/package.json index 407984484f..7a9b0ab1b0 100644 --- a/plugins/events-backend-test-utils/package.json +++ b/plugins/events-backend-test-utils/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-test-utils", - "version": "0.1.50-next.0", + "version": "0.1.50", "description": "The plugin-events-backend-test-utils for @backstage/plugin-events-node", "backstage": { "role": "node-library", diff --git a/plugins/events-backend/CHANGELOG.md b/plugins/events-backend/CHANGELOG.md index 401fd93b3b..8bd0eb9a95 100644 --- a/plugins/events-backend/CHANGELOG.md +++ b/plugins/events-backend/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-events-backend +## 0.5.8 + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-events-node@0.4.17 + - @backstage/config@1.3.6 + - @backstage/backend-openapi-utils@0.6.3 + ## 0.5.8-next.1 ### Patch Changes diff --git a/plugins/events-backend/package.json b/plugins/events-backend/package.json index 37b743d637..378e7008f7 100644 --- a/plugins/events-backend/package.json +++ b/plugins/events-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend", - "version": "0.5.8-next.1", + "version": "0.5.8", "backstage": { "role": "backend-plugin", "pluginId": "events", diff --git a/plugins/events-node/CHANGELOG.md b/plugins/events-node/CHANGELOG.md index 94064cbafd..4206c2e726 100644 --- a/plugins/events-node/CHANGELOG.md +++ b/plugins/events-node/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-events-node +## 0.4.17 + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + ## 0.4.17-next.1 ### Patch Changes diff --git a/plugins/events-node/package.json b/plugins/events-node/package.json index ea63e68408..caa248a1f8 100644 --- a/plugins/events-node/package.json +++ b/plugins/events-node/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-node", - "version": "0.4.17-next.1", + "version": "0.4.17", "description": "The plugin-events-node module for @backstage/plugin-events-backend", "backstage": { "role": "node-library", diff --git a/plugins/example-todo-list-backend/CHANGELOG.md b/plugins/example-todo-list-backend/CHANGELOG.md index ab8ce6917e..4e403ec772 100644 --- a/plugins/example-todo-list-backend/CHANGELOG.md +++ b/plugins/example-todo-list-backend/CHANGELOG.md @@ -1,5 +1,12 @@ # @internal/plugin-todo-list-backend +## 1.0.45 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + ## 1.0.45-next.1 ### Patch Changes diff --git a/plugins/example-todo-list-backend/package.json b/plugins/example-todo-list-backend/package.json index d6509e94c6..a9877eb25c 100644 --- a/plugins/example-todo-list-backend/package.json +++ b/plugins/example-todo-list-backend/package.json @@ -1,6 +1,6 @@ { "name": "@internal/plugin-todo-list-backend", - "version": "1.0.45-next.1", + "version": "1.0.45", "backstage": { "role": "backend-plugin", "pluginId": "todo-list", diff --git a/plugins/example-todo-list-common/CHANGELOG.md b/plugins/example-todo-list-common/CHANGELOG.md index c3bcdb7990..d0cdfc8f69 100644 --- a/plugins/example-todo-list-common/CHANGELOG.md +++ b/plugins/example-todo-list-common/CHANGELOG.md @@ -1,5 +1,12 @@ # @internal/plugin-todo-list-common +## 1.0.28 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.9.3 + ## 1.0.28-next.0 ### Patch Changes diff --git a/plugins/example-todo-list-common/package.json b/plugins/example-todo-list-common/package.json index 75bc78e24d..7dc0e36cb1 100644 --- a/plugins/example-todo-list-common/package.json +++ b/plugins/example-todo-list-common/package.json @@ -1,6 +1,6 @@ { "name": "@internal/plugin-todo-list-common", - "version": "1.0.28-next.0", + "version": "1.0.28", "backstage": { "role": "common-library", "pluginId": "todo-list", diff --git a/plugins/example-todo-list/CHANGELOG.md b/plugins/example-todo-list/CHANGELOG.md index d6d35bfcc0..8a5fc0d9d4 100644 --- a/plugins/example-todo-list/CHANGELOG.md +++ b/plugins/example-todo-list/CHANGELOG.md @@ -1,5 +1,13 @@ # @internal/plugin-todo-list +## 1.0.45 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.18.3 + - @backstage/core-plugin-api@1.12.0 + ## 1.0.45-next.0 ### Patch Changes diff --git a/plugins/example-todo-list/package.json b/plugins/example-todo-list/package.json index ecec99b269..e9d9d94376 100644 --- a/plugins/example-todo-list/package.json +++ b/plugins/example-todo-list/package.json @@ -1,6 +1,6 @@ { "name": "@internal/plugin-todo-list", - "version": "1.0.45-next.0", + "version": "1.0.45", "backstage": { "role": "frontend-plugin", "pluginId": "todo-list", diff --git a/plugins/gateway-backend/CHANGELOG.md b/plugins/gateway-backend/CHANGELOG.md index 7f97c68371..ecf45e21ae 100644 --- a/plugins/gateway-backend/CHANGELOG.md +++ b/plugins/gateway-backend/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-gateway-backend +## 1.1.0 + +### Minor Changes + +- 229f63e: Added hop count tracking to prevent proxy loops. The gateway now tracks the number of proxy hops using the `backstage-gateway-hops` header and rejects requests that exceed 3 hops with a 508 Loop Detected error. +- a17d9df: Update usage of the `instanceMetadata` service. + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + ## 1.1.0-next.1 ### Minor Changes diff --git a/plugins/gateway-backend/package.json b/plugins/gateway-backend/package.json index 553f17f2fa..39887a0857 100644 --- a/plugins/gateway-backend/package.json +++ b/plugins/gateway-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-gateway-backend", - "version": "1.1.0-next.1", + "version": "1.1.0", "backstage": { "role": "backend-plugin", "pluginId": "gateway", diff --git a/plugins/home-react/CHANGELOG.md b/plugins/home-react/CHANGELOG.md index 8b3c322325..10ee11c83e 100644 --- a/plugins/home-react/CHANGELOG.md +++ b/plugins/home-react/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-home-react +## 0.1.32 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/core-components@0.18.3 + - @backstage/core-plugin-api@1.12.0 + ## 0.1.32-next.0 ### Patch Changes diff --git a/plugins/home-react/package.json b/plugins/home-react/package.json index 8375222222..3a2840a1e6 100644 --- a/plugins/home-react/package.json +++ b/plugins/home-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-home-react", - "version": "0.1.32-next.0", + "version": "0.1.32", "description": "A Backstage plugin that contains react components helps you build a home page", "backstage": { "role": "web-library", diff --git a/plugins/home/CHANGELOG.md b/plugins/home/CHANGELOG.md index 03213110af..044894a4ad 100644 --- a/plugins/home/CHANGELOG.md +++ b/plugins/home/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-home +## 0.8.14 + +### Patch Changes + +- 2ac5d29: Allow customization of `VisitList` by adding optional `enrichVisit`, `transformPathname`, `canSave` functions to `VisitsStorageApi`, along with `VisitDisplayProvider` for colors, labels +- Updated dependencies + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/core-compat-api@0.5.4 + - @backstage/plugin-catalog-react@1.21.3 + - @backstage/core-components@0.18.3 + - @backstage/core-plugin-api@1.12.0 + - @backstage/core-app-api@1.19.2 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + - @backstage/plugin-home-react@0.1.32 + - @backstage/catalog-client@1.12.1 + ## 0.8.14-next.1 ### Patch Changes diff --git a/plugins/home/package.json b/plugins/home/package.json index 41ef166872..4bc9361884 100644 --- a/plugins/home/package.json +++ b/plugins/home/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-home", - "version": "0.8.14-next.1", + "version": "0.8.14", "description": "A Backstage plugin that helps you build a home page", "backstage": { "role": "frontend-plugin", diff --git a/plugins/kubernetes-backend/CHANGELOG.md b/plugins/kubernetes-backend/CHANGELOG.md index 00d0e0b208..22850c7d82 100644 --- a/plugins/kubernetes-backend/CHANGELOG.md +++ b/plugins/kubernetes-backend/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/plugin-kubernetes-backend +## 0.20.4 + +### Patch Changes + +- 71c22f3: Removed/moved unused dependencies +- 1906d37: Updated dependency `@kubernetes/client-node` to `1.4.0`. +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/plugin-catalog-node@1.20.0 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-kubernetes-common@0.9.8 + - @backstage/plugin-kubernetes-node@0.3.6 + - @backstage/plugin-permission-common@0.9.3 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + - @backstage/integration-aws-node@0.1.19 + - @backstage/catalog-client@1.12.1 + - @backstage/plugin-permission-node@0.10.6 + ## 0.20.4-next.2 ### Patch Changes diff --git a/plugins/kubernetes-backend/package.json b/plugins/kubernetes-backend/package.json index 84cf786152..cecc6be53e 100644 --- a/plugins/kubernetes-backend/package.json +++ b/plugins/kubernetes-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-kubernetes-backend", - "version": "0.20.4-next.2", + "version": "0.20.4", "description": "A Backstage backend plugin that integrates towards Kubernetes", "backstage": { "role": "backend-plugin", diff --git a/plugins/kubernetes-cluster/CHANGELOG.md b/plugins/kubernetes-cluster/CHANGELOG.md index 39358a5d97..22a87cbb88 100644 --- a/plugins/kubernetes-cluster/CHANGELOG.md +++ b/plugins/kubernetes-cluster/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-kubernetes-cluster +## 0.0.31 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.21.3 + - @backstage/core-components@0.18.3 + - @backstage/plugin-kubernetes-common@0.9.8 + - @backstage/plugin-kubernetes-react@0.5.13 + - @backstage/core-plugin-api@1.12.0 + - @backstage/plugin-permission-react@0.4.38 + - @backstage/catalog-model@1.7.6 + ## 0.0.31-next.0 ### Patch Changes diff --git a/plugins/kubernetes-cluster/package.json b/plugins/kubernetes-cluster/package.json index 7a49342512..519eabd6ff 100644 --- a/plugins/kubernetes-cluster/package.json +++ b/plugins/kubernetes-cluster/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-kubernetes-cluster", - "version": "0.0.31-next.0", + "version": "0.0.31", "description": "A Backstage plugin that shows details of Kubernetes clusters", "backstage": { "role": "frontend-plugin", diff --git a/plugins/kubernetes-common/CHANGELOG.md b/plugins/kubernetes-common/CHANGELOG.md index 7f8edbf994..effad6fbff 100644 --- a/plugins/kubernetes-common/CHANGELOG.md +++ b/plugins/kubernetes-common/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-kubernetes-common +## 0.9.8 + +### Patch Changes + +- 1906d37: Updated dependency `@kubernetes/client-node` to `1.4.0`. +- Updated dependencies + - @backstage/plugin-permission-common@0.9.3 + - @backstage/catalog-model@1.7.6 + ## 0.9.8-next.1 ### Patch Changes diff --git a/plugins/kubernetes-common/package.json b/plugins/kubernetes-common/package.json index d7ca1408a7..0a61221683 100644 --- a/plugins/kubernetes-common/package.json +++ b/plugins/kubernetes-common/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-kubernetes-common", - "version": "0.9.8-next.1", + "version": "0.9.8", "description": "Common functionalities for kubernetes, to be shared between kubernetes and kubernetes-backend plugin", "backstage": { "role": "common-library", diff --git a/plugins/kubernetes-node/CHANGELOG.md b/plugins/kubernetes-node/CHANGELOG.md index 68b3512bf1..186fad2d0b 100644 --- a/plugins/kubernetes-node/CHANGELOG.md +++ b/plugins/kubernetes-node/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-kubernetes-node +## 0.3.6 + +### Patch Changes + +- 1906d37: Updated dependency `@kubernetes/client-node` to `1.4.0`. +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-kubernetes-common@0.9.8 + - @backstage/catalog-model@1.7.6 + ## 0.3.6-next.2 ### Patch Changes diff --git a/plugins/kubernetes-node/package.json b/plugins/kubernetes-node/package.json index d8f9e1b687..cadd27eabf 100644 --- a/plugins/kubernetes-node/package.json +++ b/plugins/kubernetes-node/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-kubernetes-node", - "version": "0.3.6-next.2", + "version": "0.3.6", "description": "Node.js library for the kubernetes plugin", "backstage": { "role": "node-library", diff --git a/plugins/kubernetes-react/CHANGELOG.md b/plugins/kubernetes-react/CHANGELOG.md index ee40502a51..0df51a9af2 100644 --- a/plugins/kubernetes-react/CHANGELOG.md +++ b/plugins/kubernetes-react/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-kubernetes-react +## 0.5.13 + +### Patch Changes + +- 1906d37: Updated dependency `@kubernetes/client-node` to `1.4.0`. +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/core-components@0.18.3 + - @backstage/plugin-kubernetes-common@0.9.8 + - @backstage/core-plugin-api@1.12.0 + - @backstage/catalog-model@1.7.6 + ## 0.5.13-next.1 ### Patch Changes diff --git a/plugins/kubernetes-react/package.json b/plugins/kubernetes-react/package.json index 02b902f4f5..e22a41d1ec 100644 --- a/plugins/kubernetes-react/package.json +++ b/plugins/kubernetes-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-kubernetes-react", - "version": "0.5.13-next.1", + "version": "0.5.13", "description": "Web library for the kubernetes-react plugin", "backstage": { "role": "web-library", diff --git a/plugins/kubernetes/CHANGELOG.md b/plugins/kubernetes/CHANGELOG.md index f8dcfb151f..7659669cfd 100644 --- a/plugins/kubernetes/CHANGELOG.md +++ b/plugins/kubernetes/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-kubernetes +## 0.12.13 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/core-compat-api@0.5.4 + - @backstage/plugin-catalog-react@1.21.3 + - @backstage/core-components@0.18.3 + - @backstage/plugin-kubernetes-common@0.9.8 + - @backstage/plugin-kubernetes-react@0.5.13 + - @backstage/core-plugin-api@1.12.0 + - @backstage/plugin-permission-react@0.4.38 + - @backstage/catalog-model@1.7.6 + ## 0.12.13-next.0 ### Patch Changes diff --git a/plugins/kubernetes/package.json b/plugins/kubernetes/package.json index f191ce2a0b..a003601bbe 100644 --- a/plugins/kubernetes/package.json +++ b/plugins/kubernetes/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-kubernetes", - "version": "0.12.13-next.0", + "version": "0.12.13", "description": "A Backstage plugin that integrates towards Kubernetes", "backstage": { "role": "frontend-plugin", diff --git a/plugins/mcp-actions-backend/CHANGELOG.md b/plugins/mcp-actions-backend/CHANGELOG.md index d9afa89a60..a119e39138 100644 --- a/plugins/mcp-actions-backend/CHANGELOG.md +++ b/plugins/mcp-actions-backend/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-mcp-actions-backend +## 0.1.5 + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/backend-defaults@0.13.1 + - @backstage/plugin-catalog-node@1.20.0 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/catalog-client@1.12.1 + ## 0.1.5-next.1 ### Patch Changes diff --git a/plugins/mcp-actions-backend/package.json b/plugins/mcp-actions-backend/package.json index 074c2f970c..24ac649f5a 100644 --- a/plugins/mcp-actions-backend/package.json +++ b/plugins/mcp-actions-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-mcp-actions-backend", - "version": "0.1.5-next.1", + "version": "0.1.5", "backstage": { "role": "backend-plugin", "pluginId": "mcp-actions", diff --git a/plugins/mui-to-bui/CHANGELOG.md b/plugins/mui-to-bui/CHANGELOG.md index 69aee6adb3..6b3daef95c 100644 --- a/plugins/mui-to-bui/CHANGELOG.md +++ b/plugins/mui-to-bui/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-mui-to-bui +## 0.2.1 + +### Patch Changes + +- 5c614ff: Updated BUI checkbox preview example to align with new component API. +- Updated dependencies + - @backstage/ui@0.9.0 + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/core-compat-api@0.5.4 + - @backstage/core-plugin-api@1.12.0 + ## 0.2.1-next.1 ### Patch Changes diff --git a/plugins/mui-to-bui/package.json b/plugins/mui-to-bui/package.json index 9eedd5a0be..ca66765d79 100644 --- a/plugins/mui-to-bui/package.json +++ b/plugins/mui-to-bui/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-mui-to-bui", - "version": "0.2.1-next.1", + "version": "0.2.1", "backstage": { "role": "frontend-plugin", "pluginId": "mui-to-bui", diff --git a/plugins/notifications-backend-module-email/CHANGELOG.md b/plugins/notifications-backend-module-email/CHANGELOG.md index dafe434598..5ad069eab5 100644 --- a/plugins/notifications-backend-module-email/CHANGELOG.md +++ b/plugins/notifications-backend-module-email/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-notifications-backend-module-email +## 0.3.16 + +### Patch Changes + +- 22a5362: Updated `AWS SES` client to version 2 to support `nodemailer` version 7. +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/plugin-catalog-node@1.20.0 + - @backstage/plugin-notifications-common@0.2.0 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-notifications-node@0.2.21 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + - @backstage/integration-aws-node@0.1.19 + - @backstage/catalog-client@1.12.1 + ## 0.3.16-next.2 ### Patch Changes diff --git a/plugins/notifications-backend-module-email/package.json b/plugins/notifications-backend-module-email/package.json index 2c112604a7..2907ffbb95 100644 --- a/plugins/notifications-backend-module-email/package.json +++ b/plugins/notifications-backend-module-email/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-notifications-backend-module-email", - "version": "0.3.16-next.2", + "version": "0.3.16", "description": "The email backend module for the notifications plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/notifications-backend-module-slack/CHANGELOG.md b/plugins/notifications-backend-module-slack/CHANGELOG.md index 49d99dbe2e..f00983f9e9 100644 --- a/plugins/notifications-backend-module-slack/CHANGELOG.md +++ b/plugins/notifications-backend-module-slack/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-notifications-backend-module-slack +## 0.2.1 + +### Patch Changes + +- d959bec: When an error message is logged due to inability to send a message with the Slack SDK, include the Slack Channel ID in the message to aid debugging. +- Updated dependencies + - @backstage/plugin-catalog-node@1.20.0 + - @backstage/plugin-notifications-common@0.2.0 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-notifications-node@0.2.21 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + ## 0.2.1-next.2 ### Patch Changes diff --git a/plugins/notifications-backend-module-slack/package.json b/plugins/notifications-backend-module-slack/package.json index eb5634b607..14ac470e37 100644 --- a/plugins/notifications-backend-module-slack/package.json +++ b/plugins/notifications-backend-module-slack/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-notifications-backend-module-slack", - "version": "0.2.1-next.2", + "version": "0.2.1", "description": "The slack backend module for the notifications plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/notifications-backend/CHANGELOG.md b/plugins/notifications-backend/CHANGELOG.md index 521aaac7bf..75e9464dac 100644 --- a/plugins/notifications-backend/CHANGELOG.md +++ b/plugins/notifications-backend/CHANGELOG.md @@ -1,5 +1,33 @@ # @backstage/plugin-notifications-backend +## 0.6.0 + +### Minor Changes + +- 87e597c: Adds support for default configuration for an entire notification channel. + This setting will also be inherited down to origins and topics while still respecting the users individual choices. + + This will be handy if you want to use a "opt-in" strategy. + +### Patch Changes + +- 15fb764: Show default settings for notifications even before receiving first notification. + + Previously, it was not possible for the users to see or modify their notification settings until they had received at + least one notification from specific origin or topic. + This update ensures that default settings are displayed from the outset, + allowing users to customize their preferences immediately. + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/plugin-catalog-node@1.20.0 + - @backstage/plugin-notifications-common@0.2.0 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-notifications-node@0.2.21 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + - @backstage/plugin-signals-node@0.1.26 + ## 0.6.0-next.2 ### Minor Changes diff --git a/plugins/notifications-backend/package.json b/plugins/notifications-backend/package.json index 6c4a73afba..2d8b3e7aed 100644 --- a/plugins/notifications-backend/package.json +++ b/plugins/notifications-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-notifications-backend", - "version": "0.6.0-next.2", + "version": "0.6.0", "backstage": { "role": "backend-plugin", "pluginId": "notifications", diff --git a/plugins/notifications-common/CHANGELOG.md b/plugins/notifications-common/CHANGELOG.md index d604d1de47..623ced5b1d 100644 --- a/plugins/notifications-common/CHANGELOG.md +++ b/plugins/notifications-common/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-notifications-common +## 0.2.0 + +### Minor Changes + +- 87e597c: Adds support for default configuration for an entire notification channel. + This setting will also be inherited down to origins and topics while still respecting the users individual choices. + + This will be handy if you want to use a "opt-in" strategy. + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.3.6 + ## 0.2.0-next.1 ### Minor Changes diff --git a/plugins/notifications-common/package.json b/plugins/notifications-common/package.json index fa7ce981ea..1fad4544c7 100644 --- a/plugins/notifications-common/package.json +++ b/plugins/notifications-common/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-notifications-common", - "version": "0.2.0-next.1", + "version": "0.2.0", "description": "Common functionalities for the notifications plugin", "backstage": { "role": "common-library", diff --git a/plugins/notifications-node/CHANGELOG.md b/plugins/notifications-node/CHANGELOG.md index 2afdd1647b..aa32fe4c10 100644 --- a/plugins/notifications-node/CHANGELOG.md +++ b/plugins/notifications-node/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-notifications-node +## 0.2.21 + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/plugin-notifications-common@0.2.0 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/catalog-model@1.7.6 + - @backstage/catalog-client@1.12.1 + - @backstage/plugin-signals-node@0.1.26 + ## 0.2.21-next.2 ### Patch Changes diff --git a/plugins/notifications-node/package.json b/plugins/notifications-node/package.json index ca746418db..7d9381e20f 100644 --- a/plugins/notifications-node/package.json +++ b/plugins/notifications-node/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-notifications-node", - "version": "0.2.21-next.2", + "version": "0.2.21", "description": "Node.js library for the notifications plugin", "backstage": { "role": "node-library", diff --git a/plugins/notifications/CHANGELOG.md b/plugins/notifications/CHANGELOG.md index 581cbd110a..2b090361f9 100644 --- a/plugins/notifications/CHANGELOG.md +++ b/plugins/notifications/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-notifications +## 0.5.11 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/core-compat-api@0.5.4 + - @backstage/plugin-notifications-common@0.2.0 + - @backstage/core-components@0.18.3 + - @backstage/core-plugin-api@1.12.0 + - @backstage/plugin-signals-react@0.0.17 + ## 0.5.11-next.1 ### Patch Changes diff --git a/plugins/notifications/package.json b/plugins/notifications/package.json index d1df83e79f..dbafa426f6 100644 --- a/plugins/notifications/package.json +++ b/plugins/notifications/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-notifications", - "version": "0.5.11-next.1", + "version": "0.5.11", "backstage": { "role": "frontend-plugin", "pluginId": "notifications", diff --git a/plugins/org-react/CHANGELOG.md b/plugins/org-react/CHANGELOG.md index 24f9d46559..276defee37 100644 --- a/plugins/org-react/CHANGELOG.md +++ b/plugins/org-react/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-org-react +## 0.1.44 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.21.3 + - @backstage/core-components@0.18.3 + - @backstage/core-plugin-api@1.12.0 + - @backstage/catalog-model@1.7.6 + - @backstage/catalog-client@1.12.1 + ## 0.1.44-next.0 ### Patch Changes diff --git a/plugins/org-react/package.json b/plugins/org-react/package.json index aae4e281ac..7ee1e57b20 100644 --- a/plugins/org-react/package.json +++ b/plugins/org-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-org-react", - "version": "0.1.44-next.0", + "version": "0.1.44", "backstage": { "role": "web-library", "pluginId": "org", diff --git a/plugins/org/CHANGELOG.md b/plugins/org/CHANGELOG.md index 5455ba07bc..df05c5e60f 100644 --- a/plugins/org/CHANGELOG.md +++ b/plugins/org/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-org +## 0.6.46 + +### Patch Changes + +- 6db9e7e: Improved responsiveness of GroupProfileCard component +- Updated dependencies + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/core-compat-api@0.5.4 + - @backstage/plugin-catalog-react@1.21.3 + - @backstage/core-components@0.18.3 + - @backstage/core-plugin-api@1.12.0 + - @backstage/catalog-model@1.7.6 + - @backstage/plugin-catalog-common@1.1.7 + ## 0.6.46-next.1 ### Patch Changes diff --git a/plugins/org/package.json b/plugins/org/package.json index 275dd8538b..d2f44a3c5c 100644 --- a/plugins/org/package.json +++ b/plugins/org/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-org", - "version": "0.6.46-next.1", + "version": "0.6.46", "description": "A Backstage plugin that helps you create entity pages for your organization", "backstage": { "role": "frontend-plugin", diff --git a/plugins/permission-backend-module-policy-allow-all/CHANGELOG.md b/plugins/permission-backend-module-policy-allow-all/CHANGELOG.md index 882f6fdb23..58e281caf0 100644 --- a/plugins/permission-backend-module-policy-allow-all/CHANGELOG.md +++ b/plugins/permission-backend-module-policy-allow-all/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-permission-backend-module-allow-all-policy +## 0.2.14 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-permission-common@0.9.3 + - @backstage/plugin-auth-node@0.6.9 + - @backstage/plugin-permission-node@0.10.6 + ## 0.2.14-next.1 ### Patch Changes diff --git a/plugins/permission-backend-module-policy-allow-all/package.json b/plugins/permission-backend-module-policy-allow-all/package.json index c270cf5ceb..bf988ded4e 100644 --- a/plugins/permission-backend-module-policy-allow-all/package.json +++ b/plugins/permission-backend-module-policy-allow-all/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-permission-backend-module-allow-all-policy", - "version": "0.2.14-next.1", + "version": "0.2.14", "description": "Allow all policy backend module for the permission plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/permission-backend/CHANGELOG.md b/plugins/permission-backend/CHANGELOG.md index a7e6bceedd..12d63d5c4b 100644 --- a/plugins/permission-backend/CHANGELOG.md +++ b/plugins/permission-backend/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-permission-backend +## 0.7.6 + +### Patch Changes + +- b2bef92: Convert all enums to erasable-syntax compliant patterns +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-permission-common@0.9.3 + - @backstage/plugin-auth-node@0.6.9 + - @backstage/config@1.3.6 + - @backstage/plugin-permission-node@0.10.6 + ## 0.7.6-next.1 ### Patch Changes diff --git a/plugins/permission-backend/package.json b/plugins/permission-backend/package.json index fe68fbdc2b..c3eb4a1146 100644 --- a/plugins/permission-backend/package.json +++ b/plugins/permission-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-permission-backend", - "version": "0.7.6-next.1", + "version": "0.7.6", "backstage": { "role": "backend-plugin", "pluginId": "permission", diff --git a/plugins/permission-common/CHANGELOG.md b/plugins/permission-common/CHANGELOG.md index 2c85c4a50f..b41298b3e4 100644 --- a/plugins/permission-common/CHANGELOG.md +++ b/plugins/permission-common/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-permission-common +## 0.9.3 + +### Patch Changes + +- b2bef92: Convert all enums to erasable-syntax compliant patterns +- Updated dependencies + - @backstage/config@1.3.6 + ## 0.9.3-next.1 ### Patch Changes diff --git a/plugins/permission-common/package.json b/plugins/permission-common/package.json index 2aca379d34..9464d3c8f3 100644 --- a/plugins/permission-common/package.json +++ b/plugins/permission-common/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-permission-common", - "version": "0.9.3-next.1", + "version": "0.9.3", "description": "Isomorphic types and client for Backstage permissions and authorization", "backstage": { "role": "common-library", diff --git a/plugins/permission-node/CHANGELOG.md b/plugins/permission-node/CHANGELOG.md index ad134fa3eb..6ac95b97ba 100644 --- a/plugins/permission-node/CHANGELOG.md +++ b/plugins/permission-node/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-permission-node +## 0.10.6 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-permission-common@0.9.3 + - @backstage/plugin-auth-node@0.6.9 + - @backstage/config@1.3.6 + ## 0.10.6-next.1 ### Patch Changes diff --git a/plugins/permission-node/package.json b/plugins/permission-node/package.json index 5957c18bae..e4c307f0ca 100644 --- a/plugins/permission-node/package.json +++ b/plugins/permission-node/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-permission-node", - "version": "0.10.6-next.1", + "version": "0.10.6", "description": "Common permission and authorization utilities for backend plugins", "backstage": { "role": "node-library", diff --git a/plugins/permission-react/CHANGELOG.md b/plugins/permission-react/CHANGELOG.md index af53c0adc2..8cdd944d36 100644 --- a/plugins/permission-react/CHANGELOG.md +++ b/plugins/permission-react/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-permission-react +## 0.4.38 + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/core-plugin-api@1.12.0 + - @backstage/plugin-permission-common@0.9.3 + - @backstage/config@1.3.6 + ## 0.4.38-next.0 ### Patch Changes diff --git a/plugins/permission-react/package.json b/plugins/permission-react/package.json index f5c473cd6b..521347e4ab 100644 --- a/plugins/permission-react/package.json +++ b/plugins/permission-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-permission-react", - "version": "0.4.38-next.0", + "version": "0.4.38", "backstage": { "role": "web-library", "pluginId": "permission", diff --git a/plugins/proxy-backend/CHANGELOG.md b/plugins/proxy-backend/CHANGELOG.md index 36fb824a9d..0830b908c4 100644 --- a/plugins/proxy-backend/CHANGELOG.md +++ b/plugins/proxy-backend/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-proxy-backend +## 0.6.8 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-proxy-node@0.1.10 + ## 0.6.8-next.1 ### Patch Changes diff --git a/plugins/proxy-backend/package.json b/plugins/proxy-backend/package.json index b125dae54d..e011804893 100644 --- a/plugins/proxy-backend/package.json +++ b/plugins/proxy-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-proxy-backend", - "version": "0.6.8-next.1", + "version": "0.6.8", "description": "A Backstage backend plugin that helps you set up proxy endpoints in the backend", "backstage": { "role": "backend-plugin", diff --git a/plugins/proxy-node/CHANGELOG.md b/plugins/proxy-node/CHANGELOG.md index 9b79a20cae..2622a272f3 100644 --- a/plugins/proxy-node/CHANGELOG.md +++ b/plugins/proxy-node/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-proxy-node +## 0.1.10 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + ## 0.1.10-next.1 ### Patch Changes diff --git a/plugins/proxy-node/package.json b/plugins/proxy-node/package.json index 8510c559c2..eb0561173a 100644 --- a/plugins/proxy-node/package.json +++ b/plugins/proxy-node/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-proxy-node", - "version": "0.1.10-next.1", + "version": "0.1.10", "description": "The plugin-proxy-node module for @backstage/plugin-proxy-backend", "backstage": { "role": "node-library", diff --git a/plugins/scaffolder-backend-module-azure/CHANGELOG.md b/plugins/scaffolder-backend-module-azure/CHANGELOG.md index a6ef29c587..f34ce2508e 100644 --- a/plugins/scaffolder-backend-module-azure/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-azure/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-scaffolder-backend-module-azure +## 0.2.15 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.18.2 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/config@1.3.6 + - @backstage/plugin-scaffolder-node@0.12.1 + ## 0.2.15-next.1 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-azure/package.json b/plugins/scaffolder-backend-module-azure/package.json index 91ef328b80..8cf97f115c 100644 --- a/plugins/scaffolder-backend-module-azure/package.json +++ b/plugins/scaffolder-backend-module-azure/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-azure", - "version": "0.2.15-next.1", + "version": "0.2.15", "description": "The azure module for @backstage/plugin-scaffolder-backend", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/scaffolder-backend-module-bitbucket-cloud/CHANGELOG.md b/plugins/scaffolder-backend-module-bitbucket-cloud/CHANGELOG.md index 310c87b32a..e1544349dd 100644 --- a/plugins/scaffolder-backend-module-bitbucket-cloud/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-bitbucket-cloud/CHANGELOG.md @@ -1,5 +1,27 @@ # @backstage/plugin-scaffolder-backend-module-bitbucket-cloud +## 0.2.15 + +### Patch Changes + +- fa255f5: Support for Bitbucket Cloud's API token was added as `appPassword` is deprecated (no new creation from September 9, 2025) and will be removed on June 9, 2026. + + API token usage example: + + ```yaml + integrations: + bitbucketCloud: + - username: user@domain.com + token: my-token + ``` + +- Updated dependencies + - @backstage/plugin-bitbucket-cloud-common@0.3.4 + - @backstage/integration@1.18.2 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/config@1.3.6 + - @backstage/plugin-scaffolder-node@0.12.1 + ## 0.2.15-next.1 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-bitbucket-cloud/package.json b/plugins/scaffolder-backend-module-bitbucket-cloud/package.json index db3c65f54c..98ab7b989d 100644 --- a/plugins/scaffolder-backend-module-bitbucket-cloud/package.json +++ b/plugins/scaffolder-backend-module-bitbucket-cloud/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-bitbucket-cloud", - "version": "0.2.15-next.1", + "version": "0.2.15", "description": "The Bitbucket Cloud module for @backstage/plugin-scaffolder-backend", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/scaffolder-backend-module-bitbucket-server/CHANGELOG.md b/plugins/scaffolder-backend-module-bitbucket-server/CHANGELOG.md index 1830fe34b9..718306802a 100644 --- a/plugins/scaffolder-backend-module-bitbucket-server/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-bitbucket-server/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-scaffolder-backend-module-bitbucket-server +## 0.2.15 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.18.2 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/config@1.3.6 + - @backstage/plugin-scaffolder-node@0.12.1 + ## 0.2.15-next.1 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-bitbucket-server/package.json b/plugins/scaffolder-backend-module-bitbucket-server/package.json index c580b8b568..96c20d1330 100644 --- a/plugins/scaffolder-backend-module-bitbucket-server/package.json +++ b/plugins/scaffolder-backend-module-bitbucket-server/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-bitbucket-server", - "version": "0.2.15-next.1", + "version": "0.2.15", "description": "The Bitbucket Server module for @backstage/plugin-scaffolder-backend", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/scaffolder-backend-module-bitbucket/CHANGELOG.md b/plugins/scaffolder-backend-module-bitbucket/CHANGELOG.md index 8b3a918a10..928d9890d3 100644 --- a/plugins/scaffolder-backend-module-bitbucket/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-bitbucket/CHANGELOG.md @@ -1,5 +1,28 @@ # @backstage/plugin-scaffolder-backend-module-bitbucket +## 0.3.16 + +### Patch Changes + +- fa255f5: Support for Bitbucket Cloud's API token was added as `appPassword` is deprecated (no new creation from September 9, 2025) and will be removed on June 9, 2026. + + API token usage example: + + ```yaml + integrations: + bitbucketCloud: + - username: user@domain.com + token: my-token + ``` + +- Updated dependencies + - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.15 + - @backstage/integration@1.18.2 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/config@1.3.6 + - @backstage/plugin-scaffolder-node@0.12.1 + - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.15 + ## 0.3.16-next.1 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-bitbucket/package.json b/plugins/scaffolder-backend-module-bitbucket/package.json index eb4004acba..56cc07e9ca 100644 --- a/plugins/scaffolder-backend-module-bitbucket/package.json +++ b/plugins/scaffolder-backend-module-bitbucket/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-bitbucket", - "version": "0.3.16-next.1", + "version": "0.3.16", "description": "The bitbucket module for @backstage/plugin-scaffolder-backend", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/scaffolder-backend-module-confluence-to-markdown/CHANGELOG.md b/plugins/scaffolder-backend-module-confluence-to-markdown/CHANGELOG.md index 7af1650858..83af0015ae 100644 --- a/plugins/scaffolder-backend-module-confluence-to-markdown/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-confluence-to-markdown/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-scaffolder-backend-module-confluence-to-markdown +## 0.3.15 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.18.2 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/config@1.3.6 + - @backstage/plugin-scaffolder-node@0.12.1 + ## 0.3.15-next.1 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-confluence-to-markdown/package.json b/plugins/scaffolder-backend-module-confluence-to-markdown/package.json index b47d147b67..539ebbd730 100644 --- a/plugins/scaffolder-backend-module-confluence-to-markdown/package.json +++ b/plugins/scaffolder-backend-module-confluence-to-markdown/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-confluence-to-markdown", - "version": "0.3.15-next.1", + "version": "0.3.15", "description": "The confluence-to-markdown module for @backstage/plugin-scaffolder-backend", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md b/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md index 168369373a..47b36aaaac 100644 --- a/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-scaffolder-backend-module-cookiecutter +## 0.3.17 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.13.1 + - @backstage/integration@1.18.2 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/config@1.3.6 + - @backstage/plugin-scaffolder-node@0.12.1 + ## 0.3.17-next.1 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-cookiecutter/package.json b/plugins/scaffolder-backend-module-cookiecutter/package.json index 9a6bc9265e..3fa1dbb4c0 100644 --- a/plugins/scaffolder-backend-module-cookiecutter/package.json +++ b/plugins/scaffolder-backend-module-cookiecutter/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-cookiecutter", - "version": "0.3.17-next.1", + "version": "0.3.17", "description": "A module for the scaffolder backend that lets you template projects using cookiecutter", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/scaffolder-backend-module-gcp/CHANGELOG.md b/plugins/scaffolder-backend-module-gcp/CHANGELOG.md index b15077959e..7fb293a3c7 100644 --- a/plugins/scaffolder-backend-module-gcp/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-gcp/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-scaffolder-backend-module-gcp +## 0.2.15 + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/integration@1.18.2 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/config@1.3.6 + - @backstage/plugin-scaffolder-node@0.12.1 + ## 0.2.15-next.1 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-gcp/package.json b/plugins/scaffolder-backend-module-gcp/package.json index 664f28f024..abc6f428ed 100644 --- a/plugins/scaffolder-backend-module-gcp/package.json +++ b/plugins/scaffolder-backend-module-gcp/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-gcp", - "version": "0.2.15-next.1", + "version": "0.2.15", "description": "The GCP Bucket module for @backstage/plugin-scaffolder-backend", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/scaffolder-backend-module-gerrit/CHANGELOG.md b/plugins/scaffolder-backend-module-gerrit/CHANGELOG.md index 5ecc69931c..b1210fb42a 100644 --- a/plugins/scaffolder-backend-module-gerrit/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-gerrit/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-scaffolder-backend-module-gerrit +## 0.2.15 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.18.2 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/config@1.3.6 + - @backstage/plugin-scaffolder-node@0.12.1 + ## 0.2.15-next.1 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-gerrit/package.json b/plugins/scaffolder-backend-module-gerrit/package.json index 114ef18cc8..89b9f3fab6 100644 --- a/plugins/scaffolder-backend-module-gerrit/package.json +++ b/plugins/scaffolder-backend-module-gerrit/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-gerrit", - "version": "0.2.15-next.1", + "version": "0.2.15", "description": "The gerrit module for @backstage/plugin-scaffolder-backend", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/scaffolder-backend-module-gitea/CHANGELOG.md b/plugins/scaffolder-backend-module-gitea/CHANGELOG.md index e9c58bd507..8fc650031e 100644 --- a/plugins/scaffolder-backend-module-gitea/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-gitea/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-scaffolder-backend-module-gitea +## 0.2.15 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.18.2 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/config@1.3.6 + - @backstage/plugin-scaffolder-node@0.12.1 + ## 0.2.15-next.1 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-gitea/package.json b/plugins/scaffolder-backend-module-gitea/package.json index b5e11fae26..54626ff625 100644 --- a/plugins/scaffolder-backend-module-gitea/package.json +++ b/plugins/scaffolder-backend-module-gitea/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-gitea", - "version": "0.2.15-next.1", + "version": "0.2.15", "description": "The gitea module for @backstage/plugin-scaffolder-backend", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/scaffolder-backend-module-github/CHANGELOG.md b/plugins/scaffolder-backend-module-github/CHANGELOG.md index 8f5405ec63..ee6d97310c 100644 --- a/plugins/scaffolder-backend-module-github/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-github/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-scaffolder-backend-module-github +## 0.9.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.20.0 + - @backstage/integration@1.18.2 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + - @backstage/plugin-scaffolder-node@0.12.1 + ## 0.9.2-next.1 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-github/package.json b/plugins/scaffolder-backend-module-github/package.json index 7941c59e0e..f9aff4631d 100644 --- a/plugins/scaffolder-backend-module-github/package.json +++ b/plugins/scaffolder-backend-module-github/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-github", - "version": "0.9.2-next.1", + "version": "0.9.2", "description": "The github module for @backstage/plugin-scaffolder-backend", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/scaffolder-backend-module-gitlab/CHANGELOG.md b/plugins/scaffolder-backend-module-gitlab/CHANGELOG.md index 703220bd48..e9b39fc8bd 100644 --- a/plugins/scaffolder-backend-module-gitlab/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-gitlab/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-scaffolder-backend-module-gitlab +## 0.10.0 + +### Minor Changes + +- ff96d7e: fix scaffolder action createDeployToken to allow usage of oauth tokens + +### Patch Changes + +- b2bef92: Convert all enums to erasable-syntax compliant patterns +- Updated dependencies + - @backstage/integration@1.18.2 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/config@1.3.6 + - @backstage/plugin-scaffolder-node@0.12.1 + ## 0.10.0-next.1 ### Minor Changes diff --git a/plugins/scaffolder-backend-module-gitlab/package.json b/plugins/scaffolder-backend-module-gitlab/package.json index fb04268858..38389e3a16 100644 --- a/plugins/scaffolder-backend-module-gitlab/package.json +++ b/plugins/scaffolder-backend-module-gitlab/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-gitlab", - "version": "0.10.0-next.1", + "version": "0.10.0", "backstage": { "role": "backend-plugin-module", "pluginId": "scaffolder", diff --git a/plugins/scaffolder-backend-module-notifications/CHANGELOG.md b/plugins/scaffolder-backend-module-notifications/CHANGELOG.md index de28e741e9..e2702f9e4f 100644 --- a/plugins/scaffolder-backend-module-notifications/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-notifications/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-scaffolder-backend-module-notifications +## 0.1.16 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-notifications-common@0.2.0 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-notifications-node@0.2.21 + - @backstage/plugin-scaffolder-node@0.12.1 + ## 0.1.16-next.2 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-notifications/package.json b/plugins/scaffolder-backend-module-notifications/package.json index 5d1d5e49ae..98c8982977 100644 --- a/plugins/scaffolder-backend-module-notifications/package.json +++ b/plugins/scaffolder-backend-module-notifications/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-notifications", - "version": "0.1.16-next.2", + "version": "0.1.16", "description": "The notifications backend module for the scaffolder plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/scaffolder-backend-module-rails/CHANGELOG.md b/plugins/scaffolder-backend-module-rails/CHANGELOG.md index a0f211073e..338d846bb0 100644 --- a/plugins/scaffolder-backend-module-rails/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-rails/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-scaffolder-backend-module-rails +## 0.5.15 + +### Patch Changes + +- b2bef92: Convert all enums to erasable-syntax compliant patterns +- Updated dependencies + - @backstage/integration@1.18.2 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/config@1.3.6 + - @backstage/plugin-scaffolder-node@0.12.1 + ## 0.5.15-next.1 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-rails/package.json b/plugins/scaffolder-backend-module-rails/package.json index 0e625263f7..ff9ba1de9c 100644 --- a/plugins/scaffolder-backend-module-rails/package.json +++ b/plugins/scaffolder-backend-module-rails/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-rails", - "version": "0.5.15-next.1", + "version": "0.5.15", "description": "A module for the scaffolder backend that lets you template projects using Rails", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/scaffolder-backend-module-sentry/CHANGELOG.md b/plugins/scaffolder-backend-module-sentry/CHANGELOG.md index f6122253a0..d26bb3c6e0 100644 --- a/plugins/scaffolder-backend-module-sentry/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-sentry/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-scaffolder-backend-module-sentry +## 0.2.15 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/config@1.3.6 + - @backstage/plugin-scaffolder-node@0.12.1 + ## 0.2.15-next.1 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-sentry/package.json b/plugins/scaffolder-backend-module-sentry/package.json index bc7b5173e7..b3b3ec5572 100644 --- a/plugins/scaffolder-backend-module-sentry/package.json +++ b/plugins/scaffolder-backend-module-sentry/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-sentry", - "version": "0.2.15-next.1", + "version": "0.2.15", "backstage": { "role": "backend-plugin-module", "pluginId": "scaffolder", diff --git a/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md b/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md index d28d3230b7..ccca3a8b3b 100644 --- a/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-scaffolder-backend-module-yeoman +## 0.4.16 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-scaffolder-node-test-utils@0.3.5 + - @backstage/plugin-scaffolder-node@0.12.1 + ## 0.4.16-next.1 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-yeoman/package.json b/plugins/scaffolder-backend-module-yeoman/package.json index ad0569e820..ef7b748fe5 100644 --- a/plugins/scaffolder-backend-module-yeoman/package.json +++ b/plugins/scaffolder-backend-module-yeoman/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-yeoman", - "version": "0.4.16-next.1", + "version": "0.4.16", "backstage": { "role": "backend-plugin-module", "pluginId": "scaffolder", diff --git a/plugins/scaffolder-backend/CHANGELOG.md b/plugins/scaffolder-backend/CHANGELOG.md index b110b8b0cf..9c2bd67c10 100644 --- a/plugins/scaffolder-backend/CHANGELOG.md +++ b/plugins/scaffolder-backend/CHANGELOG.md @@ -1,5 +1,35 @@ # @backstage/plugin-scaffolder-backend +## 3.0.1 + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/backend-defaults@0.13.1 + - @backstage/plugin-catalog-node@1.20.0 + - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.15 + - @backstage/plugin-scaffolder-backend-module-bitbucket@0.3.16 + - @backstage/plugin-bitbucket-cloud-common@0.3.4 + - @backstage/integration@1.18.2 + - @backstage/plugin-scaffolder-backend-module-gitlab@0.10.0 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-permission-common@0.9.3 + - @backstage/plugin-events-node@0.4.17 + - @backstage/plugin-auth-node@0.6.9 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + - @backstage/plugin-scaffolder-node@0.12.1 + - @backstage/backend-openapi-utils@0.6.3 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.14 + - @backstage/plugin-permission-node@0.10.6 + - @backstage/plugin-scaffolder-backend-module-azure@0.2.15 + - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.15 + - @backstage/plugin-scaffolder-backend-module-gerrit@0.2.15 + - @backstage/plugin-scaffolder-backend-module-gitea@0.2.15 + - @backstage/plugin-scaffolder-backend-module-github@0.9.2 + - @backstage/plugin-scaffolder-common@1.7.3 + ## 3.0.1-next.1 ### Patch Changes diff --git a/plugins/scaffolder-backend/package.json b/plugins/scaffolder-backend/package.json index ca17de1459..e149badea2 100644 --- a/plugins/scaffolder-backend/package.json +++ b/plugins/scaffolder-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend", - "version": "3.0.1-next.1", + "version": "3.0.1", "description": "The Backstage backend plugin that helps you create new things", "backstage": { "role": "backend-plugin", diff --git a/plugins/scaffolder-common/CHANGELOG.md b/plugins/scaffolder-common/CHANGELOG.md index 628085e4e1..ef0287c68d 100644 --- a/plugins/scaffolder-common/CHANGELOG.md +++ b/plugins/scaffolder-common/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-scaffolder-common +## 1.7.3 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.18.2 + - @backstage/plugin-permission-common@0.9.3 + - @backstage/catalog-model@1.7.6 + ## 1.7.3-next.0 ### Patch Changes diff --git a/plugins/scaffolder-common/package.json b/plugins/scaffolder-common/package.json index 142603d7c5..225a57e965 100644 --- a/plugins/scaffolder-common/package.json +++ b/plugins/scaffolder-common/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-common", - "version": "1.7.3-next.0", + "version": "1.7.3", "description": "Common functionalities for the scaffolder, to be shared between scaffolder and scaffolder-backend plugin", "backstage": { "role": "common-library", diff --git a/plugins/scaffolder-node-test-utils/CHANGELOG.md b/plugins/scaffolder-node-test-utils/CHANGELOG.md index b51b201727..ab563445b0 100644 --- a/plugins/scaffolder-node-test-utils/CHANGELOG.md +++ b/plugins/scaffolder-node-test-utils/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-scaffolder-node-test-utils +## 0.3.5 + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/backend-test-utils@1.10.0 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-scaffolder-node@0.12.1 + ## 0.3.5-next.1 ### Patch Changes diff --git a/plugins/scaffolder-node-test-utils/package.json b/plugins/scaffolder-node-test-utils/package.json index 374b19f914..65a87d6dc5 100644 --- a/plugins/scaffolder-node-test-utils/package.json +++ b/plugins/scaffolder-node-test-utils/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-node-test-utils", - "version": "0.3.5-next.1", + "version": "0.3.5", "backstage": { "role": "node-library", "pluginId": "scaffolder", diff --git a/plugins/scaffolder-node/CHANGELOG.md b/plugins/scaffolder-node/CHANGELOG.md index 144a7a6cfb..20b231397e 100644 --- a/plugins/scaffolder-node/CHANGELOG.md +++ b/plugins/scaffolder-node/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-scaffolder-node +## 0.12.1 + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/integration@1.18.2 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-permission-common@0.9.3 + - @backstage/catalog-model@1.7.6 + - @backstage/plugin-scaffolder-common@1.7.3 + ## 0.12.1-next.1 ### Patch Changes diff --git a/plugins/scaffolder-node/package.json b/plugins/scaffolder-node/package.json index 9eba07b978..7834b676c6 100644 --- a/plugins/scaffolder-node/package.json +++ b/plugins/scaffolder-node/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-node", - "version": "0.12.1-next.1", + "version": "0.12.1", "description": "The plugin-scaffolder-node module for @backstage/plugin-scaffolder-backend", "backstage": { "role": "node-library", diff --git a/plugins/scaffolder-react/CHANGELOG.md b/plugins/scaffolder-react/CHANGELOG.md index 530b2466cc..e0a8b16267 100644 --- a/plugins/scaffolder-react/CHANGELOG.md +++ b/plugins/scaffolder-react/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-scaffolder-react +## 1.19.3 + +### Patch Changes + +- 886a8a1: Fixed a bug in the Scaffolder's template parsing in the `useTemplateSchema` hook by removing the title instead of setting it to `undefined` +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/plugin-catalog-react@1.21.3 + - @backstage/core-components@0.18.3 + - @backstage/core-plugin-api@1.12.0 + - @backstage/plugin-permission-react@0.4.38 + - @backstage/catalog-model@1.7.6 + - @backstage/catalog-client@1.12.1 + - @backstage/plugin-scaffolder-common@1.7.3 + ## 1.19.3-next.0 ### Patch Changes diff --git a/plugins/scaffolder-react/package.json b/plugins/scaffolder-react/package.json index 5ae1e56ebb..087e6e2135 100644 --- a/plugins/scaffolder-react/package.json +++ b/plugins/scaffolder-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-react", - "version": "1.19.3-next.0", + "version": "1.19.3", "description": "A frontend library that helps other Backstage plugins interact with the Scaffolder", "backstage": { "role": "web-library", diff --git a/plugins/scaffolder/CHANGELOG.md b/plugins/scaffolder/CHANGELOG.md index 601064140f..391388c9b4 100644 --- a/plugins/scaffolder/CHANGELOG.md +++ b/plugins/scaffolder/CHANGELOG.md @@ -1,5 +1,26 @@ # @backstage/plugin-scaffolder +## 1.34.3 + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/core-compat-api@0.5.4 + - @backstage/plugin-catalog-react@1.21.3 + - @backstage/integration@1.18.2 + - @backstage/plugin-scaffolder-react@1.19.3 + - @backstage/core-components@0.18.3 + - @backstage/core-plugin-api@1.12.0 + - @backstage/plugin-permission-react@0.4.38 + - @backstage/catalog-model@1.7.6 + - @backstage/plugin-techdocs-react@1.3.5 + - @backstage/catalog-client@1.12.1 + - @backstage/integration-react@1.2.12 + - @backstage/plugin-catalog-common@1.1.7 + - @backstage/plugin-scaffolder-common@1.7.3 + ## 1.34.3-next.0 ### Patch Changes diff --git a/plugins/scaffolder/package.json b/plugins/scaffolder/package.json index a332ac1950..d85495c9e4 100644 --- a/plugins/scaffolder/package.json +++ b/plugins/scaffolder/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder", - "version": "1.34.3-next.0", + "version": "1.34.3", "description": "The Backstage plugin that helps you create new things", "backstage": { "role": "frontend-plugin", diff --git a/plugins/search-backend-module-catalog/CHANGELOG.md b/plugins/search-backend-module-catalog/CHANGELOG.md index 9fe8a8fa8e..ed3f474fcb 100644 --- a/plugins/search-backend-module-catalog/CHANGELOG.md +++ b/plugins/search-backend-module-catalog/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-search-backend-module-catalog +## 0.3.10 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.20.0 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-permission-common@0.9.3 + - @backstage/plugin-search-backend-node@1.3.17 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + - @backstage/catalog-client@1.12.1 + - @backstage/plugin-catalog-common@1.1.7 + - @backstage/plugin-search-common@1.2.21 + ## 0.3.10-next.1 ### Patch Changes diff --git a/plugins/search-backend-module-catalog/package.json b/plugins/search-backend-module-catalog/package.json index f688b4e1c5..a410eeefb0 100644 --- a/plugins/search-backend-module-catalog/package.json +++ b/plugins/search-backend-module-catalog/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-search-backend-module-catalog", - "version": "0.3.10-next.1", + "version": "0.3.10", "description": "A module for the search backend that exports catalog modules", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/search-backend-module-elasticsearch/CHANGELOG.md b/plugins/search-backend-module-elasticsearch/CHANGELOG.md index 9b76d49de2..35658ebda6 100644 --- a/plugins/search-backend-module-elasticsearch/CHANGELOG.md +++ b/plugins/search-backend-module-elasticsearch/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-search-backend-module-elasticsearch +## 1.7.8 + +### Patch Changes + +- 71c22f3: Removed/moved unused dependencies +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-search-backend-node@1.3.17 + - @backstage/config@1.3.6 + - @backstage/integration-aws-node@0.1.19 + - @backstage/plugin-search-common@1.2.21 + ## 1.7.8-next.1 ### Patch Changes diff --git a/plugins/search-backend-module-elasticsearch/package.json b/plugins/search-backend-module-elasticsearch/package.json index 6118231889..28587d8879 100644 --- a/plugins/search-backend-module-elasticsearch/package.json +++ b/plugins/search-backend-module-elasticsearch/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-search-backend-module-elasticsearch", - "version": "1.7.8-next.1", + "version": "1.7.8", "description": "A module for the search backend that implements search using ElasticSearch", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/search-backend-module-explore/CHANGELOG.md b/plugins/search-backend-module-explore/CHANGELOG.md index 8e9b6cfc73..e5c6236521 100644 --- a/plugins/search-backend-module-explore/CHANGELOG.md +++ b/plugins/search-backend-module-explore/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-search-backend-module-explore +## 0.3.9 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-search-backend-node@1.3.17 + - @backstage/config@1.3.6 + - @backstage/plugin-search-common@1.2.21 + ## 0.3.9-next.1 ### Patch Changes diff --git a/plugins/search-backend-module-explore/package.json b/plugins/search-backend-module-explore/package.json index e728a0418d..854c7ffd0d 100644 --- a/plugins/search-backend-module-explore/package.json +++ b/plugins/search-backend-module-explore/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-search-backend-module-explore", - "version": "0.3.9-next.1", + "version": "0.3.9", "description": "A module for the search backend that exports explore modules", "backstage": { "moved": "@backstage-community/plugin-search-backend-module-explore", diff --git a/plugins/search-backend-module-pg/CHANGELOG.md b/plugins/search-backend-module-pg/CHANGELOG.md index a8dd1af566..6754814710 100644 --- a/plugins/search-backend-module-pg/CHANGELOG.md +++ b/plugins/search-backend-module-pg/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-search-backend-module-pg +## 0.5.50 + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-search-backend-node@1.3.17 + - @backstage/config@1.3.6 + - @backstage/plugin-search-common@1.2.21 + ## 0.5.50-next.1 ### Patch Changes diff --git a/plugins/search-backend-module-pg/package.json b/plugins/search-backend-module-pg/package.json index f61111adee..33e6e32f2c 100644 --- a/plugins/search-backend-module-pg/package.json +++ b/plugins/search-backend-module-pg/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-search-backend-module-pg", - "version": "0.5.50-next.1", + "version": "0.5.50", "description": "A module for the search backend that implements search using PostgreSQL", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/search-backend-module-stack-overflow-collator/CHANGELOG.md b/plugins/search-backend-module-stack-overflow-collator/CHANGELOG.md index b0e4f709f0..02c742ecde 100644 --- a/plugins/search-backend-module-stack-overflow-collator/CHANGELOG.md +++ b/plugins/search-backend-module-stack-overflow-collator/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-search-backend-module-stack-overflow-collator +## 0.3.15 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-search-backend-node@1.3.17 + - @backstage/config@1.3.6 + - @backstage/plugin-search-common@1.2.21 + ## 0.3.15-next.1 ### Patch Changes diff --git a/plugins/search-backend-module-stack-overflow-collator/package.json b/plugins/search-backend-module-stack-overflow-collator/package.json index 7246c6f50c..e808c54277 100644 --- a/plugins/search-backend-module-stack-overflow-collator/package.json +++ b/plugins/search-backend-module-stack-overflow-collator/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-search-backend-module-stack-overflow-collator", - "version": "0.3.15-next.1", + "version": "0.3.15", "description": "A module for the search backend that exports stack overflow modules", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/search-backend-module-techdocs/CHANGELOG.md b/plugins/search-backend-module-techdocs/CHANGELOG.md index 004dcdeaac..6a294e9e33 100644 --- a/plugins/search-backend-module-techdocs/CHANGELOG.md +++ b/plugins/search-backend-module-techdocs/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-search-backend-module-techdocs +## 0.4.8 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.20.0 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-permission-common@0.9.3 + - @backstage/plugin-search-backend-node@1.3.17 + - @backstage/plugin-techdocs-node@1.13.9 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + - @backstage/catalog-client@1.12.1 + - @backstage/plugin-catalog-common@1.1.7 + - @backstage/plugin-search-common@1.2.21 + ## 0.4.8-next.1 ### Patch Changes diff --git a/plugins/search-backend-module-techdocs/package.json b/plugins/search-backend-module-techdocs/package.json index 7a03085c5c..33f111f279 100644 --- a/plugins/search-backend-module-techdocs/package.json +++ b/plugins/search-backend-module-techdocs/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-search-backend-module-techdocs", - "version": "0.4.8-next.1", + "version": "0.4.8", "description": "A module for the search backend that exports techdocs modules", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/search-backend-node/CHANGELOG.md b/plugins/search-backend-node/CHANGELOG.md index 9878e07a14..dcd3b29f4f 100644 --- a/plugins/search-backend-node/CHANGELOG.md +++ b/plugins/search-backend-node/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-search-backend-node +## 1.3.17 + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-permission-common@0.9.3 + - @backstage/config@1.3.6 + - @backstage/plugin-search-common@1.2.21 + ## 1.3.17-next.1 ### Patch Changes diff --git a/plugins/search-backend-node/package.json b/plugins/search-backend-node/package.json index d7477bef7d..7b8e706b83 100644 --- a/plugins/search-backend-node/package.json +++ b/plugins/search-backend-node/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-search-backend-node", - "version": "1.3.17-next.1", + "version": "1.3.17", "description": "A library for Backstage backend plugins that want to interact with the search backend plugin", "backstage": { "role": "node-library", diff --git a/plugins/search-backend/CHANGELOG.md b/plugins/search-backend/CHANGELOG.md index 151a611a2c..69a0aaa167 100644 --- a/plugins/search-backend/CHANGELOG.md +++ b/plugins/search-backend/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-search-backend +## 2.0.8 + +### Patch Changes + +- b2bef92: Convert all enums to erasable-syntax compliant patterns +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/backend-defaults@0.13.1 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-permission-common@0.9.3 + - @backstage/plugin-search-backend-node@1.3.17 + - @backstage/config@1.3.6 + - @backstage/backend-openapi-utils@0.6.3 + - @backstage/plugin-permission-node@0.10.6 + - @backstage/plugin-search-common@1.2.21 + ## 2.0.8-next.1 ### Patch Changes diff --git a/plugins/search-backend/package.json b/plugins/search-backend/package.json index 1ce5fe271a..ed9bff7c83 100644 --- a/plugins/search-backend/package.json +++ b/plugins/search-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-search-backend", - "version": "2.0.8-next.1", + "version": "2.0.8", "description": "The Backstage backend plugin that provides your backstage app with search", "backstage": { "role": "backend-plugin", diff --git a/plugins/search-common/CHANGELOG.md b/plugins/search-common/CHANGELOG.md index c9adfbde48..fe3286ac42 100644 --- a/plugins/search-common/CHANGELOG.md +++ b/plugins/search-common/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-search-common +## 1.2.21 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.9.3 + ## 1.2.21-next.0 ### Patch Changes diff --git a/plugins/search-common/package.json b/plugins/search-common/package.json index 4cb8eee4f2..f2b31c2a0c 100644 --- a/plugins/search-common/package.json +++ b/plugins/search-common/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-search-common", - "version": "1.2.21-next.0", + "version": "1.2.21", "description": "Common functionalities for Search, to be shared between various search-enabled plugins", "backstage": { "role": "common-library", diff --git a/plugins/search-react/CHANGELOG.md b/plugins/search-react/CHANGELOG.md index 6c4090276c..eaa9cbce14 100644 --- a/plugins/search-react/CHANGELOG.md +++ b/plugins/search-react/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-search-react +## 1.10.0 + +### Minor Changes + +- a521911: Add support for customizable icons in `SearchResultListItemBlueprint` and related components + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/core-components@0.18.3 + - @backstage/core-plugin-api@1.12.0 + - @backstage/plugin-search-common@1.2.21 + ## 1.10.0-next.1 ### Minor Changes diff --git a/plugins/search-react/package.json b/plugins/search-react/package.json index 5c11191dcc..7c18e98f47 100644 --- a/plugins/search-react/package.json +++ b/plugins/search-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-search-react", - "version": "1.10.0-next.1", + "version": "1.10.0", "backstage": { "role": "web-library", "pluginId": "search", diff --git a/plugins/search/CHANGELOG.md b/plugins/search/CHANGELOG.md index 934d178b77..dd4261ea59 100644 --- a/plugins/search/CHANGELOG.md +++ b/plugins/search/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-search +## 1.5.0 + +### Minor Changes + +- a521911: Add support for customizable icons in `SearchResultListItemBlueprint` and related components + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/core-compat-api@0.5.4 + - @backstage/plugin-search-react@1.10.0 + - @backstage/plugin-catalog-react@1.21.3 + - @backstage/core-components@0.18.3 + - @backstage/core-plugin-api@1.12.0 + - @backstage/plugin-search-common@1.2.21 + ## 1.5.0-next.1 ### Minor Changes diff --git a/plugins/search/package.json b/plugins/search/package.json index e8a8a2b567..48bc3abfb9 100644 --- a/plugins/search/package.json +++ b/plugins/search/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-search", - "version": "1.5.0-next.1", + "version": "1.5.0", "description": "The Backstage plugin that provides your backstage app with search", "backstage": { "role": "frontend-plugin", diff --git a/plugins/signals-backend/CHANGELOG.md b/plugins/signals-backend/CHANGELOG.md index 989623b70f..0079628280 100644 --- a/plugins/signals-backend/CHANGELOG.md +++ b/plugins/signals-backend/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-signals-backend +## 0.3.10 + +### Patch Changes + +- 71c22f3: Removed/moved unused dependencies +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-events-node@0.4.17 + - @backstage/config@1.3.6 + - @backstage/plugin-signals-node@0.1.26 + ## 0.3.10-next.1 ### Patch Changes diff --git a/plugins/signals-backend/package.json b/plugins/signals-backend/package.json index 632d9d32ad..e553d6c594 100644 --- a/plugins/signals-backend/package.json +++ b/plugins/signals-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-signals-backend", - "version": "0.3.10-next.1", + "version": "0.3.10", "backstage": { "role": "backend-plugin", "pluginId": "signals", diff --git a/plugins/signals-node/CHANGELOG.md b/plugins/signals-node/CHANGELOG.md index 4a2080b665..54ecfefc95 100644 --- a/plugins/signals-node/CHANGELOG.md +++ b/plugins/signals-node/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-signals-node +## 0.1.26 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-events-node@0.4.17 + - @backstage/plugin-auth-node@0.6.9 + - @backstage/config@1.3.6 + ## 0.1.26-next.1 ### Patch Changes diff --git a/plugins/signals-node/package.json b/plugins/signals-node/package.json index 5c222e4fc0..e9866f7eda 100644 --- a/plugins/signals-node/package.json +++ b/plugins/signals-node/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-signals-node", - "version": "0.1.26-next.1", + "version": "0.1.26", "description": "Node.js library for the signals plugin", "backstage": { "role": "node-library", diff --git a/plugins/signals-react/CHANGELOG.md b/plugins/signals-react/CHANGELOG.md index a73cc7dfb5..d2afa41fb6 100644 --- a/plugins/signals-react/CHANGELOG.md +++ b/plugins/signals-react/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-signals-react +## 0.0.17 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.12.0 + ## 0.0.17-next.0 ### Patch Changes diff --git a/plugins/signals-react/package.json b/plugins/signals-react/package.json index d11c0d5f7b..ba4829c19f 100644 --- a/plugins/signals-react/package.json +++ b/plugins/signals-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-signals-react", - "version": "0.0.17-next.0", + "version": "0.0.17", "description": "Web library for the signals plugin", "backstage": { "role": "web-library", diff --git a/plugins/signals/CHANGELOG.md b/plugins/signals/CHANGELOG.md index 6aa44ebfbc..b47bd54a35 100644 --- a/plugins/signals/CHANGELOG.md +++ b/plugins/signals/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-signals +## 0.0.25 + +### Patch Changes + +- 71c22f3: Removed/moved unused dependencies +- f0f006e: Fixes a bug where the `SignalClient` would try to subscribe to the same channel twice after an error, instead of just once. +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/core-compat-api@0.5.4 + - @backstage/core-components@0.18.3 + - @backstage/core-plugin-api@1.12.0 + - @backstage/plugin-signals-react@0.0.17 + ## 0.0.25-next.1 ### Patch Changes diff --git a/plugins/signals/package.json b/plugins/signals/package.json index 8f688081c0..4ee2efbe22 100644 --- a/plugins/signals/package.json +++ b/plugins/signals/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-signals", - "version": "0.0.25-next.1", + "version": "0.0.25", "backstage": { "role": "frontend-plugin", "pluginId": "signals", diff --git a/plugins/techdocs-addons-test-utils/CHANGELOG.md b/plugins/techdocs-addons-test-utils/CHANGELOG.md index b0b0864402..cb47778bc1 100644 --- a/plugins/techdocs-addons-test-utils/CHANGELOG.md +++ b/plugins/techdocs-addons-test-utils/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-techdocs-addons-test-utils +## 1.1.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-techdocs@1.16.0 + - @backstage/plugin-search-react@1.10.0 + - @backstage/plugin-catalog@1.32.0 + - @backstage/plugin-catalog-react@1.21.3 + - @backstage/core-plugin-api@1.12.0 + - @backstage/core-app-api@1.19.2 + - @backstage/plugin-techdocs-react@1.3.5 + - @backstage/integration-react@1.2.12 + - @backstage/test-utils@1.7.13 + ## 1.1.2-next.1 ### Patch Changes diff --git a/plugins/techdocs-addons-test-utils/package.json b/plugins/techdocs-addons-test-utils/package.json index 4bbdf6e73b..7d47cb8720 100644 --- a/plugins/techdocs-addons-test-utils/package.json +++ b/plugins/techdocs-addons-test-utils/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-techdocs-addons-test-utils", - "version": "1.1.2-next.1", + "version": "1.1.2", "backstage": { "role": "web-library", "pluginId": "techdocs-addons", diff --git a/plugins/techdocs-backend/CHANGELOG.md b/plugins/techdocs-backend/CHANGELOG.md index b461b653a8..fd8c03fbfa 100644 --- a/plugins/techdocs-backend/CHANGELOG.md +++ b/plugins/techdocs-backend/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-techdocs-backend +## 2.1.2 + +### Patch Changes + +- 71c22f3: Removed/moved unused dependencies +- Updated dependencies + - @backstage/backend-defaults@0.13.1 + - @backstage/plugin-catalog-node@1.20.0 + - @backstage/integration@1.18.2 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-techdocs-node@1.13.9 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + - @backstage/catalog-client@1.12.1 + ## 2.1.2-next.1 ### Patch Changes diff --git a/plugins/techdocs-backend/package.json b/plugins/techdocs-backend/package.json index c4c8d4d036..d8b1bfbfa1 100644 --- a/plugins/techdocs-backend/package.json +++ b/plugins/techdocs-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-techdocs-backend", - "version": "2.1.2-next.1", + "version": "2.1.2", "description": "The Backstage backend plugin that renders technical documentation for your components", "backstage": { "role": "backend-plugin", diff --git a/plugins/techdocs-module-addons-contrib/CHANGELOG.md b/plugins/techdocs-module-addons-contrib/CHANGELOG.md index 56027da723..df1d97d439 100644 --- a/plugins/techdocs-module-addons-contrib/CHANGELOG.md +++ b/plugins/techdocs-module-addons-contrib/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-techdocs-module-addons-contrib +## 1.1.30 + +### Patch Changes + +- 6929480: ExpandableCollapse Techdocs Addon was breaking native sidebar collapse on Firefox +- Updated dependencies + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/integration@1.18.2 + - @backstage/core-components@0.18.3 + - @backstage/core-plugin-api@1.12.0 + - @backstage/plugin-techdocs-react@1.3.5 + - @backstage/integration-react@1.2.12 + ## 1.1.30-next.1 ### Patch Changes diff --git a/plugins/techdocs-module-addons-contrib/package.json b/plugins/techdocs-module-addons-contrib/package.json index 6fd5682b43..f6578bdf6e 100644 --- a/plugins/techdocs-module-addons-contrib/package.json +++ b/plugins/techdocs-module-addons-contrib/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-techdocs-module-addons-contrib", - "version": "1.1.30-next.1", + "version": "1.1.30", "description": "Plugin module for contributed TechDocs Addons", "backstage": { "role": "frontend-plugin-module", diff --git a/plugins/techdocs-node/CHANGELOG.md b/plugins/techdocs-node/CHANGELOG.md index ff5eda772c..5ea1dca965 100644 --- a/plugins/techdocs-node/CHANGELOG.md +++ b/plugins/techdocs-node/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-techdocs-node +## 1.13.9 + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/integration@1.18.2 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + - @backstage/integration-aws-node@0.1.19 + - @backstage/plugin-search-common@1.2.21 + ## 1.13.9-next.1 ### Patch Changes diff --git a/plugins/techdocs-node/package.json b/plugins/techdocs-node/package.json index d0a1d69ea9..7a063d6fdb 100644 --- a/plugins/techdocs-node/package.json +++ b/plugins/techdocs-node/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-techdocs-node", - "version": "1.13.9-next.1", + "version": "1.13.9", "description": "Common node.js functionalities for TechDocs, to be shared between techdocs-backend plugin and techdocs-cli", "backstage": { "role": "node-library", diff --git a/plugins/techdocs-react/CHANGELOG.md b/plugins/techdocs-react/CHANGELOG.md index 4c99666ba3..c27a199b51 100644 --- a/plugins/techdocs-react/CHANGELOG.md +++ b/plugins/techdocs-react/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-techdocs-react +## 1.3.5 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/core-components@0.18.3 + - @backstage/core-plugin-api@1.12.0 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + ## 1.3.5-next.0 ### Patch Changes diff --git a/plugins/techdocs-react/package.json b/plugins/techdocs-react/package.json index a68551568e..a5a461c66c 100644 --- a/plugins/techdocs-react/package.json +++ b/plugins/techdocs-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-techdocs-react", - "version": "1.3.5-next.0", + "version": "1.3.5", "description": "Shared frontend utilities for TechDocs and Addons", "backstage": { "role": "web-library", diff --git a/plugins/techdocs/CHANGELOG.md b/plugins/techdocs/CHANGELOG.md index 59e4b25d98..244519721d 100644 --- a/plugins/techdocs/CHANGELOG.md +++ b/plugins/techdocs/CHANGELOG.md @@ -1,5 +1,31 @@ # @backstage/plugin-techdocs +## 1.16.0 + +### Minor Changes + +- a521911: Add support for customizable icons in `SearchResultListItemBlueprint` and related components + +### Patch Changes + +- 71c22f3: Removed/moved unused dependencies +- a4d4a70: Fixed an issue where the entire TechDocs page would re-render when navigating between pages within the same entity's documentation. +- Updated dependencies + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/core-compat-api@0.5.4 + - @backstage/plugin-search-react@1.10.0 + - @backstage/plugin-catalog-react@1.21.3 + - @backstage/integration@1.18.2 + - @backstage/core-components@0.18.3 + - @backstage/core-plugin-api@1.12.0 + - @backstage/config@1.3.6 + - @backstage/catalog-model@1.7.6 + - @backstage/plugin-techdocs-react@1.3.5 + - @backstage/catalog-client@1.12.1 + - @backstage/integration-react@1.2.12 + - @backstage/plugin-auth-react@0.1.21 + - @backstage/plugin-search-common@1.2.21 + ## 1.16.0-next.1 ### Minor Changes diff --git a/plugins/techdocs/package.json b/plugins/techdocs/package.json index 29b6e843d6..18ac26eafe 100644 --- a/plugins/techdocs/package.json +++ b/plugins/techdocs/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-techdocs", - "version": "1.16.0-next.1", + "version": "1.16.0", "description": "The Backstage plugin that renders technical documentation for your components", "backstage": { "role": "frontend-plugin", diff --git a/plugins/user-settings-backend/CHANGELOG.md b/plugins/user-settings-backend/CHANGELOG.md index bb8cbcc156..116fa51208 100644 --- a/plugins/user-settings-backend/CHANGELOG.md +++ b/plugins/user-settings-backend/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-user-settings-backend +## 0.3.8 + +### Patch Changes + +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/backend-defaults@0.13.1 + - @backstage/backend-plugin-api@1.5.0 + - @backstage/plugin-auth-node@0.6.9 + - @backstage/plugin-signals-node@0.1.26 + ## 0.3.8-next.1 ### Patch Changes diff --git a/plugins/user-settings-backend/package.json b/plugins/user-settings-backend/package.json index 5d604bb573..bae5ca8066 100644 --- a/plugins/user-settings-backend/package.json +++ b/plugins/user-settings-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-user-settings-backend", - "version": "0.3.8-next.1", + "version": "0.3.8", "description": "The Backstage backend plugin to manage user settings", "backstage": { "role": "backend-plugin", diff --git a/plugins/user-settings/CHANGELOG.md b/plugins/user-settings/CHANGELOG.md index cef606d443..672bc97697 100644 --- a/plugins/user-settings/CHANGELOG.md +++ b/plugins/user-settings/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-user-settings +## 0.8.29 + +### Patch Changes + +- 2b6fda3: Revert `storageApiRef` implementation +- 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. +- Updated dependencies + - @backstage/frontend-plugin-api@0.13.0 + - @backstage/core-compat-api@0.5.4 + - @backstage/plugin-catalog-react@1.21.3 + - @backstage/core-components@0.18.3 + - @backstage/core-plugin-api@1.12.0 + - @backstage/core-app-api@1.19.2 + - @backstage/catalog-model@1.7.6 + - @backstage/plugin-signals-react@0.0.17 + ## 0.8.29-next.0 ### Patch Changes diff --git a/plugins/user-settings/package.json b/plugins/user-settings/package.json index e78c718fe2..508ca6000d 100644 --- a/plugins/user-settings/package.json +++ b/plugins/user-settings/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-user-settings", - "version": "0.8.29-next.0", + "version": "0.8.29", "description": "A Backstage plugin that provides a settings page", "backstage": { "role": "frontend-plugin", From 626b03c6846765f7ce6618f163fcba5356eb8f10 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Tue, 18 Nov 2025 15:40:42 +0100 Subject: [PATCH 66/73] gateway-backend: ignore negative hop counts Signed-off-by: Patrik Oldsberg --- plugins/gateway-backend/src/plugin.test.ts | 20 ++++++++++++++++++++ plugins/gateway-backend/src/router.ts | 2 +- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/plugins/gateway-backend/src/plugin.test.ts b/plugins/gateway-backend/src/plugin.test.ts index b7619e3dfc..8db99e39a5 100644 --- a/plugins/gateway-backend/src/plugin.test.ts +++ b/plugins/gateway-backend/src/plugin.test.ts @@ -176,6 +176,26 @@ describe('gateway', () => { }); }); + it('should detect looped requests with intentional negative hop count', async () => { + const response = await fetch( + 'http://localhost:7777/api/nonexistent-plugin/foo', + { + headers: { + 'backstage-gateway-hops': '-1000000', + }, + }, + ); + expect(response.status).toBe(508); + + const data = await response.json(); + expect(data).toEqual({ + error: { + name: 'LoopDetectedError', + message: 'Maximum proxy hop count exceeded (3)', + }, + }); + }); + it('should close the response for sse connections', async () => { const eventSource = new EventSource( 'http://localhost:7777/api/external-plugin/endpoint-sse', diff --git a/plugins/gateway-backend/src/router.ts b/plugins/gateway-backend/src/router.ts index f04bd3ee58..6c9b4ba6c7 100644 --- a/plugins/gateway-backend/src/router.ts +++ b/plugins/gateway-backend/src/router.ts @@ -47,7 +47,7 @@ export async function createRouter({ on: { proxyReq(proxyReq, req: Request<{ pluginId: string }>) { const currentHops = - parseInt(req.headers[HOPS_HEADER] as string, 10) || 0; + Math.max(parseInt(req.headers[HOPS_HEADER] as string, 10), 0) || 0; proxyReq.setHeader(HOPS_HEADER, currentHops + 1); }, From 7015891784540c2f512b8f76d41e014314baf274 Mon Sep 17 00:00:00 2001 From: benjdlambert Date: Tue, 18 Nov 2025 16:38:59 +0100 Subject: [PATCH 67/73] chgore: add release notes Signed-off-by: benjdlambert --- docs/releases/v1.45.0.md | 72 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 docs/releases/v1.45.0.md diff --git a/docs/releases/v1.45.0.md b/docs/releases/v1.45.0.md new file mode 100644 index 0000000000..2afc9e7c35 --- /dev/null +++ b/docs/releases/v1.45.0.md @@ -0,0 +1,72 @@ +--- +id: v1.45.0 +title: v1.45.0 +description: Backstage Release v1.45.0 +--- + +These are the release notes for the v1.45.0 release of [Backstage](https://backstage.io/). + +A huge thanks to the whole team of maintainers and contributors as well as the amazing Backstage Community for the hard work in getting this release developed and done. + +## Highlights + +### Backstage UI: Breaking Changes + New Components + +Multiple components migrated from Base UI to React Aria Components including `Avatar`, `Checkbox`, and removal of the `Collapsible` component in favour of `Accordion`. + +Check the [CHANGELOG.md](https://github.com/backstage/backstage/blob/master/packages/ui/CHANGELOG.md) for more migration guides on any breaking changes that come with these latest updates. + +### BREAKING: `ldapjs` -> `ldapts` + +Moved from deprecated `ldapjs` dependency to `ldapts`, with breaking changes to custom transformer types and search options. + +Contributed by [@ganives](https://github.com/ganievs) in [#30594](https://github.com/backstage/backstage/pull/30594) + +Check the [CHANGELOG.md](https://github.com/backstage/backstage/blob/master/plugins/catalog-backend-module-ldap/CHANGELOG.md) for more migration guides on any breaking changes that come with these latest updates. + +### NFS: Plugin-Relative Extension Attachments + +Added support for plugin-relative `attachTo` declarations for extension definitions, allowing extensions to attach to other extensions of a particular kind in the same plugin rather than requiring exact extension IDs. + +### NFS: Forwards Compatibility for Route Refs + +It is now possible to use route references from the old frontend system directly in the new one. That means there's no longer a need to use `convertLegacyRouteRef` or `convertLegacyRouteRefs` to re-use route refs in implementations for the new system. This both simplifies migration, and reduces risk for cross system issues while partially migrated. + +This requires no immediate action on your part. As long as a plugin intends to support the old system, it can still keep defining its route refs using the old system without issues. And calling `convertLegacyRouteRef` or `convertLegacyRouteRefs` does not cause problems. + +### Configurable Dynamic Client Registration Token Expiration + +Allow configuring dynamic client registration token expiration with config `auth.experimentalDynamicClientRegistration.tokenExpiration`. Maximum expiration for the DCR token is 24 hours. Default expiration is 1 hour. Contributed by [@drodil](https://github.com/drodil) in [#31278](https://github.com/backstage/backstage/pull/31278) + +### Support for Bitbucket Cloud API tokens + +Since Bitbucket Cloud is phasing out support for the `appPassword` tokens, you can now instead specify the more modern API tokens using the `token` field of your Bitbucket config. + +### Support for PostgreSQL 18 + +The default setup for `TestDatabases` will start running tests against PG14 and PG18 where available, instead of PG13 and PG17 as previously. If you pass in explicit database IDs to your test database instance, those will still be respected. + +### `coreServices.rootInstanceMetadata` is stable + +The backend service `coreServices.rootInstanceMetadata` is now available as stable. It currently has one method - that lets you list all of the installed backend plugins and their modules on the current instance. + +## Security Fixes + +This release does not contain any security fixes. + +## Upgrade path + +We recommend that you keep your Backstage project up to date with this latest release. For more guidance on how to upgrade, check out the documentation for [keeping Backstage updated](https://backstage.io/docs/getting-started/keeping-backstage-updated). + +## Links and References + +Below you can find a list of links and references to help you learn about and start using this new release. + +- [Backstage official website](https://backstage.io/), [documentation](https://backstage.io/docs/), and [getting started guide](https://backstage.io/docs/getting-started/) +- [GitHub repository](https://github.com/backstage/backstage) +- Backstage's [versioning and support policy](https://backstage.io/docs/overview/versioning-policy) +- [Community Discord](https://discord.gg/backstage-687207715902193673) for discussions and support +- [Changelog](https://github.com/backstage/backstage/tree/master/docs/releases/v1.45.0-changelog.md) +- Backstage [Demos](https://backstage.io/demos), [Blog](https://backstage.io/blog), [Roadmap](https://backstage.io/docs/overview/roadmap) and [Plugins](https://backstage.io/plugins) + +Sign up for our [newsletter](https://info.backstage.spotify.com/newsletter_subscribe) if you want to be informed about what is happening in the world of Backstage. From dc4c3549accbd9ee026e1c082b7254130775bb3d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Nov 2025 16:30:57 +0000 Subject: [PATCH 68/73] chore(deps-dev): bump js-yaml from 4.1.0 to 4.1.1 in /microsite Bumps [js-yaml](https://github.com/nodeca/js-yaml) from 4.1.0 to 4.1.1. - [Changelog](https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md) - [Commits](https://github.com/nodeca/js-yaml/compare/4.1.0...4.1.1) --- updated-dependencies: - dependency-name: js-yaml dependency-version: 4.1.1 dependency-type: direct:development ... Signed-off-by: dependabot[bot] --- microsite/package.json | 2 +- microsite/yarn.lock | 13 ++++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/microsite/package.json b/microsite/package.json index a042a23286..81985a0e91 100644 --- a/microsite/package.json +++ b/microsite/package.json @@ -46,7 +46,7 @@ "@docusaurus/tsconfig": "^3.1.1", "@types/luxon": "^3.0.0", "@types/webpack-env": "^1.18.0", - "js-yaml": "^4.1.0", + "js-yaml": "^4.1.1", "prettier": "^2.6.2", "typescript": "~5.2.0", "yaml-loader": "^0.8.0" diff --git a/microsite/yarn.lock b/microsite/yarn.lock index 36f03d8db8..b74490ed5b 100644 --- a/microsite/yarn.lock +++ b/microsite/yarn.lock @@ -4289,7 +4289,7 @@ __metadata: docusaurus-plugin-sass: "npm:^0.2.3" docusaurus-pushfeedback: "npm:^1.0.0" docusaurus-theme-openapi-docs: "npm:^4.3.0" - js-yaml: "npm:^4.1.0" + js-yaml: "npm:^4.1.1" luxon: "npm:^3.0.0" prettier: "npm:^2.6.2" prism-react-renderer: "npm:^2.1.0" @@ -8542,6 +8542,17 @@ __metadata: languageName: node linkType: hard +"js-yaml@npm:^4.1.1": + version: 4.1.1 + resolution: "js-yaml@npm:4.1.1" + dependencies: + argparse: "npm:^2.0.1" + bin: + js-yaml: bin/js-yaml.js + checksum: 10/a52d0519f0f4ef5b4adc1cde466cb54c50d56e2b4a983b9d5c9c0f2f99462047007a6274d7e95617a21d3c91fde3ee6115536ed70991cd645ba8521058b78f77 + languageName: node + linkType: hard + "jsesc@npm:^2.5.1": version: 2.5.2 resolution: "jsesc@npm:2.5.2" From f5b79967e706fa980c4c1a9be7ca667bbd2318a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Wed, 19 Nov 2025 14:31:12 +0100 Subject: [PATCH 69/73] dedupe MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- microsite/yarn.lock | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/microsite/yarn.lock b/microsite/yarn.lock index b74490ed5b..6badb33181 100644 --- a/microsite/yarn.lock +++ b/microsite/yarn.lock @@ -8531,18 +8531,7 @@ __metadata: languageName: node linkType: hard -"js-yaml@npm:^4.1.0": - version: 4.1.1 - resolution: "js-yaml@npm:4.1.1" - dependencies: - argparse: "npm:^2.0.1" - bin: - js-yaml: bin/js-yaml.js - checksum: 10/a52d0519f0f4ef5b4adc1cde466cb54c50d56e2b4a983b9d5c9c0f2f99462047007a6274d7e95617a21d3c91fde3ee6115536ed70991cd645ba8521058b78f77 - languageName: node - linkType: hard - -"js-yaml@npm:^4.1.1": +"js-yaml@npm:^4.1.0, js-yaml@npm:^4.1.1": version: 4.1.1 resolution: "js-yaml@npm:4.1.1" dependencies: From fe7c7513448adc6703911849c7593a73e54c4de1 Mon Sep 17 00:00:00 2001 From: Johan Persson Date: Tue, 18 Nov 2025 17:35:58 +0100 Subject: [PATCH 70/73] fix(ui): prioritize providedRowCount in useTable hook Changed the row count calculation in the useTable hook to prioritize the providedRowCount prop over data.length. This ensures accurate row count values in server-side pagination scenarios where the total number of rows differs from the current page's data length. Signed-off-by: Johan Persson --- .changeset/spicy-teeth-study.md | 5 +++++ packages/ui/src/components/Table/hooks/useTable.ts | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) create mode 100644 .changeset/spicy-teeth-study.md diff --git a/.changeset/spicy-teeth-study.md b/.changeset/spicy-teeth-study.md new file mode 100644 index 0000000000..03cc8a5440 --- /dev/null +++ b/.changeset/spicy-teeth-study.md @@ -0,0 +1,5 @@ +--- +'@backstage/ui': patch +--- + +Fixed `useTable` hook to prioritize `providedRowCount` over data length for accurate row count in server-side pagination scenarios. diff --git a/packages/ui/src/components/Table/hooks/useTable.ts b/packages/ui/src/components/Table/hooks/useTable.ts index 2759fcde41..cd1ddd5c9c 100644 --- a/packages/ui/src/components/Table/hooks/useTable.ts +++ b/packages/ui/src/components/Table/hooks/useTable.ts @@ -50,8 +50,8 @@ export function useTable( const isControlled = controlledOffset !== undefined || controlledPageSize !== undefined; - // Calculate row count from data or use provided value - const rowCount = data?.length ?? providedRowCount ?? 0; + // Use providedRowCount if passed, otherwise fallback to data length + const rowCount = providedRowCount ?? data?.length ?? 0; // Internal state for uncontrolled mode const [internalOffset, setInternalOffset] = useState(defaultOffset); From 0bc1ce919e76983282a189b8724483a5c3a07996 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Wed, 19 Nov 2025 17:42:16 +0100 Subject: [PATCH 71/73] frontend-plugin-api: fix input incompatibility crash Signed-off-by: Patrik Oldsberg --- .changeset/flat-pillows-rush.md | 5 +++++ .../src/wiring/InternalExtensionInput.ts | 2 +- .../src/wiring/createExtension.test.ts | 22 +++++++++++++++++++ .../src/wiring/createExtension.ts | 4 ++-- .../src/wiring/createExtensionInput.test.ts | 2 +- .../wiring/resolveExtensionDefinition.test.ts | 14 ++++++------ 6 files changed, 38 insertions(+), 11 deletions(-) create mode 100644 .changeset/flat-pillows-rush.md diff --git a/.changeset/flat-pillows-rush.md b/.changeset/flat-pillows-rush.md new file mode 100644 index 0000000000..bb64013f62 --- /dev/null +++ b/.changeset/flat-pillows-rush.md @@ -0,0 +1,5 @@ +--- +'@backstage/frontend-plugin-api': patch +--- + +Fixed a versioning conflict that could result in a `.withContext` is not a function error. diff --git a/packages/frontend-internal/src/wiring/InternalExtensionInput.ts b/packages/frontend-internal/src/wiring/InternalExtensionInput.ts index b816890f1a..9090023db9 100644 --- a/packages/frontend-internal/src/wiring/InternalExtensionInput.ts +++ b/packages/frontend-internal/src/wiring/InternalExtensionInput.ts @@ -28,7 +28,7 @@ export const OpaqueExtensionInput = OpaqueType.create<{ versions: { readonly version: undefined; readonly context?: ExtensionInputContext; - withContext(context: ExtensionInputContext): ExtensionInput; + withContext?(context: ExtensionInputContext): ExtensionInput; }; }>({ type: '@backstage/ExtensionInput', diff --git a/packages/frontend-plugin-api/src/wiring/createExtension.test.ts b/packages/frontend-plugin-api/src/wiring/createExtension.test.ts index 4996fbc535..989dcf4468 100644 --- a/packages/frontend-plugin-api/src/wiring/createExtension.test.ts +++ b/packages/frontend-plugin-api/src/wiring/createExtension.test.ts @@ -1318,4 +1318,26 @@ describe('createExtension', () => { ); }); }); + + it('should old inputs without context support', () => { + const legacyInput = createExtensionInput([numberDataRef]); + + // old API without context + delete (legacyInput as any).context; + delete (legacyInput as any).withContext; + + const extension = createExtension({ + attachTo: { id: 'root', input: 'default' }, + output: [stringDataRef], + inputs: { + foo: legacyInput, + }, + factory({ inputs }) { + unused(inputs.foo); + return [stringDataRef('output')]; + }, + }); + + expect(extension.inputs.foo).toBe(legacyInput); + }); }); diff --git a/packages/frontend-plugin-api/src/wiring/createExtension.ts b/packages/frontend-plugin-api/src/wiring/createExtension.ts index 0268cadf51..9b55505056 100644 --- a/packages/frontend-plugin-api/src/wiring/createExtension.ts +++ b/packages/frontend-plugin-api/src/wiring/createExtension.ts @@ -368,11 +368,11 @@ function bindInputs( return Object.fromEntries( Object.entries(inputs).map(([inputName, input]) => [ inputName, - OpaqueExtensionInput.toInternal(input).withContext({ + OpaqueExtensionInput.toInternal(input).withContext?.({ kind, name, input: inputName, - }), + }) ?? input, ]), ); } diff --git a/packages/frontend-plugin-api/src/wiring/createExtensionInput.test.ts b/packages/frontend-plugin-api/src/wiring/createExtensionInput.test.ts index 8511f79b4e..279878542a 100644 --- a/packages/frontend-plugin-api/src/wiring/createExtensionInput.test.ts +++ b/packages/frontend-plugin-api/src/wiring/createExtensionInput.test.ts @@ -60,7 +60,7 @@ describe('createExtensionInput', () => { const input = createExtensionInput([stringDataRef, numberDataRef]); const context = { input: 'test1', kind: 'test2', name: 'test3' }; const inputWithContext = - OpaqueExtensionInput.toInternal(input).withContext(context); + OpaqueExtensionInput.toInternal(input).withContext?.(context); expect(inputWithContext).toEqual({ $$type: '@backstage/ExtensionInput', extensionData: [stringDataRef, numberDataRef], diff --git a/packages/frontend-plugin-api/src/wiring/resolveExtensionDefinition.test.ts b/packages/frontend-plugin-api/src/wiring/resolveExtensionDefinition.test.ts index d8b90d69f3..79749af77c 100644 --- a/packages/frontend-plugin-api/src/wiring/resolveExtensionDefinition.test.ts +++ b/packages/frontend-plugin-api/src/wiring/resolveExtensionDefinition.test.ts @@ -80,7 +80,7 @@ describe('resolveExtensionDefinition', () => { resolveExtensionDefinition( OpaqueExtensionDefinition.toInternal({ ...baseDef, - attachTo: baseInpuf.withContext({ + attachTo: baseInpuf.withContext?.({ kind: 'parent', name: 'example', input: 'children', @@ -97,7 +97,7 @@ describe('resolveExtensionDefinition', () => { resolveExtensionDefinition( OpaqueExtensionDefinition.toInternal({ ...baseDef, - attachTo: baseInpuf.withContext({ + attachTo: baseInpuf.withContext?.({ name: 'example', input: 'children', }), @@ -113,7 +113,7 @@ describe('resolveExtensionDefinition', () => { resolveExtensionDefinition( OpaqueExtensionDefinition.toInternal({ ...baseDef, - attachTo: baseInpuf.withContext({ + attachTo: baseInpuf.withContext?.({ kind: 'parent', input: 'children', }), @@ -129,7 +129,7 @@ describe('resolveExtensionDefinition', () => { resolveExtensionDefinition( OpaqueExtensionDefinition.toInternal({ ...baseDef, - attachTo: baseInpuf.withContext({ + attachTo: baseInpuf.withContext?.({ input: 'children', }), }), @@ -145,15 +145,15 @@ describe('resolveExtensionDefinition', () => { OpaqueExtensionDefinition.toInternal({ ...baseDef, attachTo: [ - baseInpuf.withContext({ + baseInpuf.withContext?.({ kind: 'k1', input: 'children', }), - baseInpuf.withContext({ + baseInpuf.withContext?.({ kind: 'k2', input: 'children', }), - baseInpuf.withContext({ + baseInpuf.withContext?.({ kind: 'k3', input: 'children', }), From 49a5d94dc0a50c62a3dbbc0df28ae6a0b9daa9c1 Mon Sep 17 00:00:00 2001 From: gaelgoth Date: Wed, 19 Nov 2025 22:20:44 +0100 Subject: [PATCH 72/73] Update doc Signed-off-by: gaelgoth --- README-fr_FR.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README-fr_FR.md b/README-fr_FR.md index a54e9c8c49..27a7cd1153 100644 --- a/README-fr_FR.md +++ b/README-fr_FR.md @@ -41,7 +41,7 @@ Pour commencer à utiliser Backstage, consultez [Getting Started documentation]( ## Documentation -La documentation de Backstage inclus: +La documentation de Backstage inclut: - [Main documentation](https://backstage.io/docs) - [Software Catalog](https://backstage.io/docs/features/software-catalog/) From 097516ec6fd6fcd06f0a2df06a00559a6e6f3c70 Mon Sep 17 00:00:00 2001 From: benjdlambert Date: Thu, 20 Nov 2025 11:00:52 +0100 Subject: [PATCH 73/73] chore: enter pre-release Signed-off-by: benjdlambert --- .changeset/pre.json | 210 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 210 insertions(+) create mode 100644 .changeset/pre.json diff --git a/.changeset/pre.json b/.changeset/pre.json new file mode 100644 index 0000000000..c27ea0b35a --- /dev/null +++ b/.changeset/pre.json @@ -0,0 +1,210 @@ +{ + "mode": "pre", + "tag": "next", + "initialVersions": { + "example-app": "0.2.115", + "@backstage/app-defaults": "1.7.2", + "example-app-next": "0.0.29", + "app-next-example-plugin": "0.0.29", + "example-backend": "0.0.44", + "@backstage/backend-app-api": "1.3.0", + "@backstage/backend-defaults": "0.13.1", + "@backstage/backend-dev-utils": "0.1.5", + "@backstage/backend-dynamic-feature-service": "0.7.6", + "@backstage/backend-openapi-utils": "0.6.3", + "@backstage/backend-plugin-api": "1.5.0", + "@backstage/backend-test-utils": "1.10.0", + "@backstage/catalog-client": "1.12.1", + "@backstage/catalog-model": "1.7.6", + "@backstage/cli": "0.34.5", + "@backstage/cli-common": "0.1.15", + "@backstage/cli-node": "0.2.15", + "@backstage/codemods": "0.1.52", + "@backstage/config": "1.3.6", + "@backstage/config-loader": "1.10.6", + "@backstage/core-app-api": "1.19.2", + "@backstage/core-compat-api": "0.5.4", + "@backstage/core-components": "0.18.3", + "@backstage/core-plugin-api": "1.12.0", + "@backstage/create-app": "0.7.6", + "@backstage/dev-utils": "1.1.17", + "e2e-test": "0.2.34", + "@backstage/e2e-test-utils": "0.1.1", + "@backstage/errors": "1.2.7", + "@backstage/eslint-plugin": "0.2.0", + "@backstage/frontend-app-api": "0.13.2", + "@backstage/frontend-defaults": "0.3.3", + "@backstage/frontend-dynamic-feature-loader": "0.1.7", + "@internal/frontend": "0.0.15", + "@backstage/frontend-plugin-api": "0.13.0", + "@backstage/frontend-test-utils": "0.4.1", + "@backstage/integration": "1.18.2", + "@backstage/integration-aws-node": "0.1.19", + "@backstage/integration-react": "1.2.12", + "@internal/opaque": "0.0.1", + "@backstage/release-manifests": "0.0.13", + "@backstage/repo-tools": "0.16.0", + "@internal/scaffolder": "0.0.15", + "@techdocs/cli": "1.10.2", + "techdocs-cli-embedded-app": "0.2.114", + "@backstage/test-utils": "1.7.13", + "@backstage/theme": "0.7.0", + "@backstage/types": "1.2.2", + "@backstage/ui": "0.9.0", + "@backstage/version-bridge": "1.0.11", + "yarn-plugin-backstage": "0.0.7", + "@backstage/plugin-api-docs": "0.13.1", + "@backstage/plugin-api-docs-module-protoc-gen-doc": "0.1.10", + "@backstage/plugin-app": "0.3.2", + "@backstage/plugin-app-backend": "0.5.8", + "@backstage/plugin-app-node": "0.1.39", + "@backstage/plugin-app-visualizer": "0.1.25", + "@backstage/plugin-auth": "0.1.2", + "@backstage/plugin-auth-backend": "0.25.6", + "@backstage/plugin-auth-backend-module-atlassian-provider": "0.4.9", + "@backstage/plugin-auth-backend-module-auth0-provider": "0.2.9", + "@backstage/plugin-auth-backend-module-aws-alb-provider": "0.4.9", + "@backstage/plugin-auth-backend-module-azure-easyauth-provider": "0.2.14", + "@backstage/plugin-auth-backend-module-bitbucket-provider": "0.3.9", + "@backstage/plugin-auth-backend-module-bitbucket-server-provider": "0.2.9", + "@backstage/plugin-auth-backend-module-cloudflare-access-provider": "0.4.9", + "@backstage/plugin-auth-backend-module-gcp-iap-provider": "0.4.9", + "@backstage/plugin-auth-backend-module-github-provider": "0.3.9", + "@backstage/plugin-auth-backend-module-gitlab-provider": "0.3.9", + "@backstage/plugin-auth-backend-module-google-provider": "0.3.9", + "@backstage/plugin-auth-backend-module-guest-provider": "0.2.14", + "@backstage/plugin-auth-backend-module-microsoft-provider": "0.3.9", + "@backstage/plugin-auth-backend-module-oauth2-provider": "0.4.9", + "@backstage/plugin-auth-backend-module-oauth2-proxy-provider": "0.2.14", + "@backstage/plugin-auth-backend-module-oidc-provider": "0.4.9", + "@backstage/plugin-auth-backend-module-okta-provider": "0.2.9", + "@backstage/plugin-auth-backend-module-onelogin-provider": "0.3.9", + "@backstage/plugin-auth-backend-module-openshift-provider": "0.1.2", + "@backstage/plugin-auth-backend-module-pinniped-provider": "0.3.9", + "@backstage/plugin-auth-backend-module-vmware-cloud-provider": "0.5.9", + "@backstage/plugin-auth-node": "0.6.9", + "@backstage/plugin-auth-react": "0.1.21", + "@backstage/plugin-bitbucket-cloud-common": "0.3.4", + "@backstage/plugin-catalog": "1.32.0", + "@backstage/plugin-catalog-backend": "3.2.0", + "@backstage/plugin-catalog-backend-module-aws": "0.4.17", + "@backstage/plugin-catalog-backend-module-azure": "0.3.11", + "@backstage/plugin-catalog-backend-module-backstage-openapi": "0.5.8", + "@backstage/plugin-catalog-backend-module-bitbucket-cloud": "0.5.5", + "@backstage/plugin-catalog-backend-module-bitbucket-server": "0.5.5", + "@backstage/plugin-catalog-backend-module-gcp": "0.3.14", + "@backstage/plugin-catalog-backend-module-gerrit": "0.3.8", + "@backstage/plugin-catalog-backend-module-gitea": "0.1.6", + "@backstage/plugin-catalog-backend-module-github": "0.11.2", + "@backstage/plugin-catalog-backend-module-github-org": "0.3.16", + "@backstage/plugin-catalog-backend-module-gitlab": "0.7.5", + "@backstage/plugin-catalog-backend-module-gitlab-org": "0.2.15", + "@backstage/plugin-catalog-backend-module-incremental-ingestion": "0.7.6", + "@backstage/plugin-catalog-backend-module-ldap": "0.12.0", + "@backstage/plugin-catalog-backend-module-logs": "0.1.16", + "@backstage/plugin-catalog-backend-module-msgraph": "0.8.2", + "@backstage/plugin-catalog-backend-module-openapi": "0.2.16", + "@backstage/plugin-catalog-backend-module-puppetdb": "0.2.16", + "@backstage/plugin-catalog-backend-module-scaffolder-entity-model": "0.2.14", + "@backstage/plugin-catalog-backend-module-unprocessed": "0.6.6", + "@backstage/plugin-catalog-common": "1.1.7", + "@backstage/plugin-catalog-graph": "0.5.3", + "@backstage/plugin-catalog-import": "0.13.7", + "@backstage/plugin-catalog-node": "1.20.0", + "@backstage/plugin-catalog-react": "1.21.3", + "@backstage/plugin-catalog-unprocessed-entities": "0.2.23", + "@backstage/plugin-catalog-unprocessed-entities-common": "0.0.11", + "@backstage/plugin-config-schema": "0.1.74", + "@backstage/plugin-devtools": "0.1.33", + "@backstage/plugin-devtools-backend": "0.5.11", + "@backstage/plugin-devtools-common": "0.1.19", + "@backstage/plugin-events-backend": "0.5.8", + "@backstage/plugin-events-backend-module-aws-sqs": "0.4.17", + "@backstage/plugin-events-backend-module-azure": "0.2.26", + "@backstage/plugin-events-backend-module-bitbucket-cloud": "0.2.26", + "@backstage/plugin-events-backend-module-bitbucket-server": "0.1.7", + "@backstage/plugin-events-backend-module-gerrit": "0.2.26", + "@backstage/plugin-events-backend-module-github": "0.4.6", + "@backstage/plugin-events-backend-module-gitlab": "0.3.7", + "@backstage/plugin-events-backend-module-google-pubsub": "0.1.6", + "@backstage/plugin-events-backend-module-kafka": "0.1.5", + "@backstage/plugin-events-backend-test-utils": "0.1.50", + "@backstage/plugin-events-node": "0.4.17", + "@internal/plugin-todo-list": "1.0.45", + "@internal/plugin-todo-list-backend": "1.0.45", + "@internal/plugin-todo-list-common": "1.0.28", + "@backstage/plugin-gateway-backend": "1.1.0", + "@backstage/plugin-home": "0.8.14", + "@backstage/plugin-home-react": "0.1.32", + "@backstage/plugin-kubernetes": "0.12.13", + "@backstage/plugin-kubernetes-backend": "0.20.4", + "@backstage/plugin-kubernetes-cluster": "0.0.31", + "@backstage/plugin-kubernetes-common": "0.9.8", + "@backstage/plugin-kubernetes-node": "0.3.6", + "@backstage/plugin-kubernetes-react": "0.5.13", + "@backstage/plugin-mcp-actions-backend": "0.1.5", + "@backstage/plugin-mui-to-bui": "0.2.1", + "@backstage/plugin-notifications": "0.5.11", + "@backstage/plugin-notifications-backend": "0.6.0", + "@backstage/plugin-notifications-backend-module-email": "0.3.16", + "@backstage/plugin-notifications-backend-module-slack": "0.2.1", + "@backstage/plugin-notifications-common": "0.2.0", + "@backstage/plugin-notifications-node": "0.2.21", + "@backstage/plugin-org": "0.6.46", + "@backstage/plugin-org-react": "0.1.44", + "@backstage/plugin-permission-backend": "0.7.6", + "@backstage/plugin-permission-backend-module-allow-all-policy": "0.2.14", + "@backstage/plugin-permission-common": "0.9.3", + "@backstage/plugin-permission-node": "0.10.6", + "@backstage/plugin-permission-react": "0.4.38", + "@backstage/plugin-proxy-backend": "0.6.8", + "@backstage/plugin-proxy-node": "0.1.10", + "@backstage/plugin-scaffolder": "1.34.3", + "@backstage/plugin-scaffolder-backend": "3.0.1", + "@backstage/plugin-scaffolder-backend-module-azure": "0.2.15", + "@backstage/plugin-scaffolder-backend-module-bitbucket": "0.3.16", + "@backstage/plugin-scaffolder-backend-module-bitbucket-cloud": "0.2.15", + "@backstage/plugin-scaffolder-backend-module-bitbucket-server": "0.2.15", + "@backstage/plugin-scaffolder-backend-module-confluence-to-markdown": "0.3.15", + "@backstage/plugin-scaffolder-backend-module-cookiecutter": "0.3.17", + "@backstage/plugin-scaffolder-backend-module-gcp": "0.2.15", + "@backstage/plugin-scaffolder-backend-module-gerrit": "0.2.15", + "@backstage/plugin-scaffolder-backend-module-gitea": "0.2.15", + "@backstage/plugin-scaffolder-backend-module-github": "0.9.2", + "@backstage/plugin-scaffolder-backend-module-gitlab": "0.10.0", + "@backstage/plugin-scaffolder-backend-module-notifications": "0.1.16", + "@backstage/plugin-scaffolder-backend-module-rails": "0.5.15", + "@backstage/plugin-scaffolder-backend-module-sentry": "0.2.15", + "@backstage/plugin-scaffolder-backend-module-yeoman": "0.4.16", + "@backstage/plugin-scaffolder-common": "1.7.3", + "@backstage/plugin-scaffolder-node": "0.12.1", + "@backstage/plugin-scaffolder-node-test-utils": "0.3.5", + "@backstage/plugin-scaffolder-react": "1.19.3", + "@backstage/plugin-search": "1.5.0", + "@backstage/plugin-search-backend": "2.0.8", + "@backstage/plugin-search-backend-module-catalog": "0.3.10", + "@backstage/plugin-search-backend-module-elasticsearch": "1.7.8", + "@backstage/plugin-search-backend-module-explore": "0.3.9", + "@backstage/plugin-search-backend-module-pg": "0.5.50", + "@backstage/plugin-search-backend-module-stack-overflow-collator": "0.3.15", + "@backstage/plugin-search-backend-module-techdocs": "0.4.8", + "@backstage/plugin-search-backend-node": "1.3.17", + "@backstage/plugin-search-common": "1.2.21", + "@backstage/plugin-search-react": "1.10.0", + "@backstage/plugin-signals": "0.0.25", + "@backstage/plugin-signals-backend": "0.3.10", + "@backstage/plugin-signals-node": "0.1.26", + "@backstage/plugin-signals-react": "0.0.17", + "@backstage/plugin-techdocs": "1.16.0", + "@backstage/plugin-techdocs-addons-test-utils": "1.1.2", + "@backstage/plugin-techdocs-backend": "2.1.2", + "@backstage/plugin-techdocs-common": "0.1.1", + "@backstage/plugin-techdocs-module-addons-contrib": "1.1.30", + "@backstage/plugin-techdocs-node": "1.13.9", + "@backstage/plugin-techdocs-react": "1.3.5", + "@backstage/plugin-user-settings": "0.8.29", + "@backstage/plugin-user-settings-backend": "0.3.8", + "@backstage/plugin-user-settings-common": "0.0.1" + }, + "changesets": [] +}