update to a separate catalog extension and add support for replacing

Signed-off-by: Aramis <sennyeyaramis@gmail.com>
This commit is contained in:
Aramis
2024-01-30 10:59:28 -05:00
committed by aramissennyeydd
parent d8a54d0a83
commit 31392e59b8
4 changed files with 71 additions and 2 deletions
@@ -17,7 +17,7 @@ import {
createBackendPlugin,
coreServices,
} from '@backstage/backend-plugin-api';
import { Entity } from '@backstage/catalog-model';
import { Entity, EntityPolicy } from '@backstage/catalog-model';
import { CatalogBuilder, CatalogPermissionRuleInput } from './CatalogBuilder';
import {
CatalogAnalysisExtensionPoint,
@@ -26,6 +26,8 @@ import {
catalogProcessingExtensionPoint,
CatalogPermissionExtensionPoint,
catalogPermissionExtensionPoint,
CatalogModelExtensionPoint,
catalogModelExtensionPoint,
} from '@backstage/plugin-catalog-node/alpha';
import {
CatalogProcessor,
@@ -124,6 +126,33 @@ class CatalogPermissionExtensionPointImpl
}
}
class CatalogModelExtensionPointImpl implements CatalogModelExtensionPoint {
#entityPolicies = new Array<EntityPolicy>();
#replaced = false;
addEntityPolicies(...policies: Array<EntityPolicy | Array<EntityPolicy>>) {
this.#entityPolicies.push(...policies.flat());
}
replaceEntityPolicies(...policies: Array<EntityPolicy>) {
if (this.#replaced) {
throw new Error(
`You've already replaced the entity policies. If you want to add more entity policies, see 'addEntityPolicies'.`,
);
}
this.#entityPolicies = [...policies];
this.#replaced = true;
}
get entityPolicies() {
return this.#entityPolicies;
}
get replaced() {
return this.#replaced;
}
}
/**
* Catalog plugin
* @alpha
@@ -150,6 +179,9 @@ export const catalogPlugin = createBackendPlugin({
permissionExtensions,
);
const modelExtensions = new CatalogModelExtensionPointImpl();
env.registerExtensionPoint(catalogModelExtensionPoint, modelExtensions);
env.registerInit({
deps: {
logger: coreServices.logger,
@@ -193,6 +225,12 @@ export const catalogPlugin = createBackendPlugin({
builder.addLocationAnalyzers(...analysisExtensions.locationAnalyzers);
builder.addPermissionRules(...permissionExtensions.permissionRules);
if (modelExtensions.replaced) {
builder.replaceEntityPolicies(modelExtensions.entityPolicies);
} else {
builder.addEntityPolicy(...modelExtensions.entityPolicies);
}
const { processingEngine, router } = await builder.build();
await processingEngine.start();
+14
View File
@@ -7,6 +7,7 @@ import { CatalogApi } from '@backstage/catalog-client';
import { CatalogProcessor } from '@backstage/plugin-catalog-node';
import { EntitiesSearchFilter } from '@backstage/plugin-catalog-node';
import { Entity } from '@backstage/catalog-model';
import { EntityPolicy } from '@backstage/catalog-model';
import { EntityProvider } from '@backstage/plugin-catalog-node';
import { ExtensionPoint } from '@backstage/backend-plugin-api';
import { PermissionRule } from '@backstage/plugin-permission-node';
@@ -24,6 +25,19 @@ export interface CatalogAnalysisExtensionPoint {
// @alpha (undocumented)
export const catalogAnalysisExtensionPoint: ExtensionPoint<CatalogAnalysisExtensionPoint>;
// @alpha (undocumented)
export interface CatalogModelExtensionPoint {
// (undocumented)
addEntityPolicies(
...policies: Array<EntityPolicy | Array<EntityPolicy>>
): void;
// (undocumented)
replaceEntityPolicies(...policies: Array<EntityPolicy>): void;
}
// @alpha (undocumented)
export const catalogModelExtensionPoint: ExtensionPoint<CatalogModelExtensionPoint>;
// @alpha (undocumented)
export interface CatalogPermissionExtensionPoint {
// (undocumented)
+2
View File
@@ -22,3 +22,5 @@ export { catalogAnalysisExtensionPoint } from './extensions';
export type { CatalogPermissionRuleInput } from './extensions';
export type { CatalogPermissionExtensionPoint } from './extensions';
export { catalogPermissionExtensionPoint } from './extensions';
export type { CatalogModelExtensionPoint } from './extensions';
export { catalogModelExtensionPoint } from './extensions';
+16 -1
View File
@@ -15,7 +15,7 @@
*/
import { createExtensionPoint } from '@backstage/backend-plugin-api';
import { Entity } from '@backstage/catalog-model';
import { Entity, EntityPolicy } from '@backstage/catalog-model';
import {
CatalogProcessor,
EntitiesSearchFilter,
@@ -45,6 +45,15 @@ export interface CatalogProcessingExtensionPoint {
): void;
}
/** @alpha */
export interface CatalogModelExtensionPoint {
addEntityPolicies(
...policies: Array<EntityPolicy | Array<EntityPolicy>>
): void;
replaceEntityPolicies(...policies: Array<EntityPolicy>): void;
}
/**
* @alpha
*/
@@ -68,6 +77,12 @@ export const catalogAnalysisExtensionPoint =
id: 'catalog.analysis',
});
/** @alpha */
export const catalogModelExtensionPoint =
createExtensionPoint<CatalogModelExtensionPoint>({
id: 'catalog.model',
});
/**
* @alpha
*/