@backstage/plugin-catalog-react 2.1.2-next.2 → 2.1.2

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,33 @@
1
1
  # @backstage/plugin-catalog-react
2
2
 
3
+ ## 2.1.2
4
+
5
+ ### Patch Changes
6
+
7
+ - 540a031: Migrated alpha entity blueprints to use the new `configSchema` option with zod v4 schema values.
8
+ - 482ceed: Migrated from `assertError` to `toError` for error handling.
9
+ - 51aacae: Fixed a UI flicker in the catalog entity list where changing a filter would briefly flash stale data before showing the new results.
10
+ - eba2f61: Fixed `EntityInfoCard` header overflowing on narrow screens.
11
+ - 7308885: Updated `catalogApiMock` to include the new `updateLocation` method stub, keeping it in sync with the `CatalogApi` interface.
12
+ - 5f9a531: Deprecated `humanizeEntityRef` and `humanizeEntity` in favor of the Catalog Presentation API. Use `useEntityPresentation`, `EntityDisplayName`, or `entityPresentationApiRef` instead.
13
+ - 0416216: Fixed entity relation cards (e.g., "Has components") only showing one entity at a time by using `paginationOptions: { type: 'none' }` instead of deriving page size from data length.
14
+ - fa232da: Migrated `InspectEntityDialog` from Material UI to Backstage UI components. Added new translation keys: `inspectEntityDialog.overviewPage.copyAriaLabel`, `inspectEntityDialog.overviewPage.copiedStatus`, `inspectEntityDialog.overviewPage.helpLinkAriaLabel`, and `inspectEntityDialog.colocatedPage.entityListAriaLabel`.
15
+ - Updated dependencies
16
+ - @backstage/ui@0.14.0
17
+ - @backstage/errors@1.3.0
18
+ - @backstage/catalog-model@1.8.0
19
+ - @backstage/frontend-plugin-api@0.16.0
20
+ - @backstage/core-components@0.18.9
21
+ - @backstage/filter-predicates@0.1.2
22
+ - @backstage/core-compat-api@0.5.10
23
+ - @backstage/catalog-client@1.15.0
24
+ - @backstage/plugin-permission-react@0.5.0
25
+ - @backstage/frontend-test-utils@0.5.2
26
+ - @backstage/core-plugin-api@1.12.5
27
+ - @backstage/integration-react@1.2.17
28
+ - @backstage/plugin-catalog-common@1.1.9
29
+ - @backstage/plugin-permission-common@0.9.8
30
+
3
31
  ## 2.1.2-next.2
4
32
 
5
33
  ### Patch Changes
@@ -1,7 +1,8 @@
1
1
  import { createExtensionBlueprint, coreExtensionData, ExtensionBoundary } from '@backstage/frontend-plugin-api';
2
2
  import { entityCardTypeDataRef, entityFilterExpressionDataRef, entityFilterFunctionDataRef, entityCardTypes } from './extensionData.esm.js';
3
- import { createZodV3FilterPredicateSchema } from '@backstage/filter-predicates';
3
+ import { createZodV4FilterPredicateSchema } from '@backstage/filter-predicates';
4
4
  import { resolveEntityFilterData } from './resolveEntityFilterData.esm.js';
5
+ import { z } from 'zod/v4';
5
6
 
6
7
  const EntityCardBlueprint = createExtensionBlueprint({
7
8
  kind: "entity-card",
@@ -17,11 +18,9 @@ const EntityCardBlueprint = createExtensionBlueprint({
17
18
  filterExpression: entityFilterExpressionDataRef,
18
19
  type: entityCardTypeDataRef
19
20
  },
20
- config: {
21
- schema: {
22
- filter: (z) => z.union([z.string(), createZodV3FilterPredicateSchema(z)]).optional(),
23
- type: (z) => z.enum(entityCardTypes).optional()
24
- }
21
+ configSchema: {
22
+ filter: z.union([z.string(), createZodV4FilterPredicateSchema()]).optional(),
23
+ type: z.enum(entityCardTypes).optional()
25
24
  },
26
25
  *factory({
27
26
  loader,
@@ -1 +1 @@
1
- {"version":3,"file":"EntityCardBlueprint.esm.js","sources":["../../../src/alpha/blueprints/EntityCardBlueprint.ts"],"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 {\n ExtensionBoundary,\n coreExtensionData,\n createExtensionBlueprint,\n} from '@backstage/frontend-plugin-api';\nimport {\n entityFilterFunctionDataRef,\n entityFilterExpressionDataRef,\n entityCardTypeDataRef,\n entityCardTypes,\n EntityCardType,\n} from './extensionData';\nimport {\n FilterPredicate,\n createZodV3FilterPredicateSchema,\n} from '@backstage/filter-predicates';\nimport { resolveEntityFilterData } from './resolveEntityFilterData';\nimport { Entity } from '@backstage/catalog-model';\n\n/**\n * @alpha\n * A blueprint for creating cards for the entity pages in the catalog.\n */\nexport const EntityCardBlueprint = createExtensionBlueprint({\n kind: 'entity-card',\n attachTo: { id: 'entity-content:catalog/overview', input: 'cards' },\n output: [\n coreExtensionData.reactElement,\n entityFilterFunctionDataRef.optional(),\n entityFilterExpressionDataRef.optional(),\n entityCardTypeDataRef.optional(),\n ],\n dataRefs: {\n filterFunction: entityFilterFunctionDataRef,\n filterExpression: entityFilterExpressionDataRef,\n type: entityCardTypeDataRef,\n },\n config: {\n schema: {\n filter: z =>\n z.union([z.string(), createZodV3FilterPredicateSchema(z)]).optional(),\n type: z => z.enum(entityCardTypes).optional(),\n },\n },\n *factory(\n {\n loader,\n filter,\n type,\n }: {\n loader: () => Promise<JSX.Element>;\n filter?: string | FilterPredicate | ((entity: Entity) => boolean);\n type?: EntityCardType;\n },\n { node, config },\n ) {\n yield coreExtensionData.reactElement(ExtensionBoundary.lazy(node, loader));\n\n yield* resolveEntityFilterData(filter, config, node);\n\n const finalType = config.type ?? type;\n if (finalType) {\n yield entityCardTypeDataRef(finalType);\n }\n },\n});\n"],"names":[],"mappings":";;;;;AAuCO,MAAM,sBAAsB,wBAAA,CAAyB;AAAA,EAC1D,IAAA,EAAM,aAAA;AAAA,EACN,QAAA,EAAU,EAAE,EAAA,EAAI,iCAAA,EAAmC,OAAO,OAAA,EAAQ;AAAA,EAClE,MAAA,EAAQ;AAAA,IACN,iBAAA,CAAkB,YAAA;AAAA,IAClB,4BAA4B,QAAA,EAAS;AAAA,IACrC,8BAA8B,QAAA,EAAS;AAAA,IACvC,sBAAsB,QAAA;AAAS,GACjC;AAAA,EACA,QAAA,EAAU;AAAA,IACR,cAAA,EAAgB,2BAAA;AAAA,IAChB,gBAAA,EAAkB,6BAAA;AAAA,IAClB,IAAA,EAAM;AAAA,GACR;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,MAAA,EAAQ;AAAA,MACN,MAAA,EAAQ,CAAA,CAAA,KACN,CAAA,CAAE,KAAA,CAAM,CAAC,CAAA,CAAE,MAAA,EAAO,EAAG,gCAAA,CAAiC,CAAC,CAAC,CAAC,EAAE,QAAA,EAAS;AAAA,MACtE,MAAM,CAAA,CAAA,KAAK,CAAA,CAAE,IAAA,CAAK,eAAe,EAAE,QAAA;AAAS;AAC9C,GACF;AAAA,EACA,CAAC,OAAA,CACC;AAAA,IACE,MAAA;AAAA,IACA,MAAA;AAAA,IACA;AAAA,GACF,EAKA,EAAE,IAAA,EAAM,MAAA,EAAO,EACf;AACA,IAAA,MAAM,kBAAkB,YAAA,CAAa,iBAAA,CAAkB,IAAA,CAAK,IAAA,EAAM,MAAM,CAAC,CAAA;AAEzE,IAAA,OAAO,uBAAA,CAAwB,MAAA,EAAQ,MAAA,EAAQ,IAAI,CAAA;AAEnD,IAAA,MAAM,SAAA,GAAY,OAAO,IAAA,IAAQ,IAAA;AACjC,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,MAAM,sBAAsB,SAAS,CAAA;AAAA,IACvC;AAAA,EACF;AACF,CAAC;;;;"}
1
+ {"version":3,"file":"EntityCardBlueprint.esm.js","sources":["../../../src/alpha/blueprints/EntityCardBlueprint.ts"],"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 {\n ExtensionBoundary,\n coreExtensionData,\n createExtensionBlueprint,\n} from '@backstage/frontend-plugin-api';\nimport {\n entityFilterFunctionDataRef,\n entityFilterExpressionDataRef,\n entityCardTypeDataRef,\n entityCardTypes,\n EntityCardType,\n} from './extensionData';\nimport {\n FilterPredicate,\n createZodV4FilterPredicateSchema,\n} from '@backstage/filter-predicates';\nimport { resolveEntityFilterData } from './resolveEntityFilterData';\nimport { Entity } from '@backstage/catalog-model';\nimport { z } from 'zod/v4';\n\n/**\n * @alpha\n * A blueprint for creating cards for the entity pages in the catalog.\n */\nexport const EntityCardBlueprint = createExtensionBlueprint({\n kind: 'entity-card',\n attachTo: { id: 'entity-content:catalog/overview', input: 'cards' },\n output: [\n coreExtensionData.reactElement,\n entityFilterFunctionDataRef.optional(),\n entityFilterExpressionDataRef.optional(),\n entityCardTypeDataRef.optional(),\n ],\n dataRefs: {\n filterFunction: entityFilterFunctionDataRef,\n filterExpression: entityFilterExpressionDataRef,\n type: entityCardTypeDataRef,\n },\n configSchema: {\n filter: z\n .union([z.string(), createZodV4FilterPredicateSchema()])\n .optional(),\n type: z.enum(entityCardTypes).optional(),\n },\n *factory(\n {\n loader,\n filter,\n type,\n }: {\n loader: () => Promise<JSX.Element>;\n filter?: string | FilterPredicate | ((entity: Entity) => boolean);\n type?: EntityCardType;\n },\n { node, config },\n ) {\n yield coreExtensionData.reactElement(ExtensionBoundary.lazy(node, loader));\n\n yield* resolveEntityFilterData(filter, config, node);\n\n const finalType = config.type ?? type;\n if (finalType) {\n yield entityCardTypeDataRef(finalType);\n }\n },\n});\n"],"names":[],"mappings":";;;;;;AAwCO,MAAM,sBAAsB,wBAAA,CAAyB;AAAA,EAC1D,IAAA,EAAM,aAAA;AAAA,EACN,QAAA,EAAU,EAAE,EAAA,EAAI,iCAAA,EAAmC,OAAO,OAAA,EAAQ;AAAA,EAClE,MAAA,EAAQ;AAAA,IACN,iBAAA,CAAkB,YAAA;AAAA,IAClB,4BAA4B,QAAA,EAAS;AAAA,IACrC,8BAA8B,QAAA,EAAS;AAAA,IACvC,sBAAsB,QAAA;AAAS,GACjC;AAAA,EACA,QAAA,EAAU;AAAA,IACR,cAAA,EAAgB,2BAAA;AAAA,IAChB,gBAAA,EAAkB,6BAAA;AAAA,IAClB,IAAA,EAAM;AAAA,GACR;AAAA,EACA,YAAA,EAAc;AAAA,IACZ,MAAA,EAAQ,CAAA,CACL,KAAA,CAAM,CAAC,CAAA,CAAE,MAAA,EAAO,EAAG,gCAAA,EAAkC,CAAC,CAAA,CACtD,QAAA,EAAS;AAAA,IACZ,IAAA,EAAM,CAAA,CAAE,IAAA,CAAK,eAAe,EAAE,QAAA;AAAS,GACzC;AAAA,EACA,CAAC,OAAA,CACC;AAAA,IACE,MAAA;AAAA,IACA,MAAA;AAAA,IACA;AAAA,GACF,EAKA,EAAE,IAAA,EAAM,MAAA,EAAO,EACf;AACA,IAAA,MAAM,kBAAkB,YAAA,CAAa,iBAAA,CAAkB,IAAA,CAAK,IAAA,EAAM,MAAM,CAAC,CAAA;AAEzE,IAAA,OAAO,uBAAA,CAAwB,MAAA,EAAQ,MAAA,EAAQ,IAAI,CAAA;AAEnD,IAAA,MAAM,SAAA,GAAY,OAAO,IAAA,IAAQ,IAAA;AACjC,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,MAAM,sBAAsB,SAAS,CAAA;AAAA,IACvC;AAAA,EACF;AACF,CAAC;;;;"}
@@ -1,7 +1,8 @@
1
1
  import { createExtensionBlueprint, coreExtensionData, ExtensionBoundary } from '@backstage/frontend-plugin-api';
2
2
  import { entityContentIconDataRef, entityContentGroupDataRef, entityFilterExpressionDataRef, entityFilterFunctionDataRef, entityContentTitleDataRef } from './extensionData.esm.js';
3
- import { createZodV3FilterPredicateSchema } from '@backstage/filter-predicates';
3
+ import { createZodV4FilterPredicateSchema } from '@backstage/filter-predicates';
4
4
  import { resolveEntityFilterData } from './resolveEntityFilterData.esm.js';
5
+ import { z } from 'zod/v4';
5
6
 
6
7
  const EntityContentBlueprint = createExtensionBlueprint({
7
8
  kind: "entity-content",
@@ -23,14 +24,12 @@ const EntityContentBlueprint = createExtensionBlueprint({
23
24
  group: entityContentGroupDataRef,
24
25
  icon: entityContentIconDataRef
25
26
  },
26
- config: {
27
- schema: {
28
- path: (z) => z.string().optional(),
29
- title: (z) => z.string().optional(),
30
- filter: (z) => z.union([z.string(), createZodV3FilterPredicateSchema(z)]).optional(),
31
- group: (z) => z.literal(false).or(z.string()).optional(),
32
- icon: (z) => z.string().optional()
33
- }
27
+ configSchema: {
28
+ path: z.string().optional(),
29
+ title: z.string().optional(),
30
+ filter: z.union([z.string(), createZodV4FilterPredicateSchema()]).optional(),
31
+ group: z.literal(false).or(z.string()).optional(),
32
+ icon: z.string().optional()
34
33
  },
35
34
  *factory(params, { node, config }) {
36
35
  const path = config.path ?? params.path ?? params.defaultPath;
@@ -1 +1 @@
1
- {"version":3,"file":"EntityContentBlueprint.esm.js","sources":["../../../src/alpha/blueprints/EntityContentBlueprint.ts"],"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 {\n coreExtensionData,\n createExtensionBlueprint,\n ExtensionBoundary,\n RouteRef,\n} from '@backstage/frontend-plugin-api';\nimport {\n entityContentTitleDataRef,\n entityFilterFunctionDataRef,\n entityFilterExpressionDataRef,\n entityContentGroupDataRef,\n defaultEntityContentGroups,\n entityContentIconDataRef,\n} from './extensionData';\nimport {\n FilterPredicate,\n createZodV3FilterPredicateSchema,\n} from '@backstage/filter-predicates';\nimport { resolveEntityFilterData } from './resolveEntityFilterData';\nimport { Entity } from '@backstage/catalog-model';\nimport { ReactElement } from 'react';\n\n/**\n * @alpha\n * Creates an EntityContent extension.\n */\nexport const EntityContentBlueprint = createExtensionBlueprint({\n kind: 'entity-content',\n attachTo: { id: 'page:catalog/entity', input: 'contents' },\n output: [\n coreExtensionData.reactElement,\n coreExtensionData.routePath,\n entityContentTitleDataRef,\n coreExtensionData.routeRef.optional(),\n entityFilterFunctionDataRef.optional(),\n entityFilterExpressionDataRef.optional(),\n entityContentGroupDataRef.optional(),\n entityContentIconDataRef.optional(),\n ],\n dataRefs: {\n title: entityContentTitleDataRef,\n filterFunction: entityFilterFunctionDataRef,\n filterExpression: entityFilterExpressionDataRef,\n group: entityContentGroupDataRef,\n icon: entityContentIconDataRef,\n },\n config: {\n schema: {\n path: z => z.string().optional(),\n title: z => z.string().optional(),\n filter: z =>\n z.union([z.string(), createZodV3FilterPredicateSchema(z)]).optional(),\n group: z => z.literal(false).or(z.string()).optional(),\n icon: z => z.string().optional(),\n },\n },\n *factory(\n params: {\n /**\n * @deprecated Use the `path` param instead.\n */\n defaultPath?: [Error: `Use the 'path' param instead`];\n path: string;\n /**\n * @deprecated Use the `path` param instead.\n */\n defaultTitle?: [Error: `Use the 'title' param instead`];\n title: string;\n /**\n * @deprecated Use the `path` param instead.\n */\n defaultGroup?: [Error: `Use the 'group' param instead`];\n group?: keyof typeof defaultEntityContentGroups | (string & {});\n icon?: string | ReactElement;\n loader: () => Promise<JSX.Element>;\n routeRef?: RouteRef;\n filter?: string | FilterPredicate | ((entity: Entity) => boolean);\n },\n { node, config },\n ) {\n // TODO(blam): Remove support for all the `default*` props in the future, this breaks backwards compatibility without it\n // As this is marked as BREAKING ALPHA, it doesn't affect the public API so it falls in range and gets picked\n // up by packages that depend on `catalog-react`.\n const path = config.path ?? params.path ?? params.defaultPath;\n const title = config.title ?? params.title ?? params.defaultTitle;\n const icon = config.icon ?? params.icon;\n const group = config.group ?? params.group ?? params.defaultGroup;\n\n yield coreExtensionData.reactElement(\n ExtensionBoundary.lazy(node, params.loader),\n );\n\n yield coreExtensionData.routePath(path);\n\n yield entityContentTitleDataRef(title);\n\n if (params.routeRef) {\n yield coreExtensionData.routeRef(params.routeRef);\n }\n\n yield* resolveEntityFilterData(params.filter, config, node);\n\n if (group && typeof group === 'string') {\n yield entityContentGroupDataRef(group);\n }\n if (icon) {\n yield entityContentIconDataRef(icon);\n }\n },\n});\n"],"names":[],"mappings":";;;;;AA0CO,MAAM,yBAAyB,wBAAA,CAAyB;AAAA,EAC7D,IAAA,EAAM,gBAAA;AAAA,EACN,QAAA,EAAU,EAAE,EAAA,EAAI,qBAAA,EAAuB,OAAO,UAAA,EAAW;AAAA,EACzD,MAAA,EAAQ;AAAA,IACN,iBAAA,CAAkB,YAAA;AAAA,IAClB,iBAAA,CAAkB,SAAA;AAAA,IAClB,yBAAA;AAAA,IACA,iBAAA,CAAkB,SAAS,QAAA,EAAS;AAAA,IACpC,4BAA4B,QAAA,EAAS;AAAA,IACrC,8BAA8B,QAAA,EAAS;AAAA,IACvC,0BAA0B,QAAA,EAAS;AAAA,IACnC,yBAAyB,QAAA;AAAS,GACpC;AAAA,EACA,QAAA,EAAU;AAAA,IACR,KAAA,EAAO,yBAAA;AAAA,IACP,cAAA,EAAgB,2BAAA;AAAA,IAChB,gBAAA,EAAkB,6BAAA;AAAA,IAClB,KAAA,EAAO,yBAAA;AAAA,IACP,IAAA,EAAM;AAAA,GACR;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,MAAA,EAAQ;AAAA,MACN,IAAA,EAAM,CAAA,CAAA,KAAK,CAAA,CAAE,MAAA,GAAS,QAAA,EAAS;AAAA,MAC/B,KAAA,EAAO,CAAA,CAAA,KAAK,CAAA,CAAE,MAAA,GAAS,QAAA,EAAS;AAAA,MAChC,MAAA,EAAQ,CAAA,CAAA,KACN,CAAA,CAAE,KAAA,CAAM,CAAC,CAAA,CAAE,MAAA,EAAO,EAAG,gCAAA,CAAiC,CAAC,CAAC,CAAC,EAAE,QAAA,EAAS;AAAA,MACtE,KAAA,EAAO,CAAA,CAAA,KAAK,CAAA,CAAE,OAAA,CAAQ,KAAK,CAAA,CAAE,EAAA,CAAG,CAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA,EAAS;AAAA,MACrD,IAAA,EAAM,CAAA,CAAA,KAAK,CAAA,CAAE,MAAA,GAAS,QAAA;AAAS;AACjC,GACF;AAAA,EACA,CAAC,OAAA,CACC,MAAA,EAqBA,EAAE,IAAA,EAAM,QAAO,EACf;AAIA,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,IAAA,IAAQ,MAAA,CAAO,QAAQ,MAAA,CAAO,WAAA;AAClD,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,IAAS,MAAA,CAAO,SAAS,MAAA,CAAO,YAAA;AACrD,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,IAAA,IAAQ,MAAA,CAAO,IAAA;AACnC,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,IAAS,MAAA,CAAO,SAAS,MAAA,CAAO,YAAA;AAErD,IAAA,MAAM,iBAAA,CAAkB,YAAA;AAAA,MACtB,iBAAA,CAAkB,IAAA,CAAK,IAAA,EAAM,MAAA,CAAO,MAAM;AAAA,KAC5C;AAEA,IAAA,MAAM,iBAAA,CAAkB,UAAU,IAAI,CAAA;AAEtC,IAAA,MAAM,0BAA0B,KAAK,CAAA;AAErC,IAAA,IAAI,OAAO,QAAA,EAAU;AACnB,MAAA,MAAM,iBAAA,CAAkB,QAAA,CAAS,MAAA,CAAO,QAAQ,CAAA;AAAA,IAClD;AAEA,IAAA,OAAO,uBAAA,CAAwB,MAAA,CAAO,MAAA,EAAQ,MAAA,EAAQ,IAAI,CAAA;AAE1D,IAAA,IAAI,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,EAAU;AACtC,MAAA,MAAM,0BAA0B,KAAK,CAAA;AAAA,IACvC;AACA,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,MAAM,yBAAyB,IAAI,CAAA;AAAA,IACrC;AAAA,EACF;AACF,CAAC;;;;"}
1
+ {"version":3,"file":"EntityContentBlueprint.esm.js","sources":["../../../src/alpha/blueprints/EntityContentBlueprint.ts"],"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 {\n coreExtensionData,\n createExtensionBlueprint,\n ExtensionBoundary,\n RouteRef,\n} from '@backstage/frontend-plugin-api';\nimport {\n entityContentTitleDataRef,\n entityFilterFunctionDataRef,\n entityFilterExpressionDataRef,\n entityContentGroupDataRef,\n defaultEntityContentGroups,\n entityContentIconDataRef,\n} from './extensionData';\nimport {\n FilterPredicate,\n createZodV4FilterPredicateSchema,\n} from '@backstage/filter-predicates';\nimport { resolveEntityFilterData } from './resolveEntityFilterData';\nimport { Entity } from '@backstage/catalog-model';\nimport { ReactElement } from 'react';\nimport { z } from 'zod/v4';\n\n/**\n * @alpha\n * Creates an EntityContent extension.\n */\nexport const EntityContentBlueprint = createExtensionBlueprint({\n kind: 'entity-content',\n attachTo: { id: 'page:catalog/entity', input: 'contents' },\n output: [\n coreExtensionData.reactElement,\n coreExtensionData.routePath,\n entityContentTitleDataRef,\n coreExtensionData.routeRef.optional(),\n entityFilterFunctionDataRef.optional(),\n entityFilterExpressionDataRef.optional(),\n entityContentGroupDataRef.optional(),\n entityContentIconDataRef.optional(),\n ],\n dataRefs: {\n title: entityContentTitleDataRef,\n filterFunction: entityFilterFunctionDataRef,\n filterExpression: entityFilterExpressionDataRef,\n group: entityContentGroupDataRef,\n icon: entityContentIconDataRef,\n },\n configSchema: {\n path: z.string().optional(),\n title: z.string().optional(),\n filter: z\n .union([z.string(), createZodV4FilterPredicateSchema()])\n .optional(),\n group: z.literal(false).or(z.string()).optional(),\n icon: z.string().optional(),\n },\n *factory(\n params: {\n /**\n * @deprecated Use the `path` param instead.\n */\n defaultPath?: [Error: `Use the 'path' param instead`];\n path: string;\n /**\n * @deprecated Use the `path` param instead.\n */\n defaultTitle?: [Error: `Use the 'title' param instead`];\n title: string;\n /**\n * @deprecated Use the `path` param instead.\n */\n defaultGroup?: [Error: `Use the 'group' param instead`];\n group?: keyof typeof defaultEntityContentGroups | (string & {});\n icon?: string | ReactElement;\n loader: () => Promise<JSX.Element>;\n routeRef?: RouteRef;\n filter?: string | FilterPredicate | ((entity: Entity) => boolean);\n },\n { node, config },\n ) {\n // TODO(blam): Remove support for all the `default*` props in the future, this breaks backwards compatibility without it\n // As this is marked as BREAKING ALPHA, it doesn't affect the public API so it falls in range and gets picked\n // up by packages that depend on `catalog-react`.\n const path = config.path ?? params.path ?? params.defaultPath;\n const title = config.title ?? params.title ?? params.defaultTitle;\n const icon = config.icon ?? params.icon;\n const group = config.group ?? params.group ?? params.defaultGroup;\n\n yield coreExtensionData.reactElement(\n ExtensionBoundary.lazy(node, params.loader),\n );\n\n yield coreExtensionData.routePath(path);\n\n yield entityContentTitleDataRef(title);\n\n if (params.routeRef) {\n yield coreExtensionData.routeRef(params.routeRef);\n }\n\n yield* resolveEntityFilterData(params.filter, config, node);\n\n if (group && typeof group === 'string') {\n yield entityContentGroupDataRef(group);\n }\n if (icon) {\n yield entityContentIconDataRef(icon);\n }\n },\n});\n"],"names":[],"mappings":";;;;;;AA2CO,MAAM,yBAAyB,wBAAA,CAAyB;AAAA,EAC7D,IAAA,EAAM,gBAAA;AAAA,EACN,QAAA,EAAU,EAAE,EAAA,EAAI,qBAAA,EAAuB,OAAO,UAAA,EAAW;AAAA,EACzD,MAAA,EAAQ;AAAA,IACN,iBAAA,CAAkB,YAAA;AAAA,IAClB,iBAAA,CAAkB,SAAA;AAAA,IAClB,yBAAA;AAAA,IACA,iBAAA,CAAkB,SAAS,QAAA,EAAS;AAAA,IACpC,4BAA4B,QAAA,EAAS;AAAA,IACrC,8BAA8B,QAAA,EAAS;AAAA,IACvC,0BAA0B,QAAA,EAAS;AAAA,IACnC,yBAAyB,QAAA;AAAS,GACpC;AAAA,EACA,QAAA,EAAU;AAAA,IACR,KAAA,EAAO,yBAAA;AAAA,IACP,cAAA,EAAgB,2BAAA;AAAA,IAChB,gBAAA,EAAkB,6BAAA;AAAA,IAClB,KAAA,EAAO,yBAAA;AAAA,IACP,IAAA,EAAM;AAAA,GACR;AAAA,EACA,YAAA,EAAc;AAAA,IACZ,IAAA,EAAM,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,IAC1B,KAAA,EAAO,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,IAC3B,MAAA,EAAQ,CAAA,CACL,KAAA,CAAM,CAAC,CAAA,CAAE,MAAA,EAAO,EAAG,gCAAA,EAAkC,CAAC,CAAA,CACtD,QAAA,EAAS;AAAA,IACZ,KAAA,EAAO,CAAA,CAAE,OAAA,CAAQ,KAAK,CAAA,CAAE,GAAG,CAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA,EAAS;AAAA,IAChD,IAAA,EAAM,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAAS,GAC5B;AAAA,EACA,CAAC,OAAA,CACC,MAAA,EAqBA,EAAE,IAAA,EAAM,QAAO,EACf;AAIA,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,IAAA,IAAQ,MAAA,CAAO,QAAQ,MAAA,CAAO,WAAA;AAClD,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,IAAS,MAAA,CAAO,SAAS,MAAA,CAAO,YAAA;AACrD,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,IAAA,IAAQ,MAAA,CAAO,IAAA;AACnC,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,IAAS,MAAA,CAAO,SAAS,MAAA,CAAO,YAAA;AAErD,IAAA,MAAM,iBAAA,CAAkB,YAAA;AAAA,MACtB,iBAAA,CAAkB,IAAA,CAAK,IAAA,EAAM,MAAA,CAAO,MAAM;AAAA,KAC5C;AAEA,IAAA,MAAM,iBAAA,CAAkB,UAAU,IAAI,CAAA;AAEtC,IAAA,MAAM,0BAA0B,KAAK,CAAA;AAErC,IAAA,IAAI,OAAO,QAAA,EAAU;AACnB,MAAA,MAAM,iBAAA,CAAkB,QAAA,CAAS,MAAA,CAAO,QAAQ,CAAA;AAAA,IAClD;AAEA,IAAA,OAAO,uBAAA,CAAwB,MAAA,CAAO,MAAA,EAAQ,MAAA,EAAQ,IAAI,CAAA;AAE1D,IAAA,IAAI,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,EAAU;AACtC,MAAA,MAAM,0BAA0B,KAAK,CAAA;AAAA,IACvC;AACA,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,MAAM,yBAAyB,IAAI,CAAA;AAAA,IACrC;AAAA,EACF;AACF,CAAC;;;;"}
package/dist/alpha.d.ts CHANGED
@@ -160,9 +160,9 @@ declare const EntityContentBlueprint: _backstage_frontend_plugin_api.ExtensionBl
160
160
  icon: string | undefined;
161
161
  };
162
162
  configInput: {
163
- filter?: FilterPredicate | undefined;
164
- title?: string | undefined;
165
163
  path?: string | undefined;
164
+ title?: string | undefined;
165
+ filter?: FilterPredicate | undefined;
166
166
  group?: string | false | undefined;
167
167
  icon?: string | undefined;
168
168
  };
@@ -479,10 +479,10 @@ declare const catalogReactTranslationRef: _backstage_frontend_plugin_api.Transla
479
479
  readonly "inspectEntityDialog.overviewPage.identity.title": "Identity";
480
480
  readonly "inspectEntityDialog.overviewPage.annotations": "Annotations";
481
481
  readonly "inspectEntityDialog.overviewPage.tags": "Tags";
482
+ readonly "inspectEntityDialog.overviewPage.relation.title": "Relations";
482
483
  readonly "inspectEntityDialog.overviewPage.copyAriaLabel": "Copy {{label}}";
483
484
  readonly "inspectEntityDialog.overviewPage.copiedStatus": "Copied";
484
485
  readonly "inspectEntityDialog.overviewPage.helpLinkAriaLabel": "Learn more";
485
- readonly "inspectEntityDialog.overviewPage.relation.title": "Relations";
486
486
  readonly "inspectEntityDialog.yamlPage.title": "Entity as YAML";
487
487
  readonly "inspectEntityDialog.yamlPage.description": "This is the raw entity data as received from the catalog, on YAML form.";
488
488
  readonly "inspectEntityDialog.tabNames.json": "Raw JSON";
package/dist/index.d.ts CHANGED
@@ -1193,10 +1193,10 @@ declare const catalogReactTranslationRef: _backstage_frontend_plugin_api.Transla
1193
1193
  readonly "inspectEntityDialog.overviewPage.identity.title": "Identity";
1194
1194
  readonly "inspectEntityDialog.overviewPage.annotations": "Annotations";
1195
1195
  readonly "inspectEntityDialog.overviewPage.tags": "Tags";
1196
+ readonly "inspectEntityDialog.overviewPage.relation.title": "Relations";
1196
1197
  readonly "inspectEntityDialog.overviewPage.copyAriaLabel": "Copy {{label}}";
1197
1198
  readonly "inspectEntityDialog.overviewPage.copiedStatus": "Copied";
1198
1199
  readonly "inspectEntityDialog.overviewPage.helpLinkAriaLabel": "Learn more";
1199
- readonly "inspectEntityDialog.overviewPage.relation.title": "Relations";
1200
1200
  readonly "inspectEntityDialog.yamlPage.title": "Entity as YAML";
1201
1201
  readonly "inspectEntityDialog.yamlPage.description": "This is the raw entity data as received from the catalog, on YAML form.";
1202
1202
  readonly "inspectEntityDialog.tabNames.json": "Raw JSON";
@@ -29,6 +29,7 @@ function catalogApiMock(options) {
29
29
  getLocationByRef: jest.fn(),
30
30
  addLocation: jest.fn(),
31
31
  removeLocationById: jest.fn(),
32
+ updateLocation: jest.fn(),
32
33
  getLocationByEntity: jest.fn(),
33
34
  validateEntity: jest.fn(),
34
35
  analyzeLocation: jest.fn(),
@@ -1 +1 @@
1
- {"version":3,"file":"catalogApiMock.esm.js","sources":["../../src/testUtils/catalogApiMock.ts"],"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 { ApiFactory, createApiFactory } from '@backstage/frontend-plugin-api';\nimport { InMemoryCatalogClient } from '@backstage/catalog-client/testUtils';\nimport { Entity } from '@backstage/catalog-model';\nimport { catalogApiRef } from '@backstage/plugin-catalog-react';\nimport { CatalogApi } from '@backstage/catalog-client';\nimport {\n createApiMock,\n attachMockApiFactory,\n type MockWithApiFactory,\n} from '@backstage/frontend-test-utils';\n\n/**\n * Creates a fake catalog client that handles entities in memory storage. Note\n * that this client may be severely limited in functionality, and advanced\n * functions may not be available at all.\n *\n * @public\n */\nexport function catalogApiMock(options?: {\n entities?: Entity[];\n}): MockWithApiFactory<CatalogApi> {\n const instance = new InMemoryCatalogClient(options);\n return attachMockApiFactory(catalogApiRef, instance);\n}\n\n/**\n * A collection of mock functionality for the catalog service.\n *\n * @public\n */\nexport namespace catalogApiMock {\n /**\n * Creates a fake catalog client that handles entities in memory storage. Note\n * that this client may be severely limited in functionality, and advanced\n * functions may not be available at all.\n */\n export const factory = (options?: {\n entities?: Entity[];\n }): ApiFactory<CatalogApi, CatalogApi, {}> =>\n createApiFactory({\n api: catalogApiRef,\n deps: {},\n factory: () => new InMemoryCatalogClient(options),\n });\n /**\n * Creates a catalog client whose methods are mock functions, possibly with\n * some of them overloaded by the caller.\n */\n export const mock = createApiMock(catalogApiRef, () => ({\n getEntities: jest.fn(),\n getEntitiesByRefs: jest.fn(),\n queryEntities: jest.fn(),\n getEntityAncestors: jest.fn(),\n getEntityByRef: jest.fn(),\n removeEntityByUid: jest.fn(),\n refreshEntity: jest.fn(),\n getEntityFacets: jest.fn(),\n getLocations: jest.fn(),\n queryLocations: jest.fn(),\n streamLocations: jest.fn(),\n getLocationById: jest.fn(),\n getLocationByRef: jest.fn(),\n addLocation: jest.fn(),\n removeLocationById: jest.fn(),\n getLocationByEntity: jest.fn(),\n validateEntity: jest.fn(),\n analyzeLocation: jest.fn(),\n streamEntities: jest.fn(),\n streamEntityPages: jest.fn(),\n }));\n}\n"],"names":["catalogApiMock"],"mappings":";;;;;AAkCO,SAAS,eAAe,OAAA,EAEI;AACjC,EAAA,MAAM,QAAA,GAAW,IAAI,qBAAA,CAAsB,OAAO,CAAA;AAClD,EAAA,OAAO,oBAAA,CAAqB,eAAe,QAAQ,CAAA;AACrD;AAAA,CAOO,CAAUA,eAAAA,KAAV;AAME,EAAMA,eAAAA,CAAA,OAAA,GAAU,CAAC,OAAA,KAGtB,gBAAA,CAAiB;AAAA,IACf,GAAA,EAAK,aAAA;AAAA,IACL,MAAM,EAAC;AAAA,IACP,OAAA,EAAS,MAAM,IAAI,qBAAA,CAAsB,OAAO;AAAA,GACjD,CAAA;AAKI,EAAMA,eAAAA,CAAA,IAAA,GAAO,aAAA,CAAc,aAAA,EAAe,OAAO;AAAA,IACtD,WAAA,EAAa,KAAK,EAAA,EAAG;AAAA,IACrB,iBAAA,EAAmB,KAAK,EAAA,EAAG;AAAA,IAC3B,aAAA,EAAe,KAAK,EAAA,EAAG;AAAA,IACvB,kBAAA,EAAoB,KAAK,EAAA,EAAG;AAAA,IAC5B,cAAA,EAAgB,KAAK,EAAA,EAAG;AAAA,IACxB,iBAAA,EAAmB,KAAK,EAAA,EAAG;AAAA,IAC3B,aAAA,EAAe,KAAK,EAAA,EAAG;AAAA,IACvB,eAAA,EAAiB,KAAK,EAAA,EAAG;AAAA,IACzB,YAAA,EAAc,KAAK,EAAA,EAAG;AAAA,IACtB,cAAA,EAAgB,KAAK,EAAA,EAAG;AAAA,IACxB,eAAA,EAAiB,KAAK,EAAA,EAAG;AAAA,IACzB,eAAA,EAAiB,KAAK,EAAA,EAAG;AAAA,IACzB,gBAAA,EAAkB,KAAK,EAAA,EAAG;AAAA,IAC1B,WAAA,EAAa,KAAK,EAAA,EAAG;AAAA,IACrB,kBAAA,EAAoB,KAAK,EAAA,EAAG;AAAA,IAC5B,mBAAA,EAAqB,KAAK,EAAA,EAAG;AAAA,IAC7B,cAAA,EAAgB,KAAK,EAAA,EAAG;AAAA,IACxB,eAAA,EAAiB,KAAK,EAAA,EAAG;AAAA,IACzB,cAAA,EAAgB,KAAK,EAAA,EAAG;AAAA,IACxB,iBAAA,EAAmB,KAAK,EAAA;AAAG,GAC7B,CAAE,CAAA;AAAA,CAAA,EAvCa,cAAA,KAAA,cAAA,GAAA,EAAA,CAAA,CAAA;;;;"}
1
+ {"version":3,"file":"catalogApiMock.esm.js","sources":["../../src/testUtils/catalogApiMock.ts"],"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 { ApiFactory, createApiFactory } from '@backstage/frontend-plugin-api';\nimport { InMemoryCatalogClient } from '@backstage/catalog-client/testUtils';\nimport { Entity } from '@backstage/catalog-model';\nimport { catalogApiRef } from '@backstage/plugin-catalog-react';\nimport { CatalogApi } from '@backstage/catalog-client';\nimport {\n createApiMock,\n attachMockApiFactory,\n type MockWithApiFactory,\n} from '@backstage/frontend-test-utils';\n\n/**\n * Creates a fake catalog client that handles entities in memory storage. Note\n * that this client may be severely limited in functionality, and advanced\n * functions may not be available at all.\n *\n * @public\n */\nexport function catalogApiMock(options?: {\n entities?: Entity[];\n}): MockWithApiFactory<CatalogApi> {\n const instance = new InMemoryCatalogClient(options);\n return attachMockApiFactory(catalogApiRef, instance);\n}\n\n/**\n * A collection of mock functionality for the catalog service.\n *\n * @public\n */\nexport namespace catalogApiMock {\n /**\n * Creates a fake catalog client that handles entities in memory storage. Note\n * that this client may be severely limited in functionality, and advanced\n * functions may not be available at all.\n */\n export const factory = (options?: {\n entities?: Entity[];\n }): ApiFactory<CatalogApi, CatalogApi, {}> =>\n createApiFactory({\n api: catalogApiRef,\n deps: {},\n factory: () => new InMemoryCatalogClient(options),\n });\n /**\n * Creates a catalog client whose methods are mock functions, possibly with\n * some of them overloaded by the caller.\n */\n export const mock = createApiMock(catalogApiRef, () => ({\n getEntities: jest.fn(),\n getEntitiesByRefs: jest.fn(),\n queryEntities: jest.fn(),\n getEntityAncestors: jest.fn(),\n getEntityByRef: jest.fn(),\n removeEntityByUid: jest.fn(),\n refreshEntity: jest.fn(),\n getEntityFacets: jest.fn(),\n getLocations: jest.fn(),\n queryLocations: jest.fn(),\n streamLocations: jest.fn(),\n getLocationById: jest.fn(),\n getLocationByRef: jest.fn(),\n addLocation: jest.fn(),\n removeLocationById: jest.fn(),\n updateLocation: jest.fn(),\n getLocationByEntity: jest.fn(),\n validateEntity: jest.fn(),\n analyzeLocation: jest.fn(),\n streamEntities: jest.fn(),\n streamEntityPages: jest.fn(),\n }));\n}\n"],"names":["catalogApiMock"],"mappings":";;;;;AAkCO,SAAS,eAAe,OAAA,EAEI;AACjC,EAAA,MAAM,QAAA,GAAW,IAAI,qBAAA,CAAsB,OAAO,CAAA;AAClD,EAAA,OAAO,oBAAA,CAAqB,eAAe,QAAQ,CAAA;AACrD;AAAA,CAOO,CAAUA,eAAAA,KAAV;AAME,EAAMA,eAAAA,CAAA,OAAA,GAAU,CAAC,OAAA,KAGtB,gBAAA,CAAiB;AAAA,IACf,GAAA,EAAK,aAAA;AAAA,IACL,MAAM,EAAC;AAAA,IACP,OAAA,EAAS,MAAM,IAAI,qBAAA,CAAsB,OAAO;AAAA,GACjD,CAAA;AAKI,EAAMA,eAAAA,CAAA,IAAA,GAAO,aAAA,CAAc,aAAA,EAAe,OAAO;AAAA,IACtD,WAAA,EAAa,KAAK,EAAA,EAAG;AAAA,IACrB,iBAAA,EAAmB,KAAK,EAAA,EAAG;AAAA,IAC3B,aAAA,EAAe,KAAK,EAAA,EAAG;AAAA,IACvB,kBAAA,EAAoB,KAAK,EAAA,EAAG;AAAA,IAC5B,cAAA,EAAgB,KAAK,EAAA,EAAG;AAAA,IACxB,iBAAA,EAAmB,KAAK,EAAA,EAAG;AAAA,IAC3B,aAAA,EAAe,KAAK,EAAA,EAAG;AAAA,IACvB,eAAA,EAAiB,KAAK,EAAA,EAAG;AAAA,IACzB,YAAA,EAAc,KAAK,EAAA,EAAG;AAAA,IACtB,cAAA,EAAgB,KAAK,EAAA,EAAG;AAAA,IACxB,eAAA,EAAiB,KAAK,EAAA,EAAG;AAAA,IACzB,eAAA,EAAiB,KAAK,EAAA,EAAG;AAAA,IACzB,gBAAA,EAAkB,KAAK,EAAA,EAAG;AAAA,IAC1B,WAAA,EAAa,KAAK,EAAA,EAAG;AAAA,IACrB,kBAAA,EAAoB,KAAK,EAAA,EAAG;AAAA,IAC5B,cAAA,EAAgB,KAAK,EAAA,EAAG;AAAA,IACxB,mBAAA,EAAqB,KAAK,EAAA,EAAG;AAAA,IAC7B,cAAA,EAAgB,KAAK,EAAA,EAAG;AAAA,IACxB,eAAA,EAAiB,KAAK,EAAA,EAAG;AAAA,IACzB,cAAA,EAAgB,KAAK,EAAA,EAAG;AAAA,IACxB,iBAAA,EAAmB,KAAK,EAAA;AAAG,GAC7B,CAAE,CAAA;AAAA,CAAA,EAxCa,cAAA,KAAA,cAAA,GAAA,EAAA,CAAA,CAAA;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backstage/plugin-catalog-react",
3
- "version": "2.1.2-next.2",
3
+ "version": "2.1.2",
4
4
  "description": "A frontend library that helps other Backstage plugins interact with the catalog",
5
5
  "backstage": {
6
6
  "role": "web-library",
@@ -73,21 +73,21 @@
73
73
  "test": "backstage-cli package test"
74
74
  },
75
75
  "dependencies": {
76
- "@backstage/catalog-client": "1.14.1-next.0",
77
- "@backstage/catalog-model": "1.7.8-next.0",
78
- "@backstage/core-compat-api": "0.5.10-next.2",
79
- "@backstage/core-components": "0.18.9-next.1",
80
- "@backstage/core-plugin-api": "1.12.5-next.2",
81
- "@backstage/errors": "1.3.0-next.0",
82
- "@backstage/filter-predicates": "0.1.2-next.0",
83
- "@backstage/frontend-plugin-api": "0.16.0-next.2",
84
- "@backstage/integration-react": "1.2.17-next.1",
85
- "@backstage/plugin-catalog-common": "1.1.9-next.0",
86
- "@backstage/plugin-permission-common": "0.9.8-next.0",
87
- "@backstage/plugin-permission-react": "0.4.42-next.1",
88
- "@backstage/types": "1.2.2",
89
- "@backstage/ui": "0.14.0-next.2",
90
- "@backstage/version-bridge": "1.0.12",
76
+ "@backstage/catalog-client": "^1.15.0",
77
+ "@backstage/catalog-model": "^1.8.0",
78
+ "@backstage/core-compat-api": "^0.5.10",
79
+ "@backstage/core-components": "^0.18.9",
80
+ "@backstage/core-plugin-api": "^1.12.5",
81
+ "@backstage/errors": "^1.3.0",
82
+ "@backstage/filter-predicates": "^0.1.2",
83
+ "@backstage/frontend-plugin-api": "^0.16.0",
84
+ "@backstage/integration-react": "^1.2.17",
85
+ "@backstage/plugin-catalog-common": "^1.1.9",
86
+ "@backstage/plugin-permission-common": "^0.9.8",
87
+ "@backstage/plugin-permission-react": "^0.5.0",
88
+ "@backstage/types": "^1.2.2",
89
+ "@backstage/ui": "^0.14.0",
90
+ "@backstage/version-bridge": "^1.0.12",
91
91
  "@material-ui/core": "^4.12.2",
92
92
  "@material-ui/icons": "^4.9.1",
93
93
  "@material-ui/lab": "4.0.0-alpha.61",
@@ -99,15 +99,16 @@
99
99
  "qs": "^6.9.4",
100
100
  "react-use": "^17.2.4",
101
101
  "yaml": "^2.0.0",
102
- "zen-observable": "^0.10.0"
102
+ "zen-observable": "^0.10.0",
103
+ "zod": "^3.25.76 || ^4.0.0"
103
104
  },
104
105
  "devDependencies": {
105
- "@backstage/cli": "0.36.1-next.2",
106
- "@backstage/core-app-api": "1.20.0-next.2",
107
- "@backstage/frontend-test-utils": "0.5.2-next.2",
108
- "@backstage/plugin-catalog-common": "1.1.9-next.0",
109
- "@backstage/plugin-scaffolder-common": "2.0.1-next.0",
110
- "@backstage/test-utils": "1.7.17-next.2",
106
+ "@backstage/cli": "^0.36.1",
107
+ "@backstage/core-app-api": "^1.20.0",
108
+ "@backstage/frontend-test-utils": "^0.5.2",
109
+ "@backstage/plugin-catalog-common": "^1.1.9",
110
+ "@backstage/plugin-scaffolder-common": "^2.1.0",
111
+ "@backstage/test-utils": "^1.7.17",
111
112
  "@testing-library/dom": "^10.0.0",
112
113
  "@testing-library/jest-dom": "^6.0.0",
113
114
  "@testing-library/react": "^16.0.0",
@@ -117,11 +118,10 @@
117
118
  "react": "^18.0.2",
118
119
  "react-dom": "^18.0.2",
119
120
  "react-router-dom": "^6.30.2",
120
- "react-test-renderer": "^16.13.1",
121
- "zod": "^3.25.76 || ^4.0.0"
121
+ "react-test-renderer": "^16.13.1"
122
122
  },
123
123
  "peerDependencies": {
124
- "@backstage/frontend-test-utils": "0.5.2-next.2",
124
+ "@backstage/frontend-test-utils": "^0.5.2",
125
125
  "@types/react": "^17.0.0 || ^18.0.0",
126
126
  "react": "^17.0.0 || ^18.0.0",
127
127
  "react-dom": "^17.0.0 || ^18.0.0",