chore: api-reports

Signed-off-by: blam <ben@blam.sh>
This commit is contained in:
blam
2024-11-19 13:05:37 +01:00
parent 066d0f00b8
commit 881f4a6d4f
13 changed files with 204 additions and 177 deletions
+15 -15
View File
@@ -18,21 +18,6 @@ const _default: FrontendPlugin<
},
{},
{
'api:catalog-import': ExtensionDefinition<{
kind: 'api';
name: undefined;
config: {};
configInput: {};
output: ConfigurableExtensionDataRef<
AnyApiFactory,
'core.api.factory',
{}
>;
inputs: {};
params: {
factory: AnyApiFactory;
};
}>;
'page:catalog-import': ExtensionDefinition<{
kind: 'page';
name: undefined;
@@ -63,6 +48,21 @@ const _default: FrontendPlugin<
routeRef?: RouteRef<AnyRouteRefParams> | undefined;
};
}>;
'api:catalog-import': ExtensionDefinition<{
kind: 'api';
name: undefined;
config: {};
configInput: {};
output: ConfigurableExtensionDataRef<
AnyApiFactory,
'core.api.factory',
{}
>;
inputs: {};
params: {
factory: AnyApiFactory;
};
}>;
}
>;
export default _default;
+15 -15
View File
@@ -146,21 +146,6 @@ const _default: FrontendPlugin<
unregisterRedirect: ExternalRouteRef<undefined>;
},
{
'api:catalog': ExtensionDefinition<{
kind: 'api';
name: undefined;
config: {};
configInput: {};
output: ConfigurableExtensionDataRef<
AnyApiFactory,
'core.api.factory',
{}
>;
inputs: {};
params: {
factory: AnyApiFactory;
};
}>;
'nav-item:catalog': ExtensionDefinition<{
kind: 'nav-item';
name: undefined;
@@ -182,6 +167,21 @@ const _default: FrontendPlugin<
routeRef: RouteRef<undefined>;
};
}>;
'api:catalog': ExtensionDefinition<{
kind: 'api';
name: undefined;
config: {};
configInput: {};
output: ConfigurableExtensionDataRef<
AnyApiFactory,
'core.api.factory',
{}
>;
inputs: {};
params: {
factory: AnyApiFactory;
};
}>;
'api:catalog/starred-entities': ExtensionDefinition<{
kind: 'api';
name: 'starred-entities';
+15 -15
View File
@@ -19,21 +19,6 @@ const _default: FrontendPlugin<
},
{},
{
'api:devtools': ExtensionDefinition<{
kind: 'api';
name: undefined;
config: {};
configInput: {};
output: ConfigurableExtensionDataRef<
AnyApiFactory,
'core.api.factory',
{}
>;
inputs: {};
params: {
factory: AnyApiFactory;
};
}>;
'page:devtools': ExtensionDefinition<{
kind: 'page';
name: undefined;
@@ -85,6 +70,21 @@ const _default: FrontendPlugin<
routeRef: RouteRef<undefined>;
};
}>;
'api:devtools': ExtensionDefinition<{
kind: 'api';
name: undefined;
config: {};
configInput: {};
output: ConfigurableExtensionDataRef<
AnyApiFactory,
'core.api.factory',
{}
>;
inputs: {};
params: {
factory: AnyApiFactory;
};
}>;
}
>;
export default _default;
+15 -15
View File
@@ -21,21 +21,6 @@ const _default: FrontendPlugin<
},
{},
{
'api:kubernetes': ExtensionDefinition<{
kind: 'api';
name: undefined;
config: {};
configInput: {};
output: ConfigurableExtensionDataRef<
AnyApiFactory,
'core.api.factory',
{}
>;
inputs: {};
params: {
factory: AnyApiFactory;
};
}>;
'page:kubernetes': ExtensionDefinition<{
kind: 'page';
name: undefined;
@@ -62,6 +47,21 @@ const _default: FrontendPlugin<
routeRef?: RouteRef<AnyRouteRefParams> | undefined;
};
}>;
'api:kubernetes': ExtensionDefinition<{
kind: 'api';
name: undefined;
config: {};
configInput: {};
output: ConfigurableExtensionDataRef<
AnyApiFactory,
'core.api.factory',
{}
>;
inputs: {};
params: {
factory: AnyApiFactory;
};
}>;
'entity-content:kubernetes/kubernetes': ExtensionDefinition<{
kind: 'entity-content';
name: 'kubernetes';
+17 -36
View File
@@ -78,13 +78,17 @@ export function createFormField<
// @alpha
export function createScaffolderFormDecorator<
TDeps extends {
[key in string]: AnyApiRef;
},
TInputSchema extends {
[key in string]: (zImpl: typeof z) => z.ZodType;
} = {
[key in string]: (zImpl: typeof z) => z.ZodType;
},
TInput extends {} = {
TDeps extends {
[key in string]: AnyApiRef;
} = {
[key in string]: AnyApiRef;
},
TInput extends JsonObject = {
[key in keyof TInputSchema]: z.infer<ReturnType<TInputSchema[key]>>;
},
>(options: {
@@ -93,7 +97,7 @@ export function createScaffolderFormDecorator<
input?: TInputSchema;
};
deps?: TDeps;
fn: (
decorator: (
ctx: ScaffolderFormDecoratorContext<TInput>,
deps: TDeps extends {
[key in string]: AnyApiRef;
@@ -103,7 +107,7 @@ export function createScaffolderFormDecorator<
}
: never,
) => Promise<void>;
}): ScaffolderFormDecorator<TInputSchema, TDeps, TInput>;
}): ScaffolderFormDecorator<TInput>;
// @alpha
export const DefaultTemplateOutputs: (props: {
@@ -221,39 +225,16 @@ export interface ScaffolderFieldProps {
}
// @alpha (undocumented)
export type ScaffolderFormDecorator<
TInputSchema extends {
[key in string]: (zImpl: typeof z) => z.ZodType;
} = {},
TDeps extends {
[key in string]: AnyApiRef;
} = {
[key in string]: AnyApiRef;
},
TInput extends {} = {
[key in keyof TInputSchema]: z.infer<ReturnType<TInputSchema[key]>>;
},
> = {
version: 'v1';
id: string;
schema?: {
input?: TInputSchema;
};
deps?: TDeps;
fn: (
ctx: ScaffolderFormDecoratorContext<TInput>,
deps: TDeps extends {
[key in string]: AnyApiRef;
}
? {
[key in keyof TDeps]: TDeps[key]['T'];
}
: never,
) => Promise<void>;
export type ScaffolderFormDecorator<TInput extends JsonObject = JsonObject> = {
readonly $$type: '@backstage/scaffolder/FormDecorator';
readonly id: string;
readonly TInput: TInput;
};
// @alpha (undocumented)
export type ScaffolderFormDecoratorContext<TInput> = {
export type ScaffolderFormDecoratorContext<
TInput extends JsonObject = JsonObject,
> = {
input: TInput;
formState: Record<string, JsonValue>;
setFormState: (
@@ -120,11 +120,11 @@ export const Stepper = (stepperProps: StepperProps) => {
reviewButtonText = 'Review',
} = components;
const analytics = useAnalytics();
const { presentation, steps } = useTemplateSchema(props.manifest);
const apiHolder = useApiHolder();
const [activeStep, setActiveStep] = useState(0);
const [isValidating, setIsValidating] = useState(false);
const [initialState] = useFormDataFromQuery(props.initialState);
const { presentation, steps } = useTemplateSchema(props.manifest);
const [stepsState, setStepsState] =
useState<Record<string, JsonValue>>(initialState);
@@ -27,12 +27,6 @@ import { analyticsApiRef } from '@backstage/core-plugin-api';
import { ScaffolderApi, scaffolderApiRef } from '../../../api';
import { catalogApiRef } from '@backstage/plugin-catalog-react';
import { catalogApiMock } from '@backstage/plugin-catalog-react/testUtils';
import { SecretsContextProvider } from '../../../secrets';
// eslint-disable-next-line @backstage/no-relative-monorepo-imports
import { ScaffolderFormDecoratorsApi } from '../../../../../scaffolder/src/alpha/api/types';
// eslint-disable-next-line @backstage/no-relative-monorepo-imports
import { formDecoratorsApiRef } from '../../../../../scaffolder/src/alpha/api/ref';
const scaffolderApiMock: jest.Mocked<ScaffolderApi> = {
cancelTask: jest.fn(),
@@ -45,19 +39,14 @@ const scaffolderApiMock: jest.Mocked<ScaffolderApi> = {
listTasks: jest.fn(),
autocomplete: jest.fn(),
};
const scaffolderDecoratorsMock: jest.Mocked<ScaffolderFormDecoratorsApi> = {
getFormDecorators: jest.fn().mockResolvedValue([]),
};
const catalogApi = catalogApiMock.mock();
const analyticsMock = mockApis.analytics();
const apis = TestApiRegistry.from(
[scaffolderApiRef, scaffolderApiMock],
[formDecoratorsApiRef, scaffolderDecoratorsMock],
[catalogApiRef, catalogApi],
[analyticsApiRef, analyticsMock],
[catalogApiRef, catalogApi],
);
describe('<Workflow />', () => {
@@ -93,33 +82,31 @@ describe('<Workflow />', () => {
});
const { getByRole, getAllByRole, getByText } = await renderInTestApp(
<SecretsContextProvider initialSecrets={{}}>
<ApiProvider apis={apis}>
<Workflow
title="Different title than template"
description={`
<ApiProvider apis={apis}>
<Workflow
title="Different title than template"
description={`
## This is markdown
- overriding the template description
`}
onCreate={onCreate}
onError={onError}
namespace="default"
templateName="docs-template"
initialState={{
name: 'prefilled-name',
age: '53',
}}
components={{
ReviewStateComponent: () => (
<h1>This is a different wrapper for the review page</h1>
),
reviewButtonText: <i>Onwards</i>,
createButtonText: <b>Make</b>,
}}
extensions={[]}
/>
</ApiProvider>
</SecretsContextProvider>,
onCreate={onCreate}
onError={onError}
namespace="default"
templateName="docs-template"
initialState={{
name: 'prefilled-name',
age: '53',
}}
components={{
ReviewStateComponent: () => (
<h1>This is a different wrapper for the review page</h1>
),
reviewButtonText: <i>Onwards</i>,
createButtonText: <b>Make</b>,
}}
extensions={[]}
/>
</ApiProvider>,
);
// Test template title is overriden
@@ -72,6 +72,7 @@ export type WorkflowProps = {
export const Workflow = (workflowProps: WorkflowProps): JSX.Element | null => {
const { title, description, namespace, templateName, onCreate, ...props } =
workflowProps;
const analytics = useAnalytics();
const styles = useStyles();
const templateRef = stringifyEntityRef({
@@ -79,9 +80,13 @@ export const Workflow = (workflowProps: WorkflowProps): JSX.Element | null => {
namespace: namespace,
name: templateName,
});
const errorApi = useApi(errorApiRef);
const { loading, manifest, error } = useTemplateParameterSchema(templateRef);
const sortedManifest = useFilteredSchemaProperties(manifest);
const minutesSaved = useTemplateTimeSavedMinutes(templateRef);
const workflowOnCreate = useCallback(
+65 -15
View File
@@ -7,25 +7,30 @@
import { AnyApiFactory } from '@backstage/frontend-plugin-api';
import { AnyRouteRefParams } from '@backstage/frontend-plugin-api';
import { ApiRef } from '@backstage/frontend-plugin-api';
import { ConfigurableExtensionDataRef } from '@backstage/frontend-plugin-api';
import { ExtensionDefinition } from '@backstage/frontend-plugin-api';
import { ExtensionInput } from '@backstage/frontend-plugin-api';
import { ExternalRouteRef } from '@backstage/frontend-plugin-api';
import { FieldExtensionOptions } from '@backstage/plugin-scaffolder-react';
import { FormField } from '@internal/scaffolder';
import { FormFieldExtensionData } from '@backstage/plugin-scaffolder-react/alpha';
import type { FormProps as FormProps_2 } from '@rjsf/core';
import { FormProps as FormProps_3 } from '@backstage/plugin-scaffolder-react';
import { FrontendPlugin } from '@backstage/frontend-plugin-api';
import { IconComponent } from '@backstage/core-plugin-api';
import { JsonValue } from '@backstage/types';
import { JSX as JSX_2 } from 'react';
import { LayoutOptions } from '@backstage/plugin-scaffolder-react';
import { PathParams } from '@backstage/core-plugin-api';
import { default as React_2 } from 'react';
import { ReviewStepProps } from '@backstage/plugin-scaffolder-react';
import { RouteRef } from '@backstage/frontend-plugin-api';
import { ScaffolderFormDecorator } from '@backstage/plugin-scaffolder-react/alpha';
import { SubRouteRef } from '@backstage/frontend-plugin-api';
import { TemplateEntityV1beta3 } from '@backstage/plugin-scaffolder-common';
import { TemplateGroupFilter } from '@backstage/plugin-scaffolder-react';
import { TemplateParameterSchema } from '@backstage/plugin-scaffolder-react';
import { TranslationRef } from '@backstage/core-plugin-api/alpha';
// @alpha (undocumented)
@@ -49,21 +54,6 @@ const _default: FrontendPlugin<
}>;
},
{
'api:scaffolder': ExtensionDefinition<{
kind: 'api';
name: undefined;
config: {};
configInput: {};
output: ConfigurableExtensionDataRef<
AnyApiFactory,
'core.api.factory',
{}
>;
inputs: {};
params: {
factory: AnyApiFactory;
};
}>;
'page:scaffolder': ExtensionDefinition<{
kind: 'page';
name: undefined;
@@ -126,6 +116,21 @@ const _default: FrontendPlugin<
field: () => Promise<FormField>;
};
}>;
'api:scaffolder': ExtensionDefinition<{
kind: 'api';
name: undefined;
config: {};
configInput: {};
output: ConfigurableExtensionDataRef<
AnyApiFactory,
'core.api.factory',
{}
>;
inputs: {};
params: {
factory: AnyApiFactory;
};
}>;
'api:scaffolder/form-fields': ExtensionDefinition<{
config: {};
configInput: {};
@@ -157,6 +162,24 @@ const _default: FrontendPlugin<
>;
export default _default;
// @alpha (undocumented)
export class DefaultScaffolderFormDecoratorsApi
implements ScaffolderFormDecoratorsApi
{
// (undocumented)
static create(options?: {
decorators: ScaffolderFormDecorator[];
}): DefaultScaffolderFormDecoratorsApi;
// (undocumented)
getFormDecorators(): Promise<ScaffolderFormDecorator[]>;
}
// @alpha (undocumented)
export const formDecoratorsApiRef: ApiRef<ScaffolderFormDecoratorsApi>;
// @alpha (undocumented)
export const formFieldsApiRef: ApiRef<ScaffolderFormFieldsApi>;
// @alpha @deprecated
export type FormProps = Pick<
FormProps_2,
@@ -170,6 +193,18 @@ export type ScaffolderCustomFieldExplorerClassKey =
| 'fieldForm'
| 'preview';
// @alpha (undocumented)
export interface ScaffolderFormDecoratorsApi {
// (undocumented)
getFormDecorators(): Promise<ScaffolderFormDecorator[]>;
}
// @alpha (undocumented)
export interface ScaffolderFormFieldsApi {
// (undocumented)
getFormFields(): Promise<FormFieldExtensionData[]>;
}
// @public (undocumented)
export type ScaffolderTemplateEditorClassKey =
| 'root'
@@ -379,5 +414,20 @@ export type TemplateWizardPageProps = {
};
};
// @alpha (undocumented)
export const useFormDecorators: ({
manifest,
}: {
manifest?: TemplateParameterSchema | undefined;
}) => {
run: (opts: {
formState: Record<string, JsonValue>;
secrets: Record<string, string>;
}) => Promise<{
formState: Record<string, JsonValue>;
secrets: Record<string, string>;
}>;
};
// (No @packageDocumentation comment for this package)
```
+2
View File
@@ -17,10 +17,12 @@
import { createApiRef } from '@backstage/frontend-plugin-api';
import { ScaffolderFormFieldsApi, ScaffolderFormDecoratorsApi } from './types';
/** @alpha */
export const formFieldsApiRef = createApiRef<ScaffolderFormFieldsApi>({
id: 'plugin.scaffolder.form-fields',
});
/** @alpha */
export const formDecoratorsApiRef = createApiRef<ScaffolderFormDecoratorsApi>({
id: 'plugin.scaffolder.form-decorators',
});
@@ -19,10 +19,12 @@ import {
ScaffolderFormDecorator,
} from '@backstage/plugin-scaffolder-react/alpha';
/** @alpha */
export interface ScaffolderFormFieldsApi {
getFormFields(): Promise<FormFieldExtensionData[]>;
}
/** @alpha */
export interface ScaffolderFormDecoratorsApi {
getFormDecorators(): Promise<ScaffolderFormDecorator[]>;
}
+15 -15
View File
@@ -22,21 +22,6 @@ const _default: FrontendPlugin<
},
{},
{
'api:search': ExtensionDefinition<{
kind: 'api';
name: undefined;
config: {};
configInput: {};
output: ConfigurableExtensionDataRef<
AnyApiFactory,
'core.api.factory',
{}
>;
inputs: {};
params: {
factory: AnyApiFactory;
};
}>;
'nav-item:search': ExtensionDefinition<{
kind: 'nav-item';
name: undefined;
@@ -58,6 +43,21 @@ const _default: FrontendPlugin<
routeRef: RouteRef<undefined>;
};
}>;
'api:search': ExtensionDefinition<{
kind: 'api';
name: undefined;
config: {};
configInput: {};
output: ConfigurableExtensionDataRef<
AnyApiFactory,
'core.api.factory',
{}
>;
inputs: {};
params: {
factory: AnyApiFactory;
};
}>;
'page:search': ExtensionDefinition<{
config: {
noTrack: boolean;
+15 -15
View File
@@ -31,21 +31,6 @@ const _default: FrontendPlugin<
},
{},
{
'api:techdocs': ExtensionDefinition<{
kind: 'api';
name: undefined;
config: {};
configInput: {};
output: ConfigurableExtensionDataRef<
AnyApiFactory,
'core.api.factory',
{}
>;
inputs: {};
params: {
factory: AnyApiFactory;
};
}>;
'page:techdocs': ExtensionDefinition<{
kind: 'page';
name: undefined;
@@ -97,6 +82,21 @@ const _default: FrontendPlugin<
routeRef: RouteRef<undefined>;
};
}>;
'api:techdocs': ExtensionDefinition<{
kind: 'api';
name: undefined;
config: {};
configInput: {};
output: ConfigurableExtensionDataRef<
AnyApiFactory,
'core.api.factory',
{}
>;
inputs: {};
params: {
factory: AnyApiFactory;
};
}>;
'api:techdocs/storage': ExtensionDefinition<{
kind: 'api';
name: 'storage';