From 6f8a093ac6094cbfce28e467eb9f2c34d20eb46b Mon Sep 17 00:00:00 2001 From: benjdlambert Date: Mon, 28 Jul 2025 16:40:34 +0200 Subject: [PATCH] feat: added opaque type helper Signed-off-by: benjdlambert --- .../src/wiring/InternalComponentRef.ts | 41 +++++++++++++++++++ .../frontend-internal/src/wiring/index.ts | 1 + 2 files changed, 42 insertions(+) create mode 100644 packages/frontend-internal/src/wiring/InternalComponentRef.ts diff --git a/packages/frontend-internal/src/wiring/InternalComponentRef.ts b/packages/frontend-internal/src/wiring/InternalComponentRef.ts new file mode 100644 index 0000000000..93cdf38b1a --- /dev/null +++ b/packages/frontend-internal/src/wiring/InternalComponentRef.ts @@ -0,0 +1,41 @@ +/* + * 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 { ComponentRef } from '@backstage/frontend-plugin-api'; +import { OpaqueType } from '@internal/opaque'; + +export const OpaqueComponentRef = OpaqueType.create<{ + public: ComponentRef; + versions: { + readonly version: 'v1'; + readonly options: + | { + mode: 'sync'; + transformProps?: (props: object) => object; + defaultComponent?: (props: object) => JSX.Element | null; + } + | { + mode: 'async'; + transformProps?: (props: object) => object; + defaultComponent?: () => Promise< + (props: object) => JSX.Element | null + >; + }; + }; +}>({ + versions: ['v1'], + type: '@backstage/ComponentRef', +}); diff --git a/packages/frontend-internal/src/wiring/index.ts b/packages/frontend-internal/src/wiring/index.ts index 6a7cf35e27..bc2314f25e 100644 --- a/packages/frontend-internal/src/wiring/index.ts +++ b/packages/frontend-internal/src/wiring/index.ts @@ -15,5 +15,6 @@ */ export { createExtensionDataContainer } from './createExtensionDataContainer'; +export { OpaqueComponentRef } from './InternalComponentRef'; export { OpaqueExtensionDefinition } from './InternalExtensionDefinition'; export { OpaqueFrontendPlugin } from './InternalFrontendPlugin';