frontend-app-api: add createAppGraph

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
This commit is contained in:
Patrik Oldsberg
2023-10-18 13:05:48 +02:00
parent 65b6a91894
commit 90b9ef567d
2 changed files with 48 additions and 0 deletions
@@ -0,0 +1,47 @@
/*
* Copyright 2023 The Backstage Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import {
BackstagePlugin,
Extension,
ExtensionOverrides,
} from '@backstage/frontend-plugin-api';
import { readAppExtensionsConfig } from './readAppExtensionsConfig';
import { resolveAppGraph } from './resolveAppGraph';
import { resolveAppNodeSpecs } from './resolveAppNodeSpecs';
import { AppGraph } from './types';
import { Config } from '@backstage/config';
import { instantiateAppNodeTree } from './instantiateAppNodeTree';
/** @internal */
export interface CreateAppGraphOptions {
features: (BackstagePlugin | ExtensionOverrides)[];
builtinExtensions: Extension<unknown>[];
config: Config;
}
/** @internal */
export function createAppGraph(options: CreateAppGraphOptions): AppGraph {
const appGraph = resolveAppGraph(
resolveAppNodeSpecs({
features: options.features,
builtinExtensions: options.builtinExtensions,
parameters: readAppExtensionsConfig(options.config),
}),
);
instantiateAppNodeTree(appGraph.root);
return appGraph;
}
@@ -20,3 +20,4 @@ export type {
AppNodeInstance,
AppNodeSpec,
} from './types';
export { createAppGraph } from './createAppGraph';