Merge pull request #26469 from backstage/rugvip/inline

add support for inline packages
This commit is contained in:
Patrik Oldsberg
2024-09-10 11:51:44 +03:00
committed by GitHub
39 changed files with 677 additions and 168 deletions
@@ -15,7 +15,6 @@
*/
import { ApiHolder, AppNode } from '../apis';
import { PortableSchema } from '../schema';
import { Expand } from '../types';
import {
ResolveInputValueOverrides,
@@ -32,6 +31,7 @@ import {
import { ExtensionInput } from './createExtensionInput';
import { z } from 'zod';
import { createSchemaFromZod } from '../schema/createSchemaFromZod';
import { InternalExtensionDefinition } from '@internal/frontend';
/**
* Convert a single extension input into a matching resolved input.
@@ -235,84 +235,6 @@ export type ExtensionDefinition<
}>;
};
/** @internal */
export type InternalExtensionDefinition<
T extends ExtensionDefinitionParameters = ExtensionDefinitionParameters,
> = ExtensionDefinition<T> & {
readonly kind?: string;
readonly namespace?: string;
readonly name?: string;
readonly attachTo: { id: string; input: string };
readonly disabled: boolean;
readonly configSchema?: PortableSchema<T['config'], T['configInput']>;
} & (
| {
readonly version: 'v1';
readonly inputs: {
[inputName in string]: {
$$type: '@backstage/ExtensionInput';
extensionData: {
[name in string]: AnyExtensionDataRef;
};
config: { optional: boolean; singleton: boolean };
};
};
readonly output: {
[name in string]: AnyExtensionDataRef;
};
factory(context: {
node: AppNode;
apis: ApiHolder;
config: object;
inputs: {
[inputName in string]: unknown;
};
}): {
[inputName in string]: unknown;
};
}
| {
readonly version: 'v2';
readonly inputs: {
[inputName in string]: ExtensionInput<
AnyExtensionDataRef,
{ optional: boolean; singleton: boolean }
>;
};
readonly output: Array<AnyExtensionDataRef>;
factory(context: {
node: AppNode;
apis: ApiHolder;
config: object;
inputs: ResolvedExtensionInputs<{
[inputName in string]: ExtensionInput<
AnyExtensionDataRef,
{ optional: boolean; singleton: boolean }
>;
}>;
}): Iterable<ExtensionDataValue<any, any>>;
}
);
/** @internal */
export function toInternalExtensionDefinition<
T extends ExtensionDefinitionParameters,
>(overrides: ExtensionDefinition<T>): InternalExtensionDefinition<T> {
const internal = overrides as InternalExtensionDefinition<T>;
if (internal.$$type !== '@backstage/ExtensionDefinition') {
throw new Error(
`Invalid extension definition instance, bad type '${internal.$$type}'`,
);
}
const version = internal.version;
if (version !== 'v1' && version !== 'v2') {
throw new Error(
`Invalid extension definition instance, bad version '${version}'`,
);
}
return internal;
}
/** @public */
export function createExtension<
UOutput extends AnyExtensionDataRef,
@@ -27,11 +27,9 @@ import {
} from './createExtensionDataRef';
import { createExtensionInput } from './createExtensionInput';
import { RouteRef } from '../routing';
import {
ExtensionDefinition,
toInternalExtensionDefinition,
} from './createExtension';
import { ExtensionDefinition } from './createExtension';
import { createExtensionDataContainer } from './createExtensionDataContainer';
import { toInternalExtensionDefinition } from '@internal/frontend';
function unused(..._any: any[]) {}
@@ -15,10 +15,10 @@
*/
import {
ExtensionDefinition,
InternalExtensionDefinition,
toInternalExtensionDefinition,
} from './createExtension';
} from '@internal/frontend';
import { ExtensionDefinition } from './createExtension';
import {
Extension,
resolveExtensionDefinition,
@@ -15,10 +15,10 @@
*/
import {
ExtensionDefinition,
InternalExtensionDefinition,
toInternalExtensionDefinition,
} from './createExtension';
} from '@internal/frontend';
import { ExtensionDefinition } from './createExtension';
import {
Extension,
ResolveExtensionId,
@@ -19,7 +19,6 @@ import {
ExtensionDefinition,
ExtensionDefinitionParameters,
ResolvedExtensionInputs,
toInternalExtensionDefinition,
} from './createExtension';
import { PortableSchema } from '../schema';
import { ExtensionInput } from './createExtensionInput';
@@ -27,6 +26,7 @@ import {
AnyExtensionDataRef,
ExtensionDataValue,
} from './createExtensionDataRef';
import { toInternalExtensionDefinition } from '@internal/frontend';
/** @public */
export interface Extension<TConfig, TConfigInput = TConfig> {