@backstage/plugin-catalog-graph 0.4.8-next.4 → 0.4.8

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,22 @@
1
1
  # @backstage/plugin-catalog-graph
2
2
 
3
+ ## 0.4.8
4
+
5
+ ### Patch Changes
6
+
7
+ - c7603e8: Deprecate the old pattern of `create*Extension`, and replace it with the equivalent Blueprint implementation instead
8
+ - fba7537: Memoize entity graph nodes when applying an `entityFilter` to prevent repeated redraws
9
+ - 4a529c2: Use `entityPresentationApi` for the node title and the icon.
10
+ - Updated dependencies
11
+ - @backstage/frontend-plugin-api@0.7.0
12
+ - @backstage/plugin-catalog-react@1.12.3
13
+ - @backstage/core-components@0.14.10
14
+ - @backstage/core-compat-api@0.2.8
15
+ - @backstage/catalog-model@1.6.0
16
+ - @backstage/catalog-client@1.6.6
17
+ - @backstage/core-plugin-api@1.9.3
18
+ - @backstage/types@1.1.1
19
+
3
20
  ## 0.4.8-next.4
4
21
 
5
22
  ### Patch Changes
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backstage/plugin-catalog-graph__alpha",
3
- "version": "0.4.8-next.4",
3
+ "version": "0.4.8",
4
4
  "main": "../dist/alpha.esm.js",
5
5
  "module": "../dist/alpha.esm.js",
6
6
  "types": "../dist/alpha.d.ts"
package/dist/alpha.d.ts CHANGED
@@ -1,4 +1,7 @@
1
+ import * as _backstage_catalog_model from '@backstage/catalog-model';
1
2
  import * as _backstage_frontend_plugin_api from '@backstage/frontend-plugin-api';
3
+ import React__default from 'react';
4
+ import { Direction } from '@backstage/plugin-catalog-graph';
2
5
 
3
6
  declare const _default: _backstage_frontend_plugin_api.BackstagePlugin<{
4
7
  catalogGraph: _backstage_frontend_plugin_api.RouteRef<undefined>;
@@ -8,6 +11,93 @@ declare const _default: _backstage_frontend_plugin_api.BackstagePlugin<{
8
11
  kind: string;
9
12
  namespace: string;
10
13
  }>;
11
- }, {}>;
14
+ }, {
15
+ "entity-card:catalog-graph/relations": _backstage_frontend_plugin_api.ExtensionDefinition<{
16
+ kinds: string[] | undefined;
17
+ relations: string[] | undefined;
18
+ maxDepth: number | undefined;
19
+ unidirectional: boolean | undefined;
20
+ mergeRelations: boolean | undefined;
21
+ direction: Direction | undefined;
22
+ relationPairs: [string, string][] | undefined;
23
+ zoom: "disabled" | "enabled" | "enable-on-click" | undefined;
24
+ curve: "curveStepBefore" | "curveMonotoneX" | undefined;
25
+ title: string | undefined;
26
+ height: number | undefined;
27
+ } & {
28
+ filter: string | undefined;
29
+ }, {
30
+ height?: number | undefined;
31
+ curve?: "curveStepBefore" | "curveMonotoneX" | undefined;
32
+ direction?: Direction | undefined;
33
+ title?: string | undefined;
34
+ zoom?: "disabled" | "enabled" | "enable-on-click" | undefined;
35
+ relations?: string[] | undefined;
36
+ maxDepth?: number | undefined;
37
+ kinds?: string[] | undefined;
38
+ unidirectional?: boolean | undefined;
39
+ mergeRelations?: boolean | undefined;
40
+ relationPairs?: [string, string][] | undefined;
41
+ } & {
42
+ filter?: string | undefined;
43
+ }, _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<React__default.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<(entity: _backstage_catalog_model.Entity) => boolean, "catalog.entity-filter-function", {
44
+ optional: true;
45
+ }> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<string, "catalog.entity-filter-expression", {
46
+ optional: true;
47
+ }>, {
48
+ [x: string]: _backstage_frontend_plugin_api.ExtensionInput<_backstage_frontend_plugin_api.AnyExtensionDataRef, {
49
+ optional: boolean;
50
+ singleton: boolean;
51
+ }>;
52
+ }, {
53
+ kind: "entity-card";
54
+ namespace: undefined;
55
+ name: "relations";
56
+ }>;
57
+ "page:catalog-graph": _backstage_frontend_plugin_api.ExtensionDefinition<{
58
+ selectedKinds: string[] | undefined;
59
+ selectedRelations: string[] | undefined;
60
+ rootEntityRefs: string[] | undefined;
61
+ maxDepth: number | undefined;
62
+ unidirectional: boolean | undefined;
63
+ mergeRelations: boolean | undefined;
64
+ direction: Direction | undefined;
65
+ showFilters: boolean | undefined;
66
+ curve: "curveStepBefore" | "curveMonotoneX" | undefined;
67
+ kinds: string[] | undefined;
68
+ relations: string[] | undefined;
69
+ relationPairs: [string, string][] | undefined;
70
+ zoom: "disabled" | "enabled" | "enable-on-click" | undefined;
71
+ } & {
72
+ path: string | undefined;
73
+ }, {
74
+ curve?: "curveStepBefore" | "curveMonotoneX" | undefined;
75
+ direction?: Direction | undefined;
76
+ zoom?: "disabled" | "enabled" | "enable-on-click" | undefined;
77
+ relations?: string[] | undefined;
78
+ rootEntityRefs?: string[] | undefined;
79
+ maxDepth?: number | undefined;
80
+ kinds?: string[] | undefined;
81
+ unidirectional?: boolean | undefined;
82
+ mergeRelations?: boolean | undefined;
83
+ relationPairs?: [string, string][] | undefined;
84
+ selectedRelations?: string[] | undefined;
85
+ selectedKinds?: string[] | undefined;
86
+ showFilters?: boolean | undefined;
87
+ } & {
88
+ path?: string | undefined;
89
+ }, _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<React__default.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<string, "core.routing.path", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<_backstage_frontend_plugin_api.RouteRef<_backstage_frontend_plugin_api.AnyRouteRefParams>, "core.routing.ref", {
90
+ optional: true;
91
+ }>, {
92
+ [x: string]: _backstage_frontend_plugin_api.ExtensionInput<_backstage_frontend_plugin_api.AnyExtensionDataRef, {
93
+ optional: boolean;
94
+ singleton: boolean;
95
+ }>;
96
+ }, {
97
+ kind: "page";
98
+ namespace: undefined;
99
+ name: undefined;
100
+ }>;
101
+ }>;
12
102
 
13
103
  export { _default as default };
package/dist/alpha.esm.js CHANGED
@@ -1,67 +1,66 @@
1
1
  import React from 'react';
2
- import { createSchemaFromZod, createPageExtension, createPlugin } from '@backstage/frontend-plugin-api';
2
+ import { PageBlueprint, createFrontendPlugin } from '@backstage/frontend-plugin-api';
3
3
  import { compatWrapper, convertLegacyRouteRef } from '@backstage/core-compat-api';
4
- import { createEntityCardExtension } from '@backstage/plugin-catalog-react/alpha';
4
+ import { EntityCardBlueprint } from '@backstage/plugin-catalog-react/alpha';
5
5
  import { catalogGraphRouteRef, catalogEntityRouteRef } from './routes.esm.js';
6
- import './components/EntityRelationsGraph/EntityRelationsGraph.esm.js';
7
- import '@backstage/catalog-model';
8
- import { Direction } from './components/EntityRelationsGraph/types.esm.js';
6
+ import { Direction } from '@backstage/plugin-catalog-graph';
9
7
 
10
- function getEntityGraphRelationsConfigSchema(z) {
11
- return z.object({
12
- kinds: z.array(z.string()).optional(),
13
- relations: z.array(z.string()).optional(),
14
- maxDepth: z.number().optional(),
15
- unidirectional: z.boolean().optional(),
16
- mergeRelations: z.boolean().optional(),
17
- direction: z.nativeEnum(Direction).optional(),
18
- relationPairs: z.array(z.tuple([z.string(), z.string()])).optional(),
19
- zoom: z.enum(["enabled", "disabled", "enable-on-click"]).optional(),
20
- curve: z.enum(["curveStepBefore", "curveMonotoneX"]).optional()
21
- });
22
- }
23
- const CatalogGraphEntityCard = createEntityCardExtension({
8
+ const CatalogGraphEntityCard = EntityCardBlueprint.makeWithOverrides({
24
9
  name: "relations",
25
- configSchema: createSchemaFromZod(
26
- (z) => z.object({
27
- // Filter is a config required to all entity cards
28
- filter: z.string().optional(),
29
- title: z.string().optional(),
30
- height: z.number().optional()
10
+ config: {
11
+ schema: {
12
+ kinds: (z) => z.array(z.string()).optional(),
13
+ relations: (z) => z.array(z.string()).optional(),
14
+ maxDepth: (z) => z.number().optional(),
15
+ unidirectional: (z) => z.boolean().optional(),
16
+ mergeRelations: (z) => z.boolean().optional(),
17
+ direction: (z) => z.nativeEnum(Direction).optional(),
18
+ relationPairs: (z) => z.array(z.tuple([z.string(), z.string()])).optional(),
19
+ zoom: (z) => z.enum(["enabled", "disabled", "enable-on-click"]).optional(),
20
+ curve: (z) => z.enum(["curveStepBefore", "curveMonotoneX"]).optional(),
31
21
  // Skipping a "variant" config for now, defaulting to "gridItem" in the component
32
22
  // For more details, see this comment: https://github.com/backstage/backstage/pull/22619#discussion_r1477333252
33
- }).merge(getEntityGraphRelationsConfigSchema(z))
34
- ),
35
- loader: async ({ config: { filter, ...props } }) => import('./components/CatalogGraphCard/index.esm.js').then(
36
- (m) => compatWrapper(/* @__PURE__ */ React.createElement(m.CatalogGraphCard, { ...props }))
37
- )
23
+ title: (z) => z.string().optional(),
24
+ height: (z) => z.number().optional()
25
+ }
26
+ },
27
+ factory(originalFactory, { config }) {
28
+ return originalFactory({
29
+ loader: async () => import('./components/CatalogGraphCard/index.esm.js').then(
30
+ (m) => compatWrapper(/* @__PURE__ */ React.createElement(m.CatalogGraphCard, { ...config }))
31
+ )
32
+ });
33
+ }
38
34
  });
39
- const CatalogGraphPage = createPageExtension({
40
- defaultPath: "/catalog-graph",
41
- routeRef: convertLegacyRouteRef(catalogGraphRouteRef),
42
- configSchema: createSchemaFromZod(
43
- (z) => z.object({
44
- // Path is a default config required to all pages
45
- path: z.string().default("/catalog-graph"),
46
- // Mapping intialState prop to config, these are the initial filter values, as opposed to configuration of the available filter values
47
- initialState: z.object({
48
- selectedKinds: z.array(z.string()).optional(),
49
- selectedRelations: z.array(z.string()).optional(),
50
- rootEntityRefs: z.array(z.string()).optional(),
51
- maxDepth: z.number().optional(),
52
- unidirectional: z.boolean().optional(),
53
- mergeRelations: z.boolean().optional(),
54
- direction: z.nativeEnum(Direction).optional(),
55
- showFilters: z.boolean().optional(),
56
- curve: z.enum(["curveStepBefore", "curveMonotoneX"]).optional()
57
- }).merge(getEntityGraphRelationsConfigSchema(z)).optional()
58
- })
59
- ),
60
- loader: ({ config: { path, ...props } }) => import('./components/CatalogGraphPage/index.esm.js').then(
61
- (m) => compatWrapper(/* @__PURE__ */ React.createElement(m.CatalogGraphPage, { ...props }))
62
- )
35
+ const CatalogGraphPage = PageBlueprint.makeWithOverrides({
36
+ config: {
37
+ schema: {
38
+ selectedKinds: (z) => z.array(z.string()).optional(),
39
+ selectedRelations: (z) => z.array(z.string()).optional(),
40
+ rootEntityRefs: (z) => z.array(z.string()).optional(),
41
+ maxDepth: (z) => z.number().optional(),
42
+ unidirectional: (z) => z.boolean().optional(),
43
+ mergeRelations: (z) => z.boolean().optional(),
44
+ direction: (z) => z.nativeEnum(Direction).optional(),
45
+ showFilters: (z) => z.boolean().optional(),
46
+ curve: (z) => z.enum(["curveStepBefore", "curveMonotoneX"]).optional(),
47
+ kinds: (z) => z.array(z.string()).optional(),
48
+ relations: (z) => z.array(z.string()).optional(),
49
+ relationPairs: (z) => z.array(z.tuple([z.string(), z.string()])).optional(),
50
+ zoom: (z) => z.enum(["enabled", "disabled", "enable-on-click"]).optional()
51
+ }
52
+ },
53
+ factory(originalFactory, { config }) {
54
+ return originalFactory({
55
+ defaultPath: "/catalog-graph",
56
+ routeRef: convertLegacyRouteRef(catalogGraphRouteRef),
57
+ loader: () => import('./components/CatalogGraphPage/index.esm.js').then(
58
+ (m) => compatWrapper(/* @__PURE__ */ React.createElement(m.CatalogGraphPage, { ...config }))
59
+ )
60
+ });
61
+ }
63
62
  });
64
- var alpha = createPlugin({
63
+ var alpha = createFrontendPlugin({
65
64
  id: "catalog-graph",
66
65
  routes: {
67
66
  catalogGraph: convertLegacyRouteRef(catalogGraphRouteRef)
@@ -1 +1 @@
1
- {"version":3,"file":"alpha.esm.js","sources":["../src/alpha.tsx"],"sourcesContent":["/*\n * Copyright 2024 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 React from 'react';\nimport {\n createPageExtension,\n createPlugin,\n createSchemaFromZod,\n} from '@backstage/frontend-plugin-api';\nimport {\n compatWrapper,\n convertLegacyRouteRef,\n} from '@backstage/core-compat-api';\nimport { createEntityCardExtension } from '@backstage/plugin-catalog-react/alpha';\nimport { catalogGraphRouteRef, catalogEntityRouteRef } from './routes';\nimport { Direction } from './components';\n\nfunction getEntityGraphRelationsConfigSchema(\n z: Parameters<Parameters<typeof createSchemaFromZod>[0]>[0],\n) {\n // Mapping EntityRelationsGraphProps to config\n // The classname and render functions are configurable only via extension overrides\n return z.object({\n kinds: z.array(z.string()).optional(),\n relations: z.array(z.string()).optional(),\n maxDepth: z.number().optional(),\n unidirectional: z.boolean().optional(),\n mergeRelations: z.boolean().optional(),\n direction: z.nativeEnum(Direction).optional(),\n relationPairs: z.array(z.tuple([z.string(), z.string()])).optional(),\n zoom: z.enum(['enabled', 'disabled', 'enable-on-click']).optional(),\n curve: z.enum(['curveStepBefore', 'curveMonotoneX']).optional(),\n });\n}\n\nconst CatalogGraphEntityCard = createEntityCardExtension({\n name: 'relations',\n configSchema: createSchemaFromZod(z =>\n z\n .object({\n // Filter is a config required to all entity cards\n filter: z.string().optional(),\n title: z.string().optional(),\n height: z.number().optional(),\n // Skipping a \"variant\" config for now, defaulting to \"gridItem\" in the component\n // For more details, see this comment: https://github.com/backstage/backstage/pull/22619#discussion_r1477333252\n })\n .merge(getEntityGraphRelationsConfigSchema(z)),\n ),\n loader: async ({ config: { filter, ...props } }) =>\n import('./components/CatalogGraphCard').then(m =>\n compatWrapper(<m.CatalogGraphCard {...props} />),\n ),\n});\n\nconst CatalogGraphPage = createPageExtension({\n defaultPath: '/catalog-graph',\n routeRef: convertLegacyRouteRef(catalogGraphRouteRef),\n configSchema: createSchemaFromZod(z =>\n z.object({\n // Path is a default config required to all pages\n path: z.string().default('/catalog-graph'),\n // Mapping intialState prop to config, these are the initial filter values, as opposed to configuration of the available filter values\n initialState: z\n .object({\n selectedKinds: z.array(z.string()).optional(),\n selectedRelations: z.array(z.string()).optional(),\n rootEntityRefs: z.array(z.string()).optional(),\n maxDepth: z.number().optional(),\n unidirectional: z.boolean().optional(),\n mergeRelations: z.boolean().optional(),\n direction: z.nativeEnum(Direction).optional(),\n showFilters: z.boolean().optional(),\n curve: z.enum(['curveStepBefore', 'curveMonotoneX']).optional(),\n })\n .merge(getEntityGraphRelationsConfigSchema(z))\n .optional(),\n }),\n ),\n loader: ({ config: { path, ...props } }) =>\n import('./components/CatalogGraphPage').then(m =>\n compatWrapper(<m.CatalogGraphPage {...props} />),\n ),\n});\n\nexport default createPlugin({\n id: 'catalog-graph',\n routes: {\n catalogGraph: convertLegacyRouteRef(catalogGraphRouteRef),\n },\n externalRoutes: {\n catalogEntity: convertLegacyRouteRef(catalogEntityRouteRef),\n },\n extensions: [CatalogGraphPage, CatalogGraphEntityCard],\n});\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"alpha.esm.js","sources":["../src/alpha.tsx"],"sourcesContent":["/*\n * Copyright 2024 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 React from 'react';\nimport {\n createFrontendPlugin,\n PageBlueprint,\n} from '@backstage/frontend-plugin-api';\nimport {\n compatWrapper,\n convertLegacyRouteRef,\n} from '@backstage/core-compat-api';\nimport { EntityCardBlueprint } from '@backstage/plugin-catalog-react/alpha';\nimport { catalogGraphRouteRef, catalogEntityRouteRef } from './routes';\nimport { Direction } from '@backstage/plugin-catalog-graph';\n\nconst CatalogGraphEntityCard = EntityCardBlueprint.makeWithOverrides({\n name: 'relations',\n config: {\n schema: {\n kinds: z => z.array(z.string()).optional(),\n relations: z => z.array(z.string()).optional(),\n maxDepth: z => z.number().optional(),\n unidirectional: z => z.boolean().optional(),\n mergeRelations: z => z.boolean().optional(),\n direction: z => z.nativeEnum(Direction).optional(),\n relationPairs: z => z.array(z.tuple([z.string(), z.string()])).optional(),\n zoom: z => z.enum(['enabled', 'disabled', 'enable-on-click']).optional(),\n curve: z => z.enum(['curveStepBefore', 'curveMonotoneX']).optional(),\n // Skipping a \"variant\" config for now, defaulting to \"gridItem\" in the component\n // For more details, see this comment: https://github.com/backstage/backstage/pull/22619#discussion_r1477333252\n title: z => z.string().optional(),\n height: z => z.number().optional(),\n },\n },\n factory(originalFactory, { config }) {\n return originalFactory({\n loader: async () =>\n import('./components/CatalogGraphCard').then(m =>\n compatWrapper(<m.CatalogGraphCard {...config} />),\n ),\n });\n },\n});\n\nconst CatalogGraphPage = PageBlueprint.makeWithOverrides({\n config: {\n schema: {\n selectedKinds: z => z.array(z.string()).optional(),\n selectedRelations: z => z.array(z.string()).optional(),\n rootEntityRefs: z => z.array(z.string()).optional(),\n maxDepth: z => z.number().optional(),\n unidirectional: z => z.boolean().optional(),\n mergeRelations: z => z.boolean().optional(),\n direction: z => z.nativeEnum(Direction).optional(),\n showFilters: z => z.boolean().optional(),\n curve: z => z.enum(['curveStepBefore', 'curveMonotoneX']).optional(),\n kinds: z => z.array(z.string()).optional(),\n relations: z => z.array(z.string()).optional(),\n relationPairs: z => z.array(z.tuple([z.string(), z.string()])).optional(),\n zoom: z => z.enum(['enabled', 'disabled', 'enable-on-click']).optional(),\n },\n },\n factory(originalFactory, { config }) {\n return originalFactory({\n defaultPath: '/catalog-graph',\n routeRef: convertLegacyRouteRef(catalogGraphRouteRef),\n loader: () =>\n import('./components/CatalogGraphPage').then(m =>\n compatWrapper(<m.CatalogGraphPage {...config} />),\n ),\n });\n },\n});\n\nexport default createFrontendPlugin({\n id: 'catalog-graph',\n routes: {\n catalogGraph: convertLegacyRouteRef(catalogGraphRouteRef),\n },\n externalRoutes: {\n catalogEntity: convertLegacyRouteRef(catalogEntityRouteRef),\n },\n extensions: [CatalogGraphPage, CatalogGraphEntityCard],\n});\n"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -2,8 +2,8 @@
2
2
  import { Entity, CompoundEntityRef } from '@backstage/catalog-model';
3
3
  import * as _backstage_core_components from '@backstage/core-components';
4
4
  import { DependencyGraphTypes } from '@backstage/core-components';
5
- import * as react from 'react';
6
- import react__default, { MouseEventHandler, MouseEvent } from 'react';
5
+ import * as React from 'react';
6
+ import React__default, { MouseEventHandler, MouseEvent } from 'react';
7
7
  import { JsonObject } from '@backstage/types';
8
8
  import * as _backstage_core_plugin_api from '@backstage/core-plugin-api';
9
9
 
@@ -149,7 +149,7 @@ type EntityRelationsGraphProps = {
149
149
  *
150
150
  * @public
151
151
  */
152
- declare const EntityRelationsGraph: (props: EntityRelationsGraphProps) => react__default.JSX.Element;
152
+ declare const EntityRelationsGraph: (props: EntityRelationsGraphProps) => React__default.JSX.Element;
153
153
 
154
154
  /**
155
155
  * A card that displays the directly related entities to the current entity.
@@ -160,7 +160,7 @@ declare const EntityCatalogGraphCard: (props: Partial<EntityRelationsGraphProps>
160
160
  variant?: _backstage_core_components.InfoCardVariants | undefined;
161
161
  height?: number | undefined;
162
162
  title?: string | undefined;
163
- }) => react.JSX.Element;
163
+ }) => React.JSX.Element;
164
164
  /**
165
165
  * A standalone page that can be added to your application providing a viewer
166
166
  * for your entities and their relations.
@@ -179,7 +179,7 @@ declare const CatalogGraphPage: (props: {
179
179
  showFilters?: boolean | undefined;
180
180
  curve?: "curveStepBefore" | "curveMonotoneX" | undefined;
181
181
  } | undefined;
182
- } & Partial<EntityRelationsGraphProps>) => react.JSX.Element;
182
+ } & Partial<EntityRelationsGraphProps>) => React.JSX.Element;
183
183
 
184
184
  /**
185
185
  * Catalog Graph Plugin instance.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backstage/plugin-catalog-graph",
3
- "version": "0.4.8-next.4",
3
+ "version": "0.4.8",
4
4
  "backstage": {
5
5
  "role": "frontend-plugin",
6
6
  "pluginId": "catalog-graph",
@@ -48,13 +48,13 @@
48
48
  "test": "backstage-cli package test"
49
49
  },
50
50
  "dependencies": {
51
- "@backstage/catalog-client": "^1.6.6-next.0",
52
- "@backstage/catalog-model": "^1.6.0-next.0",
53
- "@backstage/core-compat-api": "^0.2.8-next.3",
54
- "@backstage/core-components": "^0.14.10-next.0",
51
+ "@backstage/catalog-client": "^1.6.6",
52
+ "@backstage/catalog-model": "^1.6.0",
53
+ "@backstage/core-compat-api": "^0.2.8",
54
+ "@backstage/core-components": "^0.14.10",
55
55
  "@backstage/core-plugin-api": "^1.9.3",
56
- "@backstage/frontend-plugin-api": "^0.7.0-next.3",
57
- "@backstage/plugin-catalog-react": "^1.12.3-next.3",
56
+ "@backstage/frontend-plugin-api": "^0.7.0",
57
+ "@backstage/plugin-catalog-react": "^1.12.3",
58
58
  "@backstage/types": "^1.1.1",
59
59
  "@material-ui/core": "^4.12.2",
60
60
  "@material-ui/icons": "^4.9.1",
@@ -67,11 +67,11 @@
67
67
  "react-use": "^17.2.4"
68
68
  },
69
69
  "devDependencies": {
70
- "@backstage/cli": "^0.27.0-next.4",
71
- "@backstage/core-app-api": "^1.14.2-next.0",
72
- "@backstage/dev-utils": "^1.0.37-next.3",
73
- "@backstage/plugin-catalog": "^1.22.0-next.3",
74
- "@backstage/test-utils": "^1.5.10-next.2",
70
+ "@backstage/cli": "^0.27.0",
71
+ "@backstage/core-app-api": "^1.14.2",
72
+ "@backstage/dev-utils": "^1.0.37",
73
+ "@backstage/plugin-catalog": "^1.22.0",
74
+ "@backstage/test-utils": "^1.5.10",
75
75
  "@testing-library/dom": "^10.0.0",
76
76
  "@testing-library/jest-dom": "^6.0.0",
77
77
  "@testing-library/react": "^15.0.0",