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:
@@ -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>;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user