@backstage/plugin-catalog 1.22.0-next.3 → 1.22.1-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 +55 -0
- package/alpha/package.json +1 -1
- package/dist/alpha/apis.esm.js +30 -22
- package/dist/alpha/apis.esm.js.map +1 -1
- package/dist/alpha/blueprints/CatalogFilterBlueprint.esm.js +17 -0
- package/dist/alpha/blueprints/CatalogFilterBlueprint.esm.js.map +1 -0
- package/dist/alpha/entityCards.esm.js +70 -50
- package/dist/alpha/entityCards.esm.js.map +1 -1
- package/dist/alpha/entityContents.esm.js +27 -11
- package/dist/alpha/entityContents.esm.js.map +1 -1
- package/dist/alpha/filter/matchers/createHasMatcher.esm.js.map +1 -0
- package/dist/alpha/filter/matchers/createIsMatcher.esm.js.map +1 -0
- package/dist/alpha/filter/matchers/createKindMatcher.esm.js.map +1 -0
- package/dist/alpha/filter/matchers/createTypeMatcher.esm.js.map +1 -0
- package/dist/alpha/filter/parseFilterExpression.esm.js +4 -4
- package/dist/alpha/filter/parseFilterExpression.esm.js.map +1 -1
- package/dist/alpha/filters.esm.js +70 -49
- package/dist/alpha/filters.esm.js.map +1 -1
- package/dist/alpha/navItems.esm.js +7 -5
- package/dist/alpha/navItems.esm.js.map +1 -1
- package/dist/alpha/pages.esm.js +55 -41
- package/dist/alpha/pages.esm.js.map +1 -1
- package/dist/alpha/plugin.esm.js +2 -2
- package/dist/alpha/plugin.esm.js.map +1 -1
- package/dist/alpha/searchResultItems.esm.js +8 -6
- package/dist/alpha/searchResultItems.esm.js.map +1 -1
- package/dist/alpha/translation.esm.js.map +1 -0
- package/dist/alpha.d.ts +427 -13
- package/dist/alpha.esm.js +2 -2
- package/dist/apis/EntityPresentationApi/DefaultEntityPresentationApi.esm.js +10 -1
- package/dist/apis/EntityPresentationApi/DefaultEntityPresentationApi.esm.js.map +1 -1
- package/dist/components/AboutCard/AboutCard.esm.js +1 -1
- package/dist/components/AboutCard/AboutCard.esm.js.map +1 -1
- package/dist/components/AboutCard/AboutContent.esm.js +1 -1
- package/dist/components/AboutCard/AboutContent.esm.js.map +1 -1
- package/dist/components/CatalogPage/DefaultCatalogPage.esm.js +1 -1
- package/dist/components/CatalogPage/DefaultCatalogPage.esm.js.map +1 -1
- package/dist/components/CatalogSearchResultListItem/CatalogSearchResultListItem.esm.js +1 -1
- package/dist/components/CatalogSearchResultListItem/CatalogSearchResultListItem.esm.js.map +1 -1
- package/dist/components/CatalogTable/CatalogTable.esm.js +1 -1
- package/dist/components/CatalogTable/CatalogTable.esm.js.map +1 -1
- package/dist/components/DependencyOfComponentsCard/DependencyOfComponentsCard.esm.js +1 -1
- package/dist/components/DependencyOfComponentsCard/DependencyOfComponentsCard.esm.js.map +1 -1
- package/dist/components/DependsOnComponentsCard/DependsOnComponentsCard.esm.js +1 -1
- package/dist/components/DependsOnComponentsCard/DependsOnComponentsCard.esm.js.map +1 -1
- package/dist/components/DependsOnResourcesCard/DependsOnResourcesCard.esm.js +1 -1
- package/dist/components/DependsOnResourcesCard/DependsOnResourcesCard.esm.js.map +1 -1
- package/dist/components/EntityContextMenu/EntityContextMenu.esm.js +1 -1
- package/dist/components/EntityContextMenu/EntityContextMenu.esm.js.map +1 -1
- package/dist/components/EntityContextMenu/UnregisterEntity.esm.js +1 -1
- package/dist/components/EntityContextMenu/UnregisterEntity.esm.js.map +1 -1
- package/dist/components/EntityLabelsCard/EntityLabelsCard.esm.js +1 -1
- package/dist/components/EntityLabelsCard/EntityLabelsCard.esm.js.map +1 -1
- package/dist/components/EntityLabelsCard/EntityLabelsEmptyState.esm.js +1 -1
- package/dist/components/EntityLabelsCard/EntityLabelsEmptyState.esm.js.map +1 -1
- package/dist/components/EntityLayout/EntityLayout.esm.js +1 -1
- package/dist/components/EntityLayout/EntityLayout.esm.js.map +1 -1
- package/dist/components/EntityLinksCard/EntityLinksCard.esm.js +1 -1
- package/dist/components/EntityLinksCard/EntityLinksCard.esm.js.map +1 -1
- package/dist/components/EntityLinksCard/EntityLinksEmptyState.esm.js +1 -1
- package/dist/components/EntityLinksCard/EntityLinksEmptyState.esm.js.map +1 -1
- package/dist/components/EntityOrphanWarning/DeleteEntityDialog.esm.js +1 -1
- package/dist/components/EntityOrphanWarning/DeleteEntityDialog.esm.js.map +1 -1
- package/dist/components/EntityOrphanWarning/EntityOrphanWarning.esm.js +1 -1
- package/dist/components/EntityOrphanWarning/EntityOrphanWarning.esm.js.map +1 -1
- package/dist/components/EntityProcessingErrorsPanel/EntityProcessingErrorsPanel.esm.js +1 -1
- package/dist/components/EntityProcessingErrorsPanel/EntityProcessingErrorsPanel.esm.js.map +1 -1
- package/dist/components/EntityRelationWarning/EntityRelationWarning.esm.js +1 -1
- package/dist/components/EntityRelationWarning/EntityRelationWarning.esm.js.map +1 -1
- package/dist/components/HasComponentsCard/HasComponentsCard.esm.js +1 -1
- package/dist/components/HasComponentsCard/HasComponentsCard.esm.js.map +1 -1
- package/dist/components/HasResourcesCard/HasResourcesCard.esm.js +1 -1
- package/dist/components/HasResourcesCard/HasResourcesCard.esm.js.map +1 -1
- package/dist/components/HasSubcomponentsCard/HasSubcomponentsCard.esm.js +1 -1
- package/dist/components/HasSubcomponentsCard/HasSubcomponentsCard.esm.js.map +1 -1
- package/dist/components/HasSubdomainsCard/HasSubdomainsCard.esm.js +1 -1
- package/dist/components/HasSubdomainsCard/HasSubdomainsCard.esm.js.map +1 -1
- package/dist/components/HasSystemsCard/HasSystemsCard.esm.js +1 -1
- package/dist/components/HasSystemsCard/HasSystemsCard.esm.js.map +1 -1
- package/dist/components/RelatedEntitiesCard/RelatedEntitiesCard.esm.js +13 -3
- package/dist/components/RelatedEntitiesCard/RelatedEntitiesCard.esm.js.map +1 -1
- package/package.json +19 -18
- package/dist/alpha/createCatalogFilterExtension.esm.js +0 -27
- package/dist/alpha/createCatalogFilterExtension.esm.js.map +0 -1
- package/dist/alpha/filter/matrchers/createHasMatcher.esm.js.map +0 -1
- package/dist/alpha/filter/matrchers/createIsMatcher.esm.js.map +0 -1
- package/dist/alpha/filter/matrchers/createKindMatcher.esm.js.map +0 -1
- package/dist/alpha/filter/matrchers/createTypeMatcher.esm.js.map +0 -1
- package/dist/translation.esm.js.map +0 -1
- /package/dist/alpha/filter/{matrchers → matchers}/createHasMatcher.esm.js +0 -0
- /package/dist/alpha/filter/{matrchers → matchers}/createIsMatcher.esm.js +0 -0
- /package/dist/alpha/filter/{matrchers → matchers}/createKindMatcher.esm.js +0 -0
- /package/dist/alpha/filter/{matrchers → matchers}/createTypeMatcher.esm.js +0 -0
- /package/dist/{translation.esm.js → alpha/translation.esm.js} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,60 @@
|
|
|
1
1
|
# @backstage/plugin-catalog
|
|
2
2
|
|
|
3
|
+
## 1.22.1-next.0
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- fec8b57: Updated exports to use the new type parameters for extensions and extension blueprints.
|
|
8
|
+
- 5446061: The `/alpha` export no longer export extension creators for the new frontend system, existing usage should be switched to use the equivalent extension blueprint instead. For more information see the [new frontend system 1.30 migration documentation](https://backstage.io/docs/frontend-system/architecture/migrations#130).
|
|
9
|
+
- 180a45f: Entity presentation api now only fetches fields that are required to display entity title
|
|
10
|
+
- Updated dependencies
|
|
11
|
+
- @backstage/frontend-plugin-api@0.8.0-next.0
|
|
12
|
+
- @backstage/core-compat-api@0.2.9-next.0
|
|
13
|
+
- @backstage/plugin-catalog-react@1.12.4-next.0
|
|
14
|
+
- @backstage/plugin-search-react@1.8.0-next.0
|
|
15
|
+
- @backstage/catalog-client@1.6.6
|
|
16
|
+
- @backstage/catalog-model@1.6.0
|
|
17
|
+
- @backstage/core-components@0.14.10
|
|
18
|
+
- @backstage/core-plugin-api@1.9.3
|
|
19
|
+
- @backstage/errors@1.2.4
|
|
20
|
+
- @backstage/integration-react@1.1.30
|
|
21
|
+
- @backstage/types@1.1.1
|
|
22
|
+
- @backstage/plugin-catalog-common@1.0.26
|
|
23
|
+
- @backstage/plugin-permission-react@0.4.25
|
|
24
|
+
- @backstage/plugin-scaffolder-common@1.5.5
|
|
25
|
+
- @backstage/plugin-search-common@1.2.14
|
|
26
|
+
|
|
27
|
+
## 1.22.0
|
|
28
|
+
|
|
29
|
+
### Minor Changes
|
|
30
|
+
|
|
31
|
+
- 6925dcb: Introduces the HasSubdomainsCard component that displays the subdomains of a given domain
|
|
32
|
+
|
|
33
|
+
### Patch Changes
|
|
34
|
+
|
|
35
|
+
- 496b8a9: Export `RelatedEntitiesCard` presets to be reused.
|
|
36
|
+
- 604a504: The entity relation cards available for the new frontend system via `/alpha` now have more accurate and granular default filters.
|
|
37
|
+
- 7bd27e1: Deprecate the old pattern of `create*Extension`, and replace it with the equivalent Blueprint implementation instead.
|
|
38
|
+
- c7603e8: Deprecate the old pattern of `create*Extension`, and replace it with the equivalent Blueprint implementation instead
|
|
39
|
+
- 6582799: Add `tableOptions` to all tables and additionally `title` to API tables.
|
|
40
|
+
- 6349099: Added config input type to the extensions
|
|
41
|
+
- Updated dependencies
|
|
42
|
+
- @backstage/frontend-plugin-api@0.7.0
|
|
43
|
+
- @backstage/plugin-catalog-react@1.12.3
|
|
44
|
+
- @backstage/plugin-search-react@1.7.14
|
|
45
|
+
- @backstage/core-components@0.14.10
|
|
46
|
+
- @backstage/core-compat-api@0.2.8
|
|
47
|
+
- @backstage/plugin-search-common@1.2.14
|
|
48
|
+
- @backstage/catalog-model@1.6.0
|
|
49
|
+
- @backstage/catalog-client@1.6.6
|
|
50
|
+
- @backstage/core-plugin-api@1.9.3
|
|
51
|
+
- @backstage/errors@1.2.4
|
|
52
|
+
- @backstage/integration-react@1.1.30
|
|
53
|
+
- @backstage/types@1.1.1
|
|
54
|
+
- @backstage/plugin-catalog-common@1.0.26
|
|
55
|
+
- @backstage/plugin-permission-react@0.4.25
|
|
56
|
+
- @backstage/plugin-scaffolder-common@1.5.5
|
|
57
|
+
|
|
3
58
|
## 1.22.0-next.3
|
|
4
59
|
|
|
5
60
|
### Patch Changes
|
package/alpha/package.json
CHANGED
package/dist/alpha/apis.esm.js
CHANGED
|
@@ -1,33 +1,41 @@
|
|
|
1
1
|
import { createApiFactory, discoveryApiRef, fetchApiRef, storageApiRef } from '@backstage/core-plugin-api';
|
|
2
2
|
import { CatalogClient } from '@backstage/catalog-client';
|
|
3
|
-
import {
|
|
3
|
+
import { ApiBlueprint } from '@backstage/frontend-plugin-api';
|
|
4
4
|
import { catalogApiRef, starredEntitiesApiRef, entityPresentationApiRef } from '@backstage/plugin-catalog-react';
|
|
5
5
|
import { DefaultEntityPresentationApi } from '../apis/EntityPresentationApi/DefaultEntityPresentationApi.esm.js';
|
|
6
6
|
import { DefaultStarredEntitiesApi } from '../apis/StarredEntitiesApi/DefaultStarredEntitiesApi.esm.js';
|
|
7
7
|
|
|
8
|
-
const catalogApi =
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
8
|
+
const catalogApi = ApiBlueprint.make({
|
|
9
|
+
params: {
|
|
10
|
+
factory: createApiFactory({
|
|
11
|
+
api: catalogApiRef,
|
|
12
|
+
deps: {
|
|
13
|
+
discoveryApi: discoveryApiRef,
|
|
14
|
+
fetchApi: fetchApiRef
|
|
15
|
+
},
|
|
16
|
+
factory: ({ discoveryApi, fetchApi }) => new CatalogClient({ discoveryApi, fetchApi })
|
|
17
|
+
})
|
|
18
|
+
}
|
|
17
19
|
});
|
|
18
|
-
const catalogStarredEntitiesApi =
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
const catalogStarredEntitiesApi = ApiBlueprint.make({
|
|
21
|
+
name: "starred-entities",
|
|
22
|
+
params: {
|
|
23
|
+
factory: createApiFactory({
|
|
24
|
+
api: starredEntitiesApiRef,
|
|
25
|
+
deps: { storageApi: storageApiRef },
|
|
26
|
+
factory: ({ storageApi }) => new DefaultStarredEntitiesApi({ storageApi })
|
|
27
|
+
})
|
|
28
|
+
}
|
|
24
29
|
});
|
|
25
|
-
const entityPresentationApi =
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
30
|
+
const entityPresentationApi = ApiBlueprint.make({
|
|
31
|
+
name: "entity-presentation",
|
|
32
|
+
params: {
|
|
33
|
+
factory: createApiFactory({
|
|
34
|
+
api: entityPresentationApiRef,
|
|
35
|
+
deps: { catalogApiImp: catalogApiRef },
|
|
36
|
+
factory: ({ catalogApiImp }) => DefaultEntityPresentationApi.create({ catalogApi: catalogApiImp })
|
|
37
|
+
})
|
|
38
|
+
}
|
|
31
39
|
});
|
|
32
40
|
var apis = [catalogApi, catalogStarredEntitiesApi, entityPresentationApi];
|
|
33
41
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apis.esm.js","sources":["../../src/alpha/apis.tsx"],"sourcesContent":["/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n createApiFactory,\n discoveryApiRef,\n fetchApiRef,\n storageApiRef,\n} from '@backstage/core-plugin-api';\nimport { CatalogClient } from '@backstage/catalog-client';\nimport {
|
|
1
|
+
{"version":3,"file":"apis.esm.js","sources":["../../src/alpha/apis.tsx"],"sourcesContent":["/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n createApiFactory,\n discoveryApiRef,\n fetchApiRef,\n storageApiRef,\n} from '@backstage/core-plugin-api';\nimport { CatalogClient } from '@backstage/catalog-client';\nimport { ApiBlueprint } from '@backstage/frontend-plugin-api';\nimport {\n catalogApiRef,\n entityPresentationApiRef,\n starredEntitiesApiRef,\n} from '@backstage/plugin-catalog-react';\nimport {\n DefaultEntityPresentationApi,\n DefaultStarredEntitiesApi,\n} from '../apis';\n\nexport const catalogApi = ApiBlueprint.make({\n params: {\n factory: createApiFactory({\n api: catalogApiRef,\n deps: {\n discoveryApi: discoveryApiRef,\n fetchApi: fetchApiRef,\n },\n factory: ({ discoveryApi, fetchApi }) =>\n new CatalogClient({ discoveryApi, fetchApi }),\n }),\n },\n});\n\nexport const catalogStarredEntitiesApi = ApiBlueprint.make({\n name: 'starred-entities',\n params: {\n factory: createApiFactory({\n api: starredEntitiesApiRef,\n deps: { storageApi: storageApiRef },\n factory: ({ storageApi }) =>\n new DefaultStarredEntitiesApi({ storageApi }),\n }),\n },\n});\n\nexport const entityPresentationApi = ApiBlueprint.make({\n name: 'entity-presentation',\n params: {\n factory: createApiFactory({\n api: entityPresentationApiRef,\n deps: { catalogApiImp: catalogApiRef },\n factory: ({ catalogApiImp }) =>\n DefaultEntityPresentationApi.create({ catalogApi: catalogApiImp }),\n }),\n },\n});\n\nexport default [catalogApi, catalogStarredEntitiesApi, entityPresentationApi];\n"],"names":[],"mappings":";;;;;;;AAkCa,MAAA,UAAA,GAAa,aAAa,IAAK,CAAA;AAAA,EAC1C,MAAQ,EAAA;AAAA,IACN,SAAS,gBAAiB,CAAA;AAAA,MACxB,GAAK,EAAA,aAAA;AAAA,MACL,IAAM,EAAA;AAAA,QACJ,YAAc,EAAA,eAAA;AAAA,QACd,QAAU,EAAA,WAAA;AAAA,OACZ;AAAA,MACA,OAAA,EAAS,CAAC,EAAE,YAAc,EAAA,QAAA,EACxB,KAAA,IAAI,aAAc,CAAA,EAAE,YAAc,EAAA,QAAA,EAAU,CAAA;AAAA,KAC/C,CAAA;AAAA,GACH;AACF,CAAC,EAAA;AAEY,MAAA,yBAAA,GAA4B,aAAa,IAAK,CAAA;AAAA,EACzD,IAAM,EAAA,kBAAA;AAAA,EACN,MAAQ,EAAA;AAAA,IACN,SAAS,gBAAiB,CAAA;AAAA,MACxB,GAAK,EAAA,qBAAA;AAAA,MACL,IAAA,EAAM,EAAE,UAAA,EAAY,aAAc,EAAA;AAAA,MAClC,OAAA,EAAS,CAAC,EAAE,UAAA,OACV,IAAI,yBAAA,CAA0B,EAAE,UAAA,EAAY,CAAA;AAAA,KAC/C,CAAA;AAAA,GACH;AACF,CAAC,EAAA;AAEY,MAAA,qBAAA,GAAwB,aAAa,IAAK,CAAA;AAAA,EACrD,IAAM,EAAA,qBAAA;AAAA,EACN,MAAQ,EAAA;AAAA,IACN,SAAS,gBAAiB,CAAA;AAAA,MACxB,GAAK,EAAA,wBAAA;AAAA,MACL,IAAA,EAAM,EAAE,aAAA,EAAe,aAAc,EAAA;AAAA,MACrC,OAAA,EAAS,CAAC,EAAE,aAAc,EAAA,KACxB,6BAA6B,MAAO,CAAA,EAAE,UAAY,EAAA,aAAA,EAAe,CAAA;AAAA,KACpE,CAAA;AAAA,GACH;AACF,CAAC,EAAA;AAED,WAAe,CAAC,UAAY,EAAA,yBAAA,EAA2B,qBAAqB,CAAA;;;;"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { createExtensionBlueprint, coreExtensionData, ExtensionBoundary } from '@backstage/frontend-plugin-api';
|
|
2
|
+
|
|
3
|
+
const CatalogFilterBlueprint = createExtensionBlueprint({
|
|
4
|
+
kind: "catalog-filter",
|
|
5
|
+
attachTo: { id: "page:catalog", input: "filters" },
|
|
6
|
+
output: [coreExtensionData.reactElement],
|
|
7
|
+
factory(params, { node }) {
|
|
8
|
+
return [
|
|
9
|
+
coreExtensionData.reactElement(
|
|
10
|
+
ExtensionBoundary.lazy(node, params.loader)
|
|
11
|
+
)
|
|
12
|
+
];
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
export { CatalogFilterBlueprint };
|
|
17
|
+
//# sourceMappingURL=CatalogFilterBlueprint.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CatalogFilterBlueprint.esm.js","sources":["../../../src/alpha/blueprints/CatalogFilterBlueprint.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';\n\n/**\n * Creates Catalog Filter Extensions\n * @alpha\n */\nexport const CatalogFilterBlueprint = createExtensionBlueprint({\n kind: 'catalog-filter',\n attachTo: { id: 'page:catalog', input: 'filters' },\n output: [coreExtensionData.reactElement],\n factory(params: { loader: () => Promise<JSX.Element> }, { node }) {\n return [\n coreExtensionData.reactElement(\n ExtensionBoundary.lazy(node, params.loader),\n ),\n ];\n },\n});\n"],"names":[],"mappings":";;AA0BO,MAAM,yBAAyB,wBAAyB,CAAA;AAAA,EAC7D,IAAM,EAAA,gBAAA;AAAA,EACN,QAAU,EAAA,EAAE,EAAI,EAAA,cAAA,EAAgB,OAAO,SAAU,EAAA;AAAA,EACjD,MAAA,EAAQ,CAAC,iBAAA,CAAkB,YAAY,CAAA;AAAA,EACvC,OAAQ,CAAA,MAAA,EAAgD,EAAE,IAAA,EAAQ,EAAA;AAChE,IAAO,OAAA;AAAA,MACL,iBAAkB,CAAA,YAAA;AAAA,QAChB,iBAAkB,CAAA,IAAA,CAAK,IAAM,EAAA,MAAA,CAAO,MAAM,CAAA;AAAA,OAC5C;AAAA,KACF,CAAA;AAAA,GACF;AACF,CAAC;;;;"}
|
|
@@ -1,75 +1,95 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import {
|
|
2
|
+
import { EntityCardBlueprint } from '@backstage/plugin-catalog-react/alpha';
|
|
3
3
|
import { compatWrapper } from '@backstage/core-compat-api';
|
|
4
4
|
|
|
5
|
-
const catalogAboutEntityCard =
|
|
5
|
+
const catalogAboutEntityCard = EntityCardBlueprint.make({
|
|
6
6
|
name: "about",
|
|
7
|
-
|
|
8
|
-
(
|
|
9
|
-
|
|
7
|
+
params: {
|
|
8
|
+
loader: async () => import('../components/AboutCard/index.esm.js').then(
|
|
9
|
+
(m) => compatWrapper(/* @__PURE__ */ React.createElement(m.AboutCard, { variant: "gridItem" }))
|
|
10
|
+
)
|
|
11
|
+
}
|
|
10
12
|
});
|
|
11
|
-
const catalogLinksEntityCard =
|
|
13
|
+
const catalogLinksEntityCard = EntityCardBlueprint.make({
|
|
12
14
|
name: "links",
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
(
|
|
16
|
-
|
|
15
|
+
params: {
|
|
16
|
+
filter: "has:links",
|
|
17
|
+
loader: async () => import('../components/EntityLinksCard/index.esm.js').then(
|
|
18
|
+
(m) => compatWrapper(/* @__PURE__ */ React.createElement(m.EntityLinksCard, { variant: "gridItem" }))
|
|
19
|
+
)
|
|
20
|
+
}
|
|
17
21
|
});
|
|
18
|
-
const catalogLabelsEntityCard =
|
|
22
|
+
const catalogLabelsEntityCard = EntityCardBlueprint.make({
|
|
19
23
|
name: "labels",
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
(
|
|
23
|
-
|
|
24
|
+
params: {
|
|
25
|
+
filter: "has:labels",
|
|
26
|
+
loader: async () => import('../components/EntityLabelsCard/index.esm.js').then(
|
|
27
|
+
(m) => compatWrapper(/* @__PURE__ */ React.createElement(m.EntityLabelsCard, { variant: "gridItem" }))
|
|
28
|
+
)
|
|
29
|
+
}
|
|
24
30
|
});
|
|
25
|
-
const catalogDependsOnComponentsEntityCard =
|
|
31
|
+
const catalogDependsOnComponentsEntityCard = EntityCardBlueprint.make({
|
|
26
32
|
name: "depends-on-components",
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
(
|
|
30
|
-
|
|
33
|
+
params: {
|
|
34
|
+
filter: "kind:component",
|
|
35
|
+
loader: async () => import('../components/DependsOnComponentsCard/index.esm.js').then(
|
|
36
|
+
(m) => compatWrapper(/* @__PURE__ */ React.createElement(m.DependsOnComponentsCard, { variant: "gridItem" }))
|
|
37
|
+
)
|
|
38
|
+
}
|
|
31
39
|
});
|
|
32
|
-
const catalogDependsOnResourcesEntityCard =
|
|
40
|
+
const catalogDependsOnResourcesEntityCard = EntityCardBlueprint.make({
|
|
33
41
|
name: "depends-on-resources",
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
(
|
|
37
|
-
|
|
42
|
+
params: {
|
|
43
|
+
filter: "kind:component",
|
|
44
|
+
loader: async () => import('../components/DependsOnResourcesCard/index.esm.js').then(
|
|
45
|
+
(m) => compatWrapper(/* @__PURE__ */ React.createElement(m.DependsOnResourcesCard, { variant: "gridItem" }))
|
|
46
|
+
)
|
|
47
|
+
}
|
|
38
48
|
});
|
|
39
|
-
const catalogHasComponentsEntityCard =
|
|
49
|
+
const catalogHasComponentsEntityCard = EntityCardBlueprint.make({
|
|
40
50
|
name: "has-components",
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
(
|
|
44
|
-
|
|
51
|
+
params: {
|
|
52
|
+
filter: "kind:system",
|
|
53
|
+
loader: async () => import('../components/HasComponentsCard/index.esm.js').then(
|
|
54
|
+
(m) => compatWrapper(/* @__PURE__ */ React.createElement(m.HasComponentsCard, { variant: "gridItem" }))
|
|
55
|
+
)
|
|
56
|
+
}
|
|
45
57
|
});
|
|
46
|
-
const catalogHasResourcesEntityCard =
|
|
58
|
+
const catalogHasResourcesEntityCard = EntityCardBlueprint.make({
|
|
47
59
|
name: "has-resources",
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
(
|
|
51
|
-
|
|
60
|
+
params: {
|
|
61
|
+
filter: "kind:system",
|
|
62
|
+
loader: async () => import('../components/HasResourcesCard/index.esm.js').then(
|
|
63
|
+
(m) => compatWrapper(/* @__PURE__ */ React.createElement(m.HasResourcesCard, { variant: "gridItem" }))
|
|
64
|
+
)
|
|
65
|
+
}
|
|
52
66
|
});
|
|
53
|
-
const catalogHasSubcomponentsEntityCard =
|
|
67
|
+
const catalogHasSubcomponentsEntityCard = EntityCardBlueprint.make({
|
|
54
68
|
name: "has-subcomponents",
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
(
|
|
58
|
-
|
|
69
|
+
params: {
|
|
70
|
+
filter: "kind:component",
|
|
71
|
+
loader: async () => import('../components/HasSubcomponentsCard/index.esm.js').then(
|
|
72
|
+
(m) => compatWrapper(/* @__PURE__ */ React.createElement(m.HasSubcomponentsCard, { variant: "gridItem" }))
|
|
73
|
+
)
|
|
74
|
+
}
|
|
59
75
|
});
|
|
60
|
-
const catalogHasSubdomainsEntityCard =
|
|
76
|
+
const catalogHasSubdomainsEntityCard = EntityCardBlueprint.make({
|
|
61
77
|
name: "has-subdomains",
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
(
|
|
65
|
-
|
|
78
|
+
params: {
|
|
79
|
+
filter: "kind:domain",
|
|
80
|
+
loader: async () => import('../components/HasSubdomainsCard/index.esm.js').then(
|
|
81
|
+
(m) => compatWrapper(/* @__PURE__ */ React.createElement(m.HasSubdomainsCard, { variant: "gridItem" }))
|
|
82
|
+
)
|
|
83
|
+
}
|
|
66
84
|
});
|
|
67
|
-
const catalogHasSystemsEntityCard =
|
|
85
|
+
const catalogHasSystemsEntityCard = EntityCardBlueprint.make({
|
|
68
86
|
name: "has-systems",
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
(
|
|
72
|
-
|
|
87
|
+
params: {
|
|
88
|
+
filter: "kind:domain",
|
|
89
|
+
loader: async () => import('../components/HasSystemsCard/index.esm.js').then(
|
|
90
|
+
(m) => compatWrapper(/* @__PURE__ */ React.createElement(m.HasSystemsCard, { variant: "gridItem" }))
|
|
91
|
+
)
|
|
92
|
+
}
|
|
73
93
|
});
|
|
74
94
|
var entityCards = [
|
|
75
95
|
catalogAboutEntityCard,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entityCards.esm.js","sources":["../../src/alpha/entityCards.tsx"],"sourcesContent":["/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\nimport {
|
|
1
|
+
{"version":3,"file":"entityCards.esm.js","sources":["../../src/alpha/entityCards.tsx"],"sourcesContent":["/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\nimport { EntityCardBlueprint } from '@backstage/plugin-catalog-react/alpha';\nimport { compatWrapper } from '@backstage/core-compat-api';\n\nexport const catalogAboutEntityCard = EntityCardBlueprint.make({\n name: 'about',\n params: {\n loader: async () =>\n import('../components/AboutCard').then(m =>\n compatWrapper(<m.AboutCard variant=\"gridItem\" />),\n ),\n },\n});\n\nexport const catalogLinksEntityCard = EntityCardBlueprint.make({\n name: 'links',\n params: {\n filter: 'has:links',\n loader: async () =>\n import('../components/EntityLinksCard').then(m =>\n compatWrapper(<m.EntityLinksCard variant=\"gridItem\" />),\n ),\n },\n});\n\nexport const catalogLabelsEntityCard = EntityCardBlueprint.make({\n name: 'labels',\n params: {\n filter: 'has:labels',\n loader: async () =>\n import('../components/EntityLabelsCard').then(m =>\n compatWrapper(<m.EntityLabelsCard variant=\"gridItem\" />),\n ),\n },\n});\n\nexport const catalogDependsOnComponentsEntityCard = EntityCardBlueprint.make({\n name: 'depends-on-components',\n params: {\n filter: 'kind:component',\n loader: async () =>\n import('../components/DependsOnComponentsCard').then(m =>\n compatWrapper(<m.DependsOnComponentsCard variant=\"gridItem\" />),\n ),\n },\n});\n\nexport const catalogDependsOnResourcesEntityCard = EntityCardBlueprint.make({\n name: 'depends-on-resources',\n params: {\n filter: 'kind:component',\n loader: async () =>\n import('../components/DependsOnResourcesCard').then(m =>\n compatWrapper(<m.DependsOnResourcesCard variant=\"gridItem\" />),\n ),\n },\n});\n\nexport const catalogHasComponentsEntityCard = EntityCardBlueprint.make({\n name: 'has-components',\n params: {\n filter: 'kind:system',\n loader: async () =>\n import('../components/HasComponentsCard').then(m =>\n compatWrapper(<m.HasComponentsCard variant=\"gridItem\" />),\n ),\n },\n});\n\nexport const catalogHasResourcesEntityCard = EntityCardBlueprint.make({\n name: 'has-resources',\n params: {\n filter: 'kind:system',\n loader: async () =>\n import('../components/HasResourcesCard').then(m =>\n compatWrapper(<m.HasResourcesCard variant=\"gridItem\" />),\n ),\n },\n});\n\nexport const catalogHasSubcomponentsEntityCard = EntityCardBlueprint.make({\n name: 'has-subcomponents',\n params: {\n filter: 'kind:component',\n loader: async () =>\n import('../components/HasSubcomponentsCard').then(m =>\n compatWrapper(<m.HasSubcomponentsCard variant=\"gridItem\" />),\n ),\n },\n});\n\nexport const catalogHasSubdomainsEntityCard = EntityCardBlueprint.make({\n name: 'has-subdomains',\n params: {\n filter: 'kind:domain',\n loader: async () =>\n import('../components/HasSubdomainsCard').then(m =>\n compatWrapper(<m.HasSubdomainsCard variant=\"gridItem\" />),\n ),\n },\n});\n\nexport const catalogHasSystemsEntityCard = EntityCardBlueprint.make({\n name: 'has-systems',\n params: {\n filter: 'kind:domain',\n loader: async () =>\n import('../components/HasSystemsCard').then(m =>\n compatWrapper(<m.HasSystemsCard variant=\"gridItem\" />),\n ),\n },\n});\n\nexport default [\n catalogAboutEntityCard,\n catalogLinksEntityCard,\n catalogLabelsEntityCard,\n catalogDependsOnComponentsEntityCard,\n catalogDependsOnResourcesEntityCard,\n catalogHasComponentsEntityCard,\n catalogHasResourcesEntityCard,\n catalogHasSubcomponentsEntityCard,\n catalogHasSubdomainsEntityCard,\n catalogHasSystemsEntityCard,\n];\n"],"names":[],"mappings":"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"}
|
|
@@ -1,20 +1,36 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { createExtensionInput, coreExtensionData } from '@backstage/frontend-plugin-api';
|
|
3
|
-
import {
|
|
3
|
+
import { EntityContentBlueprint } from '@backstage/plugin-catalog-react/alpha';
|
|
4
4
|
|
|
5
|
-
const catalogOverviewEntityContent =
|
|
5
|
+
const catalogOverviewEntityContent = EntityContentBlueprint.makeWithOverrides({
|
|
6
6
|
name: "overview",
|
|
7
|
-
defaultPath: "/",
|
|
8
|
-
defaultTitle: "Overview",
|
|
9
|
-
disabled: false,
|
|
10
7
|
inputs: {
|
|
11
|
-
cards: createExtensionInput(
|
|
12
|
-
|
|
13
|
-
filterFunction
|
|
14
|
-
filterExpression
|
|
15
|
-
|
|
8
|
+
cards: createExtensionInput([
|
|
9
|
+
coreExtensionData.reactElement,
|
|
10
|
+
EntityContentBlueprint.dataRefs.filterFunction.optional(),
|
|
11
|
+
EntityContentBlueprint.dataRefs.filterExpression.optional()
|
|
12
|
+
])
|
|
16
13
|
},
|
|
17
|
-
|
|
14
|
+
factory: (originalFactory, { inputs }) => {
|
|
15
|
+
return originalFactory({
|
|
16
|
+
defaultPath: "/",
|
|
17
|
+
defaultTitle: "Overview",
|
|
18
|
+
loader: async () => import('./EntityOverviewPage.esm.js').then((m) => /* @__PURE__ */ React.createElement(
|
|
19
|
+
m.EntityOverviewPage,
|
|
20
|
+
{
|
|
21
|
+
cards: inputs.cards.map((c) => ({
|
|
22
|
+
element: c.get(coreExtensionData.reactElement),
|
|
23
|
+
filterFunction: c.get(
|
|
24
|
+
EntityContentBlueprint.dataRefs.filterFunction
|
|
25
|
+
),
|
|
26
|
+
filterExpression: c.get(
|
|
27
|
+
EntityContentBlueprint.dataRefs.filterExpression
|
|
28
|
+
)
|
|
29
|
+
}))
|
|
30
|
+
}
|
|
31
|
+
))
|
|
32
|
+
});
|
|
33
|
+
}
|
|
18
34
|
});
|
|
19
35
|
var entityContents = [catalogOverviewEntityContent];
|
|
20
36
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entityContents.esm.js","sources":["../../src/alpha/entityContents.tsx"],"sourcesContent":["/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\nimport {\n coreExtensionData,\n createExtensionInput,\n} from '@backstage/frontend-plugin-api';\nimport {
|
|
1
|
+
{"version":3,"file":"entityContents.esm.js","sources":["../../src/alpha/entityContents.tsx"],"sourcesContent":["/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\nimport {\n coreExtensionData,\n createExtensionInput,\n} from '@backstage/frontend-plugin-api';\nimport { EntityContentBlueprint } from '@backstage/plugin-catalog-react/alpha';\n\nexport const catalogOverviewEntityContent =\n EntityContentBlueprint.makeWithOverrides({\n name: 'overview',\n inputs: {\n cards: createExtensionInput([\n coreExtensionData.reactElement,\n EntityContentBlueprint.dataRefs.filterFunction.optional(),\n EntityContentBlueprint.dataRefs.filterExpression.optional(),\n ]),\n },\n factory: (originalFactory, { inputs }) => {\n return originalFactory({\n defaultPath: '/',\n defaultTitle: 'Overview',\n loader: async () =>\n import('./EntityOverviewPage').then(m => (\n <m.EntityOverviewPage\n cards={inputs.cards.map(c => ({\n element: c.get(coreExtensionData.reactElement),\n filterFunction: c.get(\n EntityContentBlueprint.dataRefs.filterFunction,\n ),\n filterExpression: c.get(\n EntityContentBlueprint.dataRefs.filterExpression,\n ),\n }))}\n />\n )),\n });\n },\n });\n\nexport default [catalogOverviewEntityContent];\n"],"names":[],"mappings":";;;;AAuBa,MAAA,4BAAA,GACX,uBAAuB,iBAAkB,CAAA;AAAA,EACvC,IAAM,EAAA,UAAA;AAAA,EACN,MAAQ,EAAA;AAAA,IACN,OAAO,oBAAqB,CAAA;AAAA,MAC1B,iBAAkB,CAAA,YAAA;AAAA,MAClB,sBAAA,CAAuB,QAAS,CAAA,cAAA,CAAe,QAAS,EAAA;AAAA,MACxD,sBAAA,CAAuB,QAAS,CAAA,gBAAA,CAAiB,QAAS,EAAA;AAAA,KAC3D,CAAA;AAAA,GACH;AAAA,EACA,OAAS,EAAA,CAAC,eAAiB,EAAA,EAAE,QAAa,KAAA;AACxC,IAAA,OAAO,eAAgB,CAAA;AAAA,MACrB,WAAa,EAAA,GAAA;AAAA,MACb,YAAc,EAAA,UAAA;AAAA,MACd,QAAQ,YACN,OAAO,6BAAsB,CAAA,CAAE,KAAK,CAClC,CAAA,qBAAA,KAAA,CAAA,aAAA;AAAA,QAAC,CAAE,CAAA,kBAAA;AAAA,QAAF;AAAA,UACC,KAAO,EAAA,MAAA,CAAO,KAAM,CAAA,GAAA,CAAI,CAAM,CAAA,MAAA;AAAA,YAC5B,OAAS,EAAA,CAAA,CAAE,GAAI,CAAA,iBAAA,CAAkB,YAAY,CAAA;AAAA,YAC7C,gBAAgB,CAAE,CAAA,GAAA;AAAA,cAChB,uBAAuB,QAAS,CAAA,cAAA;AAAA,aAClC;AAAA,YACA,kBAAkB,CAAE,CAAA,GAAA;AAAA,cAClB,uBAAuB,QAAS,CAAA,gBAAA;AAAA,aAClC;AAAA,WACA,CAAA,CAAA;AAAA,SAAA;AAAA,OAEL,CAAA;AAAA,KACJ,CAAA,CAAA;AAAA,GACH;AACF,CAAC,EAAA;AAEH,qBAAe,CAAC,4BAA4B,CAAA;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createHasMatcher.esm.js","sources":["../../../../src/alpha/filter/matchers/createHasMatcher.ts"],"sourcesContent":["/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { InputError } from '@backstage/errors';\nimport { EntityMatcherFn } from './types';\n\nconst allowedMatchers: Record<string, EntityMatcherFn> = {\n labels: entity => {\n return Object.keys(entity.metadata.labels ?? {}).length > 0;\n },\n links: entity => {\n return (entity.metadata.links ?? []).length > 0;\n },\n};\n\n/**\n * Matches on the non-empty presence of different parts of the entity\n */\nexport function createHasMatcher(\n parameters: string[],\n onParseError: (error: Error) => void,\n): EntityMatcherFn {\n const matchers = parameters.flatMap(parameter => {\n const matcher = allowedMatchers[parameter.toLocaleLowerCase('en-US')];\n if (!matcher) {\n const known = Object.keys(allowedMatchers).map(m => `'${m}'`);\n onParseError(\n new InputError(\n `'${parameter}' is not a valid parameter for 'has' filter expressions, expected one of ${known}`,\n ),\n );\n return [];\n }\n return [matcher];\n });\n\n return entity =>\n matchers.length ? matchers.some(matcher => matcher(entity)) : true;\n}\n"],"names":[],"mappings":";;AAmBA,MAAM,eAAmD,GAAA;AAAA,EACvD,QAAQ,CAAU,MAAA,KAAA;AAChB,IAAO,OAAA,MAAA,CAAO,KAAK,MAAO,CAAA,QAAA,CAAS,UAAU,EAAE,EAAE,MAAS,GAAA,CAAA,CAAA;AAAA,GAC5D;AAAA,EACA,OAAO,CAAU,MAAA,KAAA;AACf,IAAA,OAAA,CAAQ,MAAO,CAAA,QAAA,CAAS,KAAS,IAAA,IAAI,MAAS,GAAA,CAAA,CAAA;AAAA,GAChD;AACF,CAAA,CAAA;AAKgB,SAAA,gBAAA,CACd,YACA,YACiB,EAAA;AACjB,EAAM,MAAA,QAAA,GAAW,UAAW,CAAA,OAAA,CAAQ,CAAa,SAAA,KAAA;AAC/C,IAAA,MAAM,OAAU,GAAA,eAAA,CAAgB,SAAU,CAAA,iBAAA,CAAkB,OAAO,CAAC,CAAA,CAAA;AACpE,IAAA,IAAI,CAAC,OAAS,EAAA;AACZ,MAAM,MAAA,KAAA,GAAQ,OAAO,IAAK,CAAA,eAAe,EAAE,GAAI,CAAA,CAAA,CAAA,KAAK,CAAI,CAAA,EAAA,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA;AAC5D,MAAA,YAAA;AAAA,QACE,IAAI,UAAA;AAAA,UACF,CAAA,CAAA,EAAI,SAAS,CAAA,yEAAA,EAA4E,KAAK,CAAA,CAAA;AAAA,SAChG;AAAA,OACF,CAAA;AACA,MAAA,OAAO,EAAC,CAAA;AAAA,KACV;AACA,IAAA,OAAO,CAAC,OAAO,CAAA,CAAA;AAAA,GAChB,CAAA,CAAA;AAED,EAAO,OAAA,CAAA,MAAA,KACL,SAAS,MAAS,GAAA,QAAA,CAAS,KAAK,CAAW,OAAA,KAAA,OAAA,CAAQ,MAAM,CAAC,CAAI,GAAA,IAAA,CAAA;AAClE;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createIsMatcher.esm.js","sources":["../../../../src/alpha/filter/matchers/createIsMatcher.ts"],"sourcesContent":["/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { InputError } from '@backstage/errors';\nimport { EntityMatcherFn } from './types';\n\nconst allowedMatchers: Record<string, EntityMatcherFn> = {\n orphan: entity =>\n Boolean(entity.metadata.annotations?.['backstage.io/orphan']),\n};\n\n/**\n * Matches on different semantic properties of the entity\n */\nexport function createIsMatcher(\n parameters: string[],\n onParseError: (error: Error) => void,\n): EntityMatcherFn {\n const matchers = parameters.flatMap(parameter => {\n const matcher = allowedMatchers[parameter.toLocaleLowerCase('en-US')];\n if (!matcher) {\n const known = Object.keys(allowedMatchers).map(m => `'${m}'`);\n onParseError(\n new InputError(\n `'${parameter}' is not a valid parameter for 'is' filter expressions, expected one of ${known}`,\n ),\n );\n return [];\n }\n return [matcher];\n });\n\n return entity =>\n matchers.length ? matchers.some(matcher => matcher(entity)) : true;\n}\n"],"names":[],"mappings":";;AAmBA,MAAM,eAAmD,GAAA;AAAA,EACvD,QAAQ,CACN,MAAA,KAAA,OAAA,CAAQ,OAAO,QAAS,CAAA,WAAA,GAAc,qBAAqB,CAAC,CAAA;AAChE,CAAA,CAAA;AAKgB,SAAA,eAAA,CACd,YACA,YACiB,EAAA;AACjB,EAAM,MAAA,QAAA,GAAW,UAAW,CAAA,OAAA,CAAQ,CAAa,SAAA,KAAA;AAC/C,IAAA,MAAM,OAAU,GAAA,eAAA,CAAgB,SAAU,CAAA,iBAAA,CAAkB,OAAO,CAAC,CAAA,CAAA;AACpE,IAAA,IAAI,CAAC,OAAS,EAAA;AACZ,MAAM,MAAA,KAAA,GAAQ,OAAO,IAAK,CAAA,eAAe,EAAE,GAAI,CAAA,CAAA,CAAA,KAAK,CAAI,CAAA,EAAA,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA;AAC5D,MAAA,YAAA;AAAA,QACE,IAAI,UAAA;AAAA,UACF,CAAA,CAAA,EAAI,SAAS,CAAA,wEAAA,EAA2E,KAAK,CAAA,CAAA;AAAA,SAC/F;AAAA,OACF,CAAA;AACA,MAAA,OAAO,EAAC,CAAA;AAAA,KACV;AACA,IAAA,OAAO,CAAC,OAAO,CAAA,CAAA;AAAA,GAChB,CAAA,CAAA;AAED,EAAO,OAAA,CAAA,MAAA,KACL,SAAS,MAAS,GAAA,QAAA,CAAS,KAAK,CAAW,OAAA,KAAA,OAAA,CAAQ,MAAM,CAAC,CAAI,GAAA,IAAA,CAAA;AAClE;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createKindMatcher.esm.js","sources":["../../../../src/alpha/filter/matchers/createKindMatcher.ts"],"sourcesContent":["/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { EntityMatcherFn } from './types';\n\n/**\n * Matches on kind\n */\nexport function createKindMatcher(\n parameters: string[],\n _onParseError: (error: Error) => void,\n): EntityMatcherFn {\n const items = parameters.map(p => p.toLocaleLowerCase('en-US'));\n return entity => items.includes(entity.kind.toLocaleLowerCase('en-US'));\n}\n"],"names":[],"mappings":"AAqBgB,SAAA,iBAAA,CACd,YACA,aACiB,EAAA;AACjB,EAAA,MAAM,QAAQ,UAAW,CAAA,GAAA,CAAI,OAAK,CAAE,CAAA,iBAAA,CAAkB,OAAO,CAAC,CAAA,CAAA;AAC9D,EAAA,OAAO,YAAU,KAAM,CAAA,QAAA,CAAS,OAAO,IAAK,CAAA,iBAAA,CAAkB,OAAO,CAAC,CAAA,CAAA;AACxE;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createTypeMatcher.esm.js","sources":["../../../../src/alpha/filter/matchers/createTypeMatcher.ts"],"sourcesContent":["/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { EntityMatcherFn } from './types';\n\n/**\n * Matches on spec.type\n */\nexport function createTypeMatcher(\n parameters: string[],\n _onParseError: (error: Error) => void,\n): EntityMatcherFn {\n const items = parameters.map(p => p.toLocaleLowerCase('en-US'));\n return entity => {\n const value = entity.spec?.type;\n return (\n typeof value === 'string' &&\n items.includes(value.toLocaleLowerCase('en-US'))\n );\n };\n}\n"],"names":[],"mappings":"AAqBgB,SAAA,iBAAA,CACd,YACA,aACiB,EAAA;AACjB,EAAA,MAAM,QAAQ,UAAW,CAAA,GAAA,CAAI,OAAK,CAAE,CAAA,iBAAA,CAAkB,OAAO,CAAC,CAAA,CAAA;AAC9D,EAAA,OAAO,CAAU,MAAA,KAAA;AACf,IAAM,MAAA,KAAA,GAAQ,OAAO,IAAM,EAAA,IAAA,CAAA;AAC3B,IACE,OAAA,OAAO,UAAU,QACjB,IAAA,KAAA,CAAM,SAAS,KAAM,CAAA,iBAAA,CAAkB,OAAO,CAAC,CAAA,CAAA;AAAA,GAEnD,CAAA;AACF;;;;"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { InputError } from '@backstage/errors';
|
|
2
|
-
import { createKindMatcher } from './
|
|
3
|
-
import { createTypeMatcher } from './
|
|
4
|
-
import { createIsMatcher } from './
|
|
5
|
-
import { createHasMatcher } from './
|
|
2
|
+
import { createKindMatcher } from './matchers/createKindMatcher.esm.js';
|
|
3
|
+
import { createTypeMatcher } from './matchers/createTypeMatcher.esm.js';
|
|
4
|
+
import { createIsMatcher } from './matchers/createIsMatcher.esm.js';
|
|
5
|
+
import { createHasMatcher } from './matchers/createHasMatcher.esm.js';
|
|
6
6
|
|
|
7
7
|
const rootMatcherFactories = {
|
|
8
8
|
kind: createKindMatcher,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parseFilterExpression.esm.js","sources":["../../../src/alpha/filter/parseFilterExpression.ts"],"sourcesContent":["/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Entity } from '@backstage/catalog-model';\nimport { InputError } from '@backstage/errors';\nimport { EntityMatcherFn } from './
|
|
1
|
+
{"version":3,"file":"parseFilterExpression.esm.js","sources":["../../../src/alpha/filter/parseFilterExpression.ts"],"sourcesContent":["/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Entity } from '@backstage/catalog-model';\nimport { InputError } from '@backstage/errors';\nimport { EntityMatcherFn } from './matchers/types';\nimport { createKindMatcher } from './matchers/createKindMatcher';\nimport { createTypeMatcher } from './matchers/createTypeMatcher';\nimport { createIsMatcher } from './matchers/createIsMatcher';\nimport { createHasMatcher } from './matchers/createHasMatcher';\n\nconst rootMatcherFactories: Record<\n string,\n (\n parameters: string[],\n onParseError: (error: Error) => void,\n ) => EntityMatcherFn\n> = {\n kind: createKindMatcher,\n type: createTypeMatcher,\n is: createIsMatcher,\n has: createHasMatcher,\n};\n\n/**\n * Parses a filter expression that decides whether to render an entity component\n * or not. Returns a function that matches entities based on that expression.\n *\n * @remarks\n *\n * Filter strings are on the form `kind:user,group is:orphan`. There's\n * effectively an AND between the space separated parts, and an OR between comma\n * separated parameters. So the example filter string semantically means\n * \"entities that are of either User or Group kind, and also are orphans\".\n *\n * The `expressionParseErrors` array contains any errors that were encountered\n * during initial parsing of the expression. Note that the parts of the input\n * expression that had errors are ignored entirely and parsing continues as if\n * they didn't exist.\n */\nexport function parseFilterExpression(expression: string): {\n filterFn: (entity: Entity) => boolean;\n expressionParseErrors: Error[];\n} {\n const expressionParseErrors: Error[] = [];\n\n const parts = splitFilterExpression(expression, e =>\n expressionParseErrors.push(e),\n );\n\n const matchers = parts.flatMap(part => {\n const factory = rootMatcherFactories[part.key];\n if (!factory) {\n const known = Object.keys(rootMatcherFactories).map(m => `'${m}'`);\n expressionParseErrors.push(\n new InputError(\n `'${part.key}' is not a valid filter expression key, expected one of ${known}`,\n ),\n );\n return [];\n }\n\n const matcher = factory(part.parameters, e =>\n expressionParseErrors.push(e),\n );\n return [matcher];\n });\n\n const filterFn = (entity: Entity) =>\n matchers.every(matcher => {\n try {\n return matcher(entity);\n } catch {\n return false;\n }\n });\n\n return {\n filterFn,\n expressionParseErrors,\n };\n}\n\nexport function splitFilterExpression(\n expression: string,\n onParseError: (error: Error) => void,\n): Array<{ key: string; parameters: string[] }> {\n const words = expression\n .split(' ')\n .map(w => w.trim())\n .filter(Boolean);\n\n const result = new Array<{ key: string; parameters: string[] }>();\n\n for (const word of words) {\n const match = word.match(/^([^:]+):(.+)$/);\n if (!match) {\n onParseError(\n new InputError(\n `'${word}' is not a valid filter expression, expected 'key:parameter' form`,\n ),\n );\n continue;\n }\n\n const key = match[1];\n const parameters = match[2].split(',').filter(Boolean); // silently ignore double commas\n\n result.push({ key, parameters });\n }\n\n return result;\n}\n"],"names":[],"mappings":";;;;;;AAwBA,MAAM,oBAMF,GAAA;AAAA,EACF,IAAM,EAAA,iBAAA;AAAA,EACN,IAAM,EAAA,iBAAA;AAAA,EACN,EAAI,EAAA,eAAA;AAAA,EACJ,GAAK,EAAA,gBAAA;AACP,CAAA,CAAA;AAkBO,SAAS,sBAAsB,UAGpC,EAAA;AACA,EAAA,MAAM,wBAAiC,EAAC,CAAA;AAExC,EAAA,MAAM,KAAQ,GAAA,qBAAA;AAAA,IAAsB,UAAA;AAAA,IAAY,CAAA,CAAA,KAC9C,qBAAsB,CAAA,IAAA,CAAK,CAAC,CAAA;AAAA,GAC9B,CAAA;AAEA,EAAM,MAAA,QAAA,GAAW,KAAM,CAAA,OAAA,CAAQ,CAAQ,IAAA,KAAA;AACrC,IAAM,MAAA,OAAA,GAAU,oBAAqB,CAAA,IAAA,CAAK,GAAG,CAAA,CAAA;AAC7C,IAAA,IAAI,CAAC,OAAS,EAAA;AACZ,MAAM,MAAA,KAAA,GAAQ,OAAO,IAAK,CAAA,oBAAoB,EAAE,GAAI,CAAA,CAAA,CAAA,KAAK,CAAI,CAAA,EAAA,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA;AACjE,MAAsB,qBAAA,CAAA,IAAA;AAAA,QACpB,IAAI,UAAA;AAAA,UACF,CAAI,CAAA,EAAA,IAAA,CAAK,GAAG,CAAA,wDAAA,EAA2D,KAAK,CAAA,CAAA;AAAA,SAC9E;AAAA,OACF,CAAA;AACA,MAAA,OAAO,EAAC,CAAA;AAAA,KACV;AAEA,IAAA,MAAM,OAAU,GAAA,OAAA;AAAA,MAAQ,IAAK,CAAA,UAAA;AAAA,MAAY,CAAA,CAAA,KACvC,qBAAsB,CAAA,IAAA,CAAK,CAAC,CAAA;AAAA,KAC9B,CAAA;AACA,IAAA,OAAO,CAAC,OAAO,CAAA,CAAA;AAAA,GAChB,CAAA,CAAA;AAED,EAAA,MAAM,QAAW,GAAA,CAAC,MAChB,KAAA,QAAA,CAAS,MAAM,CAAW,OAAA,KAAA;AACxB,IAAI,IAAA;AACF,MAAA,OAAO,QAAQ,MAAM,CAAA,CAAA;AAAA,KACf,CAAA,MAAA;AACN,MAAO,OAAA,KAAA,CAAA;AAAA,KACT;AAAA,GACD,CAAA,CAAA;AAEH,EAAO,OAAA;AAAA,IACL,QAAA;AAAA,IACA,qBAAA;AAAA,GACF,CAAA;AACF,CAAA;AAEgB,SAAA,qBAAA,CACd,YACA,YAC8C,EAAA;AAC9C,EAAA,MAAM,KAAQ,GAAA,UAAA,CACX,KAAM,CAAA,GAAG,CACT,CAAA,GAAA,CAAI,CAAK,CAAA,KAAA,CAAA,CAAE,IAAK,EAAC,CACjB,CAAA,MAAA,CAAO,OAAO,CAAA,CAAA;AAEjB,EAAM,MAAA,MAAA,GAAS,IAAI,KAA6C,EAAA,CAAA;AAEhE,EAAA,KAAA,MAAW,QAAQ,KAAO,EAAA;AACxB,IAAM,MAAA,KAAA,GAAQ,IAAK,CAAA,KAAA,CAAM,gBAAgB,CAAA,CAAA;AACzC,IAAA,IAAI,CAAC,KAAO,EAAA;AACV,MAAA,YAAA;AAAA,QACE,IAAI,UAAA;AAAA,UACF,IAAI,IAAI,CAAA,iEAAA,CAAA;AAAA,SACV;AAAA,OACF,CAAA;AACA,MAAA,SAAA;AAAA,KACF;AAEA,IAAM,MAAA,GAAA,GAAM,MAAM,CAAC,CAAA,CAAA;AACnB,IAAM,MAAA,UAAA,GAAa,MAAM,CAAC,CAAA,CAAE,MAAM,GAAG,CAAA,CAAE,OAAO,OAAO,CAAA,CAAA;AAErD,IAAA,MAAA,CAAO,IAAK,CAAA,EAAE,GAAK,EAAA,UAAA,EAAY,CAAA,CAAA;AAAA,GACjC;AAEA,EAAO,OAAA,MAAA,CAAA;AACT;;;;"}
|