From b3977b9864b55c284fa0cec0b9e622d6381923d0 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sun, 15 Oct 2023 13:11:11 +0200 Subject: [PATCH] frontend-app-api: refactor mergeExtensionParameters -> resolveAppNodeSpecs Signed-off-by: Patrik Oldsberg --- .../frontend-app-api/src/wiring/createApp.tsx | 21 +++++++------------ .../resolveAppNodeSpecs.test.ts} | 18 ++++++++-------- .../resolveAppNodeSpecs.ts} | 20 +++++++----------- 3 files changed, 24 insertions(+), 35 deletions(-) rename packages/frontend-app-api/src/wiring/{parameters.test.ts => graph/resolveAppNodeSpecs.test.ts} (93%) rename packages/frontend-app-api/src/wiring/{parameters.ts => graph/resolveAppNodeSpecs.ts} (93%) diff --git a/packages/frontend-app-api/src/wiring/createApp.tsx b/packages/frontend-app-api/src/wiring/createApp.tsx index dc132b6654..b2c82dc8cf 100644 --- a/packages/frontend-app-api/src/wiring/createApp.tsx +++ b/packages/frontend-app-api/src/wiring/createApp.tsx @@ -32,10 +32,7 @@ import { createExtensionInstance, ExtensionInstance, } from './createExtensionInstance'; -import { - ExtensionInstanceParameters, - mergeExtensionParameters, -} from './parameters'; +import { resolveAppNodeSpecs } from './graph/resolveAppNodeSpecs'; import { AnyApiFactory, ApiHolder, @@ -96,6 +93,7 @@ import { RoutingProvider } from '../routing/RoutingProvider'; import { resolveRouteBindings } from '../routing/resolveRouteBindings'; import { collectRouteIds } from '../routing/collectRouteIds'; import { readAppExtensionsConfig } from './graph/readAppExtensionsConfig'; +import { AppNodeSpec } from './graph'; /** @public */ export interface ExtensionTreeNode { @@ -197,7 +195,7 @@ export function createInstances(options: { // pull in default extension instance from discovered packages // apply config to adjust default extension instances and add more - const extensionParams = mergeExtensionParameters({ + const appNodeSpecs = resolveAppNodeSpecs({ features: options.features, builtinExtensions, parameters: readAppExtensionsConfig(options.config), @@ -207,11 +205,8 @@ export function createInstances(options: { // We do it at this point to ensure that merging (if any) of config has already happened // Create attachment map so that we can look attachments up during instance creation - const attachmentMap = new Map< - string, - Map - >(); - for (const instanceParams of extensionParams) { + const attachmentMap = new Map>(); + for (const instanceParams of appNodeSpecs) { const extensionId = instanceParams.attachTo.id; const pointId = instanceParams.attachTo.input; let pointMap = attachmentMap.get(extensionId); @@ -231,9 +226,7 @@ export function createInstances(options: { const instances = new Map(); - function createInstance( - instanceParams: ExtensionInstanceParameters, - ): ExtensionInstance { + function createInstance(instanceParams: AppNodeSpec): ExtensionInstance { const extensionId = instanceParams.extension.id; const existingInstance = instances.get(extensionId); if (existingInstance) { @@ -261,7 +254,7 @@ export function createInstances(options: { } const coreInstance = createInstance( - extensionParams.find(p => p.extension.id === 'core')!, + appNodeSpecs.find(p => p.extension.id === 'core')!, ); return { coreInstance, instances }; diff --git a/packages/frontend-app-api/src/wiring/parameters.test.ts b/packages/frontend-app-api/src/wiring/graph/resolveAppNodeSpecs.test.ts similarity index 93% rename from packages/frontend-app-api/src/wiring/parameters.test.ts rename to packages/frontend-app-api/src/wiring/graph/resolveAppNodeSpecs.test.ts index 89d9c0c3f3..1d3c0a26ed 100644 --- a/packages/frontend-app-api/src/wiring/parameters.test.ts +++ b/packages/frontend-app-api/src/wiring/graph/resolveAppNodeSpecs.test.ts @@ -19,7 +19,7 @@ import { createPlugin, Extension, } from '@backstage/frontend-plugin-api'; -import { mergeExtensionParameters } from './parameters'; +import { resolveAppNodeSpecs } from './resolveAppNodeSpecs'; function makeExt( id: string, @@ -33,10 +33,10 @@ function makeExt( } as Extension; } -describe('mergeExtensionParameters', () => { +describe('resolveAppNodeSpecs', () => { it('should filter out disabled extension instances', () => { expect( - mergeExtensionParameters({ + resolveAppNodeSpecs({ features: [], builtinExtensions: [makeExt('a', 'disabled')], parameters: [], @@ -48,7 +48,7 @@ describe('mergeExtensionParameters', () => { const a = makeExt('a'); const b = makeExt('b'); expect( - mergeExtensionParameters({ + resolveAppNodeSpecs({ features: [], builtinExtensions: [a, b], parameters: [], @@ -64,7 +64,7 @@ describe('mergeExtensionParameters', () => { const b = makeExt('b'); const pluginA = createPlugin({ id: 'test', extensions: [a] }); expect( - mergeExtensionParameters({ + resolveAppNodeSpecs({ features: [pluginA], builtinExtensions: [b], parameters: [ @@ -89,7 +89,7 @@ describe('mergeExtensionParameters', () => { const b = makeExt('b'); const plugin = createPlugin({ id: 'test', extensions: [a, b] }); expect( - mergeExtensionParameters({ + resolveAppNodeSpecs({ features: [plugin], builtinExtensions: [], parameters: [ @@ -127,7 +127,7 @@ describe('mergeExtensionParameters', () => { const a = makeExt('a', 'disabled'); const b = makeExt('b', 'disabled'); expect( - mergeExtensionParameters({ + resolveAppNodeSpecs({ features: [createPlugin({ id: 'empty', extensions: [] })], builtinExtensions: [a, b], parameters: [ @@ -155,7 +155,7 @@ describe('mergeExtensionParameters', () => { const bOverride = makeExt('b', 'disabled', 'other'); const cOverride = makeExt('c'); - const result = mergeExtensionParameters({ + const result = resolveAppNodeSpecs({ features: [ plugin, createExtensionOverrides({ @@ -188,7 +188,7 @@ describe('mergeExtensionParameters', () => { const bOverride = makeExt('b', 'disabled'); const cOverride = makeExt('a', 'disabled'); - const result = mergeExtensionParameters({ + const result = resolveAppNodeSpecs({ features: [ createPlugin({ id: 'test', extensions: [a, b, c] }), createExtensionOverrides({ diff --git a/packages/frontend-app-api/src/wiring/parameters.ts b/packages/frontend-app-api/src/wiring/graph/resolveAppNodeSpecs.ts similarity index 93% rename from packages/frontend-app-api/src/wiring/parameters.ts rename to packages/frontend-app-api/src/wiring/graph/resolveAppNodeSpecs.ts index 329c9ea42a..8cad54f4be 100644 --- a/packages/frontend-app-api/src/wiring/parameters.ts +++ b/packages/frontend-app-api/src/wiring/graph/resolveAppNodeSpecs.ts @@ -20,22 +20,16 @@ import { ExtensionOverrides, } from '@backstage/frontend-plugin-api'; // eslint-disable-next-line @backstage/no-relative-monorepo-imports -import { toInternalExtensionOverrides } from '../../../frontend-plugin-api/src/wiring/createExtensionOverrides'; -import { ExtensionParameters } from './graph/readAppExtensionsConfig'; - -export interface ExtensionInstanceParameters { - extension: Extension; - source?: BackstagePlugin; - attachTo: { id: string; input: string }; - config?: unknown; -} +import { toInternalExtensionOverrides } from '../../../../frontend-plugin-api/src/wiring/createExtensionOverrides'; +import { ExtensionParameters } from './readAppExtensionsConfig'; +import { AppNodeSpec } from './types'; /** @internal */ -export function mergeExtensionParameters(options: { +export function resolveAppNodeSpecs(options: { features: (BackstagePlugin | ExtensionOverrides)[]; builtinExtensions: Extension[]; parameters: Array; -}): ExtensionInstanceParameters[] { +}): AppNodeSpec[] { const { builtinExtensions, parameters } = options; const plugins = options.features.filter( @@ -207,8 +201,10 @@ export function mergeExtensionParameters(options: { return configuredExtensions .filter(override => !override.params.disabled) .map(param => ({ - extension: param.extension, + id: param.extension.id, attachTo: param.params.attachTo, + extension: param.extension, + disabled: param.params.disabled, source: param.params.source, config: param.params.config, }));