frontend-plugin-api: restore @ignore on internal utility types

Route createExtension overloads through CreateExtensionOptions so that
ResolvedExtensionInputs, VerifyExtensionFactoryOutput, VerifyExtensionAttachTo,
and RequiredExtensionIds can remain @ignore without ae-forgotten-export warnings.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
This commit is contained in:
Patrik Oldsberg
2026-04-10 12:52:59 +02:00
parent effa7bf459
commit 8330f1319a
5 changed files with 46 additions and 196 deletions
@@ -829,27 +829,6 @@ export type PortableSchema<TOutput = unknown, TInput = TOutput> = {
};
};
// @public (undocumented)
export type RequiredExtensionIds<UExtensionData extends ExtensionDataRef> =
UExtensionData extends any
? UExtensionData['config']['optional'] extends true
? never
: UExtensionData['id']
: never;
// @public
export type ResolvedExtensionInputs<
TInputs extends {
[name in string]: ExtensionInput;
},
> = {
[InputName in keyof TInputs]: false extends TInputs[InputName]['config']['singleton']
? Array<Expand<ResolvedExtensionInput<TInputs[InputName]>>>
: false extends TInputs[InputName]['config']['optional']
? Expand<ResolvedExtensionInput<TInputs[InputName]>>
: Expand<ResolvedExtensionInput<TInputs[InputName]> | undefined>;
};
// @public
export interface RouteRef<
TParams extends AnyRouteRefParams = AnyRouteRefParams,
@@ -874,31 +853,5 @@ export interface SubRouteRef<
readonly T: TParams;
}
// @public (undocumented)
export type VerifyExtensionAttachTo<
UOutput extends ExtensionDataRef,
UParentInput extends ExtensionDataRef,
> = ExtensionDataRef extends UParentInput
? {}
: [RequiredExtensionIds<UParentInput>] extends [RequiredExtensionIds<UOutput>]
? {}
: `Error: This parent extension input requires the following extension data, but it is not declared as guaranteed output of this extension: ${JoinStringUnion<
Exclude<RequiredExtensionIds<UParentInput>, RequiredExtensionIds<UOutput>>
>}`;
// @public (undocumented)
export type VerifyExtensionFactoryOutput<
UDeclaredOutput extends ExtensionDataRef,
UFactoryOutput extends ExtensionDataValue<any, any>,
> = [RequiredExtensionIds<UDeclaredOutput>] extends [UFactoryOutput['id']]
? [UFactoryOutput['id']] extends [UDeclaredOutput['id']]
? {}
: `Error: The extension factory has undeclared output(s): ${JoinStringUnion<
Exclude<UFactoryOutput['id'], UDeclaredOutput['id']>
>}`
: `Error: The extension factory is missing the following output(s): ${JoinStringUnion<
Exclude<RequiredExtensionIds<UDeclaredOutput>, UFactoryOutput['id']>
>}`;
// (No @packageDocumentation comment for this package)
```
+22 -91
View File
@@ -472,28 +472,18 @@ export function createExtension<
[key: string]: StandardSchemaV1;
} = {},
>(
options: {
kind?: TKind;
name?: TName;
attachTo: ExtensionDefinitionAttachTo<UParentInputs> &
VerifyExtensionAttachTo<UOutput, UParentInputs>;
disabled?: boolean;
if?: FilterPredicate;
inputs?: TInputs;
output: Array<UOutput>;
options: CreateExtensionOptions<
TKind,
TName,
UOutput,
TInputs,
{},
UFactoryOutput,
UParentInputs,
TNewConfigSchema
> & {
config?: never;
configSchema?: TNewConfigSchema;
factory(context: {
node: AppNode;
apis: ApiHolder;
config: {
[key in keyof TNewConfigSchema]: NonNullable<
TNewConfigSchema[key]['~standard']['types']
>['output'];
};
inputs: Expand<ResolvedExtensionInputs<TInputs>>;
}): Iterable<UFactoryOutput>;
} & VerifyExtensionFactoryOutput<UOutput, UFactoryOutput>,
},
): OverridableExtensionDefinition<{
config: {
[key in keyof TNewConfigSchema]: NonNullable<
@@ -532,30 +522,18 @@ export function createExtension<
const TName extends string | undefined = undefined,
UParentInputs extends ExtensionDataRef = ExtensionDataRef,
>(
options: {
kind?: TKind;
name?: TName;
attachTo: ExtensionDefinitionAttachTo<UParentInputs> &
VerifyExtensionAttachTo<UOutput, UParentInputs>;
disabled?: boolean;
if?: FilterPredicate;
inputs?: TInputs;
output: Array<UOutput>;
options: CreateExtensionOptions<
TKind,
TName,
UOutput,
TInputs,
TConfigSchema,
UFactoryOutput,
UParentInputs,
{}
> & {
configSchema?: never;
config?: {
schema: TConfigSchema;
};
factory(context: {
node: AppNode;
apis: ApiHolder;
config: {
[key in keyof TConfigSchema]: z.infer<
ReturnType<((...args: any[]) => any) & TConfigSchema[key]>
>;
};
inputs: Expand<ResolvedExtensionInputs<TInputs>>;
}): Iterable<UFactoryOutput>;
} & VerifyExtensionFactoryOutput<UOutput, UFactoryOutput>,
},
): OverridableExtensionDefinition<{
config: string extends keyof TConfigSchema
? {}
@@ -2449,27 +2427,6 @@ export const Progress: {
// @public (undocumented)
export type ProgressProps = {};
// @public (undocumented)
export type RequiredExtensionIds<UExtensionData extends ExtensionDataRef> =
UExtensionData extends any
? UExtensionData['config']['optional'] extends true
? never
: UExtensionData['id']
: never;
// @public
export type ResolvedExtensionInputs<
TInputs extends {
[name in string]: ExtensionInput;
},
> = {
[InputName in keyof TInputs]: false extends TInputs[InputName]['config']['singleton']
? Array<Expand<ResolvedExtensionInput<TInputs[InputName]>>>
: false extends TInputs[InputName]['config']['optional']
? Expand<ResolvedExtensionInput<TInputs[InputName]>>
: Expand<ResolvedExtensionInput<TInputs[InputName]> | undefined>;
};
// @public
export type RouteFunc<TParams extends AnyRouteRefParams> = (
...input: TParams extends undefined ? readonly [] : readonly [params: TParams]
@@ -2882,32 +2839,6 @@ export const useTranslationRef: <TMessages extends { [key in string]: string }>(
t: TranslationFunction<TMessages>;
};
// @public (undocumented)
export type VerifyExtensionAttachTo<
UOutput extends ExtensionDataRef,
UParentInput extends ExtensionDataRef,
> = ExtensionDataRef extends UParentInput
? {}
: [RequiredExtensionIds<UParentInput>] extends [RequiredExtensionIds<UOutput>]
? {}
: `Error: This parent extension input requires the following extension data, but it is not declared as guaranteed output of this extension: ${JoinStringUnion<
Exclude<RequiredExtensionIds<UParentInput>, RequiredExtensionIds<UOutput>>
>}`;
// @public (undocumented)
export type VerifyExtensionFactoryOutput<
UDeclaredOutput extends ExtensionDataRef,
UFactoryOutput extends ExtensionDataValue<any, any>,
> = [RequiredExtensionIds<UDeclaredOutput>] extends [UFactoryOutput['id']]
? [UFactoryOutput['id']] extends [UDeclaredOutput['id']]
? {}
: `Error: The extension factory has undeclared output(s): ${JoinStringUnion<
Exclude<UFactoryOutput['id'], UDeclaredOutput['id']>
>}`
: `Error: The extension factory is missing the following output(s): ${JoinStringUnion<
Exclude<RequiredExtensionIds<UDeclaredOutput>, UFactoryOutput['id']>
>}`;
// @public
export const vmwareCloudAuthApiRef: ApiRef_2<
OAuthApi &
@@ -37,10 +37,6 @@ export type {
ExtensionInput,
FrontendPlugin,
OverridableExtensionDefinition,
ResolvedExtensionInputs,
RequiredExtensionIds,
VerifyExtensionFactoryOutput,
VerifyExtensionAttachTo,
} from './wiring';
export type {
ApiHolder,
@@ -60,7 +60,7 @@ type ResolvedExtensionInput<TExtensionInput extends ExtensionInput> =
/**
* Converts an extension input map into a matching collection of resolved inputs.
*
* @public
* @ignore
*/
export type ResolvedExtensionInputs<
TInputs extends {
@@ -97,7 +97,7 @@ type JoinStringUnion<
: JoinStringUnion<IRest, TDiv, `${TResult}${TDiv}${INext}`>
: TResult;
/** @public */
/** @ignore */
export type RequiredExtensionIds<UExtensionData extends ExtensionDataRef> =
UExtensionData extends any
? UExtensionData['config']['optional'] extends true
@@ -105,7 +105,7 @@ export type RequiredExtensionIds<UExtensionData extends ExtensionDataRef> =
: UExtensionData['id']
: never;
/** @public */
/** @ignore */
export type VerifyExtensionFactoryOutput<
UDeclaredOutput extends ExtensionDataRef,
UFactoryOutput extends ExtensionDataValue<any, any>,
@@ -119,7 +119,7 @@ export type VerifyExtensionFactoryOutput<
Exclude<RequiredExtensionIds<UDeclaredOutput>, UFactoryOutput['id']>
>}`;
/** @public */
/** @ignore */
export type VerifyExtensionAttachTo<
UOutput extends ExtensionDataRef,
UParentInput extends ExtensionDataRef,
@@ -527,28 +527,16 @@ export function createExtension<
UParentInputs extends ExtensionDataRef = ExtensionDataRef,
TNewConfigSchema extends { [key: string]: StandardSchemaV1 } = {},
>(
options: {
kind?: TKind;
name?: TName;
attachTo: ExtensionDefinitionAttachTo<UParentInputs> &
VerifyExtensionAttachTo<UOutput, UParentInputs>;
disabled?: boolean;
if?: FilterPredicate;
inputs?: TInputs;
output: Array<UOutput>;
config?: never;
configSchema?: TNewConfigSchema;
factory(context: {
node: AppNode;
apis: ApiHolder;
config: {
[key in keyof TNewConfigSchema]: NonNullable<
TNewConfigSchema[key]['~standard']['types']
>['output'];
};
inputs: Expand<ResolvedExtensionInputs<TInputs>>;
}): Iterable<UFactoryOutput>;
} & VerifyExtensionFactoryOutput<UOutput, UFactoryOutput>,
options: CreateExtensionOptions<
TKind,
TName,
UOutput,
TInputs,
{},
UFactoryOutput,
UParentInputs,
TNewConfigSchema
> & { config?: never },
): OverridableExtensionDefinition<{
config: {
[key in keyof TNewConfigSchema]: NonNullable<
@@ -586,30 +574,16 @@ export function createExtension<
const TName extends string | undefined = undefined,
UParentInputs extends ExtensionDataRef = ExtensionDataRef,
>(
options: {
kind?: TKind;
name?: TName;
attachTo: ExtensionDefinitionAttachTo<UParentInputs> &
VerifyExtensionAttachTo<UOutput, UParentInputs>;
disabled?: boolean;
if?: FilterPredicate;
inputs?: TInputs;
output: Array<UOutput>;
configSchema?: never;
config?: {
schema: TConfigSchema;
};
factory(context: {
node: AppNode;
apis: ApiHolder;
config: {
[key in keyof TConfigSchema]: z.infer<
ReturnType<((...args: any[]) => any) & TConfigSchema[key]>
>;
};
inputs: Expand<ResolvedExtensionInputs<TInputs>>;
}): Iterable<UFactoryOutput>;
} & VerifyExtensionFactoryOutput<UOutput, UFactoryOutput>,
options: CreateExtensionOptions<
TKind,
TName,
UOutput,
TInputs,
TConfigSchema,
UFactoryOutput,
UParentInputs,
{}
> & { configSchema?: never },
): OverridableExtensionDefinition<{
config: string extends keyof TConfigSchema
? {}
@@ -22,10 +22,6 @@ export {
type ExtensionDefinitionParameters,
type CreateExtensionOptions,
type OverridableExtensionDefinition,
type ResolvedExtensionInputs,
type RequiredExtensionIds,
type VerifyExtensionFactoryOutput,
type VerifyExtensionAttachTo,
} from './createExtension';
export {
createExtensionInput,