make .withOverrides have a simplified result type

Signed-off-by: Fredrik Adelöw <freben@gmail.com>
This commit is contained in:
Fredrik Adelöw
2025-12-03 14:58:44 +01:00
parent d5db4cd62f
commit f3f84f1e4b
11 changed files with 77 additions and 192 deletions
+11
View File
@@ -0,0 +1,11 @@
---
'@backstage/plugin-catalog-graph': patch
'@backstage/plugin-api-docs': patch
'@backstage/plugin-techdocs': patch
'@backstage/plugin-catalog': patch
'@backstage/plugin-search': patch
'@backstage/plugin-app': patch
'@backstage/plugin-org': patch
---
Minor extension type updates after frontend API bump
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/frontend-plugin-api': patch
---
Made the return type of `.withOverrides` to be simplified.
+24 -20
View File
@@ -1006,10 +1006,10 @@ export interface ExtensionBlueprint<
},
UFactoryOutput extends ExtensionDataValue<any, any>,
UNewOutput extends ExtensionDataRef,
UParentInputs extends ExtensionDataRef,
TExtraInputs extends {
[inputName in string]: ExtensionInput;
},
UParentInputs extends ExtensionDataRef,
} = {},
>(args: {
name?: TName;
attachTo?: ExtensionDefinitionAttachTo<UParentInputs> &
@@ -1063,26 +1063,30 @@ export interface ExtensionBlueprint<
UFactoryOutput
>;
}): OverridableExtensionDefinition<{
config: (string extends keyof TExtensionConfigSchema
? {}
: {
[key in keyof TExtensionConfigSchema]: z.infer<
ReturnType<TExtensionConfigSchema[key]>
>;
}) &
T['config'];
configInput: (string extends keyof TExtensionConfigSchema
? {}
: z.input<
z.ZodObject<{
[key in keyof TExtensionConfigSchema]: ReturnType<
TExtensionConfigSchema[key]
config: Expand<
(string extends keyof TExtensionConfigSchema
? {}
: {
[key in keyof TExtensionConfigSchema]: z.infer<
ReturnType<TExtensionConfigSchema[key]>
>;
}>
>) &
T['configInput'];
}) &
T['config']
>;
configInput: Expand<
(string extends keyof TExtensionConfigSchema
? {}
: z.input<
z.ZodObject<{
[key in keyof TExtensionConfigSchema]: ReturnType<
TExtensionConfigSchema[key]
>;
}>
>) &
T['configInput']
>;
output: ExtensionDataRef extends UNewOutput ? T['output'] : UNewOutput;
inputs: T['inputs'] & TExtraInputs;
inputs: Expand<T['inputs'] & TExtraInputs>;
kind: T['kind'];
name: string | undefined extends TName ? undefined : TName;
params: T['params'];
@@ -249,8 +249,8 @@ export interface ExtensionBlueprint<
},
UFactoryOutput extends ExtensionDataValue<any, any>,
UNewOutput extends ExtensionDataRef,
TExtraInputs extends { [inputName in string]: ExtensionInput },
UParentInputs extends ExtensionDataRef,
TExtraInputs extends { [inputName in string]: ExtensionInput } = {},
>(args: {
name?: TName;
attachTo?: ExtensionDefinitionAttachTo<UParentInputs> &
@@ -304,26 +304,30 @@ export interface ExtensionBlueprint<
UFactoryOutput
>;
}): OverridableExtensionDefinition<{
config: (string extends keyof TExtensionConfigSchema
? {}
: {
[key in keyof TExtensionConfigSchema]: z.infer<
ReturnType<TExtensionConfigSchema[key]>
>;
}) &
T['config'];
configInput: (string extends keyof TExtensionConfigSchema
? {}
: z.input<
z.ZodObject<{
[key in keyof TExtensionConfigSchema]: ReturnType<
TExtensionConfigSchema[key]
config: Expand<
(string extends keyof TExtensionConfigSchema
? {}
: {
[key in keyof TExtensionConfigSchema]: z.infer<
ReturnType<TExtensionConfigSchema[key]>
>;
}>
>) &
T['configInput'];
}) &
T['config']
>;
configInput: Expand<
(string extends keyof TExtensionConfigSchema
? {}
: z.input<
z.ZodObject<{
[key in keyof TExtensionConfigSchema]: ReturnType<
TExtensionConfigSchema[key]
>;
}>
>) &
T['configInput']
>;
output: ExtensionDataRef extends UNewOutput ? T['output'] : UNewOutput;
inputs: T['inputs'] & TExtraInputs;
inputs: Expand<T['inputs'] & TExtraInputs>;
kind: T['kind'];
name: string | undefined extends TName ? undefined : TName;
params: T['params'];
+1 -12
View File
@@ -12,7 +12,6 @@ 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 { ExtensionInput } from '@backstage/frontend-plugin-api';
import { ExternalRouteRef } from '@backstage/core-plugin-api';
import { IconComponent } from '@backstage/frontend-plugin-api';
import { JSX as JSX_2 } from 'react';
@@ -472,12 +471,10 @@ const _default: OverridableFrontendPlugin<
'page:api-docs': OverridableExtensionDefinition<{
config: {
initiallySelectedFilter: 'all' | 'owned' | 'starred' | undefined;
} & {
path: string | undefined;
};
configInput: {
initiallySelectedFilter?: 'all' | 'owned' | 'starred' | undefined;
} & {
path?: string | undefined;
};
output:
@@ -490,15 +487,7 @@ const _default: OverridableFrontendPlugin<
optional: true;
}
>;
inputs: {
[x: string]: ExtensionInput<
ExtensionDataRef,
{
singleton: boolean;
optional: boolean;
}
>;
};
inputs: {};
kind: 'page';
name: undefined;
params: {
+3 -27
View File
@@ -241,15 +241,7 @@ const appPlugin: OverridableFrontendPlugin<
availableLanguages?: string[] | undefined;
};
output: ExtensionDataRef<AnyApiFactory, 'core.api.factory', {}>;
inputs: {
[x: string]: ExtensionInput<
ExtensionDataRef,
{
singleton: boolean;
optional: boolean;
}
>;
};
inputs: {};
kind: 'api';
name: 'app-language';
params: <
@@ -726,15 +718,7 @@ const appPlugin: OverridableFrontendPlugin<
transientTimeoutMs?: number | undefined;
};
output: ExtensionDataRef<JSX_2.Element, 'core.reactElement', {}>;
inputs: {
[x: string]: ExtensionInput<
ExtensionDataRef,
{
singleton: boolean;
optional: boolean;
}
>;
};
inputs: {};
kind: 'app-root-element';
name: 'alert-display';
params: {
@@ -745,15 +729,7 @@ const appPlugin: OverridableFrontendPlugin<
config: {};
configInput: {};
output: ExtensionDataRef<JSX_2.Element, 'core.reactElement', {}>;
inputs: {
[x: string]: ExtensionInput<
ExtensionDataRef,
{
singleton: boolean;
optional: boolean;
}
>;
};
inputs: {};
kind: 'app-root-element';
name: 'dialog-display';
params: {
+2 -23
View File
@@ -11,7 +11,6 @@ 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 { ExtensionInput } from '@backstage/frontend-plugin-api';
import { ExternalRouteRef } from '@backstage/core-plugin-api';
import { JSX as JSX_2 } from 'react';
import { OverridableExtensionDefinition } from '@backstage/frontend-plugin-api';
@@ -92,7 +91,6 @@ const _default: OverridableFrontendPlugin<
curve: 'curveStepBefore' | 'curveMonotoneX' | undefined;
title: string | undefined;
height: number | undefined;
} & {
filter: EntityPredicate | undefined;
type: 'content' | 'summary' | 'info' | undefined;
};
@@ -108,7 +106,6 @@ const _default: OverridableFrontendPlugin<
mergeRelations?: boolean | undefined;
relationPairs?: [string, string][] | undefined;
unidirectional?: boolean | undefined;
} & {
filter?: EntityPredicate | undefined;
type?: 'content' | 'summary' | 'info' | undefined;
};
@@ -135,15 +132,7 @@ const _default: OverridableFrontendPlugin<
optional: true;
}
>;
inputs: {
[x: string]: ExtensionInput<
ExtensionDataRef,
{
singleton: boolean;
optional: boolean;
}
>;
};
inputs: {};
kind: 'entity-card';
name: 'relations';
params: {
@@ -167,7 +156,6 @@ const _default: OverridableFrontendPlugin<
relations: string[] | undefined;
relationPairs: [string, string][] | undefined;
zoom: 'disabled' | 'enabled' | 'enable-on-click' | undefined;
} & {
path: string | undefined;
};
configInput: {
@@ -184,7 +172,6 @@ const _default: OverridableFrontendPlugin<
selectedRelations?: string[] | undefined;
selectedKinds?: string[] | undefined;
showFilters?: boolean | undefined;
} & {
path?: string | undefined;
};
output:
@@ -197,15 +184,7 @@ const _default: OverridableFrontendPlugin<
optional: true;
}
>;
inputs: {
[x: string]: ExtensionInput<
ExtensionDataRef,
{
singleton: boolean;
optional: boolean;
}
>;
};
inputs: {};
kind: 'page';
name: undefined;
params: {
+3 -31
View File
@@ -197,15 +197,7 @@ const _default: OverridableFrontendPlugin<
initialFilter?: string | undefined;
};
output: ExtensionDataRef<JSX_2.Element, 'core.reactElement', {}>;
inputs: {
[x: string]: ExtensionInput<
ExtensionDataRef,
{
singleton: boolean;
optional: boolean;
}
>;
};
inputs: {};
kind: 'catalog-filter';
name: 'kind';
params: {
@@ -231,15 +223,7 @@ const _default: OverridableFrontendPlugin<
initialFilter?: 'all' | 'owned' | 'starred' | undefined;
};
output: ExtensionDataRef<JSX_2.Element, 'core.reactElement', {}>;
inputs: {
[x: string]: ExtensionInput<
ExtensionDataRef,
{
singleton: boolean;
optional: boolean;
}
>;
};
inputs: {};
kind: 'catalog-filter';
name: 'list';
params: {
@@ -254,15 +238,7 @@ const _default: OverridableFrontendPlugin<
mode?: 'all' | 'owners-only' | undefined;
};
output: ExtensionDataRef<JSX_2.Element, 'core.reactElement', {}>;
inputs: {
[x: string]: ExtensionInput<
ExtensionDataRef,
{
singleton: boolean;
optional: boolean;
}
>;
};
inputs: {};
kind: 'catalog-filter';
name: 'mode';
params: {
@@ -995,7 +971,6 @@ const _default: OverridableFrontendPlugin<
offset?: number | undefined;
limit?: number | undefined;
};
} & {
path: string | undefined;
};
configInput: {
@@ -1007,7 +982,6 @@ const _default: OverridableFrontendPlugin<
limit?: number | undefined;
}
| undefined;
} & {
path?: string | undefined;
};
output:
@@ -1048,7 +1022,6 @@ const _default: OverridableFrontendPlugin<
}
>[]
| undefined;
} & {
path: string | undefined;
};
configInput: {
@@ -1060,7 +1033,6 @@ const _default: OverridableFrontendPlugin<
}
>[]
| undefined;
} & {
path?: string | undefined;
};
output:
+3 -34
View File
@@ -7,7 +7,6 @@ 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 { ExtensionInput } from '@backstage/frontend-plugin-api';
import { ExternalRouteRef } from '@backstage/core-plugin-api';
import { JSX as JSX_2 } from 'react';
import { OverridableExtensionDefinition } from '@backstage/frontend-plugin-api';
@@ -66,14 +65,12 @@ const _default: OverridableFrontendPlugin<
config: {
initialRelationAggregation: 'direct' | 'aggregated' | undefined;
showAggregateMembersToggle: boolean | undefined;
} & {
filter: EntityPredicate | undefined;
type: 'content' | 'summary' | 'info' | undefined;
};
configInput: {
showAggregateMembersToggle?: boolean | undefined;
initialRelationAggregation?: 'direct' | 'aggregated' | undefined;
} & {
filter?: EntityPredicate | undefined;
type?: 'content' | 'summary' | 'info' | undefined;
};
@@ -100,15 +97,7 @@ const _default: OverridableFrontendPlugin<
optional: true;
}
>;
inputs: {
[x: string]: ExtensionInput<
ExtensionDataRef,
{
singleton: boolean;
optional: boolean;
}
>;
};
inputs: {};
kind: 'entity-card';
name: 'members-list';
params: {
@@ -121,14 +110,12 @@ const _default: OverridableFrontendPlugin<
config: {
initialRelationAggregation: 'direct' | 'aggregated' | undefined;
showAggregateMembersToggle: boolean | undefined;
} & {
filter: EntityPredicate | undefined;
type: 'content' | 'summary' | 'info' | undefined;
};
configInput: {
showAggregateMembersToggle?: boolean | undefined;
initialRelationAggregation?: 'direct' | 'aggregated' | undefined;
} & {
filter?: EntityPredicate | undefined;
type?: 'content' | 'summary' | 'info' | undefined;
};
@@ -155,15 +142,7 @@ const _default: OverridableFrontendPlugin<
optional: true;
}
>;
inputs: {
[x: string]: ExtensionInput<
ExtensionDataRef,
{
singleton: boolean;
optional: boolean;
}
>;
};
inputs: {};
kind: 'entity-card';
name: 'ownership';
params: {
@@ -176,14 +155,12 @@ const _default: OverridableFrontendPlugin<
config: {
maxRelations: number | undefined;
hideIcons: boolean;
} & {
filter: EntityPredicate | undefined;
type: 'content' | 'summary' | 'info' | undefined;
};
configInput: {
hideIcons?: boolean | undefined;
maxRelations?: number | undefined;
} & {
filter?: EntityPredicate | undefined;
type?: 'content' | 'summary' | 'info' | undefined;
};
@@ -210,15 +187,7 @@ const _default: OverridableFrontendPlugin<
optional: true;
}
>;
inputs: {
[x: string]: ExtensionInput<
ExtensionDataRef,
{
singleton: boolean;
optional: boolean;
}
>;
};
inputs: {};
kind: 'entity-card';
name: 'user-profile';
params: {
-4
View File
@@ -67,12 +67,10 @@ const _default: OverridableFrontendPlugin<
'page:search': OverridableExtensionDefinition<{
config: {
noTrack: boolean;
} & {
path: string | undefined;
};
configInput: {
noTrack?: boolean | undefined;
} & {
path?: string | undefined;
};
output:
@@ -187,12 +185,10 @@ export const searchNavItem: OverridableExtensionDefinition<{
export const searchPage: OverridableExtensionDefinition<{
config: {
noTrack: boolean;
} & {
path: string | undefined;
};
configInput: {
noTrack?: boolean | undefined;
} & {
path?: string | undefined;
};
output:
+2 -22
View File
@@ -308,7 +308,6 @@ const _default: OverridableFrontendPlugin<
lineClamp: number;
asLink: boolean;
asListItem: boolean;
} & {
noTrack: boolean;
};
configInput: {
@@ -316,7 +315,6 @@ const _default: OverridableFrontendPlugin<
lineClamp?: number | undefined;
asListItem?: boolean | undefined;
asLink?: boolean | undefined;
} & {
noTrack?: boolean | undefined;
};
output: ExtensionDataRef<
@@ -328,15 +326,7 @@ const _default: OverridableFrontendPlugin<
'search.search-result-list-item.item',
{}
>;
inputs: {
[x: string]: ExtensionInput<
ExtensionDataRef,
{
singleton: boolean;
optional: boolean;
}
>;
};
inputs: {};
kind: 'search-result-list-item';
name: undefined;
params: SearchResultListItemBlueprintParams;
@@ -352,7 +342,6 @@ export const techDocsSearchResultListItemExtension: OverridableExtensionDefiniti
lineClamp: number;
asLink: boolean;
asListItem: boolean;
} & {
noTrack: boolean;
};
configInput: {
@@ -360,7 +349,6 @@ export const techDocsSearchResultListItemExtension: OverridableExtensionDefiniti
lineClamp?: number | undefined;
asListItem?: boolean | undefined;
asLink?: boolean | undefined;
} & {
noTrack?: boolean | undefined;
};
output: ExtensionDataRef<
@@ -372,15 +360,7 @@ export const techDocsSearchResultListItemExtension: OverridableExtensionDefiniti
'search.search-result-list-item.item',
{}
>;
inputs: {
[x: string]: ExtensionInput<
ExtensionDataRef,
{
singleton: boolean;
optional: boolean;
}
>;
};
inputs: {};
kind: 'search-result-list-item';
name: undefined;
params: SearchResultListItemBlueprintParams;