add field validators

Signed-off-by: Aramis <sennyeyaramis@gmail.com>
This commit is contained in:
Aramis
2024-02-02 16:42:39 -05:00
committed by aramissennyeydd
parent 0aba8f018e
commit 447d8b6fcf
2 changed files with 22 additions and 20 deletions
@@ -17,7 +17,7 @@ import {
createBackendPlugin,
coreServices,
} from '@backstage/backend-plugin-api';
import { Entity, EntityPolicy } from '@backstage/catalog-model';
import { Entity, EntityPolicy, Validators } from '@backstage/catalog-model';
import { CatalogBuilder, CatalogPermissionRuleInput } from './CatalogBuilder';
import {
CatalogAnalysisExtensionPoint,
@@ -36,6 +36,7 @@ import {
ScmLocationAnalyzer,
} from '@backstage/plugin-catalog-node';
import { loggerToWinstonLogger } from '@backstage/backend-common';
import { merge } from 'lodash';
class CatalogProcessingExtensionPointImpl
implements CatalogProcessingExtensionPoint
@@ -128,28 +129,22 @@ class CatalogPermissionExtensionPointImpl
class CatalogModelExtensionPointImpl implements CatalogModelExtensionPoint {
#entityPolicies = new Array<EntityPolicy>();
#replaced = false;
#fieldValidators: Partial<Validators> = {};
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;
setFieldValidators(validators: Partial<Validators>): void {
merge(this.#fieldValidators, validators);
}
get entityPolicies() {
return this.#entityPolicies;
}
get replaced() {
return this.#replaced;
get fieldValidators() {
return this.#fieldValidators;
}
}
@@ -224,12 +219,8 @@ export const catalogPlugin = createBackendPlugin({
);
builder.addLocationAnalyzers(...analysisExtensions.locationAnalyzers);
builder.addPermissionRules(...permissionExtensions.permissionRules);
if (modelExtensions.replaced) {
builder.replaceEntityPolicies(modelExtensions.entityPolicies);
} else {
builder.addEntityPolicy(...modelExtensions.entityPolicies);
}
builder.addEntityPolicy(...modelExtensions.entityPolicies);
builder.setFieldFormatValidators(modelExtensions.fieldValidators);
const { processingEngine, router } = await builder.build();
+13 -2
View File
@@ -15,7 +15,7 @@
*/
import { createExtensionPoint } from '@backstage/backend-plugin-api';
import { Entity, EntityPolicy } from '@backstage/catalog-model';
import { Entity, EntityPolicy, Validators } from '@backstage/catalog-model';
import {
CatalogProcessor,
EntitiesSearchFilter,
@@ -47,11 +47,22 @@ export interface CatalogProcessingExtensionPoint {
/** @alpha */
export interface CatalogModelExtensionPoint {
/**
* @deprecated Use `policyToProcessorTransformer` from `@backstage/plugin-catalog-backend`
* and `CatalogProcessingExtensionPoint.addProcessor` instead.
*/
addEntityPolicies(
...policies: Array<EntityPolicy | Array<EntityPolicy>>
): void;
replaceEntityPolicies(...policies: Array<EntityPolicy>): void;
/**
* Sets the validator function to use for one or more special fields of an
* entity. This is useful if the default rules for formatting of fields are
* not sufficient.
*
* @param validators - The (subset of) validators to set
*/
setFieldValidators(validators: Partial<Validators>): void;
}
/**