refactor to use partials
Signed-off-by: Alex Eftimie <alex.eftimie@getyourguide.com>
This commit is contained in:
@@ -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,
|
||||
}),
|
||||
});
|
||||
```
|
||||
|
||||
+42
-2
@@ -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'],
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
+8
-6
@@ -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',
|
||||
{
|
||||
|
||||
+11
-9
@@ -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'
|
||||
>
|
||||
>;
|
||||
|
||||
+1
-1
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user