+1
-1
@@ -196,7 +196,7 @@ describe('DefaultTechDocsCollatorFactory', () => {
|
||||
it('should filter catalog entities when a custom filter is set', async () => {
|
||||
factory = DefaultTechDocsCollatorFactory.fromConfig(config, {
|
||||
...options,
|
||||
entityFilter: entities =>
|
||||
entityFilterFunction: entities =>
|
||||
entities.filter(entity => entity.kind !== 'Component'),
|
||||
});
|
||||
collator = await factory.getCollator();
|
||||
|
||||
+10
-5
@@ -22,6 +22,7 @@ import {
|
||||
CATALOG_FILTER_EXISTS,
|
||||
CatalogApi,
|
||||
CatalogClient,
|
||||
EntityFilterQuery,
|
||||
} from '@backstage/catalog-client';
|
||||
import {
|
||||
Entity,
|
||||
@@ -68,7 +69,8 @@ export type TechDocsCollatorFactoryOptions = {
|
||||
legacyPathCasing?: boolean;
|
||||
entityTransformer?: TechDocsCollatorEntityTransformer;
|
||||
documentTransformer?: TechDocsCollatorDocumentTransformer;
|
||||
entityFilter?: (entity: Entity[]) => Entity[];
|
||||
entityFilterFunction?: (entity: Entity[]) => Entity[];
|
||||
customCatalogApiFilters?: EntityFilterQuery;
|
||||
};
|
||||
|
||||
type EntityInfo = {
|
||||
@@ -98,7 +100,8 @@ export class DefaultTechDocsCollatorFactory implements DocumentCollatorFactory {
|
||||
private readonly legacyPathCasing: boolean;
|
||||
private entityTransformer: TechDocsCollatorEntityTransformer;
|
||||
private documentTransformer: TechDocsCollatorDocumentTransformer;
|
||||
private entityFilter: Function | undefined;
|
||||
private entityFilterFunction: Function | undefined;
|
||||
private customCatalogApiFilters: EntityFilterQuery | undefined;
|
||||
|
||||
private constructor(options: TechDocsCollatorFactoryOptions) {
|
||||
this.discovery = options.discovery;
|
||||
@@ -112,7 +115,8 @@ export class DefaultTechDocsCollatorFactory implements DocumentCollatorFactory {
|
||||
this.legacyPathCasing = options.legacyPathCasing ?? false;
|
||||
this.entityTransformer = options.entityTransformer ?? (() => ({}));
|
||||
this.documentTransformer = options.documentTransformer ?? (() => ({}));
|
||||
this.entityFilter = options.entityFilter;
|
||||
this.entityFilterFunction = options.entityFilterFunction;
|
||||
this.customCatalogApiFilters = options.customCatalogApiFilters;
|
||||
|
||||
this.auth = createLegacyAuthAdapters({
|
||||
auth: options.auth,
|
||||
@@ -168,6 +172,7 @@ export class DefaultTechDocsCollatorFactory implements DocumentCollatorFactory {
|
||||
filter: {
|
||||
'metadata.annotations.backstage.io/techdocs-ref':
|
||||
CATALOG_FILTER_EXISTS,
|
||||
...this.customCatalogApiFilters,
|
||||
},
|
||||
limit: batchSize,
|
||||
offset: entitiesRetrieved,
|
||||
@@ -180,8 +185,8 @@ export class DefaultTechDocsCollatorFactory implements DocumentCollatorFactory {
|
||||
moreEntitiesToGet = entities.length === batchSize;
|
||||
entitiesRetrieved += entities.length;
|
||||
|
||||
const filteredEntities = this.entityFilter
|
||||
? this.entityFilter(entities)
|
||||
const filteredEntities = this.entityFilterFunction
|
||||
? this.entityFilterFunction(entities)
|
||||
: this.defaultFilteringFunction(entities);
|
||||
|
||||
const docPromises = filteredEntities.map((entity: Entity) =>
|
||||
|
||||
@@ -25,6 +25,7 @@ import {
|
||||
createExtensionPoint,
|
||||
readSchedulerServiceTaskScheduleDefinitionFromConfig,
|
||||
} from '@backstage/backend-plugin-api';
|
||||
import { EntityFilterQuery } from '@backstage/catalog-client';
|
||||
import { Entity } from '@backstage/catalog-model';
|
||||
import { catalogServiceRef } from '@backstage/plugin-catalog-node/alpha';
|
||||
import {
|
||||
@@ -54,7 +55,10 @@ export const techdocsCollatorEntityTransformerExtensionPoint =
|
||||
|
||||
/** @public */
|
||||
export interface TechDocsCollatorEntityFilterExtensionPoint {
|
||||
setEntityFilter(filterFunction: (entities: Entity[]) => Entity[]): void;
|
||||
setEntityFilterFunction(
|
||||
filterFunction: (entities: Entity[]) => Entity[],
|
||||
): void;
|
||||
setCustomCatalogApiFilters(apiFilters: EntityFilterQuery): void;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -77,7 +81,8 @@ export default createBackendModule({
|
||||
register(env) {
|
||||
let entityTransformer: TechDocsCollatorEntityTransformer | undefined;
|
||||
let documentTransformer: TechDocsCollatorDocumentTransformer | undefined;
|
||||
let entityFilter: ((e: Entity[]) => Entity[]) | undefined;
|
||||
let entityFilterFunction: ((e: Entity[]) => Entity[]) | undefined;
|
||||
let customCatalogApiFilters: EntityFilterQuery | undefined;
|
||||
|
||||
env.registerExtensionPoint(
|
||||
techdocsCollatorEntityTransformerExtensionPoint,
|
||||
@@ -102,11 +107,21 @@ export default createBackendModule({
|
||||
);
|
||||
|
||||
env.registerExtensionPoint(techDocsCollatorEntityFilterExtensionPoint, {
|
||||
setEntityFilter(newEntityFilter) {
|
||||
if (entityFilter) {
|
||||
throw new Error('TechDocs entity filters may only be set once');
|
||||
setEntityFilterFunction(newEntityFilterFunction) {
|
||||
if (entityFilterFunction) {
|
||||
throw new Error(
|
||||
'TechDocs entity filter functions may only be set once',
|
||||
);
|
||||
}
|
||||
entityFilter = newEntityFilter;
|
||||
entityFilterFunction = newEntityFilterFunction;
|
||||
},
|
||||
setCustomCatalogApiFilters(newCatalogApiFilters) {
|
||||
if (customCatalogApiFilters) {
|
||||
throw new Error(
|
||||
'TechDocs catalog entity filters may only be set once',
|
||||
);
|
||||
}
|
||||
customCatalogApiFilters = newCatalogApiFilters;
|
||||
},
|
||||
});
|
||||
|
||||
@@ -153,7 +168,8 @@ export default createBackendModule({
|
||||
catalogClient: catalog,
|
||||
entityTransformer,
|
||||
documentTransformer,
|
||||
entityFilter,
|
||||
customCatalogApiFilters,
|
||||
entityFilterFunction,
|
||||
}),
|
||||
});
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user