frontend-plugin-api: move extension instance creation to frontend-app-api

Co-authored-by: Fredrik Adelöw <freben@gmail.com>
Co-authored-by: Johan Haals <johan.haals@gmail.com>
Co-authored-by: Vincenzo Scamporlino <vincenzos@spotify.com>
Co-authored-by: Philipp Hugenroth <philipph@spotify.com>
Co-authored-by: Camila Belo <camilaibs@gmail.com>
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
This commit is contained in:
Patrik Oldsberg
2023-08-21 14:54:40 +02:00
parent fe40e6de46
commit 6ef12e1346
7 changed files with 63 additions and 69 deletions
@@ -43,14 +43,6 @@ export function createExtension<
>,
>(options: CreateExtensionOptions<TData, TPoint>): Extension;
// @public (undocumented)
export function createExtensionInstance(options: {
id: string;
extension: Extension;
config: unknown;
attachments: Record<string, ExtensionInstance[]>;
}): ExtensionInstance;
// @public (undocumented)
export interface CreateExtensionOptions<
TData extends AnyExtensionDataMap,
@@ -106,9 +98,6 @@ export type ExtensionDataBind<TData extends AnyExtensionDataMap> = {
[K in keyof TData]: (value: TData[K]['T']) => void;
};
// @public (undocumented)
export type ExtensionDataId = string;
// @public (undocumented)
export type ExtensionDataRef<T> = {
id: string;
@@ -121,16 +110,6 @@ export type ExtensionDataValue<TData extends AnyExtensionDataMap> = {
[K in keyof TData]: TData[K]['T'];
};
// @public (undocumented)
export interface ExtensionInstance {
// (undocumented)
$$type: 'extension-instance';
// (undocumented)
data: Map<ExtensionDataId, unknown>;
// (undocumented)
id: string;
}
// @public (undocumented)
export interface ExtensionInstanceConfig {
// (undocumented)
@@ -22,18 +22,15 @@
export {
createExtension,
createExtensionInstance,
coreExtensionData,
createPlugin,
type ExtensionInstanceConfig,
type BackstagePlugin,
type ExtensionInstance,
type Extension,
type AnyExtensionDataMap,
type BackstagePluginOptions,
type CreateExtensionOptions,
type ExtensionDataBind,
type ExtensionDataId,
type ExtensionDataRef,
type ExtensionDataValue,
} from './types';
-38
View File
@@ -14,7 +14,6 @@
* limitations under the License.
*/
import mapValues from 'lodash/mapValues';
import { ComponentType } from 'react';
/** @public */
@@ -86,43 +85,6 @@ export function createExtension<
return { ...options, $$type: 'extension', inputs: options.inputs ?? {} };
}
/** @public */
export type ExtensionDataId = string;
/** @public */
export interface ExtensionInstance {
id: string;
data: Map<ExtensionDataId, unknown>;
$$type: 'extension-instance';
}
/** @public */
export function createExtensionInstance(options: {
id: string;
extension: Extension;
config: unknown;
attachments: Record<string, ExtensionInstance[]>;
}): ExtensionInstance {
const { extension, config, attachments } = options;
const extensionData = new Map<ExtensionDataId, unknown>();
extension.factory({
config,
bind: mapValues(extension.output, ref => {
return (value: unknown) => extensionData.set(ref.id, value);
}),
inputs: mapValues(
extension.inputs,
({ extensionData: pointData }, inputName) => {
// TODO: validation
return (attachments[inputName] ?? []).map(attachment =>
mapValues(pointData, ref => attachment.data.get(ref.id)),
);
},
),
});
return { id: options.id, data: extensionData, $$type: 'extension-instance' };
}
/** @public */
export interface ExtensionInstanceConfig {
id: string;