From 311efd906c03f3d2ee4e6ed1a2ee3a8e337ea28d Mon Sep 17 00:00:00 2001 From: Alex Eftimie Date: Tue, 2 Jul 2024 15:12:31 +0200 Subject: [PATCH 1/7] Techdocs: allow custom collation of mkdocs search document Signed-off-by: Alex Eftimie --- .../api-report.md | 30 +++++++++++++++ .../DefaultTechDocsCollatorFactory.ts | 20 +++++----- .../TechDocsCollatorDocumentTransformer.ts | 38 +++++++++++++++++++ ...aultTechDocsCollatorDocumentTransformer.ts | 30 +++++++++++++++ .../src/collators/index.ts | 7 ++++ 5 files changed, 115 insertions(+), 10 deletions(-) create mode 100644 plugins/search-backend-module-techdocs/src/collators/TechDocsCollatorDocumentTransformer.ts create mode 100644 plugins/search-backend-module-techdocs/src/collators/defaultTechDocsCollatorDocumentTransformer.ts diff --git a/plugins/search-backend-module-techdocs/api-report.md b/plugins/search-backend-module-techdocs/api-report.md index 9c9fae1a38..3f4ece1cea 100644 --- a/plugins/search-backend-module-techdocs/api-report.md +++ b/plugins/search-backend-module-techdocs/api-report.md @@ -18,6 +18,9 @@ import { Readable } from 'stream'; import { TechDocsDocument } from '@backstage/plugin-techdocs-node'; import { TokenManager } from '@backstage/backend-common'; +// @public (undocumented) +export const defaultTechDocsCollatorDocumentTransformer: TechDocsCollatorDocumentTransformer; + // @public (undocumented) export const defaultTechDocsCollatorEntityTransformer: TechDocsCollatorEntityTransformer; @@ -36,6 +39,32 @@ export class DefaultTechDocsCollatorFactory implements DocumentCollatorFactory { readonly visibilityPermission: Permission; } +// @public (undocumented) +export interface MkSearchIndexDoc { + // (undocumented) + location: string; + // (undocumented) + tags?: string[]; + // (undocumented) + text: string; + // (undocumented) + title: string; +} + +// @public (undocumented) +export type TechDocsCollatorDocumentTransformer = ( + doc: MkSearchIndexDoc, +) => Omit< + TechDocsDocument, + | 'location' + | 'authorization' + | 'kind' + | 'namespace' + | 'name' + | 'lifecycle' + | 'owner' +>; + // @public (undocumented) export type TechDocsCollatorEntityTransformer = ( entity: Entity, @@ -53,5 +82,6 @@ export type TechDocsCollatorFactoryOptions = { parallelismLimit?: number; legacyPathCasing?: boolean; entityTransformer?: TechDocsCollatorEntityTransformer; + documentTransformer?: TechDocsCollatorDocumentTransformer; }; ``` diff --git a/plugins/search-backend-module-techdocs/src/collators/DefaultTechDocsCollatorFactory.ts b/plugins/search-backend-module-techdocs/src/collators/DefaultTechDocsCollatorFactory.ts index 748cb515d9..6b0eb6255b 100644 --- a/plugins/search-backend-module-techdocs/src/collators/DefaultTechDocsCollatorFactory.ts +++ b/plugins/search-backend-module-techdocs/src/collators/DefaultTechDocsCollatorFactory.ts @@ -34,12 +34,16 @@ import { catalogEntityReadPermission } from '@backstage/plugin-catalog-common/al import { Permission } from '@backstage/plugin-permission-common'; import { DocumentCollatorFactory } from '@backstage/plugin-search-common'; import { TechDocsDocument } from '@backstage/plugin-techdocs-node'; -import unescape from 'lodash/unescape'; import fetch from 'node-fetch'; import pLimit from 'p-limit'; import { Readable } from 'stream'; import { TechDocsCollatorEntityTransformer } from './TechDocsCollatorEntityTransformer'; +import { + MkSearchIndexDoc, + TechDocsCollatorDocumentTransformer, +} from './TechDocsCollatorDocumentTransformer'; import { defaultTechDocsCollatorEntityTransformer } from './defaultTechDocsCollatorEntityTransformer'; +import { defaultTechDocsCollatorDocumentTransformer } from './defaultTechDocsCollatorDocumentTransformer'; import { AuthService, DiscoveryService, @@ -47,12 +51,6 @@ import { LoggerService, } from '@backstage/backend-plugin-api'; -interface MkSearchIndexDoc { - title: string; - text: string; - location: string; -} - /** * Options to configure the TechDocs collator factory * @@ -70,6 +68,7 @@ export type TechDocsCollatorFactoryOptions = { parallelismLimit?: number; legacyPathCasing?: boolean; entityTransformer?: TechDocsCollatorEntityTransformer; + documentTransformer?: TechDocsCollatorDocumentTransformer; }; type EntityInfo = { @@ -98,6 +97,7 @@ export class DefaultTechDocsCollatorFactory implements DocumentCollatorFactory { private readonly parallelismLimit: number; private readonly legacyPathCasing: boolean; private entityTransformer: TechDocsCollatorEntityTransformer; + private documentTransformer: TechDocsCollatorDocumentTransformer; private constructor(options: TechDocsCollatorFactoryOptions) { this.discovery = options.discovery; @@ -111,6 +111,8 @@ export class DefaultTechDocsCollatorFactory implements DocumentCollatorFactory { this.legacyPathCasing = options.legacyPathCasing ?? false; this.entityTransformer = options.entityTransformer ?? defaultTechDocsCollatorEntityTransformer; + this.documentTransformer = + options.documentTransformer ?? defaultTechDocsCollatorDocumentTransformer; this.auth = createLegacyAuthAdapters({ auth: options.auth, @@ -225,8 +227,7 @@ export class DefaultTechDocsCollatorFactory implements DocumentCollatorFactory { return searchIndex.docs.map((doc: MkSearchIndexDoc) => ({ ...this.entityTransformer(entity), - title: unescape(doc.title), - text: unescape(doc.text || ''), + ...this.documentTransformer(doc), location: this.applyArgsToFormat( this.locationTemplate || '/docs/:namespace/:kind/:name/:path', { @@ -234,7 +235,6 @@ export class DefaultTechDocsCollatorFactory implements DocumentCollatorFactory { path: doc.location, }, ), - path: doc.location, ...entityInfo, entityTitle: entity.metadata.title, componentType: entity.spec?.type?.toString() || 'other', diff --git a/plugins/search-backend-module-techdocs/src/collators/TechDocsCollatorDocumentTransformer.ts b/plugins/search-backend-module-techdocs/src/collators/TechDocsCollatorDocumentTransformer.ts new file mode 100644 index 0000000000..b95187bde4 --- /dev/null +++ b/plugins/search-backend-module-techdocs/src/collators/TechDocsCollatorDocumentTransformer.ts @@ -0,0 +1,38 @@ +/* + * Copyright 2024 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { TechDocsDocument } from '@backstage/plugin-techdocs-node'; + +/** @public */ +export interface MkSearchIndexDoc { + title: string; + text: string; + location: string; + tags?: string[]; +} + +/** @public */ +export type TechDocsCollatorDocumentTransformer = ( + doc: MkSearchIndexDoc, +) => Omit< + TechDocsDocument, + | 'location' + | 'authorization' + | 'kind' + | 'namespace' + | 'name' + | 'lifecycle' + | 'owner' +>; diff --git a/plugins/search-backend-module-techdocs/src/collators/defaultTechDocsCollatorDocumentTransformer.ts b/plugins/search-backend-module-techdocs/src/collators/defaultTechDocsCollatorDocumentTransformer.ts new file mode 100644 index 0000000000..36492de6bd --- /dev/null +++ b/plugins/search-backend-module-techdocs/src/collators/defaultTechDocsCollatorDocumentTransformer.ts @@ -0,0 +1,30 @@ +/* + * Copyright 2024 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import unescape from 'lodash/unescape'; +import { + TechDocsCollatorDocumentTransformer, + MkSearchIndexDoc, +} from './TechDocsCollatorDocumentTransformer'; + +/** @public */ +export const defaultTechDocsCollatorDocumentTransformer: TechDocsCollatorDocumentTransformer = + (doc: MkSearchIndexDoc) => { + return { + title: unescape(doc.title), + text: unescape(doc.text || ''), + path: doc.location, + }; + }; diff --git a/plugins/search-backend-module-techdocs/src/collators/index.ts b/plugins/search-backend-module-techdocs/src/collators/index.ts index 94be458e33..1f0795368f 100644 --- a/plugins/search-backend-module-techdocs/src/collators/index.ts +++ b/plugins/search-backend-module-techdocs/src/collators/index.ts @@ -21,3 +21,10 @@ export type { TechDocsCollatorFactoryOptions } from './DefaultTechDocsCollatorFa export { defaultTechDocsCollatorEntityTransformer } from './defaultTechDocsCollatorEntityTransformer'; export type { TechDocsCollatorEntityTransformer } from './TechDocsCollatorEntityTransformer'; + +export { defaultTechDocsCollatorDocumentTransformer } from './defaultTechDocsCollatorDocumentTransformer'; + +export type { + TechDocsCollatorDocumentTransformer, + MkSearchIndexDoc, +} from './TechDocsCollatorDocumentTransformer'; From 07a7fc2cf59275d55558b14d2468b643dc7a5dbe Mon Sep 17 00:00:00 2001 From: Alex Eftimie Date: Tue, 2 Jul 2024 16:06:39 +0200 Subject: [PATCH 2/7] Add changeset Signed-off-by: Alex Eftimie --- .changeset/funny-dancers-drum.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/funny-dancers-drum.md diff --git a/.changeset/funny-dancers-drum.md b/.changeset/funny-dancers-drum.md new file mode 100644 index 0000000000..3f57244a1a --- /dev/null +++ b/.changeset/funny-dancers-drum.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-search-backend-module-techdocs': minor +--- + +Refactor TechDocs collator, enable clients to override the mkdocs search index transformer, so that per document properties (like tags) can be added to Backstage search index. From 98be1a602a95140d798398917b9a9782017b03ca Mon Sep 17 00:00:00 2001 From: Alex Eftimie Date: Wed, 4 Sep 2024 17:45:01 +0200 Subject: [PATCH 3/7] refactor to use partials Signed-off-by: Alex Eftimie --- docs/features/search/how-to-guides.md | 12 ++++- .../DefaultTechDocsCollatorFactory.test.ts | 44 ++++++++++++++++++- .../DefaultTechDocsCollatorFactory.ts | 14 +++--- .../TechDocsCollatorDocumentTransformer.ts | 20 +++++---- .../TechDocsCollatorEntityTransformer.ts | 2 +- .../src/collators/index.ts | 2 - 6 files changed, 73 insertions(+), 21 deletions(-) diff --git a/docs/features/search/how-to-guides.md b/docs/features/search/how-to-guides.md index b0df9440f3..2c51e6ded5 100644 --- a/docs/features/search/how-to-guides.md +++ b/docs/features/search/how-to-guides.md @@ -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, }), }); ``` diff --git a/plugins/search-backend-module-techdocs/src/collators/DefaultTechDocsCollatorFactory.test.ts b/plugins/search-backend-module-techdocs/src/collators/DefaultTechDocsCollatorFactory.test.ts index 1fc23b915e..4adb42cf1e 100644 --- a/plugins/search-backend-module-techdocs/src/collators/DefaultTechDocsCollatorFactory.test.ts +++ b/plugins/search-backend-module-techdocs/src/collators/DefaultTechDocsCollatorFactory.test.ts @@ -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'], + }); + }); + }); }); }); diff --git a/plugins/search-backend-module-techdocs/src/collators/DefaultTechDocsCollatorFactory.ts b/plugins/search-backend-module-techdocs/src/collators/DefaultTechDocsCollatorFactory.ts index 6b0eb6255b..4e4b1417cd 100644 --- a/plugins/search-backend-module-techdocs/src/collators/DefaultTechDocsCollatorFactory.ts +++ b/plugins/search-backend-module-techdocs/src/collators/DefaultTechDocsCollatorFactory.ts @@ -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', { diff --git a/plugins/search-backend-module-techdocs/src/collators/TechDocsCollatorDocumentTransformer.ts b/plugins/search-backend-module-techdocs/src/collators/TechDocsCollatorDocumentTransformer.ts index b95187bde4..5c21c6085f 100644 --- a/plugins/search-backend-module-techdocs/src/collators/TechDocsCollatorDocumentTransformer.ts +++ b/plugins/search-backend-module-techdocs/src/collators/TechDocsCollatorDocumentTransformer.ts @@ -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' + > >; diff --git a/plugins/search-backend-module-techdocs/src/collators/TechDocsCollatorEntityTransformer.ts b/plugins/search-backend-module-techdocs/src/collators/TechDocsCollatorEntityTransformer.ts index 142199e3dc..ff1c543c1e 100644 --- a/plugins/search-backend-module-techdocs/src/collators/TechDocsCollatorEntityTransformer.ts +++ b/plugins/search-backend-module-techdocs/src/collators/TechDocsCollatorEntityTransformer.ts @@ -20,4 +20,4 @@ import { TechDocsDocument } from '@backstage/plugin-techdocs-node'; /** @public */ export type TechDocsCollatorEntityTransformer = ( entity: Entity, -) => Omit; +) => Partial>; diff --git a/plugins/search-backend-module-techdocs/src/collators/index.ts b/plugins/search-backend-module-techdocs/src/collators/index.ts index 1f0795368f..289ea39c83 100644 --- a/plugins/search-backend-module-techdocs/src/collators/index.ts +++ b/plugins/search-backend-module-techdocs/src/collators/index.ts @@ -22,8 +22,6 @@ export { defaultTechDocsCollatorEntityTransformer } from './defaultTechDocsColla export type { TechDocsCollatorEntityTransformer } from './TechDocsCollatorEntityTransformer'; -export { defaultTechDocsCollatorDocumentTransformer } from './defaultTechDocsCollatorDocumentTransformer'; - export type { TechDocsCollatorDocumentTransformer, MkSearchIndexDoc, From adf89f46454c94e64e898d1114aa317f373d4be6 Mon Sep 17 00:00:00 2001 From: Alex Eftimie Date: Wed, 4 Sep 2024 17:55:42 +0200 Subject: [PATCH 4/7] update api report Signed-off-by: Alex Eftimie --- .../api-report.md | 25 +++++++++---------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/plugins/search-backend-module-techdocs/api-report.md b/plugins/search-backend-module-techdocs/api-report.md index 3f4ece1cea..ff4d269eb3 100644 --- a/plugins/search-backend-module-techdocs/api-report.md +++ b/plugins/search-backend-module-techdocs/api-report.md @@ -18,9 +18,6 @@ import { Readable } from 'stream'; import { TechDocsDocument } from '@backstage/plugin-techdocs-node'; import { TokenManager } from '@backstage/backend-common'; -// @public (undocumented) -export const defaultTechDocsCollatorDocumentTransformer: TechDocsCollatorDocumentTransformer; - // @public (undocumented) export const defaultTechDocsCollatorEntityTransformer: TechDocsCollatorEntityTransformer; @@ -54,21 +51,23 @@ export interface MkSearchIndexDoc { // @public (undocumented) export type TechDocsCollatorDocumentTransformer = ( doc: MkSearchIndexDoc, -) => Omit< - TechDocsDocument, - | 'location' - | 'authorization' - | 'kind' - | 'namespace' - | 'name' - | 'lifecycle' - | 'owner' +) => Partial< + Omit< + TechDocsDocument, + | 'location' + | 'authorization' + | 'kind' + | 'namespace' + | 'name' + | 'lifecycle' + | 'owner' + > >; // @public (undocumented) export type TechDocsCollatorEntityTransformer = ( entity: Entity, -) => Omit; +) => Partial>; // @public @deprecated export type TechDocsCollatorFactoryOptions = { From a1ba8d8d2f934a59f22bb8a33c7a219a724c5b20 Mon Sep 17 00:00:00 2001 From: Alex Eftimie Date: Wed, 2 Oct 2024 16:22:56 +0200 Subject: [PATCH 5/7] update api reports Signed-off-by: Alex Eftimie --- .../search-backend-module-techdocs/report.api.md | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/plugins/search-backend-module-techdocs/report.api.md b/plugins/search-backend-module-techdocs/report.api.md index 8100aa852d..ce9500a5f6 100644 --- a/plugins/search-backend-module-techdocs/report.api.md +++ b/plugins/search-backend-module-techdocs/report.api.md @@ -86,10 +86,16 @@ export type TechDocsCollatorFactoryOptions = { // Warnings were encountered during analysis: // -// src/collators/DefaultTechDocsCollatorFactory.d.ts:36:5 - (ae-undocumented) Missing documentation for "type". -// src/collators/DefaultTechDocsCollatorFactory.d.ts:37:5 - (ae-undocumented) Missing documentation for "visibilityPermission". -// src/collators/DefaultTechDocsCollatorFactory.d.ts:47:5 - (ae-undocumented) Missing documentation for "fromConfig". -// src/collators/DefaultTechDocsCollatorFactory.d.ts:48:5 - (ae-undocumented) Missing documentation for "getCollator". +// src/collators/DefaultTechDocsCollatorFactory.d.ts:38:5 - (ae-undocumented) Missing documentation for "type". +// src/collators/DefaultTechDocsCollatorFactory.d.ts:39:5 - (ae-undocumented) Missing documentation for "visibilityPermission". +// src/collators/DefaultTechDocsCollatorFactory.d.ts:50:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/collators/DefaultTechDocsCollatorFactory.d.ts:51:5 - (ae-undocumented) Missing documentation for "getCollator". +// src/collators/TechDocsCollatorDocumentTransformer.d.ts:3:1 - (ae-undocumented) Missing documentation for "MkSearchIndexDoc". +// src/collators/TechDocsCollatorDocumentTransformer.d.ts:4:5 - (ae-undocumented) Missing documentation for "title". +// src/collators/TechDocsCollatorDocumentTransformer.d.ts:5:5 - (ae-undocumented) Missing documentation for "text". +// src/collators/TechDocsCollatorDocumentTransformer.d.ts:6:5 - (ae-undocumented) Missing documentation for "location". +// src/collators/TechDocsCollatorDocumentTransformer.d.ts:7:5 - (ae-undocumented) Missing documentation for "tags". +// src/collators/TechDocsCollatorDocumentTransformer.d.ts:10:1 - (ae-undocumented) Missing documentation for "TechDocsCollatorDocumentTransformer". // src/collators/TechDocsCollatorEntityTransformer.d.ts:4:1 - (ae-undocumented) Missing documentation for "TechDocsCollatorEntityTransformer". // src/collators/defaultTechDocsCollatorEntityTransformer.d.ts:3:22 - (ae-undocumented) Missing documentation for "defaultTechDocsCollatorEntityTransformer". ``` From 3b527b7ae6a0385de4acd0a217f6d2f3eda0e64c Mon Sep 17 00:00:00 2001 From: Alex Eftimie Date: Wed, 9 Oct 2024 05:33:38 +0200 Subject: [PATCH 6/7] Apply suggestions from code review Co-authored-by: Alex Lorenzi <671432+alexlorenzi@users.noreply.github.com> Signed-off-by: Alex Eftimie --- .../src/collators/DefaultTechDocsCollatorFactory.ts | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/plugins/search-backend-module-techdocs/src/collators/DefaultTechDocsCollatorFactory.ts b/plugins/search-backend-module-techdocs/src/collators/DefaultTechDocsCollatorFactory.ts index 4e4b1417cd..0b53b33b30 100644 --- a/plugins/search-backend-module-techdocs/src/collators/DefaultTechDocsCollatorFactory.ts +++ b/plugins/search-backend-module-techdocs/src/collators/DefaultTechDocsCollatorFactory.ts @@ -109,10 +109,8 @@ export class DefaultTechDocsCollatorFactory implements DocumentCollatorFactory { new CatalogClient({ discoveryApi: options.discovery }); this.parallelismLimit = options.parallelismLimit ?? 10; this.legacyPathCasing = options.legacyPathCasing ?? false; - // @ts-ignore - this.entityTransformer = options.entityTransformer ?? (() => {}); - // @ts-ignore - this.documentTransformer = options.documentTransformer ?? (() => {}); + this.entityTransformer = options.entityTransformer ?? (() => ({})); + this.documentTransformer = options.documentTransformer ?? (() => ({})); this.auth = createLegacyAuthAdapters({ auth: options.auth, @@ -228,8 +226,8 @@ export class DefaultTechDocsCollatorFactory implements DocumentCollatorFactory { return searchIndex.docs.map((doc: MkSearchIndexDoc) => ({ ...defaultTechDocsCollatorEntityTransformer(entity), ...defaultTechDocsCollatorDocumentTransformer(doc), - ...(this.entityTransformer(entity) ?? {}), - ...(this.documentTransformer(doc) ?? {}), + ...this.entityTransformer(entity), + ...this.documentTransformer(doc), location: this.applyArgsToFormat( this.locationTemplate || '/docs/:namespace/:kind/:name/:path', { From 1c9b5545d288a2bed606803f2e809c2156988131 Mon Sep 17 00:00:00 2001 From: Alex Eftimie Date: Wed, 9 Oct 2024 07:59:34 +0200 Subject: [PATCH 7/7] Modify also alpha Signed-off-by: Alex Eftimie --- .../report-alpha.api.md | 6 +++++ .../src/alpha.ts | 22 +++++++++++++++---- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/plugins/search-backend-module-techdocs/report-alpha.api.md b/plugins/search-backend-module-techdocs/report-alpha.api.md index 16dd73f705..758441c12d 100644 --- a/plugins/search-backend-module-techdocs/report-alpha.api.md +++ b/plugins/search-backend-module-techdocs/report-alpha.api.md @@ -5,6 +5,7 @@ ```ts import { BackendFeature } from '@backstage/backend-plugin-api'; import { ExtensionPoint } from '@backstage/backend-plugin-api'; +import { TechDocsCollatorDocumentTransformer } from '@backstage/plugin-search-backend-module-techdocs'; import { TechDocsCollatorEntityTransformer } from '@backstage/plugin-search-backend-module-techdocs'; // @alpha @@ -13,6 +14,10 @@ export default _default; // @alpha (undocumented) export interface TechDocsCollatorEntityTransformerExtensionPoint { + // (undocumented) + setDocumentTransformer( + transformer: TechDocsCollatorDocumentTransformer, + ): void; // (undocumented) setTransformer(transformer: TechDocsCollatorEntityTransformer): void; } @@ -24,6 +29,7 @@ export const techdocsCollatorEntityTransformerExtensionPoint: ExtensionPoint