From 91eed37a39c193c100a0e032b5121df2baa15c47 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 2 Sep 2022 16:51:56 +0200 Subject: [PATCH] backend-plugin-api: properly forward lack of feature options Signed-off-by: Patrik Oldsberg --- .changeset/famous-cups-roll.md | 5 ++++ packages/backend-plugin-api/api-report.md | 16 ++++++++++-- .../src/wiring/factories.test.ts | 25 +++++++++++++++++++ .../src/wiring/factories.ts | 8 ++++-- .../src/next/wiring/TestBackend.test.ts | 2 +- plugins/catalog-backend/api-report.md | 2 +- .../catalog-node/src/catalogService.test.ts | 2 +- plugins/scaffolder-backend/api-report.md | 2 +- .../extension/ScaffolderCatalogModule.test.ts | 2 +- 9 files changed, 55 insertions(+), 9 deletions(-) create mode 100644 .changeset/famous-cups-roll.md diff --git a/.changeset/famous-cups-roll.md b/.changeset/famous-cups-roll.md new file mode 100644 index 0000000000..fdd5559c72 --- /dev/null +++ b/.changeset/famous-cups-roll.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-plugin-api': patch +--- + +Updated `createBackendPlugin` and `createBackendModule` to properly forward lack of options. diff --git a/packages/backend-plugin-api/api-report.md b/packages/backend-plugin-api/api-report.md index 01423390e6..326470535e 100644 --- a/packages/backend-plugin-api/api-report.md +++ b/packages/backend-plugin-api/api-report.md @@ -72,14 +72,26 @@ export const cacheServiceRef: ServiceRef; export const configServiceRef: ServiceRef; // @public (undocumented) -export function createBackendModule( +export function createBackendModule< + TOptions extends + | { + [name: string]: unknown; + } + | undefined = undefined, +>( config: BackendModuleConfig, ): undefined extends TOptions ? (options?: TOptions) => BackendFeature : (options: TOptions) => BackendFeature; // @public (undocumented) -export function createBackendPlugin( +export function createBackendPlugin< + TOptions extends + | { + [name: string]: unknown; + } + | undefined = undefined, +>( config: BackendPluginConfig, ): undefined extends TOptions ? (options?: TOptions) => BackendFeature diff --git a/packages/backend-plugin-api/src/wiring/factories.test.ts b/packages/backend-plugin-api/src/wiring/factories.test.ts index 6cfcdd06cc..110d7b4f3f 100644 --- a/packages/backend-plugin-api/src/wiring/factories.test.ts +++ b/packages/backend-plugin-api/src/wiring/factories.test.ts @@ -56,6 +56,18 @@ describe('createBackendPlugin', () => { // @ts-expect-error expect(plugin({ b: 'b' })).toBeDefined(); }); + + it('should create plugins without options', () => { + const plugin = createBackendPlugin({ + id: 'x', + register() {}, + }); + expect(plugin).toBeDefined(); + // @ts-expect-error + expect(plugin({ a: 'a' })).toBeDefined(); + // @ts-expect-error + expect(plugin({})).toBeDefined(); + }); }); describe('createBackendModule', () => { @@ -86,4 +98,17 @@ describe('createBackendModule', () => { // @ts-expect-error expect(mod({ b: 'b' })).toBeDefined(); }); + + it('should create modules without options', () => { + const mod = createBackendModule({ + pluginId: 'x', + moduleId: 'y', + register() {}, + }); + expect(mod).toBeDefined(); + // @ts-expect-error + expect(mod({ a: 'a' })).toBeDefined(); + // @ts-expect-error + expect(mod({})).toBeDefined(); + }); }); diff --git a/packages/backend-plugin-api/src/wiring/factories.ts b/packages/backend-plugin-api/src/wiring/factories.ts index 68f13f6c30..491a18c9db 100644 --- a/packages/backend-plugin-api/src/wiring/factories.ts +++ b/packages/backend-plugin-api/src/wiring/factories.ts @@ -43,7 +43,9 @@ export interface BackendPluginConfig { } /** @public */ -export function createBackendPlugin( +export function createBackendPlugin< + TOptions extends { [name: string]: unknown } | undefined = undefined, +>( config: BackendPluginConfig, ): undefined extends TOptions ? (options?: TOptions) => BackendFeature @@ -67,7 +69,9 @@ export interface BackendModuleConfig { } /** @public */ -export function createBackendModule( +export function createBackendModule< + TOptions extends { [name: string]: unknown } | undefined = undefined, +>( config: BackendModuleConfig, ): undefined extends TOptions ? (options?: TOptions) => BackendFeature diff --git a/packages/backend-test-utils/src/next/wiring/TestBackend.test.ts b/packages/backend-test-utils/src/next/wiring/TestBackend.test.ts index 49309b201b..164e06d3b5 100644 --- a/packages/backend-test-utils/src/next/wiring/TestBackend.test.ts +++ b/packages/backend-test-utils/src/next/wiring/TestBackend.test.ts @@ -89,7 +89,7 @@ describe('TestBackend', () => { await startTestBackend({ services: [sf], - features: [testModule({})], + features: [testModule()], }); expect(testFn).toHaveBeenCalledWith('winning'); diff --git a/plugins/catalog-backend/api-report.md b/plugins/catalog-backend/api-report.md index 0460fbc5e9..a92ebb9624 100644 --- a/plugins/catalog-backend/api-report.md +++ b/plugins/catalog-backend/api-report.md @@ -225,7 +225,7 @@ export type CatalogPermissionRule = PermissionRule; // @alpha -export const catalogPlugin: (options?: unknown) => BackendFeature; +export const catalogPlugin: (options?: undefined) => BackendFeature; // @public (undocumented) export interface CatalogProcessingEngine { diff --git a/plugins/catalog-node/src/catalogService.test.ts b/plugins/catalog-node/src/catalogService.test.ts index 6e9426d48b..5599218988 100644 --- a/plugins/catalog-node/src/catalogService.test.ts +++ b/plugins/catalog-node/src/catalogService.test.ts @@ -53,7 +53,7 @@ describe('catalogServiceRef', () => { await startTestBackend({ services: [mockDiscoveryFactory], - features: [testModule({})], + features: [testModule()], }); }); }); diff --git a/plugins/scaffolder-backend/api-report.md b/plugins/scaffolder-backend/api-report.md index 7a63ed4bb0..44bf45061b 100644 --- a/plugins/scaffolder-backend/api-report.md +++ b/plugins/scaffolder-backend/api-report.md @@ -556,7 +556,7 @@ export type RunCommandOptions = { }; // @alpha -export const scaffolderCatalogModule: (options?: unknown) => BackendFeature; +export const scaffolderCatalogModule: (options?: undefined) => BackendFeature; // @public (undocumented) export class ScaffolderEntitiesProcessor implements CatalogProcessor { diff --git a/plugins/scaffolder-backend/src/extension/ScaffolderCatalogModule.test.ts b/plugins/scaffolder-backend/src/extension/ScaffolderCatalogModule.test.ts index 1ced3dd676..7d8c3cc140 100644 --- a/plugins/scaffolder-backend/src/extension/ScaffolderCatalogModule.test.ts +++ b/plugins/scaffolder-backend/src/extension/ScaffolderCatalogModule.test.ts @@ -24,7 +24,7 @@ describe('ScaffolderCatalogModule', () => { const extensionPoint = { addProcessor: jest.fn() }; await startTestBackend({ extensionPoints: [[catalogProcessingExtensionPoint, extensionPoint]], - features: [scaffolderCatalogModule({})], + features: [scaffolderCatalogModule()], }); expect(extensionPoint.addProcessor).toHaveBeenCalledWith(