@backstage/plugin-catalog 0.6.17 → 0.7.3

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,75 @@
1
1
  # @backstage/plugin-catalog
2
2
 
3
+ ## 0.7.3
4
+
5
+ ### Patch Changes
6
+
7
+ - 38d6df6bb9: Remove the "View Api" icon in the AboutCard, as the information is misleading for some users and is
8
+ duplicated in the tabs above.
9
+ - a125278b81: Refactor out the deprecated path and icon from RouteRefs
10
+ - Updated dependencies
11
+ - @backstage/catalog-client@0.5.2
12
+ - @backstage/catalog-model@0.9.7
13
+ - @backstage/plugin-catalog-react@0.6.4
14
+ - @backstage/core-components@0.7.4
15
+ - @backstage/core-plugin-api@0.2.0
16
+ - @backstage/integration-react@0.1.14
17
+
18
+ ## 0.7.2
19
+
20
+ ### Patch Changes
21
+
22
+ - 36e67d2f24: Internal updates to apply more strict checks to throw errors.
23
+ - Updated dependencies
24
+ - @backstage/core-components@0.7.1
25
+ - @backstage/errors@0.1.3
26
+ - @backstage/core-plugin-api@0.1.11
27
+ - @backstage/plugin-catalog-react@0.6.1
28
+ - @backstage/catalog-model@0.9.5
29
+
30
+ ## 0.7.1
31
+
32
+ ### Patch Changes
33
+
34
+ - 82fbda923e: Introduce a new `StarredEntitiesApi` that is used in the `useStarredEntities` hook.
35
+ The `@backstage/plugin-catalog` installs a default implementation that is backed by the `StorageApi`, but one can also override the `starredEntitiesApiRef`.
36
+
37
+ This change also updates the storage format from a custom string to an entity reference and moves the location in the local storage.
38
+ A migration will convert the previously starred entities to the location on the first load of Backstage.
39
+
40
+ - 93a13dfb42: Support `material-ui` overrides in SystemDiagramCard and EmptityLinksEmptyState components
41
+ - b03b9f19e0: added sorting in entity `Name` column by `metadata.title` if present
42
+ - Updated dependencies
43
+ - @backstage/plugin-catalog-react@0.6.0
44
+ - @backstage/core-components@0.7.0
45
+ - @backstage/theme@0.2.11
46
+ - @backstage/integration-react@0.1.12
47
+
48
+ ## 0.7.0
49
+
50
+ ### Minor Changes
51
+
52
+ - bb0f6b8a0f: Updates the `<EntitySwitch if={asyncMethod}/>` to accept asynchronous `if` functions.
53
+
54
+ Adds the new `getEntityAncestors` method to `CatalogClient`.
55
+
56
+ Updates the `<EntityProcessingErrorsPanel />` to make use of the ancestry endpoint to display errors for entities further up the ancestry tree. This makes it easier to discover issues where for example the origin location has been removed or malformed.
57
+
58
+ `hasCatalogProcessingErrors()` is now changed to be asynchronous so any calls outside the already established entitySwitch need to be awaited.
59
+
60
+ ### Patch Changes
61
+
62
+ - 5aae9bb61e: Name column will now render entity `metadata.title` if its present
63
+ - 1c5c5b23fb: Replace deprecated material UI components used by LinksCard to remove errors from console log
64
+ - ca0559444c: Avoid usage of `.to*Case()`, preferring `.toLocale*Case('en-US')` instead.
65
+ - 81a41ec249: Added a `name` key to all extensions in order to improve Analytics API metadata.
66
+ - Updated dependencies
67
+ - @backstage/core-components@0.6.1
68
+ - @backstage/core-plugin-api@0.1.10
69
+ - @backstage/plugin-catalog-react@0.5.2
70
+ - @backstage/catalog-model@0.9.4
71
+ - @backstage/catalog-client@0.5.0
72
+
3
73
  ## 0.6.17
4
74
 
5
75
  ### Patch Changes
@@ -1,13 +1,12 @@
1
- import { RELATION_PART_OF, RELATION_OWNED_BY, RELATION_PROVIDES_API, RELATION_CONSUMES_API, ENTITY_DEFAULT_NAMESPACE, LOCATION_ANNOTATION, stringifyEntityRef } from '@backstage/catalog-model';
1
+ import { RELATION_PART_OF, RELATION_OWNED_BY, ENTITY_DEFAULT_NAMESPACE, LOCATION_ANNOTATION, stringifyEntityRef, compareEntityToRef } from '@backstage/catalog-model';
2
2
  import { Link, HeaderIconLinkRow, OverflowTooltip, WarningPanel, CodeSnippet, Table, Page, Header, Progress, RoutedTabs, Content, HeaderLabel, ResponseErrorPanel, HeaderTabs, PageWithHeader, ContentHeader, CreateButton, SupportButton } from '@backstage/core-components';
3
- import { createExternalRouteRef, useElementFilter, useApi, alertApiRef, useRouteRef, attachComponentData, configApiRef, createPlugin, createApiFactory, discoveryApiRef, identityApiRef, createRoutableExtension, createComponentExtension } from '@backstage/core-plugin-api';
3
+ import { createExternalRouteRef, useElementFilter, useApi, alertApiRef, useRouteRef, attachComponentData, useApiHolder, configApiRef, createPlugin, createApiFactory, discoveryApiRef, identityApiRef, storageApiRef, createRoutableExtension, createComponentExtension } from '@backstage/core-plugin-api';
4
4
  import { scmIntegrationsApiRef, ScmIntegrationIcon } from '@backstage/integration-react';
5
- import { getEntityRelations, EntityRefLinks, useEntity, catalogApiRef, getEntitySourceLocation, getEntityMetadataEditUrl, useEntityKinds, useEntityListProvider, EntityKindFilter, EntityRefLink, useStarredEntities, formatEntityRefTitle, getEntityMetadataViewUrl, favoriteEntityIcon, favoriteEntityTooltip, useEntityCompoundName, EntityContext, UnregisterEntityDialog, FavoriteEntity, catalogRouteRef, EntityListProvider, EntityTypePicker, UserListPicker, EntityOwnerPicker, EntityLifecyclePicker, EntityTagPicker, rootRoute, entityRoute, AsyncEntityProvider, useEntityFromUrl, entityRouteRef } from '@backstage/plugin-catalog-react';
5
+ import { getEntityRelations, EntityRefLinks, useEntity, catalogApiRef, getEntitySourceLocation, getEntityMetadataEditUrl, useEntityKinds, useEntityListProvider, EntityKindFilter, formatEntityRefTitle, EntityRefLink, useStarredEntities, getEntityMetadataViewUrl, favoriteEntityIcon, favoriteEntityTooltip, useEntityCompoundName, EntityContext, UnregisterEntityDialog, FavoriteEntity, catalogRouteRef, EntityListProvider, EntityTypePicker, UserListPicker, EntityOwnerPicker, EntityLifecyclePicker, EntityTagPicker, AsyncEntityProvider, useEntityFromUrl, starredEntitiesApiRef, DefaultStarredEntitiesApi, entityRouteRef } from '@backstage/plugin-catalog-react';
6
6
  import { makeStyles, Typography, Grid, Chip, Card, CardHeader, IconButton, Divider, CardContent, createStyles, capitalize, Select, InputBase, MenuItem, ListItem, ListItemText, Box, ListItemIcon, Popover, MenuList, Dialog, DialogTitle, DialogActions, Button, useMediaQuery, useTheme, Drawer, Link as Link$1 } from '@material-ui/core';
7
7
  import CachedIcon from '@material-ui/icons/Cached';
8
8
  import DocsIcon from '@material-ui/icons/Description';
9
9
  import EditIcon from '@material-ui/icons/Edit';
10
- import ExtensionIcon from '@material-ui/icons/Extension';
11
10
  import React, { useCallback, useState, useEffect, useMemo, useContext } from 'react';
12
11
  import OpenInNew from '@material-ui/icons/OpenInNew';
13
12
  import { capitalize as capitalize$1 } from 'lodash';
@@ -16,7 +15,9 @@ import { useNavigate, useParams, Navigate, matchRoutes, useRoutes, Routes, Route
16
15
  import { makeStyles as makeStyles$1 } from '@material-ui/core/styles';
17
16
  import Cancel from '@material-ui/icons/Cancel';
18
17
  import MoreVert from '@material-ui/icons/MoreVert';
18
+ import { assertError } from '@backstage/errors';
19
19
  import { ENTITY_STATUS_CATALOG_PROCESSING_TYPE, CatalogClient } from '@backstage/catalog-client';
20
+ import { useAsync } from 'react-use';
20
21
  import { Helmet } from 'react-helmet';
21
22
  import FilterListIcon from '@material-ui/icons/FilterList';
22
23
  import IlloSvgUrl from '../components/EntityNotFound/Illo/illo.svg';
@@ -80,6 +81,12 @@ class CatalogClientWrapper {
80
81
  token: (_a = options == null ? void 0 : options.token) != null ? _a : await this.identityApi.getIdToken()
81
82
  });
82
83
  }
84
+ async getEntityAncestors(request, options) {
85
+ var _a;
86
+ return await this.client.getEntityAncestors(request, {
87
+ token: (_a = options == null ? void 0 : options.token) != null ? _a : await this.identityApi.getIdToken()
88
+ });
89
+ }
83
90
  }
84
91
 
85
92
  const createComponentRouteRef = createExternalRouteRef({
@@ -235,9 +242,6 @@ function AboutCard({variant}) {
235
242
  const viewTechdocLink = useRouteRef(viewTechDocRouteRef);
236
243
  const entitySourceLocation = getEntitySourceLocation(entity, scmIntegrationsApi);
237
244
  const entityMetadataEditUrl = getEntityMetadataEditUrl(entity);
238
- const providesApiRelations = getEntityRelations(entity, RELATION_PROVIDES_API);
239
- const consumesApiRelations = getEntityRelations(entity, RELATION_CONSUMES_API);
240
- const hasApis = providesApiRelations.length > 0 || consumesApiRelations.length > 0;
241
245
  const viewInSource = {
242
246
  label: "View Source",
243
247
  disabled: !entitySourceLocation,
@@ -256,13 +260,6 @@ function AboutCard({variant}) {
256
260
  name: entity.metadata.name
257
261
  })
258
262
  };
259
- const viewApi = {
260
- title: hasApis ? "" : "No APIs available",
261
- label: "View API",
262
- disabled: !hasApis,
263
- icon: /* @__PURE__ */ React.createElement(ExtensionIcon, null),
264
- href: "api"
265
- };
266
263
  let cardClass = "";
267
264
  if (variant === "gridItem") {
268
265
  cardClass = classes.gridItemCard;
@@ -296,7 +293,7 @@ function AboutCard({variant}) {
296
293
  to: entityMetadataEditUrl != null ? entityMetadataEditUrl : "#"
297
294
  }, /* @__PURE__ */ React.createElement(EditIcon, null))),
298
295
  subheader: /* @__PURE__ */ React.createElement(HeaderIconLinkRow, {
299
- links: [viewInSource, viewInTechDocs, viewApi]
296
+ links: [viewInSource, viewInTechDocs]
300
297
  })
301
298
  }), /* @__PURE__ */ React.createElement(Divider, null), /* @__PURE__ */ React.createElement(CardContent, {
302
299
  className: cardContentClass
@@ -373,14 +370,27 @@ const CatalogResultListItem = ({result}) => {
373
370
  };
374
371
 
375
372
  function createNameColumn(props) {
373
+ function formatContent(entity) {
374
+ var _a;
375
+ return ((_a = entity.metadata) == null ? void 0 : _a.title) || formatEntityRefTitle(entity, {
376
+ defaultKind: props == null ? void 0 : props.defaultKind
377
+ });
378
+ }
376
379
  return {
377
380
  title: "Name",
378
381
  field: "resolved.name",
379
382
  highlight: true,
380
- render: ({entity}) => /* @__PURE__ */ React.createElement(EntityRefLink, {
381
- entityRef: entity,
382
- defaultKind: (props == null ? void 0 : props.defaultKind) || "Component"
383
- })
383
+ customSort({entity: entity1}, {entity: entity2}) {
384
+ return formatContent(entity1).localeCompare(formatContent(entity2));
385
+ },
386
+ render: ({entity}) => {
387
+ var _a;
388
+ return /* @__PURE__ */ React.createElement(EntityRefLink, {
389
+ entityRef: entity,
390
+ defaultKind: (props == null ? void 0 : props.defaultKind) || "Component",
391
+ title: (_a = entity.metadata) == null ? void 0 : _a.title
392
+ });
393
+ }
384
394
  };
385
395
  }
386
396
  function createSystemColumn() {
@@ -765,6 +775,7 @@ const DeleteEntityDialog = ({
765
775
  await catalogApi.removeEntityByUid(uid);
766
776
  onConfirm();
767
777
  } catch (err) {
778
+ assertError(err);
768
779
  alertApi.post({message: err.message});
769
780
  } finally {
770
781
  setBusy(false);
@@ -810,21 +821,53 @@ const EntityOrphanWarning = () => {
810
821
  }));
811
822
  };
812
823
 
813
- const errorfilter = (i) => i.error && i.level === "error" && i.type === ENTITY_STATUS_CATALOG_PROCESSING_TYPE;
814
- const hasCatalogProcessingErrors = (entity) => {
815
- var _a, _b;
816
- return ((_b = (_a = entity == null ? void 0 : entity.status) == null ? void 0 : _a.items) == null ? void 0 : _b.filter(errorfilter).length) > 0;
824
+ const errorFilter = (i) => i.error && i.level === "error" && i.type === ENTITY_STATUS_CATALOG_PROCESSING_TYPE;
825
+ async function getOwnAndAncestorsErrors(entityRef, catalogApi) {
826
+ const ancestors = await catalogApi.getEntityAncestors({entityRef});
827
+ const items = ancestors.items.map((item) => {
828
+ var _a, _b;
829
+ const statuses = (_b = (_a = item.entity.status) == null ? void 0 : _a.items) != null ? _b : [];
830
+ const errors = statuses.filter(errorFilter).map((e) => e.error).filter((e) => Boolean(e));
831
+ return {errors, entity: item.entity};
832
+ }).filter((item) => item.errors.length > 0);
833
+ return {items};
834
+ }
835
+ const hasCatalogProcessingErrors = async (entity, context) => {
836
+ const catalogApi = context.apis.get(catalogApiRef);
837
+ if (!catalogApi) {
838
+ throw new Error(`No implementation available for ${catalogApiRef}`);
839
+ }
840
+ const errors = await getOwnAndAncestorsErrors(stringifyEntityRef(entity), catalogApi);
841
+ return errors.items.length > 0;
817
842
  };
818
843
  const EntityProcessingErrorsPanel = () => {
819
- var _a, _b;
820
844
  const {entity} = useEntity();
821
- const catalogProcessingErrors = ((_b = (_a = entity == null ? void 0 : entity.status) == null ? void 0 : _a.items) == null ? void 0 : _b.filter(errorfilter)) || [];
822
- return /* @__PURE__ */ React.createElement(React.Fragment, null, catalogProcessingErrors.map(({error}, index) => /* @__PURE__ */ React.createElement(Box, {
845
+ const entityRef = stringifyEntityRef(entity);
846
+ const catalogApi = useApi(catalogApiRef);
847
+ const {loading, error, value} = useAsync(async () => {
848
+ return getOwnAndAncestorsErrors(entityRef, catalogApi);
849
+ }, [entityRef, catalogApi]);
850
+ if (error) {
851
+ return /* @__PURE__ */ React.createElement(Box, {
852
+ mb: 1
853
+ }, /* @__PURE__ */ React.createElement(ResponseErrorPanel, {
854
+ error
855
+ }));
856
+ }
857
+ if (loading || !value) {
858
+ return null;
859
+ }
860
+ return /* @__PURE__ */ React.createElement(React.Fragment, null, value.items.map((ancestorError, index) => /* @__PURE__ */ React.createElement(Box, {
823
861
  key: index,
824
862
  mb: 1
825
- }, /* @__PURE__ */ React.createElement(ResponseErrorPanel, {
826
- error
827
- }))));
863
+ }, !compareEntityToRef(entity, stringifyEntityRef(ancestorError.entity)) && /* @__PURE__ */ React.createElement(Box, {
864
+ p: 1
865
+ }, "The error below originates from", " ", /* @__PURE__ */ React.createElement(EntityRefLink, {
866
+ entityRef: ancestorError.entity
867
+ })), ancestorError.errors.map((e, i) => /* @__PURE__ */ React.createElement(ResponseErrorPanel, {
868
+ key: i,
869
+ error: e
870
+ })))));
828
871
  };
829
872
 
830
873
  const getSelectedIndexOrDefault = (matchedRoute, tabs, defaultIndex = 0) => {
@@ -971,22 +1014,53 @@ const ENTITY_SWITCH_KEY = "core.backstage.entitySwitch";
971
1014
  const EntitySwitchCase = (_) => null;
972
1015
  attachComponentData(EntitySwitchCase, ENTITY_SWITCH_KEY, true);
973
1016
  const EntitySwitch = ({children}) => {
974
- var _a;
1017
+ var _a, _b;
975
1018
  const {entity} = useEntity();
976
- const switchCases = useElementFilter(children, (collection) => collection.selectByComponentData({
1019
+ const apis = useApiHolder();
1020
+ const results = useElementFilter(children, (collection) => collection.selectByComponentData({
977
1021
  key: ENTITY_SWITCH_KEY,
978
1022
  withStrictError: "Child of EntitySwitch is not an EntitySwitch.Case"
979
1023
  }).getElements().flatMap((element) => {
1024
+ var _a2;
980
1025
  const {if: condition, children: elementsChildren} = element.props;
981
- return [{if: condition, children: elementsChildren}];
982
- }));
983
- const matchingCase = switchCases.find((switchCase) => switchCase.if ? switchCase.if(entity) : true);
984
- return (_a = matchingCase == null ? void 0 : matchingCase.children) != null ? _a : null;
1026
+ return [
1027
+ {
1028
+ if: (_a2 = condition == null ? void 0 : condition(entity, {apis})) != null ? _a2 : true,
1029
+ children: elementsChildren
1030
+ }
1031
+ ];
1032
+ }), [apis, entity]);
1033
+ const hasAsyncCases = results.some((r) => typeof r.if === "object" && "then" in r.if);
1034
+ if (hasAsyncCases) {
1035
+ return /* @__PURE__ */ React.createElement(AsyncEntitySwitch, {
1036
+ results
1037
+ });
1038
+ }
1039
+ return (_b = (_a = results.find((r) => r.if)) == null ? void 0 : _a.children) != null ? _b : null;
985
1040
  };
1041
+ function AsyncEntitySwitch({results}) {
1042
+ const {loading, value} = useAsync(async () => {
1043
+ var _a;
1044
+ const promises = results.map(async ({if: condition, children: output}) => {
1045
+ try {
1046
+ if (await condition) {
1047
+ return output;
1048
+ }
1049
+ } catch {
1050
+ }
1051
+ return null;
1052
+ });
1053
+ return (_a = (await Promise.all(promises)).find(Boolean)) != null ? _a : null;
1054
+ }, [results]);
1055
+ if (loading || !value) {
1056
+ return null;
1057
+ }
1058
+ return value;
1059
+ }
986
1060
  EntitySwitch.Case = EntitySwitchCase;
987
1061
 
988
1062
  function strCmp(a, b) {
989
- return Boolean(a && (a == null ? void 0 : a.toLowerCase()) === (b == null ? void 0 : b.toLowerCase()));
1063
+ return Boolean(a && (a == null ? void 0 : a.toLocaleLowerCase("en-US")) === (b == null ? void 0 : b.toLocaleLowerCase("en-US")));
990
1064
  }
991
1065
  function isKind(kind) {
992
1066
  return (entity) => strCmp(entity == null ? void 0 : entity.kind, kind);
@@ -1174,10 +1248,10 @@ const EntityLoader = (props) => /* @__PURE__ */ React.createElement(AsyncEntityP
1174
1248
  const Router = ({
1175
1249
  EntityPage = DefaultEntityPage
1176
1250
  }) => /* @__PURE__ */ React.createElement(Routes, null, /* @__PURE__ */ React.createElement(Route$1, {
1177
- path: `${rootRoute.path}`,
1251
+ path: "/",
1178
1252
  element: /* @__PURE__ */ React.createElement(CatalogPage, null)
1179
1253
  }), /* @__PURE__ */ React.createElement(Route$1, {
1180
- path: `${entityRoute.path}`,
1254
+ path: "/:namespace/:kind/:name",
1181
1255
  element: /* @__PURE__ */ React.createElement(EntityLoader, null, /* @__PURE__ */ React.createElement(EntityPageSwitch, {
1182
1256
  EntityPage
1183
1257
  }))
@@ -1196,6 +1270,11 @@ const catalogPlugin = createPlugin({
1196
1270
  client: new CatalogClient({discoveryApi}),
1197
1271
  identityApi
1198
1272
  })
1273
+ }),
1274
+ createApiFactory({
1275
+ api: starredEntitiesApiRef,
1276
+ deps: {storageApi: storageApiRef},
1277
+ factory: ({storageApi}) => new DefaultStarredEntitiesApi({storageApi})
1199
1278
  })
1200
1279
  ],
1201
1280
  routes: {
@@ -1208,63 +1287,75 @@ const catalogPlugin = createPlugin({
1208
1287
  }
1209
1288
  });
1210
1289
  const CatalogIndexPage = catalogPlugin.provide(createRoutableExtension({
1211
- component: () => import('./index-bb04d347.esm.js').then((m) => m.CatalogPage),
1290
+ name: "CatalogIndexPage",
1291
+ component: () => import('./index-a5cb6379.esm.js').then((m) => m.CatalogPage),
1212
1292
  mountPoint: catalogRouteRef
1213
1293
  }));
1214
1294
  const CatalogEntityPage = catalogPlugin.provide(createRoutableExtension({
1295
+ name: "CatalogEntityPage",
1215
1296
  component: () => import('./index-7b0e3438.esm.js').then((m) => m.CatalogEntityPage),
1216
1297
  mountPoint: entityRouteRef
1217
1298
  }));
1218
1299
  const EntityAboutCard = catalogPlugin.provide(createComponentExtension({
1300
+ name: "EntityAboutCard",
1219
1301
  component: {
1220
- lazy: () => import('./index-937795b4.esm.js').then((m) => m.AboutCard)
1302
+ lazy: () => import('./index-66b84bce.esm.js').then((m) => m.AboutCard)
1221
1303
  }
1222
1304
  }));
1223
1305
  const EntityLinksCard = catalogPlugin.provide(createComponentExtension({
1306
+ name: "EntityLinksCard",
1224
1307
  component: {
1225
- lazy: () => import('./index-d2181250.esm.js').then((m) => m.EntityLinksCard)
1308
+ lazy: () => import('./index-f9a9eace.esm.js').then((m) => m.EntityLinksCard)
1226
1309
  }
1227
1310
  }));
1228
1311
  const EntityHasSystemsCard = catalogPlugin.provide(createComponentExtension({
1312
+ name: "EntityHasSystemsCard",
1229
1313
  component: {
1230
1314
  lazy: () => import('./index-55d1a69b.esm.js').then((m) => m.HasSystemsCard)
1231
1315
  }
1232
1316
  }));
1233
1317
  const EntityHasComponentsCard = catalogPlugin.provide(createComponentExtension({
1318
+ name: "EntityHasComponentsCard",
1234
1319
  component: {
1235
1320
  lazy: () => import('./index-e3a14e6d.esm.js').then((m) => m.HasComponentsCard)
1236
1321
  }
1237
1322
  }));
1238
1323
  const EntityHasSubcomponentsCard = catalogPlugin.provide(createComponentExtension({
1324
+ name: "EntityHasSubcomponentsCard",
1239
1325
  component: {
1240
1326
  lazy: () => import('./index-ef2084a6.esm.js').then((m) => m.HasSubcomponentsCard)
1241
1327
  }
1242
1328
  }));
1243
1329
  const EntityHasResourcesCard = catalogPlugin.provide(createComponentExtension({
1330
+ name: "EntityHasResourcesCard",
1244
1331
  component: {
1245
1332
  lazy: () => import('./index-f2f98d41.esm.js').then((m) => m.HasResourcesCard)
1246
1333
  }
1247
1334
  }));
1248
1335
  const EntityDependsOnComponentsCard = catalogPlugin.provide(createComponentExtension({
1336
+ name: "EntityDependsOnComponentsCard",
1249
1337
  component: {
1250
1338
  lazy: () => import('./index-99e3a23f.esm.js').then((m) => m.DependsOnComponentsCard)
1251
1339
  }
1252
1340
  }));
1253
1341
  const EntityDependencyOfComponentsCard = catalogPlugin.provide(createComponentExtension({
1342
+ name: "EntityDependencyOfComponentsCard",
1254
1343
  component: {
1255
1344
  lazy: () => import('./index-112e4b31.esm.js').then((m) => m.DependencyOfComponentsCard)
1256
1345
  }
1257
1346
  }));
1258
1347
  const EntityDependsOnResourcesCard = catalogPlugin.provide(createComponentExtension({
1348
+ name: "EntityDependsOnResourcesCard",
1259
1349
  component: {
1260
1350
  lazy: () => import('./index-8f587acc.esm.js').then((m) => m.DependsOnResourcesCard)
1261
1351
  }
1262
1352
  }));
1263
1353
  const EntitySystemDiagramCard = catalogPlugin.provide(createComponentExtension({
1354
+ name: "EntitySystemDiagramCard",
1264
1355
  component: {
1265
- lazy: () => import('./index-99bc5767.esm.js').then((m) => m.SystemDiagramCard)
1356
+ lazy: () => import('./index-fc057bf8.esm.js').then((m) => m.SystemDiagramCard)
1266
1357
  }
1267
1358
  }));
1268
1359
 
1269
1360
  export { AboutCard as A, EntityOrphanWarning as B, CatalogPage as C, isOrphan as D, EntityAboutCard as E, EntityProcessingErrorsPanel as F, hasCatalogProcessingErrors as G, EntityPageLayout as H, EntitySwitch as I, isKind as J, isNamespace as K, isComponentType as L, FilteredEntityLayout as M, FilterContainer as N, EntityListContainer as O, Router as R, AboutContent as a, AboutField as b, CatalogClientWrapper as c, CatalogTable as d, CatalogEntityPage as e, CatalogIndexPage as f, catalogPlugin as g, EntityDependencyOfComponentsCard as h, EntityDependsOnComponentsCard as i, EntityDependsOnResourcesCard as j, EntityHasComponentsCard as k, EntityHasResourcesCard as l, EntityHasSubcomponentsCard as m, EntityHasSystemsCard as n, EntityLinksCard as o, EntitySystemDiagramCard as p, CatalogKindHeader as q, CatalogResultListItem as r, createNameColumn as s, createSystemColumn as t, createOwnerColumn as u, createSpecTypeColumn as v, createSpecLifecycleColumn as w, createMetadataDescriptionColumn as x, createTagsColumn as y, EntityLayout as z };
1270
- //# sourceMappingURL=index-6a9a7783.esm.js.map
1361
+ //# sourceMappingURL=index-0e602309.esm.js.map