frontend-app-api: refactor mergeExtensionParameters -> resolveAppNodeSpecs
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
This commit is contained in:
@@ -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<string, ExtensionInstanceParameters[]>
|
||||
>();
|
||||
for (const instanceParams of extensionParams) {
|
||||
const attachmentMap = new Map<string, Map<string, AppNodeSpec[]>>();
|
||||
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<string, ExtensionInstance>();
|
||||
|
||||
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 };
|
||||
|
||||
+9
-9
@@ -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<unknown>;
|
||||
}
|
||||
|
||||
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({
|
||||
+8
-12
@@ -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<unknown>;
|
||||
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<unknown>[];
|
||||
parameters: Array<ExtensionParameters>;
|
||||
}): 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,
|
||||
}));
|
||||
Reference in New Issue
Block a user