diff --git a/.changeset/thirty-hoops-own.md b/.changeset/thirty-hoops-own.md new file mode 100644 index 0000000000..88b55d5f98 --- /dev/null +++ b/.changeset/thirty-hoops-own.md @@ -0,0 +1,5 @@ +--- +'@backstage/frontend-plugin-api': patch +--- + +Updated to `ExtensionInput` to make all type parameters optional. diff --git a/packages/frontend-app-api/src/tree/instantiateAppNodeTree.test.ts b/packages/frontend-app-api/src/tree/instantiateAppNodeTree.test.ts index 13ec6e8a59..a07fdf352d 100644 --- a/packages/frontend-app-api/src/tree/instantiateAppNodeTree.test.ts +++ b/packages/frontend-app-api/src/tree/instantiateAppNodeTree.test.ts @@ -787,14 +787,8 @@ describe('instantiateAppNodeTree', () => { inputs: { [name in string]: | undefined - | ResolvedExtensionInput< - ExtensionInput - > - | Array< - ResolvedExtensionInput< - ExtensionInput - > - >; + | ResolvedExtensionInput + | Array>; }; }) { return [ diff --git a/packages/frontend-app-api/src/tree/instantiateAppNodeTree.ts b/packages/frontend-app-api/src/tree/instantiateAppNodeTree.ts index 39fc88c19a..04082f8520 100644 --- a/packages/frontend-app-api/src/tree/instantiateAppNodeTree.ts +++ b/packages/frontend-app-api/src/tree/instantiateAppNodeTree.ts @@ -243,20 +243,10 @@ function resolveV1Inputs( } function resolveV2Inputs( - inputMap: { - [inputName in string]: ExtensionInput< - ExtensionDataRef, - { optional: boolean; singleton: boolean } - >; - }, + inputMap: { [inputName in string]: ExtensionInput }, attachments: ReadonlyMap, parentCollector: ErrorCollector<{ node: AppNode }>, -): ResolvedExtensionInputs<{ - [inputName in string]: ExtensionInput< - ExtensionDataRef, - { optional: boolean; singleton: boolean } - >; -}> { +): ResolvedExtensionInputs<{ [inputName in string]: ExtensionInput }> { return mapValues(inputMap, (input, inputName) => { const attachedNodes = attachments.get(inputName) ?? []; const collector = parentCollector.child({ inputName }); @@ -297,12 +287,7 @@ function resolveV2Inputs( collector, ), ); - }) as ResolvedExtensionInputs<{ - [inputName in string]: ExtensionInput< - ExtensionDataRef, - { optional: boolean; singleton: boolean } - >; - }>; + }) as ResolvedExtensionInputs<{ [inputName in string]: ExtensionInput }>; } /** @internal */ diff --git a/packages/frontend-internal/src/wiring/InternalExtensionDefinition.ts b/packages/frontend-internal/src/wiring/InternalExtensionDefinition.ts index 83d037902b..08f787a4ae 100644 --- a/packages/frontend-internal/src/wiring/InternalExtensionDefinition.ts +++ b/packages/frontend-internal/src/wiring/InternalExtensionDefinition.ts @@ -70,22 +70,14 @@ export const OpaqueExtensionDefinition = OpaqueType.create<{ readonly attachTo: ExtensionAttachToSpec; readonly disabled: boolean; readonly configSchema?: PortableSchema; - readonly inputs: { - [inputName in string]: ExtensionInput< - ExtensionDataRef, - { optional: boolean; singleton: boolean } - >; - }; + readonly inputs: { [inputName in string]: ExtensionInput }; readonly output: Array; factory(context: { node: AppNode; apis: ApiHolder; config: object; inputs: ResolvedExtensionInputs<{ - [inputName in string]: ExtensionInput< - ExtensionDataRef, - { optional: boolean; singleton: boolean } - >; + [inputName in string]: ExtensionInput; }>; }): Iterable>; }; diff --git a/packages/frontend-plugin-api/report.api.md b/packages/frontend-plugin-api/report.api.md index 52a50659b6..b7c5b08528 100644 --- a/packages/frontend-plugin-api/report.api.md +++ b/packages/frontend-plugin-api/report.api.md @@ -399,13 +399,7 @@ export { createApiRef }; export function createExtension< UOutput extends ExtensionDataRef, TInputs extends { - [inputName in string]: ExtensionInput< - ExtensionDataRef, - { - optional: boolean; - singleton: boolean; - } - >; + [inputName in string]: ExtensionInput; }, TConfigSchema extends { [key: string]: (zImpl: typeof z) => z.ZodType; @@ -453,13 +447,7 @@ export function createExtensionBlueprint< TParams extends object | ExtensionBlueprintDefineParams, UOutput extends ExtensionDataRef, TInputs extends { - [inputName in string]: ExtensionInput< - ExtensionDataRef, - { - optional: boolean; - singleton: boolean; - } - >; + [inputName in string]: ExtensionInput; }, TConfigSchema extends { [key in string]: (zImpl: typeof z) => z.ZodType; @@ -511,13 +499,7 @@ export type CreateExtensionBlueprintOptions< TParams extends object | ExtensionBlueprintDefineParams, UOutput extends ExtensionDataRef, TInputs extends { - [inputName in string]: ExtensionInput< - ExtensionDataRef, - { - optional: boolean; - singleton: boolean; - } - >; + [inputName in string]: ExtensionInput; }, TConfigSchema extends { [key in string]: (zImpl: typeof z) => z.ZodType; @@ -601,13 +583,7 @@ export type CreateExtensionOptions< TName extends string | undefined, UOutput extends ExtensionDataRef, TInputs extends { - [inputName in string]: ExtensionInput< - ExtensionDataRef, - { - optional: boolean; - singleton: boolean; - } - >; + [inputName in string]: ExtensionInput; }, TConfigSchema extends { [key: string]: (zImpl: typeof z) => z.ZodType; @@ -909,13 +885,7 @@ export interface ExtensionBlueprint< UFactoryOutput extends ExtensionDataValue, UNewOutput extends ExtensionDataRef, TExtraInputs extends { - [inputName in string]: ExtensionInput< - ExtensionDataRef, - { - optional: boolean; - singleton: boolean; - } - >; + [inputName in string]: ExtensionInput; }, >(args: { name?: TName; @@ -1008,13 +978,7 @@ export type ExtensionBlueprintParameters = { }; output?: ExtensionDataRef; inputs?: { - [KName in string]: ExtensionInput< - ExtensionDataRef, - { - optional: boolean; - singleton: boolean; - } - >; + [KName in string]: ExtensionInput; }; dataRefs?: { [name in string]: ExtensionDataRef; @@ -1116,13 +1080,7 @@ export type ExtensionDefinition< UFactoryOutput extends ExtensionDataValue, UNewOutput extends ExtensionDataRef, TExtraInputs extends { - [inputName in string]: ExtensionInput< - ExtensionDataRef, - { - optional: boolean; - singleton: boolean; - } - >; + [inputName in string]: ExtensionInput; }, TParamsInput extends AnyParamsInput_2>, >( @@ -1222,13 +1180,7 @@ export type ExtensionDefinitionParameters = { }; output?: ExtensionDataRef; inputs?: { - [KName in string]: ExtensionInput< - ExtensionDataRef, - { - optional: boolean; - singleton: boolean; - } - >; + [KName in string]: ExtensionInput; }; params?: object | ExtensionBlueprintDefineParams; }; @@ -1253,10 +1205,13 @@ export interface ExtensionInput< { optional?: true; } - >, + > = ExtensionDataRef, TConfig extends { singleton: boolean; optional: boolean; + } = { + singleton: boolean; + optional: boolean; }, > { // (undocumented) @@ -1625,18 +1580,17 @@ export const Progress: { export type ProgressProps = {}; // @public -export type ResolvedExtensionInput< - TExtensionInput extends ExtensionInput, -> = TExtensionInput['extensionData'] extends Array - ? { - node: AppNode; - } & ExtensionDataContainer - : never; +export type ResolvedExtensionInput = + TExtensionInput['extensionData'] extends Array + ? { + node: AppNode; + } & ExtensionDataContainer + : never; // @public export type ResolvedExtensionInputs< TInputs extends { - [name in string]: ExtensionInput; + [name in string]: ExtensionInput; }, > = { [InputName in keyof TInputs]: false extends TInputs[InputName]['config']['singleton'] diff --git a/packages/frontend-plugin-api/src/wiring/createExtension.ts b/packages/frontend-plugin-api/src/wiring/createExtension.ts index 0c0b75a572..8ed4b8b259 100644 --- a/packages/frontend-plugin-api/src/wiring/createExtension.ts +++ b/packages/frontend-plugin-api/src/wiring/createExtension.ts @@ -44,13 +44,12 @@ export const ctxParamsSymbol = Symbol('params'); * Convert a single extension input into a matching resolved input. * @public */ -export type ResolvedExtensionInput< - TExtensionInput extends ExtensionInput, -> = TExtensionInput['extensionData'] extends Array - ? { - node: AppNode; - } & ExtensionDataContainer - : never; +export type ResolvedExtensionInput = + TExtensionInput['extensionData'] extends Array + ? { + node: AppNode; + } & ExtensionDataContainer + : never; /** * Converts an extension input map into a matching collection of resolved inputs. @@ -58,7 +57,7 @@ export type ResolvedExtensionInput< */ export type ResolvedExtensionInputs< TInputs extends { - [name in string]: ExtensionInput; + [name in string]: ExtensionInput; }, > = { [InputName in keyof TInputs]: false extends TInputs[InputName]['config']['singleton'] @@ -123,12 +122,7 @@ export type CreateExtensionOptions< TKind extends string | undefined, TName extends string | undefined, UOutput extends ExtensionDataRef, - TInputs extends { - [inputName in string]: ExtensionInput< - ExtensionDataRef, - { optional: boolean; singleton: boolean } - >; - }, + TInputs extends { [inputName in string]: ExtensionInput }, TConfigSchema extends { [key: string]: (zImpl: typeof z) => z.ZodType }, UFactoryOutput extends ExtensionDataValue, > = { @@ -158,12 +152,7 @@ export type ExtensionDefinitionParameters = { configInput?: { [K in string]: any }; config?: { [K in string]: any }; output?: ExtensionDataRef; - inputs?: { - [KName in string]: ExtensionInput< - ExtensionDataRef, - { optional: boolean; singleton: boolean } - >; - }; + inputs?: { [KName in string]: ExtensionInput }; params?: object | ExtensionBlueprintDefineParams; }; @@ -194,12 +183,7 @@ export type ExtensionDefinition< }, UFactoryOutput extends ExtensionDataValue, UNewOutput extends ExtensionDataRef, - TExtraInputs extends { - [inputName in string]: ExtensionInput< - ExtensionDataRef, - { optional: boolean; singleton: boolean } - >; - }, + TExtraInputs extends { [inputName in string]: ExtensionInput }, TParamsInput extends AnyParamsInput>, >( args: Expand< @@ -323,12 +307,7 @@ export type ExtensionDefinition< */ export function createExtension< UOutput extends ExtensionDataRef, - TInputs extends { - [inputName in string]: ExtensionInput< - ExtensionDataRef, - { optional: boolean; singleton: boolean } - >; - }, + TInputs extends { [inputName in string]: ExtensionInput }, TConfigSchema extends { [key: string]: (zImpl: typeof z) => z.ZodType }, UFactoryOutput extends ExtensionDataValue, const TKind extends string | undefined = undefined, diff --git a/packages/frontend-plugin-api/src/wiring/createExtensionBlueprint.ts b/packages/frontend-plugin-api/src/wiring/createExtensionBlueprint.ts index 1a24eed712..f8dd55ca80 100644 --- a/packages/frontend-plugin-api/src/wiring/createExtensionBlueprint.ts +++ b/packages/frontend-plugin-api/src/wiring/createExtensionBlueprint.ts @@ -103,12 +103,7 @@ export type CreateExtensionBlueprintOptions< TKind extends string, TParams extends object | ExtensionBlueprintDefineParams, UOutput extends ExtensionDataRef, - TInputs extends { - [inputName in string]: ExtensionInput< - ExtensionDataRef, - { optional: boolean; singleton: boolean } - >; - }, + TInputs extends { [inputName in string]: ExtensionInput }, TConfigSchema extends { [key in string]: (zImpl: typeof z) => z.ZodType }, UFactoryOutput extends ExtensionDataValue, TDataRefs extends { [name in string]: ExtensionDataRef }, @@ -186,12 +181,7 @@ export type ExtensionBlueprintParameters = { configInput?: { [K in string]: any }; config?: { [K in string]: any }; output?: ExtensionDataRef; - inputs?: { - [KName in string]: ExtensionInput< - ExtensionDataRef, - { optional: boolean; singleton: boolean } - >; - }; + inputs?: { [KName in string]: ExtensionInput }; dataRefs?: { [name in string]: ExtensionDataRef }; }; @@ -254,12 +244,7 @@ export interface ExtensionBlueprint< }, UFactoryOutput extends ExtensionDataValue, UNewOutput extends ExtensionDataRef, - TExtraInputs extends { - [inputName in string]: ExtensionInput< - ExtensionDataRef, - { optional: boolean; singleton: boolean } - >; - }, + TExtraInputs extends { [inputName in string]: ExtensionInput }, >(args: { name?: TName; attachTo?: ExtensionAttachToSpec; @@ -455,12 +440,7 @@ function unwrapParams( export function createExtensionBlueprint< TParams extends object | ExtensionBlueprintDefineParams, UOutput extends ExtensionDataRef, - TInputs extends { - [inputName in string]: ExtensionInput< - ExtensionDataRef, - { optional: boolean; singleton: boolean } - >; - }, + TInputs extends { [inputName in string]: ExtensionInput }, TConfigSchema extends { [key in string]: (zImpl: typeof z) => z.ZodType }, UFactoryOutput extends ExtensionDataValue, TKind extends string, diff --git a/packages/frontend-plugin-api/src/wiring/createExtensionInput.ts b/packages/frontend-plugin-api/src/wiring/createExtensionInput.ts index 7209e6f647..24e14c45b2 100644 --- a/packages/frontend-plugin-api/src/wiring/createExtensionInput.ts +++ b/packages/frontend-plugin-api/src/wiring/createExtensionInput.ts @@ -18,8 +18,15 @@ import { ExtensionDataRef } from './createExtensionDataRef'; /** @public */ export interface ExtensionInput< - UExtensionData extends ExtensionDataRef, - TConfig extends { singleton: boolean; optional: boolean }, + UExtensionData extends ExtensionDataRef< + unknown, + string, + { optional?: true } + > = ExtensionDataRef, + TConfig extends { singleton: boolean; optional: boolean } = { + singleton: boolean; + optional: boolean; + }, > { $$type: '@backstage/ExtensionInput'; extensionData: Array; diff --git a/packages/frontend-plugin-api/src/wiring/resolveExtensionDefinition.ts b/packages/frontend-plugin-api/src/wiring/resolveExtensionDefinition.ts index a5b6859e1a..a0a9a52dd3 100644 --- a/packages/frontend-plugin-api/src/wiring/resolveExtensionDefinition.ts +++ b/packages/frontend-plugin-api/src/wiring/resolveExtensionDefinition.ts @@ -68,22 +68,14 @@ export type InternalExtension = Extension< } | { readonly version: 'v2'; - readonly inputs: { - [inputName in string]: ExtensionInput< - ExtensionDataRef, - { optional: boolean; singleton: boolean } - >; - }; + readonly inputs: { [inputName in string]: ExtensionInput }; readonly output: Array; factory(options: { apis: ApiHolder; node: AppNode; config: TConfig; inputs: ResolvedExtensionInputs<{ - [inputName in string]: ExtensionInput< - ExtensionDataRef, - { optional: boolean; singleton: boolean } - >; + [inputName in string]: ExtensionInput; }>; }): Iterable>; } diff --git a/packages/frontend-plugin-api/src/wiring/resolveInputOverrides.ts b/packages/frontend-plugin-api/src/wiring/resolveInputOverrides.ts index 8ffec893ee..b46bb426fa 100644 --- a/packages/frontend-plugin-api/src/wiring/resolveInputOverrides.ts +++ b/packages/frontend-plugin-api/src/wiring/resolveInputOverrides.ts @@ -19,7 +19,6 @@ import { Expand } from '@backstage/types'; import { ResolvedExtensionInput } from './createExtension'; import { createExtensionDataContainer } from '@internal/frontend'; import { - ExtensionDataRef, ExtensionDataRefToValue, ExtensionDataValue, } from './createExtensionDataRef'; @@ -28,16 +27,8 @@ import { ExtensionDataContainer } from './types'; /** @ignore */ export type ResolvedInputValueOverrides< - TInputs extends { - [inputName in string]: ExtensionInput< - ExtensionDataRef, - { optional: boolean; singleton: boolean } - >; - } = { - [inputName in string]: ExtensionInput< - ExtensionDataRef, - { optional: boolean; singleton: boolean } - >; + TInputs extends { [inputName in string]: ExtensionInput } = { + [inputName in string]: ExtensionInput; }, > = Expand< { @@ -90,12 +81,7 @@ function expectItem(value: T | T[]): T { /** @internal */ export function resolveInputOverrides( - declaredInputs?: { - [inputName in string]: ExtensionInput< - ExtensionDataRef, - { optional: boolean; singleton: boolean } - >; - }, + declaredInputs?: { [inputName in string]: ExtensionInput }, inputs?: { [KName in string]?: | ({ node: AppNode } & ExtensionDataContainer) diff --git a/plugins/api-docs/report-alpha.api.md b/plugins/api-docs/report-alpha.api.md index 4248b1b42c..43c45c1a1d 100644 --- a/plugins/api-docs/report-alpha.api.md +++ b/plugins/api-docs/report-alpha.api.md @@ -490,8 +490,8 @@ const _default: OverridableFrontendPlugin< [x: string]: ExtensionInput< ExtensionDataRef, { - optional: boolean; singleton: boolean; + optional: boolean; } >; }; diff --git a/plugins/app/report.api.md b/plugins/app/report.api.md index d12ada15b4..595cc9bc19 100644 --- a/plugins/app/report.api.md +++ b/plugins/app/report.api.md @@ -717,8 +717,8 @@ const appPlugin: OverridableFrontendPlugin< [x: string]: ExtensionInput< ExtensionDataRef, { - optional: boolean; singleton: boolean; + optional: boolean; } >; }; @@ -736,8 +736,8 @@ const appPlugin: OverridableFrontendPlugin< [x: string]: ExtensionInput< ExtensionDataRef, { - optional: boolean; singleton: boolean; + optional: boolean; } >; }; diff --git a/plugins/catalog-graph/report-alpha.api.md b/plugins/catalog-graph/report-alpha.api.md index edf84e936a..112df3aac6 100644 --- a/plugins/catalog-graph/report-alpha.api.md +++ b/plugins/catalog-graph/report-alpha.api.md @@ -136,8 +136,8 @@ const _default: OverridableFrontendPlugin< [x: string]: ExtensionInput< ExtensionDataRef, { - optional: boolean; singleton: boolean; + optional: boolean; } >; }; @@ -198,8 +198,8 @@ const _default: OverridableFrontendPlugin< [x: string]: ExtensionInput< ExtensionDataRef, { - optional: boolean; singleton: boolean; + optional: boolean; } >; }; diff --git a/plugins/catalog/report-alpha.api.md b/plugins/catalog/report-alpha.api.md index 4f581add67..b917d74542 100644 --- a/plugins/catalog/report-alpha.api.md +++ b/plugins/catalog/report-alpha.api.md @@ -194,8 +194,8 @@ const _default: OverridableFrontendPlugin< [x: string]: ExtensionInput< ExtensionDataRef, { - optional: boolean; singleton: boolean; + optional: boolean; } >; }; @@ -228,8 +228,8 @@ const _default: OverridableFrontendPlugin< [x: string]: ExtensionInput< ExtensionDataRef, { - optional: boolean; singleton: boolean; + optional: boolean; } >; }; @@ -251,8 +251,8 @@ const _default: OverridableFrontendPlugin< [x: string]: ExtensionInput< ExtensionDataRef, { - optional: boolean; singleton: boolean; + optional: boolean; } >; }; diff --git a/plugins/org/report-alpha.api.md b/plugins/org/report-alpha.api.md index 3f8fdca05d..8cefd7dd11 100644 --- a/plugins/org/report-alpha.api.md +++ b/plugins/org/report-alpha.api.md @@ -104,8 +104,8 @@ const _default: OverridableFrontendPlugin< [x: string]: ExtensionInput< ExtensionDataRef, { - optional: boolean; singleton: boolean; + optional: boolean; } >; }; @@ -159,8 +159,8 @@ const _default: OverridableFrontendPlugin< [x: string]: ExtensionInput< ExtensionDataRef, { - optional: boolean; singleton: boolean; + optional: boolean; } >; }; @@ -214,8 +214,8 @@ const _default: OverridableFrontendPlugin< [x: string]: ExtensionInput< ExtensionDataRef, { - optional: boolean; singleton: boolean; + optional: boolean; } >; }; diff --git a/plugins/techdocs/report-alpha.api.md b/plugins/techdocs/report-alpha.api.md index 7681810d6c..fe29dfbad4 100644 --- a/plugins/techdocs/report-alpha.api.md +++ b/plugins/techdocs/report-alpha.api.md @@ -81,8 +81,8 @@ const _default: OverridableFrontendPlugin< [x: string]: ExtensionInput< ExtensionDataRef, { - optional: boolean; singleton: boolean; + optional: boolean; } >; }; @@ -330,8 +330,8 @@ const _default: OverridableFrontendPlugin< [x: string]: ExtensionInput< ExtensionDataRef, { - optional: boolean; singleton: boolean; + optional: boolean; } >; }; @@ -373,8 +373,8 @@ export const techDocsSearchResultListItemExtension: ExtensionDefinition<{ [x: string]: ExtensionInput< ExtensionDataRef, { - optional: boolean; singleton: boolean; + optional: boolean; } >; };