update to a separate catalog extension and add support for replacing
Signed-off-by: Aramis <sennyeyaramis@gmail.com>
This commit is contained in:
@@ -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();
|
||||
|
||||
Generated
+14
@@ -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)
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user