Remove the concept of extension instances on the surface

Co-authored-by: Patrik Oldsberg <poldsberg@gmail.com>
Co-authored-by: Johan Haals <johan.haals@gmail.com>
Signed-off-by: Fredrik Adelöw <freben@gmail.com>
This commit is contained in:
Fredrik Adelöw
2023-08-30 11:59:37 +02:00
parent bb126d2626
commit c93e9d5bf7
10 changed files with 174 additions and 345 deletions
@@ -41,6 +41,9 @@ export function createPageExtension<
configSchema: PortableSchema<TConfig>;
}
) & {
id: string;
at?: string;
disabled?: boolean;
inputs?: TInputs;
component: (props: {
config: TConfig;
@@ -60,6 +63,9 @@ export function createPageExtension<
) as PortableSchema<TConfig>);
return createExtension({
id: options.id,
at: options.at ?? 'core.router/routes',
disabled: options.disabled,
output: {
component: coreExtensionData.reactComponent,
path: coreExtensionData.routePath,
@@ -37,5 +37,4 @@ export {
type ExtensionDataBind,
type ExtensionDataRef,
type ExtensionDataValue,
type ExtensionInstanceParameters,
} from './types';
+15 -14
View File
@@ -54,6 +54,9 @@ export interface CreateExtensionOptions<
TPoint extends Record<string, { extensionData: AnyExtensionDataMap }>,
TConfig,
> {
id: string;
at: string;
disabled?: boolean;
inputs?: TPoint;
output: TData;
configSchema?: PortableSchema<TConfig>;
@@ -71,7 +74,9 @@ export interface CreateExtensionOptions<
/** @public */
export interface Extension<TConfig> {
$$type: 'extension';
// TODO: will extensions have a default "at" as part of their contract, making it optional in the instance config?
id: string;
at: string;
disabled: boolean;
inputs: Record<string, { extensionData: AnyExtensionDataMap }>;
output: AnyExtensionDataMap;
configSchema?: PortableSchema<TConfig>;
@@ -88,29 +93,25 @@ export function createExtension<
TPoint extends Record<string, { extensionData: AnyExtensionDataMap }>,
TConfig = never,
>(options: CreateExtensionOptions<TData, TPoint, TConfig>): Extension<TConfig> {
return { ...options, $$type: 'extension', inputs: options.inputs ?? {} };
}
/** @public */
export interface ExtensionInstanceParameters {
id: string;
at: string;
extension: Extension<unknown>;
config?: unknown;
disabled?: boolean;
return {
...options,
disabled: options.disabled ?? false,
$$type: 'extension',
inputs: options.inputs ?? {},
};
}
/** @public */
export interface BackstagePluginOptions {
id: string;
defaultExtensionInstances?: ExtensionInstanceParameters[];
defaultExtensions?: Extension<unknown>[];
}
/** @public */
export interface BackstagePlugin {
$$type: 'backstage-plugin';
id: string;
defaultExtensionInstances: ExtensionInstanceParameters[];
defaultExtensions: Extension<unknown>[];
}
/** @public */
@@ -118,6 +119,6 @@ export function createPlugin(options: BackstagePluginOptions): BackstagePlugin {
return {
...options,
$$type: 'backstage-plugin',
defaultExtensionInstances: options.defaultExtensionInstances ?? [],
defaultExtensions: options.defaultExtensions ?? [],
};
}