@backstage/plugin-catalog 1.28.0-next.2 → 1.29.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,148 @@
|
|
|
1
1
|
# @backstage/plugin-catalog
|
|
2
2
|
|
|
3
|
+
## 1.29.0-next.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 9454ef9: Added support of filtering based on system columns in catalog table
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- Updated dependencies
|
|
12
|
+
- @backstage/plugin-catalog-react@1.16.1-next.0
|
|
13
|
+
- @backstage/core-compat-api@0.4.1-next.0
|
|
14
|
+
- @backstage/catalog-client@1.9.1
|
|
15
|
+
- @backstage/catalog-model@1.7.3
|
|
16
|
+
- @backstage/core-components@0.17.0
|
|
17
|
+
- @backstage/core-plugin-api@1.10.5
|
|
18
|
+
- @backstage/errors@1.2.7
|
|
19
|
+
- @backstage/frontend-plugin-api@0.10.0
|
|
20
|
+
- @backstage/integration-react@1.2.5
|
|
21
|
+
- @backstage/types@1.2.1
|
|
22
|
+
- @backstage/plugin-catalog-common@1.1.3
|
|
23
|
+
- @backstage/plugin-permission-react@0.4.32
|
|
24
|
+
- @backstage/plugin-scaffolder-common@1.5.10
|
|
25
|
+
- @backstage/plugin-search-common@1.2.17
|
|
26
|
+
- @backstage/plugin-search-react@1.8.7
|
|
27
|
+
|
|
28
|
+
## 1.28.0
|
|
29
|
+
|
|
30
|
+
### Minor Changes
|
|
31
|
+
|
|
32
|
+
- 247a40b: Now a custom entity page header can be passed as input to the default entity page.
|
|
33
|
+
- a3d93ca: The default layout of the entity page can now optionally be customized with 3 card types: info, peek and full.
|
|
34
|
+
|
|
35
|
+
- Cards of type `info` are rendered in a fixed area on the right;
|
|
36
|
+
- Cards of type `peek` are rendered on top of the main content area;
|
|
37
|
+
- Cards of type `full` and cards with undefined type are rendered as they were before, in the main content area, below the peek cards.
|
|
38
|
+
|
|
39
|
+
If you want to keep the layout as it was before, you don't need to do anything. But if you want to experiment with the card types and see how they render, here is an example setting the about card to be rendered as an `info` card:
|
|
40
|
+
|
|
41
|
+
```diff
|
|
42
|
+
app:
|
|
43
|
+
extensions:
|
|
44
|
+
# Entity page cards
|
|
45
|
+
+ - entity-card:catalog/about:
|
|
46
|
+
+ config:
|
|
47
|
+
+ type: info # or peek or full
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
- 93533bd: The order in which group tabs appear on the entity page has been changed.
|
|
51
|
+
|
|
52
|
+
### Before
|
|
53
|
+
|
|
54
|
+
Previously, entity contents determined the order in which groups were rendered, so a group was rendered as soon as its first entity content was detected.
|
|
55
|
+
|
|
56
|
+
### After
|
|
57
|
+
|
|
58
|
+
Groups are now rendered first by default based on their order in the `app-config.yaml` file:
|
|
59
|
+
|
|
60
|
+
```diff
|
|
61
|
+
app:
|
|
62
|
+
extensions:
|
|
63
|
+
- page:catalog/entity:
|
|
64
|
+
+ config:
|
|
65
|
+
+ groups:
|
|
66
|
+
+ # this will be the first tab of the default entity page
|
|
67
|
+
+ - deployment:
|
|
68
|
+
+ title: Deployment
|
|
69
|
+
+ # this will be the second tab of the default entiy page
|
|
70
|
+
+ - documentation:
|
|
71
|
+
+ title: Documentation
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
If you wish to place a normal tab before a group, you must add the tab to a group and place the group in the order you wish it to appear on the entity page (groups that contains only one tab are rendered as normal tabs).
|
|
75
|
+
|
|
76
|
+
```diff
|
|
77
|
+
app:
|
|
78
|
+
extensions:
|
|
79
|
+
- page:catalog/entity:
|
|
80
|
+
config:
|
|
81
|
+
groups:
|
|
82
|
+
+ # Example placing the overview tab first
|
|
83
|
+
+ - overview:
|
|
84
|
+
+ title: Overview
|
|
85
|
+
- deployment:
|
|
86
|
+
title: Deployment
|
|
87
|
+
# this will be the second tab of the default entiy page
|
|
88
|
+
- documentation:
|
|
89
|
+
title: Documentation
|
|
90
|
+
- entity-content:catalog/overview:
|
|
91
|
+
+ config:
|
|
92
|
+
+ group: 'overview'
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
- 06d1226: Allow providing `kind` parameters to replace the default `Component` kind for `SubComponents` card
|
|
96
|
+
|
|
97
|
+
### Patch Changes
|
|
98
|
+
|
|
99
|
+
- 31731b0: Internal refactor to avoid `expiry-map` dependency.
|
|
100
|
+
- ba9649a: Update the default entity page extension component to support grouping multiple entity content items in the same tab.
|
|
101
|
+
|
|
102
|
+
Disable all default groups:
|
|
103
|
+
|
|
104
|
+
```diff
|
|
105
|
+
# app-config.yaml
|
|
106
|
+
app:
|
|
107
|
+
extensions:
|
|
108
|
+
# Pages
|
|
109
|
+
+ - page:catalog/entity:
|
|
110
|
+
+ config:
|
|
111
|
+
+ groups: []
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Create a custom list of :
|
|
115
|
+
|
|
116
|
+
```diff
|
|
117
|
+
# app-config.yaml
|
|
118
|
+
app:
|
|
119
|
+
extensions:
|
|
120
|
+
# Pages
|
|
121
|
+
+ - page:catalog/entity:
|
|
122
|
+
+ config:
|
|
123
|
+
+ groups:
|
|
124
|
+
+ # This array of groups completely replaces the default groups
|
|
125
|
+
+ - custom:
|
|
126
|
+
+ title: 'Custom'
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
- Updated dependencies
|
|
130
|
+
- @backstage/core-components@0.17.0
|
|
131
|
+
- @backstage/core-plugin-api@1.10.5
|
|
132
|
+
- @backstage/plugin-search-react@1.8.7
|
|
133
|
+
- @backstage/frontend-plugin-api@0.10.0
|
|
134
|
+
- @backstage/plugin-catalog-react@1.16.0
|
|
135
|
+
- @backstage/core-compat-api@0.4.0
|
|
136
|
+
- @backstage/plugin-scaffolder-common@1.5.10
|
|
137
|
+
- @backstage/integration-react@1.2.5
|
|
138
|
+
- @backstage/plugin-permission-react@0.4.32
|
|
139
|
+
- @backstage/catalog-client@1.9.1
|
|
140
|
+
- @backstage/catalog-model@1.7.3
|
|
141
|
+
- @backstage/errors@1.2.7
|
|
142
|
+
- @backstage/types@1.2.1
|
|
143
|
+
- @backstage/plugin-catalog-common@1.1.3
|
|
144
|
+
- @backstage/plugin-search-common@1.2.17
|
|
145
|
+
|
|
3
146
|
## 1.28.0-next.2
|
|
4
147
|
|
|
5
148
|
### Minor Changes
|
|
@@ -30,6 +30,16 @@ const columnFactories = Object.freeze({
|
|
|
30
30
|
return {
|
|
31
31
|
title: "System",
|
|
32
32
|
field: "resolved.partOfSystemRelationTitle",
|
|
33
|
+
customFilterAndSearch: (query, row) => {
|
|
34
|
+
if (!row.resolved.partOfSystemRelations) {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
const systemNames = row.resolved.partOfSystemRelations.map(
|
|
38
|
+
(ref) => ref.name
|
|
39
|
+
);
|
|
40
|
+
const searchText = systemNames.join(", ").toLocaleUpperCase("en-US");
|
|
41
|
+
return searchText.includes(query.toLocaleUpperCase("en-US"));
|
|
42
|
+
},
|
|
33
43
|
render: ({ resolved }) => /* @__PURE__ */ React.createElement(
|
|
34
44
|
EntityRefLinks,
|
|
35
45
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"columns.esm.js","sources":["../../../src/components/CatalogTable/columns.tsx"],"sourcesContent":["/*\n * Copyright 2021 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 */\nimport React from 'react';\nimport {\n humanizeEntityRef,\n EntityRefLink,\n EntityRefLinks,\n} from '@backstage/plugin-catalog-react';\nimport Chip from '@material-ui/core/Chip';\nimport { CatalogTableRow } from './types';\nimport { OverflowTooltip, TableColumn } from '@backstage/core-components';\nimport { Entity } from '@backstage/catalog-model';\nimport { JsonArray } from '@backstage/types';\n\n// The columnFactories symbol is not directly exported, but through the\n// CatalogTable.columns field.\n/** @public */\nexport const columnFactories = Object.freeze({\n createNameColumn(options?: {\n defaultKind?: string;\n }): TableColumn<CatalogTableRow> {\n function formatContent(entity: Entity): string {\n return (\n entity.metadata?.title ||\n humanizeEntityRef(entity, {\n defaultKind: options?.defaultKind,\n })\n );\n }\n\n return {\n title: 'Name',\n field: 'resolved.entityRef',\n highlight: true,\n customSort({ entity: entity1 }, { entity: entity2 }) {\n // TODO: We could implement this more efficiently by comparing field by field.\n // This has similar issues as above.\n return formatContent(entity1).localeCompare(formatContent(entity2));\n },\n render: ({ entity }) => (\n <EntityRefLink\n entityRef={entity}\n defaultKind={options?.defaultKind || 'Component'}\n />\n ),\n };\n },\n createSystemColumn(): TableColumn<CatalogTableRow> {\n return {\n title: 'System',\n field: 'resolved.partOfSystemRelationTitle',\n render: ({ resolved }) => (\n <EntityRefLinks\n entityRefs={resolved.partOfSystemRelations}\n defaultKind=\"system\"\n />\n ),\n };\n },\n createOwnerColumn(): TableColumn<CatalogTableRow> {\n return {\n title: 'Owner',\n field: 'resolved.ownedByRelationsTitle',\n render: ({ resolved }) => (\n <EntityRefLinks\n entityRefs={resolved.ownedByRelations}\n defaultKind=\"group\"\n />\n ),\n };\n },\n createSpecTargetsColumn(): TableColumn<CatalogTableRow> {\n return {\n title: 'Targets',\n field: 'entity.spec.targets',\n customFilterAndSearch: (query, row) => {\n let targets: JsonArray = [];\n if (\n row.entity?.spec?.targets &&\n Array.isArray(row.entity?.spec?.targets)\n ) {\n targets = row.entity?.spec?.targets;\n } else if (row.entity?.spec?.target) {\n targets = [row.entity?.spec?.target];\n }\n return targets\n .join(', ')\n .toLocaleUpperCase('en-US')\n .includes(query.toLocaleUpperCase('en-US'));\n },\n render: ({ entity }) => (\n <>\n {(entity?.spec?.targets || entity?.spec?.target) && (\n <OverflowTooltip\n text={(\n (entity!.spec!.targets as JsonArray) || [entity.spec.target]\n ).join(', ')}\n placement=\"bottom-start\"\n />\n )}\n </>\n ),\n };\n },\n createSpecTypeColumn(\n options: {\n hidden: boolean;\n } = { hidden: false },\n ): TableColumn<CatalogTableRow> {\n return {\n title: 'Type',\n field: 'entity.spec.type',\n hidden: options.hidden,\n width: 'auto',\n };\n },\n createSpecLifecycleColumn(): TableColumn<CatalogTableRow> {\n return {\n title: 'Lifecycle',\n field: 'entity.spec.lifecycle',\n };\n },\n createMetadataDescriptionColumn(): TableColumn<CatalogTableRow> {\n return {\n title: 'Description',\n field: 'entity.metadata.description',\n render: ({ entity }) => (\n <OverflowTooltip\n text={entity.metadata.description}\n placement=\"bottom-start\"\n />\n ),\n width: 'auto',\n };\n },\n createTagsColumn(): TableColumn<CatalogTableRow> {\n return {\n title: 'Tags',\n field: 'entity.metadata.tags',\n cellStyle: {\n padding: '0px 16px 0px 20px',\n },\n render: ({ entity }) => (\n <>\n {entity.metadata.tags &&\n entity.metadata.tags.map(t => (\n <Chip\n key={t}\n label={t}\n size=\"small\"\n variant=\"outlined\"\n style={{ marginBottom: '0px' }}\n />\n ))}\n </>\n ),\n width: 'auto',\n };\n },\n createTitleColumn(options?: {\n hidden?: boolean;\n }): TableColumn<CatalogTableRow> {\n return {\n title: 'Title',\n field: 'entity.metadata.title',\n hidden: options?.hidden,\n searchable: true,\n };\n },\n createLabelColumn(\n key: string,\n options?: { title?: string; defaultValue?: string },\n ): TableColumn<CatalogTableRow> {\n function formatContent(keyLabel: string, entity: Entity): string {\n const labels: Record<string, string> | undefined =\n entity.metadata?.labels;\n return (labels && labels[keyLabel]) || '';\n }\n\n return {\n title: options?.title || 'Label',\n field: 'entity.metadata.labels',\n cellStyle: {\n padding: '0px 16px 0px 20px',\n },\n customSort({ entity: entity1 }, { entity: entity2 }) {\n return formatContent(key, entity1).localeCompare(\n formatContent(key, entity2),\n );\n },\n render: ({ entity }: { entity: Entity }) => {\n const labels: Record<string, string> | undefined =\n entity.metadata?.labels;\n const specifiedLabelValue =\n (labels && labels[key]) || options?.defaultValue;\n return (\n <>\n {specifiedLabelValue && (\n <Chip\n key={specifiedLabelValue}\n label={specifiedLabelValue}\n size=\"small\"\n variant=\"outlined\"\n />\n )}\n </>\n );\n },\n width: 'auto',\n };\n },\n createNamespaceColumn(): TableColumn<CatalogTableRow> {\n return {\n title: 'Namespace',\n field: 'entity.metadata.namespace',\n width: 'auto',\n };\n },\n});\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"columns.esm.js","sources":["../../../src/components/CatalogTable/columns.tsx"],"sourcesContent":["/*\n * Copyright 2021 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 */\nimport React from 'react';\nimport {\n humanizeEntityRef,\n EntityRefLink,\n EntityRefLinks,\n} from '@backstage/plugin-catalog-react';\nimport Chip from '@material-ui/core/Chip';\nimport { CatalogTableRow } from './types';\nimport { OverflowTooltip, TableColumn } from '@backstage/core-components';\nimport { Entity } from '@backstage/catalog-model';\nimport { JsonArray } from '@backstage/types';\n\n// The columnFactories symbol is not directly exported, but through the\n// CatalogTable.columns field.\n/** @public */\nexport const columnFactories = Object.freeze({\n createNameColumn(options?: {\n defaultKind?: string;\n }): TableColumn<CatalogTableRow> {\n function formatContent(entity: Entity): string {\n return (\n entity.metadata?.title ||\n humanizeEntityRef(entity, {\n defaultKind: options?.defaultKind,\n })\n );\n }\n\n return {\n title: 'Name',\n field: 'resolved.entityRef',\n highlight: true,\n customSort({ entity: entity1 }, { entity: entity2 }) {\n // TODO: We could implement this more efficiently by comparing field by field.\n // This has similar issues as above.\n return formatContent(entity1).localeCompare(formatContent(entity2));\n },\n render: ({ entity }) => (\n <EntityRefLink\n entityRef={entity}\n defaultKind={options?.defaultKind || 'Component'}\n />\n ),\n };\n },\n createSystemColumn(): TableColumn<CatalogTableRow> {\n return {\n title: 'System',\n field: 'resolved.partOfSystemRelationTitle',\n customFilterAndSearch: (query, row) => {\n if (!row.resolved.partOfSystemRelations) {\n return false;\n }\n\n const systemNames = row.resolved.partOfSystemRelations.map(\n ref => ref.name,\n ); // Extract system names from entityRefs\n\n const searchText = systemNames.join(', ').toLocaleUpperCase('en-US');\n return searchText.includes(query.toLocaleUpperCase('en-US'));\n },\n render: ({ resolved }) => (\n <EntityRefLinks\n entityRefs={resolved.partOfSystemRelations}\n defaultKind=\"system\"\n />\n ),\n };\n },\n createOwnerColumn(): TableColumn<CatalogTableRow> {\n return {\n title: 'Owner',\n field: 'resolved.ownedByRelationsTitle',\n render: ({ resolved }) => (\n <EntityRefLinks\n entityRefs={resolved.ownedByRelations}\n defaultKind=\"group\"\n />\n ),\n };\n },\n createSpecTargetsColumn(): TableColumn<CatalogTableRow> {\n return {\n title: 'Targets',\n field: 'entity.spec.targets',\n customFilterAndSearch: (query, row) => {\n let targets: JsonArray = [];\n if (\n row.entity?.spec?.targets &&\n Array.isArray(row.entity?.spec?.targets)\n ) {\n targets = row.entity?.spec?.targets;\n } else if (row.entity?.spec?.target) {\n targets = [row.entity?.spec?.target];\n }\n return targets\n .join(', ')\n .toLocaleUpperCase('en-US')\n .includes(query.toLocaleUpperCase('en-US'));\n },\n render: ({ entity }) => (\n <>\n {(entity?.spec?.targets || entity?.spec?.target) && (\n <OverflowTooltip\n text={(\n (entity!.spec!.targets as JsonArray) || [entity.spec.target]\n ).join(', ')}\n placement=\"bottom-start\"\n />\n )}\n </>\n ),\n };\n },\n createSpecTypeColumn(\n options: {\n hidden: boolean;\n } = { hidden: false },\n ): TableColumn<CatalogTableRow> {\n return {\n title: 'Type',\n field: 'entity.spec.type',\n hidden: options.hidden,\n width: 'auto',\n };\n },\n createSpecLifecycleColumn(): TableColumn<CatalogTableRow> {\n return {\n title: 'Lifecycle',\n field: 'entity.spec.lifecycle',\n };\n },\n createMetadataDescriptionColumn(): TableColumn<CatalogTableRow> {\n return {\n title: 'Description',\n field: 'entity.metadata.description',\n render: ({ entity }) => (\n <OverflowTooltip\n text={entity.metadata.description}\n placement=\"bottom-start\"\n />\n ),\n width: 'auto',\n };\n },\n createTagsColumn(): TableColumn<CatalogTableRow> {\n return {\n title: 'Tags',\n field: 'entity.metadata.tags',\n cellStyle: {\n padding: '0px 16px 0px 20px',\n },\n render: ({ entity }) => (\n <>\n {entity.metadata.tags &&\n entity.metadata.tags.map(t => (\n <Chip\n key={t}\n label={t}\n size=\"small\"\n variant=\"outlined\"\n style={{ marginBottom: '0px' }}\n />\n ))}\n </>\n ),\n width: 'auto',\n };\n },\n createTitleColumn(options?: {\n hidden?: boolean;\n }): TableColumn<CatalogTableRow> {\n return {\n title: 'Title',\n field: 'entity.metadata.title',\n hidden: options?.hidden,\n searchable: true,\n };\n },\n createLabelColumn(\n key: string,\n options?: { title?: string; defaultValue?: string },\n ): TableColumn<CatalogTableRow> {\n function formatContent(keyLabel: string, entity: Entity): string {\n const labels: Record<string, string> | undefined =\n entity.metadata?.labels;\n return (labels && labels[keyLabel]) || '';\n }\n\n return {\n title: options?.title || 'Label',\n field: 'entity.metadata.labels',\n cellStyle: {\n padding: '0px 16px 0px 20px',\n },\n customSort({ entity: entity1 }, { entity: entity2 }) {\n return formatContent(key, entity1).localeCompare(\n formatContent(key, entity2),\n );\n },\n render: ({ entity }: { entity: Entity }) => {\n const labels: Record<string, string> | undefined =\n entity.metadata?.labels;\n const specifiedLabelValue =\n (labels && labels[key]) || options?.defaultValue;\n return (\n <>\n {specifiedLabelValue && (\n <Chip\n key={specifiedLabelValue}\n label={specifiedLabelValue}\n size=\"small\"\n variant=\"outlined\"\n />\n )}\n </>\n );\n },\n width: 'auto',\n };\n },\n createNamespaceColumn(): TableColumn<CatalogTableRow> {\n return {\n title: 'Namespace',\n field: 'entity.metadata.namespace',\n width: 'auto',\n };\n },\n});\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@backstage/plugin-catalog",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.29.0-next.0",
|
|
4
4
|
"description": "The Backstage plugin for browsing the Backstage catalog",
|
|
5
5
|
"backstage": {
|
|
6
6
|
"role": "frontend-plugin",
|
|
@@ -72,18 +72,18 @@
|
|
|
72
72
|
"dependencies": {
|
|
73
73
|
"@backstage/catalog-client": "1.9.1",
|
|
74
74
|
"@backstage/catalog-model": "1.7.3",
|
|
75
|
-
"@backstage/core-compat-api": "0.4.
|
|
76
|
-
"@backstage/core-components": "0.
|
|
77
|
-
"@backstage/core-plugin-api": "1.10.
|
|
75
|
+
"@backstage/core-compat-api": "0.4.1-next.0",
|
|
76
|
+
"@backstage/core-components": "0.17.0",
|
|
77
|
+
"@backstage/core-plugin-api": "1.10.5",
|
|
78
78
|
"@backstage/errors": "1.2.7",
|
|
79
|
-
"@backstage/frontend-plugin-api": "0.10.0
|
|
80
|
-
"@backstage/integration-react": "1.2.5
|
|
79
|
+
"@backstage/frontend-plugin-api": "0.10.0",
|
|
80
|
+
"@backstage/integration-react": "1.2.5",
|
|
81
81
|
"@backstage/plugin-catalog-common": "1.1.3",
|
|
82
|
-
"@backstage/plugin-catalog-react": "1.16.
|
|
83
|
-
"@backstage/plugin-permission-react": "0.4.
|
|
84
|
-
"@backstage/plugin-scaffolder-common": "1.5.10
|
|
82
|
+
"@backstage/plugin-catalog-react": "1.16.1-next.0",
|
|
83
|
+
"@backstage/plugin-permission-react": "0.4.32",
|
|
84
|
+
"@backstage/plugin-scaffolder-common": "1.5.10",
|
|
85
85
|
"@backstage/plugin-search-common": "1.2.17",
|
|
86
|
-
"@backstage/plugin-search-react": "1.8.7
|
|
86
|
+
"@backstage/plugin-search-react": "1.8.7",
|
|
87
87
|
"@backstage/types": "1.2.1",
|
|
88
88
|
"@material-ui/core": "^4.12.2",
|
|
89
89
|
"@material-ui/icons": "^4.9.1",
|
|
@@ -99,12 +99,12 @@
|
|
|
99
99
|
"zen-observable": "^0.10.0"
|
|
100
100
|
},
|
|
101
101
|
"devDependencies": {
|
|
102
|
-
"@backstage/cli": "0.
|
|
103
|
-
"@backstage/core-app-api": "1.16.0
|
|
104
|
-
"@backstage/dev-utils": "1.1.
|
|
105
|
-
"@backstage/frontend-test-utils": "0.3.0
|
|
102
|
+
"@backstage/cli": "0.32.0-next.0",
|
|
103
|
+
"@backstage/core-app-api": "1.16.0",
|
|
104
|
+
"@backstage/dev-utils": "1.1.9-next.0",
|
|
105
|
+
"@backstage/frontend-test-utils": "0.3.0",
|
|
106
106
|
"@backstage/plugin-permission-common": "0.8.4",
|
|
107
|
-
"@backstage/test-utils": "1.7.6
|
|
107
|
+
"@backstage/test-utils": "1.7.6",
|
|
108
108
|
"@testing-library/dom": "^10.0.0",
|
|
109
109
|
"@testing-library/jest-dom": "^6.0.0",
|
|
110
110
|
"@testing-library/react": "^16.0.0",
|