frontend-plugin-api: clean up configurable extension data ref type

Co-authored-by: Fredrik Adelöw <freben@gmail.com>
Co-authored-by: Philipp Hugenroth <philipph@spotify.com>
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
This commit is contained in:
Patrik Oldsberg
2023-09-05 14:41:52 +02:00
parent 1d04ba7854
commit c1de5ddf2a
4 changed files with 30 additions and 61 deletions
+16 -43
View File
@@ -35,8 +35,8 @@ export interface BackstagePlugin {
export interface ConfigurableExtensionDataRef<
TData,
TConfig extends {
optional: boolean;
},
optional?: true;
} = {},
> extends ExtensionDataRef<TData, TConfig> {
// (undocumented)
optional(): ConfigurableExtensionDataRef<
@@ -49,30 +49,10 @@ export interface ConfigurableExtensionDataRef<
// @public (undocumented)
export const coreExtensionData: {
reactComponent: ConfigurableExtensionDataRef<
ComponentType<{}>,
{
optional: false;
}
>;
routePath: ConfigurableExtensionDataRef<
string,
{
optional: false;
}
>;
apiFactory: ConfigurableExtensionDataRef<
AnyApiFactory,
{
optional: false;
}
>;
routeRef: ConfigurableExtensionDataRef<
RouteRef<any>,
{
optional: false;
}
>;
reactComponent: ConfigurableExtensionDataRef<ComponentType<{}>, {}>;
routePath: ConfigurableExtensionDataRef<string, {}>;
apiFactory: ConfigurableExtensionDataRef<AnyApiFactory, {}>;
routeRef: ConfigurableExtensionDataRef<RouteRef<any>, {}>;
};
// @public (undocumented)
@@ -119,12 +99,7 @@ export function createExtension<
// @public (undocumented)
export function createExtensionDataRef<TData>(
id: string,
): ConfigurableExtensionDataRef<
TData,
{
optional: false;
}
>;
): ConfigurableExtensionDataRef<TData>;
// @public (undocumented)
export interface CreateExtensionOptions<
@@ -245,10 +220,10 @@ export interface ExtensionBoundaryProps {
export type ExtensionDataBind<TMap extends AnyExtensionDataMap> = (
values: {
[DataName in keyof TMap as TMap[DataName]['config'] extends {
optional: false;
optional: true;
}
? DataName
: never]: TMap[DataName]['T'];
? never
: DataName]: TMap[DataName]['T'];
} & {
[DataName in keyof TMap as TMap[DataName]['config'] extends {
optional: true;
@@ -271,14 +246,14 @@ export type ExtensionDataInputValues<
[DataName in keyof TInputs[InputName]['extensionData'] as TInputs[InputName]['extensionData'][DataName]['config'] extends {
optional: true;
}
? DataName
: never]?: TInputs[InputName]['extensionData'][DataName]['T'];
? never
: DataName]: TInputs[InputName]['extensionData'][DataName]['T'];
} & {
[DataName in keyof TInputs[InputName]['extensionData'] as TInputs[InputName]['extensionData'][DataName]['config'] extends {
optional: false;
optional: true;
}
? DataName
: never]: TInputs[InputName]['extensionData'][DataName]['T'];
: never]?: TInputs[InputName]['extensionData'][DataName]['T'];
}
>;
};
@@ -287,10 +262,8 @@ export type ExtensionDataInputValues<
export type ExtensionDataRef<
TData,
TConfig extends {
optional: boolean;
} = {
optional: false;
},
optional?: true;
} = {},
> = {
id: string;
T: TData;
@@ -41,9 +41,7 @@ describe('createApiExtension', () => {
api: expect.objectContaining({
$$type: 'extension-data',
id: 'core.api.factory',
config: {
optional: false,
},
config: {},
}),
},
factory: expect.any(Function),
@@ -77,9 +75,7 @@ describe('createApiExtension', () => {
api: expect.objectContaining({
$$type: 'extension-data',
id: 'core.api.factory',
config: {
optional: false,
},
config: {},
}),
},
factory: expect.any(Function),
@@ -27,14 +27,14 @@ export type ExtensionDataInputValues<
[DataName in keyof TInputs[InputName]['extensionData'] as TInputs[InputName]['extensionData'][DataName]['config'] extends {
optional: true;
}
? DataName
: never]?: TInputs[InputName]['extensionData'][DataName]['T'];
? never
: DataName]: TInputs[InputName]['extensionData'][DataName]['T'];
} & {
[DataName in keyof TInputs[InputName]['extensionData'] as TInputs[InputName]['extensionData'][DataName]['config'] extends {
optional: false;
optional: true;
}
? DataName
: never]: TInputs[InputName]['extensionData'][DataName]['T'];
: never]?: TInputs[InputName]['extensionData'][DataName]['T'];
}
>;
};
@@ -43,10 +43,10 @@ export type ExtensionDataInputValues<
export type ExtensionDataBind<TMap extends AnyExtensionDataMap> = (
values: {
[DataName in keyof TMap as TMap[DataName]['config'] extends {
optional: false;
optional: true;
}
? DataName
: never]: TMap[DataName]['T'];
? never
: DataName]: TMap[DataName]['T'];
} & {
[DataName in keyof TMap as TMap[DataName]['config'] extends {
optional: true;
@@ -17,7 +17,7 @@
/** @public */
export type ExtensionDataRef<
TData,
TConfig extends { optional: boolean } = { optional: false },
TConfig extends { optional?: true } = {},
> = {
id: string;
T: TData;
@@ -28,7 +28,7 @@ export type ExtensionDataRef<
/** @public */
export interface ConfigurableExtensionDataRef<
TData,
TConfig extends { optional: boolean },
TConfig extends { optional?: true } = {},
> extends ExtensionDataRef<TData, TConfig> {
optional(): ConfigurableExtensionDataRef<TData, TData & { optional: true }>;
}
@@ -37,13 +37,13 @@ export interface ConfigurableExtensionDataRef<
/** @public */
export function createExtensionDataRef<TData>(
id: string,
): ConfigurableExtensionDataRef<TData, { optional: false }> {
): ConfigurableExtensionDataRef<TData> {
return {
id,
$$type: 'extension-data',
config: { optional: false },
config: {},
optional() {
return { ...this, config: { ...this.config, optional: true } };
},
} as ConfigurableExtensionDataRef<TData, { optional: false }>;
} as ConfigurableExtensionDataRef<TData>;
}