Merge pull request #30710 from backstage/rugvip/noany

frontend-plugin-api: get rid of AnyExtensionDataRef
This commit is contained in:
Patrik Oldsberg
2025-08-04 17:10:34 +02:00
committed by GitHub
20 changed files with 130 additions and 147 deletions
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/frontend-plugin-api': patch
---
Added added defaults for all type parameters of `ExtensionDataRef` and deprecated `AnyExtensionDataRef`, as it is now redundant.
@@ -15,9 +15,9 @@
*/
import {
AnyExtensionDataRef,
AppNode,
Extension,
ExtensionDataRef,
ExtensionInput,
PortableSchema,
ResolvedExtensionInput,
@@ -89,7 +89,7 @@ function makeInstanceWithId<TConfig, TConfigInput>(
}
function createV1ExtensionInput(
extensionData: Record<string, AnyExtensionDataRef>,
extensionData: Record<string, ExtensionDataRef>,
options: { singleton?: boolean; optional?: boolean } = {},
) {
return {
@@ -107,7 +107,7 @@ function createV1Extension(opts: {
name?: string;
attachTo?: { id: string; input: string };
inputs?: Record<string, ReturnType<typeof createV1ExtensionInput>>;
output: Record<string, AnyExtensionDataRef>;
output: Record<string, ExtensionDataRef>;
configSchema?: PortableSchema<any, any>;
factory: (ctx: { inputs: any; config: any }) => any;
}): Extension<any, any> {
@@ -15,7 +15,6 @@
*/
import {
AnyExtensionDataRef,
ApiHolder,
ExtensionDataContainer,
ExtensionDataRef,
@@ -35,7 +34,7 @@ type Mutable<T> = {
function resolveV1InputDataMap(
dataMap: {
[name in string]: AnyExtensionDataRef;
[name in string]: ExtensionDataRef;
},
attachment: AppNode,
inputName: string,
@@ -61,10 +60,10 @@ function resolveV1InputDataMap(
}
function resolveInputDataContainer(
extensionData: Array<AnyExtensionDataRef>,
extensionData: Array<ExtensionDataRef>,
attachment: AppNode,
inputName: string,
): { node: AppNode } & ExtensionDataContainer<AnyExtensionDataRef> {
): { node: AppNode } & ExtensionDataContainer<ExtensionDataRef> {
const dataMap = new Map<string, unknown>();
for (const ref of extensionData) {
@@ -105,7 +104,7 @@ function resolveInputDataContainer(
};
}
},
} as { node: AppNode } & ExtensionDataContainer<AnyExtensionDataRef>;
} as { node: AppNode } & ExtensionDataContainer<ExtensionDataRef>;
}
function reportUndeclaredAttachments(
@@ -141,7 +140,7 @@ function resolveV1Inputs(
[inputName in string]: {
$$type: '@backstage/ExtensionInput';
extensionData: {
[name in string]: AnyExtensionDataRef;
[name in string]: ExtensionDataRef;
};
config: { optional: boolean; singleton: boolean };
};
@@ -194,14 +193,14 @@ function resolveV1Inputs(
function resolveV2Inputs(
inputMap: {
[inputName in string]: ExtensionInput<
AnyExtensionDataRef,
ExtensionDataRef,
{ optional: boolean; singleton: boolean }
>;
},
attachments: ReadonlyMap<string, AppNode[]>,
): ResolvedExtensionInputs<{
[inputName in string]: ExtensionInput<
AnyExtensionDataRef,
ExtensionDataRef,
{ optional: boolean; singleton: boolean }
>;
}> {
@@ -236,7 +235,7 @@ function resolveV2Inputs(
);
}) as ResolvedExtensionInputs<{
[inputName in string]: ExtensionInput<
AnyExtensionDataRef,
ExtensionDataRef,
{ optional: boolean; singleton: boolean }
>;
}>;
@@ -15,11 +15,11 @@
*/
import {
AnyExtensionDataRef,
ApiHolder,
AppNode,
ExtensionAttachToSpec,
ExtensionDataValue,
ExtensionDataRef,
ExtensionDefinition,
ExtensionDefinitionParameters,
ExtensionInput,
@@ -43,13 +43,13 @@ export const OpaqueExtensionDefinition = OpaqueType.create<{
[inputName in string]: {
$$type: '@backstage/ExtensionInput';
extensionData: {
[name in string]: AnyExtensionDataRef;
[name in string]: ExtensionDataRef;
};
config: { optional: boolean; singleton: boolean };
};
};
readonly output: {
[name in string]: AnyExtensionDataRef;
[name in string]: ExtensionDataRef;
};
factory(context: {
node: AppNode;
@@ -72,18 +72,18 @@ export const OpaqueExtensionDefinition = OpaqueType.create<{
readonly configSchema?: PortableSchema<any, any>;
readonly inputs: {
[inputName in string]: ExtensionInput<
AnyExtensionDataRef,
ExtensionDataRef,
{ optional: boolean; singleton: boolean }
>;
};
readonly output: Array<AnyExtensionDataRef>;
readonly output: Array<ExtensionDataRef>;
factory(context: {
node: AppNode;
apis: ApiHolder;
config: object;
inputs: ResolvedExtensionInputs<{
[inputName in string]: ExtensionInput<
AnyExtensionDataRef,
ExtensionDataRef,
{ optional: boolean; singleton: boolean }
>;
}>;
@@ -15,13 +15,12 @@
*/
import {
AnyExtensionDataRef,
ExtensionDataContainer,
ExtensionDataRef,
ExtensionDataValue,
} from '@backstage/frontend-plugin-api';
export function createExtensionDataContainer<UData extends AnyExtensionDataRef>(
export function createExtensionDataContainer<UData extends ExtensionDataRef>(
values: Iterable<
UData extends ExtensionDataRef<infer IData, infer IId>
? ExtensionDataValue<IData, IId>
+35 -39
View File
@@ -151,14 +151,8 @@ export { AnyApiFactory };
export { AnyApiRef };
// @public (undocumented)
export type AnyExtensionDataRef = ExtensionDataRef<
unknown,
string,
{
optional?: true;
}
>;
// @public @deprecated (undocumented)
export type AnyExtensionDataRef = ExtensionDataRef;
// @public (undocumented)
export type AnyExternalRoutes = {
@@ -432,7 +426,7 @@ export function createComponentExtension<TProps extends {}>(options: {
>;
inputs: {
[x: string]: ExtensionInput<
AnyExtensionDataRef,
ExtensionDataRef,
{
optional: boolean;
singleton: boolean;
@@ -464,10 +458,10 @@ export function createComponentRef<T extends {} = {}>(options: {
// @public (undocumented)
export function createExtension<
UOutput extends AnyExtensionDataRef,
UOutput extends ExtensionDataRef,
TInputs extends {
[inputName in string]: ExtensionInput<
AnyExtensionDataRef,
ExtensionDataRef,
{
optional: boolean;
singleton: boolean;
@@ -512,10 +506,10 @@ export function createExtension<
// @public
export function createExtensionBlueprint<
TParams extends object | ExtensionBlueprintParamsDefiner,
UOutput extends AnyExtensionDataRef,
UOutput extends ExtensionDataRef,
TInputs extends {
[inputName in string]: ExtensionInput<
AnyExtensionDataRef,
ExtensionDataRef,
{
optional: boolean;
singleton: boolean;
@@ -528,7 +522,7 @@ export function createExtensionBlueprint<
UFactoryOutput extends ExtensionDataValue<any, any>,
TKind extends string,
TDataRefs extends {
[name in string]: AnyExtensionDataRef;
[name in string]: ExtensionDataRef;
} = never,
>(
options: CreateExtensionBlueprintOptions<
@@ -564,10 +558,10 @@ export function createExtensionBlueprint<
export type CreateExtensionBlueprintOptions<
TKind extends string,
TParams extends object | ExtensionBlueprintParamsDefiner,
UOutput extends AnyExtensionDataRef,
UOutput extends ExtensionDataRef,
TInputs extends {
[inputName in string]: ExtensionInput<
AnyExtensionDataRef,
ExtensionDataRef,
{
optional: boolean;
singleton: boolean;
@@ -579,7 +573,7 @@ export type CreateExtensionBlueprintOptions<
},
UFactoryOutput extends ExtensionDataValue<any, any>,
TDataRefs extends {
[name in string]: AnyExtensionDataRef;
[name in string]: ExtensionDataRef;
},
> = {
kind: TKind;
@@ -654,10 +648,10 @@ export function createExtensionInput<
export type CreateExtensionOptions<
TKind extends string | undefined,
TName extends string | undefined,
UOutput extends AnyExtensionDataRef,
UOutput extends ExtensionDataRef,
TInputs extends {
[inputName in string]: ExtensionInput<
AnyExtensionDataRef,
ExtensionDataRef,
{
optional: boolean;
singleton: boolean;
@@ -938,10 +932,10 @@ export interface ExtensionBlueprint<
[key in string]: (zImpl: typeof z) => z.ZodType;
},
UFactoryOutput extends ExtensionDataValue<any, any>,
UNewOutput extends AnyExtensionDataRef,
UNewOutput extends ExtensionDataRef,
TExtraInputs extends {
[inputName in string]: ExtensionInput<
AnyExtensionDataRef,
ExtensionDataRef,
{
optional: boolean;
singleton: boolean;
@@ -989,7 +983,7 @@ export interface ExtensionBlueprint<
},
): Iterable<UFactoryOutput> &
VerifyExtensionFactoryOutput<
AnyExtensionDataRef extends UNewOutput
ExtensionDataRef extends UNewOutput
? NonNullable<T['output']>
: UNewOutput,
UFactoryOutput
@@ -1013,7 +1007,7 @@ export interface ExtensionBlueprint<
}>
>) &
T['configInput'];
output: AnyExtensionDataRef extends UNewOutput ? T['output'] : UNewOutput;
output: ExtensionDataRef extends UNewOutput ? T['output'] : UNewOutput;
inputs: T['inputs'] & TExtraInputs;
kind: T['kind'];
name: string | undefined extends TName ? undefined : TName;
@@ -1031,10 +1025,10 @@ export type ExtensionBlueprintParameters = {
config?: {
[K in string]: any;
};
output?: AnyExtensionDataRef;
output?: ExtensionDataRef;
inputs?: {
[KName in string]: ExtensionInput<
AnyExtensionDataRef,
ExtensionDataRef,
{
optional: boolean;
singleton: boolean;
@@ -1042,7 +1036,7 @@ export type ExtensionBlueprintParameters = {
>;
};
dataRefs?: {
[name in string]: AnyExtensionDataRef;
[name in string]: ExtensionDataRef;
};
};
@@ -1084,7 +1078,7 @@ export interface ExtensionBoundaryProps {
}
// @public (undocumented)
export type ExtensionDataContainer<UExtensionData extends AnyExtensionDataRef> =
export type ExtensionDataContainer<UExtensionData extends ExtensionDataRef> =
Iterable<
UExtensionData extends ExtensionDataRef<
infer IData,
@@ -1107,11 +1101,13 @@ export type ExtensionDataContainer<UExtensionData extends AnyExtensionDataRef> =
// @public (undocumented)
export type ExtensionDataRef<
TData,
TData = unknown,
TId extends string = string,
TConfig extends {
optional?: true;
} = {},
} = {
optional?: true;
},
> = {
readonly $$type: '@backstage/ExtensionDataRef';
readonly id: TId;
@@ -1143,10 +1139,10 @@ export type ExtensionDefinition<
[key in string]: (zImpl: typeof z) => z.ZodType;
},
UFactoryOutput extends ExtensionDataValue<any, any>,
UNewOutput extends AnyExtensionDataRef,
UNewOutput extends ExtensionDataRef,
TExtraInputs extends {
[inputName in string]: ExtensionInput<
AnyExtensionDataRef,
ExtensionDataRef,
{
optional: boolean;
singleton: boolean;
@@ -1213,7 +1209,7 @@ export type ExtensionDefinition<
})
> &
VerifyExtensionFactoryOutput<
AnyExtensionDataRef extends UNewOutput
ExtensionDataRef extends UNewOutput
? NonNullable<T['output']>
: UNewOutput,
UFactoryOutput
@@ -1221,7 +1217,7 @@ export type ExtensionDefinition<
): ExtensionDefinition<{
kind: T['kind'];
name: T['name'];
output: AnyExtensionDataRef extends UNewOutput ? T['output'] : UNewOutput;
output: ExtensionDataRef extends UNewOutput ? T['output'] : UNewOutput;
inputs: T['inputs'] & TExtraInputs;
config: T['config'] & {
[key in keyof TExtensionConfigSchema]: z.infer<
@@ -1249,10 +1245,10 @@ export type ExtensionDefinitionParameters = {
config?: {
[K in string]: any;
};
output?: AnyExtensionDataRef;
output?: ExtensionDataRef;
inputs?: {
[KName in string]: ExtensionInput<
AnyExtensionDataRef,
ExtensionDataRef,
{
optional: boolean;
singleton: boolean;
@@ -1266,7 +1262,7 @@ export type ExtensionDefinitionParameters = {
export type ExtensionFactoryMiddleware = (
originalFactory: (contextOverrides?: {
config?: JsonObject;
}) => ExtensionDataContainer<AnyExtensionDataRef>,
}) => ExtensionDataContainer<ExtensionDataRef>,
context: {
node: AppNode;
apis: ApiHolder;
@@ -1606,7 +1602,7 @@ export { ProfileInfoApi };
// @public
export type ResolvedExtensionInput<
TExtensionInput extends ExtensionInput<any, any>,
> = TExtensionInput['extensionData'] extends Array<AnyExtensionDataRef>
> = TExtensionInput['extensionData'] extends Array<ExtensionDataRef>
? {
node: AppNode;
} & ExtensionDataContainer<TExtensionInput['extensionData'][number]>
@@ -1629,7 +1625,7 @@ export type ResolvedExtensionInputs<
export type ResolveInputValueOverrides<
TInputs extends {
[inputName in string]: ExtensionInput<
AnyExtensionDataRef,
ExtensionDataRef,
{
optional: boolean;
singleton: boolean;
@@ -1637,7 +1633,7 @@ export type ResolveInputValueOverrides<
>;
} = {
[inputName in string]: ExtensionInput<
AnyExtensionDataRef,
ExtensionDataRef,
{
optional: boolean;
singleton: boolean;
@@ -21,10 +21,7 @@ import {
resolveInputOverrides,
} from './resolveInputOverrides';
import { createExtensionDataContainer } from '@internal/frontend';
import {
AnyExtensionDataRef,
ExtensionDataValue,
} from './createExtensionDataRef';
import { ExtensionDataRef, ExtensionDataValue } from './createExtensionDataRef';
import { ExtensionInput } from './createExtensionInput';
import { z } from 'zod';
import { createSchemaFromZod } from '../schema/createSchemaFromZod';
@@ -44,7 +41,7 @@ export const ctxParamsSymbol = Symbol('params');
*/
export type ResolvedExtensionInput<
TExtensionInput extends ExtensionInput<any, any>,
> = TExtensionInput['extensionData'] extends Array<AnyExtensionDataRef>
> = TExtensionInput['extensionData'] extends Array<ExtensionDataRef>
? {
node: AppNode;
} & ExtensionDataContainer<TExtensionInput['extensionData'][number]>
@@ -91,7 +88,7 @@ type JoinStringUnion<
/** @ignore */
export type VerifyExtensionFactoryOutput<
UDeclaredOutput extends AnyExtensionDataRef,
UDeclaredOutput extends ExtensionDataRef,
UFactoryOutput extends ExtensionDataValue<any, any>,
> = (
UDeclaredOutput extends any
@@ -120,10 +117,10 @@ export type ExtensionAttachToSpec =
export type CreateExtensionOptions<
TKind extends string | undefined,
TName extends string | undefined,
UOutput extends AnyExtensionDataRef,
UOutput extends ExtensionDataRef,
TInputs extends {
[inputName in string]: ExtensionInput<
AnyExtensionDataRef,
ExtensionDataRef,
{ optional: boolean; singleton: boolean }
>;
},
@@ -155,10 +152,10 @@ export type ExtensionDefinitionParameters = {
name?: string;
configInput?: { [K in string]: any };
config?: { [K in string]: any };
output?: AnyExtensionDataRef;
output?: ExtensionDataRef;
inputs?: {
[KName in string]: ExtensionInput<
AnyExtensionDataRef,
ExtensionDataRef,
{ optional: boolean; singleton: boolean }
>;
};
@@ -191,10 +188,10 @@ export type ExtensionDefinition<
[key in string]: (zImpl: typeof z) => z.ZodType;
},
UFactoryOutput extends ExtensionDataValue<any, any>,
UNewOutput extends AnyExtensionDataRef,
UNewOutput extends ExtensionDataRef,
TExtraInputs extends {
[inputName in string]: ExtensionInput<
AnyExtensionDataRef,
ExtensionDataRef,
{ optional: boolean; singleton: boolean }
>;
},
@@ -258,7 +255,7 @@ export type ExtensionDefinition<
})
> &
VerifyExtensionFactoryOutput<
AnyExtensionDataRef extends UNewOutput
ExtensionDataRef extends UNewOutput
? NonNullable<T['output']>
: UNewOutput,
UFactoryOutput
@@ -266,7 +263,7 @@ export type ExtensionDefinition<
): ExtensionDefinition<{
kind: T['kind'];
name: T['name'];
output: AnyExtensionDataRef extends UNewOutput ? T['output'] : UNewOutput;
output: ExtensionDataRef extends UNewOutput ? T['output'] : UNewOutput;
inputs: T['inputs'] & TExtraInputs;
config: T['config'] & {
[key in keyof TExtensionConfigSchema]: z.infer<
@@ -286,10 +283,10 @@ export type ExtensionDefinition<
/** @public */
export function createExtension<
UOutput extends AnyExtensionDataRef,
UOutput extends ExtensionDataRef,
TInputs extends {
[inputName in string]: ExtensionInput<
AnyExtensionDataRef,
ExtensionDataRef,
{ optional: boolean; singleton: boolean }
>;
},
@@ -410,7 +407,7 @@ export function createExtension<
disabled: overrideOptions.disabled ?? options.disabled,
inputs: { ...overrideOptions.inputs, ...options.inputs },
output: (overrideOptions.output ??
options.output) as AnyExtensionDataRef[],
options.output) as ExtensionDataRef[],
config:
options.config || overrideOptions.config
? {
@@ -27,10 +27,7 @@ import {
} from './createExtension';
import { z } from 'zod';
import { ExtensionInput } from './createExtensionInput';
import {
AnyExtensionDataRef,
ExtensionDataValue,
} from './createExtensionDataRef';
import { ExtensionDataRef, ExtensionDataValue } from './createExtensionDataRef';
import { createExtensionDataContainer } from '@internal/frontend';
import {
ResolveInputValueOverrides,
@@ -104,16 +101,16 @@ export function createExtensionBlueprintParams<T extends object = object>(
export type CreateExtensionBlueprintOptions<
TKind extends string,
TParams extends object | ExtensionBlueprintParamsDefiner,
UOutput extends AnyExtensionDataRef,
UOutput extends ExtensionDataRef,
TInputs extends {
[inputName in string]: ExtensionInput<
AnyExtensionDataRef,
ExtensionDataRef,
{ optional: boolean; singleton: boolean }
>;
},
TConfigSchema extends { [key in string]: (zImpl: typeof z) => z.ZodType },
UFactoryOutput extends ExtensionDataValue<any, any>,
TDataRefs extends { [name in string]: AnyExtensionDataRef },
TDataRefs extends { [name in string]: ExtensionDataRef },
> = {
kind: TKind;
attachTo: ExtensionAttachToSpec;
@@ -187,14 +184,14 @@ export type ExtensionBlueprintParameters = {
params?: object | ExtensionBlueprintParamsDefiner;
configInput?: { [K in string]: any };
config?: { [K in string]: any };
output?: AnyExtensionDataRef;
output?: ExtensionDataRef;
inputs?: {
[KName in string]: ExtensionInput<
AnyExtensionDataRef,
ExtensionDataRef,
{ optional: boolean; singleton: boolean }
>;
};
dataRefs?: { [name in string]: AnyExtensionDataRef };
dataRefs?: { [name in string]: ExtensionDataRef };
};
/** @ignore */
@@ -258,10 +255,10 @@ export interface ExtensionBlueprint<
[key in string]: (zImpl: typeof z) => z.ZodType;
},
UFactoryOutput extends ExtensionDataValue<any, any>,
UNewOutput extends AnyExtensionDataRef,
UNewOutput extends ExtensionDataRef,
TExtraInputs extends {
[inputName in string]: ExtensionInput<
AnyExtensionDataRef,
ExtensionDataRef,
{ optional: boolean; singleton: boolean }
>;
},
@@ -306,7 +303,7 @@ export interface ExtensionBlueprint<
},
): Iterable<UFactoryOutput> &
VerifyExtensionFactoryOutput<
AnyExtensionDataRef extends UNewOutput
ExtensionDataRef extends UNewOutput
? NonNullable<T['output']>
: UNewOutput,
UFactoryOutput
@@ -330,7 +327,7 @@ export interface ExtensionBlueprint<
}>
>) &
T['configInput'];
output: AnyExtensionDataRef extends UNewOutput ? T['output'] : UNewOutput;
output: ExtensionDataRef extends UNewOutput ? T['output'] : UNewOutput;
inputs: T['inputs'] & TExtraInputs;
kind: T['kind'];
name: string | undefined extends TName ? undefined : TName;
@@ -416,17 +413,17 @@ function unwrapParams<TParams extends object>(
*/
export function createExtensionBlueprint<
TParams extends object | ExtensionBlueprintParamsDefiner,
UOutput extends AnyExtensionDataRef,
UOutput extends ExtensionDataRef,
TInputs extends {
[inputName in string]: ExtensionInput<
AnyExtensionDataRef,
ExtensionDataRef,
{ optional: boolean; singleton: boolean }
>;
},
TConfigSchema extends { [key in string]: (zImpl: typeof z) => z.ZodType },
UFactoryOutput extends ExtensionDataValue<any, any>,
TKind extends string,
TDataRefs extends { [name in string]: AnyExtensionDataRef } = never,
TDataRefs extends { [name in string]: ExtensionDataRef } = never,
>(
options: CreateExtensionBlueprintOptions<
TKind,
@@ -467,7 +464,7 @@ export function createExtensionBlueprint<
attachTo: args.attachTo ?? options.attachTo,
disabled: args.disabled ?? options.disabled,
inputs: options.inputs,
output: options.output as AnyExtensionDataRef[],
output: options.output as ExtensionDataRef[],
config: options.config,
factory: ctx =>
options.factory(
@@ -483,7 +480,7 @@ export function createExtensionBlueprint<
attachTo: args.attachTo ?? options.attachTo,
disabled: args.disabled ?? options.disabled,
inputs: { ...args.inputs, ...options.inputs },
output: (args.output ?? options.output) as AnyExtensionDataRef[],
output: (args.output ?? options.output) as ExtensionDataRef[],
config:
options.config || args.config
? {
@@ -23,9 +23,9 @@ export type ExtensionDataValue<TData, TId extends string> = {
/** @public */
export type ExtensionDataRef<
TData,
TData = unknown,
TId extends string = string,
TConfig extends { optional?: true } = {},
TConfig extends { optional?: true } = { optional?: true },
> = {
readonly $$type: '@backstage/ExtensionDataRef';
readonly id: TId;
@@ -39,12 +39,11 @@ export type ExtensionDataRefToValue<TDataRef extends AnyExtensionDataRef> =
? ExtensionDataValue<IData, IId>
: never;
/** @public */
export type AnyExtensionDataRef = ExtensionDataRef<
unknown,
string,
{ optional?: true }
>;
/**
* @deprecated Use `ExtensionDataRef` without type parameters instead.
* @public
*/
export type AnyExtensionDataRef = ExtensionDataRef;
/** @public */
export interface ConfigurableExtensionDataRef<
@@ -23,10 +23,7 @@ import {
} from './createExtension';
import { PortableSchema } from '../schema';
import { ExtensionInput } from './createExtensionInput';
import {
AnyExtensionDataRef,
ExtensionDataValue,
} from './createExtensionDataRef';
import { ExtensionDataRef, ExtensionDataValue } from './createExtensionDataRef';
import { OpaqueExtensionDefinition } from '@internal/frontend';
/** @public */
@@ -50,13 +47,13 @@ export type InternalExtension<TConfig, TConfigInput> = Extension<
[inputName in string]: {
$$type: '@backstage/ExtensionInput';
extensionData: {
[name in string]: AnyExtensionDataRef;
[name in string]: ExtensionDataRef;
};
config: { optional: boolean; singleton: boolean };
};
};
readonly output: {
[name in string]: AnyExtensionDataRef;
[name in string]: ExtensionDataRef;
};
factory(context: {
apis: ApiHolder;
@@ -73,18 +70,18 @@ export type InternalExtension<TConfig, TConfigInput> = Extension<
readonly version: 'v2';
readonly inputs: {
[inputName in string]: ExtensionInput<
AnyExtensionDataRef,
ExtensionDataRef,
{ optional: boolean; singleton: boolean }
>;
};
readonly output: Array<AnyExtensionDataRef>;
readonly output: Array<ExtensionDataRef>;
factory(options: {
apis: ApiHolder;
node: AppNode;
config: TConfig;
inputs: ResolvedExtensionInputs<{
[inputName in string]: ExtensionInput<
AnyExtensionDataRef,
ExtensionDataRef,
{ optional: boolean; singleton: boolean }
>;
}>;
@@ -19,7 +19,7 @@ import { Expand } from '@backstage/types';
import { ResolvedExtensionInput } from './createExtension';
import { createExtensionDataContainer } from '@internal/frontend';
import {
AnyExtensionDataRef,
ExtensionDataRef,
ExtensionDataRefToValue,
ExtensionDataValue,
} from './createExtensionDataRef';
@@ -30,12 +30,12 @@ import { ExtensionDataContainer } from './types';
export type ResolveInputValueOverrides<
TInputs extends {
[inputName in string]: ExtensionInput<
AnyExtensionDataRef,
ExtensionDataRef,
{ optional: boolean; singleton: boolean }
>;
} = {
[inputName in string]: ExtensionInput<
AnyExtensionDataRef,
ExtensionDataRef,
{ optional: boolean; singleton: boolean }
>;
},
@@ -92,7 +92,7 @@ function expectItem<T>(value: T | T[]): T {
export function resolveInputOverrides(
declaredInputs?: {
[inputName in string]: ExtensionInput<
AnyExtensionDataRef,
ExtensionDataRef,
{ optional: boolean; singleton: boolean }
>;
},
@@ -17,11 +17,7 @@
import { JsonObject } from '@backstage/types';
import { ExternalRouteRef, RouteRef, SubRouteRef } from '../routing';
import { ExtensionDefinition } from './createExtension';
import {
AnyExtensionDataRef,
ExtensionDataRef,
ExtensionDataValue,
} from './createExtensionDataRef';
import { ExtensionDataRef, ExtensionDataValue } from './createExtensionDataRef';
import { ApiHolder, AppNode } from '../apis';
import { FrontendModule } from './createFrontendModule';
import { FrontendPlugin } from './createFrontendPlugin';
@@ -50,7 +46,7 @@ export type ExtensionMap<
};
/** @public */
export type ExtensionDataContainer<UExtensionData extends AnyExtensionDataRef> =
export type ExtensionDataContainer<UExtensionData extends ExtensionDataRef> =
Iterable<
UExtensionData extends ExtensionDataRef<
infer IData,
@@ -75,7 +71,7 @@ export type ExtensionDataContainer<UExtensionData extends AnyExtensionDataRef> =
export type ExtensionFactoryMiddleware = (
originalFactory: (contextOverrides?: {
config?: JsonObject;
}) => ExtensionDataContainer<AnyExtensionDataRef>,
}) => ExtensionDataContainer<ExtensionDataRef>,
context: {
node: AppNode;
apis: ApiHolder;
+2 -3
View File
@@ -5,7 +5,6 @@
```ts
import { AnalyticsApi } from '@backstage/frontend-plugin-api';
import { AnalyticsEvent } from '@backstage/frontend-plugin-api';
import { AnyExtensionDataRef } from '@backstage/frontend-plugin-api';
import { ApiMock } from '@backstage/test-utils';
import { AppNode } from '@backstage/frontend-plugin-api';
import { AppNodeInstance } from '@backstage/frontend-plugin-api';
@@ -45,7 +44,7 @@ export function createExtensionTester<T extends ExtensionDefinitionParameters>(
export { ErrorWithContext };
// @public (undocumented)
export class ExtensionQuery<UOutput extends AnyExtensionDataRef> {
export class ExtensionQuery<UOutput extends ExtensionDataRef> {
constructor(node: AppNode);
// (undocumented)
get<TId extends UOutput['id']>(
@@ -62,7 +61,7 @@ export class ExtensionQuery<UOutput extends AnyExtensionDataRef> {
}
// @public (undocumented)
export class ExtensionTester<UOutput extends AnyExtensionDataRef> {
export class ExtensionTester<UOutput extends ExtensionDataRef> {
// (undocumented)
add<T extends ExtensionDefinitionParameters>(
extension: ExtensionDefinition<T>,
@@ -15,7 +15,6 @@
*/
import {
AnyExtensionDataRef,
AppNode,
AppTree,
Extension,
@@ -40,7 +39,7 @@ import { TestApiRegistry } from '@backstage/test-utils';
import { OpaqueExtensionDefinition } from '@internal/frontend';
/** @public */
export class ExtensionQuery<UOutput extends AnyExtensionDataRef> {
export class ExtensionQuery<UOutput extends ExtensionDataRef> {
#node: AppNode;
constructor(node: AppNode) {
@@ -75,7 +74,7 @@ export class ExtensionQuery<UOutput extends AnyExtensionDataRef> {
}
/** @public */
export class ExtensionTester<UOutput extends AnyExtensionDataRef> {
export class ExtensionTester<UOutput extends ExtensionDataRef> {
/** @internal */
static forSubject<T extends ExtensionDefinitionParameters>(
subject: ExtensionDefinition<T>,
+2 -2
View File
@@ -4,7 +4,6 @@
```ts
import { AnyApiFactory } from '@backstage/frontend-plugin-api';
import { AnyExtensionDataRef } from '@backstage/frontend-plugin-api';
import { AnyRouteRefParams } from '@backstage/frontend-plugin-api';
import { ApiFactory } from '@backstage/frontend-plugin-api';
import { ConfigurableExtensionDataRef } from '@backstage/frontend-plugin-api';
@@ -13,6 +12,7 @@ import { Entity } from '@backstage/catalog-model';
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';
@@ -495,7 +495,7 @@ const _default: FrontendPlugin<
>;
inputs: {
[x: string]: ExtensionInput<
AnyExtensionDataRef,
ExtensionDataRef,
{
optional: boolean;
singleton: boolean;
+3 -3
View File
@@ -4,7 +4,6 @@
```ts
import { AnyApiFactory } from '@backstage/frontend-plugin-api';
import { AnyExtensionDataRef } from '@backstage/frontend-plugin-api';
import { AnyRouteRefParams } from '@backstage/frontend-plugin-api';
import { ApiFactory } from '@backstage/frontend-plugin-api';
import { AppTheme } from '@backstage/frontend-plugin-api';
@@ -12,6 +11,7 @@ import { ComponentRef } from '@backstage/frontend-plugin-api';
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 { FrontendPlugin } from '@backstage/frontend-plugin-api';
@@ -802,7 +802,7 @@ const appPlugin: FrontendPlugin<
>;
inputs: {
[x: string]: ExtensionInput<
AnyExtensionDataRef,
ExtensionDataRef,
{
optional: boolean;
singleton: boolean;
@@ -825,7 +825,7 @@ const appPlugin: FrontendPlugin<
>;
inputs: {
[x: string]: ExtensionInput<
AnyExtensionDataRef,
ExtensionDataRef,
{
optional: boolean;
singleton: boolean;
+3 -3
View File
@@ -3,13 +3,13 @@
> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/).
```ts
import { AnyExtensionDataRef } from '@backstage/frontend-plugin-api';
import { AnyRouteRefParams } from '@backstage/frontend-plugin-api';
import { ConfigurableExtensionDataRef } from '@backstage/frontend-plugin-api';
import { Direction } from '@backstage/plugin-catalog-graph';
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';
@@ -117,7 +117,7 @@ const _default: FrontendPlugin<
>;
inputs: {
[x: string]: ExtensionInput<
AnyExtensionDataRef,
ExtensionDataRef,
{
optional: boolean;
singleton: boolean;
@@ -179,7 +179,7 @@ const _default: FrontendPlugin<
>;
inputs: {
[x: string]: ExtensionInput<
AnyExtensionDataRef,
ExtensionDataRef,
{
optional: boolean;
singleton: boolean;
+4 -4
View File
@@ -4,7 +4,6 @@
```ts
import { AnyApiFactory } from '@backstage/frontend-plugin-api';
import { AnyExtensionDataRef } from '@backstage/frontend-plugin-api';
import { AnyRouteRefParams } from '@backstage/frontend-plugin-api';
import { ApiFactory } from '@backstage/frontend-plugin-api';
import { ConfigurableExtensionDataRef } from '@backstage/frontend-plugin-api';
@@ -15,6 +14,7 @@ import { EntityContentLayoutProps } from '@backstage/plugin-catalog-react/alpha'
import { EntityContextMenuItemParams } 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';
@@ -208,7 +208,7 @@ const _default: FrontendPlugin<
>;
inputs: {
[x: string]: ExtensionInput<
AnyExtensionDataRef,
ExtensionDataRef,
{
optional: boolean;
singleton: boolean;
@@ -250,7 +250,7 @@ const _default: FrontendPlugin<
>;
inputs: {
[x: string]: ExtensionInput<
AnyExtensionDataRef,
ExtensionDataRef,
{
optional: boolean;
singleton: boolean;
@@ -277,7 +277,7 @@ const _default: FrontendPlugin<
>;
inputs: {
[x: string]: ExtensionInput<
AnyExtensionDataRef,
ExtensionDataRef,
{
optional: boolean;
singleton: boolean;
+2 -2
View File
@@ -3,11 +3,11 @@
> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/).
```ts
import { AnyExtensionDataRef } from '@backstage/frontend-plugin-api';
import { ConfigurableExtensionDataRef } from '@backstage/frontend-plugin-api';
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';
@@ -185,7 +185,7 @@ const _default: FrontendPlugin<
>;
inputs: {
[x: string]: ExtensionInput<
AnyExtensionDataRef,
ExtensionDataRef,
{
optional: boolean;
singleton: boolean;
+4 -4
View File
@@ -4,7 +4,6 @@
```ts
import { AnyApiFactory } from '@backstage/frontend-plugin-api';
import { AnyExtensionDataRef } from '@backstage/frontend-plugin-api';
import { AnyRouteRefParams } from '@backstage/frontend-plugin-api';
import { ApiFactory } from '@backstage/frontend-plugin-api';
import { ConfigurableExtensionDataRef } from '@backstage/frontend-plugin-api';
@@ -12,6 +11,7 @@ import { defaultEntityContentGroups } from '@backstage/plugin-catalog-react/alph
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 { FrontendPlugin } from '@backstage/frontend-plugin-api';
@@ -87,7 +87,7 @@ const _default: FrontendPlugin<
>;
inputs: {
[x: string]: ExtensionInput<
AnyExtensionDataRef,
ExtensionDataRef,
{
optional: boolean;
singleton: boolean;
@@ -335,7 +335,7 @@ const _default: FrontendPlugin<
>;
inputs: {
[x: string]: ExtensionInput<
AnyExtensionDataRef,
ExtensionDataRef,
{
optional: boolean;
singleton: boolean;
@@ -378,7 +378,7 @@ export const techDocsSearchResultListItemExtension: ExtensionDefinition<{
>;
inputs: {
[x: string]: ExtensionInput<
AnyExtensionDataRef,
ExtensionDataRef,
{
optional: boolean;
singleton: boolean;