From c1de5ddf2afbd4469177155185acee1db80d60b2 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Tue, 5 Sep 2023 14:41:52 +0200 Subject: [PATCH] frontend-plugin-api: clean up configurable extension data ref type MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Fredrik Adelöw Co-authored-by: Philipp Hugenroth Signed-off-by: Patrik Oldsberg --- packages/frontend-plugin-api/api-report.md | 59 +++++-------------- .../src/extensions/createApiExtension.test.ts | 8 +-- .../src/wiring/createExtension.ts | 14 ++--- .../src/wiring/createExtensionDataRef.ts | 10 ++-- 4 files changed, 30 insertions(+), 61 deletions(-) diff --git a/packages/frontend-plugin-api/api-report.md b/packages/frontend-plugin-api/api-report.md index 85bb6aa996..2959dcb92e 100644 --- a/packages/frontend-plugin-api/api-report.md +++ b/packages/frontend-plugin-api/api-report.md @@ -35,8 +35,8 @@ export interface BackstagePlugin { export interface ConfigurableExtensionDataRef< TData, TConfig extends { - optional: boolean; - }, + optional?: true; + } = {}, > extends ExtensionDataRef { // (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, - { - optional: false; - } - >; + reactComponent: ConfigurableExtensionDataRef, {}>; + routePath: ConfigurableExtensionDataRef; + apiFactory: ConfigurableExtensionDataRef; + routeRef: ConfigurableExtensionDataRef, {}>; }; // @public (undocumented) @@ -119,12 +99,7 @@ export function createExtension< // @public (undocumented) export function createExtensionDataRef( id: string, -): ConfigurableExtensionDataRef< - TData, - { - optional: false; - } ->; +): ConfigurableExtensionDataRef; // @public (undocumented) export interface CreateExtensionOptions< @@ -245,10 +220,10 @@ export interface ExtensionBoundaryProps { export type ExtensionDataBind = ( 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; diff --git a/packages/frontend-plugin-api/src/extensions/createApiExtension.test.ts b/packages/frontend-plugin-api/src/extensions/createApiExtension.test.ts index b868fb235c..fadb814d4f 100644 --- a/packages/frontend-plugin-api/src/extensions/createApiExtension.test.ts +++ b/packages/frontend-plugin-api/src/extensions/createApiExtension.test.ts @@ -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), diff --git a/packages/frontend-plugin-api/src/wiring/createExtension.ts b/packages/frontend-plugin-api/src/wiring/createExtension.ts index 575271cb24..bcea03595b 100644 --- a/packages/frontend-plugin-api/src/wiring/createExtension.ts +++ b/packages/frontend-plugin-api/src/wiring/createExtension.ts @@ -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 = ( 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; diff --git a/packages/frontend-plugin-api/src/wiring/createExtensionDataRef.ts b/packages/frontend-plugin-api/src/wiring/createExtensionDataRef.ts index 0a3cfa5951..6d6309bee4 100644 --- a/packages/frontend-plugin-api/src/wiring/createExtensionDataRef.ts +++ b/packages/frontend-plugin-api/src/wiring/createExtensionDataRef.ts @@ -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 { optional(): ConfigurableExtensionDataRef; } @@ -37,13 +37,13 @@ export interface ConfigurableExtensionDataRef< /** @public */ export function createExtensionDataRef( id: string, -): ConfigurableExtensionDataRef { +): ConfigurableExtensionDataRef { return { id, $$type: 'extension-data', - config: { optional: false }, + config: {}, optional() { return { ...this, config: { ...this.config, optional: true } }; }, - } as ConfigurableExtensionDataRef; + } as ConfigurableExtensionDataRef; }