From 909c742c183a7514df8a51ee843a8e6fe3978b2e Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Mon, 16 Feb 2026 11:36:59 +0100 Subject: [PATCH] Stabilize translation API in the new frontend system Remove @alpha tags from translation-related types and switch all translation API imports in new frontend system packages to use stable paths from @backstage/frontend-plugin-api instead of @backstage/core-plugin-api/alpha. Signed-off-by: Patrik Oldsberg --- .changeset/stable-translation-plugin-app.md | 5 +++++ .changeset/stable-translation-test-utils.md | 5 +++++ .../src/apis/definitions/TranslationApi.ts | 2 +- packages/frontend-test-utils/report.api.md | 13 ++++++------- .../apis/TranslationApi/MockTranslationApi.test.tsx | 2 +- .../src/apis/TranslationApi/MockTranslationApi.ts | 4 ++-- packages/frontend-test-utils/src/apis/mockApis.ts | 6 +++--- plugins/app/src/extensions/AppLanguageApi.ts | 2 +- plugins/app/src/extensions/TranslationsApi.tsx | 2 +- 9 files changed, 25 insertions(+), 16 deletions(-) create mode 100644 .changeset/stable-translation-plugin-app.md create mode 100644 .changeset/stable-translation-test-utils.md diff --git a/.changeset/stable-translation-plugin-app.md b/.changeset/stable-translation-plugin-app.md new file mode 100644 index 0000000000..6e57cfeeb8 --- /dev/null +++ b/.changeset/stable-translation-plugin-app.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-app': patch +--- + +Switched translation API imports (`translationApiRef`, `appLanguageApiRef`) from the alpha `@backstage/core-plugin-api/alpha` path to the stable `@backstage/frontend-plugin-api` export. This has no effect on runtime behavior. diff --git a/.changeset/stable-translation-test-utils.md b/.changeset/stable-translation-test-utils.md new file mode 100644 index 0000000000..3d624a5dc8 --- /dev/null +++ b/.changeset/stable-translation-test-utils.md @@ -0,0 +1,5 @@ +--- +'@backstage/frontend-test-utils': patch +--- + +Switched `MockTranslationApi` and related test utility imports from `@backstage/core-plugin-api/alpha` to the stable `@backstage/frontend-plugin-api` export. The `TranslationApi` type in the API report is now sourced from a single package. This has no effect on runtime behavior. diff --git a/packages/frontend-plugin-api/src/apis/definitions/TranslationApi.ts b/packages/frontend-plugin-api/src/apis/definitions/TranslationApi.ts index 2578eaf7c4..b569800e3e 100644 --- a/packages/frontend-plugin-api/src/apis/definitions/TranslationApi.ts +++ b/packages/frontend-plugin-api/src/apis/definitions/TranslationApi.ts @@ -22,7 +22,7 @@ import { JSX } from 'react'; /** * Base translation options. * - * @alpha + * @ignore */ interface BaseOptions { interpolation?: { diff --git a/packages/frontend-test-utils/report.api.md b/packages/frontend-test-utils/report.api.md index d1181f032d..1cba02f393 100644 --- a/packages/frontend-test-utils/report.api.md +++ b/packages/frontend-test-utils/report.api.md @@ -46,10 +46,9 @@ import { RouteRef } from '@backstage/frontend-plugin-api'; import { StorageApi } from '@backstage/core-plugin-api'; import { StorageApi as StorageApi_2 } from '@backstage/frontend-plugin-api'; import { StorageValueSnapshot } from '@backstage/core-plugin-api'; -import { TranslationApi } from '@backstage/core-plugin-api/alpha'; -import { TranslationApi as TranslationApi_2 } from '@backstage/frontend-plugin-api'; -import { TranslationRef } from '@backstage/core-plugin-api/alpha'; -import { TranslationSnapshot } from '@backstage/core-plugin-api/alpha'; +import { TranslationApi } from '@backstage/frontend-plugin-api'; +import { TranslationRef } from '@backstage/frontend-plugin-api'; +import { TranslationSnapshot } from '@backstage/frontend-plugin-api'; import { withLogCollector } from '@backstage/test-utils'; // @public @@ -265,11 +264,11 @@ export namespace mockApis { ) => ApiMock; } export function translation(): MockTranslationApi & - MockWithApiFactory; + MockWithApiFactory; export namespace translation { const mock: ( - partialImpl?: Partial | undefined, - ) => ApiMock; + partialImpl?: Partial | undefined, + ) => ApiMock; } } diff --git a/packages/frontend-test-utils/src/apis/TranslationApi/MockTranslationApi.test.tsx b/packages/frontend-test-utils/src/apis/TranslationApi/MockTranslationApi.test.tsx index 4bee969a6d..8c9a15e677 100644 --- a/packages/frontend-test-utils/src/apis/TranslationApi/MockTranslationApi.test.tsx +++ b/packages/frontend-test-utils/src/apis/TranslationApi/MockTranslationApi.test.tsx @@ -14,7 +14,7 @@ * limitations under the License. */ -import { createTranslationRef } from '@backstage/core-plugin-api/alpha'; +import { createTranslationRef } from '@backstage/frontend-plugin-api'; import { MockTranslationApi } from './MockTranslationApi'; describe('MockTranslationApi', () => { diff --git a/packages/frontend-test-utils/src/apis/TranslationApi/MockTranslationApi.ts b/packages/frontend-test-utils/src/apis/TranslationApi/MockTranslationApi.ts index d5fa29ea73..f5112ca175 100644 --- a/packages/frontend-test-utils/src/apis/TranslationApi/MockTranslationApi.ts +++ b/packages/frontend-test-utils/src/apis/TranslationApi/MockTranslationApi.ts @@ -18,7 +18,7 @@ import { TranslationApi, TranslationRef, TranslationSnapshot, -} from '@backstage/core-plugin-api/alpha'; +} from '@backstage/frontend-plugin-api'; import { createInstance as createI18n, type i18n as I18n } from 'i18next'; import ObservableImpl from 'zen-observable'; @@ -32,7 +32,7 @@ import { JsxInterpolator } from '../../../../core-app-api/src/apis/implementatio const DEFAULT_LANGUAGE = 'en'; /** - * Mock implementation of {@link @backstage/core-plugin-api/alpha#TranslationApi}. + * Mock implementation of {@link @backstage/frontend-plugin-api#TranslationApi}. * * @public */ diff --git a/packages/frontend-test-utils/src/apis/mockApis.ts b/packages/frontend-test-utils/src/apis/mockApis.ts index 9e3dce1e3a..78d5c2bf19 100644 --- a/packages/frontend-test-utils/src/apis/mockApis.ts +++ b/packages/frontend-test-utils/src/apis/mockApis.ts @@ -201,7 +201,7 @@ export namespace mockApis { } /** - * Fake implementation of {@link @backstage/core-plugin-api/alpha#TranslationApi}. + * Fake implementation of {@link @backstage/frontend-plugin-api#TranslationApi}. * By default returns the default translation. * * @public @@ -216,14 +216,14 @@ export namespace mockApis { } /** - * Mock helpers for {@link @backstage/core-plugin-api/alpha#TranslationApi}. + * Mock helpers for {@link @backstage/frontend-plugin-api#TranslationApi}. * * @see {@link @backstage/frontend-plugin-api#mockApis.translation} * @public */ export namespace translation { /** - * Creates a mock of {@link @backstage/core-plugin-api/alpha#TranslationApi}. + * Creates a mock of {@link @backstage/frontend-plugin-api#TranslationApi}. * * @public */ diff --git a/plugins/app/src/extensions/AppLanguageApi.ts b/plugins/app/src/extensions/AppLanguageApi.ts index 4f605aa30f..80efa1d9e9 100644 --- a/plugins/app/src/extensions/AppLanguageApi.ts +++ b/plugins/app/src/extensions/AppLanguageApi.ts @@ -16,7 +16,7 @@ // eslint-disable-next-line @backstage/no-relative-monorepo-imports import { AppLanguageSelector } from '../../../../packages/core-app-api/src/apis/implementations/AppLanguageApi'; -import { appLanguageApiRef } from '@backstage/core-plugin-api/alpha'; +import { appLanguageApiRef } from '@backstage/frontend-plugin-api'; import { ApiBlueprint } from '@backstage/frontend-plugin-api'; export const AppLanguageApi = ApiBlueprint.makeWithOverrides({ diff --git a/plugins/app/src/extensions/TranslationsApi.tsx b/plugins/app/src/extensions/TranslationsApi.tsx index a327aba299..c7f259d135 100644 --- a/plugins/app/src/extensions/TranslationsApi.tsx +++ b/plugins/app/src/extensions/TranslationsApi.tsx @@ -21,7 +21,7 @@ import { TranslationBlueprint } from '@backstage/plugin-app-react'; import { appLanguageApiRef, translationApiRef, -} from '@backstage/core-plugin-api/alpha'; +} from '@backstage/frontend-plugin-api'; // eslint-disable-next-line @backstage/no-relative-monorepo-imports import { I18nextTranslationApi } from '../../../../packages/core-app-api/src/apis/implementations/TranslationApi/I18nextTranslationApi';