frontend-plugin-api: update API report + fix

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
This commit is contained in:
Patrik Oldsberg
2023-09-05 14:02:51 +02:00
parent fb29700ae5
commit 1d04ba7854
3 changed files with 115 additions and 39 deletions
+113 -38
View File
@@ -17,7 +17,9 @@ import { ZodSchema } from 'zod';
import { ZodTypeDef } from 'zod';
// @public (undocumented)
export type AnyExtensionDataMap = Record<string, ExtensionDataRef<any>>;
export type AnyExtensionDataMap = {
[name in string]: ExtensionDataRef<any, any>;
};
// @public (undocumented)
export interface BackstagePlugin {
@@ -29,12 +31,48 @@ export interface BackstagePlugin {
id: string;
}
// @public (undocumented)
export interface ConfigurableExtensionDataRef<
TData,
TConfig extends {
optional: boolean;
},
> extends ExtensionDataRef<TData, TConfig> {
// (undocumented)
optional(): ConfigurableExtensionDataRef<
TData,
TData & {
optional: true;
}
>;
}
// @public (undocumented)
export const coreExtensionData: {
reactComponent: ExtensionDataRef<ComponentType<{}>>;
routePath: ExtensionDataRef<string>;
apiFactory: ExtensionDataRef<AnyApiFactory>;
routeRef: ExtensionDataRef<RouteRef<any>>;
reactComponent: ConfigurableExtensionDataRef<
ComponentType<{}>,
{
optional: false;
}
>;
routePath: ConfigurableExtensionDataRef<
string,
{
optional: false;
}
>;
apiFactory: ConfigurableExtensionDataRef<
AnyApiFactory,
{
optional: false;
}
>;
routeRef: ConfigurableExtensionDataRef<
RouteRef<any>,
{
optional: false;
}
>;
};
// @public (undocumented)
@@ -52,11 +90,7 @@ export function createApiExtension<
api: AnyApiRef;
factory: (options: {
config: TConfig;
inputs: {
[pointName in keyof TInputs]: ExtensionDataValue<
TInputs[pointName]['extensionData']
>[];
};
inputs: ExtensionDataInputValues<TInputs>;
}) => AnyApiFactory;
}
| {
@@ -70,23 +104,32 @@ export function createApiExtension<
// @public (undocumented)
export function createExtension<
TData extends AnyExtensionDataMap,
TPoint extends Record<
TOutput extends AnyExtensionDataMap,
TInputs extends Record<
string,
{
extensionData: AnyExtensionDataMap;
}
>,
TConfig = never,
>(options: CreateExtensionOptions<TData, TPoint, TConfig>): Extension<TConfig>;
>(
options: CreateExtensionOptions<TOutput, TInputs, TConfig>,
): Extension<TConfig>;
// @public (undocumented)
export function createExtensionDataRef<T>(id: string): ExtensionDataRef<T>;
export function createExtensionDataRef<TData>(
id: string,
): ConfigurableExtensionDataRef<
TData,
{
optional: false;
}
>;
// @public (undocumented)
export interface CreateExtensionOptions<
TData extends AnyExtensionDataMap,
TPoint extends Record<
TOutput extends AnyExtensionDataMap,
TInputs extends Record<
string,
{
extensionData: AnyExtensionDataMap;
@@ -103,20 +146,16 @@ export interface CreateExtensionOptions<
// (undocumented)
factory(options: {
source?: BackstagePlugin;
bind: ExtensionDataBind<TData>;
bind: ExtensionDataBind<TOutput>;
config: TConfig;
inputs: {
[pointName in keyof TPoint]: ExtensionDataValue<
TPoint[pointName]['extensionData']
>[];
};
inputs: ExtensionDataInputValues<TInputs>;
}): void;
// (undocumented)
id: string;
// (undocumented)
inputs?: TPoint;
inputs?: TInputs;
// (undocumented)
output: TData;
output: TOutput;
}
// @public
@@ -146,11 +185,7 @@ export function createPageExtension<
routeRef?: RouteRef;
component: (props: {
config: TConfig;
inputs: {
[pointName in keyof TInputs]: ExtensionDataValue<
TInputs[pointName]['extensionData']
>[];
};
inputs: ExtensionDataInputValues<TInputs>;
}) => Promise<JSX.Element>;
},
): Extension<TConfig>;
@@ -207,22 +242,62 @@ export interface ExtensionBoundaryProps {
}
// @public (undocumented)
export type ExtensionDataBind<TData extends AnyExtensionDataMap> = {
[K in keyof TData]: (value: TData[K]['T']) => void;
export type ExtensionDataBind<TMap extends AnyExtensionDataMap> = (
values: {
[DataName in keyof TMap as TMap[DataName]['config'] extends {
optional: false;
}
? DataName
: never]: TMap[DataName]['T'];
} & {
[DataName in keyof TMap as TMap[DataName]['config'] extends {
optional: true;
}
? DataName
: never]?: TMap[DataName]['T'];
},
) => void;
// @public (undocumented)
export type ExtensionDataInputValues<
TInputs extends {
[name in string]: {
extensionData: AnyExtensionDataMap;
};
},
> = {
[InputName in keyof TInputs]: Array<
{
[DataName in keyof TInputs[InputName]['extensionData'] as TInputs[InputName]['extensionData'][DataName]['config'] extends {
optional: true;
}
? DataName
: never]?: TInputs[InputName]['extensionData'][DataName]['T'];
} & {
[DataName in keyof TInputs[InputName]['extensionData'] as TInputs[InputName]['extensionData'][DataName]['config'] extends {
optional: false;
}
? DataName
: never]: TInputs[InputName]['extensionData'][DataName]['T'];
}
>;
};
// @public (undocumented)
export type ExtensionDataRef<T> = {
export type ExtensionDataRef<
TData,
TConfig extends {
optional: boolean;
} = {
optional: false;
},
> = {
id: string;
T: T;
T: TData;
config: TConfig;
$$type: 'extension-data';
};
// @public (undocumented)
export type ExtensionDataValue<TData extends AnyExtensionDataMap> = {
[K in keyof TData]: TData[K]['T'];
};
// @public (undocumented)
export interface PluginOptions {
// (undocumented)
@@ -33,8 +33,8 @@ export interface ConfigurableExtensionDataRef<
optional(): ConfigurableExtensionDataRef<TData, TData & { optional: true }>;
}
/** @public */
// TODO: change to options object with ID.
/** @public */
export function createExtensionDataRef<TData>(
id: string,
): ConfigurableExtensionDataRef<TData, { optional: false }> {
@@ -24,6 +24,7 @@ export {
export {
createExtensionDataRef,
type ExtensionDataRef,
type ConfigurableExtensionDataRef,
} from './createExtensionDataRef';
export {
createPlugin,