refactor to use partials

Signed-off-by: Alex Eftimie <alex.eftimie@getyourguide.com>
This commit is contained in:
Alex Eftimie
2024-09-04 17:45:01 +02:00
parent 07a7fc2cf5
commit 98be1a602a
6 changed files with 73 additions and 21 deletions
+11 -1
View File
@@ -86,17 +86,27 @@ const techDocsEntityTransformer: TechDocsCollatorEntityTransformer = (
) => {
return {
// add more fields to the index
...defaultTechDocsCollatorEntityTransformer(entity),
tags: entity.metadata.tags,
};
};
const techDocsDocumentTransformer: TechDocsCollatorDocumentTransformer = (
doc: MkSearchIndexDoc,
) => {
return {
// add more fields to the index
bost: doc.boost,
};
};
indexBuilder.addCollator({
collator: DefaultTechDocsCollatorFactory.fromConfig(env.config, {
discovery: env.discovery,
tokenManager: env.tokenManager,
/* highlight-add-next-line */
entityTransformer: techDocsEntityTransformer,
/* highlight-add-next-line */
documentTransformer: techDocsDocumentTransformer,
}),
});
```
@@ -24,9 +24,12 @@ import { rest } from 'msw';
import { setupServer } from 'msw/node';
import { Readable } from 'stream';
import { DefaultTechDocsCollatorFactory } from './DefaultTechDocsCollatorFactory';
import { defaultTechDocsCollatorEntityTransformer } from './defaultTechDocsCollatorEntityTransformer';
import { TechDocsCollatorEntityTransformer } from './TechDocsCollatorEntityTransformer';
import { DiscoveryService } from '@backstage/backend-plugin-api';
import {
MkSearchIndexDoc,
TechDocsCollatorDocumentTransformer,
} from './TechDocsCollatorDocumentTransformer';
const logger = mockServices.logger.mock();
@@ -254,11 +257,11 @@ describe('DefaultTechDocsCollatorFactory', () => {
});
it('should transform the entity using the entityTransformer function', async () => {
// @ts-ignore
const entityTransformer: TechDocsCollatorEntityTransformer = (
entity: Entity,
) => {
return {
...defaultTechDocsCollatorEntityTransformer(entity),
tags: entity.metadata.tags,
};
};
@@ -289,5 +292,42 @@ describe('DefaultTechDocsCollatorFactory', () => {
});
});
});
it('should transform the doc using the documentTransformer function', async () => {
// @ts-ignore
const documentTransformer: TechDocsCollatorDocumentTransformer = (
_: MkSearchIndexDoc,
) => {
return {
tags: ['static-tag'],
};
};
factory = DefaultTechDocsCollatorFactory.fromConfig(config, {
...options,
documentTransformer,
});
collator = await factory.getCollator();
const pipeline = TestPipeline.fromCollator(collator);
const { documents } = await pipeline.execute();
const entity = expectedEntities[0];
documents.forEach((document, idx) => {
expect(document).toMatchObject({
title: mockSearchDocIndex.docs[idx].title,
location: `/docs/default/component/${entity.metadata.name}/${mockSearchDocIndex.docs[idx].location}`,
text: mockSearchDocIndex.docs[idx].text,
namespace: 'default',
entityTitle: entity!.metadata.title,
componentType: entity!.spec!.type,
lifecycle: entity!.spec!.lifecycle,
owner: '',
kind: entity.kind.toLocaleLowerCase('en-US'),
name: entity.metadata.name,
tags: ['static-tag'],
});
});
});
});
});
@@ -109,10 +109,10 @@ export class DefaultTechDocsCollatorFactory implements DocumentCollatorFactory {
new CatalogClient({ discoveryApi: options.discovery });
this.parallelismLimit = options.parallelismLimit ?? 10;
this.legacyPathCasing = options.legacyPathCasing ?? false;
this.entityTransformer =
options.entityTransformer ?? defaultTechDocsCollatorEntityTransformer;
this.documentTransformer =
options.documentTransformer ?? defaultTechDocsCollatorDocumentTransformer;
// @ts-ignore
this.entityTransformer = options.entityTransformer ?? (() => {});
// @ts-ignore
this.documentTransformer = options.documentTransformer ?? (() => {});
this.auth = createLegacyAuthAdapters({
auth: options.auth,
@@ -226,8 +226,10 @@ export class DefaultTechDocsCollatorFactory implements DocumentCollatorFactory {
]);
return searchIndex.docs.map((doc: MkSearchIndexDoc) => ({
...this.entityTransformer(entity),
...this.documentTransformer(doc),
...defaultTechDocsCollatorEntityTransformer(entity),
...defaultTechDocsCollatorDocumentTransformer(doc),
...(this.entityTransformer(entity) ?? {}),
...(this.documentTransformer(doc) ?? {}),
location: this.applyArgsToFormat(
this.locationTemplate || '/docs/:namespace/:kind/:name/:path',
{
@@ -26,13 +26,15 @@ export interface MkSearchIndexDoc {
/** @public */
export type TechDocsCollatorDocumentTransformer = (
doc: MkSearchIndexDoc,
) => Omit<
TechDocsDocument,
| 'location'
| 'authorization'
| 'kind'
| 'namespace'
| 'name'
| 'lifecycle'
| 'owner'
) => Partial<
Omit<
TechDocsDocument,
| 'location'
| 'authorization'
| 'kind'
| 'namespace'
| 'name'
| 'lifecycle'
| 'owner'
>
>;
@@ -20,4 +20,4 @@ import { TechDocsDocument } from '@backstage/plugin-techdocs-node';
/** @public */
export type TechDocsCollatorEntityTransformer = (
entity: Entity,
) => Omit<TechDocsDocument, 'location' | 'authorization'>;
) => Partial<Omit<TechDocsDocument, 'location' | 'authorization'>>;
@@ -22,8 +22,6 @@ export { defaultTechDocsCollatorEntityTransformer } from './defaultTechDocsColla
export type { TechDocsCollatorEntityTransformer } from './TechDocsCollatorEntityTransformer';
export { defaultTechDocsCollatorDocumentTransformer } from './defaultTechDocsCollatorDocumentTransformer';
export type {
TechDocsCollatorDocumentTransformer,
MkSearchIndexDoc,