@backstage/plugin-scaffolder 1.38.2 → 1.39.0-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  # @backstage/plugin-scaffolder
2
2
 
3
+ ## 1.39.0-next.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 5ff93bf: Added functionality to register a Template Outputs Component in the new frontend system.
8
+
9
+ ### Patch Changes
10
+
11
+ - Updated dependencies
12
+ - @backstage/plugin-scaffolder-common@2.3.0-next.0
13
+ - @backstage/ui@0.17.2-next.0
14
+ - @backstage/plugin-catalog-react@3.2.2-next.0
15
+ - @backstage/plugin-scaffolder-react@2.1.0-next.0
16
+ - @backstage/core-components@0.18.14-next.0
17
+ - @backstage/plugin-techdocs-react@1.3.15-next.0
18
+
3
19
  ## 1.38.2
4
20
 
5
21
  ### Patch Changes
@@ -4,15 +4,21 @@ import { Content } from '@backstage/core-components';
4
4
  import { BreadcrumbEntry } from '@backstage/frontend-plugin-api';
5
5
  import { OngoingTaskBody } from '../../components/OngoingTask/OngoingTask.esm.js';
6
6
  import { ListTaskPageContent } from '../../components/ListTasksPage/ListTasksPage.esm.js';
7
+ import { useTaskEventStream } from '@backstage/plugin-scaffolder-react';
7
8
 
8
- function TaskDetailWithBreadcrumb() {
9
+ function TaskDetailWithBreadcrumb(props) {
9
10
  const { taskId } = useParams();
11
+ const taskStream = useTaskEventStream(taskId);
12
+ const templateRef = taskStream.task?.spec.templateInfo?.entityRef;
13
+ const TemplateOutputsComponent = props.templateOutputsComponents?.find(
14
+ (registration) => registration.templateRefs.includes(templateRef ?? "")
15
+ )?.component;
10
16
  if (!taskId) {
11
- return /* @__PURE__ */ jsx(OngoingTaskBody, {});
17
+ return /* @__PURE__ */ jsx(OngoingTaskBody, { TemplateOutputsComponent });
12
18
  }
13
- return /* @__PURE__ */ jsx(BreadcrumbEntry, { entry: { label: taskId, href: taskId }, children: /* @__PURE__ */ jsx(OngoingTaskBody, {}) });
19
+ return /* @__PURE__ */ jsx(BreadcrumbEntry, { entry: { label: taskId, href: taskId }, children: /* @__PURE__ */ jsx(OngoingTaskBody, { TemplateOutputsComponent }) });
14
20
  }
15
- function TasksSubPage() {
21
+ function TasksSubPage(props) {
16
22
  return /* @__PURE__ */ jsxs(Routes, { children: [
17
23
  /* @__PURE__ */ jsx(
18
24
  Route,
@@ -21,7 +27,18 @@ function TasksSubPage() {
21
27
  element: /* @__PURE__ */ jsx(Content, { children: /* @__PURE__ */ jsx(ListTaskPageContent, {}) })
22
28
  }
23
29
  ),
24
- /* @__PURE__ */ jsx(Route, { path: ":taskId", element: /* @__PURE__ */ jsx(TaskDetailWithBreadcrumb, {}) })
30
+ /* @__PURE__ */ jsx(
31
+ Route,
32
+ {
33
+ path: ":taskId",
34
+ element: /* @__PURE__ */ jsx(
35
+ TaskDetailWithBreadcrumb,
36
+ {
37
+ templateOutputsComponents: props.templateOutputsComponents
38
+ }
39
+ )
40
+ }
41
+ )
25
42
  ] });
26
43
  }
27
44
 
@@ -1 +1 @@
1
- {"version":3,"file":"TasksSubPage.esm.js","sources":["../../../src/alpha/components/TasksSubPage.tsx"],"sourcesContent":["/*\n * Copyright 2026 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Routes, Route, useParams } from 'react-router-dom';\nimport { Content } from '@backstage/core-components';\nimport { BreadcrumbEntry } from '@backstage/frontend-plugin-api';\nimport { OngoingTaskBody } from '../../components/OngoingTask';\nimport { ListTaskPageContent } from '../../components/ListTasksPage';\n\nfunction TaskDetailWithBreadcrumb() {\n const { taskId } = useParams<{ taskId: string }>();\n if (!taskId) {\n return <OngoingTaskBody />;\n }\n return (\n <BreadcrumbEntry entry={{ label: taskId, href: taskId }}>\n <OngoingTaskBody />\n </BreadcrumbEntry>\n );\n}\n\n/**\n * Sub-page for the tasks tab. Renders the task list at the index route\n * and the ongoing task detail at the parameterized route.\n *\n * @internal\n */\nexport function TasksSubPage() {\n return (\n <Routes>\n <Route\n index\n element={\n <Content>\n <ListTaskPageContent />\n </Content>\n }\n />\n <Route path=\":taskId\" element={<TaskDetailWithBreadcrumb />} />\n </Routes>\n );\n}\n"],"names":[],"mappings":";;;;;;;AAsBA,SAAS,wBAAA,GAA2B;AAClC,EAAA,MAAM,EAAE,MAAA,EAAO,GAAI,SAAA,EAA8B;AACjD,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,2BAAQ,eAAA,EAAA,EAAgB,CAAA;AAAA,EAC1B;AACA,EAAA,uBACE,GAAA,CAAC,eAAA,EAAA,EAAgB,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,IAAA,EAAM,MAAA,EAAO,EACpD,QAAA,kBAAA,GAAA,CAAC,eAAA,EAAA,EAAgB,CAAA,EACnB,CAAA;AAEJ;AAQO,SAAS,YAAA,GAAe;AAC7B,EAAA,4BACG,MAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAK,IAAA;AAAA,QACL,OAAA,kBACE,GAAA,CAAC,OAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,uBAAoB,CAAA,EACvB;AAAA;AAAA,KAEJ;AAAA,wBACC,KAAA,EAAA,EAAM,IAAA,EAAK,WAAU,OAAA,kBAAS,GAAA,CAAC,4BAAyB,CAAA,EAAI;AAAA,GAAA,EAC/D,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"TasksSubPage.esm.js","sources":["../../../src/alpha/components/TasksSubPage.tsx"],"sourcesContent":["/*\n * Copyright 2026 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Routes, Route, useParams } from 'react-router-dom';\nimport { Content } from '@backstage/core-components';\nimport { BreadcrumbEntry } from '@backstage/frontend-plugin-api';\nimport { OngoingTaskBody } from '../../components/OngoingTask';\nimport { ListTaskPageContent } from '../../components/ListTasksPage';\nimport { ScaffolderTemplateOutputsComponent } from '@backstage/plugin-scaffolder-react/alpha';\nimport { useTaskEventStream } from '@backstage/plugin-scaffolder-react';\n\ntype TemplateOutputsRegistration = {\n component: ScaffolderTemplateOutputsComponent;\n templateRefs: string[];\n};\n\nfunction TaskDetailWithBreadcrumb(props: {\n templateOutputsComponents?: TemplateOutputsRegistration[];\n}) {\n const { taskId } = useParams<{ taskId: string }>();\n const taskStream = useTaskEventStream(taskId!);\n const templateRef = taskStream.task?.spec.templateInfo?.entityRef;\n const TemplateOutputsComponent = props.templateOutputsComponents?.find(\n registration => registration.templateRefs.includes(templateRef ?? ''),\n )?.component;\n\n if (!taskId) {\n return (\n <OngoingTaskBody TemplateOutputsComponent={TemplateOutputsComponent} />\n );\n }\n return (\n <BreadcrumbEntry entry={{ label: taskId, href: taskId }}>\n <OngoingTaskBody TemplateOutputsComponent={TemplateOutputsComponent} />\n </BreadcrumbEntry>\n );\n}\n\n/**\n * Sub-page for the tasks tab. Renders the task list at the index route\n * and the ongoing task detail at the parameterized route.\n *\n * @internal\n */\nexport function TasksSubPage(props: {\n templateOutputsComponents?: TemplateOutputsRegistration[];\n}) {\n return (\n <Routes>\n <Route\n index\n element={\n <Content>\n <ListTaskPageContent />\n </Content>\n }\n />\n <Route\n path=\":taskId\"\n element={\n <TaskDetailWithBreadcrumb\n templateOutputsComponents={props.templateOutputsComponents}\n />\n }\n />\n </Routes>\n );\n}\n"],"names":[],"mappings":";;;;;;;;AA6BA,SAAS,yBAAyB,KAAA,EAE/B;AACD,EAAA,MAAM,EAAE,MAAA,EAAO,GAAI,SAAA,EAA8B;AACjD,EAAA,MAAM,UAAA,GAAa,mBAAmB,MAAO,CAAA;AAC7C,EAAA,MAAM,WAAA,GAAc,UAAA,CAAW,IAAA,EAAM,IAAA,CAAK,YAAA,EAAc,SAAA;AACxD,EAAA,MAAM,wBAAA,GAA2B,MAAM,yBAAA,EAA2B,IAAA;AAAA,IAChE,CAAA,YAAA,KAAgB,YAAA,CAAa,YAAA,CAAa,QAAA,CAAS,eAAe,EAAE;AAAA,GACtE,EAAG,SAAA;AAEH,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,uBACE,GAAA,CAAC,mBAAgB,wBAAA,EAAoD,CAAA;AAAA,EAEzE;AACA,EAAA,uBACE,GAAA,CAAC,eAAA,EAAA,EAAgB,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,IAAA,EAAM,MAAA,EAAO,EACpD,QAAA,kBAAA,GAAA,CAAC,eAAA,EAAA,EAAgB,wBAAA,EAAoD,CAAA,EACvE,CAAA;AAEJ;AAQO,SAAS,aAAa,KAAA,EAE1B;AACD,EAAA,4BACG,MAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAK,IAAA;AAAA,QACL,OAAA,kBACE,GAAA,CAAC,OAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,uBAAoB,CAAA,EACvB;AAAA;AAAA,KAEJ;AAAA,oBACA,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,SAAA;AAAA,QACL,OAAA,kBACE,GAAA;AAAA,UAAC,wBAAA;AAAA,UAAA;AAAA,YACC,2BAA2B,KAAA,CAAM;AAAA;AAAA;AACnC;AAAA;AAEJ,GAAA,EACF,CAAA;AAEJ;;;;"}
@@ -4,7 +4,7 @@ import { z } from 'zod/v4';
4
4
  import { filterPredicateToFilterFunction, createZodV4FilterPredicateSchema } from '@backstage/filter-predicates';
5
5
  import { rootRouteRef } from '../routes.esm.js';
6
6
  import CreateComponentIcon from '@material-ui/icons/AddCircleOutline';
7
- import { FormFieldBlueprint, formFieldsApiRef } from '@backstage/plugin-scaffolder-react/alpha';
7
+ import { FormFieldBlueprint, formFieldsApiRef, scaffolderTemplateOutputTemplateRefsRef, scaffolderTemplateOutputsComponentRef } from '@backstage/plugin-scaffolder-react/alpha';
8
8
  import { scmIntegrationsApiRef } from '@backstage/integration-react';
9
9
  import { scaffolderApiRef } from '@backstage/plugin-scaffolder-react';
10
10
  import { ScaffolderClient } from '../api.esm.js';
@@ -62,12 +62,36 @@ const scaffolderTemplatesSubPage = SubPageBlueprint.makeWithOverrides({
62
62
  });
63
63
  }
64
64
  });
65
- const scaffolderTasksSubPage = SubPageBlueprint.make({
65
+ const scaffolderTasksSubPage = SubPageBlueprint.makeWithOverrides({
66
66
  name: "tasks",
67
- params: {
68
- path: "tasks",
69
- title: "Tasks",
70
- loader: () => import('./components/TasksSubPage.esm.js').then((m) => /* @__PURE__ */ jsx(m.TasksSubPage, {}))
67
+ inputs: {
68
+ templateOutputsComponents: createExtensionInput(
69
+ [
70
+ scaffolderTemplateOutputsComponentRef,
71
+ scaffolderTemplateOutputTemplateRefsRef
72
+ ],
73
+ { optional: true }
74
+ )
75
+ },
76
+ factory(originalFactory, { inputs }) {
77
+ return originalFactory({
78
+ path: "tasks",
79
+ title: "Tasks",
80
+ loader: async () => {
81
+ const templateOutputsComponents = inputs.templateOutputsComponents?.map(
82
+ (input) => ({
83
+ component: input.get(scaffolderTemplateOutputsComponentRef),
84
+ templateRefs: input.get(scaffolderTemplateOutputTemplateRefsRef)
85
+ })
86
+ );
87
+ return import('./components/TasksSubPage.esm.js').then((m) => /* @__PURE__ */ jsx(
88
+ m.TasksSubPage,
89
+ {
90
+ templateOutputsComponents
91
+ }
92
+ ));
93
+ }
94
+ });
71
95
  }
72
96
  });
73
97
  const scaffolderActionsSubPage = SubPageBlueprint.make({
@@ -1 +1 @@
1
- {"version":3,"file":"extensions.esm.js","sources":["../../src/alpha/extensions.tsx"],"sourcesContent":["/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n ApiBlueprint,\n createExtensionInput,\n discoveryApiRef,\n fetchApiRef,\n identityApiRef,\n PageBlueprint,\n SubPageBlueprint,\n} from '@backstage/frontend-plugin-api';\nimport { z } from 'zod/v4';\nimport {\n createZodV4FilterPredicateSchema,\n filterPredicateToFilterFunction,\n} from '@backstage/filter-predicates';\nimport { rootRouteRef } from '../routes';\nimport CreateComponentIcon from '@material-ui/icons/AddCircleOutline';\nimport {\n FormFieldBlueprint,\n formFieldsApiRef,\n} from '@backstage/plugin-scaffolder-react/alpha';\nimport { scmIntegrationsApiRef } from '@backstage/integration-react';\nimport {\n scaffolderApiRef,\n TemplateGroupFilter,\n} from '@backstage/plugin-scaffolder-react';\nimport { ScaffolderClient } from '../api';\n\nexport const scaffolderPage = PageBlueprint.makeWithOverrides({\n inputs: {\n formFields: createExtensionInput([\n FormFieldBlueprint.dataRefs.formFieldLoader,\n ]),\n },\n factory(originalFactory) {\n return originalFactory({\n routeRef: rootRouteRef,\n path: '/create',\n title: 'Create',\n icon: <CreateComponentIcon fontSize=\"inherit\" />,\n });\n },\n});\n\nexport const scaffolderTemplatesSubPage = SubPageBlueprint.makeWithOverrides({\n name: 'templates',\n configSchema: {\n enableBackstageUi: z.boolean().optional().default(false),\n groups: z\n .array(\n z.object({\n title: z.string(),\n filter: createZodV4FilterPredicateSchema(),\n }),\n )\n .optional(),\n },\n factory(originalFactory, { apis, config }) {\n const formFieldsApi = apis.get(formFieldsApiRef);\n\n const groups: TemplateGroupFilter[] | undefined = config.groups?.map(\n group => ({\n title: group.title,\n filter: filterPredicateToFilterFunction(group.filter),\n }),\n );\n\n return originalFactory({\n path: 'templates',\n title: 'Templates',\n loader: async () => {\n const formFields = (await formFieldsApi?.loadFormFields()) ?? [];\n\n return import('./components/TemplatesSubPage').then(m => (\n <m.TemplatesSubPage\n formFields={formFields}\n groups={groups}\n formProps={{\n EXPERIMENTAL_theme: config.enableBackstageUi ? 'bui' : 'mui',\n }}\n />\n ));\n },\n });\n },\n});\n\nexport const scaffolderTasksSubPage = SubPageBlueprint.make({\n name: 'tasks',\n params: {\n path: 'tasks',\n title: 'Tasks',\n loader: () =>\n import('./components/TasksSubPage').then(m => <m.TasksSubPage />),\n },\n});\n\nexport const scaffolderActionsSubPage = SubPageBlueprint.make({\n name: 'actions',\n params: {\n path: 'actions',\n title: 'Actions',\n loader: () =>\n Promise.all([\n import('../components/ActionsPage'),\n import('@backstage/core-components'),\n ]).then(([m, { Content }]) => (\n <Content>\n <m.ActionPageContent />\n </Content>\n )),\n },\n});\n\nexport const scaffolderEditorSubPage = SubPageBlueprint.make({\n name: 'editor',\n params: {\n path: 'edit',\n title: 'Template Editor',\n loader: () =>\n import('./components/EditorSubPage').then(m => <m.EditorSubPage />),\n },\n});\n\nexport const scaffolderTemplatingExtensionsSubPage = SubPageBlueprint.make({\n name: 'templating-extensions',\n params: {\n path: 'templating-extensions',\n title: 'Templating Extensions',\n loader: () =>\n Promise.all([\n import('../components/TemplatingExtensionsPage'),\n import('@backstage/core-components'),\n ]).then(([m, { Content }]) => (\n <Content>\n <m.TemplatingExtensionsPageContent linkLocal />\n </Content>\n )),\n },\n});\n\nexport const repoUrlPickerFormField = FormFieldBlueprint.make({\n name: 'repo-url-picker',\n params: {\n field: () => import('./fields/RepoUrlPicker').then(m => m.RepoUrlPicker),\n },\n});\n\nexport const entityNamePickerFormField = FormFieldBlueprint.make({\n name: 'entity-name-picker',\n params: {\n field: () =>\n import('./fields/EntityNamePicker').then(m => m.EntityNamePicker),\n },\n});\n\nexport const entityPickerFormField = FormFieldBlueprint.make({\n name: 'entity-picker',\n params: {\n field: () => import('./fields/EntityPicker').then(m => m.EntityPicker),\n },\n});\n\nexport const ownerPickerFormField = FormFieldBlueprint.make({\n name: 'owner-picker',\n params: {\n field: () => import('./fields/OwnerPicker').then(m => m.OwnerPicker),\n },\n});\n\nexport const entityTagsPickerFormField = FormFieldBlueprint.make({\n name: 'entity-tags-picker',\n params: {\n field: () =>\n import('./fields/EntityTagsPicker').then(m => m.EntityTagsPicker),\n },\n});\n\nexport const multiEntityPickerFormField = FormFieldBlueprint.make({\n name: 'multi-entity-picker',\n params: {\n field: () =>\n import('./fields/MultiEntityPicker').then(m => m.MultiEntityPicker),\n },\n});\n\nexport const myGroupsPickerFormField = FormFieldBlueprint.make({\n name: 'my-groups-picker',\n params: {\n field: () => import('./fields/MyGroupsPicker').then(m => m.MyGroupsPicker),\n },\n});\n\nexport const ownedEntityPickerFormField = FormFieldBlueprint.make({\n name: 'owned-entity-picker',\n params: {\n field: () =>\n import('./fields/OwnedEntityPicker').then(m => m.OwnedEntityPicker),\n },\n});\n\nexport const repoBranchPickerFormField = FormFieldBlueprint.make({\n name: 'repo-branch-picker',\n params: {\n field: () =>\n import('./fields/RepoBranchPicker').then(m => m.RepoBranchPicker),\n },\n});\n\nexport const repoOwnerPickerFormField = FormFieldBlueprint.make({\n name: 'repo-owner-picker',\n params: {\n field: () =>\n import('./fields/RepoOwnerPicker').then(m => m.RepoOwnerPicker),\n },\n});\n\nexport const scaffolderApi = ApiBlueprint.make({\n params: defineParams =>\n defineParams({\n api: scaffolderApiRef,\n deps: {\n discoveryApi: discoveryApiRef,\n scmIntegrationsApi: scmIntegrationsApiRef,\n fetchApi: fetchApiRef,\n identityApi: identityApiRef,\n },\n factory: ({ discoveryApi, scmIntegrationsApi, fetchApi, identityApi }) =>\n new ScaffolderClient({\n discoveryApi,\n scmIntegrationsApi,\n fetchApi,\n identityApi,\n }),\n }),\n});\n"],"names":[],"mappings":";;;;;;;;;;;AA2CO,MAAM,cAAA,GAAiB,cAAc,iBAAA,CAAkB;AAAA,EAC5D,MAAA,EAAQ;AAAA,IACN,YAAY,oBAAA,CAAqB;AAAA,MAC/B,mBAAmB,QAAA,CAAS;AAAA,KAC7B;AAAA,GACH;AAAA,EACA,QAAQ,eAAA,EAAiB;AACvB,IAAA,OAAO,eAAA,CAAgB;AAAA,MACrB,QAAA,EAAU,YAAA;AAAA,MACV,IAAA,EAAM,SAAA;AAAA,MACN,KAAA,EAAO,QAAA;AAAA,MACP,IAAA,kBAAM,GAAA,CAAC,mBAAA,EAAA,EAAoB,QAAA,EAAS,SAAA,EAAU;AAAA,KAC/C,CAAA;AAAA,EACH;AACF,CAAC;AAEM,MAAM,0BAAA,GAA6B,iBAAiB,iBAAA,CAAkB;AAAA,EAC3E,IAAA,EAAM,WAAA;AAAA,EACN,YAAA,EAAc;AAAA,IACZ,mBAAmB,CAAA,CAAE,OAAA,GAAU,QAAA,EAAS,CAAE,QAAQ,KAAK,CAAA;AAAA,IACvD,QAAQ,CAAA,CACL,KAAA;AAAA,MACC,EAAE,MAAA,CAAO;AAAA,QACP,KAAA,EAAO,EAAE,MAAA,EAAO;AAAA,QAChB,QAAQ,gCAAA;AAAiC,OAC1C;AAAA,MAEF,QAAA;AAAS,GACd;AAAA,EACA,OAAA,CAAQ,eAAA,EAAiB,EAAE,IAAA,EAAM,QAAO,EAAG;AACzC,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,GAAA,CAAI,gBAAgB,CAAA;AAE/C,IAAA,MAAM,MAAA,GAA4C,OAAO,MAAA,EAAQ,GAAA;AAAA,MAC/D,CAAA,KAAA,MAAU;AAAA,QACR,OAAO,KAAA,CAAM,KAAA;AAAA,QACb,MAAA,EAAQ,+BAAA,CAAgC,KAAA,CAAM,MAAM;AAAA,OACtD;AAAA,KACF;AAEA,IAAA,OAAO,eAAA,CAAgB;AAAA,MACrB,IAAA,EAAM,WAAA;AAAA,MACN,KAAA,EAAO,WAAA;AAAA,MACP,QAAQ,YAAY;AAClB,QAAA,MAAM,UAAA,GAAc,MAAM,aAAA,EAAe,cAAA,MAAqB,EAAC;AAE/D,QAAA,OAAO,OAAO,sCAA+B,CAAA,CAAE,IAAA,CAAK,CAAA,CAAA,qBAClD,GAAA;AAAA,UAAC,CAAA,CAAE,gBAAA;AAAA,UAAF;AAAA,YACC,UAAA;AAAA,YACA,MAAA;AAAA,YACA,SAAA,EAAW;AAAA,cACT,kBAAA,EAAoB,MAAA,CAAO,iBAAA,GAAoB,KAAA,GAAQ;AAAA;AACzD;AAAA,SAEH,CAAA;AAAA,MACH;AAAA,KACD,CAAA;AAAA,EACH;AACF,CAAC;AAEM,MAAM,sBAAA,GAAyB,iBAAiB,IAAA,CAAK;AAAA,EAC1D,IAAA,EAAM,OAAA;AAAA,EACN,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM,OAAA;AAAA,IACN,KAAA,EAAO,OAAA;AAAA,IACP,MAAA,EAAQ,MACN,OAAO,kCAA2B,CAAA,CAAE,IAAA,CAAK,CAAA,CAAA,qBAAK,GAAA,CAAC,CAAA,CAAE,YAAA,EAAF,EAAe,CAAE;AAAA;AAEtE,CAAC;AAEM,MAAM,wBAAA,GAA2B,iBAAiB,IAAA,CAAK;AAAA,EAC5D,IAAA,EAAM,SAAA;AAAA,EACN,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO,SAAA;AAAA,IACP,MAAA,EAAQ,MACN,OAAA,CAAQ,GAAA,CAAI;AAAA,MACV,OAAO,wCAA2B,CAAA;AAAA,MAClC,OAAO,4BAA4B;AAAA,KACpC,CAAA,CAAE,IAAA,CAAK,CAAC,CAAC,GAAG,EAAE,OAAA,EAAS,CAAA,yBACrB,OAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,EAAE,iBAAA,EAAF,EAAoB,GACvB,CACD;AAAA;AAEP,CAAC;AAEM,MAAM,uBAAA,GAA0B,iBAAiB,IAAA,CAAK;AAAA,EAC3D,IAAA,EAAM,QAAA;AAAA,EACN,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM,MAAA;AAAA,IACN,KAAA,EAAO,iBAAA;AAAA,IACP,MAAA,EAAQ,MACN,OAAO,mCAA4B,CAAA,CAAE,IAAA,CAAK,CAAA,CAAA,qBAAK,GAAA,CAAC,CAAA,CAAE,aAAA,EAAF,EAAgB,CAAE;AAAA;AAExE,CAAC;AAEM,MAAM,qCAAA,GAAwC,iBAAiB,IAAA,CAAK;AAAA,EACzE,IAAA,EAAM,uBAAA;AAAA,EACN,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM,uBAAA;AAAA,IACN,KAAA,EAAO,uBAAA;AAAA,IACP,MAAA,EAAQ,MACN,OAAA,CAAQ,GAAA,CAAI;AAAA,MACV,OAAO,qDAAwC,CAAA;AAAA,MAC/C,OAAO,4BAA4B;AAAA,KACpC,CAAA,CAAE,IAAA,CAAK,CAAC,CAAC,CAAA,EAAG,EAAE,OAAA,EAAS,sBACtB,GAAA,CAAC,OAAA,EAAA,EACC,8BAAC,CAAA,CAAE,+BAAA,EAAF,EAAkC,SAAA,EAAS,IAAA,EAAC,GAC/C,CACD;AAAA;AAEP,CAAC;AAEM,MAAM,sBAAA,GAAyB,mBAAmB,IAAA,CAAK;AAAA,EAC5D,IAAA,EAAM,iBAAA;AAAA,EACN,MAAA,EAAQ;AAAA,IACN,KAAA,EAAO,MAAM,OAAO,+BAAwB,EAAE,IAAA,CAAK,CAAA,CAAA,KAAK,EAAE,aAAa;AAAA;AAE3E,CAAC;AAEM,MAAM,yBAAA,GAA4B,mBAAmB,IAAA,CAAK;AAAA,EAC/D,IAAA,EAAM,oBAAA;AAAA,EACN,MAAA,EAAQ;AAAA,IACN,KAAA,EAAO,MACL,OAAO,kCAA2B,EAAE,IAAA,CAAK,CAAA,CAAA,KAAK,EAAE,gBAAgB;AAAA;AAEtE,CAAC;AAEM,MAAM,qBAAA,GAAwB,mBAAmB,IAAA,CAAK;AAAA,EAC3D,IAAA,EAAM,eAAA;AAAA,EACN,MAAA,EAAQ;AAAA,IACN,KAAA,EAAO,MAAM,OAAO,8BAAuB,EAAE,IAAA,CAAK,CAAA,CAAA,KAAK,EAAE,YAAY;AAAA;AAEzE,CAAC;AAEM,MAAM,oBAAA,GAAuB,mBAAmB,IAAA,CAAK;AAAA,EAC1D,IAAA,EAAM,cAAA;AAAA,EACN,MAAA,EAAQ;AAAA,IACN,KAAA,EAAO,MAAM,OAAO,6BAAsB,EAAE,IAAA,CAAK,CAAA,CAAA,KAAK,EAAE,WAAW;AAAA;AAEvE,CAAC;AAEM,MAAM,yBAAA,GAA4B,mBAAmB,IAAA,CAAK;AAAA,EAC/D,IAAA,EAAM,oBAAA;AAAA,EACN,MAAA,EAAQ;AAAA,IACN,KAAA,EAAO,MACL,OAAO,kCAA2B,EAAE,IAAA,CAAK,CAAA,CAAA,KAAK,EAAE,gBAAgB;AAAA;AAEtE,CAAC;AAEM,MAAM,0BAAA,GAA6B,mBAAmB,IAAA,CAAK;AAAA,EAChE,IAAA,EAAM,qBAAA;AAAA,EACN,MAAA,EAAQ;AAAA,IACN,KAAA,EAAO,MACL,OAAO,mCAA4B,EAAE,IAAA,CAAK,CAAA,CAAA,KAAK,EAAE,iBAAiB;AAAA;AAExE,CAAC;AAEM,MAAM,uBAAA,GAA0B,mBAAmB,IAAA,CAAK;AAAA,EAC7D,IAAA,EAAM,kBAAA;AAAA,EACN,MAAA,EAAQ;AAAA,IACN,KAAA,EAAO,MAAM,OAAO,gCAAyB,EAAE,IAAA,CAAK,CAAA,CAAA,KAAK,EAAE,cAAc;AAAA;AAE7E,CAAC;AAEM,MAAM,0BAAA,GAA6B,mBAAmB,IAAA,CAAK;AAAA,EAChE,IAAA,EAAM,qBAAA;AAAA,EACN,MAAA,EAAQ;AAAA,IACN,KAAA,EAAO,MACL,OAAO,mCAA4B,EAAE,IAAA,CAAK,CAAA,CAAA,KAAK,EAAE,iBAAiB;AAAA;AAExE,CAAC;AAEM,MAAM,yBAAA,GAA4B,mBAAmB,IAAA,CAAK;AAAA,EAC/D,IAAA,EAAM,oBAAA;AAAA,EACN,MAAA,EAAQ;AAAA,IACN,KAAA,EAAO,MACL,OAAO,kCAA2B,EAAE,IAAA,CAAK,CAAA,CAAA,KAAK,EAAE,gBAAgB;AAAA;AAEtE,CAAC;AAEM,MAAM,wBAAA,GAA2B,mBAAmB,IAAA,CAAK;AAAA,EAC9D,IAAA,EAAM,mBAAA;AAAA,EACN,MAAA,EAAQ;AAAA,IACN,KAAA,EAAO,MACL,OAAO,iCAA0B,EAAE,IAAA,CAAK,CAAA,CAAA,KAAK,EAAE,eAAe;AAAA;AAEpE,CAAC;AAEM,MAAM,aAAA,GAAgB,aAAa,IAAA,CAAK;AAAA,EAC7C,MAAA,EAAQ,kBACN,YAAA,CAAa;AAAA,IACX,GAAA,EAAK,gBAAA;AAAA,IACL,IAAA,EAAM;AAAA,MACJ,YAAA,EAAc,eAAA;AAAA,MACd,kBAAA,EAAoB,qBAAA;AAAA,MACpB,QAAA,EAAU,WAAA;AAAA,MACV,WAAA,EAAa;AAAA,KACf;AAAA,IACA,OAAA,EAAS,CAAC,EAAE,YAAA,EAAc,oBAAoB,QAAA,EAAU,WAAA,EAAY,KAClE,IAAI,gBAAA,CAAiB;AAAA,MACnB,YAAA;AAAA,MACA,kBAAA;AAAA,MACA,QAAA;AAAA,MACA;AAAA,KACD;AAAA,GACJ;AACL,CAAC;;;;"}
1
+ {"version":3,"file":"extensions.esm.js","sources":["../../src/alpha/extensions.tsx"],"sourcesContent":["/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n ApiBlueprint,\n createExtensionInput,\n discoveryApiRef,\n fetchApiRef,\n identityApiRef,\n PageBlueprint,\n SubPageBlueprint,\n} from '@backstage/frontend-plugin-api';\nimport { z } from 'zod/v4';\nimport {\n createZodV4FilterPredicateSchema,\n filterPredicateToFilterFunction,\n} from '@backstage/filter-predicates';\nimport { rootRouteRef } from '../routes';\nimport CreateComponentIcon from '@material-ui/icons/AddCircleOutline';\nimport {\n FormFieldBlueprint,\n formFieldsApiRef,\n scaffolderTemplateOutputsComponentRef,\n scaffolderTemplateOutputTemplateRefsRef,\n} from '@backstage/plugin-scaffolder-react/alpha';\nimport { scmIntegrationsApiRef } from '@backstage/integration-react';\nimport {\n scaffolderApiRef,\n TemplateGroupFilter,\n} from '@backstage/plugin-scaffolder-react';\nimport { ScaffolderClient } from '../api';\n\nexport const scaffolderPage = PageBlueprint.makeWithOverrides({\n inputs: {\n formFields: createExtensionInput([\n FormFieldBlueprint.dataRefs.formFieldLoader,\n ]),\n },\n factory(originalFactory) {\n return originalFactory({\n routeRef: rootRouteRef,\n path: '/create',\n title: 'Create',\n icon: <CreateComponentIcon fontSize=\"inherit\" />,\n });\n },\n});\n\nexport const scaffolderTemplatesSubPage = SubPageBlueprint.makeWithOverrides({\n name: 'templates',\n configSchema: {\n enableBackstageUi: z.boolean().optional().default(false),\n groups: z\n .array(\n z.object({\n title: z.string(),\n filter: createZodV4FilterPredicateSchema(),\n }),\n )\n .optional(),\n },\n factory(originalFactory, { apis, config }) {\n const formFieldsApi = apis.get(formFieldsApiRef);\n\n const groups: TemplateGroupFilter[] | undefined = config.groups?.map(\n group => ({\n title: group.title,\n filter: filterPredicateToFilterFunction(group.filter),\n }),\n );\n\n return originalFactory({\n path: 'templates',\n title: 'Templates',\n loader: async () => {\n const formFields = (await formFieldsApi?.loadFormFields()) ?? [];\n\n return import('./components/TemplatesSubPage').then(m => (\n <m.TemplatesSubPage\n formFields={formFields}\n groups={groups}\n formProps={{\n EXPERIMENTAL_theme: config.enableBackstageUi ? 'bui' : 'mui',\n }}\n />\n ));\n },\n });\n },\n});\n\nexport const scaffolderTasksSubPage = SubPageBlueprint.makeWithOverrides({\n name: 'tasks',\n inputs: {\n templateOutputsComponents: createExtensionInput(\n [\n scaffolderTemplateOutputsComponentRef,\n scaffolderTemplateOutputTemplateRefsRef,\n ],\n { optional: true },\n ),\n },\n factory(originalFactory, { inputs }) {\n return originalFactory({\n path: 'tasks',\n title: 'Tasks',\n loader: async () => {\n const templateOutputsComponents = inputs.templateOutputsComponents?.map(\n input => ({\n component: input.get(scaffolderTemplateOutputsComponentRef),\n templateRefs: input.get(scaffolderTemplateOutputTemplateRefsRef),\n }),\n );\n return import('./components/TasksSubPage').then(m => (\n <m.TasksSubPage\n templateOutputsComponents={templateOutputsComponents}\n />\n ));\n },\n });\n },\n});\n\nexport const scaffolderActionsSubPage = SubPageBlueprint.make({\n name: 'actions',\n params: {\n path: 'actions',\n title: 'Actions',\n loader: () =>\n Promise.all([\n import('../components/ActionsPage'),\n import('@backstage/core-components'),\n ]).then(([m, { Content }]) => (\n <Content>\n <m.ActionPageContent />\n </Content>\n )),\n },\n});\n\nexport const scaffolderEditorSubPage = SubPageBlueprint.make({\n name: 'editor',\n params: {\n path: 'edit',\n title: 'Template Editor',\n loader: () =>\n import('./components/EditorSubPage').then(m => <m.EditorSubPage />),\n },\n});\n\nexport const scaffolderTemplatingExtensionsSubPage = SubPageBlueprint.make({\n name: 'templating-extensions',\n params: {\n path: 'templating-extensions',\n title: 'Templating Extensions',\n loader: () =>\n Promise.all([\n import('../components/TemplatingExtensionsPage'),\n import('@backstage/core-components'),\n ]).then(([m, { Content }]) => (\n <Content>\n <m.TemplatingExtensionsPageContent linkLocal />\n </Content>\n )),\n },\n});\n\nexport const repoUrlPickerFormField = FormFieldBlueprint.make({\n name: 'repo-url-picker',\n params: {\n field: () => import('./fields/RepoUrlPicker').then(m => m.RepoUrlPicker),\n },\n});\n\nexport const entityNamePickerFormField = FormFieldBlueprint.make({\n name: 'entity-name-picker',\n params: {\n field: () =>\n import('./fields/EntityNamePicker').then(m => m.EntityNamePicker),\n },\n});\n\nexport const entityPickerFormField = FormFieldBlueprint.make({\n name: 'entity-picker',\n params: {\n field: () => import('./fields/EntityPicker').then(m => m.EntityPicker),\n },\n});\n\nexport const ownerPickerFormField = FormFieldBlueprint.make({\n name: 'owner-picker',\n params: {\n field: () => import('./fields/OwnerPicker').then(m => m.OwnerPicker),\n },\n});\n\nexport const entityTagsPickerFormField = FormFieldBlueprint.make({\n name: 'entity-tags-picker',\n params: {\n field: () =>\n import('./fields/EntityTagsPicker').then(m => m.EntityTagsPicker),\n },\n});\n\nexport const multiEntityPickerFormField = FormFieldBlueprint.make({\n name: 'multi-entity-picker',\n params: {\n field: () =>\n import('./fields/MultiEntityPicker').then(m => m.MultiEntityPicker),\n },\n});\n\nexport const myGroupsPickerFormField = FormFieldBlueprint.make({\n name: 'my-groups-picker',\n params: {\n field: () => import('./fields/MyGroupsPicker').then(m => m.MyGroupsPicker),\n },\n});\n\nexport const ownedEntityPickerFormField = FormFieldBlueprint.make({\n name: 'owned-entity-picker',\n params: {\n field: () =>\n import('./fields/OwnedEntityPicker').then(m => m.OwnedEntityPicker),\n },\n});\n\nexport const repoBranchPickerFormField = FormFieldBlueprint.make({\n name: 'repo-branch-picker',\n params: {\n field: () =>\n import('./fields/RepoBranchPicker').then(m => m.RepoBranchPicker),\n },\n});\n\nexport const repoOwnerPickerFormField = FormFieldBlueprint.make({\n name: 'repo-owner-picker',\n params: {\n field: () =>\n import('./fields/RepoOwnerPicker').then(m => m.RepoOwnerPicker),\n },\n});\n\nexport const scaffolderApi = ApiBlueprint.make({\n params: defineParams =>\n defineParams({\n api: scaffolderApiRef,\n deps: {\n discoveryApi: discoveryApiRef,\n scmIntegrationsApi: scmIntegrationsApiRef,\n fetchApi: fetchApiRef,\n identityApi: identityApiRef,\n },\n factory: ({ discoveryApi, scmIntegrationsApi, fetchApi, identityApi }) =>\n new ScaffolderClient({\n discoveryApi,\n scmIntegrationsApi,\n fetchApi,\n identityApi,\n }),\n }),\n});\n"],"names":[],"mappings":"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"}
package/dist/alpha.d.ts CHANGED
@@ -396,8 +396,6 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
396
396
  };
397
397
  }>;
398
398
  "sub-page:scaffolder/tasks": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
399
- kind: "sub-page";
400
- name: "tasks";
401
399
  config: {
402
400
  path: string | undefined;
403
401
  title: string | undefined;
@@ -411,7 +409,15 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
411
409
  }> | _backstage_frontend_plugin_api.ExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<string, "core.title", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<_backstage_frontend_plugin_api.IconElement, "core.icon", {
412
410
  optional: true;
413
411
  }>;
414
- inputs: {};
412
+ inputs: {
413
+ templateOutputsComponents: _backstage_frontend_plugin_api.ExtensionInput<_backstage_frontend_plugin_api.ConfigurableExtensionDataRef<_backstage_plugin_scaffolder_react_alpha.ScaffolderTemplateOutputsComponent, "scaffolder.template-outputs-component", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<string[], "scaffolder.template-output-template-refs", {}>, {
414
+ singleton: false;
415
+ optional: true;
416
+ internal: false;
417
+ }>;
418
+ };
419
+ kind: "sub-page";
420
+ name: "tasks";
415
421
  params: {
416
422
  path: string;
417
423
  title: string;
@@ -1,5 +1,5 @@
1
1
  var name = "@backstage/plugin-scaffolder";
2
- var version = "1.38.2";
2
+ var version = "1.39.0-next.0";
3
3
  var description = "The Backstage plugin that helps you create new things";
4
4
  var backstage = {
5
5
  role: "frontend-plugin",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backstage/plugin-scaffolder",
3
- "version": "1.38.2",
3
+ "version": "1.39.0-next.0",
4
4
  "description": "The Backstage plugin that helps you create new things",
5
5
  "backstage": {
6
6
  "role": "frontend-plugin",
@@ -70,24 +70,24 @@
70
70
  "test": "backstage-cli package test"
71
71
  },
72
72
  "dependencies": {
73
- "@backstage/catalog-client": "^1.16.1",
74
- "@backstage/catalog-model": "^1.10.0",
75
- "@backstage/core-components": "^0.18.13",
76
- "@backstage/core-plugin-api": "^1.12.9",
77
- "@backstage/errors": "^1.3.1",
78
- "@backstage/filter-predicates": "^0.1.4",
79
- "@backstage/frontend-plugin-api": "^0.18.0",
80
- "@backstage/integration": "^2.1.0",
81
- "@backstage/integration-react": "^1.2.21",
82
- "@backstage/plugin-catalog-common": "^1.1.10",
83
- "@backstage/plugin-catalog-react": "^3.2.1",
84
- "@backstage/plugin-permission-react": "^0.5.4",
85
- "@backstage/plugin-scaffolder-common": "^2.2.2",
86
- "@backstage/plugin-scaffolder-react": "^2.0.3",
87
- "@backstage/plugin-techdocs-common": "^0.1.1",
88
- "@backstage/plugin-techdocs-react": "^1.3.14",
89
- "@backstage/types": "^1.2.2",
90
- "@backstage/ui": "^0.17.1",
73
+ "@backstage/catalog-client": "1.16.1",
74
+ "@backstage/catalog-model": "1.10.0",
75
+ "@backstage/core-components": "0.18.14-next.0",
76
+ "@backstage/core-plugin-api": "1.12.9",
77
+ "@backstage/errors": "1.3.1",
78
+ "@backstage/filter-predicates": "0.1.4",
79
+ "@backstage/frontend-plugin-api": "0.18.0",
80
+ "@backstage/integration": "2.1.0",
81
+ "@backstage/integration-react": "1.2.21",
82
+ "@backstage/plugin-catalog-common": "1.1.10",
83
+ "@backstage/plugin-catalog-react": "3.2.2-next.0",
84
+ "@backstage/plugin-permission-react": "0.5.4",
85
+ "@backstage/plugin-scaffolder-common": "2.3.0-next.0",
86
+ "@backstage/plugin-scaffolder-react": "2.1.0-next.0",
87
+ "@backstage/plugin-techdocs-common": "0.1.1",
88
+ "@backstage/plugin-techdocs-react": "1.3.15-next.0",
89
+ "@backstage/types": "1.2.2",
90
+ "@backstage/ui": "0.17.2-next.0",
91
91
  "@codemirror/language": "^6.0.0",
92
92
  "@codemirror/legacy-modes": "^6.1.0",
93
93
  "@codemirror/view": "^6.0.0",
@@ -120,14 +120,14 @@
120
120
  "zod-to-json-schema": "^3.25.1"
121
121
  },
122
122
  "devDependencies": {
123
- "@backstage/cli": "^0.36.5",
124
- "@backstage/core-app-api": "^1.20.4",
125
- "@backstage/dev-utils": "^1.1.26",
126
- "@backstage/frontend-test-utils": "^0.6.3",
127
- "@backstage/plugin-catalog": "^2.0.8",
128
- "@backstage/plugin-permission-common": "^0.9.10",
129
- "@backstage/plugin-techdocs": "^1.18.0",
130
- "@backstage/test-utils": "^1.7.21",
123
+ "@backstage/cli": "0.36.6-next.0",
124
+ "@backstage/core-app-api": "1.20.5-next.0",
125
+ "@backstage/dev-utils": "1.1.27-next.0",
126
+ "@backstage/frontend-test-utils": "0.6.4-next.0",
127
+ "@backstage/plugin-catalog": "2.0.9-next.0",
128
+ "@backstage/plugin-permission-common": "0.9.10",
129
+ "@backstage/plugin-techdocs": "1.18.1-next.0",
130
+ "@backstage/test-utils": "1.7.22-next.0",
131
131
  "@testing-library/dom": "^10.0.0",
132
132
  "@testing-library/jest-dom": "^6.0.0",
133
133
  "@testing-library/react": "^16.0.0",