From 879a3c55dd009f297903145cd512037a63816dbb Mon Sep 17 00:00:00 2001 From: Mahendra Suthar Date: Fri, 16 Aug 2024 16:13:28 +0530 Subject: [PATCH 001/164] fix submenu open animation in pinned sidebar Signed-off-by: Mahendra Suthar --- .../core-components/src/layout/Sidebar/SidebarSubmenu.tsx | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/core-components/src/layout/Sidebar/SidebarSubmenu.tsx b/packages/core-components/src/layout/Sidebar/SidebarSubmenu.tsx index e05cc90fa9..2e27cbdd54 100644 --- a/packages/core-components/src/layout/Sidebar/SidebarSubmenu.tsx +++ b/packages/core-components/src/layout/Sidebar/SidebarSubmenu.tsx @@ -43,11 +43,12 @@ const useStyles = makeStyles< flexFlow: 'column nowrap', alignItems: 'flex-start', position: 'fixed', + opacity: 0, [theme.breakpoints.up('sm')]: { marginLeft: props.left, - transition: theme.transitions.create('margin-left', { + transition: theme.transitions.create(['margin-left', 'opacity'], { easing: theme.transitions.easing.sharp, - duration: theme.transitions.duration.shortest, + duration: props.submenuConfig.defaultOpenDelayMs, }), }, top: 0, @@ -68,6 +69,8 @@ const useStyles = makeStyles< }, }), drawerOpen: props => ({ + marginLeft: props.left, + opacity: 1, width: props.submenuConfig.drawerWidthOpen, [theme.breakpoints.down('xs')]: { width: '100%', From 83e288760d1293324a79786fb206436a6139a4ac Mon Sep 17 00:00:00 2001 From: Mahendra Suthar Date: Fri, 16 Aug 2024 16:16:08 +0530 Subject: [PATCH 002/164] add changeset for core-component Signed-off-by: Mahendra Suthar --- .changeset/honest-impalas-rescue.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/honest-impalas-rescue.md diff --git a/.changeset/honest-impalas-rescue.md b/.changeset/honest-impalas-rescue.md new file mode 100644 index 0000000000..e0aecfe42f --- /dev/null +++ b/.changeset/honest-impalas-rescue.md @@ -0,0 +1,5 @@ +--- +'@backstage/core-components': patch +--- + +Fixed a bug in the SidebarSubmenu core component that caused the submenu to overlap with the sidebar when the user hovers over the pinned sidebar. From 57bf3e1c39e89a53db692941ab7d2e6a85efd7e5 Mon Sep 17 00:00:00 2001 From: Mahendra Suthar Date: Wed, 4 Sep 2024 22:24:11 +0530 Subject: [PATCH 003/164] chore: update changeset Signed-off-by: Mahendra Suthar --- .changeset/honest-impalas-rescue.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/honest-impalas-rescue.md b/.changeset/honest-impalas-rescue.md index e0aecfe42f..bac076bba6 100644 --- a/.changeset/honest-impalas-rescue.md +++ b/.changeset/honest-impalas-rescue.md @@ -2,4 +2,4 @@ '@backstage/core-components': patch --- -Fixed a bug in the SidebarSubmenu core component that caused the submenu to overlap with the sidebar when the user hovers over the pinned sidebar. +Fixed a bug in the `SidebarSubmenu` core component that caused the nested menu to overlap with the sidebar when the user hovers over the pinned sidebar. From 734c2d42037681355760421bd39e52b917c473e8 Mon Sep 17 00:00:00 2001 From: Stephen Glass Date: Fri, 13 Sep 2024 20:10:52 -0400 Subject: [PATCH 004/164] add fetch:template:file action Signed-off-by: Stephen Glass --- .changeset/brown-frogs-walk.md | 17 ++ plugins/scaffolder-backend/api-report.md | 20 ++ .../src/ScaffolderPlugin.ts | 7 + .../actions/builtin/createBuiltinActions.ts | 7 + .../scaffolder/actions/builtin/fetch/index.ts | 1 + .../fetch/templateFile.examples.test.ts | 107 ++++++++ .../builtin/fetch/templateFile.examples.ts | 42 +++ .../builtin/fetch/templateFile.test.ts | 251 ++++++++++++++++++ .../actions/builtin/fetch/templateFile.ts | 167 ++++++++++++ 9 files changed, 619 insertions(+) create mode 100644 .changeset/brown-frogs-walk.md create mode 100644 plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/templateFile.examples.test.ts create mode 100644 plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/templateFile.examples.ts create mode 100644 plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/templateFile.test.ts create mode 100644 plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/templateFile.ts diff --git a/.changeset/brown-frogs-walk.md b/.changeset/brown-frogs-walk.md new file mode 100644 index 0000000000..6fae44be73 --- /dev/null +++ b/.changeset/brown-frogs-walk.md @@ -0,0 +1,17 @@ +--- +'@backstage/plugin-scaffolder-backend': patch +--- + +Add `fetch:template:file` scaffolder action to download a single file and template the contents. Example usage: + +```yaml +- id: fetch-file + name: Fetch File + action: fetch:template:file + input: + url: https://github.com/backstage/software-templates/blob/main/scaffolder-templates/create-react-app/skeleton/catalog-info.yaml + targetPath: './target/catalog-info.yaml' + values: + component_id: My Component + owner: Test +``` diff --git a/plugins/scaffolder-backend/api-report.md b/plugins/scaffolder-backend/api-report.md index 00f690c646..4459fa8918 100644 --- a/plugins/scaffolder-backend/api-report.md +++ b/plugins/scaffolder-backend/api-report.md @@ -202,6 +202,26 @@ export function createFetchTemplateAction(options: { JsonObject >; +// @public +export function createFetchTemplateFileAction(options: { + reader: UrlReaderService; + integrations: ScmIntegrations; + additionalTemplateFilters?: Record; + additionalTemplateGlobals?: Record; +}): TemplateAction_2< + { + url: string; + targetPath: string; + values: any; + cookiecutterCompat?: boolean | undefined; + replace?: boolean | undefined; + trimBlocks?: boolean | undefined; + lstripBlocks?: boolean | undefined; + token?: string | undefined; + }, + JsonObject +>; + // @public export const createFilesystemDeleteAction: () => TemplateAction_2< { diff --git a/plugins/scaffolder-backend/src/ScaffolderPlugin.ts b/plugins/scaffolder-backend/src/ScaffolderPlugin.ts index 27b4f6b196..cf0f557639 100644 --- a/plugins/scaffolder-backend/src/ScaffolderPlugin.ts +++ b/plugins/scaffolder-backend/src/ScaffolderPlugin.ts @@ -44,6 +44,7 @@ import { createFetchPlainAction, createFetchPlainFileAction, createFetchTemplateAction, + createFetchTemplateFileAction, createFilesystemDeleteAction, createFilesystemRenameAction, createWaitAction, @@ -149,6 +150,12 @@ export const scaffolderPlugin = createBackendPlugin({ additionalTemplateFilters, additionalTemplateGlobals, }), + createFetchTemplateFileAction({ + integrations, + reader, + additionalTemplateFilters, + additionalTemplateGlobals, + }), createDebugLogAction(), createWaitAction(), // todo(blam): maybe these should be a -catalog module? diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/createBuiltinActions.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/createBuiltinActions.ts index dba867c96b..8a2cfde33e 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/createBuiltinActions.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/createBuiltinActions.ts @@ -37,6 +37,7 @@ import { createFetchPlainAction, createFetchPlainFileAction, createFetchTemplateAction, + createFetchTemplateFileAction, } from './fetch'; import { createFilesystemDeleteAction, @@ -157,6 +158,12 @@ export const createBuiltinActions = ( additionalTemplateFilters, additionalTemplateGlobals, }), + createFetchTemplateFileAction({ + integrations, + reader, + additionalTemplateFilters, + additionalTemplateGlobals, + }), createPublishGerritAction({ integrations, config, diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/index.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/index.ts index 67f1bc360f..dd3942a458 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/index.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/index.ts @@ -17,3 +17,4 @@ export { createFetchPlainAction } from './plain'; export { createFetchPlainFileAction } from './plainFile'; export { createFetchTemplateAction } from './template'; +export { createFetchTemplateFileAction } from './templateFile'; diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/templateFile.examples.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/templateFile.examples.test.ts new file mode 100644 index 0000000000..c7823ee9d8 --- /dev/null +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/templateFile.examples.test.ts @@ -0,0 +1,107 @@ +/* + * 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 { join as joinPath } from 'path'; +import fs from 'fs-extra'; +import { UrlReaderService } from '@backstage/backend-plugin-api'; +import { ScmIntegrations } from '@backstage/integration'; +import { createMockActionContext } from '@backstage/plugin-scaffolder-node-test-utils'; +import { createFetchTemplateFileAction } from './templateFile'; +import { + ActionContext, + TemplateAction, + fetchFile, +} from '@backstage/plugin-scaffolder-node'; +import { examples } from './templateFile.examples'; +import yaml from 'yaml'; +import { createMockDirectory } from '@backstage/backend-test-utils'; + +jest.mock('@backstage/plugin-scaffolder-node', () => ({ + ...jest.requireActual('@backstage/plugin-scaffolder-node'), + fetchFile: jest.fn(), +})); + +type FetchTemplateInput = ReturnType< + typeof createFetchTemplateFileAction +> extends TemplateAction + ? U + : never; + +const mockFetchFile = fetchFile as jest.MockedFunction; + +describe('fetch:template:file examples', () => { + let action: TemplateAction; + + const mockDir = createMockDirectory(); + const workspacePath = mockDir.resolve('workspace'); + + const mockContext = (input: any) => + createMockActionContext({ + templateInfo: { + baseUrl: 'base-url', + entityRef: 'template:default/test-template', + }, + input, + workspacePath, + }); + + beforeEach(() => { + mockDir.clear(); + action = createFetchTemplateFileAction({ + reader: Symbol('UrlReader') as unknown as UrlReaderService, + integrations: Symbol('Integrations') as unknown as ScmIntegrations, + }); + }); + + describe('handler', () => { + describe('with valid input', () => { + let context: ActionContext; + + beforeEach(async () => { + context = mockContext(yaml.parse(examples[0].example).steps[0].input); + + mockFetchFile.mockImplementation(({ outputPath }) => { + mockDir.setContent({ + [outputPath]: + '${{ values.name }}: ${{ values.count }} ${{ values.itemList | dump }}', + }); + + return Promise.resolve(); + }); + + await action.handler(context); + }); + + it('uses fetchFile to retrieve the template content', () => { + expect(mockFetchFile).toHaveBeenCalledWith( + expect.objectContaining({ + baseUrl: context.templateInfo?.baseUrl, + fetchUrl: context.input.url, + }), + ); + }); + + it('copies files with no templating in names or content successfully', async () => { + await expect( + fs.readFile( + joinPath(workspacePath, context.input.targetPath), + 'utf-8', + ), + ).resolves.toEqual('test-project: 1234 ["first","second","third"]'); + }); + }); + }); +}); diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/templateFile.examples.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/templateFile.examples.ts new file mode 100644 index 0000000000..b2f3947f3a --- /dev/null +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/templateFile.examples.ts @@ -0,0 +1,42 @@ +/* + * 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 { TemplateExample } from '@backstage/plugin-scaffolder-node'; +import yaml from 'yaml'; + +export const examples: TemplateExample[] = [ + { + description: 'Downloads a template file and fill it out with values.', + example: yaml.stringify({ + steps: [ + { + action: 'fetch:template:file', + id: 'fetch-template-file', + name: 'Fetch template file', + input: { + url: './skeleton.txt', + targetPath: './target/skeleton.txt', + values: { + name: 'test-project', + count: 1234, + itemList: ['first', 'second', 'third'], + }, + }, + }, + ], + }), + }, +]; diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/templateFile.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/templateFile.test.ts new file mode 100644 index 0000000000..23721e685a --- /dev/null +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/templateFile.test.ts @@ -0,0 +1,251 @@ +/* + * 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. + */ + +jest.mock('@backstage/plugin-scaffolder-node', () => { + const actual = jest.requireActual('@backstage/plugin-scaffolder-node'); + return { ...actual, fetchFile: jest.fn() }; +}); + +import { join as joinPath } from 'path'; +import fs from 'fs-extra'; +import { UrlReaderService } from '@backstage/backend-plugin-api'; +import { ScmIntegrations } from '@backstage/integration'; +import { createFetchTemplateFileAction } from './templateFile'; +import { + ActionContext, + TemplateAction, + fetchFile, +} from '@backstage/plugin-scaffolder-node'; +import { createMockDirectory } from '@backstage/backend-test-utils'; +import { createMockActionContext } from '@backstage/plugin-scaffolder-node-test-utils'; + +type FetchTemplateInput = ReturnType< + typeof createFetchTemplateFileAction +> extends TemplateAction + ? U + : never; + +const mockFetchFile = fetchFile as jest.MockedFunction; + +describe('fetch:template:file', () => { + let action: TemplateAction; + + const mockDir = createMockDirectory(); + const workspacePath = mockDir.resolve('workspace'); + const mockContext = (inputPatch: Partial = {}) => + createMockActionContext({ + templateInfo: { + baseUrl: 'base-url', + entityRef: 'template:default/test-template', + }, + input: { + url: './skeleton.txt', + targetPath: './target/skeleton.txt', + values: { + test: 'value', + }, + ...inputPatch, + }, + workspacePath, + }); + + beforeEach(() => { + mockDir.setContent({ + workspace: {}, + }); + action = createFetchTemplateFileAction({ + reader: Symbol('UrlReader') as unknown as UrlReaderService, + integrations: Symbol('Integrations') as unknown as ScmIntegrations, + }); + }); + + it(`returns a TemplateAction with the id 'fetch:template:file'`, () => { + expect(action.id).toEqual('fetch:template:file'); + }); + + describe('handler', () => { + it('should disallow a target path outside working directory', async () => { + await expect( + action.handler(mockContext({ targetPath: '../' })), + ).rejects.toThrow( + /Relative path is not allowed to refer to a directory outside its parent/, + ); + }); + + describe('valid input', () => { + let context: ActionContext; + + beforeEach(async () => { + context = mockContext({ + values: { + name: 'test-project', + count: 1234, + itemList: ['first', 'second', 'third'], + }, + token: 'mockToken', + }); + + mockFetchFile.mockImplementation(({ outputPath }) => { + mockDir.setContent({ + [outputPath]: + '${{ values.name }}: ${{ values.count }} ${{ values.itemList | dump }}', + }); + + return Promise.resolve(); + }); + + await action.handler(context); + }); + + it('uses fetchFile to retrieve the template content', () => { + expect(mockFetchFile).toHaveBeenCalledWith( + expect.objectContaining({ + baseUrl: context.templateInfo?.baseUrl, + fetchUrl: context.input.url, + }), + ); + }); + + it('passed through the token to fetchFile', () => { + expect(mockFetchFile).toHaveBeenCalledWith( + expect.objectContaining({ + token: 'mockToken', + }), + ); + }); + + it('templates content successfully', async () => { + await expect( + fs.readFile( + joinPath(workspacePath, context.input.targetPath), + 'utf-8', + ), + ).resolves.toEqual('test-project: 1234 ["first","second","third"]'); + }); + }); + + describe('with replacement of existing files', () => { + let context: ActionContext; + + beforeEach(async () => { + context = mockContext({ + url: './static-content.txt', + targetPath: './target/static-content.txt', + values: { + name: 'test-project', + count: 1234, + }, + replace: true, + }); + + mockDir.setContent({ + [joinPath(workspacePath, 'target')]: { + 'static-content.txt': 'static-content', + }, + }); + + mockFetchFile.mockImplementation(({ outputPath }) => { + mockDir.setContent({ + [outputPath]: '${{ values.name }}: ${{ values.count }}', + }); + + return Promise.resolve(); + }); + + await action.handler(context); + }); + + it('overwrites existing file', async () => { + await expect( + fs.readFile(`${workspacePath}/target/static-content.txt`, 'utf-8'), + ).resolves.toEqual('test-project: 1234'); + }); + }); + + describe('without replacement of existing files', () => { + let context: ActionContext; + + beforeEach(async () => { + context = mockContext({ + url: './static-content.txt', + targetPath: './target/static-content.txt', + values: { + name: 'test-project', + count: 1234, + }, + replace: false, + }); + + mockDir.setContent({ + [joinPath(workspacePath, 'target')]: { + 'static-content.txt': 'static-content', + }, + }); + + mockFetchFile.mockImplementation(({ outputPath }) => { + mockDir.setContent({ + [outputPath]: '${{ values.name }}: ${{ values.count }}', + }); + + return Promise.resolve(); + }); + + await action.handler(context); + }); + + it('keeps existing file', async () => { + await expect( + fs.readFile(`${workspacePath}/target/static-content.txt`, 'utf-8'), + ).resolves.toEqual('static-content'); + }); + }); + + describe('cookiecutter compatibility mode', () => { + let context: ActionContext; + + beforeEach(async () => { + context = mockContext({ + targetPath: './target/test-project.txt', + values: { + name: 'test-project', + count: 1234, + itemList: ['first', 'second', 'third'], + }, + cookiecutterCompat: true, + }); + + mockFetchFile.mockImplementation(({ outputPath }) => { + mockDir.setContent({ + [outputPath]: + 'static:{{ cookiecutter.name }}:{{ cookiecutter.count }}:{{ cookiecutter.itemList | jsonify }}', + }); + + return Promise.resolve(); + }); + + await action.handler(context); + }); + + it('copies files with cookiecutter-style templated variables successfully', async () => { + await expect( + fs.readFile(`${workspacePath}/target/test-project.txt`, 'utf-8'), + ).resolves.toEqual( + 'static:test-project:1234:["first","second","third"]', + ); + }); + }); + }); +}); diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/templateFile.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/templateFile.ts new file mode 100644 index 0000000000..89c0d1c1db --- /dev/null +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/templateFile.ts @@ -0,0 +1,167 @@ +/* + * 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 { UrlReaderService } from '@backstage/backend-plugin-api'; +import { resolveSafeChildPath } from '@backstage/backend-plugin-api'; +import { ScmIntegrations } from '@backstage/integration'; +import { examples } from './plainFile.examples'; +import { + createTemplateAction, + fetchFile, + TemplateFilter, + TemplateGlobal, +} from '@backstage/plugin-scaffolder-node'; +import { SecureTemplater } from '../../../../lib/templating/SecureTemplater'; +import { createDefaultFilters } from '../../../../lib/templating/filters'; +import path from 'path'; +import fs from 'fs-extra'; + +/** + * Downloads a single file and templates variables into file. + * Then places the result in the workspace, or optionally in a subdirectory + * specified by the 'targetPath' input option. + * @public + */ +export function createFetchTemplateFileAction(options: { + reader: UrlReaderService; + integrations: ScmIntegrations; + additionalTemplateFilters?: Record; + additionalTemplateGlobals?: Record; +}) { + const { + reader, + integrations, + additionalTemplateFilters, + additionalTemplateGlobals, + } = options; + + const defaultTemplateFilters = createDefaultFilters({ integrations }); + + return createTemplateAction<{ + url: string; + targetPath: string; + values: any; + cookiecutterCompat?: boolean; + replace?: boolean; + trimBlocks?: boolean; + lstripBlocks?: boolean; + token?: string; + }>({ + id: 'fetch:template:file', + description: 'Downloads single file and places it in the workspace.', + examples, + schema: { + input: { + type: 'object', + required: ['url', 'targetPath'], + properties: { + url: { + title: 'Fetch URL', + description: + 'Relative path or absolute URL pointing to the single file to fetch.', + type: 'string', + }, + targetPath: { + title: 'Target Path', + description: + 'Target path within the working directory to download the file as.', + type: 'string', + }, + values: { + title: 'Template Values', + description: 'Values to pass on to the templating engine', + type: 'object', + }, + cookiecutterCompat: { + title: 'Cookiecutter compatibility mode', + description: + 'Enable features to maximise compatibility with templates built for fetch:cookiecutter', + type: 'boolean', + }, + replace: { + title: 'Replace file', + description: + 'If set, replace file in targetPath instead of overwriting existing one.', + type: 'boolean', + }, + token: { + title: 'Token', + description: + 'An optional token to use for authentication when reading the resources.', + type: 'string', + }, + }, + }, + }, + supportsDryRun: true, + async handler(ctx) { + ctx.logger.info('Fetching template file content from remote URL'); + + const workDir = await ctx.createTemporaryDirectory(); + // Write to a tmp file, render the template, then copy to workspace. + const tmpFilePath = path.join(workDir, 'tmp'); + + const outputPath = resolveSafeChildPath( + ctx.workspacePath, + ctx.input.targetPath, + ); + + if (fs.existsSync(outputPath) && !ctx.input.replace) { + ctx.logger.info('File already exists in workspace, not replacing.'); + return; + } + + await fetchFile({ + reader, + integrations, + baseUrl: ctx.templateInfo?.baseUrl, + fetchUrl: ctx.input.url, + outputPath: tmpFilePath, + token: ctx.input.token, + }); + + const { cookiecutterCompat, values } = ctx.input; + const context = { + [cookiecutterCompat ? 'cookiecutter' : 'values']: values, + }; + + ctx.logger.info( + `Processing template file with input values`, + ctx.input.values, + ); + + const renderTemplate = await SecureTemplater.loadRenderer({ + cookiecutterCompat, + templateFilters: { + ...defaultTemplateFilters, + ...additionalTemplateFilters, + }, + templateGlobals: additionalTemplateGlobals, + nunjucksConfigs: { + trimBlocks: ctx.input.trimBlocks, + lstripBlocks: ctx.input.lstripBlocks, + }, + }); + + const contents = await fs.readFile(tmpFilePath, 'utf-8'); + const result = renderTemplate(contents, context); + await fs.ensureDir(path.dirname(outputPath)); + await fs.outputFile(outputPath, result); + + ctx.logger.info(`Template result written to ${outputPath}`); + }, + }); +} From 27d23566a6f3f225132511a96ea1d27b30353595 Mon Sep 17 00:00:00 2001 From: Stephen Glass Date: Fri, 13 Sep 2024 20:24:06 -0400 Subject: [PATCH 005/164] update action examples Signed-off-by: Stephen Glass --- .../src/scaffolder/actions/builtin/fetch/templateFile.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/templateFile.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/templateFile.ts index 89c0d1c1db..7a01f4b75d 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/templateFile.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/templateFile.ts @@ -17,7 +17,7 @@ import { UrlReaderService } from '@backstage/backend-plugin-api'; import { resolveSafeChildPath } from '@backstage/backend-plugin-api'; import { ScmIntegrations } from '@backstage/integration'; -import { examples } from './plainFile.examples'; +import { examples } from './templateFile.examples'; import { createTemplateAction, fetchFile, From 520a383e5e86d4ad3dd85c604dca2e0060ce0f77 Mon Sep 17 00:00:00 2001 From: Harrison Hogg Date: Fri, 16 Aug 2024 16:20:03 +0100 Subject: [PATCH 006/164] Added step to backstage-cli repo fix --publish command Added a fixer step to the backstage-cli fix command that will annotate default export features to the package json backstage metadata Signed-off-by: Harrison Hogg --- .changeset/clever-paws-stare.md | 6 + .changeset/healthy-moose-tease.md | 63 ++++ packages/cli-node/api-report.md | 59 ++++ .../cli-node/src/monorepo/PackageGraph.ts | 63 ++++ packages/cli-node/src/monorepo/index.ts | 4 + packages/cli/package.json | 1 + packages/cli/src/commands/repo/fix.ts | 54 +++- packages/cli/src/lib/features.test.ts | 273 ++++++++++++++++++ packages/cli/src/lib/features.ts | 163 +++++++++++ .../cli/src/tests/createFeatureEnvironment.ts | 196 +++++++++++++ plugins/api-docs/package.json | 6 + plugins/app-backend/package.json | 6 + .../catalog-backend-module-aws/package.json | 8 +- .../catalog-backend-module-azure/package.json | 8 +- .../package.json | 8 +- .../package.json | 8 +- .../catalog-backend-module-gcp/package.json | 7 +- .../package.json | 8 +- .../package.json | 8 +- .../package.json | 8 +- .../package.json | 8 +- .../package.json | 8 +- .../package.json | 8 +- .../package.json | 7 +- plugins/catalog-backend/package.json | 6 + plugins/catalog-graph/package.json | 6 + plugins/catalog-import/package.json | 6 + plugins/catalog/package.json | 6 + plugins/devtools/package.json | 6 + .../package.json | 8 +- .../events-backend-module-azure/package.json | 8 +- .../package.json | 8 +- .../events-backend-module-gerrit/package.json | 8 +- plugins/events-backend/package.json | 6 + plugins/home/package.json | 6 + plugins/kubernetes-backend/package.json | 6 + plugins/kubernetes/package.json | 6 + plugins/org/package.json | 6 + plugins/permission-backend/package.json | 6 + plugins/proxy-backend/package.json | 6 + .../package.json | 7 +- .../package.json | 7 +- .../package.json | 7 +- .../package.json | 7 +- .../package.json | 7 +- .../package.json | 7 +- .../package.json | 7 +- .../package.json | 7 +- .../package.json | 7 +- .../package.json | 7 +- .../package.json | 7 +- .../package.json | 7 +- .../package.json | 7 +- .../package.json | 7 +- plugins/scaffolder-backend/package.json | 6 + plugins/scaffolder/package.json | 6 + .../package.json | 8 +- .../package.json | 8 +- .../package.json | 8 +- plugins/search-backend-module-pg/package.json | 8 +- .../package.json | 8 +- plugins/search-backend/package.json | 6 + plugins/search/package.json | 6 + plugins/techdocs-backend/package.json | 6 + plugins/techdocs/package.json | 6 + plugins/user-settings-backend/package.json | 6 + plugins/user-settings/package.json | 6 + yarn.lock | 1 + 68 files changed, 1242 insertions(+), 37 deletions(-) create mode 100644 .changeset/clever-paws-stare.md create mode 100644 .changeset/healthy-moose-tease.md create mode 100644 packages/cli/src/lib/features.test.ts create mode 100644 packages/cli/src/lib/features.ts create mode 100644 packages/cli/src/tests/createFeatureEnvironment.ts diff --git a/.changeset/clever-paws-stare.md b/.changeset/clever-paws-stare.md new file mode 100644 index 0000000000..b3cb421723 --- /dev/null +++ b/.changeset/clever-paws-stare.md @@ -0,0 +1,6 @@ +--- +'@backstage/cli-node': patch +'@backstage/cli': patch +--- + +Added a new step to the `backstage-cli repo fix --publish` command that will annotate default export features to the 'backstage' metadata within plugin package.json. This is to help with identifying the declarative integration points for plugins without needing to fetch or run the plugins first. diff --git a/.changeset/healthy-moose-tease.md b/.changeset/healthy-moose-tease.md new file mode 100644 index 0000000000..1f9ba3952f --- /dev/null +++ b/.changeset/healthy-moose-tease.md @@ -0,0 +1,63 @@ +--- +'@backstage/plugin-scaffolder-backend-module-confluence-to-markdown': patch +'@backstage/plugin-catalog-backend-module-scaffolder-entity-model': patch +'@backstage/plugin-catalog-backend-module-incremental-ingestion': patch +'@backstage/plugin-scaffolder-backend-module-bitbucket-server': patch +'@backstage/plugin-scaffolder-backend-module-bitbucket-cloud': patch +'@backstage/plugin-catalog-backend-module-bitbucket-server': patch +'@backstage/plugin-catalog-backend-module-bitbucket-cloud': patch +'@backstage/plugin-scaffolder-backend-module-cookiecutter': patch +'@backstage/plugin-events-backend-module-bitbucket-cloud': patch +'@backstage/plugin-scaffolder-backend-module-bitbucket': patch +'@backstage/plugin-search-backend-module-elasticsearch': patch +'@backstage/plugin-scaffolder-backend-module-gerrit': patch +'@backstage/plugin-scaffolder-backend-module-github': patch +'@backstage/plugin-scaffolder-backend-module-gitlab': patch +'@backstage/plugin-scaffolder-backend-module-sentry': patch +'@backstage/plugin-scaffolder-backend-module-yeoman': patch +'@backstage/plugin-catalog-backend-module-puppetdb': patch +'@backstage/plugin-scaffolder-backend-module-azure': patch +'@backstage/plugin-scaffolder-backend-module-gitea': patch +'@backstage/plugin-scaffolder-backend-module-rails': patch +'@backstage/plugin-catalog-backend-module-msgraph': patch +'@backstage/plugin-search-backend-module-techdocs': patch +'@backstage/plugin-catalog-backend-module-gerrit': patch +'@backstage/plugin-catalog-backend-module-github': patch +'@backstage/plugin-catalog-backend-module-gitlab': patch +'@backstage/plugin-events-backend-module-aws-sqs': patch +'@backstage/plugin-scaffolder-backend-module-gcp': patch +'@backstage/plugin-search-backend-module-catalog': patch +'@backstage/plugin-search-backend-module-explore': patch +'@backstage/plugin-catalog-backend-module-azure': patch +'@backstage/plugin-events-backend-module-gerrit': patch +'@backstage/plugin-events-backend-module-github': patch +'@backstage/plugin-events-backend-module-gitlab': patch +'@backstage/plugin-events-backend-module-azure': patch +'@backstage/plugin-catalog-backend-module-aws': patch +'@backstage/plugin-catalog-backend-module-gcp': patch +'@backstage/plugin-search-backend-module-pg': patch +'@backstage/plugin-user-settings-backend': patch +'@backstage/plugin-kubernetes-backend': patch +'@backstage/plugin-permission-backend': patch +'@backstage/plugin-scaffolder-backend': patch +'@backstage/plugin-techdocs-backend': patch +'@backstage/plugin-catalog-backend': patch +'@backstage/plugin-catalog-import': patch +'@backstage/plugin-events-backend': patch +'@backstage/plugin-search-backend': patch +'@backstage/plugin-catalog-graph': patch +'@backstage/plugin-proxy-backend': patch +'@backstage/plugin-user-settings': patch +'@backstage/plugin-app-backend': patch +'@backstage/plugin-kubernetes': patch +'@backstage/plugin-scaffolder': patch +'@backstage/plugin-api-docs': patch +'@backstage/plugin-devtools': patch +'@backstage/plugin-techdocs': patch +'@backstage/plugin-catalog': patch +'@backstage/plugin-search': patch +'@backstage/plugin-home': patch +'@backstage/plugin-org': patch +--- + +Added `features` metadata to Package JSON diff --git a/packages/cli-node/api-report.md b/packages/cli-node/api-report.md index f22583dd25..519fe12bf9 100644 --- a/packages/cli-node/api-report.md +++ b/packages/cli-node/api-report.md @@ -12,6 +12,15 @@ export type BackstagePackage = { packageJson: BackstagePackageJson; }; +// @public +export type BackstagePackageFeature = { + path?: string; + type: BackstagePackageFeatureType; +}; + +// @public +export type BackstagePackageFeatureType = (typeof packageFeatureTypes)[number]; + // @public export interface BackstagePackageJson { // (undocumented) @@ -22,6 +31,7 @@ export interface BackstagePackageJson { pluginId?: string | null; pluginPackage?: string; pluginPackages?: string[]; + features?: BackstagePackageFeature[]; }; // (undocumented) bundled?: boolean; @@ -88,6 +98,31 @@ export class GitUtils { // @public export function isMonoRepo(): Promise; +// @public +export const isValidPackageFeatureType: ( + value: string, +) => value is + | '@backstage/TranslationResource' + | '@backstage/TranslationMessages' + | '@backstage/TranslationRef' + | '@backstage/RouteRef' + | '@backstage/SubRouteRef' + | '@backstage/ExternalRouteRef' + | '@backstage/ExtensionDataValue' + | '@backstage/ExtensionDataRef' + | '@backstage/ExtensionInput' + | '@backstage/ExtensionDefinition' + | '@backstage/Extension' + | '@backstage/ExtensionOverrides' + | '@backstage/FrontendPlugin' + | '@backstage/BackstagePlugin' + | '@backstage/FrontendModule' + | '@backstage/BackendFeatureFactory' + | '@backstage/BackendFeature' + | '@backstage/ServiceRef' + | '@backstage/BackstageCredentials' + | '@backstage/ExtensionPoint'; + // @public export class Lockfile { createSimplifiedDependencyGraph(): Map>; @@ -109,6 +144,30 @@ export type LockfileDiffEntry = { range: string; }; +// @public +export const packageFeatureTypes: readonly [ + '@backstage/BackendFeature', + '@backstage/BackendFeatureFactory', + '@backstage/BackstageCredentials', + '@backstage/BackstagePlugin', + '@backstage/Extension', + '@backstage/ExtensionDataRef', + '@backstage/ExtensionDataValue', + '@backstage/ExtensionDefinition', + '@backstage/ExtensionInput', + '@backstage/ExtensionOverrides', + '@backstage/ExtensionPoint', + '@backstage/ExternalRouteRef', + '@backstage/FrontendPlugin', + '@backstage/FrontendModule', + '@backstage/RouteRef', + '@backstage/ServiceRef', + '@backstage/SubRouteRef', + '@backstage/TranslationMessages', + '@backstage/TranslationRef', + '@backstage/TranslationResource', +]; + // @public export class PackageGraph extends Map { collectPackageNames( diff --git a/packages/cli-node/src/monorepo/PackageGraph.ts b/packages/cli-node/src/monorepo/PackageGraph.ts index 69ec99c2dd..374be3add7 100644 --- a/packages/cli-node/src/monorepo/PackageGraph.ts +++ b/packages/cli-node/src/monorepo/PackageGraph.ts @@ -22,6 +22,64 @@ import { GitUtils } from '../git'; import { Lockfile } from './Lockfile'; import { JsonValue } from '@backstage/types'; +/** + * All Backstage system features + * + * @public + */ +export const packageFeatureTypes = [ + '@backstage/BackendFeature', + '@backstage/BackendFeatureFactory', + '@backstage/BackstageCredentials', + '@backstage/BackstagePlugin', + '@backstage/Extension', + '@backstage/ExtensionDataRef', + '@backstage/ExtensionDataValue', + '@backstage/ExtensionDefinition', + '@backstage/ExtensionInput', + '@backstage/ExtensionOverrides', + '@backstage/ExtensionPoint', + '@backstage/ExternalRouteRef', + '@backstage/FrontendPlugin', + '@backstage/FrontendModule', + '@backstage/RouteRef', + '@backstage/ServiceRef', + '@backstage/SubRouteRef', + '@backstage/TranslationMessages', + '@backstage/TranslationRef', + '@backstage/TranslationResource', +] as const; + +/** + * Checks if a string is a valid package feature type. + * + * @public + */ +export const isValidPackageFeatureType = ( + value: string, +): value is BackstagePackageFeatureType => { + return packageFeatureTypes.includes(value as any); +}; + +/** + * The type of a Backstage system feature + * + * @public + */ +export type BackstagePackageFeatureType = (typeof packageFeatureTypes)[number]; + +/** + * Metadata relating to an exported Backstage system component + * + * @public + */ +export type BackstagePackageFeature = { + // The export path, if omitted then it is the default package export + path?: string; + // The type of the export + type: BackstagePackageFeatureType; +}; + /** * Known fields in Backstage package.json files. * @@ -70,6 +128,11 @@ export interface BackstagePackageJson { * All packages that are part of the plugin. Must always and only be set for plugin packages and plugin library packages. */ pluginPackages?: string[]; + + /** + * The Backstage system components exported from this package + */ + features?: BackstagePackageFeature[]; }; exports?: JsonValue; diff --git a/packages/cli-node/src/monorepo/index.ts b/packages/cli-node/src/monorepo/index.ts index fdb8395c16..b0e595077d 100644 --- a/packages/cli-node/src/monorepo/index.ts +++ b/packages/cli-node/src/monorepo/index.ts @@ -16,10 +16,14 @@ export { isMonoRepo } from './isMonoRepo'; export { + packageFeatureTypes, + isValidPackageFeatureType, PackageGraph, type PackageGraphNode, type BackstagePackage, type BackstagePackageJson, + type BackstagePackageFeature, + type BackstagePackageFeatureType, } from './PackageGraph'; export { Lockfile, diff --git a/packages/cli/package.json b/packages/cli/package.json index 9208b5e70e..e33fddee90 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -147,6 +147,7 @@ "swc-loader": "^0.2.3", "tar": "^6.1.12", "terser-webpack-plugin": "^5.1.3", + "ts-morph": "^23.0.0", "util": "^0.12.3", "webpack": "^5.70.0", "webpack-dev-server": "^5.0.0", diff --git a/packages/cli/src/commands/repo/fix.ts b/packages/cli/src/commands/repo/fix.ts index a55440c53f..68b07564fb 100644 --- a/packages/cli/src/commands/repo/fix.ts +++ b/packages/cli/src/commands/repo/fix.ts @@ -14,6 +14,7 @@ * limitations under the License. */ +import { findPaths } from '@backstage/cli-common'; import { BackstagePackage, BackstagePackageJson, @@ -23,9 +24,13 @@ import { } from '@backstage/cli-node'; import { OptionValues } from 'commander'; import fs from 'fs-extra'; +import isEqual from 'lodash/isEqual'; import { resolve as resolvePath, posix, relative as relativePath } from 'path'; +import { Project } from 'ts-morph'; import { paths } from '../../lib/paths'; import { publishPreflightCheck } from '../../lib/publishing'; +import { getFeaturesMetadata } from '../../lib/features'; +import { readEntryPoints } from '../../lib/entryPoints'; /** * A mutable object representing a package.json file with potential fixes. @@ -426,7 +431,46 @@ export function fixPluginPackages( } } -type PackageFixer = (pkg: FixablePackage, packages: FixablePackage[]) => void; +// For each of the defined export locations, we want to annotate +// the backstage field with the exported system components. The +// "exports" field in package.json is a mapping of import paths to file paths. +// +// While the exports field is really flexible, this function will enforce a +// particular structure, which is a Record where the key is the +// import path and the value is the file path. +export function fixPluginFeatures( + pkg: FixablePackage, + _packages: FixablePackage[], + project: Project, +) { + const { dir, packageJson } = pkg; + + if ( + !packageJson.backstage || + !packageJson.backstage.role || + !packageJson.exports + ) { + return; + } + + const entryPoints = readEntryPoints(packageJson); + const { role } = packageJson.backstage; + const featuresMetadata = getFeaturesMetadata(project, role, dir, entryPoints); + + if ( + featuresMetadata.length && + !isEqual(packageJson.backstage.features, featuresMetadata) + ) { + packageJson.backstage.features = featuresMetadata; + pkg.changed = true; + } +} + +type PackageFixer = ( + pkg: FixablePackage, + packages: FixablePackage[], + project: Project, +) => void; export async function command(opts: OptionValues): Promise { const packages = await readFixablePackages(); @@ -440,14 +484,20 @@ export async function command(opts: OptionValues): Promise { fixRepositoryField, fixPluginId, fixPluginPackages, + fixPluginFeatures, // Run the publish preflight check too, to make sure we don't uncover errors during publishing publishPreflightCheck, ); } + const workspaceRoot = findPaths(process.cwd()).targetRoot; + const project = new Project({ + tsConfigFilePath: resolvePath(workspaceRoot, 'tsconfig.json'), + }); + for (const fixer of fixers) { for (const pkg of packages) { - fixer(pkg, packages); + fixer(pkg, packages, project); } } diff --git a/packages/cli/src/lib/features.test.ts b/packages/cli/src/lib/features.test.ts new file mode 100644 index 0000000000..b20ba7c6ac --- /dev/null +++ b/packages/cli/src/lib/features.test.ts @@ -0,0 +1,273 @@ +/* + * 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 { BackstagePackageFeatureType, PackageRole } from '@backstage/cli-node'; +import createFeatureEnvironment from '../tests/createFeatureEnvironment'; +import { getEntryPointExports, getFeaturesMetadata } from './features'; + +describe('features', () => { + describe('for package role', () => { + // This Record makes sure we're checking all package roles + const packageRoles: Record = { + // Allowed + 'backend-plugin': true, + 'backend-plugin-module': true, + 'frontend-plugin': true, + 'frontend-plugin-module': true, + // Disallowed + frontend: false, + backend: false, + cli: false, + 'web-library': false, + 'node-library': false, + 'common-library': false, + }; + + const allowedPackageRoles = Object.keys(packageRoles).filter( + role => packageRoles[role as PackageRole], + ); + + const disallowedPackageRoles = Object.keys(packageRoles).filter( + role => !packageRoles[role as PackageRole], + ); + + it.each(allowedPackageRoles)(`returns features for %s`, r => { + const { project, role, dir, entryPoints } = createFeatureEnvironment({ + role: r as PackageRole, + }); + + expect(getFeaturesMetadata(project, role, dir, entryPoints)).toEqual([ + { + type: '@backstage/BackendFeature', + }, + ]); + }); + + it.each(disallowedPackageRoles)(`does not return features for %s`, r => { + const { project, role, dir, entryPoints } = createFeatureEnvironment({ + role: r as PackageRole, + }); + + expect(getFeaturesMetadata(project, role, dir, entryPoints)).toEqual([]); + }); + }); + + describe('for feature $$type', () => { + // This Record makes sure we're checking all feature types + const featureTypes: Record = { + // Allowed + '@backstage/BackendFeature': true, + '@backstage/BackstagePlugin': true, + '@backstage/FrontendPlugin': true, + '@backstage/FrontendModule': true, + // Disallowed + '@backstage/BackendFeatureFactory': false, + '@backstage/BackstageCredentials': false, + '@backstage/Extension': false, + '@backstage/ExtensionDataRef': false, + '@backstage/ExtensionDataValue': false, + '@backstage/ExtensionDefinition': false, + '@backstage/ExtensionInput': false, + '@backstage/ExtensionOverrides': false, + '@backstage/ExtensionPoint': false, + '@backstage/ExternalRouteRef': false, + '@backstage/RouteRef': false, + '@backstage/ServiceRef': false, + '@backstage/SubRouteRef': false, + '@backstage/TranslationMessages': false, + '@backstage/TranslationRef': false, + '@backstage/TranslationResource': false, + }; + + const allowedFeatureTypes = Object.keys(featureTypes).filter( + $$type => featureTypes[$$type as BackstagePackageFeatureType], + ); + + const disallowedFeatureTypes = Object.keys(featureTypes).filter( + $$type => !featureTypes[$$type as BackstagePackageFeatureType], + ); + + it.each(allowedFeatureTypes)(`returns features for "%s" $$type`, $$type => { + const { project, role, dir, entryPoints } = createFeatureEnvironment({ + $$type: $$type as BackstagePackageFeatureType, + }); + + expect(getFeaturesMetadata(project, role, dir, entryPoints)).toEqual([ + { + type: $$type, + }, + ]); + }); + + it.each(disallowedFeatureTypes)( + `does not return features for "%s" $$type`, + $$type => { + const { project, role, dir, entryPoints } = createFeatureEnvironment({ + $$type: $$type as BackstagePackageFeatureType, + }); + + expect(getFeaturesMetadata(project, role, dir, entryPoints)).toEqual( + [], + ); + }, + ); + }); + + describe('export declaration formats', () => { + it('supports format of "export default ..."', () => { + const { + project, + dir, + entryPoints: [entryPoint], + } = createFeatureEnvironment({ + format: 'DefaultExport', + }); + + expect(getEntryPointExports(entryPoint, project, dir)).toEqual([ + { + location: '.', + name: 'default', + type: '@backstage/BackendFeature', + }, + ]); + }); + + it('supports format of "export { default } from ..."', () => { + const { + project, + dir, + entryPoints: [entryPoint], + } = createFeatureEnvironment({ + format: 'DefaultExportLinked', + }); + + expect(getEntryPointExports(entryPoint, project, dir)).toEqual([ + { + location: '.', + name: 'default', + type: '@backstage/BackendFeature', + }, + ]); + }); + + it('supports format of "export { default, ... } from ..."', () => { + const { + project, + dir, + entryPoints: [entryPoint], + } = createFeatureEnvironment({ + format: 'DefaultExportLinkedWithSibling', + }); + + expect(getEntryPointExports(entryPoint, project, dir)).toEqual([ + { + location: '.', + name: 'default', + type: '@backstage/BackendFeature', + }, + { + location: '.', + name: 'test', + type: '@backstage/BackendFeature', + }, + ]); + }); + + it('supports format of "export const foo = ..."', () => { + const { + project, + dir, + entryPoints: [entryPoint], + } = createFeatureEnvironment({ + format: 'NamedExport', + }); + + expect(getEntryPointExports(entryPoint, project, dir)).toEqual([ + { + location: '.', + name: 'test', + type: '@backstage/BackendFeature', + }, + ]); + }); + + it('supports format of "export * from ..."', () => { + const { + project, + dir, + entryPoints: [entryPoint], + } = createFeatureEnvironment({ + format: 'WildCardExport', + }); + + expect(getEntryPointExports(entryPoint, project, dir)).toEqual([ + { + location: '.', + name: 'test', + type: '@backstage/BackendFeature', + }, + ]); + }); + }); + + describe('entry points', () => { + it('returns features for multiple entry points', () => { + const { project, role, dir, entryPoints } = createFeatureEnvironment({ + exports: { + '.': 'src/index.ts', + './alpha': 'src/alpha.ts', + './beta': 'src/beta.ts', + }, + }); + + expect(getFeaturesMetadata(project, role, dir, entryPoints)).toEqual([ + { + type: '@backstage/BackendFeature', + }, + { + path: './alpha', + type: '@backstage/BackendFeature', + }, + { + path: './beta', + type: '@backstage/BackendFeature', + }, + ]); + }); + + it('ignores entry points that are not .ts or .tsx files', () => { + const { project, role, dir, entryPoints } = createFeatureEnvironment({ + exports: { + '.': 'src/index.js', + }, + }); + + expect(getFeaturesMetadata(project, role, dir, entryPoints)).toEqual([]); + }); + }); + + it('only returns default exports', () => { + const { project, role, dir, entryPoints } = createFeatureEnvironment({ + format: 'DefaultExportLinkedWithSibling', + }); + + expect(getFeaturesMetadata(project, role, dir, entryPoints)).toEqual([ + { + type: '@backstage/BackendFeature', + }, + ]); + }); +}); diff --git a/packages/cli/src/lib/features.ts b/packages/cli/src/lib/features.ts new file mode 100644 index 0000000000..55245abea3 --- /dev/null +++ b/packages/cli/src/lib/features.ts @@ -0,0 +1,163 @@ +/* + * Copyright 2020 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 { + isValidPackageFeatureType, + PackageRole, + type BackstagePackageFeature, + type BackstagePackageFeatureType, +} from '@backstage/cli-node'; +import { Project, SyntaxKind, ts, Type } from 'ts-morph'; +import { resolve as resolvePath } from 'node:path'; +import { EntryPoint } from './entryPoints'; + +// A list of the package roles we want to extract features for +const targetPackageRoles: PackageRole[] = [ + 'backend-plugin', + 'backend-plugin-module', + 'frontend-plugin', + 'frontend-plugin-module', +]; + +// A list of the feature types we want to extract from the project +// and include in the metadata +const targetFeatureTypes: BackstagePackageFeatureType[] = [ + '@backstage/BackendFeature', + '@backstage/BackstagePlugin', + '@backstage/FrontendPlugin', + '@backstage/FrontendModule', +]; + +// Returns all valid Backstage package features from a project +// for all entry points. +export function getFeaturesMetadata( + project: Project, + role: PackageRole, + dir: string, + entryPoints: EntryPoint[], +): BackstagePackageFeature[] { + if (!targetPackageRoles.includes(role)) { + return []; + } + + return entryPoints + .flatMap(entryPoint => getEntryPointExports(entryPoint, project, dir)) + .filter(isDefaultExport) + .filter(isTargetFeatureType) + .map(toBackstagePackageFeature); +} + +type EntryPointExport = { + name: string; + location: string; + type: BackstagePackageFeatureType; +}; + +// Returns all exports (default and named) from an entry point +// that are valid Backstage package features +export function getEntryPointExports( + { mount: location, path, ext }: EntryPoint, + project: Project, + dir: string, +): EntryPointExport[] { + const fullFilePath = resolvePath(dir, path); + const sourceFile = project.getSourceFile(fullFilePath); + + if (!sourceFile || (ext !== '.ts' && ext !== '.tsx')) { + return []; + } + + const exports = []; + + for (const exportSymbol of sourceFile.getExportSymbols()) { + const declaration = exportSymbol.getDeclarations()[0]; + const exportName = declaration.getSymbol()?.getName(); + let exportType: Type | undefined; + + if (declaration) { + if (declaration.isKind(SyntaxKind.ExportAssignment)) { + exportType = declaration.getExpression().getType(); + } else if (declaration.isKind(SyntaxKind.ExportSpecifier)) { + if (!declaration.isTypeOnly()) { + exportType = declaration.getType(); + } + } else if (declaration.isKind(SyntaxKind.VariableDeclaration)) { + exportType = declaration.getType(); + } + } + + if (exportName && exportType) { + const $$type = getBackstagePackageFeature$$TypeFromType(exportType); + + if ($$type) { + exports.push({ + name: exportName, + location, + type: $$type, + }); + } + } + } + + return exports; +} + +// Given a TS type, returns the Backstage package feature $$type value +function getBackstagePackageFeature$$TypeFromType( + type: Type, +): BackstagePackageFeatureType | null { + // Returns the concrete type of a generic type + const exportType = type.getTargetType() ?? type; + + for (const property of exportType.getProperties()) { + if (property.getName() === '$$type') { + const $$type = property + .getValueDeclaration() + ?.getText() + .match(/(?@backstage\/\w+)/)?.groups?.type; + + if ($$type && isValidPackageFeatureType($$type)) { + return $$type; + } + } + } + + return null; +} + +// Returns whether an export is the default export +function isDefaultExport({ name }: EntryPointExport): boolean { + return name === 'default'; +} + +// Returns whether an export is a valid Backstage package feature type +function isTargetFeatureType({ type }: EntryPointExport): boolean { + return targetFeatureTypes.includes(type); +} + +// Converts an entry point export to a Backstage package feature +function toBackstagePackageFeature({ + type, + location, +}: EntryPointExport): BackstagePackageFeature { + const feature: BackstagePackageFeature = { type }; + + if (location !== '.') { + feature.path = location; + } + + return feature; +} diff --git a/packages/cli/src/tests/createFeatureEnvironment.ts b/packages/cli/src/tests/createFeatureEnvironment.ts new file mode 100644 index 0000000000..6313e6439b --- /dev/null +++ b/packages/cli/src/tests/createFeatureEnvironment.ts @@ -0,0 +1,196 @@ +/* + * 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 { BackstagePackageFeatureType, PackageRole } from '@backstage/cli-node'; +import path from 'path'; +import { Project } from 'ts-morph'; +import { EntryPoint } from '../lib/entryPoints'; + +type CreateFeatureEnvironmentOptions = { + $$type?: BackstagePackageFeatureType; + exports?: Record; + format?: + | 'DefaultExport' + | 'DefaultExportLinked' + | 'DefaultExportLinkedWithSibling' + | 'NamedExport' + | 'WildCardExport'; + role?: PackageRole; +}; + +type FeatureEnvironment = { + project: Project; + role: PackageRole; + dir: string; + entryPoints: EntryPoint[]; +}; + +type File = { + path: string; + content: string; +}; + +const createForExports = ( + exports: Record, + content: string, +): File[] => { + return Object.entries(exports).map(([_, filePath]) => ({ + path: `./${filePath}`, + content, + })); +}; + +const createTestType = ($$type: BackstagePackageFeatureType): File[] => [ + { + path: './src/createTestType.ts', + content: ` +export interface TestType { + readonly $$type: '${$$type}'; +}; + +export function createTestType(): TestType { + return { + $$type: '${$$type}', + }; +}; + `, + }, +]; + +const createTestDefaultExport = (exports: Record): File[] => + createForExports( + exports, + ` +import { createTestType } from './createTestType'; + +export { TestType } from './createTestType'; +export default createTestType(); + `, + ); + +const createTestDefaultExportLinked = ( + exports: Record, +): File[] => [ + ...createForExports( + exports, + ` +export { TestType } from './createTestType'; +export { default } from './linked'; + `, + ), + { + path: './src/linked.ts', + content: ` +import { createTestType } from './createTestType'; + +export default createTestType(); + `, + }, +]; + +const createTestDefaultExportLinkedWithSibling = ( + exports: Record, +): File[] => [ + ...createForExports( + exports, + ` +export { TestType } from './createTestType'; +export { default, test } from './linked'; + `, + ), + { + path: './src/linked.ts', + content: ` +import { createTestType } from './createTestType'; + +export const test = createTestType(); +export default createTestType(); + `, + }, +]; + +const createTestNamedExport = (exports: Record): File[] => [ + ...createForExports( + exports, + ` +import { createTestType } from './createTestType'; + +export { TestType } from './createTestType'; +export const test = createTestType(); + `, + ), +]; + +const createTestWildCardExport = (exports: Record): File[] => [ + ...createForExports( + exports, + ` +export * from './linked'; + `, + ), + { + path: './src/linked.ts', + content: ` +import { createTestType } from './createTestType'; + +export { TestType } from './createTestType'; +export const test = createTestType(); +export default createTestType(); + `, + }, +]; + +const formatToFiles = { + DefaultExport: createTestDefaultExport, + DefaultExportLinked: createTestDefaultExportLinked, + DefaultExportLinkedWithSibling: createTestDefaultExportLinkedWithSibling, + NamedExport: createTestNamedExport, + WildCardExport: createTestWildCardExport, +}; + +export default function createFeatureEnvironment( + options?: CreateFeatureEnvironmentOptions, +): FeatureEnvironment { + const { + $$type = '@backstage/BackendFeature', + exports = { '.': 'src/index.ts' }, + format = 'DefaultExport', + role = 'backend-plugin', + } = options ?? {}; + + const project = new Project(); + const entryPoints: EntryPoint[] = Object.entries(exports ?? {}).map( + ([mount, filePath]) => ({ + mount, + path: filePath, + name: mount, + ext: path.extname(filePath), + }), + ); + + const files = [...createTestType($$type), ...formatToFiles[format](exports)]; + + for (const file of files) { + project.createSourceFile(file.path, file.content); + } + + return { + project, + role, + dir: project.getFileSystem().getCurrentDirectory(), + entryPoints, + }; +} diff --git a/plugins/api-docs/package.json b/plugins/api-docs/package.json index 6858d6a81f..4576a93f85 100644 --- a/plugins/api-docs/package.json +++ b/plugins/api-docs/package.json @@ -7,6 +7,12 @@ "pluginId": "api-docs", "pluginPackages": [ "@backstage/plugin-api-docs" + ], + "features": [ + { + "type": "@backstage/FrontendPlugin", + "path": "./alpha" + } ] }, "publishConfig": { diff --git a/plugins/app-backend/package.json b/plugins/app-backend/package.json index 606d5adea6..2d9978e254 100644 --- a/plugins/app-backend/package.json +++ b/plugins/app-backend/package.json @@ -9,6 +9,12 @@ "@backstage/plugin-app", "@backstage/plugin-app-backend", "@backstage/plugin-app-node" + ], + "features": [ + { + "type": "@backstage/BackendFeature", + "path": "./alpha" + } ] }, "publishConfig": { diff --git a/plugins/catalog-backend-module-aws/package.json b/plugins/catalog-backend-module-aws/package.json index 92f11d4b63..c6796e35bd 100644 --- a/plugins/catalog-backend-module-aws/package.json +++ b/plugins/catalog-backend-module-aws/package.json @@ -5,7 +5,13 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "catalog", - "pluginPackage": "@backstage/plugin-catalog-backend" + "pluginPackage": "@backstage/plugin-catalog-backend", + "features": [ + { + "type": "@backstage/BackendFeature", + "path": "./alpha" + } + ] }, "publishConfig": { "access": "public" diff --git a/plugins/catalog-backend-module-azure/package.json b/plugins/catalog-backend-module-azure/package.json index aa0b3663c7..84e3368efb 100644 --- a/plugins/catalog-backend-module-azure/package.json +++ b/plugins/catalog-backend-module-azure/package.json @@ -5,7 +5,13 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "catalog", - "pluginPackage": "@backstage/plugin-catalog-backend" + "pluginPackage": "@backstage/plugin-catalog-backend", + "features": [ + { + "type": "@backstage/BackendFeature", + "path": "./alpha" + } + ] }, "publishConfig": { "access": "public" diff --git a/plugins/catalog-backend-module-bitbucket-cloud/package.json b/plugins/catalog-backend-module-bitbucket-cloud/package.json index 4f0007bb44..5a24423396 100644 --- a/plugins/catalog-backend-module-bitbucket-cloud/package.json +++ b/plugins/catalog-backend-module-bitbucket-cloud/package.json @@ -5,7 +5,13 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "catalog", - "pluginPackage": "@backstage/plugin-catalog-backend" + "pluginPackage": "@backstage/plugin-catalog-backend", + "features": [ + { + "type": "@backstage/BackendFeature", + "path": "./alpha" + } + ] }, "publishConfig": { "access": "public" diff --git a/plugins/catalog-backend-module-bitbucket-server/package.json b/plugins/catalog-backend-module-bitbucket-server/package.json index af12601f87..030d8511ca 100644 --- a/plugins/catalog-backend-module-bitbucket-server/package.json +++ b/plugins/catalog-backend-module-bitbucket-server/package.json @@ -4,7 +4,13 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "catalog", - "pluginPackage": "@backstage/plugin-catalog-backend" + "pluginPackage": "@backstage/plugin-catalog-backend", + "features": [ + { + "type": "@backstage/BackendFeature", + "path": "./alpha" + } + ] }, "publishConfig": { "access": "public" diff --git a/plugins/catalog-backend-module-gcp/package.json b/plugins/catalog-backend-module-gcp/package.json index 13904c905b..b9609dbadf 100644 --- a/plugins/catalog-backend-module-gcp/package.json +++ b/plugins/catalog-backend-module-gcp/package.json @@ -5,7 +5,12 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "catalog", - "pluginPackage": "@backstage/plugin-catalog-backend" + "pluginPackage": "@backstage/plugin-catalog-backend", + "features": [ + { + "type": "@backstage/BackendFeature" + } + ] }, "publishConfig": { "access": "public" diff --git a/plugins/catalog-backend-module-gerrit/package.json b/plugins/catalog-backend-module-gerrit/package.json index caebb75b34..ce2af52542 100644 --- a/plugins/catalog-backend-module-gerrit/package.json +++ b/plugins/catalog-backend-module-gerrit/package.json @@ -4,7 +4,13 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "catalog", - "pluginPackage": "@backstage/plugin-catalog-backend" + "pluginPackage": "@backstage/plugin-catalog-backend", + "features": [ + { + "type": "@backstage/BackendFeature", + "path": "./alpha" + } + ] }, "publishConfig": { "access": "public" diff --git a/plugins/catalog-backend-module-github/package.json b/plugins/catalog-backend-module-github/package.json index 8b05d0f896..f58d08192b 100644 --- a/plugins/catalog-backend-module-github/package.json +++ b/plugins/catalog-backend-module-github/package.json @@ -5,7 +5,13 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "catalog", - "pluginPackage": "@backstage/plugin-catalog-backend" + "pluginPackage": "@backstage/plugin-catalog-backend", + "features": [ + { + "type": "@backstage/BackendFeature", + "path": "./alpha" + } + ] }, "publishConfig": { "access": "public" diff --git a/plugins/catalog-backend-module-gitlab/package.json b/plugins/catalog-backend-module-gitlab/package.json index ef8d1f9148..126cad0bed 100644 --- a/plugins/catalog-backend-module-gitlab/package.json +++ b/plugins/catalog-backend-module-gitlab/package.json @@ -5,7 +5,13 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "catalog", - "pluginPackage": "@backstage/plugin-catalog-backend" + "pluginPackage": "@backstage/plugin-catalog-backend", + "features": [ + { + "type": "@backstage/BackendFeature", + "path": "./alpha" + } + ] }, "publishConfig": { "access": "public" diff --git a/plugins/catalog-backend-module-incremental-ingestion/package.json b/plugins/catalog-backend-module-incremental-ingestion/package.json index 4e964ccc9d..1c55b088e1 100644 --- a/plugins/catalog-backend-module-incremental-ingestion/package.json +++ b/plugins/catalog-backend-module-incremental-ingestion/package.json @@ -5,7 +5,13 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "catalog", - "pluginPackage": "@backstage/plugin-catalog-backend" + "pluginPackage": "@backstage/plugin-catalog-backend", + "features": [ + { + "type": "@backstage/BackendFeature", + "path": "./alpha" + } + ] }, "publishConfig": { "access": "public" diff --git a/plugins/catalog-backend-module-msgraph/package.json b/plugins/catalog-backend-module-msgraph/package.json index ebdd9bc316..e8c1a41ecb 100644 --- a/plugins/catalog-backend-module-msgraph/package.json +++ b/plugins/catalog-backend-module-msgraph/package.json @@ -5,7 +5,13 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "catalog", - "pluginPackage": "@backstage/plugin-catalog-backend" + "pluginPackage": "@backstage/plugin-catalog-backend", + "features": [ + { + "type": "@backstage/BackendFeature", + "path": "./alpha" + } + ] }, "publishConfig": { "access": "public" diff --git a/plugins/catalog-backend-module-puppetdb/package.json b/plugins/catalog-backend-module-puppetdb/package.json index 670dbe23a2..5d71befbb5 100644 --- a/plugins/catalog-backend-module-puppetdb/package.json +++ b/plugins/catalog-backend-module-puppetdb/package.json @@ -5,7 +5,13 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "catalog", - "pluginPackage": "@backstage/plugin-catalog-backend" + "pluginPackage": "@backstage/plugin-catalog-backend", + "features": [ + { + "type": "@backstage/BackendFeature", + "path": "./alpha" + } + ] }, "publishConfig": { "access": "public" diff --git a/plugins/catalog-backend-module-scaffolder-entity-model/package.json b/plugins/catalog-backend-module-scaffolder-entity-model/package.json index d64b3b468e..565fe94206 100644 --- a/plugins/catalog-backend-module-scaffolder-entity-model/package.json +++ b/plugins/catalog-backend-module-scaffolder-entity-model/package.json @@ -5,7 +5,12 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "catalog", - "pluginPackage": "@backstage/plugin-catalog-backend" + "pluginPackage": "@backstage/plugin-catalog-backend", + "features": [ + { + "type": "@backstage/BackendFeature" + } + ] }, "publishConfig": { "access": "public" diff --git a/plugins/catalog-backend/package.json b/plugins/catalog-backend/package.json index 4826758d01..8aac88ac51 100644 --- a/plugins/catalog-backend/package.json +++ b/plugins/catalog-backend/package.json @@ -11,6 +11,12 @@ "@backstage/plugin-catalog-common", "@backstage/plugin-catalog-node", "@backstage/plugin-catalog-react" + ], + "features": [ + { + "type": "@backstage/BackendFeature", + "path": "./alpha" + } ] }, "publishConfig": { diff --git a/plugins/catalog-graph/package.json b/plugins/catalog-graph/package.json index 4e83990c95..14dfe03579 100644 --- a/plugins/catalog-graph/package.json +++ b/plugins/catalog-graph/package.json @@ -6,6 +6,12 @@ "pluginId": "catalog-graph", "pluginPackages": [ "@backstage/plugin-catalog-graph" + ], + "features": [ + { + "type": "@backstage/FrontendPlugin", + "path": "./alpha" + } ] }, "publishConfig": { diff --git a/plugins/catalog-import/package.json b/plugins/catalog-import/package.json index 964dbd3c33..fb6d40220f 100644 --- a/plugins/catalog-import/package.json +++ b/plugins/catalog-import/package.json @@ -7,6 +7,12 @@ "pluginId": "catalog-import", "pluginPackages": [ "@backstage/plugin-catalog-import" + ], + "features": [ + { + "type": "@backstage/FrontendPlugin", + "path": "./alpha" + } ] }, "publishConfig": { diff --git a/plugins/catalog/package.json b/plugins/catalog/package.json index 317e91fa4d..606ebb16d1 100644 --- a/plugins/catalog/package.json +++ b/plugins/catalog/package.json @@ -11,6 +11,12 @@ "@backstage/plugin-catalog-common", "@backstage/plugin-catalog-node", "@backstage/plugin-catalog-react" + ], + "features": [ + { + "type": "@backstage/FrontendPlugin", + "path": "./alpha" + } ] }, "publishConfig": { diff --git a/plugins/devtools/package.json b/plugins/devtools/package.json index 9e4c0caab6..1b0f14b193 100644 --- a/plugins/devtools/package.json +++ b/plugins/devtools/package.json @@ -8,6 +8,12 @@ "@backstage/plugin-devtools", "@backstage/plugin-devtools-backend", "@backstage/plugin-devtools-common" + ], + "features": [ + { + "type": "@backstage/FrontendPlugin", + "path": "./alpha" + } ] }, "publishConfig": { diff --git a/plugins/events-backend-module-aws-sqs/package.json b/plugins/events-backend-module-aws-sqs/package.json index d109490dce..8eac12d934 100644 --- a/plugins/events-backend-module-aws-sqs/package.json +++ b/plugins/events-backend-module-aws-sqs/package.json @@ -4,7 +4,13 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "events", - "pluginPackage": "@backstage/plugin-events-backend" + "pluginPackage": "@backstage/plugin-events-backend", + "features": [ + { + "type": "@backstage/BackendFeature", + "path": "./alpha" + } + ] }, "publishConfig": { "access": "public" diff --git a/plugins/events-backend-module-azure/package.json b/plugins/events-backend-module-azure/package.json index 91cd11d286..376f507c07 100644 --- a/plugins/events-backend-module-azure/package.json +++ b/plugins/events-backend-module-azure/package.json @@ -4,7 +4,13 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "events", - "pluginPackage": "@backstage/plugin-events-backend" + "pluginPackage": "@backstage/plugin-events-backend", + "features": [ + { + "type": "@backstage/BackendFeature", + "path": "./alpha" + } + ] }, "publishConfig": { "access": "public" diff --git a/plugins/events-backend-module-bitbucket-cloud/package.json b/plugins/events-backend-module-bitbucket-cloud/package.json index 423fbde187..e6c6f835eb 100644 --- a/plugins/events-backend-module-bitbucket-cloud/package.json +++ b/plugins/events-backend-module-bitbucket-cloud/package.json @@ -4,7 +4,13 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "events", - "pluginPackage": "@backstage/plugin-events-backend" + "pluginPackage": "@backstage/plugin-events-backend", + "features": [ + { + "type": "@backstage/BackendFeature", + "path": "./alpha" + } + ] }, "publishConfig": { "access": "public" diff --git a/plugins/events-backend-module-gerrit/package.json b/plugins/events-backend-module-gerrit/package.json index 6f1bc451d9..65c09cd4ad 100644 --- a/plugins/events-backend-module-gerrit/package.json +++ b/plugins/events-backend-module-gerrit/package.json @@ -4,7 +4,13 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "events", - "pluginPackage": "@backstage/plugin-events-backend" + "pluginPackage": "@backstage/plugin-events-backend", + "features": [ + { + "type": "@backstage/BackendFeature", + "path": "./alpha" + } + ] }, "publishConfig": { "access": "public" diff --git a/plugins/events-backend/package.json b/plugins/events-backend/package.json index 84ff688b16..998b76b091 100644 --- a/plugins/events-backend/package.json +++ b/plugins/events-backend/package.json @@ -8,6 +8,12 @@ "@backstage/plugin-events-backend", "@backstage/plugin-events-backend-test-utils", "@backstage/plugin-events-node" + ], + "features": [ + { + "type": "@backstage/BackendFeature", + "path": "./alpha" + } ] }, "publishConfig": { diff --git a/plugins/home/package.json b/plugins/home/package.json index 617778dd52..f5987fcf24 100644 --- a/plugins/home/package.json +++ b/plugins/home/package.json @@ -8,6 +8,12 @@ "pluginPackages": [ "@backstage/plugin-home", "@backstage/plugin-home-react" + ], + "features": [ + { + "type": "@backstage/FrontendPlugin", + "path": "./alpha" + } ] }, "publishConfig": { diff --git a/plugins/kubernetes-backend/package.json b/plugins/kubernetes-backend/package.json index f47fd650e4..5ee33a8357 100644 --- a/plugins/kubernetes-backend/package.json +++ b/plugins/kubernetes-backend/package.json @@ -11,6 +11,12 @@ "@backstage/plugin-kubernetes-common", "@backstage/plugin-kubernetes-node", "@backstage/plugin-kubernetes-react" + ], + "features": [ + { + "type": "@backstage/BackendFeature", + "path": "./alpha" + } ] }, "publishConfig": { diff --git a/plugins/kubernetes/package.json b/plugins/kubernetes/package.json index 789c3375ce..e8a798d85b 100644 --- a/plugins/kubernetes/package.json +++ b/plugins/kubernetes/package.json @@ -11,6 +11,12 @@ "@backstage/plugin-kubernetes-common", "@backstage/plugin-kubernetes-node", "@backstage/plugin-kubernetes-react" + ], + "features": [ + { + "type": "@backstage/FrontendPlugin", + "path": "./alpha" + } ] }, "publishConfig": { diff --git a/plugins/org/package.json b/plugins/org/package.json index 88d1e783ca..fb9878fa52 100644 --- a/plugins/org/package.json +++ b/plugins/org/package.json @@ -8,6 +8,12 @@ "pluginPackages": [ "@backstage/plugin-org", "@backstage/plugin-org-react" + ], + "features": [ + { + "type": "@backstage/FrontendPlugin", + "path": "./alpha" + } ] }, "publishConfig": { diff --git a/plugins/permission-backend/package.json b/plugins/permission-backend/package.json index be82562f0f..eec76b67ad 100644 --- a/plugins/permission-backend/package.json +++ b/plugins/permission-backend/package.json @@ -9,6 +9,12 @@ "@backstage/plugin-permission-common", "@backstage/plugin-permission-node", "@backstage/plugin-permission-react" + ], + "features": [ + { + "type": "@backstage/BackendFeature", + "path": "./alpha" + } ] }, "publishConfig": { diff --git a/plugins/proxy-backend/package.json b/plugins/proxy-backend/package.json index 4ba5b7df15..08edd2c406 100644 --- a/plugins/proxy-backend/package.json +++ b/plugins/proxy-backend/package.json @@ -7,6 +7,12 @@ "pluginId": "proxy", "pluginPackages": [ "@backstage/plugin-proxy-backend" + ], + "features": [ + { + "type": "@backstage/BackendFeature", + "path": "./alpha" + } ] }, "publishConfig": { diff --git a/plugins/scaffolder-backend-module-azure/package.json b/plugins/scaffolder-backend-module-azure/package.json index 7c5dd0a317..3203ac11f8 100644 --- a/plugins/scaffolder-backend-module-azure/package.json +++ b/plugins/scaffolder-backend-module-azure/package.json @@ -5,7 +5,12 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "scaffolder", - "pluginPackage": "@backstage/plugin-scaffolder-backend" + "pluginPackage": "@backstage/plugin-scaffolder-backend", + "features": [ + { + "type": "@backstage/BackendFeature" + } + ] }, "publishConfig": { "access": "public" diff --git a/plugins/scaffolder-backend-module-bitbucket-cloud/package.json b/plugins/scaffolder-backend-module-bitbucket-cloud/package.json index cb8cbd7400..9da56ff11f 100644 --- a/plugins/scaffolder-backend-module-bitbucket-cloud/package.json +++ b/plugins/scaffolder-backend-module-bitbucket-cloud/package.json @@ -5,7 +5,12 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "scaffolder", - "pluginPackage": "@backstage/plugin-scaffolder-backend" + "pluginPackage": "@backstage/plugin-scaffolder-backend", + "features": [ + { + "type": "@backstage/BackendFeature" + } + ] }, "publishConfig": { "access": "public" diff --git a/plugins/scaffolder-backend-module-bitbucket-server/package.json b/plugins/scaffolder-backend-module-bitbucket-server/package.json index 585668ddb5..bf0dc415df 100644 --- a/plugins/scaffolder-backend-module-bitbucket-server/package.json +++ b/plugins/scaffolder-backend-module-bitbucket-server/package.json @@ -5,7 +5,12 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "scaffolder", - "pluginPackage": "@backstage/plugin-scaffolder-backend" + "pluginPackage": "@backstage/plugin-scaffolder-backend", + "features": [ + { + "type": "@backstage/BackendFeature" + } + ] }, "publishConfig": { "access": "public" diff --git a/plugins/scaffolder-backend-module-bitbucket/package.json b/plugins/scaffolder-backend-module-bitbucket/package.json index f579ea62b3..43149fa2ba 100644 --- a/plugins/scaffolder-backend-module-bitbucket/package.json +++ b/plugins/scaffolder-backend-module-bitbucket/package.json @@ -5,7 +5,12 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "scaffolder", - "pluginPackage": "@backstage/plugin-scaffolder-backend" + "pluginPackage": "@backstage/plugin-scaffolder-backend", + "features": [ + { + "type": "@backstage/BackendFeature" + } + ] }, "publishConfig": { "access": "public" diff --git a/plugins/scaffolder-backend-module-confluence-to-markdown/package.json b/plugins/scaffolder-backend-module-confluence-to-markdown/package.json index 9259eb0798..4e872be8a8 100644 --- a/plugins/scaffolder-backend-module-confluence-to-markdown/package.json +++ b/plugins/scaffolder-backend-module-confluence-to-markdown/package.json @@ -5,7 +5,12 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "scaffolder", - "pluginPackage": "@backstage/plugin-scaffolder-backend" + "pluginPackage": "@backstage/plugin-scaffolder-backend", + "features": [ + { + "type": "@backstage/BackendFeature" + } + ] }, "publishConfig": { "access": "public" diff --git a/plugins/scaffolder-backend-module-cookiecutter/package.json b/plugins/scaffolder-backend-module-cookiecutter/package.json index 467afb4339..5776875d16 100644 --- a/plugins/scaffolder-backend-module-cookiecutter/package.json +++ b/plugins/scaffolder-backend-module-cookiecutter/package.json @@ -5,7 +5,12 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "scaffolder", - "pluginPackage": "@backstage/plugin-scaffolder-backend" + "pluginPackage": "@backstage/plugin-scaffolder-backend", + "features": [ + { + "type": "@backstage/BackendFeature" + } + ] }, "publishConfig": { "access": "public" diff --git a/plugins/scaffolder-backend-module-gcp/package.json b/plugins/scaffolder-backend-module-gcp/package.json index 355b84c774..4b29179a44 100644 --- a/plugins/scaffolder-backend-module-gcp/package.json +++ b/plugins/scaffolder-backend-module-gcp/package.json @@ -5,7 +5,12 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "scaffolder", - "pluginPackage": "@backstage/plugin-scaffolder-backend" + "pluginPackage": "@backstage/plugin-scaffolder-backend", + "features": [ + { + "type": "@backstage/BackendFeature" + } + ] }, "publishConfig": { "access": "public" diff --git a/plugins/scaffolder-backend-module-gerrit/package.json b/plugins/scaffolder-backend-module-gerrit/package.json index 90136f4c34..8f6a772b08 100644 --- a/plugins/scaffolder-backend-module-gerrit/package.json +++ b/plugins/scaffolder-backend-module-gerrit/package.json @@ -5,7 +5,12 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "scaffolder", - "pluginPackage": "@backstage/plugin-scaffolder-backend" + "pluginPackage": "@backstage/plugin-scaffolder-backend", + "features": [ + { + "type": "@backstage/BackendFeature" + } + ] }, "publishConfig": { "access": "public" diff --git a/plugins/scaffolder-backend-module-gitea/package.json b/plugins/scaffolder-backend-module-gitea/package.json index 1f597f70ae..98c0e80e3e 100644 --- a/plugins/scaffolder-backend-module-gitea/package.json +++ b/plugins/scaffolder-backend-module-gitea/package.json @@ -5,7 +5,12 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "scaffolder", - "pluginPackage": "@backstage/plugin-scaffolder-backend" + "pluginPackage": "@backstage/plugin-scaffolder-backend", + "features": [ + { + "type": "@backstage/BackendFeature" + } + ] }, "publishConfig": { "access": "public" diff --git a/plugins/scaffolder-backend-module-github/package.json b/plugins/scaffolder-backend-module-github/package.json index 9ebd61f809..fe4ad110ad 100644 --- a/plugins/scaffolder-backend-module-github/package.json +++ b/plugins/scaffolder-backend-module-github/package.json @@ -5,7 +5,12 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "scaffolder", - "pluginPackage": "@backstage/plugin-scaffolder-backend" + "pluginPackage": "@backstage/plugin-scaffolder-backend", + "features": [ + { + "type": "@backstage/BackendFeature" + } + ] }, "publishConfig": { "access": "public" diff --git a/plugins/scaffolder-backend-module-gitlab/package.json b/plugins/scaffolder-backend-module-gitlab/package.json index 2b73a9ce71..6c4b80ec92 100644 --- a/plugins/scaffolder-backend-module-gitlab/package.json +++ b/plugins/scaffolder-backend-module-gitlab/package.json @@ -4,7 +4,12 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "scaffolder", - "pluginPackage": "@backstage/plugin-scaffolder-backend" + "pluginPackage": "@backstage/plugin-scaffolder-backend", + "features": [ + { + "type": "@backstage/BackendFeature" + } + ] }, "publishConfig": { "access": "public" diff --git a/plugins/scaffolder-backend-module-rails/package.json b/plugins/scaffolder-backend-module-rails/package.json index 26c2c9aca1..63ed830f47 100644 --- a/plugins/scaffolder-backend-module-rails/package.json +++ b/plugins/scaffolder-backend-module-rails/package.json @@ -5,7 +5,12 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "scaffolder", - "pluginPackage": "@backstage/plugin-scaffolder-backend" + "pluginPackage": "@backstage/plugin-scaffolder-backend", + "features": [ + { + "type": "@backstage/BackendFeature" + } + ] }, "publishConfig": { "access": "public" diff --git a/plugins/scaffolder-backend-module-sentry/package.json b/plugins/scaffolder-backend-module-sentry/package.json index 8b15f66689..0e1546a247 100644 --- a/plugins/scaffolder-backend-module-sentry/package.json +++ b/plugins/scaffolder-backend-module-sentry/package.json @@ -4,7 +4,12 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "scaffolder", - "pluginPackage": "@backstage/plugin-scaffolder-backend" + "pluginPackage": "@backstage/plugin-scaffolder-backend", + "features": [ + { + "type": "@backstage/BackendFeature" + } + ] }, "publishConfig": { "access": "public" diff --git a/plugins/scaffolder-backend-module-yeoman/package.json b/plugins/scaffolder-backend-module-yeoman/package.json index 5303cc543e..60a68975f1 100644 --- a/plugins/scaffolder-backend-module-yeoman/package.json +++ b/plugins/scaffolder-backend-module-yeoman/package.json @@ -4,7 +4,12 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "scaffolder", - "pluginPackage": "@backstage/plugin-scaffolder-backend" + "pluginPackage": "@backstage/plugin-scaffolder-backend", + "features": [ + { + "type": "@backstage/BackendFeature" + } + ] }, "publishConfig": { "access": "public" diff --git a/plugins/scaffolder-backend/package.json b/plugins/scaffolder-backend/package.json index a4a8b1fdf2..0471eb5fba 100644 --- a/plugins/scaffolder-backend/package.json +++ b/plugins/scaffolder-backend/package.json @@ -12,6 +12,12 @@ "@backstage/plugin-scaffolder-node", "@backstage/plugin-scaffolder-node-test-utils", "@backstage/plugin-scaffolder-react" + ], + "features": [ + { + "type": "@backstage/BackendFeature", + "path": "./alpha" + } ] }, "publishConfig": { diff --git a/plugins/scaffolder/package.json b/plugins/scaffolder/package.json index c4fe3ab8ad..482ce13631 100644 --- a/plugins/scaffolder/package.json +++ b/plugins/scaffolder/package.json @@ -12,6 +12,12 @@ "@backstage/plugin-scaffolder-node", "@backstage/plugin-scaffolder-node-test-utils", "@backstage/plugin-scaffolder-react" + ], + "features": [ + { + "type": "@backstage/FrontendPlugin", + "path": "./alpha" + } ] }, "publishConfig": { diff --git a/plugins/search-backend-module-catalog/package.json b/plugins/search-backend-module-catalog/package.json index f3cd8ff7b0..3ca2f84501 100644 --- a/plugins/search-backend-module-catalog/package.json +++ b/plugins/search-backend-module-catalog/package.json @@ -5,7 +5,13 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "search", - "pluginPackage": "@backstage/plugin-search-backend" + "pluginPackage": "@backstage/plugin-search-backend", + "features": [ + { + "type": "@backstage/BackendFeature", + "path": "./alpha" + } + ] }, "publishConfig": { "access": "public" diff --git a/plugins/search-backend-module-elasticsearch/package.json b/plugins/search-backend-module-elasticsearch/package.json index 4b1d173048..840cf23f0d 100644 --- a/plugins/search-backend-module-elasticsearch/package.json +++ b/plugins/search-backend-module-elasticsearch/package.json @@ -5,7 +5,13 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "search", - "pluginPackage": "@backstage/plugin-search-backend" + "pluginPackage": "@backstage/plugin-search-backend", + "features": [ + { + "type": "@backstage/BackendFeature", + "path": "./alpha" + } + ] }, "publishConfig": { "access": "public" diff --git a/plugins/search-backend-module-explore/package.json b/plugins/search-backend-module-explore/package.json index aef6c7fd61..312a7af1b9 100644 --- a/plugins/search-backend-module-explore/package.json +++ b/plugins/search-backend-module-explore/package.json @@ -5,7 +5,13 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "search", - "pluginPackage": "@backstage/plugin-search-backend" + "pluginPackage": "@backstage/plugin-search-backend", + "features": [ + { + "type": "@backstage/BackendFeature", + "path": "./alpha" + } + ] }, "publishConfig": { "access": "public" diff --git a/plugins/search-backend-module-pg/package.json b/plugins/search-backend-module-pg/package.json index 7147f83840..ef2a583d86 100644 --- a/plugins/search-backend-module-pg/package.json +++ b/plugins/search-backend-module-pg/package.json @@ -5,7 +5,13 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "search", - "pluginPackage": "@backstage/plugin-search-backend" + "pluginPackage": "@backstage/plugin-search-backend", + "features": [ + { + "type": "@backstage/BackendFeature", + "path": "./alpha" + } + ] }, "publishConfig": { "access": "public" diff --git a/plugins/search-backend-module-techdocs/package.json b/plugins/search-backend-module-techdocs/package.json index 6d89f7601a..81a594cc9c 100644 --- a/plugins/search-backend-module-techdocs/package.json +++ b/plugins/search-backend-module-techdocs/package.json @@ -5,7 +5,13 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "search", - "pluginPackage": "@backstage/plugin-search-backend" + "pluginPackage": "@backstage/plugin-search-backend", + "features": [ + { + "type": "@backstage/BackendFeature", + "path": "./alpha" + } + ] }, "publishConfig": { "access": "public" diff --git a/plugins/search-backend/package.json b/plugins/search-backend/package.json index 05dc6ba72e..f1ec4087f1 100644 --- a/plugins/search-backend/package.json +++ b/plugins/search-backend/package.json @@ -11,6 +11,12 @@ "@backstage/plugin-search-backend-node", "@backstage/plugin-search-common", "@backstage/plugin-search-react" + ], + "features": [ + { + "type": "@backstage/BackendFeature", + "path": "./alpha" + } ] }, "publishConfig": { diff --git a/plugins/search/package.json b/plugins/search/package.json index eb45b7f3b1..279c926428 100644 --- a/plugins/search/package.json +++ b/plugins/search/package.json @@ -11,6 +11,12 @@ "@backstage/plugin-search-backend-node", "@backstage/plugin-search-common", "@backstage/plugin-search-react" + ], + "features": [ + { + "type": "@backstage/FrontendPlugin", + "path": "./alpha" + } ] }, "publishConfig": { diff --git a/plugins/techdocs-backend/package.json b/plugins/techdocs-backend/package.json index 7006bd2758..872e0752bd 100644 --- a/plugins/techdocs-backend/package.json +++ b/plugins/techdocs-backend/package.json @@ -11,6 +11,12 @@ "@backstage/plugin-techdocs-common", "@backstage/plugin-techdocs-node", "@backstage/plugin-techdocs-react" + ], + "features": [ + { + "type": "@backstage/BackendFeature", + "path": "./alpha" + } ] }, "publishConfig": { diff --git a/plugins/techdocs/package.json b/plugins/techdocs/package.json index 4274f77072..70684ce581 100644 --- a/plugins/techdocs/package.json +++ b/plugins/techdocs/package.json @@ -11,6 +11,12 @@ "@backstage/plugin-techdocs-common", "@backstage/plugin-techdocs-node", "@backstage/plugin-techdocs-react" + ], + "features": [ + { + "type": "@backstage/FrontendPlugin", + "path": "./alpha" + } ] }, "publishConfig": { diff --git a/plugins/user-settings-backend/package.json b/plugins/user-settings-backend/package.json index 8a6b5e2882..415202297d 100644 --- a/plugins/user-settings-backend/package.json +++ b/plugins/user-settings-backend/package.json @@ -9,6 +9,12 @@ "@backstage/plugin-user-settings", "@backstage/plugin-user-settings-backend", "@backstage/plugin-user-settings-common" + ], + "features": [ + { + "type": "@backstage/BackendFeature", + "path": "./alpha" + } ] }, "publishConfig": { diff --git a/plugins/user-settings/package.json b/plugins/user-settings/package.json index 3d545ca6ee..772cccee42 100644 --- a/plugins/user-settings/package.json +++ b/plugins/user-settings/package.json @@ -9,6 +9,12 @@ "@backstage/plugin-user-settings", "@backstage/plugin-user-settings-backend", "@backstage/plugin-user-settings-common" + ], + "features": [ + { + "type": "@backstage/FrontendPlugin", + "path": "./alpha" + } ] }, "publishConfig": { diff --git a/yarn.lock b/yarn.lock index 659c3d4635..ad8a46a2f9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4025,6 +4025,7 @@ __metadata: swc-loader: ^0.2.3 tar: ^6.1.12 terser-webpack-plugin: ^5.1.3 + ts-morph: ^23.0.0 util: ^0.12.3 vite: ^5.0.0 vite-plugin-html: ^3.2.2 From 4e8a82eb68e6230e33388f4eb003e274cbfc3a75 Mon Sep 17 00:00:00 2001 From: Harrison Hogg Date: Wed, 11 Sep 2024 14:40:37 +0100 Subject: [PATCH 007/164] Include web-library and node-library as target package roles Signed-off-by: Harrison Hogg --- packages/cli/src/lib/features.test.ts | 4 ++-- packages/cli/src/lib/features.ts | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/cli/src/lib/features.test.ts b/packages/cli/src/lib/features.test.ts index b20ba7c6ac..43b9a8923f 100644 --- a/packages/cli/src/lib/features.test.ts +++ b/packages/cli/src/lib/features.test.ts @@ -27,12 +27,12 @@ describe('features', () => { 'backend-plugin-module': true, 'frontend-plugin': true, 'frontend-plugin-module': true, + 'web-library': true, + 'node-library': true, // Disallowed frontend: false, backend: false, cli: false, - 'web-library': false, - 'node-library': false, 'common-library': false, }; diff --git a/packages/cli/src/lib/features.ts b/packages/cli/src/lib/features.ts index 55245abea3..fd1b35d972 100644 --- a/packages/cli/src/lib/features.ts +++ b/packages/cli/src/lib/features.ts @@ -30,6 +30,8 @@ const targetPackageRoles: PackageRole[] = [ 'backend-plugin-module', 'frontend-plugin', 'frontend-plugin-module', + 'web-library', + 'node-library', ]; // A list of the feature types we want to extract from the project From c837e6d7d89b5be75c1961412592eca67901f442 Mon Sep 17 00:00:00 2001 From: Harrison Hogg Date: Thu, 12 Sep 2024 14:16:20 +0100 Subject: [PATCH 008/164] Change default feature export to happen in publish script Signed-off-by: Harrison Hogg --- .../cli-node/src/monorepo/PackageGraph.ts | 17 -- packages/cli-node/src/monorepo/index.ts | 1 - packages/cli/src/commands/repo/fix.ts | 54 +--- .../__testUtils__/createFeatureEnvironment.ts | 155 ++++++++++ packages/cli/src/lib/features.test.ts | 273 ------------------ packages/cli/src/lib/features.ts | 165 ----------- .../cli/src/lib/packager/productionPack.ts | 20 ++ packages/cli/src/lib/typeDistProject.test.ts | 141 +++++++++ packages/cli/src/lib/typeDistProject.ts | 240 +++++++++++++++ .../cli/src/tests/createFeatureEnvironment.ts | 196 ------------- 10 files changed, 558 insertions(+), 704 deletions(-) create mode 100644 packages/cli/src/lib/__testUtils__/createFeatureEnvironment.ts delete mode 100644 packages/cli/src/lib/features.test.ts delete mode 100644 packages/cli/src/lib/features.ts create mode 100644 packages/cli/src/lib/typeDistProject.test.ts create mode 100644 packages/cli/src/lib/typeDistProject.ts delete mode 100644 packages/cli/src/tests/createFeatureEnvironment.ts diff --git a/packages/cli-node/src/monorepo/PackageGraph.ts b/packages/cli-node/src/monorepo/PackageGraph.ts index 374be3add7..0394fd34ca 100644 --- a/packages/cli-node/src/monorepo/PackageGraph.ts +++ b/packages/cli-node/src/monorepo/PackageGraph.ts @@ -68,18 +68,6 @@ export const isValidPackageFeatureType = ( */ export type BackstagePackageFeatureType = (typeof packageFeatureTypes)[number]; -/** - * Metadata relating to an exported Backstage system component - * - * @public - */ -export type BackstagePackageFeature = { - // The export path, if omitted then it is the default package export - path?: string; - // The type of the export - type: BackstagePackageFeatureType; -}; - /** * Known fields in Backstage package.json files. * @@ -128,11 +116,6 @@ export interface BackstagePackageJson { * All packages that are part of the plugin. Must always and only be set for plugin packages and plugin library packages. */ pluginPackages?: string[]; - - /** - * The Backstage system components exported from this package - */ - features?: BackstagePackageFeature[]; }; exports?: JsonValue; diff --git a/packages/cli-node/src/monorepo/index.ts b/packages/cli-node/src/monorepo/index.ts index b0e595077d..b4ed921613 100644 --- a/packages/cli-node/src/monorepo/index.ts +++ b/packages/cli-node/src/monorepo/index.ts @@ -22,7 +22,6 @@ export { type PackageGraphNode, type BackstagePackage, type BackstagePackageJson, - type BackstagePackageFeature, type BackstagePackageFeatureType, } from './PackageGraph'; export { diff --git a/packages/cli/src/commands/repo/fix.ts b/packages/cli/src/commands/repo/fix.ts index 68b07564fb..a55440c53f 100644 --- a/packages/cli/src/commands/repo/fix.ts +++ b/packages/cli/src/commands/repo/fix.ts @@ -14,7 +14,6 @@ * limitations under the License. */ -import { findPaths } from '@backstage/cli-common'; import { BackstagePackage, BackstagePackageJson, @@ -24,13 +23,9 @@ import { } from '@backstage/cli-node'; import { OptionValues } from 'commander'; import fs from 'fs-extra'; -import isEqual from 'lodash/isEqual'; import { resolve as resolvePath, posix, relative as relativePath } from 'path'; -import { Project } from 'ts-morph'; import { paths } from '../../lib/paths'; import { publishPreflightCheck } from '../../lib/publishing'; -import { getFeaturesMetadata } from '../../lib/features'; -import { readEntryPoints } from '../../lib/entryPoints'; /** * A mutable object representing a package.json file with potential fixes. @@ -431,46 +426,7 @@ export function fixPluginPackages( } } -// For each of the defined export locations, we want to annotate -// the backstage field with the exported system components. The -// "exports" field in package.json is a mapping of import paths to file paths. -// -// While the exports field is really flexible, this function will enforce a -// particular structure, which is a Record where the key is the -// import path and the value is the file path. -export function fixPluginFeatures( - pkg: FixablePackage, - _packages: FixablePackage[], - project: Project, -) { - const { dir, packageJson } = pkg; - - if ( - !packageJson.backstage || - !packageJson.backstage.role || - !packageJson.exports - ) { - return; - } - - const entryPoints = readEntryPoints(packageJson); - const { role } = packageJson.backstage; - const featuresMetadata = getFeaturesMetadata(project, role, dir, entryPoints); - - if ( - featuresMetadata.length && - !isEqual(packageJson.backstage.features, featuresMetadata) - ) { - packageJson.backstage.features = featuresMetadata; - pkg.changed = true; - } -} - -type PackageFixer = ( - pkg: FixablePackage, - packages: FixablePackage[], - project: Project, -) => void; +type PackageFixer = (pkg: FixablePackage, packages: FixablePackage[]) => void; export async function command(opts: OptionValues): Promise { const packages = await readFixablePackages(); @@ -484,20 +440,14 @@ export async function command(opts: OptionValues): Promise { fixRepositoryField, fixPluginId, fixPluginPackages, - fixPluginFeatures, // Run the publish preflight check too, to make sure we don't uncover errors during publishing publishPreflightCheck, ); } - const workspaceRoot = findPaths(process.cwd()).targetRoot; - const project = new Project({ - tsConfigFilePath: resolvePath(workspaceRoot, 'tsconfig.json'), - }); - for (const fixer of fixers) { for (const pkg of packages) { - fixer(pkg, packages, project); + fixer(pkg, packages); } } diff --git a/packages/cli/src/lib/__testUtils__/createFeatureEnvironment.ts b/packages/cli/src/lib/__testUtils__/createFeatureEnvironment.ts new file mode 100644 index 0000000000..7d7eeeeeaf --- /dev/null +++ b/packages/cli/src/lib/__testUtils__/createFeatureEnvironment.ts @@ -0,0 +1,155 @@ +/* + * 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 { BackstagePackageFeatureType, PackageRole } from '@backstage/cli-node'; +import { resolve as resolvePath } from 'path'; +import { Project } from 'ts-morph'; +import { EntryPoint } from '../entryPoints'; +import { getDistTypeRoot } from '../typeDistProject'; + +const mockEntryPoint = { + mount: '.', + path: './src/index.d.ts', + name: 'index', + ext: '.d.ts', +}; + +type CreateFeatureEnvironmentOptions = { + $$type?: BackstagePackageFeatureType; + format?: + | 'DefaultExportAssignment' + | 'DefaultExportFromFile' + | 'DefaultExportFromFileAsDefault' + | 'DefaultExportFromFileWithSibling'; + role?: PackageRole; +}; + +type FeatureEnvironment = { + project: Project; + role: PackageRole; + dir: string; + entryPoint: EntryPoint; +}; + +type File = { + path: string; + content: string; +}; + +const createTestType = ($$type: BackstagePackageFeatureType): File[] => [ + { + path: './src/createTestType.d.ts', + content: ` +export interface TestType { + readonly $$type: '${$$type}'; +}; + +export function createTestType(): TestType { + return { + $$type: '${$$type}', + }; +}; + `, + }, +]; + +const createMockDefaultExportAssignment = (): File[] => [ + { + path: mockEntryPoint.path, + content: ` +declare const _default: import("./createTestType").TestType; +export default _default; + `, + }, +]; + +const createMockDefaultExportFromFile = (): File[] => [ + { + path: mockEntryPoint.path, + content: `export { default } from './linked';`, + }, + { + path: './src/linked.d.ts', + content: ` +declare const _default: import("./createTestType").TestType; +export default _default; +`, + }, +]; + +const createMockDefaultExportFromFileAsDefault = (): File[] => [ + { + path: mockEntryPoint.path, + content: `export { test as default } from './linked';`, + }, + { + path: './src/linked.d.ts', + content: ` +export declare const test: import("./createTestType").TestType; + `, + }, +]; + +const createMockDefaultExportFromFileWithSibling = (): File[] => [ + { + path: mockEntryPoint.path, + content: `export { default, test } from './linked';`, + }, + { + path: './src/linked.d.ts', + content: ` +import { createTestType } from './createTestType'; + +export declare const test: import("./createTestType").TestType; +declare const _default: import("./createTestType").TestType; +export default _default; + `, + }, +]; + +const formatToFiles = { + DefaultExportAssignment: createMockDefaultExportAssignment, + DefaultExportFromFile: createMockDefaultExportFromFile, + DefaultExportFromFileAsDefault: createMockDefaultExportFromFileAsDefault, + DefaultExportFromFileWithSibling: createMockDefaultExportFromFileWithSibling, +}; + +export default function createFeatureEnvironment( + options?: CreateFeatureEnvironmentOptions, +): FeatureEnvironment { + const { + $$type = '@backstage/BackendFeature', + format = 'DefaultExportAssignment', + role = 'backend-plugin', + } = options ?? {}; + + const project = new Project(); + const files = [...createTestType($$type), ...formatToFiles[format]()]; + + for (const file of files) { + project.createSourceFile( + resolvePath(getDistTypeRoot(''), file.path), + file.content, + ); + } + + return { + project, + role, + dir: project.getFileSystem().getCurrentDirectory(), + entryPoint: mockEntryPoint, + }; +} diff --git a/packages/cli/src/lib/features.test.ts b/packages/cli/src/lib/features.test.ts deleted file mode 100644 index 43b9a8923f..0000000000 --- a/packages/cli/src/lib/features.test.ts +++ /dev/null @@ -1,273 +0,0 @@ -/* - * 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 { BackstagePackageFeatureType, PackageRole } from '@backstage/cli-node'; -import createFeatureEnvironment from '../tests/createFeatureEnvironment'; -import { getEntryPointExports, getFeaturesMetadata } from './features'; - -describe('features', () => { - describe('for package role', () => { - // This Record makes sure we're checking all package roles - const packageRoles: Record = { - // Allowed - 'backend-plugin': true, - 'backend-plugin-module': true, - 'frontend-plugin': true, - 'frontend-plugin-module': true, - 'web-library': true, - 'node-library': true, - // Disallowed - frontend: false, - backend: false, - cli: false, - 'common-library': false, - }; - - const allowedPackageRoles = Object.keys(packageRoles).filter( - role => packageRoles[role as PackageRole], - ); - - const disallowedPackageRoles = Object.keys(packageRoles).filter( - role => !packageRoles[role as PackageRole], - ); - - it.each(allowedPackageRoles)(`returns features for %s`, r => { - const { project, role, dir, entryPoints } = createFeatureEnvironment({ - role: r as PackageRole, - }); - - expect(getFeaturesMetadata(project, role, dir, entryPoints)).toEqual([ - { - type: '@backstage/BackendFeature', - }, - ]); - }); - - it.each(disallowedPackageRoles)(`does not return features for %s`, r => { - const { project, role, dir, entryPoints } = createFeatureEnvironment({ - role: r as PackageRole, - }); - - expect(getFeaturesMetadata(project, role, dir, entryPoints)).toEqual([]); - }); - }); - - describe('for feature $$type', () => { - // This Record makes sure we're checking all feature types - const featureTypes: Record = { - // Allowed - '@backstage/BackendFeature': true, - '@backstage/BackstagePlugin': true, - '@backstage/FrontendPlugin': true, - '@backstage/FrontendModule': true, - // Disallowed - '@backstage/BackendFeatureFactory': false, - '@backstage/BackstageCredentials': false, - '@backstage/Extension': false, - '@backstage/ExtensionDataRef': false, - '@backstage/ExtensionDataValue': false, - '@backstage/ExtensionDefinition': false, - '@backstage/ExtensionInput': false, - '@backstage/ExtensionOverrides': false, - '@backstage/ExtensionPoint': false, - '@backstage/ExternalRouteRef': false, - '@backstage/RouteRef': false, - '@backstage/ServiceRef': false, - '@backstage/SubRouteRef': false, - '@backstage/TranslationMessages': false, - '@backstage/TranslationRef': false, - '@backstage/TranslationResource': false, - }; - - const allowedFeatureTypes = Object.keys(featureTypes).filter( - $$type => featureTypes[$$type as BackstagePackageFeatureType], - ); - - const disallowedFeatureTypes = Object.keys(featureTypes).filter( - $$type => !featureTypes[$$type as BackstagePackageFeatureType], - ); - - it.each(allowedFeatureTypes)(`returns features for "%s" $$type`, $$type => { - const { project, role, dir, entryPoints } = createFeatureEnvironment({ - $$type: $$type as BackstagePackageFeatureType, - }); - - expect(getFeaturesMetadata(project, role, dir, entryPoints)).toEqual([ - { - type: $$type, - }, - ]); - }); - - it.each(disallowedFeatureTypes)( - `does not return features for "%s" $$type`, - $$type => { - const { project, role, dir, entryPoints } = createFeatureEnvironment({ - $$type: $$type as BackstagePackageFeatureType, - }); - - expect(getFeaturesMetadata(project, role, dir, entryPoints)).toEqual( - [], - ); - }, - ); - }); - - describe('export declaration formats', () => { - it('supports format of "export default ..."', () => { - const { - project, - dir, - entryPoints: [entryPoint], - } = createFeatureEnvironment({ - format: 'DefaultExport', - }); - - expect(getEntryPointExports(entryPoint, project, dir)).toEqual([ - { - location: '.', - name: 'default', - type: '@backstage/BackendFeature', - }, - ]); - }); - - it('supports format of "export { default } from ..."', () => { - const { - project, - dir, - entryPoints: [entryPoint], - } = createFeatureEnvironment({ - format: 'DefaultExportLinked', - }); - - expect(getEntryPointExports(entryPoint, project, dir)).toEqual([ - { - location: '.', - name: 'default', - type: '@backstage/BackendFeature', - }, - ]); - }); - - it('supports format of "export { default, ... } from ..."', () => { - const { - project, - dir, - entryPoints: [entryPoint], - } = createFeatureEnvironment({ - format: 'DefaultExportLinkedWithSibling', - }); - - expect(getEntryPointExports(entryPoint, project, dir)).toEqual([ - { - location: '.', - name: 'default', - type: '@backstage/BackendFeature', - }, - { - location: '.', - name: 'test', - type: '@backstage/BackendFeature', - }, - ]); - }); - - it('supports format of "export const foo = ..."', () => { - const { - project, - dir, - entryPoints: [entryPoint], - } = createFeatureEnvironment({ - format: 'NamedExport', - }); - - expect(getEntryPointExports(entryPoint, project, dir)).toEqual([ - { - location: '.', - name: 'test', - type: '@backstage/BackendFeature', - }, - ]); - }); - - it('supports format of "export * from ..."', () => { - const { - project, - dir, - entryPoints: [entryPoint], - } = createFeatureEnvironment({ - format: 'WildCardExport', - }); - - expect(getEntryPointExports(entryPoint, project, dir)).toEqual([ - { - location: '.', - name: 'test', - type: '@backstage/BackendFeature', - }, - ]); - }); - }); - - describe('entry points', () => { - it('returns features for multiple entry points', () => { - const { project, role, dir, entryPoints } = createFeatureEnvironment({ - exports: { - '.': 'src/index.ts', - './alpha': 'src/alpha.ts', - './beta': 'src/beta.ts', - }, - }); - - expect(getFeaturesMetadata(project, role, dir, entryPoints)).toEqual([ - { - type: '@backstage/BackendFeature', - }, - { - path: './alpha', - type: '@backstage/BackendFeature', - }, - { - path: './beta', - type: '@backstage/BackendFeature', - }, - ]); - }); - - it('ignores entry points that are not .ts or .tsx files', () => { - const { project, role, dir, entryPoints } = createFeatureEnvironment({ - exports: { - '.': 'src/index.js', - }, - }); - - expect(getFeaturesMetadata(project, role, dir, entryPoints)).toEqual([]); - }); - }); - - it('only returns default exports', () => { - const { project, role, dir, entryPoints } = createFeatureEnvironment({ - format: 'DefaultExportLinkedWithSibling', - }); - - expect(getFeaturesMetadata(project, role, dir, entryPoints)).toEqual([ - { - type: '@backstage/BackendFeature', - }, - ]); - }); -}); diff --git a/packages/cli/src/lib/features.ts b/packages/cli/src/lib/features.ts deleted file mode 100644 index fd1b35d972..0000000000 --- a/packages/cli/src/lib/features.ts +++ /dev/null @@ -1,165 +0,0 @@ -/* - * Copyright 2020 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 { - isValidPackageFeatureType, - PackageRole, - type BackstagePackageFeature, - type BackstagePackageFeatureType, -} from '@backstage/cli-node'; -import { Project, SyntaxKind, ts, Type } from 'ts-morph'; -import { resolve as resolvePath } from 'node:path'; -import { EntryPoint } from './entryPoints'; - -// A list of the package roles we want to extract features for -const targetPackageRoles: PackageRole[] = [ - 'backend-plugin', - 'backend-plugin-module', - 'frontend-plugin', - 'frontend-plugin-module', - 'web-library', - 'node-library', -]; - -// A list of the feature types we want to extract from the project -// and include in the metadata -const targetFeatureTypes: BackstagePackageFeatureType[] = [ - '@backstage/BackendFeature', - '@backstage/BackstagePlugin', - '@backstage/FrontendPlugin', - '@backstage/FrontendModule', -]; - -// Returns all valid Backstage package features from a project -// for all entry points. -export function getFeaturesMetadata( - project: Project, - role: PackageRole, - dir: string, - entryPoints: EntryPoint[], -): BackstagePackageFeature[] { - if (!targetPackageRoles.includes(role)) { - return []; - } - - return entryPoints - .flatMap(entryPoint => getEntryPointExports(entryPoint, project, dir)) - .filter(isDefaultExport) - .filter(isTargetFeatureType) - .map(toBackstagePackageFeature); -} - -type EntryPointExport = { - name: string; - location: string; - type: BackstagePackageFeatureType; -}; - -// Returns all exports (default and named) from an entry point -// that are valid Backstage package features -export function getEntryPointExports( - { mount: location, path, ext }: EntryPoint, - project: Project, - dir: string, -): EntryPointExport[] { - const fullFilePath = resolvePath(dir, path); - const sourceFile = project.getSourceFile(fullFilePath); - - if (!sourceFile || (ext !== '.ts' && ext !== '.tsx')) { - return []; - } - - const exports = []; - - for (const exportSymbol of sourceFile.getExportSymbols()) { - const declaration = exportSymbol.getDeclarations()[0]; - const exportName = declaration.getSymbol()?.getName(); - let exportType: Type | undefined; - - if (declaration) { - if (declaration.isKind(SyntaxKind.ExportAssignment)) { - exportType = declaration.getExpression().getType(); - } else if (declaration.isKind(SyntaxKind.ExportSpecifier)) { - if (!declaration.isTypeOnly()) { - exportType = declaration.getType(); - } - } else if (declaration.isKind(SyntaxKind.VariableDeclaration)) { - exportType = declaration.getType(); - } - } - - if (exportName && exportType) { - const $$type = getBackstagePackageFeature$$TypeFromType(exportType); - - if ($$type) { - exports.push({ - name: exportName, - location, - type: $$type, - }); - } - } - } - - return exports; -} - -// Given a TS type, returns the Backstage package feature $$type value -function getBackstagePackageFeature$$TypeFromType( - type: Type, -): BackstagePackageFeatureType | null { - // Returns the concrete type of a generic type - const exportType = type.getTargetType() ?? type; - - for (const property of exportType.getProperties()) { - if (property.getName() === '$$type') { - const $$type = property - .getValueDeclaration() - ?.getText() - .match(/(?@backstage\/\w+)/)?.groups?.type; - - if ($$type && isValidPackageFeatureType($$type)) { - return $$type; - } - } - } - - return null; -} - -// Returns whether an export is the default export -function isDefaultExport({ name }: EntryPointExport): boolean { - return name === 'default'; -} - -// Returns whether an export is a valid Backstage package feature type -function isTargetFeatureType({ type }: EntryPointExport): boolean { - return targetFeatureTypes.includes(type); -} - -// Converts an entry point export to a Backstage package feature -function toBackstagePackageFeature({ - type, - location, -}: EntryPointExport): BackstagePackageFeature { - const feature: BackstagePackageFeature = { type }; - - if (location !== '.') { - feature.path = location; - } - - return feature; -} diff --git a/packages/cli/src/lib/packager/productionPack.ts b/packages/cli/src/lib/packager/productionPack.ts index 3c2b5aa89e..e4a1c13ffd 100644 --- a/packages/cli/src/lib/packager/productionPack.ts +++ b/packages/cli/src/lib/packager/productionPack.ts @@ -19,6 +19,10 @@ import npmPackList from 'npm-packlist'; import { resolve as resolvePath, posix as posixPath } from 'path'; import { BackstagePackageJson } from '@backstage/cli-node'; import { readEntryPoints } from '../entryPoints'; +import { + createTypeDistProject, + getEntryPointDefaultFeatureType, +} from '../typeDistProject'; const PKG_PATH = 'package.json'; const PKG_BACKUP_PATH = 'package.json-prepack'; @@ -147,11 +151,14 @@ async function prepareExportsEntryPoints( >(); const entryPoints = readEntryPoints(pkg); + const project = await createTypeDistProject(); + for (const entryPoint of entryPoints) { if (!SCRIPT_EXTS.includes(entryPoint.ext)) { outputExports[entryPoint.mount] = entryPoint.path; continue; } + const exp = {} as Record; for (const [key, ext] of Object.entries(EXPORT_MAP)) { const name = `${entryPoint.name}${ext}`; @@ -161,6 +168,19 @@ async function prepareExportsEntryPoints( } exp.default = exp.require ?? exp.import; + const defaultFeatureType = + pkg.backstage?.role && + getEntryPointDefaultFeatureType( + pkg.backstage?.role, + packageDir, + project, + entryPoint, + ); + + if (defaultFeatureType) { + exp.backstage = defaultFeatureType; + } + // This creates a directory with a lone package.json for backwards compatibility if (entryPoint.mount === '.') { if (exp.default) { diff --git a/packages/cli/src/lib/typeDistProject.test.ts b/packages/cli/src/lib/typeDistProject.test.ts new file mode 100644 index 0000000000..f3168dd9be --- /dev/null +++ b/packages/cli/src/lib/typeDistProject.test.ts @@ -0,0 +1,141 @@ +/* + * 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 { BackstagePackageFeatureType, PackageRole } from '@backstage/cli-node'; +import createFeatureEnvironment from './__testUtils__/createFeatureEnvironment'; +import { getEntryPointDefaultFeatureType } from './typeDistProject'; + +describe('typeDistProject', () => { + describe('for package role', () => { + // This Record makes sure we're checking all package roles + const packageRoles: Record = { + // Allowed + 'backend-plugin': true, + 'backend-plugin-module': true, + 'frontend-plugin': true, + 'frontend-plugin-module': true, + 'web-library': true, + 'node-library': true, + // Disallowed + frontend: false, + backend: false, + cli: false, + 'common-library': false, + }; + + const allowedPackageRoles = Object.keys(packageRoles).filter( + role => packageRoles[role as PackageRole], + ); + + const disallowedPackageRoles = Object.keys(packageRoles).filter( + role => !packageRoles[role as PackageRole], + ); + + it.each(allowedPackageRoles)(`returns features for %s`, r => { + const { project, role, dir, entryPoint } = createFeatureEnvironment({ + role: r as PackageRole, + }); + + expect( + getEntryPointDefaultFeatureType(role, dir, project, entryPoint), + ).toEqual('@backstage/BackendFeature'); + }); + + it.each(disallowedPackageRoles)(`does not return features for %s`, r => { + const { project, role, dir, entryPoint } = createFeatureEnvironment({ + role: r as PackageRole, + }); + + expect( + getEntryPointDefaultFeatureType(role, dir, project, entryPoint), + ).toEqual(null); + }); + }); + + describe('for feature $$type', () => { + // This Record makes sure we're checking all feature types + const featureTypes: Record = { + // Allowed + '@backstage/BackendFeature': true, + '@backstage/BackstagePlugin': true, + '@backstage/FrontendPlugin': true, + '@backstage/FrontendModule': true, + // Disallowed + '@backstage/BackendFeatureFactory': false, + '@backstage/BackstageCredentials': false, + '@backstage/Extension': false, + '@backstage/ExtensionDataRef': false, + '@backstage/ExtensionDataValue': false, + '@backstage/ExtensionDefinition': false, + '@backstage/ExtensionInput': false, + '@backstage/ExtensionOverrides': false, + '@backstage/ExtensionPoint': false, + '@backstage/ExternalRouteRef': false, + '@backstage/RouteRef': false, + '@backstage/ServiceRef': false, + '@backstage/SubRouteRef': false, + '@backstage/TranslationMessages': false, + '@backstage/TranslationRef': false, + '@backstage/TranslationResource': false, + }; + + const allowedFeatureTypes = Object.keys(featureTypes).filter( + $$type => featureTypes[$$type as BackstagePackageFeatureType], + ); + + const disallowedFeatureTypes = Object.keys(featureTypes).filter( + $$type => !featureTypes[$$type as BackstagePackageFeatureType], + ); + + it.each(allowedFeatureTypes)(`returns features for "%s" $$type`, $$type => { + const { project, role, dir, entryPoint } = createFeatureEnvironment({ + $$type: $$type as BackstagePackageFeatureType, + }); + + expect( + getEntryPointDefaultFeatureType(role, dir, project, entryPoint), + ).toEqual($$type); + }); + + it.each(disallowedFeatureTypes)( + `does not return features for "%s" $$type`, + $$type => { + const { project, role, dir, entryPoint } = createFeatureEnvironment({ + $$type: $$type as BackstagePackageFeatureType, + }); + + expect( + getEntryPointDefaultFeatureType(role, dir, project, entryPoint), + ).toEqual(null); + }, + ); + }); + + it.each([ + 'DefaultExportAssignment', + 'DefaultExportFromFile', + 'DefaultExportFromFileAsDefault', + 'DefaultExportFromFileWithSibling', + ] as const)('returns features for format "%s"', format => { + const { project, role, dir, entryPoint } = createFeatureEnvironment({ + format, + }); + + expect( + getEntryPointDefaultFeatureType(role, dir, project, entryPoint), + ).toEqual('@backstage/BackendFeature'); + }); +}); diff --git a/packages/cli/src/lib/typeDistProject.ts b/packages/cli/src/lib/typeDistProject.ts new file mode 100644 index 0000000000..4fa970957d --- /dev/null +++ b/packages/cli/src/lib/typeDistProject.ts @@ -0,0 +1,240 @@ +/* + * 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 { findPaths } from '@backstage/cli-common'; +import { + BackstagePackageFeatureType, + isValidPackageFeatureType, + PackageGraph, + PackageRole, +} from '@backstage/cli-node'; +import { builtinModules } from 'module'; +import { resolve as resolvePath } from 'path'; +import { Project, SourceFile, SyntaxKind, ts, Type } from 'ts-morph'; +import { EntryPoint, readEntryPoints } from './entryPoints'; + +export const getDistTypeRoot = (dir: string) => { + const workspaceRoot = findPaths(process.cwd()).targetRoot; + const relativeDirectory = dir.replace(workspaceRoot, ''); + const distTypeRoot = resolvePath( + workspaceRoot, + `./dist-types${relativeDirectory}`, + ); + + return distTypeRoot; +}; + +const getPackagesDistTypeMap = async () => { + const packages = await PackageGraph.listTargetPackages(); + const distTypeMap: Record = {}; + + for (const { dir, packageJson } of packages) { + const distTypeRoot = getDistTypeRoot(dir); + + for (const { name, path, ext } of readEntryPoints(packageJson)) { + const dtsPath = resolvePath(distTypeRoot, path.replace(ext, '.d.ts')); + + if (name === 'index') { + distTypeMap[packageJson.name] = dtsPath; + } else { + distTypeMap[`${packageJson.name}/${name}`] = dtsPath; + } + } + } + + return distTypeMap; +}; + +export const createTypeDistProject = async () => { + const distTypeMap = await getPackagesDistTypeMap(); + const workspaceRoot = findPaths(process.cwd()).targetRoot; + + return new Project({ + tsConfigFilePath: resolvePath(workspaceRoot, 'tsconfig.json'), + skipAddingFilesFromTsConfig: true, + resolutionHost: (moduleResolutionHost, getCompilerOptions) => { + return { + resolveModuleNames: (moduleNames, containingFile) => { + const compilerOptions = getCompilerOptions(); + const resolvedModules: ts.ResolvedModule[] = []; + + for (let moduleName of moduleNames) { + // Handle resolve internal plugins and package entry points to dist-types folder + if (distTypeMap[moduleName]) { + resolvedModules.push({ + resolvedFileName: distTypeMap[moduleName], + isExternalLibraryImport: false, + resolvedUsingTsExtension: false, + }); + continue; + } + + // Handle resolving builtin node modules to @types/node + if (moduleName.startsWith('node:')) { + moduleName = moduleName.slice(5); + } + if (builtinModules.includes(moduleName)) { + const result = ts.resolveModuleName( + `@types/node/${moduleName}`, + containingFile, + compilerOptions, + moduleResolutionHost, + ); + + if (result.resolvedModule) { + resolvedModules.push(result.resolvedModule); + continue; + } + } + + // Handle resolve relative paths and external node_modules. + const result = ts.resolveModuleName( + moduleName, + containingFile, + compilerOptions, + moduleResolutionHost, + ); + + if (result.resolvedModule) { + resolvedModules.push(result.resolvedModule); + continue; + } + + throw new Error(`Failed to resolve module: ${moduleName}`); + } + + return resolvedModules; + }, + }; + }, + }); +}; + +// A list of the package roles we want to extract features for +const targetPackageRoles: PackageRole[] = [ + 'backend-plugin', + 'backend-plugin-module', + 'frontend-plugin', + 'frontend-plugin-module', + 'web-library', + 'node-library', +]; + +// A list of the feature types we want to extract from the project +// and include in the metadata +const targetFeatureTypes: BackstagePackageFeatureType[] = [ + '@backstage/BackendFeature', + '@backstage/BackstagePlugin', + '@backstage/FrontendPlugin', + '@backstage/FrontendModule', +]; + +export const getEntryPointDefaultFeatureType = ( + role: PackageRole, + packageDir: string, + project: Project, + entryPoint: EntryPoint, +): BackstagePackageFeatureType | null => { + if (isTargetPackageRole(role)) { + const dtsPath = resolvePath( + getDistTypeRoot(packageDir), + entryPoint.path.replace(entryPoint.ext, '.d.ts'), + ); + + const defaultFeatureType = getSourceFileDefaultFeatureType( + project.addSourceFileAtPath(dtsPath), + ); + + if (isTargetFeatureType(defaultFeatureType)) { + return defaultFeatureType; + } + } + + return null; +}; + +// Condition for a package role matches a target package role +function isTargetPackageRole(role: PackageRole): boolean { + return !!role && targetPackageRoles.includes(role); +} + +// Returns whether an export is a valid Backstage package feature type +function isTargetFeatureType( + type: BackstagePackageFeatureType | null, +): boolean { + return !!type && targetFeatureTypes.includes(type); +} + +// Returns all exports (default and named) from an entry point +// that are valid Backstage package features +function getSourceFileDefaultFeatureType( + sourceFile: SourceFile, +): BackstagePackageFeatureType | null { + for (const exportSymbol of sourceFile.getExportSymbols()) { + const declaration = exportSymbol.getDeclarations()[0]; + const exportName = declaration.getSymbol()?.getName(); + + if (exportName !== 'default') { + continue; + } + + let exportType: Type | undefined; + + if (declaration) { + if (declaration.isKind(SyntaxKind.ExportAssignment)) { + exportType = declaration.getExpression().getType(); + } else if (declaration.isKind(SyntaxKind.ExportSpecifier)) { + if (!declaration.isTypeOnly()) { + exportType = declaration.getType(); + } + } else if (declaration.isKind(SyntaxKind.VariableDeclaration)) { + exportType = declaration.getType(); + } + } + + if (exportName && exportType) { + const $$type = getBackstagePackageFeature$$TypeFromType(exportType); + + if ($$type) { + return $$type; + } + } + } + + return null; +} + +// Given a TS type, returns the Backstage package feature $$type value +function getBackstagePackageFeature$$TypeFromType( + type: Type, +): BackstagePackageFeatureType | null { + // Returns the concrete type of a generic type + const exportType = type.getTargetType() ?? type; + + for (const property of exportType.getProperties()) { + if (property.getName() === '$$type') { + const $$type = property + .getValueDeclaration() + ?.getText() + .match(/(?@backstage\/\w+)/)?.groups?.type; + + if ($$type && isValidPackageFeatureType($$type)) { + return $$type; + } + } + } + + return null; +} diff --git a/packages/cli/src/tests/createFeatureEnvironment.ts b/packages/cli/src/tests/createFeatureEnvironment.ts deleted file mode 100644 index 6313e6439b..0000000000 --- a/packages/cli/src/tests/createFeatureEnvironment.ts +++ /dev/null @@ -1,196 +0,0 @@ -/* - * 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 { BackstagePackageFeatureType, PackageRole } from '@backstage/cli-node'; -import path from 'path'; -import { Project } from 'ts-morph'; -import { EntryPoint } from '../lib/entryPoints'; - -type CreateFeatureEnvironmentOptions = { - $$type?: BackstagePackageFeatureType; - exports?: Record; - format?: - | 'DefaultExport' - | 'DefaultExportLinked' - | 'DefaultExportLinkedWithSibling' - | 'NamedExport' - | 'WildCardExport'; - role?: PackageRole; -}; - -type FeatureEnvironment = { - project: Project; - role: PackageRole; - dir: string; - entryPoints: EntryPoint[]; -}; - -type File = { - path: string; - content: string; -}; - -const createForExports = ( - exports: Record, - content: string, -): File[] => { - return Object.entries(exports).map(([_, filePath]) => ({ - path: `./${filePath}`, - content, - })); -}; - -const createTestType = ($$type: BackstagePackageFeatureType): File[] => [ - { - path: './src/createTestType.ts', - content: ` -export interface TestType { - readonly $$type: '${$$type}'; -}; - -export function createTestType(): TestType { - return { - $$type: '${$$type}', - }; -}; - `, - }, -]; - -const createTestDefaultExport = (exports: Record): File[] => - createForExports( - exports, - ` -import { createTestType } from './createTestType'; - -export { TestType } from './createTestType'; -export default createTestType(); - `, - ); - -const createTestDefaultExportLinked = ( - exports: Record, -): File[] => [ - ...createForExports( - exports, - ` -export { TestType } from './createTestType'; -export { default } from './linked'; - `, - ), - { - path: './src/linked.ts', - content: ` -import { createTestType } from './createTestType'; - -export default createTestType(); - `, - }, -]; - -const createTestDefaultExportLinkedWithSibling = ( - exports: Record, -): File[] => [ - ...createForExports( - exports, - ` -export { TestType } from './createTestType'; -export { default, test } from './linked'; - `, - ), - { - path: './src/linked.ts', - content: ` -import { createTestType } from './createTestType'; - -export const test = createTestType(); -export default createTestType(); - `, - }, -]; - -const createTestNamedExport = (exports: Record): File[] => [ - ...createForExports( - exports, - ` -import { createTestType } from './createTestType'; - -export { TestType } from './createTestType'; -export const test = createTestType(); - `, - ), -]; - -const createTestWildCardExport = (exports: Record): File[] => [ - ...createForExports( - exports, - ` -export * from './linked'; - `, - ), - { - path: './src/linked.ts', - content: ` -import { createTestType } from './createTestType'; - -export { TestType } from './createTestType'; -export const test = createTestType(); -export default createTestType(); - `, - }, -]; - -const formatToFiles = { - DefaultExport: createTestDefaultExport, - DefaultExportLinked: createTestDefaultExportLinked, - DefaultExportLinkedWithSibling: createTestDefaultExportLinkedWithSibling, - NamedExport: createTestNamedExport, - WildCardExport: createTestWildCardExport, -}; - -export default function createFeatureEnvironment( - options?: CreateFeatureEnvironmentOptions, -): FeatureEnvironment { - const { - $$type = '@backstage/BackendFeature', - exports = { '.': 'src/index.ts' }, - format = 'DefaultExport', - role = 'backend-plugin', - } = options ?? {}; - - const project = new Project(); - const entryPoints: EntryPoint[] = Object.entries(exports ?? {}).map( - ([mount, filePath]) => ({ - mount, - path: filePath, - name: mount, - ext: path.extname(filePath), - }), - ); - - const files = [...createTestType($$type), ...formatToFiles[format](exports)]; - - for (const file of files) { - project.createSourceFile(file.path, file.content); - } - - return { - project, - role, - dir: project.getFileSystem().getCurrentDirectory(), - entryPoints, - }; -} From 48100b59bdd0d9990907819240aa6f40c075cee0 Mon Sep 17 00:00:00 2001 From: Harrison Hogg Date: Thu, 12 Sep 2024 15:40:07 +0100 Subject: [PATCH 009/164] Removed package json features edits Signed-off-by: Harrison Hogg --- plugins/api-docs/package.json | 6 ------ plugins/app-backend/package.json | 6 ------ plugins/catalog-backend-module-aws/package.json | 8 +------- plugins/catalog-backend-module-azure/package.json | 8 +------- .../catalog-backend-module-bitbucket-cloud/package.json | 8 +------- .../catalog-backend-module-bitbucket-server/package.json | 8 +------- plugins/catalog-backend-module-gcp/package.json | 7 +------ plugins/catalog-backend-module-gerrit/package.json | 8 +------- plugins/catalog-backend-module-github/package.json | 8 +------- plugins/catalog-backend-module-gitlab/package.json | 8 +------- .../package.json | 8 +------- plugins/catalog-backend-module-msgraph/package.json | 8 +------- plugins/catalog-backend-module-puppetdb/package.json | 8 +------- .../package.json | 7 +------ plugins/catalog-backend/package.json | 6 ------ plugins/catalog-graph/package.json | 6 ------ plugins/catalog-import/package.json | 6 ------ plugins/catalog/package.json | 6 ------ plugins/devtools/package.json | 6 ------ plugins/events-backend-module-aws-sqs/package.json | 8 +------- plugins/events-backend-module-azure/package.json | 8 +------- .../events-backend-module-bitbucket-cloud/package.json | 8 +------- plugins/events-backend-module-gerrit/package.json | 8 +------- plugins/events-backend/package.json | 6 ------ plugins/home/package.json | 6 ------ plugins/kubernetes-backend/package.json | 6 ------ plugins/kubernetes/package.json | 6 ------ plugins/org/package.json | 6 ------ plugins/permission-backend/package.json | 6 ------ plugins/proxy-backend/package.json | 6 ------ plugins/scaffolder-backend-module-azure/package.json | 7 +------ .../package.json | 7 +------ .../package.json | 7 +------ plugins/scaffolder-backend-module-bitbucket/package.json | 7 +------ .../package.json | 7 +------ .../scaffolder-backend-module-cookiecutter/package.json | 7 +------ plugins/scaffolder-backend-module-gcp/package.json | 7 +------ plugins/scaffolder-backend-module-gerrit/package.json | 7 +------ plugins/scaffolder-backend-module-gitea/package.json | 7 +------ plugins/scaffolder-backend-module-github/package.json | 7 +------ plugins/scaffolder-backend-module-gitlab/package.json | 7 +------ plugins/scaffolder-backend-module-rails/package.json | 7 +------ plugins/scaffolder-backend-module-sentry/package.json | 7 +------ plugins/scaffolder-backend-module-yeoman/package.json | 7 +------ plugins/scaffolder-backend/package.json | 6 ------ plugins/scaffolder/package.json | 6 ------ plugins/search-backend-module-catalog/package.json | 8 +------- plugins/search-backend-module-elasticsearch/package.json | 8 +------- plugins/search-backend-module-explore/package.json | 8 +------- plugins/search-backend-module-pg/package.json | 8 +------- plugins/search-backend-module-techdocs/package.json | 8 +------- plugins/search-backend/package.json | 6 ------ plugins/search/package.json | 6 ------ plugins/techdocs-backend/package.json | 6 ------ plugins/techdocs/package.json | 6 ------ plugins/user-settings-backend/package.json | 6 ------ plugins/user-settings/package.json | 6 ------ 57 files changed, 35 insertions(+), 361 deletions(-) diff --git a/plugins/api-docs/package.json b/plugins/api-docs/package.json index 4576a93f85..6858d6a81f 100644 --- a/plugins/api-docs/package.json +++ b/plugins/api-docs/package.json @@ -7,12 +7,6 @@ "pluginId": "api-docs", "pluginPackages": [ "@backstage/plugin-api-docs" - ], - "features": [ - { - "type": "@backstage/FrontendPlugin", - "path": "./alpha" - } ] }, "publishConfig": { diff --git a/plugins/app-backend/package.json b/plugins/app-backend/package.json index 2d9978e254..606d5adea6 100644 --- a/plugins/app-backend/package.json +++ b/plugins/app-backend/package.json @@ -9,12 +9,6 @@ "@backstage/plugin-app", "@backstage/plugin-app-backend", "@backstage/plugin-app-node" - ], - "features": [ - { - "type": "@backstage/BackendFeature", - "path": "./alpha" - } ] }, "publishConfig": { diff --git a/plugins/catalog-backend-module-aws/package.json b/plugins/catalog-backend-module-aws/package.json index c6796e35bd..92f11d4b63 100644 --- a/plugins/catalog-backend-module-aws/package.json +++ b/plugins/catalog-backend-module-aws/package.json @@ -5,13 +5,7 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "catalog", - "pluginPackage": "@backstage/plugin-catalog-backend", - "features": [ - { - "type": "@backstage/BackendFeature", - "path": "./alpha" - } - ] + "pluginPackage": "@backstage/plugin-catalog-backend" }, "publishConfig": { "access": "public" diff --git a/plugins/catalog-backend-module-azure/package.json b/plugins/catalog-backend-module-azure/package.json index 84e3368efb..aa0b3663c7 100644 --- a/plugins/catalog-backend-module-azure/package.json +++ b/plugins/catalog-backend-module-azure/package.json @@ -5,13 +5,7 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "catalog", - "pluginPackage": "@backstage/plugin-catalog-backend", - "features": [ - { - "type": "@backstage/BackendFeature", - "path": "./alpha" - } - ] + "pluginPackage": "@backstage/plugin-catalog-backend" }, "publishConfig": { "access": "public" diff --git a/plugins/catalog-backend-module-bitbucket-cloud/package.json b/plugins/catalog-backend-module-bitbucket-cloud/package.json index 5a24423396..4f0007bb44 100644 --- a/plugins/catalog-backend-module-bitbucket-cloud/package.json +++ b/plugins/catalog-backend-module-bitbucket-cloud/package.json @@ -5,13 +5,7 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "catalog", - "pluginPackage": "@backstage/plugin-catalog-backend", - "features": [ - { - "type": "@backstage/BackendFeature", - "path": "./alpha" - } - ] + "pluginPackage": "@backstage/plugin-catalog-backend" }, "publishConfig": { "access": "public" diff --git a/plugins/catalog-backend-module-bitbucket-server/package.json b/plugins/catalog-backend-module-bitbucket-server/package.json index 030d8511ca..af12601f87 100644 --- a/plugins/catalog-backend-module-bitbucket-server/package.json +++ b/plugins/catalog-backend-module-bitbucket-server/package.json @@ -4,13 +4,7 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "catalog", - "pluginPackage": "@backstage/plugin-catalog-backend", - "features": [ - { - "type": "@backstage/BackendFeature", - "path": "./alpha" - } - ] + "pluginPackage": "@backstage/plugin-catalog-backend" }, "publishConfig": { "access": "public" diff --git a/plugins/catalog-backend-module-gcp/package.json b/plugins/catalog-backend-module-gcp/package.json index b9609dbadf..13904c905b 100644 --- a/plugins/catalog-backend-module-gcp/package.json +++ b/plugins/catalog-backend-module-gcp/package.json @@ -5,12 +5,7 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "catalog", - "pluginPackage": "@backstage/plugin-catalog-backend", - "features": [ - { - "type": "@backstage/BackendFeature" - } - ] + "pluginPackage": "@backstage/plugin-catalog-backend" }, "publishConfig": { "access": "public" diff --git a/plugins/catalog-backend-module-gerrit/package.json b/plugins/catalog-backend-module-gerrit/package.json index ce2af52542..caebb75b34 100644 --- a/plugins/catalog-backend-module-gerrit/package.json +++ b/plugins/catalog-backend-module-gerrit/package.json @@ -4,13 +4,7 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "catalog", - "pluginPackage": "@backstage/plugin-catalog-backend", - "features": [ - { - "type": "@backstage/BackendFeature", - "path": "./alpha" - } - ] + "pluginPackage": "@backstage/plugin-catalog-backend" }, "publishConfig": { "access": "public" diff --git a/plugins/catalog-backend-module-github/package.json b/plugins/catalog-backend-module-github/package.json index f58d08192b..8b05d0f896 100644 --- a/plugins/catalog-backend-module-github/package.json +++ b/plugins/catalog-backend-module-github/package.json @@ -5,13 +5,7 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "catalog", - "pluginPackage": "@backstage/plugin-catalog-backend", - "features": [ - { - "type": "@backstage/BackendFeature", - "path": "./alpha" - } - ] + "pluginPackage": "@backstage/plugin-catalog-backend" }, "publishConfig": { "access": "public" diff --git a/plugins/catalog-backend-module-gitlab/package.json b/plugins/catalog-backend-module-gitlab/package.json index 126cad0bed..ef8d1f9148 100644 --- a/plugins/catalog-backend-module-gitlab/package.json +++ b/plugins/catalog-backend-module-gitlab/package.json @@ -5,13 +5,7 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "catalog", - "pluginPackage": "@backstage/plugin-catalog-backend", - "features": [ - { - "type": "@backstage/BackendFeature", - "path": "./alpha" - } - ] + "pluginPackage": "@backstage/plugin-catalog-backend" }, "publishConfig": { "access": "public" diff --git a/plugins/catalog-backend-module-incremental-ingestion/package.json b/plugins/catalog-backend-module-incremental-ingestion/package.json index 1c55b088e1..4e964ccc9d 100644 --- a/plugins/catalog-backend-module-incremental-ingestion/package.json +++ b/plugins/catalog-backend-module-incremental-ingestion/package.json @@ -5,13 +5,7 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "catalog", - "pluginPackage": "@backstage/plugin-catalog-backend", - "features": [ - { - "type": "@backstage/BackendFeature", - "path": "./alpha" - } - ] + "pluginPackage": "@backstage/plugin-catalog-backend" }, "publishConfig": { "access": "public" diff --git a/plugins/catalog-backend-module-msgraph/package.json b/plugins/catalog-backend-module-msgraph/package.json index e8c1a41ecb..ebdd9bc316 100644 --- a/plugins/catalog-backend-module-msgraph/package.json +++ b/plugins/catalog-backend-module-msgraph/package.json @@ -5,13 +5,7 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "catalog", - "pluginPackage": "@backstage/plugin-catalog-backend", - "features": [ - { - "type": "@backstage/BackendFeature", - "path": "./alpha" - } - ] + "pluginPackage": "@backstage/plugin-catalog-backend" }, "publishConfig": { "access": "public" diff --git a/plugins/catalog-backend-module-puppetdb/package.json b/plugins/catalog-backend-module-puppetdb/package.json index 5d71befbb5..670dbe23a2 100644 --- a/plugins/catalog-backend-module-puppetdb/package.json +++ b/plugins/catalog-backend-module-puppetdb/package.json @@ -5,13 +5,7 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "catalog", - "pluginPackage": "@backstage/plugin-catalog-backend", - "features": [ - { - "type": "@backstage/BackendFeature", - "path": "./alpha" - } - ] + "pluginPackage": "@backstage/plugin-catalog-backend" }, "publishConfig": { "access": "public" diff --git a/plugins/catalog-backend-module-scaffolder-entity-model/package.json b/plugins/catalog-backend-module-scaffolder-entity-model/package.json index 565fe94206..d64b3b468e 100644 --- a/plugins/catalog-backend-module-scaffolder-entity-model/package.json +++ b/plugins/catalog-backend-module-scaffolder-entity-model/package.json @@ -5,12 +5,7 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "catalog", - "pluginPackage": "@backstage/plugin-catalog-backend", - "features": [ - { - "type": "@backstage/BackendFeature" - } - ] + "pluginPackage": "@backstage/plugin-catalog-backend" }, "publishConfig": { "access": "public" diff --git a/plugins/catalog-backend/package.json b/plugins/catalog-backend/package.json index 8aac88ac51..4826758d01 100644 --- a/plugins/catalog-backend/package.json +++ b/plugins/catalog-backend/package.json @@ -11,12 +11,6 @@ "@backstage/plugin-catalog-common", "@backstage/plugin-catalog-node", "@backstage/plugin-catalog-react" - ], - "features": [ - { - "type": "@backstage/BackendFeature", - "path": "./alpha" - } ] }, "publishConfig": { diff --git a/plugins/catalog-graph/package.json b/plugins/catalog-graph/package.json index 14dfe03579..4e83990c95 100644 --- a/plugins/catalog-graph/package.json +++ b/plugins/catalog-graph/package.json @@ -6,12 +6,6 @@ "pluginId": "catalog-graph", "pluginPackages": [ "@backstage/plugin-catalog-graph" - ], - "features": [ - { - "type": "@backstage/FrontendPlugin", - "path": "./alpha" - } ] }, "publishConfig": { diff --git a/plugins/catalog-import/package.json b/plugins/catalog-import/package.json index fb6d40220f..964dbd3c33 100644 --- a/plugins/catalog-import/package.json +++ b/plugins/catalog-import/package.json @@ -7,12 +7,6 @@ "pluginId": "catalog-import", "pluginPackages": [ "@backstage/plugin-catalog-import" - ], - "features": [ - { - "type": "@backstage/FrontendPlugin", - "path": "./alpha" - } ] }, "publishConfig": { diff --git a/plugins/catalog/package.json b/plugins/catalog/package.json index 606ebb16d1..317e91fa4d 100644 --- a/plugins/catalog/package.json +++ b/plugins/catalog/package.json @@ -11,12 +11,6 @@ "@backstage/plugin-catalog-common", "@backstage/plugin-catalog-node", "@backstage/plugin-catalog-react" - ], - "features": [ - { - "type": "@backstage/FrontendPlugin", - "path": "./alpha" - } ] }, "publishConfig": { diff --git a/plugins/devtools/package.json b/plugins/devtools/package.json index 1b0f14b193..9e4c0caab6 100644 --- a/plugins/devtools/package.json +++ b/plugins/devtools/package.json @@ -8,12 +8,6 @@ "@backstage/plugin-devtools", "@backstage/plugin-devtools-backend", "@backstage/plugin-devtools-common" - ], - "features": [ - { - "type": "@backstage/FrontendPlugin", - "path": "./alpha" - } ] }, "publishConfig": { diff --git a/plugins/events-backend-module-aws-sqs/package.json b/plugins/events-backend-module-aws-sqs/package.json index 8eac12d934..d109490dce 100644 --- a/plugins/events-backend-module-aws-sqs/package.json +++ b/plugins/events-backend-module-aws-sqs/package.json @@ -4,13 +4,7 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "events", - "pluginPackage": "@backstage/plugin-events-backend", - "features": [ - { - "type": "@backstage/BackendFeature", - "path": "./alpha" - } - ] + "pluginPackage": "@backstage/plugin-events-backend" }, "publishConfig": { "access": "public" diff --git a/plugins/events-backend-module-azure/package.json b/plugins/events-backend-module-azure/package.json index 376f507c07..91cd11d286 100644 --- a/plugins/events-backend-module-azure/package.json +++ b/plugins/events-backend-module-azure/package.json @@ -4,13 +4,7 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "events", - "pluginPackage": "@backstage/plugin-events-backend", - "features": [ - { - "type": "@backstage/BackendFeature", - "path": "./alpha" - } - ] + "pluginPackage": "@backstage/plugin-events-backend" }, "publishConfig": { "access": "public" diff --git a/plugins/events-backend-module-bitbucket-cloud/package.json b/plugins/events-backend-module-bitbucket-cloud/package.json index e6c6f835eb..423fbde187 100644 --- a/plugins/events-backend-module-bitbucket-cloud/package.json +++ b/plugins/events-backend-module-bitbucket-cloud/package.json @@ -4,13 +4,7 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "events", - "pluginPackage": "@backstage/plugin-events-backend", - "features": [ - { - "type": "@backstage/BackendFeature", - "path": "./alpha" - } - ] + "pluginPackage": "@backstage/plugin-events-backend" }, "publishConfig": { "access": "public" diff --git a/plugins/events-backend-module-gerrit/package.json b/plugins/events-backend-module-gerrit/package.json index 65c09cd4ad..6f1bc451d9 100644 --- a/plugins/events-backend-module-gerrit/package.json +++ b/plugins/events-backend-module-gerrit/package.json @@ -4,13 +4,7 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "events", - "pluginPackage": "@backstage/plugin-events-backend", - "features": [ - { - "type": "@backstage/BackendFeature", - "path": "./alpha" - } - ] + "pluginPackage": "@backstage/plugin-events-backend" }, "publishConfig": { "access": "public" diff --git a/plugins/events-backend/package.json b/plugins/events-backend/package.json index 998b76b091..84ff688b16 100644 --- a/plugins/events-backend/package.json +++ b/plugins/events-backend/package.json @@ -8,12 +8,6 @@ "@backstage/plugin-events-backend", "@backstage/plugin-events-backend-test-utils", "@backstage/plugin-events-node" - ], - "features": [ - { - "type": "@backstage/BackendFeature", - "path": "./alpha" - } ] }, "publishConfig": { diff --git a/plugins/home/package.json b/plugins/home/package.json index f5987fcf24..617778dd52 100644 --- a/plugins/home/package.json +++ b/plugins/home/package.json @@ -8,12 +8,6 @@ "pluginPackages": [ "@backstage/plugin-home", "@backstage/plugin-home-react" - ], - "features": [ - { - "type": "@backstage/FrontendPlugin", - "path": "./alpha" - } ] }, "publishConfig": { diff --git a/plugins/kubernetes-backend/package.json b/plugins/kubernetes-backend/package.json index 5ee33a8357..f47fd650e4 100644 --- a/plugins/kubernetes-backend/package.json +++ b/plugins/kubernetes-backend/package.json @@ -11,12 +11,6 @@ "@backstage/plugin-kubernetes-common", "@backstage/plugin-kubernetes-node", "@backstage/plugin-kubernetes-react" - ], - "features": [ - { - "type": "@backstage/BackendFeature", - "path": "./alpha" - } ] }, "publishConfig": { diff --git a/plugins/kubernetes/package.json b/plugins/kubernetes/package.json index e8a798d85b..789c3375ce 100644 --- a/plugins/kubernetes/package.json +++ b/plugins/kubernetes/package.json @@ -11,12 +11,6 @@ "@backstage/plugin-kubernetes-common", "@backstage/plugin-kubernetes-node", "@backstage/plugin-kubernetes-react" - ], - "features": [ - { - "type": "@backstage/FrontendPlugin", - "path": "./alpha" - } ] }, "publishConfig": { diff --git a/plugins/org/package.json b/plugins/org/package.json index fb9878fa52..88d1e783ca 100644 --- a/plugins/org/package.json +++ b/plugins/org/package.json @@ -8,12 +8,6 @@ "pluginPackages": [ "@backstage/plugin-org", "@backstage/plugin-org-react" - ], - "features": [ - { - "type": "@backstage/FrontendPlugin", - "path": "./alpha" - } ] }, "publishConfig": { diff --git a/plugins/permission-backend/package.json b/plugins/permission-backend/package.json index eec76b67ad..be82562f0f 100644 --- a/plugins/permission-backend/package.json +++ b/plugins/permission-backend/package.json @@ -9,12 +9,6 @@ "@backstage/plugin-permission-common", "@backstage/plugin-permission-node", "@backstage/plugin-permission-react" - ], - "features": [ - { - "type": "@backstage/BackendFeature", - "path": "./alpha" - } ] }, "publishConfig": { diff --git a/plugins/proxy-backend/package.json b/plugins/proxy-backend/package.json index 08edd2c406..4ba5b7df15 100644 --- a/plugins/proxy-backend/package.json +++ b/plugins/proxy-backend/package.json @@ -7,12 +7,6 @@ "pluginId": "proxy", "pluginPackages": [ "@backstage/plugin-proxy-backend" - ], - "features": [ - { - "type": "@backstage/BackendFeature", - "path": "./alpha" - } ] }, "publishConfig": { diff --git a/plugins/scaffolder-backend-module-azure/package.json b/plugins/scaffolder-backend-module-azure/package.json index 3203ac11f8..7c5dd0a317 100644 --- a/plugins/scaffolder-backend-module-azure/package.json +++ b/plugins/scaffolder-backend-module-azure/package.json @@ -5,12 +5,7 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "scaffolder", - "pluginPackage": "@backstage/plugin-scaffolder-backend", - "features": [ - { - "type": "@backstage/BackendFeature" - } - ] + "pluginPackage": "@backstage/plugin-scaffolder-backend" }, "publishConfig": { "access": "public" diff --git a/plugins/scaffolder-backend-module-bitbucket-cloud/package.json b/plugins/scaffolder-backend-module-bitbucket-cloud/package.json index 9da56ff11f..cb8cbd7400 100644 --- a/plugins/scaffolder-backend-module-bitbucket-cloud/package.json +++ b/plugins/scaffolder-backend-module-bitbucket-cloud/package.json @@ -5,12 +5,7 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "scaffolder", - "pluginPackage": "@backstage/plugin-scaffolder-backend", - "features": [ - { - "type": "@backstage/BackendFeature" - } - ] + "pluginPackage": "@backstage/plugin-scaffolder-backend" }, "publishConfig": { "access": "public" diff --git a/plugins/scaffolder-backend-module-bitbucket-server/package.json b/plugins/scaffolder-backend-module-bitbucket-server/package.json index bf0dc415df..585668ddb5 100644 --- a/plugins/scaffolder-backend-module-bitbucket-server/package.json +++ b/plugins/scaffolder-backend-module-bitbucket-server/package.json @@ -5,12 +5,7 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "scaffolder", - "pluginPackage": "@backstage/plugin-scaffolder-backend", - "features": [ - { - "type": "@backstage/BackendFeature" - } - ] + "pluginPackage": "@backstage/plugin-scaffolder-backend" }, "publishConfig": { "access": "public" diff --git a/plugins/scaffolder-backend-module-bitbucket/package.json b/plugins/scaffolder-backend-module-bitbucket/package.json index 43149fa2ba..f579ea62b3 100644 --- a/plugins/scaffolder-backend-module-bitbucket/package.json +++ b/plugins/scaffolder-backend-module-bitbucket/package.json @@ -5,12 +5,7 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "scaffolder", - "pluginPackage": "@backstage/plugin-scaffolder-backend", - "features": [ - { - "type": "@backstage/BackendFeature" - } - ] + "pluginPackage": "@backstage/plugin-scaffolder-backend" }, "publishConfig": { "access": "public" diff --git a/plugins/scaffolder-backend-module-confluence-to-markdown/package.json b/plugins/scaffolder-backend-module-confluence-to-markdown/package.json index 4e872be8a8..9259eb0798 100644 --- a/plugins/scaffolder-backend-module-confluence-to-markdown/package.json +++ b/plugins/scaffolder-backend-module-confluence-to-markdown/package.json @@ -5,12 +5,7 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "scaffolder", - "pluginPackage": "@backstage/plugin-scaffolder-backend", - "features": [ - { - "type": "@backstage/BackendFeature" - } - ] + "pluginPackage": "@backstage/plugin-scaffolder-backend" }, "publishConfig": { "access": "public" diff --git a/plugins/scaffolder-backend-module-cookiecutter/package.json b/plugins/scaffolder-backend-module-cookiecutter/package.json index 5776875d16..467afb4339 100644 --- a/plugins/scaffolder-backend-module-cookiecutter/package.json +++ b/plugins/scaffolder-backend-module-cookiecutter/package.json @@ -5,12 +5,7 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "scaffolder", - "pluginPackage": "@backstage/plugin-scaffolder-backend", - "features": [ - { - "type": "@backstage/BackendFeature" - } - ] + "pluginPackage": "@backstage/plugin-scaffolder-backend" }, "publishConfig": { "access": "public" diff --git a/plugins/scaffolder-backend-module-gcp/package.json b/plugins/scaffolder-backend-module-gcp/package.json index 4b29179a44..355b84c774 100644 --- a/plugins/scaffolder-backend-module-gcp/package.json +++ b/plugins/scaffolder-backend-module-gcp/package.json @@ -5,12 +5,7 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "scaffolder", - "pluginPackage": "@backstage/plugin-scaffolder-backend", - "features": [ - { - "type": "@backstage/BackendFeature" - } - ] + "pluginPackage": "@backstage/plugin-scaffolder-backend" }, "publishConfig": { "access": "public" diff --git a/plugins/scaffolder-backend-module-gerrit/package.json b/plugins/scaffolder-backend-module-gerrit/package.json index 8f6a772b08..90136f4c34 100644 --- a/plugins/scaffolder-backend-module-gerrit/package.json +++ b/plugins/scaffolder-backend-module-gerrit/package.json @@ -5,12 +5,7 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "scaffolder", - "pluginPackage": "@backstage/plugin-scaffolder-backend", - "features": [ - { - "type": "@backstage/BackendFeature" - } - ] + "pluginPackage": "@backstage/plugin-scaffolder-backend" }, "publishConfig": { "access": "public" diff --git a/plugins/scaffolder-backend-module-gitea/package.json b/plugins/scaffolder-backend-module-gitea/package.json index 98c0e80e3e..1f597f70ae 100644 --- a/plugins/scaffolder-backend-module-gitea/package.json +++ b/plugins/scaffolder-backend-module-gitea/package.json @@ -5,12 +5,7 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "scaffolder", - "pluginPackage": "@backstage/plugin-scaffolder-backend", - "features": [ - { - "type": "@backstage/BackendFeature" - } - ] + "pluginPackage": "@backstage/plugin-scaffolder-backend" }, "publishConfig": { "access": "public" diff --git a/plugins/scaffolder-backend-module-github/package.json b/plugins/scaffolder-backend-module-github/package.json index fe4ad110ad..9ebd61f809 100644 --- a/plugins/scaffolder-backend-module-github/package.json +++ b/plugins/scaffolder-backend-module-github/package.json @@ -5,12 +5,7 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "scaffolder", - "pluginPackage": "@backstage/plugin-scaffolder-backend", - "features": [ - { - "type": "@backstage/BackendFeature" - } - ] + "pluginPackage": "@backstage/plugin-scaffolder-backend" }, "publishConfig": { "access": "public" diff --git a/plugins/scaffolder-backend-module-gitlab/package.json b/plugins/scaffolder-backend-module-gitlab/package.json index 6c4b80ec92..2b73a9ce71 100644 --- a/plugins/scaffolder-backend-module-gitlab/package.json +++ b/plugins/scaffolder-backend-module-gitlab/package.json @@ -4,12 +4,7 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "scaffolder", - "pluginPackage": "@backstage/plugin-scaffolder-backend", - "features": [ - { - "type": "@backstage/BackendFeature" - } - ] + "pluginPackage": "@backstage/plugin-scaffolder-backend" }, "publishConfig": { "access": "public" diff --git a/plugins/scaffolder-backend-module-rails/package.json b/plugins/scaffolder-backend-module-rails/package.json index 63ed830f47..26c2c9aca1 100644 --- a/plugins/scaffolder-backend-module-rails/package.json +++ b/plugins/scaffolder-backend-module-rails/package.json @@ -5,12 +5,7 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "scaffolder", - "pluginPackage": "@backstage/plugin-scaffolder-backend", - "features": [ - { - "type": "@backstage/BackendFeature" - } - ] + "pluginPackage": "@backstage/plugin-scaffolder-backend" }, "publishConfig": { "access": "public" diff --git a/plugins/scaffolder-backend-module-sentry/package.json b/plugins/scaffolder-backend-module-sentry/package.json index 0e1546a247..8b15f66689 100644 --- a/plugins/scaffolder-backend-module-sentry/package.json +++ b/plugins/scaffolder-backend-module-sentry/package.json @@ -4,12 +4,7 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "scaffolder", - "pluginPackage": "@backstage/plugin-scaffolder-backend", - "features": [ - { - "type": "@backstage/BackendFeature" - } - ] + "pluginPackage": "@backstage/plugin-scaffolder-backend" }, "publishConfig": { "access": "public" diff --git a/plugins/scaffolder-backend-module-yeoman/package.json b/plugins/scaffolder-backend-module-yeoman/package.json index 60a68975f1..5303cc543e 100644 --- a/plugins/scaffolder-backend-module-yeoman/package.json +++ b/plugins/scaffolder-backend-module-yeoman/package.json @@ -4,12 +4,7 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "scaffolder", - "pluginPackage": "@backstage/plugin-scaffolder-backend", - "features": [ - { - "type": "@backstage/BackendFeature" - } - ] + "pluginPackage": "@backstage/plugin-scaffolder-backend" }, "publishConfig": { "access": "public" diff --git a/plugins/scaffolder-backend/package.json b/plugins/scaffolder-backend/package.json index 0471eb5fba..a4a8b1fdf2 100644 --- a/plugins/scaffolder-backend/package.json +++ b/plugins/scaffolder-backend/package.json @@ -12,12 +12,6 @@ "@backstage/plugin-scaffolder-node", "@backstage/plugin-scaffolder-node-test-utils", "@backstage/plugin-scaffolder-react" - ], - "features": [ - { - "type": "@backstage/BackendFeature", - "path": "./alpha" - } ] }, "publishConfig": { diff --git a/plugins/scaffolder/package.json b/plugins/scaffolder/package.json index 482ce13631..c4fe3ab8ad 100644 --- a/plugins/scaffolder/package.json +++ b/plugins/scaffolder/package.json @@ -12,12 +12,6 @@ "@backstage/plugin-scaffolder-node", "@backstage/plugin-scaffolder-node-test-utils", "@backstage/plugin-scaffolder-react" - ], - "features": [ - { - "type": "@backstage/FrontendPlugin", - "path": "./alpha" - } ] }, "publishConfig": { diff --git a/plugins/search-backend-module-catalog/package.json b/plugins/search-backend-module-catalog/package.json index 3ca2f84501..f3cd8ff7b0 100644 --- a/plugins/search-backend-module-catalog/package.json +++ b/plugins/search-backend-module-catalog/package.json @@ -5,13 +5,7 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "search", - "pluginPackage": "@backstage/plugin-search-backend", - "features": [ - { - "type": "@backstage/BackendFeature", - "path": "./alpha" - } - ] + "pluginPackage": "@backstage/plugin-search-backend" }, "publishConfig": { "access": "public" diff --git a/plugins/search-backend-module-elasticsearch/package.json b/plugins/search-backend-module-elasticsearch/package.json index 840cf23f0d..4b1d173048 100644 --- a/plugins/search-backend-module-elasticsearch/package.json +++ b/plugins/search-backend-module-elasticsearch/package.json @@ -5,13 +5,7 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "search", - "pluginPackage": "@backstage/plugin-search-backend", - "features": [ - { - "type": "@backstage/BackendFeature", - "path": "./alpha" - } - ] + "pluginPackage": "@backstage/plugin-search-backend" }, "publishConfig": { "access": "public" diff --git a/plugins/search-backend-module-explore/package.json b/plugins/search-backend-module-explore/package.json index 312a7af1b9..aef6c7fd61 100644 --- a/plugins/search-backend-module-explore/package.json +++ b/plugins/search-backend-module-explore/package.json @@ -5,13 +5,7 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "search", - "pluginPackage": "@backstage/plugin-search-backend", - "features": [ - { - "type": "@backstage/BackendFeature", - "path": "./alpha" - } - ] + "pluginPackage": "@backstage/plugin-search-backend" }, "publishConfig": { "access": "public" diff --git a/plugins/search-backend-module-pg/package.json b/plugins/search-backend-module-pg/package.json index ef2a583d86..7147f83840 100644 --- a/plugins/search-backend-module-pg/package.json +++ b/plugins/search-backend-module-pg/package.json @@ -5,13 +5,7 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "search", - "pluginPackage": "@backstage/plugin-search-backend", - "features": [ - { - "type": "@backstage/BackendFeature", - "path": "./alpha" - } - ] + "pluginPackage": "@backstage/plugin-search-backend" }, "publishConfig": { "access": "public" diff --git a/plugins/search-backend-module-techdocs/package.json b/plugins/search-backend-module-techdocs/package.json index 81a594cc9c..6d89f7601a 100644 --- a/plugins/search-backend-module-techdocs/package.json +++ b/plugins/search-backend-module-techdocs/package.json @@ -5,13 +5,7 @@ "backstage": { "role": "backend-plugin-module", "pluginId": "search", - "pluginPackage": "@backstage/plugin-search-backend", - "features": [ - { - "type": "@backstage/BackendFeature", - "path": "./alpha" - } - ] + "pluginPackage": "@backstage/plugin-search-backend" }, "publishConfig": { "access": "public" diff --git a/plugins/search-backend/package.json b/plugins/search-backend/package.json index f1ec4087f1..05dc6ba72e 100644 --- a/plugins/search-backend/package.json +++ b/plugins/search-backend/package.json @@ -11,12 +11,6 @@ "@backstage/plugin-search-backend-node", "@backstage/plugin-search-common", "@backstage/plugin-search-react" - ], - "features": [ - { - "type": "@backstage/BackendFeature", - "path": "./alpha" - } ] }, "publishConfig": { diff --git a/plugins/search/package.json b/plugins/search/package.json index 279c926428..eb45b7f3b1 100644 --- a/plugins/search/package.json +++ b/plugins/search/package.json @@ -11,12 +11,6 @@ "@backstage/plugin-search-backend-node", "@backstage/plugin-search-common", "@backstage/plugin-search-react" - ], - "features": [ - { - "type": "@backstage/FrontendPlugin", - "path": "./alpha" - } ] }, "publishConfig": { diff --git a/plugins/techdocs-backend/package.json b/plugins/techdocs-backend/package.json index 872e0752bd..7006bd2758 100644 --- a/plugins/techdocs-backend/package.json +++ b/plugins/techdocs-backend/package.json @@ -11,12 +11,6 @@ "@backstage/plugin-techdocs-common", "@backstage/plugin-techdocs-node", "@backstage/plugin-techdocs-react" - ], - "features": [ - { - "type": "@backstage/BackendFeature", - "path": "./alpha" - } ] }, "publishConfig": { diff --git a/plugins/techdocs/package.json b/plugins/techdocs/package.json index 70684ce581..4274f77072 100644 --- a/plugins/techdocs/package.json +++ b/plugins/techdocs/package.json @@ -11,12 +11,6 @@ "@backstage/plugin-techdocs-common", "@backstage/plugin-techdocs-node", "@backstage/plugin-techdocs-react" - ], - "features": [ - { - "type": "@backstage/FrontendPlugin", - "path": "./alpha" - } ] }, "publishConfig": { diff --git a/plugins/user-settings-backend/package.json b/plugins/user-settings-backend/package.json index 415202297d..8a6b5e2882 100644 --- a/plugins/user-settings-backend/package.json +++ b/plugins/user-settings-backend/package.json @@ -9,12 +9,6 @@ "@backstage/plugin-user-settings", "@backstage/plugin-user-settings-backend", "@backstage/plugin-user-settings-common" - ], - "features": [ - { - "type": "@backstage/BackendFeature", - "path": "./alpha" - } ] }, "publishConfig": { diff --git a/plugins/user-settings/package.json b/plugins/user-settings/package.json index 772cccee42..3d545ca6ee 100644 --- a/plugins/user-settings/package.json +++ b/plugins/user-settings/package.json @@ -9,12 +9,6 @@ "@backstage/plugin-user-settings", "@backstage/plugin-user-settings-backend", "@backstage/plugin-user-settings-common" - ], - "features": [ - { - "type": "@backstage/FrontendPlugin", - "path": "./alpha" - } ] }, "publishConfig": { From b33f6b22ba7e99524ee905536d38a11127e8a53c Mon Sep 17 00:00:00 2001 From: Harrison Hogg Date: Thu, 12 Sep 2024 17:00:59 +0100 Subject: [PATCH 010/164] Removed type list from cli-node Signed-off-by: Harrison Hogg --- .changeset/clever-paws-stare.md | 3 +- .changeset/healthy-moose-tease.md | 63 ------------------- packages/cli-node/api-report.md | 59 ----------------- .../cli-node/src/monorepo/PackageGraph.ts | 46 -------------- packages/cli-node/src/monorepo/index.ts | 3 - .../__testUtils__/createFeatureEnvironment.ts | 7 ++- packages/cli/src/lib/typeDistProject.test.ts | 42 +++++-------- packages/cli/src/lib/typeDistProject.ts | 43 +++++++------ 8 files changed, 43 insertions(+), 223 deletions(-) delete mode 100644 .changeset/healthy-moose-tease.md diff --git a/.changeset/clever-paws-stare.md b/.changeset/clever-paws-stare.md index b3cb421723..ad56a5306e 100644 --- a/.changeset/clever-paws-stare.md +++ b/.changeset/clever-paws-stare.md @@ -1,6 +1,5 @@ --- -'@backstage/cli-node': patch '@backstage/cli': patch --- -Added a new step to the `backstage-cli repo fix --publish` command that will annotate default export features to the 'backstage' metadata within plugin package.json. This is to help with identifying the declarative integration points for plugins without needing to fetch or run the plugins first. +Added functionality to the prepack script that will append the default export type for entry points to the `exports` object before publishing. This is to help with identifying the declarative integration points for plugins without needing to fetch or run the plugins first. diff --git a/.changeset/healthy-moose-tease.md b/.changeset/healthy-moose-tease.md deleted file mode 100644 index 1f9ba3952f..0000000000 --- a/.changeset/healthy-moose-tease.md +++ /dev/null @@ -1,63 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend-module-confluence-to-markdown': patch -'@backstage/plugin-catalog-backend-module-scaffolder-entity-model': patch -'@backstage/plugin-catalog-backend-module-incremental-ingestion': patch -'@backstage/plugin-scaffolder-backend-module-bitbucket-server': patch -'@backstage/plugin-scaffolder-backend-module-bitbucket-cloud': patch -'@backstage/plugin-catalog-backend-module-bitbucket-server': patch -'@backstage/plugin-catalog-backend-module-bitbucket-cloud': patch -'@backstage/plugin-scaffolder-backend-module-cookiecutter': patch -'@backstage/plugin-events-backend-module-bitbucket-cloud': patch -'@backstage/plugin-scaffolder-backend-module-bitbucket': patch -'@backstage/plugin-search-backend-module-elasticsearch': patch -'@backstage/plugin-scaffolder-backend-module-gerrit': patch -'@backstage/plugin-scaffolder-backend-module-github': patch -'@backstage/plugin-scaffolder-backend-module-gitlab': patch -'@backstage/plugin-scaffolder-backend-module-sentry': patch -'@backstage/plugin-scaffolder-backend-module-yeoman': patch -'@backstage/plugin-catalog-backend-module-puppetdb': patch -'@backstage/plugin-scaffolder-backend-module-azure': patch -'@backstage/plugin-scaffolder-backend-module-gitea': patch -'@backstage/plugin-scaffolder-backend-module-rails': patch -'@backstage/plugin-catalog-backend-module-msgraph': patch -'@backstage/plugin-search-backend-module-techdocs': patch -'@backstage/plugin-catalog-backend-module-gerrit': patch -'@backstage/plugin-catalog-backend-module-github': patch -'@backstage/plugin-catalog-backend-module-gitlab': patch -'@backstage/plugin-events-backend-module-aws-sqs': patch -'@backstage/plugin-scaffolder-backend-module-gcp': patch -'@backstage/plugin-search-backend-module-catalog': patch -'@backstage/plugin-search-backend-module-explore': patch -'@backstage/plugin-catalog-backend-module-azure': patch -'@backstage/plugin-events-backend-module-gerrit': patch -'@backstage/plugin-events-backend-module-github': patch -'@backstage/plugin-events-backend-module-gitlab': patch -'@backstage/plugin-events-backend-module-azure': patch -'@backstage/plugin-catalog-backend-module-aws': patch -'@backstage/plugin-catalog-backend-module-gcp': patch -'@backstage/plugin-search-backend-module-pg': patch -'@backstage/plugin-user-settings-backend': patch -'@backstage/plugin-kubernetes-backend': patch -'@backstage/plugin-permission-backend': patch -'@backstage/plugin-scaffolder-backend': patch -'@backstage/plugin-techdocs-backend': patch -'@backstage/plugin-catalog-backend': patch -'@backstage/plugin-catalog-import': patch -'@backstage/plugin-events-backend': patch -'@backstage/plugin-search-backend': patch -'@backstage/plugin-catalog-graph': patch -'@backstage/plugin-proxy-backend': patch -'@backstage/plugin-user-settings': patch -'@backstage/plugin-app-backend': patch -'@backstage/plugin-kubernetes': patch -'@backstage/plugin-scaffolder': patch -'@backstage/plugin-api-docs': patch -'@backstage/plugin-devtools': patch -'@backstage/plugin-techdocs': patch -'@backstage/plugin-catalog': patch -'@backstage/plugin-search': patch -'@backstage/plugin-home': patch -'@backstage/plugin-org': patch ---- - -Added `features` metadata to Package JSON diff --git a/packages/cli-node/api-report.md b/packages/cli-node/api-report.md index 519fe12bf9..f22583dd25 100644 --- a/packages/cli-node/api-report.md +++ b/packages/cli-node/api-report.md @@ -12,15 +12,6 @@ export type BackstagePackage = { packageJson: BackstagePackageJson; }; -// @public -export type BackstagePackageFeature = { - path?: string; - type: BackstagePackageFeatureType; -}; - -// @public -export type BackstagePackageFeatureType = (typeof packageFeatureTypes)[number]; - // @public export interface BackstagePackageJson { // (undocumented) @@ -31,7 +22,6 @@ export interface BackstagePackageJson { pluginId?: string | null; pluginPackage?: string; pluginPackages?: string[]; - features?: BackstagePackageFeature[]; }; // (undocumented) bundled?: boolean; @@ -98,31 +88,6 @@ export class GitUtils { // @public export function isMonoRepo(): Promise; -// @public -export const isValidPackageFeatureType: ( - value: string, -) => value is - | '@backstage/TranslationResource' - | '@backstage/TranslationMessages' - | '@backstage/TranslationRef' - | '@backstage/RouteRef' - | '@backstage/SubRouteRef' - | '@backstage/ExternalRouteRef' - | '@backstage/ExtensionDataValue' - | '@backstage/ExtensionDataRef' - | '@backstage/ExtensionInput' - | '@backstage/ExtensionDefinition' - | '@backstage/Extension' - | '@backstage/ExtensionOverrides' - | '@backstage/FrontendPlugin' - | '@backstage/BackstagePlugin' - | '@backstage/FrontendModule' - | '@backstage/BackendFeatureFactory' - | '@backstage/BackendFeature' - | '@backstage/ServiceRef' - | '@backstage/BackstageCredentials' - | '@backstage/ExtensionPoint'; - // @public export class Lockfile { createSimplifiedDependencyGraph(): Map>; @@ -144,30 +109,6 @@ export type LockfileDiffEntry = { range: string; }; -// @public -export const packageFeatureTypes: readonly [ - '@backstage/BackendFeature', - '@backstage/BackendFeatureFactory', - '@backstage/BackstageCredentials', - '@backstage/BackstagePlugin', - '@backstage/Extension', - '@backstage/ExtensionDataRef', - '@backstage/ExtensionDataValue', - '@backstage/ExtensionDefinition', - '@backstage/ExtensionInput', - '@backstage/ExtensionOverrides', - '@backstage/ExtensionPoint', - '@backstage/ExternalRouteRef', - '@backstage/FrontendPlugin', - '@backstage/FrontendModule', - '@backstage/RouteRef', - '@backstage/ServiceRef', - '@backstage/SubRouteRef', - '@backstage/TranslationMessages', - '@backstage/TranslationRef', - '@backstage/TranslationResource', -]; - // @public export class PackageGraph extends Map { collectPackageNames( diff --git a/packages/cli-node/src/monorepo/PackageGraph.ts b/packages/cli-node/src/monorepo/PackageGraph.ts index 0394fd34ca..69ec99c2dd 100644 --- a/packages/cli-node/src/monorepo/PackageGraph.ts +++ b/packages/cli-node/src/monorepo/PackageGraph.ts @@ -22,52 +22,6 @@ import { GitUtils } from '../git'; import { Lockfile } from './Lockfile'; import { JsonValue } from '@backstage/types'; -/** - * All Backstage system features - * - * @public - */ -export const packageFeatureTypes = [ - '@backstage/BackendFeature', - '@backstage/BackendFeatureFactory', - '@backstage/BackstageCredentials', - '@backstage/BackstagePlugin', - '@backstage/Extension', - '@backstage/ExtensionDataRef', - '@backstage/ExtensionDataValue', - '@backstage/ExtensionDefinition', - '@backstage/ExtensionInput', - '@backstage/ExtensionOverrides', - '@backstage/ExtensionPoint', - '@backstage/ExternalRouteRef', - '@backstage/FrontendPlugin', - '@backstage/FrontendModule', - '@backstage/RouteRef', - '@backstage/ServiceRef', - '@backstage/SubRouteRef', - '@backstage/TranslationMessages', - '@backstage/TranslationRef', - '@backstage/TranslationResource', -] as const; - -/** - * Checks if a string is a valid package feature type. - * - * @public - */ -export const isValidPackageFeatureType = ( - value: string, -): value is BackstagePackageFeatureType => { - return packageFeatureTypes.includes(value as any); -}; - -/** - * The type of a Backstage system feature - * - * @public - */ -export type BackstagePackageFeatureType = (typeof packageFeatureTypes)[number]; - /** * Known fields in Backstage package.json files. * diff --git a/packages/cli-node/src/monorepo/index.ts b/packages/cli-node/src/monorepo/index.ts index b4ed921613..fdb8395c16 100644 --- a/packages/cli-node/src/monorepo/index.ts +++ b/packages/cli-node/src/monorepo/index.ts @@ -16,13 +16,10 @@ export { isMonoRepo } from './isMonoRepo'; export { - packageFeatureTypes, - isValidPackageFeatureType, PackageGraph, type PackageGraphNode, type BackstagePackage, type BackstagePackageJson, - type BackstagePackageFeatureType, } from './PackageGraph'; export { Lockfile, diff --git a/packages/cli/src/lib/__testUtils__/createFeatureEnvironment.ts b/packages/cli/src/lib/__testUtils__/createFeatureEnvironment.ts index 7d7eeeeeaf..51848a9d68 100644 --- a/packages/cli/src/lib/__testUtils__/createFeatureEnvironment.ts +++ b/packages/cli/src/lib/__testUtils__/createFeatureEnvironment.ts @@ -14,11 +14,14 @@ * limitations under the License. */ -import { BackstagePackageFeatureType, PackageRole } from '@backstage/cli-node'; +import { PackageRole } from '@backstage/cli-node'; import { resolve as resolvePath } from 'path'; import { Project } from 'ts-morph'; import { EntryPoint } from '../entryPoints'; -import { getDistTypeRoot } from '../typeDistProject'; +import { + getDistTypeRoot, + BackstagePackageFeatureType, +} from '../typeDistProject'; const mockEntryPoint = { mount: '.', diff --git a/packages/cli/src/lib/typeDistProject.test.ts b/packages/cli/src/lib/typeDistProject.test.ts index f3168dd9be..dfe3e68ec0 100644 --- a/packages/cli/src/lib/typeDistProject.test.ts +++ b/packages/cli/src/lib/typeDistProject.test.ts @@ -14,9 +14,12 @@ * limitations under the License. */ -import { BackstagePackageFeatureType, PackageRole } from '@backstage/cli-node'; +import { PackageRole } from '@backstage/cli-node'; import createFeatureEnvironment from './__testUtils__/createFeatureEnvironment'; -import { getEntryPointDefaultFeatureType } from './typeDistProject'; +import { + getEntryPointDefaultFeatureType, + BackstagePackageFeatureType, +} from './typeDistProject'; describe('typeDistProject', () => { describe('for package role', () => { @@ -67,30 +70,17 @@ describe('typeDistProject', () => { describe('for feature $$type', () => { // This Record makes sure we're checking all feature types - const featureTypes: Record = { - // Allowed - '@backstage/BackendFeature': true, - '@backstage/BackstagePlugin': true, - '@backstage/FrontendPlugin': true, - '@backstage/FrontendModule': true, - // Disallowed - '@backstage/BackendFeatureFactory': false, - '@backstage/BackstageCredentials': false, - '@backstage/Extension': false, - '@backstage/ExtensionDataRef': false, - '@backstage/ExtensionDataValue': false, - '@backstage/ExtensionDefinition': false, - '@backstage/ExtensionInput': false, - '@backstage/ExtensionOverrides': false, - '@backstage/ExtensionPoint': false, - '@backstage/ExternalRouteRef': false, - '@backstage/RouteRef': false, - '@backstage/ServiceRef': false, - '@backstage/SubRouteRef': false, - '@backstage/TranslationMessages': false, - '@backstage/TranslationRef': false, - '@backstage/TranslationResource': false, - }; + const featureTypes: Record = + { + // Allowed + '@backstage/BackendFeature': true, + '@backstage/BackstagePlugin': true, + '@backstage/FrontendPlugin': true, + '@backstage/FrontendModule': true, + // Disallowed + '@backstage/Extension': false, + '@backstage/RouteRef': false, + }; const allowedFeatureTypes = Object.keys(featureTypes).filter( $$type => featureTypes[$$type as BackstagePackageFeatureType], diff --git a/packages/cli/src/lib/typeDistProject.ts b/packages/cli/src/lib/typeDistProject.ts index 4fa970957d..573f8a059e 100644 --- a/packages/cli/src/lib/typeDistProject.ts +++ b/packages/cli/src/lib/typeDistProject.ts @@ -14,12 +14,7 @@ * limitations under the License. */ import { findPaths } from '@backstage/cli-common'; -import { - BackstagePackageFeatureType, - isValidPackageFeatureType, - PackageGraph, - PackageRole, -} from '@backstage/cli-node'; +import { PackageGraph, PackageRole } from '@backstage/cli-node'; import { builtinModules } from 'module'; import { resolve as resolvePath } from 'path'; import { Project, SourceFile, SyntaxKind, ts, Type } from 'ts-morph'; @@ -134,12 +129,14 @@ const targetPackageRoles: PackageRole[] = [ // A list of the feature types we want to extract from the project // and include in the metadata -const targetFeatureTypes: BackstagePackageFeatureType[] = [ +const targetFeatureTypes = [ '@backstage/BackendFeature', '@backstage/BackstagePlugin', '@backstage/FrontendPlugin', '@backstage/FrontendModule', -]; +] as const; + +export type BackstagePackageFeatureType = (typeof targetFeatureTypes)[number]; export const getEntryPointDefaultFeatureType = ( role: PackageRole, @@ -157,7 +154,7 @@ export const getEntryPointDefaultFeatureType = ( project.addSourceFileAtPath(dtsPath), ); - if (isTargetFeatureType(defaultFeatureType)) { + if (defaultFeatureType) { return defaultFeatureType; } } @@ -165,18 +162,6 @@ export const getEntryPointDefaultFeatureType = ( return null; }; -// Condition for a package role matches a target package role -function isTargetPackageRole(role: PackageRole): boolean { - return !!role && targetPackageRoles.includes(role); -} - -// Returns whether an export is a valid Backstage package feature type -function isTargetFeatureType( - type: BackstagePackageFeatureType | null, -): boolean { - return !!type && targetFeatureTypes.includes(type); -} - // Returns all exports (default and named) from an entry point // that are valid Backstage package features function getSourceFileDefaultFeatureType( @@ -230,7 +215,7 @@ function getBackstagePackageFeature$$TypeFromType( ?.getText() .match(/(?@backstage\/\w+)/)?.groups?.type; - if ($$type && isValidPackageFeatureType($$type)) { + if ($$type && isTargetFeatureType($$type)) { return $$type; } } @@ -238,3 +223,17 @@ function getBackstagePackageFeature$$TypeFromType( return null; } + +// Condition for a package role matches a target package role +function isTargetPackageRole(role: PackageRole): boolean { + return !!role && targetPackageRoles.includes(role); +} + +// Returns whether an export is a valid Backstage package feature type +function isTargetFeatureType( + type: string | BackstagePackageFeatureType, +): type is BackstagePackageFeatureType { + return ( + !!type && targetFeatureTypes.includes(type as BackstagePackageFeatureType) + ); +} From fd8128c26ff33e10f64f61cb4f3422fa51355679 Mon Sep 17 00:00:00 2001 From: Harrison Hogg Date: Mon, 16 Sep 2024 12:30:32 +0100 Subject: [PATCH 011/164] Handle resolving asset type imports Signed-off-by: Harrison Hogg --- packages/cli/src/lib/typeDistProject.ts | 36 +++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/packages/cli/src/lib/typeDistProject.ts b/packages/cli/src/lib/typeDistProject.ts index 573f8a059e..24e7affcfe 100644 --- a/packages/cli/src/lib/typeDistProject.ts +++ b/packages/cli/src/lib/typeDistProject.ts @@ -54,6 +54,7 @@ const getPackagesDistTypeMap = async () => { export const createTypeDistProject = async () => { const distTypeMap = await getPackagesDistTypeMap(); + const assetTypeExtensions = await getAssetTypeExtensions(); const workspaceRoot = findPaths(process.cwd()).targetRoot; return new Project({ @@ -66,7 +67,14 @@ export const createTypeDistProject = async () => { const resolvedModules: ts.ResolvedModule[] = []; for (let moduleName of moduleNames) { - // Handle resolve internal plugins and package entry points to dist-types folder + // Handle resolving asset-type modules + for (const ext of assetTypeExtensions) { + if (moduleName.endsWith(ext)) { + moduleName = '@backstage/cli/asset-types'; + } + } + + // Handle resolving internal plugins and package entry points to dist-types folder if (distTypeMap[moduleName]) { resolvedModules.push({ resolvedFileName: distTypeMap[moduleName], @@ -94,7 +102,7 @@ export const createTypeDistProject = async () => { } } - // Handle resolve relative paths and external node_modules. + // Handle resolving relative paths and external node_modules. const result = ts.resolveModuleName( moduleName, containingFile, @@ -237,3 +245,27 @@ function isTargetFeatureType( !!type && targetFeatureTypes.includes(type as BackstagePackageFeatureType) ); } + +// Returns an array of the ending extensions fro the asset-types +// that are supported by the Backstage CLI +async function getAssetTypeExtensions() { + const assetTypes: string[] = []; + const assetTypesDts = await getAssetTypesDtsFilePath(); + const project = new Project({}); + const sourceFile = project.addSourceFileAtPath(assetTypesDts); + + for (const module of sourceFile.getModules()) { + assetTypes.push( + module + .getName() + .replace(/'/g, '') // remove surrounding single quotes + .replace(/^\*/g, ''), // remove leading * + ); + } + + return assetTypes; +} + +async function getAssetTypesDtsFilePath() { + return require.resolve('@backstage/cli/asset-types/asset-types.d.ts'); +} From e1b002c2ecdd35d0346a591132423109eb619183 Mon Sep 17 00:00:00 2001 From: Harrison Hogg Date: Mon, 16 Sep 2024 12:48:03 +0100 Subject: [PATCH 012/164] Don't fail publishing on default feature detection Signed-off-by: Harrison Hogg --- packages/cli/src/lib/typeDistProject.ts | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/packages/cli/src/lib/typeDistProject.ts b/packages/cli/src/lib/typeDistProject.ts index 24e7affcfe..6845272433 100644 --- a/packages/cli/src/lib/typeDistProject.ts +++ b/packages/cli/src/lib/typeDistProject.ts @@ -158,12 +158,19 @@ export const getEntryPointDefaultFeatureType = ( entryPoint.path.replace(entryPoint.ext, '.d.ts'), ); - const defaultFeatureType = getSourceFileDefaultFeatureType( - project.addSourceFileAtPath(dtsPath), - ); + try { + const defaultFeatureType = getSourceFileDefaultFeatureType( + project.addSourceFileAtPath(dtsPath), + ); - if (defaultFeatureType) { - return defaultFeatureType; + if (defaultFeatureType) { + return defaultFeatureType; + } + } catch (error) { + console.error( + `Failed to extract default feature type from ${dtsPath}, ${error}. ` + + 'Your package will publish fine but it may be missing metadata about its default feature.', + ); } } From cdab6c57b64dcb4a6c81d9283cba2384c4c18830 Mon Sep 17 00:00:00 2001 From: Harrison Hogg Date: Mon, 16 Sep 2024 14:39:41 +0100 Subject: [PATCH 013/164] Swap from reading dist-types/package/type to package/dist/type Signed-off-by: Harrison Hogg --- .../__testUtils__/createFeatureEnvironment.ts | 36 ++--- .../cli/src/lib/packager/productionPack.ts | 23 +-- packages/cli/src/lib/typeDistProject.ts | 135 +----------------- 3 files changed, 30 insertions(+), 164 deletions(-) diff --git a/packages/cli/src/lib/__testUtils__/createFeatureEnvironment.ts b/packages/cli/src/lib/__testUtils__/createFeatureEnvironment.ts index 51848a9d68..07c8f4f853 100644 --- a/packages/cli/src/lib/__testUtils__/createFeatureEnvironment.ts +++ b/packages/cli/src/lib/__testUtils__/createFeatureEnvironment.ts @@ -15,20 +15,11 @@ */ import { PackageRole } from '@backstage/cli-node'; -import { resolve as resolvePath } from 'path'; import { Project } from 'ts-morph'; import { EntryPoint } from '../entryPoints'; -import { - getDistTypeRoot, - BackstagePackageFeatureType, -} from '../typeDistProject'; +import { BackstagePackageFeatureType } from '../typeDistProject'; -const mockEntryPoint = { - mount: '.', - path: './src/index.d.ts', - name: 'index', - ext: '.d.ts', -}; +const mockEntryPoint = 'dist/index.d.ts'; type CreateFeatureEnvironmentOptions = { $$type?: BackstagePackageFeatureType; @@ -44,7 +35,7 @@ type FeatureEnvironment = { project: Project; role: PackageRole; dir: string; - entryPoint: EntryPoint; + entryPoint: string; }; type File = { @@ -54,7 +45,7 @@ type File = { const createTestType = ($$type: BackstagePackageFeatureType): File[] => [ { - path: './src/createTestType.d.ts', + path: './dist/createTestType.d.ts', content: ` export interface TestType { readonly $$type: '${$$type}'; @@ -71,7 +62,7 @@ export function createTestType(): TestType { const createMockDefaultExportAssignment = (): File[] => [ { - path: mockEntryPoint.path, + path: mockEntryPoint, content: ` declare const _default: import("./createTestType").TestType; export default _default; @@ -81,11 +72,11 @@ export default _default; const createMockDefaultExportFromFile = (): File[] => [ { - path: mockEntryPoint.path, + path: mockEntryPoint, content: `export { default } from './linked';`, }, { - path: './src/linked.d.ts', + path: './dist/linked.d.ts', content: ` declare const _default: import("./createTestType").TestType; export default _default; @@ -95,11 +86,11 @@ export default _default; const createMockDefaultExportFromFileAsDefault = (): File[] => [ { - path: mockEntryPoint.path, + path: mockEntryPoint, content: `export { test as default } from './linked';`, }, { - path: './src/linked.d.ts', + path: './dist/linked.d.ts', content: ` export declare const test: import("./createTestType").TestType; `, @@ -108,11 +99,11 @@ export declare const test: import("./createTestType").TestType; const createMockDefaultExportFromFileWithSibling = (): File[] => [ { - path: mockEntryPoint.path, + path: mockEntryPoint, content: `export { default, test } from './linked';`, }, { - path: './src/linked.d.ts', + path: './dist/linked.d.ts', content: ` import { createTestType } from './createTestType'; @@ -143,10 +134,7 @@ export default function createFeatureEnvironment( const files = [...createTestType($$type), ...formatToFiles[format]()]; for (const file of files) { - project.createSourceFile( - resolvePath(getDistTypeRoot(''), file.path), - file.content, - ); + project.createSourceFile(file.path, file.content); } return { diff --git a/packages/cli/src/lib/packager/productionPack.ts b/packages/cli/src/lib/packager/productionPack.ts index e4a1c13ffd..656b98f9fb 100644 --- a/packages/cli/src/lib/packager/productionPack.ts +++ b/packages/cli/src/lib/packager/productionPack.ts @@ -166,19 +166,22 @@ async function prepareExportsEntryPoints( exp[key] = `./${posixPath.join(`dist`, name)}`; } } + exp.default = exp.require ?? exp.import; - const defaultFeatureType = - pkg.backstage?.role && - getEntryPointDefaultFeatureType( - pkg.backstage?.role, - packageDir, - project, - entryPoint, - ); + if (exp.types) { + const defaultFeatureType = + pkg.backstage?.role && + getEntryPointDefaultFeatureType( + pkg.backstage?.role, + packageDir, + project, + exp.types, + ); - if (defaultFeatureType) { - exp.backstage = defaultFeatureType; + if (defaultFeatureType) { + exp.backstage = defaultFeatureType; + } } // This creates a directory with a lone package.json for backwards compatibility diff --git a/packages/cli/src/lib/typeDistProject.ts b/packages/cli/src/lib/typeDistProject.ts index 6845272433..cd5eb9cd74 100644 --- a/packages/cli/src/lib/typeDistProject.ts +++ b/packages/cli/src/lib/typeDistProject.ts @@ -14,114 +14,16 @@ * limitations under the License. */ import { findPaths } from '@backstage/cli-common'; -import { PackageGraph, PackageRole } from '@backstage/cli-node'; -import { builtinModules } from 'module'; +import { PackageRole } from '@backstage/cli-node'; import { resolve as resolvePath } from 'path'; import { Project, SourceFile, SyntaxKind, ts, Type } from 'ts-morph'; -import { EntryPoint, readEntryPoints } from './entryPoints'; - -export const getDistTypeRoot = (dir: string) => { - const workspaceRoot = findPaths(process.cwd()).targetRoot; - const relativeDirectory = dir.replace(workspaceRoot, ''); - const distTypeRoot = resolvePath( - workspaceRoot, - `./dist-types${relativeDirectory}`, - ); - - return distTypeRoot; -}; - -const getPackagesDistTypeMap = async () => { - const packages = await PackageGraph.listTargetPackages(); - const distTypeMap: Record = {}; - - for (const { dir, packageJson } of packages) { - const distTypeRoot = getDistTypeRoot(dir); - - for (const { name, path, ext } of readEntryPoints(packageJson)) { - const dtsPath = resolvePath(distTypeRoot, path.replace(ext, '.d.ts')); - - if (name === 'index') { - distTypeMap[packageJson.name] = dtsPath; - } else { - distTypeMap[`${packageJson.name}/${name}`] = dtsPath; - } - } - } - - return distTypeMap; -}; export const createTypeDistProject = async () => { - const distTypeMap = await getPackagesDistTypeMap(); - const assetTypeExtensions = await getAssetTypeExtensions(); const workspaceRoot = findPaths(process.cwd()).targetRoot; return new Project({ tsConfigFilePath: resolvePath(workspaceRoot, 'tsconfig.json'), skipAddingFilesFromTsConfig: true, - resolutionHost: (moduleResolutionHost, getCompilerOptions) => { - return { - resolveModuleNames: (moduleNames, containingFile) => { - const compilerOptions = getCompilerOptions(); - const resolvedModules: ts.ResolvedModule[] = []; - - for (let moduleName of moduleNames) { - // Handle resolving asset-type modules - for (const ext of assetTypeExtensions) { - if (moduleName.endsWith(ext)) { - moduleName = '@backstage/cli/asset-types'; - } - } - - // Handle resolving internal plugins and package entry points to dist-types folder - if (distTypeMap[moduleName]) { - resolvedModules.push({ - resolvedFileName: distTypeMap[moduleName], - isExternalLibraryImport: false, - resolvedUsingTsExtension: false, - }); - continue; - } - - // Handle resolving builtin node modules to @types/node - if (moduleName.startsWith('node:')) { - moduleName = moduleName.slice(5); - } - if (builtinModules.includes(moduleName)) { - const result = ts.resolveModuleName( - `@types/node/${moduleName}`, - containingFile, - compilerOptions, - moduleResolutionHost, - ); - - if (result.resolvedModule) { - resolvedModules.push(result.resolvedModule); - continue; - } - } - - // Handle resolving relative paths and external node_modules. - const result = ts.resolveModuleName( - moduleName, - containingFile, - compilerOptions, - moduleResolutionHost, - ); - - if (result.resolvedModule) { - resolvedModules.push(result.resolvedModule); - continue; - } - - throw new Error(`Failed to resolve module: ${moduleName}`); - } - - return resolvedModules; - }, - }; - }, }); }; @@ -150,17 +52,14 @@ export const getEntryPointDefaultFeatureType = ( role: PackageRole, packageDir: string, project: Project, - entryPoint: EntryPoint, + entryPoint: string, ): BackstagePackageFeatureType | null => { if (isTargetPackageRole(role)) { - const dtsPath = resolvePath( - getDistTypeRoot(packageDir), - entryPoint.path.replace(entryPoint.ext, '.d.ts'), - ); + const distPath = resolvePath(packageDir, entryPoint); try { const defaultFeatureType = getSourceFileDefaultFeatureType( - project.addSourceFileAtPath(dtsPath), + project.addSourceFileAtPath(distPath), ); if (defaultFeatureType) { @@ -168,7 +67,7 @@ export const getEntryPointDefaultFeatureType = ( } } catch (error) { console.error( - `Failed to extract default feature type from ${dtsPath}, ${error}. ` + + `Failed to extract default feature type from ${distPath}, ${error}. ` + 'Your package will publish fine but it may be missing metadata about its default feature.', ); } @@ -252,27 +151,3 @@ function isTargetFeatureType( !!type && targetFeatureTypes.includes(type as BackstagePackageFeatureType) ); } - -// Returns an array of the ending extensions fro the asset-types -// that are supported by the Backstage CLI -async function getAssetTypeExtensions() { - const assetTypes: string[] = []; - const assetTypesDts = await getAssetTypesDtsFilePath(); - const project = new Project({}); - const sourceFile = project.addSourceFileAtPath(assetTypesDts); - - for (const module of sourceFile.getModules()) { - assetTypes.push( - module - .getName() - .replace(/'/g, '') // remove surrounding single quotes - .replace(/^\*/g, ''), // remove leading * - ); - } - - return assetTypes; -} - -async function getAssetTypesDtsFilePath() { - return require.resolve('@backstage/cli/asset-types/asset-types.d.ts'); -} From 87b6b83180b60643672ce2e59769da56bd524820 Mon Sep 17 00:00:00 2001 From: Harrison Hogg Date: Mon, 16 Sep 2024 14:49:11 +0100 Subject: [PATCH 014/164] Removed left over import Signed-off-by: Harrison Hogg --- packages/cli/src/lib/__testUtils__/createFeatureEnvironment.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/cli/src/lib/__testUtils__/createFeatureEnvironment.ts b/packages/cli/src/lib/__testUtils__/createFeatureEnvironment.ts index 07c8f4f853..a12a48c523 100644 --- a/packages/cli/src/lib/__testUtils__/createFeatureEnvironment.ts +++ b/packages/cli/src/lib/__testUtils__/createFeatureEnvironment.ts @@ -16,7 +16,6 @@ import { PackageRole } from '@backstage/cli-node'; import { Project } from 'ts-morph'; -import { EntryPoint } from '../entryPoints'; import { BackstagePackageFeatureType } from '../typeDistProject'; const mockEntryPoint = 'dist/index.d.ts'; From 85abf247eff54b2939d1d700a6070c694f75bb7c Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Mon, 20 May 2024 13:52:26 +0200 Subject: [PATCH 015/164] events-backend: add dev setup Signed-off-by: Patrik Oldsberg --- plugins/events-backend/dev/index.ts | 75 +++++++++++++++++++++++++++++ plugins/events-backend/package.json | 1 + yarn.lock | 1 + 3 files changed, 77 insertions(+) create mode 100644 plugins/events-backend/dev/index.ts diff --git a/plugins/events-backend/dev/index.ts b/plugins/events-backend/dev/index.ts new file mode 100644 index 0000000000..c0626543c8 --- /dev/null +++ b/plugins/events-backend/dev/index.ts @@ -0,0 +1,75 @@ +/* + * 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 { createBackend } from '@backstage/backend-defaults'; +import { + coreServices, + createBackendPlugin, +} from '@backstage/backend-plugin-api'; +import { eventsServiceRef } from '@backstage/plugin-events-node'; + +const backend = createBackend(); + +backend.add(import('../src/alpha')); + +backend.add( + createBackendPlugin({ + pluginId: 'producer', + register(reg) { + reg.registerInit({ + deps: { + events: eventsServiceRef, + logger: coreServices.logger, + }, + async init({ events, logger }) { + setInterval(() => { + logger.info(`Publishing event to topic 'test'`); + events.publish({ + eventPayload: { foo: 'bar' }, + topic: 'test', + metadata: { meta: 'baz' }, + }); + }, 5000); + }, + }); + }, + }), +); + +backend.add( + createBackendPlugin({ + pluginId: 'consumer', + register(reg) { + reg.registerInit({ + deps: { + events: eventsServiceRef, + logger: coreServices.logger, + }, + async init({ events, logger }) { + events.subscribe({ + id: 'test-1', + topics: ['test'], + async onEvent(event) { + logger.info(`Received event: ${JSON.stringify(event, null, 2)}`); + }, + }); + }, + }); + }, + }), +); + +backend.start(); diff --git a/plugins/events-backend/package.json b/plugins/events-backend/package.json index 34f64d05e0..c25109cf82 100644 --- a/plugins/events-backend/package.json +++ b/plugins/events-backend/package.json @@ -61,6 +61,7 @@ "winston": "^3.2.1" }, "devDependencies": { + "@backstage/backend-defaults": "workspace:^", "@backstage/backend-test-utils": "workspace:^", "@backstage/cli": "workspace:^", "@backstage/plugin-events-backend-test-utils": "workspace:^", diff --git a/yarn.lock b/yarn.lock index 8a3b7b8023..cee8a0c9ac 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6138,6 +6138,7 @@ __metadata: resolution: "@backstage/plugin-events-backend@workspace:plugins/events-backend" dependencies: "@backstage/backend-common": ^0.25.0 + "@backstage/backend-defaults": "workspace:^" "@backstage/backend-plugin-api": "workspace:^" "@backstage/backend-test-utils": "workspace:^" "@backstage/cli": "workspace:^" From 335443229f9ce802a3b1dbd2e9a73a718a1069e0 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Mon, 20 May 2024 18:49:44 +0200 Subject: [PATCH 016/164] events-backend: initial WebSocket server Signed-off-by: Patrik Oldsberg --- plugins/events-backend/dev/index.ts | 38 ++++++-- plugins/events-backend/package.json | 3 +- .../src/service/EventsPlugin.ts | 5 ++ .../src/service/hub/EventHub.ts | 86 +++++++++++++++++++ .../events-backend/src/service/hub/index.ts | 17 ++++ yarn.lock | 1 + 6 files changed, 140 insertions(+), 10 deletions(-) create mode 100644 plugins/events-backend/src/service/hub/EventHub.ts create mode 100644 plugins/events-backend/src/service/hub/index.ts diff --git a/plugins/events-backend/dev/index.ts b/plugins/events-backend/dev/index.ts index c0626543c8..95ed3e0be8 100644 --- a/plugins/events-backend/dev/index.ts +++ b/plugins/events-backend/dev/index.ts @@ -19,6 +19,7 @@ import { coreServices, createBackendPlugin, } from '@backstage/backend-plugin-api'; +import { WebSocket } from 'ws'; import { eventsServiceRef } from '@backstage/plugin-events-node'; const backend = createBackend(); @@ -35,14 +36,14 @@ backend.add( logger: coreServices.logger, }, async init({ events, logger }) { - setInterval(() => { - logger.info(`Publishing event to topic 'test'`); - events.publish({ - eventPayload: { foo: 'bar' }, - topic: 'test', - metadata: { meta: 'baz' }, - }); - }, 5000); + // setInterval(() => { + // logger.info(`Publishing event to topic 'test'`); + // events.publish({ + // eventPayload: { foo: 'bar' }, + // topic: 'test', + // metadata: { meta: 'baz' }, + // }); + // }, 5000); }, }); }, @@ -57,8 +58,10 @@ backend.add( deps: { events: eventsServiceRef, logger: coreServices.logger, + discovery: coreServices.discovery, + rootLifecycle: coreServices.rootLifecycle, }, - async init({ events, logger }) { + async init({ events, logger, discovery, rootLifecycle }) { events.subscribe({ id: 'test-1', topics: ['test'], @@ -66,6 +69,23 @@ backend.add( logger.info(`Received event: ${JSON.stringify(event, null, 2)}`); }, }); + + rootLifecycle.addStartupHook(async () => { + logger.info('Started!'); + const baseUrl = await discovery.getBaseUrl('events'); + console.log(`DEBUG: baseUrl=`, baseUrl); + const ws = new WebSocket(`${baseUrl}/hub/connect`); + ws.onopen = () => { + console.log('DEBUG: ws.onopen'); + ws.send('derp!'); + }; + ws.onmessage = event => { + console.log(`DEBUG: event=`, event.data); + }; + ws.onerror = error => { + console.log(`Client error`, String(error)); + }; + }); }, }); }, diff --git a/plugins/events-backend/package.json b/plugins/events-backend/package.json index c25109cf82..6665ff1e52 100644 --- a/plugins/events-backend/package.json +++ b/plugins/events-backend/package.json @@ -58,7 +58,8 @@ "@types/express": "^4.17.6", "express": "^4.17.1", "express-promise-router": "^4.1.0", - "winston": "^3.2.1" + "winston": "^3.2.1", + "ws": "^8.17.0" }, "devDependencies": { "@backstage/backend-defaults": "workspace:^", diff --git a/plugins/events-backend/src/service/EventsPlugin.ts b/plugins/events-backend/src/service/EventsPlugin.ts index d95dbf3efc..0e115c9772 100644 --- a/plugins/events-backend/src/service/EventsPlugin.ts +++ b/plugins/events-backend/src/service/EventsPlugin.ts @@ -28,6 +28,7 @@ import { } from '@backstage/plugin-events-node'; import Router from 'express-promise-router'; import { HttpPostIngressEventPublisher } from './http'; +import { EventHub } from './hub'; class EventsExtensionPointImpl implements EventsExtensionPoint { #httpPostIngresses: HttpPostIngressOptions[] = []; @@ -93,6 +94,10 @@ export const eventsPlugin = createBackendPlugin({ }); const eventsRouter = Router(); http.bind(eventsRouter); + + const hub = await EventHub.create({ logger }); + eventsRouter.use('/hub', hub.handler()); + router.use(eventsRouter); router.addAuthPolicy({ allow: 'unauthenticated', diff --git a/plugins/events-backend/src/service/hub/EventHub.ts b/plugins/events-backend/src/service/hub/EventHub.ts new file mode 100644 index 0000000000..b1ef75d9e6 --- /dev/null +++ b/plugins/events-backend/src/service/hub/EventHub.ts @@ -0,0 +1,86 @@ +/* + * 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 { LoggerService } from '@backstage/backend-plugin-api'; +import { Handler } from 'express'; +import Router from 'express-promise-router'; +import { WebSocketServer, type WebSocket } from 'ws'; + +export class EventHub { + static async create(options: { logger: LoggerService }) { + const logger = options.logger.child({ type: 'EventHub' }); + const router = Router(); + + const server = new WebSocketServer({ + noServer: true, + clientTracking: false, + }); + server.on('error', error => { + logger.error(`WebSocket server error`, error); + }); + + const hub = new EventHub(server, router, logger); + + router.get('/connect', hub.#handleGetConnect); + + return hub; + } + + readonly #server: WebSocketServer; + readonly #handler: Handler; + readonly #logger: LoggerService; + + #connections = new Set(); + + private constructor( + server: WebSocketServer, + handler: Handler, + logger: LoggerService, + ) { + this.#server = server; + this.#handler = handler; + this.#logger = logger; + } + + handler(): Handler { + return this.#handler; + } + + #handleGetConnect: Handler = (req, _res) => { + this.#server.handleUpgrade(req, req.socket, Buffer.alloc(0), conn => { + const id = Math.random().toString(36).slice(2, 10); + const logger = this.#logger.child({ connection: id }); + + logger.info(`New connection from '${req.socket.remoteAddress}'`); + this.#connections.add(conn); + + conn.onmessage = event => { + logger.debug(`Message from client: ${JSON.stringify(event.data)}`); + }; + conn.send('hello there!'); + + conn.addListener('ping', () => { + conn.pong(); + }); + }); + }; + + close() { + this.#connections.forEach(conn => conn.close()); + this.#connections.clear(); + this.#server.close(); + } +} diff --git a/plugins/events-backend/src/service/hub/index.ts b/plugins/events-backend/src/service/hub/index.ts new file mode 100644 index 0000000000..4acc848298 --- /dev/null +++ b/plugins/events-backend/src/service/hub/index.ts @@ -0,0 +1,17 @@ +/* + * 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. + */ + +export { EventHub } from './EventHub'; diff --git a/yarn.lock b/yarn.lock index cee8a0c9ac..18e926a14e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6150,6 +6150,7 @@ __metadata: express-promise-router: ^4.1.0 supertest: ^7.0.0 winston: ^3.2.1 + ws: ^8.17.0 languageName: unknown linkType: soft From 9fff7a4bb85cce9e899a999f31609e3865f083a6 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Mon, 20 May 2024 19:16:08 +0200 Subject: [PATCH 017/164] events-backend: abstraction for individual connections Signed-off-by: Patrik Oldsberg --- .../src/service/hub/EventHub.ts | 97 +++++++++++++++---- 1 file changed, 80 insertions(+), 17 deletions(-) diff --git a/plugins/events-backend/src/service/hub/EventHub.ts b/plugins/events-backend/src/service/hub/EventHub.ts index b1ef75d9e6..d98c9e4d3d 100644 --- a/plugins/events-backend/src/service/hub/EventHub.ts +++ b/plugins/events-backend/src/service/hub/EventHub.ts @@ -17,8 +17,74 @@ import { LoggerService } from '@backstage/backend-plugin-api'; import { Handler } from 'express'; import Router from 'express-promise-router'; +import { Socket } from 'net'; import { WebSocketServer, type WebSocket } from 'ws'; +/** + * Manages a single WebSocket connection. + * + * @internal + */ +class EventClientConnection { + static create(options: { + ws: WebSocket; + socket: Socket; + logger: LoggerService; + }) { + const { ws } = options; + + const id = Math.random().toString(36).slice(2, 10); + const logger = options.logger.child({ connection: id }); + + ws.addListener('ping', () => { + ws.pong(); + }); + + ws.onmessage = event => { + logger.debug(`Message from client: ${JSON.stringify(event.data)}`); + }; + ws.send('hello there!'); + + const conn = new EventClientConnection(id, ws, options.socket, logger); + + logger.info(`New ${conn}`); + + return conn; + } + + readonly #id: string; + readonly #ws: WebSocket; + readonly #socket: Socket; + readonly #logger: LoggerService; + + constructor( + id: string, + ws: WebSocket, + socket: Socket, + logger: LoggerService, + ) { + this.#id = id; + this.#ws = ws; + this.#socket = socket; + this.#logger = logger; + } + + get id() { + return this.#id; + } + + close() { + this.#ws.close(); + this.#logger.info(`Closed ${this}`); + } + + toString() { + return `EventClientConnection{id=${this.#id},addr=${ + this.#socket.remoteAddress + }}`; + } +} + export class EventHub { static async create(options: { logger: LoggerService }) { const logger = options.logger.child({ type: 'EventHub' }); @@ -43,7 +109,7 @@ export class EventHub { readonly #handler: Handler; readonly #logger: LoggerService; - #connections = new Set(); + #connections = new Map(); private constructor( server: WebSocketServer, @@ -60,22 +126,19 @@ export class EventHub { } #handleGetConnect: Handler = (req, _res) => { - this.#server.handleUpgrade(req, req.socket, Buffer.alloc(0), conn => { - const id = Math.random().toString(36).slice(2, 10); - const logger = this.#logger.child({ connection: id }); - - logger.info(`New connection from '${req.socket.remoteAddress}'`); - this.#connections.add(conn); - - conn.onmessage = event => { - logger.debug(`Message from client: ${JSON.stringify(event.data)}`); - }; - conn.send('hello there!'); - - conn.addListener('ping', () => { - conn.pong(); - }); - }); + this.#server.handleUpgrade( + req, + req.socket, + Buffer.alloc(0), + (ws, { socket }) => { + const conn = EventClientConnection.create({ + ws, + socket, + logger: this.#logger, + }); + this.#connections.set(conn.id, conn); + }, + ); }; close() { From 68e05f6cb1f2754cc152638f22f7c4fdb44f70bc Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Tue, 21 May 2024 11:51:02 +0200 Subject: [PATCH 018/164] events-backend: connection event handlers + auth Signed-off-by: Patrik Oldsberg --- plugins/events-backend/dev/index.ts | 17 ++- .../src/service/EventsPlugin.ts | 5 +- .../src/service/hub/EventHub.ts | 129 +++++++++++++----- 3 files changed, 110 insertions(+), 41 deletions(-) diff --git a/plugins/events-backend/dev/index.ts b/plugins/events-backend/dev/index.ts index 95ed3e0be8..f5eb40ad50 100644 --- a/plugins/events-backend/dev/index.ts +++ b/plugins/events-backend/dev/index.ts @@ -59,9 +59,10 @@ backend.add( events: eventsServiceRef, logger: coreServices.logger, discovery: coreServices.discovery, + auth: coreServices.auth, rootLifecycle: coreServices.rootLifecycle, }, - async init({ events, logger, discovery, rootLifecycle }) { + async init({ events, logger, discovery, rootLifecycle, auth }) { events.subscribe({ id: 'test-1', topics: ['test'], @@ -74,7 +75,15 @@ backend.add( logger.info('Started!'); const baseUrl = await discovery.getBaseUrl('events'); console.log(`DEBUG: baseUrl=`, baseUrl); - const ws = new WebSocket(`${baseUrl}/hub/connect`); + const { token } = await auth.getPluginRequestToken({ + onBehalfOf: await auth.getOwnServiceCredentials(), + targetPluginId: 'events', + }); + const ws = new WebSocket(`${baseUrl}/hub/connect`, { + headers: { + Authorization: `Bearer ${token}`, + }, + }); ws.onopen = () => { console.log('DEBUG: ws.onopen'); ws.send('derp!'); @@ -82,8 +91,8 @@ backend.add( ws.onmessage = event => { console.log(`DEBUG: event=`, event.data); }; - ws.onerror = error => { - console.log(`Client error`, String(error)); + ws.onerror = event => { + console.log(`Client error`, event.error); }; }); }, diff --git a/plugins/events-backend/src/service/EventsPlugin.ts b/plugins/events-backend/src/service/EventsPlugin.ts index 0e115c9772..ecb234066d 100644 --- a/plugins/events-backend/src/service/EventsPlugin.ts +++ b/plugins/events-backend/src/service/EventsPlugin.ts @@ -76,9 +76,10 @@ export const eventsPlugin = createBackendPlugin({ config: coreServices.rootConfig, events: eventsServiceRef, logger: coreServices.logger, + httpAuth: coreServices.httpAuth, router: coreServices.httpRouter, }, - async init({ config, events, logger, router }) { + async init({ config, events, logger, httpAuth, router }) { const ingresses = Object.fromEntries( extensionPoint.httpPostIngresses.map(ingress => [ ingress.topic, @@ -95,7 +96,7 @@ export const eventsPlugin = createBackendPlugin({ const eventsRouter = Router(); http.bind(eventsRouter); - const hub = await EventHub.create({ logger }); + const hub = await EventHub.create({ logger, httpAuth }); eventsRouter.use('/hub', hub.handler()); router.use(eventsRouter); diff --git a/plugins/events-backend/src/service/hub/EventHub.ts b/plugins/events-backend/src/service/hub/EventHub.ts index d98c9e4d3d..cc99a2b2dd 100644 --- a/plugins/events-backend/src/service/hub/EventHub.ts +++ b/plugins/events-backend/src/service/hub/EventHub.ts @@ -14,11 +14,17 @@ * limitations under the License. */ -import { LoggerService } from '@backstage/backend-plugin-api'; +import { + BackstageCredentials, + BackstageServicePrincipal, + HttpAuthService, + LoggerService, +} from '@backstage/backend-plugin-api'; import { Handler } from 'express'; import Router from 'express-promise-router'; import { Socket } from 'net'; -import { WebSocketServer, type WebSocket } from 'ws'; +import { STATUS_CODES } from 'http'; +import { WebSocketServer, type WebSocket, RawData } from 'ws'; /** * Manages a single WebSocket connection. @@ -30,63 +36,90 @@ class EventClientConnection { ws: WebSocket; socket: Socket; logger: LoggerService; + credentials: BackstageCredentials; }) { - const { ws } = options; + const { ws, credentials } = options; const id = Math.random().toString(36).slice(2, 10); - const logger = options.logger.child({ connection: id }); - - ws.addListener('ping', () => { - ws.pong(); + const logger = options.logger.child({ + connection: id, + subject: credentials.principal.subject, }); - ws.onmessage = event => { - logger.debug(`Message from client: ${JSON.stringify(event.data)}`); - }; - ws.send('hello there!'); + const conn = new EventClientConnection(id, ws, logger, credentials); - const conn = new EventClientConnection(id, ws, options.socket, logger); + ws.addListener('close', conn.#handleClose); + ws.addListener('error', conn.#handleError); + ws.addListener('message', conn.#handleMessage); + ws.addListener('ping', () => ws.pong()); - logger.info(`New ${conn}`); + logger.info( + `New event client connection from '${options.socket.remoteAddress}'`, + ); return conn; } readonly #id: string; readonly #ws: WebSocket; - readonly #socket: Socket; readonly #logger: LoggerService; + readonly #credentials: BackstageCredentials; constructor( id: string, ws: WebSocket, - socket: Socket, logger: LoggerService, + credentials: BackstageCredentials, ) { this.#id = id; this.#ws = ws; - this.#socket = socket; this.#logger = logger; + this.#credentials = credentials; } get id() { return this.#id; } + #handleClose = (code: number, reason: Buffer) => { + this.#removeListeners(); + this.#logger.info(`Remote closed code=${code} reason=${reason}`); + }; + + #handleError = (error: Error) => { + this.#removeListeners(); + this.#logger.error(`WebSocket error`, error); + }; + + #handleMessage = (data: RawData, isBinary: boolean) => { + console.log(`DEBUG: isBinary=${isBinary} data=${data}`); + }; + close() { + this.#removeListeners(); this.#ws.close(); - this.#logger.info(`Closed ${this}`); + this.#logger.info(`Closed connection`); + } + + #removeListeners() { + this.#ws.removeListener('close', this.#handleClose); + this.#ws.removeListener('error', this.#handleError); + this.#ws.removeListener('message', this.#handleMessage); } toString() { - return `EventClientConnection{id=${this.#id},addr=${ - this.#socket.remoteAddress + return `eventClientConnection{id=${this.#id},subject=${ + this.#credentials.principal.subject }}`; } } export class EventHub { - static async create(options: { logger: LoggerService }) { + static async create(options: { + logger: LoggerService; + httpAuth: HttpAuthService; + }) { + const { httpAuth } = options; const logger = options.logger.child({ type: 'EventHub' }); const router = Router(); @@ -94,11 +127,12 @@ export class EventHub { noServer: true, clientTracking: false, }); + server.on('error', error => { logger.error(`WebSocket server error`, error); }); - const hub = new EventHub(server, router, logger); + const hub = new EventHub(server, router, logger, httpAuth); router.get('/connect', hub.#handleGetConnect); @@ -108,6 +142,7 @@ export class EventHub { readonly #server: WebSocketServer; readonly #handler: Handler; readonly #logger: LoggerService; + readonly #httpAuth: HttpAuthService; #connections = new Map(); @@ -115,30 +150,54 @@ export class EventHub { server: WebSocketServer, handler: Handler, logger: LoggerService, + httpAuth: HttpAuthService, ) { this.#server = server; this.#handler = handler; this.#logger = logger; + this.#httpAuth = httpAuth; } handler(): Handler { return this.#handler; } - #handleGetConnect: Handler = (req, _res) => { - this.#server.handleUpgrade( - req, - req.socket, - Buffer.alloc(0), - (ws, { socket }) => { - const conn = EventClientConnection.create({ - ws, - socket, - logger: this.#logger, - }); - this.#connections.set(conn.id, conn); - }, - ); + #handleGetConnect: Handler = async (req, _res) => { + try { + const credentials = await this.#httpAuth.credentials(req, { + allow: ['service'], + }); + + this.#server.handleUpgrade( + req, + req.socket, + Buffer.alloc(0), + (ws, { socket }) => { + const conn = EventClientConnection.create({ + ws, + socket, + logger: this.#logger, + credentials, + }); + this.#connections.set(conn.id, conn); + }, + ); + } catch (error) { + let status = 500; + if (error.name === 'AuthenticationError') { + status = 401; + } else if (error.name === 'NotAllowedError') { + status = 403; + } + req.socket.write( + `HTTP/1.1 ${status} ${STATUS_CODES[status]}\r\n` + + 'Upgrade: WebSocket\r\n' + + 'Connection: Upgrade\r\n' + + '\r\n', + ); + req.socket.destroy(); + this.#logger.info('WebSocket upgrade failed', error); + } }; close() { From 5032c181e7387943e7693b3305a9e3cc79dc6cc6 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Tue, 21 May 2024 17:57:04 +0200 Subject: [PATCH 019/164] events-backend: initial req/res protocol Signed-off-by: Patrik Oldsberg --- plugins/events-backend/dev/index.ts | 9 +- plugins/events-backend/package.json | 6 +- .../src/service/hub/EventHub.ts | 172 +++++++++++++++++- yarn.lock | 12 +- 4 files changed, 189 insertions(+), 10 deletions(-) diff --git a/plugins/events-backend/dev/index.ts b/plugins/events-backend/dev/index.ts index f5eb40ad50..445fa4b4b9 100644 --- a/plugins/events-backend/dev/index.ts +++ b/plugins/events-backend/dev/index.ts @@ -86,7 +86,14 @@ backend.add( }); ws.onopen = () => { console.log('DEBUG: ws.onopen'); - ws.send('derp!'); + ws.send( + JSON.stringify([ + 'req', + 1, + 'subscribe', + { id: 'derp', topics: ['test'] }, + ]), + ); }; ws.onmessage = event => { console.log(`DEBUG: event=`, event.data); diff --git a/plugins/events-backend/package.json b/plugins/events-backend/package.json index 6665ff1e52..dc7c2b0110 100644 --- a/plugins/events-backend/package.json +++ b/plugins/events-backend/package.json @@ -54,12 +54,16 @@ "@backstage/backend-common": "^0.25.0", "@backstage/backend-plugin-api": "workspace:^", "@backstage/config": "workspace:^", + "@backstage/errors": "workspace:^", "@backstage/plugin-events-node": "workspace:^", + "@backstage/types": "workspace:^", "@types/express": "^4.17.6", "express": "^4.17.1", "express-promise-router": "^4.1.0", "winston": "^3.2.1", - "ws": "^8.17.0" + "ws": "^8.17.0", + "zod": "^3.22.4", + "zod-validation-error": "^3.3.0" }, "devDependencies": { "@backstage/backend-defaults": "workspace:^", diff --git a/plugins/events-backend/src/service/hub/EventHub.ts b/plugins/events-backend/src/service/hub/EventHub.ts index cc99a2b2dd..21692ca10f 100644 --- a/plugins/events-backend/src/service/hub/EventHub.ts +++ b/plugins/events-backend/src/service/hub/EventHub.ts @@ -25,6 +25,76 @@ import Router from 'express-promise-router'; import { Socket } from 'net'; import { STATUS_CODES } from 'http'; import { WebSocketServer, type WebSocket, RawData } from 'ws'; +import { z, ZodError } from 'zod'; +import { fromZodError } from 'zod-validation-error'; +import { JsonObject, JsonValue } from '@backstage/types'; +import { serializeError } from '@backstage/errors'; + +/* + +# Protocol + +## Request/Response + +General request/response format used for all communication: + +-> [type: 'req', id: number, method: string, params: JsonObject] +<- [type: 'res', id: number, status: 'resolved' | 'rejected', result: JsonObject] + +## Client -> Server + +### Subscribe + +-> method: 'subscribe', params: { id: string, topics: string[] } +<- result: void + +### Publish + +-> method: 'publish', params: { topic: string, payload: JsonObject } +<- result: void + +## Server -> Client + +### Event + +-> method: 'event', params: { topic: string, payload: JsonObject } +<- result: void + +*/ + +const messageSchema = z.union([ + z.tuple([ + z.literal('req'), + z.number().int().gt(0), + z.string().min(1), + z.any(), + ]), + z.tuple([ + z.literal('res'), + z.number().int().gt(0), + z.enum(['resolved', 'rejected']), + z.any(), + ]), +]); +const subscribeParamsSchema = z.object({ + id: z.string().min(1), + topics: z.array(z.string().min(1)), +}); +const publishParamsSchema = z.object({ + topic: z.string().min(1), + payload: z.any(), +}); +const eventParamsSchema = z.object({ + topic: z.string().min(1), + payload: z.any(), +}); + +function errorToJson(error: Error): JsonObject { + if (error.name === 'ZodError') { + return serializeError(fromZodError(error as ZodError)); + } + return serializeError(error); +} /** * Manages a single WebSocket connection. @@ -51,7 +121,6 @@ class EventClientConnection { ws.addListener('close', conn.#handleClose); ws.addListener('error', conn.#handleError); ws.addListener('message', conn.#handleMessage); - ws.addListener('ping', () => ws.pong()); logger.info( `New event client connection from '${options.socket.remoteAddress}'`, @@ -65,6 +134,19 @@ class EventClientConnection { readonly #logger: LoggerService; readonly #credentials: BackstageCredentials; + #seq = 1; + readonly #pendingRequests = new Map< + number, + { resolve(result: unknown): void; reject(error: unknown): void } + >(); + readonly #requestHandlers = new Map< + string, + { + schema: z.ZodType; + handler: (params: any) => unknown; + } + >(); + constructor( id: string, ws: WebSocket, @@ -91,10 +173,78 @@ class EventClientConnection { this.#logger.error(`WebSocket error`, error); }; - #handleMessage = (data: RawData, isBinary: boolean) => { - console.log(`DEBUG: isBinary=${isBinary} data=${data}`); + #handleMessage = (rawData: RawData, isBinary: boolean) => { + if (isBinary) { + return; + } + try { + const data = Array.isArray(rawData) + ? Buffer.concat(rawData) + : Buffer.from(rawData); + const message = messageSchema.parse(JSON.parse(data.toString('utf8'))); + + if (message[0] === 'req') { + const [, seq, method, params] = message; + const handler = this.#requestHandlers.get(method); + if (!handler) { + throw new Error(`Unknown method '${method}'`); + } + + try { + const parsedParams = handler.schema.parse(params); + + Promise.resolve(handler.handler(parsedParams)).then( + result => { + this.#sendMessage('res', seq, 'resolved', result ?? null); + }, + error => { + this.#sendMessage('res', seq, 'rejected', errorToJson(error)); + }, + ); + } catch (error) { + this.#sendMessage('res', seq, false, errorToJson(error)); + } + } else if (message[0] === 'res') { + const [, seq, success, result] = message; + const pendingRequest = this.#pendingRequests.get(seq); + if (!pendingRequest) { + throw new Error(`Received response for unknown request seq=${seq}`); + } + this.#pendingRequests.delete(seq); + if (success) { + pendingRequest.resolve(result); + } else { + pendingRequest.reject(result); + } + } + } catch (error) { + this.#logger.error('Invalid message received', error); + } }; + addRequestHandler( + method: string, + schema: z.ZodType, + handler: (params: TParams) => unknown, + ) { + this.#requestHandlers.set(method, { schema, handler }); + } + + async request( + method: string, + params: TReq, + ): Promise { + return new Promise((resolve, reject) => { + const seq = this.#seq++; + this.#pendingRequests.set(seq, { resolve, reject }); + this.#sendMessage('req', seq, method, params); + }); + } + + #sendMessage(...message: JsonValue[]) { + this.#ws.send(JSON.stringify(message)); + } + close() { this.#removeListeners(); this.#ws.close(); @@ -162,7 +312,7 @@ export class EventHub { return this.#handler; } - #handleGetConnect: Handler = async (req, _res) => { + #handleGetConnect: Handler = async (req, _res, next) => { try { const credentials = await this.#httpAuth.credentials(req, { allow: ['service'], @@ -179,6 +329,20 @@ export class EventHub { logger: this.#logger, credentials, }); + conn.addRequestHandler( + 'subscribe', + subscribeParamsSchema, + async params => { + console.log(`DEBUG: subscribe req`, params); + }, + ); + conn.addRequestHandler( + 'publish', + publishParamsSchema, + async params => { + console.log(`DEBUG: publish req`, params); + }, + ); this.#connections.set(conn.id, conn); }, ); diff --git a/yarn.lock b/yarn.lock index 18e926a14e..8f93a53290 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6143,14 +6143,18 @@ __metadata: "@backstage/backend-test-utils": "workspace:^" "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" + "@backstage/errors": "workspace:^" "@backstage/plugin-events-backend-test-utils": "workspace:^" "@backstage/plugin-events-node": "workspace:^" + "@backstage/types": "workspace:^" "@types/express": ^4.17.6 express: ^4.17.1 express-promise-router: ^4.1.0 supertest: ^7.0.0 winston: ^3.2.1 ws: ^8.17.0 + zod: ^3.22.4 + zod-validation-error: ^3.3.0 languageName: unknown linkType: soft @@ -44662,12 +44666,12 @@ __metadata: languageName: node linkType: hard -"zod-validation-error@npm:^3.0.3": - version: 3.1.0 - resolution: "zod-validation-error@npm:3.1.0" +"zod-validation-error@npm:^3.0.3, zod-validation-error@npm:^3.3.0": + version: 3.3.0 + resolution: "zod-validation-error@npm:3.3.0" peerDependencies: zod: ^3.18.0 - checksum: 84df01c91d594701eaf7f5f007be881e47f7adef2e3f3765f7be031cb78033f9be0924273106cb81b586d8020da9885dbb81b3da363f00a51df00f26274f2b23 + checksum: cbf81ecd27df675d72883b69833565af787302e70ad970ae4a5dab84e1cb8739cedf094b35f7f4b78307adaadb7cab0c0a8f7debeb6516e3fee998a3d4e13422 languageName: node linkType: hard From 6b148372c1f883a7c3713e8a73d1f6adeaeb3cdd Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Wed, 22 May 2024 14:23:10 +0200 Subject: [PATCH 020/164] events-backend: initial events store Signed-off-by: Patrik Oldsberg --- plugins/events-backend/dev/index.ts | 13 +- .../src/service/hub/EventHub.ts | 166 +++++++++++++++++- 2 files changed, 172 insertions(+), 7 deletions(-) diff --git a/plugins/events-backend/dev/index.ts b/plugins/events-backend/dev/index.ts index 445fa4b4b9..33bb01a985 100644 --- a/plugins/events-backend/dev/index.ts +++ b/plugins/events-backend/dev/index.ts @@ -94,9 +94,20 @@ backend.add( { id: 'derp', topics: ['test'] }, ]), ); + setTimeout(() => { + console.log(`DEBUG: publish!`); + ws.send( + JSON.stringify([ + 'req', + 1, + 'publish', + { topic: 'test', payload: { foo: 'bar' } }, + ]), + ); + }, 1000); }; ws.onmessage = event => { - console.log(`DEBUG: event=`, event.data); + console.log(`DEBUG: client event=`, event.data); }; ws.onerror = event => { console.log(`Client error`, event.error); diff --git a/plugins/events-backend/src/service/hub/EventHub.ts b/plugins/events-backend/src/service/hub/EventHub.ts index 21692ca10f..7cb68ce808 100644 --- a/plugins/events-backend/src/service/hub/EventHub.ts +++ b/plugins/events-backend/src/service/hub/EventHub.ts @@ -29,6 +29,7 @@ import { z, ZodError } from 'zod'; import { fromZodError } from 'zod-validation-error'; import { JsonObject, JsonValue } from '@backstage/types'; import { serializeError } from '@backstage/errors'; +import { EventParams } from '@backstage/plugin-events-node'; /* @@ -85,8 +86,13 @@ const publishParamsSchema = z.object({ payload: z.any(), }); const eventParamsSchema = z.object({ - topic: z.string().min(1), - payload: z.any(), + events: z.array( + z.object({ + topic: z.string().min(1), + payload: z.any(), + metadata: z.any().optional(), + }), + ), }); function errorToJson(error: Error): JsonObject { @@ -96,6 +102,106 @@ function errorToJson(error: Error): JsonObject { return serializeError(error); } +type EventHubStore = { + publish(options: { + params: EventParams; + subscriberIds: string[]; + }): Promise; + + upsertSubscription(id: string, topics: string[]): Promise; + + readSubscription(id: string): Promise<{ events: EventParams[] }>; + + listen( + topicIds: string[], + onNotify: (topicId: string) => void, + ): Promise<() => void>; +}; + +const MAX_BATCH_SIZE = 5; + +class MemoryEventHubStore implements EventHubStore { + #events = new Array(); + #subscribers = new Map< + string, + { id: string; seq: number; topics: Set } + >(); + #listeners = new Set<{ + topics: Set; + notify(topicId: string): void; + }>(); + + async publish(options: { + params: EventParams; + subscriberIds: string[]; + }): Promise { + const topicId = options.params.topic; + + let hasOtherSubscribers = false; + for (const sub of this.#subscribers.values()) { + if (sub.topics.has(topicId) && !options.subscriberIds.includes(sub.id)) { + hasOtherSubscribers = true; + break; + } + } + if (!hasOtherSubscribers) { + return; + } + + const nextSeq = this.#getMaxSeq() + 1; + this.#events.push({ ...options.params, seq: nextSeq }); + + for (const listener of this.#listeners) { + if (listener.topics.has(topicId)) { + listener.notify(topicId); + } + } + } + + #getMaxSeq() { + return this.#events[this.#events.length - 1]?.seq ?? 0; + } + + async upsertSubscription(id: string, topics: string[]): Promise { + const existing = this.#subscribers.get(id); + if (existing) { + existing.topics = new Set(topics); + return; + } + const sub = { + id: id, + seq: this.#getMaxSeq(), + topics: new Set(topics), + }; + this.#subscribers.set(id, sub); + } + + async readSubscription(id: string): Promise<{ events: EventParams[] }> { + const sub = this.#subscribers.get(id); + if (!sub) { + throw new Error(`Subscription not found`); + } + const events = this.#events + .filter(event => event.seq > sub.seq && sub.topics.has(event.topic)) + .slice(0, MAX_BATCH_SIZE); + + sub.seq = events[events.length - 1]?.seq ?? sub.seq; + + return { events: events.map(event => ({ ...event, req: undefined })) }; + } + + async listen( + topicIds: string[], + onNotify: (topicId: string) => void, + ): Promise<() => void> { + const listener = { topics: new Set(topicIds), notify: onNotify }; + this.#listeners.add(listener); + return () => { + this.#listeners.delete(listener); + }; + } +} + /** * Manages a single WebSocket connection. * @@ -230,7 +336,7 @@ class EventClientConnection { this.#requestHandlers.set(method, { schema, handler }); } - async request( + async request( method: string, params: TReq, ): Promise { @@ -293,6 +399,7 @@ export class EventHub { readonly #handler: Handler; readonly #logger: LoggerService; readonly #httpAuth: HttpAuthService; + readonly #store: EventHubStore; #connections = new Map(); @@ -306,13 +413,14 @@ export class EventHub { this.#handler = handler; this.#logger = logger; this.#httpAuth = httpAuth; + this.#store = new MemoryEventHubStore(); } handler(): Handler { return this.#handler; } - #handleGetConnect: Handler = async (req, _res, next) => { + #handleGetConnect: Handler = async (req, _res) => { try { const credentials = await this.#httpAuth.credentials(req, { allow: ['service'], @@ -333,14 +441,60 @@ export class EventHub { 'subscribe', subscribeParamsSchema, async params => { - console.log(`DEBUG: subscribe req`, params); + await this.#store.upsertSubscription(params.id, params.topics); + + this.#logger.info( + `New subscription '${params.id}' topics='${params.topics.join( + "', '", + )}'`, + ); + + const read = () => + this.#store.readSubscription(params.id).then( + ({ events }) => { + if (events.length > 0) { + conn + .request, void>( + 'events', + { events }, + ) + .catch(error => { + this.#logger.error( + `Failed to send events to subscription ${params.id}`, + error, + ); + }); + } + }, + error => { + this.#logger.error( + `Failed to read subscription ${params.id}`, + error, + ); + }, + ); + + const removeListener = await this.#store.listen( + params.topics, + read, + ); + ws.addListener('close', removeListener); + + await read(); }, ); conn.addRequestHandler( 'publish', publishParamsSchema, async params => { - console.log(`DEBUG: publish req`, params); + await this.#store.publish({ + params: { + topic: params.topic, + eventPayload: params.payload, + }, + subscriberIds: [], + }); + this.#logger.info(`Published event to '${params.topic}'`); }, ); this.#connections.set(conn.id, conn); From a90ce4aa39037cb84e58bc6ce4151b20bdeb398a Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Wed, 22 May 2024 14:25:31 +0200 Subject: [PATCH 021/164] events-node: update EventParams type Signed-off-by: Patrik Oldsberg --- .changeset/stale-roses-serve.md | 5 +++++ plugins/events-node/package.json | 3 ++- plugins/events-node/src/api/EventParams.ts | 6 ++++-- yarn.lock | 1 + 4 files changed, 12 insertions(+), 3 deletions(-) create mode 100644 .changeset/stale-roses-serve.md diff --git a/.changeset/stale-roses-serve.md b/.changeset/stale-roses-serve.md new file mode 100644 index 0000000000..dc1ab50f88 --- /dev/null +++ b/.changeset/stale-roses-serve.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-events-node': patch +--- + +The `EventParams` payload must now be a `JsonValue`, and the `metadata` type has been tweaked. diff --git a/plugins/events-node/package.json b/plugins/events-node/package.json index 6795c13441..9f822c7a94 100644 --- a/plugins/events-node/package.json +++ b/plugins/events-node/package.json @@ -51,7 +51,8 @@ "test": "backstage-cli package test" }, "dependencies": { - "@backstage/backend-plugin-api": "workspace:^" + "@backstage/backend-plugin-api": "workspace:^", + "@backstage/types": "workspace:^" }, "devDependencies": { "@backstage/backend-common": "^0.25.0", diff --git a/plugins/events-node/src/api/EventParams.ts b/plugins/events-node/src/api/EventParams.ts index 19a562aee0..9cd88b160f 100644 --- a/plugins/events-node/src/api/EventParams.ts +++ b/plugins/events-node/src/api/EventParams.ts @@ -14,10 +14,12 @@ * limitations under the License. */ +import { JsonValue } from '@backstage/types'; + /** * @public */ -export interface EventParams { +export interface EventParams { /** * Topic for which this event should be published. */ @@ -29,5 +31,5 @@ export interface EventParams { /** * Metadata (e.g., HTTP headers and similar for events received from external). */ - metadata?: Record; + metadata?: { [name in string]?: string | string[] }; } diff --git a/yarn.lock b/yarn.lock index 8f93a53290..f6a430f9af 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6166,6 +6166,7 @@ __metadata: "@backstage/backend-plugin-api": "workspace:^" "@backstage/backend-test-utils": "workspace:^" "@backstage/cli": "workspace:^" + "@backstage/types": "workspace:^" languageName: unknown linkType: soft From ee52e38a04aca350b2301a6da6a77babce728238 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Wed, 22 May 2024 18:34:56 +0200 Subject: [PATCH 022/164] events-backend: add hub http subscription API + listen by subscription ID Signed-off-by: Patrik Oldsberg --- plugins/events-backend/dev/index.ts | 49 ++++++++++++--- .../src/service/hub/EventHub.ts | 63 ++++++++++++++++--- 2 files changed, 96 insertions(+), 16 deletions(-) diff --git a/plugins/events-backend/dev/index.ts b/plugins/events-backend/dev/index.ts index 33bb01a985..77aa379744 100644 --- a/plugins/events-backend/dev/index.ts +++ b/plugins/events-backend/dev/index.ts @@ -79,6 +79,39 @@ backend.add( onBehalfOf: await auth.getOwnServiceCredentials(), targetPluginId: 'events', }); + + const subRes = await fetch(`${baseUrl}/hub/subscriptions/123`, { + method: 'PUT', + headers: { + Authorization: `Bearer ${token}`, + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + topics: ['test'], + }), + }); + console.log( + `DEBUG: sub create req = ${subRes.status} ${subRes.statusText}`, + ); + + const poll = async () => { + const res = await fetch(`${baseUrl}/hub/subscriptions/123`, { + headers: { + Authorization: `Bearer ${token}`, + 'Content-Type': 'application/json', + }, + }); + + const data = res.status === 200 && (await res.json()); + console.log( + `DEBUG: sub poll req = ${res.status} ${res.statusText}`, + data, + ); + poll(); + }; + + poll(); + const ws = new WebSocket(`${baseUrl}/hub/connect`, { headers: { Authorization: `Bearer ${token}`, @@ -86,14 +119,14 @@ backend.add( }); ws.onopen = () => { console.log('DEBUG: ws.onopen'); - ws.send( - JSON.stringify([ - 'req', - 1, - 'subscribe', - { id: 'derp', topics: ['test'] }, - ]), - ); + // ws.send( + // JSON.stringify([ + // 'req', + // 1, + // 'subscribe', + // { id: 'derp', topics: ['test'] }, + // ]), + // ); setTimeout(() => { console.log(`DEBUG: publish!`); ws.send( diff --git a/plugins/events-backend/src/service/hub/EventHub.ts b/plugins/events-backend/src/service/hub/EventHub.ts index 7cb68ce808..c4d0a785d3 100644 --- a/plugins/events-backend/src/service/hub/EventHub.ts +++ b/plugins/events-backend/src/service/hub/EventHub.ts @@ -20,7 +20,7 @@ import { HttpAuthService, LoggerService, } from '@backstage/backend-plugin-api'; -import { Handler } from 'express'; +import express, { Handler } from 'express'; import Router from 'express-promise-router'; import { Socket } from 'net'; import { STATUS_CODES } from 'http'; @@ -113,7 +113,7 @@ type EventHubStore = { readSubscription(id: string): Promise<{ events: EventParams[] }>; listen( - topicIds: string[], + subscriptionId: string, onNotify: (topicId: string) => void, ): Promise<() => void>; }; @@ -191,10 +191,14 @@ class MemoryEventHubStore implements EventHubStore { } async listen( - topicIds: string[], + subscriptionId: string, onNotify: (topicId: string) => void, ): Promise<() => void> { - const listener = { topics: new Set(topicIds), notify: onNotify }; + const sub = this.#subscribers.get(subscriptionId); + if (!sub) { + throw new Error(`Subscription not found`); + } + const listener = { topics: sub.topics, notify: onNotify }; this.#listeners.add(listener); return () => { this.#listeners.delete(listener); @@ -390,8 +394,15 @@ export class EventHub { const hub = new EventHub(server, router, logger, httpAuth); + // WS router.get('/connect', hub.#handleGetConnect); + router.use(express.json()); + + // Long-polling + router.get('/subscriptions/:id', hub.#handleGetSubscription); + router.put('/subscriptions/:id', hub.#handlePutSubscription); + return hub; } @@ -474,10 +485,7 @@ export class EventHub { }, ); - const removeListener = await this.#store.listen( - params.topics, - read, - ); + const removeListener = await this.#store.listen(params.id, read); ws.addListener('close', removeListener); await read(); @@ -518,6 +526,45 @@ export class EventHub { } }; + #handleGetSubscription: Handler = async (req, res) => { + const credentials = await this.#httpAuth.credentials(req, { + allow: ['service'], + }); + const id = req.params.id; + + const { events } = await this.#store.readSubscription(id); + + this.#logger.info( + `Reading subscription '${id}' resulted in ${events.length} events`, + { subject: credentials.principal.subject }, + ); + + if (events.length > 0) { + res.json({ events }); + return; + } + + this.#store.listen(id, () => { + res.status(204).end(); + }); + }; + + #handlePutSubscription: Handler = async (req, res) => { + const credentials = await this.#httpAuth.credentials(req, { + allow: ['service'], + }); + const id = req.params.id; + + await this.#store.upsertSubscription(id, req.body.topics); + + this.#logger.info( + `New subscription '${id}' topics='${req.body.topics.join("', '")}'`, + { subject: credentials.principal.subject }, + ); + + res.status(201).end(); + }; + close() { this.#connections.forEach(conn => conn.close()); this.#connections.clear(); From ea4b912f93847fc38b0fa98313ac58e476eba57b Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Wed, 22 May 2024 18:42:39 +0200 Subject: [PATCH 023/164] events-backend: add hub HTTP publish Signed-off-by: Patrik Oldsberg --- plugins/events-backend/dev/index.ts | 29 +++++++++++++++---- .../src/service/hub/EventHub.ts | 21 +++++++++++++- 2 files changed, 43 insertions(+), 7 deletions(-) diff --git a/plugins/events-backend/dev/index.ts b/plugins/events-backend/dev/index.ts index 77aa379744..752b88fb1f 100644 --- a/plugins/events-backend/dev/index.ts +++ b/plugins/events-backend/dev/index.ts @@ -95,12 +95,15 @@ backend.add( ); const poll = async () => { - const res = await fetch(`${baseUrl}/hub/subscriptions/123`, { - headers: { - Authorization: `Bearer ${token}`, - 'Content-Type': 'application/json', + const res = await fetch( + `${baseUrl}/hub/subscriptions/123/events`, + { + headers: { + Authorization: `Bearer ${token}`, + 'Content-Type': 'application/json', + }, }, - }); + ); const data = res.status === 200 && (await res.json()); console.log( @@ -109,9 +112,23 @@ backend.add( ); poll(); }; - poll(); + setTimeout(() => { + console.log(`DEBUG: publishing!`); + fetch(`${baseUrl}/hub/events`, { + method: 'POST', + headers: { + Authorization: `Bearer ${token}`, + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + topic: 'test', + payload: { herp: 'derp' }, + }), + }); + }, 500); + const ws = new WebSocket(`${baseUrl}/hub/connect`, { headers: { Authorization: `Bearer ${token}`, diff --git a/plugins/events-backend/src/service/hub/EventHub.ts b/plugins/events-backend/src/service/hub/EventHub.ts index c4d0a785d3..584abffc9b 100644 --- a/plugins/events-backend/src/service/hub/EventHub.ts +++ b/plugins/events-backend/src/service/hub/EventHub.ts @@ -399,8 +399,10 @@ export class EventHub { router.use(express.json()); + router.post('/events', hub.#handlePostEvents); + // Long-polling - router.get('/subscriptions/:id', hub.#handleGetSubscription); + router.get('/subscriptions/:id/events', hub.#handleGetSubscription); router.put('/subscriptions/:id', hub.#handlePutSubscription); return hub; @@ -526,6 +528,23 @@ export class EventHub { } }; + #handlePostEvents: Handler = async (req, res) => { + const credentials = await this.#httpAuth.credentials(req, { + allow: ['service'], + }); + await this.#store.publish({ + params: { + topic: req.body.topic, + eventPayload: req.body.payload, + }, + subscriberIds: [], + }); + this.#logger.info(`Published event to '${req.body.topic}'`, { + subject: credentials.principal.subject, + }); + res.status(201).end(); + }; + #handleGetSubscription: Handler = async (req, res) => { const credentials = await this.#httpAuth.credentials(req, { allow: ['service'], From acdefea2a1e0f4d9aeaaa8b26a78cce397dc93e2 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Wed, 22 May 2024 20:19:00 +0200 Subject: [PATCH 024/164] events-backend: add OpenAPI schema Signed-off-by: Patrik Oldsberg --- plugins/events-backend/package.json | 3 + .../src/schema/openapi.generated.ts | 289 ++++++++++++++++++ .../events-backend/src/schema/openapi.yaml | 185 +++++++++++ .../src/service/EventsPlugin.ts | 2 +- .../src/service/hub/EventHub.ts | 48 ++- yarn.lock | 2 + 6 files changed, 515 insertions(+), 14 deletions(-) create mode 100644 plugins/events-backend/src/schema/openapi.generated.ts create mode 100644 plugins/events-backend/src/schema/openapi.yaml diff --git a/plugins/events-backend/package.json b/plugins/events-backend/package.json index dc7c2b0110..3160e6d494 100644 --- a/plugins/events-backend/package.json +++ b/plugins/events-backend/package.json @@ -44,6 +44,7 @@ "scripts": { "build": "backstage-cli package build", "clean": "backstage-cli package clean", + "generate": "backstage-repo-tools package schema openapi generate --server", "lint": "backstage-cli package lint", "prepack": "backstage-cli package prepack", "postpack": "backstage-cli package postpack", @@ -52,6 +53,7 @@ }, "dependencies": { "@backstage/backend-common": "^0.25.0", + "@backstage/backend-openapi-utils": "workspace:^", "@backstage/backend-plugin-api": "workspace:^", "@backstage/config": "workspace:^", "@backstage/errors": "workspace:^", @@ -70,6 +72,7 @@ "@backstage/backend-test-utils": "workspace:^", "@backstage/cli": "workspace:^", "@backstage/plugin-events-backend-test-utils": "workspace:^", + "@backstage/repo-tools": "workspace:^", "supertest": "^7.0.0" }, "configSchema": "config.d.ts" diff --git a/plugins/events-backend/src/schema/openapi.generated.ts b/plugins/events-backend/src/schema/openapi.generated.ts new file mode 100644 index 0000000000..7d17ad2bf6 --- /dev/null +++ b/plugins/events-backend/src/schema/openapi.generated.ts @@ -0,0 +1,289 @@ +/* + * 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. + */ + +// ****************************************************************** +// * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. * +// ****************************************************************** +import { createValidatedOpenApiRouter } from '@backstage/backend-openapi-utils'; + +export const spec = { + openapi: '3.0.3', + info: { + title: 'events', + version: '1', + description: 'The Backstage backend plugin that powers the events system.', + license: { + name: 'Apache-2.0', + url: 'http://www.apache.org/licenses/LICENSE-2.0.html', + }, + contact: {}, + }, + servers: [ + { + url: '/', + }, + ], + components: { + examples: {}, + headers: {}, + parameters: { + subscriptionId: { + name: 'subscriptionId', + in: 'path', + required: true, + allowReserved: true, + schema: { + type: 'string', + }, + }, + }, + requestBodies: {}, + responses: { + ErrorResponse: { + description: 'An error response from the backend.', + content: { + 'application/json; charset=utf-8': { + schema: { + $ref: '#/components/schemas/Error', + }, + }, + }, + }, + }, + schemas: { + Event: { + type: 'object', + required: ['topic', 'payload'], + properties: { + topic: { + type: 'string', + description: 'The topic that the event is published on', + }, + payload: { + $ref: '#/components/schemas/JsonObject', + description: 'The event payload', + }, + }, + }, + Error: { + type: 'object', + properties: { + error: { + type: 'object', + properties: { + name: { + type: 'string', + }, + message: { + type: 'string', + }, + }, + required: ['name', 'message'], + }, + request: { + type: 'object', + properties: { + method: { + type: 'string', + }, + url: { + type: 'string', + }, + }, + required: ['method', 'url'], + }, + response: { + type: 'object', + properties: { + statusCode: { + type: 'number', + }, + }, + required: ['statusCode'], + }, + }, + required: ['error', 'request', 'response'], + }, + JsonObject: { + type: 'object', + properties: {}, + additionalProperties: {}, + }, + }, + securitySchemes: { + JWT: { + type: 'http', + scheme: 'bearer', + bearerFormat: 'JWT', + }, + }, + }, + paths: { + '/hub/events': { + post: { + operationId: 'PostEvent', + description: 'Publish a new event', + responses: { + default: { + $ref: '#/components/responses/ErrorResponse', + }, + }, + security: [ + {}, + { + JWT: [], + }, + ], + requestBody: { + required: true, + content: { + 'application/json': { + schema: { + type: 'object', + required: ['event'], + properties: { + event: { + $ref: '#/components/schemas/Event', + }, + subscriptionIds: { + type: 'array', + description: + 'The IDs of subscriptions that have already received this event', + items: { + type: 'string', + }, + }, + }, + }, + examples: { + 'Publishing a simple Event': { + value: { + event: { + topic: 'test-topic', + payload: { + myData: 'foo', + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + '/hub/subscriptions/{subscriptionId}': { + put: { + operationId: 'PutSubscription', + description: + 'Ensures that the subscription exists with the provided configuration', + responses: { + '201': { + description: 'The subscription exists or was created successfully', + }, + default: { + $ref: '#/components/responses/ErrorResponse', + }, + }, + security: [ + {}, + { + JWT: [], + }, + ], + parameters: [ + { + $ref: '#/components/parameters/subscriptionId', + }, + ], + requestBody: { + required: true, + content: { + 'application/json': { + schema: { + type: 'object', + required: ['topics'], + properties: { + topics: { + type: 'array', + description: 'The topics to subscribe to', + items: { + type: 'string', + }, + }, + }, + }, + examples: { + 'Subscribing to a single topic': { + value: { + topics: ['test-topic'], + }, + }, + }, + }, + }, + }, + }, + }, + '/hub/subscriptions/{subscriptionId}/events': { + get: { + operationId: 'GetSubscriptionEvents', + description: 'Get new events for the provided subscription', + responses: { + '200': { + description: 'New events', + content: { + 'application/json': { + schema: { + type: 'object', + properties: { + events: { + type: 'array', + items: { + $ref: '#/components/schemas/Event', + }, + }, + }, + required: ['results'], + }, + }, + }, + }, + '201': { + description: 'Block poll response, new events are available', + }, + default: { + $ref: '#/components/responses/ErrorResponse', + }, + }, + security: [ + {}, + { + JWT: [], + }, + ], + parameters: [ + { + $ref: '#/components/parameters/subscriptionId', + }, + ], + }, + }, + }, +} as const; +export const createOpenApiRouter = async ( + options?: Parameters['1'], +) => createValidatedOpenApiRouter(spec, options); diff --git a/plugins/events-backend/src/schema/openapi.yaml b/plugins/events-backend/src/schema/openapi.yaml new file mode 100644 index 0000000000..1adee01ab5 --- /dev/null +++ b/plugins/events-backend/src/schema/openapi.yaml @@ -0,0 +1,185 @@ +openapi: 3.0.3 +info: + title: events + version: '1' + description: The Backstage backend plugin that powers the events system. + license: + name: Apache-2.0 + url: http://www.apache.org/licenses/LICENSE-2.0.html + contact: {} +servers: + - url: / +components: + examples: {} + headers: {} + parameters: + subscriptionId: + name: subscriptionId + in: path + required: true + allowReserved: true + schema: + type: string + requestBodies: {} + responses: + ErrorResponse: + description: An error response from the backend. + content: + application/json; charset=utf-8: + schema: + $ref: '#/components/schemas/Error' + schemas: + Event: + type: object + required: + - topic + - payload + properties: + topic: + type: string + description: The topic that the event is published on + payload: + $ref: '#/components/schemas/JsonObject' + description: The event payload + + Error: + type: object + properties: + error: + type: object + properties: + name: + type: string + message: + type: string + required: + - name + - message + request: + type: object + properties: + method: + type: string + url: + type: string + required: + - method + - url + response: + type: object + properties: + statusCode: + type: number + required: + - statusCode + required: + - error + - request + - response + + JsonObject: + type: object + properties: {} + # Free form object. + additionalProperties: {} + securitySchemes: + JWT: + type: http + scheme: bearer + bearerFormat: JWT +paths: + /hub/events: + post: + operationId: PostEvent + description: Publish a new event + responses: + default: + $ref: '#/components/responses/ErrorResponse' + security: + - {} + - JWT: [] + requestBody: + required: true + content: + application/json: + schema: + type: object + required: + - event + properties: + event: + $ref: '#/components/schemas/Event' + subscriptionIds: + type: array + description: The IDs of subscriptions that have already received this event + items: + type: string + examples: + Publishing a simple Event: + value: + event: + topic: test-topic + payload: + myData: foo + + /hub/subscriptions/{subscriptionId}: + put: + operationId: PutSubscription + description: Ensures that the subscription exists with the provided configuration + responses: + '201': + description: The subscription exists or was created successfully + default: + $ref: '#/components/responses/ErrorResponse' + security: + - {} + - JWT: [] + parameters: + - $ref: '#/components/parameters/subscriptionId' + requestBody: + required: true + content: + application/json: + schema: + type: object + required: + - topics + properties: + topics: + type: array + description: The topics to subscribe to + items: + type: string + examples: + Subscribing to a single topic: + value: + topics: + - test-topic + + /hub/subscriptions/{subscriptionId}/events: + get: + operationId: GetSubscriptionEvents + description: Get new events for the provided subscription + responses: + '200': + description: New events + content: + application/json: + schema: + type: object + properties: + events: + type: array + items: + $ref: '#/components/schemas/Event' + required: + - results + '201': + description: Block poll response, new events are available + default: + $ref: '#/components/responses/ErrorResponse' + security: + - {} + - JWT: [] + parameters: + - $ref: '#/components/parameters/subscriptionId' diff --git a/plugins/events-backend/src/service/EventsPlugin.ts b/plugins/events-backend/src/service/EventsPlugin.ts index ecb234066d..b7892a5079 100644 --- a/plugins/events-backend/src/service/EventsPlugin.ts +++ b/plugins/events-backend/src/service/EventsPlugin.ts @@ -97,7 +97,7 @@ export const eventsPlugin = createBackendPlugin({ http.bind(eventsRouter); const hub = await EventHub.create({ logger, httpAuth }); - eventsRouter.use('/hub', hub.handler()); + router.use(hub.handler()); router.use(eventsRouter); router.addAuthPolicy({ diff --git a/plugins/events-backend/src/service/hub/EventHub.ts b/plugins/events-backend/src/service/hub/EventHub.ts index 584abffc9b..d20401c98f 100644 --- a/plugins/events-backend/src/service/hub/EventHub.ts +++ b/plugins/events-backend/src/service/hub/EventHub.ts @@ -20,7 +20,7 @@ import { HttpAuthService, LoggerService, } from '@backstage/backend-plugin-api'; -import express, { Handler } from 'express'; +import { Handler } from 'express'; import Router from 'express-promise-router'; import { Socket } from 'net'; import { STATUS_CODES } from 'http'; @@ -30,6 +30,8 @@ import { fromZodError } from 'zod-validation-error'; import { JsonObject, JsonValue } from '@backstage/types'; import { serializeError } from '@backstage/errors'; import { EventParams } from '@backstage/plugin-events-node'; +import { spec, createOpenApiRouter } from '../../schema/openapi.generated'; +import { internal } from '@backstage/backend-openapi-utils'; /* @@ -395,15 +397,23 @@ export class EventHub { const hub = new EventHub(server, router, logger, httpAuth); // WS - router.get('/connect', hub.#handleGetConnect); + router.get('/hub/connect', hub.#handleGetConnect); - router.use(express.json()); + const apiRouter = await createOpenApiRouter(); - router.post('/events', hub.#handlePostEvents); + router.use(apiRouter); + + apiRouter.post('/hub/events', hub.#handlePostEvents); // Long-polling - router.get('/subscriptions/:id/events', hub.#handleGetSubscription); - router.put('/subscriptions/:id', hub.#handlePutSubscription); + apiRouter.get( + '/hub/subscriptions/:subscriptionId/events', + hub.#handleGetSubscription, + ); + apiRouter.put( + '/hub/subscriptions/:subscriptionId', + hub.#handlePutSubscription, + ); return hub; } @@ -528,14 +538,18 @@ export class EventHub { } }; - #handlePostEvents: Handler = async (req, res) => { + #handlePostEvents: internal.DocRequestHandler< + typeof spec, + '/hub/events', + 'post' + > = async (req, res) => { const credentials = await this.#httpAuth.credentials(req, { allow: ['service'], }); await this.#store.publish({ params: { - topic: req.body.topic, - eventPayload: req.body.payload, + topic: req.body.event.topic, + eventPayload: req.body.event.payload, }, subscriberIds: [], }); @@ -545,11 +559,15 @@ export class EventHub { res.status(201).end(); }; - #handleGetSubscription: Handler = async (req, res) => { + #handleGetSubscription: internal.DocRequestHandler< + typeof spec, + '/hub/subscriptions/{subscriptionId}/events', + 'get' + > = async (req, res) => { const credentials = await this.#httpAuth.credentials(req, { allow: ['service'], }); - const id = req.params.id; + const id = req.params.subscriptionId; const { events } = await this.#store.readSubscription(id); @@ -568,11 +586,15 @@ export class EventHub { }); }; - #handlePutSubscription: Handler = async (req, res) => { + #handlePutSubscription: internal.DocRequestHandler< + typeof spec, + '/hub/subscriptions/{subscriptionId}', + 'put' + > = async (req, res) => { const credentials = await this.#httpAuth.credentials(req, { allow: ['service'], }); - const id = req.params.id; + const id = req.params.subscriptionId; await this.#store.upsertSubscription(id, req.body.topics); diff --git a/yarn.lock b/yarn.lock index f6a430f9af..d1024c0d96 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6139,6 +6139,7 @@ __metadata: dependencies: "@backstage/backend-common": ^0.25.0 "@backstage/backend-defaults": "workspace:^" + "@backstage/backend-openapi-utils": "workspace:^" "@backstage/backend-plugin-api": "workspace:^" "@backstage/backend-test-utils": "workspace:^" "@backstage/cli": "workspace:^" @@ -6146,6 +6147,7 @@ __metadata: "@backstage/errors": "workspace:^" "@backstage/plugin-events-backend-test-utils": "workspace:^" "@backstage/plugin-events-node": "workspace:^" + "@backstage/repo-tools": "workspace:^" "@backstage/types": "workspace:^" "@types/express": ^4.17.6 express: ^4.17.1 From b8be639b9a9800217bee0fad99ab23cd46b8b1a1 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Thu, 23 May 2024 01:31:10 +0200 Subject: [PATCH 025/164] events-node: generate client Signed-off-by: Patrik Oldsberg --- plugins/events-backend/dev/index.ts | 73 ++------- plugins/events-backend/package.json | 2 +- plugins/events-node/package.json | 4 +- .../src/generated/apis/DefaultApi.client.ts | 152 ++++++++++++++++++ .../events-node/src/generated/apis/index.ts | 17 ++ plugins/events-node/src/generated/index.ts | 18 +++ .../src/generated/models/ErrorError.model.ts | 24 +++ .../generated/models/ErrorRequest.model.ts | 24 +++ .../generated/models/ErrorResponse.model.ts | 23 +++ .../src/generated/models/Event.model.ts | 27 ++++ .../GetSubscriptionEvents200Response.model.ts | 24 +++ .../src/generated/models/ModelError.model.ts | 28 ++++ .../models/PostEventRequest.model.ts | 28 ++++ .../models/PutSubscriptionRequest.model.ts | 26 +++ .../events-node/src/generated/models/index.ts | 24 +++ plugins/events-node/src/generated/pluginId.ts | 17 ++ .../src/generated/types/discovery.ts | 22 +++ .../events-node/src/generated/types/fetch.ts | 22 +++ yarn.lock | 2 + 19 files changed, 496 insertions(+), 61 deletions(-) create mode 100644 plugins/events-node/src/generated/apis/DefaultApi.client.ts create mode 100644 plugins/events-node/src/generated/apis/index.ts create mode 100644 plugins/events-node/src/generated/index.ts create mode 100644 plugins/events-node/src/generated/models/ErrorError.model.ts create mode 100644 plugins/events-node/src/generated/models/ErrorRequest.model.ts create mode 100644 plugins/events-node/src/generated/models/ErrorResponse.model.ts create mode 100644 plugins/events-node/src/generated/models/Event.model.ts create mode 100644 plugins/events-node/src/generated/models/GetSubscriptionEvents200Response.model.ts create mode 100644 plugins/events-node/src/generated/models/ModelError.model.ts create mode 100644 plugins/events-node/src/generated/models/PostEventRequest.model.ts create mode 100644 plugins/events-node/src/generated/models/PutSubscriptionRequest.model.ts create mode 100644 plugins/events-node/src/generated/models/index.ts create mode 100644 plugins/events-node/src/generated/pluginId.ts create mode 100644 plugins/events-node/src/generated/types/discovery.ts create mode 100644 plugins/events-node/src/generated/types/fetch.ts diff --git a/plugins/events-backend/dev/index.ts b/plugins/events-backend/dev/index.ts index 752b88fb1f..9476da1d0d 100644 --- a/plugins/events-backend/dev/index.ts +++ b/plugins/events-backend/dev/index.ts @@ -21,6 +21,7 @@ import { } from '@backstage/backend-plugin-api'; import { WebSocket } from 'ws'; import { eventsServiceRef } from '@backstage/plugin-events-node'; +import { DefaultApiClient } from '../../events-node/src/generated'; const backend = createBackend(); @@ -73,6 +74,8 @@ backend.add( rootLifecycle.addStartupHook(async () => { logger.info('Started!'); + + const client = new DefaultApiClient({ discoveryApi: discovery }); const baseUrl = await discovery.getBaseUrl('events'); console.log(`DEBUG: baseUrl=`, baseUrl); const { token } = await auth.getPluginRequestToken({ @@ -80,29 +83,23 @@ backend.add( targetPluginId: 'events', }); - const subRes = await fetch(`${baseUrl}/hub/subscriptions/123`, { - method: 'PUT', - headers: { - Authorization: `Bearer ${token}`, - 'Content-Type': 'application/json', + const subRes = await client.putSubscription( + { + path: { subscriptionId: '123' }, + body: { topics: ['test'] }, }, - body: JSON.stringify({ - topics: ['test'], - }), - }); + { token }, + ); console.log( `DEBUG: sub create req = ${subRes.status} ${subRes.statusText}`, ); const poll = async () => { - const res = await fetch( - `${baseUrl}/hub/subscriptions/123/events`, + const res = await client.getSubscriptionEvents( { - headers: { - Authorization: `Bearer ${token}`, - 'Content-Type': 'application/json', - }, + path: { subscriptionId: '123' }, }, + { token }, ); const data = res.status === 200 && (await res.json()); @@ -116,52 +113,10 @@ backend.add( setTimeout(() => { console.log(`DEBUG: publishing!`); - fetch(`${baseUrl}/hub/events`, { - method: 'POST', - headers: { - Authorization: `Bearer ${token}`, - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - topic: 'test', - payload: { herp: 'derp' }, - }), + client.postEvent({ + body: { event: { topic: 'test', payload: { foo: 'bar' } } }, }); }, 500); - - const ws = new WebSocket(`${baseUrl}/hub/connect`, { - headers: { - Authorization: `Bearer ${token}`, - }, - }); - ws.onopen = () => { - console.log('DEBUG: ws.onopen'); - // ws.send( - // JSON.stringify([ - // 'req', - // 1, - // 'subscribe', - // { id: 'derp', topics: ['test'] }, - // ]), - // ); - setTimeout(() => { - console.log(`DEBUG: publish!`); - ws.send( - JSON.stringify([ - 'req', - 1, - 'publish', - { topic: 'test', payload: { foo: 'bar' } }, - ]), - ); - }, 1000); - }; - ws.onmessage = event => { - console.log(`DEBUG: client event=`, event.data); - }; - ws.onerror = event => { - console.log(`Client error`, event.error); - }; }); }, }); diff --git a/plugins/events-backend/package.json b/plugins/events-backend/package.json index 3160e6d494..aa788330ae 100644 --- a/plugins/events-backend/package.json +++ b/plugins/events-backend/package.json @@ -44,7 +44,7 @@ "scripts": { "build": "backstage-cli package build", "clean": "backstage-cli package clean", - "generate": "backstage-repo-tools package schema openapi generate --server", + "generate": "backstage-repo-tools package schema openapi generate --server --client-package plugins/events-node", "lint": "backstage-cli package lint", "prepack": "backstage-cli package prepack", "postpack": "backstage-cli package postpack", diff --git a/plugins/events-node/package.json b/plugins/events-node/package.json index 9f822c7a94..de880dc399 100644 --- a/plugins/events-node/package.json +++ b/plugins/events-node/package.json @@ -52,7 +52,9 @@ }, "dependencies": { "@backstage/backend-plugin-api": "workspace:^", - "@backstage/types": "workspace:^" + "@backstage/types": "workspace:^", + "cross-fetch": "^4.0.0", + "uri-template": "^2.0.0" }, "devDependencies": { "@backstage/backend-common": "^0.25.0", diff --git a/plugins/events-node/src/generated/apis/DefaultApi.client.ts b/plugins/events-node/src/generated/apis/DefaultApi.client.ts new file mode 100644 index 0000000000..7a2099e79a --- /dev/null +++ b/plugins/events-node/src/generated/apis/DefaultApi.client.ts @@ -0,0 +1,152 @@ +/* + * 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. + */ + +// ****************************************************************** +// * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. * +// ****************************************************************** +import { DiscoveryApi } from '../types/discovery'; +import { FetchApi } from '../types/fetch'; +import crossFetch from 'cross-fetch'; +import { pluginId } from '../pluginId'; +import * as parser from 'uri-template'; + +import { GetSubscriptionEvents200Response } from '../models/GetSubscriptionEvents200Response.model'; +import { PostEventRequest } from '../models/PostEventRequest.model'; +import { PutSubscriptionRequest } from '../models/PutSubscriptionRequest.model'; + +/** + * Wraps the Response type to convey a type on the json call. + * + * @public + */ +export type TypedResponse = Omit & { + json: () => Promise; +}; + +/** + * Options you can pass into a request for additional information. + * + * @public + */ +export interface RequestOptions { + token?: string; +} + +/** + * no description + */ +export class DefaultApiClient { + private readonly discoveryApi: DiscoveryApi; + private readonly fetchApi: FetchApi; + + constructor(options: { + discoveryApi: { getBaseUrl(pluginId: string): Promise }; + fetchApi?: { fetch: typeof fetch }; + }) { + this.discoveryApi = options.discoveryApi; + this.fetchApi = options.fetchApi || { fetch: crossFetch }; + } + + /** + * Get new events for the provided subscription + * @param subscriptionId + */ + public async getSubscriptionEvents( + // @ts-ignore + request: { + path: { + subscriptionId: string; + }; + }, + options?: RequestOptions, + ): Promise> { + const baseUrl = await this.discoveryApi.getBaseUrl(pluginId); + + const uriTemplate = `/hub/subscriptions/{subscriptionId}/events`; + + const uri = parser.parse(uriTemplate).expand({ + subscriptionId: request.path.subscriptionId, + }); + + return await this.fetchApi.fetch(`${baseUrl}${uri}`, { + headers: { + 'Content-Type': 'application/json', + ...(options?.token && { Authorization: `Bearer ${options?.token}` }), + }, + method: 'GET', + }); + } + + /** + * Publish a new event + * @param postEventRequest + */ + public async postEvent( + // @ts-ignore + request: { + body: PostEventRequest; + }, + options?: RequestOptions, + ): Promise> { + const baseUrl = await this.discoveryApi.getBaseUrl(pluginId); + + const uriTemplate = `/hub/events`; + + const uri = parser.parse(uriTemplate).expand({}); + + return await this.fetchApi.fetch(`${baseUrl}${uri}`, { + headers: { + 'Content-Type': 'application/json', + ...(options?.token && { Authorization: `Bearer ${options?.token}` }), + }, + method: 'POST', + body: JSON.stringify(request.body), + }); + } + + /** + * Ensures that the subscription exists with the provided configuration + * @param subscriptionId + * @param putSubscriptionRequest + */ + public async putSubscription( + // @ts-ignore + request: { + path: { + subscriptionId: string; + }; + body: PutSubscriptionRequest; + }, + options?: RequestOptions, + ): Promise> { + const baseUrl = await this.discoveryApi.getBaseUrl(pluginId); + + const uriTemplate = `/hub/subscriptions/{subscriptionId}`; + + const uri = parser.parse(uriTemplate).expand({ + subscriptionId: request.path.subscriptionId, + }); + + return await this.fetchApi.fetch(`${baseUrl}${uri}`, { + headers: { + 'Content-Type': 'application/json', + ...(options?.token && { Authorization: `Bearer ${options?.token}` }), + }, + method: 'PUT', + body: JSON.stringify(request.body), + }); + } +} diff --git a/plugins/events-node/src/generated/apis/index.ts b/plugins/events-node/src/generated/apis/index.ts new file mode 100644 index 0000000000..51dcca33fe --- /dev/null +++ b/plugins/events-node/src/generated/apis/index.ts @@ -0,0 +1,17 @@ +/* + * 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. + */ + +export * from './DefaultApi.client'; diff --git a/plugins/events-node/src/generated/index.ts b/plugins/events-node/src/generated/index.ts new file mode 100644 index 0000000000..bb399e97a0 --- /dev/null +++ b/plugins/events-node/src/generated/index.ts @@ -0,0 +1,18 @@ +/* + * 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. + */ + +export * from './apis'; +export * from './models'; diff --git a/plugins/events-node/src/generated/models/ErrorError.model.ts b/plugins/events-node/src/generated/models/ErrorError.model.ts new file mode 100644 index 0000000000..4bcc60b660 --- /dev/null +++ b/plugins/events-node/src/generated/models/ErrorError.model.ts @@ -0,0 +1,24 @@ +/* + * 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. + */ + +// ****************************************************************** +// * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. * +// ****************************************************************** + +export interface ErrorError { + name: string; + message: string; +} diff --git a/plugins/events-node/src/generated/models/ErrorRequest.model.ts b/plugins/events-node/src/generated/models/ErrorRequest.model.ts new file mode 100644 index 0000000000..be62627814 --- /dev/null +++ b/plugins/events-node/src/generated/models/ErrorRequest.model.ts @@ -0,0 +1,24 @@ +/* + * 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. + */ + +// ****************************************************************** +// * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. * +// ****************************************************************** + +export interface ErrorRequest { + method: string; + url: string; +} diff --git a/plugins/events-node/src/generated/models/ErrorResponse.model.ts b/plugins/events-node/src/generated/models/ErrorResponse.model.ts new file mode 100644 index 0000000000..008f8b7348 --- /dev/null +++ b/plugins/events-node/src/generated/models/ErrorResponse.model.ts @@ -0,0 +1,23 @@ +/* + * 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. + */ + +// ****************************************************************** +// * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. * +// ****************************************************************** + +export interface ErrorResponse { + statusCode: number; +} diff --git a/plugins/events-node/src/generated/models/Event.model.ts b/plugins/events-node/src/generated/models/Event.model.ts new file mode 100644 index 0000000000..b5a13b4d8d --- /dev/null +++ b/plugins/events-node/src/generated/models/Event.model.ts @@ -0,0 +1,27 @@ +/* + * 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. + */ + +// ****************************************************************** +// * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. * +// ****************************************************************** + +export interface Event { + /** + * The topic that the event is published on + */ + topic: string; + payload: { [key: string]: any }; +} diff --git a/plugins/events-node/src/generated/models/GetSubscriptionEvents200Response.model.ts b/plugins/events-node/src/generated/models/GetSubscriptionEvents200Response.model.ts new file mode 100644 index 0000000000..653bfaf3fc --- /dev/null +++ b/plugins/events-node/src/generated/models/GetSubscriptionEvents200Response.model.ts @@ -0,0 +1,24 @@ +/* + * 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. + */ + +// ****************************************************************** +// * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. * +// ****************************************************************** +import { Event } from '../models/Event.model'; + +export interface GetSubscriptionEvents200Response { + events?: Array; +} diff --git a/plugins/events-node/src/generated/models/ModelError.model.ts b/plugins/events-node/src/generated/models/ModelError.model.ts new file mode 100644 index 0000000000..88b8e76762 --- /dev/null +++ b/plugins/events-node/src/generated/models/ModelError.model.ts @@ -0,0 +1,28 @@ +/* + * 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. + */ + +// ****************************************************************** +// * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. * +// ****************************************************************** +import { ErrorError } from '../models/ErrorError.model'; +import { ErrorRequest } from '../models/ErrorRequest.model'; +import { ErrorResponse } from '../models/ErrorResponse.model'; + +export interface ModelError { + error: ErrorError; + request: ErrorRequest; + response: ErrorResponse; +} diff --git a/plugins/events-node/src/generated/models/PostEventRequest.model.ts b/plugins/events-node/src/generated/models/PostEventRequest.model.ts new file mode 100644 index 0000000000..527064bc13 --- /dev/null +++ b/plugins/events-node/src/generated/models/PostEventRequest.model.ts @@ -0,0 +1,28 @@ +/* + * 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. + */ + +// ****************************************************************** +// * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. * +// ****************************************************************** +import { Event } from '../models/Event.model'; + +export interface PostEventRequest { + event: Event; + /** + * The IDs of subscriptions that have already received this event + */ + subscriptionIds?: Array; +} diff --git a/plugins/events-node/src/generated/models/PutSubscriptionRequest.model.ts b/plugins/events-node/src/generated/models/PutSubscriptionRequest.model.ts new file mode 100644 index 0000000000..3de35e0f81 --- /dev/null +++ b/plugins/events-node/src/generated/models/PutSubscriptionRequest.model.ts @@ -0,0 +1,26 @@ +/* + * 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. + */ + +// ****************************************************************** +// * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. * +// ****************************************************************** + +export interface PutSubscriptionRequest { + /** + * The topics to subscribe to + */ + topics: Array; +} diff --git a/plugins/events-node/src/generated/models/index.ts b/plugins/events-node/src/generated/models/index.ts new file mode 100644 index 0000000000..5044f65fff --- /dev/null +++ b/plugins/events-node/src/generated/models/index.ts @@ -0,0 +1,24 @@ +/* + * 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. + */ + +export * from '../models/ErrorError.model'; +export * from '../models/ErrorRequest.model'; +export * from '../models/ErrorResponse.model'; +export * from '../models/Event.model'; +export * from '../models/GetSubscriptionEvents200Response.model'; +export * from '../models/ModelError.model'; +export * from '../models/PostEventRequest.model'; +export * from '../models/PutSubscriptionRequest.model'; diff --git a/plugins/events-node/src/generated/pluginId.ts b/plugins/events-node/src/generated/pluginId.ts new file mode 100644 index 0000000000..36b5433cc3 --- /dev/null +++ b/plugins/events-node/src/generated/pluginId.ts @@ -0,0 +1,17 @@ +/* + * 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. + */ + +export const pluginId = 'events'; diff --git a/plugins/events-node/src/generated/types/discovery.ts b/plugins/events-node/src/generated/types/discovery.ts new file mode 100644 index 0000000000..a7f87d3780 --- /dev/null +++ b/plugins/events-node/src/generated/types/discovery.ts @@ -0,0 +1,22 @@ +/* + * Copyright 2023 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. + */ + +/** + * This is a copy of the DiscoveryApi, to avoid importing core-plugin-api. + */ +export type DiscoveryApi = { + getBaseUrl(pluginId: string): Promise; +}; diff --git a/plugins/events-node/src/generated/types/fetch.ts b/plugins/events-node/src/generated/types/fetch.ts new file mode 100644 index 0000000000..3de56c028e --- /dev/null +++ b/plugins/events-node/src/generated/types/fetch.ts @@ -0,0 +1,22 @@ +/* + * Copyright 2023 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. + */ + +/** + * This is a copy of FetchApi, to avoid importing core-plugin-api. + */ +export type FetchApi = { + fetch: typeof fetch; +}; diff --git a/yarn.lock b/yarn.lock index d1024c0d96..6636108958 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6169,6 +6169,8 @@ __metadata: "@backstage/backend-test-utils": "workspace:^" "@backstage/cli": "workspace:^" "@backstage/types": "workspace:^" + cross-fetch: ^4.0.0 + uri-template: ^2.0.0 languageName: unknown linkType: soft From 3a966aff5f3d7377139ba0731009506be2a5f7bb Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Thu, 23 May 2024 09:51:15 +0200 Subject: [PATCH 026/164] events-backend: server-side implementation of local subscriber optimization Signed-off-by: Patrik Oldsberg --- plugins/events-backend/dev/index.ts | 39 +++++++++++++++++-- .../src/service/hub/EventHub.ts | 22 +++++++---- 2 files changed, 51 insertions(+), 10 deletions(-) diff --git a/plugins/events-backend/dev/index.ts b/plugins/events-backend/dev/index.ts index 9476da1d0d..47c2763a01 100644 --- a/plugins/events-backend/dev/index.ts +++ b/plugins/events-backend/dev/index.ts @@ -93,6 +93,16 @@ backend.add( console.log( `DEBUG: sub create req = ${subRes.status} ${subRes.statusText}`, ); + const subRes2 = await client.putSubscription( + { + path: { subscriptionId: 'abc' }, + body: { topics: ['test'] }, + }, + { token }, + ); + console.log( + `DEBUG: sub create req = ${subRes2.status} ${subRes2.statusText}`, + ); const poll = async () => { const res = await client.getSubscriptionEvents( @@ -111,11 +121,34 @@ backend.add( }; poll(); + const poll2 = async () => { + const res = await client.getSubscriptionEvents( + { + path: { subscriptionId: 'abc' }, + }, + { token }, + ); + + const data = res.status === 200 && (await res.json()); + console.log( + `DEBUG: sub poll2 req = ${res.status} ${res.statusText}`, + data, + ); + poll2(); + }; + poll2(); + setTimeout(() => { console.log(`DEBUG: publishing!`); - client.postEvent({ - body: { event: { topic: 'test', payload: { foo: 'bar' } } }, - }); + client.postEvent( + { + body: { + event: { topic: 'test', payload: { foo: 'bar' } }, + subscriptionIds: ['123'], + }, + }, + { token }, + ); }, 500); }); }, diff --git a/plugins/events-backend/src/service/hub/EventHub.ts b/plugins/events-backend/src/service/hub/EventHub.ts index d20401c98f..e8080ecb30 100644 --- a/plugins/events-backend/src/service/hub/EventHub.ts +++ b/plugins/events-backend/src/service/hub/EventHub.ts @@ -123,7 +123,9 @@ type EventHubStore = { const MAX_BATCH_SIZE = 5; class MemoryEventHubStore implements EventHubStore { - #events = new Array(); + #events = new Array< + EventParams & { seq: number; subscriberIds: Set } + >(); #subscribers = new Map< string, { id: string; seq: number; topics: Set } @@ -138,10 +140,11 @@ class MemoryEventHubStore implements EventHubStore { subscriberIds: string[]; }): Promise { const topicId = options.params.topic; + const subscriberIds = new Set(options.subscriberIds); let hasOtherSubscribers = false; for (const sub of this.#subscribers.values()) { - if (sub.topics.has(topicId) && !options.subscriberIds.includes(sub.id)) { + if (sub.topics.has(topicId) && !subscriberIds.has(sub.id)) { hasOtherSubscribers = true; break; } @@ -151,7 +154,7 @@ class MemoryEventHubStore implements EventHubStore { } const nextSeq = this.#getMaxSeq() + 1; - this.#events.push({ ...options.params, seq: nextSeq }); + this.#events.push({ ...options.params, subscriberIds, seq: nextSeq }); for (const listener of this.#listeners) { if (listener.topics.has(topicId)) { @@ -184,12 +187,17 @@ class MemoryEventHubStore implements EventHubStore { throw new Error(`Subscription not found`); } const events = this.#events - .filter(event => event.seq > sub.seq && sub.topics.has(event.topic)) + .filter( + event => + event.seq > sub.seq && + sub.topics.has(event.topic) && + !event.subscriberIds.has(id), + ) .slice(0, MAX_BATCH_SIZE); sub.seq = events[events.length - 1]?.seq ?? sub.seq; - return { events: events.map(event => ({ ...event, req: undefined })) }; + return { events: events.map(event => ({ ...event, seq: undefined })) }; } async listen( @@ -551,9 +559,9 @@ export class EventHub { topic: req.body.event.topic, eventPayload: req.body.event.payload, }, - subscriberIds: [], + subscriberIds: req.body.subscriptionIds ?? [], }); - this.#logger.info(`Published event to '${req.body.topic}'`, { + this.#logger.info(`Published event to '${req.body.event.topic}'`, { subject: credentials.principal.subject, }); res.status(201).end(); From aa0c6a389db08f0b2ae2e49aeb2ce3dbf8f2e1ad Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Thu, 23 May 2024 09:57:37 +0200 Subject: [PATCH 027/164] events-backend: remove hub WebSocket implementation Signed-off-by: Patrik Oldsberg --- plugins/events-backend/dev/index.ts | 1 - plugins/events-backend/package.json | 5 +- .../src/service/hub/EventHub.ts | 373 +----------------- yarn.lock | 11 +- 4 files changed, 7 insertions(+), 383 deletions(-) diff --git a/plugins/events-backend/dev/index.ts b/plugins/events-backend/dev/index.ts index 47c2763a01..1c0d38215b 100644 --- a/plugins/events-backend/dev/index.ts +++ b/plugins/events-backend/dev/index.ts @@ -19,7 +19,6 @@ import { coreServices, createBackendPlugin, } from '@backstage/backend-plugin-api'; -import { WebSocket } from 'ws'; import { eventsServiceRef } from '@backstage/plugin-events-node'; import { DefaultApiClient } from '../../events-node/src/generated'; diff --git a/plugins/events-backend/package.json b/plugins/events-backend/package.json index aa788330ae..2f9db1b081 100644 --- a/plugins/events-backend/package.json +++ b/plugins/events-backend/package.json @@ -62,10 +62,7 @@ "@types/express": "^4.17.6", "express": "^4.17.1", "express-promise-router": "^4.1.0", - "winston": "^3.2.1", - "ws": "^8.17.0", - "zod": "^3.22.4", - "zod-validation-error": "^3.3.0" + "winston": "^3.2.1" }, "devDependencies": { "@backstage/backend-defaults": "workspace:^", diff --git a/plugins/events-backend/src/service/hub/EventHub.ts b/plugins/events-backend/src/service/hub/EventHub.ts index e8080ecb30..a014bb1add 100644 --- a/plugins/events-backend/src/service/hub/EventHub.ts +++ b/plugins/events-backend/src/service/hub/EventHub.ts @@ -14,96 +14,13 @@ * limitations under the License. */ -import { - BackstageCredentials, - BackstageServicePrincipal, - HttpAuthService, - LoggerService, -} from '@backstage/backend-plugin-api'; +import { HttpAuthService, LoggerService } from '@backstage/backend-plugin-api'; import { Handler } from 'express'; import Router from 'express-promise-router'; -import { Socket } from 'net'; -import { STATUS_CODES } from 'http'; -import { WebSocketServer, type WebSocket, RawData } from 'ws'; -import { z, ZodError } from 'zod'; -import { fromZodError } from 'zod-validation-error'; -import { JsonObject, JsonValue } from '@backstage/types'; -import { serializeError } from '@backstage/errors'; import { EventParams } from '@backstage/plugin-events-node'; import { spec, createOpenApiRouter } from '../../schema/openapi.generated'; import { internal } from '@backstage/backend-openapi-utils'; -/* - -# Protocol - -## Request/Response - -General request/response format used for all communication: - --> [type: 'req', id: number, method: string, params: JsonObject] -<- [type: 'res', id: number, status: 'resolved' | 'rejected', result: JsonObject] - -## Client -> Server - -### Subscribe - --> method: 'subscribe', params: { id: string, topics: string[] } -<- result: void - -### Publish - --> method: 'publish', params: { topic: string, payload: JsonObject } -<- result: void - -## Server -> Client - -### Event - --> method: 'event', params: { topic: string, payload: JsonObject } -<- result: void - -*/ - -const messageSchema = z.union([ - z.tuple([ - z.literal('req'), - z.number().int().gt(0), - z.string().min(1), - z.any(), - ]), - z.tuple([ - z.literal('res'), - z.number().int().gt(0), - z.enum(['resolved', 'rejected']), - z.any(), - ]), -]); -const subscribeParamsSchema = z.object({ - id: z.string().min(1), - topics: z.array(z.string().min(1)), -}); -const publishParamsSchema = z.object({ - topic: z.string().min(1), - payload: z.any(), -}); -const eventParamsSchema = z.object({ - events: z.array( - z.object({ - topic: z.string().min(1), - payload: z.any(), - metadata: z.any().optional(), - }), - ), -}); - -function errorToJson(error: Error): JsonObject { - if (error.name === 'ZodError') { - return serializeError(fromZodError(error as ZodError)); - } - return serializeError(error); -} - type EventHubStore = { publish(options: { params: EventParams; @@ -216,174 +133,6 @@ class MemoryEventHubStore implements EventHubStore { } } -/** - * Manages a single WebSocket connection. - * - * @internal - */ -class EventClientConnection { - static create(options: { - ws: WebSocket; - socket: Socket; - logger: LoggerService; - credentials: BackstageCredentials; - }) { - const { ws, credentials } = options; - - const id = Math.random().toString(36).slice(2, 10); - const logger = options.logger.child({ - connection: id, - subject: credentials.principal.subject, - }); - - const conn = new EventClientConnection(id, ws, logger, credentials); - - ws.addListener('close', conn.#handleClose); - ws.addListener('error', conn.#handleError); - ws.addListener('message', conn.#handleMessage); - - logger.info( - `New event client connection from '${options.socket.remoteAddress}'`, - ); - - return conn; - } - - readonly #id: string; - readonly #ws: WebSocket; - readonly #logger: LoggerService; - readonly #credentials: BackstageCredentials; - - #seq = 1; - readonly #pendingRequests = new Map< - number, - { resolve(result: unknown): void; reject(error: unknown): void } - >(); - readonly #requestHandlers = new Map< - string, - { - schema: z.ZodType; - handler: (params: any) => unknown; - } - >(); - - constructor( - id: string, - ws: WebSocket, - logger: LoggerService, - credentials: BackstageCredentials, - ) { - this.#id = id; - this.#ws = ws; - this.#logger = logger; - this.#credentials = credentials; - } - - get id() { - return this.#id; - } - - #handleClose = (code: number, reason: Buffer) => { - this.#removeListeners(); - this.#logger.info(`Remote closed code=${code} reason=${reason}`); - }; - - #handleError = (error: Error) => { - this.#removeListeners(); - this.#logger.error(`WebSocket error`, error); - }; - - #handleMessage = (rawData: RawData, isBinary: boolean) => { - if (isBinary) { - return; - } - try { - const data = Array.isArray(rawData) - ? Buffer.concat(rawData) - : Buffer.from(rawData); - const message = messageSchema.parse(JSON.parse(data.toString('utf8'))); - - if (message[0] === 'req') { - const [, seq, method, params] = message; - const handler = this.#requestHandlers.get(method); - if (!handler) { - throw new Error(`Unknown method '${method}'`); - } - - try { - const parsedParams = handler.schema.parse(params); - - Promise.resolve(handler.handler(parsedParams)).then( - result => { - this.#sendMessage('res', seq, 'resolved', result ?? null); - }, - error => { - this.#sendMessage('res', seq, 'rejected', errorToJson(error)); - }, - ); - } catch (error) { - this.#sendMessage('res', seq, false, errorToJson(error)); - } - } else if (message[0] === 'res') { - const [, seq, success, result] = message; - const pendingRequest = this.#pendingRequests.get(seq); - if (!pendingRequest) { - throw new Error(`Received response for unknown request seq=${seq}`); - } - this.#pendingRequests.delete(seq); - if (success) { - pendingRequest.resolve(result); - } else { - pendingRequest.reject(result); - } - } - } catch (error) { - this.#logger.error('Invalid message received', error); - } - }; - - addRequestHandler( - method: string, - schema: z.ZodType, - handler: (params: TParams) => unknown, - ) { - this.#requestHandlers.set(method, { schema, handler }); - } - - async request( - method: string, - params: TReq, - ): Promise { - return new Promise((resolve, reject) => { - const seq = this.#seq++; - this.#pendingRequests.set(seq, { resolve, reject }); - this.#sendMessage('req', seq, method, params); - }); - } - - #sendMessage(...message: JsonValue[]) { - this.#ws.send(JSON.stringify(message)); - } - - close() { - this.#removeListeners(); - this.#ws.close(); - this.#logger.info(`Closed connection`); - } - - #removeListeners() { - this.#ws.removeListener('close', this.#handleClose); - this.#ws.removeListener('error', this.#handleError); - this.#ws.removeListener('message', this.#handleMessage); - } - - toString() { - return `eventClientConnection{id=${this.#id},subject=${ - this.#credentials.principal.subject - }}`; - } -} - export class EventHub { static async create(options: { logger: LoggerService; @@ -393,19 +142,7 @@ export class EventHub { const logger = options.logger.child({ type: 'EventHub' }); const router = Router(); - const server = new WebSocketServer({ - noServer: true, - clientTracking: false, - }); - - server.on('error', error => { - logger.error(`WebSocket server error`, error); - }); - - const hub = new EventHub(server, router, logger, httpAuth); - - // WS - router.get('/hub/connect', hub.#handleGetConnect); + const hub = new EventHub(router, logger, httpAuth); const apiRouter = await createOpenApiRouter(); @@ -426,21 +163,16 @@ export class EventHub { return hub; } - readonly #server: WebSocketServer; readonly #handler: Handler; readonly #logger: LoggerService; readonly #httpAuth: HttpAuthService; readonly #store: EventHubStore; - #connections = new Map(); - private constructor( - server: WebSocketServer, handler: Handler, logger: LoggerService, httpAuth: HttpAuthService, ) { - this.#server = server; this.#handler = handler; this.#logger = logger; this.#httpAuth = httpAuth; @@ -451,101 +183,6 @@ export class EventHub { return this.#handler; } - #handleGetConnect: Handler = async (req, _res) => { - try { - const credentials = await this.#httpAuth.credentials(req, { - allow: ['service'], - }); - - this.#server.handleUpgrade( - req, - req.socket, - Buffer.alloc(0), - (ws, { socket }) => { - const conn = EventClientConnection.create({ - ws, - socket, - logger: this.#logger, - credentials, - }); - conn.addRequestHandler( - 'subscribe', - subscribeParamsSchema, - async params => { - await this.#store.upsertSubscription(params.id, params.topics); - - this.#logger.info( - `New subscription '${params.id}' topics='${params.topics.join( - "', '", - )}'`, - ); - - const read = () => - this.#store.readSubscription(params.id).then( - ({ events }) => { - if (events.length > 0) { - conn - .request, void>( - 'events', - { events }, - ) - .catch(error => { - this.#logger.error( - `Failed to send events to subscription ${params.id}`, - error, - ); - }); - } - }, - error => { - this.#logger.error( - `Failed to read subscription ${params.id}`, - error, - ); - }, - ); - - const removeListener = await this.#store.listen(params.id, read); - ws.addListener('close', removeListener); - - await read(); - }, - ); - conn.addRequestHandler( - 'publish', - publishParamsSchema, - async params => { - await this.#store.publish({ - params: { - topic: params.topic, - eventPayload: params.payload, - }, - subscriberIds: [], - }); - this.#logger.info(`Published event to '${params.topic}'`); - }, - ); - this.#connections.set(conn.id, conn); - }, - ); - } catch (error) { - let status = 500; - if (error.name === 'AuthenticationError') { - status = 401; - } else if (error.name === 'NotAllowedError') { - status = 403; - } - req.socket.write( - `HTTP/1.1 ${status} ${STATUS_CODES[status]}\r\n` + - 'Upgrade: WebSocket\r\n' + - 'Connection: Upgrade\r\n' + - '\r\n', - ); - req.socket.destroy(); - this.#logger.info('WebSocket upgrade failed', error); - } - }; - #handlePostEvents: internal.DocRequestHandler< typeof spec, '/hub/events', @@ -613,10 +250,4 @@ export class EventHub { res.status(201).end(); }; - - close() { - this.#connections.forEach(conn => conn.close()); - this.#connections.clear(); - this.#server.close(); - } } diff --git a/yarn.lock b/yarn.lock index 6636108958..2aeb54be7f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6154,9 +6154,6 @@ __metadata: express-promise-router: ^4.1.0 supertest: ^7.0.0 winston: ^3.2.1 - ws: ^8.17.0 - zod: ^3.22.4 - zod-validation-error: ^3.3.0 languageName: unknown linkType: soft @@ -44671,12 +44668,12 @@ __metadata: languageName: node linkType: hard -"zod-validation-error@npm:^3.0.3, zod-validation-error@npm:^3.3.0": - version: 3.3.0 - resolution: "zod-validation-error@npm:3.3.0" +"zod-validation-error@npm:^3.0.3": + version: 3.1.0 + resolution: "zod-validation-error@npm:3.1.0" peerDependencies: zod: ^3.18.0 - checksum: cbf81ecd27df675d72883b69833565af787302e70ad970ae4a5dab84e1cb8739cedf094b35f7f4b78307adaadb7cab0c0a8f7debeb6516e3fee998a3d4e13422 + checksum: 84df01c91d594701eaf7f5f007be881e47f7adef2e3f3765f7be031cb78033f9be0924273106cb81b586d8020da9885dbb81b3da363f00a51df00f26274f2b23 languageName: node linkType: hard From d32c8ff2e3e31ee592d9559034ca236f105d0926 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Thu, 23 May 2024 10:14:14 +0200 Subject: [PATCH 028/164] events-backend: split EventHub module Signed-off-by: Patrik Oldsberg --- .../src/service/hub/EventHub.ts | 124 ++---------------- .../src/service/hub/MemoryEventHubStore.ts | 113 ++++++++++++++++ .../events-backend/src/service/hub/types.ts | 33 +++++ 3 files changed, 154 insertions(+), 116 deletions(-) create mode 100644 plugins/events-backend/src/service/hub/MemoryEventHubStore.ts create mode 100644 plugins/events-backend/src/service/hub/types.ts diff --git a/plugins/events-backend/src/service/hub/EventHub.ts b/plugins/events-backend/src/service/hub/EventHub.ts index a014bb1add..594713da17 100644 --- a/plugins/events-backend/src/service/hub/EventHub.ts +++ b/plugins/events-backend/src/service/hub/EventHub.ts @@ -17,121 +17,11 @@ import { HttpAuthService, LoggerService } from '@backstage/backend-plugin-api'; import { Handler } from 'express'; import Router from 'express-promise-router'; -import { EventParams } from '@backstage/plugin-events-node'; import { spec, createOpenApiRouter } from '../../schema/openapi.generated'; import { internal } from '@backstage/backend-openapi-utils'; - -type EventHubStore = { - publish(options: { - params: EventParams; - subscriberIds: string[]; - }): Promise; - - upsertSubscription(id: string, topics: string[]): Promise; - - readSubscription(id: string): Promise<{ events: EventParams[] }>; - - listen( - subscriptionId: string, - onNotify: (topicId: string) => void, - ): Promise<() => void>; -}; - -const MAX_BATCH_SIZE = 5; - -class MemoryEventHubStore implements EventHubStore { - #events = new Array< - EventParams & { seq: number; subscriberIds: Set } - >(); - #subscribers = new Map< - string, - { id: string; seq: number; topics: Set } - >(); - #listeners = new Set<{ - topics: Set; - notify(topicId: string): void; - }>(); - - async publish(options: { - params: EventParams; - subscriberIds: string[]; - }): Promise { - const topicId = options.params.topic; - const subscriberIds = new Set(options.subscriberIds); - - let hasOtherSubscribers = false; - for (const sub of this.#subscribers.values()) { - if (sub.topics.has(topicId) && !subscriberIds.has(sub.id)) { - hasOtherSubscribers = true; - break; - } - } - if (!hasOtherSubscribers) { - return; - } - - const nextSeq = this.#getMaxSeq() + 1; - this.#events.push({ ...options.params, subscriberIds, seq: nextSeq }); - - for (const listener of this.#listeners) { - if (listener.topics.has(topicId)) { - listener.notify(topicId); - } - } - } - - #getMaxSeq() { - return this.#events[this.#events.length - 1]?.seq ?? 0; - } - - async upsertSubscription(id: string, topics: string[]): Promise { - const existing = this.#subscribers.get(id); - if (existing) { - existing.topics = new Set(topics); - return; - } - const sub = { - id: id, - seq: this.#getMaxSeq(), - topics: new Set(topics), - }; - this.#subscribers.set(id, sub); - } - - async readSubscription(id: string): Promise<{ events: EventParams[] }> { - const sub = this.#subscribers.get(id); - if (!sub) { - throw new Error(`Subscription not found`); - } - const events = this.#events - .filter( - event => - event.seq > sub.seq && - sub.topics.has(event.topic) && - !event.subscriberIds.has(id), - ) - .slice(0, MAX_BATCH_SIZE); - - sub.seq = events[events.length - 1]?.seq ?? sub.seq; - - return { events: events.map(event => ({ ...event, seq: undefined })) }; - } - - async listen( - subscriptionId: string, - onNotify: (topicId: string) => void, - ): Promise<() => void> { - const sub = this.#subscribers.get(subscriptionId); - if (!sub) { - throw new Error(`Subscription not found`); - } - const listener = { topics: sub.topics, notify: onNotify }; - this.#listeners.add(listener); - return () => { - this.#listeners.delete(listener); - }; - } -} +import { MemoryEventHubStore } from './MemoryEventHubStore'; +import { EventHubStore } from './types'; +import { EventParams } from '@backstage/plugin-events-node'; export class EventHub { static async create(options: { @@ -141,8 +31,9 @@ export class EventHub { const { httpAuth } = options; const logger = options.logger.child({ type: 'EventHub' }); const router = Router(); + const store = new MemoryEventHubStore(); - const hub = new EventHub(router, logger, httpAuth); + const hub = new EventHub(router, logger, httpAuth, store); const apiRouter = await createOpenApiRouter(); @@ -172,11 +63,12 @@ export class EventHub { handler: Handler, logger: LoggerService, httpAuth: HttpAuthService, + store: EventHubStore, ) { this.#handler = handler; this.#logger = logger; this.#httpAuth = httpAuth; - this.#store = new MemoryEventHubStore(); + this.#store = store; } handler(): Handler { @@ -195,7 +87,7 @@ export class EventHub { params: { topic: req.body.event.topic, eventPayload: req.body.event.payload, - }, + } as EventParams, subscriberIds: req.body.subscriptionIds ?? [], }); this.#logger.info(`Published event to '${req.body.event.topic}'`, { diff --git a/plugins/events-backend/src/service/hub/MemoryEventHubStore.ts b/plugins/events-backend/src/service/hub/MemoryEventHubStore.ts new file mode 100644 index 0000000000..7ab5b98f82 --- /dev/null +++ b/plugins/events-backend/src/service/hub/MemoryEventHubStore.ts @@ -0,0 +1,113 @@ +/* + * 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 { EventParams } from '@backstage/plugin-events-node'; +import { EventHubStore } from './types'; + +const MAX_BATCH_SIZE = 5; + +export class MemoryEventHubStore implements EventHubStore { + #events = new Array< + EventParams & { seq: number; subscriberIds: Set } + >(); + #subscribers = new Map< + string, + { id: string; seq: number; topics: Set } + >(); + #listeners = new Set<{ + topics: Set; + notify(topicId: string): void; + }>(); + + async publish(options: { + params: EventParams; + subscriberIds: string[]; + }): Promise { + const topicId = options.params.topic; + const subscriberIds = new Set(options.subscriberIds); + + let hasOtherSubscribers = false; + for (const sub of this.#subscribers.values()) { + if (sub.topics.has(topicId) && !subscriberIds.has(sub.id)) { + hasOtherSubscribers = true; + break; + } + } + if (!hasOtherSubscribers) { + return; + } + + const nextSeq = this.#getMaxSeq() + 1; + this.#events.push({ ...options.params, subscriberIds, seq: nextSeq }); + + for (const listener of this.#listeners) { + if (listener.topics.has(topicId)) { + listener.notify(topicId); + } + } + } + + #getMaxSeq() { + return this.#events[this.#events.length - 1]?.seq ?? 0; + } + + async upsertSubscription(id: string, topics: string[]): Promise { + const existing = this.#subscribers.get(id); + if (existing) { + existing.topics = new Set(topics); + return; + } + const sub = { + id: id, + seq: this.#getMaxSeq(), + topics: new Set(topics), + }; + this.#subscribers.set(id, sub); + } + + async readSubscription(id: string): Promise<{ events: EventParams[] }> { + const sub = this.#subscribers.get(id); + if (!sub) { + throw new Error(`Subscription not found`); + } + const events = this.#events + .filter( + event => + event.seq > sub.seq && + sub.topics.has(event.topic) && + !event.subscriberIds.has(id), + ) + .slice(0, MAX_BATCH_SIZE); + + sub.seq = events[events.length - 1]?.seq ?? sub.seq; + + return { events: events.map(event => ({ ...event, seq: undefined })) }; + } + + async listen( + subscriptionId: string, + onNotify: (topicId: string) => void, + ): Promise<() => void> { + const sub = this.#subscribers.get(subscriptionId); + if (!sub) { + throw new Error(`Subscription not found`); + } + const listener = { topics: sub.topics, notify: onNotify }; + this.#listeners.add(listener); + return () => { + this.#listeners.delete(listener); + }; + } +} diff --git a/plugins/events-backend/src/service/hub/types.ts b/plugins/events-backend/src/service/hub/types.ts new file mode 100644 index 0000000000..8e1124252a --- /dev/null +++ b/plugins/events-backend/src/service/hub/types.ts @@ -0,0 +1,33 @@ +/* + * 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 { EventParams } from '@backstage/plugin-events-node'; + +export type EventHubStore = { + publish(options: { + params: EventParams; + subscriberIds: string[]; + }): Promise; + + upsertSubscription(id: string, topics: string[]): Promise; + + readSubscription(id: string): Promise<{ events: EventParams[] }>; + + listen( + subscriptionId: string, + onNotify: (topicId: string) => void, + ): Promise<() => void>; +}; From 93cb484bcd81ebd207063420af2305942fc1235e Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 24 May 2024 00:48:53 +0200 Subject: [PATCH 029/164] events-backend: added initial DB events store Signed-off-by: Patrik Oldsberg --- .../migrations/20240523100528_init.js | 87 ++++++++ plugins/events-backend/package.json | 4 +- .../src/service/EventsPlugin.ts | 5 +- .../src/service/hub/DatabaseEventHubStore.ts | 202 ++++++++++++++++++ .../src/service/hub/EventHub.ts | 26 ++- .../events-backend/src/service/hub/types.ts | 2 +- yarn.lock | 1 + 7 files changed, 316 insertions(+), 11 deletions(-) create mode 100644 plugins/events-backend/migrations/20240523100528_init.js create mode 100644 plugins/events-backend/src/service/hub/DatabaseEventHubStore.ts diff --git a/plugins/events-backend/migrations/20240523100528_init.js b/plugins/events-backend/migrations/20240523100528_init.js new file mode 100644 index 0000000000..90cdb770a5 --- /dev/null +++ b/plugins/events-backend/migrations/20240523100528_init.js @@ -0,0 +1,87 @@ +/* + * 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. + */ + +// @ts-check + +/** + * @param { import("knex").Knex } knex + * @returns { Promise } + */ +exports.up = async function up(knex) { + // The event bus only supports PostgresSQL + if (knex.client.config.client === 'pg') { + await knex.schema.createTable('event_bus_events', table => { + table.comment('Events published to the events bus'); + table + .bigIncrements('id') + .primary() + .comment('The unique ID of this event'); + table + .dateTime('created_at') + .defaultTo(knex.fn.now()) + .notNullable() + .comment('The time that the event was created'); + table.text('topic').notNullable().comment('The topic of the event'); + table + .text('data_json') + .notNullable() + .comment('The payload data of this event'); + table + .specificType('consumed_by', 'text ARRAY') + .comment( + 'The IDs of the subscribers that have already consumed this event', + ); + }); + + await knex.schema.createTable('event_bus_subscriptions', table => { + table.comment('Subscriptions to the event bus'); + table + .string('id') + .primary() + .notNullable() + .comment('The unique ID of this particular subscription'); + table + .dateTime('created_at') + .defaultTo(knex.fn.now()) + .notNullable() + .comment('The time that the subscription was created'); + table + .dateTime('updated_at') + .defaultTo(knex.fn.now()) + .notNullable() + .comment('The time that the subscription was last updated'); + table + .bigInteger('read_until') + .notNullable() + .comment( + 'The sequence counter until which the subscription has read events', + ); + table + .specificType('topics', 'text ARRAY') + .comment('The topics that this subscriber is interested in'); + }); + } +}; + +/** + * @param { import("knex").Knex } knex + * @returns { Promise } + */ +exports.down = async function down(knex) { + if (knex.client.config.client === 'pg') { + await knex.schema.dropTable('events'); + } +}; diff --git a/plugins/events-backend/package.json b/plugins/events-backend/package.json index 2f9db1b081..f7a5ecc0c2 100644 --- a/plugins/events-backend/package.json +++ b/plugins/events-backend/package.json @@ -39,7 +39,8 @@ }, "files": [ "config.d.ts", - "dist" + "dist", + "migrations" ], "scripts": { "build": "backstage-cli package build", @@ -62,6 +63,7 @@ "@types/express": "^4.17.6", "express": "^4.17.1", "express-promise-router": "^4.1.0", + "knex": "^3.0.0", "winston": "^3.2.1" }, "devDependencies": { diff --git a/plugins/events-backend/src/service/EventsPlugin.ts b/plugins/events-backend/src/service/EventsPlugin.ts index b7892a5079..089ea928bc 100644 --- a/plugins/events-backend/src/service/EventsPlugin.ts +++ b/plugins/events-backend/src/service/EventsPlugin.ts @@ -75,11 +75,12 @@ export const eventsPlugin = createBackendPlugin({ deps: { config: coreServices.rootConfig, events: eventsServiceRef, + database: coreServices.database, logger: coreServices.logger, httpAuth: coreServices.httpAuth, router: coreServices.httpRouter, }, - async init({ config, events, logger, httpAuth, router }) { + async init({ config, events, database, logger, httpAuth, router }) { const ingresses = Object.fromEntries( extensionPoint.httpPostIngresses.map(ingress => [ ingress.topic, @@ -96,7 +97,7 @@ export const eventsPlugin = createBackendPlugin({ const eventsRouter = Router(); http.bind(eventsRouter); - const hub = await EventHub.create({ logger, httpAuth }); + const hub = await EventHub.create({ database, logger, httpAuth }); router.use(hub.handler()); router.use(eventsRouter); diff --git a/plugins/events-backend/src/service/hub/DatabaseEventHubStore.ts b/plugins/events-backend/src/service/hub/DatabaseEventHubStore.ts new file mode 100644 index 0000000000..646812482d --- /dev/null +++ b/plugins/events-backend/src/service/hub/DatabaseEventHubStore.ts @@ -0,0 +1,202 @@ +/* + * 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 { EventParams } from '@backstage/plugin-events-node'; +import { EventHubStore } from './types'; +import { Knex } from 'knex'; +import { + DatabaseService, + LoggerService, + resolvePackagePath, +} from '@backstage/backend-plugin-api'; + +const MAX_BATCH_SIZE = 10; + +const TABLE_EVENTS = 'event_bus_events'; +const TABLE_SUBSCRIPTIONS = 'event_bus_subscriptions'; + +type EventsRow = { + id: string; + created_at: Date; + topic: string; + data_json: string; + consumed_by: string[]; +}; + +type SubscriptionsRow = { + id: string; + created_at: Date; + updated_at: Date; + read_until: string; + topics: string[]; +}; + +const migrationsDir = resolvePackagePath( + '@backstage/plugin-events-backend', + 'migrations', +); + +export class DatabaseEventHubStore implements EventHubStore { + static async create(options: { + database: DatabaseService; + logger: LoggerService; + }): Promise { + const db = await options.database.getClient(); + + if (db.client.config.client !== 'pg') { + throw new Error( + `DatabaseEventHubStore only supports PostgreSQL, got '${db.client.config.client}'`, + ); + } + + if (!options.database.migrations?.skip) { + await db.migrate.latest({ + directory: migrationsDir, + }); + options.logger.info('DatabaseEventHubStore migrations ran successfully'); + } + + return new DatabaseEventHubStore(db); + } + + readonly #db: Knex; + + private constructor(db: Knex) { + this.#db = db; + } + + async publish(options: { + params: EventParams; + subscriberIds: string[]; + }): Promise<{ id: string }> { + const result = await this.#db(TABLE_EVENTS) + .insert({ + topic: options.params.topic, + data_json: JSON.stringify({ + payload: options.params.eventPayload, + metadata: options.params.metadata, + }), + consumed_by: options.subscriberIds, + }) + .returning('id'); + + if (result.length !== 1) { + throw new Error(`Failed to insert event, updated ${result.length} rows`); + } + + const { id } = result[0]; + + // TODO: notify + + return { id }; + } + + async upsertSubscription(id: string, topics: string[]): Promise { + const result = await this.#db(TABLE_SUBSCRIPTIONS) + .insert({ + id, + updated_at: this.#db.fn.now(), + topics, + read_until: this.#db(TABLE_EVENTS).max('id') as any, // TODO: figure out TS, + }) + .onConflict('id') + .merge(['topics', 'updated_at']) + .returning('*'); + + if (result.length !== 1) { + throw new Error( + `Failed to upsert subscription, updated ${result.length} rows`, + ); + } + } + + async readSubscription(id: string): Promise<{ events: EventParams[] }> { + const result = await this.#db(TABLE_SUBSCRIPTIONS) + // Read the target subscription so that we can use the read marker and topics + .with('sub', q => q.select().from(TABLE_SUBSCRIPTIONS).where({ id })) + // Read the next batch of events for the subscription from its read marker + .with('events', q => + q + .select('event.*') + .from({ event: 'event_bus_events', sub: 'sub' }) + // For each event, check if it matches any of the topics that we're subscribed to + .where( + 'event.topic', + '=', + this.#db.ref('topics').withSchema('sub').wrap('ANY(', ')'), + ) + // Skip events that have already been consumed by this subscription + .where( + this.#db.raw('?', id), + '<>', + this.#db.ref('consumed_by').withSchema('event').wrap('ANY(', ')'), + ) + .where('event.id', '>', this.#db.ref('read_until').withSchema('sub')) + .orderBy('event.id', 'asc') + .limit(MAX_BATCH_SIZE), + ) + // Find the ID of the last event in the batch, for use as the new read_until marker + .with('last_event_id', q => q.max({ last_event_id: 'id' }).from('events')) + // Aggregate the events into a JSON array so that we can return all of them with the UPDATE + .with('events_array', q => + q + .select({ events: this.#db.raw('json_agg(row_to_json(events))') }) + .from('events'), + ) + // Update the read_until marker to the ID of the last event, or if no + // events where read, the last ID out of all events + .update({ + read_until: this.#db.raw( + 'COALESCE(last_event_id, (SELECT MAX(id) FROM event_bus_events))', + ), + }) + .updateFrom({ + events_array: 'events_array', + last_event_id: 'last_event_id', + }) + .where(`${TABLE_SUBSCRIPTIONS}.id`, id) + .returning<[{ events: EventsRow[] }]>('events_array.events'); + + if (result.length !== 1) { + throw new Error( + `Failed to upsert subscription, updated ${result.length} rows`, + ); + } + + const rows = result[0].events; + if (!rows || rows.length === 0) { + return { events: [] }; + } + + return { + events: result[0].events.map(row => { + const { payload, metadata } = JSON.parse(row.data_json); + return { + topic: row.topic, + eventPayload: payload, + metadata, + }; + }), + }; + } + + async listen( + _subscriptionId: string, + _onNotify: (topicId: string) => void, + ): Promise<() => void> { + // TODO + return () => {}; + } +} diff --git a/plugins/events-backend/src/service/hub/EventHub.ts b/plugins/events-backend/src/service/hub/EventHub.ts index 594713da17..c78a8359ef 100644 --- a/plugins/events-backend/src/service/hub/EventHub.ts +++ b/plugins/events-backend/src/service/hub/EventHub.ts @@ -14,24 +14,33 @@ * limitations under the License. */ -import { HttpAuthService, LoggerService } from '@backstage/backend-plugin-api'; +import { + DatabaseService, + HttpAuthService, + LoggerService, +} from '@backstage/backend-plugin-api'; import { Handler } from 'express'; import Router from 'express-promise-router'; import { spec, createOpenApiRouter } from '../../schema/openapi.generated'; import { internal } from '@backstage/backend-openapi-utils'; import { MemoryEventHubStore } from './MemoryEventHubStore'; +import { DatabaseEventHubStore } from './DatabaseEventHubStore'; import { EventHubStore } from './types'; import { EventParams } from '@backstage/plugin-events-node'; export class EventHub { static async create(options: { logger: LoggerService; + database: DatabaseService; httpAuth: HttpAuthService; }) { - const { httpAuth } = options; + const { database, httpAuth } = options; const logger = options.logger.child({ type: 'EventHub' }); const router = Router(); - const store = new MemoryEventHubStore(); + const store = await DatabaseEventHubStore.create({ + database, + logger, + }); const hub = new EventHub(router, logger, httpAuth, store); @@ -83,16 +92,19 @@ export class EventHub { const credentials = await this.#httpAuth.credentials(req, { allow: ['service'], }); - await this.#store.publish({ + const { id } = await this.#store.publish({ params: { topic: req.body.event.topic, eventPayload: req.body.event.payload, } as EventParams, subscriberIds: req.body.subscriptionIds ?? [], }); - this.#logger.info(`Published event to '${req.body.event.topic}'`, { - subject: credentials.principal.subject, - }); + this.#logger.info( + `Published event to '${req.body.event.topic}' with ID '${id}'`, + { + subject: credentials.principal.subject, + }, + ); res.status(201).end(); }; diff --git a/plugins/events-backend/src/service/hub/types.ts b/plugins/events-backend/src/service/hub/types.ts index 8e1124252a..8adedc69c7 100644 --- a/plugins/events-backend/src/service/hub/types.ts +++ b/plugins/events-backend/src/service/hub/types.ts @@ -20,7 +20,7 @@ export type EventHubStore = { publish(options: { params: EventParams; subscriberIds: string[]; - }): Promise; + }): Promise<{ id: string }>; upsertSubscription(id: string, topics: string[]): Promise; diff --git a/yarn.lock b/yarn.lock index 2aeb54be7f..306e96a2c8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6152,6 +6152,7 @@ __metadata: "@types/express": ^4.17.6 express: ^4.17.1 express-promise-router: ^4.1.0 + knex: ^3.0.0 supertest: ^7.0.0 winston: ^3.2.1 languageName: unknown From e00c64fcb9a218c12a63a8c4888ccf3585f83261 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 24 May 2024 11:48:46 +0200 Subject: [PATCH 030/164] events-backend: added listen and notify for db events store Signed-off-by: Patrik Oldsberg --- .../src/service/hub/DatabaseEventHubStore.ts | 184 +++++++++++++++++- 1 file changed, 174 insertions(+), 10 deletions(-) diff --git a/plugins/events-backend/src/service/hub/DatabaseEventHubStore.ts b/plugins/events-backend/src/service/hub/DatabaseEventHubStore.ts index 646812482d..e5e1334191 100644 --- a/plugins/events-backend/src/service/hub/DatabaseEventHubStore.ts +++ b/plugins/events-backend/src/service/hub/DatabaseEventHubStore.ts @@ -21,11 +21,14 @@ import { LoggerService, resolvePackagePath, } from '@backstage/backend-plugin-api'; +import { NotFoundError } from '@backstage/errors'; const MAX_BATCH_SIZE = 10; +const LISTENER_CONNECTION_TIMEOUT_MS = 10_000; const TABLE_EVENTS = 'event_bus_events'; const TABLE_SUBSCRIPTIONS = 'event_bus_subscriptions'; +const TOPIC_PUBLISH = 'event_bus_publish'; type EventsRow = { id: string; @@ -48,6 +51,142 @@ const migrationsDir = resolvePackagePath( 'migrations', ); +interface InternalDbClient { + acquireRawConnection(): Promise; + destroyRawConnection(conn: InternalDbConnection): Promise; +} + +interface InternalDbConnection { + query(sql: string): Promise; + end(): Promise; + on( + event: 'notification', + listener: (event: { channel: string; payload: string }) => void, + ): void; + on(event: 'error', listener: (error: Error) => void): void; + on(event: 'end', listener: (error?: Error) => void): void; + removeAllListeners(): void; +} + +// This internal class manages a single connection to the database that all listeners share +class DatabaseEventHubListener { + readonly #client: InternalDbClient; + readonly #logger: LoggerService; + + readonly #listeners = new Set<{ + topics: Set; + onNotify: (topicId: string) => void; + onError: () => void; + }>(); + + #connPromise?: Promise; + #connTimeout?: NodeJS.Timeout; + + constructor(client: InternalDbClient, logger: LoggerService) { + this.#client = client; + this.#logger = logger.child({ type: 'DatabaseEventHubListener' }); + } + + async listen( + topics: Set, + onNotify: (topicId: string) => void, + onError: () => void, + ): Promise<() => void> { + if (this.#connTimeout) { + clearTimeout(this.#connTimeout); + this.#connTimeout = undefined; + } + await this.#ensureConnection(); + + const listener = { topics, onNotify, onError }; + this.#listeners.add(listener); + + return () => { + this.#listeners.delete(listener); + + // We don't use any heartbeats for the connection, as clients will be + // driving that for us. We do however need to make sure we don't sit + // idle for too long without any listeners + if (this.#listeners.size === 0) { + this.#connTimeout = setTimeout(() => { + this.#connPromise?.then(conn => { + this.#logger.info('Listener connection timed out'); + this.#connPromise = undefined; + this.#destroyConnection(conn); + }); + }, LISTENER_CONNECTION_TIMEOUT_MS); + } + }; + } + + #handleNotify(topic: string) { + this.#logger.info(`Listener received notification for topic '${topic}'`); + for (const l of this.#listeners) { + if (l.topics.has(topic)) { + l.onNotify(topic); + } + } + } + + // We don't try to reconnect on error, instead we notify all listeners and let them try to establish a new connection + #handleError(error: Error) { + this.#logger.error( + `Listener connection failed, notifying all listeners`, + error, + ); + for (const l of this.#listeners) { + l.onError(); + } + } + + #destroyConnection(conn: InternalDbConnection) { + this.#client.destroyRawConnection(conn).catch(error => { + this.#logger.error(`Listener failed to destroy connection`, error); + }); + conn.removeAllListeners(); + } + + async #ensureConnection() { + if (this.#connPromise) { + await this.#connPromise; + return; + } + this.#connPromise = Promise.resolve().then(async () => { + const conn = await this.#client.acquireRawConnection(); + + try { + await conn.query(`LISTEN ${TOPIC_PUBLISH}`); + + conn.on('notification', event => { + this.#handleNotify(event.payload); + }); + conn.on('error', error => { + this.#connPromise = undefined; + this.#destroyConnection(conn); + this.#handleError(error); + }); + conn.on('end', error => { + this.#connPromise = undefined; + this.#destroyConnection(conn); + this.#handleError( + error ?? new Error('Connection ended unexpectedly'), + ); + }); + return conn; + } catch (error) { + this.#destroyConnection(conn); + throw error; + } + }); + try { + await this.#connPromise; + } catch (error) { + this.#connPromise = undefined; + throw error; + } + } +} + export class DatabaseEventHubStore implements EventHubStore { static async create(options: { database: DatabaseService; @@ -68,22 +207,27 @@ export class DatabaseEventHubStore implements EventHubStore { options.logger.info('DatabaseEventHubStore migrations ran successfully'); } - return new DatabaseEventHubStore(db); + return new DatabaseEventHubStore(db, options.logger); } readonly #db: Knex; + readonly #logger: LoggerService; + readonly #listener: DatabaseEventHubListener; - private constructor(db: Knex) { + private constructor(db: Knex, logger: LoggerService) { this.#db = db; + this.#logger = logger; + this.#listener = new DatabaseEventHubListener(db.client, logger); } async publish(options: { params: EventParams; subscriberIds: string[]; }): Promise<{ id: string }> { + const topic = options.params.topic; const result = await this.#db(TABLE_EVENTS) .insert({ - topic: options.params.topic, + topic, data_json: JSON.stringify({ payload: options.params.eventPayload, metadata: options.params.metadata, @@ -98,7 +242,15 @@ export class DatabaseEventHubStore implements EventHubStore { const { id } = result[0]; - // TODO: notify + // Notify other event bus instances that an event is available on the topic + const notifyResult = await this.#db.select( + this.#db.raw(`pg_notify(?, ?)`, [TOPIC_PUBLISH, topic]), + ); + if (notifyResult?.length !== 1) { + this.#logger.warn( + `Failed to notify subscribers of event with ID '${id}' on topic '${topic}'`, + ); + } return { id }; } @@ -169,9 +321,11 @@ export class DatabaseEventHubStore implements EventHubStore { .where(`${TABLE_SUBSCRIPTIONS}.id`, id) .returning<[{ events: EventsRow[] }]>('events_array.events'); - if (result.length !== 1) { + if (result.length === 0) { + throw new NotFoundError(`Subscription with ID '${id}' not found`); + } else if (result.length > 1) { throw new Error( - `Failed to upsert subscription, updated ${result.length} rows`, + `Failed to read subscription, unexpectedly updated ${result.length} rows`, ); } @@ -193,10 +347,20 @@ export class DatabaseEventHubStore implements EventHubStore { } async listen( - _subscriptionId: string, - _onNotify: (topicId: string) => void, + subscriptionId: string, + onNotify: (topicId: string) => void, ): Promise<() => void> { - // TODO - return () => {}; + const result = await this.#db(TABLE_SUBSCRIPTIONS) + .select('topics') + .where({ id: subscriptionId }) + .first(); + console.log(`DEBUG: result=`, result); + if (!result) { + throw new NotFoundError( + `Subscription with ID '${subscriptionId}' not found`, + ); + } + const topics = new Set(result.topics ?? []); + return this.#listener.listen(topics, onNotify, () => {}); } } From b5243a7c0da97bb7cc93d12d9fa8c2ff1e11077f Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 24 May 2024 12:08:19 +0200 Subject: [PATCH 031/164] events-backend: update listening logic to be more robust Signed-off-by: Patrik Oldsberg --- .../src/service/hub/DatabaseEventHubStore.ts | 14 +++-- .../src/service/hub/EventHub.ts | 53 ++++++++++++++----- .../events-backend/src/service/hub/types.ts | 7 ++- 3 files changed, 55 insertions(+), 19 deletions(-) diff --git a/plugins/events-backend/src/service/hub/DatabaseEventHubStore.ts b/plugins/events-backend/src/service/hub/DatabaseEventHubStore.ts index e5e1334191..f310ae86a4 100644 --- a/plugins/events-backend/src/service/hub/DatabaseEventHubStore.ts +++ b/plugins/events-backend/src/service/hub/DatabaseEventHubStore.ts @@ -348,8 +348,11 @@ export class DatabaseEventHubStore implements EventHubStore { async listen( subscriptionId: string, - onNotify: (topicId: string) => void, - ): Promise<() => void> { + listeners: { + onNotify: (topicId: string) => void; + onError: () => void; + }, + ): Promise<{ cancel(): void }> { const result = await this.#db(TABLE_SUBSCRIPTIONS) .select('topics') .where({ id: subscriptionId }) @@ -361,6 +364,11 @@ export class DatabaseEventHubStore implements EventHubStore { ); } const topics = new Set(result.topics ?? []); - return this.#listener.listen(topics, onNotify, () => {}); + const cancel = await this.#listener.listen( + topics, + listeners.onNotify, + listeners.onError, + ); + return { cancel }; } } diff --git a/plugins/events-backend/src/service/hub/EventHub.ts b/plugins/events-backend/src/service/hub/EventHub.ts index c78a8359ef..97d641e107 100644 --- a/plugins/events-backend/src/service/hub/EventHub.ts +++ b/plugins/events-backend/src/service/hub/EventHub.ts @@ -118,21 +118,46 @@ export class EventHub { }); const id = req.params.subscriptionId; - const { events } = await this.#store.readSubscription(id); - - this.#logger.info( - `Reading subscription '${id}' resulted in ${events.length} events`, - { subject: credentials.principal.subject }, - ); - - if (events.length > 0) { - res.json({ events }); - return; - } - - this.#store.listen(id, () => { - res.status(204).end(); + let resolveShouldNotify: (shouldNotify: boolean) => void; + const shouldNotifyPromise = new Promise(resolve => { + resolveShouldNotify = resolve; }); + + const { cancel } = await this.#store.listen(id, { + onNotify() { + shouldNotifyPromise.then(shouldNotify => { + if (shouldNotify) { + res.status(204).end(); + } + }); + }, + onError() { + shouldNotifyPromise.then(shouldNotify => { + if (shouldNotify) { + res.status(500).end(); + } + }); + }, + }); + req.on('end', cancel); + + try { + const { events } = await this.#store.readSubscription(id); + + this.#logger.info( + `Reading subscription '${id}' resulted in ${events.length} events`, + { subject: credentials.principal.subject }, + ); + + if (events.length > 0) { + res.json({ events }); + resolveShouldNotify!(false); + } else { + resolveShouldNotify!(true); + } + } finally { + resolveShouldNotify!(false); + } }; #handlePutSubscription: internal.DocRequestHandler< diff --git a/plugins/events-backend/src/service/hub/types.ts b/plugins/events-backend/src/service/hub/types.ts index 8adedc69c7..0a0a27b1c1 100644 --- a/plugins/events-backend/src/service/hub/types.ts +++ b/plugins/events-backend/src/service/hub/types.ts @@ -28,6 +28,9 @@ export type EventHubStore = { listen( subscriptionId: string, - onNotify: (topicId: string) => void, - ): Promise<() => void>; + listeners: { + onNotify(topicId: string): void; + onError(): void; + }, + ): Promise<{ cancel(): void }>; }; From ff60692772640bae271ad1dec0d445f55b38764a Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 24 May 2024 12:14:51 +0200 Subject: [PATCH 032/164] events-backend: use memory store if not using postgres + memory updates Signed-off-by: Patrik Oldsberg --- .../src/service/hub/EventHub.ts | 33 ++++++++++++------- .../src/service/hub/MemoryEventHubStore.ts | 20 +++++++---- .../events-backend/src/service/hub/types.ts | 2 +- 3 files changed, 36 insertions(+), 19 deletions(-) diff --git a/plugins/events-backend/src/service/hub/EventHub.ts b/plugins/events-backend/src/service/hub/EventHub.ts index 97d641e107..b54e9fdf08 100644 --- a/plugins/events-backend/src/service/hub/EventHub.ts +++ b/plugins/events-backend/src/service/hub/EventHub.ts @@ -37,10 +37,19 @@ export class EventHub { const { database, httpAuth } = options; const logger = options.logger.child({ type: 'EventHub' }); const router = Router(); - const store = await DatabaseEventHubStore.create({ - database, - logger, - }); + + let store: EventHubStore; + const db = await database.getClient(); + if (db.client.config.client === 'pg') { + logger.info('Database is PostgreSQL, using database store'); + store = await DatabaseEventHubStore.create({ + database, + logger, + }); + } else { + logger.info('Database is not PostgreSQL, using memory store'); + store = new MemoryEventHubStore(); + } const hub = new EventHub(router, logger, httpAuth, store); @@ -92,19 +101,21 @@ export class EventHub { const credentials = await this.#httpAuth.credentials(req, { allow: ['service'], }); - const { id } = await this.#store.publish({ + const result = await this.#store.publish({ params: { topic: req.body.event.topic, eventPayload: req.body.event.payload, } as EventParams, subscriberIds: req.body.subscriptionIds ?? [], }); - this.#logger.info( - `Published event to '${req.body.event.topic}' with ID '${id}'`, - { - subject: credentials.principal.subject, - }, - ); + if (result) { + this.#logger.info( + `Published event to '${req.body.event.topic}' with ID '${result.id}'`, + { + subject: credentials.principal.subject, + }, + ); + } res.status(201).end(); }; diff --git a/plugins/events-backend/src/service/hub/MemoryEventHubStore.ts b/plugins/events-backend/src/service/hub/MemoryEventHubStore.ts index 7ab5b98f82..9b72c18770 100644 --- a/plugins/events-backend/src/service/hub/MemoryEventHubStore.ts +++ b/plugins/events-backend/src/service/hub/MemoryEventHubStore.ts @@ -34,7 +34,7 @@ export class MemoryEventHubStore implements EventHubStore { async publish(options: { params: EventParams; subscriberIds: string[]; - }): Promise { + }): Promise<{ id: string } | undefined> { const topicId = options.params.topic; const subscriberIds = new Set(options.subscriberIds); @@ -46,7 +46,7 @@ export class MemoryEventHubStore implements EventHubStore { } } if (!hasOtherSubscribers) { - return; + return undefined; } const nextSeq = this.#getMaxSeq() + 1; @@ -57,6 +57,7 @@ export class MemoryEventHubStore implements EventHubStore { listener.notify(topicId); } } + return { id: String(nextSeq) }; } #getMaxSeq() { @@ -98,16 +99,21 @@ export class MemoryEventHubStore implements EventHubStore { async listen( subscriptionId: string, - onNotify: (topicId: string) => void, - ): Promise<() => void> { + listeners: { + onNotify(topicId: string): void; + onError(): void; + }, + ): Promise<{ cancel(): void }> { const sub = this.#subscribers.get(subscriptionId); if (!sub) { throw new Error(`Subscription not found`); } - const listener = { topics: sub.topics, notify: onNotify }; + const listener = { topics: sub.topics, notify: listeners.onNotify }; this.#listeners.add(listener); - return () => { - this.#listeners.delete(listener); + return { + cancel: () => { + this.#listeners.delete(listener); + }, }; } } diff --git a/plugins/events-backend/src/service/hub/types.ts b/plugins/events-backend/src/service/hub/types.ts index 0a0a27b1c1..6cc1cc58e5 100644 --- a/plugins/events-backend/src/service/hub/types.ts +++ b/plugins/events-backend/src/service/hub/types.ts @@ -20,7 +20,7 @@ export type EventHubStore = { publish(options: { params: EventParams; subscriberIds: string[]; - }): Promise<{ id: string }>; + }): Promise<{ id: string } | undefined>; upsertSubscription(id: string, topics: string[]): Promise; From 1eaa7199430aa7a2984ee424ee6c08d3e80a38db Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 24 May 2024 13:48:38 +0200 Subject: [PATCH 033/164] events-backend: avoid storing events with no subscribers Signed-off-by: Patrik Oldsberg --- .../src/service/hub/DatabaseEventHubStore.ts | 58 ++++++++++++++----- .../src/service/hub/EventHub.ts | 20 +++++-- 2 files changed, 60 insertions(+), 18 deletions(-) diff --git a/plugins/events-backend/src/service/hub/DatabaseEventHubStore.ts b/plugins/events-backend/src/service/hub/DatabaseEventHubStore.ts index f310ae86a4..f1c336e5a3 100644 --- a/plugins/events-backend/src/service/hub/DatabaseEventHubStore.ts +++ b/plugins/events-backend/src/service/hub/DatabaseEventHubStore.ts @@ -223,24 +223,54 @@ export class DatabaseEventHubStore implements EventHubStore { async publish(options: { params: EventParams; subscriberIds: string[]; - }): Promise<{ id: string }> { + }): Promise<{ id: string } | undefined> { const topic = options.params.topic; - const result = await this.#db(TABLE_EVENTS) - .insert({ - topic, - data_json: JSON.stringify({ - payload: options.params.eventPayload, - metadata: options.params.metadata, - }), - consumed_by: options.subscriberIds, - }) - .returning('id'); + // This query inserts a new event into the database, but only if there are + // subscribers to the topic that have not already been notified + const result = await this.#db + // There's no clean way to create a INSERT INTO .. SELECT with knex, so we end up with quite a lot of .raw(...) + .into( + this.#db.raw('?? (??, ??, ??)', [ + TABLE_EVENTS, + // These are the rows that we insert, and should match the SELECT below + 'topic', + 'data_json', + 'consumed_by', + ]), + ) + .insert( + (q: Knex.QueryBuilder) => + q + // We're not reading data to insert from anywhere else, just raw data + .select( + this.#db.raw('?', [topic]), + this.#db.raw('?', [ + JSON.stringify({ + payload: options.params.eventPayload, + metadata: options.params.metadata, + }), + ]), + this.#db.raw('?', [options.subscriberIds]), + ) + // The rest of this query is to check whether there are any + // subscribers that have not been notified yet + .from(TABLE_SUBSCRIPTIONS) + .whereNotIn('id', options.subscriberIds) // Skip notified subscribers + .andWhere(this.#db.raw('? = ANY(topics)', [topic])) // Match topic + .having(this.#db.raw('count(*)'), '>', 0), // Check if there are any results + ) + .returning<{ id: string }[]>('id'); - if (result.length !== 1) { - throw new Error(`Failed to insert event, updated ${result.length} rows`); + if (result.length === 0) { + return undefined; + } + if (result.length > 1) { + throw new Error( + `Failed to insert event, unexpectedly updated ${result.length} rows`, + ); } - const { id } = result[0]; + const [{ id }] = result; // Notify other event bus instances that an event is available on the topic const notifyResult = await this.#db.select( diff --git a/plugins/events-backend/src/service/hub/EventHub.ts b/plugins/events-backend/src/service/hub/EventHub.ts index b54e9fdf08..344f20970f 100644 --- a/plugins/events-backend/src/service/hub/EventHub.ts +++ b/plugins/events-backend/src/service/hub/EventHub.ts @@ -101,22 +101,34 @@ export class EventHub { const credentials = await this.#httpAuth.credentials(req, { allow: ['service'], }); + const topic = req.body.event.topic; + const subscriberIds = req.body.subscriptionIds ?? []; const result = await this.#store.publish({ params: { - topic: req.body.event.topic, + topic, eventPayload: req.body.event.payload, } as EventParams, - subscriberIds: req.body.subscriptionIds ?? [], + subscriberIds, }); if (result) { this.#logger.info( - `Published event to '${req.body.event.topic}' with ID '${result.id}'`, + `Published event to '${topic}' with ID '${result.id}'`, { subject: credentials.principal.subject, }, ); + res.status(201).end(); + } else { + this.#logger.info( + `Skipped publishing of event to '${topic}', subscribers have already been notified: '${subscriberIds.join( + "', '", + )}'`, + { + subject: credentials.principal.subject, + }, + ); + res.status(204).end(); } - res.status(201).end(); }; #handleGetSubscription: internal.DocRequestHandler< From 05dea0964bdf677cf55cf6c7976905686de0cead Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 24 May 2024 13:50:13 +0200 Subject: [PATCH 034/164] events-backend: update schema to include publish responses Signed-off-by: Patrik Oldsberg --- plugins/events-backend/src/schema/openapi.generated.ts | 7 +++++++ plugins/events-backend/src/schema/openapi.yaml | 4 ++++ 2 files changed, 11 insertions(+) diff --git a/plugins/events-backend/src/schema/openapi.generated.ts b/plugins/events-backend/src/schema/openapi.generated.ts index 7d17ad2bf6..90a9b10011 100644 --- a/plugins/events-backend/src/schema/openapi.generated.ts +++ b/plugins/events-backend/src/schema/openapi.generated.ts @@ -137,6 +137,13 @@ export const spec = { operationId: 'PostEvent', description: 'Publish a new event', responses: { + '201': { + description: 'The event was published successfully', + }, + '204': { + description: + 'The event did not need to be published as all subscribers have already been notified', + }, default: { $ref: '#/components/responses/ErrorResponse', }, diff --git a/plugins/events-backend/src/schema/openapi.yaml b/plugins/events-backend/src/schema/openapi.yaml index 1adee01ab5..bec0b2461b 100644 --- a/plugins/events-backend/src/schema/openapi.yaml +++ b/plugins/events-backend/src/schema/openapi.yaml @@ -93,6 +93,10 @@ paths: operationId: PostEvent description: Publish a new event responses: + '201': + description: The event was published successfully + '204': + description: The event did not need to be published as all subscribers have already been notified default: $ref: '#/components/responses/ErrorResponse' security: From c7855bab6d530b447c6e817c4d57bfddbfb8ec62 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 24 May 2024 13:55:21 +0200 Subject: [PATCH 035/164] events-backend: refactor EventHub into a router creator Signed-off-by: Patrik Oldsberg --- .../src/service/EventsPlugin.ts | 5 +- .../src/service/hub/EventHub.ts | 210 +++++++----------- .../events-backend/src/service/hub/index.ts | 2 +- 3 files changed, 83 insertions(+), 134 deletions(-) diff --git a/plugins/events-backend/src/service/EventsPlugin.ts b/plugins/events-backend/src/service/EventsPlugin.ts index 089ea928bc..176d7e2f34 100644 --- a/plugins/events-backend/src/service/EventsPlugin.ts +++ b/plugins/events-backend/src/service/EventsPlugin.ts @@ -28,7 +28,7 @@ import { } from '@backstage/plugin-events-node'; import Router from 'express-promise-router'; import { HttpPostIngressEventPublisher } from './http'; -import { EventHub } from './hub'; +import { createEventBusRouter } from './hub'; class EventsExtensionPointImpl implements EventsExtensionPoint { #httpPostIngresses: HttpPostIngressOptions[] = []; @@ -97,8 +97,7 @@ export const eventsPlugin = createBackendPlugin({ const eventsRouter = Router(); http.bind(eventsRouter); - const hub = await EventHub.create({ database, logger, httpAuth }); - router.use(hub.handler()); + router.use(await createEventBusRouter({ database, logger, httpAuth })); router.use(eventsRouter); router.addAuthPolicy({ diff --git a/plugins/events-backend/src/service/hub/EventHub.ts b/plugins/events-backend/src/service/hub/EventHub.ts index 344f20970f..59be37967e 100644 --- a/plugins/events-backend/src/service/hub/EventHub.ts +++ b/plugins/events-backend/src/service/hub/EventHub.ts @@ -21,89 +21,45 @@ import { } from '@backstage/backend-plugin-api'; import { Handler } from 'express'; import Router from 'express-promise-router'; -import { spec, createOpenApiRouter } from '../../schema/openapi.generated'; -import { internal } from '@backstage/backend-openapi-utils'; +import { createOpenApiRouter } from '../../schema/openapi.generated'; import { MemoryEventHubStore } from './MemoryEventHubStore'; import { DatabaseEventHubStore } from './DatabaseEventHubStore'; import { EventHubStore } from './types'; import { EventParams } from '@backstage/plugin-events-node'; -export class EventHub { - static async create(options: { - logger: LoggerService; - database: DatabaseService; - httpAuth: HttpAuthService; - }) { - const { database, httpAuth } = options; - const logger = options.logger.child({ type: 'EventHub' }); - const router = Router(); +export async function createEventBusRouter(options: { + logger: LoggerService; + database: DatabaseService; + httpAuth: HttpAuthService; +}): Promise { + const { database, httpAuth } = options; + const logger = options.logger.child({ type: 'EventHub' }); + const router = Router(); - let store: EventHubStore; - const db = await database.getClient(); - if (db.client.config.client === 'pg') { - logger.info('Database is PostgreSQL, using database store'); - store = await DatabaseEventHubStore.create({ - database, - logger, - }); - } else { - logger.info('Database is not PostgreSQL, using memory store'); - store = new MemoryEventHubStore(); - } - - const hub = new EventHub(router, logger, httpAuth, store); - - const apiRouter = await createOpenApiRouter(); - - router.use(apiRouter); - - apiRouter.post('/hub/events', hub.#handlePostEvents); - - // Long-polling - apiRouter.get( - '/hub/subscriptions/:subscriptionId/events', - hub.#handleGetSubscription, - ); - apiRouter.put( - '/hub/subscriptions/:subscriptionId', - hub.#handlePutSubscription, - ); - - return hub; + let store: EventHubStore; + const db = await database.getClient(); + if (db.client.config.client === 'pg') { + logger.info('Database is PostgreSQL, using database store'); + store = await DatabaseEventHubStore.create({ + database, + logger, + }); + } else { + logger.info('Database is not PostgreSQL, using memory store'); + store = new MemoryEventHubStore(); } - readonly #handler: Handler; - readonly #logger: LoggerService; - readonly #httpAuth: HttpAuthService; - readonly #store: EventHubStore; + const apiRouter = await createOpenApiRouter(); - private constructor( - handler: Handler, - logger: LoggerService, - httpAuth: HttpAuthService, - store: EventHubStore, - ) { - this.#handler = handler; - this.#logger = logger; - this.#httpAuth = httpAuth; - this.#store = store; - } + router.use(apiRouter); - handler(): Handler { - return this.#handler; - } - - #handlePostEvents: internal.DocRequestHandler< - typeof spec, - '/hub/events', - 'post' - > = async (req, res) => { - const credentials = await this.#httpAuth.credentials(req, { + apiRouter.post('/hub/events', async (req, res) => { + const credentials = await httpAuth.credentials(req, { allow: ['service'], }); const topic = req.body.event.topic; const subscriberIds = req.body.subscriptionIds ?? []; - const result = await this.#store.publish({ + const result = await store.publish({ params: { topic, eventPayload: req.body.event.payload, @@ -111,15 +67,12 @@ export class EventHub { subscriberIds, }); if (result) { - this.#logger.info( - `Published event to '${topic}' with ID '${result.id}'`, - { - subject: credentials.principal.subject, - }, - ); + logger.info(`Published event to '${topic}' with ID '${result.id}'`, { + subject: credentials.principal.subject, + }); res.status(201).end(); } else { - this.#logger.info( + logger.info( `Skipped publishing of event to '${topic}', subscribers have already been notified: '${subscriberIds.join( "', '", )}'`, @@ -129,77 +82,74 @@ export class EventHub { ); res.status(204).end(); } - }; + }); - #handleGetSubscription: internal.DocRequestHandler< - typeof spec, - '/hub/subscriptions/{subscriptionId}/events', - 'get' - > = async (req, res) => { - const credentials = await this.#httpAuth.credentials(req, { - allow: ['service'], - }); - const id = req.params.subscriptionId; + apiRouter.get( + '/hub/subscriptions/:subscriptionId/events', + async (req, res) => { + const credentials = await httpAuth.credentials(req, { + allow: ['service'], + }); + const id = req.params.subscriptionId; - let resolveShouldNotify: (shouldNotify: boolean) => void; - const shouldNotifyPromise = new Promise(resolve => { - resolveShouldNotify = resolve; - }); + let resolveShouldNotify: (shouldNotify: boolean) => void; + const shouldNotifyPromise = new Promise(resolve => { + resolveShouldNotify = resolve; + }); - const { cancel } = await this.#store.listen(id, { - onNotify() { - shouldNotifyPromise.then(shouldNotify => { - if (shouldNotify) { - res.status(204).end(); - } - }); - }, - onError() { - shouldNotifyPromise.then(shouldNotify => { - if (shouldNotify) { - res.status(500).end(); - } - }); - }, - }); - req.on('end', cancel); + const { cancel } = await store.listen(id, { + onNotify() { + shouldNotifyPromise.then(shouldNotify => { + if (shouldNotify) { + res.status(204).end(); + } + }); + }, + onError() { + shouldNotifyPromise.then(shouldNotify => { + if (shouldNotify) { + res.status(500).end(); + } + }); + }, + }); + req.on('end', cancel); - try { - const { events } = await this.#store.readSubscription(id); + try { + const { events } = await store.readSubscription(id); - this.#logger.info( - `Reading subscription '${id}' resulted in ${events.length} events`, - { subject: credentials.principal.subject }, - ); + logger.info( + `Reading subscription '${id}' resulted in ${events.length} events`, + { subject: credentials.principal.subject }, + ); - if (events.length > 0) { - res.json({ events }); + if (events.length > 0) { + res.json({ events }); + resolveShouldNotify!(false); + } else { + resolveShouldNotify!(true); + } + } finally { resolveShouldNotify!(false); - } else { - resolveShouldNotify!(true); } - } finally { - resolveShouldNotify!(false); - } - }; + }, + ); - #handlePutSubscription: internal.DocRequestHandler< - typeof spec, - '/hub/subscriptions/{subscriptionId}', - 'put' - > = async (req, res) => { - const credentials = await this.#httpAuth.credentials(req, { + apiRouter.put('/hub/subscriptions/:subscriptionId', async (req, res) => { + const credentials = await httpAuth.credentials(req, { allow: ['service'], }); const id = req.params.subscriptionId; - await this.#store.upsertSubscription(id, req.body.topics); + await store.upsertSubscription(id, req.body.topics); - this.#logger.info( + logger.info( `New subscription '${id}' topics='${req.body.topics.join("', '")}'`, { subject: credentials.principal.subject }, ); res.status(201).end(); - }; + }); + + return apiRouter; } diff --git a/plugins/events-backend/src/service/hub/index.ts b/plugins/events-backend/src/service/hub/index.ts index 4acc848298..2e769f24d7 100644 --- a/plugins/events-backend/src/service/hub/index.ts +++ b/plugins/events-backend/src/service/hub/index.ts @@ -14,4 +14,4 @@ * limitations under the License. */ -export { EventHub } from './EventHub'; +export { createEventBusRouter } from './EventHub'; From 8c7542f0d79a7cd702ae04f01a6c252ebd1afb96 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 24 May 2024 13:58:35 +0200 Subject: [PATCH 036/164] events-backend: update even bus route paths Signed-off-by: Patrik Oldsberg --- plugins/events-backend/src/schema/openapi.generated.ts | 6 +++--- plugins/events-backend/src/schema/openapi.yaml | 6 +++--- plugins/events-backend/src/service/hub/EventHub.ts | 6 +++--- plugins/events-node/src/generated/apis/DefaultApi.client.ts | 6 +++--- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/plugins/events-backend/src/schema/openapi.generated.ts b/plugins/events-backend/src/schema/openapi.generated.ts index 90a9b10011..d9b3c9045c 100644 --- a/plugins/events-backend/src/schema/openapi.generated.ts +++ b/plugins/events-backend/src/schema/openapi.generated.ts @@ -132,7 +132,7 @@ export const spec = { }, }, paths: { - '/hub/events': { + '/bus/v1/events': { post: { operationId: 'PostEvent', description: 'Publish a new event', @@ -192,7 +192,7 @@ export const spec = { }, }, }, - '/hub/subscriptions/{subscriptionId}': { + '/bus/v1/subscriptions/{subscriptionId}': { put: { operationId: 'PutSubscription', description: @@ -245,7 +245,7 @@ export const spec = { }, }, }, - '/hub/subscriptions/{subscriptionId}/events': { + '/bus/v1/subscriptions/{subscriptionId}/events': { get: { operationId: 'GetSubscriptionEvents', description: 'Get new events for the provided subscription', diff --git a/plugins/events-backend/src/schema/openapi.yaml b/plugins/events-backend/src/schema/openapi.yaml index bec0b2461b..632a884139 100644 --- a/plugins/events-backend/src/schema/openapi.yaml +++ b/plugins/events-backend/src/schema/openapi.yaml @@ -88,7 +88,7 @@ components: scheme: bearer bearerFormat: JWT paths: - /hub/events: + /bus/v1/events: post: operationId: PostEvent description: Publish a new event @@ -126,7 +126,7 @@ paths: payload: myData: foo - /hub/subscriptions/{subscriptionId}: + /bus/v1/subscriptions/{subscriptionId}: put: operationId: PutSubscription description: Ensures that the subscription exists with the provided configuration @@ -160,7 +160,7 @@ paths: topics: - test-topic - /hub/subscriptions/{subscriptionId}/events: + /bus/v1/subscriptions/{subscriptionId}/events: get: operationId: GetSubscriptionEvents description: Get new events for the provided subscription diff --git a/plugins/events-backend/src/service/hub/EventHub.ts b/plugins/events-backend/src/service/hub/EventHub.ts index 59be37967e..e70baad882 100644 --- a/plugins/events-backend/src/service/hub/EventHub.ts +++ b/plugins/events-backend/src/service/hub/EventHub.ts @@ -53,7 +53,7 @@ export async function createEventBusRouter(options: { router.use(apiRouter); - apiRouter.post('/hub/events', async (req, res) => { + apiRouter.post('/bus/v1/events', async (req, res) => { const credentials = await httpAuth.credentials(req, { allow: ['service'], }); @@ -85,7 +85,7 @@ export async function createEventBusRouter(options: { }); apiRouter.get( - '/hub/subscriptions/:subscriptionId/events', + '/bus/v1/subscriptions/:subscriptionId/events', async (req, res) => { const credentials = await httpAuth.credentials(req, { allow: ['service'], @@ -135,7 +135,7 @@ export async function createEventBusRouter(options: { }, ); - apiRouter.put('/hub/subscriptions/:subscriptionId', async (req, res) => { + apiRouter.put('/bus/v1/subscriptions/:subscriptionId', async (req, res) => { const credentials = await httpAuth.credentials(req, { allow: ['service'], }); diff --git a/plugins/events-node/src/generated/apis/DefaultApi.client.ts b/plugins/events-node/src/generated/apis/DefaultApi.client.ts index 7a2099e79a..4bdeed0c33 100644 --- a/plugins/events-node/src/generated/apis/DefaultApi.client.ts +++ b/plugins/events-node/src/generated/apis/DefaultApi.client.ts @@ -75,7 +75,7 @@ export class DefaultApiClient { ): Promise> { const baseUrl = await this.discoveryApi.getBaseUrl(pluginId); - const uriTemplate = `/hub/subscriptions/{subscriptionId}/events`; + const uriTemplate = `/bus/v1/subscriptions/{subscriptionId}/events`; const uri = parser.parse(uriTemplate).expand({ subscriptionId: request.path.subscriptionId, @@ -103,7 +103,7 @@ export class DefaultApiClient { ): Promise> { const baseUrl = await this.discoveryApi.getBaseUrl(pluginId); - const uriTemplate = `/hub/events`; + const uriTemplate = `/bus/v1/events`; const uri = parser.parse(uriTemplate).expand({}); @@ -134,7 +134,7 @@ export class DefaultApiClient { ): Promise> { const baseUrl = await this.discoveryApi.getBaseUrl(pluginId); - const uriTemplate = `/hub/subscriptions/{subscriptionId}`; + const uriTemplate = `/bus/v1/subscriptions/{subscriptionId}`; const uri = parser.parse(uriTemplate).expand({ subscriptionId: request.path.subscriptionId, From ab035ebc1f13a92e032e116042632bdd6a376528 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 24 May 2024 14:00:38 +0200 Subject: [PATCH 037/164] events-backend: EventHub -> EventBus Signed-off-by: Patrik Oldsberg --- ...ntHubStore.ts => DatabaseEventBusStore.ts} | 20 +++++++++---------- ...ventHubStore.ts => MemoryEventBusStore.ts} | 4 ++-- .../{EventHub.ts => createEventBusRouter.ts} | 14 ++++++------- .../events-backend/src/service/hub/index.ts | 2 +- .../events-backend/src/service/hub/types.ts | 2 +- 5 files changed, 21 insertions(+), 21 deletions(-) rename plugins/events-backend/src/service/hub/{DatabaseEventHubStore.ts => DatabaseEventBusStore.ts} (95%) rename plugins/events-backend/src/service/hub/{MemoryEventHubStore.ts => MemoryEventBusStore.ts} (96%) rename plugins/events-backend/src/service/hub/{EventHub.ts => createEventBusRouter.ts} (92%) diff --git a/plugins/events-backend/src/service/hub/DatabaseEventHubStore.ts b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts similarity index 95% rename from plugins/events-backend/src/service/hub/DatabaseEventHubStore.ts rename to plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts index f1c336e5a3..fc2128e2cf 100644 --- a/plugins/events-backend/src/service/hub/DatabaseEventHubStore.ts +++ b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts @@ -14,7 +14,7 @@ * limitations under the License. */ import { EventParams } from '@backstage/plugin-events-node'; -import { EventHubStore } from './types'; +import { EventBusStore } from './types'; import { Knex } from 'knex'; import { DatabaseService, @@ -69,7 +69,7 @@ interface InternalDbConnection { } // This internal class manages a single connection to the database that all listeners share -class DatabaseEventHubListener { +class DatabaseEventBusListener { readonly #client: InternalDbClient; readonly #logger: LoggerService; @@ -84,7 +84,7 @@ class DatabaseEventHubListener { constructor(client: InternalDbClient, logger: LoggerService) { this.#client = client; - this.#logger = logger.child({ type: 'DatabaseEventHubListener' }); + this.#logger = logger.child({ type: 'DatabaseEventBusListener' }); } async listen( @@ -187,16 +187,16 @@ class DatabaseEventHubListener { } } -export class DatabaseEventHubStore implements EventHubStore { +export class DatabaseEventBusStore implements EventBusStore { static async create(options: { database: DatabaseService; logger: LoggerService; - }): Promise { + }): Promise { const db = await options.database.getClient(); if (db.client.config.client !== 'pg') { throw new Error( - `DatabaseEventHubStore only supports PostgreSQL, got '${db.client.config.client}'`, + `DatabaseEventBusStore only supports PostgreSQL, got '${db.client.config.client}'`, ); } @@ -204,20 +204,20 @@ export class DatabaseEventHubStore implements EventHubStore { await db.migrate.latest({ directory: migrationsDir, }); - options.logger.info('DatabaseEventHubStore migrations ran successfully'); + options.logger.info('DatabaseEventBusStore migrations ran successfully'); } - return new DatabaseEventHubStore(db, options.logger); + return new DatabaseEventBusStore(db, options.logger); } readonly #db: Knex; readonly #logger: LoggerService; - readonly #listener: DatabaseEventHubListener; + readonly #listener: DatabaseEventBusListener; private constructor(db: Knex, logger: LoggerService) { this.#db = db; this.#logger = logger; - this.#listener = new DatabaseEventHubListener(db.client, logger); + this.#listener = new DatabaseEventBusListener(db.client, logger); } async publish(options: { diff --git a/plugins/events-backend/src/service/hub/MemoryEventHubStore.ts b/plugins/events-backend/src/service/hub/MemoryEventBusStore.ts similarity index 96% rename from plugins/events-backend/src/service/hub/MemoryEventHubStore.ts rename to plugins/events-backend/src/service/hub/MemoryEventBusStore.ts index 9b72c18770..8a03c2961a 100644 --- a/plugins/events-backend/src/service/hub/MemoryEventHubStore.ts +++ b/plugins/events-backend/src/service/hub/MemoryEventBusStore.ts @@ -14,11 +14,11 @@ * limitations under the License. */ import { EventParams } from '@backstage/plugin-events-node'; -import { EventHubStore } from './types'; +import { EventBusStore } from './types'; const MAX_BATCH_SIZE = 5; -export class MemoryEventHubStore implements EventHubStore { +export class MemoryEventBusStore implements EventBusStore { #events = new Array< EventParams & { seq: number; subscriberIds: Set } >(); diff --git a/plugins/events-backend/src/service/hub/EventHub.ts b/plugins/events-backend/src/service/hub/createEventBusRouter.ts similarity index 92% rename from plugins/events-backend/src/service/hub/EventHub.ts rename to plugins/events-backend/src/service/hub/createEventBusRouter.ts index e70baad882..23aadacadc 100644 --- a/plugins/events-backend/src/service/hub/EventHub.ts +++ b/plugins/events-backend/src/service/hub/createEventBusRouter.ts @@ -22,9 +22,9 @@ import { import { Handler } from 'express'; import Router from 'express-promise-router'; import { createOpenApiRouter } from '../../schema/openapi.generated'; -import { MemoryEventHubStore } from './MemoryEventHubStore'; -import { DatabaseEventHubStore } from './DatabaseEventHubStore'; -import { EventHubStore } from './types'; +import { MemoryEventBusStore } from './MemoryEventBusStore'; +import { DatabaseEventBusStore } from './DatabaseEventBusStore'; +import { EventBusStore } from './types'; import { EventParams } from '@backstage/plugin-events-node'; export async function createEventBusRouter(options: { @@ -33,20 +33,20 @@ export async function createEventBusRouter(options: { httpAuth: HttpAuthService; }): Promise { const { database, httpAuth } = options; - const logger = options.logger.child({ type: 'EventHub' }); + const logger = options.logger.child({ type: 'EventBus' }); const router = Router(); - let store: EventHubStore; + let store: EventBusStore; const db = await database.getClient(); if (db.client.config.client === 'pg') { logger.info('Database is PostgreSQL, using database store'); - store = await DatabaseEventHubStore.create({ + store = await DatabaseEventBusStore.create({ database, logger, }); } else { logger.info('Database is not PostgreSQL, using memory store'); - store = new MemoryEventHubStore(); + store = new MemoryEventBusStore(); } const apiRouter = await createOpenApiRouter(); diff --git a/plugins/events-backend/src/service/hub/index.ts b/plugins/events-backend/src/service/hub/index.ts index 2e769f24d7..a4f2f263f1 100644 --- a/plugins/events-backend/src/service/hub/index.ts +++ b/plugins/events-backend/src/service/hub/index.ts @@ -14,4 +14,4 @@ * limitations under the License. */ -export { createEventBusRouter } from './EventHub'; +export { createEventBusRouter } from './createEventBusRouter'; diff --git a/plugins/events-backend/src/service/hub/types.ts b/plugins/events-backend/src/service/hub/types.ts index 6cc1cc58e5..f7a162a3a6 100644 --- a/plugins/events-backend/src/service/hub/types.ts +++ b/plugins/events-backend/src/service/hub/types.ts @@ -16,7 +16,7 @@ import { EventParams } from '@backstage/plugin-events-node'; -export type EventHubStore = { +export type EventBusStore = { publish(options: { params: EventParams; subscriberIds: string[]; From 2d25e2791c346e79f8b6f66a0fb65c1c1d3c0712 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 24 May 2024 15:33:33 +0200 Subject: [PATCH 038/164] events-backend: refactor event bus notifications and add timeout Signed-off-by: Patrik Oldsberg --- .../src/service/hub/DatabaseEventBusStore.ts | 22 ++++++-- .../src/service/hub/MemoryEventBusStore.ts | 20 ++++--- .../src/service/hub/createEventBusRouter.ts | 55 ++++++++++++++----- .../events-backend/src/service/hub/types.ts | 5 +- 4 files changed, 72 insertions(+), 30 deletions(-) diff --git a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts index fc2128e2cf..c32e2393a7 100644 --- a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts +++ b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts @@ -378,27 +378,37 @@ export class DatabaseEventBusStore implements EventBusStore { async listen( subscriptionId: string, - listeners: { + options: { + signal: AbortSignal; onNotify: (topicId: string) => void; onError: () => void; }, - ): Promise<{ cancel(): void }> { + ): Promise { const result = await this.#db(TABLE_SUBSCRIPTIONS) .select('topics') .where({ id: subscriptionId }) .first(); - console.log(`DEBUG: result=`, result); + if (!result) { throw new NotFoundError( `Subscription with ID '${subscriptionId}' not found`, ); } + + if (options.signal.aborted) { + return; + } + const topics = new Set(result.topics ?? []); const cancel = await this.#listener.listen( topics, - listeners.onNotify, - listeners.onError, + options.onNotify, + options.onError, ); - return { cancel }; + if (options.signal.aborted) { + cancel(); + } else { + options.signal.addEventListener('abort', cancel); + } } } diff --git a/plugins/events-backend/src/service/hub/MemoryEventBusStore.ts b/plugins/events-backend/src/service/hub/MemoryEventBusStore.ts index 8a03c2961a..98739fdb33 100644 --- a/plugins/events-backend/src/service/hub/MemoryEventBusStore.ts +++ b/plugins/events-backend/src/service/hub/MemoryEventBusStore.ts @@ -99,21 +99,25 @@ export class MemoryEventBusStore implements EventBusStore { async listen( subscriptionId: string, - listeners: { + options: { + signal: AbortSignal; onNotify(topicId: string): void; onError(): void; }, - ): Promise<{ cancel(): void }> { + ): Promise { + if (options.signal.aborted) { + return; + } + const sub = this.#subscribers.get(subscriptionId); if (!sub) { throw new Error(`Subscription not found`); } - const listener = { topics: sub.topics, notify: listeners.onNotify }; + const listener = { topics: sub.topics, notify: options.onNotify }; this.#listeners.add(listener); - return { - cancel: () => { - this.#listeners.delete(listener); - }, - }; + + options.signal.addEventListener('abort', () => { + this.#listeners.delete(listener); + }); } } diff --git a/plugins/events-backend/src/service/hub/createEventBusRouter.ts b/plugins/events-backend/src/service/hub/createEventBusRouter.ts index 23aadacadc..84d04a00fb 100644 --- a/plugins/events-backend/src/service/hub/createEventBusRouter.ts +++ b/plugins/events-backend/src/service/hub/createEventBusRouter.ts @@ -27,12 +27,19 @@ import { DatabaseEventBusStore } from './DatabaseEventBusStore'; import { EventBusStore } from './types'; import { EventParams } from '@backstage/plugin-events-node'; +const DEFAULT_NOTIFY_TIMEOUT_MS = 55_000; // Just below 60s, which is a common HTTP timeout + export async function createEventBusRouter(options: { logger: LoggerService; database: DatabaseService; httpAuth: HttpAuthService; + notifyTimeoutMs?: number; // for testing }): Promise { - const { database, httpAuth } = options; + const { + database, + httpAuth, + notifyTimeoutMs = DEFAULT_NOTIFY_TIMEOUT_MS, + } = options; const logger = options.logger.child({ type: 'EventBus' }); const router = Router(); @@ -92,28 +99,48 @@ export async function createEventBusRouter(options: { }); const id = req.params.subscriptionId; + // Don't notify until we know the outcome of reading events let resolveShouldNotify: (shouldNotify: boolean) => void; const shouldNotifyPromise = new Promise(resolve => { resolveShouldNotify = resolve; }); - const { cancel } = await store.listen(id, { + const controller = new AbortController(); + req.on('end', () => controller.abort()); + + let timeout: NodeJS.Timeout | undefined = undefined; + + let notified = false; + const notify = async (status: number) => { + if (!notified) { + clearTimeout(timeout); + notified = true; + if (await shouldNotifyPromise) { + res.status(status).end(); + } + } + }; + + // By setting up the listener first we make sure we don't miss any events + // that are published while reading. If an event is published we'll receive + // a notification, which depending on the outcome of the read we may ignore + await store.listen(id, { + signal: controller.signal, onNotify() { - shouldNotifyPromise.then(shouldNotify => { - if (shouldNotify) { - res.status(204).end(); - } - }); + notify(204); }, onError() { - shouldNotifyPromise.then(shouldNotify => { - if (shouldNotify) { - res.status(500).end(); - } - }); + notify(500); }, }); - req.on('end', cancel); + + // By timing out requests we make sure they don't stall or that events get stuck. + // For the caller there's no difference between a timeout and a + // notifications, either way they should try reading again. + timeout = setTimeout(() => { + notify(204); + controller.abort(); + }, notifyTimeoutMs); try { const { events } = await store.readSubscription(id); @@ -125,11 +152,11 @@ export async function createEventBusRouter(options: { if (events.length > 0) { res.json({ events }); - resolveShouldNotify!(false); } else { resolveShouldNotify!(true); } } finally { + clearTimeout(timeout); resolveShouldNotify!(false); } }, diff --git a/plugins/events-backend/src/service/hub/types.ts b/plugins/events-backend/src/service/hub/types.ts index f7a162a3a6..55159352b4 100644 --- a/plugins/events-backend/src/service/hub/types.ts +++ b/plugins/events-backend/src/service/hub/types.ts @@ -28,9 +28,10 @@ export type EventBusStore = { listen( subscriptionId: string, - listeners: { + options: { + signal: AbortSignal; onNotify(topicId: string): void; onError(): void; }, - ): Promise<{ cancel(): void }>; + ): Promise; }; From d17ce45a4ac0af74bc9326c4dd60976f7df8dc67 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 24 May 2024 15:46:49 +0200 Subject: [PATCH 039/164] events-backend: add keepalive loop for listener connection Signed-off-by: Patrik Oldsberg --- .../src/service/hub/DatabaseEventBusStore.ts | 31 ++++++++++++++----- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts index c32e2393a7..4e571f71f0 100644 --- a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts +++ b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts @@ -21,10 +21,11 @@ import { LoggerService, resolvePackagePath, } from '@backstage/backend-plugin-api'; -import { NotFoundError } from '@backstage/errors'; +import { ForwardedError, NotFoundError } from '@backstage/errors'; const MAX_BATCH_SIZE = 10; -const LISTENER_CONNECTION_TIMEOUT_MS = 10_000; +const LISTENER_CONNECTION_TIMEOUT_MS = 60_000; +const KEEPALIVE_INTERVAL_MS = 60_000; const TABLE_EVENTS = 'event_bus_events'; const TABLE_SUBSCRIPTIONS = 'event_bus_subscriptions'; @@ -81,6 +82,7 @@ class DatabaseEventBusListener { #connPromise?: Promise; #connTimeout?: NodeJS.Timeout; + #keepaliveInterval?: NodeJS.Timeout; constructor(client: InternalDbClient, logger: LoggerService) { this.#client = client; @@ -104,13 +106,11 @@ class DatabaseEventBusListener { return () => { this.#listeners.delete(listener); - // We don't use any heartbeats for the connection, as clients will be - // driving that for us. We do however need to make sure we don't sit - // idle for too long without any listeners + // If we don't have any listeners, destroy the connection after a timeout if (this.#listeners.size === 0) { this.#connTimeout = setTimeout(() => { this.#connPromise?.then(conn => { - this.#logger.info('Listener connection timed out'); + this.#logger.info('Listener connection timed out, destroying'); this.#connPromise = undefined; this.#destroyConnection(conn); }); @@ -128,7 +128,8 @@ class DatabaseEventBusListener { } } - // We don't try to reconnect on error, instead we notify all listeners and let them try to establish a new connection + // We don't try to reconnect on error, instead we notify all listeners and let + // them try to establish a new connection #handleError(error: Error) { this.#logger.error( `Listener connection failed, notifying all listeners`, @@ -140,6 +141,10 @@ class DatabaseEventBusListener { } #destroyConnection(conn: InternalDbConnection) { + if (this.#keepaliveInterval) { + clearInterval(this.#keepaliveInterval); + this.#keepaliveInterval = undefined; + } this.#client.destroyRawConnection(conn).catch(error => { this.#logger.error(`Listener failed to destroy connection`, error); }); @@ -157,6 +162,18 @@ class DatabaseEventBusListener { try { await conn.query(`LISTEN ${TOPIC_PUBLISH}`); + // Set up a keepalive interval to make sure the connection stays alive + if (this.#keepaliveInterval) { + clearInterval(this.#keepaliveInterval); + } + this.#keepaliveInterval = setInterval(() => { + conn.query('select 1').catch(error => { + this.#connPromise = undefined; + this.#destroyConnection(conn); + this.#handleError(new ForwardedError('Keepalive failed', error)); + }); + }, KEEPALIVE_INTERVAL_MS); + conn.on('notification', event => { this.#handleNotify(event.payload); }); From ed1499b349b2e8c003419eebc11124d9e644bc3d Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 24 May 2024 17:08:57 +0200 Subject: [PATCH 040/164] events-backend: fix event bus notify timeout Signed-off-by: Patrik Oldsberg --- .../events-backend/src/service/hub/createEventBusRouter.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/plugins/events-backend/src/service/hub/createEventBusRouter.ts b/plugins/events-backend/src/service/hub/createEventBusRouter.ts index 84d04a00fb..14237650fc 100644 --- a/plugins/events-backend/src/service/hub/createEventBusRouter.ts +++ b/plugins/events-backend/src/service/hub/createEventBusRouter.ts @@ -141,6 +141,11 @@ export async function createEventBusRouter(options: { notify(204); controller.abort(); }, notifyTimeoutMs); + shouldNotifyPromise.then(shouldNotify => { + if (!shouldNotify) { + clearTimeout(timeout); + } + }); try { const { events } = await store.readSubscription(id); @@ -156,7 +161,6 @@ export async function createEventBusRouter(options: { resolveShouldNotify!(true); } } finally { - clearTimeout(timeout); resolveShouldNotify!(false); } }, From 9e65db8cc90926fc33be9cca9af2dd28bdb8d5cf Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 24 May 2024 17:09:25 +0200 Subject: [PATCH 041/164] backend: install events backend Signed-off-by: Patrik Oldsberg --- packages/backend/package.json | 27 ++++++++++++++------------- packages/backend/src/index.ts | 1 + yarn.lock | 2 ++ 3 files changed, 17 insertions(+), 13 deletions(-) diff --git a/packages/backend/package.json b/packages/backend/package.json index 5b4a753dec..f5d7f88d1a 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -1,30 +1,33 @@ { "name": "example-backend", "version": "0.0.30", - "main": "dist/index.cjs.js", - "types": "src/index.ts", - "license": "Apache-2.0", - "private": true, "backstage": { "role": "backend" }, + "private": true, + "keywords": [ + "backstage" + ], "homepage": "https://backstage.io", "repository": { "type": "git", "url": "https://github.com/backstage/backstage", "directory": "packages/backend" }, - "keywords": [ - "backstage" + "license": "Apache-2.0", + "main": "dist/index.cjs.js", + "types": "src/index.ts", + "files": [ + "dist" ], "scripts": { "build": "backstage-cli package build", + "build-image": "docker build ../.. -f Dockerfile --tag example-backend", "clean": "backstage-cli package clean", "lint": "backstage-cli package lint", "start": "backstage-cli package start --require ./src/instrumentation.js", - "test": "backstage-cli package test", - "build-image": "docker build ../.. -f Dockerfile --tag example-backend", - "start:prometheus": "docker run --mount type=bind,source=./prometheus.yml,destination=/etc/prometheus/prometheus.yml --publish published=9090,target=9090,protocol=tcp prom/prometheus" + "start:prometheus": "docker run --mount type=bind,source=./prometheus.yml,destination=/etc/prometheus/prometheus.yml --publish published=9090,target=9090,protocol=tcp prom/prometheus", + "test": "backstage-cli package test" }, "dependencies": { "@backstage/backend-defaults": "workspace:^", @@ -41,6 +44,7 @@ "@backstage/plugin-catalog-backend-module-scaffolder-entity-model": "workspace:^", "@backstage/plugin-catalog-backend-module-unprocessed": "workspace:^", "@backstage/plugin-devtools-backend": "workspace:^", + "@backstage/plugin-events-backend": "workspace:^", "@backstage/plugin-kubernetes-backend": "workspace:^", "@backstage/plugin-notifications-backend": "workspace:^", "@backstage/plugin-permission-backend": "workspace:^", @@ -64,8 +68,5 @@ }, "devDependencies": { "@backstage/cli": "workspace:^" - }, - "files": [ - "dist" - ] + } } diff --git a/packages/backend/src/index.ts b/packages/backend/src/index.ts index 952f3315c4..3e8c2910b1 100644 --- a/packages/backend/src/index.ts +++ b/packages/backend/src/index.ts @@ -39,6 +39,7 @@ backend.add( import('@backstage/plugin-catalog-backend-module-scaffolder-entity-model'), ); backend.add(import('@backstage/plugin-catalog-backend/alpha')); +backend.add(import('@backstage/plugin-events-backend/alpha')); backend.add(import('@backstage/plugin-devtools-backend')); backend.add(import('@backstage/plugin-kubernetes-backend/alpha')); backend.add( diff --git a/yarn.lock b/yarn.lock index 306e96a2c8..58c69ee093 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6166,6 +6166,7 @@ __metadata: "@backstage/backend-plugin-api": "workspace:^" "@backstage/backend-test-utils": "workspace:^" "@backstage/cli": "workspace:^" + "@backstage/errors": "workspace:^" "@backstage/types": "workspace:^" cross-fetch: ^4.0.0 uri-template: ^2.0.0 @@ -26382,6 +26383,7 @@ __metadata: "@backstage/plugin-catalog-backend-module-scaffolder-entity-model": "workspace:^" "@backstage/plugin-catalog-backend-module-unprocessed": "workspace:^" "@backstage/plugin-devtools-backend": "workspace:^" + "@backstage/plugin-events-backend": "workspace:^" "@backstage/plugin-kubernetes-backend": "workspace:^" "@backstage/plugin-notifications-backend": "workspace:^" "@backstage/plugin-permission-backend": "workspace:^" From ea33c1240a065fe5c865710480c50051db8d2eaa Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 24 May 2024 17:10:57 +0200 Subject: [PATCH 042/164] events-node: update DefaultEventsService to use backend Signed-off-by: Patrik Oldsberg --- plugins/events-node/package.json | 1 + .../src/api/DefaultEventsService.ts | 359 +++++++++++++++--- plugins/events-node/src/service.ts | 11 +- 3 files changed, 307 insertions(+), 64 deletions(-) diff --git a/plugins/events-node/package.json b/plugins/events-node/package.json index de880dc399..2ac1a6922b 100644 --- a/plugins/events-node/package.json +++ b/plugins/events-node/package.json @@ -52,6 +52,7 @@ }, "dependencies": { "@backstage/backend-plugin-api": "workspace:^", + "@backstage/errors": "workspace:^", "@backstage/types": "workspace:^", "cross-fetch": "^4.0.0", "uri-template": "^2.0.0" diff --git a/plugins/events-node/src/api/DefaultEventsService.ts b/plugins/events-node/src/api/DefaultEventsService.ts index bb5c2a0ca8..d1d26b1723 100644 --- a/plugins/events-node/src/api/DefaultEventsService.ts +++ b/plugins/events-node/src/api/DefaultEventsService.ts @@ -14,9 +14,267 @@ * limitations under the License. */ -import { LoggerService } from '@backstage/backend-plugin-api'; +import { + AuthService, + DiscoveryService, + LoggerService, +} from '@backstage/backend-plugin-api'; import { EventParams } from './EventParams'; import { EventsService, EventsServiceSubscribeOptions } from './EventsService'; +import { DefaultApiClient } from '../generated'; +import { NotImplementedError, ResponseError } from '@backstage/errors'; + +const POLL_BACKOFF_START_MS = 1_000; +const POLL_BACKOFF_MAX_MS = 60_000; +const POLL_BACKOFF_FACTOR = 2; + +/** + * Local event bus for subscribers within the same process. + * + * When publishing events we'll keep track of which subscribers we managed to + * reach locally, and forward those subscriber IDs to the events backend if it + * is in use. The events backend will then both avoid forwarding the same events + * to those subscribers again, but also avoid storing the event altogether if + * there are no other subscribers. + * @internal + */ +export class LocalEventBus { + readonly #logger: LoggerService; + + readonly #subscribers = new Map< + string, + Omit[] + >(); + + constructor(logger: LoggerService) { + this.#logger = logger; + } + + async publish( + params: EventParams, + ): Promise<{ notifiedSubscribers: string[] }> { + this.#logger.debug( + `Event received: topic=${params.topic}, metadata=${JSON.stringify( + params.metadata, + )}, payload=${JSON.stringify(params.eventPayload)}`, + ); + + if (!this.#subscribers.has(params.topic)) { + return { notifiedSubscribers: [] }; + } + + const onEventPromises: Promise[] = []; + this.#subscribers.get(params.topic)?.forEach(subscription => { + onEventPromises.push( + (async () => { + try { + await subscription.onEvent(params); + } catch (error) { + this.#logger.warn( + `Subscriber "${subscription.id}" failed to process event for topic "${params.topic}"`, + error, + ); + } + return subscription.id; + })(), + ); + }); + + return { notifiedSubscribers: await Promise.all(onEventPromises) }; + } + + async subscribe(options: EventsServiceSubscribeOptions): Promise { + options.topics.forEach(topic => { + if (!this.#subscribers.has(topic)) { + this.#subscribers.set(topic, []); + } + + this.#subscribers.get(topic)!.push({ + id: options.id, + onEvent: options.onEvent, + }); + }); + } +} + +/** + * Plugin specific events bus that delegates to the local bus, as well as the + * events backend if it is available. + */ +class PluginEventsService implements EventsService { + constructor( + private readonly pluginId: string, + private readonly localBus: LocalEventBus, + private readonly logger: LoggerService, + private client?: DefaultApiClient, + private readonly auth?: AuthService, + ) {} + + async publish(params: EventParams): Promise { + const { notifiedSubscribers } = await this.localBus.publish(params); + + if (!this.client) { + return; + } + const token = await this.#getToken(); + if (!token) { + return; + } + const res = await this.client.postEvent( + { + body: { + event: { payload: params.eventPayload, topic: params.topic }, + subscriptionIds: notifiedSubscribers, + }, + }, + { token }, + ); + + if (!res.ok) { + if (res.status === 404) { + this.logger.warn( + `Event publish request failed with status 404, events backend not found. Future events will not be persisted.`, + ); + delete this.client; + return; + } + throw await ResponseError.fromResponse(res); + } + } + + async subscribe(options: EventsServiceSubscribeOptions): Promise { + const subscriptionId = `${this.pluginId}.${options.id}`; + + await this.localBus.subscribe({ + id: subscriptionId, + topics: options.topics, + onEvent: options.onEvent, + }); + + if (!this.client) { + return; + } + const token = await this.#getToken(); + if (!token) { + return; + } + const res = await this.client.putSubscription( + { + path: { subscriptionId }, + body: { topics: options.topics }, + }, + { token }, + ); + if (!res.ok) { + if (res.status === 404) { + this.logger.warn( + `Event subscribe request failed with status 404, events backend not found. Future events will not be persisted.`, + ); + delete this.client; + return; + } + throw await ResponseError.fromResponse(res); + } + + this.#startPolling(subscriptionId, options.onEvent); + } + + #startPolling( + subscriptionId: string, + onEvent: EventsServiceSubscribeOptions['onEvent'], + ) { + let backoffMs = POLL_BACKOFF_START_MS; + const poll = async () => { + if (!this.client) { + return; + } + try { + const token = await this.#getToken(); + if (!token) { + return; + } + const res = await this.client.getSubscriptionEvents( + { + path: { subscriptionId }, + }, + { token }, + ); + + if (!res.ok) { + throw await ResponseError.fromResponse(res); + } + backoffMs = POLL_BACKOFF_START_MS; + + // 204 arrives after a blocking response and means there are new events + // available or we timed out, either way should should try to read events + // immediately again + if (res.status === 204) { + process.nextTick(poll); + } else if (res.status === 200) { + const data = await res.json(); + if (data) { + for (const event of data.events ?? []) { + try { + await onEvent({ + topic: event.topic, + eventPayload: event.payload, + }); + } catch (error) { + this.logger.warn( + `Subscriber "${subscriptionId}" failed to process event for topic "${event.topic}"`, + error, + ); + } + } + } + process.nextTick(poll); + } else { + this.logger.warn( + `Unexpected response status ${res.status} from events backend for subscription "${subscriptionId}"`, + ); + } + } catch (error) { + this.logger.warn( + `Poll failed for subscription "${subscriptionId}", retrying in ${backoffMs.toFixed( + 0, + )}ms`, + error, + ); + setTimeout(poll, backoffMs); + backoffMs = Math.min( + backoffMs * POLL_BACKOFF_FACTOR, + POLL_BACKOFF_MAX_MS, + ); + } + }; + poll(); + } + + async #getToken() { + if (!this.auth) { + throw new Error('Auth service not available'); + } + + try { + const { token } = await this.auth.getPluginRequestToken({ + onBehalfOf: await this.auth.getOwnServiceCredentials(), + targetPluginId: 'events', + }); + return token; + } catch (error) { + // This is a bit hacky, but handles the case where new auth is used + // without legacy auth fallback, and the events backend is not installed + if (String(error).includes('Unable to generate legacy token')) { + this.logger.warn( + `The events backend is not available and neither is legacy auth. Future events will not be persisted.`, + ); + delete this.client; + return undefined; + } + throw error; + } + } +} /** * In-process event broker which will pass the event to all registered subscribers @@ -28,15 +286,16 @@ import { EventsService, EventsServiceSubscribeOptions } from './EventsService'; */ // TODO(pjungermann): add opentelemetry? (see plugins/catalog-backend/src/util/opentelemetry.ts, etc.) export class DefaultEventsService implements EventsService { - private readonly subscribers = new Map< - string, - Omit[] - >(); - - private constructor(private readonly logger: LoggerService) {} + private constructor( + private readonly logger: LoggerService, + private readonly localBus: LocalEventBus, + ) {} static create(options: { logger: LoggerService }): DefaultEventsService { - return new DefaultEventsService(options.logger); + return new DefaultEventsService( + options.logger, + new LocalEventBus(options.logger), + ); } /** @@ -45,60 +304,36 @@ export class DefaultEventsService implements EventsService { * * @param pluginId - The plugin that the `EventService` should be created for. */ - forPlugin(pluginId: string): EventsService { - return { - publish: (params: EventParams): Promise => { - return this.publish(params); - }, - subscribe: (options: EventsServiceSubscribeOptions): Promise => { - return this.subscribe({ - ...options, - id: `${pluginId}.${options.id}`, - }); - }, - }; - } - - async publish(params: EventParams): Promise { - this.logger.debug( - `Event received: topic=${params.topic}, metadata=${JSON.stringify( - params.metadata, - )}, payload=${JSON.stringify(params.eventPayload)}`, - ); - - if (!this.subscribers.has(params.topic)) { - return; - } - - const onEventPromises: Promise[] = []; - this.subscribers.get(params.topic)?.forEach(subscription => { - onEventPromises.push( - (async () => { - try { - await subscription.onEvent(params); - } catch (error) { - this.logger.warn( - `Subscriber "${subscription.id}" failed to process event for topic "${params.topic}"`, - error, - ); - } - })(), - ); - }); - - await Promise.all(onEventPromises); - } - - async subscribe(options: EventsServiceSubscribeOptions): Promise { - options.topics.forEach(topic => { - if (!this.subscribers.has(topic)) { - this.subscribers.set(topic, []); - } - - this.subscribers.get(topic)!.push({ - id: options.id, - onEvent: options.onEvent, + forPlugin( + pluginId: string, + options?: { + discovery: DiscoveryService; + logger: LoggerService; + auth: AuthService; + }, + ): EventsService { + const client = + options && + new DefaultApiClient({ + discoveryApi: options.discovery, }); - }); + const logger = options?.logger ?? this.logger; + return new PluginEventsService( + pluginId, + this.localBus, + logger, + client, + options?.auth, + ); + } + + /** @deprecated this method should not be called */ + async publish(_params: EventParams): Promise { + throw new NotImplementedError(); + } + + /** @deprecated this method should not be called */ + async subscribe(_options: EventsServiceSubscribeOptions): Promise { + throw new NotImplementedError(); } } diff --git a/plugins/events-node/src/service.ts b/plugins/events-node/src/service.ts index af0e562c80..8d754f6957 100644 --- a/plugins/events-node/src/service.ts +++ b/plugins/events-node/src/service.ts @@ -38,11 +38,18 @@ export const eventsServiceFactory = createServiceFactory({ deps: { pluginMetadata: coreServices.pluginMetadata, rootLogger: coreServices.rootLogger, + discovery: coreServices.discovery, + logger: coreServices.logger, + auth: coreServices.auth, }, async createRootContext({ rootLogger }) { return DefaultEventsService.create({ logger: rootLogger }); }, - async factory({ pluginMetadata }, eventsService) { - return eventsService.forPlugin(pluginMetadata.getId()); + async factory({ pluginMetadata, discovery, logger, auth }, eventsService) { + return eventsService.forPlugin(pluginMetadata.getId(), { + discovery, + logger, + auth, + }); }, }); From 978a9daca87582673673600a268fde01719bba66 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 24 May 2024 17:13:21 +0200 Subject: [PATCH 043/164] events-backend: clean up local dev setup Signed-off-by: Patrik Oldsberg --- plugins/events-backend/dev/index.ts | 106 +++------------------------- 1 file changed, 11 insertions(+), 95 deletions(-) diff --git a/plugins/events-backend/dev/index.ts b/plugins/events-backend/dev/index.ts index 1c0d38215b..1b36751d59 100644 --- a/plugins/events-backend/dev/index.ts +++ b/plugins/events-backend/dev/index.ts @@ -20,7 +20,6 @@ import { createBackendPlugin, } from '@backstage/backend-plugin-api'; import { eventsServiceRef } from '@backstage/plugin-events-node'; -import { DefaultApiClient } from '../../events-node/src/generated'; const backend = createBackend(); @@ -34,16 +33,16 @@ backend.add( deps: { events: eventsServiceRef, logger: coreServices.logger, + rootLifecycle: coreServices.rootLifecycle, }, - async init({ events, logger }) { - // setInterval(() => { - // logger.info(`Publishing event to topic 'test'`); - // events.publish({ - // eventPayload: { foo: 'bar' }, - // topic: 'test', - // metadata: { meta: 'baz' }, - // }); - // }, 5000); + async init({ events, logger, rootLifecycle }) { + rootLifecycle.addStartupHook(async () => { + logger.info(`Publishing event to topic 'test'`); + await events.publish({ + eventPayload: { foo: 'bar' }, + topic: 'test', + }); + }); }, }); }, @@ -58,98 +57,15 @@ backend.add( deps: { events: eventsServiceRef, logger: coreServices.logger, - discovery: coreServices.discovery, - auth: coreServices.auth, - rootLifecycle: coreServices.rootLifecycle, }, - async init({ events, logger, discovery, rootLifecycle, auth }) { - events.subscribe({ + async init({ events, logger }) { + await events.subscribe({ id: 'test-1', topics: ['test'], async onEvent(event) { logger.info(`Received event: ${JSON.stringify(event, null, 2)}`); }, }); - - rootLifecycle.addStartupHook(async () => { - logger.info('Started!'); - - const client = new DefaultApiClient({ discoveryApi: discovery }); - const baseUrl = await discovery.getBaseUrl('events'); - console.log(`DEBUG: baseUrl=`, baseUrl); - const { token } = await auth.getPluginRequestToken({ - onBehalfOf: await auth.getOwnServiceCredentials(), - targetPluginId: 'events', - }); - - const subRes = await client.putSubscription( - { - path: { subscriptionId: '123' }, - body: { topics: ['test'] }, - }, - { token }, - ); - console.log( - `DEBUG: sub create req = ${subRes.status} ${subRes.statusText}`, - ); - const subRes2 = await client.putSubscription( - { - path: { subscriptionId: 'abc' }, - body: { topics: ['test'] }, - }, - { token }, - ); - console.log( - `DEBUG: sub create req = ${subRes2.status} ${subRes2.statusText}`, - ); - - const poll = async () => { - const res = await client.getSubscriptionEvents( - { - path: { subscriptionId: '123' }, - }, - { token }, - ); - - const data = res.status === 200 && (await res.json()); - console.log( - `DEBUG: sub poll req = ${res.status} ${res.statusText}`, - data, - ); - poll(); - }; - poll(); - - const poll2 = async () => { - const res = await client.getSubscriptionEvents( - { - path: { subscriptionId: 'abc' }, - }, - { token }, - ); - - const data = res.status === 200 && (await res.json()); - console.log( - `DEBUG: sub poll2 req = ${res.status} ${res.statusText}`, - data, - ); - poll2(); - }; - poll2(); - - setTimeout(() => { - console.log(`DEBUG: publishing!`); - client.postEvent( - { - body: { - event: { topic: 'test', payload: { foo: 'bar' } }, - subscriptionIds: ['123'], - }, - }, - { token }, - ); - }, 500); - }); }, }); }, From c6e872654368d314d6e83a74afd49e2040342f29 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sat, 25 May 2024 08:36:04 +0200 Subject: [PATCH 044/164] events-backend: lock subscription row when reading Signed-off-by: Patrik Oldsberg --- .../events-backend/src/service/hub/DatabaseEventBusStore.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts index 4e571f71f0..600a038793 100644 --- a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts +++ b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts @@ -324,7 +324,9 @@ export class DatabaseEventBusStore implements EventBusStore { async readSubscription(id: string): Promise<{ events: EventParams[] }> { const result = await this.#db(TABLE_SUBSCRIPTIONS) // Read the target subscription so that we can use the read marker and topics - .with('sub', q => q.select().from(TABLE_SUBSCRIPTIONS).where({ id })) + .with('sub', q => + q.select().from(TABLE_SUBSCRIPTIONS).where({ id }).forUpdate(), + ) // Read the next batch of events for the subscription from its read marker .with('events', q => q From c38913a093603ba3289f79142094c6aba2c3d5b0 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sat, 25 May 2024 08:41:04 +0200 Subject: [PATCH 045/164] events-backend: fix check for already consumed events Signed-off-by: Patrik Oldsberg --- .../events-backend/src/service/hub/DatabaseEventBusStore.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts index 600a038793..e5e69d697d 100644 --- a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts +++ b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts @@ -339,9 +339,9 @@ export class DatabaseEventBusStore implements EventBusStore { this.#db.ref('topics').withSchema('sub').wrap('ANY(', ')'), ) // Skip events that have already been consumed by this subscription - .where( + .whereNot( this.#db.raw('?', id), - '<>', + '=', this.#db.ref('consumed_by').withSchema('event').wrap('ANY(', ')'), ) .where('event.id', '>', this.#db.ref('read_until').withSchema('sub')) From 79f73d9f92510077a09f402f849b7c758f455f9e Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sat, 25 May 2024 09:38:23 +0200 Subject: [PATCH 046/164] events-backend: added cleanup of old events Signed-off-by: Patrik Oldsberg --- .../src/service/EventsPlugin.ts | 15 ++- .../src/service/hub/DatabaseEventBusStore.ts | 92 ++++++++++++++++++- .../src/service/hub/createEventBusRouter.ts | 4 + 3 files changed, 107 insertions(+), 4 deletions(-) diff --git a/plugins/events-backend/src/service/EventsPlugin.ts b/plugins/events-backend/src/service/EventsPlugin.ts index 176d7e2f34..e8769b4a09 100644 --- a/plugins/events-backend/src/service/EventsPlugin.ts +++ b/plugins/events-backend/src/service/EventsPlugin.ts @@ -77,10 +77,19 @@ export const eventsPlugin = createBackendPlugin({ events: eventsServiceRef, database: coreServices.database, logger: coreServices.logger, + scheduler: coreServices.scheduler, httpAuth: coreServices.httpAuth, router: coreServices.httpRouter, }, - async init({ config, events, database, logger, httpAuth, router }) { + async init({ + config, + events, + database, + logger, + scheduler, + httpAuth, + router, + }) { const ingresses = Object.fromEntries( extensionPoint.httpPostIngresses.map(ingress => [ ingress.topic, @@ -97,7 +106,9 @@ export const eventsPlugin = createBackendPlugin({ const eventsRouter = Router(); http.bind(eventsRouter); - router.use(await createEventBusRouter({ database, logger, httpAuth })); + router.use( + await createEventBusRouter({ database, logger, httpAuth, scheduler }), + ); router.use(eventsRouter); router.addAuthPolicy({ diff --git a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts index e5e69d697d..a6260cd0be 100644 --- a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts +++ b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts @@ -19,9 +19,15 @@ import { Knex } from 'knex'; import { DatabaseService, LoggerService, + SchedulerService, resolvePackagePath, } from '@backstage/backend-plugin-api'; import { ForwardedError, NotFoundError } from '@backstage/errors'; +import { HumanDuration, durationToMilliseconds } from '@backstage/types'; + +const WINDOW_SIZE_DEFAULT = 10000; +const WINDOW_MIN_AGE_DEFAULT = { minutes: 10 }; +const WINDOW_MAX_AGE_DEFAULT = { days: 1 }; const MAX_BATCH_SIZE = 10; const LISTENER_CONNECTION_TIMEOUT_MS = 60_000; @@ -208,6 +214,15 @@ export class DatabaseEventBusStore implements EventBusStore { static async create(options: { database: DatabaseService; logger: LoggerService; + scheduler: SchedulerService; + window?: { + /** Events within this range will never be deleted */ + minAge?: HumanDuration; + /** Events outside of this age will always be deleted */ + maxAge?: HumanDuration; + /** Events outside of this count will be deleted if they are outside the minAge window */ + size?: number; + }; }): Promise { const db = await options.database.getClient(); @@ -224,16 +239,43 @@ export class DatabaseEventBusStore implements EventBusStore { options.logger.info('DatabaseEventBusStore migrations ran successfully'); } - return new DatabaseEventBusStore(db, options.logger); + const store = new DatabaseEventBusStore( + db, + options.logger, + options.window?.size ?? WINDOW_SIZE_DEFAULT, + durationToMilliseconds(options.window?.minAge ?? WINDOW_MIN_AGE_DEFAULT), + durationToMilliseconds(options.window?.maxAge ?? WINDOW_MAX_AGE_DEFAULT), + ); + + options.scheduler.scheduleTask({ + id: 'event-bus-cleanup', + frequency: { seconds: 10 }, + timeout: { minutes: 1 }, + fn: store.#cleanup, + }); + + return store; } readonly #db: Knex; readonly #logger: LoggerService; + readonly #windowSize: number; + readonly #windowMinAge: number; + readonly #windowMaxAge: number; readonly #listener: DatabaseEventBusListener; - private constructor(db: Knex, logger: LoggerService) { + private constructor( + db: Knex, + logger: LoggerService, + windowSize: number, + windowMinAge: number, + windowMaxAge: number, + ) { this.#db = db; this.#logger = logger; + this.#windowSize = windowSize; + this.#windowMinAge = windowMinAge; + this.#windowMaxAge = windowMaxAge; this.#listener = new DatabaseEventBusListener(db.client, logger); } @@ -430,4 +472,50 @@ export class DatabaseEventBusStore implements EventBusStore { options.signal.addEventListener('abort', cancel); } } + + #cleanup = async () => { + try { + const eventCount = await this.#db + .delete() + .from(TABLE_EVENTS) + // Delete any events that are outside both the min age and size window + .where('created_at', '<', new Date(Date.now() - this.#windowMinAge)) + .andWhere( + 'id', + '=', + this.#db + .raw( + this.#db + .select('id') + .from(TABLE_EVENTS) + .orderBy('id', 'desc') + .offset(this.#windowSize), + ) + .wrap('ANY(ARRAY(', '))'), + ) + // If events are outside the max age they will always be deleted + .orWhere('created_at', '<', new Date(Date.now() - this.#windowMaxAge)); + this.#logger.info( + `Event cleanup resulted in ${eventCount} old events being deleted`, + ); + } catch (error) { + this.#logger.error('Event cleanup failed', error); + } + + try { + // Delete any subscribers that aren't keeping up with current events + const subscriberCount = await this.#db + .delete() + .from(TABLE_SUBSCRIPTIONS) + .where('read_until', '<', (q: Knex.QueryBuilder) => + q.select(this.#db.raw('MIN(id)')).from(TABLE_EVENTS), + ); + + this.#logger.info( + `Subscription cleanup resulted in ${subscriberCount} stale subscribers being deleted`, + ); + } catch (error) { + this.#logger.error('Subscription cleanup failed', error); + } + }; } diff --git a/plugins/events-backend/src/service/hub/createEventBusRouter.ts b/plugins/events-backend/src/service/hub/createEventBusRouter.ts index 14237650fc..30cd137104 100644 --- a/plugins/events-backend/src/service/hub/createEventBusRouter.ts +++ b/plugins/events-backend/src/service/hub/createEventBusRouter.ts @@ -18,6 +18,7 @@ import { DatabaseService, HttpAuthService, LoggerService, + SchedulerService, } from '@backstage/backend-plugin-api'; import { Handler } from 'express'; import Router from 'express-promise-router'; @@ -32,12 +33,14 @@ const DEFAULT_NOTIFY_TIMEOUT_MS = 55_000; // Just below 60s, which is a common H export async function createEventBusRouter(options: { logger: LoggerService; database: DatabaseService; + scheduler: SchedulerService; httpAuth: HttpAuthService; notifyTimeoutMs?: number; // for testing }): Promise { const { database, httpAuth, + scheduler, notifyTimeoutMs = DEFAULT_NOTIFY_TIMEOUT_MS, } = options; const logger = options.logger.child({ type: 'EventBus' }); @@ -50,6 +53,7 @@ export async function createEventBusRouter(options: { store = await DatabaseEventBusStore.create({ database, logger, + scheduler, }); } else { logger.info('Database is not PostgreSQL, using memory store'); From 0393323d176c6cf1caa5f717e5e3ca687587610e Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sat, 25 May 2024 09:38:44 +0200 Subject: [PATCH 047/164] events-backend: more elaborate local development setup with multiple backends Signed-off-by: Patrik Oldsberg --- plugins/events-backend/dev/index.ts | 100 ++++++++++++++++++++++++---- plugins/events-backend/package.json | 1 + yarn.lock | 1 + 3 files changed, 90 insertions(+), 12 deletions(-) diff --git a/plugins/events-backend/dev/index.ts b/plugins/events-backend/dev/index.ts index 1b36751d59..b629cbf8d0 100644 --- a/plugins/events-backend/dev/index.ts +++ b/plugins/events-backend/dev/index.ts @@ -14,18 +14,60 @@ * limitations under the License. */ +import { WinstonLogger } from '@backstage/backend-app-api'; import { createBackend } from '@backstage/backend-defaults'; import { coreServices, createBackendPlugin, + createServiceFactory, } from '@backstage/backend-plugin-api'; +import { mockServices } from '@backstage/backend-test-utils'; import { eventsServiceRef } from '@backstage/plugin-events-node'; -const backend = createBackend(); +function makeBackend(port: number) { + const backend = createBackend(); -backend.add(import('../src/alpha')); + backend.add( + mockServices.rootConfig.factory({ + data: { + backend: { + baseUrl: `http://localhost:${port}`, + listen: { port }, + database: { + client: 'pg', + connection: { + host: 'localhost', + port: 5432, + user: process.env.USER || 'postgres', + }, + }, + }, + }, + }), + ); + backend.add( + createServiceFactory({ + service: coreServices.rootLogger, + deps: {}, + async factory() { + return WinstonLogger.create({ + meta: { + service: 'backstage', + port, + }, + // level: 'debug', + format: WinstonLogger.colorFormat(), + }); + }, + }), + ); + backend.add(import('../src/alpha')); -backend.add( + return backend; +} + +const backend7008 = makeBackend(7008); +backend7008.add( createBackendPlugin({ pluginId: 'producer', register(reg) { @@ -37,19 +79,29 @@ backend.add( }, async init({ events, logger, rootLifecycle }) { rootLifecycle.addStartupHook(async () => { - logger.info(`Publishing event to topic 'test'`); - await events.publish({ - eventPayload: { foo: 'bar' }, - topic: 'test', - }); + const publish = () => { + logger.info(`Publishing event to topic 'test'`); + events + .publish({ + eventPayload: { foo: 'bar' }, + topic: 'test', + }) + .catch(error => { + logger.error(`Failed to publish event from producer`, error); + }); + }; + publish(); + setInterval(publish, 10000); }); }, }); }, }), ); +backend7008.start(); -backend.add( +const backend7009 = makeBackend(7009); +backend7009.add( createBackendPlugin({ pluginId: 'consumer', register(reg) { @@ -60,10 +112,10 @@ backend.add( }, async init({ events, logger }) { await events.subscribe({ - id: 'test-1', + id: 'test', topics: ['test'], async onEvent(event) { - logger.info(`Received event: ${JSON.stringify(event, null, 2)}`); + logger.info(`Received event: ${JSON.stringify(event)}`); }, }); }, @@ -71,5 +123,29 @@ backend.add( }, }), ); +backend7009.start(); -backend.start(); +const backend7010 = makeBackend(7010); +backend7010.add( + createBackendPlugin({ + pluginId: 'consumer', + register(reg) { + reg.registerInit({ + deps: { + events: eventsServiceRef, + logger: coreServices.logger, + }, + async init({ events, logger }) { + await events.subscribe({ + id: 'test', + topics: ['test'], + async onEvent(event) { + logger.info(`Received event: ${JSON.stringify(event)}`); + }, + }); + }, + }); + }, + }), +); +backend7010.start(); diff --git a/plugins/events-backend/package.json b/plugins/events-backend/package.json index f7a5ecc0c2..06addb0546 100644 --- a/plugins/events-backend/package.json +++ b/plugins/events-backend/package.json @@ -67,6 +67,7 @@ "winston": "^3.2.1" }, "devDependencies": { + "@backstage/backend-app-api": "workspace:^", "@backstage/backend-defaults": "workspace:^", "@backstage/backend-test-utils": "workspace:^", "@backstage/cli": "workspace:^", diff --git a/yarn.lock b/yarn.lock index 58c69ee093..4feebf926f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6137,6 +6137,7 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-events-backend@workspace:plugins/events-backend" dependencies: + "@backstage/backend-app-api": "workspace:^" "@backstage/backend-common": ^0.25.0 "@backstage/backend-defaults": "workspace:^" "@backstage/backend-openapi-utils": "workspace:^" From d3a7aa37386fea62ac1656e4e08d8363f20e0bc5 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sat, 25 May 2024 14:41:48 +0200 Subject: [PATCH 048/164] events-backend: refactor listening API to be promise based + return headers early Signed-off-by: Patrik Oldsberg --- .../src/service/hub/DatabaseEventBusStore.ts | 83 +++++++++---------- .../src/service/hub/MemoryEventBusStore.ts | 46 +++++----- .../src/service/hub/createEventBusRouter.ts | 56 +++++-------- .../events-backend/src/service/hub/types.ts | 6 +- .../src/api/DefaultEventsService.ts | 9 +- 5 files changed, 95 insertions(+), 105 deletions(-) diff --git a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts index a6260cd0be..2146df9b84 100644 --- a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts +++ b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts @@ -82,8 +82,8 @@ class DatabaseEventBusListener { readonly #listeners = new Set<{ topics: Set; - onNotify: (topicId: string) => void; - onError: () => void; + resolve: (result: { topic: string }) => void; + reject: (error: Error) => void; }>(); #connPromise?: Promise; @@ -95,43 +95,37 @@ class DatabaseEventBusListener { this.#logger = logger.child({ type: 'DatabaseEventBusListener' }); } - async listen( + async waitForUpdate( topics: Set, - onNotify: (topicId: string) => void, - onError: () => void, - ): Promise<() => void> { + signal: AbortSignal, + ): Promise<{ topic: string }> { if (this.#connTimeout) { clearTimeout(this.#connTimeout); this.#connTimeout = undefined; } + await this.#ensureConnection(); - const listener = { topics, onNotify, onError }; - this.#listeners.add(listener); + return new Promise<{ topic: string }>((resolve, reject) => { + const listener = { topics, resolve, reject }; + this.#listeners.add(listener); - return () => { - this.#listeners.delete(listener); - - // If we don't have any listeners, destroy the connection after a timeout - if (this.#listeners.size === 0) { - this.#connTimeout = setTimeout(() => { - this.#connPromise?.then(conn => { - this.#logger.info('Listener connection timed out, destroying'); - this.#connPromise = undefined; - this.#destroyConnection(conn); - }); - }, LISTENER_CONNECTION_TIMEOUT_MS); - } - }; + signal.addEventListener('abort', () => { + this.#listeners.delete(listener); + this.#maybeTimeoutConnection(); + }); + }); } #handleNotify(topic: string) { - this.#logger.info(`Listener received notification for topic '${topic}'`); + this.#logger.debug(`Listener received notification for topic '${topic}'`); for (const l of this.#listeners) { if (l.topics.has(topic)) { - l.onNotify(topic); + l.resolve({ topic }); + this.#listeners.delete(l); } } + this.#maybeTimeoutConnection(); } // We don't try to reconnect on error, instead we notify all listeners and let @@ -142,7 +136,23 @@ class DatabaseEventBusListener { error, ); for (const l of this.#listeners) { - l.onError(); + l.reject(new Error('Listener connection failed')); + } + this.#listeners.clear(); + this.#maybeTimeoutConnection(); + } + + #maybeTimeoutConnection() { + // If we don't have any listeners, destroy the connection after a timeout + if (this.#listeners.size === 0 && !this.#connTimeout) { + this.#connTimeout = setTimeout(() => { + this.#connTimeout = undefined; + this.#connPromise?.then(conn => { + this.#logger.info('Listener connection timed out, destroying'); + this.#connPromise = undefined; + this.#destroyConnection(conn); + }); + }, LISTENER_CONNECTION_TIMEOUT_MS); } } @@ -437,14 +447,12 @@ export class DatabaseEventBusStore implements EventBusStore { }; } - async listen( + async setupListener( subscriptionId: string, options: { signal: AbortSignal; - onNotify: (topicId: string) => void; - onError: () => void; }, - ): Promise { + ): Promise<{ waitForUpdate(): Promise<{ topic: string }> }> { const result = await this.#db(TABLE_SUBSCRIPTIONS) .select('topics') .where({ id: subscriptionId }) @@ -456,21 +464,12 @@ export class DatabaseEventBusStore implements EventBusStore { ); } - if (options.signal.aborted) { - return; - } + options.signal.throwIfAborted(); const topics = new Set(result.topics ?? []); - const cancel = await this.#listener.listen( - topics, - options.onNotify, - options.onError, - ); - if (options.signal.aborted) { - cancel(); - } else { - options.signal.addEventListener('abort', cancel); - } + return { + waitForUpdate: () => this.#listener.waitForUpdate(topics, options.signal), + }; } #cleanup = async () => { diff --git a/plugins/events-backend/src/service/hub/MemoryEventBusStore.ts b/plugins/events-backend/src/service/hub/MemoryEventBusStore.ts index 98739fdb33..0fc9a2b14f 100644 --- a/plugins/events-backend/src/service/hub/MemoryEventBusStore.ts +++ b/plugins/events-backend/src/service/hub/MemoryEventBusStore.ts @@ -28,19 +28,19 @@ export class MemoryEventBusStore implements EventBusStore { >(); #listeners = new Set<{ topics: Set; - notify(topicId: string): void; + resolve(result: { topic: string }): void; }>(); async publish(options: { params: EventParams; subscriberIds: string[]; }): Promise<{ id: string } | undefined> { - const topicId = options.params.topic; + const topic = options.params.topic; const subscriberIds = new Set(options.subscriberIds); let hasOtherSubscribers = false; for (const sub of this.#subscribers.values()) { - if (sub.topics.has(topicId) && !subscriberIds.has(sub.id)) { + if (sub.topics.has(topic) && !subscriberIds.has(sub.id)) { hasOtherSubscribers = true; break; } @@ -53,8 +53,9 @@ export class MemoryEventBusStore implements EventBusStore { this.#events.push({ ...options.params, subscriberIds, seq: nextSeq }); for (const listener of this.#listeners) { - if (listener.topics.has(topicId)) { - listener.notify(topicId); + if (listener.topics.has(topic)) { + listener.resolve({ topic }); + this.#listeners.delete(listener); } } return { id: String(nextSeq) }; @@ -97,27 +98,30 @@ export class MemoryEventBusStore implements EventBusStore { return { events: events.map(event => ({ ...event, seq: undefined })) }; } - async listen( + async setupListener( subscriptionId: string, options: { signal: AbortSignal; - onNotify(topicId: string): void; - onError(): void; }, - ): Promise { - if (options.signal.aborted) { - return; - } + ): Promise<{ waitForUpdate(): Promise<{ topic: string }> }> { + return { + waitForUpdate: async () => { + options.signal.throwIfAborted(); - const sub = this.#subscribers.get(subscriptionId); - if (!sub) { - throw new Error(`Subscription not found`); - } - const listener = { topics: sub.topics, notify: options.onNotify }; - this.#listeners.add(listener); + const sub = this.#subscribers.get(subscriptionId); + if (!sub) { + throw new Error(`Subscription not found`); + } - options.signal.addEventListener('abort', () => { - this.#listeners.delete(listener); - }); + return new Promise<{ topic: string }>(resolve => { + const listener = { topics: sub.topics, resolve }; + this.#listeners.add(listener); + + options.signal.addEventListener('abort', () => { + this.#listeners.delete(listener); + }); + }); + }, + }; } } diff --git a/plugins/events-backend/src/service/hub/createEventBusRouter.ts b/plugins/events-backend/src/service/hub/createEventBusRouter.ts index 30cd137104..d9c2bdf3dc 100644 --- a/plugins/events-backend/src/service/hub/createEventBusRouter.ts +++ b/plugins/events-backend/src/service/hub/createEventBusRouter.ts @@ -103,53 +103,22 @@ export async function createEventBusRouter(options: { }); const id = req.params.subscriptionId; - // Don't notify until we know the outcome of reading events - let resolveShouldNotify: (shouldNotify: boolean) => void; - const shouldNotifyPromise = new Promise(resolve => { - resolveShouldNotify = resolve; - }); - const controller = new AbortController(); req.on('end', () => controller.abort()); - let timeout: NodeJS.Timeout | undefined = undefined; - - let notified = false; - const notify = async (status: number) => { - if (!notified) { - clearTimeout(timeout); - notified = true; - if (await shouldNotifyPromise) { - res.status(status).end(); - } - } - }; - // By setting up the listener first we make sure we don't miss any events // that are published while reading. If an event is published we'll receive // a notification, which depending on the outcome of the read we may ignore - await store.listen(id, { + const listener = await store.setupListener(id, { signal: controller.signal, - onNotify() { - notify(204); - }, - onError() { - notify(500); - }, }); // By timing out requests we make sure they don't stall or that events get stuck. // For the caller there's no difference between a timeout and a // notifications, either way they should try reading again. - timeout = setTimeout(() => { - notify(204); + const timeout = setTimeout(() => { controller.abort(); }, notifyTimeoutMs); - shouldNotifyPromise.then(shouldNotify => { - if (!shouldNotify) { - clearTimeout(timeout); - } - }); try { const { events } = await store.readSubscription(id); @@ -162,10 +131,27 @@ export async function createEventBusRouter(options: { if (events.length > 0) { res.json({ events }); } else { - resolveShouldNotify!(true); + res.status(202); + res.flushHeaders(); + + try { + const { topic } = await listener.waitForUpdate(); + logger.info( + `Received notification for subscription '${id}' for topic '${topic}'`, + { subject: credentials.principal.subject }, + ); + } finally { + // A small extra delay ensures a more even spread of events across + // consumers in case some consumers are faster than others + await new Promise(resolve => + setTimeout(resolve, 1 + Math.random() * 9), + ); + res.end(); + } } } finally { - resolveShouldNotify!(false); + controller.abort(); + clearTimeout(timeout); } }, ); diff --git a/plugins/events-backend/src/service/hub/types.ts b/plugins/events-backend/src/service/hub/types.ts index 55159352b4..87e62049a9 100644 --- a/plugins/events-backend/src/service/hub/types.ts +++ b/plugins/events-backend/src/service/hub/types.ts @@ -26,12 +26,10 @@ export type EventBusStore = { readSubscription(id: string): Promise<{ events: EventParams[] }>; - listen( + setupListener( subscriptionId: string, options: { signal: AbortSignal; - onNotify(topicId: string): void; - onError(): void; }, - ): Promise; + ): Promise<{ waitForUpdate(): Promise<{ topic: string }> }>; }; diff --git a/plugins/events-node/src/api/DefaultEventsService.ts b/plugins/events-node/src/api/DefaultEventsService.ts index d1d26b1723..7811349680 100644 --- a/plugins/events-node/src/api/DefaultEventsService.ts +++ b/plugins/events-node/src/api/DefaultEventsService.ts @@ -205,10 +205,12 @@ class PluginEventsService implements EventsService { } backoffMs = POLL_BACKOFF_START_MS; - // 204 arrives after a blocking response and means there are new events - // available or we timed out, either way should should try to read events + // 202 means there were no immediately available events, but the + // response will block until either new events are available or the + // request times out. In both cases we should should try to read events // immediately again - if (res.status === 204) { + if (res.status === 202) { + await res.body?.getReader()?.closed; process.nextTick(poll); } else if (res.status === 200) { const data = await res.json(); @@ -316,6 +318,7 @@ export class DefaultEventsService implements EventsService { options && new DefaultApiClient({ discoveryApi: options.discovery, + fetchApi: { fetch }, // use native node fetch }); const logger = options?.logger ?? this.logger; return new PluginEventsService( From cd243f994fa3714f22206a38b3fc3de48faa5990 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sat, 25 May 2024 15:27:43 +0200 Subject: [PATCH 049/164] events-node: graceful shutdown of events service Signed-off-by: Patrik Oldsberg --- .../src/api/DefaultEventsService.ts | 92 +++++++++++++------ plugins/events-node/src/service.ts | 7 +- 2 files changed, 72 insertions(+), 27 deletions(-) diff --git a/plugins/events-node/src/api/DefaultEventsService.ts b/plugins/events-node/src/api/DefaultEventsService.ts index 7811349680..86083edeb2 100644 --- a/plugins/events-node/src/api/DefaultEventsService.ts +++ b/plugins/events-node/src/api/DefaultEventsService.ts @@ -17,6 +17,7 @@ import { AuthService, DiscoveryService, + LifecycleService, LoggerService, } from '@backstage/backend-plugin-api'; import { EventParams } from './EventParams'; @@ -111,34 +112,39 @@ class PluginEventsService implements EventsService { ) {} async publish(params: EventParams): Promise { - const { notifiedSubscribers } = await this.localBus.publish(params); + const lock = this.#getShutdownLock(); + try { + const { notifiedSubscribers } = await this.localBus.publish(params); - if (!this.client) { - return; - } - const token = await this.#getToken(); - if (!token) { - return; - } - const res = await this.client.postEvent( - { - body: { - event: { payload: params.eventPayload, topic: params.topic }, - subscriptionIds: notifiedSubscribers, - }, - }, - { token }, - ); - - if (!res.ok) { - if (res.status === 404) { - this.logger.warn( - `Event publish request failed with status 404, events backend not found. Future events will not be persisted.`, - ); - delete this.client; + if (!this.client) { return; } - throw await ResponseError.fromResponse(res); + const token = await this.#getToken(); + if (!token) { + return; + } + const res = await this.client.postEvent( + { + body: { + event: { payload: params.eventPayload, topic: params.topic }, + subscriptionIds: notifiedSubscribers, + }, + }, + { token }, + ); + + if (!res.ok) { + if (res.status === 404) { + this.logger.warn( + `Event publish request failed with status 404, events backend not found. Future events will not be persisted.`, + ); + delete this.client; + return; + } + throw await ResponseError.fromResponse(res); + } + } finally { + lock.release(); } } @@ -188,6 +194,7 @@ class PluginEventsService implements EventsService { if (!this.client) { return; } + const lock = this.#getShutdownLock(); try { const token = await this.#getToken(); if (!token) { @@ -210,6 +217,7 @@ class PluginEventsService implements EventsService { // request times out. In both cases we should should try to read events // immediately again if (res.status === 202) { + lock.release(); await res.body?.getReader()?.closed; process.nextTick(poll); } else if (res.status === 200) { @@ -247,6 +255,8 @@ class PluginEventsService implements EventsService { backoffMs * POLL_BACKOFF_FACTOR, POLL_BACKOFF_MAX_MS, ); + } finally { + lock.release(); } }; poll(); @@ -276,6 +286,31 @@ class PluginEventsService implements EventsService { throw error; } } + + async shutdown() { + this.#isShuttingDown = true; + await Promise.all(this.#shutdownLocks); + } + + #isShuttingDown = false; + #shutdownLocks: Promise[] = []; + + // This locking mechanism helps ensure that we are either idle or waiting for + // a blocked events call before shutting down. It increases out changes of + // never dropping any events on shutdown. + #getShutdownLock(): { release(): void } { + if (this.#isShuttingDown) { + throw new Error('Service is shutting down'); + } + + let release: () => void; + this.#shutdownLocks.push( + new Promise(resolve => { + release = resolve; + }), + ); + return { release: release! }; + } } /** @@ -312,6 +347,7 @@ export class DefaultEventsService implements EventsService { discovery: DiscoveryService; logger: LoggerService; auth: AuthService; + lifecycle: LifecycleService; }, ): EventsService { const client = @@ -321,13 +357,17 @@ export class DefaultEventsService implements EventsService { fetchApi: { fetch }, // use native node fetch }); const logger = options?.logger ?? this.logger; - return new PluginEventsService( + const service = new PluginEventsService( pluginId, this.localBus, logger, client, options?.auth, ); + options?.lifecycle.addShutdownHook(async () => { + await service.shutdown(); + }); + return service; } /** @deprecated this method should not be called */ diff --git a/plugins/events-node/src/service.ts b/plugins/events-node/src/service.ts index 8d754f6957..4f758f44e6 100644 --- a/plugins/events-node/src/service.ts +++ b/plugins/events-node/src/service.ts @@ -40,15 +40,20 @@ export const eventsServiceFactory = createServiceFactory({ rootLogger: coreServices.rootLogger, discovery: coreServices.discovery, logger: coreServices.logger, + lifecycle: coreServices.lifecycle, auth: coreServices.auth, }, async createRootContext({ rootLogger }) { return DefaultEventsService.create({ logger: rootLogger }); }, - async factory({ pluginMetadata, discovery, logger, auth }, eventsService) { + async factory( + { pluginMetadata, discovery, logger, lifecycle, auth }, + eventsService, + ) { return eventsService.forPlugin(pluginMetadata.getId(), { discovery, logger, + lifecycle, auth, }); }, From 2e2fc18dcc721e2c9242317236b82c3620bd575c Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sat, 25 May 2024 15:34:54 +0200 Subject: [PATCH 050/164] events-backend: update schema Signed-off-by: Patrik Oldsberg --- .../events-backend/src/schema/openapi.generated.ts | 11 +++-------- plugins/events-backend/src/schema/openapi.yaml | 11 ++--------- .../events-node/src/generated/models/Event.model.ts | 5 ++++- 3 files changed, 9 insertions(+), 18 deletions(-) diff --git a/plugins/events-backend/src/schema/openapi.generated.ts b/plugins/events-backend/src/schema/openapi.generated.ts index d9b3c9045c..4b1db5aeb0 100644 --- a/plugins/events-backend/src/schema/openapi.generated.ts +++ b/plugins/events-backend/src/schema/openapi.generated.ts @@ -73,7 +73,6 @@ export const spec = { description: 'The topic that the event is published on', }, payload: { - $ref: '#/components/schemas/JsonObject', description: 'The event payload', }, }, @@ -117,11 +116,6 @@ export const spec = { }, required: ['error', 'request', 'response'], }, - JsonObject: { - type: 'object', - properties: {}, - additionalProperties: {}, - }, }, securitySchemes: { JWT: { @@ -269,8 +263,9 @@ export const spec = { }, }, }, - '201': { - description: 'Block poll response, new events are available', + '202': { + description: + 'No new events are available. Response will block until the client should try again.', }, default: { $ref: '#/components/responses/ErrorResponse', diff --git a/plugins/events-backend/src/schema/openapi.yaml b/plugins/events-backend/src/schema/openapi.yaml index 632a884139..0d228a7b0b 100644 --- a/plugins/events-backend/src/schema/openapi.yaml +++ b/plugins/events-backend/src/schema/openapi.yaml @@ -39,7 +39,6 @@ components: type: string description: The topic that the event is published on payload: - $ref: '#/components/schemas/JsonObject' description: The event payload Error: @@ -76,12 +75,6 @@ components: - error - request - response - - JsonObject: - type: object - properties: {} - # Free form object. - additionalProperties: {} securitySchemes: JWT: type: http @@ -178,8 +171,8 @@ paths: $ref: '#/components/schemas/Event' required: - results - '201': - description: Block poll response, new events are available + '202': + description: No new events are available. Response will block until the client should try again. default: $ref: '#/components/responses/ErrorResponse' security: diff --git a/plugins/events-node/src/generated/models/Event.model.ts b/plugins/events-node/src/generated/models/Event.model.ts index b5a13b4d8d..a196b42db7 100644 --- a/plugins/events-node/src/generated/models/Event.model.ts +++ b/plugins/events-node/src/generated/models/Event.model.ts @@ -23,5 +23,8 @@ export interface Event { * The topic that the event is published on */ topic: string; - payload: { [key: string]: any }; + /** + * The event payload + */ + payload: any | null; } From 88a1be5ec091c06a9de6c5fe0b042712bda35982 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sat, 25 May 2024 15:41:38 +0200 Subject: [PATCH 051/164] events-node: restore EventParams type Signed-off-by: Patrik Oldsberg --- plugins/events-node/src/api/EventParams.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/plugins/events-node/src/api/EventParams.ts b/plugins/events-node/src/api/EventParams.ts index 9cd88b160f..19a562aee0 100644 --- a/plugins/events-node/src/api/EventParams.ts +++ b/plugins/events-node/src/api/EventParams.ts @@ -14,12 +14,10 @@ * limitations under the License. */ -import { JsonValue } from '@backstage/types'; - /** * @public */ -export interface EventParams { +export interface EventParams { /** * Topic for which this event should be published. */ @@ -31,5 +29,5 @@ export interface EventParams { /** * Metadata (e.g., HTTP headers and similar for events received from external). */ - metadata?: { [name in string]?: string | string[] }; + metadata?: Record; } From 3f7e67bf33058f73b8e977dc4bc55ed64ecf757a Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sat, 25 May 2024 16:03:40 +0200 Subject: [PATCH 052/164] events-backend: add event bus docs Signed-off-by: Patrik Oldsberg --- .../src/service/hub/createEventBusRouter.ts | 87 +++++++++++++++++++ 1 file changed, 87 insertions(+) diff --git a/plugins/events-backend/src/service/hub/createEventBusRouter.ts b/plugins/events-backend/src/service/hub/createEventBusRouter.ts index d9c2bdf3dc..0ebd25d304 100644 --- a/plugins/events-backend/src/service/hub/createEventBusRouter.ts +++ b/plugins/events-backend/src/service/hub/createEventBusRouter.ts @@ -30,6 +30,93 @@ import { EventParams } from '@backstage/plugin-events-node'; const DEFAULT_NOTIFY_TIMEOUT_MS = 55_000; // Just below 60s, which is a common HTTP timeout +/* + +# Event Bus + +This comment describes the event bus that is implemented here in the events +backend, and by default used by the events service. + +## Overview + +The events bus implements a subscription mechanism where subscribers must exist +upfront for events to be stored. It uses a single inbox for all events, with +each subscriber having its own pointer for how far into the inbox it has read. + +In order to avoid busy polling, the API uses a long-polling mechanism where a +request is left hanging until the client should try to read again. + +The event bus is not implemented with any guarantees of events being consumed, +but it does aim to make it unlikely that events are dropped + +## API + +### POST /bus/v1/events + +This endpoint is used to publish new events to the event bus on a specific +topic. It can optionally include a set of subscription IDs for subscribers that +have already been notified of the event. This is to enable an optimization where +we notify subscribers locally if possible, and avoid the need for events to be +relayed through the events bus at all of possible. + +For an event to be published and stored there must already exist a subscriber +that is subscribed to the event's topic, and that hasn't already been notified +of the event. If no such subscriber is found, the event will be discarded. + +### PUT /bus/v1/subscriptions/:subscriptionId + +This endpoint is used to create or update a subscriptions. Subscriptions are +shared across the entire bus and divided by subscription ID. Multiple clients +can be reading events from the same subscription at the same time, but only one +of those clients will receive each event. This enables division of work by using +the same subscriber ID across multiple instances, as well as broadcasting by +ensuring separate subscribers IDs. + +### GET /bus/v1/subscriptions/:subscriptionId/events + +This endpoint is used to read events from a subscription. It will return a batch +of events for the subscribed topics that have not yet been read by the +subscription. If no such events are available, the endpoint will return a 202 +response and then hang end response until an event is available or a timeout is +reached. This allows clients to call this endpoint in a loop but will keep +traffic overhead fairly low. + +## Delivery guarantees + +When reading events from the event bus, clients should always implement a +graceful shutdown where they process any events that are received from the +events endpoint before shutting down. This is also the reason that the events +endpoint does not return any events when responding with a 202 blocking the +response, because there would otherwise be a race condition where the events +might be lost in transit if the client shuts down. By always sending an empty +response and requiring the client to send another request, we ensure that the +client is prepared to halt shutdown until the request had been fully processed. + +## Local processing optimization + +When possible, events will be processed locally before sent to the event bus. +The client will also inform the bus of which subscriptions have already been +notified of the event, so that the bus can completely avoid storing an event if +it has already been fully consumed by all subscribers. + +## Automated cleanup & event window + +Events are deleted once they are outside the guaranteed storage window. By +default the window 10 minutes for all events, and 24 hours for the last 10000 +events. This ensures that the event log doesn't grow indefinitely, while still +allowing subscribers with restarts or outages to catch up to past events, +ensuring that events are likely not lost. + +Subscriptions are also cleaned up if their read pointer falls outside of the +current event window. This ensures that stale subscribers don't accumulate and +cause unnecessary storage of events. + +*/ + +/** + * Creates a new event bus router + * @internal + */ export async function createEventBusRouter(options: { logger: LoggerService; database: DatabaseService; From 4ea914f12e14e95c27e3a5610a79e67c3ae70216 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sat, 25 May 2024 16:03:58 +0200 Subject: [PATCH 053/164] events-node: update API report Signed-off-by: Patrik Oldsberg --- plugins/events-node/api-report.md | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/plugins/events-node/api-report.md b/plugins/events-node/api-report.md index d8a2281faa..a735007e3b 100644 --- a/plugins/events-node/api-report.md +++ b/plugins/events-node/api-report.md @@ -3,6 +3,9 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts +import { AuthService } from '@backstage/backend-plugin-api'; +import { DiscoveryService } from '@backstage/backend-plugin-api'; +import { LifecycleService } from '@backstage/backend-plugin-api'; import { LoggerService } from '@backstage/backend-plugin-api'; import { ServiceFactory } from '@backstage/backend-plugin-api'; import { ServiceRef } from '@backstage/backend-plugin-api'; @@ -11,11 +14,19 @@ import { ServiceRef } from '@backstage/backend-plugin-api'; export class DefaultEventsService implements EventsService { // (undocumented) static create(options: { logger: LoggerService }): DefaultEventsService; - forPlugin(pluginId: string): EventsService; - // (undocumented) - publish(params: EventParams): Promise; - // (undocumented) - subscribe(options: EventsServiceSubscribeOptions): Promise; + forPlugin( + pluginId: string, + options?: { + discovery: DiscoveryService; + logger: LoggerService; + auth: AuthService; + lifecycle: LifecycleService; + }, + ): EventsService; + // @deprecated (undocumented) + publish(_params: EventParams): Promise; + // @deprecated (undocumented) + subscribe(_options: EventsServiceSubscribeOptions): Promise; } // @public @deprecated From 32371edb4b793d9fc5206ab01ca11fa7300cbf9c Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sat, 25 May 2024 16:21:59 +0200 Subject: [PATCH 054/164] events-backend: fix event bus timeout handling Signed-off-by: Patrik Oldsberg --- .../events-backend/src/service/hub/DatabaseEventBusStore.ts | 1 + .../events-backend/src/service/hub/createEventBusRouter.ts | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts index 2146df9b84..720b62bb9c 100644 --- a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts +++ b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts @@ -113,6 +113,7 @@ class DatabaseEventBusListener { signal.addEventListener('abort', () => { this.#listeners.delete(listener); this.#maybeTimeoutConnection(); + reject(signal.reason); }); }); } diff --git a/plugins/events-backend/src/service/hub/createEventBusRouter.ts b/plugins/events-backend/src/service/hub/createEventBusRouter.ts index 0ebd25d304..4a6c34bb6c 100644 --- a/plugins/events-backend/src/service/hub/createEventBusRouter.ts +++ b/plugins/events-backend/src/service/hub/createEventBusRouter.ts @@ -227,6 +227,12 @@ export async function createEventBusRouter(options: { `Received notification for subscription '${id}' for topic '${topic}'`, { subject: credentials.principal.subject }, ); + } catch (error) { + if (error === controller.signal.reason) { + res.end(); + } else { + throw error; + } } finally { // A small extra delay ensures a more even spread of events across // consumers in case some consumers are faster than others From f13bd3e987ce012c153a547a2d022fa860a65903 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sat, 25 May 2024 16:22:32 +0200 Subject: [PATCH 055/164] events-node: try to recreate subscription if it is cleaned up during polling Signed-off-by: Patrik Oldsberg --- .../src/api/DefaultEventsService.ts | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/plugins/events-node/src/api/DefaultEventsService.ts b/plugins/events-node/src/api/DefaultEventsService.ts index 86083edeb2..74e37100e0 100644 --- a/plugins/events-node/src/api/DefaultEventsService.ts +++ b/plugins/events-node/src/api/DefaultEventsService.ts @@ -182,11 +182,12 @@ class PluginEventsService implements EventsService { throw await ResponseError.fromResponse(res); } - this.#startPolling(subscriptionId, options.onEvent); + this.#startPolling(subscriptionId, options.topics, options.onEvent); } #startPolling( subscriptionId: string, + topics: string[], onEvent: EventsServiceSubscribeOptions['onEvent'], ) { let backoffMs = POLL_BACKOFF_START_MS; @@ -208,6 +209,21 @@ class PluginEventsService implements EventsService { ); if (!res.ok) { + if (res.status === 404) { + this.logger.info( + `Polling event subscription resulted in a 404, recreating subscription`, + ); + const putRes = await this.client.putSubscription( + { + path: { subscriptionId }, + body: { topics }, + }, + { token }, + ); + if (!putRes.ok) { + throw await ResponseError.fromResponse(res); + } + } throw await ResponseError.fromResponse(res); } backoffMs = POLL_BACKOFF_START_MS; From 1154a730f68cbd0da3a10104e52a3c22cfe7f888 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sun, 26 May 2024 17:56:43 +0200 Subject: [PATCH 056/164] events-backend: fix schema and response shape Signed-off-by: Patrik Oldsberg --- plugins/events-backend/src/schema/openapi.generated.ts | 2 +- plugins/events-backend/src/schema/openapi.yaml | 4 ++-- .../events-backend/src/service/hub/createEventBusRouter.ts | 7 ++++++- .../models/GetSubscriptionEvents200Response.model.ts | 2 +- 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/plugins/events-backend/src/schema/openapi.generated.ts b/plugins/events-backend/src/schema/openapi.generated.ts index 4b1db5aeb0..d6278ff070 100644 --- a/plugins/events-backend/src/schema/openapi.generated.ts +++ b/plugins/events-backend/src/schema/openapi.generated.ts @@ -250,6 +250,7 @@ export const spec = { 'application/json': { schema: { type: 'object', + required: ['events'], properties: { events: { type: 'array', @@ -258,7 +259,6 @@ export const spec = { }, }, }, - required: ['results'], }, }, }, diff --git a/plugins/events-backend/src/schema/openapi.yaml b/plugins/events-backend/src/schema/openapi.yaml index 0d228a7b0b..48f2c74e5e 100644 --- a/plugins/events-backend/src/schema/openapi.yaml +++ b/plugins/events-backend/src/schema/openapi.yaml @@ -164,13 +164,13 @@ paths: application/json: schema: type: object + required: + - events properties: events: type: array items: $ref: '#/components/schemas/Event' - required: - - results '202': description: No new events are available. Response will block until the client should try again. default: diff --git a/plugins/events-backend/src/service/hub/createEventBusRouter.ts b/plugins/events-backend/src/service/hub/createEventBusRouter.ts index 4a6c34bb6c..a5f67538bf 100644 --- a/plugins/events-backend/src/service/hub/createEventBusRouter.ts +++ b/plugins/events-backend/src/service/hub/createEventBusRouter.ts @@ -216,7 +216,12 @@ export async function createEventBusRouter(options: { ); if (events.length > 0) { - res.json({ events }); + res.json({ + events: events.map(event => ({ + topic: event.topic, + payload: event.eventPayload, + })), + }); } else { res.status(202); res.flushHeaders(); diff --git a/plugins/events-node/src/generated/models/GetSubscriptionEvents200Response.model.ts b/plugins/events-node/src/generated/models/GetSubscriptionEvents200Response.model.ts index 653bfaf3fc..c9fc37f5bb 100644 --- a/plugins/events-node/src/generated/models/GetSubscriptionEvents200Response.model.ts +++ b/plugins/events-node/src/generated/models/GetSubscriptionEvents200Response.model.ts @@ -20,5 +20,5 @@ import { Event } from '../models/Event.model'; export interface GetSubscriptionEvents200Response { - events?: Array; + events: Array; } From 39ec9c97b838b40d857976f10eaee27db0b769e1 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sun, 26 May 2024 17:57:04 +0200 Subject: [PATCH 057/164] events-backend: add event bus integration tests Signed-off-by: Patrik Oldsberg --- .../src/service/EventsPlugin.test.ts | 155 +++++++++++++++++- 1 file changed, 154 insertions(+), 1 deletion(-) diff --git a/plugins/events-backend/src/service/EventsPlugin.test.ts b/plugins/events-backend/src/service/EventsPlugin.test.ts index 48ce1090fb..21be572a20 100644 --- a/plugins/events-backend/src/service/EventsPlugin.test.ts +++ b/plugins/events-backend/src/service/EventsPlugin.test.ts @@ -14,11 +14,17 @@ * limitations under the License. */ +/* eslint-disable jest/expect-expect */ + import { createBackendModule, createServiceFactory, } from '@backstage/backend-plugin-api'; -import { mockServices, startTestBackend } from '@backstage/backend-test-utils'; +import { + mockCredentials, + mockServices, + startTestBackend, +} from '@backstage/backend-test-utils'; import { eventsServiceRef } from '@backstage/plugin-events-node'; import { eventsExtensionPoint } from '@backstage/plugin-events-node/alpha'; import { TestEventsService } from '@backstage/plugin-events-backend-test-utils'; @@ -92,4 +98,151 @@ describe('eventsPlugin', () => { test: 'fake-ext', }); }); + + describe('event bus', () => { + it('should be possible to publish events as a service', async () => { + const { server } = await startTestBackend({ + features: [eventsPlugin()], + }); + + await request(server) + .post('/api/events/bus/v1/events') + .set('authorization', mockCredentials.none.header()) + .send({ event: { topic: 'test', payload: { n: 1 } } }) + .expect(401); + + await request(server) + .post('/api/events/bus/v1/events') + .set('authorization', mockCredentials.user.header()) + .send({ event: { topic: 'test', payload: { n: 1 } } }) + .expect(403); + + await request(server) + .post('/api/events/bus/v1/events') + .set('authorization', mockCredentials.service.header()) + .send({ event: { topic: 'test', payload: { n: 1 } } }) + .expect(204); // 204, since there are no subscribers + }); + + it('should be possible to subscribe as a service and receive an event', async () => { + const { server } = await startTestBackend({ + features: [eventsPlugin()], + }); + + await request(server) + .put('/api/events/bus/v1/subscriptions/tester') + .set('authorization', mockCredentials.none.header()) + .send({ topics: ['test'] }) + .expect(401); + + await request(server) + .put('/api/events/bus/v1/subscriptions/tester') + .set('authorization', mockCredentials.user.header()) + .send({ topics: ['test'] }) + .expect(403); + + await request(server) + .put('/api/events/bus/v1/subscriptions/tester') + .set('authorization', mockCredentials.service.header()) + .send({ topics: ['test'] }) + .expect(201); + + await request(server) + .get('/api/events/bus/v1/subscriptions/tester/events') + .set('authorization', mockCredentials.none.header()) + .send({ topics: ['test'] }) + .expect(401); + + await request(server) + .get('/api/events/bus/v1/subscriptions/tester/events') + .set('authorization', mockCredentials.user.header()) + .send({ topics: ['test'] }) + .expect(403); + + await request(server) + .post('/api/events/bus/v1/events') + .set('authorization', mockCredentials.service.header()) + .send({ event: { topic: 'test', payload: { n: 1 } } }) + .expect(201); // 201, since there is a subscriber + + await request(server) + .get('/api/events/bus/v1/subscriptions/tester/events') + .set('authorization', mockCredentials.service.header()) + .send({ topics: ['test'] }) + .expect(200, { + events: [{ topic: 'test', payload: { n: 1 } }], + }); + }); + }); + + it('should only send an event for each subscriber once', async () => { + const { server } = await startTestBackend({ + features: [eventsPlugin()], + }); + + // 2 subscribers + await request(server) + .put('/api/events/bus/v1/subscriptions/tester-1') + .set('authorization', mockCredentials.service.header()) + .send({ topics: ['test'] }) + .expect(201); + await request(server) + .put('/api/events/bus/v1/subscriptions/tester-2') + .set('authorization', mockCredentials.service.header()) + .send({ topics: ['test'] }) + .expect(201); + + // A single event + await request(server) + .post('/api/events/bus/v1/events') + .set('authorization', mockCredentials.service.header()) + .send({ event: { topic: 'test', payload: { n: 1 } } }) + .expect(201); + + // Single client for subscriber 1 gets the event + await request(server) + .get('/api/events/bus/v1/subscriptions/tester-1/events') + .set('authorization', mockCredentials.service.header()) + .send({ topics: ['test'] }) + .expect(200, { + events: [{ topic: 'test', payload: { n: 1 } }], + }); + + // Two clients for subscriber 2, only one gets the event + const res1 = request(server) + .get('/api/events/bus/v1/subscriptions/tester-2/events') + .set('authorization', mockCredentials.service.header()) + .send({ topics: ['test'] }); + const res2 = request(server) + .get('/api/events/bus/v1/subscriptions/tester-2/events') + .set('authorization', mockCredentials.service.header()) + .send({ topics: ['test'] }); + + const res = await Promise.race([res1, res2]); + expect(res.status).toBe(200); + expect(res.body).toEqual({ + events: [{ topic: 'test', payload: { n: 1 } }], + }); + + // Post another event, which triggers the other client to return + await request(server) + .post('/api/events/bus/v1/events') + .set('authorization', mockCredentials.service.header()) + .send({ event: { topic: 'test', payload: { n: 2 } } }) + .expect(201); + + const otherRes = await Promise.all([res1, res2]).then(rs => + rs.find(r => r !== res), + ); + expect(otherRes?.status).toBe(202); + + // Reading subscriber 2 should now return the second event only + await request(server) + .get('/api/events/bus/v1/subscriptions/tester-2/events') + .set('authorization', mockCredentials.service.header()) + .send({ topics: ['test'] }) + .expect(200, { + events: [{ topic: 'test', payload: { n: 2 } }], + }); + }); }); From 973278ffe1abaf2321d631227e19a7549374cf3f Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sun, 26 May 2024 19:22:29 +0200 Subject: [PATCH 058/164] events-backend: graceful shutdown of listener Signed-off-by: Patrik Oldsberg --- .../src/service/EventsPlugin.ts | 10 ++++++- .../src/service/hub/DatabaseEventBusStore.ts | 29 +++++++++++++++++-- .../src/service/hub/createEventBusRouter.ts | 4 +++ 3 files changed, 40 insertions(+), 3 deletions(-) diff --git a/plugins/events-backend/src/service/EventsPlugin.ts b/plugins/events-backend/src/service/EventsPlugin.ts index e8769b4a09..1369ee98ca 100644 --- a/plugins/events-backend/src/service/EventsPlugin.ts +++ b/plugins/events-backend/src/service/EventsPlugin.ts @@ -78,6 +78,7 @@ export const eventsPlugin = createBackendPlugin({ database: coreServices.database, logger: coreServices.logger, scheduler: coreServices.scheduler, + lifecycle: coreServices.lifecycle, httpAuth: coreServices.httpAuth, router: coreServices.httpRouter, }, @@ -87,6 +88,7 @@ export const eventsPlugin = createBackendPlugin({ database, logger, scheduler, + lifecycle, httpAuth, router, }) { @@ -107,7 +109,13 @@ export const eventsPlugin = createBackendPlugin({ http.bind(eventsRouter); router.use( - await createEventBusRouter({ database, logger, httpAuth, scheduler }), + await createEventBusRouter({ + database, + logger, + httpAuth, + scheduler, + lifecycle, + }), ); router.use(eventsRouter); diff --git a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts index 720b62bb9c..dfcf10ece4 100644 --- a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts +++ b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts @@ -18,6 +18,7 @@ import { EventBusStore } from './types'; import { Knex } from 'knex'; import { DatabaseService, + LifecycleService, LoggerService, SchedulerService, resolvePackagePath, @@ -86,6 +87,7 @@ class DatabaseEventBusListener { reject: (error: Error) => void; }>(); + #isShuttingDown = false; #connPromise?: Promise; #connTimeout?: NodeJS.Timeout; #keepaliveInterval?: NodeJS.Timeout; @@ -118,6 +120,17 @@ class DatabaseEventBusListener { }); } + async shutdown() { + if (this.#isShuttingDown) { + return; + } + this.#isShuttingDown = true; + const conn = await this.#connPromise?.catch(() => undefined); + if (conn) { + this.#destroyConnection(conn); + } + } + #handleNotify(topic: string) { this.#logger.debug(`Listener received notification for topic '${topic}'`); for (const l of this.#listeners) { @@ -169,6 +182,9 @@ class DatabaseEventBusListener { } async #ensureConnection() { + if (this.#isShuttingDown) { + throw new Error('Listener is shutting down'); + } if (this.#connPromise) { await this.#connPromise; return; @@ -226,6 +242,7 @@ export class DatabaseEventBusStore implements EventBusStore { database: DatabaseService; logger: LoggerService; scheduler: SchedulerService; + lifecycle: LifecycleService; window?: { /** Events within this range will never be deleted */ minAge?: HumanDuration; @@ -250,9 +267,12 @@ export class DatabaseEventBusStore implements EventBusStore { options.logger.info('DatabaseEventBusStore migrations ran successfully'); } + const listener = new DatabaseEventBusListener(db.client, options.logger); + const store = new DatabaseEventBusStore( db, options.logger, + listener, options.window?.size ?? WINDOW_SIZE_DEFAULT, durationToMilliseconds(options.window?.minAge ?? WINDOW_MIN_AGE_DEFAULT), durationToMilliseconds(options.window?.maxAge ?? WINDOW_MAX_AGE_DEFAULT), @@ -265,29 +285,34 @@ export class DatabaseEventBusStore implements EventBusStore { fn: store.#cleanup, }); + options.lifecycle.addShutdownHook(async () => { + await listener.shutdown(); + }); + return store; } readonly #db: Knex; readonly #logger: LoggerService; + readonly #listener: DatabaseEventBusListener; readonly #windowSize: number; readonly #windowMinAge: number; readonly #windowMaxAge: number; - readonly #listener: DatabaseEventBusListener; private constructor( db: Knex, logger: LoggerService, + listener: DatabaseEventBusListener, windowSize: number, windowMinAge: number, windowMaxAge: number, ) { this.#db = db; this.#logger = logger; + this.#listener = listener; this.#windowSize = windowSize; this.#windowMinAge = windowMinAge; this.#windowMaxAge = windowMaxAge; - this.#listener = new DatabaseEventBusListener(db.client, logger); } async publish(options: { diff --git a/plugins/events-backend/src/service/hub/createEventBusRouter.ts b/plugins/events-backend/src/service/hub/createEventBusRouter.ts index a5f67538bf..1a702c624b 100644 --- a/plugins/events-backend/src/service/hub/createEventBusRouter.ts +++ b/plugins/events-backend/src/service/hub/createEventBusRouter.ts @@ -17,6 +17,7 @@ import { DatabaseService, HttpAuthService, + LifecycleService, LoggerService, SchedulerService, } from '@backstage/backend-plugin-api'; @@ -121,6 +122,7 @@ export async function createEventBusRouter(options: { logger: LoggerService; database: DatabaseService; scheduler: SchedulerService; + lifecycle: LifecycleService; httpAuth: HttpAuthService; notifyTimeoutMs?: number; // for testing }): Promise { @@ -128,6 +130,7 @@ export async function createEventBusRouter(options: { database, httpAuth, scheduler, + lifecycle, notifyTimeoutMs = DEFAULT_NOTIFY_TIMEOUT_MS, } = options; const logger = options.logger.child({ type: 'EventBus' }); @@ -141,6 +144,7 @@ export async function createEventBusRouter(options: { database, logger, scheduler, + lifecycle, }); } else { logger.info('Database is not PostgreSQL, using memory store'); From 105d68cd09d8a8e8953072b3d6b66f751b6f8c62 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sun, 26 May 2024 21:12:55 +0200 Subject: [PATCH 059/164] eventa-backend: fix for pg listener not actually waiting for initial setup Signed-off-by: Patrik Oldsberg --- .../src/service/hub/DatabaseEventBusStore.ts | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts index dfcf10ece4..53f55ce67f 100644 --- a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts +++ b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts @@ -97,10 +97,10 @@ class DatabaseEventBusListener { this.#logger = logger.child({ type: 'DatabaseEventBusListener' }); } - async waitForUpdate( + async setupListener( topics: Set, signal: AbortSignal, - ): Promise<{ topic: string }> { + ): Promise<{ waitForUpdate(): Promise<{ topic: string }> }> { if (this.#connTimeout) { clearTimeout(this.#connTimeout); this.#connTimeout = undefined; @@ -108,7 +108,7 @@ class DatabaseEventBusListener { await this.#ensureConnection(); - return new Promise<{ topic: string }>((resolve, reject) => { + const updatePromise = new Promise<{ topic: string }>((resolve, reject) => { const listener = { topics, resolve, reject }; this.#listeners.add(listener); @@ -118,6 +118,11 @@ class DatabaseEventBusListener { reject(signal.reason); }); }); + + // Ignore unhandled rejections + updatePromise.catch(() => {}); + + return { waitForUpdate: () => updatePromise }; } async shutdown() { @@ -492,10 +497,10 @@ export class DatabaseEventBusStore implements EventBusStore { options.signal.throwIfAborted(); - const topics = new Set(result.topics ?? []); - return { - waitForUpdate: () => this.#listener.waitForUpdate(topics, options.signal), - }; + return this.#listener.setupListener( + new Set(result.topics ?? []), + options.signal, + ); } #cleanup = async () => { From d2e733c8b6ef860b91c734f2dfb44c9b0ac37f25 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sun, 26 May 2024 21:13:25 +0200 Subject: [PATCH 060/164] events-backend: avoid immediate cleanup job to avoid it running for integration tests Signed-off-by: Patrik Oldsberg --- plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts index 53f55ce67f..9248e1c0e5 100644 --- a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts +++ b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts @@ -287,6 +287,7 @@ export class DatabaseEventBusStore implements EventBusStore { id: 'event-bus-cleanup', frequency: { seconds: 10 }, timeout: { minutes: 1 }, + initialDelay: { seconds: 10 }, fn: store.#cleanup, }); From 65e58b53d805deb4f50abc35cad306131bd2df06 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sun, 26 May 2024 21:14:02 +0200 Subject: [PATCH 061/164] events-backend: fix for subscription failing if there are no events Signed-off-by: Patrik Oldsberg --- .../events-backend/src/service/hub/DatabaseEventBusStore.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts index 9248e1c0e5..0a8dddfe51 100644 --- a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts +++ b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts @@ -392,7 +392,9 @@ export class DatabaseEventBusStore implements EventBusStore { id, updated_at: this.#db.fn.now(), topics, - read_until: this.#db(TABLE_EVENTS).max('id') as any, // TODO: figure out TS, + read_until: this.#db.raw( + `( SELECT COALESCE(MAX("id"), 0) FROM "${TABLE_EVENTS}" )`, + ), }) .onConflict('id') .merge(['topics', 'updated_at']) From 840cab000095004ff14c63a537084973383113f6 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sun, 26 May 2024 21:14:20 +0200 Subject: [PATCH 062/164] events-backend: add integration tests for postgres Signed-off-by: Patrik Oldsberg --- .../src/service/EventsPlugin.test.ts | 287 ++++++++++-------- 1 file changed, 159 insertions(+), 128 deletions(-) diff --git a/plugins/events-backend/src/service/EventsPlugin.test.ts b/plugins/events-backend/src/service/EventsPlugin.test.ts index 21be572a20..e73e636d24 100644 --- a/plugins/events-backend/src/service/EventsPlugin.test.ts +++ b/plugins/events-backend/src/service/EventsPlugin.test.ts @@ -21,6 +21,8 @@ import { createServiceFactory, } from '@backstage/backend-plugin-api'; import { + TestDatabaseId, + TestDatabases, mockCredentials, mockServices, startTestBackend, @@ -100,149 +102,178 @@ describe('eventsPlugin', () => { }); describe('event bus', () => { - it('should be possible to publish events as a service', async () => { - const { server } = await startTestBackend({ - features: [eventsPlugin()], - }); - - await request(server) - .post('/api/events/bus/v1/events') - .set('authorization', mockCredentials.none.header()) - .send({ event: { topic: 'test', payload: { n: 1 } } }) - .expect(401); - - await request(server) - .post('/api/events/bus/v1/events') - .set('authorization', mockCredentials.user.header()) - .send({ event: { topic: 'test', payload: { n: 1 } } }) - .expect(403); - - await request(server) - .post('/api/events/bus/v1/events') - .set('authorization', mockCredentials.service.header()) - .send({ event: { topic: 'test', payload: { n: 1 } } }) - .expect(204); // 204, since there are no subscribers + const databases = TestDatabases.create({ + ids: ['SQLITE_3', 'POSTGRES_9', 'POSTGRES_13', 'POSTGRES_16'], }); - it('should be possible to subscribe as a service and receive an event', async () => { - const { server } = await startTestBackend({ - features: [eventsPlugin()], - }); + async function mockKnexFactory(databaseId: TestDatabaseId) { + const knex = await databases.init(databaseId); + return mockServices.database.mock({ + getClient: async () => knex, + }).factory; + } - await request(server) - .put('/api/events/bus/v1/subscriptions/tester') - .set('authorization', mockCredentials.none.header()) - .send({ topics: ['test'] }) - .expect(401); + it.each(databases.eachSupportedId())( + 'should be possible to publish events as a service, %p', + async databaseId => { + const backend = await startTestBackend({ + features: [eventsPlugin(), await mockKnexFactory(databaseId)], + }); + const { server } = backend; - await request(server) - .put('/api/events/bus/v1/subscriptions/tester') - .set('authorization', mockCredentials.user.header()) - .send({ topics: ['test'] }) - .expect(403); + await request(server) + .post('/api/events/bus/v1/events') + .set('authorization', mockCredentials.none.header()) + .send({ event: { topic: 'test', payload: { n: 1 } } }) + .expect(401); - await request(server) - .put('/api/events/bus/v1/subscriptions/tester') - .set('authorization', mockCredentials.service.header()) - .send({ topics: ['test'] }) - .expect(201); + await request(server) + .post('/api/events/bus/v1/events') + .set('authorization', mockCredentials.user.header()) + .send({ event: { topic: 'test', payload: { n: 1 } } }) + .expect(403); - await request(server) - .get('/api/events/bus/v1/subscriptions/tester/events') - .set('authorization', mockCredentials.none.header()) - .send({ topics: ['test'] }) - .expect(401); + await request(server) + .post('/api/events/bus/v1/events') + .set('authorization', mockCredentials.service.header()) + .send({ event: { topic: 'test', payload: { n: 1 } } }) + .expect(204); // 204, since there are no subscribers - await request(server) - .get('/api/events/bus/v1/subscriptions/tester/events') - .set('authorization', mockCredentials.user.header()) - .send({ topics: ['test'] }) - .expect(403); + await backend.stop(); + }, + ); - await request(server) - .post('/api/events/bus/v1/events') - .set('authorization', mockCredentials.service.header()) - .send({ event: { topic: 'test', payload: { n: 1 } } }) - .expect(201); // 201, since there is a subscriber + it.each(databases.eachSupportedId())( + 'should be possible to subscribe as a service and receive an event, %p', + async databaseId => { + const backend = await startTestBackend({ + features: [eventsPlugin(), await mockKnexFactory(databaseId)], + }); + const { server } = backend; - await request(server) - .get('/api/events/bus/v1/subscriptions/tester/events') - .set('authorization', mockCredentials.service.header()) - .send({ topics: ['test'] }) - .expect(200, { + await request(server) + .put('/api/events/bus/v1/subscriptions/tester') + .set('authorization', mockCredentials.none.header()) + .send({ topics: ['test'] }) + .expect(401); + + await request(server) + .put('/api/events/bus/v1/subscriptions/tester') + .set('authorization', mockCredentials.user.header()) + .send({ topics: ['test'] }) + .expect(403); + + await request(server) + .put('/api/events/bus/v1/subscriptions/tester') + .set('authorization', mockCredentials.service.header()) + .send({ topics: ['test'] }) + .expect(201); + + await request(server) + .get('/api/events/bus/v1/subscriptions/tester/events') + .set('authorization', mockCredentials.none.header()) + .send({ topics: ['test'] }) + .expect(401); + + await request(server) + .get('/api/events/bus/v1/subscriptions/tester/events') + .set('authorization', mockCredentials.user.header()) + .send({ topics: ['test'] }) + .expect(403); + + await request(server) + .post('/api/events/bus/v1/events') + .set('authorization', mockCredentials.service.header()) + .send({ event: { topic: 'test', payload: { n: 1 } } }) + .expect(201); // 201, since there is a subscriber + + await request(server) + .get('/api/events/bus/v1/subscriptions/tester/events') + .set('authorization', mockCredentials.service.header()) + .send({ topics: ['test'] }) + .expect(200, { + events: [{ topic: 'test', payload: { n: 1 } }], + }); + + await backend.stop(); + }, + ); + + it.each(databases.eachSupportedId())( + 'should only send an event for each subscriber once, %p', + async databaseId => { + const backend = await startTestBackend({ + features: [eventsPlugin(), await mockKnexFactory(databaseId)], + }); + const { server } = backend; + + // 2 subscribers + await request(server) + .put('/api/events/bus/v1/subscriptions/tester-1') + .set('authorization', mockCredentials.service.header()) + .send({ topics: ['test'] }) + .expect(201); + await request(server) + .put('/api/events/bus/v1/subscriptions/tester-2') + .set('authorization', mockCredentials.service.header()) + .send({ topics: ['test'] }) + .expect(201); + + // A single event + await request(server) + .post('/api/events/bus/v1/events') + .set('authorization', mockCredentials.service.header()) + .send({ event: { topic: 'test', payload: { n: 1 } } }) + .expect(201); + + // Single client for subscriber 1 gets the event + await request(server) + .get('/api/events/bus/v1/subscriptions/tester-1/events') + .set('authorization', mockCredentials.service.header()) + .send({ topics: ['test'] }) + .expect(200, { + events: [{ topic: 'test', payload: { n: 1 } }], + }); + + // Two clients for subscriber 2, only one gets the event + const res1 = request(server) + .get('/api/events/bus/v1/subscriptions/tester-2/events') + .set('authorization', mockCredentials.service.header()) + .send({ topics: ['test'] }); + const res2 = request(server) + .get('/api/events/bus/v1/subscriptions/tester-2/events') + .set('authorization', mockCredentials.service.header()) + .send({ topics: ['test'] }); + + const res = await Promise.race([res1, res2]); + expect(res.status).toBe(200); + expect(res.body).toEqual({ events: [{ topic: 'test', payload: { n: 1 } }], }); - }); - }); - it('should only send an event for each subscriber once', async () => { - const { server } = await startTestBackend({ - features: [eventsPlugin()], - }); + // Post another event, which triggers the other client to return + await request(server) + .post('/api/events/bus/v1/events') + .set('authorization', mockCredentials.service.header()) + .send({ event: { topic: 'test', payload: { n: 2 } } }) + .expect(201); - // 2 subscribers - await request(server) - .put('/api/events/bus/v1/subscriptions/tester-1') - .set('authorization', mockCredentials.service.header()) - .send({ topics: ['test'] }) - .expect(201); - await request(server) - .put('/api/events/bus/v1/subscriptions/tester-2') - .set('authorization', mockCredentials.service.header()) - .send({ topics: ['test'] }) - .expect(201); + const otherRes = await Promise.all([res1, res2]).then(rs => + rs.find(r => r !== res), + ); + expect(otherRes?.status).toBe(202); - // A single event - await request(server) - .post('/api/events/bus/v1/events') - .set('authorization', mockCredentials.service.header()) - .send({ event: { topic: 'test', payload: { n: 1 } } }) - .expect(201); + // Reading subscriber 2 should now return the second event only + await request(server) + .get('/api/events/bus/v1/subscriptions/tester-2/events') + .set('authorization', mockCredentials.service.header()) + .send({ topics: ['test'] }) + .expect(200, { + events: [{ topic: 'test', payload: { n: 2 } }], + }); - // Single client for subscriber 1 gets the event - await request(server) - .get('/api/events/bus/v1/subscriptions/tester-1/events') - .set('authorization', mockCredentials.service.header()) - .send({ topics: ['test'] }) - .expect(200, { - events: [{ topic: 'test', payload: { n: 1 } }], - }); - - // Two clients for subscriber 2, only one gets the event - const res1 = request(server) - .get('/api/events/bus/v1/subscriptions/tester-2/events') - .set('authorization', mockCredentials.service.header()) - .send({ topics: ['test'] }); - const res2 = request(server) - .get('/api/events/bus/v1/subscriptions/tester-2/events') - .set('authorization', mockCredentials.service.header()) - .send({ topics: ['test'] }); - - const res = await Promise.race([res1, res2]); - expect(res.status).toBe(200); - expect(res.body).toEqual({ - events: [{ topic: 'test', payload: { n: 1 } }], - }); - - // Post another event, which triggers the other client to return - await request(server) - .post('/api/events/bus/v1/events') - .set('authorization', mockCredentials.service.header()) - .send({ event: { topic: 'test', payload: { n: 2 } } }) - .expect(201); - - const otherRes = await Promise.all([res1, res2]).then(rs => - rs.find(r => r !== res), + await backend.stop(); + }, ); - expect(otherRes?.status).toBe(202); - - // Reading subscriber 2 should now return the second event only - await request(server) - .get('/api/events/bus/v1/subscriptions/tester-2/events') - .set('authorization', mockCredentials.service.header()) - .send({ topics: ['test'] }) - .expect(200, { - events: [{ topic: 'test', payload: { n: 2 } }], - }); }); }); From 12dab612507fd08fa42c318158f5d1785b4196a2 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Mon, 27 May 2024 09:47:28 +0200 Subject: [PATCH 063/164] events-backend: use consumedBy everywhere instead of subscriptionIds Signed-off-by: Patrik Oldsberg --- .../src/schema/openapi.generated.ts | 2 +- .../events-backend/src/schema/openapi.yaml | 2 +- .../src/service/hub/DatabaseEventBusStore.ts | 7 ++--- .../src/service/hub/MemoryEventBusStore.ts | 14 +++++----- .../src/service/hub/createEventBusRouter.ts | 26 +++++++++++-------- .../events-backend/src/service/hub/types.ts | 2 +- .../src/api/DefaultEventsService.ts | 2 +- .../models/PostEventRequest.model.ts | 2 +- 8 files changed, 30 insertions(+), 27 deletions(-) diff --git a/plugins/events-backend/src/schema/openapi.generated.ts b/plugins/events-backend/src/schema/openapi.generated.ts index d6278ff070..ef712e2f86 100644 --- a/plugins/events-backend/src/schema/openapi.generated.ts +++ b/plugins/events-backend/src/schema/openapi.generated.ts @@ -159,7 +159,7 @@ export const spec = { event: { $ref: '#/components/schemas/Event', }, - subscriptionIds: { + consumedBy: { type: 'array', description: 'The IDs of subscriptions that have already received this event', diff --git a/plugins/events-backend/src/schema/openapi.yaml b/plugins/events-backend/src/schema/openapi.yaml index 48f2c74e5e..8b2639a189 100644 --- a/plugins/events-backend/src/schema/openapi.yaml +++ b/plugins/events-backend/src/schema/openapi.yaml @@ -106,7 +106,7 @@ paths: properties: event: $ref: '#/components/schemas/Event' - subscriptionIds: + consumedBy: type: array description: The IDs of subscriptions that have already received this event items: diff --git a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts index 0a8dddfe51..87c9263e79 100644 --- a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts +++ b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts @@ -323,9 +323,10 @@ export class DatabaseEventBusStore implements EventBusStore { async publish(options: { params: EventParams; - subscriberIds: string[]; + consumedBy?: string[]; }): Promise<{ id: string } | undefined> { const topic = options.params.topic; + const consumedBy = options.consumedBy ?? []; // This query inserts a new event into the database, but only if there are // subscribers to the topic that have not already been notified const result = await this.#db @@ -351,12 +352,12 @@ export class DatabaseEventBusStore implements EventBusStore { metadata: options.params.metadata, }), ]), - this.#db.raw('?', [options.subscriberIds]), + this.#db.raw('?', [consumedBy]), ) // The rest of this query is to check whether there are any // subscribers that have not been notified yet .from(TABLE_SUBSCRIPTIONS) - .whereNotIn('id', options.subscriberIds) // Skip notified subscribers + .whereNotIn('id', consumedBy) // Skip notified subscribers .andWhere(this.#db.raw('? = ANY(topics)', [topic])) // Match topic .having(this.#db.raw('count(*)'), '>', 0), // Check if there are any results ) diff --git a/plugins/events-backend/src/service/hub/MemoryEventBusStore.ts b/plugins/events-backend/src/service/hub/MemoryEventBusStore.ts index 0fc9a2b14f..23aec6ba97 100644 --- a/plugins/events-backend/src/service/hub/MemoryEventBusStore.ts +++ b/plugins/events-backend/src/service/hub/MemoryEventBusStore.ts @@ -19,9 +19,7 @@ import { EventBusStore } from './types'; const MAX_BATCH_SIZE = 5; export class MemoryEventBusStore implements EventBusStore { - #events = new Array< - EventParams & { seq: number; subscriberIds: Set } - >(); + #events = new Array }>(); #subscribers = new Map< string, { id: string; seq: number; topics: Set } @@ -33,14 +31,14 @@ export class MemoryEventBusStore implements EventBusStore { async publish(options: { params: EventParams; - subscriberIds: string[]; + consumedBy: string[]; }): Promise<{ id: string } | undefined> { const topic = options.params.topic; - const subscriberIds = new Set(options.subscriberIds); + const consumedBy = new Set(options.consumedBy); let hasOtherSubscribers = false; for (const sub of this.#subscribers.values()) { - if (sub.topics.has(topic) && !subscriberIds.has(sub.id)) { + if (sub.topics.has(topic) && !consumedBy.has(sub.id)) { hasOtherSubscribers = true; break; } @@ -50,7 +48,7 @@ export class MemoryEventBusStore implements EventBusStore { } const nextSeq = this.#getMaxSeq() + 1; - this.#events.push({ ...options.params, subscriberIds, seq: nextSeq }); + this.#events.push({ ...options.params, consumedBy, seq: nextSeq }); for (const listener of this.#listeners) { if (listener.topics.has(topic)) { @@ -89,7 +87,7 @@ export class MemoryEventBusStore implements EventBusStore { event => event.seq > sub.seq && sub.topics.has(event.topic) && - !event.subscriberIds.has(id), + !event.consumedBy.has(id), ) .slice(0, MAX_BATCH_SIZE); diff --git a/plugins/events-backend/src/service/hub/createEventBusRouter.ts b/plugins/events-backend/src/service/hub/createEventBusRouter.ts index 1a702c624b..566574f6e8 100644 --- a/plugins/events-backend/src/service/hub/createEventBusRouter.ts +++ b/plugins/events-backend/src/service/hub/createEventBusRouter.ts @@ -160,13 +160,13 @@ export async function createEventBusRouter(options: { allow: ['service'], }); const topic = req.body.event.topic; - const subscriberIds = req.body.subscriptionIds ?? []; + const consumedBy = req.body.consumedBy; const result = await store.publish({ params: { topic, eventPayload: req.body.event.payload, } as EventParams, - subscriberIds, + consumedBy: req.body.consumedBy, }); if (result) { logger.info(`Published event to '${topic}' with ID '${result.id}'`, { @@ -174,14 +174,18 @@ export async function createEventBusRouter(options: { }); res.status(201).end(); } else { - logger.info( - `Skipped publishing of event to '${topic}', subscribers have already been notified: '${subscriberIds.join( - "', '", - )}'`, - { - subject: credentials.principal.subject, - }, - ); + if (consumedBy) { + const notified = `'${consumedBy.join("', '")}'`; + logger.info( + `Skipped publishing of event to '${topic}', subscribers have already been notified: ${notified}`, + { subject: credentials.principal.subject }, + ); + } else { + logger.info( + `Skipped publishing of event to '${topic}', no subscribers present`, + { subject: credentials.principal.subject }, + ); + } res.status(204).end(); } }); @@ -267,7 +271,7 @@ export async function createEventBusRouter(options: { await store.upsertSubscription(id, req.body.topics); logger.info( - `New subscription '${id}' topics='${req.body.topics.join("', '")}'`, + `New subscription '${id}' for topics '${req.body.topics.join("', '")}'`, { subject: credentials.principal.subject }, ); diff --git a/plugins/events-backend/src/service/hub/types.ts b/plugins/events-backend/src/service/hub/types.ts index 87e62049a9..315a4a7220 100644 --- a/plugins/events-backend/src/service/hub/types.ts +++ b/plugins/events-backend/src/service/hub/types.ts @@ -19,7 +19,7 @@ import { EventParams } from '@backstage/plugin-events-node'; export type EventBusStore = { publish(options: { params: EventParams; - subscriberIds: string[]; + consumedBy?: string[]; }): Promise<{ id: string } | undefined>; upsertSubscription(id: string, topics: string[]): Promise; diff --git a/plugins/events-node/src/api/DefaultEventsService.ts b/plugins/events-node/src/api/DefaultEventsService.ts index 74e37100e0..5a2712fc89 100644 --- a/plugins/events-node/src/api/DefaultEventsService.ts +++ b/plugins/events-node/src/api/DefaultEventsService.ts @@ -127,7 +127,7 @@ class PluginEventsService implements EventsService { { body: { event: { payload: params.eventPayload, topic: params.topic }, - subscriptionIds: notifiedSubscribers, + consumedBy: notifiedSubscribers, }, }, { token }, diff --git a/plugins/events-node/src/generated/models/PostEventRequest.model.ts b/plugins/events-node/src/generated/models/PostEventRequest.model.ts index 527064bc13..04eaaab461 100644 --- a/plugins/events-node/src/generated/models/PostEventRequest.model.ts +++ b/plugins/events-node/src/generated/models/PostEventRequest.model.ts @@ -24,5 +24,5 @@ export interface PostEventRequest { /** * The IDs of subscriptions that have already received this event */ - subscriptionIds?: Array; + consumedBy?: Array; } From 6bc5b882d24a699b795863700d99e809ee36fa9e Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Mon, 27 May 2024 09:56:40 +0200 Subject: [PATCH 064/164] events-backend: refactor event bus tests to use helper Signed-off-by: Patrik Oldsberg --- .../src/service/EventsPlugin.test.ts | 150 ++++++++---------- 1 file changed, 67 insertions(+), 83 deletions(-) diff --git a/plugins/events-backend/src/service/EventsPlugin.test.ts b/plugins/events-backend/src/service/EventsPlugin.test.ts index e73e636d24..f6e0799695 100644 --- a/plugins/events-backend/src/service/EventsPlugin.test.ts +++ b/plugins/events-backend/src/service/EventsPlugin.test.ts @@ -21,6 +21,7 @@ import { createServiceFactory, } from '@backstage/backend-plugin-api'; import { + TestBackend, TestDatabaseId, TestDatabases, mockCredentials, @@ -102,6 +103,38 @@ describe('eventsPlugin', () => { }); describe('event bus', () => { + class ReqHelper { + constructor(private readonly backend: TestBackend) {} + + subscribe(id: string, topics: string[], options?: { auth?: string }) { + return request(this.backend.server) + .put(`/api/events/bus/v1/subscriptions/${id}`) + .set( + 'authorization', + options?.auth ?? mockCredentials.service.header(), + ) + .send({ topics }); + } + + publish( + topic: string, + payload: unknown, + options?: { consumedBy?: string[] }, + ) { + return request(this.backend.server) + .post('/api/events/bus/v1/events') + .set('authorization', mockCredentials.service.header()) + .send({ event: { topic, payload }, consumedBy: options?.consumedBy }); + } + + readEvents(id: string) { + return request(this.backend.server) + .get(`/api/events/bus/v1/subscriptions/${id}/events`) + .set('authorization', mockCredentials.service.header()) + .send(); + } + } + const databases = TestDatabases.create({ ids: ['SQLITE_3', 'POSTGRES_9', 'POSTGRES_13', 'POSTGRES_16'], }); @@ -119,24 +152,21 @@ describe('eventsPlugin', () => { const backend = await startTestBackend({ features: [eventsPlugin(), await mockKnexFactory(databaseId)], }); - const { server } = backend; + const helper = new ReqHelper(backend); - await request(server) - .post('/api/events/bus/v1/events') + await helper + .publish('test', { n: 1 }) .set('authorization', mockCredentials.none.header()) - .send({ event: { topic: 'test', payload: { n: 1 } } }) .expect(401); - await request(server) - .post('/api/events/bus/v1/events') + await helper + .publish('test', { n: 1 }) .set('authorization', mockCredentials.user.header()) - .send({ event: { topic: 'test', payload: { n: 1 } } }) .expect(403); - await request(server) - .post('/api/events/bus/v1/events') + await helper + .publish('test', { n: 1 }) .set('authorization', mockCredentials.service.header()) - .send({ event: { topic: 'test', payload: { n: 1 } } }) .expect(204); // 204, since there are no subscribers await backend.stop(); @@ -149,51 +179,35 @@ describe('eventsPlugin', () => { const backend = await startTestBackend({ features: [eventsPlugin(), await mockKnexFactory(databaseId)], }); - const { server } = backend; + const helper = new ReqHelper(backend); - await request(server) - .put('/api/events/bus/v1/subscriptions/tester') + await helper + .subscribe('tester', ['test']) .set('authorization', mockCredentials.none.header()) - .send({ topics: ['test'] }) .expect(401); - await request(server) - .put('/api/events/bus/v1/subscriptions/tester') + await helper + .subscribe('tester', ['test']) .set('authorization', mockCredentials.user.header()) - .send({ topics: ['test'] }) .expect(403); - await request(server) - .put('/api/events/bus/v1/subscriptions/tester') - .set('authorization', mockCredentials.service.header()) - .send({ topics: ['test'] }) - .expect(201); + await helper.subscribe('tester', ['test']).expect(201); - await request(server) - .get('/api/events/bus/v1/subscriptions/tester/events') + await helper + .readEvents('tester') .set('authorization', mockCredentials.none.header()) - .send({ topics: ['test'] }) .expect(401); - await request(server) - .get('/api/events/bus/v1/subscriptions/tester/events') + await helper + .readEvents('tester') .set('authorization', mockCredentials.user.header()) - .send({ topics: ['test'] }) .expect(403); - await request(server) - .post('/api/events/bus/v1/events') - .set('authorization', mockCredentials.service.header()) - .send({ event: { topic: 'test', payload: { n: 1 } } }) - .expect(201); // 201, since there is a subscriber + await helper.publish('test', { n: 1 }).expect(201); // 201, since there is a subscriber - await request(server) - .get('/api/events/bus/v1/subscriptions/tester/events') - .set('authorization', mockCredentials.service.header()) - .send({ topics: ['test'] }) - .expect(200, { - events: [{ topic: 'test', payload: { n: 1 } }], - }); + await helper.readEvents('tester').expect(200, { + events: [{ topic: 'test', payload: { n: 1 } }], + }); await backend.stop(); }, @@ -205,45 +219,23 @@ describe('eventsPlugin', () => { const backend = await startTestBackend({ features: [eventsPlugin(), await mockKnexFactory(databaseId)], }); - const { server } = backend; + const helper = new ReqHelper(backend); // 2 subscribers - await request(server) - .put('/api/events/bus/v1/subscriptions/tester-1') - .set('authorization', mockCredentials.service.header()) - .send({ topics: ['test'] }) - .expect(201); - await request(server) - .put('/api/events/bus/v1/subscriptions/tester-2') - .set('authorization', mockCredentials.service.header()) - .send({ topics: ['test'] }) - .expect(201); + await helper.subscribe('tester-1', ['test']).expect(201); + await helper.subscribe('tester-2', ['test']).expect(201); // A single event - await request(server) - .post('/api/events/bus/v1/events') - .set('authorization', mockCredentials.service.header()) - .send({ event: { topic: 'test', payload: { n: 1 } } }) - .expect(201); + await helper.publish('test', { n: 1 }).expect(201); // Single client for subscriber 1 gets the event - await request(server) - .get('/api/events/bus/v1/subscriptions/tester-1/events') - .set('authorization', mockCredentials.service.header()) - .send({ topics: ['test'] }) - .expect(200, { - events: [{ topic: 'test', payload: { n: 1 } }], - }); + await helper.readEvents('tester-1').expect(200, { + events: [{ topic: 'test', payload: { n: 1 } }], + }); // Two clients for subscriber 2, only one gets the event - const res1 = request(server) - .get('/api/events/bus/v1/subscriptions/tester-2/events') - .set('authorization', mockCredentials.service.header()) - .send({ topics: ['test'] }); - const res2 = request(server) - .get('/api/events/bus/v1/subscriptions/tester-2/events') - .set('authorization', mockCredentials.service.header()) - .send({ topics: ['test'] }); + const res1 = helper.readEvents('tester-2'); + const res2 = helper.readEvents('tester-2'); const res = await Promise.race([res1, res2]); expect(res.status).toBe(200); @@ -252,11 +244,7 @@ describe('eventsPlugin', () => { }); // Post another event, which triggers the other client to return - await request(server) - .post('/api/events/bus/v1/events') - .set('authorization', mockCredentials.service.header()) - .send({ event: { topic: 'test', payload: { n: 2 } } }) - .expect(201); + await helper.publish('test', { n: 2 }).expect(201); const otherRes = await Promise.all([res1, res2]).then(rs => rs.find(r => r !== res), @@ -264,13 +252,9 @@ describe('eventsPlugin', () => { expect(otherRes?.status).toBe(202); // Reading subscriber 2 should now return the second event only - await request(server) - .get('/api/events/bus/v1/subscriptions/tester-2/events') - .set('authorization', mockCredentials.service.header()) - .send({ topics: ['test'] }) - .expect(200, { - events: [{ topic: 'test', payload: { n: 2 } }], - }); + await helper.readEvents('tester-2').expect(200, { + events: [{ topic: 'test', payload: { n: 2 } }], + }); await backend.stop(); }, From 24b86599c72610e720243f44e303a293bfed6a2b Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Mon, 27 May 2024 11:26:56 +0200 Subject: [PATCH 065/164] events-backend: always use batch size 10 for events bus Signed-off-by: Patrik Oldsberg --- plugins/events-backend/src/service/hub/MemoryEventBusStore.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/events-backend/src/service/hub/MemoryEventBusStore.ts b/plugins/events-backend/src/service/hub/MemoryEventBusStore.ts index 23aec6ba97..1e95efc3de 100644 --- a/plugins/events-backend/src/service/hub/MemoryEventBusStore.ts +++ b/plugins/events-backend/src/service/hub/MemoryEventBusStore.ts @@ -16,7 +16,7 @@ import { EventParams } from '@backstage/plugin-events-node'; import { EventBusStore } from './types'; -const MAX_BATCH_SIZE = 5; +const MAX_BATCH_SIZE = 10; export class MemoryEventBusStore implements EventBusStore { #events = new Array }>(); From 9631d2a9e4974b333c7bf307415aa5b99e571192 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Mon, 27 May 2024 11:27:20 +0200 Subject: [PATCH 066/164] events-backend: more tests for events bus Signed-off-by: Patrik Oldsberg --- .../src/service/EventsPlugin.test.ts | 109 ++++++++++++++++++ 1 file changed, 109 insertions(+) diff --git a/plugins/events-backend/src/service/EventsPlugin.test.ts b/plugins/events-backend/src/service/EventsPlugin.test.ts index f6e0799695..dbf7249e0e 100644 --- a/plugins/events-backend/src/service/EventsPlugin.test.ts +++ b/plugins/events-backend/src/service/EventsPlugin.test.ts @@ -259,5 +259,114 @@ describe('eventsPlugin', () => { await backend.stop(); }, ); + + it.each(databases.eachSupportedId())( + 'should should not notify subscribers that have already consumed the event, %p', + async databaseId => { + const backend = await startTestBackend({ + features: [eventsPlugin(), await mockKnexFactory(databaseId)], + }); + const helper = new ReqHelper(backend); + + // 2 subscribers + await helper.subscribe('tester-1', ['test']).expect(201); + await helper.subscribe('tester-2', ['test']).expect(201); + + // A single event for each subscriber, that should not be sent to the other one + await helper + .publish( + 'test', + { for: 'tester-2' }, + { + consumedBy: ['tester-1'], + }, + ) + .expect(201); + await helper + .publish( + 'test', + { for: 'tester-1' }, + { + consumedBy: ['tester-2'], + }, + ) + .expect(201); + + // Single client for subscriber 1 gets the event + await helper.readEvents('tester-1').expect(200, { + events: [{ topic: 'test', payload: { for: 'tester-1' } }], + }); + // Single client for subscriber 1 gets the event + await helper.readEvents('tester-2').expect(200, { + events: [{ topic: 'test', payload: { for: 'tester-2' } }], + }); + + await backend.stop(); + }, + ); + + it.each(databases.eachSupportedId())( + 'should return multiple events in order, %p', + async databaseId => { + const backend = await startTestBackend({ + features: [eventsPlugin(), await mockKnexFactory(databaseId)], + }); + const helper = new ReqHelper(backend); + + // 2 subscribers + await helper.subscribe('tester', ['test']).expect(201); + + // A single event for each subscriber, that should not be sent to the other one + for (let n = 0; n < 15; ++n) { + await helper.publish('test', { n }).expect(201); + } + + // Batch size it 10 + await helper.readEvents('tester').expect(200, { + events: [ + { topic: 'test', payload: { n: 0 } }, + { topic: 'test', payload: { n: 1 } }, + { topic: 'test', payload: { n: 2 } }, + { topic: 'test', payload: { n: 3 } }, + { topic: 'test', payload: { n: 4 } }, + { topic: 'test', payload: { n: 5 } }, + { topic: 'test', payload: { n: 6 } }, + { topic: 'test', payload: { n: 7 } }, + { topic: 'test', payload: { n: 8 } }, + { topic: 'test', payload: { n: 9 } }, + ], + }); + + await helper.readEvents('tester').expect(200, { + events: [ + { topic: 'test', payload: { n: 10 } }, + { topic: 'test', payload: { n: 11 } }, + { topic: 'test', payload: { n: 12 } }, + { topic: 'test', payload: { n: 13 } }, + { topic: 'test', payload: { n: 14 } }, + ], + }); + + await backend.stop(); + }, + ); + + it.each(databases.eachSupportedId())( + 'should skip publishing if all subscribers have already consumed the event, %p', + async databaseId => { + const backend = await startTestBackend({ + features: [eventsPlugin(), await mockKnexFactory(databaseId)], + }); + const helper = new ReqHelper(backend); + + await helper.subscribe('tester', ['test']).expect(201); + + await helper + .publish('test', { for: 'tester-2' }, { consumedBy: ['tester'] }) + .expect(204); + + await backend.stop(); + }, + ); }); }); From 66487229ccd28da113b9d98613e96b8fa22d9fc9 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Mon, 27 May 2024 11:51:41 +0200 Subject: [PATCH 067/164] events-backend: fix for memory store not timing out listeners Signed-off-by: Patrik Oldsberg --- plugins/events-backend/src/service/hub/MemoryEventBusStore.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plugins/events-backend/src/service/hub/MemoryEventBusStore.ts b/plugins/events-backend/src/service/hub/MemoryEventBusStore.ts index 1e95efc3de..629c341a76 100644 --- a/plugins/events-backend/src/service/hub/MemoryEventBusStore.ts +++ b/plugins/events-backend/src/service/hub/MemoryEventBusStore.ts @@ -111,12 +111,13 @@ export class MemoryEventBusStore implements EventBusStore { throw new Error(`Subscription not found`); } - return new Promise<{ topic: string }>(resolve => { + return new Promise<{ topic: string }>((resolve, reject) => { const listener = { topics: sub.topics, resolve }; this.#listeners.add(listener); options.signal.addEventListener('abort', () => { this.#listeners.delete(listener); + reject(options.signal.reason); }); }); }, From a97b71ab07a7cca2276f6766d2f608dd050314ff Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Mon, 27 May 2024 11:51:59 +0200 Subject: [PATCH 068/164] events-backend: fix blocking request being ended too early Signed-off-by: Patrik Oldsberg --- .../events-backend/src/service/hub/createEventBusRouter.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/plugins/events-backend/src/service/hub/createEventBusRouter.ts b/plugins/events-backend/src/service/hub/createEventBusRouter.ts index 566574f6e8..60dc5fac3f 100644 --- a/plugins/events-backend/src/service/hub/createEventBusRouter.ts +++ b/plugins/events-backend/src/service/hub/createEventBusRouter.ts @@ -241,9 +241,7 @@ export async function createEventBusRouter(options: { { subject: credentials.principal.subject }, ); } catch (error) { - if (error === controller.signal.reason) { - res.end(); - } else { + if (error !== controller.signal.reason) { throw error; } } finally { From 692c505a38bf1b4ae4b46712741213db6596cee1 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Mon, 27 May 2024 11:52:19 +0200 Subject: [PATCH 069/164] events-backend: added event hub test for blocking events response Signed-off-by: Patrik Oldsberg --- .../src/service/EventsPlugin.test.ts | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/plugins/events-backend/src/service/EventsPlugin.test.ts b/plugins/events-backend/src/service/EventsPlugin.test.ts index dbf7249e0e..3c08637b1f 100644 --- a/plugins/events-backend/src/service/EventsPlugin.test.ts +++ b/plugins/events-backend/src/service/EventsPlugin.test.ts @@ -368,5 +368,53 @@ describe('eventsPlugin', () => { await backend.stop(); }, ); + + it.each(databases.eachSupportedId())( + 'should time out when no events are available, %p', + async databaseId => { + const backend = await startTestBackend({ + features: [eventsPlugin(), await mockKnexFactory(databaseId)], + }); + const helper = new ReqHelper(backend); + await helper.subscribe('tester', ['test']).expect(201); + + jest.useFakeTimers({ + doNotFake: ['nextTick'], + }); + + try { + // Can't use supertest for this one because it can't handle the partially blocking response + const res = await fetch( + `http://localhost:${backend.server.port()}/api/events/bus/v1/subscriptions/tester/events`, + { + headers: { + authorization: mockCredentials.service.header(), + }, + }, + ); + + expect(res.status).toBe(202); + + const { closed } = res.body!.getReader(); + const checkClosed = () => + Promise.race([ + closed.then(() => true), + new Promise(r => process.nextTick(() => r(false))), + ]); + + await expect(checkClosed()).resolves.toBe(false); + + await jest.advanceTimersByTimeAsync(30000); + await expect(checkClosed()).resolves.toBe(false); + + await jest.advanceTimersByTimeAsync(30000); + await expect(checkClosed()).resolves.toBe(true); + } finally { + jest.useRealTimers(); + } + + await backend.stop(); + }, + ); }); }); From a19caf26973f501549f2d7cdb51124c64b2428ef Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Mon, 27 May 2024 13:34:02 +0200 Subject: [PATCH 070/164] events-backend: fix error when reading subscription with empty events table Signed-off-by: Patrik Oldsberg --- plugins/events-backend/src/service/EventsPlugin.test.ts | 2 +- plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/events-backend/src/service/EventsPlugin.test.ts b/plugins/events-backend/src/service/EventsPlugin.test.ts index 3c08637b1f..215d4e9190 100644 --- a/plugins/events-backend/src/service/EventsPlugin.test.ts +++ b/plugins/events-backend/src/service/EventsPlugin.test.ts @@ -379,7 +379,7 @@ describe('eventsPlugin', () => { await helper.subscribe('tester', ['test']).expect(201); jest.useFakeTimers({ - doNotFake: ['nextTick'], + advanceTimers: true, }); try { diff --git a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts index 87c9263e79..6694703a2e 100644 --- a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts +++ b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts @@ -447,7 +447,7 @@ export class DatabaseEventBusStore implements EventBusStore { // events where read, the last ID out of all events .update({ read_until: this.#db.raw( - 'COALESCE(last_event_id, (SELECT MAX(id) FROM event_bus_events))', + 'COALESCE(last_event_id, (SELECT MAX(id) FROM event_bus_events), 0)', ), }) .updateFrom({ From 362571f6771e5d2cfee7c34e5fcfc399f43e26ea Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Mon, 27 May 2024 13:34:59 +0200 Subject: [PATCH 071/164] events-backend: log blocking event response errors instead of attempting to return them Signed-off-by: Patrik Oldsberg --- plugins/events-backend/src/service/hub/createEventBusRouter.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/events-backend/src/service/hub/createEventBusRouter.ts b/plugins/events-backend/src/service/hub/createEventBusRouter.ts index 60dc5fac3f..2e1dc043db 100644 --- a/plugins/events-backend/src/service/hub/createEventBusRouter.ts +++ b/plugins/events-backend/src/service/hub/createEventBusRouter.ts @@ -242,7 +242,7 @@ export async function createEventBusRouter(options: { ); } catch (error) { if (error !== controller.signal.reason) { - throw error; + logger.error(`Error listening for subscription '${id}'`, error); } } finally { // A small extra delay ensures a more even spread of events across From 1e8e3f9283243e600d6b0c875c0b7986d4af96d1 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Mon, 27 May 2024 13:38:47 +0200 Subject: [PATCH 072/164] events-backend: test for reading events without subscription + fix error Signed-off-by: Patrik Oldsberg --- .../src/service/EventsPlugin.test.ts | 14 ++++++++++++++ .../src/service/hub/MemoryEventBusStore.ts | 5 +++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/plugins/events-backend/src/service/EventsPlugin.test.ts b/plugins/events-backend/src/service/EventsPlugin.test.ts index 215d4e9190..53f84ffed1 100644 --- a/plugins/events-backend/src/service/EventsPlugin.test.ts +++ b/plugins/events-backend/src/service/EventsPlugin.test.ts @@ -416,5 +416,19 @@ describe('eventsPlugin', () => { await backend.stop(); }, ); + + it.each(databases.eachSupportedId())( + 'should refuse listen without a subscription, %p', + async databaseId => { + const backend = await startTestBackend({ + features: [eventsPlugin(), await mockKnexFactory(databaseId)], + }); + const helper = new ReqHelper(backend); + + await helper.readEvents('nonexistent').expect(404); + + await backend.stop(); + }, + ); }); }); diff --git a/plugins/events-backend/src/service/hub/MemoryEventBusStore.ts b/plugins/events-backend/src/service/hub/MemoryEventBusStore.ts index 629c341a76..3071a51edf 100644 --- a/plugins/events-backend/src/service/hub/MemoryEventBusStore.ts +++ b/plugins/events-backend/src/service/hub/MemoryEventBusStore.ts @@ -15,6 +15,7 @@ */ import { EventParams } from '@backstage/plugin-events-node'; import { EventBusStore } from './types'; +import { NotFoundError } from '@backstage/errors'; const MAX_BATCH_SIZE = 10; @@ -80,7 +81,7 @@ export class MemoryEventBusStore implements EventBusStore { async readSubscription(id: string): Promise<{ events: EventParams[] }> { const sub = this.#subscribers.get(id); if (!sub) { - throw new Error(`Subscription not found`); + throw new NotFoundError(`Subscription not found`); } const events = this.#events .filter( @@ -108,7 +109,7 @@ export class MemoryEventBusStore implements EventBusStore { const sub = this.#subscribers.get(subscriptionId); if (!sub) { - throw new Error(`Subscription not found`); + throw new NotFoundError(`Subscription not found`); } return new Promise<{ topic: string }>((resolve, reject) => { From 2c9ea899c7c07857e98ba42deb40607b7f8388e9 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Mon, 27 May 2024 15:07:34 +0200 Subject: [PATCH 073/164] events-node: restore behavior of top-level DefaltEventsService methods Signed-off-by: Patrik Oldsberg --- plugins/events-node/api-report.md | 8 ++++---- plugins/events-node/src/api/DefaultEventsService.ts | 12 +++++------- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/plugins/events-node/api-report.md b/plugins/events-node/api-report.md index a735007e3b..9ebaf1a536 100644 --- a/plugins/events-node/api-report.md +++ b/plugins/events-node/api-report.md @@ -23,10 +23,10 @@ export class DefaultEventsService implements EventsService { lifecycle: LifecycleService; }, ): EventsService; - // @deprecated (undocumented) - publish(_params: EventParams): Promise; - // @deprecated (undocumented) - subscribe(_options: EventsServiceSubscribeOptions): Promise; + // (undocumented) + publish(params: EventParams): Promise; + // (undocumented) + subscribe(options: EventsServiceSubscribeOptions): Promise; } // @public @deprecated diff --git a/plugins/events-node/src/api/DefaultEventsService.ts b/plugins/events-node/src/api/DefaultEventsService.ts index 5a2712fc89..9e2509539a 100644 --- a/plugins/events-node/src/api/DefaultEventsService.ts +++ b/plugins/events-node/src/api/DefaultEventsService.ts @@ -23,7 +23,7 @@ import { import { EventParams } from './EventParams'; import { EventsService, EventsServiceSubscribeOptions } from './EventsService'; import { DefaultApiClient } from '../generated'; -import { NotImplementedError, ResponseError } from '@backstage/errors'; +import { ResponseError } from '@backstage/errors'; const POLL_BACKOFF_START_MS = 1_000; const POLL_BACKOFF_MAX_MS = 60_000; @@ -386,13 +386,11 @@ export class DefaultEventsService implements EventsService { return service; } - /** @deprecated this method should not be called */ - async publish(_params: EventParams): Promise { - throw new NotImplementedError(); + async publish(params: EventParams): Promise { + await this.localBus.publish(params); } - /** @deprecated this method should not be called */ - async subscribe(_options: EventsServiceSubscribeOptions): Promise { - throw new NotImplementedError(); + async subscribe(options: EventsServiceSubscribeOptions): Promise { + this.localBus.subscribe(options); } } From 0de66764e4072055524d6e99ada8c1c9121a2b5c Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Mon, 27 May 2024 18:23:41 +0200 Subject: [PATCH 074/164] events-backend: more reliable timeout test Signed-off-by: Patrik Oldsberg --- .../events-backend/src/service/EventsPlugin.test.ts | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/plugins/events-backend/src/service/EventsPlugin.test.ts b/plugins/events-backend/src/service/EventsPlugin.test.ts index 53f84ffed1..18b994bff9 100644 --- a/plugins/events-backend/src/service/EventsPlugin.test.ts +++ b/plugins/events-backend/src/service/EventsPlugin.test.ts @@ -396,19 +396,21 @@ describe('eventsPlugin', () => { expect(res.status).toBe(202); const { closed } = res.body!.getReader(); - const checkClosed = () => + const checkNotClosed = () => Promise.race([ - closed.then(() => true), + closed.then(() => { + throw new Error('Closed'); + }), new Promise(r => process.nextTick(() => r(false))), ]); - await expect(checkClosed()).resolves.toBe(false); + await expect(checkNotClosed()).resolves.toBe(false); await jest.advanceTimersByTimeAsync(30000); - await expect(checkClosed()).resolves.toBe(false); + await expect(checkNotClosed()).resolves.toBe(false); await jest.advanceTimersByTimeAsync(30000); - await expect(checkClosed()).resolves.toBe(true); + await closed; } finally { jest.useRealTimers(); } From b9daa73fedebea4c1b8d2db41aea2f8c853e29b4 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Thu, 12 Sep 2024 20:46:30 +0200 Subject: [PATCH 075/164] Apply suggestions from code review Co-authored-by: Patrick Jungermann Signed-off-by: Patrik Oldsberg --- plugins/events-backend/src/service/EventsPlugin.test.ts | 8 ++++---- .../src/service/hub/DatabaseEventBusStore.ts | 2 +- .../src/service/hub/createEventBusRouter.ts | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/plugins/events-backend/src/service/EventsPlugin.test.ts b/plugins/events-backend/src/service/EventsPlugin.test.ts index 18b994bff9..0cfb68eb05 100644 --- a/plugins/events-backend/src/service/EventsPlugin.test.ts +++ b/plugins/events-backend/src/service/EventsPlugin.test.ts @@ -233,7 +233,7 @@ describe('eventsPlugin', () => { events: [{ topic: 'test', payload: { n: 1 } }], }); - // Two clients for subscriber 2, only one gets the event + // Two clients for subscriber 2, only one gets the event const res1 = helper.readEvents('tester-2'); const res2 = helper.readEvents('tester-2'); @@ -261,7 +261,7 @@ describe('eventsPlugin', () => { ); it.each(databases.eachSupportedId())( - 'should should not notify subscribers that have already consumed the event, %p', + 'should not notify subscribers that have already consumed the event, %p', async databaseId => { const backend = await startTestBackend({ features: [eventsPlugin(), await mockKnexFactory(databaseId)], @@ -296,7 +296,7 @@ describe('eventsPlugin', () => { await helper.readEvents('tester-1').expect(200, { events: [{ topic: 'test', payload: { for: 'tester-1' } }], }); - // Single client for subscriber 1 gets the event + // Single client for subscriber 2 gets the event await helper.readEvents('tester-2').expect(200, { events: [{ topic: 'test', payload: { for: 'tester-2' } }], }); @@ -316,7 +316,7 @@ describe('eventsPlugin', () => { // 2 subscribers await helper.subscribe('tester', ['test']).expect(201); - // A single event for each subscriber, that should not be sent to the other one + // A sequence of events published one at a time for (let n = 0; n < 15; ++n) { await helper.publish('test', { n }).expect(201); } diff --git a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts index 6694703a2e..c9e97e22b1 100644 --- a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts +++ b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts @@ -26,7 +26,7 @@ import { import { ForwardedError, NotFoundError } from '@backstage/errors'; import { HumanDuration, durationToMilliseconds } from '@backstage/types'; -const WINDOW_SIZE_DEFAULT = 10000; +const WINDOW_SIZE_DEFAULT = 10_000; const WINDOW_MIN_AGE_DEFAULT = { minutes: 10 }; const WINDOW_MAX_AGE_DEFAULT = { days: 1 }; diff --git a/plugins/events-backend/src/service/hub/createEventBusRouter.ts b/plugins/events-backend/src/service/hub/createEventBusRouter.ts index 2e1dc043db..a3ba7779b1 100644 --- a/plugins/events-backend/src/service/hub/createEventBusRouter.ts +++ b/plugins/events-backend/src/service/hub/createEventBusRouter.ts @@ -203,14 +203,14 @@ export async function createEventBusRouter(options: { // By setting up the listener first we make sure we don't miss any events // that are published while reading. If an event is published we'll receive - // a notification, which depending on the outcome of the read we may ignore + // a notification, which we may ignore depending on the outcome of the read const listener = await store.setupListener(id, { signal: controller.signal, }); // By timing out requests we make sure they don't stall or that events get stuck. // For the caller there's no difference between a timeout and a - // notifications, either way they should try reading again. + // notification, either way they should try reading again. const timeout = setTimeout(() => { controller.abort(); }, notifyTimeoutMs); From f06211e44757939d5fc6076e768bd8b332aa8c98 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Thu, 12 Sep 2024 22:18:57 +0200 Subject: [PATCH 076/164] events-backend: couple of simple review fixes Signed-off-by: Patrik Oldsberg --- .../migrations/20240523100528_init.js | 3 +- .../src/service/EventsPlugin.test.ts | 16 ++++---- .../src/service/hub/DatabaseEventBusStore.ts | 23 ++++++----- .../src/service/hub/createEventBusRouter.ts | 40 +++++++++---------- 4 files changed, 41 insertions(+), 41 deletions(-) diff --git a/plugins/events-backend/migrations/20240523100528_init.js b/plugins/events-backend/migrations/20240523100528_init.js index 90cdb770a5..7ec85d7917 100644 --- a/plugins/events-backend/migrations/20240523100528_init.js +++ b/plugins/events-backend/migrations/20240523100528_init.js @@ -82,6 +82,7 @@ exports.up = async function up(knex) { */ exports.down = async function down(knex) { if (knex.client.config.client === 'pg') { - await knex.schema.dropTable('events'); + await knex.schema.dropTable('event_bus_subscriptions'); + await knex.schema.dropTable('event_bus_events'); } }; diff --git a/plugins/events-backend/src/service/EventsPlugin.test.ts b/plugins/events-backend/src/service/EventsPlugin.test.ts index 0cfb68eb05..ba9a236800 100644 --- a/plugins/events-backend/src/service/EventsPlugin.test.ts +++ b/plugins/events-backend/src/service/EventsPlugin.test.ts @@ -150,7 +150,7 @@ describe('eventsPlugin', () => { 'should be possible to publish events as a service, %p', async databaseId => { const backend = await startTestBackend({ - features: [eventsPlugin(), await mockKnexFactory(databaseId)], + features: [eventsPlugin, await mockKnexFactory(databaseId)], }); const helper = new ReqHelper(backend); @@ -177,7 +177,7 @@ describe('eventsPlugin', () => { 'should be possible to subscribe as a service and receive an event, %p', async databaseId => { const backend = await startTestBackend({ - features: [eventsPlugin(), await mockKnexFactory(databaseId)], + features: [eventsPlugin, await mockKnexFactory(databaseId)], }); const helper = new ReqHelper(backend); @@ -217,7 +217,7 @@ describe('eventsPlugin', () => { 'should only send an event for each subscriber once, %p', async databaseId => { const backend = await startTestBackend({ - features: [eventsPlugin(), await mockKnexFactory(databaseId)], + features: [eventsPlugin, await mockKnexFactory(databaseId)], }); const helper = new ReqHelper(backend); @@ -264,7 +264,7 @@ describe('eventsPlugin', () => { 'should not notify subscribers that have already consumed the event, %p', async databaseId => { const backend = await startTestBackend({ - features: [eventsPlugin(), await mockKnexFactory(databaseId)], + features: [eventsPlugin, await mockKnexFactory(databaseId)], }); const helper = new ReqHelper(backend); @@ -309,7 +309,7 @@ describe('eventsPlugin', () => { 'should return multiple events in order, %p', async databaseId => { const backend = await startTestBackend({ - features: [eventsPlugin(), await mockKnexFactory(databaseId)], + features: [eventsPlugin, await mockKnexFactory(databaseId)], }); const helper = new ReqHelper(backend); @@ -355,7 +355,7 @@ describe('eventsPlugin', () => { 'should skip publishing if all subscribers have already consumed the event, %p', async databaseId => { const backend = await startTestBackend({ - features: [eventsPlugin(), await mockKnexFactory(databaseId)], + features: [eventsPlugin, await mockKnexFactory(databaseId)], }); const helper = new ReqHelper(backend); @@ -373,7 +373,7 @@ describe('eventsPlugin', () => { 'should time out when no events are available, %p', async databaseId => { const backend = await startTestBackend({ - features: [eventsPlugin(), await mockKnexFactory(databaseId)], + features: [eventsPlugin, await mockKnexFactory(databaseId)], }); const helper = new ReqHelper(backend); await helper.subscribe('tester', ['test']).expect(201); @@ -423,7 +423,7 @@ describe('eventsPlugin', () => { 'should refuse listen without a subscription, %p', async databaseId => { const backend = await startTestBackend({ - features: [eventsPlugin(), await mockKnexFactory(databaseId)], + features: [eventsPlugin, await mockKnexFactory(databaseId)], }); const helper = new ReqHelper(backend); diff --git a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts index c9e97e22b1..e8f0da444d 100644 --- a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts +++ b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts @@ -26,7 +26,7 @@ import { import { ForwardedError, NotFoundError } from '@backstage/errors'; import { HumanDuration, durationToMilliseconds } from '@backstage/types'; -const WINDOW_SIZE_DEFAULT = 10_000; +const WINDOW_MAX_COUNT_DEFAULT = 10_000; const WINDOW_MIN_AGE_DEFAULT = { minutes: 10 }; const WINDOW_MAX_AGE_DEFAULT = { days: 1 }; @@ -254,7 +254,7 @@ export class DatabaseEventBusStore implements EventBusStore { /** Events outside of this age will always be deleted */ maxAge?: HumanDuration; /** Events outside of this count will be deleted if they are outside the minAge window */ - size?: number; + maxCount?: number; }; }): Promise { const db = await options.database.getClient(); @@ -278,12 +278,12 @@ export class DatabaseEventBusStore implements EventBusStore { db, options.logger, listener, - options.window?.size ?? WINDOW_SIZE_DEFAULT, + options.window?.maxCount ?? WINDOW_MAX_COUNT_DEFAULT, durationToMilliseconds(options.window?.minAge ?? WINDOW_MIN_AGE_DEFAULT), durationToMilliseconds(options.window?.maxAge ?? WINDOW_MAX_AGE_DEFAULT), ); - options.scheduler.scheduleTask({ + await options.scheduler.scheduleTask({ id: 'event-bus-cleanup', frequency: { seconds: 10 }, timeout: { minutes: 1 }, @@ -301,7 +301,7 @@ export class DatabaseEventBusStore implements EventBusStore { readonly #db: Knex; readonly #logger: LoggerService; readonly #listener: DatabaseEventBusListener; - readonly #windowSize: number; + readonly #windowMaxCount: number; readonly #windowMinAge: number; readonly #windowMaxAge: number; @@ -309,14 +309,14 @@ export class DatabaseEventBusStore implements EventBusStore { db: Knex, logger: LoggerService, listener: DatabaseEventBusListener, - windowSize: number, + windowMaxCount: number, windowMinAge: number, windowMaxAge: number, ) { this.#db = db; this.#logger = logger; this.#listener = listener; - this.#windowSize = windowSize; + this.#windowMaxCount = windowMaxCount; this.#windowMinAge = windowMinAge; this.#windowMaxAge = windowMaxAge; } @@ -393,9 +393,10 @@ export class DatabaseEventBusStore implements EventBusStore { id, updated_at: this.#db.fn.now(), topics, - read_until: this.#db.raw( - `( SELECT COALESCE(MAX("id"), 0) FROM "${TABLE_EVENTS}" )`, - ), + // TODO(Rugvip): Might be that there's a more performant way to do this + read_until: this.#db.raw(`( SELECT COALESCE(MAX("id"), 0) FROM ?? )`, [ + TABLE_EVENTS, + ]), }) .onConflict('id') .merge(['topics', 'updated_at']) @@ -523,7 +524,7 @@ export class DatabaseEventBusStore implements EventBusStore { .select('id') .from(TABLE_EVENTS) .orderBy('id', 'desc') - .offset(this.#windowSize), + .offset(this.#windowMaxCount), ) .wrap('ANY(ARRAY(', '))'), ) diff --git a/plugins/events-backend/src/service/hub/createEventBusRouter.ts b/plugins/events-backend/src/service/hub/createEventBusRouter.ts index a3ba7779b1..532ceaf2b8 100644 --- a/plugins/events-backend/src/service/hub/createEventBusRouter.ts +++ b/plugins/events-backend/src/service/hub/createEventBusRouter.ts @@ -114,6 +114,23 @@ cause unnecessary storage of events. */ +async function createEventBusStore(deps: { + logger: LoggerService; + database: DatabaseService; + scheduler: SchedulerService; + lifecycle: LifecycleService; + httpAuth: HttpAuthService; +}): Promise { + const db = await deps.database.getClient(); + if (db.client.config.client === 'pg') { + deps.logger.info('Database is PostgreSQL, using database store'); + return await DatabaseEventBusStore.create(deps); + } + + deps.logger.info('Database is not PostgreSQL, using memory store'); + return new MemoryEventBusStore(); +} + /** * Creates a new event bus router * @internal @@ -126,30 +143,11 @@ export async function createEventBusRouter(options: { httpAuth: HttpAuthService; notifyTimeoutMs?: number; // for testing }): Promise { - const { - database, - httpAuth, - scheduler, - lifecycle, - notifyTimeoutMs = DEFAULT_NOTIFY_TIMEOUT_MS, - } = options; + const { httpAuth, notifyTimeoutMs = DEFAULT_NOTIFY_TIMEOUT_MS } = options; const logger = options.logger.child({ type: 'EventBus' }); const router = Router(); - let store: EventBusStore; - const db = await database.getClient(); - if (db.client.config.client === 'pg') { - logger.info('Database is PostgreSQL, using database store'); - store = await DatabaseEventBusStore.create({ - database, - logger, - scheduler, - lifecycle, - }); - } else { - logger.info('Database is not PostgreSQL, using memory store'); - store = new MemoryEventBusStore(); - } + const store = await createEventBusStore(options); const apiRouter = await createOpenApiRouter(); From c412d48980ed3ed6780fe3c056611f6ef6825647 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Thu, 12 Sep 2024 23:17:17 +0200 Subject: [PATCH 077/164] events-backend: add cleanup test for DatabaseEventBusStore Signed-off-by: Patrik Oldsberg --- .../service/hub/DatabaseEventBusStore.test.ts | 62 +++++++++++++++++++ .../src/service/hub/DatabaseEventBusStore.ts | 16 +++++ 2 files changed, 78 insertions(+) create mode 100644 plugins/events-backend/src/service/hub/DatabaseEventBusStore.test.ts diff --git a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.test.ts b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.test.ts new file mode 100644 index 0000000000..ed9fa3a7af --- /dev/null +++ b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.test.ts @@ -0,0 +1,62 @@ +/* + * 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 { TestDatabases, mockServices } from '@backstage/backend-test-utils'; +import { DatabaseEventBusStore } from './DatabaseEventBusStore'; + +const logger = mockServices.logger.mock(); + +const databases = TestDatabases.create({ + ids: ['POSTGRES_9', 'POSTGRES_13', 'POSTGRES_16'], +}); + +describe('DatabaseEventBusStore', () => { + it.each(databases.eachSupportedId())( + 'should clean up old events, %p', + async databaseId => { + const db = await databases.init(databaseId); + const store = await DatabaseEventBusStore.forTest({ logger, db }); + + await store.upsertSubscription('tester-1', ['test']); + await store.upsertSubscription('tester-2', ['test']); + + for (let i = 0; i < 10; ++i) { + await store.publish({ + params: { topic: 'test', eventPayload: { n: i } }, + }); + } + + const { events: events1 } = await store.readSubscription('tester-1'); + expect(events1.length).toBe(10); + + await store.clean(); + + await expect(store.readSubscription('tester-2')).rejects.toThrow( + "Subscription with ID 'tester-2' not found", + ); + + await store.upsertSubscription('tester-3', ['test']); + + // Reset read pointer to read form the beginning + await db('event_bus_subscriptions').select({ id: 'tester-3' }).update({ + read_until: 0, + }); + + const { events: events3 } = await store.readSubscription('tester-3'); + expect(events3.length).toBe(5); + }, + ); +}); diff --git a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts index e8f0da444d..744e9d3569 100644 --- a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts +++ b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts @@ -298,6 +298,22 @@ export class DatabaseEventBusStore implements EventBusStore { return store; } + /** @internal */ + static async forTest({ db, logger }: { db: Knex; logger: LoggerService }) { + await db.migrate.latest({ directory: migrationsDir }); + + const store = new DatabaseEventBusStore( + db, + logger, + new DatabaseEventBusListener(db.client, logger), + 5, + 0, + 10, + ); + + return Object.assign(store, { clean: () => store.#cleanup() }); + } + readonly #db: Knex; readonly #logger: LoggerService; readonly #listener: DatabaseEventBusListener; From e4d661091345859ddc8682cfd80065cc31a322a8 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Thu, 12 Sep 2024 23:49:03 +0200 Subject: [PATCH 078/164] events-backend: more cleanup tests and refactor DB access to avoid some raw Signed-off-by: Patrik Oldsberg --- .../service/hub/DatabaseEventBusStore.test.ts | 65 +++++++++++++++++++ .../src/service/hub/DatabaseEventBusStore.ts | 62 ++++++++++-------- 2 files changed, 101 insertions(+), 26 deletions(-) diff --git a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.test.ts b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.test.ts index ed9fa3a7af..830ee1ae46 100644 --- a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.test.ts +++ b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.test.ts @@ -59,4 +59,69 @@ describe('DatabaseEventBusStore', () => { expect(events3.length).toBe(5); }, ); + + it.each(databases.eachSupportedId())( + 'should always clean up events outside the max age window, %p', + async databaseId => { + const db = await databases.init(databaseId); + const store = await DatabaseEventBusStore.forTest({ + logger, + db, + maxAge: 0, + }); + + await store.upsertSubscription('tester-1', ['test']); + await store.upsertSubscription('tester-2', ['test']); + + for (let i = 0; i < 10; ++i) { + await store.publish({ + params: { topic: 'test', eventPayload: { n: i } }, + }); + } + + const { events: events1 } = await store.readSubscription('tester-1'); + expect(events1.length).toBe(10); + + await store.clean(); + + await expect(store.readSubscription('tester-2')).rejects.toThrow( + "Subscription with ID 'tester-2' not found", + ); + + await store.upsertSubscription('tester-3', ['test']); + + // Reset read pointer to read form the beginning + await db('event_bus_subscriptions').select({ id: 'tester-3' }).update({ + read_until: 0, + }); + + const { events: events3 } = await store.readSubscription('tester-3'); + expect(events3.length).toBe(0); + }, + ); + + it.each(databases.eachSupportedId())( + 'should not clean up events within the min age window, %p', + async databaseId => { + const db = await databases.init(databaseId); + const store = await DatabaseEventBusStore.forTest({ + logger, + db, + minAge: 1000, + }); + + await store.upsertSubscription('tester-1', ['test']); + + for (let i = 0; i < 10; ++i) { + await store.publish({ + params: { topic: 'test', eventPayload: { n: i } }, + }); + } + + await store.clean(); + + const { events: events1 } = await store.readSubscription('tester-1'); + expect(events1.length).toBe(10); + }, + ); }); diff --git a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts index 744e9d3569..63cc06d40d 100644 --- a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts +++ b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts @@ -299,7 +299,17 @@ export class DatabaseEventBusStore implements EventBusStore { } /** @internal */ - static async forTest({ db, logger }: { db: Knex; logger: LoggerService }) { + static async forTest({ + db, + logger, + minAge = 0, + maxAge = 10_000, + }: { + db: Knex; + logger: LoggerService; + minAge?: number; + maxAge?: number; + }) { await db.migrate.latest({ directory: migrationsDir }); const store = new DatabaseEventBusStore( @@ -307,8 +317,8 @@ export class DatabaseEventBusStore implements EventBusStore { logger, new DatabaseEventBusListener(db.client, logger), 5, - 0, - 10, + minAge, + maxAge, ); return Object.assign(store, { clean: () => store.#cleanup() }); @@ -404,15 +414,13 @@ export class DatabaseEventBusStore implements EventBusStore { } async upsertSubscription(id: string, topics: string[]): Promise { + const [{ max: maxId }] = await this.#db(TABLE_EVENTS).max('id'); const result = await this.#db(TABLE_SUBSCRIPTIONS) .insert({ id, updated_at: this.#db.fn.now(), topics, - // TODO(Rugvip): Might be that there's a more performant way to do this - read_until: this.#db.raw(`( SELECT COALESCE(MAX("id"), 0) FROM ?? )`, [ - TABLE_EVENTS, - ]), + read_until: maxId || 0, }) .onConflict('id') .merge(['topics', 'updated_at']) @@ -526,26 +534,21 @@ export class DatabaseEventBusStore implements EventBusStore { #cleanup = async () => { try { - const eventCount = await this.#db + const eventCount = await this.#db(TABLE_EVENTS) .delete() - .from(TABLE_EVENTS) // Delete any events that are outside both the min age and size window - .where('created_at', '<', new Date(Date.now() - this.#windowMinAge)) - .andWhere( + .whereIn( 'id', - '=', this.#db - .raw( - this.#db - .select('id') - .from(TABLE_EVENTS) - .orderBy('id', 'desc') - .offset(this.#windowMaxCount), - ) - .wrap('ANY(ARRAY(', '))'), + .select('id') + .from(TABLE_EVENTS) + .orderBy('id', 'desc') + .offset(this.#windowMaxCount), ) + .andWhere('created_at', '<', new Date(Date.now() - this.#windowMinAge)) // If events are outside the max age they will always be deleted .orWhere('created_at', '<', new Date(Date.now() - this.#windowMaxAge)); + this.#logger.info( `Event cleanup resulted in ${eventCount} old events being deleted`, ); @@ -555,12 +558,19 @@ export class DatabaseEventBusStore implements EventBusStore { try { // Delete any subscribers that aren't keeping up with current events - const subscriberCount = await this.#db - .delete() - .from(TABLE_SUBSCRIPTIONS) - .where('read_until', '<', (q: Knex.QueryBuilder) => - q.select(this.#db.raw('MIN(id)')).from(TABLE_EVENTS), - ); + const [{ min: minId }] = await this.#db(TABLE_EVENTS).min('id'); + + let subscriberCount; + if (minId === null) { + // No events left, remove all subscribers. This can happen if no events + // are published within the max age window. + subscriberCount = await this.#db(TABLE_SUBSCRIPTIONS).delete(); + } else { + subscriberCount = await this.#db(TABLE_SUBSCRIPTIONS) + .delete() + // Read pointer points to the ID that has been read, so we need an additional offset + .where('read_until', '<', minId - 1); + } this.#logger.info( `Subscription cleanup resulted in ${subscriberCount} stale subscribers being deleted`, From d98d202f813a84cec0bdae6ad4751dfddee9ea56 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 13 Sep 2024 08:59:45 +0200 Subject: [PATCH 079/164] events-backend: rough performance test for event cleanup Signed-off-by: Patrik Oldsberg --- .../service/hub/DatabaseEventBusStore.test.ts | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.test.ts b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.test.ts index 830ee1ae46..c962fe75a0 100644 --- a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.test.ts +++ b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.test.ts @@ -124,4 +124,39 @@ describe('DatabaseEventBusStore', () => { expect(events1.length).toBe(10); }, ); + + it.each(databases.eachSupportedId())( + 'should clean up a large number of events, %p', + async databaseId => { + const db = await databases.init(databaseId); + const store = await DatabaseEventBusStore.forTest({ + logger, + db, + }); + + const COUNT = '100000'; + + await db.raw(` + INSERT INTO event_bus_events (id, topic, data_json) + SELECT id, 'test', '{}' + FROM generate_series(1, ${COUNT}) AS id + `); + + await expect(db('event_bus_events').count()).resolves.toEqual([ + { count: COUNT }, + ]); + + const start = Date.now(); + + await store.clean(); + + // Local testing shows this takes about 80ms, but if this is flaky we can + // reduce the count down to 10_000. + expect(Date.now() - start).toBeLessThan(500); + + await expect(db('event_bus_events').count()).resolves.toEqual([ + { count: '5' }, + ]); + }, + ); }); From d75fdf178ebdb8af904bd5ba0c5c8bcb88ee3adb Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 13 Sep 2024 09:03:03 +0200 Subject: [PATCH 080/164] events-backend: fix moved import Signed-off-by: Patrik Oldsberg --- plugins/events-backend/dev/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/events-backend/dev/index.ts b/plugins/events-backend/dev/index.ts index b629cbf8d0..d75834884e 100644 --- a/plugins/events-backend/dev/index.ts +++ b/plugins/events-backend/dev/index.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { WinstonLogger } from '@backstage/backend-app-api'; +import { WinstonLogger } from '@backstage/backend-defaults/rootLogger'; import { createBackend } from '@backstage/backend-defaults'; import { coreServices, From ab0afa9bacbd5bae5fa8ffb02b39dc088d7a72a3 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 13 Sep 2024 09:15:29 +0200 Subject: [PATCH 081/164] events-backend: made some names in EventBusStore more explicit Signed-off-by: Patrik Oldsberg --- .../events-backend/src/service/hub/DatabaseEventBusStore.ts | 4 ++-- .../events-backend/src/service/hub/MemoryEventBusStore.ts | 4 ++-- .../events-backend/src/service/hub/createEventBusRouter.ts | 2 +- plugins/events-backend/src/service/hub/types.ts | 6 +++--- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts index 63cc06d40d..b8a3e54ab8 100644 --- a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts +++ b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts @@ -350,7 +350,7 @@ export class DatabaseEventBusStore implements EventBusStore { async publish(options: { params: EventParams; consumedBy?: string[]; - }): Promise<{ id: string } | undefined> { + }): Promise<{ eventId: string } | undefined> { const topic = options.params.topic; const consumedBy = options.consumedBy ?? []; // This query inserts a new event into the database, but only if there are @@ -410,7 +410,7 @@ export class DatabaseEventBusStore implements EventBusStore { ); } - return { id }; + return { eventId: id }; } async upsertSubscription(id: string, topics: string[]): Promise { diff --git a/plugins/events-backend/src/service/hub/MemoryEventBusStore.ts b/plugins/events-backend/src/service/hub/MemoryEventBusStore.ts index 3071a51edf..1527eeb1fa 100644 --- a/plugins/events-backend/src/service/hub/MemoryEventBusStore.ts +++ b/plugins/events-backend/src/service/hub/MemoryEventBusStore.ts @@ -33,7 +33,7 @@ export class MemoryEventBusStore implements EventBusStore { async publish(options: { params: EventParams; consumedBy: string[]; - }): Promise<{ id: string } | undefined> { + }): Promise<{ eventId: string } | undefined> { const topic = options.params.topic; const consumedBy = new Set(options.consumedBy); @@ -57,7 +57,7 @@ export class MemoryEventBusStore implements EventBusStore { this.#listeners.delete(listener); } } - return { id: String(nextSeq) }; + return { eventId: String(nextSeq) }; } #getMaxSeq() { diff --git a/plugins/events-backend/src/service/hub/createEventBusRouter.ts b/plugins/events-backend/src/service/hub/createEventBusRouter.ts index 532ceaf2b8..fd0732e279 100644 --- a/plugins/events-backend/src/service/hub/createEventBusRouter.ts +++ b/plugins/events-backend/src/service/hub/createEventBusRouter.ts @@ -167,7 +167,7 @@ export async function createEventBusRouter(options: { consumedBy: req.body.consumedBy, }); if (result) { - logger.info(`Published event to '${topic}' with ID '${result.id}'`, { + logger.info(`Published event to '${topic}' with ID '${result.eventId}'`, { subject: credentials.principal.subject, }); res.status(201).end(); diff --git a/plugins/events-backend/src/service/hub/types.ts b/plugins/events-backend/src/service/hub/types.ts index 315a4a7220..b221f6696d 100644 --- a/plugins/events-backend/src/service/hub/types.ts +++ b/plugins/events-backend/src/service/hub/types.ts @@ -20,11 +20,11 @@ export type EventBusStore = { publish(options: { params: EventParams; consumedBy?: string[]; - }): Promise<{ id: string } | undefined>; + }): Promise<{ eventId: string } | undefined>; - upsertSubscription(id: string, topics: string[]): Promise; + upsertSubscription(subscriptionId: string, topics: string[]): Promise; - readSubscription(id: string): Promise<{ events: EventParams[] }>; + readSubscription(subscriptionId: string): Promise<{ events: EventParams[] }>; setupListener( subscriptionId: string, From f1fb54af5b605e9db0fc2440fb1e220e41aae598 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 13 Sep 2024 09:29:15 +0200 Subject: [PATCH 082/164] events-backend: rename consumedBy -> notifiedSubscribers Signed-off-by: Patrik Oldsberg --- .../src/schema/openapi.generated.ts | 2 +- plugins/events-backend/src/schema/openapi.yaml | 2 +- .../src/service/EventsPlugin.test.ts | 17 ++++++++++++----- .../src/service/hub/DatabaseEventBusStore.ts | 8 ++++---- .../src/service/hub/MemoryEventBusStore.ts | 14 ++++++++------ .../src/service/hub/createEventBusRouter.ts | 8 ++++---- plugins/events-backend/src/service/hub/types.ts | 2 +- .../events-node/src/api/DefaultEventsService.ts | 2 +- .../generated/models/PostEventRequest.model.ts | 2 +- 9 files changed, 33 insertions(+), 24 deletions(-) diff --git a/plugins/events-backend/src/schema/openapi.generated.ts b/plugins/events-backend/src/schema/openapi.generated.ts index ef712e2f86..8f8d6c6a82 100644 --- a/plugins/events-backend/src/schema/openapi.generated.ts +++ b/plugins/events-backend/src/schema/openapi.generated.ts @@ -159,7 +159,7 @@ export const spec = { event: { $ref: '#/components/schemas/Event', }, - consumedBy: { + notifiedSubscribers: { type: 'array', description: 'The IDs of subscriptions that have already received this event', diff --git a/plugins/events-backend/src/schema/openapi.yaml b/plugins/events-backend/src/schema/openapi.yaml index 8b2639a189..97f7705f87 100644 --- a/plugins/events-backend/src/schema/openapi.yaml +++ b/plugins/events-backend/src/schema/openapi.yaml @@ -106,7 +106,7 @@ paths: properties: event: $ref: '#/components/schemas/Event' - consumedBy: + notifiedSubscribers: type: array description: The IDs of subscriptions that have already received this event items: diff --git a/plugins/events-backend/src/service/EventsPlugin.test.ts b/plugins/events-backend/src/service/EventsPlugin.test.ts index ba9a236800..dcf901b1a0 100644 --- a/plugins/events-backend/src/service/EventsPlugin.test.ts +++ b/plugins/events-backend/src/service/EventsPlugin.test.ts @@ -119,12 +119,15 @@ describe('eventsPlugin', () => { publish( topic: string, payload: unknown, - options?: { consumedBy?: string[] }, + options?: { notifiedSubscribers?: string[] }, ) { return request(this.backend.server) .post('/api/events/bus/v1/events') .set('authorization', mockCredentials.service.header()) - .send({ event: { topic, payload }, consumedBy: options?.consumedBy }); + .send({ + event: { topic, payload }, + notifiedSubscribers: options?.notifiedSubscribers, + }); } readEvents(id: string) { @@ -278,7 +281,7 @@ describe('eventsPlugin', () => { 'test', { for: 'tester-2' }, { - consumedBy: ['tester-1'], + notifiedSubscribers: ['tester-1'], }, ) .expect(201); @@ -287,7 +290,7 @@ describe('eventsPlugin', () => { 'test', { for: 'tester-1' }, { - consumedBy: ['tester-2'], + notifiedSubscribers: ['tester-2'], }, ) .expect(201); @@ -362,7 +365,11 @@ describe('eventsPlugin', () => { await helper.subscribe('tester', ['test']).expect(201); await helper - .publish('test', { for: 'tester-2' }, { consumedBy: ['tester'] }) + .publish( + 'test', + { for: 'tester-2' }, + { notifiedSubscribers: ['tester'] }, + ) .expect(204); await backend.stop(); diff --git a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts index b8a3e54ab8..a41e95733d 100644 --- a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts +++ b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts @@ -349,10 +349,10 @@ export class DatabaseEventBusStore implements EventBusStore { async publish(options: { params: EventParams; - consumedBy?: string[]; + notifiedSubscribers?: string[]; }): Promise<{ eventId: string } | undefined> { const topic = options.params.topic; - const consumedBy = options.consumedBy ?? []; + const notifiedSubscribers = options.notifiedSubscribers ?? []; // This query inserts a new event into the database, but only if there are // subscribers to the topic that have not already been notified const result = await this.#db @@ -378,12 +378,12 @@ export class DatabaseEventBusStore implements EventBusStore { metadata: options.params.metadata, }), ]), - this.#db.raw('?', [consumedBy]), + this.#db.raw('?', [notifiedSubscribers]), ) // The rest of this query is to check whether there are any // subscribers that have not been notified yet .from(TABLE_SUBSCRIPTIONS) - .whereNotIn('id', consumedBy) // Skip notified subscribers + .whereNotIn('id', notifiedSubscribers) // Skip notified subscribers .andWhere(this.#db.raw('? = ANY(topics)', [topic])) // Match topic .having(this.#db.raw('count(*)'), '>', 0), // Check if there are any results ) diff --git a/plugins/events-backend/src/service/hub/MemoryEventBusStore.ts b/plugins/events-backend/src/service/hub/MemoryEventBusStore.ts index 1527eeb1fa..6c7b4e6df7 100644 --- a/plugins/events-backend/src/service/hub/MemoryEventBusStore.ts +++ b/plugins/events-backend/src/service/hub/MemoryEventBusStore.ts @@ -20,7 +20,9 @@ import { NotFoundError } from '@backstage/errors'; const MAX_BATCH_SIZE = 10; export class MemoryEventBusStore implements EventBusStore { - #events = new Array }>(); + #events = new Array< + EventParams & { seq: number; notifiedSubscribers: Set } + >(); #subscribers = new Map< string, { id: string; seq: number; topics: Set } @@ -32,14 +34,14 @@ export class MemoryEventBusStore implements EventBusStore { async publish(options: { params: EventParams; - consumedBy: string[]; + notifiedSubscribers: string[]; }): Promise<{ eventId: string } | undefined> { const topic = options.params.topic; - const consumedBy = new Set(options.consumedBy); + const notifiedSubscribers = new Set(options.notifiedSubscribers); let hasOtherSubscribers = false; for (const sub of this.#subscribers.values()) { - if (sub.topics.has(topic) && !consumedBy.has(sub.id)) { + if (sub.topics.has(topic) && !notifiedSubscribers.has(sub.id)) { hasOtherSubscribers = true; break; } @@ -49,7 +51,7 @@ export class MemoryEventBusStore implements EventBusStore { } const nextSeq = this.#getMaxSeq() + 1; - this.#events.push({ ...options.params, consumedBy, seq: nextSeq }); + this.#events.push({ ...options.params, notifiedSubscribers, seq: nextSeq }); for (const listener of this.#listeners) { if (listener.topics.has(topic)) { @@ -88,7 +90,7 @@ export class MemoryEventBusStore implements EventBusStore { event => event.seq > sub.seq && sub.topics.has(event.topic) && - !event.consumedBy.has(id), + !event.notifiedSubscribers.has(id), ) .slice(0, MAX_BATCH_SIZE); diff --git a/plugins/events-backend/src/service/hub/createEventBusRouter.ts b/plugins/events-backend/src/service/hub/createEventBusRouter.ts index fd0732e279..193c1108d5 100644 --- a/plugins/events-backend/src/service/hub/createEventBusRouter.ts +++ b/plugins/events-backend/src/service/hub/createEventBusRouter.ts @@ -158,13 +158,13 @@ export async function createEventBusRouter(options: { allow: ['service'], }); const topic = req.body.event.topic; - const consumedBy = req.body.consumedBy; + const notifiedSubscribers = req.body.notifiedSubscribers; const result = await store.publish({ params: { topic, eventPayload: req.body.event.payload, } as EventParams, - consumedBy: req.body.consumedBy, + notifiedSubscribers: req.body.notifiedSubscribers, }); if (result) { logger.info(`Published event to '${topic}' with ID '${result.eventId}'`, { @@ -172,8 +172,8 @@ export async function createEventBusRouter(options: { }); res.status(201).end(); } else { - if (consumedBy) { - const notified = `'${consumedBy.join("', '")}'`; + if (notifiedSubscribers) { + const notified = `'${notifiedSubscribers.join("', '")}'`; logger.info( `Skipped publishing of event to '${topic}', subscribers have already been notified: ${notified}`, { subject: credentials.principal.subject }, diff --git a/plugins/events-backend/src/service/hub/types.ts b/plugins/events-backend/src/service/hub/types.ts index b221f6696d..3a4c8df9f8 100644 --- a/plugins/events-backend/src/service/hub/types.ts +++ b/plugins/events-backend/src/service/hub/types.ts @@ -19,7 +19,7 @@ import { EventParams } from '@backstage/plugin-events-node'; export type EventBusStore = { publish(options: { params: EventParams; - consumedBy?: string[]; + notifiedSubscribers?: string[]; }): Promise<{ eventId: string } | undefined>; upsertSubscription(subscriptionId: string, topics: string[]): Promise; diff --git a/plugins/events-node/src/api/DefaultEventsService.ts b/plugins/events-node/src/api/DefaultEventsService.ts index 9e2509539a..9055afaeb8 100644 --- a/plugins/events-node/src/api/DefaultEventsService.ts +++ b/plugins/events-node/src/api/DefaultEventsService.ts @@ -127,7 +127,7 @@ class PluginEventsService implements EventsService { { body: { event: { payload: params.eventPayload, topic: params.topic }, - consumedBy: notifiedSubscribers, + notifiedSubscribers, }, }, { token }, diff --git a/plugins/events-node/src/generated/models/PostEventRequest.model.ts b/plugins/events-node/src/generated/models/PostEventRequest.model.ts index 04eaaab461..75289ed25b 100644 --- a/plugins/events-node/src/generated/models/PostEventRequest.model.ts +++ b/plugins/events-node/src/generated/models/PostEventRequest.model.ts @@ -24,5 +24,5 @@ export interface PostEventRequest { /** * The IDs of subscriptions that have already received this event */ - consumedBy?: Array; + notifiedSubscribers?: Array; } From 94b1caee5e30e16094c9e287dbb848da6fff4bfb Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 13 Sep 2024 09:56:09 +0200 Subject: [PATCH 083/164] events-backend: renamed EventBusStore params -> event Signed-off-by: Patrik Oldsberg --- .../src/service/hub/DatabaseEventBusStore.test.ts | 6 +++--- .../src/service/hub/DatabaseEventBusStore.ts | 8 ++++---- .../events-backend/src/service/hub/MemoryEventBusStore.ts | 6 +++--- .../src/service/hub/createEventBusRouter.ts | 2 +- plugins/events-backend/src/service/hub/types.ts | 2 +- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.test.ts b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.test.ts index c962fe75a0..3c8d2cb377 100644 --- a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.test.ts +++ b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.test.ts @@ -35,7 +35,7 @@ describe('DatabaseEventBusStore', () => { for (let i = 0; i < 10; ++i) { await store.publish({ - params: { topic: 'test', eventPayload: { n: i } }, + event: { topic: 'test', eventPayload: { n: i } }, }); } @@ -75,7 +75,7 @@ describe('DatabaseEventBusStore', () => { for (let i = 0; i < 10; ++i) { await store.publish({ - params: { topic: 'test', eventPayload: { n: i } }, + event: { topic: 'test', eventPayload: { n: i } }, }); } @@ -114,7 +114,7 @@ describe('DatabaseEventBusStore', () => { for (let i = 0; i < 10; ++i) { await store.publish({ - params: { topic: 'test', eventPayload: { n: i } }, + event: { topic: 'test', eventPayload: { n: i } }, }); } diff --git a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts index a41e95733d..c94fa2aa2c 100644 --- a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts +++ b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts @@ -348,10 +348,10 @@ export class DatabaseEventBusStore implements EventBusStore { } async publish(options: { - params: EventParams; + event: EventParams; notifiedSubscribers?: string[]; }): Promise<{ eventId: string } | undefined> { - const topic = options.params.topic; + const topic = options.event.topic; const notifiedSubscribers = options.notifiedSubscribers ?? []; // This query inserts a new event into the database, but only if there are // subscribers to the topic that have not already been notified @@ -374,8 +374,8 @@ export class DatabaseEventBusStore implements EventBusStore { this.#db.raw('?', [topic]), this.#db.raw('?', [ JSON.stringify({ - payload: options.params.eventPayload, - metadata: options.params.metadata, + payload: options.event.eventPayload, + metadata: options.event.metadata, }), ]), this.#db.raw('?', [notifiedSubscribers]), diff --git a/plugins/events-backend/src/service/hub/MemoryEventBusStore.ts b/plugins/events-backend/src/service/hub/MemoryEventBusStore.ts index 6c7b4e6df7..2e4dba34bd 100644 --- a/plugins/events-backend/src/service/hub/MemoryEventBusStore.ts +++ b/plugins/events-backend/src/service/hub/MemoryEventBusStore.ts @@ -33,10 +33,10 @@ export class MemoryEventBusStore implements EventBusStore { }>(); async publish(options: { - params: EventParams; + event: EventParams; notifiedSubscribers: string[]; }): Promise<{ eventId: string } | undefined> { - const topic = options.params.topic; + const topic = options.event.topic; const notifiedSubscribers = new Set(options.notifiedSubscribers); let hasOtherSubscribers = false; @@ -51,7 +51,7 @@ export class MemoryEventBusStore implements EventBusStore { } const nextSeq = this.#getMaxSeq() + 1; - this.#events.push({ ...options.params, notifiedSubscribers, seq: nextSeq }); + this.#events.push({ ...options.event, notifiedSubscribers, seq: nextSeq }); for (const listener of this.#listeners) { if (listener.topics.has(topic)) { diff --git a/plugins/events-backend/src/service/hub/createEventBusRouter.ts b/plugins/events-backend/src/service/hub/createEventBusRouter.ts index 193c1108d5..b1e99596b1 100644 --- a/plugins/events-backend/src/service/hub/createEventBusRouter.ts +++ b/plugins/events-backend/src/service/hub/createEventBusRouter.ts @@ -160,7 +160,7 @@ export async function createEventBusRouter(options: { const topic = req.body.event.topic; const notifiedSubscribers = req.body.notifiedSubscribers; const result = await store.publish({ - params: { + event: { topic, eventPayload: req.body.event.payload, } as EventParams, diff --git a/plugins/events-backend/src/service/hub/types.ts b/plugins/events-backend/src/service/hub/types.ts index 3a4c8df9f8..0d363bec8b 100644 --- a/plugins/events-backend/src/service/hub/types.ts +++ b/plugins/events-backend/src/service/hub/types.ts @@ -18,7 +18,7 @@ import { EventParams } from '@backstage/plugin-events-node'; export type EventBusStore = { publish(options: { - params: EventParams; + event: EventParams; notifiedSubscribers?: string[]; }): Promise<{ eventId: string } | undefined>; From 5c728ee6425351eee9e9fd68decc3dbb51d90b1b Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 13 Sep 2024 10:40:19 +0200 Subject: [PATCH 084/164] changesets: changesets for new events backend bus Signed-off-by: Patrik Oldsberg --- .changeset/slow-gorillas-thank.md | 9 +++++++++ .changeset/stale-roses-serve.md | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 .changeset/slow-gorillas-thank.md diff --git a/.changeset/slow-gorillas-thank.md b/.changeset/slow-gorillas-thank.md new file mode 100644 index 0000000000..2c52964a47 --- /dev/null +++ b/.changeset/slow-gorillas-thank.md @@ -0,0 +1,9 @@ +--- +'@backstage/plugin-events-backend': patch +--- + +The events backend now has its own built-in event bus for distributing events across multiple backend instances. It exposes a new HTTP API under `/bus/v1/` for publishing and reading events from the bus, as well as its own storage and notification mechanism for events. + +The backing event store for the bus only supports scaled deployment if PostgreSQL is used as the DBMS. If SQLite or MySQL is used, the event bus will fall back to an in-memory store that does not support multiple backend instances. + +The default `EventsService` implementation from `@backstage/plugin-events-node` has also been updated to use the new events bus. diff --git a/.changeset/stale-roses-serve.md b/.changeset/stale-roses-serve.md index dc1ab50f88..29dee56e22 100644 --- a/.changeset/stale-roses-serve.md +++ b/.changeset/stale-roses-serve.md @@ -2,4 +2,4 @@ '@backstage/plugin-events-node': patch --- -The `EventParams` payload must now be a `JsonValue`, and the `metadata` type has been tweaked. +The default implementation of the `EventsService` now uses the new event bus for distributing events across multiple backend instances if the events backend plugin is installed. From 03cc3ce2692a9cd1d4dcee626e720120cb142dba Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 13 Sep 2024 14:37:30 +0200 Subject: [PATCH 085/164] events-backend: clean up EventsPlugin test a bit Signed-off-by: Patrik Oldsberg --- .../src/service/EventsPlugin.test.ts | 46 ++++++++----------- 1 file changed, 19 insertions(+), 27 deletions(-) diff --git a/plugins/events-backend/src/service/EventsPlugin.test.ts b/plugins/events-backend/src/service/EventsPlugin.test.ts index dcf901b1a0..700eb37bb7 100644 --- a/plugins/events-backend/src/service/EventsPlugin.test.ts +++ b/plugins/events-backend/src/service/EventsPlugin.test.ts @@ -149,10 +149,18 @@ describe('eventsPlugin', () => { }).factory; } + let backend: TestBackend | undefined = undefined; + afterEach(async () => { + if (backend) { + await backend.stop(); + backend = undefined; + } + }); + it.each(databases.eachSupportedId())( 'should be possible to publish events as a service, %p', async databaseId => { - const backend = await startTestBackend({ + backend = await startTestBackend({ features: [eventsPlugin, await mockKnexFactory(databaseId)], }); const helper = new ReqHelper(backend); @@ -171,15 +179,13 @@ describe('eventsPlugin', () => { .publish('test', { n: 1 }) .set('authorization', mockCredentials.service.header()) .expect(204); // 204, since there are no subscribers - - await backend.stop(); }, ); it.each(databases.eachSupportedId())( 'should be possible to subscribe as a service and receive an event, %p', async databaseId => { - const backend = await startTestBackend({ + backend = await startTestBackend({ features: [eventsPlugin, await mockKnexFactory(databaseId)], }); const helper = new ReqHelper(backend); @@ -211,15 +217,13 @@ describe('eventsPlugin', () => { await helper.readEvents('tester').expect(200, { events: [{ topic: 'test', payload: { n: 1 } }], }); - - await backend.stop(); }, ); it.each(databases.eachSupportedId())( 'should only send an event for each subscriber once, %p', async databaseId => { - const backend = await startTestBackend({ + backend = await startTestBackend({ features: [eventsPlugin, await mockKnexFactory(databaseId)], }); const helper = new ReqHelper(backend); @@ -258,15 +262,13 @@ describe('eventsPlugin', () => { await helper.readEvents('tester-2').expect(200, { events: [{ topic: 'test', payload: { n: 2 } }], }); - - await backend.stop(); }, ); it.each(databases.eachSupportedId())( 'should not notify subscribers that have already consumed the event, %p', async databaseId => { - const backend = await startTestBackend({ + backend = await startTestBackend({ features: [eventsPlugin, await mockKnexFactory(databaseId)], }); const helper = new ReqHelper(backend); @@ -303,15 +305,13 @@ describe('eventsPlugin', () => { await helper.readEvents('tester-2').expect(200, { events: [{ topic: 'test', payload: { for: 'tester-2' } }], }); - - await backend.stop(); }, ); it.each(databases.eachSupportedId())( 'should return multiple events in order, %p', async databaseId => { - const backend = await startTestBackend({ + backend = await startTestBackend({ features: [eventsPlugin, await mockKnexFactory(databaseId)], }); const helper = new ReqHelper(backend); @@ -349,15 +349,13 @@ describe('eventsPlugin', () => { { topic: 'test', payload: { n: 14 } }, ], }); - - await backend.stop(); }, ); it.each(databases.eachSupportedId())( 'should skip publishing if all subscribers have already consumed the event, %p', async databaseId => { - const backend = await startTestBackend({ + backend = await startTestBackend({ features: [eventsPlugin, await mockKnexFactory(databaseId)], }); const helper = new ReqHelper(backend); @@ -371,15 +369,13 @@ describe('eventsPlugin', () => { { notifiedSubscribers: ['tester'] }, ) .expect(204); - - await backend.stop(); }, ); it.each(databases.eachSupportedId())( 'should time out when no events are available, %p', async databaseId => { - const backend = await startTestBackend({ + backend = await startTestBackend({ features: [eventsPlugin, await mockKnexFactory(databaseId)], }); const helper = new ReqHelper(backend); @@ -408,35 +404,31 @@ describe('eventsPlugin', () => { closed.then(() => { throw new Error('Closed'); }), - new Promise(r => process.nextTick(() => r(false))), + new Promise(r => process.nextTick(r)), ]); - await expect(checkNotClosed()).resolves.toBe(false); + await checkNotClosed(); await jest.advanceTimersByTimeAsync(30000); - await expect(checkNotClosed()).resolves.toBe(false); + await checkNotClosed(); await jest.advanceTimersByTimeAsync(30000); await closed; } finally { jest.useRealTimers(); } - - await backend.stop(); }, ); it.each(databases.eachSupportedId())( 'should refuse listen without a subscription, %p', async databaseId => { - const backend = await startTestBackend({ + backend = await startTestBackend({ features: [eventsPlugin, await mockKnexFactory(databaseId)], }); const helper = new ReqHelper(backend); await helper.readEvents('nonexistent').expect(404); - - await backend.stop(); }, ); }); From 4adf6e14cff91831ae36e87e69e86dd112b2325b Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 13 Sep 2024 17:25:25 +0200 Subject: [PATCH 086/164] events-backend: fix for time out test in later versions of Node.js v20 Signed-off-by: Patrik Oldsberg --- .../src/service/EventsPlugin.test.ts | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/plugins/events-backend/src/service/EventsPlugin.test.ts b/plugins/events-backend/src/service/EventsPlugin.test.ts index 700eb37bb7..37b4cfd961 100644 --- a/plugins/events-backend/src/service/EventsPlugin.test.ts +++ b/plugins/events-backend/src/service/EventsPlugin.test.ts @@ -398,22 +398,21 @@ describe('eventsPlugin', () => { expect(res.status).toBe(202); - const { closed } = res.body!.getReader(); - const checkNotClosed = () => + const reader = res.body!.getReader(); + const isClosed = () => Promise.race([ - closed.then(() => { - throw new Error('Closed'); - }), - new Promise(r => process.nextTick(r)), + reader + .read() + .then(() => reader.closed) + .then(() => true), + new Promise(r => setTimeout(r, 100, false)), ]); - await checkNotClosed(); - + await expect(isClosed()).resolves.toBe(false); await jest.advanceTimersByTimeAsync(30000); - await checkNotClosed(); - + await expect(isClosed()).resolves.toBe(false); await jest.advanceTimersByTimeAsync(30000); - await closed; + await expect(isClosed()).resolves.toBe(true); } finally { jest.useRealTimers(); } From 5492eb6d8c83dae33e7de74b0c89a1c26c72940c Mon Sep 17 00:00:00 2001 From: Johan Haals Date: Wed, 18 Sep 2024 13:56:41 +0200 Subject: [PATCH 087/164] Scaffolder: Add ability to reference specific actions Signed-off-by: Johan Haals --- .changeset/nasty-lamps-greet.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/nasty-lamps-greet.md diff --git a/.changeset/nasty-lamps-greet.md b/.changeset/nasty-lamps-greet.md new file mode 100644 index 0000000000..75d8086db7 --- /dev/null +++ b/.changeset/nasty-lamps-greet.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder': minor +--- + +Added ability to link to a specific action on the actions page From a6be9058bf0308a71d88a855bf80f745ee8c294a Mon Sep 17 00:00:00 2001 From: Johan Haals Date: Wed, 18 Sep 2024 13:58:10 +0200 Subject: [PATCH 088/164] Scaffolder: Add ability to reference specific actions Signed-off-by: Johan Haals --- .../components/ActionsPage/ActionsPage.tsx | 31 ++++++++++++++++--- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/plugins/scaffolder/src/components/ActionsPage/ActionsPage.tsx b/plugins/scaffolder/src/components/ActionsPage/ActionsPage.tsx index 2f9bcba279..1bb2f7faae 100644 --- a/plugins/scaffolder/src/components/ActionsPage/ActionsPage.tsx +++ b/plugins/scaffolder/src/components/ActionsPage/ActionsPage.tsx @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import React, { Fragment, useState } from 'react'; +import React, { Fragment, useCallback, useEffect, useState } from 'react'; import useAsync from 'react-use/esm/useAsync'; import { ActionExample, @@ -38,6 +38,7 @@ import { JSONSchema7, JSONSchema7Definition } from 'json-schema'; import classNames from 'classnames'; import ExpandMoreIcon from '@material-ui/icons/ExpandMore'; import ExpandLessIcon from '@material-ui/icons/ExpandLess'; +import LinkIcon from '@material-ui/icons/Link'; import { useApi, useRouteRef } from '@backstage/core-plugin-api'; import { @@ -46,13 +47,14 @@ import { EmptyState, ErrorPanel, Header, + Link, MarkdownContent, Page, Progress, } from '@backstage/core-components'; import Chip from '@material-ui/core/Chip'; import { ScaffolderPageContextMenu } from '@backstage/plugin-scaffolder-react/alpha'; -import { useNavigate } from 'react-router-dom'; +import { useNavigate, useParams } from 'react-router-dom'; import { editRouteRef, rootRouteRef, @@ -85,6 +87,9 @@ const useStyles = makeStyles(theme => ({ color: theme.palette.error.light, }, }, + link: { + paddingLeft: theme.spacing(1), + }, })); const ExamplesTable = (props: { examples: ActionExample[] }) => { @@ -122,9 +127,16 @@ const ActionPageContent = () => { const classes = useStyles(); const { loading, value, error } = useAsync(async () => { return api.listActions(); - }); + }, [api]); + const [isExpanded, setIsExpanded] = useState<{ [key: string]: boolean }>({}); + useEffect(() => { + if (value && window.location.hash) { + document.querySelector(window.location.hash)?.scrollIntoView(); + } + }, [value]); + if (loading) { return ; } @@ -295,9 +307,20 @@ const ActionPageContent = () => { ); return ( - + {action.id} + + + {action.description && } {action.schema?.input && ( From e6d71e67e5a0ccf52c162a1bd1c838f3c862eb7a Mon Sep 17 00:00:00 2001 From: Johan Haals Date: Wed, 18 Sep 2024 14:01:06 +0200 Subject: [PATCH 089/164] chore: remove unused import Signed-off-by: Johan Haals --- plugins/scaffolder/src/components/ActionsPage/ActionsPage.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/scaffolder/src/components/ActionsPage/ActionsPage.tsx b/plugins/scaffolder/src/components/ActionsPage/ActionsPage.tsx index 1bb2f7faae..4f6bca1689 100644 --- a/plugins/scaffolder/src/components/ActionsPage/ActionsPage.tsx +++ b/plugins/scaffolder/src/components/ActionsPage/ActionsPage.tsx @@ -54,7 +54,7 @@ import { } from '@backstage/core-components'; import Chip from '@material-ui/core/Chip'; import { ScaffolderPageContextMenu } from '@backstage/plugin-scaffolder-react/alpha'; -import { useNavigate, useParams } from 'react-router-dom'; +import { useNavigate } from 'react-router-dom'; import { editRouteRef, rootRouteRef, From e86e4a5ff4437a447388e038dab8c0d427d46d7d Mon Sep 17 00:00:00 2001 From: Johan Haals Date: Wed, 18 Sep 2024 15:00:58 +0200 Subject: [PATCH 090/164] Remove unused imports Signed-off-by: Johan Haals --- plugins/scaffolder/src/components/ActionsPage/ActionsPage.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/scaffolder/src/components/ActionsPage/ActionsPage.tsx b/plugins/scaffolder/src/components/ActionsPage/ActionsPage.tsx index 4f6bca1689..240f2f8707 100644 --- a/plugins/scaffolder/src/components/ActionsPage/ActionsPage.tsx +++ b/plugins/scaffolder/src/components/ActionsPage/ActionsPage.tsx @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import React, { Fragment, useCallback, useEffect, useState } from 'react'; +import React, { Fragment, useEffect, useState } from 'react'; import useAsync from 'react-use/esm/useAsync'; import { ActionExample, From f14e127e4cf8646d3338b0348a589ffc470b9fc5 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Wed, 18 Sep 2024 17:47:26 +0200 Subject: [PATCH 091/164] Update plugins/events-node/src/api/DefaultEventsService.ts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Fredrik Adelöw Signed-off-by: Patrik Oldsberg --- plugins/events-node/src/api/DefaultEventsService.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/events-node/src/api/DefaultEventsService.ts b/plugins/events-node/src/api/DefaultEventsService.ts index 9055afaeb8..aa77d6e696 100644 --- a/plugins/events-node/src/api/DefaultEventsService.ts +++ b/plugins/events-node/src/api/DefaultEventsService.ts @@ -174,7 +174,7 @@ class PluginEventsService implements EventsService { if (!res.ok) { if (res.status === 404) { this.logger.warn( - `Event subscribe request failed with status 404, events backend not found. Future events will not be persisted.`, + `Event subscribe request failed with status 404, events backend not found. Will only receive events that were sent locally on this process.`, ); delete this.client; return; From 49ba6493f7246ecf8220da5c2180c5edd1bbca9b Mon Sep 17 00:00:00 2001 From: Stephen Glass Date: Wed, 18 Sep 2024 21:14:52 -0400 Subject: [PATCH 092/164] update log messages Signed-off-by: Stephen Glass --- .../src/scaffolder/actions/builtin/fetch/templateFile.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/templateFile.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/templateFile.ts index 7a01f4b75d..5734156148 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/templateFile.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/templateFile.ts @@ -120,7 +120,9 @@ export function createFetchTemplateFileAction(options: { ); if (fs.existsSync(outputPath) && !ctx.input.replace) { - ctx.logger.info('File already exists in workspace, not replacing.'); + ctx.logger.info( + `File ${ctx.input.targetPath} already exists in workspace, not replacing.`, + ); return; } @@ -161,7 +163,7 @@ export function createFetchTemplateFileAction(options: { await fs.ensureDir(path.dirname(outputPath)); await fs.outputFile(outputPath, result); - ctx.logger.info(`Template result written to ${outputPath}`); + ctx.logger.info(`Template file has been written to ${outputPath}`); }, }); } From b2b2aa8f057a15482019ad15c4c887442c6f3aa0 Mon Sep 17 00:00:00 2001 From: Stephen Glass Date: Wed, 18 Sep 2024 21:34:10 -0400 Subject: [PATCH 093/164] fix extra divider on owner list picker Signed-off-by: Stephen Glass --- .changeset/angry-windows-decide.md | 5 +++++ .../src/components/ListTasksPage/OwnerListPicker.tsx | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) create mode 100644 .changeset/angry-windows-decide.md diff --git a/.changeset/angry-windows-decide.md b/.changeset/angry-windows-decide.md new file mode 100644 index 0000000000..6a5c225e80 --- /dev/null +++ b/.changeset/angry-windows-decide.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder': patch +--- + +Fix extra divider displayed in owner list picker on list tasks page diff --git a/plugins/scaffolder/src/components/ListTasksPage/OwnerListPicker.tsx b/plugins/scaffolder/src/components/ListTasksPage/OwnerListPicker.tsx index 00efed45ba..44f3d46974 100644 --- a/plugins/scaffolder/src/components/ListTasksPage/OwnerListPicker.tsx +++ b/plugins/scaffolder/src/components/ListTasksPage/OwnerListPicker.tsx @@ -113,10 +113,10 @@ export const OwnerListPicker = (props: { - {group.items.map(item => ( + {group.items.map((item, index) => ( onSelectOwner(item.id as 'owned' | 'all')} selected={item.id === filter} From 46986466fef617ca0e1c797fddab5015b57d44a0 Mon Sep 17 00:00:00 2001 From: Stephen Glass Date: Wed, 18 Sep 2024 21:57:38 -0400 Subject: [PATCH 094/164] change task lists created at column to use timestamp Signed-off-by: Stephen Glass --- .changeset/dry-frogs-drum.md | 5 +++++ .../ListTasksPage/columns/CreatedAtColumn.tsx | 15 +++++---------- 2 files changed, 10 insertions(+), 10 deletions(-) create mode 100644 .changeset/dry-frogs-drum.md diff --git a/.changeset/dry-frogs-drum.md b/.changeset/dry-frogs-drum.md new file mode 100644 index 0000000000..c929732943 --- /dev/null +++ b/.changeset/dry-frogs-drum.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder': patch +--- + +Change task list created at column to show timestamp diff --git a/plugins/scaffolder/src/components/ListTasksPage/columns/CreatedAtColumn.tsx b/plugins/scaffolder/src/components/ListTasksPage/columns/CreatedAtColumn.tsx index 3b47287fd6..f40c4549d1 100644 --- a/plugins/scaffolder/src/components/ListTasksPage/columns/CreatedAtColumn.tsx +++ b/plugins/scaffolder/src/components/ListTasksPage/columns/CreatedAtColumn.tsx @@ -13,20 +13,15 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { DateTime, Interval } from 'luxon'; -import humanizeDuration from 'humanize-duration'; +import { DateTime } from 'luxon'; import React from 'react'; import Typography from '@material-ui/core/Typography'; export const CreatedAtColumn = ({ createdAt }: { createdAt: string }) => { const createdAtTime = DateTime.fromISO(createdAt); - const formatted = Interval.fromDateTimes(createdAtTime, DateTime.local()) - .toDuration() - .valueOf(); - - return ( - - {humanizeDuration(formatted, { round: true })} ago - + const formatted = createdAtTime.toLocaleString( + DateTime.DATETIME_SHORT_WITH_SECONDS, ); + + return {formatted}; }; From b829833344eb33caa99e8a8b2442985f189154f0 Mon Sep 17 00:00:00 2001 From: Stephen Glass Date: Wed, 18 Sep 2024 22:10:17 -0400 Subject: [PATCH 095/164] update created at column test Signed-off-by: Stephen Glass --- .../ListTasksPage/columns/CreatedAtColumn.test.tsx | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/plugins/scaffolder/src/components/ListTasksPage/columns/CreatedAtColumn.test.tsx b/plugins/scaffolder/src/components/ListTasksPage/columns/CreatedAtColumn.test.tsx index 9cd1353ae1..92f1c4560c 100644 --- a/plugins/scaffolder/src/components/ListTasksPage/columns/CreatedAtColumn.test.tsx +++ b/plugins/scaffolder/src/components/ListTasksPage/columns/CreatedAtColumn.test.tsx @@ -23,12 +23,16 @@ import { DateTime } from 'luxon'; describe('', () => { it('should render the column with the time', async () => { const props = { - createdAt: DateTime.now().toISO()!, + createdAt: DateTime.now().toISO(), }; + const formattedTime = DateTime.fromISO(props.createdAt).toLocaleString( + DateTime.DATETIME_SHORT_WITH_SECONDS, + ); + const { getByText } = await renderInTestApp(); - const text = getByText('0 seconds ago'); + const text = getByText(formattedTime); expect(text).toBeDefined(); }); }); From 74ebf8bcae6ea80453bb29c0497534f34a4a1127 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Wed, 18 Sep 2024 20:36:24 +0200 Subject: [PATCH 096/164] events-backend: minor review fixes Signed-off-by: Patrik Oldsberg --- .../src/service/EventsPlugin.test.ts | 2 +- .../src/service/hub/DatabaseEventBusStore.ts | 23 +++++++++-------- .../src/service/hub/createEventBusRouter.ts | 25 +++++++++---------- 3 files changed, 26 insertions(+), 24 deletions(-) diff --git a/plugins/events-backend/src/service/EventsPlugin.test.ts b/plugins/events-backend/src/service/EventsPlugin.test.ts index 37b4cfd961..2c0befe1fd 100644 --- a/plugins/events-backend/src/service/EventsPlugin.test.ts +++ b/plugins/events-backend/src/service/EventsPlugin.test.ts @@ -139,7 +139,7 @@ describe('eventsPlugin', () => { } const databases = TestDatabases.create({ - ids: ['SQLITE_3', 'POSTGRES_9', 'POSTGRES_13', 'POSTGRES_16'], + ids: ['SQLITE_3', 'MYSQL_8', 'POSTGRES_9', 'POSTGRES_13', 'POSTGRES_16'], }); async function mockKnexFactory(databaseId: TestDatabaseId) { diff --git a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts index c94fa2aa2c..0f4085e794 100644 --- a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts +++ b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts @@ -269,7 +269,6 @@ export class DatabaseEventBusStore implements EventBusStore { await db.migrate.latest({ directory: migrationsDir, }); - options.logger.info('DatabaseEventBusStore migrations ran successfully'); } const listener = new DatabaseEventBusListener(db.client, options.logger); @@ -288,7 +287,7 @@ export class DatabaseEventBusStore implements EventBusStore { frequency: { seconds: 10 }, timeout: { minutes: 1 }, initialDelay: { seconds: 10 }, - fn: store.#cleanup, + fn: () => store.#cleanup(), }); options.lifecycle.addShutdownHook(async () => { @@ -532,7 +531,7 @@ export class DatabaseEventBusStore implements EventBusStore { ); } - #cleanup = async () => { + async #cleanup() { try { const eventCount = await this.#db(TABLE_EVENTS) .delete() @@ -549,9 +548,11 @@ export class DatabaseEventBusStore implements EventBusStore { // If events are outside the max age they will always be deleted .orWhere('created_at', '<', new Date(Date.now() - this.#windowMaxAge)); - this.#logger.info( - `Event cleanup resulted in ${eventCount} old events being deleted`, - ); + if (eventCount > 0) { + this.#logger.info( + `Event cleanup resulted in ${eventCount} old events being deleted`, + ); + } } catch (error) { this.#logger.error('Event cleanup failed', error); } @@ -572,11 +573,13 @@ export class DatabaseEventBusStore implements EventBusStore { .where('read_until', '<', minId - 1); } - this.#logger.info( - `Subscription cleanup resulted in ${subscriberCount} stale subscribers being deleted`, - ); + if (subscriberCount > 0) { + this.#logger.info( + `Subscription cleanup resulted in ${subscriberCount} stale subscribers being deleted`, + ); + } } catch (error) { this.#logger.error('Subscription cleanup failed', error); } - }; + } } diff --git a/plugins/events-backend/src/service/hub/createEventBusRouter.ts b/plugins/events-backend/src/service/hub/createEventBusRouter.ts index b1e99596b1..485f1b0e58 100644 --- a/plugins/events-backend/src/service/hub/createEventBusRouter.ts +++ b/plugins/events-backend/src/service/hub/createEventBusRouter.ts @@ -22,7 +22,6 @@ import { SchedulerService, } from '@backstage/backend-plugin-api'; import { Handler } from 'express'; -import Router from 'express-promise-router'; import { createOpenApiRouter } from '../../schema/openapi.generated'; import { MemoryEventBusStore } from './MemoryEventBusStore'; import { DatabaseEventBusStore } from './DatabaseEventBusStore'; @@ -145,14 +144,11 @@ export async function createEventBusRouter(options: { }): Promise { const { httpAuth, notifyTimeoutMs = DEFAULT_NOTIFY_TIMEOUT_MS } = options; const logger = options.logger.child({ type: 'EventBus' }); - const router = Router(); const store = await createEventBusStore(options); const apiRouter = await createOpenApiRouter(); - router.use(apiRouter); - apiRouter.post('/bus/v1/events', async (req, res) => { const credentials = await httpAuth.credentials(req, { allow: ['service'], @@ -164,22 +160,25 @@ export async function createEventBusRouter(options: { topic, eventPayload: req.body.event.payload, } as EventParams, - notifiedSubscribers: req.body.notifiedSubscribers, + notifiedSubscribers, }); if (result) { - logger.info(`Published event to '${topic}' with ID '${result.eventId}'`, { - subject: credentials.principal.subject, - }); + logger.debug( + `Published event to '${topic}' with ID '${result.eventId}'`, + { + subject: credentials.principal.subject, + }, + ); res.status(201).end(); } else { if (notifiedSubscribers) { const notified = `'${notifiedSubscribers.join("', '")}'`; - logger.info( + logger.debug( `Skipped publishing of event to '${topic}', subscribers have already been notified: ${notified}`, { subject: credentials.principal.subject }, ); } else { - logger.info( + logger.debug( `Skipped publishing of event to '${topic}', no subscribers present`, { subject: credentials.principal.subject }, ); @@ -216,7 +215,7 @@ export async function createEventBusRouter(options: { try { const { events } = await store.readSubscription(id); - logger.info( + logger.debug( `Reading subscription '${id}' resulted in ${events.length} events`, { subject: credentials.principal.subject }, ); @@ -234,7 +233,7 @@ export async function createEventBusRouter(options: { try { const { topic } = await listener.waitForUpdate(); - logger.info( + logger.debug( `Received notification for subscription '${id}' for topic '${topic}'`, { subject: credentials.principal.subject }, ); @@ -266,7 +265,7 @@ export async function createEventBusRouter(options: { await store.upsertSubscription(id, req.body.topics); - logger.info( + logger.debug( `New subscription '${id}' for topics '${req.body.topics.join("', '")}'`, { subject: credentials.principal.subject }, ); From 483c8dc24329c9ccc385711e4c8cd9492b5d66ea Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Wed, 18 Sep 2024 20:36:50 +0200 Subject: [PATCH 097/164] events-backend: proper cleanup of signal abort listeners Signed-off-by: Patrik Oldsberg --- .../src/service/hub/DatabaseEventBusStore.ts | 23 ++++++++++++++++--- .../src/service/hub/MemoryEventBusStore.ts | 19 ++++++++++++--- 2 files changed, 36 insertions(+), 6 deletions(-) diff --git a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts index 0f4085e794..c51179896b 100644 --- a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts +++ b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts @@ -109,14 +109,31 @@ class DatabaseEventBusListener { await this.#ensureConnection(); const updatePromise = new Promise<{ topic: string }>((resolve, reject) => { - const listener = { topics, resolve, reject }; + const listener = { + topics, + resolve(result: { topic: string }) { + resolve(result); + cleanup(); + }, + reject(err: Error) { + reject(err); + cleanup(); + }, + }; this.#listeners.add(listener); - signal.addEventListener('abort', () => { + const onAbort = () => { this.#listeners.delete(listener); this.#maybeTimeoutConnection(); reject(signal.reason); - }); + cleanup(); + }; + + function cleanup() { + signal.removeEventListener('abort', onAbort); + } + + signal.addEventListener('abort', onAbort); }); // Ignore unhandled rejections diff --git a/plugins/events-backend/src/service/hub/MemoryEventBusStore.ts b/plugins/events-backend/src/service/hub/MemoryEventBusStore.ts index 2e4dba34bd..b7b1d78052 100644 --- a/plugins/events-backend/src/service/hub/MemoryEventBusStore.ts +++ b/plugins/events-backend/src/service/hub/MemoryEventBusStore.ts @@ -115,13 +115,26 @@ export class MemoryEventBusStore implements EventBusStore { } return new Promise<{ topic: string }>((resolve, reject) => { - const listener = { topics: sub.topics, resolve }; + const listener = { + topics: sub.topics, + resolve(result: { topic: string }) { + resolve(result); + cleanup(); + }, + }; this.#listeners.add(listener); - options.signal.addEventListener('abort', () => { + const onAbort = () => { this.#listeners.delete(listener); reject(options.signal.reason); - }); + cleanup(); + }; + + function cleanup() { + options.signal.removeEventListener('abort', onAbort); + } + + options.signal.addEventListener('abort', onAbort); }); }, }; From cda26b88225de7536acf0aeb65907c67e114bd9e Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Wed, 18 Sep 2024 23:45:44 +0200 Subject: [PATCH 098/164] events-backend: add cleanup of old events for memory store Signed-off-by: Patrik Oldsberg --- .../service/hub/MemoryEventBusStore.test.ts | 86 +++++++++++++++++++ .../src/service/hub/MemoryEventBusStore.ts | 19 +++- 2 files changed, 104 insertions(+), 1 deletion(-) create mode 100644 plugins/events-backend/src/service/hub/MemoryEventBusStore.test.ts diff --git a/plugins/events-backend/src/service/hub/MemoryEventBusStore.test.ts b/plugins/events-backend/src/service/hub/MemoryEventBusStore.test.ts new file mode 100644 index 0000000000..6866f290b5 --- /dev/null +++ b/plugins/events-backend/src/service/hub/MemoryEventBusStore.test.ts @@ -0,0 +1,86 @@ +/* + * 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 { EventParams } from '@backstage/plugin-events-node'; +import { MemoryEventBusStore } from './MemoryEventBusStore'; + +function mkEvent(message: string): EventParams { + return { + topic: 'test', + eventPayload: { message }, + }; +} + +describe('MemoryEventBusStore', () => { + it('should publish to subscribers', async () => { + const store = new MemoryEventBusStore(); + + await expect( + store.publish({ + event: mkEvent('hello'), + notifiedSubscribers: [], + }), + ).resolves.toEqual(undefined); + + await expect(store.readSubscription('test')).rejects.toThrow( + 'Subscription not found', + ); + + await store.upsertSubscription('tester', ['test']); + + await expect( + store.publish({ + event: mkEvent('hello'), + notifiedSubscribers: [], + }), + ).resolves.toEqual({ eventId: '1' }); + + await expect( + store.publish({ + event: mkEvent('ignored'), + notifiedSubscribers: ['tester'], + }), + ).resolves.toEqual(undefined); + + await expect(store.readSubscription('tester')).resolves.toEqual({ + events: [mkEvent('hello')], + }); + }); + + it('should clean up old events', async () => { + const store = new MemoryEventBusStore({ maxEvents: 5 }); + + await store.upsertSubscription('tester', ['test']); + + for (let i = 0; i < 20; ++i) { + await expect( + store.publish({ + event: mkEvent(`hello ${i}`), + notifiedSubscribers: [], + }), + ).resolves.toEqual({ eventId: String(i + 1) }); + } + + await expect(store.readSubscription('tester')).resolves.toEqual({ + events: [ + mkEvent('hello 15'), + mkEvent('hello 16'), + mkEvent('hello 17'), + mkEvent('hello 18'), + mkEvent('hello 19'), + ], + }); + }); +}); diff --git a/plugins/events-backend/src/service/hub/MemoryEventBusStore.ts b/plugins/events-backend/src/service/hub/MemoryEventBusStore.ts index b7b1d78052..67d384b1fa 100644 --- a/plugins/events-backend/src/service/hub/MemoryEventBusStore.ts +++ b/plugins/events-backend/src/service/hub/MemoryEventBusStore.ts @@ -18,8 +18,10 @@ import { EventBusStore } from './types'; import { NotFoundError } from '@backstage/errors'; const MAX_BATCH_SIZE = 10; +const MAX_EVENTS_DEFAULT = 1_000; export class MemoryEventBusStore implements EventBusStore { + #maxEvents: number; #events = new Array< EventParams & { seq: number; notifiedSubscribers: Set } >(); @@ -32,6 +34,10 @@ export class MemoryEventBusStore implements EventBusStore { resolve(result: { topic: string }): void; }>(); + constructor(options: { maxEvents?: number } = {}) { + this.#maxEvents = options.maxEvents ?? MAX_EVENTS_DEFAULT; + } + async publish(options: { event: EventParams; notifiedSubscribers: string[]; @@ -59,6 +65,12 @@ export class MemoryEventBusStore implements EventBusStore { this.#listeners.delete(listener); } } + + // Trim old events + if (this.#events.length > this.#maxEvents) { + this.#events.shift(); + } + return { eventId: String(nextSeq) }; } @@ -96,7 +108,12 @@ export class MemoryEventBusStore implements EventBusStore { sub.seq = events[events.length - 1]?.seq ?? sub.seq; - return { events: events.map(event => ({ ...event, seq: undefined })) }; + return { + events: events.map(({ topic, eventPayload }) => ({ + topic, + eventPayload, + })), + }; } async setupListener( From 38edbc387ba0c7d01b8c7debac6b61f8003283c4 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Wed, 18 Sep 2024 23:50:00 +0200 Subject: [PATCH 099/164] events-backend: refactor db query to clarify precedence Signed-off-by: Patrik Oldsberg --- .../src/service/hub/DatabaseEventBusStore.ts | 23 ++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts index c51179896b..3a6a98d919 100644 --- a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts +++ b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts @@ -553,15 +553,22 @@ export class DatabaseEventBusStore implements EventBusStore { const eventCount = await this.#db(TABLE_EVENTS) .delete() // Delete any events that are outside both the min age and size window - .whereIn( - 'id', - this.#db - .select('id') - .from(TABLE_EVENTS) - .orderBy('id', 'desc') - .offset(this.#windowMaxCount), + .orWhere(inner => + inner + .whereIn( + 'id', + this.#db + .select('id') + .from(TABLE_EVENTS) + .orderBy('id', 'desc') + .offset(this.#windowMaxCount), + ) + .andWhere( + 'created_at', + '<', + new Date(Date.now() - this.#windowMinAge), + ), ) - .andWhere('created_at', '<', new Date(Date.now() - this.#windowMinAge)) // If events are outside the max age they will always be deleted .orWhere('created_at', '<', new Date(Date.now() - this.#windowMaxAge)); From e7a0b6572c539166543440aed84d15956b2a6564 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Thu, 19 Sep 2024 00:01:18 +0200 Subject: [PATCH 100/164] events-backend: added migration test Signed-off-by: Patrik Oldsberg --- plugins/events-backend/src/migrations.test.ts | 97 +++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 plugins/events-backend/src/migrations.test.ts diff --git a/plugins/events-backend/src/migrations.test.ts b/plugins/events-backend/src/migrations.test.ts new file mode 100644 index 0000000000..16853f6052 --- /dev/null +++ b/plugins/events-backend/src/migrations.test.ts @@ -0,0 +1,97 @@ +/* + * Copyright 2022 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 { Knex } from 'knex'; +import { TestDatabases } from '@backstage/backend-test-utils'; +import fs from 'fs'; + +const migrationsDir = `${__dirname}/../migrations`; +const migrationsFiles = fs.readdirSync(migrationsDir).sort(); + +async function migrateUpOnce(knex: Knex): Promise { + await knex.migrate.up({ directory: migrationsDir }); +} + +async function migrateDownOnce(knex: Knex): Promise { + await knex.migrate.down({ directory: migrationsDir }); +} + +async function migrateUntilBefore(knex: Knex, target: string): Promise { + const index = migrationsFiles.indexOf(target); + if (index === -1) { + throw new Error(`Migration ${target} not found`); + } + for (let i = 0; i < index; i++) { + await migrateUpOnce(knex); + } +} + +jest.setTimeout(60_000); + +describe('migrations', () => { + const databases = TestDatabases.create({ + ids: ['POSTGRES_9', 'POSTGRES_13', 'POSTGRES_16'], + }); + + it.each(databases.eachSupportedId())( + '20240523100528_init.js, %p', + async databaseId => { + const knex = await databases.init(databaseId); + + await migrateUntilBefore(knex, '20240523100528_init.js'); + await migrateUpOnce(knex); + + await knex('event_bus_events').insert({ + topic: 'test', + data_json: JSON.stringify({ message: 'hello' }), + consumed_by: ['tester'], + }); + await knex('event_bus_subscriptions').insert({ + id: 'tester', + read_until: '5', + topics: ['test', 'test2'], + }); + + await expect(knex('event_bus_events')).resolves.toEqual([ + { + id: '1', + topic: 'test', + data_json: JSON.stringify({ message: 'hello' }), + created_at: expect.anything(), + consumed_by: ['tester'], + }, + ]); + await expect(knex('event_bus_subscriptions')).resolves.toEqual([ + { + id: 'tester', + created_at: expect.anything(), + updated_at: expect.anything(), + read_until: '5', + topics: ['test', 'test2'], + }, + ]); + + await migrateDownOnce(knex); + + // This looks odd - you might expect a .toThrow at the end but that + // actually is flaky for some reason specifically on sqlite when + // performing multiple runs in sequence + await expect(knex('event_bus_events')).rejects.toEqual(expect.anything()); + + await knex.destroy(); + }, + ); +}); From 82412894273addaac64689c72f2afc62f3a06d2e Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Thu, 19 Sep 2024 01:19:31 +0200 Subject: [PATCH 101/164] events-backend: track creator of events and subscriptions Signed-off-by: Patrik Oldsberg --- .../migrations/20240523100528_init.js | 8 +++ plugins/events-backend/src/migrations.test.ts | 4 ++ .../service/hub/DatabaseEventBusStore.test.ts | 55 +++++++++++++++---- .../src/service/hub/DatabaseEventBusStore.ts | 24 +++++++- .../service/hub/MemoryEventBusStore.test.ts | 5 ++ .../src/service/hub/MemoryEventBusStore.ts | 5 ++ .../src/service/hub/createEventBusRouter.ts | 3 +- .../events-backend/src/service/hub/types.ts | 11 +++- 8 files changed, 100 insertions(+), 15 deletions(-) diff --git a/plugins/events-backend/migrations/20240523100528_init.js b/plugins/events-backend/migrations/20240523100528_init.js index 7ec85d7917..c3b66658fd 100644 --- a/plugins/events-backend/migrations/20240523100528_init.js +++ b/plugins/events-backend/migrations/20240523100528_init.js @@ -29,6 +29,10 @@ exports.up = async function up(knex) { .bigIncrements('id') .primary() .comment('The unique ID of this event'); + table + .text('created_by') + .notNullable() + .comment('The principal that published the event'); table .dateTime('created_at') .defaultTo(knex.fn.now()) @@ -53,6 +57,10 @@ exports.up = async function up(knex) { .primary() .notNullable() .comment('The unique ID of this particular subscription'); + table + .text('created_by') + .notNullable() + .comment('The principal that created the subscription'); table .dateTime('created_at') .defaultTo(knex.fn.now()) diff --git a/plugins/events-backend/src/migrations.test.ts b/plugins/events-backend/src/migrations.test.ts index 16853f6052..069b326075 100644 --- a/plugins/events-backend/src/migrations.test.ts +++ b/plugins/events-backend/src/migrations.test.ts @@ -56,11 +56,13 @@ describe('migrations', () => { await knex('event_bus_events').insert({ topic: 'test', + created_by: 'abc', data_json: JSON.stringify({ message: 'hello' }), consumed_by: ['tester'], }); await knex('event_bus_subscriptions').insert({ id: 'tester', + created_by: 'abc', read_until: '5', topics: ['test', 'test2'], }); @@ -68,6 +70,7 @@ describe('migrations', () => { await expect(knex('event_bus_events')).resolves.toEqual([ { id: '1', + created_by: 'abc', topic: 'test', data_json: JSON.stringify({ message: 'hello' }), created_at: expect.anything(), @@ -77,6 +80,7 @@ describe('migrations', () => { await expect(knex('event_bus_subscriptions')).resolves.toEqual([ { id: 'tester', + created_by: 'abc', created_at: expect.anything(), updated_at: expect.anything(), read_until: '5', diff --git a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.test.ts b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.test.ts index 3c8d2cb377..bfc68b7663 100644 --- a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.test.ts +++ b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.test.ts @@ -14,7 +14,11 @@ * limitations under the License. */ -import { TestDatabases, mockServices } from '@backstage/backend-test-utils'; +import { + TestDatabases, + mockCredentials, + mockServices, +} from '@backstage/backend-test-utils'; import { DatabaseEventBusStore } from './DatabaseEventBusStore'; const logger = mockServices.logger.mock(); @@ -30,12 +34,21 @@ describe('DatabaseEventBusStore', () => { const db = await databases.init(databaseId); const store = await DatabaseEventBusStore.forTest({ logger, db }); - await store.upsertSubscription('tester-1', ['test']); - await store.upsertSubscription('tester-2', ['test']); + await store.upsertSubscription( + 'tester-1', + ['test'], + mockCredentials.service(), + ); + await store.upsertSubscription( + 'tester-2', + ['test'], + mockCredentials.service(), + ); for (let i = 0; i < 10; ++i) { await store.publish({ event: { topic: 'test', eventPayload: { n: i } }, + credentials: mockCredentials.service(), }); } @@ -48,7 +61,11 @@ describe('DatabaseEventBusStore', () => { "Subscription with ID 'tester-2' not found", ); - await store.upsertSubscription('tester-3', ['test']); + await store.upsertSubscription( + 'tester-3', + ['test'], + mockCredentials.service(), + ); // Reset read pointer to read form the beginning await db('event_bus_subscriptions').select({ id: 'tester-3' }).update({ @@ -70,12 +87,21 @@ describe('DatabaseEventBusStore', () => { maxAge: 0, }); - await store.upsertSubscription('tester-1', ['test']); - await store.upsertSubscription('tester-2', ['test']); + await store.upsertSubscription( + 'tester-1', + ['test'], + mockCredentials.service(), + ); + await store.upsertSubscription( + 'tester-2', + ['test'], + mockCredentials.service(), + ); for (let i = 0; i < 10; ++i) { await store.publish({ event: { topic: 'test', eventPayload: { n: i } }, + credentials: mockCredentials.service(), }); } @@ -88,7 +114,11 @@ describe('DatabaseEventBusStore', () => { "Subscription with ID 'tester-2' not found", ); - await store.upsertSubscription('tester-3', ['test']); + await store.upsertSubscription( + 'tester-3', + ['test'], + mockCredentials.service(), + ); // Reset read pointer to read form the beginning await db('event_bus_subscriptions').select({ id: 'tester-3' }).update({ @@ -110,11 +140,16 @@ describe('DatabaseEventBusStore', () => { minAge: 1000, }); - await store.upsertSubscription('tester-1', ['test']); + await store.upsertSubscription( + 'tester-1', + ['test'], + mockCredentials.service(), + ); for (let i = 0; i < 10; ++i) { await store.publish({ event: { topic: 'test', eventPayload: { n: i } }, + credentials: mockCredentials.service(), }); } @@ -137,8 +172,8 @@ describe('DatabaseEventBusStore', () => { const COUNT = '100000'; await db.raw(` - INSERT INTO event_bus_events (id, topic, data_json) - SELECT id, 'test', '{}' + INSERT INTO event_bus_events (id, created_by, topic, data_json) + SELECT id, 'abc', 'test', '{}' FROM generate_series(1, ${COUNT}) AS id `); diff --git a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts index 3a6a98d919..a25856e88d 100644 --- a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts +++ b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts @@ -17,6 +17,8 @@ import { EventParams } from '@backstage/plugin-events-node'; import { EventBusStore } from './types'; import { Knex } from 'knex'; import { + BackstageCredentials, + BackstageServicePrincipal, DatabaseService, LifecycleService, LoggerService, @@ -40,6 +42,7 @@ const TOPIC_PUBLISH = 'event_bus_publish'; type EventsRow = { id: string; + created_by: string; created_at: Date; topic: string; data_json: string; @@ -48,12 +51,19 @@ type EventsRow = { type SubscriptionsRow = { id: string; + created_by: string; created_at: Date; updated_at: Date; read_until: string; topics: string[]; }; +function creatorId( + credentials: BackstageCredentials, +) { + return `service=${credentials.principal.subject}`; +} + const migrationsDir = resolvePackagePath( '@backstage/plugin-events-backend', 'migrations', @@ -366,6 +376,7 @@ export class DatabaseEventBusStore implements EventBusStore { async publish(options: { event: EventParams; notifiedSubscribers?: string[]; + credentials: BackstageCredentials; }): Promise<{ eventId: string } | undefined> { const topic = options.event.topic; const notifiedSubscribers = options.notifiedSubscribers ?? []; @@ -374,9 +385,10 @@ export class DatabaseEventBusStore implements EventBusStore { const result = await this.#db // There's no clean way to create a INSERT INTO .. SELECT with knex, so we end up with quite a lot of .raw(...) .into( - this.#db.raw('?? (??, ??, ??)', [ + this.#db.raw('?? (??, ??, ??, ??)', [ TABLE_EVENTS, // These are the rows that we insert, and should match the SELECT below + 'created_by', 'topic', 'data_json', 'consumed_by', @@ -387,6 +399,7 @@ export class DatabaseEventBusStore implements EventBusStore { q // We're not reading data to insert from anywhere else, just raw data .select( + this.#db.raw('?', [creatorId(options.credentials)]), this.#db.raw('?', [topic]), this.#db.raw('?', [ JSON.stringify({ @@ -429,17 +442,22 @@ export class DatabaseEventBusStore implements EventBusStore { return { eventId: id }; } - async upsertSubscription(id: string, topics: string[]): Promise { + async upsertSubscription( + id: string, + topics: string[], + credentials: BackstageCredentials, + ): Promise { const [{ max: maxId }] = await this.#db(TABLE_EVENTS).max('id'); const result = await this.#db(TABLE_SUBSCRIPTIONS) .insert({ id, + created_by: creatorId(credentials), updated_at: this.#db.fn.now(), topics, read_until: maxId || 0, }) .onConflict('id') - .merge(['topics', 'updated_at']) + .merge(['created_by', 'topics', 'updated_at']) .returning('*'); if (result.length !== 1) { diff --git a/plugins/events-backend/src/service/hub/MemoryEventBusStore.test.ts b/plugins/events-backend/src/service/hub/MemoryEventBusStore.test.ts index 6866f290b5..52d075951d 100644 --- a/plugins/events-backend/src/service/hub/MemoryEventBusStore.test.ts +++ b/plugins/events-backend/src/service/hub/MemoryEventBusStore.test.ts @@ -15,6 +15,7 @@ */ import { EventParams } from '@backstage/plugin-events-node'; import { MemoryEventBusStore } from './MemoryEventBusStore'; +import { mockCredentials } from '@backstage/backend-test-utils'; function mkEvent(message: string): EventParams { return { @@ -31,6 +32,7 @@ describe('MemoryEventBusStore', () => { store.publish({ event: mkEvent('hello'), notifiedSubscribers: [], + credentials: mockCredentials.service(), }), ).resolves.toEqual(undefined); @@ -44,6 +46,7 @@ describe('MemoryEventBusStore', () => { store.publish({ event: mkEvent('hello'), notifiedSubscribers: [], + credentials: mockCredentials.service(), }), ).resolves.toEqual({ eventId: '1' }); @@ -51,6 +54,7 @@ describe('MemoryEventBusStore', () => { store.publish({ event: mkEvent('ignored'), notifiedSubscribers: ['tester'], + credentials: mockCredentials.service(), }), ).resolves.toEqual(undefined); @@ -69,6 +73,7 @@ describe('MemoryEventBusStore', () => { store.publish({ event: mkEvent(`hello ${i}`), notifiedSubscribers: [], + credentials: mockCredentials.service(), }), ).resolves.toEqual({ eventId: String(i + 1) }); } diff --git a/plugins/events-backend/src/service/hub/MemoryEventBusStore.ts b/plugins/events-backend/src/service/hub/MemoryEventBusStore.ts index 67d384b1fa..6c999dc390 100644 --- a/plugins/events-backend/src/service/hub/MemoryEventBusStore.ts +++ b/plugins/events-backend/src/service/hub/MemoryEventBusStore.ts @@ -16,6 +16,10 @@ import { EventParams } from '@backstage/plugin-events-node'; import { EventBusStore } from './types'; import { NotFoundError } from '@backstage/errors'; +import { + BackstageCredentials, + BackstageServicePrincipal, +} from '@backstage/backend-plugin-api'; const MAX_BATCH_SIZE = 10; const MAX_EVENTS_DEFAULT = 1_000; @@ -41,6 +45,7 @@ export class MemoryEventBusStore implements EventBusStore { async publish(options: { event: EventParams; notifiedSubscribers: string[]; + credentials: BackstageCredentials; }): Promise<{ eventId: string } | undefined> { const topic = options.event.topic; const notifiedSubscribers = new Set(options.notifiedSubscribers); diff --git a/plugins/events-backend/src/service/hub/createEventBusRouter.ts b/plugins/events-backend/src/service/hub/createEventBusRouter.ts index 485f1b0e58..4a332d5ce5 100644 --- a/plugins/events-backend/src/service/hub/createEventBusRouter.ts +++ b/plugins/events-backend/src/service/hub/createEventBusRouter.ts @@ -161,6 +161,7 @@ export async function createEventBusRouter(options: { eventPayload: req.body.event.payload, } as EventParams, notifiedSubscribers, + credentials, }); if (result) { logger.debug( @@ -263,7 +264,7 @@ export async function createEventBusRouter(options: { }); const id = req.params.subscriptionId; - await store.upsertSubscription(id, req.body.topics); + await store.upsertSubscription(id, req.body.topics, credentials); logger.debug( `New subscription '${id}' for topics '${req.body.topics.join("', '")}'`, diff --git a/plugins/events-backend/src/service/hub/types.ts b/plugins/events-backend/src/service/hub/types.ts index 0d363bec8b..316d9e561f 100644 --- a/plugins/events-backend/src/service/hub/types.ts +++ b/plugins/events-backend/src/service/hub/types.ts @@ -14,15 +14,24 @@ * limitations under the License. */ +import { + BackstageCredentials, + BackstageServicePrincipal, +} from '@backstage/backend-plugin-api'; import { EventParams } from '@backstage/plugin-events-node'; export type EventBusStore = { publish(options: { event: EventParams; notifiedSubscribers?: string[]; + credentials: BackstageCredentials; }): Promise<{ eventId: string } | undefined>; - upsertSubscription(subscriptionId: string, topics: string[]): Promise; + upsertSubscription( + subscriptionId: string, + topics: string[], + credentials: BackstageCredentials, + ): Promise; readSubscription(subscriptionId: string): Promise<{ events: EventParams[] }>; From 09fcd95d43d139b8a2e661daef8fd0befd18bcfb Mon Sep 17 00:00:00 2001 From: Camila Belo Date: Thu, 19 Sep 2024 01:29:24 +0200 Subject: [PATCH 102/164] feat: enhance template editor usability Signed-off-by: Camila Belo --- .changeset/tiny-pugs-kick.md | 5 + plugins/scaffolder/api-report-alpha.md | 4 +- .../components/ActionsPage/ActionsPage.tsx | 2 +- .../components/FileBrowser/FileBrowser.tsx | 5 +- .../CustomFieldPlaygroud.tsx | 221 ++++++++++++++++++ .../TemplateEditorPage/TemplateEditor.tsx | 53 ++++- .../TemplateEditorBrowser.tsx | 51 ++-- .../TemplateEditorPage/TemplateEditorForm.tsx | 53 ++--- .../TemplateEditorToolbar.tsx | 139 +++++++++++ plugins/scaffolder/src/translation.ts | 10 +- 10 files changed, 471 insertions(+), 72 deletions(-) create mode 100644 .changeset/tiny-pugs-kick.md create mode 100644 plugins/scaffolder/src/next/TemplateEditorPage/CustomFieldPlaygroud.tsx create mode 100644 plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorToolbar.tsx diff --git a/.changeset/tiny-pugs-kick.md b/.changeset/tiny-pugs-kick.md new file mode 100644 index 0000000000..2d6f83b325 --- /dev/null +++ b/.changeset/tiny-pugs-kick.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder': patch +--- + +Update the Scaffolder template editor to quickly access installed custom fields and actions when editing a template. diff --git a/plugins/scaffolder/api-report-alpha.md b/plugins/scaffolder/api-report-alpha.md index 9e4f1265c8..6a15507858 100644 --- a/plugins/scaffolder/api-report-alpha.md +++ b/plugins/scaffolder/api-report-alpha.md @@ -227,6 +227,7 @@ export const scaffolderTranslationRef: TranslationRef< readonly 'ongoingTask.startOverButtonTitle': 'Start Over'; readonly 'ongoingTask.hideLogsButtonTitle': 'Hide Logs'; readonly 'ongoingTask.showLogsButtonTitle': 'Show Logs'; + readonly 'templateEditorForm.stepper.emptyText': 'There are no spec parameters in the template to preview.'; readonly 'templateTypePicker.title': 'Categories'; readonly 'templateEditorPage.title': 'Template Editor'; readonly 'templateEditorPage.subtitle': 'Edit, preview, and try out templates and template forms'; @@ -238,10 +239,11 @@ export const scaffolderTranslationRef: TranslationRef< readonly 'templateEditorPage.dryRunResultsView.tab.log': 'Log'; readonly 'templateEditorPage.dryRunResultsView.tab.files': 'Files'; readonly 'templateEditorPage.taskStatusStepper.skippedStepTitle': 'Skipped'; - readonly 'templateEditorPage.customFieldExplorer.preview.title': 'Example Template Spec'; + readonly 'templateEditorPage.customFieldExplorer.preview.title': 'Template Spec'; readonly 'templateEditorPage.customFieldExplorer.fieldForm.title': 'Field Options'; readonly 'templateEditorPage.customFieldExplorer.fieldForm.applyButtonTitle': 'Apply'; readonly 'templateEditorPage.customFieldExplorer.selectFieldLabel': 'Choose Custom Field Extension'; + readonly 'templateEditorPage.customFieldExplorer.fieldPreview.title': 'Field Preview'; readonly 'templateEditorPage.templateEditorBrowser.closeConfirmMessage': 'Are you sure? Unsaved changes will be lost'; readonly 'templateEditorPage.templateEditorBrowser.saveIconTooltip': 'Save all files'; readonly 'templateEditorPage.templateEditorBrowser.reloadIconTooltip': 'Reload directory'; diff --git a/plugins/scaffolder/src/components/ActionsPage/ActionsPage.tsx b/plugins/scaffolder/src/components/ActionsPage/ActionsPage.tsx index 2f9bcba279..7c23637bb6 100644 --- a/plugins/scaffolder/src/components/ActionsPage/ActionsPage.tsx +++ b/plugins/scaffolder/src/components/ActionsPage/ActionsPage.tsx @@ -115,7 +115,7 @@ const ExamplesTable = (props: { examples: ActionExample[] }) => { ); }; -const ActionPageContent = () => { +export const ActionPageContent = () => { const api = useApi(scaffolderApiRef); const { t } = useTranslationRef(scaffolderTranslationRef); diff --git a/plugins/scaffolder/src/components/FileBrowser/FileBrowser.tsx b/plugins/scaffolder/src/components/FileBrowser/FileBrowser.tsx index 1273b8ad09..d18ac02d4e 100644 --- a/plugins/scaffolder/src/components/FileBrowser/FileBrowser.tsx +++ b/plugins/scaffolder/src/components/FileBrowser/FileBrowser.tsx @@ -21,12 +21,13 @@ import ExpandMoreIcon from '@material-ui/icons/ExpandMore'; import ChevronRightIcon from '@material-ui/icons/ChevronRight'; import TreeItem from '@material-ui/lab/TreeItem'; -const useStyles = makeStyles({ +const useStyles = makeStyles(theme => ({ root: { whiteSpace: 'nowrap', overflowY: 'auto', + padding: theme.spacing(1.5), }, -}); +})); export type FileEntry = | { diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/CustomFieldPlaygroud.tsx b/plugins/scaffolder/src/next/TemplateEditorPage/CustomFieldPlaygroud.tsx new file mode 100644 index 0000000000..6964fe3364 --- /dev/null +++ b/plugins/scaffolder/src/next/TemplateEditorPage/CustomFieldPlaygroud.tsx @@ -0,0 +1,221 @@ +/* + * Copyright 2022 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 React, { useCallback, useMemo, useState } from 'react'; +import yaml from 'yaml'; +import validator from '@rjsf/validator-ajv8'; +import CodeMirror from '@uiw/react-codemirror'; +import { StreamLanguage } from '@codemirror/language'; +import { yaml as yamlSupport } from '@codemirror/legacy-modes/mode/yaml'; + +import { makeStyles } from '@material-ui/core/styles'; +import FormControl from '@material-ui/core/FormControl'; +import InputLabel from '@material-ui/core/InputLabel'; +import MenuItem from '@material-ui/core/MenuItem'; +import Select from '@material-ui/core/Select'; +import Accordion from '@material-ui/core/Accordion'; +import AccordionSummary from '@material-ui/core/AccordionSummary'; +import AccordionDetails from '@material-ui/core/AccordionDetails'; +import Button from '@material-ui/core/Button'; +import Typography from '@material-ui/core/Typography'; +import ExpandMoreIcon from '@material-ui/icons/ExpandMore'; + +import { useTranslationRef } from '@backstage/core-plugin-api/alpha'; +import { Form } from '@backstage/plugin-scaffolder-react/alpha'; +import { FieldExtensionOptions } from '@backstage/plugin-scaffolder-react'; + +import { scaffolderTranslationRef } from '../../translation'; +import { TemplateEditorForm } from './TemplateEditorForm'; + +const useStyles = makeStyles( + theme => ({ + root: { + gridArea: 'pageContent', + display: 'grid', + gridTemplateRows: 'auto 1fr', + }, + controls: { + marginBottom: theme.spacing(2), + }, + code: { + width: '100%', + }, + }), + { name: 'ScaffolderCustomFieldExtensionsPlaygroud' }, +); + +export const CustomFieldPlaygroud = ({ + fieldExtensions = [], +}: { + fieldExtensions?: FieldExtensionOptions[]; +}) => { + const classes = useStyles(); + const { t } = useTranslationRef(scaffolderTranslationRef); + const fieldOptions = fieldExtensions.filter(field => !!field.schema); + const [refreshKey, setRefreshKey] = useState(Date.now()); + const [fieldFormState, setFieldFormState] = useState({}); + const [selectedField, setSelectedField] = useState(fieldOptions[0]); + const sampleFieldTemplate = useMemo( + () => + yaml.stringify({ + parameters: [ + { + title: `${selectedField.name} Example`, + properties: { + [selectedField.name]: { + type: selectedField.schema?.returnValue?.type, + 'ui:field': selectedField.name, + 'ui:options': fieldFormState, + }, + }, + }, + ], + }), + [fieldFormState, selectedField], + ); + + const fieldComponents = useMemo(() => { + return Object.fromEntries( + fieldExtensions.map(({ name, component }) => [name, component]), + ); + }, [fieldExtensions]); + + const handleSelectionChange = useCallback( + (selection: FieldExtensionOptions) => { + setSelectedField(selection); + setFieldFormState({}); + }, + [setFieldFormState, setSelectedField], + ); + + const handleFieldConfigChange = useCallback( + (state: {}) => { + setFieldFormState(state); + // Force TemplateEditorForm to re-render since some fields + // may not be responsive to ui:option changes + setRefreshKey(Date.now()); + }, + [setFieldFormState, setRefreshKey], + ); + + return ( +
+
+ + + {t('templateEditorPage.customFieldExplorer.selectFieldLabel')} + + + +
+
+ + } + aria-controls="panel-code-content" + id="panel-code-header" + > + + {t('templateEditorPage.customFieldExplorer.preview.title')} + + + +
+ +
+
+
+ + } + aria-controls="panel-preview-content" + id="panel-preview-header" + > + + {t('templateEditorPage.customFieldExplorer.fieldPreview.title')} + + + + null} + /> + + + + } + aria-controls="panel-options-content" + id="panel-options-header" + > + + {t('templateEditorPage.customFieldExplorer.fieldForm.title')} + + + +
handleFieldConfigChange(e.formData)} + validator={validator} + schema={selectedField.schema?.uiOptions || {}} + experimental_defaultFormStateBehavior={{ + allOf: 'populateDefaults', + }} + > + +
+
+
+
+
+ ); +}; diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditor.tsx b/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditor.tsx index a4d5472699..675f09a4d9 100644 --- a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditor.tsx +++ b/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditor.tsx @@ -15,6 +15,7 @@ */ import { makeStyles } from '@material-ui/core/styles'; import React, { useState } from 'react'; +import Paper from '@material-ui/core/Paper'; import type { FormProps, LayoutOptions, @@ -22,6 +23,7 @@ import type { import { FieldExtensionOptions } from '@backstage/plugin-scaffolder-react'; import { TemplateDirectoryAccess } from '../../lib/filesystem'; import { DirectoryEditorProvider } from './DirectoryEditorContext'; +import { TemplateEditorToolbar } from './TemplateEditorToolbar'; import { TemplateEditorBrowser } from './TemplateEditorBrowser'; import { DryRunProvider } from './DryRunContext'; import { TemplateEditorTextArea } from './TemplateEditorTextArea'; @@ -37,17 +39,23 @@ export type ScaffolderTemplateEditorClassKey = | 'results'; const useStyles = makeStyles( - { + theme => ({ // Reset and fix sizing to make sure scrolling behaves correctly root: { + height: '100%', gridArea: 'pageContent', + height: '100%', display: 'grid', gridTemplateAreas: ` + "toolbar toolbar toolbar" "browser editor preview" "results results results" `, gridTemplateColumns: '1fr 3fr 2fr', - gridTemplateRows: '1fr auto', + gridTemplateRows: 'auto 1fr auto', + }, + toolbar: { + gridArea: 'toolbar', }, browser: { gridArea: 'browser', @@ -56,15 +64,27 @@ const useStyles = makeStyles( editor: { gridArea: 'editor', overflow: 'auto', + borderLeft: `1px solid ${theme.palette.divider}`, }, preview: { gridArea: 'preview', + position: 'relative', + borderLeft: `1px solid ${theme.palette.divider}`, + backgroundColor: theme.palette.background.default, + }, + scroll: { + position: 'absolute', + top: 0, + left: 0, + right: 0, + bottom: 0, + padding: theme.spacing(1.5), overflow: 'auto', }, results: { gridArea: 'results', }, - }, + }), { name: 'ScaffolderTemplateEditor' }, ); @@ -76,13 +96,20 @@ export const TemplateEditor = (props: { formProps?: FormProps; }) => { const classes = useStyles(); - const [errorText, setErrorText] = useState(); return ( -
+ +
+ +
@@ -90,17 +117,19 @@ export const TemplateEditor = (props: {
- +
+ +
-
+
); diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorBrowser.tsx b/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorBrowser.tsx index 8bea86b074..604e338812 100644 --- a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorBrowser.tsx +++ b/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorBrowser.tsx @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import Grid from '@material-ui/core/Grid'; import Divider from '@material-ui/core/Divider'; import IconButton from '@material-ui/core/IconButton'; import Tooltip from '@material-ui/core/Tooltip'; @@ -26,23 +27,19 @@ import { FileBrowser } from '../../components/FileBrowser'; import { useTranslationRef } from '@backstage/core-plugin-api/alpha'; import { scaffolderTranslationRef } from '../../translation'; -const useStyles = makeStyles(theme => ({ - button: { - padding: theme.spacing(1), - }, - buttons: { - display: 'flex', - flexFlow: 'row nowrap', - alignItems: 'center', - justifyContent: 'flex-start', - }, - buttonsGap: { - flex: '1 1 auto', - }, - buttonsDivider: { - marginBottom: theme.spacing(1), - }, -})); +const useStyles = makeStyles( + theme => ({ + grid: { + '& svg': { + margin: theme.spacing(1), + }, + }, + closeButton: { + marginLeft: 'auto', + }, + }), + { name: 'ScaffolderTemplateEditorBrowser' }, +); /** The local file browser for the template editor */ export function TemplateEditorBrowser(props: { onClose?: () => void }) { @@ -69,12 +66,12 @@ export function TemplateEditorBrowser(props: { onClose?: () => void }) { return ( <> -
+ !file.dirty)} onClick={() => directoryEditor.save()} > @@ -86,23 +83,23 @@ export function TemplateEditorBrowser(props: { onClose?: () => void }) { 'templateEditorPage.templateEditorBrowser.reloadIconTooltip', )} > - directoryEditor.reload()} - > + directoryEditor.reload()}> -
- + -
- +
+ (); @@ -181,26 +176,28 @@ export function TemplateEditorForm(props: TemplateEditorFormProps) { [contentIsSpec, content, apiHolder], ); - if (!steps) { - return null; - } - return (
-
- - { - await onDryRun?.(options); - }} - layouts={layouts} - formProps={props.formProps} - /> - -
+ {steps ? ( + + + { + await onDryRun?.(options); + }} + layouts={layouts} + formProps={props.formProps} + /> + + + ) : ( + + {t('templateEditorForm.stepper.emptyText')} + + )}
); } diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorToolbar.tsx b/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorToolbar.tsx new file mode 100644 index 0000000000..0f09f0a0ef --- /dev/null +++ b/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorToolbar.tsx @@ -0,0 +1,139 @@ +/* + * 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 React, { useState } from 'react'; + +import { makeStyles } from '@material-ui/core/styles'; +import AppBar from '@material-ui/core/AppBar'; +import Toolbar from '@material-ui/core/Toolbar'; +import Tooltip from '@material-ui/core/Tooltip'; +import ButtonGroup from '@material-ui/core/ButtonGroup'; +import Button from '@material-ui/core/Button'; +import Drawer from '@material-ui/core/Drawer'; +import Dialog from '@material-ui/core/Dialog'; +import DialogTitle from '@material-ui/core/DialogTitle'; +import DialogContent from '@material-ui/core/DialogContent'; +import DialogContentText from '@material-ui/core/DialogContentText'; +import DialogActions from '@material-ui/core/DialogActions'; +import ExtensionIcon from '@material-ui/icons/Extension'; +import DescriptionIcon from '@material-ui/icons/Description'; + +import { Link } from '@backstage/core-components'; +import { FieldExtensionOptions } from '@backstage/plugin-scaffolder-react'; + +import { ActionPageContent } from '../../components/ActionsPage/ActionsPage'; +import { CustomFieldPlaygroud } from './CustomFieldPlaygroud'; + +const useStyles = makeStyles( + theme => ({ + paper: { + width: '40%', + padding: theme.spacing(2), + backgroundColor: theme.palette.background.default, + }, + appbar: { + zIndex: 1, + }, + toolbar: { + display: 'grid', + justifyItems: 'flex-end', + padding: theme.spacing(0, 1.5), + backgroundColor: theme.palette.background.paper, + }, + }), + { name: 'ScaffolderTemplateEditorToolbar' }, +); + +export function TemplateEditorToolbar(props: { + fieldExtensions?: FieldExtensionOptions[]; +}) { + const { fieldExtensions } = props; + const classes = useStyles(); + const [showFieldsDrawer, setShowFieldsDrawer] = useState(false); + const [showActionsDrawer, setShowActionsDrawer] = useState(false); + const [showPublishModal, setShowPublishModal] = useState(false); + + return ( + + + + + + + + + + + + setShowFieldsDrawer(false)} + > + + + setShowActionsDrawer(false)} + > + + + setShowPublishModal(false)} + open={showPublishModal} + aria-labelledby="publish-dialog-title" + aria-describedby="publish-dialog-description" + > + Publish changes + + + Follow the instructions below to create or update a template: +
    +
  1. Save the template files in a local directory
  2. +
  3. + Create a pull request to a new or existing git repository +
  4. +
  5. + If the template already exists, the changes will be reflected + in the software catalog once the pull request gets merged +
  6. +
  7. + But if you are creating a new template, follow this{' '} + + documentation + {' '} + to register the new template repository in software catalog +
  8. +
+
+
+ + + +
+
+
+ ); +} diff --git a/plugins/scaffolder/src/translation.ts b/plugins/scaffolder/src/translation.ts index 3518ed2c53..6f45163f44 100644 --- a/plugins/scaffolder/src/translation.ts +++ b/plugins/scaffolder/src/translation.ts @@ -184,6 +184,11 @@ export const scaffolderTranslationRef = createTranslationRef({ cancel: 'Cancel', }, }, + templateEditorForm: { + stepper: { + emptyText: 'There is no spec parameters in the template to preview.', + }, + }, templateTypePicker: { title: 'Categories', }, @@ -214,8 +219,11 @@ export const scaffolderTranslationRef = createTranslationRef({ title: 'Field Options', applyButtonTitle: 'Apply', }, + fieldPreview: { + title: 'Field Preview', + }, preview: { - title: 'Example Template Spec', + title: 'Template Spec', }, }, templateEditorBrowser: { From a45b01ddb97140927d895fdf65f420eb60b44c9b Mon Sep 17 00:00:00 2001 From: Camila Belo Date: Fri, 20 Sep 2024 10:49:29 +0200 Subject: [PATCH 103/164] refactor: apply review suggestions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Fredrik Adelöw Signed-off-by: Camila Belo --- plugins/scaffolder/src/components/FileBrowser/FileBrowser.tsx | 2 +- .../scaffolder/src/next/TemplateEditorPage/TemplateEditor.tsx | 3 +-- .../src/next/TemplateEditorPage/TemplateEditorToolbar.tsx | 2 +- plugins/scaffolder/src/translation.ts | 2 +- 4 files changed, 4 insertions(+), 5 deletions(-) diff --git a/plugins/scaffolder/src/components/FileBrowser/FileBrowser.tsx b/plugins/scaffolder/src/components/FileBrowser/FileBrowser.tsx index d18ac02d4e..9c5dc84249 100644 --- a/plugins/scaffolder/src/components/FileBrowser/FileBrowser.tsx +++ b/plugins/scaffolder/src/components/FileBrowser/FileBrowser.tsx @@ -25,7 +25,7 @@ const useStyles = makeStyles(theme => ({ root: { whiteSpace: 'nowrap', overflowY: 'auto', - padding: theme.spacing(1.5), + padding: theme.spacing(1), }, })); diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditor.tsx b/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditor.tsx index 675f09a4d9..7a0f18c03c 100644 --- a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditor.tsx +++ b/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditor.tsx @@ -44,7 +44,6 @@ const useStyles = makeStyles( root: { height: '100%', gridArea: 'pageContent', - height: '100%', display: 'grid', gridTemplateAreas: ` "toolbar toolbar toolbar" @@ -78,7 +77,7 @@ const useStyles = makeStyles( left: 0, right: 0, bottom: 0, - padding: theme.spacing(1.5), + padding: theme.spacing(1), overflow: 'auto', }, results: { diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorToolbar.tsx b/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorToolbar.tsx index 0f09f0a0ef..ef4ac95c3c 100644 --- a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorToolbar.tsx +++ b/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorToolbar.tsx @@ -50,7 +50,7 @@ const useStyles = makeStyles( toolbar: { display: 'grid', justifyItems: 'flex-end', - padding: theme.spacing(0, 1.5), + padding: theme.spacing(0, 1), backgroundColor: theme.palette.background.paper, }, }), diff --git a/plugins/scaffolder/src/translation.ts b/plugins/scaffolder/src/translation.ts index 6f45163f44..5af634a44e 100644 --- a/plugins/scaffolder/src/translation.ts +++ b/plugins/scaffolder/src/translation.ts @@ -186,7 +186,7 @@ export const scaffolderTranslationRef = createTranslationRef({ }, templateEditorForm: { stepper: { - emptyText: 'There is no spec parameters in the template to preview.', + emptyText: 'There are no spec parameters in the template to preview.', }, }, templateTypePicker: { From 7f1f4833cc575e27e554896a03d56c32b125b458 Mon Sep 17 00:00:00 2001 From: Camila Belo Date: Wed, 18 Sep 2024 18:39:28 +0200 Subject: [PATCH 104/164] feat: create a separate template editor route Signed-off-by: Camila Belo --- .changeset/breezy-bulldogs-smell.md | 5 + plugins/scaffolder/api-report.md | 1 + plugins/scaffolder/package.json | 1 + .../src/components/Router/Router.tsx | 14 +++ .../src/lib/filesystem/WebFileSystemAccess.ts | 18 ++++ .../scaffolder/src/lib/filesystem/index.ts | 2 +- .../DirectoryEditorContext.tsx | 15 ++- .../TemplateEditorPage/TemplateEditor.tsx | 8 +- .../TemplateEditorBrowser.tsx | 16 ++-- .../TemplateEditorPage/TemplateEditorForm.tsx | 8 +- .../TemplateEditorPage/TemplateEditorPage.tsx | 19 ++-- .../TemplateEditorTextArea.tsx | 37 +++++++- .../next/TemplateEditorPage/TemplatePage.tsx | 92 +++++++++++++++++++ .../src/next/TemplateEditorPage/index.ts | 1 + plugins/scaffolder/src/plugin.tsx | 2 + plugins/scaffolder/src/routes.ts | 6 ++ yarn.lock | 8 ++ 17 files changed, 214 insertions(+), 39 deletions(-) create mode 100644 .changeset/breezy-bulldogs-smell.md create mode 100644 plugins/scaffolder/src/next/TemplateEditorPage/TemplatePage.tsx diff --git a/.changeset/breezy-bulldogs-smell.md b/.changeset/breezy-bulldogs-smell.md new file mode 100644 index 0000000000..69825142cb --- /dev/null +++ b/.changeset/breezy-bulldogs-smell.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder': patch +--- + +Create a separate route for the Scaffolder template editor and add the ability to refresh the page without closing the directory. Also, when the directory is closed, the user will stay on the editor page and can load a template folder from there. diff --git a/plugins/scaffolder/api-report.md b/plugins/scaffolder/api-report.md index fb53761145..b0af10a55b 100644 --- a/plugins/scaffolder/api-report.md +++ b/plugins/scaffolder/api-report.md @@ -612,6 +612,7 @@ export const scaffolderPlugin: BackstagePlugin< actions: SubRouteRef; listTasks: SubRouteRef; edit: SubRouteRef; + editor: SubRouteRef; }, { registerComponent: ExternalRouteRef; diff --git a/plugins/scaffolder/package.json b/plugins/scaffolder/package.json index 83418e5da5..a777f742c4 100644 --- a/plugins/scaffolder/package.json +++ b/plugins/scaffolder/package.json @@ -90,6 +90,7 @@ "classnames": "^2.2.6", "git-url-parse": "^14.0.0", "humanize-duration": "^3.25.1", + "idb-keyval": "5.0.2", "json-schema": "^0.4.0", "json-schema-library": "^9.0.0", "jszip": "^3.10.1", diff --git a/plugins/scaffolder/src/components/Router/Router.tsx b/plugins/scaffolder/src/components/Router/Router.tsx index 3ee4b26bf3..f06b0bcd39 100644 --- a/plugins/scaffolder/src/components/Router/Router.tsx +++ b/plugins/scaffolder/src/components/Router/Router.tsx @@ -34,6 +34,7 @@ import { DEFAULT_SCAFFOLDER_FIELD_EXTENSIONS } from '../../extensions/default'; import { actionsRouteRef, + editorRouteRef, editRouteRef, scaffolderListTaskRouteRef, scaffolderTaskRouteRef, @@ -51,6 +52,7 @@ import { import { TemplateListPage, TemplateWizardPage } from '../../next'; import { OngoingTask } from '../OngoingTask'; import { TemplateEditorPage } from '../../next/TemplateEditorPage'; +import { TemplatePage } from '../../next/TemplateEditorPage/TemplatePage'; /** * The Props for the Scaffolder Router @@ -177,6 +179,18 @@ export const Router = (props: PropsWithChildren) => { path={scaffolderListTaskRouteRef.path} element={} /> + + + + } + /> } diff --git a/plugins/scaffolder/src/lib/filesystem/WebFileSystemAccess.ts b/plugins/scaffolder/src/lib/filesystem/WebFileSystemAccess.ts index 8d325e4bfb..3342ab6744 100644 --- a/plugins/scaffolder/src/lib/filesystem/WebFileSystemAccess.ts +++ b/plugins/scaffolder/src/lib/filesystem/WebFileSystemAccess.ts @@ -14,6 +14,7 @@ * limitations under the License. */ +import { get, set } from 'idb-keyval'; import { TemplateDirectoryAccess, TemplateFileAccess } from './types'; type WritableFileHandle = FileSystemFileHandle & { @@ -87,6 +88,10 @@ export class WebFileSystemAccess { return Boolean(showDirectoryPicker); } + static fromHandle(handle: IterableDirectoryHandle) { + return new WebDirectoryAccess(handle); + } + static async requestDirectoryAccess(): Promise { if (!showDirectoryPicker) { throw new Error('File system access is not supported'); @@ -97,3 +102,16 @@ export class WebFileSystemAccess { private constructor() {} } + +export class WebFileSystemStore { + private static readonly key = 'scalfolder-template-editor-directory'; + + static async getDirectory(): Promise { + const directory = await get(WebFileSystemStore.key); + return directory.handle; + } + + static async setDirectory(directory: TemplateDirectoryAccess | undefined) { + return set(WebFileSystemStore.key, directory); + } +} diff --git a/plugins/scaffolder/src/lib/filesystem/index.ts b/plugins/scaffolder/src/lib/filesystem/index.ts index 1f485d0743..29f72294ea 100644 --- a/plugins/scaffolder/src/lib/filesystem/index.ts +++ b/plugins/scaffolder/src/lib/filesystem/index.ts @@ -16,4 +16,4 @@ export type { TemplateFileAccess, TemplateDirectoryAccess } from './types'; export { blobToBase64 } from './helpers'; -export { WebFileSystemAccess } from './WebFileSystemAccess'; +export { WebFileSystemAccess, WebFileSystemStore } from './WebFileSystemAccess'; diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/DirectoryEditorContext.tsx b/plugins/scaffolder/src/next/TemplateEditorPage/DirectoryEditorContext.tsx index 0edf390bfe..70c7d43e0b 100644 --- a/plugins/scaffolder/src/next/TemplateEditorPage/DirectoryEditorContext.tsx +++ b/plugins/scaffolder/src/next/TemplateEditorPage/DirectoryEditorContext.tsx @@ -14,7 +14,7 @@ * limitations under the License. */ -import { ErrorPanel, Progress } from '@backstage/core-components'; +import { ErrorPanel } from '@backstage/core-components'; import { useAsync, useRerender } from '@react-hookz/web'; import React, { createContext, ReactNode, useContext, useEffect } from 'react'; import { @@ -191,20 +191,17 @@ const DirectoryEditorContext = createContext( undefined, ); -export function useDirectoryEditor(): DirectoryEditor { +export function useDirectoryEditor(): DirectoryEditor | undefined { const value = useContext(DirectoryEditorContext); const rerender = useRerender(); useEffect(() => value?.subscribe(rerender), [value, rerender]); - if (!value) { - throw new Error('must be used within a DirectoryEditorProvider'); - } return value; } interface DirectoryEditorProviderProps { - directory: TemplateDirectoryAccess; + directory?: TemplateDirectoryAccess; children?: ReactNode; } @@ -226,13 +223,13 @@ export function DirectoryEditorProvider(props: DirectoryEditorProviderProps) { ); useEffect(() => { - execute(directory); + if (directory) { + execute(directory); + } }, [execute, directory]); if (error) { return ; - } else if (!result) { - return ; } return ( diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditor.tsx b/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditor.tsx index 7a0f18c03c..573415c36d 100644 --- a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditor.tsx +++ b/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditor.tsx @@ -88,11 +88,12 @@ const useStyles = makeStyles( ); export const TemplateEditor = (props: { - directory: TemplateDirectoryAccess; + directory?: TemplateDirectoryAccess; fieldExtensions?: FieldExtensionOptions[]; layouts?: LayoutOptions[]; onClose?: () => void; formProps?: FormProps; + onLoad?: () => void; }) => { const classes = useStyles(); const [errorText, setErrorText] = useState(); @@ -113,7 +114,10 @@ export const TemplateEditor = (props: {
- +
diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorBrowser.tsx b/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorBrowser.tsx index 604e338812..d725c93e65 100644 --- a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorBrowser.tsx +++ b/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorBrowser.tsx @@ -45,14 +45,14 @@ const useStyles = makeStyles( export function TemplateEditorBrowser(props: { onClose?: () => void }) { const classes = useStyles(); const directoryEditor = useDirectoryEditor(); - const changedFiles = directoryEditor.files.filter(file => file.dirty); + const changedFiles = directoryEditor?.files.filter(file => file.dirty); const { t } = useTranslationRef(scaffolderTranslationRef); const handleClose = () => { if (!props.onClose) { return; } - if (changedFiles.length > 0) { + if (changedFiles?.length) { // eslint-disable-next-line no-alert const accepted = window.confirm( t('templateEditorPage.templateEditorBrowser.closeConfirmMessage'), @@ -72,8 +72,8 @@ export function TemplateEditorBrowser(props: { onClose?: () => void }) { > !file.dirty)} - onClick={() => directoryEditor.save()} + disabled={directoryEditor?.files.every(file => !file.dirty)} + onClick={() => directoryEditor?.save()} > @@ -83,7 +83,7 @@ export function TemplateEditorBrowser(props: { onClose?: () => void }) { 'templateEditorPage.templateEditorBrowser.reloadIconTooltip', )} > - directoryEditor.reload()}> + directoryEditor?.reload()}> @@ -101,9 +101,9 @@ export function TemplateEditorBrowser(props: { onClose?: () => void }) { file.path)} + selected={directoryEditor?.selectedFile?.path ?? ''} + onSelect={directoryEditor?.setSelectedFile} + filePaths={directoryEditor?.files.map(file => file.path) ?? []} /> ); diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorForm.tsx b/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorForm.tsx index 0f4ca09556..53bda6f286 100644 --- a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorForm.tsx +++ b/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorForm.tsx @@ -213,7 +213,7 @@ export function TemplateEditorFormDirectoryEditorDryRun( const dryRun = useDryRun(); const directoryEditor = useDirectoryEditor(); - const { selectedFile } = directoryEditor; + const { selectedFile } = directoryEditor ?? {}; const handleDryRun = async (data: JsonObject) => { if (!selectedFile) { @@ -224,7 +224,7 @@ export function TemplateEditorFormDirectoryEditorDryRun( await dryRun.execute({ templateContent: selectedFile.content, values: data, - files: directoryEditor.files, + files: directoryEditor?.files ?? [], }); setErrorText(); } catch (e) { @@ -238,7 +238,7 @@ export function TemplateEditorFormDirectoryEditorDryRun( ? selectedFile.content : undefined; - return ( + return directoryEditor ? ( - ); + ) : null; } TemplateEditorForm.DirectoryEditorDryRun = diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorPage.tsx b/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorPage.tsx index 03d656c98d..70d61b9e2c 100644 --- a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorPage.tsx +++ b/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorPage.tsx @@ -20,7 +20,6 @@ import { WebFileSystemAccess, } from '../../lib/filesystem'; import { CustomFieldExplorer } from './CustomFieldExplorer'; -import { TemplateEditor } from './TemplateEditor'; import { TemplateFormPreviewer } from './TemplateFormPreviewer'; import { FieldExtensionOptions, @@ -33,11 +32,13 @@ import { useNavigate } from 'react-router-dom'; import { useRouteRef } from '@backstage/core-plugin-api'; import { actionsRouteRef, + editorRouteRef, rootRouteRef, scaffolderListTaskRouteRef, } from '../../routes'; import { useTranslationRef } from '@backstage/core-plugin-api/alpha'; import { scaffolderTranslationRef } from '../../translation'; +import { WebFileSystemStore } from '../../lib/filesystem/WebFileSystemAccess'; type Selection = | { @@ -64,6 +65,7 @@ export function TemplateEditorPage(props: TemplateEditorPageProps) { const actionsLink = useRouteRef(actionsRouteRef); const tasksLink = useRouteRef(scaffolderListTaskRouteRef); const createLink = useRouteRef(rootRouteRef); + const editorLink = useRouteRef(editorRouteRef); const { t } = useTranslationRef(scaffolderTranslationRef); const scaffolderPageContextMenuProps = { @@ -74,17 +76,7 @@ export function TemplateEditorPage(props: TemplateEditorPageProps) { }; let content: JSX.Element | null = null; - if (selection?.type === 'local') { - content = ( - setSelection(undefined)} - layouts={props.layouts} - formProps={props.formProps} - /> - ); - } else if (selection?.type === 'form') { + if (selection?.type === 'form') { content = ( { if (option === 'local') { WebFileSystemAccess.requestDirectoryAccess() - .then(directory => setSelection({ type: 'local', directory })) + .then(directory => WebFileSystemStore.setDirectory(directory)) + .then(() => navigate(editorLink())) .catch(() => {}); } else if (option === 'form') { setSelection({ type: 'form' }); diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorTextArea.tsx b/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorTextArea.tsx index 696b21d1df..350543a866 100644 --- a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorTextArea.tsx +++ b/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorTextArea.tsx @@ -20,6 +20,8 @@ import { showPanel } from '@codemirror/view'; import IconButton from '@material-ui/core/IconButton'; import Paper from '@material-ui/core/Paper'; import Tooltip from '@material-ui/core/Tooltip'; +import Link from '@material-ui/core/Link'; +import Typography from '@material-ui/core/Typography'; import { makeStyles } from '@material-ui/core/styles'; import RefreshIcon from '@material-ui/icons/Refresh'; import SaveIcon from '@material-ui/icons/Save'; @@ -36,6 +38,12 @@ const useStyles = makeStyles(theme => ({ width: '100%', height: '100%', }, + typography: { + padding: theme.spacing(1.5), + }, + button: { + verticalAlign: 'top', + }, codeMirror: { position: 'absolute', top: 0, @@ -142,10 +150,33 @@ export function TemplateEditorTextArea(props: { /** A version of the TemplateEditorTextArea that is connected to the DirectoryEditor context */ export function TemplateEditorDirectoryEditorTextArea(props: { errorText?: string; + onLoad?: () => void; }) { + const classes = useStyles(); const directoryEditor = useDirectoryEditor(); - const actions = directoryEditor.selectedFile?.dirty + if (!directoryEditor) { + return ( + + Please{' '} + + load + {' '} + a template directory. + + ); + } + + const actions = directoryEditor?.selectedFile?.dirty ? { onSave: () => directoryEditor.save(), onReload: () => directoryEditor.reload(), @@ -158,7 +189,9 @@ export function TemplateEditorDirectoryEditorTextArea(props: { directoryEditor.selectedFile?.updateContent(content)} + onUpdate={content => + directoryEditor?.selectedFile?.updateContent(content) + } {...actions} /> ); diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/TemplatePage.tsx b/plugins/scaffolder/src/next/TemplateEditorPage/TemplatePage.tsx new file mode 100644 index 0000000000..b34f1445f4 --- /dev/null +++ b/plugins/scaffolder/src/next/TemplateEditorPage/TemplatePage.tsx @@ -0,0 +1,92 @@ +/* + * 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 React, { useCallback } from 'react'; +import useAsyncRetry from 'react-use/esm/useAsyncRetry'; + +import { Page, Header, Content, Progress } from '@backstage/core-components'; +import { useTranslationRef } from '@backstage/core-plugin-api/alpha'; +import { + FormProps, + FieldExtensionOptions, + type LayoutOptions, +} from '@backstage/plugin-scaffolder-react'; + +import { scaffolderTranslationRef } from '../../translation'; +import { WebFileSystemAccess, WebFileSystemStore } from '../../lib/filesystem'; +import { TemplateEditor } from './TemplateEditor'; + +import { makeStyles } from '@material-ui/core/styles'; + +const useStyles = makeStyles( + { + content: { + padding: 0, + }, + }, + { name: 'ScaffolderTemplateEditorToolbar' }, +); + +interface TemplatePageProps { + defaultPreviewTemplate?: string; + fieldExtensions?: FieldExtensionOptions[]; + layouts?: LayoutOptions[]; + formProps?: FormProps; +} + +export function TemplatePage(props: TemplatePageProps) { + const classes = useStyles(); + const { t } = useTranslationRef(scaffolderTranslationRef); + + const { value, loading, retry } = useAsyncRetry(async () => { + const directory = await WebFileSystemStore.getDirectory(); + if (!directory) return undefined; + return WebFileSystemAccess.fromHandle(directory); + }, []); + + const handleLoadDirectory = useCallback(() => { + WebFileSystemAccess.requestDirectoryAccess() + .then(WebFileSystemStore.setDirectory) + .then(retry); + }, [retry]); + + const handleCloseDirectory = useCallback(() => { + WebFileSystemStore.setDirectory(undefined).then(retry); + }, [retry]); + + return ( + +
+ + {loading ? ( + + ) : ( + + )} + + + ); +} diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/index.ts b/plugins/scaffolder/src/next/TemplateEditorPage/index.ts index 7f70c55ed9..b7beab4896 100644 --- a/plugins/scaffolder/src/next/TemplateEditorPage/index.ts +++ b/plugins/scaffolder/src/next/TemplateEditorPage/index.ts @@ -14,6 +14,7 @@ * limitations under the License. */ +export { TemplatePage } from './TemplatePage'; export { TemplateEditorPage } from './TemplateEditorPage'; export type { ScaffolderCustomFieldExplorerClassKey } from './CustomFieldExplorer'; export type { ScaffolderTemplateEditorClassKey } from './TemplateEditor'; diff --git a/plugins/scaffolder/src/plugin.tsx b/plugins/scaffolder/src/plugin.tsx index c6c858f6b1..6892cf7e43 100644 --- a/plugins/scaffolder/src/plugin.tsx +++ b/plugins/scaffolder/src/plugin.tsx @@ -68,6 +68,7 @@ import { scaffolderListTaskRouteRef, actionsRouteRef, editRouteRef, + editorRouteRef, } from './routes'; import { MyGroupsPicker, @@ -107,6 +108,7 @@ export const scaffolderPlugin = createPlugin({ actions: actionsRouteRef, listTasks: scaffolderListTaskRouteRef, edit: editRouteRef, + editor: editorRouteRef, }, externalRoutes: { registerComponent: registerComponentRouteRef, diff --git a/plugins/scaffolder/src/routes.ts b/plugins/scaffolder/src/routes.ts index 8ef77e91e3..f47d2bdab8 100644 --- a/plugins/scaffolder/src/routes.ts +++ b/plugins/scaffolder/src/routes.ts @@ -78,3 +78,9 @@ export const editRouteRef = createSubRouteRef({ parent: rootRouteRef, path: '/edit', }); + +export const editorRouteRef = createSubRouteRef({ + id: 'scaffolder/editor', + parent: rootRouteRef, + path: '/template', +}); diff --git a/yarn.lock b/yarn.lock index 7d99c61eb3..d254f46000 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7286,6 +7286,7 @@ __metadata: classnames: ^2.2.6 git-url-parse: ^14.0.0 humanize-duration: ^3.25.1 + idb-keyval: 5.0.2 json-schema: ^0.4.0 json-schema-library: ^9.0.0 jszip: ^3.10.1 @@ -28996,6 +28997,13 @@ __metadata: languageName: node linkType: hard +"idb-keyval@npm:5.0.2": + version: 5.0.2 + resolution: "idb-keyval@npm:5.0.2" + checksum: 64ce4049fcfa9ffc8ddd23897a59278bd60420bcaff88ca653c63b725f8d6228a956bd7f474cea21befedd5abdb1bc8058ca1db5a12c4145605291dadadedbf1 + languageName: node + linkType: hard + "identity-obj-proxy@npm:3.0.0": version: 3.0.0 resolution: "identity-obj-proxy@npm:3.0.0" From 359ab5936fb4f045ddf4a495520b9ce47f8a7ba7 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 20 Sep 2024 11:14:06 +0200 Subject: [PATCH 105/164] events-backend: add index for event topics Signed-off-by: Patrik Oldsberg --- plugins/events-backend/migrations/20240523100528_init.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/plugins/events-backend/migrations/20240523100528_init.js b/plugins/events-backend/migrations/20240523100528_init.js index c3b66658fd..e94c6eb8dd 100644 --- a/plugins/events-backend/migrations/20240523100528_init.js +++ b/plugins/events-backend/migrations/20240523100528_init.js @@ -48,6 +48,8 @@ exports.up = async function up(knex) { .comment( 'The IDs of the subscribers that have already consumed this event', ); + + table.index('topic', 'event_bus_events_topic_idx'); }); await knex.schema.createTable('event_bus_subscriptions', table => { From cc3f80cfd73d40fcdc4164cae5765aee54205334 Mon Sep 17 00:00:00 2001 From: Johan Haals Date: Thu, 19 Sep 2024 14:40:00 +0200 Subject: [PATCH 106/164] Scaffolder: Add ability to create new scaffolder templates Signed-off-by: Johan Haals --- .changeset/long-humans-hunt.md | 5 + plugins/scaffolder/api-report-alpha.md | 3 + .../lib/filesystem/MockFileSystemAccess.ts | 4 + .../src/lib/filesystem/WebFileSystemAccess.ts | 21 +++++ .../lib/filesystem/createExampleTemplate.ts | 94 +++++++++++++++++++ .../scaffolder/src/lib/filesystem/types.ts | 1 + .../TemplateEditorIntro.tsx | 46 ++++++++- .../TemplateEditorPage/TemplateEditorPage.tsx | 13 +++ plugins/scaffolder/src/translation.ts | 6 ++ 9 files changed, 192 insertions(+), 1 deletion(-) create mode 100644 .changeset/long-humans-hunt.md create mode 100644 plugins/scaffolder/src/lib/filesystem/createExampleTemplate.ts diff --git a/.changeset/long-humans-hunt.md b/.changeset/long-humans-hunt.md new file mode 100644 index 0000000000..e27ebfbd3d --- /dev/null +++ b/.changeset/long-humans-hunt.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder': minor +--- + +Added ability to create a new local scaffolder template to ease onboarding when creating new templates. diff --git a/plugins/scaffolder/api-report-alpha.md b/plugins/scaffolder/api-report-alpha.md index 6a15507858..4e8ded2644 100644 --- a/plugins/scaffolder/api-report-alpha.md +++ b/plugins/scaffolder/api-report-alpha.md @@ -252,6 +252,9 @@ export const scaffolderTranslationRef: TranslationRef< readonly 'templateEditorPage.templateEditorIntro.loadLocal.title': 'Load Template Directory'; readonly 'templateEditorPage.templateEditorIntro.loadLocal.description': 'Load a local template directory, allowing you to both edit and try executing your own template.'; readonly 'templateEditorPage.templateEditorIntro.loadLocal.unsupportedTooltip': 'Only supported in some Chromium-based browsers'; + readonly 'templateEditorPage.templateEditorIntro.createLocal.title': 'Create New Template'; + readonly 'templateEditorPage.templateEditorIntro.createLocal.description': 'Create a local template directory, allowing you to both edit and try executing your own template.'; + readonly 'templateEditorPage.templateEditorIntro.createLocal.unsupportedTooltip': 'Only supported in some Chromium-based browsers'; readonly 'templateEditorPage.templateEditorIntro.formEditor.title': 'Edit Template Form'; readonly 'templateEditorPage.templateEditorIntro.formEditor.description': 'Preview and edit a template form, either using a sample template or by loading a template from the catalog.'; readonly 'templateEditorPage.templateEditorIntro.fieldExplorer.title': 'Custom Field Explorer'; diff --git a/plugins/scaffolder/src/lib/filesystem/MockFileSystemAccess.ts b/plugins/scaffolder/src/lib/filesystem/MockFileSystemAccess.ts index d466543dbd..12be44edd3 100644 --- a/plugins/scaffolder/src/lib/filesystem/MockFileSystemAccess.ts +++ b/plugins/scaffolder/src/lib/filesystem/MockFileSystemAccess.ts @@ -42,6 +42,10 @@ class MockDirectoryAccess implements TemplateDirectoryAccess { ); } + createFile(options: { name: string; data: string }): Promise { + throw new Error('Method not implemented.'); + } + async listFiles(): Promise { return this.files; } diff --git a/plugins/scaffolder/src/lib/filesystem/WebFileSystemAccess.ts b/plugins/scaffolder/src/lib/filesystem/WebFileSystemAccess.ts index 3342ab6744..fe5c69b452 100644 --- a/plugins/scaffolder/src/lib/filesystem/WebFileSystemAccess.ts +++ b/plugins/scaffolder/src/lib/filesystem/WebFileSystemAccess.ts @@ -80,6 +80,27 @@ class WebDirectoryAccess implements TemplateDirectoryAccess { } } } + + async createFile(options: { name: string; data: string }): Promise { + const { name, data } = options; + let file: FileSystemFileHandle; + + // Current create template does not require support for nested directories + if (name.includes('/')) { + const [dir, path] = name.split('/'); + const handle = await this.handle.getDirectoryHandle(dir, { + create: true, + }); + file = await handle.getFileHandle(path, { create: true }); + } else { + file = await this.handle.getFileHandle(name, { + create: true, + }); + } + const writable = await file.createWritable(); + await writable.write(data); + await writable.close(); + } } /** @internal */ diff --git a/plugins/scaffolder/src/lib/filesystem/createExampleTemplate.ts b/plugins/scaffolder/src/lib/filesystem/createExampleTemplate.ts new file mode 100644 index 0000000000..b93d678d5e --- /dev/null +++ b/plugins/scaffolder/src/lib/filesystem/createExampleTemplate.ts @@ -0,0 +1,94 @@ +/* + * 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 { TemplateDirectoryAccess } from './types'; + +const files = { + 'template.yaml': ` +apiVersion: scaffolder.backstage.io/v1beta3 +# https://backstage.io/docs/features/software-catalog/descriptor-format#kind-template +kind: Template +metadata: + name: generated-example-template + title: Scaffolder Example Template + description: An example template for the scaffolder +spec: + owner: user:guest + type: service + # These parameters are used to generate the input form in the frontend, and are + # used to gather input data for the execution of the template. + parameters: + - title: Fill in some steps + required: + - name + properties: + name: + title: Name + type: string + description: Unique name of the component + owner: + title: Owner + type: string + description: Owner of the component + ui:field: OwnerPicker + ui:options: + catalogFilter: + kind: Group + - title: Choose a location + required: + - repoUrl + properties: + repoUrl: + title: Repository Location + type: string + ui:field: RepoUrlPicker + ui:options: + allowedHosts: + - github.com + steps: + - id: fetch-base + name: Fetch Base + action: fetch:template + input: + url: ./skeleton + values: + name: \${{parameters.name}} + owner: \${{parameters.owner}} + destination: \${{ parameters.repoUrl | parseRepoUrl }}`, + 'skeleton/README.md': `# This service is named \${{values.name}}!`, + 'skeleton/catalog-info.yaml': `apiVersion: backstage.io/v1alpha1 +kind: Component +metadata: + name: \${{values.component_id | dump}} + {%- if values.description %} + description: \${{values.description | dump}} + {%- endif %} + annotations: + github.com/project-slug: \${{values.destination.owner + "/" + values.destination.repo}} + backstage.io/techdocs-ref: dir:. +spec: + type: service + lifecycle: experimental + owner: \${{values.owner | dump}}`, +}; + +export async function createExampleTemplate( + directory: TemplateDirectoryAccess, +) { + for (const [name, data] of Object.entries(files)) { + await directory.createFile({ name, data }); + } +} diff --git a/plugins/scaffolder/src/lib/filesystem/types.ts b/plugins/scaffolder/src/lib/filesystem/types.ts index 11de159b2a..cd66c58130 100644 --- a/plugins/scaffolder/src/lib/filesystem/types.ts +++ b/plugins/scaffolder/src/lib/filesystem/types.ts @@ -22,4 +22,5 @@ export interface TemplateFileAccess { export interface TemplateDirectoryAccess { listFiles(): Promise>; + createFile(options: { name: string; data: string }): Promise; } diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorIntro.tsx b/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorIntro.tsx index d785708a51..465f780a2f 100644 --- a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorIntro.tsx +++ b/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorIntro.tsx @@ -46,7 +46,9 @@ const useStyles = makeStyles(theme => ({ interface EditorIntroProps { style?: JSX.IntrinsicElements['div']['style']; - onSelect?: (option: 'local' | 'form' | 'field-explorer') => void; + onSelect?: ( + option: 'create-template' | 'local' | 'form' | 'field-explorer', + ) => void; } export function TemplateEditorIntro(props: EditorIntroProps) { @@ -93,6 +95,47 @@ export function TemplateEditorIntro(props: EditorIntroProps) { ); + const cardCreateLocal = ( + + props.onSelect?.('create-template')} + > + + + {t('templateEditorPage.templateEditorIntro.createLocal.title')} + + + {t( + 'templateEditorPage.templateEditorIntro.createLocal.description', + )} + + + + {!supportsLoad && ( +
+ + + +
+ )} +
+ ); + const cardFormEditor = ( props.onSelect?.('form')}> @@ -140,6 +183,7 @@ export function TemplateEditorIntro(props: EditorIntroProps) { }} > {supportsLoad && cardLoadLocal} + {supportsLoad && cardCreateLocal} {cardFormEditor} {!supportsLoad && cardLoadLocal} {cardFieldExplorer} diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorPage.tsx b/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorPage.tsx index 70d61b9e2c..19eb1d6453 100644 --- a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorPage.tsx +++ b/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorPage.tsx @@ -39,12 +39,16 @@ import { import { useTranslationRef } from '@backstage/core-plugin-api/alpha'; import { scaffolderTranslationRef } from '../../translation'; import { WebFileSystemStore } from '../../lib/filesystem/WebFileSystemAccess'; +import { createExampleTemplate } from '../../lib/filesystem/createExampleTemplate'; type Selection = | { type: 'local'; directory: TemplateDirectoryAccess; } + | { + type: 'create-template'; + } | { type: 'form'; } @@ -103,6 +107,15 @@ export function TemplateEditorPage(props: TemplateEditorPageProps) { .then(directory => WebFileSystemStore.setDirectory(directory)) .then(() => navigate(editorLink())) .catch(() => {}); + } else if (option === 'create-template') { + WebFileSystemAccess.requestDirectoryAccess() + .then(directory => { + createExampleTemplate(directory).then(() => { + WebFileSystemStore.setDirectory(directory); + navigate(editorLink()); + }); + }) + .catch(() => {}); } else if (option === 'form') { setSelection({ type: 'form' }); } else if (option === 'field-explorer') { diff --git a/plugins/scaffolder/src/translation.ts b/plugins/scaffolder/src/translation.ts index 5af634a44e..bb0dc3ebad 100644 --- a/plugins/scaffolder/src/translation.ts +++ b/plugins/scaffolder/src/translation.ts @@ -240,6 +240,12 @@ export const scaffolderTranslationRef = createTranslationRef({ 'Load a local template directory, allowing you to both edit and try executing your own template.', unsupportedTooltip: 'Only supported in some Chromium-based browsers', }, + createLocal: { + title: 'Create New Template', + description: + 'Create a local template directory, allowing you to both edit and try executing your own template.', + unsupportedTooltip: 'Only supported in some Chromium-based browsers', + }, formEditor: { title: 'Edit Template Form', description: From c1ce89609652a0d9eef112704a28dbb6a0901743 Mon Sep 17 00:00:00 2001 From: Johan Haals Date: Thu, 19 Sep 2024 14:50:44 +0200 Subject: [PATCH 107/164] Please typescript Signed-off-by: Johan Haals --- plugins/scaffolder/src/lib/filesystem/MockFileSystemAccess.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/scaffolder/src/lib/filesystem/MockFileSystemAccess.ts b/plugins/scaffolder/src/lib/filesystem/MockFileSystemAccess.ts index 12be44edd3..c84d557a2e 100644 --- a/plugins/scaffolder/src/lib/filesystem/MockFileSystemAccess.ts +++ b/plugins/scaffolder/src/lib/filesystem/MockFileSystemAccess.ts @@ -42,7 +42,7 @@ class MockDirectoryAccess implements TemplateDirectoryAccess { ); } - createFile(options: { name: string; data: string }): Promise { + createFile(): Promise { throw new Error('Method not implemented.'); } From ca3587e81d4f02f77a73b501c51ed81a63f4733e Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 20 Sep 2024 11:38:54 +0200 Subject: [PATCH 108/164] events-backend: rewrite subscription read query to force optimal path Signed-off-by: Patrik Oldsberg --- .../service/hub/DatabaseEventBusStore.test.ts | 40 +++++++ .../src/service/hub/DatabaseEventBusStore.ts | 103 ++++++++++-------- 2 files changed, 96 insertions(+), 47 deletions(-) diff --git a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.test.ts b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.test.ts index bfc68b7663..4e5f72e1dd 100644 --- a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.test.ts +++ b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.test.ts @@ -194,4 +194,44 @@ describe('DatabaseEventBusStore', () => { ]); }, ); + + it.each(databases.eachSupportedId())( + 'should perform well when looking up events by topic, %p', + async databaseId => { + const db = await databases.init(databaseId); + const store = await DatabaseEventBusStore.forTest({ + logger, + db, + }); + + const COUNT = '100000'; + + // Insert 100,000 events, a lot more than we'd expect to ever have + // in a real-world scenario given our count window size is 10,000. + await db.raw(` + INSERT INTO event_bus_events (id, created_by, topic, data_json, consumed_by) + SELECT id, 'abc', CONCAT('test-', id), '{}', '{"${String( + Math.random(), + ).slice(2, 6)}"}' + FROM generate_series(1, ${COUNT}) AS id + `); + await db('event_bus_subscriptions').insert({ + id: 'tester', + created_by: 'abc', + read_until: 0, + topics: ['test-1000'], + }); + + const start = Date.now(); + const { events } = await store.readSubscription('tester'); + const duration = Date.now() - start; + + expect(events).toEqual([{ topic: 'test-1000', eventPayload: undefined }]); + + // When not run in an optimized way this takes anywhere from 10ms to + // 100ms. When optimized it's closed to 1ms, but we leave a bit of room + // for CI load spikes. + expect(duration).toBeLessThan(20); + }, + ); }); diff --git a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts index a25856e88d..86646cf4a8 100644 --- a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts +++ b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts @@ -468,53 +468,62 @@ export class DatabaseEventBusStore implements EventBusStore { } async readSubscription(id: string): Promise<{ events: EventParams[] }> { - const result = await this.#db(TABLE_SUBSCRIPTIONS) - // Read the target subscription so that we can use the read marker and topics - .with('sub', q => - q.select().from(TABLE_SUBSCRIPTIONS).where({ id }).forUpdate(), + // The below query selects the subscription we're reading from, locks it for + // an update, reads events for the subscription up to the limit, and then + // updates the pointer to the last read event. + // + // The query for selected_events is written in this particular way to force + // evaluation of the notified subscribers last. Without this, the query + // planner loves to first do a sequential scan of the events table to filter + // out the events that have already been consumed, but that is often a small + // subset and extremely wasteful. We instead want to make sure that the + // query is executed such that we select the events that are relevant to the + // subscription first, and then filter out any events that have already been + // consumed last. + // + // This is written as a plain SQL query to spare us all the horrors of + // expressing this in knex. + + const { rows: result } = await this.#db.raw<{ + rows: [] | [{ events: EventsRow[] }]; + }>( + ` + WITH subscription AS ( + SELECT topics, read_until + FROM event_bus_subscriptions + WHERE id = :id + FOR UPDATE + ), + selected_events AS ( + SELECT event_bus_events.* + FROM event_bus_events + INNER JOIN subscription + ON event_bus_events.topic = ANY(subscription.topics) + WHERE ( + CASE WHEN event_bus_events.id > subscription.read_until THEN + CASE WHEN NOT :id = ANY(event_bus_events.consumed_by) + THEN 1 + END + END + ) = 1 + ORDER BY event_bus_events.id ASC LIMIT :limit + ), + last_event_id AS ( + SELECT max(id) AS last_event_id + FROM selected_events + ), + events_array AS ( + SELECT json_agg(row_to_json(selected_events)) AS events + FROM selected_events ) - // Read the next batch of events for the subscription from its read marker - .with('events', q => - q - .select('event.*') - .from({ event: 'event_bus_events', sub: 'sub' }) - // For each event, check if it matches any of the topics that we're subscribed to - .where( - 'event.topic', - '=', - this.#db.ref('topics').withSchema('sub').wrap('ANY(', ')'), - ) - // Skip events that have already been consumed by this subscription - .whereNot( - this.#db.raw('?', id), - '=', - this.#db.ref('consumed_by').withSchema('event').wrap('ANY(', ')'), - ) - .where('event.id', '>', this.#db.ref('read_until').withSchema('sub')) - .orderBy('event.id', 'asc') - .limit(MAX_BATCH_SIZE), - ) - // Find the ID of the last event in the batch, for use as the new read_until marker - .with('last_event_id', q => q.max({ last_event_id: 'id' }).from('events')) - // Aggregate the events into a JSON array so that we can return all of them with the UPDATE - .with('events_array', q => - q - .select({ events: this.#db.raw('json_agg(row_to_json(events))') }) - .from('events'), - ) - // Update the read_until marker to the ID of the last event, or if no - // events where read, the last ID out of all events - .update({ - read_until: this.#db.raw( - 'COALESCE(last_event_id, (SELECT MAX(id) FROM event_bus_events), 0)', - ), - }) - .updateFrom({ - events_array: 'events_array', - last_event_id: 'last_event_id', - }) - .where(`${TABLE_SUBSCRIPTIONS}.id`, id) - .returning<[{ events: EventsRow[] }]>('events_array.events'); + UPDATE event_bus_subscriptions + SET read_until = COALESCE(last_event_id, (SELECT MAX(id) FROM event_bus_events), 0) + FROM events_array, last_event_id + WHERE event_bus_subscriptions.id = :id + RETURNING events_array.events + `, + { id, limit: MAX_BATCH_SIZE }, + ); if (result.length === 0) { throw new NotFoundError(`Subscription with ID '${id}' not found`); @@ -530,7 +539,7 @@ export class DatabaseEventBusStore implements EventBusStore { } return { - events: result[0].events.map(row => { + events: rows.map(row => { const { payload, metadata } = JSON.parse(row.data_json); return { topic: row.topic, From 3bd926905efb514cb3434ff63ffefdd827bd8724 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 20 Sep 2024 11:42:20 +0200 Subject: [PATCH 109/164] events-backend: rename column consumed_by -> notified_subscribers Signed-off-by: Patrik Oldsberg --- plugins/events-backend/migrations/20240523100528_init.js | 2 +- plugins/events-backend/src/migrations.test.ts | 4 ++-- .../src/service/hub/DatabaseEventBusStore.test.ts | 2 +- .../events-backend/src/service/hub/DatabaseEventBusStore.ts | 6 +++--- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/plugins/events-backend/migrations/20240523100528_init.js b/plugins/events-backend/migrations/20240523100528_init.js index e94c6eb8dd..9fbef79a75 100644 --- a/plugins/events-backend/migrations/20240523100528_init.js +++ b/plugins/events-backend/migrations/20240523100528_init.js @@ -44,7 +44,7 @@ exports.up = async function up(knex) { .notNullable() .comment('The payload data of this event'); table - .specificType('consumed_by', 'text ARRAY') + .specificType('notified_subscribers', 'text ARRAY') .comment( 'The IDs of the subscribers that have already consumed this event', ); diff --git a/plugins/events-backend/src/migrations.test.ts b/plugins/events-backend/src/migrations.test.ts index 069b326075..1c90260ed3 100644 --- a/plugins/events-backend/src/migrations.test.ts +++ b/plugins/events-backend/src/migrations.test.ts @@ -58,7 +58,7 @@ describe('migrations', () => { topic: 'test', created_by: 'abc', data_json: JSON.stringify({ message: 'hello' }), - consumed_by: ['tester'], + notified_subscribers: ['tester'], }); await knex('event_bus_subscriptions').insert({ id: 'tester', @@ -74,7 +74,7 @@ describe('migrations', () => { topic: 'test', data_json: JSON.stringify({ message: 'hello' }), created_at: expect.anything(), - consumed_by: ['tester'], + notified_subscribers: ['tester'], }, ]); await expect(knex('event_bus_subscriptions')).resolves.toEqual([ diff --git a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.test.ts b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.test.ts index 4e5f72e1dd..e1a60f9f05 100644 --- a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.test.ts +++ b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.test.ts @@ -209,7 +209,7 @@ describe('DatabaseEventBusStore', () => { // Insert 100,000 events, a lot more than we'd expect to ever have // in a real-world scenario given our count window size is 10,000. await db.raw(` - INSERT INTO event_bus_events (id, created_by, topic, data_json, consumed_by) + INSERT INTO event_bus_events (id, created_by, topic, data_json, notified_subscribers) SELECT id, 'abc', CONCAT('test-', id), '{}', '{"${String( Math.random(), ).slice(2, 6)}"}' diff --git a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts index 86646cf4a8..b1f26ab841 100644 --- a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts +++ b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts @@ -46,7 +46,7 @@ type EventsRow = { created_at: Date; topic: string; data_json: string; - consumed_by: string[]; + notified_subscribers: string[]; }; type SubscriptionsRow = { @@ -391,7 +391,7 @@ export class DatabaseEventBusStore implements EventBusStore { 'created_by', 'topic', 'data_json', - 'consumed_by', + 'notified_subscribers', ]), ) .insert( @@ -501,7 +501,7 @@ export class DatabaseEventBusStore implements EventBusStore { ON event_bus_events.topic = ANY(subscription.topics) WHERE ( CASE WHEN event_bus_events.id > subscription.read_until THEN - CASE WHEN NOT :id = ANY(event_bus_events.consumed_by) + CASE WHEN NOT :id = ANY(event_bus_events.notified_subscribers) THEN 1 END END From a77cb4016f0b663a7720ea89abf8953f8de61e37 Mon Sep 17 00:00:00 2001 From: MT Lewis Date: Fri, 20 Sep 2024 11:08:38 +0100 Subject: [PATCH 110/164] techdocs: make emptyState input optional on entityContent extension Signed-off-by: MT Lewis --- .changeset/fifty-trainers-watch.md | 6 ++++++ plugins/techdocs/api-report-alpha.md | 4 +++- plugins/techdocs/src/alpha.tsx | 11 +++++++---- 3 files changed, 16 insertions(+), 5 deletions(-) create mode 100644 .changeset/fifty-trainers-watch.md diff --git a/.changeset/fifty-trainers-watch.md b/.changeset/fifty-trainers-watch.md new file mode 100644 index 0000000000..5cef1ad2b2 --- /dev/null +++ b/.changeset/fifty-trainers-watch.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-techdocs': patch +--- + +Make `emptyState` input optional on `entity-content:techdocs` extension so that +the default empty state extension works correctly. diff --git a/plugins/techdocs/api-report-alpha.md b/plugins/techdocs/api-report-alpha.md index 19bdccc948..63e078dd43 100644 --- a/plugins/techdocs/api-report-alpha.md +++ b/plugins/techdocs/api-report-alpha.md @@ -229,7 +229,9 @@ const _default: FrontendPlugin< ConfigurableExtensionDataRef< React_2.JSX.Element, 'core.reactElement', - {} + { + optional: true; + } >, { singleton: true; diff --git a/plugins/techdocs/src/alpha.tsx b/plugins/techdocs/src/alpha.tsx index 2299b56be9..e0e1c1761e 100644 --- a/plugins/techdocs/src/alpha.tsx +++ b/plugins/techdocs/src/alpha.tsx @@ -157,10 +157,13 @@ const techDocsReaderPage = PageBlueprint.make({ */ const techDocsEntityContent = EntityContentBlueprint.makeWithOverrides({ inputs: { - emptyState: createExtensionInput([coreExtensionData.reactElement], { - singleton: true, - optional: true, - }), + emptyState: createExtensionInput( + [coreExtensionData.reactElement.optional()], + { + singleton: true, + optional: true, + }, + ), }, factory(originalFactory, context) { return originalFactory( From 6d28caf285ad731ec157a67568a9590944f786f8 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 20 Sep 2024 12:17:46 +0200 Subject: [PATCH 111/164] events-backend: drop optimization for sparse events Signed-off-by: Patrik Oldsberg --- .../service/hub/DatabaseEventBusStore.test.ts | 20 +++++++++++++------ .../src/service/hub/DatabaseEventBusStore.ts | 18 ++--------------- 2 files changed, 16 insertions(+), 22 deletions(-) diff --git a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.test.ts b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.test.ts index e1a60f9f05..7086d90cbf 100644 --- a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.test.ts +++ b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.test.ts @@ -210,7 +210,7 @@ describe('DatabaseEventBusStore', () => { // in a real-world scenario given our count window size is 10,000. await db.raw(` INSERT INTO event_bus_events (id, created_by, topic, data_json, notified_subscribers) - SELECT id, 'abc', CONCAT('test-', id), '{}', '{"${String( + SELECT id, 'abc', CONCAT('test-', MOD(id, 10)), CONCAT('{"payload":{"id":"', id, '"}}'), '{"${String( Math.random(), ).slice(2, 6)}"}' FROM generate_series(1, ${COUNT}) AS id @@ -219,18 +219,26 @@ describe('DatabaseEventBusStore', () => { id: 'tester', created_by: 'abc', read_until: 0, - topics: ['test-1000'], + topics: ['test-5'], }); const start = Date.now(); const { events } = await store.readSubscription('tester'); const duration = Date.now() - start; - expect(events).toEqual([{ topic: 'test-1000', eventPayload: undefined }]); + expect(events).toEqual([ + { topic: 'test-5', eventPayload: { id: '5' } }, + { topic: 'test-5', eventPayload: { id: '15' } }, + { topic: 'test-5', eventPayload: { id: '25' } }, + { topic: 'test-5', eventPayload: { id: '35' } }, + { topic: 'test-5', eventPayload: { id: '45' } }, + { topic: 'test-5', eventPayload: { id: '55' } }, + { topic: 'test-5', eventPayload: { id: '65' } }, + { topic: 'test-5', eventPayload: { id: '75' } }, + { topic: 'test-5', eventPayload: { id: '85' } }, + { topic: 'test-5', eventPayload: { id: '95' } }, + ]); - // When not run in an optimized way this takes anywhere from 10ms to - // 100ms. When optimized it's closed to 1ms, but we leave a bit of room - // for CI load spikes. expect(duration).toBeLessThan(20); }, ); diff --git a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts index b1f26ab841..107dabfc27 100644 --- a/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts +++ b/plugins/events-backend/src/service/hub/DatabaseEventBusStore.ts @@ -472,15 +472,6 @@ export class DatabaseEventBusStore implements EventBusStore { // an update, reads events for the subscription up to the limit, and then // updates the pointer to the last read event. // - // The query for selected_events is written in this particular way to force - // evaluation of the notified subscribers last. Without this, the query - // planner loves to first do a sequential scan of the events table to filter - // out the events that have already been consumed, but that is often a small - // subset and extremely wasteful. We instead want to make sure that the - // query is executed such that we select the events that are relevant to the - // subscription first, and then filter out any events that have already been - // consumed last. - // // This is written as a plain SQL query to spare us all the horrors of // expressing this in knex. @@ -499,13 +490,8 @@ export class DatabaseEventBusStore implements EventBusStore { FROM event_bus_events INNER JOIN subscription ON event_bus_events.topic = ANY(subscription.topics) - WHERE ( - CASE WHEN event_bus_events.id > subscription.read_until THEN - CASE WHEN NOT :id = ANY(event_bus_events.notified_subscribers) - THEN 1 - END - END - ) = 1 + WHERE event_bus_events.id > subscription.read_until + AND NOT :id = ANY(event_bus_events.notified_subscribers) ORDER BY event_bus_events.id ASC LIMIT :limit ), last_event_id AS ( From cec130550d795b8737dd21eaa90e5266113e24e8 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 20 Sep 2024 15:33:03 +0200 Subject: [PATCH 112/164] opaque-internal: support class implementations Signed-off-by: Patrik Oldsberg --- .../opaque-internal/src/OpaqueType.test.ts | 36 +++++++++++++++++++ packages/opaque-internal/src/OpaqueType.ts | 5 ++- 2 files changed, 38 insertions(+), 3 deletions(-) diff --git a/packages/opaque-internal/src/OpaqueType.test.ts b/packages/opaque-internal/src/OpaqueType.test.ts index 2e49ca9029..94fcb18d36 100644 --- a/packages/opaque-internal/src/OpaqueType.test.ts +++ b/packages/opaque-internal/src/OpaqueType.test.ts @@ -413,4 +413,40 @@ describe('OpaqueType', () => { expect(myInternal.$$type).toBe('my-type'); expect(myInternal.version).toBe(undefined); }); + + it('should work with class implementations', () => { + type MyType = { + $$type: 'my-type'; + }; + + const OpaqueMyType = OpaqueType.create<{ + public: MyType; + versions: { + version: 'v1'; + getX(): number; + }; + }>({ + type: 'my-type', + versions: ['v1'], + }); + + class MyTypeImpl { + getX() { + return 4; + } + } + + const myInstance = OpaqueMyType.createInstance('v1', new MyTypeImpl()); + + expect(myInstance.$$type).toBe('my-type'); + + expect(OpaqueMyType.isType(myInstance)).toBe(true); + + const myInternal = OpaqueMyType.toInternal(myInstance); + expect(myInternal).toBe(myInstance); + + expect(myInternal.$$type).toBe('my-type'); + expect(myInternal.version).toBe('v1'); + expect(myInternal.getX()).toBe(4); + }); }); diff --git a/packages/opaque-internal/src/OpaqueType.ts b/packages/opaque-internal/src/OpaqueType.ts index 7b6b6e0767..dd17f21da8 100644 --- a/packages/opaque-internal/src/OpaqueType.ts +++ b/packages/opaque-internal/src/OpaqueType.ts @@ -135,11 +135,10 @@ export class OpaqueType< : never) & Object, // & Object to allow for object properties too, e.g. toString() ): TPublic { - return { - ...(props as object), + return Object.assign(props as object, { $$type: this.#type, ...(version && { version }), - } as unknown as TPublic; + }) as unknown as TPublic; } #isThisInternalType(value: unknown): value is T['public'] & T['versions'] { From f6c15d8080a9a7669b962074df709ce76d9b141f Mon Sep 17 00:00:00 2001 From: "cindy.chen" Date: Sat, 21 Sep 2024 18:28:57 +0800 Subject: [PATCH 113/164] Apply `defaultValue` props in `MultiEntityPicker` Signed-off-by: cindy.chen --- .changeset/curly-foxes-brake.md | 14 ++++++++++++++ .../fields/MultiEntityPicker/MultiEntityPicker.tsx | 1 + 2 files changed, 15 insertions(+) create mode 100644 .changeset/curly-foxes-brake.md diff --git a/.changeset/curly-foxes-brake.md b/.changeset/curly-foxes-brake.md new file mode 100644 index 0000000000..31b74f2ac2 --- /dev/null +++ b/.changeset/curly-foxes-brake.md @@ -0,0 +1,14 @@ +--- +'@backstage/plugin-scaffolder': patch +--- + +Apply `defaultValue` props in `MultiEntityPicker` + +```diff + { filterSelectedOptions disabled={entities?.entities?.length === 1} id={idSchema?.$id} + defaultValue={formData} loading={loading} onChange={onSelect} options={entities?.entities || []} From 6129076bbde7ec5fe7d28e7a6d3f5463cfd7b044 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sat, 21 Sep 2024 12:33:08 +0200 Subject: [PATCH 114/164] cli: remove deprecated commands Signed-off-by: Patrik Oldsberg --- .changeset/sweet-chicken-smash.md | 12 + packages/cli/cli-report.md | 125 ------- .../create-plugin/createPlugin.test.ts | 40 -- .../commands/create-plugin/createPlugin.ts | 343 ------------------ packages/cli/src/commands/index.ts | 69 ---- packages/cli/src/commands/plugin/diff.ts | 102 ------ packages/cli/src/commands/plugin/test.ts | 31 -- .../src/commands/remove-plugin/file-mocks.ts | 32 -- packages/cli/src/commands/versions/lint.ts | 21 -- 9 files changed, 12 insertions(+), 763 deletions(-) create mode 100644 .changeset/sweet-chicken-smash.md delete mode 100644 packages/cli/src/commands/create-plugin/createPlugin.test.ts delete mode 100644 packages/cli/src/commands/create-plugin/createPlugin.ts delete mode 100644 packages/cli/src/commands/plugin/diff.ts delete mode 100644 packages/cli/src/commands/plugin/test.ts delete mode 100644 packages/cli/src/commands/remove-plugin/file-mocks.ts delete mode 100644 packages/cli/src/commands/versions/lint.ts diff --git a/.changeset/sweet-chicken-smash.md b/.changeset/sweet-chicken-smash.md new file mode 100644 index 0000000000..204d84a628 --- /dev/null +++ b/.changeset/sweet-chicken-smash.md @@ -0,0 +1,12 @@ +--- +'@backstage/cli': minor +--- + +**BREAKING**: Removed the following deprecated commands: + +- `create`: Use `backstage-cli new` instead +- `create-plugin`: Use `backstage-cli new` instead +- `plugin:diff`: Use `backstage-cli fix` instead +- `test`: Use `backstage-cli repo test` or `backstage-cli package test` instead +- `versions:check`: Use `yarn dedupe` or `yarn-deduplicate` instead +- `clean`: Use `backstage-cli package clean` instead diff --git a/packages/cli/cli-report.md b/packages/cli/cli-report.md index d77271c4b3..2eb9bb8dea 100644 --- a/packages/cli/cli-report.md +++ b/packages/cli/cli-report.md @@ -13,7 +13,6 @@ Options: Commands: new [options] - test config:docs [options] config:print [options] config:check [options] @@ -23,7 +22,6 @@ Commands: migrate [command] versions:bump [options] versions:migrate [options] - clean build-workspace [options] [packages...] create-github-app info @@ -40,15 +38,6 @@ Options: -h, --help ``` -### `backstage-cli clean` - -``` -Usage: backstage-cli clean [options] - -Options: - -h, --help -``` - ### `backstage-cli config:check` ``` @@ -481,120 +470,6 @@ Options: -h, --help ``` -### `backstage-cli test` - -``` -Usage: backstage-cli [--config=] [TestPathPattern] - -Options: - -h, --help - --version - --all - --automock - -b, --bail - --cache - --cacheDirectory - --changedFilesWithAncestor - --changedSince - --ci - --clearCache - --clearMocks - --collectCoverage - --collectCoverageFrom - --color - --colors - -c, --config - --coverage - --coverageDirectory - --coveragePathIgnorePatterns - --coverageProvider - --coverageReporters - --coverageThreshold - --debug - --detectLeaks - --detectOpenHandles - --env - --errorOnDeprecated - -e, --expand - --filter - --findRelatedTests - --forceExit - --globalSetup - --globalTeardown - --globals - --haste - --ignoreProjects - --init - --injectGlobals - --json - --lastCommit - --listTests - --logHeapUsage - --maxConcurrency - -w, --maxWorkers - --moduleDirectories - --moduleFileExtensions - --moduleNameMapper - --modulePathIgnorePatterns - --modulePaths - --noStackTrace - --notify - --notifyMode - -o, --onlyChanged - -f, --onlyFailures - --openHandlesTimeout - --outputFile - --passWithNoTests - --preset - --prettierPath - --projects - --randomize - --reporters - --resetMocks - --resetModules - --resolver - --restoreMocks - --rootDir - --roots - -i, --runInBand - --runTestsByPath - --runner - --seed - --selectProjects - --setupFiles - --setupFilesAfterEnv - --shard - --showConfig - --showSeed - --silent - --skipFilter - --snapshotSerializers - --testEnvironment - --testEnvironmentOptions - --testFailureExitCode - --testLocationInResults - --testMatch - -t, --testNamePattern - --testPathIgnorePatterns - --testPathPattern - --testRegex - --testResultsProcessor - --testRunner - --testSequencer - --testTimeout - --transform - --transformIgnorePatterns - --unmockedModulePathPatterns - -u, --updateSnapshot - --useStderr - --verbose - --watch - --watchAll - --watchPathIgnorePatterns - --watchman - --workerThreads -``` - ### `backstage-cli versions:bump` ``` diff --git a/packages/cli/src/commands/create-plugin/createPlugin.test.ts b/packages/cli/src/commands/create-plugin/createPlugin.test.ts deleted file mode 100644 index 84af6ebf69..0000000000 --- a/packages/cli/src/commands/create-plugin/createPlugin.test.ts +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright 2020 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 fs from 'fs-extra'; -import path from 'path'; -import { movePlugin } from './createPlugin'; -import { createMockDirectory } from '@backstage/backend-test-utils'; - -const id = 'testPluginMock'; - -describe('createPlugin', () => { - const mockDir = createMockDirectory(); - - describe('movePlugin', () => { - it('should move the temporary plugin directory to its final place', async () => { - mockDir.setContent({ - [id]: {}, - }); - const tempDir = mockDir.resolve(id); - const pluginDir = mockDir.resolve('test-temp/plugins', id); - - await movePlugin(tempDir, pluginDir, id); - await expect(fs.pathExists(pluginDir)).resolves.toBe(true); - expect(pluginDir).toMatch(path.join('', 'plugins', id)); - }); - }); -}); diff --git a/packages/cli/src/commands/create-plugin/createPlugin.ts b/packages/cli/src/commands/create-plugin/createPlugin.ts deleted file mode 100644 index f8d7e54e97..0000000000 --- a/packages/cli/src/commands/create-plugin/createPlugin.ts +++ /dev/null @@ -1,343 +0,0 @@ -/* - * Copyright 2020 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 fs from 'fs-extra'; -import { promisify } from 'util'; -import chalk from 'chalk'; -import inquirer, { Answers, Question } from 'inquirer'; -import { exec as execCb } from 'child_process'; -import { join as joinPath, resolve as resolvePath } from 'path'; -import camelCase from 'lodash/camelCase'; -import upperFirst from 'lodash/upperFirst'; -import os from 'os'; -import { OptionValues } from 'commander'; -import { assertError } from '@backstage/errors'; -import { - addCodeownersEntry, - getCodeownersFilePath, - parseOwnerIds, -} from '../../lib/codeowners'; -import { paths } from '../../lib/paths'; -import { Task, templatingTask } from '../../lib/tasks'; -import { Lockfile } from '../../lib/versioning'; -import { createPackageVersionProvider } from '../../lib/version'; - -const exec = promisify(execCb); - -async function checkExists(destination: string) { - await Task.forItem('checking', destination, async () => { - if (await fs.pathExists(destination)) { - const existing = chalk.cyan( - destination.replace(`${paths.targetRoot}/`, ''), - ); - throw new Error( - `A plugin with the same name already exists: ${existing}\nPlease try again with a different plugin ID`, - ); - } - }); -} - -const sortObjectByKeys = (obj: { [name in string]: string }) => { - return Object.keys(obj) - .sort() - .reduce((result, key: string) => { - result[key] = obj[key]; - return result; - }, {} as { [name in string]: string }); -}; - -export const capitalize = (str: string): string => - str.charAt(0).toUpperCase() + str.slice(1); - -export const addExportStatement = async ( - file: string, - exportStatement: string, -) => { - const newContents = fs - .readFileSync(file, 'utf8') - .split('\n') - .filter(Boolean) // get rid of empty lines - .concat([exportStatement]) - .concat(['']) // newline at end of file - .join('\n'); - - await fs.writeFile(file, newContents, 'utf8'); -}; - -export async function addPluginDependencyToApp( - rootDir: string, - pluginPackage: string, - versionStr: string, -) { - const packageFilePath = 'packages/app/package.json'; - const packageFile = resolvePath(rootDir, packageFilePath); - - await Task.forItem('processing', packageFilePath, async () => { - const packageFileContent = await fs.readFile(packageFile, 'utf-8'); - const packageFileJson = JSON.parse(packageFileContent); - const dependencies = packageFileJson.dependencies; - - if (dependencies[pluginPackage]) { - throw new Error( - `Plugin ${pluginPackage} already exists in ${packageFile}`, - ); - } - - dependencies[pluginPackage] = `^${versionStr}`; - packageFileJson.dependencies = sortObjectByKeys(dependencies); - const newContents = `${JSON.stringify(packageFileJson, null, 2)}\n`; - - await fs.writeFile(packageFile, newContents, 'utf-8').catch(error => { - throw new Error( - `Failed to add plugin as dependency to app: ${packageFile}: ${error.message}`, - ); - }); - }); -} - -export async function addPluginExtensionToApp( - pluginId: string, - extensionName: string, - pluginPackage: string, -) { - const pluginsFilePath = paths.resolveTargetRoot('packages/app/src/App.tsx'); - if (!(await fs.pathExists(pluginsFilePath))) { - return; - } - - await Task.forItem('processing', pluginsFilePath, async () => { - const content = await fs.readFile(pluginsFilePath, 'utf8'); - const revLines = content.split('\n').reverse(); - - const lastImportIndex = revLines.findIndex(line => - line.match(/ from ("|').*("|')/), - ); - const lastRouteIndex = revLines.findIndex(line => - line.match(/<\/FlatRoutes/), - ); - - if (lastImportIndex !== -1 && lastRouteIndex !== -1) { - revLines.splice( - lastImportIndex, - 0, - `import { ${extensionName} } from '${pluginPackage}';`, - ); - const [indentation] = revLines[lastRouteIndex + 1].match(/^\s*/) ?? []; - revLines.splice( - lastRouteIndex + 1, - 0, - `${indentation}}/>`, - ); - - const newContent = revLines.reverse().join('\n'); - await fs.writeFile(pluginsFilePath, newContent, 'utf8'); - } - }); -} - -async function cleanUp(tempDir: string) { - await Task.forItem('remove', 'temporary directory', async () => { - await fs.remove(tempDir); - }); -} - -async function buildPlugin(pluginFolder: string) { - const commands = [ - 'yarn install', - 'yarn lint --fix', - 'yarn tsc', - 'yarn build', - ]; - for (const command of commands) { - try { - await Task.forItem('executing', command, async () => { - process.chdir(pluginFolder); - await exec(command); - }).catch(error => { - process.stdout.write(error.stderr); - process.stdout.write(error.stdout); - throw new Error( - `Warning: Could not execute command ${chalk.cyan(command)}`, - ); - }); - } catch (error) { - assertError(error); - Task.error(error.message); - break; - } - } -} - -export async function movePlugin( - tempDir: string, - destination: string, - id: string, -) { - await Task.forItem('moving', id, async () => { - await fs.move(tempDir, destination).catch(error => { - throw new Error( - `Failed to move plugin from ${tempDir} to ${destination}: ${error.message}`, - ); - }); - }); -} - -export default async (opts: OptionValues) => { - const codeownersPath = await getCodeownersFilePath(paths.targetRoot); - - const questions: Question[] = [ - { - type: 'input', - name: 'id', - message: chalk.blue('Enter an ID for the plugin [required]'), - validate: (value: any) => { - if (!value) { - return chalk.red('Please enter an ID for the plugin'); - } else if (!/^[a-z0-9]+(-[a-z0-9]+)*$/.test(value)) { - return chalk.red( - 'Plugin IDs must be lowercase and contain only letters, digits, and dashes.', - ); - } - return true; - }, - }, - ]; - - if (codeownersPath) { - questions.push({ - type: 'input', - name: 'owner', - message: chalk.blue( - 'Enter the owner(s) of the plugin. If specified, this will be added to CODEOWNERS for the plugin path. [optional]', - ), - validate: (value: any) => { - if (!value) { - return true; - } - - const ownerIds = parseOwnerIds(value); - if (!ownerIds) { - return chalk.red( - 'The owner must be a space separated list of team names (e.g. @org/team-name), usernames (e.g. @username), or the email addresses of users (e.g. user@example.com).', - ); - } - - return true; - }, - }); - } - - const answers: Answers = await inquirer.prompt(questions); - const pluginId = - opts.backend && !answers.id.endsWith('-backend') - ? `${answers.id}-backend` - : answers.id; - - const name = opts.scope - ? `@${opts.scope.replace(/^@/, '')}/plugin-${pluginId}` - : `plugin-${pluginId}`; - const pluginVar = `${camelCase(answers.id)}Plugin`; - const extensionName = `${upperFirst(camelCase(answers.id))}Page`; - const npmRegistry = opts.npmRegistry && opts.scope ? opts.npmRegistry : ''; - const privatePackage = opts.private === false ? false : true; - const isMonoRepo = await fs.pathExists(paths.resolveTargetRoot('lerna.json')); - const appPackage = paths.resolveTargetRoot('packages/app'); - const templateDir = paths.resolveOwn( - opts.backend - ? 'templates/default-backend-plugin' - : 'templates/default-plugin', - ); - const pluginDir = isMonoRepo - ? paths.resolveTargetRoot('plugins', pluginId) - : paths.resolveTargetRoot(pluginId); - const { version: pluginVersion } = isMonoRepo - ? await fs.readJson(paths.resolveTargetRoot('lerna.json')) - : { version: '0.1.0' }; - const license = opts.license ?? 'Apache-2.0'; - - let lockfile: Lockfile | undefined; - try { - lockfile = await Lockfile.load(paths.resolveTargetRoot('yarn.lock')); - } catch (error) { - console.warn(`No yarn.lock available, ${error}`); - } - - Task.log(); - Task.log('Creating the plugin...'); - - Task.section('Checking if the plugin ID is available'); - await checkExists(pluginDir); - - Task.section('Creating a temporary plugin directory'); - const tempDir = await fs.mkdtemp( - joinPath(os.tmpdir(), `backstage-plugin-${pluginId}`), - ); - - try { - Task.section('Preparing files'); - - await templatingTask( - templateDir, - tempDir, - { - ...answers, - pluginVar, - pluginVersion, - extensionName, - name, - privatePackage, - npmRegistry, - license, - }, - createPackageVersionProvider(lockfile), - isMonoRepo, - ); - - Task.section('Moving to final location'); - await movePlugin(tempDir, pluginDir, pluginId); - - Task.section('Building the plugin'); - await buildPlugin(pluginDir); - - if ((await fs.pathExists(appPackage)) && !opts.backend) { - Task.section('Adding plugin as dependency in app'); - await addPluginDependencyToApp(paths.targetRoot, name, pluginVersion); - - Task.section('Import plugin in app'); - await addPluginExtensionToApp(pluginId, extensionName, name); - } - - if (answers.owner) { - await addCodeownersEntry(`/plugins/${pluginId}`, answers.owner); - } - - Task.log(); - Task.log(`🥇 Successfully created ${chalk.cyan(`${name}`)}`); - Task.log(); - Task.exit(); - } catch (error) { - assertError(error); - Task.error(error.message); - - Task.log('It seems that something went wrong when creating the plugin 🤔'); - Task.log('We are going to clean up, and then you can try again.'); - - Task.section('Cleanup'); - await cleanUp(tempDir); - Task.error('🔥 Failed to create plugin!'); - Task.exit(1); - } -}; diff --git a/packages/cli/src/commands/index.ts b/packages/cli/src/commands/index.ts index b1658a5ff1..9e8996647d 100644 --- a/packages/cli/src/commands/index.ts +++ b/packages/cli/src/commands/index.ts @@ -265,63 +265,6 @@ export function registerCommands(program: Command) { .option('--no-private', 'Do not mark new packages as private') .action(lazy(() => import('./new/new').then(m => m.default))); - program - .command('create', { hidden: true }) - .storeOptionsAsProperties(false) - .description( - 'Open up an interactive guide to creating new things in your app [DEPRECATED]', - ) - .option( - '--select ', - 'Select the thing you want to be creating upfront', - ) - .option( - '--option =', - 'Pre-fill options for the creation process', - (opt, arr: string[]) => [...arr, opt], - [], - ) - .option('--scope ', 'The scope to use for new packages') - .option( - '--npm-registry ', - 'The package registry to use for new packages', - ) - .option('--no-private', 'Do not mark new packages as private') - .action(lazy(() => import('./new/new').then(m => m.default))); - - program - .command('create-plugin', { hidden: true }) - .option( - '--backend', - 'Create plugin with the backend dependencies as default', - ) - .description('Creates a new plugin in the current repository [DEPRECATED]') - .option('--scope ', 'npm scope') - .option('--npm-registry ', 'npm registry URL') - .option('--no-private', 'Public npm package') - .action( - lazy(() => import('./create-plugin/createPlugin').then(m => m.default)), - ); - - program - .command('plugin:diff', { hidden: true }) - .option('--check', 'Fail if changes are required') - .option('--yes', 'Apply all changes') - .description( - 'Diff an existing plugin with the creation template [DEPRECATED]', - ) - .action(lazy(() => import('./plugin/diff').then(m => m.default))); - - // TODO(Rugvip): Deprecate in favor of package variant - program - .command('test') - .allowUnknownOption(true) // Allows the command to run, but we still need to parse raw args - .helpOption(', --backstage-cli-help') // Let Jest handle help - .description( - 'Run tests, forwarding args to Jest, defaulting to watch mode [DEPRECATED]', - ) - .action(lazy(() => import('./test').then(m => m.default))); - program .command('config:docs') .option( @@ -403,12 +346,6 @@ export function registerCommands(program: Command) { .description('Bump Backstage packages to the latest versions') .action(lazy(() => import('./versions/bump').then(m => m.default))); - program - .command('versions:check', { hidden: true }) - .option('--fix', 'Fix any auto-fixable versioning problems') - .description('Check Backstage package versioning') - .action(lazy(() => import('./versions/lint').then(m => m.default))); - program .command('versions:migrate') .option( @@ -424,12 +361,6 @@ export function registerCommands(program: Command) { ) .action(lazy(() => import('./versions/migrate').then(m => m.default))); - // TODO(Rugvip): Deprecate in favor of package variant - program - .command('clean') - .description('Delete cache directories [DEPRECATED]') - .action(lazy(() => import('./clean/clean').then(m => m.default))); - program .command('build-workspace [packages...]') .option( diff --git a/packages/cli/src/commands/plugin/diff.ts b/packages/cli/src/commands/plugin/diff.ts deleted file mode 100644 index 07f2a94ea8..0000000000 --- a/packages/cli/src/commands/plugin/diff.ts +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Copyright 2020 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 fs from 'fs-extra'; -import { OptionValues } from 'commander'; -import { - diffTemplateFiles, - handlers, - handleAllFiles, - inquirerPromptFunc, - makeCheckPromptFunc, - yesPromptFunc, -} from '../../lib/diff'; -import { paths } from '../../lib/paths'; - -export type PluginData = { - id: string; - name: string; - privatePackage: string; - pluginVersion: string; - npmRegistry: string; -}; - -const fileHandlers = [ - { - patterns: ['package.json'], - handler: handlers.packageJson, - }, - { - // make sure files in 1st level of src/ and dev/ exist - patterns: ['.eslintrc.js'], - handler: handlers.exists, - }, - { - patterns: ['README.md', 'tsconfig.json', /^src\//, /^dev\//], - handler: handlers.skip, - }, -]; - -export default async (opts: OptionValues) => { - let promptFunc = inquirerPromptFunc; - let finalize = () => {}; - - if (opts.check) { - [promptFunc, finalize] = makeCheckPromptFunc(); - } else if (opts.yes) { - promptFunc = yesPromptFunc; - } - - const data = await readPluginData(); - const templateFiles = await diffTemplateFiles('default-plugin', data); - await handleAllFiles(fileHandlers, templateFiles, promptFunc); - finalize(); -}; - -// Reads templating data from the existing plugin -async function readPluginData(): Promise { - let name: string; - let privatePackage: string; - let pluginVersion: string; - let npmRegistry: string; - try { - const pkg = require(paths.resolveTarget('package.json')); - name = pkg.name; - privatePackage = pkg.private; - pluginVersion = pkg.version; - const scope = name.split('/')[0]; - if (`${scope}:registry` in pkg.publishConfig) { - const registryURL = pkg.publishConfig[`${scope}:registry`]; - npmRegistry = `"${scope}:registry" : "${registryURL}"`; - } else npmRegistry = ''; - } catch (error) { - throw new Error(`Failed to read target package, ${error}`); - } - - const pluginTsContents = await fs.readFile( - paths.resolveTarget('src/plugin.ts'), - 'utf8', - ); - // TODO: replace with some proper parsing logic or plugin metadata file - const pluginIdMatch = pluginTsContents.match(/id: ['"`](.+?)['"`]/); - if (!pluginIdMatch) { - throw new Error(`Failed to parse plugin.ts, no plugin ID found`); - } - - const id = pluginIdMatch[1]; - - return { id, name, privatePackage, pluginVersion, npmRegistry }; -} diff --git a/packages/cli/src/commands/plugin/test.ts b/packages/cli/src/commands/plugin/test.ts deleted file mode 100644 index ca076ae6fc..0000000000 --- a/packages/cli/src/commands/plugin/test.ts +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright 2020 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 { OptionValues } from 'commander'; -import { run } from '../../lib/run'; - -export default async (opts: OptionValues) => { - const args = ['test']; - - if (opts.watch) { - args.push('--watch'); - } - if (opts.coverage) { - args.push('--coverage'); - } - - await run('web-scripts', args); -}; diff --git a/packages/cli/src/commands/remove-plugin/file-mocks.ts b/packages/cli/src/commands/remove-plugin/file-mocks.ts deleted file mode 100644 index 1264dc8f2e..0000000000 --- a/packages/cli/src/commands/remove-plugin/file-mocks.ts +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright 2020 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. - */ -export const pluginsFileContent = ` -export { plugin as WelcomePlugin } from '@backstage/plugin-welcome'; -export { plugin as LighthousePlugin } from '@backstage/plugin-lighthouse';`; - -export const codeownersFileContent = ` -* @spotify/backstage-core -/docs/features/techdocs @spotify/techdocs-core -/plugins/cost-insights @spotify/silver-lining -`; - -export const packageFileContent = { - name: 'example-app', - version: '0.1.1', - dependencies: {}, - devDependencies: {}, - scripts: {}, -}; diff --git a/packages/cli/src/commands/versions/lint.ts b/packages/cli/src/commands/versions/lint.ts deleted file mode 100644 index 66b5fc04c4..0000000000 --- a/packages/cli/src/commands/versions/lint.ts +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright 2020 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. - */ - -export default async () => { - throw new Error( - 'This command has been removed, please consider alternatives such as `yarn dedupe` instead.', - ); -}; From b7ef1347b4c294ff4eaed96c1fad396c96d04c10 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sat, 21 Sep 2024 12:37:03 +0200 Subject: [PATCH 115/164] cli: remove experimental install command Signed-off-by: Patrik Oldsberg --- .changeset/sweet-chicken-smash.md | 2 + packages/cli/src/commands/index.ts | 9 - packages/cli/src/commands/install/install.ts | 167 ------------------ .../src/commands/install/steps/appRoute.ts | 92 ---------- .../commands/install/steps/dependencies.ts | 82 --------- .../cli/src/commands/install/steps/index.ts | 19 -- .../cli/src/commands/install/steps/message.ts | 48 ----- packages/cli/src/commands/install/types.ts | 78 -------- 8 files changed, 2 insertions(+), 495 deletions(-) delete mode 100644 packages/cli/src/commands/install/install.ts delete mode 100644 packages/cli/src/commands/install/steps/appRoute.ts delete mode 100644 packages/cli/src/commands/install/steps/dependencies.ts delete mode 100644 packages/cli/src/commands/install/steps/index.ts delete mode 100644 packages/cli/src/commands/install/steps/message.ts delete mode 100644 packages/cli/src/commands/install/types.ts diff --git a/.changeset/sweet-chicken-smash.md b/.changeset/sweet-chicken-smash.md index 204d84a628..a76c3d3fcc 100644 --- a/.changeset/sweet-chicken-smash.md +++ b/.changeset/sweet-chicken-smash.md @@ -10,3 +10,5 @@ - `test`: Use `backstage-cli repo test` or `backstage-cli package test` instead - `versions:check`: Use `yarn dedupe` or `yarn-deduplicate` instead - `clean`: Use `backstage-cli package clean` instead + +In addition, the experimental `install` command has been removed since it has not received any updates since its introduction and we're expecting usage to be low. If you where relying on this command, please let us know by opening an issue towards the main Backstage repository. diff --git a/packages/cli/src/commands/index.ts b/packages/cli/src/commands/index.ts index 9e8996647d..12f8551abc 100644 --- a/packages/cli/src/commands/index.ts +++ b/packages/cli/src/commands/index.ts @@ -379,15 +379,6 @@ export function registerCommands(program: Command) { .command('info') .description('Show helpful information for debugging and reporting bugs') .action(lazy(() => import('./info').then(m => m.default))); - - program - .command('install [plugin-id]', { hidden: true }) - .option( - '--from ', - 'Install from a local package.json containing the installation recipe', - ) - .description('Install a Backstage plugin [EXPERIMENTAL]') - .action(lazy(() => import('./install/install').then(m => m.default))); } // Wraps an action function so that it always exits and handles errors diff --git a/packages/cli/src/commands/install/install.ts b/packages/cli/src/commands/install/install.ts deleted file mode 100644 index e395088b3e..0000000000 --- a/packages/cli/src/commands/install/install.ts +++ /dev/null @@ -1,167 +0,0 @@ -/* - * Copyright 2021 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 { - Step, - PackageWithInstallRecipe, - PeerPluginDependencies, -} from './types'; -import { fetchPackageInfo } from '../../lib/versioning'; -import { NotFoundError } from '../../lib/errors'; -import * as stepDefinitionMap from './steps'; -import { OptionValues } from 'commander'; -import fs from 'fs-extra'; - -const stepDefinitions = Object.values(stepDefinitionMap); - -async function fetchPluginPackage( - id: string, -): Promise { - const searchNames = [`@backstage/plugin-${id}`, `backstage-plugin-${id}`, id]; - - for (const name of searchNames) { - try { - const packageInfo = (await fetchPackageInfo( - name, - )) as PackageWithInstallRecipe; - return packageInfo; - } catch (error) { - if (error.name !== 'NotFoundError') { - throw error; - } - } - } - - throw new NotFoundError( - `No matching package found for '${id}', tried ${searchNames.join(', ')}`, - ); -} - -type Steps = Array<{ - type: string; - step: Step; -}>; - -class PluginInstaller { - static async resolveSteps( - pkg: PackageWithInstallRecipe, - versionToInstall?: string, - ) { - const steps: Steps = []; - - // collectDependencies - // TODO: Deps mean the plugin package itself, and any other backstage plugins/packages it depends on, in its installation recipe. - const dependencies = []; - dependencies.push({ - target: 'packages/app', - type: 'dependencies' as const, - name: pkg.name, - query: versionToInstall || `^${pkg.version}`, - }); - steps.push({ - type: 'dependencies', - step: stepDefinitionMap.dependencies.create({ dependencies }), - }); - - for (const step of pkg.experimentalInstallationRecipe?.steps ?? []) { - const { type } = step; - - const definition = stepDefinitions.find(d => d.type === type); - if (definition) { - steps.push({ - type, - step: definition.deserialize(step, pkg), - }); - } else { - throw new Error(`Unsupported step type: ${type}`); - } - } - - return steps; - } - - constructor(private readonly steps: Steps) {} - - async run() { - for (const { type, step } of this.steps) { - // TODO(Rugvip): Add spinners, nicer message about the step. - console.log(`Running step ${type}`); - await step.run(); - } - } -} - -async function installPluginAndPeerPlugins(pkg: PackageWithInstallRecipe) { - const pluginDeps: PeerPluginDependencies = new Map(); - pluginDeps.set(pkg.name, { pkg }); - await loadPeerPluginDeps(pkg, pluginDeps); - - console.log(`Installing ${pkg.name} AND any peer plugin dependencies.`); - for (const [_pluginDepName, pluginDep] of pluginDeps.entries()) { - const { pkg: pluginDepPkg, versionToInstall } = pluginDep; - console.log( - `Installing plugin: ${pluginDepPkg.name}: ${ - versionToInstall || pluginDepPkg.version - }`, - ); - const steps = await PluginInstaller.resolveSteps( - pluginDepPkg, - versionToInstall, - ); - const installer = new PluginInstaller(steps); - await installer.run(); - } -} - -async function loadPackageJson( - plugin: string, -): Promise { - if (plugin.endsWith('package.json')) { - // Install from local package if pluginId is a package.json file - needs to be absolute path - return await fs.readJson(plugin); - } - return await fetchPluginPackage(plugin); -} - -async function loadPeerPluginDeps( - pkg: PackageWithInstallRecipe, - pluginMap: PeerPluginDependencies, -) { - for (const [pluginId, pluginVersion] of Object.entries( - pkg.experimentalInstallationRecipe?.peerPluginDependencies ?? {}, - )) { - const depPkg = await loadPackageJson(pluginId); - if (!pluginMap.get(depPkg.name)) { - pluginMap.set(depPkg.name, { - pkg: depPkg, - versionToInstall: pluginVersion, - }); - await loadPeerPluginDeps(depPkg, pluginMap); - } - } -} - -export default async (pluginId?: string, cmd?: OptionValues) => { - const from = pluginId || cmd?.from; - // TODO(himanshu): If no plugin id is provided, it should list all plugins available. Maybe in some other command? - if (!from) { - throw new Error( - 'Missing both or a package.json file path in the --from flag.', - ); - } - const pkg = await loadPackageJson(from); - await installPluginAndPeerPlugins(pkg); -}; diff --git a/packages/cli/src/commands/install/steps/appRoute.ts b/packages/cli/src/commands/install/steps/appRoute.ts deleted file mode 100644 index f89b7eedff..0000000000 --- a/packages/cli/src/commands/install/steps/appRoute.ts +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Copyright 2021 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 fs from 'fs-extra'; -import { paths } from '../../../lib/paths'; -import { Step, createStepDefinition } from '../types'; - -type Data = { - path: string; - element: string; - packageName: string; -}; - -class AppRouteStep implements Step { - constructor(private readonly data: Data) {} - - async run() { - const { path, element, packageName } = this.data; - - const appTsxPath = paths.resolveTargetRoot('packages/app/src/App.tsx'); - const contents = await fs.readFile(appTsxPath, 'utf-8'); - let failed = false; - - // Add a new route just above the end of the FlatRoutes block - const contentsWithRoute = contents.replace( - /(\s*)<\/FlatRoutes>/, - `$1 $1`, - ); - if (contentsWithRoute === contents) { - failed = true; - } - - // Grab the component name from the element - const componentName = element.match(/[A-Za-z0-9]+/)?.[0]; - if (!componentName) { - throw new Error(`Could not find component name in ${element}`); - } - - // Add plugin import - // TODO(Rugvip): Attempt to add this among the other plugin imports - const contentsWithImport = contentsWithRoute.replace( - /^import /m, - `import { ${componentName} } from '${packageName}';\nimport `, - ); - if (contentsWithImport === contentsWithRoute) { - failed = true; - } - - if (failed) { - console.log( - 'Failed to automatically add a route to package/app/src/App.tsx', - ); - console.log(`Action needed, add the following:`); - console.log(`1. import { ${componentName} } from '${packageName}';`); - console.log(`2. `); - } else { - await fs.writeFile(appTsxPath, contentsWithImport); - } - } -} - -export const appRoute = createStepDefinition({ - type: 'app-route', - - deserialize(obj, pkg) { - const { path, element } = obj; - if (!path || typeof path !== 'string') { - throw new Error("Invalid install step, 'path' must be a string"); - } - if (!element || typeof element !== 'string') { - throw new Error("Invalid install step, 'element' must be a string"); - } - return new AppRouteStep({ path, element, packageName: pkg.name }); - }, - - create(data: Data) { - return new AppRouteStep(data); - }, -}); diff --git a/packages/cli/src/commands/install/steps/dependencies.ts b/packages/cli/src/commands/install/steps/dependencies.ts deleted file mode 100644 index 4381066159..0000000000 --- a/packages/cli/src/commands/install/steps/dependencies.ts +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright 2021 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 fs from 'fs-extra'; -import chalk from 'chalk'; -import sortBy from 'lodash/sortBy'; -import groupBy from 'lodash/groupBy'; -import { paths } from '../../../lib/paths'; -import { run } from '../../../lib/run'; -import { Step, createStepDefinition } from '../types'; - -type Data = { - dependencies: Array<{ - target: string; - type: 'dependencies'; - name: string; - query: string; - }>; -}; - -class DependenciesStep implements Step { - constructor(private readonly data: Data) {} - - async run() { - const { dependencies } = this.data; - // yarn --cwd packages/app add - const byTarget = groupBy(dependencies, 'target'); - - // Go through each target package and install the dependencies. - for (const [target, deps] of Object.entries(byTarget)) { - const pkgPath = paths.resolveTargetRoot(target, 'package.json'); - const pkgJson = await fs.readJson(pkgPath); - - // Populate each type of dependency object, dependencies, devDependencies, etc. - const depTypes = new Set(); - for (const dep of deps) { - depTypes.add(dep.type); - pkgJson[dep.type][dep.name] = dep.query; - } - - // Be nice and sort the dependencies alphabetically - for (const depType of depTypes) { - pkgJson[depType] = Object.fromEntries( - sortBy(Object.entries(pkgJson[depType]), ([key]) => key), - ); - } - await fs.writeJson(pkgPath, pkgJson, { spaces: 2 }); - } - - console.log(); - console.log( - `Running ${chalk.blue('yarn install')} to install new versions`, - ); - console.log(); - await run('yarn', ['install']); - } -} - -export const dependencies = createStepDefinition({ - type: 'dependencies', - - deserialize() { - throw new Error('The dependency step may not be defined in JSON'); - }, - - create(data: Data) { - return new DependenciesStep(data); - }, -}); diff --git a/packages/cli/src/commands/install/steps/index.ts b/packages/cli/src/commands/install/steps/index.ts deleted file mode 100644 index 590fba120f..0000000000 --- a/packages/cli/src/commands/install/steps/index.ts +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright 2021 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. - */ - -export { appRoute } from './appRoute'; -export { dependencies } from './dependencies'; -export { message } from './message'; diff --git a/packages/cli/src/commands/install/steps/message.ts b/packages/cli/src/commands/install/steps/message.ts deleted file mode 100644 index 5821c7d98b..0000000000 --- a/packages/cli/src/commands/install/steps/message.ts +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright 2021 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 { Step, createStepDefinition } from '../types'; - -type Data = { - message: string; -}; - -class MessageStep implements Step { - constructor(private readonly data: Data) {} - - async run() { - console.log(this.data.message); - } -} - -export const message = createStepDefinition({ - type: 'message', - - deserialize(obj) { - const { message: msg } = obj; - - if (!msg || (typeof msg !== 'string' && !Array.isArray(msg))) { - throw new Error( - "Invalid install step, 'message' must be a string or array", - ); - } - return new MessageStep({ message: [msg].flat().join('') }); - }, - - create(data: Data) { - return new MessageStep(data); - }, -}); diff --git a/packages/cli/src/commands/install/types.ts b/packages/cli/src/commands/install/types.ts deleted file mode 100644 index 1fa52a5e82..0000000000 --- a/packages/cli/src/commands/install/types.ts +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright 2021 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 { YarnInfoInspectData } from '../../lib/versioning'; -import { JsonObject } from '@backstage/types'; - -/** - * TODO: possible types - * - * frontend-deps: Install one or many frontend packages in a Backstage app - * backend-deps: Install one or many backend packages in a Backstage app - * app-config: Update app-config.yaml (and ask for inputs). E.g. Use local or docker for techdocs.builder - * frontend-route: Add a frontend route to the plugin homepage - * backend-route: Add a backend route to the plugin - * entity-page-tab: Add a tab on Catalog’s entity page - * sidebar-item: Add a sidebar item - * frontend-api: Add a custom API - */ - -/** A serialized install step as it appears in JSON */ -export type SerializedStep = { - type: string; -} & unknown; - -export type InstallationRecipe = { - type?: 'frontend' | 'backend'; - steps: SerializedStep[]; - peerPluginDependencies: { [pluginId: string]: string }; -}; - -/** package.json data */ -export type PackageWithInstallRecipe = YarnInfoInspectData & { - version: string; - experimentalInstallationRecipe?: InstallationRecipe; -}; - -export type PeerPluginDependencies = Map< - string, - { - pkg: PackageWithInstallRecipe; - versionToInstall?: string; - } ->; - -export interface Step { - run(): Promise; -} - -export interface StepDefinition { - /** The string identifying this type of step */ - type: string; - - /** Deserializes and validate a JSON description of the step data */ - deserialize(obj: JsonObject, pkg: PackageWithInstallRecipe): Step; - - /** Creates a step using known parameters */ - create(options: Options): Step; -} - -/** Creates a new step definition. Only used as a helper for type inference */ -export function createStepDefinition( - config: StepDefinition, -): StepDefinition { - return config; -} From 84097c7da02dd9e92405f818b03d6e81e219dddd Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sat, 21 Sep 2024 12:42:25 +0200 Subject: [PATCH 116/164] cli: remove experimental onboard command Signed-off-by: Patrik Oldsberg --- .changeset/sweet-chicken-smash.md | 2 +- packages/cli/src/commands/index.ts | 8 - packages/cli/src/commands/onboard/README.md | 22 --- .../cli/src/commands/onboard/auth/index.ts | 63 ------- .../cli/src/commands/onboard/auth/patch.ts | 43 ----- .../patches/01-github.Add-SignInPage.patch | 25 --- .../patches/02-gitlab.Add-SignInPage.patch | 25 --- .../03-gitlab.Change-signIn-resolver.patch | 5 - .../commands/onboard/auth/providers/github.ts | 147 ---------------- .../commands/onboard/auth/providers/gitlab.ts | 115 ------------ packages/cli/src/commands/onboard/command.ts | 83 --------- packages/cli/src/commands/onboard/config.ts | 45 ----- .../commands/onboard/discovery/Discovery.ts | 71 -------- .../analyzers/BasicRepositoryAnalyzer.ts | 56 ------ .../analyzers/DefaultAnalysisOutputs.ts | 29 ---- .../analyzers/PackageJsonAnalyzer.ts | 128 -------------- .../onboard/discovery/analyzers/types.ts | 37 ---- .../src/commands/onboard/discovery/index.ts | 141 --------------- .../github/GithubDiscoveryProvider.ts | 163 ------------------ .../discovery/providers/github/GithubFile.ts | 35 ---- .../providers/github/GithubRepository.ts | 84 --------- .../gitlab/GitlabDiscoveryProvider.ts | 106 ------------ .../discovery/providers/gitlab/GitlabFile.ts | 38 ---- .../providers/gitlab/GitlabProject.ts | 89 ---------- .../onboard/discovery/providers/types.ts | 53 ------ packages/cli/src/commands/onboard/files.ts | 36 ---- packages/cli/src/commands/onboard/index.ts | 17 -- .../commands/onboard/integrations/github.ts | 136 --------------- .../commands/onboard/integrations/index.ts | 75 -------- 29 files changed, 1 insertion(+), 1876 deletions(-) delete mode 100644 packages/cli/src/commands/onboard/README.md delete mode 100644 packages/cli/src/commands/onboard/auth/index.ts delete mode 100644 packages/cli/src/commands/onboard/auth/patch.ts delete mode 100644 packages/cli/src/commands/onboard/auth/patches/01-github.Add-SignInPage.patch delete mode 100644 packages/cli/src/commands/onboard/auth/patches/02-gitlab.Add-SignInPage.patch delete mode 100644 packages/cli/src/commands/onboard/auth/patches/03-gitlab.Change-signIn-resolver.patch delete mode 100644 packages/cli/src/commands/onboard/auth/providers/github.ts delete mode 100644 packages/cli/src/commands/onboard/auth/providers/gitlab.ts delete mode 100644 packages/cli/src/commands/onboard/command.ts delete mode 100644 packages/cli/src/commands/onboard/config.ts delete mode 100644 packages/cli/src/commands/onboard/discovery/Discovery.ts delete mode 100644 packages/cli/src/commands/onboard/discovery/analyzers/BasicRepositoryAnalyzer.ts delete mode 100644 packages/cli/src/commands/onboard/discovery/analyzers/DefaultAnalysisOutputs.ts delete mode 100644 packages/cli/src/commands/onboard/discovery/analyzers/PackageJsonAnalyzer.ts delete mode 100644 packages/cli/src/commands/onboard/discovery/analyzers/types.ts delete mode 100644 packages/cli/src/commands/onboard/discovery/index.ts delete mode 100644 packages/cli/src/commands/onboard/discovery/providers/github/GithubDiscoveryProvider.ts delete mode 100644 packages/cli/src/commands/onboard/discovery/providers/github/GithubFile.ts delete mode 100644 packages/cli/src/commands/onboard/discovery/providers/github/GithubRepository.ts delete mode 100644 packages/cli/src/commands/onboard/discovery/providers/gitlab/GitlabDiscoveryProvider.ts delete mode 100644 packages/cli/src/commands/onboard/discovery/providers/gitlab/GitlabFile.ts delete mode 100644 packages/cli/src/commands/onboard/discovery/providers/gitlab/GitlabProject.ts delete mode 100644 packages/cli/src/commands/onboard/discovery/providers/types.ts delete mode 100644 packages/cli/src/commands/onboard/files.ts delete mode 100644 packages/cli/src/commands/onboard/index.ts delete mode 100644 packages/cli/src/commands/onboard/integrations/github.ts delete mode 100644 packages/cli/src/commands/onboard/integrations/index.ts diff --git a/.changeset/sweet-chicken-smash.md b/.changeset/sweet-chicken-smash.md index a76c3d3fcc..9aa4c60803 100644 --- a/.changeset/sweet-chicken-smash.md +++ b/.changeset/sweet-chicken-smash.md @@ -11,4 +11,4 @@ - `versions:check`: Use `yarn dedupe` or `yarn-deduplicate` instead - `clean`: Use `backstage-cli package clean` instead -In addition, the experimental `install` command has been removed since it has not received any updates since its introduction and we're expecting usage to be low. If you where relying on this command, please let us know by opening an issue towards the main Backstage repository. +In addition, the experimental `install` and `onboard` commands have been removed since they have not received any updates since their introduction and we're expecting usage to be low. If you where relying on these commands, please let us know by opening an issue towards the main Backstage repository. diff --git a/packages/cli/src/commands/index.ts b/packages/cli/src/commands/index.ts index 12f8551abc..50ac934897 100644 --- a/packages/cli/src/commands/index.ts +++ b/packages/cli/src/commands/index.ts @@ -25,13 +25,6 @@ const configOption = [ Array(), ] as const; -export function registerOnboardCommand(program: Command) { - program - .command('onboard', { hidden: true }) - .description('Get help setting up your Backstage App.') - .action(lazy(() => import('./onboard').then(m => m.command))); -} - export function registerRepoCommand(program: Command) { const command = program .command('repo [command]') @@ -328,7 +321,6 @@ export function registerCommands(program: Command) { registerRepoCommand(program); registerScriptCommand(program); registerMigrateCommand(program); - registerOnboardCommand(program); program .command('versions:bump') diff --git a/packages/cli/src/commands/onboard/README.md b/packages/cli/src/commands/onboard/README.md deleted file mode 100644 index 0fb4d22666..0000000000 --- a/packages/cli/src/commands/onboard/README.md +++ /dev/null @@ -1,22 +0,0 @@ -# onboard - -## Local dev - -# Create a new app - -```bash -cd .. -npx @backstage/create-app -cd new-backstage-app - -# Run the modded cli in the new app - -../RELATIVE_PATH_TO_PROJECT/backstage/packages/cli/bin/backstage-cli onboard -? Do you want to set up Authentication for this project? (Y/n) -... - -# Try the app with the new changes - -yarn dev - -``` diff --git a/packages/cli/src/commands/onboard/auth/index.ts b/packages/cli/src/commands/onboard/auth/index.ts deleted file mode 100644 index 0f4537b110..0000000000 --- a/packages/cli/src/commands/onboard/auth/index.ts +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright 2023 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 inquirer from 'inquirer'; -import { Task } from '../../../lib/tasks'; -import { github, Answers as GitHubAnswers } from './providers/github'; -import { gitlab, Answers as GitLabAnswers } from './providers/gitlab'; - -export { type GitHubAnswers, type GitLabAnswers }; - -export async function auth(): Promise<{ - provider: string; - answers: GitHubAnswers | GitLabAnswers; -}> { - const answers = await inquirer.prompt<{ - provider: string; - }>([ - { - type: 'list', - name: 'provider', - message: 'Please select an authentication provider:', - choices: ['GitHub', 'GitLab'], - }, - ]); - - const { provider } = answers; - - let providerAnswers; - switch (provider) { - case 'GitHub': { - providerAnswers = await github(); - break; - } - case 'GitLab': { - providerAnswers = await gitlab(); - break; - } - default: - throw new Error(`Provider ${provider} not implemented yet.`); - } - - Task.log(); - Task.log(`Done setting up ${provider} Authentication!`); - Task.log(); - - return { - provider, - answers: providerAnswers, - }; -} diff --git a/packages/cli/src/commands/onboard/auth/patch.ts b/packages/cli/src/commands/onboard/auth/patch.ts deleted file mode 100644 index d004eeb157..0000000000 --- a/packages/cli/src/commands/onboard/auth/patch.ts +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright 2023 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 * as fs from 'fs-extra'; -import * as path from 'path'; -import * as differ from 'diff'; -import { PATCH_FOLDER } from '../files'; -import { findPaths } from '@backstage/cli-common'; - -/* eslint-disable-next-line no-restricted-syntax */ -const { targetRoot } = findPaths(__dirname); - -export const patch = async (patchFile: string) => { - const patchContent = await fs.readFile( - path.join(PATCH_FOLDER, patchFile), - 'utf8', - ); - const targetName = patchContent.split('\n')[0].replace('--- a', ''); - const targetFile = path.join(targetRoot, targetName); - const oldContent = await fs.readFile(targetFile, 'utf8'); - const newContent = differ.applyPatch(oldContent, patchContent); - if (!newContent) { - throw new Error( - `Patch ${patchFile} was not applied correctly. - Did you change ${targetName} manually before running this command?`, - ); - } - - return await fs.writeFile(targetFile, newContent, 'utf8'); -}; diff --git a/packages/cli/src/commands/onboard/auth/patches/01-github.Add-SignInPage.patch b/packages/cli/src/commands/onboard/auth/patches/01-github.Add-SignInPage.patch deleted file mode 100644 index db9f5228e8..0000000000 --- a/packages/cli/src/commands/onboard/auth/patches/01-github.Add-SignInPage.patch +++ /dev/null @@ -1,25 +0,0 @@ ---- a/packages/app/src/App.tsx -+++ b/packages/app/src/App.tsx -@@ -30 +30,5 @@ import { Root } from './components/Root'; --import { AlertDisplay, OAuthRequestDialog } from '@backstage/core-components'; -+import { -+ AlertDisplay, -+ OAuthRequestDialog, -+ SignInPage, -+} from '@backstage/core-components'; -@@ -35,0 +40 @@ import { catalogEntityCreatePermission } from '@backstage/plugin-catalog-common/ -+import { githubAuthApiRef } from '@backstage/core-plugin-api'; -@@ -38,0 +44,14 @@ const app = createApp({ -+ components: { -+ SignInPage: props => ( -+ -+ ), -+ }, \ No newline at end of file diff --git a/packages/cli/src/commands/onboard/auth/patches/02-gitlab.Add-SignInPage.patch b/packages/cli/src/commands/onboard/auth/patches/02-gitlab.Add-SignInPage.patch deleted file mode 100644 index da849220b8..0000000000 --- a/packages/cli/src/commands/onboard/auth/patches/02-gitlab.Add-SignInPage.patch +++ /dev/null @@ -1,25 +0,0 @@ ---- a/packages/app/src/App.tsx -+++ b/packages/app/src/App.tsx -@@ -30 +30,5 @@ import { Root } from './components/Root'; --import { AlertDisplay, OAuthRequestDialog } from '@backstage/core-components'; -+import { -+ AlertDisplay, -+ OAuthRequestDialog, -+ SignInPage, -+} from '@backstage/core-components'; -@@ -35,0 +40 @@ import { catalogEntityCreatePermission } from '@backstage/plugin-catalog-common/ -+import { gitlabAuthApiRef } from '@backstage/core-plugin-api'; -@@ -38,0 +44,14 @@ const app = createApp({ -+ components: { -+ SignInPage: props => ( -+ -+ ), -+ }, \ No newline at end of file diff --git a/packages/cli/src/commands/onboard/auth/patches/03-gitlab.Change-signIn-resolver.patch b/packages/cli/src/commands/onboard/auth/patches/03-gitlab.Change-signIn-resolver.patch deleted file mode 100644 index 7a69669674..0000000000 --- a/packages/cli/src/commands/onboard/auth/patches/03-gitlab.Change-signIn-resolver.patch +++ /dev/null @@ -1,5 +0,0 @@ ---- a/packages/backend/src/plugins/auth.ts -+++ b/packages/backend/src/plugins/auth.ts -@@ -38 +38 @@ export default async function createPlugin( -- github: providers.github.create({ -+ gitlab: providers.gitlab.create({ \ No newline at end of file diff --git a/packages/cli/src/commands/onboard/auth/providers/github.ts b/packages/cli/src/commands/onboard/auth/providers/github.ts deleted file mode 100644 index 36c6b02038..0000000000 --- a/packages/cli/src/commands/onboard/auth/providers/github.ts +++ /dev/null @@ -1,147 +0,0 @@ -/* - * Copyright 2023 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 { OAuthApp } from '@octokit/oauth-app'; -import chalk from 'chalk'; -import * as fs from 'fs-extra'; -import inquirer from 'inquirer'; -import { Task } from '../../../../lib/tasks'; -import { updateConfigFile } from '../../config'; -import { APP_CONFIG_FILE, PATCH_FOLDER } from '../../files'; -import { patch } from '../patch'; - -export type Answers = { - clientSecret: string; - clientId: string; - hasEnterprise: boolean; - enterpriseInstanceUrl?: string; -}; - -const validateCredentials = async (clientId: string, clientSecret: string) => { - try { - const app = new OAuthApp({ - clientId, - clientSecret, - }); - await app.createToken({ - code: '%NOT-VALID-CODE%', - }); - } catch (error) { - // @octokit/request returns a error.response object when a request is rejected. - // We can check it to see what kind of error we received. - - // If error.response is successful we can double-check that the error itself was due to the bad code. - // If that's the case then we can assume that the client id and secret exists as we otherwise would - // have gotten a 400/404. - if ( - error.response.status !== 200 && - error.response.data.error !== 'bad_verification_code' - ) { - throw new Error(`Validating GitHub Credentials failed.`); - } - } -}; - -const getConfig = (answers: Answers) => { - const { clientId, clientSecret, hasEnterprise, enterpriseInstanceUrl } = - answers; - - return { - auth: { - providers: { - github: { - development: { - clientId, - clientSecret, - ...(hasEnterprise && { - enterpriseInstanceUrl, - }), - }, - }, - }, - }, - }; -}; - -export const github = async (): Promise => { - Task.log(` - To add GitHub authentication, you must create an OAuth App from the GitHub developer settings: ${chalk.blue( - 'https://github.com/settings/developers', - )} - The Homepage URL should point to Backstage's frontend, while the Authorization callback URL will point to the auth backend. - - Settings for local development: - ${chalk.cyan(` - Homepage URL: http://localhost:3000 - Authorization callback URL: http://localhost:7007/api/auth/github/handler/frame`)} - - You can find the full documentation page here: ${chalk.blue( - 'https://backstage.io/docs/auth/github/provider', - )} - `); - - const answers = await inquirer.prompt([ - { - type: 'input', - name: 'clientId', - message: 'What is your Client Id?', - validate: (input: string) => (input.length ? true : false), - }, - { - type: 'input', - name: 'clientSecret', - message: 'What is your Client Secret?', - validate: (input: string) => (input.length ? true : false), - }, - { - type: 'confirm', - name: 'hasEnterprise', - message: 'Are you using GitHub Enterprise?', - }, - { - type: 'input', - name: 'enterpriseInstanceUrl', - message: 'What is your URL for GitHub Enterprise?', - when: ({ hasEnterprise }) => hasEnterprise, - validate: (input: string) => Boolean(new URL(input)), - }, - ]); - - const { clientId, clientSecret } = answers; - const config = getConfig(answers); - - Task.log('Setting up GitHub Authentication for you...'); - - await Task.forItem( - 'Validating', - 'credentials', - async () => await validateCredentials(clientId, clientSecret), - ); - await Task.forItem( - 'Updating', - APP_CONFIG_FILE, - async () => await updateConfigFile(APP_CONFIG_FILE, config), - ); - - const patches = await fs.readdir(PATCH_FOLDER); - for (const patchFile of patches.filter(p => p.includes('github'))) { - await Task.forItem('Patching', patchFile, async () => { - await patch(patchFile); - }); - } - - return answers; -}; diff --git a/packages/cli/src/commands/onboard/auth/providers/gitlab.ts b/packages/cli/src/commands/onboard/auth/providers/gitlab.ts deleted file mode 100644 index bc5491111c..0000000000 --- a/packages/cli/src/commands/onboard/auth/providers/gitlab.ts +++ /dev/null @@ -1,115 +0,0 @@ -/* - * Copyright 2023 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 chalk from 'chalk'; -import * as fs from 'fs-extra'; -import inquirer from 'inquirer'; -import { Task } from '../../../../lib/tasks'; -import { updateConfigFile } from '../../config'; -import { APP_CONFIG_FILE, PATCH_FOLDER } from '../../files'; -import { patch } from '../patch'; - -const getConfig = (answers: Answers) => { - const { clientId, clientSecret, hasAudience, audience } = answers; - - return { - auth: { - providers: { - gitlab: { - development: { - clientId, - clientSecret, - ...(hasAudience && { - audience, - }), - }, - }, - }, - }, - }; -}; - -export type Answers = { - clientSecret: string; - clientId: string; - hasAudience: boolean; - audience?: string; -}; - -export const gitlab = async (): Promise => { - Task.log(` - To add GitLab authentication, you must create an Application from the GitLab Settings: ${chalk.blue( - 'https://gitlab.com/-/profile/applications', - )} - The Redirect URI should point to your Backstage backend auth handler. - - Settings for local development: - ${chalk.cyan(` - Name: Backstage (or your custom app name) - Redirect URI: http://localhost:7007/api/auth/gitlab/handler/frame - Scopes: read_api and read_user`)} - - You can find the full documentation page here: ${chalk.blue( - 'https://backstage.io/docs/auth/gitlab/provider', - )} - `); - - const answers = await inquirer.prompt([ - { - type: 'input', - name: 'clientId', - message: 'What is your Application Id?', - validate: (input: string) => (input.length ? true : false), - }, - { - type: 'input', - name: 'clientSecret', - message: 'What is your Application Secret?', - validate: (input: string) => (input.length ? true : false), - }, - { - type: 'confirm', - name: 'hasAudience', - message: 'Do you have a self-hosted instance of GitLab?', - }, - { - type: 'input', - name: 'audience', - message: 'What is the URL for your GitLab instance?', - when: ({ hasAudience }) => hasAudience, - validate: (input: string) => Boolean(new URL(input)), - }, - ]); - - const config = getConfig(answers); - - Task.log('Setting up GitLab Authentication for you...'); - - await Task.forItem( - 'Updating', - APP_CONFIG_FILE, - async () => await updateConfigFile(APP_CONFIG_FILE, config), - ); - - const patches = await fs.readdir(PATCH_FOLDER); - for (const patchFile of patches.filter(p => p.includes('gitlab'))) { - await Task.forItem('Patching', patchFile, async () => { - await patch(patchFile); - }); - } - - return answers; -}; diff --git a/packages/cli/src/commands/onboard/command.ts b/packages/cli/src/commands/onboard/command.ts deleted file mode 100644 index f68685f3e6..0000000000 --- a/packages/cli/src/commands/onboard/command.ts +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright 2023 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 chalk from 'chalk'; -import inquirer from 'inquirer'; -import { Task } from '../../lib/tasks'; -import { auth } from './auth'; -import { integrations } from './integrations'; -import { discover } from './discovery'; - -export async function command(): Promise { - const answers = await inquirer.prompt<{ - shouldSetupAuth: boolean; - shouldSetupScaffolder: boolean; - shouldDiscoverEntities: boolean; - }>([ - { - type: 'confirm', - name: 'shouldSetupAuth', - message: 'Do you want to set up Authentication for this project?', - default: true, - }, - { - type: 'confirm', - name: 'shouldSetupScaffolder', - message: 'Do you want to use Software Templates in this project?', - default: true, - }, - { - type: 'confirm', - name: 'shouldDiscoverEntities', - message: - 'Do you want to discover entities and add them to the Software Catalog?', - default: true, - }, - ]); - - const { shouldSetupAuth, shouldSetupScaffolder, shouldDiscoverEntities } = - answers; - - if (!shouldSetupAuth && !shouldSetupScaffolder && !shouldDiscoverEntities) { - Task.log( - chalk.yellow( - 'If you change your mind, feel free to re-run this command.', - ), - ); - return; - } - - let providerInfo; - if (shouldSetupAuth) { - providerInfo = await auth(); - } - - if (shouldSetupScaffolder) { - await integrations(providerInfo); - } - - if (shouldDiscoverEntities) { - await discover(providerInfo); - } - - Task.log(); - Task.log( - `You can now start your app with ${chalk.inverse( - chalk.italic('yarn dev'), - )}`, - ); - Task.log(); -} diff --git a/packages/cli/src/commands/onboard/config.ts b/packages/cli/src/commands/onboard/config.ts deleted file mode 100644 index cce3119fcc..0000000000 --- a/packages/cli/src/commands/onboard/config.ts +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright 2023 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 * as fs from 'fs-extra'; -import yaml from 'yaml'; - -const readYaml = async (file: string) => { - return yaml.parse(await fs.readFile(file, 'utf8')); -}; - -export const updateConfigFile = async (file: string, config: T) => { - const staticContent = - '# Backstage override configuration for your local development environment \n'; - - const content = fs.existsSync(file) - ? yaml.stringify( - { ...(await readYaml(file)), ...config }, - { - indent: 2, - }, - ) - : staticContent.concat( - yaml.stringify( - { ...config }, - { - indent: 2, - }, - ), - ); - - return await fs.writeFile(file, content, 'utf8'); -}; diff --git a/packages/cli/src/commands/onboard/discovery/Discovery.ts b/packages/cli/src/commands/onboard/discovery/Discovery.ts deleted file mode 100644 index b0db4255ad..0000000000 --- a/packages/cli/src/commands/onboard/discovery/Discovery.ts +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright 2023 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 chalk from 'chalk'; -import { Entity } from '@backstage/catalog-model'; -import { Analyzer } from './analyzers/types'; -import { Provider } from './providers/types'; -import { DefaultAnalysisOutputs } from './analyzers/DefaultAnalysisOutputs'; -import { Task } from '../../../lib/tasks'; - -export class Discovery { - readonly #providers: Provider[] = []; - readonly #analyzers: Analyzer[] = []; - - addProvider(provider: Provider) { - this.#providers.push(provider); - } - - addAnalyzer(analyzer: Analyzer) { - this.#analyzers.push(analyzer); - } - - async run(url: string): Promise<{ entities: Entity[] }> { - Task.log(`Running discovery for ${chalk.cyan(url)}`); - const result: Entity[] = []; - - for (const provider of this.#providers) { - const repositories = await provider.discover(url); - if (repositories && repositories.length) { - Task.log( - `Discovered ${chalk.cyan( - repositories.length, - )} repositories for ${chalk.cyan(provider.name())}`, - ); - - for (const repository of repositories) { - await Task.forItem('Analyzing', repository.name, async () => { - const output = new DefaultAnalysisOutputs(); - for (const analyzer of this.#analyzers) { - await analyzer.analyzeRepository({ repository, output }); - } - - output - .list() - .filter(entry => entry.type === 'entity') - .forEach(({ entity }) => result.push(entity)); - }); - } - - Task.log(`Produced ${chalk.cyan(result.length || 'no')} entities`); - } - } - - return { - entities: result, - }; - } -} diff --git a/packages/cli/src/commands/onboard/discovery/analyzers/BasicRepositoryAnalyzer.ts b/packages/cli/src/commands/onboard/discovery/analyzers/BasicRepositoryAnalyzer.ts deleted file mode 100644 index 82c8c2cdae..0000000000 --- a/packages/cli/src/commands/onboard/discovery/analyzers/BasicRepositoryAnalyzer.ts +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright 2023 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 { ComponentEntity } from '@backstage/catalog-model'; -import { AnalysisOutputs, Analyzer } from './types'; -import { Repository } from '../providers/types'; - -/** - * Naive analyzer that produces a single entity that represents the repository - * as a whole. - */ -export class BasicRepositoryAnalyzer implements Analyzer { - name(): string { - return BasicRepositoryAnalyzer.name; - } - - async analyzeRepository(options: { - repository: Repository; - output: AnalysisOutputs; - }): Promise { - const entity: ComponentEntity = { - apiVersion: 'backstage.io/v1alpha1', - kind: 'Component', - metadata: { - name: options.repository.name, - ...(options.repository.description - ? { description: options.repository.description } - : {}), - }, - spec: { - type: 'service', - lifecycle: 'production', - owner: 'user:guest', - }, - }; - - options.output.produce({ - type: 'entity', - path: '/', - entity: entity, - }); - } -} diff --git a/packages/cli/src/commands/onboard/discovery/analyzers/DefaultAnalysisOutputs.ts b/packages/cli/src/commands/onboard/discovery/analyzers/DefaultAnalysisOutputs.ts deleted file mode 100644 index a370b8f166..0000000000 --- a/packages/cli/src/commands/onboard/discovery/analyzers/DefaultAnalysisOutputs.ts +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright 2023 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 { AnalysisOutput, AnalysisOutputs } from './types'; - -export class DefaultAnalysisOutputs implements AnalysisOutputs { - readonly #outputs = new Map(); - - produce(output: AnalysisOutput) { - this.#outputs.set(output.entity.metadata.name, output); - } - - list() { - return Array.from(this.#outputs).map(([_, output]) => output); - } -} diff --git a/packages/cli/src/commands/onboard/discovery/analyzers/PackageJsonAnalyzer.ts b/packages/cli/src/commands/onboard/discovery/analyzers/PackageJsonAnalyzer.ts deleted file mode 100644 index 16dd4b9301..0000000000 --- a/packages/cli/src/commands/onboard/discovery/analyzers/PackageJsonAnalyzer.ts +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Copyright 2023 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 { - ANNOTATION_SOURCE_LOCATION, - ComponentEntity, -} from '@backstage/catalog-model'; -import z from 'zod'; -import { AnalysisOutputs, Analyzer } from './types'; -import { Repository, RepositoryFile } from '../providers/types'; - -export class PackageJsonAnalyzer implements Analyzer { - name(): string { - return PackageJsonAnalyzer.name; - } - - async analyzeRepository(options: { - repository: Repository; - output: AnalysisOutputs; - }): Promise { - const packageJson = await options.repository.file('package.json'); - if (!packageJson) { - return; - } - - const content = await readPackageJson(packageJson); - if (!content) { - return; - } - - const name = sanitizeName(content?.name) ?? options.repository.name; - - const entity: ComponentEntity = { - apiVersion: 'backstage.io/v1alpha1', - kind: 'Component', - metadata: { - name, - ...(options.repository.description - ? { description: options.repository.description } - : {}), - tags: ['javascript'], - annotations: { - [ANNOTATION_SOURCE_LOCATION]: `url:${options.repository.url}`, - }, - }, - spec: { - type: 'website', - lifecycle: 'production', - owner: 'user:guest', - }, - }; - - const decorate = options.output - .list() - .find(entry => entry.entity.metadata.name === name); - - if (decorate) { - decorate.entity.spec = { - ...decorate.entity.spec, - type: 'website', - }; - - decorate.entity.metadata.tags = [ - ...(decorate.entity.metadata.tags ?? []), - 'javascript', - ]; - - decorate.entity.metadata.annotations = { - ...decorate.entity.metadata.annotations, - [ANNOTATION_SOURCE_LOCATION]: `url:${options.repository.url}`, - }; - - return; - } - - options.output.produce({ - type: 'entity', - path: '/', - entity, - }); - } -} - -const packageSchema = z.object({ - name: z.string().optional(), -}); - -/** - * Makes sure that a name retrieved from a package.json file - * is reasonable and conforms to the catalog naming format. - * - * Read more about the naming format here: - * ADR002: Default Software Catalog File Format - * https://backstage.io/docs/architecture-decisions/adrs-adr002/ - */ -function sanitizeName(name?: string) { - return name && name !== 'root' - ? name.replace(/[^a-z0-9A-Z]/g, '_').substring(0, 62) - : undefined; -} - -async function readPackageJson( - file: RepositoryFile, -): Promise | undefined> { - try { - const text = await file.text(); - const result = packageSchema.safeParse(JSON.parse(text)); - if (!result.success) { - return undefined; - } - return { name: result.data.name }; - } catch (e) { - return undefined; - } -} diff --git a/packages/cli/src/commands/onboard/discovery/analyzers/types.ts b/packages/cli/src/commands/onboard/discovery/analyzers/types.ts deleted file mode 100644 index 57b6f2152b..0000000000 --- a/packages/cli/src/commands/onboard/discovery/analyzers/types.ts +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright 2023 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 { Entity } from '@backstage/catalog-model'; -import { Repository } from '../providers/types'; - -export type AnalysisOutput = { - type: 'entity'; - path: string; - entity: Entity; -}; - -export interface AnalysisOutputs { - produce(output: AnalysisOutput): void; - list(): AnalysisOutput[]; -} - -export interface Analyzer { - name(): string; - analyzeRepository(options: { - repository: Repository; - output: AnalysisOutputs; - }): Promise; -} diff --git a/packages/cli/src/commands/onboard/discovery/index.ts b/packages/cli/src/commands/onboard/discovery/index.ts deleted file mode 100644 index 8b2a5b694a..0000000000 --- a/packages/cli/src/commands/onboard/discovery/index.ts +++ /dev/null @@ -1,141 +0,0 @@ -/* - * Copyright 2023 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 fs from 'fs-extra'; -import yaml from 'yaml'; -import inquirer from 'inquirer'; -import chalk from 'chalk'; -import { loadCliConfig } from '../../../lib/config'; -import { updateConfigFile } from '../config'; -import { APP_CONFIG_FILE, DISCOVERED_ENTITIES_FILE } from '../files'; -import { Discovery } from './Discovery'; -import { BasicRepositoryAnalyzer } from './analyzers/BasicRepositoryAnalyzer'; -import { PackageJsonAnalyzer } from './analyzers/PackageJsonAnalyzer'; -import { GithubDiscoveryProvider } from './providers/github/GithubDiscoveryProvider'; -import { GitlabDiscoveryProvider } from './providers/gitlab/GitlabDiscoveryProvider'; -import { GitHubAnswers, GitLabAnswers } from '../auth'; -import { Task } from '../../../lib/tasks'; - -export async function discover(providerInfo?: { - provider: string; - answers: GitHubAnswers | GitLabAnswers; -}) { - Task.log(` - Would you like to scan for - and create - Software Catalog entities? - - You will need to select which SCM (Source Code Management) provider you are using, - and then which repository or organization you want to scan. - - This will generate a new file in the root of your app containing discovered entities, - which will be included in the Software Catalog when you start up Backstage next time. - - Note that this command requires an access token, which can be either added through the integration config or - provided as an environment variable. - `); - - const answers = await inquirer.prompt<{ - shouldContinue: boolean; - provider: string; - url: string; - }>([ - { - type: 'confirm', - name: 'shouldContinue', - message: 'Do you want to continue?', - }, - { - type: 'list', - name: 'provider', - message: 'Please select which SCM provider you want to use:', - choices: ['GitHub', 'GitLab'], - default: providerInfo?.provider, - when: ({ shouldContinue }) => shouldContinue, - }, - { - type: 'input', - name: 'url', - message: `Which repository do you want to scan?`, - when: ({ shouldContinue }) => shouldContinue, - filter: (input, { provider }) => { - if (provider === 'GitLab') { - return `https://gitlab.com/${input}`; - } - if (provider === 'GitHub') { - return `https://github.com/${input}`; - } - return false; - }, - }, - ]); - - if (!answers.shouldContinue) { - Task.log( - chalk.yellow( - 'If you change your mind, feel free to re-run this command.', - ), - ); - return; - } - - const { fullConfig: config } = await loadCliConfig({ args: [] }); - - const discovery = new Discovery(); - - if (answers.provider === 'GitHub') { - discovery.addProvider(GithubDiscoveryProvider.fromConfig(config)); - } - if (answers.provider === 'GitLab') { - discovery.addProvider(GitlabDiscoveryProvider.fromConfig(config)); - } - - discovery.addAnalyzer(new BasicRepositoryAnalyzer()); - discovery.addAnalyzer(new PackageJsonAnalyzer()); - - const { entities } = await discovery.run(answers.url); - - if (!entities.length) { - Task.log( - chalk.yellow(` - We could not find enough information to be able to generate any Software Catalog entities for you. - Perhaps you can try again with a different repository?`), - ); - return; - } - - await Task.forItem('Creating', DISCOVERED_ENTITIES_FILE, async () => { - const payload: string[] = []; - for (const entity of entities) { - payload.push('---\n', yaml.stringify(entity)); - } - await fs.writeFile(DISCOVERED_ENTITIES_FILE, payload.join('')); - }); - - await Task.forItem( - 'Updating', - APP_CONFIG_FILE, - async () => - await updateConfigFile(APP_CONFIG_FILE, { - catalog: { - locations: [ - { - type: 'file', - target: DISCOVERED_ENTITIES_FILE, - }, - ], - }, - }), - ); -} diff --git a/packages/cli/src/commands/onboard/discovery/providers/github/GithubDiscoveryProvider.ts b/packages/cli/src/commands/onboard/discovery/providers/github/GithubDiscoveryProvider.ts deleted file mode 100644 index a24756edd7..0000000000 --- a/packages/cli/src/commands/onboard/discovery/providers/github/GithubDiscoveryProvider.ts +++ /dev/null @@ -1,163 +0,0 @@ -/* - * Copyright 2023 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 { Config } from '@backstage/config'; -import { - DefaultGithubCredentialsProvider, - GithubCredentialsProvider, - ScmIntegrations, -} from '@backstage/integration'; -import { graphql } from '@octokit/graphql'; -import { - Repository as GraphqlRepository, - Query as GraphqlQuery, -} from '@octokit/graphql-schema'; -import parseGitUrl from 'git-url-parse'; -import { Provider, Repository } from '../types'; -import { GithubRepository } from './GithubRepository'; - -export class GithubDiscoveryProvider implements Provider { - readonly #envToken: string | undefined; - readonly #scmIntegrations: ScmIntegrations; - readonly #credentialsProvider: GithubCredentialsProvider; - - static fromConfig(config: Config): GithubDiscoveryProvider { - const envToken = process.env.GITHUB_TOKEN || undefined; - const scmIntegrations = ScmIntegrations.fromConfig(config); - const credentialsProvider = - DefaultGithubCredentialsProvider.fromIntegrations(scmIntegrations); - return new GithubDiscoveryProvider( - envToken, - scmIntegrations, - credentialsProvider, - ); - } - - private constructor( - envToken: string | undefined, - integrations: ScmIntegrations, - credentialsProvider: GithubCredentialsProvider, - ) { - this.#envToken = envToken; - this.#scmIntegrations = integrations; - this.#credentialsProvider = credentialsProvider; - } - - name(): string { - return 'GitHub'; - } - - async discover(url: string): Promise { - if (!url.startsWith('https://github.com/')) { - return false; - } - - const scmIntegration = this.#scmIntegrations.github.byUrl(url); - if (!scmIntegration) { - throw new Error(`No GitHub integration found for ${url}`); - } - - const parsed = parseGitUrl(url); - const { name, organization } = parsed; - const org = organization || name; // depends on if it's a repo url or an org url... - - const client = graphql.defaults({ - baseUrl: scmIntegration.config.apiBaseUrl, - headers: await this.#getRequestHeaders(url), - }); - - const { repositories } = await this.#getOrganizationRepositories( - client, - org, - ); - - return repositories - .filter(repo => repo.url.startsWith(url)) - .map(repo => new GithubRepository(client, repo, org)); - } - - async #getRequestHeaders(url: string): Promise> { - const credentials = await this.#credentialsProvider.getCredentials({ - url, - }); - - if (credentials.headers) { - return credentials.headers; - } else if (credentials.token) { - return { authorization: `token ${credentials.token}` }; - } - - if (this.#envToken) { - return { authorization: `token ${this.#envToken}` }; - } - - throw new Error( - 'No token available for GitHub, please configure your integrations or set a GITHUB_TOKEN env variable', - ); - } - - async #getOrganizationRepositories(client: typeof graphql, org: string) { - const query = `query repositories($org: String!, $cursor: String) { - repositoryOwner(login: $org) { - login - repositories(first: 50, after: $cursor) { - nodes { - name - url - description - isArchived - isFork - } - pageInfo { - hasNextPage - endCursor - } - } - } - }`; - - const result: GraphqlRepository[] = []; - - let cursor: string | undefined | null = undefined; - let hasNextPage = true; - - while (hasNextPage) { - const response: GraphqlQuery = await client(query, { - org, - cursor, - }); - - const { repositories: connection } = response.repositoryOwner ?? {}; - - if (!connection) { - throw new Error(`Found no repositories for ${org}`); - } - - for (const repository of connection.nodes ?? []) { - if (repository && !repository.isArchived && !repository.isFork) { - result.push(repository); - } - } - - cursor = connection.pageInfo.endCursor; - hasNextPage = connection.pageInfo.hasNextPage; - } - - return { - repositories: result, - }; - } -} diff --git a/packages/cli/src/commands/onboard/discovery/providers/github/GithubFile.ts b/packages/cli/src/commands/onboard/discovery/providers/github/GithubFile.ts deleted file mode 100644 index 25279b0949..0000000000 --- a/packages/cli/src/commands/onboard/discovery/providers/github/GithubFile.ts +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright 2023 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 { RepositoryFile } from '../types'; - -export class GithubFile implements RepositoryFile { - readonly #path: string; - readonly #content: string; - - constructor(path: string, content: string) { - this.#path = path; - this.#content = content; - } - - get path(): string { - return this.#path; - } - - async text(): Promise { - return this.#content; - } -} diff --git a/packages/cli/src/commands/onboard/discovery/providers/github/GithubRepository.ts b/packages/cli/src/commands/onboard/discovery/providers/github/GithubRepository.ts deleted file mode 100644 index f3c68851a0..0000000000 --- a/packages/cli/src/commands/onboard/discovery/providers/github/GithubRepository.ts +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright 2023 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 { graphql } from '@octokit/graphql'; -import { - Repository as GraphqlRepository, - Blob as GraphqlBlob, -} from '@octokit/graphql-schema'; -import { Repository, RepositoryFile } from '../types'; -import { GithubFile } from './GithubFile'; - -export class GithubRepository implements Repository { - readonly #client: typeof graphql; - readonly #repo: GraphqlRepository; - readonly #org: string; - - constructor(client: typeof graphql, repo: GraphqlRepository, org: string) { - this.#client = client; - this.#repo = repo; - this.#org = org; - } - - get url(): string { - return this.#repo.url; - } - - get name(): string { - return this.#repo.name; - } - - get owner(): string { - return this.#org; - } - - get description(): string | undefined { - return this.#repo.description ?? undefined; - } - - async file(filename: string): Promise { - const content = await this.#getFileContent(filename); - if (!content || content.isBinary || !content.text) { - return undefined; - } - - return new GithubFile(filename, content.text ?? ''); - } - - async #getFileContent(filename: string) { - const query = `query RepoFiles($owner: String!, $name: String!, $expr: String!) { - repository(owner: $owner, name: $name) { - object(expression: $expr) { - ...on Blob { - text - isBinary - } - } - } - }`; - - const response = await this.#client<{ repository: GraphqlRepository }>( - query, - { - name: this.#repo.name, - owner: this.#org, - expr: `HEAD:${filename}`, - }, - ); - - return response.repository.object as GraphqlBlob; - } -} diff --git a/packages/cli/src/commands/onboard/discovery/providers/gitlab/GitlabDiscoveryProvider.ts b/packages/cli/src/commands/onboard/discovery/providers/gitlab/GitlabDiscoveryProvider.ts deleted file mode 100644 index df9ffa4206..0000000000 --- a/packages/cli/src/commands/onboard/discovery/providers/gitlab/GitlabDiscoveryProvider.ts +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Copyright 2023 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 { Config } from '@backstage/config'; -import { - DefaultGitlabCredentialsProvider, - GitlabCredentialsProvider, - ScmIntegrations, -} from '@backstage/integration'; -import fetch from 'node-fetch'; -import { Provider } from '../types'; -import { GitlabProject, ProjectResponse } from './GitlabProject'; - -export class GitlabDiscoveryProvider implements Provider { - readonly #envToken: string | undefined; - readonly #scmIntegrations: ScmIntegrations; - readonly #credentialsProvider: GitlabCredentialsProvider; - - static fromConfig(config: Config): GitlabDiscoveryProvider { - const envToken = process.env.GITLAB_TOKEN || undefined; - const scmIntegrations = ScmIntegrations.fromConfig(config); - const credentialsProvider = - DefaultGitlabCredentialsProvider.fromIntegrations(scmIntegrations); - - return new GitlabDiscoveryProvider( - envToken, - scmIntegrations, - credentialsProvider, - ); - } - - private constructor( - envToken: string | undefined, - integrations: ScmIntegrations, - credentialsProvider: GitlabCredentialsProvider, - ) { - this.#envToken = envToken; - this.#scmIntegrations = integrations; - this.#credentialsProvider = credentialsProvider; - } - - name(): string { - return 'GitLab'; - } - - async discover(url: string): Promise { - const { origin, pathname } = new URL(url); - const [, user] = pathname.split('/'); - - const scmIntegration = this.#scmIntegrations.gitlab.byUrl(origin); - if (!scmIntegration) { - throw new Error(`No GitLab integration found for ${origin}`); - } - - const headers = await this.#getRequestHeaders(origin); - - const response = await fetch( - `${scmIntegration.config.apiBaseUrl}/users/${user}/projects`, - { headers }, - ); - - if (!response.ok) { - throw new Error(`${response.status} ${response.statusText}`); - } - - const projects: ProjectResponse[] = await response.json(); - - return projects.map( - project => - new GitlabProject(project, scmIntegration.config.apiBaseUrl, headers), - ); - } - - async #getRequestHeaders(url: string): Promise> { - const credentials = await this.#credentialsProvider.getCredentials({ - url, - }); - - if (credentials.headers) { - return credentials.headers; - } else if (credentials.token) { - return { authorization: `Bearer ${credentials.token}` }; - } - - if (this.#envToken) { - return { authorization: `Bearer ${this.#envToken}` }; - } - - throw new Error( - 'No token available for GitLab, please set a GITLAB_TOKEN env variable', - ); - } -} diff --git a/packages/cli/src/commands/onboard/discovery/providers/gitlab/GitlabFile.ts b/packages/cli/src/commands/onboard/discovery/providers/gitlab/GitlabFile.ts deleted file mode 100644 index 06f3189ba6..0000000000 --- a/packages/cli/src/commands/onboard/discovery/providers/gitlab/GitlabFile.ts +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright 2023 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 { RepositoryFile } from '../types'; - -/** - * A single file in a GitLab repository. - */ -export class GitlabFile implements RepositoryFile { - readonly #path: string; - readonly #content: string; - - constructor(path: string, content: string) { - this.#path = path; - this.#content = content; - } - - get path(): string { - return this.#path; - } - - async text(): Promise { - return this.#content; - } -} diff --git a/packages/cli/src/commands/onboard/discovery/providers/gitlab/GitlabProject.ts b/packages/cli/src/commands/onboard/discovery/providers/gitlab/GitlabProject.ts deleted file mode 100644 index 258e8176bb..0000000000 --- a/packages/cli/src/commands/onboard/discovery/providers/gitlab/GitlabProject.ts +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Copyright 2023 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 fetch from 'node-fetch'; -import { GitlabFile } from './GitlabFile'; -import { Repository, RepositoryFile } from '../types'; - -export type ProjectResponse = { - id: string; - name: string; - description: string; - owner: { - username: string; - }; - web_url: string; -}; - -type BranchResponse = { - default: boolean; - name: string; -}; - -type FileContentResponse = { - content: string; -}; - -export class GitlabProject implements Repository { - constructor( - private readonly project: ProjectResponse, - private readonly apiBaseUrl: string, - private readonly headers: { [name: string]: string }, - ) {} - - get url(): string { - return this.project.web_url; - } - - get name(): string { - return this.project.name; - } - - get owner(): string { - return this.project.owner.username; - } - - get description(): string { - return this.project.description; - } - - async file(filename: string): Promise { - const mainBranch = await this.#getMainBranch(); - const content = await this.#getFileContent(filename, mainBranch); - - return new GitlabFile(filename, content); - } - - async #getFileContent(path: string, mainBranch: string): Promise { - const response = await fetch( - `${this.apiBaseUrl}/projects/${this.project.id}/repository/files/${path}?ref=${mainBranch}`, - { headers: this.headers }, - ); - const { content }: FileContentResponse = await response.json(); - - return Buffer.from(content, 'base64').toString('ascii'); - } - - async #getMainBranch(): Promise { - const response = await fetch( - `${this.apiBaseUrl}/projects/${this.project.id}/repository/branches`, - { headers: this.headers }, - ); - const branches: BranchResponse[] = await response.json(); - - return branches.find(branch => branch.default)?.name ?? 'main'; - } -} diff --git a/packages/cli/src/commands/onboard/discovery/providers/types.ts b/packages/cli/src/commands/onboard/discovery/providers/types.ts deleted file mode 100644 index 2d8ce70ecf..0000000000 --- a/packages/cli/src/commands/onboard/discovery/providers/types.ts +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright 2023 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. - */ - -/** - * Abstraction for a single repository. - */ -export interface Repository { - url: string; - - name: string; - - owner: string; - - description?: string; - - file(filename: string): Promise; -} - -/** - * Abstraction for a single repository file. - */ -export interface RepositoryFile { - /** - * The filepath of the data. - */ - path: string; - - /** - * The textual contents of the file. - */ - text(): Promise; -} - -/** - * One integration that supports discovery of repositories. - */ -export interface Provider { - name(): string; - discover(url: string): Promise; -} diff --git a/packages/cli/src/commands/onboard/files.ts b/packages/cli/src/commands/onboard/files.ts deleted file mode 100644 index febec35d4a..0000000000 --- a/packages/cli/src/commands/onboard/files.ts +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright 2023 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 { findPaths } from '@backstage/cli-common'; -import * as path from 'path'; - -/* eslint-disable-next-line no-restricted-syntax */ -const { targetRoot, ownDir } = findPaths(__dirname); - -export const APP_CONFIG_FILE = path.join(targetRoot, 'app-config.local.yaml'); -export const DISCOVERED_ENTITIES_FILE = path.join( - targetRoot, - 'examples', - 'discovered-entities.yaml', -); -export const PATCH_FOLDER = path.join( - ownDir, - 'src', - 'commands', - 'onboard', - 'auth', - 'patches', -); diff --git a/packages/cli/src/commands/onboard/index.ts b/packages/cli/src/commands/onboard/index.ts deleted file mode 100644 index 4c23ea6e48..0000000000 --- a/packages/cli/src/commands/onboard/index.ts +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright 2023 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. - */ - -export { command } from './command'; diff --git a/packages/cli/src/commands/onboard/integrations/github.ts b/packages/cli/src/commands/onboard/integrations/github.ts deleted file mode 100644 index a0538c7ace..0000000000 --- a/packages/cli/src/commands/onboard/integrations/github.ts +++ /dev/null @@ -1,136 +0,0 @@ -/* - * Copyright 2023 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 chalk from 'chalk'; -import inquirer from 'inquirer'; -import { Task } from '../../../lib/tasks'; -import { updateConfigFile } from '../config'; -import { APP_CONFIG_FILE } from '../files'; -import { GitHubAnswers } from '../auth'; - -type Answers = { - hasEnterprise: boolean; - enterpriseInstanceUrl: string; - apiBaseUrl: string; -}; - -const getConfig = ({ - hasEnterprise, - apiBaseUrl, - host, - token, -}: { - hasEnterprise: boolean; - apiBaseUrl: string; - host: string; - token: string; -}) => ({ - integrations: { - github: [ - { - host, - token, - ...(hasEnterprise && { - apiBaseUrl, - }), - }, - ], - }, -}); - -export const github = async (providerAnswers?: GitHubAnswers) => { - // TODO(tudi2d): Is GitHub Enterprise a valid setup if there is no Authentication? - const answers = await inquirer.prompt([ - { - type: 'confirm', - name: 'hasEnterprise', - message: 'Are you using GitHub Enterprise?', - when: () => typeof providerAnswers === 'undefined', - }, - { - type: 'input', - name: 'enterpriseInstanceUrl', - message: 'What is your URL for GitHub Enterprise?', - when: ({ hasEnterprise }) => hasEnterprise, - validate: (input: string) => Boolean(new URL(input)), - }, - { - type: 'input', - name: 'apiBaseUrl', - message: 'What is your GitHub Enterprise API path?', - default: '/api/v3', - when: ({ hasEnterprise }) => - hasEnterprise || providerAnswers?.hasEnterprise, - // TODO(tudi2d): Fetch API using OAuth Token if Auth was set up - }, - ]); - - const host = new URL( - providerAnswers?.enterpriseInstanceUrl ?? - answers?.enterpriseInstanceUrl ?? - 'http://github.com', - ); - - Task.log(` - To create new repositories in GitHub using Software Templates you first need to create a personal access token: ${chalk.blue( - `${host.origin}/settings/tokens/new`, - )} - - Select the following scopes: - - Reading software components:${chalk.cyan(` - - "repo"`)} - - Reading organization data:${chalk.cyan(` - - "read:org" - - "read:user" - - "user:email"`)} - - Publishing software templates:${chalk.cyan(` - - "repo" - - "workflow" (if templates include GitHub workflows) - `)} - - You can find the full documentation page here: ${chalk.blue( - 'https://backstage.io/docs/integrations/github/locations', - )} - `); - - const { token } = await inquirer.prompt<{ token: string }>([ - { - type: 'input', - name: 'token', - message: - 'Please insert your personal access token to setup the GitHub Integration', - // TODO(tudi2d): validate - }, - ]); - - const config = getConfig({ - hasEnterprise: providerAnswers?.hasEnterprise ?? answers.hasEnterprise, - apiBaseUrl: host.origin + answers.apiBaseUrl, - host: host.hostname, - token, - }); - - Task.log('Setting up Software Templates using GitHub integration for you...'); - - await Task.forItem( - 'Updating', - APP_CONFIG_FILE, - async () => await updateConfigFile(APP_CONFIG_FILE, config), - ); -}; diff --git a/packages/cli/src/commands/onboard/integrations/index.ts b/packages/cli/src/commands/onboard/integrations/index.ts deleted file mode 100644 index 5cb2f95b38..0000000000 --- a/packages/cli/src/commands/onboard/integrations/index.ts +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright 2023 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 inquirer from 'inquirer'; -import { Task } from '../../../lib/tasks'; -import { GitHubAnswers, GitLabAnswers } from '../auth'; -import { github } from './github'; - -enum Integration { - GITHUB = 'GitHub', -} - -const Integrations: Integration[] = [Integration.GITHUB]; - -export async function integrations(providerInfo?: { - provider: string; - answers: GitHubAnswers | GitLabAnswers; -}): Promise { - const answers = await inquirer.prompt<{ - integration?: Integration; - shouldUsePreviousProvider: boolean; - }>([ - { - type: 'confirm', - name: 'shouldUsePreviousProvider', - message: `Do you want to keep using ${providerInfo?.provider} as your provider when setting up Software Templates?`, - when: () => - providerInfo?.provider && - Object.values(Integrations).includes( - providerInfo!.provider as Integration, - ), - }, - { - // TODO(tudi2d): Let's start with one, but it should be multiple choice in the future - type: 'list', - name: 'integration', - message: 'Please select an integration provider:', - choices: Integrations, - when: ({ shouldUsePreviousProvider }) => !shouldUsePreviousProvider, - }, - ]); - - if (answers.shouldUsePreviousProvider) { - answers.integration = providerInfo!.provider as Integration; - } - - switch (answers.integration) { - case Integration.GITHUB: { - const providerAnswers = - providerInfo?.provider === 'GitHub' - ? (providerInfo!.answers as GitHubAnswers) - : undefined; - await github(providerAnswers); - break; - } - default: - } - - Task.log(); - Task.log(`Done setting up ${answers.integration} Integration!`); - Task.log(); -} From 4e771ba2d08d5882d76a90e558d583a4c298b4ce Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sat, 21 Sep 2024 12:52:33 +0200 Subject: [PATCH 117/164] cli: remove old diff implementation Signed-off-by: Patrik Oldsberg --- packages/cli/src/lib/diff/handlers.ts | 354 -------------------------- packages/cli/src/lib/diff/index.ts | 20 -- packages/cli/src/lib/diff/prompts.ts | 53 ---- packages/cli/src/lib/diff/read.ts | 120 --------- packages/cli/src/lib/diff/types.ts | 39 --- 5 files changed, 586 deletions(-) delete mode 100644 packages/cli/src/lib/diff/handlers.ts delete mode 100644 packages/cli/src/lib/diff/index.ts delete mode 100644 packages/cli/src/lib/diff/prompts.ts delete mode 100644 packages/cli/src/lib/diff/read.ts delete mode 100644 packages/cli/src/lib/diff/types.ts diff --git a/packages/cli/src/lib/diff/handlers.ts b/packages/cli/src/lib/diff/handlers.ts deleted file mode 100644 index 55e9cddd3d..0000000000 --- a/packages/cli/src/lib/diff/handlers.ts +++ /dev/null @@ -1,354 +0,0 @@ -/* - * Copyright 2020 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 chalk from 'chalk'; -import { diffLines } from 'diff'; -import { sep, posix } from 'path'; -import { FileDiff, PromptFunc, FileHandler, WriteFileFunc } from './types'; - -function sortObjectKeys(obj: Record) { - const sortedKeys = Object.keys(obj).sort(); - for (const key of sortedKeys) { - const value = obj[key]; - delete obj[key]; - obj[key] = value; - } -} - -class PackageJsonHandler { - static async handler( - { path, write, missing, targetContents, templateContents }: FileDiff, - prompt: PromptFunc, - variant?: string, - ) { - console.log('Checking package.json'); - - if (missing) { - throw new Error(`${path} doesn't exist`); - } - - const pkg = JSON.parse(templateContents); - const targetPkg = JSON.parse(targetContents); - - const handler = new PackageJsonHandler( - write, - prompt, - pkg, - targetPkg, - variant, - ); - await handler.handle(); - } - - static async appHandler(file: FileDiff, prompt: PromptFunc) { - return PackageJsonHandler.handler(file, prompt, 'app'); - } - - constructor( - private readonly writeFunc: WriteFileFunc, - private readonly prompt: PromptFunc, - private readonly pkg: any, - private readonly targetPkg: any, - private readonly variant?: string, - ) {} - - async handle() { - await this.syncField('main'); - if (this.variant !== 'app') { - await this.syncField('main:src'); - } - await this.syncField('types'); - await this.syncFiles(); - await this.syncScripts(); - await this.syncPublishConfig(); - await this.syncDependencies('dependencies'); - await this.syncDependencies('peerDependencies', true); - await this.syncDependencies('devDependencies'); - await this.syncReactDeps(); - } - - // Make sure a field inside package.json is in sync. This mutates the targetObj and writes package.json on change. - private async syncField( - fieldName: string, - obj: any = this.pkg, - targetObj: any = this.targetPkg, - prefix?: string, - sort?: boolean, - optional?: boolean, - ) { - const fullFieldName = chalk.cyan( - prefix ? `${prefix}[${fieldName}]` : fieldName, - ); - const newValue = obj[fieldName]; - const coloredNewValue = chalk.cyan(JSON.stringify(newValue)); - - if (fieldName in targetObj) { - const oldValue = targetObj[fieldName]; - if (JSON.stringify(oldValue) === JSON.stringify(newValue)) { - return; - } - - const coloredOldValue = chalk.cyan(JSON.stringify(oldValue)); - const msg = `package.json has mismatched field, ${fullFieldName}, change from ${coloredOldValue} to ${coloredNewValue}?`; - if (await this.prompt(msg)) { - targetObj[fieldName] = newValue; - if (sort) { - sortObjectKeys(targetObj); - } - await this.write(); - } - } else if (fieldName in obj && optional !== true) { - if ( - await this.prompt( - `package.json is missing field ${fullFieldName}, set to ${coloredNewValue}?`, - ) - ) { - targetObj[fieldName] = newValue; - if (sort) { - sortObjectKeys(targetObj); - } - await this.write(); - } - } - } - - private async syncFiles() { - const { configSchema } = this.targetPkg; - const hasSchemaFile = typeof configSchema === 'string'; - - if (!this.targetPkg.files) { - const expected = hasSchemaFile ? ['dist', configSchema] : ['dist']; - if ( - await this.prompt( - `package.json is missing field "files", set to ${JSON.stringify( - expected, - )}?`, - ) - ) { - this.targetPkg.files = expected; - await this.write(); - } - } else { - const missing = []; - if (!this.targetPkg.files.includes('dist')) { - missing.push('dist'); - } - if (hasSchemaFile && !this.targetPkg.files.includes(configSchema)) { - missing.push(configSchema); - } - if (missing.length) { - if ( - await this.prompt( - `package.json is missing ${JSON.stringify( - missing, - )} in the "files" field, add?`, - ) - ) { - this.targetPkg.files.push(...missing); - await this.write(); - } - } - } - } - - private async syncScripts() { - const pkgScripts = this.pkg.scripts; - const targetScripts = (this.targetPkg.scripts = - this.targetPkg.scripts || {}); - - if (!pkgScripts) { - return; - } - - // Skip diffing package scripts that have been migrated to the new commands - const hasNewScript = Object.values(targetScripts).some(script => - String(script).includes('backstage-cli package '), - ); - if (hasNewScript) { - return; - } - - for (const key of Object.keys(pkgScripts)) { - await this.syncField(key, pkgScripts, targetScripts, 'scripts'); - } - } - - private async syncPublishConfig() { - const pkgPublishConf = this.pkg.publishConfig; - const targetPublishConf = this.targetPkg.publishConfig; - - // If template doesn't have a publish config we're done - if (!pkgPublishConf) { - return; - } - - // Publish config can be removed the the target, skip in that case - if (!targetPublishConf) { - if (await this.prompt('Missing publishConfig, do you want to add it?')) { - this.targetPkg.publishConfig = pkgPublishConf; - await this.write(); - } - return; - } - - for (const key of Object.keys(pkgPublishConf)) { - // Don't want to mess with peoples internal setup - if (!['access', 'registry'].includes(key)) { - await this.syncField( - key, - pkgPublishConf, - targetPublishConf, - 'publishConfig', - ); - } - } - } - - private async syncDependencies(fieldName: string, required: boolean = false) { - const pkgDeps = this.pkg[fieldName]; - const targetDeps = (this.targetPkg[fieldName] = - this.targetPkg[fieldName] || {}); - - if (!pkgDeps && !required) { - return; - } - - // Hardcoded removal of these during migration - await this.syncField('@backstage/core', {}, targetDeps, fieldName, true); - await this.syncField( - '@backstage/core-api', - {}, - targetDeps, - fieldName, - true, - ); - - for (const key of Object.keys(pkgDeps)) { - if (this.variant === 'app' && key.startsWith('plugin-')) { - continue; - } - - await this.syncField( - key, - pkgDeps, - targetDeps, - fieldName, - true, - !required, - ); - } - } - - private async syncReactDeps() { - const targetDeps = (this.targetPkg.dependencies = - this.targetPkg.dependencies || {}); - - // Remove these from from deps since they're now in peerDeps - await this.syncField('react', {}, targetDeps, 'dependencies'); - await this.syncField('react-dom', {}, targetDeps, 'dependencies'); - } - - private async write() { - await this.writeFunc(`${JSON.stringify(this.targetPkg, null, 2)}\n`); - } -} - -// Make sure the file is an exact match of the template -async function exactMatchHandler( - { path, write, missing, targetContents, templateContents }: FileDiff, - prompt: PromptFunc, -) { - console.log(`Checking ${path}`); - const coloredPath = chalk.cyan(path); - - if (missing) { - if (await prompt(`Missing ${coloredPath}, do you want to add it?`)) { - await write(templateContents); - } - return; - } - if (targetContents === templateContents) { - return; - } - - const diffs = diffLines(targetContents, templateContents); - for (const diff of diffs) { - if (diff.added) { - process.stdout.write(chalk.green(`+${diff.value}`)); - } else if (diff.removed) { - process.stdout.write(chalk.red(`-${diff.value}`)); - } else { - process.stdout.write(` ${diff.value}`); - } - } - - if ( - await prompt( - `Outdated ${coloredPath}, do you want to apply the above patch?`, - ) - ) { - await write(templateContents); - } -} - -// Adds the file if it is missing, but doesn't check existing files -async function existsHandler( - { path, write, missing, templateContents }: FileDiff, - prompt: PromptFunc, -) { - console.log(`Making sure ${path} exists`); - - const coloredPath = chalk.cyan(path); - - if (missing) { - if (await prompt(`Missing ${coloredPath}, do you want to add it?`)) { - await write(templateContents); - } - return; - } -} - -async function skipHandler({ path }: FileDiff) { - console.log(`Skipping ${path}`); -} - -export const handlers = { - skip: skipHandler, - exists: existsHandler, - exactMatch: exactMatchHandler, - packageJson: PackageJsonHandler.handler, - appPackageJson: PackageJsonHandler.appHandler, -}; - -export async function handleAllFiles( - fileHandlers: FileHandler[], - files: FileDiff[], - promptFunc: PromptFunc, -) { - for (const file of files) { - const path = file.path.split(sep).join(posix.sep); - const fileHandler = fileHandlers.find(handler => - handler.patterns.some(pattern => - typeof pattern === 'string' ? pattern === path : pattern.test(path), - ), - ); - if (fileHandler) { - await fileHandler.handler(file, promptFunc); - } else { - throw new Error(`No template file handler found for ${path}`); - } - } -} diff --git a/packages/cli/src/lib/diff/index.ts b/packages/cli/src/lib/diff/index.ts deleted file mode 100644 index 79a55f023e..0000000000 --- a/packages/cli/src/lib/diff/index.ts +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright 2020 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. - */ - -export * from './handlers'; -export * from './prompts'; -export * from './read'; -export * from './types'; diff --git a/packages/cli/src/lib/diff/prompts.ts b/packages/cli/src/lib/diff/prompts.ts deleted file mode 100644 index d2ddca5fc0..0000000000 --- a/packages/cli/src/lib/diff/prompts.ts +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright 2020 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 chalk from 'chalk'; -import inquirer from 'inquirer'; -import { PromptFunc } from './types'; - -export const inquirerPromptFunc: PromptFunc = async msg => { - const { result } = await inquirer.prompt({ - type: 'confirm', - name: 'result', - message: chalk.blue(msg), - }); - return result; -}; - -export const makeCheckPromptFunc = () => { - let failed = false; - - const promptFunc: PromptFunc = async msg => { - failed = true; - console.log(chalk.red(`[Check Failed] ${msg}`)); - return false; - }; - - const finalize = () => { - if (failed) { - throw new Error( - 'Check failed, the plugin is not in sync with the latest template', - ); - } - }; - - return [promptFunc, finalize] as const; -}; - -export const yesPromptFunc: PromptFunc = async msg => { - console.log(`Accepting: "${msg}"`); - return true; -}; diff --git a/packages/cli/src/lib/diff/read.ts b/packages/cli/src/lib/diff/read.ts deleted file mode 100644 index 95b0bed43d..0000000000 --- a/packages/cli/src/lib/diff/read.ts +++ /dev/null @@ -1,120 +0,0 @@ -/* - * Copyright 2020 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 fs from 'fs-extra'; -import { - dirname, - resolve as resolvePath, - relative as relativePath, -} from 'path'; -import handlebars from 'handlebars'; -import recursiveReadDir from 'recursive-readdir'; -import { paths } from '../paths'; -import { FileDiff } from './types'; -import { createPackageVersionProvider } from '../../lib/version'; - -export type TemplatedFile = { - path: string; - contents: string; -}; - -async function readTemplateFile( - templateFile: string, - templateVars: any, -): Promise { - const contents = await fs.readFile(templateFile, 'utf8'); - - if (!templateFile.endsWith('.hbs')) { - return contents; - } - const packageVersionProvider = createPackageVersionProvider(undefined); - - return handlebars.compile(contents)(templateVars, { - helpers: { - versionQuery(name: string, hint: string | unknown) { - return packageVersionProvider( - name, - typeof hint === 'string' ? hint : undefined, - ); - }, - }, - }); -} - -async function readTemplate( - templateDir: string, - templateVars: any, -): Promise { - const templateFilePaths = await recursiveReadDir(templateDir).catch(error => { - throw new Error(`Failed to read template directory: ${error.message}`); - }); - - const templatedFiles = new Array(); - for (const templateFile of templateFilePaths) { - const path = relativePath(templateDir, templateFile).replace(/\.hbs$/, ''); - const contents = await readTemplateFile(templateFile, templateVars); - - templatedFiles.push({ path, contents }); - } - - return templatedFiles; -} - -async function diffTemplatedFiles( - targetDir: string, - templatedFiles: TemplatedFile[], -): Promise { - const fileDiffs = new Array(); - for (const { path, contents: templateContents } of templatedFiles) { - const targetPath = resolvePath(targetDir, path); - const targetExists = await fs.pathExists(targetPath); - - const write = async (contents: string) => { - await fs.ensureDir(dirname(targetPath)); - await fs.writeFile(targetPath, contents, 'utf8'); - }; - - if (targetExists) { - const targetContents = await fs.readFile(targetPath, 'utf8'); - fileDiffs.push({ - path, - write, - missing: false, - targetContents, - templateContents, - }); - } else { - fileDiffs.push({ - path, - write, - missing: true, - targetContents: '', - templateContents, - }); - } - } - - return fileDiffs; -} - -// Read all template files for a given template, along with all matching files in the target dir -export async function diffTemplateFiles(template: string, templateData: any) { - const templateDir = paths.resolveOwn('templates', template); - - const templatedFiles = await readTemplate(templateDir, templateData); - const fileDiffs = await diffTemplatedFiles(paths.targetDir, templatedFiles); - return fileDiffs; -} diff --git a/packages/cli/src/lib/diff/types.ts b/packages/cli/src/lib/diff/types.ts deleted file mode 100644 index ba649f66ff..0000000000 --- a/packages/cli/src/lib/diff/types.ts +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright 2020 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. - */ - -export type WriteFileFunc = (contents: string) => Promise; - -export type FileDiff = { - // Relative path within the target directory - path: string; - // Whether the target file exists in the target directory. - missing: boolean; - // Contents of the file in the target directory, or an empty string if the file is missing. - targetContents: string; - // Contents of the compiled template file - templateContents: string; - // Write new contents to the target file - write: WriteFileFunc; -}; - -export type PromptFunc = (msg: string) => Promise; - -export type HandlerFunc = (file: FileDiff, prompt: PromptFunc) => Promise; - -export type FileHandler = { - patterns: Array; - handler: HandlerFunc; -}; From 9f9cad3aff39cfa16d7eeb4819a14d4f2a6588cf Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sat, 21 Sep 2024 12:59:23 +0200 Subject: [PATCH 118/164] cli: remove old logging utils Signed-off-by: Patrik Oldsberg --- packages/cli/src/lib/logging.ts | 58 --------------------------------- packages/cli/src/lib/run.ts | 3 +- 2 files changed, 2 insertions(+), 59 deletions(-) delete mode 100644 packages/cli/src/lib/logging.ts diff --git a/packages/cli/src/lib/logging.ts b/packages/cli/src/lib/logging.ts deleted file mode 100644 index 59473d7f64..0000000000 --- a/packages/cli/src/lib/logging.ts +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright 2020 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. - */ - -export type LogFunc = (data: Buffer) => void; -export type LogPipe = (dst: NodeJS.WriteStream) => LogFunc; - -export type LogOptions = { - // If set, prefix each log message with this string - prefix?: string; - - // If true, clear terminal commands will be forwarded, otherwise they are removed - forwardClearTerm?: boolean; -}; - -// Creates a log pipe that binds to a destination stream and forwards logs with optional transforms. -// Use returned logPipe e.g. as follows: child.stdout.on('data', logPipe(process.stdout)) -export function createLogPipe(options: LogOptions = {}): LogPipe { - const { prefix = '', forwardClearTerm = false } = options; - - return (dst: NodeJS.WriteStream) => (data: Buffer | string) => { - let str = typeof data === 'string' ? data : data.toString('utf8'); - - if (!forwardClearTerm) { - str = trimClearTerm(str); - } - if (prefix) { - str = `${prefix}${str}`; - } - - dst.write(Buffer.from(str, 'utf8')); - }; -} - -// Wrapper around createLogPipe to avoid awkward immediate call of returned function -export function createLogFunc( - dst: NodeJS.WriteStream, - options: LogOptions = {}, -): LogFunc { - return createLogPipe(options)(dst); -} - -// Returns the string without terminal clear command if it was prefixed with one. -export function trimClearTerm(msg: string): string { - return msg.startsWith('\x1b\x63') ? msg.slice(2) : msg; -} diff --git a/packages/cli/src/lib/run.ts b/packages/cli/src/lib/run.ts index 1ef25cae62..e8602fcb18 100644 --- a/packages/cli/src/lib/run.ts +++ b/packages/cli/src/lib/run.ts @@ -22,11 +22,12 @@ import { } from 'child_process'; import { ExitCodeError } from './errors'; import { promisify } from 'util'; -import { LogFunc } from './logging'; import { assertError, ForwardedError } from '@backstage/errors'; export const execFile = promisify(execFileCb); +type LogFunc = (data: Buffer) => void; + type SpawnOptionsPartialEnv = Omit & { env?: Partial; // Pipe stdout to this log function From 088101722c64eed48352c31c633ab537a750e3ef Mon Sep 17 00:00:00 2001 From: Stephen Glass Date: Sun, 22 Sep 2024 15:14:38 -0400 Subject: [PATCH 119/164] add support for locales Signed-off-by: Stephen Glass --- .../columns/CreatedAtColumn.test.tsx | 48 ++++++++++++++----- .../ListTasksPage/columns/CreatedAtColumn.tsx | 19 ++++++-- 2 files changed, 50 insertions(+), 17 deletions(-) diff --git a/plugins/scaffolder/src/components/ListTasksPage/columns/CreatedAtColumn.test.tsx b/plugins/scaffolder/src/components/ListTasksPage/columns/CreatedAtColumn.test.tsx index 92f1c4560c..c172c2122f 100644 --- a/plugins/scaffolder/src/components/ListTasksPage/columns/CreatedAtColumn.test.tsx +++ b/plugins/scaffolder/src/components/ListTasksPage/columns/CreatedAtColumn.test.tsx @@ -13,26 +13,48 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - -import { renderInTestApp } from '@backstage/test-utils'; - import React from 'react'; import { CreatedAtColumn } from './CreatedAtColumn'; -import { DateTime } from 'luxon'; +import { renderInTestApp } from '@backstage/test-utils'; describe('', () => { - it('should render the column with the time', async () => { - const props = { - createdAt: DateTime.now().toISO(), - }; + const testDate = '2024-09-22T13:30:00Z'; - const formattedTime = DateTime.fromISO(props.createdAt).toLocaleString( - DateTime.DATETIME_SHORT_WITH_SECONDS, + const mockNavigatorLanguage = (language: string) => { + jest.spyOn(window.navigator, 'language', 'get').mockReturnValue(language); + }; + + afterEach(() => { + jest.restoreAllMocks(); + }); + + it('should render the column using mocked locale (de-DE)', async () => { + mockNavigatorLanguage('de-DE'); + const { getByText } = await renderInTestApp( + , ); + expect(getByText('22.9.2024, 13:30:00')).toBeDefined(); + }); - const { getByText } = await renderInTestApp(); + it('should render the column with the default locale (en-US)', async () => { + mockNavigatorLanguage(''); + const { getByText } = await renderInTestApp( + , + ); + expect(getByText('9/22/2024, 1:30:00 PM')).toBeDefined(); + }); - const text = getByText(formattedTime); - expect(text).toBeDefined(); + it('should render the column with a specified locale (fr-FR)', async () => { + const { getByText } = await renderInTestApp( + , + ); + expect(getByText('22/09/2024 13:30:00')).toBeDefined(); + }); + + it('should render the column with a specified locale (en-DE)', async () => { + const { getByText } = await renderInTestApp( + , + ); + expect(getByText('22/09/2024, 13:30:00')).toBeDefined(); }); }); diff --git a/plugins/scaffolder/src/components/ListTasksPage/columns/CreatedAtColumn.tsx b/plugins/scaffolder/src/components/ListTasksPage/columns/CreatedAtColumn.tsx index f40c4549d1..525e4cea04 100644 --- a/plugins/scaffolder/src/components/ListTasksPage/columns/CreatedAtColumn.tsx +++ b/plugins/scaffolder/src/components/ListTasksPage/columns/CreatedAtColumn.tsx @@ -17,11 +17,22 @@ import { DateTime } from 'luxon'; import React from 'react'; import Typography from '@material-ui/core/Typography'; -export const CreatedAtColumn = ({ createdAt }: { createdAt: string }) => { +interface CreatedAtColumnProps { + createdAt: string; + locale?: string; +} + +export const CreatedAtColumn: React.FC = ({ + createdAt, + locale, +}) => { const createdAtTime = DateTime.fromISO(createdAt); - const formatted = createdAtTime.toLocaleString( - DateTime.DATETIME_SHORT_WITH_SECONDS, - ); + + const userLocale = locale || window.navigator.language || 'en-US'; + + const formatted = createdAtTime.setLocale(userLocale).toLocaleString({ + ...DateTime.DATETIME_SHORT_WITH_SECONDS, + }); return {formatted}; }; From 601dd44f3020e8c78244d55fad28447655a44dc9 Mon Sep 17 00:00:00 2001 From: blam Date: Mon, 23 Sep 2024 09:06:17 +0200 Subject: [PATCH 120/164] chore: enter next release Signed-off-by: blam --- .changeset/pre.json | 197 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 197 insertions(+) create mode 100644 .changeset/pre.json diff --git a/.changeset/pre.json b/.changeset/pre.json new file mode 100644 index 0000000000..c71130f35a --- /dev/null +++ b/.changeset/pre.json @@ -0,0 +1,197 @@ +{ + "mode": "pre", + "tag": "next", + "initialVersions": { + "example-app": "0.2.101", + "@backstage/app-defaults": "1.5.11", + "example-app-next": "0.0.15", + "app-next-example-plugin": "0.0.15", + "example-backend": "0.0.30", + "@backstage/backend-app-api": "1.0.0", + "@backstage/backend-defaults": "0.5.0", + "@backstage/backend-dev-utils": "0.1.5", + "@backstage/backend-dynamic-feature-service": "0.4.0", + "example-backend-legacy": "0.2.102", + "@backstage/backend-openapi-utils": "0.1.18", + "@backstage/backend-plugin-api": "1.0.0", + "@backstage/backend-test-utils": "1.0.0", + "@backstage/catalog-client": "1.7.0", + "@backstage/catalog-model": "1.7.0", + "@backstage/cli": "0.27.1", + "@backstage/cli-common": "0.1.14", + "@backstage/cli-node": "0.2.8", + "@backstage/codemods": "0.1.50", + "@backstage/config": "1.2.0", + "@backstage/config-loader": "1.9.1", + "@backstage/core-app-api": "1.15.0", + "@backstage/core-compat-api": "0.3.0", + "@backstage/core-components": "0.15.0", + "@backstage/core-plugin-api": "1.9.4", + "@backstage/create-app": "0.5.19", + "@backstage/dev-utils": "1.1.0", + "e2e-test": "0.2.20", + "@backstage/e2e-test-utils": "0.1.1", + "@backstage/errors": "1.2.4", + "@backstage/eslint-plugin": "0.1.9", + "@backstage/frontend-app-api": "0.9.0", + "@backstage/frontend-defaults": "0.1.0", + "@internal/frontend": "0.0.1", + "@backstage/frontend-plugin-api": "0.8.0", + "@backstage/frontend-test-utils": "0.2.0", + "@backstage/integration": "1.15.0", + "@backstage/integration-aws-node": "0.1.12", + "@backstage/integration-react": "1.1.31", + "@internal/opaque": "0.0.1", + "@backstage/release-manifests": "0.0.11", + "@backstage/repo-tools": "0.9.7", + "@techdocs/cli": "1.8.19", + "techdocs-cli-embedded-app": "0.2.100", + "@backstage/test-utils": "1.6.0", + "@backstage/theme": "0.5.7", + "@backstage/types": "1.1.1", + "@backstage/version-bridge": "1.0.9", + "yarn-plugin-backstage": "0.0.2", + "@backstage/plugin-api-docs": "0.11.9", + "@backstage/plugin-api-docs-module-protoc-gen-doc": "0.1.7", + "@backstage/plugin-app": "0.1.0", + "@backstage/plugin-app-backend": "0.3.74", + "@backstage/plugin-app-node": "0.1.25", + "@backstage/plugin-app-visualizer": "0.1.10", + "@backstage/plugin-auth-backend": "0.23.0", + "@backstage/plugin-auth-backend-module-atlassian-provider": "0.3.0", + "@backstage/plugin-auth-backend-module-auth0-provider": "0.1.0", + "@backstage/plugin-auth-backend-module-aws-alb-provider": "0.2.0", + "@backstage/plugin-auth-backend-module-azure-easyauth-provider": "0.2.0", + "@backstage/plugin-auth-backend-module-bitbucket-provider": "0.2.0", + "@backstage/plugin-auth-backend-module-bitbucket-server-provider": "0.1.0", + "@backstage/plugin-auth-backend-module-cloudflare-access-provider": "0.3.0", + "@backstage/plugin-auth-backend-module-gcp-iap-provider": "0.3.0", + "@backstage/plugin-auth-backend-module-github-provider": "0.2.0", + "@backstage/plugin-auth-backend-module-gitlab-provider": "0.2.0", + "@backstage/plugin-auth-backend-module-google-provider": "0.2.0", + "@backstage/plugin-auth-backend-module-guest-provider": "0.2.0", + "@backstage/plugin-auth-backend-module-microsoft-provider": "0.2.0", + "@backstage/plugin-auth-backend-module-oauth2-provider": "0.3.0", + "@backstage/plugin-auth-backend-module-oauth2-proxy-provider": "0.2.0", + "@backstage/plugin-auth-backend-module-oidc-provider": "0.3.0", + "@backstage/plugin-auth-backend-module-okta-provider": "0.1.0", + "@backstage/plugin-auth-backend-module-onelogin-provider": "0.2.0", + "@backstage/plugin-auth-backend-module-pinniped-provider": "0.2.0", + "@backstage/plugin-auth-backend-module-vmware-cloud-provider": "0.3.0", + "@backstage/plugin-auth-node": "0.5.2", + "@backstage/plugin-auth-react": "0.1.6", + "@backstage/plugin-bitbucket-cloud-common": "0.2.23", + "@backstage/plugin-catalog": "1.23.0", + "@backstage/plugin-catalog-backend": "1.26.0", + "@backstage/plugin-catalog-backend-module-aws": "0.4.2", + "@backstage/plugin-catalog-backend-module-azure": "0.2.2", + "@backstage/plugin-catalog-backend-module-backstage-openapi": "0.4.0", + "@backstage/plugin-catalog-backend-module-bitbucket-cloud": "0.3.2", + "@backstage/plugin-catalog-backend-module-bitbucket-server": "0.2.2", + "@backstage/plugin-catalog-backend-module-gcp": "0.3.0", + "@backstage/plugin-catalog-backend-module-gerrit": "0.2.2", + "@backstage/plugin-catalog-backend-module-github": "0.7.3", + "@backstage/plugin-catalog-backend-module-github-org": "0.3.0", + "@backstage/plugin-catalog-backend-module-gitlab": "0.4.2", + "@backstage/plugin-catalog-backend-module-gitlab-org": "0.2.0", + "@backstage/plugin-catalog-backend-module-incremental-ingestion": "0.5.3", + "@backstage/plugin-catalog-backend-module-ldap": "0.9.0", + "@backstage/plugin-catalog-backend-module-logs": "0.1.0", + "@backstage/plugin-catalog-backend-module-msgraph": "0.6.2", + "@backstage/plugin-catalog-backend-module-openapi": "0.2.0", + "@backstage/plugin-catalog-backend-module-puppetdb": "0.2.2", + "@backstage/plugin-catalog-backend-module-scaffolder-entity-model": "0.2.0", + "@backstage/plugin-catalog-backend-module-unprocessed": "0.5.0", + "@backstage/plugin-catalog-common": "1.1.0", + "@backstage/plugin-catalog-graph": "0.4.9", + "@backstage/plugin-catalog-import": "0.12.3", + "@backstage/plugin-catalog-node": "1.13.0", + "@backstage/plugin-catalog-react": "1.13.0", + "@backstage/plugin-catalog-unprocessed-entities": "0.2.8", + "@backstage/plugin-catalog-unprocessed-entities-common": "0.0.4", + "@backstage/plugin-config-schema": "0.1.59", + "@backstage/plugin-devtools": "0.1.18", + "@backstage/plugin-devtools-backend": "0.4.0", + "@backstage/plugin-devtools-common": "0.1.12", + "@backstage/plugin-events-backend": "0.3.12", + "@backstage/plugin-events-backend-module-aws-sqs": "0.4.2", + "@backstage/plugin-events-backend-module-azure": "0.2.11", + "@backstage/plugin-events-backend-module-bitbucket-cloud": "0.2.11", + "@backstage/plugin-events-backend-module-gerrit": "0.2.11", + "@backstage/plugin-events-backend-module-github": "0.2.11", + "@backstage/plugin-events-backend-module-gitlab": "0.2.11", + "@backstage/plugin-events-backend-test-utils": "0.1.35", + "@backstage/plugin-events-node": "0.4.0", + "@internal/plugin-todo-list": "1.0.31", + "@internal/plugin-todo-list-backend": "1.0.31", + "@internal/plugin-todo-list-common": "1.0.21", + "@backstage/plugin-home": "0.7.10", + "@backstage/plugin-home-react": "0.1.17", + "@backstage/plugin-kubernetes": "0.11.14", + "@backstage/plugin-kubernetes-backend": "0.18.6", + "@backstage/plugin-kubernetes-cluster": "0.0.15", + "@backstage/plugin-kubernetes-common": "0.8.3", + "@backstage/plugin-kubernetes-node": "0.1.19", + "@backstage/plugin-kubernetes-react": "0.4.3", + "@backstage/plugin-notifications": "0.3.1", + "@backstage/plugin-notifications-backend": "0.4.0", + "@backstage/plugin-notifications-backend-module-email": "0.3.0", + "@backstage/plugin-notifications-common": "0.0.5", + "@backstage/plugin-notifications-node": "0.2.6", + "@backstage/plugin-org": "0.6.29", + "@backstage/plugin-org-react": "0.1.28", + "@backstage/plugin-permission-backend": "0.5.49", + "@backstage/plugin-permission-backend-module-allow-all-policy": "0.2.0", + "@backstage/plugin-permission-common": "0.8.1", + "@backstage/plugin-permission-node": "0.8.3", + "@backstage/plugin-permission-react": "0.4.26", + "@backstage/plugin-proxy-backend": "0.5.6", + "@backstage/plugin-scaffolder": "1.25.0", + "@backstage/plugin-scaffolder-backend": "1.25.0", + "@backstage/plugin-scaffolder-backend-module-azure": "0.2.0", + "@backstage/plugin-scaffolder-backend-module-bitbucket": "0.3.0", + "@backstage/plugin-scaffolder-backend-module-bitbucket-cloud": "0.2.0", + "@backstage/plugin-scaffolder-backend-module-bitbucket-server": "0.2.0", + "@backstage/plugin-scaffolder-backend-module-confluence-to-markdown": "0.3.0", + "@backstage/plugin-scaffolder-backend-module-cookiecutter": "0.3.0", + "@backstage/plugin-scaffolder-backend-module-gcp": "0.2.0", + "@backstage/plugin-scaffolder-backend-module-gerrit": "0.2.0", + "@backstage/plugin-scaffolder-backend-module-gitea": "0.2.0", + "@backstage/plugin-scaffolder-backend-module-github": "0.5.0", + "@backstage/plugin-scaffolder-backend-module-gitlab": "0.5.0", + "@backstage/plugin-scaffolder-backend-module-notifications": "0.1.0", + "@backstage/plugin-scaffolder-backend-module-rails": "0.5.0", + "@backstage/plugin-scaffolder-backend-module-sentry": "0.2.0", + "@backstage/plugin-scaffolder-backend-module-yeoman": "0.4.0", + "@backstage/plugin-scaffolder-common": "1.5.6", + "@backstage/plugin-scaffolder-node": "0.4.11", + "@backstage/plugin-scaffolder-node-test-utils": "0.1.12", + "@backstage/plugin-scaffolder-react": "1.12.0", + "@backstage/plugin-search": "1.4.16", + "@backstage/plugin-search-backend": "1.5.17", + "@backstage/plugin-search-backend-module-catalog": "0.2.2", + "@backstage/plugin-search-backend-module-elasticsearch": "1.5.6", + "@backstage/plugin-search-backend-module-explore": "0.2.2", + "@backstage/plugin-search-backend-module-pg": "0.5.35", + "@backstage/plugin-search-backend-module-stack-overflow-collator": "0.3.0", + "@backstage/plugin-search-backend-module-techdocs": "0.2.2", + "@backstage/plugin-search-backend-node": "1.3.2", + "@backstage/plugin-search-common": "1.2.14", + "@backstage/plugin-search-react": "1.8.0", + "@backstage/plugin-signals": "0.0.10", + "@backstage/plugin-signals-backend": "0.2.0", + "@backstage/plugin-signals-node": "0.1.11", + "@backstage/plugin-signals-react": "0.0.5", + "@backstage/plugin-techdocs": "1.10.9", + "@backstage/plugin-techdocs-addons-test-utils": "1.0.38", + "@backstage/plugin-techdocs-backend": "1.10.13", + "@backstage/plugin-techdocs-common": "0.1.0", + "@backstage/plugin-techdocs-module-addons-contrib": "1.1.14", + "@backstage/plugin-techdocs-node": "1.12.11", + "@backstage/plugin-techdocs-react": "1.2.8", + "@backstage/plugin-user-settings": "0.8.12", + "@backstage/plugin-user-settings-backend": "0.2.24", + "@backstage/plugin-user-settings-common": "0.0.1" + }, + "changesets": [] +} From 59d6bf3ab48e037a123a33e022ed3ef9d2da6741 Mon Sep 17 00:00:00 2001 From: Harrison Hogg Date: Mon, 23 Sep 2024 09:46:16 +0100 Subject: [PATCH 121/164] Ensure backstage field is at the top Signed-off-by: Harrison Hogg --- packages/cli/src/lib/packager/productionPack.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/cli/src/lib/packager/productionPack.ts b/packages/cli/src/lib/packager/productionPack.ts index 656b98f9fb..8e89be603c 100644 --- a/packages/cli/src/lib/packager/productionPack.ts +++ b/packages/cli/src/lib/packager/productionPack.ts @@ -159,7 +159,8 @@ async function prepareExportsEntryPoints( continue; } - const exp = {} as Record; + let exp = {} as Record; + for (const [key, ext] of Object.entries(EXPORT_MAP)) { const name = `${entryPoint.name}${ext}`; if (distFiles.includes(name)) { @@ -169,6 +170,7 @@ async function prepareExportsEntryPoints( exp.default = exp.require ?? exp.import; + // Find the default export type for the entry point if (exp.types) { const defaultFeatureType = pkg.backstage?.role && @@ -180,7 +182,10 @@ async function prepareExportsEntryPoints( ); if (defaultFeatureType) { - exp.backstage = defaultFeatureType; + // This ensures that the `backstage` field is at the top of the + // `exports` field in the package.json because order is important. + // https://nodejs.org/docs/latest-v20.x/api/packages.html#conditional-exports + exp = { backstage: defaultFeatureType, ...exp }; } } From e69428c5f848095528767d92d97ed74c6812b439 Mon Sep 17 00:00:00 2001 From: Harrison Hogg Date: Mon, 23 Sep 2024 09:46:39 +0100 Subject: [PATCH 122/164] Use the paths to find workspace files Signed-off-by: Harrison Hogg --- packages/cli/src/lib/typeDistProject.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/cli/src/lib/typeDistProject.ts b/packages/cli/src/lib/typeDistProject.ts index cd5eb9cd74..8721f3fa24 100644 --- a/packages/cli/src/lib/typeDistProject.ts +++ b/packages/cli/src/lib/typeDistProject.ts @@ -13,16 +13,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { findPaths } from '@backstage/cli-common'; import { PackageRole } from '@backstage/cli-node'; import { resolve as resolvePath } from 'path'; import { Project, SourceFile, SyntaxKind, ts, Type } from 'ts-morph'; +import { paths } from './paths'; export const createTypeDistProject = async () => { - const workspaceRoot = findPaths(process.cwd()).targetRoot; - return new Project({ - tsConfigFilePath: resolvePath(workspaceRoot, 'tsconfig.json'), + tsConfigFilePath: paths.resolveTargetRoot('tsconfig.json'), skipAddingFilesFromTsConfig: true, }); }; From 4130291974c84ac882c0032be6c92bb7b0c06f21 Mon Sep 17 00:00:00 2001 From: Camila Belo Date: Thu, 19 Sep 2024 09:21:50 +0200 Subject: [PATCH 123/164] feat: create custom fields route Signed-off-by: Camila Belo --- .changeset/five-gorillas-pay.md | 5 ++ plugins/scaffolder/api-report.md | 1 + .../src/components/Router/Router.tsx | 16 +++++- .../TemplateEditorPage/CustomFieldsPage.tsx | 57 +++++++++++++++++++ .../TemplateEditorPage/TemplateEditorPage.tsx | 12 +--- .../src/next/TemplateEditorPage/index.ts | 1 + plugins/scaffolder/src/plugin.tsx | 2 + plugins/scaffolder/src/routes.ts | 6 ++ 8 files changed, 89 insertions(+), 11 deletions(-) create mode 100644 .changeset/five-gorillas-pay.md create mode 100644 plugins/scaffolder/src/next/TemplateEditorPage/CustomFieldsPage.tsx diff --git a/.changeset/five-gorillas-pay.md b/.changeset/five-gorillas-pay.md new file mode 100644 index 0000000000..c5cd18a186 --- /dev/null +++ b/.changeset/five-gorillas-pay.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder': patch +--- + +Create a separate route for the custom fields explorer so we refresh it without being redirected to scaffolder edit page. diff --git a/plugins/scaffolder/api-report.md b/plugins/scaffolder/api-report.md index b0af10a55b..81cf0ecced 100644 --- a/plugins/scaffolder/api-report.md +++ b/plugins/scaffolder/api-report.md @@ -613,6 +613,7 @@ export const scaffolderPlugin: BackstagePlugin< listTasks: SubRouteRef; edit: SubRouteRef; editor: SubRouteRef; + customFields: SubRouteRef; }, { registerComponent: ExternalRouteRef; diff --git a/plugins/scaffolder/src/components/Router/Router.tsx b/plugins/scaffolder/src/components/Router/Router.tsx index f06b0bcd39..27c2eede70 100644 --- a/plugins/scaffolder/src/components/Router/Router.tsx +++ b/plugins/scaffolder/src/components/Router/Router.tsx @@ -35,6 +35,7 @@ import { DEFAULT_SCAFFOLDER_FIELD_EXTENSIONS } from '../../extensions/default'; import { actionsRouteRef, editorRouteRef, + customFieldsRouteRef, editRouteRef, scaffolderListTaskRouteRef, scaffolderTaskRouteRef, @@ -51,8 +52,11 @@ import { } from '@backstage/plugin-scaffolder/alpha'; import { TemplateListPage, TemplateWizardPage } from '../../next'; import { OngoingTask } from '../OngoingTask'; -import { TemplateEditorPage } from '../../next/TemplateEditorPage'; -import { TemplatePage } from '../../next/TemplateEditorPage/TemplatePage'; +import { + TemplatePage, + TemplateEditorPage, + CustomFieldsPage, +} from '../../next/TemplateEditorPage'; /** * The Props for the Scaffolder Router @@ -173,6 +177,14 @@ export const Router = (props: PropsWithChildren) => { } /> + + + + } + /> } /> []; +} + +export function CustomFieldsPage(props: CustomFieldsPageProps) { + const navigate = useNavigate(); + const editLink = useRouteRef(editRouteRef); + const { t } = useTranslationRef(scaffolderTranslationRef); + + const handleClose = useCallback(() => { + navigate(editLink()); + }, [navigate, editLink]); + + return ( + +
+ + + + + ); +} diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorPage.tsx b/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorPage.tsx index 19eb1d6453..b4a62b5797 100644 --- a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorPage.tsx +++ b/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorPage.tsx @@ -19,7 +19,6 @@ import { TemplateDirectoryAccess, WebFileSystemAccess, } from '../../lib/filesystem'; -import { CustomFieldExplorer } from './CustomFieldExplorer'; import { TemplateFormPreviewer } from './TemplateFormPreviewer'; import { FieldExtensionOptions, @@ -33,6 +32,7 @@ import { useRouteRef } from '@backstage/core-plugin-api'; import { actionsRouteRef, editorRouteRef, + customFieldsRouteRef, rootRouteRef, scaffolderListTaskRouteRef, } from '../../routes'; @@ -70,6 +70,7 @@ export function TemplateEditorPage(props: TemplateEditorPageProps) { const tasksLink = useRouteRef(scaffolderListTaskRouteRef); const createLink = useRouteRef(rootRouteRef); const editorLink = useRouteRef(editorRouteRef); + const customFieldsLink = useRouteRef(customFieldsRouteRef); const { t } = useTranslationRef(scaffolderTranslationRef); const scaffolderPageContextMenuProps = { @@ -90,13 +91,6 @@ export function TemplateEditorPage(props: TemplateEditorPageProps) { formProps={props.formProps} /> ); - } else if (selection?.type === 'field-explorer') { - content = ( - setSelection(undefined)} - /> - ); } else { content = ( @@ -119,7 +113,7 @@ export function TemplateEditorPage(props: TemplateEditorPageProps) { } else if (option === 'form') { setSelection({ type: 'form' }); } else if (option === 'field-explorer') { - setSelection({ type: 'field-explorer' }); + navigate(customFieldsLink()); } }} /> diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/index.ts b/plugins/scaffolder/src/next/TemplateEditorPage/index.ts index b7beab4896..45e85f8a83 100644 --- a/plugins/scaffolder/src/next/TemplateEditorPage/index.ts +++ b/plugins/scaffolder/src/next/TemplateEditorPage/index.ts @@ -16,6 +16,7 @@ export { TemplatePage } from './TemplatePage'; export { TemplateEditorPage } from './TemplateEditorPage'; +export { CustomFieldsPage } from './CustomFieldsPage'; export type { ScaffolderCustomFieldExplorerClassKey } from './CustomFieldExplorer'; export type { ScaffolderTemplateEditorClassKey } from './TemplateEditor'; export type { ScaffolderTemplateFormPreviewerClassKey } from './TemplateFormPreviewer'; diff --git a/plugins/scaffolder/src/plugin.tsx b/plugins/scaffolder/src/plugin.tsx index 6892cf7e43..bf4d3a41ac 100644 --- a/plugins/scaffolder/src/plugin.tsx +++ b/plugins/scaffolder/src/plugin.tsx @@ -69,6 +69,7 @@ import { actionsRouteRef, editRouteRef, editorRouteRef, + customFieldsRouteRef, } from './routes'; import { MyGroupsPicker, @@ -109,6 +110,7 @@ export const scaffolderPlugin = createPlugin({ listTasks: scaffolderListTaskRouteRef, edit: editRouteRef, editor: editorRouteRef, + customFields: customFieldsRouteRef, }, externalRoutes: { registerComponent: registerComponentRouteRef, diff --git a/plugins/scaffolder/src/routes.ts b/plugins/scaffolder/src/routes.ts index f47d2bdab8..3bd4435078 100644 --- a/plugins/scaffolder/src/routes.ts +++ b/plugins/scaffolder/src/routes.ts @@ -84,3 +84,9 @@ export const editorRouteRef = createSubRouteRef({ parent: rootRouteRef, path: '/template', }); + +export const customFieldsRouteRef = createSubRouteRef({ + id: 'scaffolder/edit', + parent: rootRouteRef, + path: '/custom-fields', +}); From 0b2794a3875afb161c0f3e84b1065a68a9ee6779 Mon Sep 17 00:00:00 2001 From: Harrison Hogg Date: Mon, 23 Sep 2024 12:45:07 +0100 Subject: [PATCH 124/164] Removed @backstage from matching regex Signed-off-by: Harrison Hogg --- packages/cli/src/lib/typeDistProject.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/cli/src/lib/typeDistProject.ts b/packages/cli/src/lib/typeDistProject.ts index 8721f3fa24..59dc503f22 100644 --- a/packages/cli/src/lib/typeDistProject.ts +++ b/packages/cli/src/lib/typeDistProject.ts @@ -125,7 +125,7 @@ function getBackstagePackageFeature$$TypeFromType( const $$type = property .getValueDeclaration() ?.getText() - .match(/(?@backstage\/\w+)/)?.groups?.type; + .match(/(\$\$type: '(?.+)')/)?.groups?.type; if ($$type && isTargetFeatureType($$type)) { return $$type; From 30c2be9bcd2457667e0259629e054e819461fb68 Mon Sep 17 00:00:00 2001 From: secustor Date: Wed, 17 Jul 2024 12:23:32 +0200 Subject: [PATCH 125/164] fix: Update @microsoft/api-extractor and use their api report resolution Signed-off-by: secustor --- .changeset/fluffy-pears-cry.md | 5 +++++ .prettierignore | 5 +++++ REVIEWING.md | 4 ++-- packages/repo-tools/package.json | 4 ++-- .../src/commands/api-reports/api-extractor.ts | 15 ++++++--------- 5 files changed, 20 insertions(+), 13 deletions(-) create mode 100644 .changeset/fluffy-pears-cry.md diff --git a/.changeset/fluffy-pears-cry.md b/.changeset/fluffy-pears-cry.md new file mode 100644 index 0000000000..ad7eed680c --- /dev/null +++ b/.changeset/fluffy-pears-cry.md @@ -0,0 +1,5 @@ +--- +'@backstage/repo-tools': patch +--- + +Update @microsoft/api-extractor and use their api report resolution diff --git a/.prettierignore b/.prettierignore index 3a16bd1388..2212e834c0 100644 --- a/.prettierignore +++ b/.prettierignore @@ -4,8 +4,13 @@ microsite coverage *.hbs templates +# old reports api-report.md api-report-*.md +# new reports +api-report.api.md +api-report-*.api.md + knip-report.md cli-report.md plugins/scaffolder-backend/sample-templates diff --git a/REVIEWING.md b/REVIEWING.md index c443c15d77..880577da40 100644 --- a/REVIEWING.md +++ b/REVIEWING.md @@ -68,7 +68,7 @@ In general our changeset feedback bot will take care of informing whether a chan Changes that do NOT need a new changeset: -- Changes to any test, storybook, or other local development files, for example, `MyComponent.test.tsx`, `MyComponent.stories.tsx`, `**mocks**/MyMock.ts`, `.eslintrc.js`, `setupTests.ts`, or `api-report.md`. Explained differently, it is only files that affect the published package that need changesets, such as source files and additional resources like `package.json`, `README.md`, `config.d.ts`, etc. +- Changes to any test, storybook, or other local development files, for example, `MyComponent.test.tsx`, `MyComponent.stories.tsx`, `**mocks**/MyMock.ts`, `.eslintrc.js`, `setupTests.ts`, or `api-report.api.md`. Explained differently, it is only files that affect the published package that need changesets, such as source files and additional resources like `package.json`, `README.md`, `config.d.ts`, etc. - When tweaking a change that has not yet been released, you can rely on and potentially modify the existing changeset instead. - Changes that do not belong to a published packages, either because it's not a package at all, such as `docs/`, or because the package is private, such as `packages/app`. - Changes that do not end up having an effect on the published package, such as whitespace fixes or code formatting changes. Although it's also fine to have a short changeset for these kind of changes too. @@ -168,7 +168,7 @@ In this section we will be talking about changed "types", but by that we mean an #### API Reports -We generate API Reports using the [API Extractor](https://api-extractor.com/) tool. These reports are generated for most packages in the Backstage repository, and are stored in the `api-report.md` file of each package. For CLI package we use custom tooling, and instead store the result in `cli-report.md`. Whenever the public API of a package changes, the API Report needs to be updated to reflect the new state of the API. Our CI checks will fail if the API reports are not up to date in a pull request. +We generate API Reports using the [API Extractor](https://api-extractor.com/) tool. These reports are generated for most packages in the Backstage repository, and are stored in the `api-report.api.md` file of each package. For CLI package we use custom tooling, and instead store the result in `cli-report.md`. Whenever the public API of a package changes, the API Report needs to be updated to reflect the new state of the API. Our CI checks will fail if the API reports are not up to date in a pull request. Each API report contains a list of all the exported types of each package. As long as the API report does not have any warnings it will contain the full publicly facing API of the package, meaning you do not need to consider any other changes to the package from the point of view of TypeScript API stability. diff --git a/packages/repo-tools/package.json b/packages/repo-tools/package.json index 8fcd5079a3..76fb74cc42 100644 --- a/packages/repo-tools/package.json +++ b/packages/repo-tools/package.json @@ -50,8 +50,8 @@ "@backstage/config-loader": "workspace:^", "@backstage/errors": "workspace:^", "@manypkg/get-packages": "^1.1.3", - "@microsoft/api-documenter": "^7.22.33", - "@microsoft/api-extractor": "^7.36.4", + "@microsoft/api-documenter": "^7.25.7", + "@microsoft/api-extractor": "^7.47.2", "@openapitools/openapi-generator-cli": "^2.7.0", "@stoplight/spectral-core": "^1.18.0", "@stoplight/spectral-formatters": "^1.1.0", diff --git a/packages/repo-tools/src/commands/api-reports/api-extractor.ts b/packages/repo-tools/src/commands/api-reports/api-extractor.ts index 371f122713..fa8dea5f28 100644 --- a/packages/repo-tools/src/commands/api-reports/api-extractor.ts +++ b/packages/repo-tools/src/commands/api-reports/api-extractor.ts @@ -393,19 +393,16 @@ export async function runApiExtraction({ ); const remainingReportFiles = new Set( - fs - .readdirSync(projectFolder) - .filter( - filename => - filename.match(/^(.+)-api-report\.md$/) || - filename.match(/^api-report(-.+)?\.md$/), - ), + fs.readdirSync(projectFolder).filter(filename => + // https://regex101.com/r/QDZIV0/1 + filename.match(/^.*?api-report(-[^.-]+)?(\.md(\.api\.md)?)$/), + ), ); for (const packageEntryPoint of packageEntryPoints) { const suffix = packageEntryPoint.name === 'index' ? '' : `-${packageEntryPoint.name}`; - const reportFileName = `api-report${suffix}.md`; + const reportFileName = `api-report${suffix}`; const reportPath = resolvePath(projectFolder, reportFileName); remainingReportFiles.delete(reportFileName); @@ -522,7 +519,7 @@ export async function runApiExtraction({ ) { shouldLogInstructions = true; const match = message.text.match( - /Please copy the file "(.*)" to "api-report\.md"/, + /Please copy the file "(.*)" to "api-report\.api\.md"/, ); if (match) { conflictingFile = match[1]; From 65da28ad53f73648a4240782add4441804c4f709 Mon Sep 17 00:00:00 2001 From: secustor Date: Sun, 21 Jul 2024 09:17:36 +0200 Subject: [PATCH 126/164] add newly generated api reports Signed-off-by: secustor --- .../{api-report.md => api-report.api.md} | 0 .../{api-report.md => api-report.api.md} | 5 + ...eport-alpha.md => api-report-alpha.api.md} | 4 + .../{api-report.md => api-report.api.md} | 0 ...-report-auth.md => api-report-auth.api.md} | 0 ...eport-cache.md => api-report-cache.api.md} | 0 ...database.md => api-report-database.api.md} | 0 ...scovery.md => api-report-discovery.api.md} | 5 + ...httpAuth.md => api-report-httpAuth.api.md} | 0 ...Router.md => api-report-httpRouter.api.md} | 0 ...fecycle.md => api-report-lifecycle.api.md} | 0 ...ort-logger.md => api-report-logger.api.md} | 0 ...sions.md => api-report-permissions.api.md} | 0 ...Config.md => api-report-rootConfig.api.md} | 6 + ...Health.md => api-report-rootHealth.api.md} | 4 + ...er.md => api-report-rootHttpRouter.api.md} | 22 + ...cle.md => api-report-rootLifecycle.api.md} | 0 ...Logger.md => api-report-rootLogger.api.md} | 14 + ...heduler.md => api-report-scheduler.api.md} | 4 + ...lReader.md => api-report-urlReader.api.md} | 73 ++ ...userInfo.md => api-report-userInfo.api.md} | 0 .../{api-report.md => api-report.api.md} | 0 .../{api-report.md => api-report.api.md} | 0 .../{api-report.md => api-report.api.md} | 64 ++ .../{api-report.md => api-report.api.md} | 80 +++ ...eport-alpha.md => api-report-alpha.api.md} | 5 + ...stUtils.md => api-report-testUtils.api.md} | 5 + .../{api-report.md => api-report.api.md} | 61 ++ .../{api-report.md => api-report.api.md} | 91 +++ .../{api-report.md => api-report.api.md} | 9 + ...eport-alpha.md => api-report-alpha.api.md} | 0 .../{api-report.md => api-report.api.md} | 48 ++ .../{api-report.md => api-report.api.md} | 0 .../{api-report.md => api-report.api.md} | 24 + .../{api-report.md => api-report.api.md} | 28 + .../{api-report.md => api-report.api.md} | 0 .../{api-report.md => api-report.api.md} | 66 ++ .../{api-report.md => api-report.api.md} | 5 + ...eport-alpha.md => api-report-alpha.api.md} | 4 + ...stUtils.md => api-report-testUtils.api.md} | 0 .../{api-report.md => api-report.api.md} | 180 ++++- ...eport-alpha.md => api-report-alpha.api.md} | 31 + .../{api-report.md => api-report.api.md} | 4 + .../{api-report.md => api-report.api.md} | 5 + ...wright.md => api-report-playwright.api.md} | 0 .../{api-report.md => api-report.api.md} | 12 + .../{api-report.md => api-report.api.md} | 0 .../{api-report.md => api-report.api.md} | 119 ++++ .../{api-report.md => api-report.api.md} | 10 + .../{api-report.md => api-report.api.md} | 4 + .../{api-report.md => api-report.api.md} | 0 .../{api-report.md => api-report.api.md} | 123 ++++ .../{api-report.md => api-report.api.md} | 0 ...eport-alpha.md => api-report-alpha.api.md} | 7 + .../{api-report.md => api-report.api.md} | 34 +- .../{api-report.md => api-report.api.md} | 26 + .../{api-report.md => api-report.api.md} | 0 .../{api-report.md => api-report.api.md} | 0 .../{api-report.md => api-report.api.md} | 4 + .../{api-report.md => api-report.api.md} | 4 + ...eport-alpha.md => api-report-alpha.api.md} | 4 + .../{api-report.md => api-report.api.md} | 33 + ...eport-alpha.md => api-report-alpha.api.md} | 0 .../{api-report.md => api-report.api.md} | 9 + .../{api-report.md => api-report.api.md} | 0 .../{api-report.md => api-report.api.md} | 4 + .../{api-report.md => api-report.api.md} | 5 + .../{api-report.md => api-report.api.md} | 6 + .../{api-report.md => api-report.api.md} | 8 + .../{api-report.md => api-report.api.md} | 5 + .../{api-report.md => api-report.api.md} | 6 + .../{api-report.md => api-report.api.md} | 5 + .../{api-report.md => api-report.api.md} | 5 + .../{api-report.md => api-report.api.md} | 5 + .../{api-report.md => api-report.api.md} | 5 + .../{api-report.md => api-report.api.md} | 4 + .../{api-report.md => api-report.api.md} | 6 + .../{api-report.md => api-report.api.md} | 5 + .../{api-report.md => api-report.api.md} | 5 + .../{api-report.md => api-report.api.md} | 5 + .../{api-report.md => api-report.api.md} | 5 + .../{api-report.md => api-report.api.md} | 5 + .../{api-report.md => api-report.api.md} | 8 + .../{api-report.md => api-report.api.md} | 8 + .../{api-report.md => api-report.api.md} | 64 ++ .../{api-report.md => api-report.api.md} | 124 ++++ .../{api-report.md => api-report.api.md} | 0 .../bitbucket-cloud-common/api-report.api.md | 625 ++++++++++++++++++ ...eport-alpha.md => api-report-alpha.api.md} | 0 .../{api-report.md => api-report.api.md} | 15 +- ...eport-alpha.md => api-report-alpha.api.md} | 0 .../{api-report.md => api-report.api.md} | 10 +- .../{api-report.md => api-report.api.md} | 6 + ...eport-alpha.md => api-report-alpha.api.md} | 4 + .../{api-report.md => api-report.api.md} | 9 +- ...eport-alpha.md => api-report-alpha.api.md} | 4 + .../{api-report.md => api-report.api.md} | 17 +- ...eport-alpha.md => api-report-alpha.api.md} | 0 .../{api-report.md => api-report.api.md} | 8 + ...eport-alpha.md => api-report-alpha.api.md} | 4 + .../{api-report.md => api-report.api.md} | 8 + .../{api-report.md => api-report.api.md} | 0 ...eport-alpha.md => api-report-alpha.api.md} | 0 .../{api-report.md => api-report.api.md} | 45 +- .../{api-report.md => api-report.api.md} | 0 ...eport-alpha.md => api-report-alpha.api.md} | 0 .../{api-report.md => api-report.api.md} | 25 + ...eport-alpha.md => api-report-alpha.api.md} | 0 .../{api-report.md => api-report.api.md} | 8 + .../{api-report.md => api-report.api.md} | 0 .../{api-report.md => api-report.api.md} | 0 ...eport-alpha.md => api-report-alpha.api.md} | 0 .../{api-report.md => api-report.api.md} | 12 +- .../{api-report.md => api-report.api.md} | 9 + ...eport-alpha.md => api-report-alpha.api.md} | 0 .../{api-report.md => api-report.api.md} | 10 +- .../{api-report.md => api-report.api.md} | 6 + .../{api-report.md => api-report.api.md} | 5 + ...eport-alpha.md => api-report-alpha.api.md} | 0 .../{api-report.md => api-report.api.md} | 81 +++ ...eport-alpha.md => api-report-alpha.api.md} | 0 .../{api-report.md => api-report.api.md} | 12 + ...eport-alpha.md => api-report-alpha.api.md} | 4 + .../{api-report.md => api-report.api.md} | 4 + ...eport-alpha.md => api-report-alpha.api.md} | 4 + .../{api-report.md => api-report.api.md} | 42 ++ ...eport-alpha.md => api-report-alpha.api.md} | 18 + .../{api-report.md => api-report.api.md} | 18 + ...eport-alpha.md => api-report-alpha.api.md} | 7 + .../{api-report.md => api-report.api.md} | 111 ++++ .../{api-report.md => api-report.api.md} | 0 .../{api-report.md => api-report.api.md} | 4 + ...eport-alpha.md => api-report-alpha.api.md} | 6 + .../{api-report.md => api-report.api.md} | 111 +++- .../{api-report.md => api-report.api.md} | 11 + .../{api-report.md => api-report.api.md} | 15 + .../{api-report.md => api-report.api.md} | 16 + ...eport-alpha.md => api-report-alpha.api.md} | 4 + .../{api-report.md => api-report.api.md} | 10 + ...eport-alpha.md => api-report-alpha.api.md} | 0 .../{api-report.md => api-report.api.md} | 5 + ...eport-alpha.md => api-report-alpha.api.md} | 0 .../{api-report.md => api-report.api.md} | 5 + ...eport-alpha.md => api-report-alpha.api.md} | 0 .../{api-report.md => api-report.api.md} | 5 + ...eport-alpha.md => api-report-alpha.api.md} | 0 .../{api-report.md => api-report.api.md} | 5 + ...eport-alpha.md => api-report-alpha.api.md} | 0 .../{api-report.md => api-report.api.md} | 5 + ...eport-alpha.md => api-report-alpha.api.md} | 0 .../{api-report.md => api-report.api.md} | 5 + .../api-report.api.md | 86 +++ .../events-backend-test-utils/api-report.md | 63 -- ...eport-alpha.md => api-report-alpha.api.md} | 0 .../{api-report.md => api-report.api.md} | 10 + ...eport-alpha.md => api-report-alpha.api.md} | 9 + .../{api-report.md => api-report.api.md} | 22 + .../{api-report.md => api-report.api.md} | 0 .../{api-report.md => api-report.api.md} | 0 .../{api-report.md => api-report.api.md} | 0 .../{api-report.md => api-report.api.md} | 11 + ...eport-alpha.md => api-report-alpha.api.md} | 5 + .../home/{api-report.md => api-report.api.md} | 30 + ...eport-alpha.md => api-report-alpha.api.md} | 0 .../{api-report.md => api-report.api.md} | 114 ++++ .../{api-report.md => api-report.api.md} | 5 + plugins/kubernetes-common/api-report.api.md | 604 +++++++++++++++++ plugins/kubernetes-common/api-report.md | 468 ------------- .../{api-report.md => api-report.api.md} | 56 ++ .../{api-report.md => api-report.api.md} | 169 +++++ .../{api-report.md => api-report.api.md} | 7 + .../{api-report.md => api-report.api.md} | 11 + .../{api-report.md => api-report.api.md} | 0 .../{api-report.md => api-report.api.md} | 12 + .../{api-report.md => api-report.api.md} | 16 + .../{api-report.md => api-report.api.md} | 0 .../{api-report.md => api-report.api.md} | 4 + ...eport-alpha.md => api-report-alpha.api.md} | 4 + .../org/{api-report.md => api-report.api.md} | 13 + .../{api-report.md => api-report.api.md} | 0 ...eport-alpha.md => api-report-alpha.api.md} | 0 .../{api-report.md => api-report.api.md} | 11 + .../{api-report.md => api-report.api.md} | 4 + ...eport-alpha.md => api-report-alpha.api.md} | 0 .../{api-report.md => api-report.api.md} | 13 +- .../{api-report.md => api-report.api.md} | 6 + ...eport-alpha.md => api-report-alpha.api.md} | 0 .../{api-report.md => api-report.api.md} | 9 + .../{api-report.md => api-report.api.md} | 0 .../{api-report.md => api-report.api.md} | 0 .../{api-report.md => api-report.api.md} | 0 .../{api-report.md => api-report.api.md} | 7 + .../{api-report.md => api-report.api.md} | 4 + .../{api-report.md => api-report.api.md} | 0 .../{api-report.md => api-report.api.md} | 0 .../{api-report.md => api-report.api.md} | 0 .../{api-report.md => api-report.api.md} | 0 .../{api-report.md => api-report.api.md} | 0 .../{api-report.md => api-report.api.md} | 9 + .../{api-report.md => api-report.api.md} | 4 + .../{api-report.md => api-report.api.md} | 0 .../{api-report.md => api-report.api.md} | 0 .../{api-report.md => api-report.api.md} | 0 ...eport-alpha.md => api-report-alpha.api.md} | 4 + .../{api-report.md => api-report.api.md} | 111 ++++ ...eport-alpha.md => api-report-alpha.api.md} | 0 .../{api-report.md => api-report.api.md} | 11 + .../{api-report.md => api-report.api.md} | 0 ...eport-alpha.md => api-report-alpha.api.md} | 12 + .../{api-report.md => api-report.api.md} | 45 ++ ...eport-alpha.md => api-report-alpha.api.md} | 45 ++ .../{api-report.md => api-report.api.md} | 39 ++ ...eport-alpha.md => api-report-alpha.api.md} | 6 + .../{api-report.md => api-report.api.md} | 52 ++ ...eport-alpha.md => api-report-alpha.api.md} | 0 .../{api-report.md => api-report.api.md} | 10 + ...eport-alpha.md => api-report-alpha.api.md} | 5 + .../{api-report.md => api-report.api.md} | 95 +++ ...eport-alpha.md => api-report-alpha.api.md} | 0 .../{api-report.md => api-report.api.md} | 7 + ...eport-alpha.md => api-report-alpha.api.md} | 0 .../{api-report.md => api-report.api.md} | 47 ++ .../{api-report.md => api-report.api.md} | 10 + ...eport-alpha.md => api-report-alpha.api.md} | 5 + .../{api-report.md => api-report.api.md} | 9 + ...eport-alpha.md => api-report-alpha.api.md} | 6 + .../{api-report.md => api-report.api.md} | 20 + ...eport-alpha.md => api-report-alpha.api.md} | 0 .../{api-report.md => api-report.api.md} | 5 + .../{api-report.md => api-report.api.md} | 20 + ...eport-alpha.md => api-report-alpha.api.md} | 0 .../{api-report.md => api-report.api.md} | 20 + ...eport-alpha.md => api-report-alpha.api.md} | 7 + .../{api-report.md => api-report.api.md} | 15 + .../{api-report.md => api-report.api.md} | 13 + .../{api-report.md => api-report.api.md} | 12 + .../{api-report.md => api-report.api.md} | 9 + .../{api-report.md => api-report.api.md} | 9 + .../{api-report.md => api-report.api.md} | 0 ...eport-alpha.md => api-report-alpha.api.md} | 0 .../{api-report.md => api-report.api.md} | 13 + .../{api-report.md => api-report.api.md} | 0 .../{api-report.md => api-report.api.md} | 12 + .../{api-report.md => api-report.api.md} | 13 + ...eport-alpha.md => api-report-alpha.api.md} | 5 + .../{api-report.md => api-report.api.md} | 32 + ...eport-alpha.md => api-report-alpha.api.md} | 0 .../{api-report.md => api-report.api.md} | 7 + .../{api-report.md => api-report.api.md} | 4 + ...eport-alpha.md => api-report-alpha.api.md} | 6 + .../{api-report.md => api-report.api.md} | 32 + 251 files changed, 4846 insertions(+), 580 deletions(-) rename packages/app-defaults/{api-report.md => api-report.api.md} (100%) rename packages/app-next-example-plugin/{api-report.md => api-report.api.md} (86%) rename packages/backend-app-api/{api-report-alpha.md => api-report-alpha.api.md} (73%) rename packages/backend-app-api/{api-report.md => api-report.api.md} (100%) rename packages/backend-defaults/{api-report-auth.md => api-report-auth.api.md} (100%) rename packages/backend-defaults/{api-report-cache.md => api-report-cache.api.md} (100%) rename packages/backend-defaults/{api-report-database.md => api-report-database.api.md} (100%) rename packages/backend-defaults/{api-report-discovery.md => api-report-discovery.api.md} (74%) rename packages/backend-defaults/{api-report-httpAuth.md => api-report-httpAuth.api.md} (100%) rename packages/backend-defaults/{api-report-httpRouter.md => api-report-httpRouter.api.md} (100%) rename packages/backend-defaults/{api-report-lifecycle.md => api-report-lifecycle.api.md} (100%) rename packages/backend-defaults/{api-report-logger.md => api-report-logger.api.md} (100%) rename packages/backend-defaults/{api-report-permissions.md => api-report-permissions.api.md} (100%) rename packages/backend-defaults/{api-report-rootConfig.md => api-report-rootConfig.api.md} (72%) rename packages/backend-defaults/{api-report-rootHealth.md => api-report-rootHealth.api.md} (71%) rename packages/backend-defaults/{api-report-rootHttpRouter.md => api-report-rootHttpRouter.api.md} (62%) rename packages/backend-defaults/{api-report-rootLifecycle.md => api-report-rootLifecycle.api.md} (100%) rename packages/backend-defaults/{api-report-rootLogger.md => api-report-rootLogger.api.md} (55%) rename packages/backend-defaults/{api-report-scheduler.md => api-report-scheduler.api.md} (81%) rename packages/backend-defaults/{api-report-urlReader.md => api-report-urlReader.api.md} (59%) rename packages/backend-defaults/{api-report-userInfo.md => api-report-userInfo.api.md} (100%) rename packages/backend-defaults/{api-report.md => api-report.api.md} (100%) rename packages/backend-dev-utils/{api-report.md => api-report.api.md} (100%) rename packages/backend-dynamic-feature-service/{api-report.md => api-report.api.md} (57%) rename packages/backend-openapi-utils/{api-report.md => api-report.api.md} (72%) rename packages/backend-plugin-api/{api-report-alpha.md => api-report-alpha.api.md} (73%) rename packages/backend-plugin-api/{api-report-testUtils.md => api-report-testUtils.api.md} (70%) rename packages/backend-plugin-api/{api-report.md => api-report.api.md} (75%) rename packages/backend-test-utils/{api-report.md => api-report.api.md} (62%) rename packages/catalog-client/{api-report.md => api-report.api.md} (92%) rename packages/catalog-model/{api-report-alpha.md => api-report-alpha.api.md} (100%) rename packages/catalog-model/{api-report.md => api-report.api.md} (70%) rename packages/cli-common/{api-report.md => api-report.api.md} (100%) rename packages/cli-node/{api-report.md => api-report.api.md} (67%) rename packages/config-loader/{api-report.md => api-report.api.md} (72%) rename packages/config/{api-report.md => api-report.api.md} (100%) rename packages/core-app-api/{api-report.md => api-report.api.md} (70%) rename packages/core-compat-api/{api-report.md => api-report.api.md} (93%) rename packages/core-components/{api-report-alpha.md => api-report-alpha.api.md} (95%) rename packages/core-components/{api-report-testUtils.md => api-report-testUtils.api.md} (100%) rename packages/core-components/{api-report.md => api-report.api.md} (72%) rename packages/core-plugin-api/{api-report-alpha.md => api-report-alpha.api.md} (64%) rename packages/core-plugin-api/{api-report.md => api-report.api.md} (99%) rename packages/dev-utils/{api-report.md => api-report.api.md} (89%) rename packages/e2e-test-utils/{api-report-playwright.md => api-report-playwright.api.md} (100%) rename packages/errors/{api-report.md => api-report.api.md} (80%) rename packages/frontend-app-api/{api-report.md => api-report.api.md} (100%) rename packages/frontend-plugin-api/{api-report.md => api-report.api.md} (77%) rename packages/frontend-test-utils/{api-report.md => api-report.api.md} (84%) rename packages/integration-aws-node/{api-report.md => api-report.api.md} (86%) rename packages/integration-react/{api-report.md => api-report.api.md} (100%) rename packages/integration/{api-report.md => api-report.api.md} (66%) rename packages/release-manifests/{api-report.md => api-report.api.md} (100%) rename packages/test-utils/{api-report-alpha.md => api-report-alpha.api.md} (63%) rename packages/test-utils/{api-report.md => api-report.api.md} (82%) rename packages/theme/{api-report.md => api-report.api.md} (81%) rename packages/types/{api-report.md => api-report.api.md} (100%) rename packages/version-bridge/{api-report.md => api-report.api.md} (100%) rename packages/yarn-plugin/{api-report.md => api-report.api.md} (68%) rename plugins/api-docs-module-protoc-gen-doc/{api-report.md => api-report.api.md} (72%) rename plugins/api-docs/{api-report-alpha.md => api-report-alpha.api.md} (98%) rename plugins/api-docs/{api-report.md => api-report.api.md} (63%) rename plugins/app-backend/{api-report-alpha.md => api-report-alpha.api.md} (100%) rename plugins/app-backend/{api-report.md => api-report.api.md} (65%) rename plugins/app-node/{api-report.md => api-report.api.md} (100%) rename plugins/app-visualizer/{api-report.md => api-report.api.md} (93%) rename plugins/auth-backend-module-atlassian-provider/{api-report.md => api-report.api.md} (80%) rename plugins/auth-backend-module-aws-alb-provider/{api-report.md => api-report.api.md} (78%) rename plugins/auth-backend-module-azure-easyauth-provider/{api-report.md => api-report.api.md} (66%) rename plugins/auth-backend-module-bitbucket-provider/{api-report.md => api-report.api.md} (82%) rename plugins/auth-backend-module-cloudflare-access-provider/{api-report.md => api-report.api.md} (82%) rename plugins/auth-backend-module-gcp-iap-provider/{api-report.md => api-report.api.md} (84%) rename plugins/auth-backend-module-github-provider/{api-report.md => api-report.api.md} (80%) rename plugins/auth-backend-module-gitlab-provider/{api-report.md => api-report.api.md} (80%) rename plugins/auth-backend-module-google-provider/{api-report.md => api-report.api.md} (81%) rename plugins/auth-backend-module-guest-provider/{api-report.md => api-report.api.md} (71%) rename plugins/auth-backend-module-microsoft-provider/{api-report.md => api-report.api.md} (78%) rename plugins/auth-backend-module-oauth2-provider/{api-report.md => api-report.api.md} (80%) rename plugins/auth-backend-module-oauth2-proxy-provider/{api-report.md => api-report.api.md} (78%) rename plugins/auth-backend-module-oidc-provider/{api-report.md => api-report.api.md} (85%) rename plugins/auth-backend-module-okta-provider/{api-report.md => api-report.api.md} (80%) rename plugins/auth-backend-module-onelogin-provider/{api-report.md => api-report.api.md} (80%) rename plugins/auth-backend-module-pinniped-provider/{api-report.md => api-report.api.md} (67%) rename plugins/auth-backend-module-vmware-cloud-provider/{api-report.md => api-report.api.md} (72%) rename plugins/auth-backend/{api-report.md => api-report.api.md} (76%) rename plugins/auth-node/{api-report.md => api-report.api.md} (58%) rename plugins/auth-react/{api-report.md => api-report.api.md} (100%) create mode 100644 plugins/bitbucket-cloud-common/api-report.api.md rename plugins/catalog-backend-module-aws/{api-report-alpha.md => api-report-alpha.api.md} (100%) rename plugins/catalog-backend-module-aws/{api-report.md => api-report.api.md} (74%) rename plugins/catalog-backend-module-azure/{api-report-alpha.md => api-report-alpha.api.md} (100%) rename plugins/catalog-backend-module-azure/{api-report.md => api-report.api.md} (74%) rename plugins/catalog-backend-module-backstage-openapi/{api-report.md => api-report.api.md} (65%) rename plugins/catalog-backend-module-bitbucket-cloud/{api-report-alpha.md => api-report-alpha.api.md} (69%) rename plugins/catalog-backend-module-bitbucket-cloud/{api-report.md => api-report.api.md} (79%) rename plugins/catalog-backend-module-bitbucket-server/{api-report-alpha.md => api-report-alpha.api.md} (68%) rename plugins/catalog-backend-module-bitbucket-server/{api-report.md => api-report.api.md} (70%) rename plugins/catalog-backend-module-gcp/{api-report-alpha.md => api-report-alpha.api.md} (100%) rename plugins/catalog-backend-module-gcp/{api-report.md => api-report.api.md} (71%) rename plugins/catalog-backend-module-gerrit/{api-report-alpha.md => api-report-alpha.api.md} (69%) rename plugins/catalog-backend-module-gerrit/{api-report.md => api-report.api.md} (65%) rename plugins/catalog-backend-module-github-org/{api-report.md => api-report.api.md} (100%) rename plugins/catalog-backend-module-github/{api-report-alpha.md => api-report-alpha.api.md} (100%) rename plugins/catalog-backend-module-github/{api-report.md => api-report.api.md} (70%) rename plugins/catalog-backend-module-gitlab-org/{api-report.md => api-report.api.md} (100%) rename plugins/catalog-backend-module-gitlab/{api-report-alpha.md => api-report-alpha.api.md} (100%) rename plugins/catalog-backend-module-gitlab/{api-report.md => api-report.api.md} (65%) rename plugins/catalog-backend-module-incremental-ingestion/{api-report-alpha.md => api-report-alpha.api.md} (100%) rename plugins/catalog-backend-module-incremental-ingestion/{api-report.md => api-report.api.md} (82%) rename plugins/catalog-backend-module-ldap/{api-report.md => api-report.api.md} (100%) rename plugins/catalog-backend-module-logs/{api-report.md => api-report.api.md} (100%) rename plugins/catalog-backend-module-msgraph/{api-report-alpha.md => api-report-alpha.api.md} (100%) rename plugins/catalog-backend-module-msgraph/{api-report.md => api-report.api.md} (90%) rename plugins/catalog-backend-module-openapi/{api-report.md => api-report.api.md} (71%) rename plugins/catalog-backend-module-puppetdb/{api-report-alpha.md => api-report-alpha.api.md} (100%) rename plugins/catalog-backend-module-puppetdb/{api-report.md => api-report.api.md} (68%) rename plugins/catalog-backend-module-scaffolder-entity-model/{api-report.md => api-report.api.md} (70%) rename plugins/catalog-backend-module-unprocessed/{api-report.md => api-report.api.md} (79%) rename plugins/catalog-backend/{api-report-alpha.md => api-report-alpha.api.md} (100%) rename plugins/catalog-backend/{api-report.md => api-report.api.md} (67%) rename plugins/catalog-common/{api-report-alpha.md => api-report-alpha.api.md} (100%) rename plugins/catalog-common/{api-report.md => api-report.api.md} (60%) rename plugins/catalog-graph/{api-report-alpha.md => api-report-alpha.api.md} (97%) rename plugins/catalog-graph/{api-report.md => api-report.api.md} (95%) rename plugins/catalog-import/{api-report-alpha.md => api-report-alpha.api.md} (93%) rename plugins/catalog-import/{api-report.md => api-report.api.md} (62%) rename plugins/catalog-node/{api-report-alpha.md => api-report-alpha.api.md} (69%) rename plugins/catalog-node/{api-report.md => api-report.api.md} (78%) rename plugins/catalog-react/{api-report-alpha.md => api-report-alpha.api.md} (95%) rename plugins/catalog-react/{api-report.md => api-report.api.md} (65%) rename plugins/catalog-unprocessed-entities-common/{api-report.md => api-report.api.md} (100%) rename plugins/catalog-unprocessed-entities/{api-report.md => api-report.api.md} (91%) rename plugins/catalog/{api-report-alpha.md => api-report-alpha.api.md} (98%) rename plugins/catalog/{api-report.md => api-report.api.md} (58%) rename plugins/config-schema/{api-report.md => api-report.api.md} (60%) rename plugins/devtools-backend/{api-report.md => api-report.api.md} (59%) rename plugins/devtools-common/{api-report.md => api-report.api.md} (56%) rename plugins/devtools/{api-report-alpha.md => api-report-alpha.api.md} (94%) rename plugins/devtools/{api-report.md => api-report.api.md} (62%) rename plugins/events-backend-module-aws-sqs/{api-report-alpha.md => api-report-alpha.api.md} (100%) rename plugins/events-backend-module-aws-sqs/{api-report.md => api-report.api.md} (71%) rename plugins/events-backend-module-azure/{api-report-alpha.md => api-report-alpha.api.md} (100%) rename plugins/events-backend-module-azure/{api-report.md => api-report.api.md} (70%) rename plugins/events-backend-module-bitbucket-cloud/{api-report-alpha.md => api-report-alpha.api.md} (100%) rename plugins/events-backend-module-bitbucket-cloud/{api-report.md => api-report.api.md} (70%) rename plugins/events-backend-module-gerrit/{api-report-alpha.md => api-report-alpha.api.md} (100%) rename plugins/events-backend-module-gerrit/{api-report.md => api-report.api.md} (71%) rename plugins/events-backend-module-github/{api-report-alpha.md => api-report-alpha.api.md} (100%) rename plugins/events-backend-module-github/{api-report.md => api-report.api.md} (76%) rename plugins/events-backend-module-gitlab/{api-report-alpha.md => api-report-alpha.api.md} (100%) rename plugins/events-backend-module-gitlab/{api-report.md => api-report.api.md} (76%) create mode 100644 plugins/events-backend-test-utils/api-report.api.md delete mode 100644 plugins/events-backend-test-utils/api-report.md rename plugins/events-backend/{api-report-alpha.md => api-report-alpha.api.md} (100%) rename plugins/events-backend/{api-report.md => api-report.api.md} (70%) rename plugins/events-node/{api-report-alpha.md => api-report-alpha.api.md} (64%) rename plugins/events-node/{api-report.md => api-report.api.md} (63%) rename plugins/example-todo-list-backend/{api-report.md => api-report.api.md} (100%) rename plugins/example-todo-list-common/{api-report.md => api-report.api.md} (100%) rename plugins/example-todo-list/{api-report.md => api-report.api.md} (100%) rename plugins/home-react/{api-report.md => api-report.api.md} (69%) rename plugins/home/{api-report-alpha.md => api-report-alpha.api.md} (90%) rename plugins/home/{api-report.md => api-report.api.md} (75%) rename plugins/kubernetes-backend/{api-report-alpha.md => api-report-alpha.api.md} (100%) rename plugins/kubernetes-backend/{api-report.md => api-report.api.md} (54%) rename plugins/kubernetes-cluster/{api-report.md => api-report.api.md} (73%) create mode 100644 plugins/kubernetes-common/api-report.api.md delete mode 100644 plugins/kubernetes-common/api-report.md rename plugins/kubernetes-node/{api-report.md => api-report.api.md} (60%) rename plugins/kubernetes-react/{api-report.md => api-report.api.md} (51%) rename plugins/kubernetes/{api-report.md => api-report.api.md} (80%) rename plugins/notifications-backend-module-email/{api-report.md => api-report.api.md} (57%) rename plugins/notifications-backend/{api-report.md => api-report.api.md} (100%) rename plugins/notifications-common/{api-report.md => api-report.api.md} (64%) rename plugins/notifications-node/{api-report.md => api-report.api.md} (64%) rename plugins/notifications/{api-report.md => api-report.api.md} (100%) rename plugins/org-react/{api-report.md => api-report.api.md} (77%) rename plugins/org/{api-report-alpha.md => api-report-alpha.api.md} (97%) rename plugins/org/{api-report.md => api-report.api.md} (73%) rename plugins/permission-backend-module-policy-allow-all/{api-report.md => api-report.api.md} (100%) rename plugins/permission-backend/{api-report-alpha.md => api-report-alpha.api.md} (100%) rename plugins/permission-backend/{api-report.md => api-report.api.md} (62%) rename plugins/permission-common/{api-report.md => api-report.api.md} (97%) rename plugins/permission-node/{api-report-alpha.md => api-report-alpha.api.md} (100%) rename plugins/permission-node/{api-report.md => api-report.api.md} (93%) rename plugins/permission-react/{api-report.md => api-report.api.md} (88%) rename plugins/proxy-backend/{api-report-alpha.md => api-report-alpha.api.md} (100%) rename plugins/proxy-backend/{api-report.md => api-report.api.md} (56%) rename plugins/scaffolder-backend-module-azure/{api-report.md => api-report.api.md} (100%) rename plugins/scaffolder-backend-module-bitbucket-cloud/{api-report.md => api-report.api.md} (100%) rename plugins/scaffolder-backend-module-bitbucket-server/{api-report.md => api-report.api.md} (100%) rename plugins/scaffolder-backend-module-bitbucket/{api-report.md => api-report.api.md} (80%) rename plugins/scaffolder-backend-module-confluence-to-markdown/{api-report.md => api-report.api.md} (82%) rename plugins/scaffolder-backend-module-cookiecutter/{api-report.md => api-report.api.md} (100%) rename plugins/scaffolder-backend-module-gcp/{api-report.md => api-report.api.md} (100%) rename plugins/scaffolder-backend-module-gerrit/{api-report.md => api-report.api.md} (100%) rename plugins/scaffolder-backend-module-gitea/{api-report.md => api-report.api.md} (100%) rename plugins/scaffolder-backend-module-github/{api-report.md => api-report.api.md} (100%) rename plugins/scaffolder-backend-module-gitlab/{api-report.md => api-report.api.md} (92%) rename plugins/scaffolder-backend-module-notifications/{api-report.md => api-report.api.md} (86%) rename plugins/scaffolder-backend-module-rails/{api-report.md => api-report.api.md} (100%) rename plugins/scaffolder-backend-module-sentry/{api-report.md => api-report.api.md} (100%) rename plugins/scaffolder-backend-module-yeoman/{api-report.md => api-report.api.md} (100%) rename plugins/scaffolder-backend/{api-report-alpha.md => api-report-alpha.api.md} (93%) rename plugins/scaffolder-backend/{api-report.md => api-report.api.md} (67%) rename plugins/scaffolder-common/{api-report-alpha.md => api-report-alpha.api.md} (100%) rename plugins/scaffolder-common/{api-report.md => api-report.api.md} (77%) rename plugins/scaffolder-node-test-utils/{api-report.md => api-report.api.md} (100%) rename plugins/scaffolder-node/{api-report-alpha.md => api-report-alpha.api.md} (77%) rename plugins/scaffolder-node/{api-report.md => api-report.api.md} (73%) rename plugins/scaffolder-react/{api-report-alpha.md => api-report-alpha.api.md} (62%) rename plugins/scaffolder-react/{api-report.md => api-report.api.md} (80%) rename plugins/scaffolder/{api-report-alpha.md => api-report-alpha.api.md} (97%) rename plugins/scaffolder/{api-report.md => api-report.api.md} (80%) rename plugins/search-backend-module-catalog/{api-report-alpha.md => api-report-alpha.api.md} (100%) rename plugins/search-backend-module-catalog/{api-report.md => api-report.api.md} (66%) rename plugins/search-backend-module-elasticsearch/{api-report-alpha.md => api-report-alpha.api.md} (77%) rename plugins/search-backend-module-elasticsearch/{api-report.md => api-report.api.md} (53%) rename plugins/search-backend-module-explore/{api-report-alpha.md => api-report-alpha.api.md} (100%) rename plugins/search-backend-module-explore/{api-report.md => api-report.api.md} (74%) rename plugins/search-backend-module-pg/{api-report-alpha.md => api-report-alpha.api.md} (100%) rename plugins/search-backend-module-pg/{api-report.md => api-report.api.md} (53%) rename plugins/search-backend-module-stack-overflow-collator/{api-report.md => api-report.api.md} (65%) rename plugins/search-backend-module-techdocs/{api-report-alpha.md => api-report-alpha.api.md} (77%) rename plugins/search-backend-module-techdocs/{api-report.md => api-report.api.md} (70%) rename plugins/search-backend-node/{api-report-alpha.md => api-report-alpha.api.md} (85%) rename plugins/search-backend-node/{api-report.md => api-report.api.md} (76%) rename plugins/search-backend/{api-report-alpha.md => api-report-alpha.api.md} (100%) rename plugins/search-backend/{api-report.md => api-report.api.md} (83%) rename plugins/search-common/{api-report.md => api-report.api.md} (64%) rename plugins/search-react/{api-report-alpha.md => api-report-alpha.api.md} (100%) rename plugins/search-react/{api-report.md => api-report.api.md} (87%) rename plugins/search/{api-report-alpha.md => api-report-alpha.api.md} (92%) rename plugins/search/{api-report.md => api-report.api.md} (71%) rename plugins/signals-backend/{api-report.md => api-report.api.md} (60%) rename plugins/signals-node/{api-report.md => api-report.api.md} (64%) rename plugins/signals-react/{api-report.md => api-report.api.md} (60%) rename plugins/signals/{api-report.md => api-report.api.md} (67%) rename plugins/techdocs-addons-test-utils/{api-report.md => api-report.api.md} (100%) rename plugins/techdocs-backend/{api-report-alpha.md => api-report-alpha.api.md} (100%) rename plugins/techdocs-backend/{api-report.md => api-report.api.md} (77%) rename plugins/techdocs-module-addons-contrib/{api-report.md => api-report.api.md} (100%) rename plugins/techdocs-node/{api-report.md => api-report.api.md} (90%) rename plugins/techdocs-react/{api-report.md => api-report.api.md} (85%) rename plugins/techdocs/{api-report-alpha.md => api-report-alpha.api.md} (97%) rename plugins/techdocs/{api-report.md => api-report.api.md} (82%) rename plugins/user-settings-backend/{api-report-alpha.md => api-report-alpha.api.md} (100%) rename plugins/user-settings-backend/{api-report.md => api-report.api.md} (62%) rename plugins/user-settings-common/{api-report.md => api-report.api.md} (71%) rename plugins/user-settings/{api-report-alpha.md => api-report-alpha.api.md} (91%) rename plugins/user-settings/{api-report.md => api-report.api.md} (59%) diff --git a/packages/app-defaults/api-report.md b/packages/app-defaults/api-report.api.md similarity index 100% rename from packages/app-defaults/api-report.md rename to packages/app-defaults/api-report.api.md diff --git a/packages/app-next-example-plugin/api-report.md b/packages/app-next-example-plugin/api-report.api.md similarity index 86% rename from packages/app-next-example-plugin/api-report.md rename to packages/app-next-example-plugin/api-report.api.md index 1fc58dfc17..ededab5e47 100644 --- a/packages/app-next-example-plugin/api-report.md +++ b/packages/app-next-example-plugin/api-report.api.md @@ -52,5 +52,10 @@ export default examplePlugin; // @public (undocumented) export const ExampleSidebarItem: () => React_2.JSX.Element; +// Warnings were encountered during analysis: +// +// src/ExampleSidebarItem.d.ts:3:22 - (ae-undocumented) Missing documentation for "ExampleSidebarItem". +// src/plugin.d.ts:5:22 - (ae-undocumented) Missing documentation for "examplePlugin". + // (No @packageDocumentation comment for this package) ``` diff --git a/packages/backend-app-api/api-report-alpha.md b/packages/backend-app-api/api-report-alpha.api.md similarity index 73% rename from packages/backend-app-api/api-report-alpha.md rename to packages/backend-app-api/api-report-alpha.api.md index 163cc325a1..12a4b66d68 100644 --- a/packages/backend-app-api/api-report-alpha.md +++ b/packages/backend-app-api/api-report-alpha.api.md @@ -13,5 +13,9 @@ export const featureDiscoveryServiceFactory: ServiceFactory< 'singleton' >; +// Warnings were encountered during analysis: +// +// src/alpha/featureDiscoveryServiceFactory.d.ts:3:22 - (ae-undocumented) Missing documentation for "featureDiscoveryServiceFactory". + // (No @packageDocumentation comment for this package) ``` diff --git a/packages/backend-app-api/api-report.md b/packages/backend-app-api/api-report.api.md similarity index 100% rename from packages/backend-app-api/api-report.md rename to packages/backend-app-api/api-report.api.md diff --git a/packages/backend-defaults/api-report-auth.md b/packages/backend-defaults/api-report-auth.api.md similarity index 100% rename from packages/backend-defaults/api-report-auth.md rename to packages/backend-defaults/api-report-auth.api.md diff --git a/packages/backend-defaults/api-report-cache.md b/packages/backend-defaults/api-report-cache.api.md similarity index 100% rename from packages/backend-defaults/api-report-cache.md rename to packages/backend-defaults/api-report-cache.api.md diff --git a/packages/backend-defaults/api-report-database.md b/packages/backend-defaults/api-report-database.api.md similarity index 100% rename from packages/backend-defaults/api-report-database.md rename to packages/backend-defaults/api-report-database.api.md diff --git a/packages/backend-defaults/api-report-discovery.md b/packages/backend-defaults/api-report-discovery.api.md similarity index 74% rename from packages/backend-defaults/api-report-discovery.md rename to packages/backend-defaults/api-report-discovery.api.md index d168d33a71..fe7d639ebc 100644 --- a/packages/backend-defaults/api-report-discovery.md +++ b/packages/backend-defaults/api-report-discovery.api.md @@ -23,5 +23,10 @@ export class HostDiscovery implements DiscoveryService { getExternalBaseUrl(pluginId: string): Promise; } +// Warnings were encountered during analysis: +// +// src/entrypoints/discovery/HostDiscovery.d.ts:46:5 - (ae-undocumented) Missing documentation for "getBaseUrl". +// src/entrypoints/discovery/HostDiscovery.d.ts:47:5 - (ae-undocumented) Missing documentation for "getExternalBaseUrl". + // (No @packageDocumentation comment for this package) ``` diff --git a/packages/backend-defaults/api-report-httpAuth.md b/packages/backend-defaults/api-report-httpAuth.api.md similarity index 100% rename from packages/backend-defaults/api-report-httpAuth.md rename to packages/backend-defaults/api-report-httpAuth.api.md diff --git a/packages/backend-defaults/api-report-httpRouter.md b/packages/backend-defaults/api-report-httpRouter.api.md similarity index 100% rename from packages/backend-defaults/api-report-httpRouter.md rename to packages/backend-defaults/api-report-httpRouter.api.md diff --git a/packages/backend-defaults/api-report-lifecycle.md b/packages/backend-defaults/api-report-lifecycle.api.md similarity index 100% rename from packages/backend-defaults/api-report-lifecycle.md rename to packages/backend-defaults/api-report-lifecycle.api.md diff --git a/packages/backend-defaults/api-report-logger.md b/packages/backend-defaults/api-report-logger.api.md similarity index 100% rename from packages/backend-defaults/api-report-logger.md rename to packages/backend-defaults/api-report-logger.api.md diff --git a/packages/backend-defaults/api-report-permissions.md b/packages/backend-defaults/api-report-permissions.api.md similarity index 100% rename from packages/backend-defaults/api-report-permissions.md rename to packages/backend-defaults/api-report-permissions.api.md diff --git a/packages/backend-defaults/api-report-rootConfig.md b/packages/backend-defaults/api-report-rootConfig.api.md similarity index 72% rename from packages/backend-defaults/api-report-rootConfig.md rename to packages/backend-defaults/api-report-rootConfig.api.md index 2935ad1128..6c65d00a3b 100644 --- a/packages/backend-defaults/api-report-rootConfig.md +++ b/packages/backend-defaults/api-report-rootConfig.api.md @@ -31,5 +31,11 @@ export const rootConfigServiceFactory: (( ) => ServiceFactory) & ServiceFactory; +// Warnings were encountered during analysis: +// +// src/entrypoints/rootConfig/createConfigSecretEnumerator.d.ts:5:1 - (ae-undocumented) Missing documentation for "createConfigSecretEnumerator". +// src/entrypoints/rootConfig/rootConfigServiceFactory.d.ts:20:5 - (ae-undocumented) Missing documentation for "watch". +// src/entrypoints/rootConfig/rootConfigServiceFactory.d.ts:26:22 - (ae-undocumented) Missing documentation for "rootConfigServiceFactory". + // (No @packageDocumentation comment for this package) ``` diff --git a/packages/backend-defaults/api-report-rootHealth.md b/packages/backend-defaults/api-report-rootHealth.api.md similarity index 71% rename from packages/backend-defaults/api-report-rootHealth.md rename to packages/backend-defaults/api-report-rootHealth.api.md index b26de7cfda..fa09590c26 100644 --- a/packages/backend-defaults/api-report-rootHealth.md +++ b/packages/backend-defaults/api-report-rootHealth.api.md @@ -13,5 +13,9 @@ export const rootHealthServiceFactory: ServiceFactory< 'singleton' >; +// Warnings were encountered during analysis: +// +// src/entrypoints/rootHealth/rootHealthServiceFactory.d.ts:5:22 - (ae-undocumented) Missing documentation for "rootHealthServiceFactory". + // (No @packageDocumentation comment for this package) ``` diff --git a/packages/backend-defaults/api-report-rootHttpRouter.md b/packages/backend-defaults/api-report-rootHttpRouter.api.md similarity index 62% rename from packages/backend-defaults/api-report-rootHttpRouter.md rename to packages/backend-defaults/api-report-rootHttpRouter.api.md index 3686f25a12..672844a98e 100644 --- a/packages/backend-defaults/api-report-rootHttpRouter.md +++ b/packages/backend-defaults/api-report-rootHttpRouter.api.md @@ -154,5 +154,27 @@ export const rootHttpRouterServiceFactory: (( ) => ServiceFactory) & ServiceFactory; +// Warnings were encountered during analysis: +// +// src/entrypoints/rootHttpRouter/DefaultRootHttpRouter.d.ts:23:5 - (ae-undocumented) Missing documentation for "create". +// src/entrypoints/rootHttpRouter/DefaultRootHttpRouter.d.ts:25:5 - (ae-undocumented) Missing documentation for "use". +// src/entrypoints/rootHttpRouter/DefaultRootHttpRouter.d.ts:26:5 - (ae-undocumented) Missing documentation for "handler". +// src/entrypoints/rootHttpRouter/http/MiddlewareFactory.d.ts:9:5 - (ae-undocumented) Missing documentation for "config". +// src/entrypoints/rootHttpRouter/http/MiddlewareFactory.d.ts:10:5 - (ae-undocumented) Missing documentation for "logger". +// src/entrypoints/rootHttpRouter/http/types.d.ts:9:5 - (ae-undocumented) Missing documentation for "start". +// src/entrypoints/rootHttpRouter/http/types.d.ts:10:5 - (ae-undocumented) Missing documentation for "stop". +// src/entrypoints/rootHttpRouter/http/types.d.ts:11:5 - (ae-undocumented) Missing documentation for "port". +// src/entrypoints/rootHttpRouter/rootHttpRouterServiceFactory.d.ts:9:1 - (ae-undocumented) Missing documentation for "RootHttpRouterConfigureContext". +// src/entrypoints/rootHttpRouter/rootHttpRouterServiceFactory.d.ts:10:5 - (ae-undocumented) Missing documentation for "app". +// src/entrypoints/rootHttpRouter/rootHttpRouterServiceFactory.d.ts:11:5 - (ae-undocumented) Missing documentation for "server". +// src/entrypoints/rootHttpRouter/rootHttpRouterServiceFactory.d.ts:12:5 - (ae-undocumented) Missing documentation for "middleware". +// src/entrypoints/rootHttpRouter/rootHttpRouterServiceFactory.d.ts:13:5 - (ae-undocumented) Missing documentation for "routes". +// src/entrypoints/rootHttpRouter/rootHttpRouterServiceFactory.d.ts:14:5 - (ae-undocumented) Missing documentation for "config". +// src/entrypoints/rootHttpRouter/rootHttpRouterServiceFactory.d.ts:15:5 - (ae-undocumented) Missing documentation for "logger". +// src/entrypoints/rootHttpRouter/rootHttpRouterServiceFactory.d.ts:16:5 - (ae-undocumented) Missing documentation for "lifecycle". +// src/entrypoints/rootHttpRouter/rootHttpRouterServiceFactory.d.ts:17:5 - (ae-undocumented) Missing documentation for "healthRouter". +// src/entrypoints/rootHttpRouter/rootHttpRouterServiceFactory.d.ts:18:5 - (ae-undocumented) Missing documentation for "applyDefaults". +// src/entrypoints/rootHttpRouter/rootHttpRouterServiceFactory.d.ts:38:22 - (ae-undocumented) Missing documentation for "rootHttpRouterServiceFactory". + // (No @packageDocumentation comment for this package) ``` diff --git a/packages/backend-defaults/api-report-rootLifecycle.md b/packages/backend-defaults/api-report-rootLifecycle.api.md similarity index 100% rename from packages/backend-defaults/api-report-rootLifecycle.md rename to packages/backend-defaults/api-report-rootLifecycle.api.md diff --git a/packages/backend-defaults/api-report-rootLogger.md b/packages/backend-defaults/api-report-rootLogger.api.md similarity index 55% rename from packages/backend-defaults/api-report-rootLogger.md rename to packages/backend-defaults/api-report-rootLogger.api.md index b353039c03..59b6242095 100644 --- a/packages/backend-defaults/api-report-rootLogger.md +++ b/packages/backend-defaults/api-report-rootLogger.api.md @@ -51,5 +51,19 @@ export interface WinstonLoggerOptions { transports?: transport[]; } +// Warnings were encountered during analysis: +// +// src/entrypoints/rootLogger/WinstonLogger.d.ts:8:1 - (ae-undocumented) Missing documentation for "WinstonLoggerOptions". +// src/entrypoints/rootLogger/WinstonLogger.d.ts:9:5 - (ae-undocumented) Missing documentation for "meta". +// src/entrypoints/rootLogger/WinstonLogger.d.ts:10:5 - (ae-undocumented) Missing documentation for "level". +// src/entrypoints/rootLogger/WinstonLogger.d.ts:11:5 - (ae-undocumented) Missing documentation for "format". +// src/entrypoints/rootLogger/WinstonLogger.d.ts:12:5 - (ae-undocumented) Missing documentation for "transports". +// src/entrypoints/rootLogger/WinstonLogger.d.ts:37:5 - (ae-undocumented) Missing documentation for "error". +// src/entrypoints/rootLogger/WinstonLogger.d.ts:38:5 - (ae-undocumented) Missing documentation for "warn". +// src/entrypoints/rootLogger/WinstonLogger.d.ts:39:5 - (ae-undocumented) Missing documentation for "info". +// src/entrypoints/rootLogger/WinstonLogger.d.ts:40:5 - (ae-undocumented) Missing documentation for "debug". +// src/entrypoints/rootLogger/WinstonLogger.d.ts:41:5 - (ae-undocumented) Missing documentation for "child". +// src/entrypoints/rootLogger/WinstonLogger.d.ts:42:5 - (ae-undocumented) Missing documentation for "addRedactions". + // (No @packageDocumentation comment for this package) ``` diff --git a/packages/backend-defaults/api-report-scheduler.md b/packages/backend-defaults/api-report-scheduler.api.md similarity index 81% rename from packages/backend-defaults/api-report-scheduler.md rename to packages/backend-defaults/api-report-scheduler.api.md index 10c0c0a943..351873ad31 100644 --- a/packages/backend-defaults/api-report-scheduler.md +++ b/packages/backend-defaults/api-report-scheduler.api.md @@ -24,5 +24,9 @@ export const schedulerServiceFactory: ServiceFactory< 'singleton' >; +// Warnings were encountered during analysis: +// +// src/entrypoints/scheduler/lib/DefaultSchedulerService.d.ts:8:5 - (ae-undocumented) Missing documentation for "create". + // (No @packageDocumentation comment for this package) ``` diff --git a/packages/backend-defaults/api-report-urlReader.md b/packages/backend-defaults/api-report-urlReader.api.md similarity index 59% rename from packages/backend-defaults/api-report-urlReader.md rename to packages/backend-defaults/api-report-urlReader.api.md index f8b8db2954..029332e12f 100644 --- a/packages/backend-defaults/api-report-urlReader.md +++ b/packages/backend-defaults/api-report-urlReader.api.md @@ -447,5 +447,78 @@ export type UrlReadersOptions = { factories?: ReaderFactory[]; }; +// Warnings were encountered during analysis: +// +// src/entrypoints/urlReader/lib/AwsS3UrlReader.d.ts:27:5 - (ae-undocumented) Missing documentation for "factory". +// src/entrypoints/urlReader/lib/AwsS3UrlReader.d.ts:39:5 - (ae-undocumented) Missing documentation for "read". +// src/entrypoints/urlReader/lib/AwsS3UrlReader.d.ts:40:5 - (ae-undocumented) Missing documentation for "readUrl". +// src/entrypoints/urlReader/lib/AwsS3UrlReader.d.ts:41:5 - (ae-undocumented) Missing documentation for "readTree". +// src/entrypoints/urlReader/lib/AwsS3UrlReader.d.ts:42:5 - (ae-undocumented) Missing documentation for "search". +// src/entrypoints/urlReader/lib/AwsS3UrlReader.d.ts:43:5 - (ae-undocumented) Missing documentation for "toString". +// src/entrypoints/urlReader/lib/AzureUrlReader.d.ts:13:5 - (ae-undocumented) Missing documentation for "factory". +// src/entrypoints/urlReader/lib/AzureUrlReader.d.ts:18:5 - (ae-undocumented) Missing documentation for "read". +// src/entrypoints/urlReader/lib/AzureUrlReader.d.ts:19:5 - (ae-undocumented) Missing documentation for "readUrl". +// src/entrypoints/urlReader/lib/AzureUrlReader.d.ts:20:5 - (ae-undocumented) Missing documentation for "readTree". +// src/entrypoints/urlReader/lib/AzureUrlReader.d.ts:21:5 - (ae-undocumented) Missing documentation for "search". +// src/entrypoints/urlReader/lib/AzureUrlReader.d.ts:22:5 - (ae-undocumented) Missing documentation for "toString". +// src/entrypoints/urlReader/lib/BitbucketCloudUrlReader.d.ts:13:5 - (ae-undocumented) Missing documentation for "factory". +// src/entrypoints/urlReader/lib/BitbucketCloudUrlReader.d.ts:17:5 - (ae-undocumented) Missing documentation for "read". +// src/entrypoints/urlReader/lib/BitbucketCloudUrlReader.d.ts:18:5 - (ae-undocumented) Missing documentation for "readUrl". +// src/entrypoints/urlReader/lib/BitbucketCloudUrlReader.d.ts:19:5 - (ae-undocumented) Missing documentation for "readTree". +// src/entrypoints/urlReader/lib/BitbucketCloudUrlReader.d.ts:20:5 - (ae-undocumented) Missing documentation for "search". +// src/entrypoints/urlReader/lib/BitbucketCloudUrlReader.d.ts:21:5 - (ae-undocumented) Missing documentation for "toString". +// src/entrypoints/urlReader/lib/BitbucketServerUrlReader.d.ts:13:5 - (ae-undocumented) Missing documentation for "factory". +// src/entrypoints/urlReader/lib/BitbucketServerUrlReader.d.ts:17:5 - (ae-undocumented) Missing documentation for "read". +// src/entrypoints/urlReader/lib/BitbucketServerUrlReader.d.ts:18:5 - (ae-undocumented) Missing documentation for "readUrl". +// src/entrypoints/urlReader/lib/BitbucketServerUrlReader.d.ts:19:5 - (ae-undocumented) Missing documentation for "readTree". +// src/entrypoints/urlReader/lib/BitbucketServerUrlReader.d.ts:20:5 - (ae-undocumented) Missing documentation for "search". +// src/entrypoints/urlReader/lib/BitbucketServerUrlReader.d.ts:21:5 - (ae-undocumented) Missing documentation for "toString". +// src/entrypoints/urlReader/lib/BitbucketUrlReader.d.ts:16:5 - (ae-undocumented) Missing documentation for "factory". +// src/entrypoints/urlReader/lib/BitbucketUrlReader.d.ts:20:5 - (ae-undocumented) Missing documentation for "read". +// src/entrypoints/urlReader/lib/BitbucketUrlReader.d.ts:21:5 - (ae-undocumented) Missing documentation for "readUrl". +// src/entrypoints/urlReader/lib/BitbucketUrlReader.d.ts:22:5 - (ae-undocumented) Missing documentation for "readTree". +// src/entrypoints/urlReader/lib/BitbucketUrlReader.d.ts:23:5 - (ae-undocumented) Missing documentation for "search". +// src/entrypoints/urlReader/lib/BitbucketUrlReader.d.ts:24:5 - (ae-undocumented) Missing documentation for "toString". +// src/entrypoints/urlReader/lib/FetchUrlReader.d.ts:23:5 - (ae-undocumented) Missing documentation for "read". +// src/entrypoints/urlReader/lib/FetchUrlReader.d.ts:24:5 - (ae-undocumented) Missing documentation for "readUrl". +// src/entrypoints/urlReader/lib/FetchUrlReader.d.ts:25:5 - (ae-undocumented) Missing documentation for "readTree". +// src/entrypoints/urlReader/lib/FetchUrlReader.d.ts:26:5 - (ae-undocumented) Missing documentation for "search". +// src/entrypoints/urlReader/lib/FetchUrlReader.d.ts:27:5 - (ae-undocumented) Missing documentation for "toString". +// src/entrypoints/urlReader/lib/GerritUrlReader.d.ts:28:5 - (ae-undocumented) Missing documentation for "factory". +// src/entrypoints/urlReader/lib/GerritUrlReader.d.ts:32:5 - (ae-undocumented) Missing documentation for "read". +// src/entrypoints/urlReader/lib/GerritUrlReader.d.ts:33:5 - (ae-undocumented) Missing documentation for "readUrl". +// src/entrypoints/urlReader/lib/GerritUrlReader.d.ts:34:5 - (ae-undocumented) Missing documentation for "readTree". +// src/entrypoints/urlReader/lib/GerritUrlReader.d.ts:35:5 - (ae-undocumented) Missing documentation for "search". +// src/entrypoints/urlReader/lib/GerritUrlReader.d.ts:36:5 - (ae-undocumented) Missing documentation for "toString". +// src/entrypoints/urlReader/lib/GiteaUrlReader.d.ts:13:5 - (ae-undocumented) Missing documentation for "factory". +// src/entrypoints/urlReader/lib/GiteaUrlReader.d.ts:17:5 - (ae-undocumented) Missing documentation for "read". +// src/entrypoints/urlReader/lib/GiteaUrlReader.d.ts:18:5 - (ae-undocumented) Missing documentation for "readUrl". +// src/entrypoints/urlReader/lib/GiteaUrlReader.d.ts:19:5 - (ae-undocumented) Missing documentation for "readTree". +// src/entrypoints/urlReader/lib/GiteaUrlReader.d.ts:20:5 - (ae-undocumented) Missing documentation for "search". +// src/entrypoints/urlReader/lib/GiteaUrlReader.d.ts:21:5 - (ae-undocumented) Missing documentation for "toString". +// src/entrypoints/urlReader/lib/GithubUrlReader.d.ts:19:5 - (ae-undocumented) Missing documentation for "factory". +// src/entrypoints/urlReader/lib/GithubUrlReader.d.ts:24:5 - (ae-undocumented) Missing documentation for "read". +// src/entrypoints/urlReader/lib/GithubUrlReader.d.ts:26:5 - (ae-undocumented) Missing documentation for "readUrl". +// src/entrypoints/urlReader/lib/GithubUrlReader.d.ts:27:5 - (ae-undocumented) Missing documentation for "readTree". +// src/entrypoints/urlReader/lib/GithubUrlReader.d.ts:28:5 - (ae-undocumented) Missing documentation for "search". +// src/entrypoints/urlReader/lib/GithubUrlReader.d.ts:29:5 - (ae-undocumented) Missing documentation for "toString". +// src/entrypoints/urlReader/lib/GitlabUrlReader.d.ts:13:5 - (ae-undocumented) Missing documentation for "factory". +// src/entrypoints/urlReader/lib/GitlabUrlReader.d.ts:17:5 - (ae-undocumented) Missing documentation for "read". +// src/entrypoints/urlReader/lib/GitlabUrlReader.d.ts:18:5 - (ae-undocumented) Missing documentation for "readUrl". +// src/entrypoints/urlReader/lib/GitlabUrlReader.d.ts:19:5 - (ae-undocumented) Missing documentation for "readTree". +// src/entrypoints/urlReader/lib/GitlabUrlReader.d.ts:20:5 - (ae-undocumented) Missing documentation for "search". +// src/entrypoints/urlReader/lib/GitlabUrlReader.d.ts:30:8 - (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen +// src/entrypoints/urlReader/lib/GitlabUrlReader.d.ts:31:8 - (tsdoc-undefined-tag) The TSDoc tag "@private" is not defined in this configuration +// src/entrypoints/urlReader/lib/GitlabUrlReader.d.ts:34:5 - (ae-undocumented) Missing documentation for "toString". +// src/entrypoints/urlReader/lib/HarnessUrlReader.d.ts:14:5 - (ae-undocumented) Missing documentation for "factory". +// src/entrypoints/urlReader/lib/HarnessUrlReader.d.ts:18:5 - (ae-undocumented) Missing documentation for "read". +// src/entrypoints/urlReader/lib/HarnessUrlReader.d.ts:19:5 - (ae-undocumented) Missing documentation for "readUrl". +// src/entrypoints/urlReader/lib/HarnessUrlReader.d.ts:20:5 - (ae-undocumented) Missing documentation for "readTree". +// src/entrypoints/urlReader/lib/HarnessUrlReader.d.ts:21:5 - (ae-undocumented) Missing documentation for "search". +// src/entrypoints/urlReader/lib/HarnessUrlReader.d.ts:22:5 - (ae-undocumented) Missing documentation for "toString". +// src/entrypoints/urlReader/lib/types.d.ts:75:5 - (ae-undocumented) Missing documentation for "fromTarArchive". +// src/entrypoints/urlReader/lib/types.d.ts:82:5 - (ae-undocumented) Missing documentation for "fromZipArchive". +// src/entrypoints/urlReader/lib/types.d.ts:83:5 - (ae-undocumented) Missing documentation for "fromReadableArray". + // (No @packageDocumentation comment for this package) ``` diff --git a/packages/backend-defaults/api-report-userInfo.md b/packages/backend-defaults/api-report-userInfo.api.md similarity index 100% rename from packages/backend-defaults/api-report-userInfo.md rename to packages/backend-defaults/api-report-userInfo.api.md diff --git a/packages/backend-defaults/api-report.md b/packages/backend-defaults/api-report.api.md similarity index 100% rename from packages/backend-defaults/api-report.md rename to packages/backend-defaults/api-report.api.md diff --git a/packages/backend-dev-utils/api-report.md b/packages/backend-dev-utils/api-report.api.md similarity index 100% rename from packages/backend-dev-utils/api-report.md rename to packages/backend-dev-utils/api-report.api.md diff --git a/packages/backend-dynamic-feature-service/api-report.md b/packages/backend-dynamic-feature-service/api-report.api.md similarity index 57% rename from packages/backend-dynamic-feature-service/api-report.md rename to packages/backend-dynamic-feature-service/api-report.api.md index f6972da50b..5093458a6c 100644 --- a/packages/backend-dynamic-feature-service/api-report.md +++ b/packages/backend-dynamic-feature-service/api-report.api.md @@ -276,5 +276,69 @@ export interface ScannedPluginPackage { manifest: ScannedPluginManifest; } +// Warnings were encountered during analysis: +// +// src/loader/types.d.ts:4:1 - (ae-undocumented) Missing documentation for "ModuleLoader". +// src/loader/types.d.ts:5:5 - (ae-undocumented) Missing documentation for "bootstrap". +// src/loader/types.d.ts:6:5 - (ae-undocumented) Missing documentation for "load". +// src/manager/plugin-manager.d.ts:10:1 - (ae-undocumented) Missing documentation for "DynamicPluginManagerOptions". +// src/manager/plugin-manager.d.ts:11:5 - (ae-undocumented) Missing documentation for "config". +// src/manager/plugin-manager.d.ts:12:5 - (ae-undocumented) Missing documentation for "logger". +// src/manager/plugin-manager.d.ts:13:5 - (ae-undocumented) Missing documentation for "preferAlpha". +// src/manager/plugin-manager.d.ts:14:5 - (ae-undocumented) Missing documentation for "moduleLoader". +// src/manager/plugin-manager.d.ts:19:1 - (ae-undocumented) Missing documentation for "DynamicPluginManager". +// src/manager/plugin-manager.d.ts:23:5 - (ae-undocumented) Missing documentation for "create". +// src/manager/plugin-manager.d.ts:27:5 - (ae-undocumented) Missing documentation for "availablePackages". +// src/manager/plugin-manager.d.ts:28:5 - (ae-undocumented) Missing documentation for "addBackendPlugin". +// src/manager/plugin-manager.d.ts:31:5 - (ae-undocumented) Missing documentation for "backendPlugins". +// src/manager/plugin-manager.d.ts:32:5 - (ae-undocumented) Missing documentation for "frontendPlugins". +// src/manager/plugin-manager.d.ts:33:5 - (ae-undocumented) Missing documentation for "plugins". +// src/manager/plugin-manager.d.ts:38:22 - (ae-undocumented) Missing documentation for "dynamicPluginsServiceRef". +// src/manager/plugin-manager.d.ts:42:1 - (ae-undocumented) Missing documentation for "DynamicPluginsFactoryOptions". +// src/manager/plugin-manager.d.ts:43:5 - (ae-undocumented) Missing documentation for "moduleLoader". +// src/manager/plugin-manager.d.ts:48:22 - (ae-undocumented) Missing documentation for "dynamicPluginsServiceFactory". +// src/manager/plugin-manager.d.ts:52:22 - (ae-undocumented) Missing documentation for "dynamicPluginsFeatureDiscoveryServiceFactory". +// src/manager/types.d.ts:28:1 - (ae-undocumented) Missing documentation for "LegacyPluginEnvironment". +// src/manager/types.d.ts:46:1 - (ae-undocumented) Missing documentation for "DynamicPluginProvider". +// src/manager/types.d.ts:47:5 - (ae-undocumented) Missing documentation for "plugins". +// src/manager/types.d.ts:52:1 - (ae-undocumented) Missing documentation for "BackendPluginProvider". +// src/manager/types.d.ts:53:5 - (ae-undocumented) Missing documentation for "backendPlugins". +// src/manager/types.d.ts:58:1 - (ae-undocumented) Missing documentation for "FrontendPluginProvider". +// src/manager/types.d.ts:59:5 - (ae-undocumented) Missing documentation for "frontendPlugins". +// src/manager/types.d.ts:64:1 - (ae-undocumented) Missing documentation for "BaseDynamicPlugin". +// src/manager/types.d.ts:65:5 - (ae-undocumented) Missing documentation for "name". +// src/manager/types.d.ts:66:5 - (ae-undocumented) Missing documentation for "version". +// src/manager/types.d.ts:67:5 - (ae-undocumented) Missing documentation for "role". +// src/manager/types.d.ts:68:5 - (ae-undocumented) Missing documentation for "platform". +// src/manager/types.d.ts:73:1 - (ae-undocumented) Missing documentation for "DynamicPlugin". +// src/manager/types.d.ts:77:1 - (ae-undocumented) Missing documentation for "FrontendDynamicPlugin". +// src/manager/types.d.ts:78:5 - (ae-undocumented) Missing documentation for "platform". +// src/manager/types.d.ts:83:1 - (ae-undocumented) Missing documentation for "BackendDynamicPlugin". +// src/manager/types.d.ts:84:5 - (ae-undocumented) Missing documentation for "platform". +// src/manager/types.d.ts:85:5 - (ae-undocumented) Missing documentation for "installer". +// src/manager/types.d.ts:90:1 - (ae-undocumented) Missing documentation for "BackendDynamicPluginInstaller". +// src/manager/types.d.ts:94:1 - (ae-undocumented) Missing documentation for "NewBackendPluginInstaller". +// src/manager/types.d.ts:95:5 - (ae-undocumented) Missing documentation for "kind". +// src/manager/types.d.ts:96:5 - (ae-undocumented) Missing documentation for "install". +// src/manager/types.d.ts:109:1 - (ae-undocumented) Missing documentation for "LegacyBackendPluginInstaller". +// src/manager/types.d.ts:110:5 - (ae-undocumented) Missing documentation for "kind". +// src/manager/types.d.ts:111:5 - (ae-undocumented) Missing documentation for "router". +// src/manager/types.d.ts:115:5 - (ae-undocumented) Missing documentation for "catalog". +// src/manager/types.d.ts:116:5 - (ae-undocumented) Missing documentation for "scaffolder". +// src/manager/types.d.ts:117:5 - (ae-undocumented) Missing documentation for "search". +// src/manager/types.d.ts:118:5 - (ae-undocumented) Missing documentation for "events". +// src/manager/types.d.ts:119:5 - (ae-undocumented) Missing documentation for "permissions". +// src/manager/types.d.ts:126:1 - (ae-undocumented) Missing documentation for "isBackendDynamicPluginInstaller". +// src/scanner/types.d.ts:5:1 - (ae-undocumented) Missing documentation for "ScannedPluginPackage". +// src/scanner/types.d.ts:6:5 - (ae-undocumented) Missing documentation for "location". +// src/scanner/types.d.ts:7:5 - (ae-undocumented) Missing documentation for "manifest". +// src/scanner/types.d.ts:12:1 - (ae-undocumented) Missing documentation for "ScannedPluginManifest". +// src/schemas/appBackendModule.d.ts:2:22 - (ae-undocumented) Missing documentation for "dynamicPluginsFrontendSchemas". +// src/schemas/rootLoggerServiceFactory.d.ts:2:22 - (ae-undocumented) Missing documentation for "dynamicPluginsRootLoggerServiceFactory". +// src/schemas/schemas.d.ts:7:1 - (ae-undocumented) Missing documentation for "DynamicPluginsSchemasService". +// src/schemas/schemas.d.ts:8:5 - (ae-undocumented) Missing documentation for "addDynamicPluginsSchemas". +// src/schemas/schemas.d.ts:21:1 - (ae-undocumented) Missing documentation for "DynamicPluginsSchemasOptions". +// src/schemas/schemas.d.ts:36:22 - (ae-undocumented) Missing documentation for "dynamicPluginsSchemasServiceFactory". + // (No @packageDocumentation comment for this package) ``` diff --git a/packages/backend-openapi-utils/api-report.md b/packages/backend-openapi-utils/api-report.api.md similarity index 72% rename from packages/backend-openapi-utils/api-report.md rename to packages/backend-openapi-utils/api-report.api.md index 8e702b8c23..a0495f39b5 100644 --- a/packages/backend-openapi-utils/api-report.md +++ b/packages/backend-openapi-utils/api-report.api.md @@ -717,4 +717,84 @@ type ValueOf = T[keyof T]; // @public export const wrapInOpenApiTestServer: (app: Express_2) => Server | Express_2; + +// Warnings were encountered during analysis: +// +// src/router.d.ts:8:5 - (ae-undocumented) Missing documentation for "get". +// src/router.d.ts:9:5 - (ae-undocumented) Missing documentation for "post". +// src/router.d.ts:10:5 - (ae-undocumented) Missing documentation for "all". +// src/router.d.ts:11:5 - (ae-undocumented) Missing documentation for "put". +// src/router.d.ts:12:5 - (ae-undocumented) Missing documentation for "delete". +// src/router.d.ts:13:5 - (ae-undocumented) Missing documentation for "patch". +// src/router.d.ts:14:5 - (ae-undocumented) Missing documentation for "options". +// src/router.d.ts:15:5 - (ae-undocumented) Missing documentation for "head". +// src/types/common.d.ts:14:1 - (ae-undocumented) Missing documentation for "PathDoc". +// src/types/common.d.ts:60:1 - (ae-undocumented) Missing documentation for "DocPathTemplate". +// src/types/common.d.ts:64:1 - (ae-undocumented) Missing documentation for "DocPathMethod". +// src/types/common.d.ts:68:1 - (ae-undocumented) Missing documentation for "DocPathTemplateMethod". +// src/types/common.d.ts:72:1 - (ae-undocumented) Missing documentation for "MethodAwareDocPath". +// src/types/common.d.ts:78:1 - (ae-undocumented) Missing documentation for "DocOperation". +// src/types/common.d.ts:82:1 - (ae-undocumented) Missing documentation for "ComponentTypes". +// src/types/common.d.ts:86:1 - (ae-undocumented) Missing documentation for "ComponentRef". +// src/types/common.d.ts:92:1 - (ae-undocumented) Missing documentation for "SchemaRef". +// src/types/common.d.ts:100:1 - (ae-undocumented) Missing documentation for "ObjectWithContentSchema". +// src/types/common.d.ts:114:1 - (ae-undocumented) Missing documentation for "LastOf". +// src/types/common.d.ts:118:1 - (ae-undocumented) Missing documentation for "Push". +// src/types/common.d.ts:122:1 - (ae-undocumented) Missing documentation for "TuplifyUnion". +// src/types/common.d.ts:126:1 - (ae-undocumented) Missing documentation for "ConvertAll". +// src/types/common.d.ts:134:1 - (ae-undocumented) Missing documentation for "UnknownIfNever". +// src/types/common.d.ts:138:1 - (ae-undocumented) Missing documentation for "ToTypeSafe". +// src/types/common.d.ts:142:1 - (ae-undocumented) Missing documentation for "DiscriminateUnion". +// src/types/common.d.ts:146:1 - (ae-undocumented) Missing documentation for "MapDiscriminatedUnion". +// src/types/common.d.ts:152:1 - (ae-undocumented) Missing documentation for "PickOptionalKeys". +// src/types/common.d.ts:160:1 - (ae-undocumented) Missing documentation for "PickRequiredKeys". +// src/types/common.d.ts:168:1 - (ae-undocumented) Missing documentation for "OptionalMap". +// src/types/common.d.ts:176:1 - (ae-undocumented) Missing documentation for "RequiredMap". +// src/types/common.d.ts:184:1 - (ae-undocumented) Missing documentation for "FullMap". +// src/types/common.d.ts:190:1 - (ae-undocumented) Missing documentation for "Filter". +// src/types/express.d.ts:21:5 - (ae-undocumented) Missing documentation for "__call". +// src/types/express.d.ts:22:5 - (ae-undocumented) Missing documentation for "__call". +// src/types/immutable.d.ts:18:1 - (ae-undocumented) Missing documentation for "ImmutableObject". +// src/types/immutable.d.ts:24:1 - (ae-undocumented) Missing documentation for "ImmutableReferenceObject". +// src/types/immutable.d.ts:28:1 - (ae-undocumented) Missing documentation for "ImmutableOpenAPIObject". +// src/types/immutable.d.ts:32:1 - (ae-undocumented) Missing documentation for "ImmutableContentObject". +// src/types/immutable.d.ts:36:1 - (ae-undocumented) Missing documentation for "ImmutableRequestBodyObject". +// src/types/immutable.d.ts:40:1 - (ae-undocumented) Missing documentation for "ImmutableResponseObject". +// src/types/immutable.d.ts:44:1 - (ae-undocumented) Missing documentation for "ImmutableParameterObject". +// src/types/immutable.d.ts:48:1 - (ae-undocumented) Missing documentation for "HeaderObject". +// src/types/immutable.d.ts:49:5 - (ae-undocumented) Missing documentation for "in". +// src/types/immutable.d.ts:50:5 - (ae-undocumented) Missing documentation for "style". +// src/types/immutable.d.ts:55:1 - (ae-undocumented) Missing documentation for "ImmutableHeaderObject". +// src/types/immutable.d.ts:59:1 - (ae-undocumented) Missing documentation for "CookieObject". +// src/types/immutable.d.ts:60:5 - (ae-undocumented) Missing documentation for "in". +// src/types/immutable.d.ts:61:5 - (ae-undocumented) Missing documentation for "style". +// src/types/immutable.d.ts:66:1 - (ae-undocumented) Missing documentation for "ImmutableCookieObject". +// src/types/immutable.d.ts:70:1 - (ae-undocumented) Missing documentation for "QueryObject". +// src/types/immutable.d.ts:71:5 - (ae-undocumented) Missing documentation for "in". +// src/types/immutable.d.ts:72:5 - (ae-undocumented) Missing documentation for "style". +// src/types/immutable.d.ts:77:1 - (ae-undocumented) Missing documentation for "ImmutableQueryObject". +// src/types/immutable.d.ts:81:1 - (ae-undocumented) Missing documentation for "PathObject". +// src/types/immutable.d.ts:82:5 - (ae-undocumented) Missing documentation for "in". +// src/types/immutable.d.ts:83:5 - (ae-undocumented) Missing documentation for "style". +// src/types/immutable.d.ts:88:1 - (ae-undocumented) Missing documentation for "ImmutablePathObject". +// src/types/immutable.d.ts:92:1 - (ae-undocumented) Missing documentation for "ImmutableSchemaObject". +// src/types/params.d.ts:7:1 - (ae-undocumented) Missing documentation for "DocParameter". +// src/types/params.d.ts:16:1 - (ae-undocumented) Missing documentation for "DocParameters". +// src/types/params.d.ts:22:1 - (ae-undocumented) Missing documentation for "ParameterSchema". +// src/types/params.d.ts:26:1 - (ae-undocumented) Missing documentation for "MapToSchema". +// src/types/params.d.ts:32:1 - (ae-undocumented) Missing documentation for "ParametersSchema". +// src/types/params.d.ts:36:1 - (ae-undocumented) Missing documentation for "HeaderSchema". +// src/types/params.d.ts:40:1 - (ae-undocumented) Missing documentation for "CookieSchema". +// src/types/params.d.ts:44:1 - (ae-undocumented) Missing documentation for "PathSchema". +// src/types/params.d.ts:48:1 - (ae-undocumented) Missing documentation for "QuerySchema". +// src/types/requests.d.ts:9:1 - (ae-undocumented) Missing documentation for "RequestBody". +// src/types/requests.d.ts:13:1 - (ae-undocumented) Missing documentation for "RequestBodySchema". +// src/types/responses.d.ts:9:1 - (ae-undocumented) Missing documentation for "Response". +// src/types/responses.d.ts:13:1 - (ae-undocumented) Missing documentation for "ResponseSchemas". +// src/utility.d.ts:5:1 - (ae-undocumented) Missing documentation for "Response". +// src/utility.d.ts:9:1 - (ae-undocumented) Missing documentation for "Request". +// src/utility.d.ts:13:1 - (ae-undocumented) Missing documentation for "HeaderParameters". +// src/utility.d.ts:17:1 - (ae-undocumented) Missing documentation for "CookieParameters". +// src/utility.d.ts:21:1 - (ae-undocumented) Missing documentation for "PathParameters". +// src/utility.d.ts:25:1 - (ae-undocumented) Missing documentation for "QueryParameters". ``` diff --git a/packages/backend-plugin-api/api-report-alpha.md b/packages/backend-plugin-api/api-report-alpha.api.md similarity index 73% rename from packages/backend-plugin-api/api-report-alpha.md rename to packages/backend-plugin-api/api-report-alpha.api.md index dea357502e..29c74e7ade 100644 --- a/packages/backend-plugin-api/api-report-alpha.md +++ b/packages/backend-plugin-api/api-report-alpha.api.md @@ -21,5 +21,10 @@ export const featureDiscoveryServiceRef: ServiceRef< 'singleton' >; +// Warnings were encountered during analysis: +// +// src/alpha.d.ts:3:1 - (ae-undocumented) Missing documentation for "FeatureDiscoveryService". +// src/alpha.d.ts:4:5 - (ae-undocumented) Missing documentation for "getBackendFeatures". + // (No @packageDocumentation comment for this package) ``` diff --git a/packages/backend-plugin-api/api-report-testUtils.md b/packages/backend-plugin-api/api-report-testUtils.api.md similarity index 70% rename from packages/backend-plugin-api/api-report-testUtils.md rename to packages/backend-plugin-api/api-report-testUtils.api.md index 8c9bba8398..8f2f871e90 100644 --- a/packages/backend-plugin-api/api-report-testUtils.md +++ b/packages/backend-plugin-api/api-report-testUtils.api.md @@ -22,5 +22,10 @@ export interface PackagePathResolutionOverride { restore(): void; } +// Warnings were encountered during analysis: +// +// src/testUtils.d.ts:2:1 - (ae-undocumented) Missing documentation for "PackagePathResolutionOverride". +// src/testUtils.d.ts:7:1 - (ae-undocumented) Missing documentation for "OverridePackagePathResolutionOptions". + // (No @packageDocumentation comment for this package) ``` diff --git a/packages/backend-plugin-api/api-report.md b/packages/backend-plugin-api/api-report.api.md similarity index 75% rename from packages/backend-plugin-api/api-report.md rename to packages/backend-plugin-api/api-report.api.md index 89dfe40dd9..7cd89364d0 100644 --- a/packages/backend-plugin-api/api-report.md +++ b/packages/backend-plugin-api/api-report.api.md @@ -735,4 +735,65 @@ export type UrlReaderServiceSearchResponseFile = { export interface UserInfoService { getUserInfo(credentials: BackstageCredentials): Promise; } + +// Warnings were encountered during analysis: +// +// src/deprecated.d.ts:6:1 - (ae-undocumented) Missing documentation for "ServiceRefConfig". +// src/deprecated.d.ts:11:1 - (ae-undocumented) Missing documentation for "RootServiceFactoryConfig". +// src/deprecated.d.ts:18:1 - (ae-undocumented) Missing documentation for "PluginServiceFactoryConfig". +// src/services/definitions/HttpRouterService.d.ts:8:5 - (ae-undocumented) Missing documentation for "path". +// src/services/definitions/HttpRouterService.d.ts:9:5 - (ae-undocumented) Missing documentation for "allow". +// src/services/definitions/LifecycleService.d.ts:5:1 - (ae-undocumented) Missing documentation for "LifecycleServiceStartupHook". +// src/services/definitions/LifecycleService.d.ts:9:1 - (ae-undocumented) Missing documentation for "LifecycleServiceStartupOptions". +// src/services/definitions/LifecycleService.d.ts:18:1 - (ae-undocumented) Missing documentation for "LifecycleServiceShutdownHook". +// src/services/definitions/LifecycleService.d.ts:22:1 - (ae-undocumented) Missing documentation for "LifecycleServiceShutdownOptions". +// src/services/definitions/LoggerService.d.ts:10:5 - (ae-undocumented) Missing documentation for "error". +// src/services/definitions/LoggerService.d.ts:11:5 - (ae-undocumented) Missing documentation for "warn". +// src/services/definitions/LoggerService.d.ts:12:5 - (ae-undocumented) Missing documentation for "info". +// src/services/definitions/LoggerService.d.ts:13:5 - (ae-undocumented) Missing documentation for "debug". +// src/services/definitions/LoggerService.d.ts:14:5 - (ae-undocumented) Missing documentation for "child". +// src/services/definitions/PermissionsService.d.ts:9:5 - (ae-undocumented) Missing documentation for "credentials". +// src/services/definitions/RootHealthService.d.ts:5:1 - (ae-undocumented) Missing documentation for "RootHealthService". +// src/services/definitions/UrlReaderService.d.ts:323:1 - (ae-undocumented) Missing documentation for "ReadTreeOptions". +// src/services/definitions/UrlReaderService.d.ts:328:1 - (ae-undocumented) Missing documentation for "ReadTreeResponse". +// src/services/definitions/UrlReaderService.d.ts:333:1 - (ae-undocumented) Missing documentation for "ReadTreeResponseDirOptions". +// src/services/definitions/UrlReaderService.d.ts:338:1 - (ae-undocumented) Missing documentation for "ReadTreeResponseFile". +// src/services/definitions/UrlReaderService.d.ts:343:1 - (ae-undocumented) Missing documentation for "ReadUrlResponse". +// src/services/definitions/UrlReaderService.d.ts:348:1 - (ae-undocumented) Missing documentation for "ReadUrlOptions". +// src/services/definitions/UrlReaderService.d.ts:353:1 - (ae-undocumented) Missing documentation for "SearchOptions". +// src/services/definitions/UrlReaderService.d.ts:358:1 - (ae-undocumented) Missing documentation for "SearchResponse". +// src/services/definitions/UrlReaderService.d.ts:363:1 - (ae-undocumented) Missing documentation for "SearchResponseFile". +// src/services/definitions/UserInfoService.d.ts:9:5 - (ae-undocumented) Missing documentation for "userEntityRef". +// src/services/definitions/UserInfoService.d.ts:10:5 - (ae-undocumented) Missing documentation for "ownershipEntityRefs". +// src/services/system/types.d.ts:27:1 - (ae-undocumented) Missing documentation for "ServiceFactory". +// src/services/system/types.d.ts:28:5 - (ae-undocumented) Missing documentation for "service". +// src/services/system/types.d.ts:34:1 - (ae-undocumented) Missing documentation for "ServiceFactoryCompat". +// src/services/system/types.d.ts:38:5 - (ae-undocumented) Missing documentation for "__call". +// src/services/system/types.d.ts:48:1 - (ae-undocumented) Missing documentation for "ServiceRefOptions". +// src/services/system/types.d.ts:49:5 - (ae-undocumented) Missing documentation for "id". +// src/services/system/types.d.ts:50:5 - (ae-undocumented) Missing documentation for "scope". +// src/services/system/types.d.ts:51:5 - (ae-undocumented) Missing documentation for "defaultFactory". +// src/services/system/types.d.ts:55:5 - (ae-undocumented) Missing documentation for "defaultFactory". +// src/services/system/types.d.ts:76:1 - (ae-undocumented) Missing documentation for "RootServiceFactoryOptions". +// src/services/system/types.d.ts:90:5 - (ae-undocumented) Missing documentation for "service". +// src/services/system/types.d.ts:91:5 - (ae-undocumented) Missing documentation for "deps". +// src/services/system/types.d.ts:92:5 - (ae-undocumented) Missing documentation for "factory". +// src/services/system/types.d.ts:95:1 - (ae-undocumented) Missing documentation for "PluginServiceFactoryOptions". +// src/services/system/types.d.ts:109:5 - (ae-undocumented) Missing documentation for "service". +// src/services/system/types.d.ts:110:5 - (ae-undocumented) Missing documentation for "deps". +// src/services/system/types.d.ts:111:5 - (ae-undocumented) Missing documentation for "createRootContext". +// src/services/system/types.d.ts:112:5 - (ae-undocumented) Missing documentation for "factory". +// src/types.d.ts:2:1 - (ae-undocumented) Missing documentation for "BackendFeature". +// src/types.d.ts:3:5 - (ae-undocumented) Missing documentation for "$$type". +// src/types.d.ts:9:1 - (ae-undocumented) Missing documentation for "BackendFeatureCompat". +// src/types.d.ts:13:5 - (ae-undocumented) Missing documentation for "__call". +// src/wiring/factories.d.ts:39:5 - (ae-undocumented) Missing documentation for "register". +// src/wiring/factories.d.ts:67:5 - (ae-undocumented) Missing documentation for "register". +// src/wiring/index.d.ts:9:1 - (ae-undocumented) Missing documentation for "BackendPluginConfig". +// src/wiring/index.d.ts:14:1 - (ae-undocumented) Missing documentation for "BackendModuleConfig". +// src/wiring/index.d.ts:19:1 - (ae-undocumented) Missing documentation for "ExtensionPointConfig". +// src/wiring/types.d.ts:23:5 - (ae-undocumented) Missing documentation for "registerExtensionPoint". +// src/wiring/types.d.ts:24:5 - (ae-undocumented) Missing documentation for "registerInit". +// src/wiring/types.d.ts:39:5 - (ae-undocumented) Missing documentation for "registerExtensionPoint". +// src/wiring/types.d.ts:40:5 - (ae-undocumented) Missing documentation for "registerInit". ``` diff --git a/packages/backend-test-utils/api-report.md b/packages/backend-test-utils/api-report.api.md similarity index 62% rename from packages/backend-test-utils/api-report.md rename to packages/backend-test-utils/api-report.api.md index 2bea998596..1234297c2e 100644 --- a/packages/backend-test-utils/api-report.md +++ b/packages/backend-test-utils/api-report.api.md @@ -474,4 +474,95 @@ export class TestDatabases { // (undocumented) supports(id: TestDatabaseId): boolean; } + +// Warnings were encountered during analysis: +// +// src/cache/TestCaches.d.ts:27:5 - (ae-undocumented) Missing documentation for "setDefaults". +// src/cache/TestCaches.d.ts:31:5 - (ae-undocumented) Missing documentation for "supports". +// src/cache/TestCaches.d.ts:32:5 - (ae-undocumented) Missing documentation for "eachSupportedId". +// src/database/TestDatabases.d.ts:29:5 - (ae-undocumented) Missing documentation for "setDefaults". +// src/database/TestDatabases.d.ts:33:5 - (ae-undocumented) Missing documentation for "supports". +// src/database/TestDatabases.d.ts:34:5 - (ae-undocumented) Missing documentation for "eachSupportedId". +// src/deprecated.d.ts:6:1 - (ae-undocumented) Missing documentation for "MockDirectoryOptions". +// src/deprecated.d.ts:11:1 - (ae-undocumented) Missing documentation for "setupRequestMockHandlers". +// src/deprecated.d.ts:20:1 - (ae-undocumented) Missing documentation for "isDockerDisabledForTests". +// src/next/services/mockCredentials.d.ts:17:1 - (ae-undocumented) Missing documentation for "mockCredentials". +// src/next/services/mockCredentials.d.ts:58:9 - (ae-undocumented) Missing documentation for "invalidToken". +// src/next/services/mockCredentials.d.ts:59:9 - (ae-undocumented) Missing documentation for "invalidHeader". +// src/next/services/mockCredentials.d.ts:84:9 - (ae-undocumented) Missing documentation for "invalidToken". +// src/next/services/mockCredentials.d.ts:85:9 - (ae-undocumented) Missing documentation for "invalidCookie". +// src/next/services/mockCredentials.d.ts:116:9 - (ae-undocumented) Missing documentation for "invalidToken". +// src/next/services/mockCredentials.d.ts:117:9 - (ae-undocumented) Missing documentation for "invalidHeader". +// src/next/services/mockServices.d.ts:5:1 - (ae-undocumented) Missing documentation for "ServiceMock". +// src/next/services/mockServices.d.ts:13:1 - (ae-undocumented) Missing documentation for "mockServices". +// src/next/services/mockServices.d.ts:14:5 - (ae-undocumented) Missing documentation for "rootConfig". +// src/next/services/mockServices.d.ts:15:5 - (ae-undocumented) Missing documentation for "rootConfig". +// src/next/services/mockServices.d.ts:16:9 - (ae-undocumented) Missing documentation for "Options". +// src/next/services/mockServices.d.ts:19:15 - (ae-undocumented) Missing documentation for "factory". +// src/next/services/mockServices.d.ts:21:5 - (ae-undocumented) Missing documentation for "rootLogger". +// src/next/services/mockServices.d.ts:22:5 - (ae-undocumented) Missing documentation for "rootLogger". +// src/next/services/mockServices.d.ts:23:9 - (ae-undocumented) Missing documentation for "Options". +// src/next/services/mockServices.d.ts:26:15 - (ae-undocumented) Missing documentation for "factory". +// src/next/services/mockServices.d.ts:27:15 - (ae-undocumented) Missing documentation for "mock". +// src/next/services/mockServices.d.ts:29:5 - (ae-undocumented) Missing documentation for "tokenManager". +// src/next/services/mockServices.d.ts:30:5 - (ae-undocumented) Missing documentation for "tokenManager". +// src/next/services/mockServices.d.ts:31:15 - (ae-undocumented) Missing documentation for "factory". +// src/next/services/mockServices.d.ts:32:15 - (ae-undocumented) Missing documentation for "mock". +// src/next/services/mockServices.d.ts:34:5 - (ae-undocumented) Missing documentation for "identity". +// src/next/services/mockServices.d.ts:35:5 - (ae-undocumented) Missing documentation for "identity". +// src/next/services/mockServices.d.ts:36:15 - (ae-undocumented) Missing documentation for "factory". +// src/next/services/mockServices.d.ts:37:15 - (ae-undocumented) Missing documentation for "mock". +// src/next/services/mockServices.d.ts:39:5 - (ae-undocumented) Missing documentation for "auth". +// src/next/services/mockServices.d.ts:43:5 - (ae-undocumented) Missing documentation for "auth". +// src/next/services/mockServices.d.ts:44:15 - (ae-undocumented) Missing documentation for "factory". +// src/next/services/mockServices.d.ts:45:15 - (ae-undocumented) Missing documentation for "mock". +// src/next/services/mockServices.d.ts:47:5 - (ae-undocumented) Missing documentation for "discovery". +// src/next/services/mockServices.d.ts:48:5 - (ae-undocumented) Missing documentation for "discovery". +// src/next/services/mockServices.d.ts:49:15 - (ae-undocumented) Missing documentation for "factory". +// src/next/services/mockServices.d.ts:50:15 - (ae-undocumented) Missing documentation for "mock". +// src/next/services/mockServices.d.ts:70:5 - (ae-undocumented) Missing documentation for "httpAuth". +// src/next/services/mockServices.d.ts:81:15 - (ae-undocumented) Missing documentation for "mock". +// src/next/services/mockServices.d.ts:91:5 - (ae-undocumented) Missing documentation for "userInfo". +// src/next/services/mockServices.d.ts:99:15 - (ae-undocumented) Missing documentation for "mock". +// src/next/services/mockServices.d.ts:101:5 - (ae-undocumented) Missing documentation for "cache". +// src/next/services/mockServices.d.ts:102:15 - (ae-undocumented) Missing documentation for "factory". +// src/next/services/mockServices.d.ts:103:15 - (ae-undocumented) Missing documentation for "mock". +// src/next/services/mockServices.d.ts:105:5 - (ae-undocumented) Missing documentation for "database". +// src/next/services/mockServices.d.ts:106:15 - (ae-undocumented) Missing documentation for "factory". +// src/next/services/mockServices.d.ts:107:15 - (ae-undocumented) Missing documentation for "mock". +// src/next/services/mockServices.d.ts:109:5 - (ae-undocumented) Missing documentation for "rootHealth". +// src/next/services/mockServices.d.ts:110:15 - (ae-undocumented) Missing documentation for "factory". +// src/next/services/mockServices.d.ts:111:15 - (ae-undocumented) Missing documentation for "mock". +// src/next/services/mockServices.d.ts:113:5 - (ae-undocumented) Missing documentation for "httpRouter". +// src/next/services/mockServices.d.ts:114:15 - (ae-undocumented) Missing documentation for "factory". +// src/next/services/mockServices.d.ts:115:15 - (ae-undocumented) Missing documentation for "mock". +// src/next/services/mockServices.d.ts:117:5 - (ae-undocumented) Missing documentation for "rootHttpRouter". +// src/next/services/mockServices.d.ts:118:15 - (ae-undocumented) Missing documentation for "factory". +// src/next/services/mockServices.d.ts:119:15 - (ae-undocumented) Missing documentation for "mock". +// src/next/services/mockServices.d.ts:121:5 - (ae-undocumented) Missing documentation for "lifecycle". +// src/next/services/mockServices.d.ts:122:15 - (ae-undocumented) Missing documentation for "factory". +// src/next/services/mockServices.d.ts:123:15 - (ae-undocumented) Missing documentation for "mock". +// src/next/services/mockServices.d.ts:125:5 - (ae-undocumented) Missing documentation for "logger". +// src/next/services/mockServices.d.ts:126:15 - (ae-undocumented) Missing documentation for "factory". +// src/next/services/mockServices.d.ts:127:15 - (ae-undocumented) Missing documentation for "mock". +// src/next/services/mockServices.d.ts:129:5 - (ae-undocumented) Missing documentation for "permissions". +// src/next/services/mockServices.d.ts:130:15 - (ae-undocumented) Missing documentation for "factory". +// src/next/services/mockServices.d.ts:131:15 - (ae-undocumented) Missing documentation for "mock". +// src/next/services/mockServices.d.ts:133:5 - (ae-undocumented) Missing documentation for "rootLifecycle". +// src/next/services/mockServices.d.ts:134:15 - (ae-undocumented) Missing documentation for "factory". +// src/next/services/mockServices.d.ts:135:15 - (ae-undocumented) Missing documentation for "mock". +// src/next/services/mockServices.d.ts:137:5 - (ae-undocumented) Missing documentation for "scheduler". +// src/next/services/mockServices.d.ts:138:15 - (ae-undocumented) Missing documentation for "factory". +// src/next/services/mockServices.d.ts:139:15 - (ae-undocumented) Missing documentation for "mock". +// src/next/services/mockServices.d.ts:141:5 - (ae-undocumented) Missing documentation for "urlReader". +// src/next/services/mockServices.d.ts:142:15 - (ae-undocumented) Missing documentation for "factory". +// src/next/services/mockServices.d.ts:143:15 - (ae-undocumented) Missing documentation for "mock". +// src/next/services/mockServices.d.ts:145:5 - (ae-undocumented) Missing documentation for "events". +// src/next/services/mockServices.d.ts:146:15 - (ae-undocumented) Missing documentation for "factory". +// src/next/services/mockServices.d.ts:147:15 - (ae-undocumented) Missing documentation for "mock". +// src/next/wiring/TestBackend.d.ts:4:1 - (ae-undocumented) Missing documentation for "TestBackendOptions". +// src/next/wiring/TestBackend.d.ts:5:5 - (ae-undocumented) Missing documentation for "extensionPoints". +// src/next/wiring/TestBackend.d.ts:13:5 - (ae-undocumented) Missing documentation for "features". +// src/next/wiring/TestBackend.d.ts:18:1 - (ae-undocumented) Missing documentation for "TestBackend". +// src/next/wiring/TestBackend.d.ts:29:1 - (ae-undocumented) Missing documentation for "startTestBackend". ``` diff --git a/packages/catalog-client/api-report.md b/packages/catalog-client/api-report.api.md similarity index 92% rename from packages/catalog-client/api-report.md rename to packages/catalog-client/api-report.api.md index 203028edce..aba99961f0 100644 --- a/packages/catalog-client/api-report.md +++ b/packages/catalog-client/api-report.api.md @@ -302,4 +302,13 @@ export type ValidateEntityResponse = valid: false; errors: SerializedError[]; }; + +// Warnings were encountered during analysis: +// +// src/CatalogClient.d.ts:50:5 - (ae-undocumented) Missing documentation for "getEntityByName". +// src/types/api.d.ts:154:5 - (ae-undocumented) Missing documentation for "items". +// src/types/api.d.ts:203:5 - (ae-undocumented) Missing documentation for "entityRef". +// src/types/api.d.ts:211:5 - (ae-undocumented) Missing documentation for "rootEntityRef". +// src/types/api.d.ts:212:5 - (ae-undocumented) Missing documentation for "items". +// src/types/api.d.ts:305:5 - (ae-undocumented) Missing documentation for "token". ``` diff --git a/packages/catalog-model/api-report-alpha.md b/packages/catalog-model/api-report-alpha.api.md similarity index 100% rename from packages/catalog-model/api-report-alpha.md rename to packages/catalog-model/api-report-alpha.api.md diff --git a/packages/catalog-model/api-report.md b/packages/catalog-model/api-report.api.md similarity index 70% rename from packages/catalog-model/api-report.md rename to packages/catalog-model/api-report.api.md index ec03ce41e1..07dc6affd7 100644 --- a/packages/catalog-model/api-report.md +++ b/packages/catalog-model/api-report.api.md @@ -499,4 +499,52 @@ export type Validators = { isValidAnnotationValue(value: unknown): boolean; isValidTag(value: unknown): boolean; }; + +// Warnings were encountered during analysis: +// +// src/entity/conditions.d.ts:6:1 - (ae-undocumented) Missing documentation for "isApiEntity". +// src/entity/conditions.d.ts:10:1 - (ae-undocumented) Missing documentation for "isComponentEntity". +// src/entity/conditions.d.ts:14:1 - (ae-undocumented) Missing documentation for "isDomainEntity". +// src/entity/conditions.d.ts:18:1 - (ae-undocumented) Missing documentation for "isGroupEntity". +// src/entity/conditions.d.ts:22:1 - (ae-undocumented) Missing documentation for "isLocationEntity". +// src/entity/conditions.d.ts:26:1 - (ae-undocumented) Missing documentation for "isResourceEntity". +// src/entity/conditions.d.ts:30:1 - (ae-undocumented) Missing documentation for "isSystemEntity". +// src/entity/conditions.d.ts:34:1 - (ae-undocumented) Missing documentation for "isUserEntity". +// src/entity/policies/DefaultNamespaceEntityPolicy.d.ts:11:5 - (ae-undocumented) Missing documentation for "enforce". +// src/entity/policies/FieldFormatEntityPolicy.d.ts:17:5 - (ae-undocumented) Missing documentation for "enforce". +// src/entity/policies/GroupDefaultParentEntityPolicy.d.ts:14:5 - (ae-undocumented) Missing documentation for "enforce". +// src/entity/policies/NoForeignRootFieldsEntityPolicy.d.ts:11:5 - (ae-undocumented) Missing documentation for "enforce". +// src/entity/policies/SchemaValidEntityPolicy.d.ts:16:5 - (ae-undocumented) Missing documentation for "enforce". +// src/kinds/ApiEntityV1alpha1.d.ts:12:5 - (ae-undocumented) Missing documentation for "apiVersion". +// src/kinds/ApiEntityV1alpha1.d.ts:13:5 - (ae-undocumented) Missing documentation for "kind". +// src/kinds/ApiEntityV1alpha1.d.ts:14:5 - (ae-undocumented) Missing documentation for "spec". +// src/kinds/ComponentEntityV1alpha1.d.ts:12:5 - (ae-undocumented) Missing documentation for "apiVersion". +// src/kinds/ComponentEntityV1alpha1.d.ts:13:5 - (ae-undocumented) Missing documentation for "kind". +// src/kinds/ComponentEntityV1alpha1.d.ts:14:5 - (ae-undocumented) Missing documentation for "spec". +// src/kinds/DomainEntityV1alpha1.d.ts:12:5 - (ae-undocumented) Missing documentation for "apiVersion". +// src/kinds/DomainEntityV1alpha1.d.ts:13:5 - (ae-undocumented) Missing documentation for "kind". +// src/kinds/DomainEntityV1alpha1.d.ts:14:5 - (ae-undocumented) Missing documentation for "spec". +// src/kinds/GroupEntityV1alpha1.d.ts:8:5 - (ae-undocumented) Missing documentation for "apiVersion". +// src/kinds/GroupEntityV1alpha1.d.ts:9:5 - (ae-undocumented) Missing documentation for "kind". +// src/kinds/GroupEntityV1alpha1.d.ts:10:5 - (ae-undocumented) Missing documentation for "spec". +// src/kinds/LocationEntityV1alpha1.d.ts:8:5 - (ae-undocumented) Missing documentation for "apiVersion". +// src/kinds/LocationEntityV1alpha1.d.ts:9:5 - (ae-undocumented) Missing documentation for "kind". +// src/kinds/LocationEntityV1alpha1.d.ts:10:5 - (ae-undocumented) Missing documentation for "spec". +// src/kinds/ResourceEntityV1alpha1.d.ts:12:5 - (ae-undocumented) Missing documentation for "apiVersion". +// src/kinds/ResourceEntityV1alpha1.d.ts:13:5 - (ae-undocumented) Missing documentation for "kind". +// src/kinds/ResourceEntityV1alpha1.d.ts:14:5 - (ae-undocumented) Missing documentation for "spec". +// src/kinds/SystemEntityV1alpha1.d.ts:12:5 - (ae-undocumented) Missing documentation for "apiVersion". +// src/kinds/SystemEntityV1alpha1.d.ts:13:5 - (ae-undocumented) Missing documentation for "kind". +// src/kinds/SystemEntityV1alpha1.d.ts:14:5 - (ae-undocumented) Missing documentation for "spec". +// src/kinds/UserEntityV1alpha1.d.ts:8:5 - (ae-undocumented) Missing documentation for "apiVersion". +// src/kinds/UserEntityV1alpha1.d.ts:9:5 - (ae-undocumented) Missing documentation for "kind". +// src/kinds/UserEntityV1alpha1.d.ts:10:5 - (ae-undocumented) Missing documentation for "spec". +// src/validation/KubernetesValidatorFunctions.d.ts:11:5 - (ae-undocumented) Missing documentation for "isValidApiVersion". +// src/validation/KubernetesValidatorFunctions.d.ts:12:5 - (ae-undocumented) Missing documentation for "isValidKind". +// src/validation/KubernetesValidatorFunctions.d.ts:13:5 - (ae-undocumented) Missing documentation for "isValidObjectName". +// src/validation/KubernetesValidatorFunctions.d.ts:14:5 - (ae-undocumented) Missing documentation for "isValidNamespace". +// src/validation/KubernetesValidatorFunctions.d.ts:15:5 - (ae-undocumented) Missing documentation for "isValidLabelKey". +// src/validation/KubernetesValidatorFunctions.d.ts:16:5 - (ae-undocumented) Missing documentation for "isValidLabelValue". +// src/validation/KubernetesValidatorFunctions.d.ts:17:5 - (ae-undocumented) Missing documentation for "isValidAnnotationKey". +// src/validation/KubernetesValidatorFunctions.d.ts:18:5 - (ae-undocumented) Missing documentation for "isValidAnnotationValue". ``` diff --git a/packages/cli-common/api-report.md b/packages/cli-common/api-report.api.md similarity index 100% rename from packages/cli-common/api-report.md rename to packages/cli-common/api-report.api.md diff --git a/packages/cli-node/api-report.md b/packages/cli-node/api-report.api.md similarity index 67% rename from packages/cli-node/api-report.md rename to packages/cli-node/api-report.api.md index f22583dd25..8a0b9bc6df 100644 --- a/packages/cli-node/api-report.md +++ b/packages/cli-node/api-report.api.md @@ -175,4 +175,28 @@ export class PackageRoles { static getRoleFromPackage(pkgJson: unknown): PackageRole | undefined; static getRoleInfo(role: string): PackageRoleInfo; } + +// Warnings were encountered during analysis: +// +// src/monorepo/PackageGraph.d.ts:10:5 - (ae-undocumented) Missing documentation for "name". +// src/monorepo/PackageGraph.d.ts:11:5 - (ae-undocumented) Missing documentation for "version". +// src/monorepo/PackageGraph.d.ts:12:5 - (ae-undocumented) Missing documentation for "private". +// src/monorepo/PackageGraph.d.ts:13:5 - (ae-undocumented) Missing documentation for "main". +// src/monorepo/PackageGraph.d.ts:14:5 - (ae-undocumented) Missing documentation for "module". +// src/monorepo/PackageGraph.d.ts:15:5 - (ae-undocumented) Missing documentation for "types". +// src/monorepo/PackageGraph.d.ts:16:5 - (ae-undocumented) Missing documentation for "scripts". +// src/monorepo/PackageGraph.d.ts:19:5 - (ae-undocumented) Missing documentation for "bundled". +// src/monorepo/PackageGraph.d.ts:20:5 - (ae-undocumented) Missing documentation for "backstage". +// src/monorepo/PackageGraph.d.ts:36:5 - (ae-undocumented) Missing documentation for "exports". +// src/monorepo/PackageGraph.d.ts:37:5 - (ae-undocumented) Missing documentation for "typesVersions". +// src/monorepo/PackageGraph.d.ts:38:5 - (ae-undocumented) Missing documentation for "files". +// src/monorepo/PackageGraph.d.ts:39:5 - (ae-undocumented) Missing documentation for "publishConfig". +// src/monorepo/PackageGraph.d.ts:44:5 - (ae-undocumented) Missing documentation for "repository". +// src/monorepo/PackageGraph.d.ts:49:5 - (ae-undocumented) Missing documentation for "dependencies". +// src/monorepo/PackageGraph.d.ts:52:5 - (ae-undocumented) Missing documentation for "peerDependencies". +// src/monorepo/PackageGraph.d.ts:55:5 - (ae-undocumented) Missing documentation for "devDependencies". +// src/monorepo/PackageGraph.d.ts:58:5 - (ae-undocumented) Missing documentation for "optionalDependencies". +// src/roles/types.d.ts:25:5 - (ae-undocumented) Missing documentation for "role". +// src/roles/types.d.ts:26:5 - (ae-undocumented) Missing documentation for "platform". +// src/roles/types.d.ts:27:5 - (ae-undocumented) Missing documentation for "output". ``` diff --git a/packages/config-loader/api-report.md b/packages/config-loader/api-report.api.md similarity index 72% rename from packages/config-loader/api-report.md rename to packages/config-loader/api-report.api.md index e2741d609c..42b6dcab96 100644 --- a/packages/config-loader/api-report.md +++ b/packages/config-loader/api-report.api.md @@ -284,4 +284,32 @@ export type TransformFunc = ( path: string; }, ) => T | undefined; + +// Warnings were encountered during analysis: +// +// src/loader.d.ts:6:1 - (ae-undocumented) Missing documentation for "ConfigTarget". +// src/loader.d.ts:15:1 - (ae-undocumented) Missing documentation for "LoadConfigOptionsWatch". +// src/loader.d.ts:29:1 - (ae-undocumented) Missing documentation for "LoadConfigOptionsRemote". +// src/sources/ConfigSources.d.ts:42:5 - (ae-undocumented) Missing documentation for "watch". +// src/sources/ConfigSources.d.ts:43:5 - (ae-undocumented) Missing documentation for "rootDir". +// src/sources/ConfigSources.d.ts:44:5 - (ae-undocumented) Missing documentation for "remote". +// src/sources/ConfigSources.d.ts:60:5 - (ae-undocumented) Missing documentation for "targets". +// src/sources/ConfigSources.d.ts:68:5 - (ae-undocumented) Missing documentation for "argv". +// src/sources/ConfigSources.d.ts:69:5 - (ae-undocumented) Missing documentation for "env". +// src/sources/EnvConfigSource.d.ts:46:5 - (ae-undocumented) Missing documentation for "readConfigData". +// src/sources/EnvConfigSource.d.ts:47:5 - (ae-undocumented) Missing documentation for "toString". +// src/sources/FileConfigSource.d.ts:40:5 - (ae-undocumented) Missing documentation for "readConfigData". +// src/sources/FileConfigSource.d.ts:41:5 - (ae-undocumented) Missing documentation for "toString". +// src/sources/MutableConfigSource.d.ts:9:5 - (ae-undocumented) Missing documentation for "data". +// src/sources/MutableConfigSource.d.ts:10:5 - (ae-undocumented) Missing documentation for "context". +// src/sources/MutableConfigSource.d.ts:27:5 - (ae-undocumented) Missing documentation for "readConfigData". +// src/sources/MutableConfigSource.d.ts:38:5 - (ae-undocumented) Missing documentation for "toString". +// src/sources/RemoteConfigSource.d.ts:39:5 - (ae-undocumented) Missing documentation for "readConfigData". +// src/sources/RemoteConfigSource.d.ts:40:5 - (ae-undocumented) Missing documentation for "toString". +// src/sources/StaticConfigSource.d.ts:9:5 - (ae-undocumented) Missing documentation for "data". +// src/sources/StaticConfigSource.d.ts:10:5 - (ae-undocumented) Missing documentation for "context". +// src/sources/StaticConfigSource.d.ts:28:5 - (ae-undocumented) Missing documentation for "readConfigData". +// src/sources/StaticConfigSource.d.ts:29:5 - (ae-undocumented) Missing documentation for "toString". +// src/sources/types.d.ts:19:5 - (ae-undocumented) Missing documentation for "signal". +// src/sources/types.d.ts:54:5 - (ae-undocumented) Missing documentation for "readConfigData". ``` diff --git a/packages/config/api-report.md b/packages/config/api-report.api.md similarity index 100% rename from packages/config/api-report.md rename to packages/config/api-report.api.md diff --git a/packages/core-app-api/api-report.md b/packages/core-app-api/api-report.api.md similarity index 70% rename from packages/core-app-api/api-report.md rename to packages/core-app-api/api-report.api.md index 3d2c44a148..a326555cc1 100644 --- a/packages/core-app-api/api-report.md +++ b/packages/core-app-api/api-report.api.md @@ -683,4 +683,70 @@ export class WebStorage implements StorageApi { // (undocumented) snapshot(key: string): StorageValueSnapshot; } + +// Warnings were encountered during analysis: +// +// src/apis/implementations/AlertApi/AlertApiForwarder.d.ts:10:5 - (ae-undocumented) Missing documentation for "post". +// src/apis/implementations/AlertApi/AlertApiForwarder.d.ts:11:5 - (ae-undocumented) Missing documentation for "alert$". +// src/apis/implementations/AnalyticsApi/NoOpAnalyticsApi.d.ts:8:5 - (ae-undocumented) Missing documentation for "captureEvent". +// src/apis/implementations/AppThemeApi/AppThemeSelector.d.ts:11:5 - (ae-undocumented) Missing documentation for "createWithStorage". +// src/apis/implementations/AppThemeApi/AppThemeSelector.d.ts:15:5 - (ae-undocumented) Missing documentation for "getInstalledThemes". +// src/apis/implementations/AppThemeApi/AppThemeSelector.d.ts:16:5 - (ae-undocumented) Missing documentation for "activeThemeId$". +// src/apis/implementations/AppThemeApi/AppThemeSelector.d.ts:17:5 - (ae-undocumented) Missing documentation for "getActiveThemeId". +// src/apis/implementations/AppThemeApi/AppThemeSelector.d.ts:18:5 - (ae-undocumented) Missing documentation for "setActiveThemeId". +// src/apis/implementations/DiscoveryApi/FrontendHostDiscovery.d.ts:37:5 - (ae-undocumented) Missing documentation for "getBaseUrl". +// src/apis/implementations/DiscoveryApi/UrlPatternDiscovery.d.ts:19:5 - (ae-undocumented) Missing documentation for "getBaseUrl". +// src/apis/implementations/ErrorApi/ErrorAlerter.d.ts:12:5 - (ae-undocumented) Missing documentation for "post". +// src/apis/implementations/ErrorApi/ErrorAlerter.d.ts:13:5 - (ae-undocumented) Missing documentation for "error$". +// src/apis/implementations/ErrorApi/ErrorApiForwarder.d.ts:10:5 - (ae-undocumented) Missing documentation for "post". +// src/apis/implementations/ErrorApi/ErrorApiForwarder.d.ts:11:5 - (ae-undocumented) Missing documentation for "error$". +// src/apis/implementations/FeatureFlagsApi/LocalStorageFeatureFlags.d.ts:12:5 - (ae-undocumented) Missing documentation for "registerFlag". +// src/apis/implementations/FeatureFlagsApi/LocalStorageFeatureFlags.d.ts:13:5 - (ae-undocumented) Missing documentation for "getRegisteredFlags". +// src/apis/implementations/FeatureFlagsApi/LocalStorageFeatureFlags.d.ts:14:5 - (ae-undocumented) Missing documentation for "isActive". +// src/apis/implementations/FeatureFlagsApi/LocalStorageFeatureFlags.d.ts:15:5 - (ae-undocumented) Missing documentation for "save". +// src/apis/implementations/OAuthRequestApi/OAuthRequestManager.d.ts:16:5 - (ae-undocumented) Missing documentation for "createAuthRequester". +// src/apis/implementations/OAuthRequestApi/OAuthRequestManager.d.ts:18:5 - (ae-undocumented) Missing documentation for "authRequest$". +// src/apis/implementations/StorageApi/WebStorage.d.ts:14:5 - (ae-undocumented) Missing documentation for "create". +// src/apis/implementations/StorageApi/WebStorage.d.ts:19:5 - (ae-undocumented) Missing documentation for "get". +// src/apis/implementations/StorageApi/WebStorage.d.ts:20:5 - (ae-undocumented) Missing documentation for "snapshot". +// src/apis/implementations/StorageApi/WebStorage.d.ts:21:5 - (ae-undocumented) Missing documentation for "forBucket". +// src/apis/implementations/StorageApi/WebStorage.d.ts:22:5 - (ae-undocumented) Missing documentation for "set". +// src/apis/implementations/StorageApi/WebStorage.d.ts:23:5 - (ae-undocumented) Missing documentation for "remove". +// src/apis/implementations/StorageApi/WebStorage.d.ts:24:5 - (ae-undocumented) Missing documentation for "observe$". +// src/apis/implementations/auth/atlassian/AtlassianAuth.d.ts:9:5 - (ae-undocumented) Missing documentation for "create". +// src/apis/implementations/auth/bitbucket/BitbucketAuth.d.ts:18:5 - (ae-undocumented) Missing documentation for "create". +// src/apis/implementations/auth/bitbucketServer/BitbucketServerAuth.d.ts:17:5 - (ae-undocumented) Missing documentation for "create". +// src/apis/implementations/auth/github/GithubAuth.d.ts:9:5 - (ae-undocumented) Missing documentation for "create". +// src/apis/implementations/auth/gitlab/GitlabAuth.d.ts:9:5 - (ae-undocumented) Missing documentation for "create". +// src/apis/implementations/auth/google/GoogleAuth.d.ts:9:5 - (ae-undocumented) Missing documentation for "create". +// src/apis/implementations/auth/microsoft/MicrosoftAuth.d.ts:17:5 - (ae-undocumented) Missing documentation for "create". +// src/apis/implementations/auth/microsoft/MicrosoftAuth.d.ts:22:5 - (ae-undocumented) Missing documentation for "getAccessToken". +// src/apis/implementations/auth/microsoft/MicrosoftAuth.d.ts:23:5 - (ae-undocumented) Missing documentation for "getIdToken". +// src/apis/implementations/auth/microsoft/MicrosoftAuth.d.ts:24:5 - (ae-undocumented) Missing documentation for "getProfile". +// src/apis/implementations/auth/microsoft/MicrosoftAuth.d.ts:25:5 - (ae-undocumented) Missing documentation for "getBackstageIdentity". +// src/apis/implementations/auth/microsoft/MicrosoftAuth.d.ts:26:5 - (ae-undocumented) Missing documentation for "signIn". +// src/apis/implementations/auth/microsoft/MicrosoftAuth.d.ts:27:5 - (ae-undocumented) Missing documentation for "signOut". +// src/apis/implementations/auth/microsoft/MicrosoftAuth.d.ts:28:5 - (ae-undocumented) Missing documentation for "sessionState$". +// src/apis/implementations/auth/oauth2/OAuth2.d.ts:33:5 - (ae-undocumented) Missing documentation for "create". +// src/apis/implementations/auth/oauth2/OAuth2.d.ts:37:5 - (ae-undocumented) Missing documentation for "signIn". +// src/apis/implementations/auth/oauth2/OAuth2.d.ts:38:5 - (ae-undocumented) Missing documentation for "signOut". +// src/apis/implementations/auth/oauth2/OAuth2.d.ts:39:5 - (ae-undocumented) Missing documentation for "sessionState$". +// src/apis/implementations/auth/oauth2/OAuth2.d.ts:40:5 - (ae-undocumented) Missing documentation for "getAccessToken". +// src/apis/implementations/auth/oauth2/OAuth2.d.ts:41:5 - (ae-undocumented) Missing documentation for "getIdToken". +// src/apis/implementations/auth/oauth2/OAuth2.d.ts:42:5 - (ae-undocumented) Missing documentation for "getBackstageIdentity". +// src/apis/implementations/auth/oauth2/OAuth2.d.ts:43:5 - (ae-undocumented) Missing documentation for "getProfile". +// src/apis/implementations/auth/okta/OktaAuth.d.ts:9:5 - (ae-undocumented) Missing documentation for "create". +// src/apis/implementations/auth/onelogin/OneLoginAuth.d.ts:19:5 - (ae-undocumented) Missing documentation for "create". +// src/apis/implementations/auth/saml/SamlAuth.d.ts:15:5 - (ae-undocumented) Missing documentation for "create". +// src/apis/implementations/auth/saml/SamlAuth.d.ts:16:5 - (ae-undocumented) Missing documentation for "sessionState$". +// src/apis/implementations/auth/saml/SamlAuth.d.ts:18:5 - (ae-undocumented) Missing documentation for "signIn". +// src/apis/implementations/auth/saml/SamlAuth.d.ts:19:5 - (ae-undocumented) Missing documentation for "signOut". +// src/apis/implementations/auth/saml/SamlAuth.d.ts:20:5 - (ae-undocumented) Missing documentation for "getBackstageIdentity". +// src/apis/implementations/auth/saml/SamlAuth.d.ts:21:5 - (ae-undocumented) Missing documentation for "getProfile". +// src/apis/implementations/auth/vmwareCloud/VMwareCloudAuth.d.ts:9:5 - (ae-undocumented) Missing documentation for "create". +// src/apis/system/ApiFactoryRegistry.d.ts:29:5 - (ae-undocumented) Missing documentation for "get". +// src/apis/system/ApiFactoryRegistry.d.ts:32:5 - (ae-undocumented) Missing documentation for "getAllApis". +// src/apis/system/ApiResolver.d.ts:18:5 - (ae-undocumented) Missing documentation for "get". +// src/apis/system/types.d.ts:5:1 - (ae-undocumented) Missing documentation for "ApiFactoryHolder". +// src/app/AppRouter.d.ts:14:5 - (ae-undocumented) Missing documentation for "children". ``` diff --git a/packages/core-compat-api/api-report.md b/packages/core-compat-api/api-report.api.md similarity index 93% rename from packages/core-compat-api/api-report.md rename to packages/core-compat-api/api-report.api.md index ddb3bc6bf4..6d1390fd2f 100644 --- a/packages/core-compat-api/api-report.md +++ b/packages/core-compat-api/api-report.api.md @@ -113,5 +113,10 @@ export type ToNewRouteRef = ? ExternalRouteRef_2 : never; +// Warnings were encountered during analysis: +// +// src/apis/implementations/AnalyticsApi/NoOpAnalyticsApi.d.ts:9:5 - (ae-undocumented) Missing documentation for "captureEvent". +// src/convertLegacyApp.d.ts:4:1 - (ae-undocumented) Missing documentation for "convertLegacyApp". + // (No @packageDocumentation comment for this package) ``` diff --git a/packages/core-components/api-report-alpha.md b/packages/core-components/api-report-alpha.api.md similarity index 95% rename from packages/core-components/api-report-alpha.md rename to packages/core-components/api-report-alpha.api.md index 1f4b999232..ea44f92093 100644 --- a/packages/core-components/api-report-alpha.md +++ b/packages/core-components/api-report-alpha.api.md @@ -54,5 +54,9 @@ export const coreComponentsTranslationRef: TranslationRef< } >; +// Warnings were encountered during analysis: +// +// src/translation.d.ts:2:22 - (ae-undocumented) Missing documentation for "coreComponentsTranslationRef". + // (No @packageDocumentation comment for this package) ``` diff --git a/packages/core-components/api-report-testUtils.md b/packages/core-components/api-report-testUtils.api.md similarity index 100% rename from packages/core-components/api-report-testUtils.md rename to packages/core-components/api-report-testUtils.api.md diff --git a/packages/core-components/api-report.md b/packages/core-components/api-report.api.md similarity index 72% rename from packages/core-components/api-report.md rename to packages/core-components/api-report.api.md index 9b4e9f6798..5b91140856 100644 --- a/packages/core-components/api-report.md +++ b/packages/core-components/api-report.api.md @@ -1530,21 +1530,14 @@ export class UserIdentity implements IdentityApi { getIdToken?: () => Promise; signOut?: () => Promise; }): IdentityApi; - // (undocumented) getBackstageIdentity(): Promise; - // (undocumented) getCredentials(): Promise<{ token?: string | undefined; }>; - // (undocumented) getIdToken(): Promise; - // (undocumented) getProfile(): ProfileInfo; - // (undocumented) getProfileInfo(): Promise; - // (undocumented) getUserId(): string; - // (undocumented) signOut(): Promise; } @@ -1580,9 +1573,182 @@ export type WarningPanelClassKey = // Warnings were encountered during analysis: // +// src/components/AutoLogout/AutoLogout.d.ts:3:1 - (ae-undocumented) Missing documentation for "AutoLogoutProps". +// src/components/Avatar/Avatar.d.ts:3:1 - (ae-undocumented) Missing documentation for "AvatarClassKey". +// src/components/DependencyGraph/DefaultLabel.d.ts:4:1 - (ae-undocumented) Missing documentation for "DependencyGraphDefaultLabelClassKey". +// src/components/DependencyGraph/DefaultNode.d.ts:4:1 - (ae-undocumented) Missing documentation for "DependencyGraphDefaultNodeClassKey". +// src/components/DependencyGraph/Edge.d.ts:15:1 - (ae-undocumented) Missing documentation for "DependencyGraphEdgeClassKey". +// src/components/DependencyGraph/Node.d.ts:5:1 - (ae-undocumented) Missing documentation for "DependencyGraphNodeClassKey". // src/components/DependencyGraph/types.d.ts:22:9 - (ae-unresolved-link) The @link reference could not be resolved: The package "@backstage/core-components" does not have an export "DependencyNode" // src/components/DependencyGraph/types.d.ts:26:9 - (ae-unresolved-link) The @link reference could not be resolved: The package "@backstage/core-components" does not have an export "DependencyNode" +// src/components/DependencyGraph/types.d.ts:143:9 - (ae-undocumented) Missing documentation for "LEFT". +// src/components/DependencyGraph/types.d.ts:144:9 - (ae-undocumented) Missing documentation for "RIGHT". +// src/components/DependencyGraph/types.d.ts:145:9 - (ae-undocumented) Missing documentation for "CENTER". +// src/components/DismissableBanner/DismissableBanner.d.ts:3:1 - (ae-undocumented) Missing documentation for "DismissableBannerClassKey". +// src/components/DismissableBanner/DismissableBanner.d.ts:8:1 - (ae-undocumented) Missing documentation for "DismissbleBannerClassKey". +// src/components/DismissableBanner/DismissableBanner.d.ts:16:22 - (ae-undocumented) Missing documentation for "DismissableBanner". +// src/components/EmptyState/EmptyState.d.ts:3:1 - (ae-undocumented) Missing documentation for "EmptyStateClassKey". +// src/components/EmptyState/EmptyStateImage.d.ts:6:1 - (ae-undocumented) Missing documentation for "EmptyStateImageClassKey". +// src/components/EmptyState/MissingAnnotationEmptyState.d.ts:10:1 - (ae-undocumented) Missing documentation for "MissingAnnotationEmptyStateClassKey". +// src/components/EmptyState/MissingAnnotationEmptyState.d.ts:15:1 - (ae-undocumented) Missing documentation for "MissingAnnotationEmptyState". +// src/components/ErrorPanel/ErrorPanel.d.ts:3:1 - (ae-undocumented) Missing documentation for "ErrorPanelClassKey". +// src/components/ErrorPanel/ErrorPanel.d.ts:5:1 - (ae-undocumented) Missing documentation for "ErrorPanelProps". +// src/components/FeatureDiscovery/FeatureCalloutCircular.d.ts:3:1 - (ae-undocumented) Missing documentation for "FeatureCalloutCircleClassKey". +// src/components/HeaderIconLinkRow/HeaderIconLinkRow.d.ts:4:1 - (ae-undocumented) Missing documentation for "HeaderIconLinkRowClassKey". +// src/components/HeaderIconLinkRow/IconLinkVertical.d.ts:2:1 - (ae-undocumented) Missing documentation for "IconLinkVerticalProps". +// src/components/HeaderIconLinkRow/IconLinkVertical.d.ts:12:1 - (ae-undocumented) Missing documentation for "IconLinkVerticalClassKey". +// src/components/HeaderIconLinkRow/IconLinkVertical.d.ts:14:1 - (ae-undocumented) Missing documentation for "IconLinkVertical". +// src/components/HorizontalScrollGrid/HorizontalScrollGrid.d.ts:8:1 - (ae-undocumented) Missing documentation for "HorizontalScrollGridClassKey". +// src/components/Lifecycle/Lifecycle.d.ts:7:1 - (ae-undocumented) Missing documentation for "LifecycleClassKey". +// src/components/Lifecycle/Lifecycle.d.ts:8:1 - (ae-undocumented) Missing documentation for "Lifecycle". +// src/components/Link/Link.d.ts:6:1 - (ae-undocumented) Missing documentation for "LinkProps". +// src/components/LinkButton/LinkButton.d.ts:24:22 - (ae-undocumented) Missing documentation for "Button". +// src/components/LinkButton/LinkButton.d.ts:29:1 - (ae-undocumented) Missing documentation for "ButtonProps". +// src/components/MarkdownContent/MarkdownContent.d.ts:3:1 - (ae-undocumented) Missing documentation for "MarkdownContentClassKey". +// src/components/OAuthRequestDialog/LoginRequestListItem.d.ts:3:1 - (ae-undocumented) Missing documentation for "LoginRequestListItemClassKey". +// src/components/OAuthRequestDialog/OAuthRequestDialog.d.ts:2:1 - (ae-undocumented) Missing documentation for "OAuthRequestDialogClassKey". +// src/components/OAuthRequestDialog/OAuthRequestDialog.d.ts:3:1 - (ae-undocumented) Missing documentation for "OAuthRequestDialog". +// src/components/OverflowTooltip/OverflowTooltip.d.ts:9:1 - (ae-undocumented) Missing documentation for "OverflowTooltipClassKey". +// src/components/OverflowTooltip/OverflowTooltip.d.ts:10:1 - (ae-undocumented) Missing documentation for "OverflowTooltip". +// src/components/Progress/Progress.d.ts:3:1 - (ae-undocumented) Missing documentation for "Progress". +// src/components/ProgressBars/Gauge.d.ts:4:1 - (ae-undocumented) Missing documentation for "GaugeClassKey". +// src/components/ProgressBars/Gauge.d.ts:6:1 - (ae-undocumented) Missing documentation for "GaugeProps". +// src/components/ProgressBars/Gauge.d.ts:19:1 - (ae-undocumented) Missing documentation for "GaugePropsGetColorOptions". +// src/components/ProgressBars/Gauge.d.ts:26:1 - (ae-undocumented) Missing documentation for "GaugePropsGetColor". +// src/components/ProgressBars/GaugeCard.d.ts:20:1 - (ae-undocumented) Missing documentation for "GaugeCardClassKey". +// src/components/ProgressBars/LinearGauge.d.ts:11:1 - (ae-undocumented) Missing documentation for "LinearGauge". +// src/components/ResponseErrorPanel/ResponseErrorPanel.d.ts:3:1 - (ae-undocumented) Missing documentation for "ResponseErrorPanelClassKey". +// src/components/Select/Select.d.ts:3:1 - (ae-undocumented) Missing documentation for "SelectInputBaseClassKey". +// src/components/Select/Select.d.ts:5:1 - (ae-undocumented) Missing documentation for "SelectClassKey". +// src/components/Select/Select.d.ts:7:1 - (ae-undocumented) Missing documentation for "SelectItem". +// src/components/Select/Select.d.ts:12:1 - (ae-undocumented) Missing documentation for "SelectedItems". +// src/components/Select/Select.d.ts:27:1 - (ae-undocumented) Missing documentation for "SelectComponent". +// src/components/Select/static/ClosedDropdown.d.ts:3:1 - (ae-undocumented) Missing documentation for "ClosedDropdownClassKey". +// src/components/Select/static/OpenedDropdown.d.ts:2:1 - (ae-undocumented) Missing documentation for "OpenedDropdownClassKey". +// src/components/SimpleStepper/SimpleStepper.d.ts:16:1 - (ae-undocumented) Missing documentation for "SimpleStepper". +// src/components/SimpleStepper/SimpleStepperFooter.d.ts:3:1 - (ae-undocumented) Missing documentation for "SimpleStepperFooterClassKey". +// src/components/SimpleStepper/SimpleStepperStep.d.ts:3:1 - (ae-undocumented) Missing documentation for "SimpleStepperStepClassKey". +// src/components/SimpleStepper/SimpleStepperStep.d.ts:4:1 - (ae-undocumented) Missing documentation for "SimpleStepperStep". +// src/components/Status/Status.d.ts:2:1 - (ae-undocumented) Missing documentation for "StatusClassKey". +// src/components/Status/Status.d.ts:3:1 - (ae-undocumented) Missing documentation for "StatusOK". +// src/components/Status/Status.d.ts:4:1 - (ae-undocumented) Missing documentation for "StatusWarning". +// src/components/Status/Status.d.ts:5:1 - (ae-undocumented) Missing documentation for "StatusError". +// src/components/Status/Status.d.ts:6:1 - (ae-undocumented) Missing documentation for "StatusPending". +// src/components/Status/Status.d.ts:7:1 - (ae-undocumented) Missing documentation for "StatusRunning". +// src/components/Status/Status.d.ts:8:1 - (ae-undocumented) Missing documentation for "StatusAborted". +// src/components/StructuredMetadataTable/MetadataTable.d.ts:3:1 - (ae-undocumented) Missing documentation for "MetadataTableTitleCellClassKey". +// src/components/StructuredMetadataTable/MetadataTable.d.ts:4:1 - (ae-undocumented) Missing documentation for "MetadataTableCellClassKey". +// src/components/StructuredMetadataTable/MetadataTable.d.ts:5:1 - (ae-undocumented) Missing documentation for "MetadataTableListClassKey". +// src/components/StructuredMetadataTable/MetadataTable.d.ts:6:1 - (ae-undocumented) Missing documentation for "MetadataTableListItemClassKey". +// src/components/StructuredMetadataTable/StructuredMetadataTable.d.ts:2:1 - (ae-undocumented) Missing documentation for "StructuredMetadataTableListClassKey". +// src/components/StructuredMetadataTable/StructuredMetadataTable.d.ts:3:1 - (ae-undocumented) Missing documentation for "StructuredMetadataTableNestedListClassKey". +// src/components/StructuredMetadataTable/StructuredMetadataTable.d.ts:5:1 - (ae-undocumented) Missing documentation for "StructuredMetadataTableProps". +// src/components/StructuredMetadataTable/StructuredMetadataTable.d.ts:6:5 - (ae-undocumented) Missing documentation for "metadata". +// src/components/StructuredMetadataTable/StructuredMetadataTable.d.ts:9:5 - (ae-undocumented) Missing documentation for "dense". +// src/components/StructuredMetadataTable/StructuredMetadataTable.d.ts:10:5 - (ae-undocumented) Missing documentation for "options". +// src/components/StructuredMetadataTable/StructuredMetadataTable.d.ts:21:1 - (ae-undocumented) Missing documentation for "StructuredMetadataTable". +// src/components/SupportButton/SupportButton.d.ts:8:1 - (ae-undocumented) Missing documentation for "SupportButtonClassKey". +// src/components/SupportButton/SupportButton.d.ts:9:1 - (ae-undocumented) Missing documentation for "SupportButton". +// src/components/TabbedLayout/RoutedTabs.d.ts:8:1 - (ae-undocumented) Missing documentation for "RoutedTabs". // src/components/TabbedLayout/RoutedTabs.d.ts:9:5 - (ae-forgotten-export) The symbol "SubRoute_2" needs to be exported by the entry point index.d.ts +// src/components/TabbedLayout/TabbedLayout.d.ts:29:1 - (ae-undocumented) Missing documentation for "TabbedLayout". +// src/components/TabbedLayout/TabbedLayout.d.ts:30:9 - (ae-undocumented) Missing documentation for "Route". +// src/components/Table/Filters.d.ts:3:1 - (ae-undocumented) Missing documentation for "TableFiltersClassKey". +// src/components/Table/SubvalueCell.d.ts:2:1 - (ae-undocumented) Missing documentation for "SubvalueCellClassKey". +// src/components/Table/SubvalueCell.d.ts:7:1 - (ae-undocumented) Missing documentation for "SubvalueCell". +// src/components/Table/Table.d.ts:4:1 - (ae-undocumented) Missing documentation for "TableHeaderClassKey". +// src/components/Table/Table.d.ts:5:1 - (ae-undocumented) Missing documentation for "TableToolbarClassKey". +// src/components/Table/Table.d.ts:7:1 - (ae-undocumented) Missing documentation for "FiltersContainerClassKey". +// src/components/Table/Table.d.ts:8:1 - (ae-undocumented) Missing documentation for "TableClassKey". +// src/components/Table/Table.d.ts:9:1 - (ae-undocumented) Missing documentation for "TableColumn". +// src/components/Table/Table.d.ts:10:5 - (ae-undocumented) Missing documentation for "highlight". +// src/components/Table/Table.d.ts:11:5 - (ae-undocumented) Missing documentation for "width". +// src/components/Table/Table.d.ts:13:1 - (ae-undocumented) Missing documentation for "TableFilter". +// src/components/Table/Table.d.ts:17:1 - (ae-undocumented) Missing documentation for "TableState". // src/components/Table/Table.d.ts:20:5 - (ae-forgotten-export) The symbol "SelectedFilters" needs to be exported by the entry point index.d.ts +// src/components/Table/Table.d.ts:22:1 - (ae-undocumented) Missing documentation for "TableProps". +// src/components/Table/Table.d.ts:23:5 - (ae-undocumented) Missing documentation for "columns". +// src/components/Table/Table.d.ts:24:5 - (ae-undocumented) Missing documentation for "subtitle". +// src/components/Table/Table.d.ts:25:5 - (ae-undocumented) Missing documentation for "filters". +// src/components/Table/Table.d.ts:26:5 - (ae-undocumented) Missing documentation for "initialState". +// src/components/Table/Table.d.ts:27:5 - (ae-undocumented) Missing documentation for "emptyContent". +// src/components/Table/Table.d.ts:28:5 - (ae-undocumented) Missing documentation for "isLoading". +// src/components/Table/Table.d.ts:29:5 - (ae-undocumented) Missing documentation for "onStateChange". +// src/components/Table/Table.d.ts:31:1 - (ae-undocumented) Missing documentation for "TableOptions". +// src/components/Table/Table.d.ts:44:1 - (ae-undocumented) Missing documentation for "Table". +// src/components/Table/Table.d.ts:45:1 - (ae-undocumented) Missing documentation for "Table". +// src/components/Table/Table.d.ts:46:9 - (ae-undocumented) Missing documentation for "icons". +// src/components/TrendLine/TrendLine.d.ts:3:1 - (ae-undocumented) Missing documentation for "TrendLine". +// src/components/WarningPanel/WarningPanel.d.ts:2:1 - (ae-undocumented) Missing documentation for "WarningPanelClassKey". +// src/hooks/useQueryParamState.d.ts:2:1 - (ae-undocumented) Missing documentation for "useQueryParamState". +// src/hooks/useSupportConfig.d.ts:1:1 - (ae-undocumented) Missing documentation for "SupportItemLink". +// src/hooks/useSupportConfig.d.ts:5:1 - (ae-undocumented) Missing documentation for "SupportItem". +// src/hooks/useSupportConfig.d.ts:10:1 - (ae-undocumented) Missing documentation for "SupportConfig". +// src/hooks/useSupportConfig.d.ts:14:1 - (ae-undocumented) Missing documentation for "useSupportConfig". +// src/icons/icons.d.ts:27:1 - (ae-undocumented) Missing documentation for "CatalogIcon". +// src/icons/icons.d.ts:29:1 - (ae-undocumented) Missing documentation for "ChatIcon". +// src/icons/icons.d.ts:31:1 - (ae-undocumented) Missing documentation for "DashboardIcon". +// src/icons/icons.d.ts:33:1 - (ae-undocumented) Missing documentation for "DocsIcon". +// src/icons/icons.d.ts:35:1 - (ae-undocumented) Missing documentation for "EmailIcon". +// src/icons/icons.d.ts:37:1 - (ae-undocumented) Missing documentation for "GitHubIcon". +// src/icons/icons.d.ts:39:1 - (ae-undocumented) Missing documentation for "GroupIcon". +// src/icons/icons.d.ts:41:1 - (ae-undocumented) Missing documentation for "HelpIcon". +// src/icons/icons.d.ts:43:1 - (ae-undocumented) Missing documentation for "UserIcon". +// src/icons/icons.d.ts:45:1 - (ae-undocumented) Missing documentation for "WarningIcon". +// src/layout/BottomLink/BottomLink.d.ts:3:1 - (ae-undocumented) Missing documentation for "BottomLinkClassKey". +// src/layout/BottomLink/BottomLink.d.ts:5:1 - (ae-undocumented) Missing documentation for "BottomLinkProps". +// src/layout/Breadcrumbs/Breadcrumbs.d.ts:5:1 - (ae-undocumented) Missing documentation for "BreadcrumbsClickableTextClassKey". +// src/layout/Breadcrumbs/Breadcrumbs.d.ts:7:1 - (ae-undocumented) Missing documentation for "BreadcrumbsStyledBoxClassKey". +// src/layout/Breadcrumbs/Breadcrumbs.d.ts:9:1 - (ae-undocumented) Missing documentation for "BreadcrumbsCurrentPageClassKey". +// src/layout/Content/Content.d.ts:3:1 - (ae-undocumented) Missing documentation for "BackstageContentClassKey". +// src/layout/ContentHeader/ContentHeader.d.ts:6:1 - (ae-undocumented) Missing documentation for "ContentHeaderClassKey". +// src/layout/ErrorBoundary/ErrorBoundary.d.ts:7:1 - (ae-undocumented) Missing documentation for "ErrorBoundaryProps". // src/layout/ErrorBoundary/ErrorBoundary.d.ts:8:5 - (ae-forgotten-export) The symbol "SlackChannel" needs to be exported by the entry point index.d.ts +// src/layout/ErrorBoundary/ErrorBoundary.d.ts:16:22 - (ae-undocumented) Missing documentation for "ErrorBoundary". +// src/layout/ErrorPage/ErrorPage.d.ts:10:1 - (ae-undocumented) Missing documentation for "ErrorPageClassKey". +// src/layout/ErrorPage/MicDrop.d.ts:2:1 - (ae-undocumented) Missing documentation for "MicDropClassKey". +// src/layout/Header/Header.d.ts:3:1 - (ae-undocumented) Missing documentation for "HeaderClassKey". +// src/layout/HeaderActionMenu/HeaderActionMenu.d.ts:6:1 - (ae-undocumented) Missing documentation for "HeaderActionMenuItem". +// src/layout/HeaderActionMenu/HeaderActionMenu.d.ts:16:1 - (ae-undocumented) Missing documentation for "HeaderActionMenuProps". +// src/layout/HeaderActionMenu/HeaderActionMenu.d.ts:22:1 - (ae-undocumented) Missing documentation for "HeaderActionMenu". +// src/layout/HeaderLabel/HeaderLabel.d.ts:3:1 - (ae-undocumented) Missing documentation for "HeaderLabelClassKey". +// src/layout/HeaderTabs/HeaderTabs.d.ts:4:1 - (ae-undocumented) Missing documentation for "HeaderTabsClassKey". +// src/layout/HeaderTabs/HeaderTabs.d.ts:5:1 - (ae-undocumented) Missing documentation for "Tab". +// src/layout/InfoCard/InfoCard.d.ts:6:1 - (ae-undocumented) Missing documentation for "InfoCardClassKey". +// src/layout/InfoCard/InfoCard.d.ts:8:1 - (ae-undocumented) Missing documentation for "CardActionsTopRightClassKey". +// src/layout/InfoCard/InfoCard.d.ts:10:1 - (ae-undocumented) Missing documentation for "InfoCardVariants". +// src/layout/ItemCard/ItemCardGrid.d.ts:4:1 - (ae-undocumented) Missing documentation for "ItemCardGridClassKey". +// src/layout/ItemCard/ItemCardGrid.d.ts:7:1 - (ae-undocumented) Missing documentation for "ItemCardGridProps". +// src/layout/ItemCard/ItemCardHeader.d.ts:4:1 - (ae-undocumented) Missing documentation for "ItemCardHeaderClassKey". +// src/layout/ItemCard/ItemCardHeader.d.ts:7:1 - (ae-undocumented) Missing documentation for "ItemCardHeaderProps". +// src/layout/Page/Page.d.ts:2:1 - (ae-undocumented) Missing documentation for "PageClassKey". +// src/layout/Page/Page.d.ts:7:1 - (ae-undocumented) Missing documentation for "Page". +// src/layout/Page/PageWithHeader.d.ts:6:1 - (ae-undocumented) Missing documentation for "PageWithHeader". +// src/layout/Sidebar/Bar.d.ts:4:1 - (ae-undocumented) Missing documentation for "SidebarClassKey". +// src/layout/Sidebar/Bar.d.ts:6:1 - (ae-undocumented) Missing documentation for "SidebarProps". +// src/layout/Sidebar/Items.d.ts:6:1 - (ae-undocumented) Missing documentation for "SidebarItemClassKey". +// src/layout/Sidebar/Items.d.ts:53:1 - (ae-undocumented) Missing documentation for "SidebarSearchField". +// src/layout/Sidebar/Items.d.ts:54:1 - (ae-undocumented) Missing documentation for "SidebarSpaceClassKey". +// src/layout/Sidebar/Items.d.ts:55:22 - (ae-undocumented) Missing documentation for "SidebarSpace". +// src/layout/Sidebar/Items.d.ts:56:1 - (ae-undocumented) Missing documentation for "SidebarSpacerClassKey". +// src/layout/Sidebar/Items.d.ts:57:22 - (ae-undocumented) Missing documentation for "SidebarSpacer". +// src/layout/Sidebar/Items.d.ts:58:1 - (ae-undocumented) Missing documentation for "SidebarDividerClassKey". +// src/layout/Sidebar/Items.d.ts:59:22 - (ae-undocumented) Missing documentation for "SidebarDivider". +// src/layout/Sidebar/Items.d.ts:60:22 - (ae-undocumented) Missing documentation for "SidebarScrollWrapper". +// src/layout/Sidebar/Page.d.ts:2:1 - (ae-undocumented) Missing documentation for "SidebarPageClassKey". +// src/layout/Sidebar/Page.d.ts:11:1 - (ae-undocumented) Missing documentation for "SidebarPage". +// src/layout/Sidebar/config.d.ts:3:1 - (ae-undocumented) Missing documentation for "SidebarOptions". +// src/layout/Sidebar/config.d.ts:8:1 - (ae-undocumented) Missing documentation for "SubmenuOptions". +// src/layout/Sidebar/config.d.ts:12:22 - (ae-undocumented) Missing documentation for "sidebarConfig". +// src/layout/Sidebar/config.d.ts:52:22 - (ae-undocumented) Missing documentation for "SIDEBAR_INTRO_LOCAL_STORAGE". +// src/layout/SignInPage/SignInPage.d.ts:16:1 - (ae-undocumented) Missing documentation for "SignInPage". +// src/layout/SignInPage/customProvider.d.ts:3:1 - (ae-undocumented) Missing documentation for "CustomProviderClassKey". +// src/layout/SignInPage/styles.d.ts:2:1 - (ae-undocumented) Missing documentation for "SignInPageClassKey". +// src/layout/SignInPage/types.d.ts:3:1 - (ae-undocumented) Missing documentation for "SignInProviderConfig". +// src/layout/SignInPage/types.d.ts:10:1 - (ae-undocumented) Missing documentation for "IdentityProviders". +// src/layout/TabbedCard/TabbedCard.d.ts:5:1 - (ae-undocumented) Missing documentation for "TabbedCardClassKey". +// src/layout/TabbedCard/TabbedCard.d.ts:7:1 - (ae-undocumented) Missing documentation for "BoldHeaderClassKey". +// src/layout/TabbedCard/TabbedCard.d.ts:18:1 - (ae-undocumented) Missing documentation for "TabbedCard". +// src/layout/TabbedCard/TabbedCard.d.ts:20:1 - (ae-undocumented) Missing documentation for "CardTabClassKey". +// src/overridableComponents.d.ts:78:1 - (ae-undocumented) Missing documentation for "BackstageOverrides". ``` diff --git a/packages/core-plugin-api/api-report-alpha.md b/packages/core-plugin-api/api-report-alpha.api.md similarity index 64% rename from packages/core-plugin-api/api-report-alpha.md rename to packages/core-plugin-api/api-report-alpha.api.md index c0f0d02535..260e0365a7 100644 --- a/packages/core-plugin-api/api-report-alpha.md +++ b/packages/core-plugin-api/api-report-alpha.api.md @@ -239,5 +239,36 @@ export const useTranslationRef: < t: TranslationFunction; }; +// Warnings were encountered during analysis: +// +// src/apis/definitions/AppLanguageApi.d.ts:4:1 - (ae-undocumented) Missing documentation for "AppLanguageApi". +// src/apis/definitions/AppLanguageApi.d.ts:19:22 - (ae-undocumented) Missing documentation for "appLanguageApiRef". +// src/apis/definitions/TranslationApi.d.ts:228:1 - (ae-undocumented) Missing documentation for "TranslationFunction". +// src/apis/definitions/TranslationApi.d.ts:231:5 - (ae-undocumented) Missing documentation for "__call". +// src/apis/definitions/TranslationApi.d.ts:234:1 - (ae-undocumented) Missing documentation for "TranslationSnapshot". +// src/apis/definitions/TranslationApi.d.ts:243:1 - (ae-undocumented) Missing documentation for "TranslationApi". +// src/apis/definitions/TranslationApi.d.ts:254:22 - (ae-undocumented) Missing documentation for "translationApiRef". +// src/translation/TranslationMessages.d.ts:17:5 - (ae-undocumented) Missing documentation for "$$type". +// src/translation/TranslationMessages.d.ts:33:5 - (ae-undocumented) Missing documentation for "ref". +// src/translation/TranslationMessages.d.ts:34:5 - (ae-undocumented) Missing documentation for "full". +// src/translation/TranslationMessages.d.ts:35:5 - (ae-undocumented) Missing documentation for "messages". +// src/translation/TranslationRef.d.ts:2:1 - (ae-undocumented) Missing documentation for "TranslationRef". +// src/translation/TranslationRef.d.ts:7:5 - (ae-undocumented) Missing documentation for "$$type". +// src/translation/TranslationRef.d.ts:8:5 - (ae-undocumented) Missing documentation for "id". +// src/translation/TranslationRef.d.ts:9:5 - (ae-undocumented) Missing documentation for "T". +// src/translation/TranslationRef.d.ts:30:1 - (ae-undocumented) Missing documentation for "TranslationRefOptions". +// src/translation/TranslationRef.d.ts:37:5 - (ae-undocumented) Missing documentation for "id". +// src/translation/TranslationRef.d.ts:38:5 - (ae-undocumented) Missing documentation for "messages". +// src/translation/TranslationRef.d.ts:39:5 - (ae-undocumented) Missing documentation for "translations". +// src/translation/TranslationRef.d.ts:42:1 - (ae-undocumented) Missing documentation for "createTranslationRef". +// src/translation/TranslationResource.d.ts:3:1 - (ae-undocumented) Missing documentation for "TranslationResource". +// src/translation/TranslationResource.d.ts:4:5 - (ae-undocumented) Missing documentation for "$$type". +// src/translation/TranslationResource.d.ts:5:5 - (ae-undocumented) Missing documentation for "id". +// src/translation/TranslationResource.d.ts:8:1 - (ae-undocumented) Missing documentation for "TranslationResourceOptions". +// src/translation/TranslationResource.d.ts:17:5 - (ae-undocumented) Missing documentation for "ref". +// src/translation/TranslationResource.d.ts:18:5 - (ae-undocumented) Missing documentation for "translations". +// src/translation/TranslationResource.d.ts:21:1 - (ae-undocumented) Missing documentation for "createTranslationResource". +// src/translation/useTranslationRef.d.ts:4:22 - (ae-undocumented) Missing documentation for "useTranslationRef". + // (No @packageDocumentation comment for this package) ``` diff --git a/packages/core-plugin-api/api-report.md b/packages/core-plugin-api/api-report.api.md similarity index 99% rename from packages/core-plugin-api/api-report.md rename to packages/core-plugin-api/api-report.api.md index 134b338c92..d412f59b2d 100644 --- a/packages/core-plugin-api/api-report.md +++ b/packages/core-plugin-api/api-report.api.md @@ -797,4 +797,8 @@ export function withApis( ): React_2.JSX.Element; displayName: string; }; + +// Warnings were encountered during analysis: +// +// src/routing/types.d.ts:13:1 - (ae-undocumented) Missing documentation for "AnyParams". ``` diff --git a/packages/dev-utils/api-report.md b/packages/dev-utils/api-report.api.md similarity index 89% rename from packages/dev-utils/api-report.md rename to packages/dev-utils/api-report.api.md index 1a7b765fab..ccde681f41 100644 --- a/packages/dev-utils/api-report.md +++ b/packages/dev-utils/api-report.api.md @@ -67,4 +67,9 @@ export const SidebarSignOutButton: (props: { icon?: IconComponent; text?: string; }) => React_2.JSX.Element; + +// Warnings were encountered during analysis: +// +// src/components/EntityGridItem/EntityGridItem.d.ts:5:22 - (ae-undocumented) Missing documentation for "EntityGridItem". +// src/devApp/render.d.ts:7:1 - (ae-undocumented) Missing documentation for "DevAppPageOptions". ``` diff --git a/packages/e2e-test-utils/api-report-playwright.md b/packages/e2e-test-utils/api-report-playwright.api.md similarity index 100% rename from packages/e2e-test-utils/api-report-playwright.md rename to packages/e2e-test-utils/api-report-playwright.api.md diff --git a/packages/errors/api-report.md b/packages/errors/api-report.api.md similarity index 80% rename from packages/errors/api-report.md rename to packages/errors/api-report.api.md index 894aac8413..d2ba2d22ff 100644 --- a/packages/errors/api-report.md +++ b/packages/errors/api-report.api.md @@ -155,4 +155,16 @@ export class ServiceUnavailableError extends CustomErrorBase {} // @public export function stringifyError(error: unknown): string; + +// Warnings were encountered during analysis: +// +// src/errors/ResponseError.d.ts:32:5 - (ae-undocumented) Missing documentation for "statusCode". +// src/errors/ResponseError.d.ts:33:5 - (ae-undocumented) Missing documentation for "statusText". +// src/errors/common.d.ts:8:5 - (ae-undocumented) Missing documentation for "name". +// src/errors/common.d.ts:16:5 - (ae-undocumented) Missing documentation for "name". +// src/errors/common.d.ts:24:5 - (ae-undocumented) Missing documentation for "name". +// src/errors/common.d.ts:35:5 - (ae-undocumented) Missing documentation for "name". +// src/errors/common.d.ts:44:5 - (ae-undocumented) Missing documentation for "name". +// src/errors/common.d.ts:52:5 - (ae-undocumented) Missing documentation for "name". +// src/errors/common.d.ts:60:5 - (ae-undocumented) Missing documentation for "name". ``` diff --git a/packages/frontend-app-api/api-report.md b/packages/frontend-app-api/api-report.api.md similarity index 100% rename from packages/frontend-app-api/api-report.md rename to packages/frontend-app-api/api-report.api.md diff --git a/packages/frontend-plugin-api/api-report.md b/packages/frontend-plugin-api/api-report.api.md similarity index 77% rename from packages/frontend-plugin-api/api-report.md rename to packages/frontend-plugin-api/api-report.api.md index c36f8b9b3e..9afcb1b91e 100644 --- a/packages/frontend-plugin-api/api-report.md +++ b/packages/frontend-plugin-api/api-report.api.md @@ -1752,4 +1752,123 @@ export { useTranslationRef }; export { vmwareCloudAuthApiRef }; export { withApis }; + +// Warnings were encountered during analysis: +// +// src/apis/definitions/AppTreeApi.d.ts:12:5 - (ae-undocumented) Missing documentation for "id". +// src/apis/definitions/AppTreeApi.d.ts:13:5 - (ae-undocumented) Missing documentation for "attachTo". +// src/apis/definitions/AppTreeApi.d.ts:17:5 - (ae-undocumented) Missing documentation for "extension". +// src/apis/definitions/AppTreeApi.d.ts:18:5 - (ae-undocumented) Missing documentation for "disabled". +// src/apis/definitions/AppTreeApi.d.ts:19:5 - (ae-undocumented) Missing documentation for "config". +// src/apis/definitions/AppTreeApi.d.ts:20:5 - (ae-undocumented) Missing documentation for "source". +// src/apis/definitions/AppTreeApi.d.ts:32:5 - (ae-undocumented) Missing documentation for "attachedTo". +// src/apis/definitions/AppTreeApi.d.ts:36:5 - (ae-undocumented) Missing documentation for "attachments". +// src/apis/definitions/ComponentsApi.d.ts:9:5 - (ae-undocumented) Missing documentation for "getComponent". +// src/apis/definitions/IconsApi.d.ts:8:5 - (ae-undocumented) Missing documentation for "getIcon". +// src/apis/definitions/IconsApi.d.ts:9:5 - (ae-undocumented) Missing documentation for "listIconKeys". +// src/apis/definitions/RouteResolutionApi.d.ts:19:1 - (ae-undocumented) Missing documentation for "RouteResolutionApiResolveOptions". +// src/apis/definitions/RouteResolutionApi.d.ts:29:1 - (ae-undocumented) Missing documentation for "RouteResolutionApi". +// src/apis/definitions/RouteResolutionApi.d.ts:30:5 - (ae-undocumented) Missing documentation for "resolve". +// src/components/ExtensionBoundary.d.ts:4:1 - (ae-undocumented) Missing documentation for "ExtensionBoundaryProps". +// src/components/ExtensionBoundary.d.ts:5:5 - (ae-undocumented) Missing documentation for "node". +// src/components/ExtensionBoundary.d.ts:6:5 - (ae-undocumented) Missing documentation for "routable". +// src/components/ExtensionBoundary.d.ts:7:5 - (ae-undocumented) Missing documentation for "children". +// src/components/ExtensionBoundary.d.ts:10:1 - (ae-undocumented) Missing documentation for "ExtensionBoundary". +// src/components/coreComponentRefs.d.ts:3:22 - (ae-undocumented) Missing documentation for "coreComponentRefs". +// src/components/createComponentRef.d.ts:2:1 - (ae-undocumented) Missing documentation for "ComponentRef". +// src/components/createComponentRef.d.ts:7:1 - (ae-undocumented) Missing documentation for "createComponentRef". +// src/extensions/createApiExtension.d.ts:7:1 - (ae-undocumented) Missing documentation for "createApiExtension". +// src/extensions/createApiExtension.d.ts:20:1 - (ae-undocumented) Missing documentation for "createApiExtension". +// src/extensions/createApiExtension.d.ts:21:11 - (ae-undocumented) Missing documentation for "factoryDataRef". +// src/extensions/createAppRootWrapperExtension.d.ts:28:1 - (ae-undocumented) Missing documentation for "createAppRootWrapperExtension". +// src/extensions/createAppRootWrapperExtension.d.ts:29:11 - (ae-undocumented) Missing documentation for "componentDataRef". +// src/extensions/createComponentExtension.d.ts:7:1 - (ae-undocumented) Missing documentation for "createComponentExtension". +// src/extensions/createComponentExtension.d.ts:26:1 - (ae-undocumented) Missing documentation for "createComponentExtension". +// src/extensions/createComponentExtension.d.ts:27:11 - (ae-undocumented) Missing documentation for "componentDataRef". +// src/extensions/createNavItemExtension.d.ts:17:1 - (ae-undocumented) Missing documentation for "createNavItemExtension". +// src/extensions/createNavItemExtension.d.ts:18:11 - (ae-undocumented) Missing documentation for "targetDataRef". +// src/extensions/createNavLogoExtension.d.ts:13:1 - (ae-undocumented) Missing documentation for "createNavLogoExtension". +// src/extensions/createNavLogoExtension.d.ts:14:11 - (ae-undocumented) Missing documentation for "logoElementsDataRef". +// src/extensions/createRouterExtension.d.ts:28:1 - (ae-undocumented) Missing documentation for "createRouterExtension". +// src/extensions/createRouterExtension.d.ts:29:11 - (ae-undocumented) Missing documentation for "componentDataRef". +// src/extensions/createSignInPageExtension.d.ts:10:1 - (ae-undocumented) Missing documentation for "createSignInPageExtension". +// src/extensions/createSignInPageExtension.d.ts:26:1 - (ae-undocumented) Missing documentation for "createSignInPageExtension". +// src/extensions/createSignInPageExtension.d.ts:27:11 - (ae-undocumented) Missing documentation for "componentDataRef". +// src/extensions/createThemeExtension.d.ts:3:1 - (ae-undocumented) Missing documentation for "createThemeExtension". +// src/extensions/createThemeExtension.d.ts:5:1 - (ae-undocumented) Missing documentation for "createThemeExtension". +// src/extensions/createThemeExtension.d.ts:6:11 - (ae-undocumented) Missing documentation for "themeDataRef". +// src/extensions/createTranslationExtension.d.ts:3:1 - (ae-undocumented) Missing documentation for "createTranslationExtension". +// src/extensions/createTranslationExtension.d.ts:8:1 - (ae-undocumented) Missing documentation for "createTranslationExtension". +// src/extensions/createTranslationExtension.d.ts:9:11 - (ae-undocumented) Missing documentation for "translationDataRef". +// src/routing/ExternalRouteRef.d.ts:12:5 - (ae-undocumented) Missing documentation for "$$type". +// src/routing/ExternalRouteRef.d.ts:13:5 - (ae-undocumented) Missing documentation for "T". +// src/routing/ExternalRouteRef.d.ts:14:5 - (ae-undocumented) Missing documentation for "optional". +// src/routing/RouteRef.d.ts:12:5 - (ae-undocumented) Missing documentation for "$$type". +// src/routing/RouteRef.d.ts:13:5 - (ae-undocumented) Missing documentation for "T". +// src/routing/SubRouteRef.d.ts:13:5 - (ae-undocumented) Missing documentation for "$$type". +// src/routing/SubRouteRef.d.ts:14:5 - (ae-undocumented) Missing documentation for "T". +// src/routing/SubRouteRef.d.ts:15:5 - (ae-undocumented) Missing documentation for "path". +// src/schema/createSchemaFromZod.d.ts:4:1 - (ae-undocumented) Missing documentation for "createSchemaFromZod". +// src/schema/types.d.ts:3:1 - (ae-undocumented) Missing documentation for "PortableSchema". +// src/types.d.ts:11:1 - (ae-undocumented) Missing documentation for "CoreProgressProps". +// src/types.d.ts:13:1 - (ae-undocumented) Missing documentation for "CoreNotFoundErrorPageProps". +// src/types.d.ts:17:1 - (ae-undocumented) Missing documentation for "CoreErrorBoundaryFallbackProps". +// src/wiring/coreExtensionData.d.ts:4:22 - (ae-undocumented) Missing documentation for "coreExtensionData". +// src/wiring/createExtension.d.ts:7:1 - (ae-undocumented) Missing documentation for "AnyExtensionDataMap". +// src/wiring/createExtension.d.ts:13:1 - (ae-undocumented) Missing documentation for "AnyExtensionInputMap". +// src/wiring/createExtension.d.ts:50:1 - (ae-undocumented) Missing documentation for "CreateExtensionOptions". +// src/wiring/createExtension.d.ts:51:5 - (ae-undocumented) Missing documentation for "kind". +// src/wiring/createExtension.d.ts:52:5 - (ae-undocumented) Missing documentation for "namespace". +// src/wiring/createExtension.d.ts:53:5 - (ae-undocumented) Missing documentation for "name". +// src/wiring/createExtension.d.ts:54:5 - (ae-undocumented) Missing documentation for "attachTo". +// src/wiring/createExtension.d.ts:58:5 - (ae-undocumented) Missing documentation for "disabled". +// src/wiring/createExtension.d.ts:59:5 - (ae-undocumented) Missing documentation for "inputs". +// src/wiring/createExtension.d.ts:60:5 - (ae-undocumented) Missing documentation for "output". +// src/wiring/createExtension.d.ts:61:5 - (ae-undocumented) Missing documentation for "configSchema". +// src/wiring/createExtension.d.ts:62:5 - (ae-undocumented) Missing documentation for "factory". +// src/wiring/createExtension.d.ts:69:1 - (ae-undocumented) Missing documentation for "ExtensionDefinition". +// src/wiring/createExtension.d.ts:70:5 - (ae-undocumented) Missing documentation for "$$type". +// src/wiring/createExtension.d.ts:71:5 - (ae-undocumented) Missing documentation for "kind". +// src/wiring/createExtension.d.ts:72:5 - (ae-undocumented) Missing documentation for "namespace". +// src/wiring/createExtension.d.ts:73:5 - (ae-undocumented) Missing documentation for "name". +// src/wiring/createExtension.d.ts:74:5 - (ae-undocumented) Missing documentation for "attachTo". +// src/wiring/createExtension.d.ts:78:5 - (ae-undocumented) Missing documentation for "disabled". +// src/wiring/createExtension.d.ts:79:5 - (ae-undocumented) Missing documentation for "configSchema". +// src/wiring/createExtension.d.ts:82:1 - (ae-undocumented) Missing documentation for "createExtension". +// src/wiring/createExtensionDataRef.d.ts:2:1 - (ae-undocumented) Missing documentation for "ExtensionDataRef". +// src/wiring/createExtensionDataRef.d.ts:11:1 - (ae-undocumented) Missing documentation for "ConfigurableExtensionDataRef". +// src/wiring/createExtensionDataRef.d.ts:14:5 - (ae-undocumented) Missing documentation for "optional". +// src/wiring/createExtensionDataRef.d.ts:19:1 - (ae-undocumented) Missing documentation for "createExtensionDataRef". +// src/wiring/createExtensionInput.d.ts:3:1 - (ae-undocumented) Missing documentation for "ExtensionInput". +// src/wiring/createExtensionInput.d.ts:7:5 - (ae-undocumented) Missing documentation for "$$type". +// src/wiring/createExtensionInput.d.ts:8:5 - (ae-undocumented) Missing documentation for "extensionData". +// src/wiring/createExtensionInput.d.ts:9:5 - (ae-undocumented) Missing documentation for "config". +// src/wiring/createExtensionInput.d.ts:12:1 - (ae-undocumented) Missing documentation for "createExtensionInput". +// src/wiring/createExtensionOverrides.d.ts:4:1 - (ae-undocumented) Missing documentation for "ExtensionOverridesOptions". +// src/wiring/createExtensionOverrides.d.ts:5:5 - (ae-undocumented) Missing documentation for "extensions". +// src/wiring/createExtensionOverrides.d.ts:6:5 - (ae-undocumented) Missing documentation for "featureFlags". +// src/wiring/createExtensionOverrides.d.ts:9:1 - (ae-undocumented) Missing documentation for "createExtensionOverrides". +// src/wiring/createPlugin.d.ts:5:1 - (ae-undocumented) Missing documentation for "PluginOptions". +// src/wiring/createPlugin.d.ts:6:5 - (ae-undocumented) Missing documentation for "id". +// src/wiring/createPlugin.d.ts:7:5 - (ae-undocumented) Missing documentation for "routes". +// src/wiring/createPlugin.d.ts:8:5 - (ae-undocumented) Missing documentation for "externalRoutes". +// src/wiring/createPlugin.d.ts:9:5 - (ae-undocumented) Missing documentation for "extensions". +// src/wiring/createPlugin.d.ts:10:5 - (ae-undocumented) Missing documentation for "featureFlags". +// src/wiring/createPlugin.d.ts:19:1 - (ae-undocumented) Missing documentation for "createPlugin". +// src/wiring/resolveExtensionDefinition.d.ts:3:1 - (ae-undocumented) Missing documentation for "Extension". +// src/wiring/resolveExtensionDefinition.d.ts:4:5 - (ae-undocumented) Missing documentation for "$$type". +// src/wiring/resolveExtensionDefinition.d.ts:5:5 - (ae-undocumented) Missing documentation for "id". +// src/wiring/resolveExtensionDefinition.d.ts:6:5 - (ae-undocumented) Missing documentation for "attachTo". +// src/wiring/resolveExtensionDefinition.d.ts:10:5 - (ae-undocumented) Missing documentation for "disabled". +// src/wiring/resolveExtensionDefinition.d.ts:11:5 - (ae-undocumented) Missing documentation for "configSchema". +// src/wiring/types.d.ts:12:1 - (ae-undocumented) Missing documentation for "AnyRoutes". +// src/wiring/types.d.ts:16:1 - (ae-undocumented) Missing documentation for "AnyExternalRoutes". +// src/wiring/types.d.ts:20:1 - (ae-undocumented) Missing documentation for "BackstagePlugin". +// src/wiring/types.d.ts:21:5 - (ae-undocumented) Missing documentation for "$$type". +// src/wiring/types.d.ts:22:5 - (ae-undocumented) Missing documentation for "id". +// src/wiring/types.d.ts:23:5 - (ae-undocumented) Missing documentation for "routes". +// src/wiring/types.d.ts:24:5 - (ae-undocumented) Missing documentation for "externalRoutes". +// src/wiring/types.d.ts:27:1 - (ae-undocumented) Missing documentation for "ExtensionOverrides". +// src/wiring/types.d.ts:28:5 - (ae-undocumented) Missing documentation for "$$type". +// src/wiring/types.d.ts:31:1 - (ae-undocumented) Missing documentation for "FrontendFeature". ``` diff --git a/packages/frontend-test-utils/api-report.md b/packages/frontend-test-utils/api-report.api.md similarity index 84% rename from packages/frontend-test-utils/api-report.md rename to packages/frontend-test-utils/api-report.api.md index 10b84b0981..ebe02dee2c 100644 --- a/packages/frontend-test-utils/api-report.md +++ b/packages/frontend-test-utils/api-report.api.md @@ -140,4 +140,14 @@ export type TestAppOptions = { }; export { withLogCollector }; + +// Warnings were encountered during analysis: +// +// src/apis/AnalyticsApi/MockAnalyticsApi.d.ts:10:5 - (ae-undocumented) Missing documentation for "captureEvent". +// src/apis/AnalyticsApi/MockAnalyticsApi.d.ts:11:5 - (ae-undocumented) Missing documentation for "getEvents". +// src/app/createExtensionTester.d.ts:5:1 - (ae-undocumented) Missing documentation for "ExtensionTester". +// src/app/createExtensionTester.d.ts:7:5 - (ae-undocumented) Missing documentation for "add". +// src/app/createExtensionTester.d.ts:10:5 - (ae-undocumented) Missing documentation for "render". +// src/app/createExtensionTester.d.ts:15:1 - (ae-undocumented) Missing documentation for "createExtensionTester". +// src/deprecated.d.ts:5:1 - (ae-undocumented) Missing documentation for "setupRequestMockHandlers". ``` diff --git a/packages/integration-aws-node/api-report.md b/packages/integration-aws-node/api-report.api.md similarity index 86% rename from packages/integration-aws-node/api-report.md rename to packages/integration-aws-node/api-report.api.md index d9ed25e193..80b1eee3ba 100644 --- a/packages/integration-aws-node/api-report.md +++ b/packages/integration-aws-node/api-report.api.md @@ -35,5 +35,9 @@ export class DefaultAwsCredentialsManager implements AwsCredentialsManager { ): Promise; } +// Warnings were encountered during analysis: +// +// src/DefaultAwsCredentialsManager.d.ts:12:5 - (ae-undocumented) Missing documentation for "fromConfig". + // (No @packageDocumentation comment for this package) ``` diff --git a/packages/integration-react/api-report.md b/packages/integration-react/api-report.api.md similarity index 100% rename from packages/integration-react/api-report.md rename to packages/integration-react/api-report.api.md diff --git a/packages/integration/api-report.md b/packages/integration/api-report.api.md similarity index 66% rename from packages/integration/api-report.md rename to packages/integration/api-report.api.md index e9b67bb6c1..e14a93b9a4 100644 --- a/packages/integration/api-report.md +++ b/packages/integration/api-report.api.md @@ -1027,4 +1027,127 @@ export class SingleInstanceGithubCredentialsProvider static create: (config: GithubIntegrationConfig) => GithubCredentialsProvider; getCredentials(opts: { url: string }): Promise; } + +// Warnings were encountered during analysis: +// +// src/ScmIntegrations.d.ts:21:5 - (ae-undocumented) Missing documentation for "awsS3". +// src/ScmIntegrations.d.ts:22:5 - (ae-undocumented) Missing documentation for "awsCodeCommit". +// src/ScmIntegrations.d.ts:23:5 - (ae-undocumented) Missing documentation for "azure". +// src/ScmIntegrations.d.ts:27:5 - (ae-undocumented) Missing documentation for "bitbucket". +// src/ScmIntegrations.d.ts:28:5 - (ae-undocumented) Missing documentation for "bitbucketCloud". +// src/ScmIntegrations.d.ts:29:5 - (ae-undocumented) Missing documentation for "bitbucketServer". +// src/ScmIntegrations.d.ts:30:5 - (ae-undocumented) Missing documentation for "gerrit". +// src/ScmIntegrations.d.ts:31:5 - (ae-undocumented) Missing documentation for "github". +// src/ScmIntegrations.d.ts:32:5 - (ae-undocumented) Missing documentation for "gitlab". +// src/ScmIntegrations.d.ts:33:5 - (ae-undocumented) Missing documentation for "gitea". +// src/ScmIntegrations.d.ts:34:5 - (ae-undocumented) Missing documentation for "harness". +// src/ScmIntegrations.d.ts:43:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/ScmIntegrations.d.ts:45:5 - (ae-undocumented) Missing documentation for "awsS3". +// src/ScmIntegrations.d.ts:46:5 - (ae-undocumented) Missing documentation for "awsCodeCommit". +// src/ScmIntegrations.d.ts:47:5 - (ae-undocumented) Missing documentation for "azure". +// src/ScmIntegrations.d.ts:51:5 - (ae-undocumented) Missing documentation for "bitbucket". +// src/ScmIntegrations.d.ts:52:5 - (ae-undocumented) Missing documentation for "bitbucketCloud". +// src/ScmIntegrations.d.ts:53:5 - (ae-undocumented) Missing documentation for "bitbucketServer". +// src/ScmIntegrations.d.ts:54:5 - (ae-undocumented) Missing documentation for "gerrit". +// src/ScmIntegrations.d.ts:55:5 - (ae-undocumented) Missing documentation for "github". +// src/ScmIntegrations.d.ts:56:5 - (ae-undocumented) Missing documentation for "gitlab". +// src/ScmIntegrations.d.ts:57:5 - (ae-undocumented) Missing documentation for "gitea". +// src/ScmIntegrations.d.ts:58:5 - (ae-undocumented) Missing documentation for "harness". +// src/ScmIntegrations.d.ts:59:5 - (ae-undocumented) Missing documentation for "list". +// src/ScmIntegrations.d.ts:60:5 - (ae-undocumented) Missing documentation for "byUrl". +// src/ScmIntegrations.d.ts:61:5 - (ae-undocumented) Missing documentation for "byHost". +// src/ScmIntegrations.d.ts:62:5 - (ae-undocumented) Missing documentation for "resolveUrl". +// src/ScmIntegrations.d.ts:67:5 - (ae-undocumented) Missing documentation for "resolveEditUrl". +// src/awsCodeCommit/AwsCodeCommitIntegration.d.ts:10:5 - (ae-undocumented) Missing documentation for "factory". +// src/awsCodeCommit/AwsCodeCommitIntegration.d.ts:11:5 - (ae-undocumented) Missing documentation for "type". +// src/awsCodeCommit/AwsCodeCommitIntegration.d.ts:12:5 - (ae-undocumented) Missing documentation for "config". +// src/awsCodeCommit/AwsCodeCommitIntegration.d.ts:13:5 - (ae-undocumented) Missing documentation for "title". +// src/awsCodeCommit/AwsCodeCommitIntegration.d.ts:15:5 - (ae-undocumented) Missing documentation for "resolveUrl". +// src/awsCodeCommit/AwsCodeCommitIntegration.d.ts:20:5 - (ae-undocumented) Missing documentation for "resolveEditUrl". +// src/awsS3/AwsS3Integration.d.ts:10:5 - (ae-undocumented) Missing documentation for "factory". +// src/awsS3/AwsS3Integration.d.ts:11:5 - (ae-undocumented) Missing documentation for "type". +// src/awsS3/AwsS3Integration.d.ts:12:5 - (ae-undocumented) Missing documentation for "title". +// src/awsS3/AwsS3Integration.d.ts:13:5 - (ae-undocumented) Missing documentation for "config". +// src/awsS3/AwsS3Integration.d.ts:15:5 - (ae-undocumented) Missing documentation for "resolveUrl". +// src/awsS3/AwsS3Integration.d.ts:20:5 - (ae-undocumented) Missing documentation for "resolveEditUrl". +// src/azure/AzureIntegration.d.ts:10:5 - (ae-undocumented) Missing documentation for "factory". +// src/azure/AzureIntegration.d.ts:12:5 - (ae-undocumented) Missing documentation for "type". +// src/azure/AzureIntegration.d.ts:13:5 - (ae-undocumented) Missing documentation for "title". +// src/azure/AzureIntegration.d.ts:14:5 - (ae-undocumented) Missing documentation for "config". +// src/azure/AzureIntegration.d.ts:15:5 - (ae-undocumented) Missing documentation for "resolveUrl". +// src/azure/AzureIntegration.d.ts:20:5 - (ae-undocumented) Missing documentation for "resolveEditUrl". +// src/azure/DefaultAzureDevOpsCredentialsProvider.d.ts:9:5 - (ae-undocumented) Missing documentation for "fromIntegrations". +// src/azure/DefaultAzureDevOpsCredentialsProvider.d.ts:14:5 - (ae-undocumented) Missing documentation for "getCredentials". +// src/azure/types.d.ts:25:5 - (ae-undocumented) Missing documentation for "getCredentials". +// src/bitbucket/BitbucketIntegration.d.ts:11:5 - (ae-undocumented) Missing documentation for "factory". +// src/bitbucket/BitbucketIntegration.d.ts:13:5 - (ae-undocumented) Missing documentation for "type". +// src/bitbucket/BitbucketIntegration.d.ts:14:5 - (ae-undocumented) Missing documentation for "title". +// src/bitbucket/BitbucketIntegration.d.ts:15:5 - (ae-undocumented) Missing documentation for "config". +// src/bitbucket/BitbucketIntegration.d.ts:16:5 - (ae-undocumented) Missing documentation for "resolveUrl". +// src/bitbucket/BitbucketIntegration.d.ts:21:5 - (ae-undocumented) Missing documentation for "resolveEditUrl". +// src/bitbucketCloud/BitbucketCloudIntegration.d.ts:10:5 - (ae-undocumented) Missing documentation for "factory". +// src/bitbucketCloud/BitbucketCloudIntegration.d.ts:12:5 - (ae-undocumented) Missing documentation for "type". +// src/bitbucketCloud/BitbucketCloudIntegration.d.ts:13:5 - (ae-undocumented) Missing documentation for "title". +// src/bitbucketCloud/BitbucketCloudIntegration.d.ts:14:5 - (ae-undocumented) Missing documentation for "config". +// src/bitbucketCloud/BitbucketCloudIntegration.d.ts:15:5 - (ae-undocumented) Missing documentation for "resolveUrl". +// src/bitbucketCloud/BitbucketCloudIntegration.d.ts:20:5 - (ae-undocumented) Missing documentation for "resolveEditUrl". +// src/bitbucketServer/BitbucketServerIntegration.d.ts:10:5 - (ae-undocumented) Missing documentation for "factory". +// src/bitbucketServer/BitbucketServerIntegration.d.ts:12:5 - (ae-undocumented) Missing documentation for "type". +// src/bitbucketServer/BitbucketServerIntegration.d.ts:13:5 - (ae-undocumented) Missing documentation for "title". +// src/bitbucketServer/BitbucketServerIntegration.d.ts:14:5 - (ae-undocumented) Missing documentation for "config". +// src/bitbucketServer/BitbucketServerIntegration.d.ts:15:5 - (ae-undocumented) Missing documentation for "resolveUrl". +// src/bitbucketServer/BitbucketServerIntegration.d.ts:20:5 - (ae-undocumented) Missing documentation for "resolveEditUrl". +// src/gerrit/GerritIntegration.d.ts:10:5 - (ae-undocumented) Missing documentation for "factory". +// src/gerrit/GerritIntegration.d.ts:12:5 - (ae-undocumented) Missing documentation for "type". +// src/gerrit/GerritIntegration.d.ts:13:5 - (ae-undocumented) Missing documentation for "title". +// src/gerrit/GerritIntegration.d.ts:14:5 - (ae-undocumented) Missing documentation for "config". +// src/gerrit/GerritIntegration.d.ts:15:5 - (ae-undocumented) Missing documentation for "resolveUrl". +// src/gerrit/GerritIntegration.d.ts:20:5 - (ae-undocumented) Missing documentation for "resolveEditUrl". +// src/gitea/GiteaIntegration.d.ts:9:5 - (ae-undocumented) Missing documentation for "config". +// src/gitea/GiteaIntegration.d.ts:10:5 - (ae-undocumented) Missing documentation for "factory". +// src/gitea/GiteaIntegration.d.ts:12:5 - (ae-undocumented) Missing documentation for "type". +// src/gitea/GiteaIntegration.d.ts:13:5 - (ae-undocumented) Missing documentation for "title". +// src/gitea/GiteaIntegration.d.ts:14:5 - (ae-undocumented) Missing documentation for "resolveUrl". +// src/gitea/GiteaIntegration.d.ts:19:5 - (ae-undocumented) Missing documentation for "resolveEditUrl". +// src/github/DefaultGithubCredentialsProvider.d.ts:13:5 - (ae-undocumented) Missing documentation for "fromIntegrations". +// src/github/GithubIntegration.d.ts:11:5 - (ae-undocumented) Missing documentation for "factory". +// src/github/GithubIntegration.d.ts:13:5 - (ae-undocumented) Missing documentation for "type". +// src/github/GithubIntegration.d.ts:14:5 - (ae-undocumented) Missing documentation for "title". +// src/github/GithubIntegration.d.ts:15:5 - (ae-undocumented) Missing documentation for "config". +// src/github/GithubIntegration.d.ts:16:5 - (ae-undocumented) Missing documentation for "resolveUrl". +// src/github/GithubIntegration.d.ts:21:5 - (ae-undocumented) Missing documentation for "resolveEditUrl". +// src/github/GithubIntegration.d.ts:22:5 - (ae-undocumented) Missing documentation for "parseRateLimitInfo". +// src/github/SingleInstanceGithubCredentialsProvider.d.ts:12:5 - (ae-undocumented) Missing documentation for "getAllInstallations". +// src/github/SingleInstanceGithubCredentialsProvider.d.ts:13:5 - (ae-undocumented) Missing documentation for "getAppToken". +// src/github/SingleInstanceGithubCredentialsProvider.d.ts:26:5 - (ae-undocumented) Missing documentation for "create". +// src/github/types.d.ts:26:5 - (ae-undocumented) Missing documentation for "getCredentials". +// src/gitlab/DefaultGitlabCredentialsProvider.d.ts:10:5 - (ae-undocumented) Missing documentation for "fromIntegrations". +// src/gitlab/DefaultGitlabCredentialsProvider.d.ts:12:5 - (ae-undocumented) Missing documentation for "getCredentials". +// src/gitlab/GitLabIntegration.d.ts:10:5 - (ae-undocumented) Missing documentation for "factory". +// src/gitlab/GitLabIntegration.d.ts:12:5 - (ae-undocumented) Missing documentation for "type". +// src/gitlab/GitLabIntegration.d.ts:13:5 - (ae-undocumented) Missing documentation for "title". +// src/gitlab/GitLabIntegration.d.ts:14:5 - (ae-undocumented) Missing documentation for "config". +// src/gitlab/GitLabIntegration.d.ts:15:5 - (ae-undocumented) Missing documentation for "resolveUrl". +// src/gitlab/GitLabIntegration.d.ts:20:5 - (ae-undocumented) Missing documentation for "resolveEditUrl". +// src/gitlab/types.d.ts:4:1 - (ae-undocumented) Missing documentation for "GitlabCredentials". +// src/gitlab/types.d.ts:13:1 - (ae-undocumented) Missing documentation for "GitlabCredentialsProvider". +// src/gitlab/types.d.ts:14:5 - (ae-undocumented) Missing documentation for "getCredentials". +// src/harness/HarnessIntegration.d.ts:9:5 - (ae-undocumented) Missing documentation for "config". +// src/harness/HarnessIntegration.d.ts:10:5 - (ae-undocumented) Missing documentation for "factory". +// src/harness/HarnessIntegration.d.ts:12:5 - (ae-undocumented) Missing documentation for "type". +// src/harness/HarnessIntegration.d.ts:13:5 - (ae-undocumented) Missing documentation for "title". +// src/harness/HarnessIntegration.d.ts:14:5 - (ae-undocumented) Missing documentation for "resolveUrl". +// src/harness/HarnessIntegration.d.ts:19:5 - (ae-undocumented) Missing documentation for "resolveEditUrl". +// src/registry.d.ts:19:5 - (ae-undocumented) Missing documentation for "awsS3". +// src/registry.d.ts:20:5 - (ae-undocumented) Missing documentation for "awsCodeCommit". +// src/registry.d.ts:21:5 - (ae-undocumented) Missing documentation for "azure". +// src/registry.d.ts:25:5 - (ae-undocumented) Missing documentation for "bitbucket". +// src/registry.d.ts:26:5 - (ae-undocumented) Missing documentation for "bitbucketCloud". +// src/registry.d.ts:27:5 - (ae-undocumented) Missing documentation for "bitbucketServer". +// src/registry.d.ts:28:5 - (ae-undocumented) Missing documentation for "gerrit". +// src/registry.d.ts:29:5 - (ae-undocumented) Missing documentation for "github". +// src/registry.d.ts:30:5 - (ae-undocumented) Missing documentation for "gitlab". +// src/registry.d.ts:31:5 - (ae-undocumented) Missing documentation for "gitea". +// src/registry.d.ts:32:5 - (ae-undocumented) Missing documentation for "harness". +// src/types.d.ts:93:5 - (ae-undocumented) Missing documentation for "isRateLimited". ``` diff --git a/packages/release-manifests/api-report.md b/packages/release-manifests/api-report.api.md similarity index 100% rename from packages/release-manifests/api-report.md rename to packages/release-manifests/api-report.api.md diff --git a/packages/test-utils/api-report-alpha.md b/packages/test-utils/api-report-alpha.api.md similarity index 63% rename from packages/test-utils/api-report-alpha.md rename to packages/test-utils/api-report-alpha.api.md index 945c754f83..ba098135fb 100644 --- a/packages/test-utils/api-report-alpha.md +++ b/packages/test-utils/api-report-alpha.api.md @@ -28,5 +28,12 @@ export class MockTranslationApi implements TranslationApi { >(): Observable>; } +// Warnings were encountered during analysis: +// +// src/testUtils/apis/TranslationApi/MockTranslationApi.d.ts:4:1 - (ae-undocumented) Missing documentation for "MockTranslationApi". +// src/testUtils/apis/TranslationApi/MockTranslationApi.d.ts:6:5 - (ae-undocumented) Missing documentation for "create". +// src/testUtils/apis/TranslationApi/MockTranslationApi.d.ts:8:5 - (ae-undocumented) Missing documentation for "getTranslation". +// src/testUtils/apis/TranslationApi/MockTranslationApi.d.ts:11:5 - (ae-undocumented) Missing documentation for "translation$". + // (No @packageDocumentation comment for this package) ``` diff --git a/packages/test-utils/api-report.md b/packages/test-utils/api-report.api.md similarity index 82% rename from packages/test-utils/api-report.md rename to packages/test-utils/api-report.api.md index ae54c588ba..4a1f297c4e 100644 --- a/packages/test-utils/api-report.md +++ b/packages/test-utils/api-report.api.md @@ -83,37 +83,21 @@ export function mockBreakpoint(options: { matches: boolean }): void; // @public export class MockConfigApi implements ConfigApi { constructor(data: JsonObject); - // (undocumented) get(key?: string): T; - // (undocumented) getBoolean(key: string): boolean; - // (undocumented) getConfig(key: string): Config; - // (undocumented) getConfigArray(key: string): Config[]; - // (undocumented) getNumber(key: string): number; - // (undocumented) getOptional(key?: string): T | undefined; - // (undocumented) getOptionalBoolean(key: string): boolean | undefined; - // (undocumented) getOptionalConfig(key: string): Config | undefined; - // (undocumented) getOptionalConfigArray(key: string): Config[] | undefined; - // (undocumented) getOptionalNumber(key: string): number | undefined; - // (undocumented) getOptionalString(key: string): string | undefined; - // (undocumented) getOptionalStringArray(key: string): string[] | undefined; - // (undocumented) getString(key: string): string; - // (undocumented) getStringArray(key: string): string[]; - // (undocumented) has(key: string): boolean; - // (undocumented) keys(): string[]; } @@ -141,7 +125,6 @@ export type MockErrorApiOptions = { // @public export class MockFetchApi implements FetchApi { constructor(options?: MockFetchApiOptions); - // (undocumented) get fetch(): typeof crossFetch; } @@ -289,4 +272,21 @@ export function wrapInTestApp( Component: ComponentType | ReactNode, options?: TestAppOptions, ): ReactElement; + +// Warnings were encountered during analysis: +// +// src/deprecated.d.ts:5:1 - (ae-undocumented) Missing documentation for "setupRequestMockHandlers". +// src/testUtils/apis/AnalyticsApi/MockAnalyticsApi.d.ts:10:5 - (ae-undocumented) Missing documentation for "captureEvent". +// src/testUtils/apis/AnalyticsApi/MockAnalyticsApi.d.ts:11:5 - (ae-undocumented) Missing documentation for "getEvents". +// src/testUtils/apis/ErrorApi/MockErrorApi.d.ts:28:5 - (ae-undocumented) Missing documentation for "post". +// src/testUtils/apis/ErrorApi/MockErrorApi.d.ts:29:5 - (ae-undocumented) Missing documentation for "error$". +// src/testUtils/apis/ErrorApi/MockErrorApi.d.ts:33:5 - (ae-undocumented) Missing documentation for "getErrors". +// src/testUtils/apis/ErrorApi/MockErrorApi.d.ts:34:5 - (ae-undocumented) Missing documentation for "waitForError". +// src/testUtils/apis/PermissionApi/MockPermissionApi.d.ts:13:5 - (ae-undocumented) Missing documentation for "authorize". +// src/testUtils/apis/StorageApi/MockStorageApi.d.ts:19:5 - (ae-undocumented) Missing documentation for "create". +// src/testUtils/apis/StorageApi/MockStorageApi.d.ts:20:5 - (ae-undocumented) Missing documentation for "forBucket". +// src/testUtils/apis/StorageApi/MockStorageApi.d.ts:21:5 - (ae-undocumented) Missing documentation for "snapshot". +// src/testUtils/apis/StorageApi/MockStorageApi.d.ts:22:5 - (ae-undocumented) Missing documentation for "set". +// src/testUtils/apis/StorageApi/MockStorageApi.d.ts:23:5 - (ae-undocumented) Missing documentation for "remove". +// src/testUtils/apis/StorageApi/MockStorageApi.d.ts:24:5 - (ae-undocumented) Missing documentation for "observe$". ``` diff --git a/packages/theme/api-report.md b/packages/theme/api-report.api.md similarity index 81% rename from packages/theme/api-report.md rename to packages/theme/api-report.api.md index 988569ece7..b380ce9fd1 100644 --- a/packages/theme/api-report.md +++ b/packages/theme/api-report.api.md @@ -459,4 +459,30 @@ export interface UnifiedThemeProviderProps { // (undocumented) theme: UnifiedTheme; } + +// Warnings were encountered during analysis: +// +// src/base/createBaseThemeOptions.d.ts:14:5 - (ae-undocumented) Missing documentation for "palette". +// src/base/createBaseThemeOptions.d.ts:15:5 - (ae-undocumented) Missing documentation for "defaultPageTheme". +// src/base/createBaseThemeOptions.d.ts:16:5 - (ae-undocumented) Missing documentation for "pageTheme". +// src/base/createBaseThemeOptions.d.ts:17:5 - (ae-undocumented) Missing documentation for "fontFamily". +// src/base/createBaseThemeOptions.d.ts:18:5 - (ae-undocumented) Missing documentation for "htmlFontSize". +// src/base/createBaseThemeOptions.d.ts:19:5 - (ae-undocumented) Missing documentation for "typography". +// src/unified/UnifiedTheme.d.ts:17:5 - (ae-undocumented) Missing documentation for "palette". +// src/unified/UnifiedTheme.d.ts:18:5 - (ae-undocumented) Missing documentation for "defaultPageTheme". +// src/unified/UnifiedTheme.d.ts:19:5 - (ae-undocumented) Missing documentation for "pageTheme". +// src/unified/UnifiedTheme.d.ts:20:5 - (ae-undocumented) Missing documentation for "fontFamily". +// src/unified/UnifiedTheme.d.ts:21:5 - (ae-undocumented) Missing documentation for "htmlFontSize". +// src/unified/UnifiedTheme.d.ts:22:5 - (ae-undocumented) Missing documentation for "components". +// src/unified/UnifiedTheme.d.ts:23:5 - (ae-undocumented) Missing documentation for "typography". +// src/unified/UnifiedThemeProvider.d.ts:9:5 - (ae-undocumented) Missing documentation for "children". +// src/unified/UnifiedThemeProvider.d.ts:10:5 - (ae-undocumented) Missing documentation for "theme". +// src/unified/UnifiedThemeProvider.d.ts:11:5 - (ae-undocumented) Missing documentation for "noCssBaseline". +// src/unified/types.d.ts:25:5 - (ae-undocumented) Missing documentation for "getTheme". +// src/v4/types.d.ts:31:5 - (ae-undocumented) Missing documentation for "palette". +// src/v4/types.d.ts:32:5 - (ae-undocumented) Missing documentation for "page". +// src/v4/types.d.ts:33:5 - (ae-undocumented) Missing documentation for "getPageTheme". +// src/v4/types.d.ts:42:5 - (ae-undocumented) Missing documentation for "palette". +// src/v4/types.d.ts:43:5 - (ae-undocumented) Missing documentation for "page". +// src/v4/types.d.ts:44:5 - (ae-undocumented) Missing documentation for "getPageTheme". ``` diff --git a/packages/types/api-report.md b/packages/types/api-report.api.md similarity index 100% rename from packages/types/api-report.md rename to packages/types/api-report.api.md diff --git a/packages/version-bridge/api-report.md b/packages/version-bridge/api-report.api.md similarity index 100% rename from packages/version-bridge/api-report.md rename to packages/version-bridge/api-report.api.md diff --git a/packages/yarn-plugin/api-report.md b/packages/yarn-plugin/api-report.api.md similarity index 68% rename from packages/yarn-plugin/api-report.md rename to packages/yarn-plugin/api-report.api.md index f0300ec9a1..b246b802bb 100644 --- a/packages/yarn-plugin/api-report.md +++ b/packages/yarn-plugin/api-report.api.md @@ -8,4 +8,8 @@ import { Plugin as Plugin_2 } from '@yarnpkg/core'; // @public (undocumented) const plugin: Plugin_2; export default plugin; + +// Warnings were encountered during analysis: +// +// src/index.d.ts:11:15 - (ae-undocumented) Missing documentation for "plugin". ``` diff --git a/plugins/api-docs-module-protoc-gen-doc/api-report.md b/plugins/api-docs-module-protoc-gen-doc/api-report.api.md similarity index 72% rename from plugins/api-docs-module-protoc-gen-doc/api-report.md rename to plugins/api-docs-module-protoc-gen-doc/api-report.api.md index 836f8313d8..355b867e9a 100644 --- a/plugins/api-docs-module-protoc-gen-doc/api-report.md +++ b/plugins/api-docs-module-protoc-gen-doc/api-report.api.md @@ -11,4 +11,8 @@ export const grpcDocsApiWidget: { title: string; component: (definition: string) => React_2.JSX.Element; }; + +// Warnings were encountered during analysis: +// +// src/widgets.d.ts:5:22 - (ae-undocumented) Missing documentation for "grpcDocsApiWidget". ``` diff --git a/plugins/api-docs/api-report-alpha.md b/plugins/api-docs/api-report-alpha.api.md similarity index 98% rename from plugins/api-docs/api-report-alpha.md rename to plugins/api-docs/api-report-alpha.api.md index 820978b877..66fa1b1be5 100644 --- a/plugins/api-docs/api-report-alpha.md +++ b/plugins/api-docs/api-report-alpha.api.md @@ -427,5 +427,9 @@ const _default: FrontendPlugin< >; export default _default; +// Warnings were encountered during analysis: +// +// src/alpha.d.ts:1:15 - (ae-undocumented) Missing documentation for "_default". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/api-docs/api-report.md b/plugins/api-docs/api-report.api.md similarity index 63% rename from plugins/api-docs/api-report.md rename to plugins/api-docs/api-report.api.md index 3c3f245a3c..023b8e02ee 100644 --- a/plugins/api-docs/api-report.md +++ b/plugins/api-docs/api-report.api.md @@ -229,4 +229,37 @@ export const TrpcApiDefinitionWidget: ( export type TrpcApiDefinitionWidgetProps = { definition: string; }; + +// Warnings were encountered during analysis: +// +// src/components/ApiDefinitionCard/ApiDefinitionCard.d.ts:3:22 - (ae-undocumented) Missing documentation for "ApiDefinitionCard". +// src/components/ApiDefinitionCard/ApiDefinitionWidget.d.ts:3:1 - (ae-undocumented) Missing documentation for "ApiDefinitionWidget". +// src/components/ApiDefinitionCard/ApiDefinitionWidget.d.ts:10:1 - (ae-undocumented) Missing documentation for "defaultDefinitionWidgets". +// src/components/ApiDefinitionCard/ApiTypeTitle.d.ts:6:22 - (ae-undocumented) Missing documentation for "ApiTypeTitle". +// src/components/ApisCards/ConsumedApisCard.d.ts:7:22 - (ae-undocumented) Missing documentation for "ConsumedApisCard". +// src/components/ApisCards/HasApisCard.d.ts:7:22 - (ae-undocumented) Missing documentation for "HasApisCard". +// src/components/ApisCards/ProvidedApisCard.d.ts:7:22 - (ae-undocumented) Missing documentation for "ProvidedApisCard". +// src/components/AsyncApiDefinitionWidget/AsyncApiDefinitionWidget.d.ts:3:1 - (ae-undocumented) Missing documentation for "AsyncApiDefinitionWidgetProps". +// src/components/AsyncApiDefinitionWidget/AsyncApiDefinitionWidget.d.ts:7:22 - (ae-undocumented) Missing documentation for "AsyncApiDefinitionWidget". +// src/components/ComponentsCards/ConsumingComponentsCard.d.ts:6:22 - (ae-undocumented) Missing documentation for "ConsumingComponentsCard". +// src/components/ComponentsCards/ProvidingComponentsCard.d.ts:4:22 - (ae-undocumented) Missing documentation for "ProvidingComponentsCard". +// src/components/GraphQlDefinitionWidget/GraphQlDefinitionWidget.d.ts:3:1 - (ae-undocumented) Missing documentation for "GraphQlDefinitionWidgetProps". +// src/components/GraphQlDefinitionWidget/GraphQlDefinitionWidget.d.ts:7:22 - (ae-undocumented) Missing documentation for "GraphQlDefinitionWidget". +// src/components/OpenApiDefinitionWidget/OpenApiDefinitionWidget.d.ts:3:1 - (ae-undocumented) Missing documentation for "OpenApiDefinitionWidgetProps". +// src/components/OpenApiDefinitionWidget/OpenApiDefinitionWidget.d.ts:9:22 - (ae-undocumented) Missing documentation for "OpenApiDefinitionWidget". +// src/components/PlainApiDefinitionWidget/PlainApiDefinitionWidget.d.ts:3:1 - (ae-undocumented) Missing documentation for "PlainApiDefinitionWidgetProps". +// src/components/PlainApiDefinitionWidget/PlainApiDefinitionWidget.d.ts:8:22 - (ae-undocumented) Missing documentation for "PlainApiDefinitionWidget". +// src/components/TrpcDefinitionWidget/TrpcApiDefinitionWidget.d.ts:3:1 - (ae-undocumented) Missing documentation for "TrpcApiDefinitionWidgetProps". +// src/components/TrpcDefinitionWidget/TrpcApiDefinitionWidget.d.ts:7:22 - (ae-undocumented) Missing documentation for "TrpcApiDefinitionWidget". +// src/config.d.ts:4:22 - (ae-undocumented) Missing documentation for "apiDocsConfigRef". +// src/config.d.ts:6:1 - (ae-undocumented) Missing documentation for "ApiDocsConfig". +// src/config.d.ts:7:5 - (ae-undocumented) Missing documentation for "getApiDefinitionWidget". +// src/plugin.d.ts:4:22 - (ae-undocumented) Missing documentation for "apiDocsPlugin". +// src/plugin.d.ts:10:22 - (ae-undocumented) Missing documentation for "ApiExplorerPage". +// src/plugin.d.ts:12:22 - (ae-undocumented) Missing documentation for "EntityApiDefinitionCard". +// src/plugin.d.ts:14:22 - (ae-undocumented) Missing documentation for "EntityConsumedApisCard". +// src/plugin.d.ts:19:22 - (ae-undocumented) Missing documentation for "EntityConsumingComponentsCard". +// src/plugin.d.ts:23:22 - (ae-undocumented) Missing documentation for "EntityProvidedApisCard". +// src/plugin.d.ts:28:22 - (ae-undocumented) Missing documentation for "EntityProvidingComponentsCard". +// src/plugin.d.ts:32:22 - (ae-undocumented) Missing documentation for "EntityHasApisCard". ``` diff --git a/plugins/app-backend/api-report-alpha.md b/plugins/app-backend/api-report-alpha.api.md similarity index 100% rename from plugins/app-backend/api-report-alpha.md rename to plugins/app-backend/api-report-alpha.api.md diff --git a/plugins/app-backend/api-report.md b/plugins/app-backend/api-report.api.md similarity index 65% rename from plugins/app-backend/api-report.md rename to plugins/app-backend/api-report.api.md index bb0ebb67db..3de36b0338 100644 --- a/plugins/app-backend/api-report.md +++ b/plugins/app-backend/api-report.api.md @@ -30,4 +30,13 @@ export interface RouterOptions { schema?: ConfigSchema; staticFallbackHandler?: express.Handler; } + +// Warnings were encountered during analysis: +// +// src/service/router.d.ts:7:1 - (ae-undocumented) Missing documentation for "RouterOptions". +// src/service/router.d.ts:8:5 - (ae-undocumented) Missing documentation for "config". +// src/service/router.d.ts:9:5 - (ae-undocumented) Missing documentation for "logger". +// src/service/router.d.ts:10:5 - (ae-undocumented) Missing documentation for "auth". +// src/service/router.d.ts:11:5 - (ae-undocumented) Missing documentation for "httpAuth". +// src/service/router.d.ts:56:1 - (ae-undocumented) Missing documentation for "createRouter". ``` diff --git a/plugins/app-node/api-report.md b/plugins/app-node/api-report.api.md similarity index 100% rename from plugins/app-node/api-report.md rename to plugins/app-node/api-report.api.md diff --git a/plugins/app-visualizer/api-report.md b/plugins/app-visualizer/api-report.api.md similarity index 93% rename from plugins/app-visualizer/api-report.md rename to plugins/app-visualizer/api-report.api.md index 48eca04ed8..7466ff24f6 100644 --- a/plugins/app-visualizer/api-report.md +++ b/plugins/app-visualizer/api-report.api.md @@ -71,5 +71,9 @@ const visualizerPlugin: FrontendPlugin< >; export default visualizerPlugin; +// Warnings were encountered during analysis: +// +// src/plugin.d.ts:5:22 - (ae-undocumented) Missing documentation for "visualizerPlugin". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/auth-backend-module-atlassian-provider/api-report.md b/plugins/auth-backend-module-atlassian-provider/api-report.api.md similarity index 80% rename from plugins/auth-backend-module-atlassian-provider/api-report.md rename to plugins/auth-backend-module-atlassian-provider/api-report.api.md index 7abdf7ee70..7f32330451 100644 --- a/plugins/auth-backend-module-atlassian-provider/api-report.md +++ b/plugins/auth-backend-module-atlassian-provider/api-report.api.md @@ -27,4 +27,9 @@ export namespace atlassianSignInResolvers { // @public (undocumented) const authModuleAtlassianProvider: BackendFeature; export default authModuleAtlassianProvider; + +// Warnings were encountered during analysis: +// +// src/authenticator.d.ts:3:22 - (ae-undocumented) Missing documentation for "atlassianAuthenticator". +// src/module.d.ts:2:22 - (ae-undocumented) Missing documentation for "authModuleAtlassianProvider". ``` diff --git a/plugins/auth-backend-module-aws-alb-provider/api-report.md b/plugins/auth-backend-module-aws-alb-provider/api-report.api.md similarity index 78% rename from plugins/auth-backend-module-aws-alb-provider/api-report.md rename to plugins/auth-backend-module-aws-alb-provider/api-report.api.md index b3a9ce4517..c7437a1b9d 100644 --- a/plugins/auth-backend-module-aws-alb-provider/api-report.md +++ b/plugins/auth-backend-module-aws-alb-provider/api-report.api.md @@ -46,4 +46,10 @@ export namespace awsAlbSignInResolvers { unknown >; } + +// Warnings were encountered during analysis: +// +// src/authenticator.d.ts:6:22 - (ae-undocumented) Missing documentation for "awsAlbAuthenticator". +// src/module.d.ts:2:22 - (ae-undocumented) Missing documentation for "authModuleAwsAlbProvider". +// src/resolvers.d.ts:8:11 - (ae-undocumented) Missing documentation for "emailMatchingUserEntityProfileEmail". ``` diff --git a/plugins/auth-backend-module-azure-easyauth-provider/api-report.md b/plugins/auth-backend-module-azure-easyauth-provider/api-report.api.md similarity index 66% rename from plugins/auth-backend-module-azure-easyauth-provider/api-report.md rename to plugins/auth-backend-module-azure-easyauth-provider/api-report.api.md index 9d337e3f34..3292654787 100644 --- a/plugins/auth-backend-module-azure-easyauth-provider/api-report.md +++ b/plugins/auth-backend-module-azure-easyauth-provider/api-report.api.md @@ -36,5 +36,13 @@ export namespace azureEasyAuthSignInResolvers { >; } +// Warnings were encountered during analysis: +// +// src/authenticator.d.ts:5:22 - (ae-undocumented) Missing documentation for "azureEasyAuthAuthenticator". +// src/module.d.ts:2:22 - (ae-undocumented) Missing documentation for "authModuleAzureEasyAuthProvider". +// src/resolvers.d.ts:3:1 - (ae-undocumented) Missing documentation for "azureEasyAuthSignInResolvers". +// src/resolvers.d.ts:4:11 - (ae-undocumented) Missing documentation for "idMatchingUserEntityAnnotation". +// src/types.d.ts:3:1 - (ae-undocumented) Missing documentation for "AzureEasyAuthResult". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/auth-backend-module-bitbucket-provider/api-report.md b/plugins/auth-backend-module-bitbucket-provider/api-report.api.md similarity index 82% rename from plugins/auth-backend-module-bitbucket-provider/api-report.md rename to plugins/auth-backend-module-bitbucket-provider/api-report.api.md index ceb4141fd9..210a292050 100644 --- a/plugins/auth-backend-module-bitbucket-provider/api-report.md +++ b/plugins/auth-backend-module-bitbucket-provider/api-report.api.md @@ -31,4 +31,9 @@ export namespace bitbucketSignInResolvers { unknown >; } + +// Warnings were encountered during analysis: +// +// src/authenticator.d.ts:3:22 - (ae-undocumented) Missing documentation for "bitbucketAuthenticator". +// src/module.d.ts:2:22 - (ae-undocumented) Missing documentation for "authModuleBitbucketProvider". ``` diff --git a/plugins/auth-backend-module-cloudflare-access-provider/api-report.md b/plugins/auth-backend-module-cloudflare-access-provider/api-report.api.md similarity index 82% rename from plugins/auth-backend-module-cloudflare-access-provider/api-report.md rename to plugins/auth-backend-module-cloudflare-access-provider/api-report.api.md index 1547190d39..b9943b2bef 100644 --- a/plugins/auth-backend-module-cloudflare-access-provider/api-report.md +++ b/plugins/auth-backend-module-cloudflare-access-provider/api-report.api.md @@ -60,4 +60,10 @@ export namespace cloudflareAccessSignInResolvers { export function createCloudflareAccessAuthenticator(options?: { cache?: CacheService; }): ProxyAuthenticator; + +// Warnings were encountered during analysis: +// +// src/types.d.ts:55:1 - (ae-undocumented) Missing documentation for "CloudflareAccessGroup". +// src/types.d.ts:72:1 - (ae-undocumented) Missing documentation for "CloudflareAccessIdentityProfile". +// src/types.d.ts:81:1 - (ae-undocumented) Missing documentation for "CloudflareAccessResult". ``` diff --git a/plugins/auth-backend-module-gcp-iap-provider/api-report.md b/plugins/auth-backend-module-gcp-iap-provider/api-report.api.md similarity index 84% rename from plugins/auth-backend-module-gcp-iap-provider/api-report.md rename to plugins/auth-backend-module-gcp-iap-provider/api-report.api.md index 1476694f99..72887276d5 100644 --- a/plugins/auth-backend-module-gcp-iap-provider/api-report.md +++ b/plugins/auth-backend-module-gcp-iap-provider/api-report.api.md @@ -50,5 +50,10 @@ export type GcpIapTokenInfo = { [key: string]: JsonPrimitive; }; +// Warnings were encountered during analysis: +// +// src/authenticator.d.ts:2:22 - (ae-undocumented) Missing documentation for "gcpIapAuthenticator". +// src/module.d.ts:2:22 - (ae-undocumented) Missing documentation for "authModuleGcpIapProvider". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/auth-backend-module-github-provider/api-report.md b/plugins/auth-backend-module-github-provider/api-report.api.md similarity index 80% rename from plugins/auth-backend-module-github-provider/api-report.md rename to plugins/auth-backend-module-github-provider/api-report.api.md index 222305adfd..0578c23d3e 100644 --- a/plugins/auth-backend-module-github-provider/api-report.md +++ b/plugins/auth-backend-module-github-provider/api-report.api.md @@ -27,4 +27,9 @@ export namespace githubSignInResolvers { unknown >; } + +// Warnings were encountered during analysis: +// +// src/authenticator.d.ts:3:22 - (ae-undocumented) Missing documentation for "githubAuthenticator". +// src/module.d.ts:2:22 - (ae-undocumented) Missing documentation for "authModuleGithubProvider". ``` diff --git a/plugins/auth-backend-module-gitlab-provider/api-report.md b/plugins/auth-backend-module-gitlab-provider/api-report.api.md similarity index 80% rename from plugins/auth-backend-module-gitlab-provider/api-report.md rename to plugins/auth-backend-module-gitlab-provider/api-report.api.md index 44c5ffb214..a72c00c6e5 100644 --- a/plugins/auth-backend-module-gitlab-provider/api-report.md +++ b/plugins/auth-backend-module-gitlab-provider/api-report.api.md @@ -27,4 +27,9 @@ export namespace gitlabSignInResolvers { unknown >; } + +// Warnings were encountered during analysis: +// +// src/authenticator.d.ts:3:22 - (ae-undocumented) Missing documentation for "gitlabAuthenticator". +// src/module.d.ts:2:22 - (ae-undocumented) Missing documentation for "authModuleGitlabProvider". ``` diff --git a/plugins/auth-backend-module-google-provider/api-report.md b/plugins/auth-backend-module-google-provider/api-report.api.md similarity index 81% rename from plugins/auth-backend-module-google-provider/api-report.md rename to plugins/auth-backend-module-google-provider/api-report.api.md index eeefb8e837..a2fc1bbce9 100644 --- a/plugins/auth-backend-module-google-provider/api-report.md +++ b/plugins/auth-backend-module-google-provider/api-report.api.md @@ -28,5 +28,10 @@ export namespace googleSignInResolvers { >; } +// Warnings were encountered during analysis: +// +// src/authenticator.d.ts:3:22 - (ae-undocumented) Missing documentation for "googleAuthenticator". +// src/module.d.ts:2:22 - (ae-undocumented) Missing documentation for "authModuleGoogleProvider". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/auth-backend-module-guest-provider/api-report.md b/plugins/auth-backend-module-guest-provider/api-report.api.md similarity index 71% rename from plugins/auth-backend-module-guest-provider/api-report.md rename to plugins/auth-backend-module-guest-provider/api-report.api.md index b0ba5386a2..b100e5270b 100644 --- a/plugins/auth-backend-module-guest-provider/api-report.md +++ b/plugins/auth-backend-module-guest-provider/api-report.api.md @@ -8,4 +8,8 @@ import { BackendFeature } from '@backstage/backend-plugin-api'; // @public (undocumented) const authModuleGuestProvider: BackendFeature; export default authModuleGuestProvider; + +// Warnings were encountered during analysis: +// +// src/module.d.ts:2:22 - (ae-undocumented) Missing documentation for "authModuleGuestProvider". ``` diff --git a/plugins/auth-backend-module-microsoft-provider/api-report.md b/plugins/auth-backend-module-microsoft-provider/api-report.api.md similarity index 78% rename from plugins/auth-backend-module-microsoft-provider/api-report.md rename to plugins/auth-backend-module-microsoft-provider/api-report.api.md index 6aef395d7c..3e7775cfa8 100644 --- a/plugins/auth-backend-module-microsoft-provider/api-report.md +++ b/plugins/auth-backend-module-microsoft-provider/api-report.api.md @@ -37,4 +37,10 @@ export namespace microsoftSignInResolvers { unknown >; } + +// Warnings were encountered during analysis: +// +// src/authenticator.d.ts:3:22 - (ae-undocumented) Missing documentation for "microsoftAuthenticator". +// src/deprecated.d.ts:5:22 - (ae-undocumented) Missing documentation for "authModuleMicrosoftProvider". +// src/module.d.ts:2:22 - (ae-undocumented) Missing documentation for "authModuleMicrosoftProvider". ``` diff --git a/plugins/auth-backend-module-oauth2-provider/api-report.md b/plugins/auth-backend-module-oauth2-provider/api-report.api.md similarity index 80% rename from plugins/auth-backend-module-oauth2-provider/api-report.md rename to plugins/auth-backend-module-oauth2-provider/api-report.api.md index 632591ec04..5648d043a2 100644 --- a/plugins/auth-backend-module-oauth2-provider/api-report.md +++ b/plugins/auth-backend-module-oauth2-provider/api-report.api.md @@ -27,4 +27,9 @@ export namespace oauth2SignInResolvers { unknown >; } + +// Warnings were encountered during analysis: +// +// src/authenticator.d.ts:3:22 - (ae-undocumented) Missing documentation for "oauth2Authenticator". +// src/module.d.ts:2:22 - (ae-undocumented) Missing documentation for "authModuleOauth2Provider". ``` diff --git a/plugins/auth-backend-module-oauth2-proxy-provider/api-report.md b/plugins/auth-backend-module-oauth2-proxy-provider/api-report.api.md similarity index 78% rename from plugins/auth-backend-module-oauth2-proxy-provider/api-report.md rename to plugins/auth-backend-module-oauth2-proxy-provider/api-report.api.md index 5c5cefd734..27b3a9feb2 100644 --- a/plugins/auth-backend-module-oauth2-proxy-provider/api-report.md +++ b/plugins/auth-backend-module-oauth2-proxy-provider/api-report.api.md @@ -32,4 +32,9 @@ export type OAuth2ProxyResult = { headers: IncomingHttpHeaders; getHeader(name: string): string | undefined; }; + +// Warnings were encountered during analysis: +// +// src/authenticator.d.ts:10:22 - (ae-undocumented) Missing documentation for "oauth2ProxyAuthenticator". +// src/module.d.ts:2:22 - (ae-undocumented) Missing documentation for "authModuleOauth2ProxyProvider". ``` diff --git a/plugins/auth-backend-module-oidc-provider/api-report.md b/plugins/auth-backend-module-oidc-provider/api-report.api.md similarity index 85% rename from plugins/auth-backend-module-oidc-provider/api-report.md rename to plugins/auth-backend-module-oidc-provider/api-report.api.md index cd0a99e7fc..df717a9e1e 100644 --- a/plugins/auth-backend-module-oidc-provider/api-report.md +++ b/plugins/auth-backend-module-oidc-provider/api-report.api.md @@ -46,4 +46,9 @@ export namespace oidcSignInResolvers { unknown >; } + +// Warnings were encountered during analysis: +// +// src/authenticator.d.ts:13:22 - (ae-undocumented) Missing documentation for "oidcAuthenticator". +// src/module.d.ts:2:22 - (ae-undocumented) Missing documentation for "authModuleOidcProvider". ``` diff --git a/plugins/auth-backend-module-okta-provider/api-report.md b/plugins/auth-backend-module-okta-provider/api-report.api.md similarity index 80% rename from plugins/auth-backend-module-okta-provider/api-report.md rename to plugins/auth-backend-module-okta-provider/api-report.api.md index a142265100..97e587df76 100644 --- a/plugins/auth-backend-module-okta-provider/api-report.md +++ b/plugins/auth-backend-module-okta-provider/api-report.api.md @@ -27,4 +27,9 @@ export namespace oktaSignInResolvers { unknown >; } + +// Warnings were encountered during analysis: +// +// src/authenticator.d.ts:3:22 - (ae-undocumented) Missing documentation for "oktaAuthenticator". +// src/module.d.ts:2:22 - (ae-undocumented) Missing documentation for "authModuleOktaProvider". ``` diff --git a/plugins/auth-backend-module-onelogin-provider/api-report.md b/plugins/auth-backend-module-onelogin-provider/api-report.api.md similarity index 80% rename from plugins/auth-backend-module-onelogin-provider/api-report.md rename to plugins/auth-backend-module-onelogin-provider/api-report.api.md index 1991f00e0b..a636d96ae0 100644 --- a/plugins/auth-backend-module-onelogin-provider/api-report.md +++ b/plugins/auth-backend-module-onelogin-provider/api-report.api.md @@ -27,4 +27,9 @@ export namespace oneLoginSignInResolvers { unknown >; } + +// Warnings were encountered during analysis: +// +// src/authenticator.d.ts:3:22 - (ae-undocumented) Missing documentation for "oneLoginAuthenticator". +// src/module.d.ts:2:22 - (ae-undocumented) Missing documentation for "authModuleOneLoginProvider". ``` diff --git a/plugins/auth-backend-module-pinniped-provider/api-report.md b/plugins/auth-backend-module-pinniped-provider/api-report.api.md similarity index 67% rename from plugins/auth-backend-module-pinniped-provider/api-report.md rename to plugins/auth-backend-module-pinniped-provider/api-report.api.md index e15f4ee324..a0500f5e74 100644 --- a/plugins/auth-backend-module-pinniped-provider/api-report.md +++ b/plugins/auth-backend-module-pinniped-provider/api-report.api.md @@ -37,4 +37,12 @@ export class PinnipedStrategyCache { client: BaseClient; }>; } + +// Warnings were encountered during analysis: +// +// src/authenticator.d.ts:4:1 - (ae-undocumented) Missing documentation for "PinnipedStrategyCache". +// src/authenticator.d.ts:11:5 - (ae-undocumented) Missing documentation for "getStrategy". +// src/authenticator.d.ts:20:22 - (ae-undocumented) Missing documentation for "pinnipedAuthenticator". +// src/deprecated.d.ts:5:22 - (ae-undocumented) Missing documentation for "authModulePinnipedProvider". +// src/module.d.ts:2:22 - (ae-undocumented) Missing documentation for "authModulePinnipedProvider". ``` diff --git a/plugins/auth-backend-module-vmware-cloud-provider/api-report.md b/plugins/auth-backend-module-vmware-cloud-provider/api-report.api.md similarity index 72% rename from plugins/auth-backend-module-vmware-cloud-provider/api-report.md rename to plugins/auth-backend-module-vmware-cloud-provider/api-report.api.md index 2a27d8fc7c..c970b237a9 100644 --- a/plugins/auth-backend-module-vmware-cloud-provider/api-report.md +++ b/plugins/auth-backend-module-vmware-cloud-provider/api-report.api.md @@ -43,4 +43,12 @@ export namespace vmwareCloudSignInResolvers { export type VMwarePassportProfile = PassportProfile & { organizationId?: string; }; + +// Warnings were encountered during analysis: +// +// src/authenticator.d.ts:4:1 - (ae-undocumented) Missing documentation for "VMwareCloudAuthenticatorContext". +// src/authenticator.d.ts:5:5 - (ae-undocumented) Missing documentation for "organizationId". +// src/authenticator.d.ts:6:5 - (ae-undocumented) Missing documentation for "providerStrategy". +// src/authenticator.d.ts:7:5 - (ae-undocumented) Missing documentation for "helper". +// src/authenticator.d.ts:10:1 - (ae-undocumented) Missing documentation for "VMwarePassportProfile". ``` diff --git a/plugins/auth-backend/api-report.md b/plugins/auth-backend/api-report.api.md similarity index 76% rename from plugins/auth-backend/api-report.md rename to plugins/auth-backend/api-report.api.md index 20690528d1..fff72d034c 100644 --- a/plugins/auth-backend/api-report.md +++ b/plugins/auth-backend/api-report.api.md @@ -700,4 +700,68 @@ export const verifyNonce: (req: express.Request, providerId: string) => void; // @public @deprecated (undocumented) export type WebMessageResponse = WebMessageResponse_2; + +// Warnings were encountered during analysis: +// +// src/identity/types.d.ts:13:1 - (ae-undocumented) Missing documentation for "TokenParams". +// src/lib/flow/authFlowHelpers.d.ts:8:22 - (ae-undocumented) Missing documentation for "postMessageResponse". +// src/lib/flow/authFlowHelpers.d.ts:13:22 - (ae-undocumented) Missing documentation for "ensuresXRequestedWith". +// src/lib/flow/types.d.ts:6:1 - (ae-undocumented) Missing documentation for "WebMessageResponse". +// src/lib/oauth/OAuthAdapter.d.ts:10:1 - (ae-undocumented) Missing documentation for "OAuthAdapterOptions". +// src/lib/oauth/OAuthAdapter.d.ts:23:1 - (ae-undocumented) Missing documentation for "OAuthAdapter". +// src/lib/oauth/OAuthAdapter.d.ts:26:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/lib/oauth/OAuthAdapter.d.ts:29:5 - (ae-undocumented) Missing documentation for "start". +// src/lib/oauth/OAuthAdapter.d.ts:30:5 - (ae-undocumented) Missing documentation for "frameHandler". +// src/lib/oauth/OAuthAdapter.d.ts:31:5 - (ae-undocumented) Missing documentation for "logout". +// src/lib/oauth/OAuthAdapter.d.ts:32:5 - (ae-undocumented) Missing documentation for "refresh". +// src/lib/oauth/OAuthEnvironmentHandler.d.ts:6:22 - (ae-undocumented) Missing documentation for "OAuthEnvironmentHandler". +// src/lib/oauth/helpers.d.ts:7:22 - (ae-undocumented) Missing documentation for "readState". +// src/lib/oauth/helpers.d.ts:12:22 - (ae-undocumented) Missing documentation for "encodeState". +// src/lib/oauth/helpers.d.ts:17:22 - (ae-undocumented) Missing documentation for "verifyNonce". +// src/lib/oauth/types.d.ts:29:1 - (ae-undocumented) Missing documentation for "OAuthResult". +// src/lib/oauth/types.d.ts:44:1 - (ae-undocumented) Missing documentation for "OAuthResponse". +// src/lib/oauth/types.d.ts:53:1 - (ae-undocumented) Missing documentation for "OAuthProviderInfo". +// src/lib/oauth/types.d.ts:75:1 - (ae-undocumented) Missing documentation for "OAuthState". +// src/lib/oauth/types.d.ts:80:1 - (ae-undocumented) Missing documentation for "OAuthStartRequest". +// src/lib/oauth/types.d.ts:88:1 - (ae-undocumented) Missing documentation for "OAuthRefreshRequest". +// src/lib/oauth/types.d.ts:96:1 - (ae-undocumented) Missing documentation for "OAuthLogoutRequest". +// src/lib/oauth/types.d.ts:103:1 - (ae-undocumented) Missing documentation for "OAuthHandlers". +// src/providers/azure-easyauth/index.d.ts:7:1 - (ae-undocumented) Missing documentation for "EasyAuthResult". +// src/providers/bitbucket/provider.d.ts:9:1 - (ae-undocumented) Missing documentation for "BitbucketOAuthResult". +// src/providers/bitbucket/provider.d.ts:23:1 - (ae-undocumented) Missing documentation for "BitbucketPassportProfile". +// src/providers/bitbucketServer/provider.d.ts:7:1 - (ae-undocumented) Missing documentation for "BitbucketServerOAuthResult". +// src/providers/cloudflare-access/provider.d.ts:89:1 - (ae-undocumented) Missing documentation for "CloudflareAccessResult". +// src/providers/github/provider.d.ts:5:1 - (ae-undocumented) Missing documentation for "GithubOAuthResult". +// src/providers/oauth2-proxy/index.d.ts:7:1 - (ae-undocumented) Missing documentation for "OAuth2ProxyResult". +// src/providers/oidc/index.d.ts:7:1 - (ae-undocumented) Missing documentation for "OidcAuthResult". +// src/providers/prepareBackstageIdentityResponse.d.ts:6:22 - (ae-undocumented) Missing documentation for "prepareBackstageIdentityResponse". +// src/providers/router.d.ts:9:1 - (ae-undocumented) Missing documentation for "ProviderFactories". +// src/providers/router.d.ts:27:1 - (ae-undocumented) Missing documentation for "createOriginFilter". +// src/providers/saml/provider.d.ts:6:1 - (ae-undocumented) Missing documentation for "SamlAuthResult". +// src/providers/types.d.ts:7:1 - (ae-undocumented) Missing documentation for "AuthResolverCatalogUserQuery". +// src/providers/types.d.ts:12:1 - (ae-undocumented) Missing documentation for "AuthResolverContext". +// src/providers/types.d.ts:17:1 - (ae-undocumented) Missing documentation for "CookieConfigurer". +// src/providers/types.d.ts:22:1 - (ae-undocumented) Missing documentation for "OAuthStartResponse". +// src/providers/types.d.ts:36:1 - (ae-undocumented) Missing documentation for "AuthProviderConfig". +// src/providers/types.d.ts:41:1 - (ae-undocumented) Missing documentation for "AuthProviderRouteHandlers". +// src/providers/types.d.ts:46:1 - (ae-undocumented) Missing documentation for "AuthProviderFactory". +// src/providers/types.d.ts:51:1 - (ae-undocumented) Missing documentation for "AuthResponse". +// src/providers/types.d.ts:56:1 - (ae-undocumented) Missing documentation for "ProfileInfo". +// src/providers/types.d.ts:61:1 - (ae-undocumented) Missing documentation for "SignInInfo". +// src/providers/types.d.ts:66:1 - (ae-undocumented) Missing documentation for "SignInResolver". +// src/providers/types.d.ts:96:1 - (ae-undocumented) Missing documentation for "StateEncoder". +// src/service/router.d.ts:9:1 - (ae-undocumented) Missing documentation for "RouterOptions". +// src/service/router.d.ts:10:5 - (ae-undocumented) Missing documentation for "logger". +// src/service/router.d.ts:11:5 - (ae-undocumented) Missing documentation for "database". +// src/service/router.d.ts:12:5 - (ae-undocumented) Missing documentation for "config". +// src/service/router.d.ts:13:5 - (ae-undocumented) Missing documentation for "discovery". +// src/service/router.d.ts:14:5 - (ae-undocumented) Missing documentation for "tokenManager". +// src/service/router.d.ts:15:5 - (ae-undocumented) Missing documentation for "auth". +// src/service/router.d.ts:16:5 - (ae-undocumented) Missing documentation for "httpAuth". +// src/service/router.d.ts:17:5 - (ae-undocumented) Missing documentation for "tokenFactoryAlgorithm". +// src/service/router.d.ts:18:5 - (ae-undocumented) Missing documentation for "providerFactories". +// src/service/router.d.ts:19:5 - (ae-undocumented) Missing documentation for "disableDefaultProviderFactories". +// src/service/router.d.ts:20:5 - (ae-undocumented) Missing documentation for "catalogApi". +// src/service/router.d.ts:21:5 - (ae-undocumented) Missing documentation for "ownershipResolver". +// src/service/router.d.ts:24:1 - (ae-undocumented) Missing documentation for "createRouter". ``` diff --git a/plugins/auth-node/api-report.md b/plugins/auth-node/api-report.api.md similarity index 58% rename from plugins/auth-node/api-report.md rename to plugins/auth-node/api-report.api.md index 5a8750127d..4cf9d5fd4b 100644 --- a/plugins/auth-node/api-report.md +++ b/plugins/auth-node/api-report.api.md @@ -703,4 +703,128 @@ export type WebMessageResponse = type: 'authorization_response'; error: Error; }; + +// Warnings were encountered during analysis: +// +// src/extensions/AuthOwnershipResolutionExtensionPoint.d.ts:3:1 - (ae-undocumented) Missing documentation for "AuthOwnershipResolutionExtensionPoint". +// src/extensions/AuthOwnershipResolutionExtensionPoint.d.ts:4:5 - (ae-undocumented) Missing documentation for "setAuthOwnershipResolver". +// src/extensions/AuthOwnershipResolutionExtensionPoint.d.ts:7:22 - (ae-undocumented) Missing documentation for "authOwnershipResolutionExtensionPoint". +// src/extensions/AuthProvidersExtensionPoint.d.ts:3:1 - (ae-undocumented) Missing documentation for "AuthProviderRegistrationOptions". +// src/extensions/AuthProvidersExtensionPoint.d.ts:4:5 - (ae-undocumented) Missing documentation for "providerId". +// src/extensions/AuthProvidersExtensionPoint.d.ts:5:5 - (ae-undocumented) Missing documentation for "factory". +// src/extensions/AuthProvidersExtensionPoint.d.ts:8:1 - (ae-undocumented) Missing documentation for "AuthProvidersExtensionPoint". +// src/extensions/AuthProvidersExtensionPoint.d.ts:9:5 - (ae-undocumented) Missing documentation for "registerProvider". +// src/extensions/AuthProvidersExtensionPoint.d.ts:12:22 - (ae-undocumented) Missing documentation for "authProvidersExtensionPoint". +// src/flow/sendWebMessageResponse.d.ts:17:1 - (ae-undocumented) Missing documentation for "sendWebMessageResponse". +// src/identity/DefaultIdentityClient.d.ts:35:5 - (ae-undocumented) Missing documentation for "getIdentity". +// src/identity/IdentityClient.d.ts:13:5 - (ae-undocumented) Missing documentation for "create". +// src/oauth/OAuthEnvironmentHandler.d.ts:5:1 - (ae-undocumented) Missing documentation for "OAuthEnvironmentHandler". +// src/oauth/OAuthEnvironmentHandler.d.ts:7:5 - (ae-undocumented) Missing documentation for "mapConfig". +// src/oauth/OAuthEnvironmentHandler.d.ts:9:5 - (ae-undocumented) Missing documentation for "start". +// src/oauth/OAuthEnvironmentHandler.d.ts:10:5 - (ae-undocumented) Missing documentation for "frameHandler". +// src/oauth/OAuthEnvironmentHandler.d.ts:11:5 - (ae-undocumented) Missing documentation for "refresh". +// src/oauth/OAuthEnvironmentHandler.d.ts:12:5 - (ae-undocumented) Missing documentation for "logout". +// src/oauth/PassportOAuthAuthenticatorHelper.d.ts:6:1 - (ae-undocumented) Missing documentation for "PassportOAuthResult". +// src/oauth/PassportOAuthAuthenticatorHelper.d.ts:17:1 - (ae-undocumented) Missing documentation for "PassportOAuthPrivateInfo". +// src/oauth/PassportOAuthAuthenticatorHelper.d.ts:21:1 - (ae-undocumented) Missing documentation for "PassportOAuthDoneCallback". +// src/oauth/PassportOAuthAuthenticatorHelper.d.ts:23:1 - (ae-undocumented) Missing documentation for "PassportOAuthAuthenticatorHelper". +// src/oauth/PassportOAuthAuthenticatorHelper.d.ts:25:5 - (ae-undocumented) Missing documentation for "defaultProfileTransform". +// src/oauth/PassportOAuthAuthenticatorHelper.d.ts:26:5 - (ae-undocumented) Missing documentation for "from". +// src/oauth/PassportOAuthAuthenticatorHelper.d.ts:28:5 - (ae-undocumented) Missing documentation for "start". +// src/oauth/PassportOAuthAuthenticatorHelper.d.ts:32:5 - (ae-undocumented) Missing documentation for "authenticate". +// src/oauth/PassportOAuthAuthenticatorHelper.d.ts:33:5 - (ae-undocumented) Missing documentation for "refresh". +// src/oauth/PassportOAuthAuthenticatorHelper.d.ts:34:5 - (ae-undocumented) Missing documentation for "fetchProfile". +// src/oauth/createOAuthProviderFactory.d.ts:6:1 - (ae-undocumented) Missing documentation for "createOAuthProviderFactory". +// src/oauth/createOAuthRouteHandlers.d.ts:6:1 - (ae-undocumented) Missing documentation for "OAuthRouteHandlersOptions". +// src/oauth/createOAuthRouteHandlers.d.ts:7:5 - (ae-undocumented) Missing documentation for "authenticator". +// src/oauth/createOAuthRouteHandlers.d.ts:8:5 - (ae-undocumented) Missing documentation for "appUrl". +// src/oauth/createOAuthRouteHandlers.d.ts:9:5 - (ae-undocumented) Missing documentation for "baseUrl". +// src/oauth/createOAuthRouteHandlers.d.ts:10:5 - (ae-undocumented) Missing documentation for "isOriginAllowed". +// src/oauth/createOAuthRouteHandlers.d.ts:11:5 - (ae-undocumented) Missing documentation for "providerId". +// src/oauth/createOAuthRouteHandlers.d.ts:12:5 - (ae-undocumented) Missing documentation for "config". +// src/oauth/createOAuthRouteHandlers.d.ts:13:5 - (ae-undocumented) Missing documentation for "resolverContext". +// src/oauth/createOAuthRouteHandlers.d.ts:14:5 - (ae-undocumented) Missing documentation for "additionalScopes". +// src/oauth/createOAuthRouteHandlers.d.ts:15:5 - (ae-undocumented) Missing documentation for "stateTransform". +// src/oauth/createOAuthRouteHandlers.d.ts:16:5 - (ae-undocumented) Missing documentation for "profileTransform". +// src/oauth/createOAuthRouteHandlers.d.ts:17:5 - (ae-undocumented) Missing documentation for "cookieConfigurer". +// src/oauth/createOAuthRouteHandlers.d.ts:18:5 - (ae-undocumented) Missing documentation for "signInResolver". +// src/oauth/createOAuthRouteHandlers.d.ts:21:1 - (ae-undocumented) Missing documentation for "createOAuthRouteHandlers". +// src/oauth/state.d.ts:16:1 - (ae-undocumented) Missing documentation for "OAuthStateTransform". +// src/oauth/state.d.ts:22:1 - (ae-undocumented) Missing documentation for "encodeOAuthState". +// src/oauth/state.d.ts:24:1 - (ae-undocumented) Missing documentation for "decodeOAuthState". +// src/oauth/types.d.ts:5:1 - (ae-undocumented) Missing documentation for "OAuthSession". +// src/oauth/types.d.ts:6:5 - (ae-undocumented) Missing documentation for "accessToken". +// src/oauth/types.d.ts:7:5 - (ae-undocumented) Missing documentation for "tokenType". +// src/oauth/types.d.ts:8:5 - (ae-undocumented) Missing documentation for "idToken". +// src/oauth/types.d.ts:9:5 - (ae-undocumented) Missing documentation for "scope". +// src/oauth/types.d.ts:10:5 - (ae-undocumented) Missing documentation for "expiresInSeconds". +// src/oauth/types.d.ts:11:5 - (ae-undocumented) Missing documentation for "refreshToken". +// src/oauth/types.d.ts:12:5 - (ae-undocumented) Missing documentation for "refreshTokenExpiresInSeconds". +// src/oauth/types.d.ts:15:1 - (ae-undocumented) Missing documentation for "OAuthAuthenticatorScopeOptions". +// src/oauth/types.d.ts:16:5 - (ae-undocumented) Missing documentation for "persist". +// src/oauth/types.d.ts:17:5 - (ae-undocumented) Missing documentation for "required". +// src/oauth/types.d.ts:18:5 - (ae-undocumented) Missing documentation for "transform". +// src/oauth/types.d.ts:30:1 - (ae-undocumented) Missing documentation for "OAuthAuthenticatorStartInput". +// src/oauth/types.d.ts:31:5 - (ae-undocumented) Missing documentation for "scope". +// src/oauth/types.d.ts:32:5 - (ae-undocumented) Missing documentation for "state". +// src/oauth/types.d.ts:33:5 - (ae-undocumented) Missing documentation for "req". +// src/oauth/types.d.ts:36:1 - (ae-undocumented) Missing documentation for "OAuthAuthenticatorAuthenticateInput". +// src/oauth/types.d.ts:37:5 - (ae-undocumented) Missing documentation for "req". +// src/oauth/types.d.ts:40:1 - (ae-undocumented) Missing documentation for "OAuthAuthenticatorRefreshInput". +// src/oauth/types.d.ts:41:5 - (ae-undocumented) Missing documentation for "scope". +// src/oauth/types.d.ts:42:5 - (ae-undocumented) Missing documentation for "refreshToken". +// src/oauth/types.d.ts:43:5 - (ae-undocumented) Missing documentation for "req". +// src/oauth/types.d.ts:46:1 - (ae-undocumented) Missing documentation for "OAuthAuthenticatorLogoutInput". +// src/oauth/types.d.ts:47:5 - (ae-undocumented) Missing documentation for "accessToken". +// src/oauth/types.d.ts:48:5 - (ae-undocumented) Missing documentation for "refreshToken". +// src/oauth/types.d.ts:49:5 - (ae-undocumented) Missing documentation for "req". +// src/oauth/types.d.ts:52:1 - (ae-undocumented) Missing documentation for "OAuthAuthenticatorResult". +// src/oauth/types.d.ts:53:5 - (ae-undocumented) Missing documentation for "fullProfile". +// src/oauth/types.d.ts:54:5 - (ae-undocumented) Missing documentation for "session". +// src/oauth/types.d.ts:57:1 - (ae-undocumented) Missing documentation for "OAuthAuthenticator". +// src/oauth/types.d.ts:58:5 - (ae-undocumented) Missing documentation for "defaultProfileTransform". +// src/oauth/types.d.ts:60:5 - (ae-undocumented) Missing documentation for "shouldPersistScopes". +// src/oauth/types.d.ts:61:5 - (ae-undocumented) Missing documentation for "scopes". +// src/oauth/types.d.ts:62:5 - (ae-undocumented) Missing documentation for "initialize". +// src/oauth/types.d.ts:66:5 - (ae-undocumented) Missing documentation for "start". +// src/oauth/types.d.ts:70:5 - (ae-undocumented) Missing documentation for "authenticate". +// src/oauth/types.d.ts:71:5 - (ae-undocumented) Missing documentation for "refresh". +// src/oauth/types.d.ts:72:5 - (ae-undocumented) Missing documentation for "logout". +// src/oauth/types.d.ts:75:1 - (ae-undocumented) Missing documentation for "createOAuthAuthenticator". +// src/passport/PassportHelpers.d.ts:6:1 - (ae-undocumented) Missing documentation for "PassportHelpers". +// src/passport/PassportHelpers.d.ts:8:5 - (ae-undocumented) Missing documentation for "transformProfile". +// src/passport/PassportHelpers.d.ts:9:5 - (ae-undocumented) Missing documentation for "executeRedirectStrategy". +// src/passport/PassportHelpers.d.ts:19:5 - (ae-undocumented) Missing documentation for "executeFrameHandlerStrategy". +// src/passport/PassportHelpers.d.ts:23:5 - (ae-undocumented) Missing documentation for "executeRefreshTokenStrategy". +// src/passport/PassportHelpers.d.ts:34:5 - (ae-undocumented) Missing documentation for "executeFetchUserProfileStrategy". +// src/passport/types.d.ts:3:1 - (ae-undocumented) Missing documentation for "PassportProfile". +// src/passport/types.d.ts:9:1 - (ae-undocumented) Missing documentation for "PassportDoneCallback". +// src/proxy/createProxyAuthProviderFactory.d.ts:5:1 - (ae-undocumented) Missing documentation for "createProxyAuthProviderFactory". +// src/proxy/createProxyRouteHandlers.d.ts:5:1 - (ae-undocumented) Missing documentation for "ProxyAuthRouteHandlersOptions". +// src/proxy/createProxyRouteHandlers.d.ts:6:5 - (ae-undocumented) Missing documentation for "authenticator". +// src/proxy/createProxyRouteHandlers.d.ts:7:5 - (ae-undocumented) Missing documentation for "config". +// src/proxy/createProxyRouteHandlers.d.ts:8:5 - (ae-undocumented) Missing documentation for "resolverContext". +// src/proxy/createProxyRouteHandlers.d.ts:9:5 - (ae-undocumented) Missing documentation for "signInResolver". +// src/proxy/createProxyRouteHandlers.d.ts:10:5 - (ae-undocumented) Missing documentation for "profileTransform". +// src/proxy/createProxyRouteHandlers.d.ts:13:1 - (ae-undocumented) Missing documentation for "createProxyAuthRouteHandlers". +// src/proxy/types.d.ts:5:1 - (ae-undocumented) Missing documentation for "ProxyAuthenticator". +// src/proxy/types.d.ts:6:5 - (ae-undocumented) Missing documentation for "defaultProfileTransform". +// src/proxy/types.d.ts:7:5 - (ae-undocumented) Missing documentation for "initialize". +// src/proxy/types.d.ts:10:5 - (ae-undocumented) Missing documentation for "authenticate". +// src/proxy/types.d.ts:18:1 - (ae-undocumented) Missing documentation for "createProxyAuthenticator". +// src/sign-in/createSignInResolverFactory.d.ts:5:1 - (ae-undocumented) Missing documentation for "SignInResolverFactory". +// src/sign-in/createSignInResolverFactory.d.ts:6:5 - (ae-undocumented) Missing documentation for "__call". +// src/sign-in/createSignInResolverFactory.d.ts:7:5 - (ae-undocumented) Missing documentation for "optionsJsonSchema". +// src/sign-in/createSignInResolverFactory.d.ts:10:1 - (ae-undocumented) Missing documentation for "SignInResolverFactoryOptions". +// src/sign-in/createSignInResolverFactory.d.ts:11:5 - (ae-undocumented) Missing documentation for "optionsSchema". +// src/sign-in/createSignInResolverFactory.d.ts:12:5 - (ae-undocumented) Missing documentation for "create". +// src/sign-in/createSignInResolverFactory.d.ts:15:1 - (ae-undocumented) Missing documentation for "createSignInResolverFactory". +// src/sign-in/readDeclarativeSignInResolver.d.ts:5:1 - (ae-undocumented) Missing documentation for "ReadDeclarativeSignInResolverOptions". +// src/sign-in/readDeclarativeSignInResolver.d.ts:6:5 - (ae-undocumented) Missing documentation for "config". +// src/sign-in/readDeclarativeSignInResolver.d.ts:7:5 - (ae-undocumented) Missing documentation for "signInResolverFactories". +// src/sign-in/readDeclarativeSignInResolver.d.ts:12:1 - (ae-undocumented) Missing documentation for "readDeclarativeSignInResolver". +// src/types.d.ts:139:5 - (ae-undocumented) Missing documentation for "resolveOwnershipEntityRefs". +// src/types.d.ts:204:1 - (ae-undocumented) Missing documentation for "AuthProviderConfig". +// src/types.d.ts:224:1 - (ae-undocumented) Missing documentation for "AuthProviderFactory". +// src/types.d.ts:250:1 - (ae-undocumented) Missing documentation for "ClientAuthResponse". ``` diff --git a/plugins/auth-react/api-report.md b/plugins/auth-react/api-report.api.md similarity index 100% rename from plugins/auth-react/api-report.md rename to plugins/auth-react/api-report.api.md diff --git a/plugins/bitbucket-cloud-common/api-report.api.md b/plugins/bitbucket-cloud-common/api-report.api.md new file mode 100644 index 0000000000..93fcbffbc6 --- /dev/null +++ b/plugins/bitbucket-cloud-common/api-report.api.md @@ -0,0 +1,625 @@ +## API Report File for "@backstage/plugin-bitbucket-cloud-common" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts +import { BitbucketCloudIntegrationConfig } from '@backstage/integration'; + +// @public (undocumented) +export class BitbucketCloudClient { + // (undocumented) + static fromConfig( + config: BitbucketCloudIntegrationConfig, + ): BitbucketCloudClient; + // (undocumented) + listProjectsByWorkspace( + workspace: string, + options?: FilterAndSortOptions & PartialResponseOptions, + ): WithPagination; + // (undocumented) + listRepositoriesByWorkspace( + workspace: string, + options?: FilterAndSortOptions & PartialResponseOptions, + ): WithPagination; + // (undocumented) + listWorkspaces( + options?: FilterAndSortOptions & PartialResponseOptions, + ): WithPagination; + // (undocumented) + searchCode( + workspace: string, + query: string, + options?: FilterAndSortOptions & PartialResponseOptions, + ): WithPagination; +} + +// @public (undocumented) +export namespace Events { + // (undocumented) + export interface Change { + // (undocumented) + closed: boolean; + // (undocumented) + commits: Models.Commit[]; + // (undocumented) + created: boolean; + // (undocumented) + forced: boolean; + // (undocumented) + links: ChangeLinks; + // (undocumented) + new: Models.Branch; + // (undocumented) + old: Models.Branch; + // (undocumented) + truncated: boolean; + } + // (undocumented) + export interface ChangeLinks { + // (undocumented) + commits: Models.Link; + // (undocumented) + diff: Models.Link; + // (undocumented) + html: Models.Link; + } + // (undocumented) + export interface RepoEvent { + // (undocumented) + actor: Models.Account; + // (undocumented) + repository: Models.Repository & { + workspace: Models.Workspace; + }; + } + // (undocumented) + export interface RepoPush { + // (undocumented) + changes: Change[]; + } + // (undocumented) + export interface RepoPushEvent extends RepoEvent { + // (undocumented) + push: RepoPush; + } +} + +// @public (undocumented) +export type FilterAndSortOptions = { + q?: string; + sort?: string; +}; + +// @public (undocumented) +export namespace Models { + export interface Account extends ModelObject { + // (undocumented) + created_on?: string; + // (undocumented) + display_name?: string; + // (undocumented) + links?: AccountLinks; + // (undocumented) + username?: string; + // (undocumented) + uuid?: string; + } + export interface AccountLinks { + // (undocumented) + [key: string]: unknown; + // (undocumented) + avatar?: Link; + } + export interface Author extends ModelObject { + raw?: string; + // (undocumented) + user?: Account; + } + export interface BaseCommit extends ModelObject { + // (undocumented) + author?: Author; + // (undocumented) + date?: string; + // (undocumented) + hash?: string; + // (undocumented) + message?: string; + // (undocumented) + parents?: Array; + // (undocumented) + summary?: BaseCommitSummary; + } + // (undocumented) + export interface BaseCommitSummary { + html?: string; + markup?: BaseCommitSummaryMarkupEnum; + raw?: string; + } + const BaseCommitSummaryMarkupEnum: { + readonly Markdown: 'markdown'; + readonly Creole: 'creole'; + readonly Plaintext: 'plaintext'; + }; + export type BaseCommitSummaryMarkupEnum = + (typeof BaseCommitSummaryMarkupEnum)[keyof typeof BaseCommitSummaryMarkupEnum]; + export interface Branch { + default_merge_strategy?: string; + // (undocumented) + links?: RefLinks; + merge_strategies?: Array; + name?: string; + // (undocumented) + target?: Commit; + // (undocumented) + type: string; + } + const BranchMergeStrategiesEnum: { + readonly MergeCommit: 'merge_commit'; + readonly Squash: 'squash'; + readonly FastForward: 'fast_forward'; + }; + export type BranchMergeStrategiesEnum = + (typeof BranchMergeStrategiesEnum)[keyof typeof BranchMergeStrategiesEnum]; + export interface Commit extends BaseCommit { + // (undocumented) + participants?: Array; + // (undocumented) + repository?: Repository; + } + export interface CommitFile { + // (undocumented) + [key: string]: unknown; + // (undocumented) + attributes?: CommitFileAttributesEnum; + // (undocumented) + commit?: Commit; + escaped_path?: string; + path?: string; + // (undocumented) + type: string; + } + const // (undocumented) + CommitFileAttributesEnum: { + readonly Link: 'link'; + readonly Executable: 'executable'; + readonly Subrepository: 'subrepository'; + readonly Binary: 'binary'; + readonly Lfs: 'lfs'; + }; + // (undocumented) + export type CommitFileAttributesEnum = + (typeof CommitFileAttributesEnum)[keyof typeof CommitFileAttributesEnum]; + export interface Link { + // (undocumented) + href?: string; + // (undocumented) + name?: string; + } + export interface ModelObject { + // (undocumented) + [key: string]: unknown; + // (undocumented) + type: string; + } + export interface Paginated { + next?: string; + page?: number; + pagelen?: number; + previous?: string; + size?: number; + values?: Array | Set; + } + export interface PaginatedProjects extends Paginated { + values?: Set; + } + export interface PaginatedRepositories extends Paginated { + values?: Set; + } + export interface PaginatedWorkspaces extends Paginated { + values?: Set; + } + export interface Participant extends ModelObject { + // (undocumented) + approved?: boolean; + participated_on?: string; + // (undocumented) + role?: ParticipantRoleEnum; + // (undocumented) + state?: ParticipantStateEnum; + // (undocumented) + user?: Account; + } + const // (undocumented) + ParticipantRoleEnum: { + readonly Participant: 'PARTICIPANT'; + readonly Reviewer: 'REVIEWER'; + }; + // (undocumented) + export type ParticipantRoleEnum = + (typeof ParticipantRoleEnum)[keyof typeof ParticipantRoleEnum]; + const // (undocumented) + ParticipantStateEnum: { + readonly Approved: 'approved'; + readonly ChangesRequested: 'changes_requested'; + readonly Null: 'null'; + }; + // (undocumented) + export type ParticipantStateEnum = + (typeof ParticipantStateEnum)[keyof typeof ParticipantStateEnum]; + export interface Project extends ModelObject { + // (undocumented) + created_on?: string; + // (undocumented) + description?: string; + has_publicly_visible_repos?: boolean; + is_private?: boolean; + key?: string; + // (undocumented) + links?: ProjectLinks; + name?: string; + // (undocumented) + owner?: Team; + // (undocumented) + updated_on?: string; + uuid?: string; + } + // (undocumented) + export interface ProjectLinks { + // (undocumented) + avatar?: Link; + // (undocumented) + html?: Link; + } + // (undocumented) + export interface RefLinks { + // (undocumented) + commits?: Link; + // (undocumented) + html?: Link; + // (undocumented) + self?: Link; + } + export interface Repository extends ModelObject { + // (undocumented) + created_on?: string; + // (undocumented) + description?: string; + fork_policy?: RepositoryForkPolicyEnum; + full_name?: string; + has_issues?: boolean; + has_wiki?: boolean; + // (undocumented) + is_private?: boolean; + // (undocumented) + language?: string; + // (undocumented) + links?: RepositoryLinks; + // (undocumented) + mainbranch?: Branch; + // (undocumented) + name?: string; + // (undocumented) + owner?: Account; + // (undocumented) + parent?: Repository; + // (undocumented) + project?: Project; + // (undocumented) + scm?: RepositoryScmEnum; + // (undocumented) + size?: number; + slug?: string; + // (undocumented) + updated_on?: string; + uuid?: string; + } + const RepositoryForkPolicyEnum: { + readonly AllowForks: 'allow_forks'; + readonly NoPublicForks: 'no_public_forks'; + readonly NoForks: 'no_forks'; + }; + export type RepositoryForkPolicyEnum = + (typeof RepositoryForkPolicyEnum)[keyof typeof RepositoryForkPolicyEnum]; + const // (undocumented) + RepositoryScmEnum: { + readonly Git: 'git'; + }; + // (undocumented) + export interface RepositoryLinks { + // (undocumented) + avatar?: Link; + // (undocumented) + clone?: Array; + // (undocumented) + commits?: Link; + // (undocumented) + downloads?: Link; + // (undocumented) + forks?: Link; + // (undocumented) + hooks?: Link; + // (undocumented) + html?: Link; + // (undocumented) + pullrequests?: Link; + // (undocumented) + self?: Link; + // (undocumented) + watchers?: Link; + } + // (undocumented) + export type RepositoryScmEnum = + (typeof RepositoryScmEnum)[keyof typeof RepositoryScmEnum]; + // (undocumented) + export interface SearchCodeSearchResult { + // (undocumented) + readonly content_match_count?: number; + // (undocumented) + readonly content_matches?: Array; + // (undocumented) + file?: CommitFile; + // (undocumented) + readonly path_matches?: Array; + // (undocumented) + readonly type?: string; + } + // (undocumented) + export interface SearchContentMatch { + // (undocumented) + readonly lines?: Array; + } + // (undocumented) + export interface SearchLine { + // (undocumented) + readonly line?: number; + // (undocumented) + readonly segments?: Array; + } + // (undocumented) + export interface SearchResultPage extends Paginated { + // (undocumented) + readonly query_substituted?: boolean; + readonly values?: Array; + } + // (undocumented) + export interface SearchSegment { + // (undocumented) + readonly match?: boolean; + // (undocumented) + readonly text?: string; + } + export interface Team extends Account { + // (undocumented) + links?: TeamLinks; + } + export interface TeamLinks extends AccountLinks { + // (undocumented) + html?: Link; + // (undocumented) + members?: Link; + // (undocumented) + projects?: Link; + // (undocumented) + repositories?: Link; + // (undocumented) + self?: Link; + } + export interface Workspace extends ModelObject { + // (undocumented) + created_on?: string; + is_private?: boolean; + // (undocumented) + links?: WorkspaceLinks; + name?: string; + slug?: string; + // (undocumented) + updated_on?: string; + uuid?: string; + } + // (undocumented) + export interface WorkspaceLinks { + // (undocumented) + avatar?: Link; + // (undocumented) + html?: Link; + // (undocumented) + members?: Link; + // (undocumented) + owners?: Link; + // (undocumented) + projects?: Link; + // (undocumented) + repositories?: Link; + // (undocumented) + self?: Link; + // (undocumented) + snippets?: Link; + } +} + +// @public (undocumented) +export type PaginationOptions = { + page?: number; + pagelen?: number; +}; + +// @public (undocumented) +export type PartialResponseOptions = { + fields?: string; +}; + +// @public (undocumented) +export type RequestOptions = FilterAndSortOptions & + PaginationOptions & + PartialResponseOptions & { + [key: string]: string | number | undefined; + }; + +// @public (undocumented) +export class WithPagination< + TPage extends Models.Paginated, + TResultItem, +> { + constructor( + createUrl: (options: PaginationOptions) => URL, + fetch: (url: URL) => Promise, + ); + // (undocumented) + getPage(options?: PaginationOptions): Promise; + // (undocumented) + iteratePages(options?: PaginationOptions): AsyncGenerator; + // (undocumented) + iterateResults( + options?: PaginationOptions, + ): AsyncGenerator, void, unknown>; +} + +// Warnings were encountered during analysis: +// +// src/BitbucketCloudClient.d.ts:6:1 - (ae-undocumented) Missing documentation for "BitbucketCloudClient". +// src/BitbucketCloudClient.d.ts:8:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/BitbucketCloudClient.d.ts:10:5 - (ae-undocumented) Missing documentation for "searchCode". +// src/BitbucketCloudClient.d.ts:11:5 - (ae-undocumented) Missing documentation for "listRepositoriesByWorkspace". +// src/BitbucketCloudClient.d.ts:12:5 - (ae-undocumented) Missing documentation for "listProjectsByWorkspace". +// src/BitbucketCloudClient.d.ts:13:5 - (ae-undocumented) Missing documentation for "listWorkspaces". +// src/events/index.d.ts:3:1 - (ae-undocumented) Missing documentation for "Events". +// src/events/index.d.ts:5:5 - (ae-undocumented) Missing documentation for "RepoEvent". +// src/events/index.d.ts:6:9 - (ae-undocumented) Missing documentation for "repository". +// src/events/index.d.ts:9:9 - (ae-undocumented) Missing documentation for "actor". +// src/events/index.d.ts:12:5 - (ae-undocumented) Missing documentation for "RepoPushEvent". +// src/events/index.d.ts:13:9 - (ae-undocumented) Missing documentation for "push". +// src/events/index.d.ts:16:5 - (ae-undocumented) Missing documentation for "RepoPush". +// src/events/index.d.ts:17:9 - (ae-undocumented) Missing documentation for "changes". +// src/events/index.d.ts:20:5 - (ae-undocumented) Missing documentation for "Change". +// src/events/index.d.ts:21:9 - (ae-undocumented) Missing documentation for "old". +// src/events/index.d.ts:22:9 - (ae-undocumented) Missing documentation for "new". +// src/events/index.d.ts:23:9 - (ae-undocumented) Missing documentation for "truncated". +// src/events/index.d.ts:24:9 - (ae-undocumented) Missing documentation for "created". +// src/events/index.d.ts:25:9 - (ae-undocumented) Missing documentation for "forced". +// src/events/index.d.ts:26:9 - (ae-undocumented) Missing documentation for "closed". +// src/events/index.d.ts:27:9 - (ae-undocumented) Missing documentation for "links". +// src/events/index.d.ts:28:9 - (ae-undocumented) Missing documentation for "commits". +// src/events/index.d.ts:31:5 - (ae-undocumented) Missing documentation for "ChangeLinks". +// src/events/index.d.ts:32:9 - (ae-undocumented) Missing documentation for "commits". +// src/events/index.d.ts:33:9 - (ae-undocumented) Missing documentation for "diff". +// src/events/index.d.ts:34:9 - (ae-undocumented) Missing documentation for "html". +// src/models/index.d.ts:13:1 - (ae-undocumented) Missing documentation for "Models". +// src/models/index.d.ts:19:9 - (ae-undocumented) Missing documentation for "created_on". +// src/models/index.d.ts:20:9 - (ae-undocumented) Missing documentation for "display_name". +// src/models/index.d.ts:21:9 - (ae-undocumented) Missing documentation for "links". +// src/models/index.d.ts:22:9 - (ae-undocumented) Missing documentation for "username". +// src/models/index.d.ts:23:9 - (ae-undocumented) Missing documentation for "uuid". +// src/models/index.d.ts:30:9 - (ae-undocumented) Missing documentation for "__index". +// src/models/index.d.ts:31:9 - (ae-undocumented) Missing documentation for "avatar". +// src/models/index.d.ts:42:9 - (ae-undocumented) Missing documentation for "user". +// src/models/index.d.ts:49:9 - (ae-undocumented) Missing documentation for "author". +// src/models/index.d.ts:50:9 - (ae-undocumented) Missing documentation for "date". +// src/models/index.d.ts:51:9 - (ae-undocumented) Missing documentation for "hash". +// src/models/index.d.ts:52:9 - (ae-undocumented) Missing documentation for "message". +// src/models/index.d.ts:53:9 - (ae-undocumented) Missing documentation for "parents". +// src/models/index.d.ts:54:9 - (ae-undocumented) Missing documentation for "summary". +// src/models/index.d.ts:59:5 - (ae-undocumented) Missing documentation for "BaseCommitSummary". +// src/models/index.d.ts:92:9 - (ae-undocumented) Missing documentation for "links". +// src/models/index.d.ts:97:9 - (ae-undocumented) Missing documentation for "target". +// src/models/index.d.ts:98:9 - (ae-undocumented) Missing documentation for "type". +// src/models/index.d.ts:127:9 - (ae-undocumented) Missing documentation for "participants". +// src/models/index.d.ts:128:9 - (ae-undocumented) Missing documentation for "repository". +// src/models/index.d.ts:135:9 - (ae-undocumented) Missing documentation for "__index". +// src/models/index.d.ts:136:9 - (ae-undocumented) Missing documentation for "attributes". +// src/models/index.d.ts:137:9 - (ae-undocumented) Missing documentation for "commit". +// src/models/index.d.ts:146:9 - (ae-undocumented) Missing documentation for "type". +// src/models/index.d.ts:151:11 - (ae-undocumented) Missing documentation for "CommitFileAttributesEnum". +// src/models/index.d.ts:161:5 - (ae-undocumented) Missing documentation for "CommitFileAttributesEnum". +// src/models/index.d.ts:167:9 - (ae-undocumented) Missing documentation for "href". +// src/models/index.d.ts:168:9 - (ae-undocumented) Missing documentation for "name". +// src/models/index.d.ts:175:9 - (ae-undocumented) Missing documentation for "__index". +// src/models/index.d.ts:176:9 - (ae-undocumented) Missing documentation for "type". +// src/models/index.d.ts:243:9 - (ae-undocumented) Missing documentation for "approved". +// src/models/index.d.ts:248:9 - (ae-undocumented) Missing documentation for "role". +// src/models/index.d.ts:249:9 - (ae-undocumented) Missing documentation for "state". +// src/models/index.d.ts:250:9 - (ae-undocumented) Missing documentation for "user". +// src/models/index.d.ts:255:11 - (ae-undocumented) Missing documentation for "ParticipantRoleEnum". +// src/models/index.d.ts:262:5 - (ae-undocumented) Missing documentation for "ParticipantRoleEnum". +// src/models/index.d.ts:266:11 - (ae-undocumented) Missing documentation for "ParticipantStateEnum". +// src/models/index.d.ts:274:5 - (ae-undocumented) Missing documentation for "ParticipantStateEnum". +// src/models/index.d.ts:281:9 - (ae-undocumented) Missing documentation for "created_on". +// src/models/index.d.ts:282:9 - (ae-undocumented) Missing documentation for "description". +// src/models/index.d.ts:300:9 - (ae-undocumented) Missing documentation for "links". +// src/models/index.d.ts:305:9 - (ae-undocumented) Missing documentation for "owner". +// src/models/index.d.ts:306:9 - (ae-undocumented) Missing documentation for "updated_on". +// src/models/index.d.ts:315:5 - (ae-undocumented) Missing documentation for "ProjectLinks". +// src/models/index.d.ts:316:9 - (ae-undocumented) Missing documentation for "avatar". +// src/models/index.d.ts:317:9 - (ae-undocumented) Missing documentation for "html". +// src/models/index.d.ts:322:5 - (ae-undocumented) Missing documentation for "RefLinks". +// src/models/index.d.ts:323:9 - (ae-undocumented) Missing documentation for "commits". +// src/models/index.d.ts:324:9 - (ae-undocumented) Missing documentation for "html". +// src/models/index.d.ts:325:9 - (ae-undocumented) Missing documentation for "self". +// src/models/index.d.ts:332:9 - (ae-undocumented) Missing documentation for "created_on". +// src/models/index.d.ts:333:9 - (ae-undocumented) Missing documentation for "description". +// src/models/index.d.ts:362:9 - (ae-undocumented) Missing documentation for "is_private". +// src/models/index.d.ts:363:9 - (ae-undocumented) Missing documentation for "language". +// src/models/index.d.ts:364:9 - (ae-undocumented) Missing documentation for "links". +// src/models/index.d.ts:365:9 - (ae-undocumented) Missing documentation for "mainbranch". +// src/models/index.d.ts:366:9 - (ae-undocumented) Missing documentation for "name". +// src/models/index.d.ts:367:9 - (ae-undocumented) Missing documentation for "owner". +// src/models/index.d.ts:368:9 - (ae-undocumented) Missing documentation for "parent". +// src/models/index.d.ts:369:9 - (ae-undocumented) Missing documentation for "project". +// src/models/index.d.ts:370:9 - (ae-undocumented) Missing documentation for "scm". +// src/models/index.d.ts:371:9 - (ae-undocumented) Missing documentation for "size". +// src/models/index.d.ts:376:9 - (ae-undocumented) Missing documentation for "updated_on". +// src/models/index.d.ts:411:11 - (ae-undocumented) Missing documentation for "RepositoryScmEnum". +// src/models/index.d.ts:417:5 - (ae-undocumented) Missing documentation for "RepositoryScmEnum". +// src/models/index.d.ts:421:5 - (ae-undocumented) Missing documentation for "RepositoryLinks". +// src/models/index.d.ts:422:9 - (ae-undocumented) Missing documentation for "avatar". +// src/models/index.d.ts:423:9 - (ae-undocumented) Missing documentation for "clone". +// src/models/index.d.ts:424:9 - (ae-undocumented) Missing documentation for "commits". +// src/models/index.d.ts:425:9 - (ae-undocumented) Missing documentation for "downloads". +// src/models/index.d.ts:426:9 - (ae-undocumented) Missing documentation for "forks". +// src/models/index.d.ts:427:9 - (ae-undocumented) Missing documentation for "hooks". +// src/models/index.d.ts:428:9 - (ae-undocumented) Missing documentation for "html". +// src/models/index.d.ts:429:9 - (ae-undocumented) Missing documentation for "pullrequests". +// src/models/index.d.ts:430:9 - (ae-undocumented) Missing documentation for "self". +// src/models/index.d.ts:431:9 - (ae-undocumented) Missing documentation for "watchers". +// src/models/index.d.ts:436:5 - (ae-undocumented) Missing documentation for "SearchCodeSearchResult". +// src/models/index.d.ts:437:9 - (ae-undocumented) Missing documentation for "content_match_count". +// src/models/index.d.ts:438:9 - (ae-undocumented) Missing documentation for "content_matches". +// src/models/index.d.ts:439:9 - (ae-undocumented) Missing documentation for "file". +// src/models/index.d.ts:440:9 - (ae-undocumented) Missing documentation for "path_matches". +// src/models/index.d.ts:441:9 - (ae-undocumented) Missing documentation for "type". +// src/models/index.d.ts:446:5 - (ae-undocumented) Missing documentation for "SearchContentMatch". +// src/models/index.d.ts:447:9 - (ae-undocumented) Missing documentation for "lines". +// src/models/index.d.ts:452:5 - (ae-undocumented) Missing documentation for "SearchLine". +// src/models/index.d.ts:453:9 - (ae-undocumented) Missing documentation for "line". +// src/models/index.d.ts:454:9 - (ae-undocumented) Missing documentation for "segments". +// src/models/index.d.ts:459:5 - (ae-undocumented) Missing documentation for "SearchResultPage". +// src/models/index.d.ts:460:9 - (ae-undocumented) Missing documentation for "query_substituted". +// src/models/index.d.ts:469:5 - (ae-undocumented) Missing documentation for "SearchSegment". +// src/models/index.d.ts:470:9 - (ae-undocumented) Missing documentation for "match". +// src/models/index.d.ts:471:9 - (ae-undocumented) Missing documentation for "text". +// src/models/index.d.ts:478:9 - (ae-undocumented) Missing documentation for "links". +// src/models/index.d.ts:485:9 - (ae-undocumented) Missing documentation for "html". +// src/models/index.d.ts:486:9 - (ae-undocumented) Missing documentation for "members". +// src/models/index.d.ts:487:9 - (ae-undocumented) Missing documentation for "projects". +// src/models/index.d.ts:488:9 - (ae-undocumented) Missing documentation for "repositories". +// src/models/index.d.ts:489:9 - (ae-undocumented) Missing documentation for "self". +// src/models/index.d.ts:497:9 - (ae-undocumented) Missing documentation for "created_on". +// src/models/index.d.ts:503:9 - (ae-undocumented) Missing documentation for "links". +// src/models/index.d.ts:512:9 - (ae-undocumented) Missing documentation for "updated_on". +// src/models/index.d.ts:521:5 - (ae-undocumented) Missing documentation for "WorkspaceLinks". +// src/models/index.d.ts:522:9 - (ae-undocumented) Missing documentation for "avatar". +// src/models/index.d.ts:523:9 - (ae-undocumented) Missing documentation for "html". +// src/models/index.d.ts:524:9 - (ae-undocumented) Missing documentation for "members". +// src/models/index.d.ts:525:9 - (ae-undocumented) Missing documentation for "owners". +// src/models/index.d.ts:526:9 - (ae-undocumented) Missing documentation for "projects". +// src/models/index.d.ts:527:9 - (ae-undocumented) Missing documentation for "repositories". +// src/models/index.d.ts:528:9 - (ae-undocumented) Missing documentation for "self". +// src/models/index.d.ts:529:9 - (ae-undocumented) Missing documentation for "snippets". +// src/pagination.d.ts:3:1 - (ae-undocumented) Missing documentation for "PaginationOptions". +// src/pagination.d.ts:8:1 - (ae-undocumented) Missing documentation for "WithPagination". +// src/pagination.d.ts:12:5 - (ae-undocumented) Missing documentation for "getPage". +// src/pagination.d.ts:13:5 - (ae-undocumented) Missing documentation for "iteratePages". +// src/pagination.d.ts:14:5 - (ae-undocumented) Missing documentation for "iterateResults". +// src/types.d.ts:3:1 - (ae-undocumented) Missing documentation for "FilterAndSortOptions". +// src/types.d.ts:8:1 - (ae-undocumented) Missing documentation for "PartialResponseOptions". +// src/types.d.ts:12:1 - (ae-undocumented) Missing documentation for "RequestOptions". +``` diff --git a/plugins/catalog-backend-module-aws/api-report-alpha.md b/plugins/catalog-backend-module-aws/api-report-alpha.api.md similarity index 100% rename from plugins/catalog-backend-module-aws/api-report-alpha.md rename to plugins/catalog-backend-module-aws/api-report-alpha.api.md diff --git a/plugins/catalog-backend-module-aws/api-report.md b/plugins/catalog-backend-module-aws/api-report.api.md similarity index 74% rename from plugins/catalog-backend-module-aws/api-report.md rename to plugins/catalog-backend-module-aws/api-report.api.md index 98d757270e..2f5a9bb105 100644 --- a/plugins/catalog-backend-module-aws/api-report.md +++ b/plugins/catalog-backend-module-aws/api-report.api.md @@ -89,7 +89,6 @@ export class AwsS3DiscoveryProcessor implements CatalogProcessor { // @public export class AwsS3EntityProvider implements EntityProvider { - // (undocumented) connect(connection: EntityProviderConnection): Promise; // (undocumented) static fromConfig( @@ -100,7 +99,6 @@ export class AwsS3EntityProvider implements EntityProvider { scheduler?: SchedulerService; }, ): AwsS3EntityProvider[]; - // (undocumented) getProviderName(): string; // (undocumented) refresh(logger: LoggerService): Promise; @@ -114,4 +112,17 @@ export type EksClusterEntityTransformer = ( cluster: Cluster, accountId: string, ) => Promise; + +// Warnings were encountered during analysis: +// +// src/processors/AwsEKSClusterProcessor.d.ts:18:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/processors/AwsEKSClusterProcessor.d.ts:26:5 - (ae-undocumented) Missing documentation for "getProcessorName". +// src/processors/AwsEKSClusterProcessor.d.ts:27:5 - (ae-undocumented) Missing documentation for "readLocation". +// src/processors/AwsOrganizationCloudAccountProcessor.d.ts:17:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/processors/AwsOrganizationCloudAccountProcessor.d.ts:21:5 - (ae-undocumented) Missing documentation for "getProcessorName". +// src/processors/AwsOrganizationCloudAccountProcessor.d.ts:22:5 - (ae-undocumented) Missing documentation for "readLocation". +// src/processors/AwsS3DiscoveryProcessor.d.ts:15:5 - (ae-undocumented) Missing documentation for "getProcessorName". +// src/processors/AwsS3DiscoveryProcessor.d.ts:16:5 - (ae-undocumented) Missing documentation for "readLocation". +// src/providers/AwsS3EntityProvider.d.ts:21:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/providers/AwsS3EntityProvider.d.ts:32:5 - (ae-undocumented) Missing documentation for "refresh". ``` diff --git a/plugins/catalog-backend-module-azure/api-report-alpha.md b/plugins/catalog-backend-module-azure/api-report-alpha.api.md similarity index 100% rename from plugins/catalog-backend-module-azure/api-report-alpha.md rename to plugins/catalog-backend-module-azure/api-report-alpha.api.md diff --git a/plugins/catalog-backend-module-azure/api-report.md b/plugins/catalog-backend-module-azure/api-report.api.md similarity index 74% rename from plugins/catalog-backend-module-azure/api-report.md rename to plugins/catalog-backend-module-azure/api-report.api.md index 9220b08ab4..78f9a29d1d 100644 --- a/plugins/catalog-backend-module-azure/api-report.md +++ b/plugins/catalog-backend-module-azure/api-report.api.md @@ -39,7 +39,6 @@ export class AzureDevOpsDiscoveryProcessor implements CatalogProcessor { // @public export class AzureDevOpsEntityProvider implements EntityProvider { - // (undocumented) connect(connection: EntityProviderConnection): Promise; // (undocumented) static fromConfig( @@ -50,9 +49,16 @@ export class AzureDevOpsEntityProvider implements EntityProvider { scheduler?: SchedulerService; }, ): AzureDevOpsEntityProvider[]; - // (undocumented) getProviderName(): string; // (undocumented) refresh(logger: LoggerService): Promise; } + +// Warnings were encountered during analysis: +// +// src/processors/AzureDevOpsDiscoveryProcessor.d.ts:26:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/processors/AzureDevOpsDiscoveryProcessor.d.ts:33:5 - (ae-undocumented) Missing documentation for "getProcessorName". +// src/processors/AzureDevOpsDiscoveryProcessor.d.ts:34:5 - (ae-undocumented) Missing documentation for "readLocation". +// src/providers/AzureDevOpsEntityProvider.d.ts:19:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/providers/AzureDevOpsEntityProvider.d.ts:30:5 - (ae-undocumented) Missing documentation for "refresh". ``` diff --git a/plugins/catalog-backend-module-backstage-openapi/api-report.md b/plugins/catalog-backend-module-backstage-openapi/api-report.api.md similarity index 65% rename from plugins/catalog-backend-module-backstage-openapi/api-report.md rename to plugins/catalog-backend-module-backstage-openapi/api-report.api.md index 06334182cb..88ad499e84 100644 --- a/plugins/catalog-backend-module-backstage-openapi/api-report.md +++ b/plugins/catalog-backend-module-backstage-openapi/api-report.api.md @@ -18,5 +18,11 @@ export type MetaApiDocsPluginOptions = { // @public (undocumented) export const metaOpenApiDocsPluginId = 'meta-api-docs'; +// Warnings were encountered during analysis: +// +// src/index.d.ts:4:1 - (ae-undocumented) Missing documentation for "MetaApiDocsPluginOptions". +// src/index.d.ts:10:22 - (ae-undocumented) Missing documentation for "metaOpenApiDocsPluginId". +// src/index.d.ts:14:22 - (ae-undocumented) Missing documentation for "catalogModuleInternalOpenApiSpec". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/catalog-backend-module-bitbucket-cloud/api-report-alpha.md b/plugins/catalog-backend-module-bitbucket-cloud/api-report-alpha.api.md similarity index 69% rename from plugins/catalog-backend-module-bitbucket-cloud/api-report-alpha.md rename to plugins/catalog-backend-module-bitbucket-cloud/api-report-alpha.api.md index 34ec7a692a..3f0a2d1514 100644 --- a/plugins/catalog-backend-module-bitbucket-cloud/api-report-alpha.md +++ b/plugins/catalog-backend-module-bitbucket-cloud/api-report-alpha.api.md @@ -9,5 +9,9 @@ import { BackendFeature } from '@backstage/backend-plugin-api'; const catalogModuleBitbucketCloudEntityProvider: BackendFeature; export default catalogModuleBitbucketCloudEntityProvider; +// Warnings were encountered during analysis: +// +// src/module/catalogModuleBitbucketCloudEntityProvider.d.ts:4:22 - (ae-undocumented) Missing documentation for "catalogModuleBitbucketCloudEntityProvider". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/catalog-backend-module-bitbucket-cloud/api-report.md b/plugins/catalog-backend-module-bitbucket-cloud/api-report.api.md similarity index 79% rename from plugins/catalog-backend-module-bitbucket-cloud/api-report.md rename to plugins/catalog-backend-module-bitbucket-cloud/api-report.api.md index bba0b754e2..47e8184aea 100644 --- a/plugins/catalog-backend-module-bitbucket-cloud/api-report.md +++ b/plugins/catalog-backend-module-bitbucket-cloud/api-report.api.md @@ -16,7 +16,6 @@ import { TokenManager } from '@backstage/backend-common'; // @public export class BitbucketCloudEntityProvider implements EntityProvider { - // (undocumented) connect(connection: EntityProviderConnection): Promise; // (undocumented) static fromConfig( @@ -30,13 +29,17 @@ export class BitbucketCloudEntityProvider implements EntityProvider { tokenManager?: TokenManager; }, ): BitbucketCloudEntityProvider[]; - // (undocumented) getProviderName(): string; - // (undocumented) getTaskId(): string; // (undocumented) onRepoPush(event: Events.RepoPushEvent): Promise; // (undocumented) refresh(logger: LoggerService): Promise; } + +// Warnings were encountered during analysis: +// +// src/providers/BitbucketCloudEntityProvider.d.ts:29:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/providers/BitbucketCloudEntityProvider.d.ts:45:5 - (ae-undocumented) Missing documentation for "refresh". +// src/providers/BitbucketCloudEntityProvider.d.ts:48:5 - (ae-undocumented) Missing documentation for "onRepoPush". ``` diff --git a/plugins/catalog-backend-module-bitbucket-server/api-report-alpha.md b/plugins/catalog-backend-module-bitbucket-server/api-report-alpha.api.md similarity index 68% rename from plugins/catalog-backend-module-bitbucket-server/api-report-alpha.md rename to plugins/catalog-backend-module-bitbucket-server/api-report-alpha.api.md index 7edb314814..49648580f8 100644 --- a/plugins/catalog-backend-module-bitbucket-server/api-report-alpha.md +++ b/plugins/catalog-backend-module-bitbucket-server/api-report-alpha.api.md @@ -9,5 +9,9 @@ import { BackendFeature } from '@backstage/backend-plugin-api'; const catalogModuleBitbucketServerEntityProvider: BackendFeature; export default catalogModuleBitbucketServerEntityProvider; +// Warnings were encountered during analysis: +// +// src/module/catalogModuleBitbucketServerEntityProvider.d.ts:4:22 - (ae-undocumented) Missing documentation for "catalogModuleBitbucketServerEntityProvider". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/catalog-backend-module-bitbucket-server/api-report.md b/plugins/catalog-backend-module-bitbucket-server/api-report.api.md similarity index 70% rename from plugins/catalog-backend-module-bitbucket-server/api-report.md rename to plugins/catalog-backend-module-bitbucket-server/api-report.api.md index 211096639c..a269d91d93 100644 --- a/plugins/catalog-backend-module-bitbucket-server/api-report.md +++ b/plugins/catalog-backend-module-bitbucket-server/api-report.api.md @@ -49,7 +49,6 @@ export class BitbucketServerClient { // @public export class BitbucketServerEntityProvider implements EntityProvider { - // (undocumented) connect(connection: EntityProviderConnection): Promise; // (undocumented) static fromConfig( @@ -61,7 +60,6 @@ export class BitbucketServerEntityProvider implements EntityProvider { scheduler?: SchedulerService; }, ): BitbucketServerEntityProvider[]; - // (undocumented) getProviderName(): string; // (undocumented) refresh(logger: LoggerService): Promise; @@ -111,4 +109,19 @@ export type BitbucketServerRepository = { >; archived: boolean; }; + +// Warnings were encountered during analysis: +// +// src/lib/BitbucketServerClient.d.ts:11:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/lib/BitbucketServerClient.d.ts:17:5 - (ae-undocumented) Missing documentation for "listProjects". +// src/lib/BitbucketServerClient.d.ts:20:5 - (ae-undocumented) Missing documentation for "listRepositories". +// src/lib/BitbucketServerClient.d.ts:24:5 - (ae-undocumented) Missing documentation for "getFile". +// src/lib/BitbucketServerClient.d.ts:29:5 - (ae-undocumented) Missing documentation for "getRepository". +// src/lib/BitbucketServerClient.d.ts:33:5 - (ae-undocumented) Missing documentation for "resolvePath". +// src/lib/BitbucketServerClient.d.ts:48:1 - (ae-undocumented) Missing documentation for "BitbucketServerListOptions". +// src/lib/BitbucketServerClient.d.ts:56:1 - (ae-undocumented) Missing documentation for "BitbucketServerPagedResponse". +// src/lib/types.d.ts:2:1 - (ae-undocumented) Missing documentation for "BitbucketServerRepository". +// src/lib/types.d.ts:14:1 - (ae-undocumented) Missing documentation for "BitbucketServerProject". +// src/providers/BitbucketServerEntityProvider.d.ts:21:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/providers/BitbucketServerEntityProvider.d.ts:33:5 - (ae-undocumented) Missing documentation for "refresh". ``` diff --git a/plugins/catalog-backend-module-gcp/api-report-alpha.md b/plugins/catalog-backend-module-gcp/api-report-alpha.api.md similarity index 100% rename from plugins/catalog-backend-module-gcp/api-report-alpha.md rename to plugins/catalog-backend-module-gcp/api-report-alpha.api.md diff --git a/plugins/catalog-backend-module-gcp/api-report.md b/plugins/catalog-backend-module-gcp/api-report.api.md similarity index 71% rename from plugins/catalog-backend-module-gcp/api-report.md rename to plugins/catalog-backend-module-gcp/api-report.api.md index 6260d07c88..cf490f09ae 100644 --- a/plugins/catalog-backend-module-gcp/api-report.md +++ b/plugins/catalog-backend-module-gcp/api-report.api.md @@ -46,4 +46,12 @@ export class GkeEntityProvider implements EntityProvider { // (undocumented) refresh(): Promise; } + +// Warnings were encountered during analysis: +// +// src/providers/GkeEntityProvider.d.ts:17:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/providers/GkeEntityProvider.d.ts:22:5 - (ae-undocumented) Missing documentation for "fromConfigWithClient". +// src/providers/GkeEntityProvider.d.ts:28:5 - (ae-undocumented) Missing documentation for "getProviderName". +// src/providers/GkeEntityProvider.d.ts:29:5 - (ae-undocumented) Missing documentation for "connect". +// src/providers/GkeEntityProvider.d.ts:35:5 - (ae-undocumented) Missing documentation for "refresh". ``` diff --git a/plugins/catalog-backend-module-gerrit/api-report-alpha.md b/plugins/catalog-backend-module-gerrit/api-report-alpha.api.md similarity index 69% rename from plugins/catalog-backend-module-gerrit/api-report-alpha.md rename to plugins/catalog-backend-module-gerrit/api-report-alpha.api.md index 02aceb07c6..0774a27299 100644 --- a/plugins/catalog-backend-module-gerrit/api-report-alpha.md +++ b/plugins/catalog-backend-module-gerrit/api-report-alpha.api.md @@ -9,5 +9,9 @@ import { BackendFeature } from '@backstage/backend-plugin-api'; const catalogModuleGerritEntityProvider: BackendFeature; export default catalogModuleGerritEntityProvider; +// Warnings were encountered during analysis: +// +// src/module/catalogModuleGerritEntityProvider.d.ts:4:22 - (ae-undocumented) Missing documentation for "catalogModuleGerritEntityProvider". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/catalog-backend-module-gerrit/api-report.md b/plugins/catalog-backend-module-gerrit/api-report.api.md similarity index 65% rename from plugins/catalog-backend-module-gerrit/api-report.md rename to plugins/catalog-backend-module-gerrit/api-report.api.md index abf2a83e7b..29c8af4212 100644 --- a/plugins/catalog-backend-module-gerrit/api-report.md +++ b/plugins/catalog-backend-module-gerrit/api-report.api.md @@ -29,5 +29,13 @@ export class GerritEntityProvider implements EntityProvider { refresh(logger: LoggerService): Promise; } +// Warnings were encountered during analysis: +// +// src/providers/GerritEntityProvider.d.ts:6:1 - (ae-undocumented) Missing documentation for "GerritEntityProvider". +// src/providers/GerritEntityProvider.d.ts:12:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/providers/GerritEntityProvider.d.ts:18:5 - (ae-undocumented) Missing documentation for "getProviderName". +// src/providers/GerritEntityProvider.d.ts:19:5 - (ae-undocumented) Missing documentation for "connect". +// src/providers/GerritEntityProvider.d.ts:21:5 - (ae-undocumented) Missing documentation for "refresh". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/catalog-backend-module-github-org/api-report.md b/plugins/catalog-backend-module-github-org/api-report.api.md similarity index 100% rename from plugins/catalog-backend-module-github-org/api-report.md rename to plugins/catalog-backend-module-github-org/api-report.api.md diff --git a/plugins/catalog-backend-module-github/api-report-alpha.md b/plugins/catalog-backend-module-github/api-report-alpha.api.md similarity index 100% rename from plugins/catalog-backend-module-github/api-report-alpha.md rename to plugins/catalog-backend-module-github/api-report-alpha.api.md diff --git a/plugins/catalog-backend-module-github/api-report.md b/plugins/catalog-backend-module-github/api-report.api.md similarity index 70% rename from plugins/catalog-backend-module-github/api-report.md rename to plugins/catalog-backend-module-github/api-report.api.md index 025d845644..ff118b92f8 100644 --- a/plugins/catalog-backend-module-github/api-report.md +++ b/plugins/catalog-backend-module-github/api-report.api.md @@ -83,7 +83,6 @@ export class GitHubEntityProvider implements EntityProvider { // @public export class GithubEntityProvider implements EntityProvider, EventSubscriber { - // (undocumented) connect(connection: EntityProviderConnection): Promise; // (undocumented) static fromConfig( @@ -95,13 +94,10 @@ export class GithubEntityProvider implements EntityProvider, EventSubscriber { scheduler?: SchedulerService; }, ): GithubEntityProvider[]; - // (undocumented) getProviderName(): string; - // (undocumented) onEvent(params: EventParams): Promise; // (undocumented) refresh(logger: LoggerService): Promise; - // (undocumented) supportsEventTopics(): string[]; } @@ -154,14 +150,12 @@ export class GithubMultiOrgEntityProvider implements EntityProvider { teamTransformer?: TeamTransformer; alwaysUseDefaultNamespace?: boolean; }); - // (undocumented) connect(connection: EntityProviderConnection): Promise; // (undocumented) static fromConfig( config: Config, options: GithubMultiOrgEntityProviderOptions, ): GithubMultiOrgEntityProvider; - // (undocumented) getProviderName(): string; read(options?: { logger?: LoggerService }): Promise; } @@ -231,14 +225,12 @@ export class GithubOrgEntityProvider implements EntityProvider { userTransformer?: UserTransformer; teamTransformer?: TeamTransformer; }); - // (undocumented) connect(connection: EntityProviderConnection): Promise; // (undocumented) static fromConfig( config: Config, options: GithubOrgEntityProviderOptions, ): GithubOrgEntityProvider; - // (undocumented) getProviderName(): string; read(options?: { logger?: LoggerService }): Promise; } @@ -326,4 +318,41 @@ export type UserTransformer = ( item: GithubUser, ctx: TransformerContext, ) => Promise; + +// Warnings were encountered during analysis: +// +// src/analyzers/GithubLocationAnalyzer.d.ts:7:1 - (ae-undocumented) Missing documentation for "GithubLocationAnalyzerOptions". +// src/analyzers/GithubLocationAnalyzer.d.ts:15:1 - (ae-undocumented) Missing documentation for "GithubLocationAnalyzer". +// src/analyzers/GithubLocationAnalyzer.d.ts:21:5 - (ae-undocumented) Missing documentation for "supports". +// src/analyzers/GithubLocationAnalyzer.d.ts:22:5 - (ae-undocumented) Missing documentation for "analyze". +// src/deprecated.d.ts:10:1 - (ae-undocumented) Missing documentation for "GitHubOrgEntityProvider". +// src/deprecated.d.ts:11:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/deprecated.d.ts:17:1 - (ae-undocumented) Missing documentation for "GitHubOrgEntityProviderOptions". +// src/deprecated.d.ts:22:1 - (ae-undocumented) Missing documentation for "GitHubEntityProvider". +// src/deprecated.d.ts:24:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/deprecated.d.ts:30:5 - (ae-undocumented) Missing documentation for "connect". +// src/deprecated.d.ts:31:5 - (ae-undocumented) Missing documentation for "getProviderName". +// src/deprecated.d.ts:32:5 - (ae-undocumented) Missing documentation for "refresh". +// src/lib/defaultTransformers.d.ts:10:5 - (ae-undocumented) Missing documentation for "client". +// src/lib/defaultTransformers.d.ts:11:5 - (ae-undocumented) Missing documentation for "query". +// src/lib/defaultTransformers.d.ts:12:5 - (ae-undocumented) Missing documentation for "org". +// src/processors/GithubDiscoveryProcessor.d.ts:25:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/processors/GithubDiscoveryProcessor.d.ts:34:5 - (ae-undocumented) Missing documentation for "getProcessorName". +// src/processors/GithubDiscoveryProcessor.d.ts:35:5 - (ae-undocumented) Missing documentation for "readLocation". +// src/processors/GithubMultiOrgReaderProcessor.d.ts:19:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/processors/GithubMultiOrgReaderProcessor.d.ts:33:5 - (ae-undocumented) Missing documentation for "getProcessorName". +// src/processors/GithubMultiOrgReaderProcessor.d.ts:34:5 - (ae-undocumented) Missing documentation for "readLocation". +// src/processors/GithubOrgReaderProcessor.d.ts:18:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/processors/GithubOrgReaderProcessor.d.ts:27:5 - (ae-undocumented) Missing documentation for "getProcessorName". +// src/processors/GithubOrgReaderProcessor.d.ts:28:5 - (ae-undocumented) Missing documentation for "readLocation". +// src/providers/GithubEntityProvider.d.ts:22:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/providers/GithubEntityProvider.d.ts:34:5 - (ae-undocumented) Missing documentation for "refresh". +// src/providers/GithubEntityProvider.d.ts:52:8 - (tsdoc-undefined-tag) The TSDoc tag "@private" is not defined in this configuration +// src/providers/GithubEntityProvider.d.ts:61:8 - (tsdoc-undefined-tag) The TSDoc tag "@private" is not defined in this configuration +// src/providers/GithubEntityProvider.d.ts:72:8 - (tsdoc-undefined-tag) The TSDoc tag "@private" is not defined in this configuration +// src/providers/GithubEntityProvider.d.ts:82:8 - (tsdoc-undefined-tag) The TSDoc tag "@private" is not defined in this configuration +// src/providers/GithubEntityProvider.d.ts:94:8 - (tsdoc-undefined-tag) The TSDoc tag "@private" is not defined in this configuration +// src/providers/GithubEntityProvider.d.ts:103:8 - (tsdoc-undefined-tag) The TSDoc tag "@private" is not defined in this configuration +// src/providers/GithubMultiOrgEntityProvider.d.ts:85:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/providers/GithubOrgEntityProvider.d.ts:71:5 - (ae-undocumented) Missing documentation for "fromConfig". ``` diff --git a/plugins/catalog-backend-module-gitlab-org/api-report.md b/plugins/catalog-backend-module-gitlab-org/api-report.api.md similarity index 100% rename from plugins/catalog-backend-module-gitlab-org/api-report.md rename to plugins/catalog-backend-module-gitlab-org/api-report.api.md diff --git a/plugins/catalog-backend-module-gitlab/api-report-alpha.md b/plugins/catalog-backend-module-gitlab/api-report-alpha.api.md similarity index 100% rename from plugins/catalog-backend-module-gitlab/api-report-alpha.md rename to plugins/catalog-backend-module-gitlab/api-report-alpha.api.md diff --git a/plugins/catalog-backend-module-gitlab/api-report.md b/plugins/catalog-backend-module-gitlab/api-report.api.md similarity index 65% rename from plugins/catalog-backend-module-gitlab/api-report.md rename to plugins/catalog-backend-module-gitlab/api-report.api.md index b2c71c787b..143d4b5823 100644 --- a/plugins/catalog-backend-module-gitlab/api-report.md +++ b/plugins/catalog-backend-module-gitlab/api-report.api.md @@ -171,4 +171,29 @@ export interface UserTransformerOptions { // (undocumented) user: GitLabUser; } + +// Warnings were encountered during analysis: +// +// src/GitLabDiscoveryProcessor.d.ts:14:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/GitLabDiscoveryProcessor.d.ts:20:5 - (ae-undocumented) Missing documentation for "getProcessorName". +// src/GitLabDiscoveryProcessor.d.ts:21:5 - (ae-undocumented) Missing documentation for "readLocation". +// src/lib/types.d.ts:48:1 - (ae-undocumented) Missing documentation for "GitLabGroupSamlIdentity". +// src/lib/types.d.ts:193:5 - (ae-undocumented) Missing documentation for "group". +// src/lib/types.d.ts:194:5 - (ae-undocumented) Missing documentation for "providerConfig". +// src/lib/types.d.ts:208:5 - (ae-undocumented) Missing documentation for "user". +// src/lib/types.d.ts:209:5 - (ae-undocumented) Missing documentation for "integrationConfig". +// src/lib/types.d.ts:210:5 - (ae-undocumented) Missing documentation for "providerConfig". +// src/lib/types.d.ts:211:5 - (ae-undocumented) Missing documentation for "groupNameTransformer". +// src/lib/types.d.ts:225:5 - (ae-undocumented) Missing documentation for "groups". +// src/lib/types.d.ts:226:5 - (ae-undocumented) Missing documentation for "providerConfig". +// src/lib/types.d.ts:227:5 - (ae-undocumented) Missing documentation for "groupNameTransformer". +// src/providers/GitlabDiscoveryEntityProvider.d.ts:22:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/providers/GitlabDiscoveryEntityProvider.d.ts:34:5 - (ae-undocumented) Missing documentation for "getProviderName". +// src/providers/GitlabDiscoveryEntityProvider.d.ts:35:5 - (ae-undocumented) Missing documentation for "connect". +// src/providers/GitlabDiscoveryEntityProvider.d.ts:76:15 - (tsdoc-param-tag-with-invalid-type) The @param block should not include a JSDoc-style '{type}' +// src/providers/GitlabDiscoveryEntityProvider.d.ts:77:30 - (tsdoc-escape-right-brace) The "}" character should be escaped using a backslash to avoid confusion with a TSDoc inline tag +// src/providers/GitlabDiscoveryEntityProvider.d.ts:77:17 - (tsdoc-malformed-inline-tag) Expecting a TSDoc tag starting with "{@" +// src/providers/GitlabOrgDiscoveryEntityProvider.d.ts:22:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/providers/GitlabOrgDiscoveryEntityProvider.d.ts:32:5 - (ae-undocumented) Missing documentation for "getProviderName". +// src/providers/GitlabOrgDiscoveryEntityProvider.d.ts:33:5 - (ae-undocumented) Missing documentation for "connect". ``` diff --git a/plugins/catalog-backend-module-incremental-ingestion/api-report-alpha.md b/plugins/catalog-backend-module-incremental-ingestion/api-report-alpha.api.md similarity index 100% rename from plugins/catalog-backend-module-incremental-ingestion/api-report-alpha.md rename to plugins/catalog-backend-module-incremental-ingestion/api-report-alpha.api.md diff --git a/plugins/catalog-backend-module-incremental-ingestion/api-report.md b/plugins/catalog-backend-module-incremental-ingestion/api-report.api.md similarity index 82% rename from plugins/catalog-backend-module-incremental-ingestion/api-report.md rename to plugins/catalog-backend-module-incremental-ingestion/api-report.api.md index 22b497b2f7..5f2abb5f60 100644 --- a/plugins/catalog-backend-module-incremental-ingestion/api-report.md +++ b/plugins/catalog-backend-module-incremental-ingestion/api-report.api.md @@ -94,4 +94,12 @@ export type PluginEnvironment = { reader: UrlReaderService; permissions: PermissionEvaluator; }; + +// Warnings were encountered during analysis: +// +// src/service/IncrementalCatalogBuilder.d.ts:6:1 - (ae-undocumented) Missing documentation for "IncrementalCatalogBuilder". +// src/service/IncrementalCatalogBuilder.d.ts:20:5 - (ae-undocumented) Missing documentation for "build". +// src/service/IncrementalCatalogBuilder.d.ts:23:5 - (ae-undocumented) Missing documentation for "addIncrementalEntityProvider". +// src/types.d.ts:107:1 - (ae-undocumented) Missing documentation for "IncrementalEntityProviderOptions". +// src/types.d.ts:146:1 - (ae-undocumented) Missing documentation for "PluginEnvironment". ``` diff --git a/plugins/catalog-backend-module-ldap/api-report.md b/plugins/catalog-backend-module-ldap/api-report.api.md similarity index 100% rename from plugins/catalog-backend-module-ldap/api-report.md rename to plugins/catalog-backend-module-ldap/api-report.api.md diff --git a/plugins/catalog-backend-module-logs/api-report.md b/plugins/catalog-backend-module-logs/api-report.api.md similarity index 100% rename from plugins/catalog-backend-module-logs/api-report.md rename to plugins/catalog-backend-module-logs/api-report.api.md diff --git a/plugins/catalog-backend-module-msgraph/api-report-alpha.md b/plugins/catalog-backend-module-msgraph/api-report-alpha.api.md similarity index 100% rename from plugins/catalog-backend-module-msgraph/api-report-alpha.md rename to plugins/catalog-backend-module-msgraph/api-report-alpha.api.md diff --git a/plugins/catalog-backend-module-msgraph/api-report.md b/plugins/catalog-backend-module-msgraph/api-report.api.md similarity index 90% rename from plugins/catalog-backend-module-msgraph/api-report.md rename to plugins/catalog-backend-module-msgraph/api-report.api.md index acc3b8531b..449825df37 100644 --- a/plugins/catalog-backend-module-msgraph/api-report.md +++ b/plugins/catalog-backend-module-msgraph/api-report.api.md @@ -128,14 +128,12 @@ export class MicrosoftGraphOrgEntityProvider implements EntityProvider { organizationTransformer?: OrganizationTransformer; providerConfigTransformer?: ProviderConfigTransformer; }); - // (undocumented) connect(connection: EntityProviderConnection): Promise; // (undocumented) static fromConfig( configRoot: Config, options: MicrosoftGraphOrgEntityProviderOptions, ): MicrosoftGraphOrgEntityProvider[]; - // (undocumented) getProviderName(): string; read(options?: { logger?: LoggerService }): Promise; } @@ -292,4 +290,14 @@ export type UserTransformer = ( user: MicrosoftGraph.User, userPhoto?: string, ) => Promise; + +// Warnings were encountered during analysis: +// +// src/microsoftGraph/client.d.ts:109:5 - (ae-undocumented) Missing documentation for "getUserPhoto". +// src/microsoftGraph/client.d.ts:129:5 - (ae-undocumented) Missing documentation for "getGroupPhoto". +// src/microsoftGraph/client.d.ts:176:5 - (ae-unresolved-link) The @link reference could not be resolved: The package "@backstage/plugin-catalog-backend-module-msgraph" does not have an export "entityName" +// src/processors/MicrosoftGraphOrgEntityProvider.d.ts:120:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/processors/MicrosoftGraphOrgReaderProcessor.d.ts:18:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/processors/MicrosoftGraphOrgReaderProcessor.d.ts:31:5 - (ae-undocumented) Missing documentation for "getProcessorName". +// src/processors/MicrosoftGraphOrgReaderProcessor.d.ts:32:5 - (ae-undocumented) Missing documentation for "readLocation". ``` diff --git a/plugins/catalog-backend-module-openapi/api-report.md b/plugins/catalog-backend-module-openapi/api-report.api.md similarity index 71% rename from plugins/catalog-backend-module-openapi/api-report.md rename to plugins/catalog-backend-module-openapi/api-report.api.md index d79d852387..c913e63294 100644 --- a/plugins/catalog-backend-module-openapi/api-report.md +++ b/plugins/catalog-backend-module-openapi/api-report.api.md @@ -47,5 +47,14 @@ export class OpenApiRefProcessor implements CatalogProcessor { preProcessEntity(entity: Entity, location: LocationSpec): Promise; } +// Warnings were encountered during analysis: +// +// src/OpenApiRefProcessor.d.ts:12:1 - (ae-undocumented) Missing documentation for "OpenApiRefProcessor". +// src/OpenApiRefProcessor.d.ts:16:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/OpenApiRefProcessor.d.ts:25:5 - (ae-undocumented) Missing documentation for "getProcessorName". +// src/OpenApiRefProcessor.d.ts:26:5 - (ae-undocumented) Missing documentation for "preProcessEntity". +// src/index.d.ts:8:22 - (ae-undocumented) Missing documentation for "openApiPlaceholderResolver". +// src/jsonSchemaRefPlaceholderResolver.d.ts:4:1 - (ae-undocumented) Missing documentation for "jsonSchemaRefPlaceholderResolver". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/catalog-backend-module-puppetdb/api-report-alpha.md b/plugins/catalog-backend-module-puppetdb/api-report-alpha.api.md similarity index 100% rename from plugins/catalog-backend-module-puppetdb/api-report-alpha.md rename to plugins/catalog-backend-module-puppetdb/api-report-alpha.api.md diff --git a/plugins/catalog-backend-module-puppetdb/api-report.md b/plugins/catalog-backend-module-puppetdb/api-report.api.md similarity index 68% rename from plugins/catalog-backend-module-puppetdb/api-report.md rename to plugins/catalog-backend-module-puppetdb/api-report.api.md index 691b752a6b..1b22398086 100644 --- a/plugins/catalog-backend-module-puppetdb/api-report.md +++ b/plugins/catalog-backend-module-puppetdb/api-report.api.md @@ -24,7 +24,6 @@ export const defaultResourceTransformer: ResourceTransformer; // @public export class PuppetDbEntityProvider implements EntityProvider { - // (undocumented) connect(connection: EntityProviderConnection): Promise; static fromConfig( config: Config, @@ -35,7 +34,6 @@ export class PuppetDbEntityProvider implements EntityProvider { transformer?: ResourceTransformer; }, ): PuppetDbEntityProvider[]; - // (undocumented) getProviderName(): string; refresh(logger: LoggerService): Promise; } @@ -77,4 +75,12 @@ export type ResourceTransformer = ( node: PuppetNode, config: PuppetDbEntityProviderConfig, ) => Promise; + +// Warnings were encountered during analysis: +// +// src/providers/PuppetDbEntityProvider.d.ts:40:8 - (tsdoc-undefined-tag) The TSDoc tag "@private" is not defined in this configuration +// src/providers/PuppetDbEntityProvider.d.ts:42:5 - (ae-unresolved-link) The @link reference could not be resolved: The package "@backstage/plugin-catalog-backend-module-puppetdb" does not have an export "LoggerService" +// src/providers/PuppetDbEntityProvider.d.ts:42:5 - (ae-unresolved-link) The @link reference could not be resolved: The package "@backstage/plugin-catalog-backend-module-puppetdb" does not have an export "TaskRunner" +// src/providers/PuppetDbEntityProvider.d.ts:52:8 - (tsdoc-undefined-tag) The TSDoc tag "@private" is not defined in this configuration +// src/providers/PuppetDbEntityProvider.d.ts:54:5 - (ae-unresolved-link) The @link reference could not be resolved: The package "@backstage/plugin-catalog-backend-module-puppetdb" does not have an export "TaskRunner" ``` diff --git a/plugins/catalog-backend-module-scaffolder-entity-model/api-report.md b/plugins/catalog-backend-module-scaffolder-entity-model/api-report.api.md similarity index 70% rename from plugins/catalog-backend-module-scaffolder-entity-model/api-report.md rename to plugins/catalog-backend-module-scaffolder-entity-model/api-report.api.md index 49542b0396..e4af5d5ef5 100644 --- a/plugins/catalog-backend-module-scaffolder-entity-model/api-report.md +++ b/plugins/catalog-backend-module-scaffolder-entity-model/api-report.api.md @@ -26,4 +26,10 @@ export class ScaffolderEntitiesProcessor implements CatalogProcessor { // (undocumented) validateEntityKind(entity: Entity): Promise; } + +// Warnings were encountered during analysis: +// +// src/processor/ScaffolderEntitiesProcessor.d.ts:10:5 - (ae-undocumented) Missing documentation for "getProcessorName". +// src/processor/ScaffolderEntitiesProcessor.d.ts:12:5 - (ae-undocumented) Missing documentation for "validateEntityKind". +// src/processor/ScaffolderEntitiesProcessor.d.ts:13:5 - (ae-undocumented) Missing documentation for "postProcessEntity". ``` diff --git a/plugins/catalog-backend-module-unprocessed/api-report.md b/plugins/catalog-backend-module-unprocessed/api-report.api.md similarity index 79% rename from plugins/catalog-backend-module-unprocessed/api-report.md rename to plugins/catalog-backend-module-unprocessed/api-report.api.md index 493082ac7c..ea3a9d974c 100644 --- a/plugins/catalog-backend-module-unprocessed/api-report.md +++ b/plugins/catalog-backend-module-unprocessed/api-report.api.md @@ -27,4 +27,9 @@ export class UnprocessedEntitiesModule { // (undocumented) registerRoutes(): void; } + +// Warnings were encountered during analysis: +// +// src/UnprocessedEntitiesModule.d.ts:15:5 - (ae-undocumented) Missing documentation for "create". +// src/UnprocessedEntitiesModule.d.ts:26:5 - (ae-undocumented) Missing documentation for "registerRoutes". ``` diff --git a/plugins/catalog-backend/api-report-alpha.md b/plugins/catalog-backend/api-report-alpha.api.md similarity index 100% rename from plugins/catalog-backend/api-report-alpha.md rename to plugins/catalog-backend/api-report-alpha.api.md diff --git a/plugins/catalog-backend/api-report.md b/plugins/catalog-backend/api-report.api.md similarity index 67% rename from plugins/catalog-backend/api-report.md rename to plugins/catalog-backend/api-report.api.md index 7717066d2a..1c3949adfa 100644 --- a/plugins/catalog-backend/api-report.md +++ b/plugins/catalog-backend/api-report.api.md @@ -478,4 +478,85 @@ export class UrlReaderProcessor implements CatalogProcessor_2 { cache: CatalogProcessorCache_2, ): Promise; } + +// Warnings were encountered during analysis: +// +// src/constants.d.ts:2:22 - (ae-undocumented) Missing documentation for "CATALOG_CONFLICTS_TOPIC". +// src/constants.d.ts:4:22 - (ae-undocumented) Missing documentation for "CATALOG_ERRORS_TOPIC". +// src/deprecated.d.ts:8:22 - (ae-undocumented) Missing documentation for "locationSpecToMetadataName". +// src/deprecated.d.ts:13:22 - (ae-undocumented) Missing documentation for "locationSpecToLocationEntity". +// src/deprecated.d.ts:18:22 - (ae-undocumented) Missing documentation for "processingResult". +// src/deprecated.d.ts:31:1 - (ae-undocumented) Missing documentation for "EntitiesSearchFilter". +// src/deprecated.d.ts:36:1 - (ae-undocumented) Missing documentation for "EntityFilter". +// src/deprecated.d.ts:41:1 - (ae-undocumented) Missing documentation for "DeferredEntity". +// src/deprecated.d.ts:46:1 - (ae-undocumented) Missing documentation for "EntityRelationSpec". +// src/deprecated.d.ts:51:1 - (ae-undocumented) Missing documentation for "CatalogProcessor". +// src/deprecated.d.ts:56:1 - (ae-undocumented) Missing documentation for "CatalogProcessorParser". +// src/deprecated.d.ts:61:1 - (ae-undocumented) Missing documentation for "CatalogProcessorCache". +// src/deprecated.d.ts:66:1 - (ae-undocumented) Missing documentation for "CatalogProcessorEmit". +// src/deprecated.d.ts:71:1 - (ae-undocumented) Missing documentation for "CatalogProcessorLocationResult". +// src/deprecated.d.ts:76:1 - (ae-undocumented) Missing documentation for "CatalogProcessorEntityResult". +// src/deprecated.d.ts:81:1 - (ae-undocumented) Missing documentation for "CatalogProcessorRelationResult". +// src/deprecated.d.ts:86:1 - (ae-undocumented) Missing documentation for "CatalogProcessorErrorResult". +// src/deprecated.d.ts:91:1 - (ae-undocumented) Missing documentation for "CatalogProcessorRefreshKeysResult". +// src/deprecated.d.ts:96:1 - (ae-undocumented) Missing documentation for "CatalogProcessorResult". +// src/deprecated.d.ts:101:1 - (ae-undocumented) Missing documentation for "EntityProvider". +// src/deprecated.d.ts:106:1 - (ae-undocumented) Missing documentation for "EntityProviderConnection". +// src/deprecated.d.ts:111:1 - (ae-undocumented) Missing documentation for "EntityProviderMutation". +// src/deprecated.d.ts:129:1 - (ae-undocumented) Missing documentation for "AnalyzeOptions". +// src/deprecated.d.ts:134:1 - (ae-undocumented) Missing documentation for "LocationAnalyzer". +// src/deprecated.d.ts:139:1 - (ae-undocumented) Missing documentation for "ScmLocationAnalyzer". +// src/deprecated.d.ts:144:1 - (ae-undocumented) Missing documentation for "PlaceholderResolver". +// src/deprecated.d.ts:149:1 - (ae-undocumented) Missing documentation for "PlaceholderResolverParams". +// src/deprecated.d.ts:154:1 - (ae-undocumented) Missing documentation for "PlaceholderResolverRead". +// src/deprecated.d.ts:159:1 - (ae-undocumented) Missing documentation for "PlaceholderResolverResolveUrl". +// src/deprecated.d.ts:164:1 - (ae-undocumented) Missing documentation for "AnalyzeLocationRequest". +// src/deprecated.d.ts:169:1 - (ae-undocumented) Missing documentation for "AnalyzeLocationResponse". +// src/deprecated.d.ts:202:22 - (ae-undocumented) Missing documentation for "DefaultCatalogCollatorFactory". +// src/deprecated.d.ts:207:22 - (ae-undocumented) Missing documentation for "defaultCatalogCollatorEntityTransformer". +// src/deprecated.d.ts:212:1 - (ae-undocumented) Missing documentation for "DefaultCatalogCollatorFactoryOptions". +// src/deprecated.d.ts:217:1 - (ae-undocumented) Missing documentation for "CatalogCollatorEntityTransformer". +// src/modules/codeowners/CodeOwnersProcessor.d.ts:9:1 - (ae-undocumented) Missing documentation for "CodeOwnersProcessor". +// src/modules/codeowners/CodeOwnersProcessor.d.ts:13:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/modules/codeowners/CodeOwnersProcessor.d.ts:22:5 - (ae-undocumented) Missing documentation for "getProcessorName". +// src/modules/codeowners/CodeOwnersProcessor.d.ts:23:5 - (ae-undocumented) Missing documentation for "preProcessEntity". +// src/modules/core/AnnotateLocationEntityProcessor.d.ts:6:1 - (ae-undocumented) Missing documentation for "AnnotateLocationEntityProcessor". +// src/modules/core/AnnotateLocationEntityProcessor.d.ts:11:5 - (ae-undocumented) Missing documentation for "getProcessorName". +// src/modules/core/AnnotateLocationEntityProcessor.d.ts:12:5 - (ae-undocumented) Missing documentation for "preProcessEntity". +// src/modules/core/AnnotateScmSlugEntityProcessor.d.ts:7:1 - (ae-undocumented) Missing documentation for "AnnotateScmSlugEntityProcessor". +// src/modules/core/AnnotateScmSlugEntityProcessor.d.ts:13:5 - (ae-undocumented) Missing documentation for "getProcessorName". +// src/modules/core/AnnotateScmSlugEntityProcessor.d.ts:14:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/modules/core/AnnotateScmSlugEntityProcessor.d.ts:17:5 - (ae-undocumented) Missing documentation for "preProcessEntity". +// src/modules/core/BuiltinKindsEntityProcessor.d.ts:5:1 - (ae-undocumented) Missing documentation for "BuiltinKindsEntityProcessor". +// src/modules/core/BuiltinKindsEntityProcessor.d.ts:7:5 - (ae-undocumented) Missing documentation for "getProcessorName". +// src/modules/core/BuiltinKindsEntityProcessor.d.ts:8:5 - (ae-undocumented) Missing documentation for "validateEntityKind". +// src/modules/core/BuiltinKindsEntityProcessor.d.ts:9:5 - (ae-undocumented) Missing documentation for "postProcessEntity". +// src/modules/core/FileReaderProcessor.d.ts:4:1 - (ae-undocumented) Missing documentation for "FileReaderProcessor". +// src/modules/core/FileReaderProcessor.d.ts:5:5 - (ae-undocumented) Missing documentation for "getProcessorName". +// src/modules/core/FileReaderProcessor.d.ts:6:5 - (ae-undocumented) Missing documentation for "readLocation". +// src/modules/core/LocationEntityProcessor.d.ts:10:1 - (ae-undocumented) Missing documentation for "LocationEntityProcessorOptions". +// src/modules/core/LocationEntityProcessor.d.ts:28:5 - (ae-undocumented) Missing documentation for "getProcessorName". +// src/modules/core/LocationEntityProcessor.d.ts:29:5 - (ae-undocumented) Missing documentation for "postProcessEntity". +// src/modules/core/PlaceholderProcessor.d.ts:8:1 - (ae-undocumented) Missing documentation for "PlaceholderProcessorOptions". +// src/modules/core/PlaceholderProcessor.d.ts:21:5 - (ae-undocumented) Missing documentation for "getProcessorName". +// src/modules/core/PlaceholderProcessor.d.ts:22:5 - (ae-undocumented) Missing documentation for "preProcessEntity". +// src/modules/core/UrlReaderProcessor.d.ts:6:1 - (ae-undocumented) Missing documentation for "UrlReaderProcessor". +// src/modules/core/UrlReaderProcessor.d.ts:12:5 - (ae-undocumented) Missing documentation for "getProcessorName". +// src/modules/core/UrlReaderProcessor.d.ts:13:5 - (ae-undocumented) Missing documentation for "readLocation". +// src/modules/util/parse.d.ts:5:1 - (ae-undocumented) Missing documentation for "parseEntityYaml". +// src/processing/types.d.ts:31:5 - (ae-undocumented) Missing documentation for "start". +// src/processing/types.d.ts:32:5 - (ae-undocumented) Missing documentation for "stop". +// src/search/DefaultCatalogCollator.d.ts:11:1 - (ae-undocumented) Missing documentation for "DefaultCatalogCollator". +// src/search/DefaultCatalogCollator.d.ts:12:5 - (ae-undocumented) Missing documentation for "discovery". +// src/search/DefaultCatalogCollator.d.ts:13:5 - (ae-undocumented) Missing documentation for "locationTemplate". +// src/search/DefaultCatalogCollator.d.ts:14:5 - (ae-undocumented) Missing documentation for "filter". +// src/search/DefaultCatalogCollator.d.ts:15:5 - (ae-undocumented) Missing documentation for "catalogClient". +// src/search/DefaultCatalogCollator.d.ts:16:5 - (ae-undocumented) Missing documentation for "type". +// src/search/DefaultCatalogCollator.d.ts:17:5 - (ae-undocumented) Missing documentation for "visibilityPermission". +// src/search/DefaultCatalogCollator.d.ts:18:5 - (ae-undocumented) Missing documentation for "tokenManager". +// src/search/DefaultCatalogCollator.d.ts:19:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/search/DefaultCatalogCollator.d.ts:31:5 - (ae-undocumented) Missing documentation for "applyArgsToFormat". +// src/search/DefaultCatalogCollator.d.ts:33:5 - (ae-undocumented) Missing documentation for "execute". +// src/service/CatalogBuilder.d.ts:19:1 - (ae-undocumented) Missing documentation for "CatalogEnvironment". +// src/service/CatalogBuilder.d.ts:232:5 - (ae-undocumented) Missing documentation for "subscribe". ``` diff --git a/plugins/catalog-common/api-report-alpha.md b/plugins/catalog-common/api-report-alpha.api.md similarity index 100% rename from plugins/catalog-common/api-report-alpha.md rename to plugins/catalog-common/api-report-alpha.api.md diff --git a/plugins/catalog-common/api-report.md b/plugins/catalog-common/api-report.api.md similarity index 60% rename from plugins/catalog-common/api-report.md rename to plugins/catalog-common/api-report.api.md index 231c8aac34..95b1d9b6c6 100644 --- a/plugins/catalog-common/api-report.md +++ b/plugins/catalog-common/api-report.api.md @@ -64,4 +64,16 @@ export type LocationSpec = { target: string; presence?: 'optional' | 'required'; }; + +// Warnings were encountered during analysis: +// +// src/ingestion/LocationAnalyzer.d.ts:5:1 - (ae-undocumented) Missing documentation for "AnalyzeLocationRequest". +// src/ingestion/LocationAnalyzer.d.ts:10:1 - (ae-undocumented) Missing documentation for "AnalyzeLocationResponse". +// src/ingestion/LocationAnalyzer.d.ts:39:1 - (ae-undocumented) Missing documentation for "AnalyzeLocationEntityField". +// src/search/CatalogEntityDocument.d.ts:9:5 - (ae-undocumented) Missing documentation for "componentType". +// src/search/CatalogEntityDocument.d.ts:10:5 - (ae-undocumented) Missing documentation for "type". +// src/search/CatalogEntityDocument.d.ts:11:5 - (ae-undocumented) Missing documentation for "namespace". +// src/search/CatalogEntityDocument.d.ts:12:5 - (ae-undocumented) Missing documentation for "kind". +// src/search/CatalogEntityDocument.d.ts:13:5 - (ae-undocumented) Missing documentation for "lifecycle". +// src/search/CatalogEntityDocument.d.ts:14:5 - (ae-undocumented) Missing documentation for "owner". ``` diff --git a/plugins/catalog-graph/api-report-alpha.md b/plugins/catalog-graph/api-report-alpha.api.md similarity index 97% rename from plugins/catalog-graph/api-report-alpha.md rename to plugins/catalog-graph/api-report-alpha.api.md index f4699e9ceb..8d0137fed7 100644 --- a/plugins/catalog-graph/api-report-alpha.md +++ b/plugins/catalog-graph/api-report-alpha.api.md @@ -165,5 +165,9 @@ const _default: FrontendPlugin< >; export default _default; +// Warnings were encountered during analysis: +// +// src/alpha.d.ts:1:15 - (ae-undocumented) Missing documentation for "_default". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/catalog-graph/api-report.md b/plugins/catalog-graph/api-report.api.md similarity index 95% rename from plugins/catalog-graph/api-report.md rename to plugins/catalog-graph/api-report.api.md index fc40e5b6c4..44f0f93e1e 100644 --- a/plugins/catalog-graph/api-report.md +++ b/plugins/catalog-graph/api-report.api.md @@ -138,4 +138,8 @@ export type EntityRelationsGraphProps = { // @public export type RelationPairs = [string, string][]; + +// Warnings were encountered during analysis: +// +// src/components/EntityRelationsGraph/EntityRelationsGraph.d.ts:9:1 - (ae-undocumented) Missing documentation for "EntityRelationsGraphProps". ``` diff --git a/plugins/catalog-import/api-report-alpha.md b/plugins/catalog-import/api-report-alpha.api.md similarity index 93% rename from plugins/catalog-import/api-report-alpha.md rename to plugins/catalog-import/api-report-alpha.api.md index 1706404b94..a70d8c46c8 100644 --- a/plugins/catalog-import/api-report-alpha.md +++ b/plugins/catalog-import/api-report-alpha.api.md @@ -67,5 +67,9 @@ const _default: FrontendPlugin< >; export default _default; +// Warnings were encountered during analysis: +// +// src/alpha.d.ts:2:15 - (ae-undocumented) Missing documentation for "_default". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/catalog-import/api-report.md b/plugins/catalog-import/api-report.api.md similarity index 62% rename from plugins/catalog-import/api-report.md rename to plugins/catalog-import/api-report.api.md index c61aa97b06..8c26da769d 100644 --- a/plugins/catalog-import/api-report.md +++ b/plugins/catalog-import/api-report.api.md @@ -366,4 +366,46 @@ export interface StepPrepareCreatePullRequestProps { // Warnings were encountered during analysis: // // src/api/CatalogImportApi.d.ts:25:5 - (ae-forgotten-export) The symbol "PartialEntity" needs to be exported by the entry point index.d.ts +// src/api/CatalogImportApi.d.ts:33:5 - (ae-undocumented) Missing documentation for "analyzeUrl". +// src/api/CatalogImportApi.d.ts:34:5 - (ae-undocumented) Missing documentation for "preparePullRequest". +// src/api/CatalogImportApi.d.ts:38:5 - (ae-undocumented) Missing documentation for "submitPullRequest". +// src/api/CatalogImportClient.d.ts:26:5 - (ae-undocumented) Missing documentation for "analyzeUrl". +// src/api/CatalogImportClient.d.ts:27:5 - (ae-undocumented) Missing documentation for "preparePullRequest". +// src/api/CatalogImportClient.d.ts:31:5 - (ae-undocumented) Missing documentation for "submitPullRequest". +// src/components/EntityListComponent/EntityListComponent.d.ts:9:5 - (ae-undocumented) Missing documentation for "locations". +// src/components/EntityListComponent/EntityListComponent.d.ts:13:5 - (ae-undocumented) Missing documentation for "locationListItemIcon". +// src/components/EntityListComponent/EntityListComponent.d.ts:14:5 - (ae-undocumented) Missing documentation for "collapsed". +// src/components/EntityListComponent/EntityListComponent.d.ts:15:5 - (ae-undocumented) Missing documentation for "firstListItem". +// src/components/EntityListComponent/EntityListComponent.d.ts:16:5 - (ae-undocumented) Missing documentation for "onItemClick". +// src/components/EntityListComponent/EntityListComponent.d.ts:17:5 - (ae-undocumented) Missing documentation for "withLinks". +// src/components/ImportInfoCard/ImportInfoCard.d.ts:8:5 - (ae-undocumented) Missing documentation for "exampleLocationUrl". +// src/components/ImportInfoCard/ImportInfoCard.d.ts:9:5 - (ae-undocumented) Missing documentation for "exampleRepositoryUrl". +// src/components/ImportStepper/ImportStepper.d.ts:11:5 - (ae-undocumented) Missing documentation for "initialUrl". +// src/components/ImportStepper/ImportStepper.d.ts:12:5 - (ae-undocumented) Missing documentation for "generateStepper". +// src/components/ImportStepper/ImportStepper.d.ts:13:5 - (ae-undocumented) Missing documentation for "variant". +// src/components/StepInitAnalyzeUrl/StepInitAnalyzeUrl.d.ts:10:5 - (ae-undocumented) Missing documentation for "onAnalysis". +// src/components/StepInitAnalyzeUrl/StepInitAnalyzeUrl.d.ts:13:5 - (ae-undocumented) Missing documentation for "disablePullRequest". +// src/components/StepInitAnalyzeUrl/StepInitAnalyzeUrl.d.ts:14:5 - (ae-undocumented) Missing documentation for "analysisUrl". +// src/components/StepInitAnalyzeUrl/StepInitAnalyzeUrl.d.ts:15:5 - (ae-undocumented) Missing documentation for "exampleLocationUrl". +// src/components/StepPrepareCreatePullRequest/AutocompleteTextField.d.ts:10:5 - (ae-undocumented) Missing documentation for "name". +// src/components/StepPrepareCreatePullRequest/AutocompleteTextField.d.ts:11:5 - (ae-undocumented) Missing documentation for "options". +// src/components/StepPrepareCreatePullRequest/AutocompleteTextField.d.ts:12:5 - (ae-undocumented) Missing documentation for "required". +// src/components/StepPrepareCreatePullRequest/AutocompleteTextField.d.ts:13:5 - (ae-undocumented) Missing documentation for "errors". +// src/components/StepPrepareCreatePullRequest/AutocompleteTextField.d.ts:14:5 - (ae-undocumented) Missing documentation for "rules". +// src/components/StepPrepareCreatePullRequest/AutocompleteTextField.d.ts:15:5 - (ae-undocumented) Missing documentation for "loading". +// src/components/StepPrepareCreatePullRequest/AutocompleteTextField.d.ts:16:5 - (ae-undocumented) Missing documentation for "loadingText". +// src/components/StepPrepareCreatePullRequest/AutocompleteTextField.d.ts:17:5 - (ae-undocumented) Missing documentation for "helperText". +// src/components/StepPrepareCreatePullRequest/AutocompleteTextField.d.ts:18:5 - (ae-undocumented) Missing documentation for "errorHelperText". +// src/components/StepPrepareCreatePullRequest/AutocompleteTextField.d.ts:19:5 - (ae-undocumented) Missing documentation for "textFieldProps". +// src/components/StepPrepareCreatePullRequest/PreviewCatalogInfoComponent.d.ts:9:5 - (ae-undocumented) Missing documentation for "repositoryUrl". +// src/components/StepPrepareCreatePullRequest/PreviewCatalogInfoComponent.d.ts:10:5 - (ae-undocumented) Missing documentation for "entities". +// src/components/StepPrepareCreatePullRequest/PreviewCatalogInfoComponent.d.ts:11:5 - (ae-undocumented) Missing documentation for "classes". +// src/components/StepPrepareCreatePullRequest/PreviewPullRequestComponent.d.ts:8:5 - (ae-undocumented) Missing documentation for "title". +// src/components/StepPrepareCreatePullRequest/PreviewPullRequestComponent.d.ts:9:5 - (ae-undocumented) Missing documentation for "description". +// src/components/StepPrepareCreatePullRequest/PreviewPullRequestComponent.d.ts:10:5 - (ae-undocumented) Missing documentation for "classes". +// src/components/StepPrepareCreatePullRequest/StepPrepareCreatePullRequest.d.ts:20:5 - (ae-undocumented) Missing documentation for "analyzeResult". +// src/components/StepPrepareCreatePullRequest/StepPrepareCreatePullRequest.d.ts:23:5 - (ae-undocumented) Missing documentation for "onPrepare". +// src/components/StepPrepareCreatePullRequest/StepPrepareCreatePullRequest.d.ts:26:5 - (ae-undocumented) Missing documentation for "onGoBack". +// src/components/StepPrepareCreatePullRequest/StepPrepareCreatePullRequest.d.ts:27:5 - (ae-undocumented) Missing documentation for "renderFormFields". +// src/components/useImportState.d.ts:80:1 - (ae-undocumented) Missing documentation for "ImportState". ``` diff --git a/plugins/catalog-node/api-report-alpha.md b/plugins/catalog-node/api-report-alpha.api.md similarity index 69% rename from plugins/catalog-node/api-report-alpha.md rename to plugins/catalog-node/api-report-alpha.api.md index ba02079ceb..6fc361896d 100644 --- a/plugins/catalog-node/api-report-alpha.md +++ b/plugins/catalog-node/api-report-alpha.api.md @@ -98,5 +98,23 @@ export const catalogProcessingExtensionPoint: ExtensionPoint; +// Warnings were encountered during analysis: +// +// src/extensions.d.ts:8:1 - (ae-undocumented) Missing documentation for "CatalogProcessingExtensionPoint". +// src/extensions.d.ts:9:5 - (ae-undocumented) Missing documentation for "addProcessor". +// src/extensions.d.ts:10:5 - (ae-undocumented) Missing documentation for "addEntityProvider". +// src/extensions.d.ts:11:5 - (ae-undocumented) Missing documentation for "addPlaceholderResolver". +// src/extensions.d.ts:12:5 - (ae-undocumented) Missing documentation for "setOnProcessingErrorHandler". +// src/extensions.d.ts:18:1 - (ae-undocumented) Missing documentation for "CatalogModelExtensionPoint". +// src/extensions.d.ts:36:22 - (ae-undocumented) Missing documentation for "catalogProcessingExtensionPoint". +// src/extensions.d.ts:40:1 - (ae-undocumented) Missing documentation for "CatalogAnalysisExtensionPoint". +// src/extensions.d.ts:63:22 - (ae-undocumented) Missing documentation for "catalogAnalysisExtensionPoint". +// src/extensions.d.ts:65:22 - (ae-undocumented) Missing documentation for "catalogModelExtensionPoint". +// src/extensions.d.ts:69:1 - (ae-undocumented) Missing documentation for "CatalogPermissionRuleInput". +// src/extensions.d.ts:73:1 - (ae-undocumented) Missing documentation for "CatalogPermissionExtensionPoint". +// src/extensions.d.ts:74:5 - (ae-undocumented) Missing documentation for "addPermissions". +// src/extensions.d.ts:75:5 - (ae-undocumented) Missing documentation for "addPermissionRules". +// src/extensions.d.ts:80:22 - (ae-undocumented) Missing documentation for "catalogPermissionExtensionPoint". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/catalog-node/api-report.md b/plugins/catalog-node/api-report.api.md similarity index 78% rename from plugins/catalog-node/api-report.md rename to plugins/catalog-node/api-report.api.md index 43209aa862..5c18c4756e 100644 --- a/plugins/catalog-node/api-report.md +++ b/plugins/catalog-node/api-report.api.md @@ -243,4 +243,22 @@ export type ScmLocationAnalyzer = { existing: AnalyzeLocationExistingEntity[]; }>; }; + +// Warnings were encountered during analysis: +// +// src/api/processor.d.ts:9:1 - (ae-undocumented) Missing documentation for "CatalogProcessor". +// src/api/processor.d.ts:104:1 - (ae-undocumented) Missing documentation for "CatalogProcessorEmit". +// src/api/processor.d.ts:106:1 - (ae-undocumented) Missing documentation for "CatalogProcessorLocationResult". +// src/api/processor.d.ts:111:1 - (ae-undocumented) Missing documentation for "CatalogProcessorEntityResult". +// src/api/processor.d.ts:117:1 - (ae-undocumented) Missing documentation for "CatalogProcessorRelationResult". +// src/api/processor.d.ts:122:1 - (ae-undocumented) Missing documentation for "CatalogProcessorErrorResult". +// src/api/processor.d.ts:128:1 - (ae-undocumented) Missing documentation for "CatalogProcessorRefreshKeysResult". +// src/api/processor.d.ts:133:1 - (ae-undocumented) Missing documentation for "CatalogProcessorResult". +// src/processing/types.d.ts:15:1 - (ae-undocumented) Missing documentation for "PlaceholderResolverRead". +// src/processing/types.d.ts:17:1 - (ae-undocumented) Missing documentation for "PlaceholderResolverResolveUrl". +// src/processing/types.d.ts:19:1 - (ae-undocumented) Missing documentation for "PlaceholderResolverParams". +// src/processing/types.d.ts:28:1 - (ae-undocumented) Missing documentation for "PlaceholderResolver". +// src/processing/types.d.ts:30:1 - (ae-undocumented) Missing documentation for "LocationAnalyzer". +// src/processing/types.d.ts:40:1 - (ae-undocumented) Missing documentation for "AnalyzeOptions". +// src/processing/types.d.ts:45:1 - (ae-undocumented) Missing documentation for "ScmLocationAnalyzer". ``` diff --git a/plugins/catalog-react/api-report-alpha.md b/plugins/catalog-react/api-report-alpha.api.md similarity index 95% rename from plugins/catalog-react/api-report-alpha.md rename to plugins/catalog-react/api-report-alpha.api.md index 516d655967..6873fa6cfa 100644 --- a/plugins/catalog-react/api-report-alpha.md +++ b/plugins/catalog-react/api-report-alpha.api.md @@ -221,5 +221,12 @@ export function useEntityPermission( error?: Error; }; +// Warnings were encountered during analysis: +// +// src/alpha.d.ts:9:22 - (ae-undocumented) Missing documentation for "catalogExtensionData". +// src/alpha.d.ts:15:1 - (ae-undocumented) Missing documentation for "createEntityCardExtension". +// src/alpha.d.ts:34:1 - (ae-undocumented) Missing documentation for "createEntityContentExtension". +// src/translation.d.ts:2:22 - (ae-undocumented) Missing documentation for "catalogReactTranslationRef". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/catalog-react/api-report.md b/plugins/catalog-react/api-report.api.md similarity index 65% rename from plugins/catalog-react/api-report.md rename to plugins/catalog-react/api-report.api.md index 0293fca239..aafe29e16d 100644 --- a/plugins/catalog-react/api-report.md +++ b/plugins/catalog-react/api-report.api.md @@ -839,4 +839,115 @@ export function useStarredEntity( toggleStarredEntity: () => void; isStarredEntity: boolean; }; + +// Warnings were encountered during analysis: +// +// src/apis/StarredEntitiesApi/MockStarredEntitiesApi.d.ts:12:5 - (ae-undocumented) Missing documentation for "toggleStarred". +// src/apis/StarredEntitiesApi/MockStarredEntitiesApi.d.ts:13:5 - (ae-undocumented) Missing documentation for "starredEntitie$". +// src/components/CatalogFilterLayout/CatalogFilterLayout.d.ts:15:22 - (ae-undocumented) Missing documentation for "CatalogFilterLayout". +// src/components/DefaultFilters/DefaultFilters.d.ts:16:22 - (ae-undocumented) Missing documentation for "DefaultFilters". +// src/components/EntityAutocompletePicker/EntityAutocompletePicker.d.ts:6:1 - (ae-undocumented) Missing documentation for "AllowedEntityFilters". +// src/components/EntityAutocompletePicker/EntityAutocompletePicker.d.ts:12:1 - (ae-undocumented) Missing documentation for "EntityAutocompletePickerProps". +// src/components/EntityAutocompletePicker/EntityAutocompletePicker.d.ts:25:1 - (ae-undocumented) Missing documentation for "CatalogReactEntityAutocompletePickerClassKey". +// src/components/EntityAutocompletePicker/EntityAutocompletePicker.d.ts:27:1 - (ae-undocumented) Missing documentation for "EntityAutocompletePicker". +// src/components/EntityKindPicker/EntityKindPicker.d.ts:13:5 - (ae-undocumented) Missing documentation for "initialFilter". +// src/components/EntityKindPicker/EntityKindPicker.d.ts:14:5 - (ae-undocumented) Missing documentation for "hidden". +// src/components/EntityKindPicker/EntityKindPicker.d.ts:17:22 - (ae-undocumented) Missing documentation for "EntityKindPicker". +// src/components/EntityLifecyclePicker/EntityLifecyclePicker.d.ts:3:1 - (ae-undocumented) Missing documentation for "CatalogReactEntityLifecyclePickerClassKey". +// src/components/EntityLifecyclePicker/EntityLifecyclePicker.d.ts:5:22 - (ae-undocumented) Missing documentation for "EntityLifecyclePicker". +// src/components/EntityNamespacePicker/EntityNamespacePicker.d.ts:3:1 - (ae-undocumented) Missing documentation for "CatalogReactEntityNamespacePickerClassKey". +// src/components/EntityNamespacePicker/EntityNamespacePicker.d.ts:10:5 - (ae-undocumented) Missing documentation for "initiallySelectedNamespaces". +// src/components/EntityNamespacePicker/EntityNamespacePicker.d.ts:13:22 - (ae-undocumented) Missing documentation for "EntityNamespacePicker". +// src/components/EntityOwnerPicker/EntityOwnerPicker.d.ts:3:1 - (ae-undocumented) Missing documentation for "CatalogReactEntityOwnerPickerClassKey". +// src/components/EntityOwnerPicker/EntityOwnerPicker.d.ts:7:1 - (ae-undocumented) Missing documentation for "EntityOwnerPickerProps". +// src/components/EntityOwnerPicker/EntityOwnerPicker.d.ts:11:22 - (ae-undocumented) Missing documentation for "EntityOwnerPicker". +// src/components/EntityProcessingStatusPicker/EntityProcessingStatusPicker.d.ts:3:1 - (ae-undocumented) Missing documentation for "CatalogReactEntityProcessingStatusPickerClassKey". +// src/components/EntityProcessingStatusPicker/EntityProcessingStatusPicker.d.ts:5:22 - (ae-undocumented) Missing documentation for "EntityProcessingStatusPicker". +// src/components/EntityRefLink/humanize.d.ts:8:1 - (ae-undocumented) Missing documentation for "humanizeEntityRef". +// src/components/EntitySearchBar/EntitySearchBar.d.ts:3:1 - (ae-undocumented) Missing documentation for "CatalogReactEntitySearchBarClassKey". +// src/components/EntityTable/EntityTable.d.ts:10:5 - (ae-undocumented) Missing documentation for "title". +// src/components/EntityTable/EntityTable.d.ts:11:5 - (ae-undocumented) Missing documentation for "variant". +// src/components/EntityTable/EntityTable.d.ts:12:5 - (ae-undocumented) Missing documentation for "entities". +// src/components/EntityTable/EntityTable.d.ts:13:5 - (ae-undocumented) Missing documentation for "emptyContent". +// src/components/EntityTable/EntityTable.d.ts:14:5 - (ae-undocumented) Missing documentation for "columns". +// src/components/EntityTable/EntityTable.d.ts:15:5 - (ae-undocumented) Missing documentation for "tableOptions". +// src/components/EntityTable/columns.d.ts:4:22 - (ae-undocumented) Missing documentation for "columnFactories". +// src/components/EntityTagPicker/EntityTagPicker.d.ts:3:1 - (ae-undocumented) Missing documentation for "CatalogReactEntityTagPickerClassKey". +// src/components/EntityTagPicker/EntityTagPicker.d.ts:5:1 - (ae-undocumented) Missing documentation for "EntityTagPickerProps". +// src/components/EntityTagPicker/EntityTagPicker.d.ts:9:22 - (ae-undocumented) Missing documentation for "EntityTagPicker". +// src/components/EntityTypePicker/EntityTypePicker.d.ts:8:5 - (ae-undocumented) Missing documentation for "initialFilter". +// src/components/EntityTypePicker/EntityTypePicker.d.ts:9:5 - (ae-undocumented) Missing documentation for "hidden". +// src/components/EntityTypePicker/EntityTypePicker.d.ts:12:22 - (ae-undocumented) Missing documentation for "EntityTypePicker". +// src/components/FavoriteEntity/FavoriteEntity.d.ts:5:1 - (ae-undocumented) Missing documentation for "FavoriteEntityProps". +// src/components/MissingAnnotationEmptyState/MissingAnnotationEmptyState.d.ts:3:1 - (ae-undocumented) Missing documentation for "MissingAnnotationEmptyStateClassKey". +// src/components/UnregisterEntityDialog/UnregisterEntityDialog.d.ts:4:1 - (ae-undocumented) Missing documentation for "UnregisterEntityDialogProps". +// src/components/UnregisterEntityDialog/UnregisterEntityDialog.d.ts:11:22 - (ae-undocumented) Missing documentation for "UnregisterEntityDialog". +// src/components/UserListPicker/UserListPicker.d.ts:5:1 - (ae-undocumented) Missing documentation for "CatalogReactUserListPickerClassKey". +// src/components/UserListPicker/UserListPicker.d.ts:15:1 - (ae-undocumented) Missing documentation for "UserListPickerProps". +// src/components/UserListPicker/UserListPicker.d.ts:20:22 - (ae-undocumented) Missing documentation for "UserListPicker". +// src/filters.d.ts:8:5 - (ae-undocumented) Missing documentation for "value". +// src/filters.d.ts:10:5 - (ae-undocumented) Missing documentation for "getCatalogFilters". +// src/filters.d.ts:11:5 - (ae-undocumented) Missing documentation for "toQueryValue". +// src/filters.d.ts:18:5 - (ae-undocumented) Missing documentation for "value". +// src/filters.d.ts:20:5 - (ae-undocumented) Missing documentation for "getTypes". +// src/filters.d.ts:21:5 - (ae-undocumented) Missing documentation for "getCatalogFilters". +// src/filters.d.ts:22:5 - (ae-undocumented) Missing documentation for "toQueryValue". +// src/filters.d.ts:29:5 - (ae-undocumented) Missing documentation for "values". +// src/filters.d.ts:31:5 - (ae-undocumented) Missing documentation for "filterEntity". +// src/filters.d.ts:32:5 - (ae-undocumented) Missing documentation for "getCatalogFilters". +// src/filters.d.ts:33:5 - (ae-undocumented) Missing documentation for "toQueryValue". +// src/filters.d.ts:40:5 - (ae-undocumented) Missing documentation for "value". +// src/filters.d.ts:42:5 - (ae-undocumented) Missing documentation for "filterEntity". +// src/filters.d.ts:43:5 - (ae-undocumented) Missing documentation for "getFullTextFilters". +// src/filters.d.ts:47:5 - (ae-undocumented) Missing documentation for "toQueryValue". +// src/filters.d.ts:57:5 - (ae-undocumented) Missing documentation for "values". +// src/filters.d.ts:59:5 - (ae-undocumented) Missing documentation for "getCatalogFilters". +// src/filters.d.ts:60:5 - (ae-undocumented) Missing documentation for "filterEntity". +// src/filters.d.ts:72:5 - (ae-undocumented) Missing documentation for "values". +// src/filters.d.ts:74:5 - (ae-undocumented) Missing documentation for "getCatalogFilters". +// src/filters.d.ts:75:5 - (ae-undocumented) Missing documentation for "filterEntity". +// src/filters.d.ts:76:5 - (ae-undocumented) Missing documentation for "toQueryValue". +// src/filters.d.ts:83:5 - (ae-undocumented) Missing documentation for "values". +// src/filters.d.ts:85:5 - (ae-undocumented) Missing documentation for "getCatalogFilters". +// src/filters.d.ts:86:5 - (ae-undocumented) Missing documentation for "filterEntity". +// src/filters.d.ts:87:5 - (ae-undocumented) Missing documentation for "toQueryValue". +// src/filters.d.ts:92:1 - (ae-undocumented) Missing documentation for "EntityUserFilter". +// src/filters.d.ts:93:5 - (ae-undocumented) Missing documentation for "value". +// src/filters.d.ts:94:5 - (ae-undocumented) Missing documentation for "refs". +// src/filters.d.ts:96:5 - (ae-undocumented) Missing documentation for "owned". +// src/filters.d.ts:97:5 - (ae-undocumented) Missing documentation for "all". +// src/filters.d.ts:98:5 - (ae-undocumented) Missing documentation for "starred". +// src/filters.d.ts:99:5 - (ae-undocumented) Missing documentation for "getCatalogFilters". +// src/filters.d.ts:100:5 - (ae-undocumented) Missing documentation for "filterEntity". +// src/filters.d.ts:101:5 - (ae-undocumented) Missing documentation for "toQueryValue". +// src/filters.d.ts:109:5 - (ae-undocumented) Missing documentation for "value". +// src/filters.d.ts:110:5 - (ae-undocumented) Missing documentation for "isOwnedEntity". +// src/filters.d.ts:111:5 - (ae-undocumented) Missing documentation for "isStarredEntity". +// src/filters.d.ts:113:5 - (ae-undocumented) Missing documentation for "filterEntity". +// src/filters.d.ts:114:5 - (ae-undocumented) Missing documentation for "toQueryValue". +// src/filters.d.ts:121:5 - (ae-undocumented) Missing documentation for "value". +// src/filters.d.ts:123:5 - (ae-undocumented) Missing documentation for "getCatalogFilters". +// src/filters.d.ts:124:5 - (ae-undocumented) Missing documentation for "filterEntity". +// src/filters.d.ts:131:5 - (ae-undocumented) Missing documentation for "value". +// src/filters.d.ts:133:5 - (ae-undocumented) Missing documentation for "filterEntity". +// src/hooks/useEntity.d.ts:4:1 - (ae-undocumented) Missing documentation for "EntityLoadingStatus". +// src/hooks/useEntity.d.ts:16:5 - (ae-undocumented) Missing documentation for "children". +// src/hooks/useEntity.d.ts:17:5 - (ae-undocumented) Missing documentation for "entity". +// src/hooks/useEntity.d.ts:18:5 - (ae-undocumented) Missing documentation for "loading". +// src/hooks/useEntity.d.ts:19:5 - (ae-undocumented) Missing documentation for "error". +// src/hooks/useEntity.d.ts:20:5 - (ae-undocumented) Missing documentation for "refresh". +// src/hooks/useEntity.d.ts:34:5 - (ae-undocumented) Missing documentation for "children". +// src/hooks/useEntity.d.ts:35:5 - (ae-undocumented) Missing documentation for "entity". +// src/hooks/useEntityListProvider.d.ts:5:1 - (ae-undocumented) Missing documentation for "DefaultEntityFilters". +// src/hooks/useEntityListProvider.d.ts:18:1 - (ae-undocumented) Missing documentation for "EntityListContextProps". +// src/hooks/useEntityListProvider.d.ts:57:1 - (ae-undocumented) Missing documentation for "EntityListProviderProps". +// src/hooks/useStarredEntities.d.ts:3:1 - (ae-undocumented) Missing documentation for "useStarredEntities". +// src/hooks/useStarredEntity.d.ts:3:1 - (ae-undocumented) Missing documentation for "useStarredEntity". +// src/overridableComponents.d.ts:6:1 - (ae-undocumented) Missing documentation for "CatalogReactComponentsNameToClassKey". +// src/overridableComponents.d.ts:17:1 - (ae-undocumented) Missing documentation for "BackstageOverrides". +// src/testUtils/providers.d.ts:4:1 - (ae-undocumented) Missing documentation for "MockEntityListContextProvider". +// src/types.d.ts:3:1 - (ae-undocumented) Missing documentation for "EntityFilter". +// src/types.d.ts:25:1 - (ae-undocumented) Missing documentation for "UserListFilterKind". +// src/utils/getEntitySourceLocation.d.ts:4:1 - (ae-undocumented) Missing documentation for "EntitySourceLocation". +// src/utils/getEntitySourceLocation.d.ts:9:1 - (ae-undocumented) Missing documentation for "getEntitySourceLocation". ``` diff --git a/plugins/catalog-unprocessed-entities-common/api-report.md b/plugins/catalog-unprocessed-entities-common/api-report.api.md similarity index 100% rename from plugins/catalog-unprocessed-entities-common/api-report.md rename to plugins/catalog-unprocessed-entities-common/api-report.api.md diff --git a/plugins/catalog-unprocessed-entities/api-report.md b/plugins/catalog-unprocessed-entities/api-report.api.md similarity index 91% rename from plugins/catalog-unprocessed-entities/api-report.md rename to plugins/catalog-unprocessed-entities/api-report.api.md index 7d8f6299da..dd0386204a 100644 --- a/plugins/catalog-unprocessed-entities/api-report.md +++ b/plugins/catalog-unprocessed-entities/api-report.api.md @@ -73,5 +73,9 @@ export type UnprocessedEntityError = { }; }; +// Warnings were encountered during analysis: +// +// src/components/UnprocessedEntities.d.ts:3:22 - (ae-undocumented) Missing documentation for "UnprocessedEntitiesContent". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/catalog/api-report-alpha.md b/plugins/catalog/api-report-alpha.api.md similarity index 98% rename from plugins/catalog/api-report-alpha.md rename to plugins/catalog/api-report-alpha.api.md index b448ae9288..0dd7778dc3 100644 --- a/plugins/catalog/api-report-alpha.md +++ b/plugins/catalog/api-report-alpha.api.md @@ -870,5 +870,11 @@ const _default: FrontendPlugin< >; export default _default; +// Warnings were encountered during analysis: +// +// src/alpha/createCatalogFilterExtension.d.ts:4:1 - (ae-undocumented) Missing documentation for "createCatalogFilterExtension". +// src/alpha/plugin.d.ts:2:15 - (ae-undocumented) Missing documentation for "_default". +// src/translation.d.ts:2:22 - (ae-undocumented) Missing documentation for "catalogTranslationRef". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/catalog/api-report.md b/plugins/catalog/api-report.api.md similarity index 58% rename from plugins/catalog/api-report.md rename to plugins/catalog/api-report.api.md index 4017e8d494..2d149c4c51 100644 --- a/plugins/catalog/api-report.md +++ b/plugins/catalog/api-report.api.md @@ -265,7 +265,6 @@ export class DefaultEntityPresentationApi implements EntityPresentationApi { options: DefaultEntityPresentationApiOptions, ): EntityPresentationApi; static createLocal(): EntityPresentationApi; - // (undocumented) forEntity( entityOrRef: Entity | string, context?: { @@ -668,4 +667,114 @@ export type SystemDiagramCardClassKey = | 'componentNode' | 'apiNode' | 'resourceNode'; + +// Warnings were encountered during analysis: +// +// src/apis/StarredEntitiesApi/DefaultStarredEntitiesApi.d.ts:15:5 - (ae-undocumented) Missing documentation for "toggleStarred". +// src/apis/StarredEntitiesApi/DefaultStarredEntitiesApi.d.ts:16:5 - (ae-undocumented) Missing documentation for "starredEntitie$". +// src/components/AboutCard/AboutCard.d.ts:9:5 - (ae-undocumented) Missing documentation for "variant". +// src/components/AboutCard/AboutContent.d.ts:9:5 - (ae-undocumented) Missing documentation for "entity". +// src/components/AboutCard/AboutContent.d.ts:12:1 - (ae-undocumented) Missing documentation for "AboutContent". +// src/components/AboutCard/AboutField.d.ts:8:5 - (ae-undocumented) Missing documentation for "label". +// src/components/AboutCard/AboutField.d.ts:9:5 - (ae-undocumented) Missing documentation for "value". +// src/components/AboutCard/AboutField.d.ts:10:5 - (ae-undocumented) Missing documentation for "gridSizes". +// src/components/AboutCard/AboutField.d.ts:11:5 - (ae-undocumented) Missing documentation for "children". +// src/components/AboutCard/AboutField.d.ts:14:1 - (ae-undocumented) Missing documentation for "AboutField". +// src/components/CatalogKindHeader/CatalogKindHeader.d.ts:23:1 - (ae-undocumented) Missing documentation for "CatalogKindHeader". +// src/components/CatalogPage/DefaultCatalogPage.d.ts:12:5 - (ae-undocumented) Missing documentation for "initiallySelectedFilter". +// src/components/CatalogPage/DefaultCatalogPage.d.ts:13:5 - (ae-undocumented) Missing documentation for "columns". +// src/components/CatalogPage/DefaultCatalogPage.d.ts:14:5 - (ae-undocumented) Missing documentation for "actions". +// src/components/CatalogPage/DefaultCatalogPage.d.ts:15:5 - (ae-undocumented) Missing documentation for "initialKind". +// src/components/CatalogPage/DefaultCatalogPage.d.ts:16:5 - (ae-undocumented) Missing documentation for "tableOptions". +// src/components/CatalogPage/DefaultCatalogPage.d.ts:17:5 - (ae-undocumented) Missing documentation for "emptyContent". +// src/components/CatalogPage/DefaultCatalogPage.d.ts:18:5 - (ae-undocumented) Missing documentation for "ownerPickerMode". +// src/components/CatalogPage/DefaultCatalogPage.d.ts:19:5 - (ae-undocumented) Missing documentation for "pagination". +// src/components/CatalogPage/DefaultCatalogPage.d.ts:22:5 - (ae-undocumented) Missing documentation for "filters". +// src/components/CatalogPage/DefaultCatalogPage.d.ts:23:5 - (ae-undocumented) Missing documentation for "initiallySelectedNamespaces". +// src/components/CatalogSearchResultListItem/CatalogSearchResultListItem.d.ts:9:5 - (ae-undocumented) Missing documentation for "icon". +// src/components/CatalogSearchResultListItem/CatalogSearchResultListItem.d.ts:10:5 - (ae-undocumented) Missing documentation for "result". +// src/components/CatalogSearchResultListItem/CatalogSearchResultListItem.d.ts:11:5 - (ae-undocumented) Missing documentation for "highlight". +// src/components/CatalogSearchResultListItem/CatalogSearchResultListItem.d.ts:12:5 - (ae-undocumented) Missing documentation for "rank". +// src/components/CatalogSearchResultListItem/CatalogSearchResultListItem.d.ts:13:5 - (ae-undocumented) Missing documentation for "lineClamp". +// src/components/CatalogTable/CatalogTable.d.ts:10:5 - (ae-undocumented) Missing documentation for "columns". +// src/components/CatalogTable/CatalogTable.d.ts:11:5 - (ae-undocumented) Missing documentation for "actions". +// src/components/CatalogTable/CatalogTable.d.ts:12:5 - (ae-undocumented) Missing documentation for "tableOptions". +// src/components/CatalogTable/CatalogTable.d.ts:13:5 - (ae-undocumented) Missing documentation for "emptyContent". +// src/components/CatalogTable/CatalogTable.d.ts:14:5 - (ae-undocumented) Missing documentation for "subtitle". +// src/components/CatalogTable/CatalogTable.d.ts:17:22 - (ae-undocumented) Missing documentation for "CatalogTable". +// src/components/CatalogTable/types.d.ts:5:1 - (ae-undocumented) Missing documentation for "CatalogTableRow". +// src/components/CatalogTable/types.d.ts:6:5 - (ae-undocumented) Missing documentation for "entity". +// src/components/CatalogTable/types.d.ts:7:5 - (ae-undocumented) Missing documentation for "resolved". +// src/components/DependencyOfComponentsCard/DependencyOfComponentsCard.d.ts:4:1 - (ae-undocumented) Missing documentation for "DependencyOfComponentsCardProps". +// src/components/DependencyOfComponentsCard/DependencyOfComponentsCard.d.ts:5:5 - (ae-undocumented) Missing documentation for "variant". +// src/components/DependencyOfComponentsCard/DependencyOfComponentsCard.d.ts:6:5 - (ae-undocumented) Missing documentation for "title". +// src/components/DependsOnComponentsCard/DependsOnComponentsCard.d.ts:5:1 - (ae-undocumented) Missing documentation for "DependsOnComponentsCardProps". +// src/components/DependsOnComponentsCard/DependsOnComponentsCard.d.ts:6:5 - (ae-undocumented) Missing documentation for "variant". +// src/components/DependsOnComponentsCard/DependsOnComponentsCard.d.ts:7:5 - (ae-undocumented) Missing documentation for "title". +// src/components/DependsOnComponentsCard/DependsOnComponentsCard.d.ts:8:5 - (ae-undocumented) Missing documentation for "columns". +// src/components/DependsOnComponentsCard/DependsOnComponentsCard.d.ts:9:5 - (ae-undocumented) Missing documentation for "tableOptions". +// src/components/DependsOnResourcesCard/DependsOnResourcesCard.d.ts:5:1 - (ae-undocumented) Missing documentation for "DependsOnResourcesCardProps". +// src/components/DependsOnResourcesCard/DependsOnResourcesCard.d.ts:6:5 - (ae-undocumented) Missing documentation for "variant". +// src/components/DependsOnResourcesCard/DependsOnResourcesCard.d.ts:7:5 - (ae-undocumented) Missing documentation for "title". +// src/components/DependsOnResourcesCard/DependsOnResourcesCard.d.ts:8:5 - (ae-undocumented) Missing documentation for "columns". +// src/components/DependsOnResourcesCard/DependsOnResourcesCard.d.ts:9:5 - (ae-undocumented) Missing documentation for "tableOptions". +// src/components/EntityContextMenu/EntityContextMenu.d.ts:5:1 - (ae-undocumented) Missing documentation for "EntityContextMenuClassKey". +// src/components/EntityLabelsCard/EntityLabelsCard.d.ts:4:1 - (ae-undocumented) Missing documentation for "EntityLabelsCardProps". +// src/components/EntityLabelsCard/EntityLabelsCard.d.ts:5:5 - (ae-undocumented) Missing documentation for "variant". +// src/components/EntityLabelsCard/EntityLabelsCard.d.ts:6:5 - (ae-undocumented) Missing documentation for "title". +// src/components/EntityLayout/EntityLayout.d.ts:6:1 - (ae-undocumented) Missing documentation for "EntityLayoutRouteProps". +// src/components/EntityLayout/EntityLayout.d.ts:25:1 - (ae-undocumented) Missing documentation for "EntityLayoutProps". +// src/components/EntityLayout/EntityLayout.d.ts:26:5 - (ae-undocumented) Missing documentation for "UNSTABLE_extraContextMenuItems". +// src/components/EntityLayout/EntityLayout.d.ts:27:5 - (ae-undocumented) Missing documentation for "UNSTABLE_contextMenuOptions". +// src/components/EntityLayout/EntityLayout.d.ts:28:5 - (ae-undocumented) Missing documentation for "children". +// src/components/EntityLayout/EntityLayout.d.ts:29:5 - (ae-undocumented) Missing documentation for "NotFoundComponent". +// src/components/EntityLinksCard/EntityLinksCard.d.ts:5:1 - (ae-undocumented) Missing documentation for "EntityLinksCardProps". +// src/components/EntityLinksCard/EntityLinksCard.d.ts:6:5 - (ae-undocumented) Missing documentation for "cols". +// src/components/EntityLinksCard/EntityLinksCard.d.ts:7:5 - (ae-undocumented) Missing documentation for "variant". +// src/components/EntityLinksCard/EntityLinksEmptyState.d.ts:3:1 - (ae-undocumented) Missing documentation for "EntityLinksEmptyStateClassKey". +// src/components/EntityLinksCard/types.d.ts:2:1 - (ae-undocumented) Missing documentation for "Breakpoint". +// src/components/EntityLinksCard/types.d.ts:4:1 - (ae-undocumented) Missing documentation for "ColumnBreakpoints". +// src/components/EntitySwitch/EntitySwitch.d.ts:5:1 - (ae-undocumented) Missing documentation for "EntitySwitchCaseProps". +// src/components/EntitySwitch/EntitySwitch.d.ts:6:5 - (ae-undocumented) Missing documentation for "if". +// src/components/EntitySwitch/EntitySwitch.d.ts:9:5 - (ae-undocumented) Missing documentation for "children". +// src/components/EntitySwitch/EntitySwitch.d.ts:16:5 - (ae-undocumented) Missing documentation for "children". +// src/components/EntitySwitch/EntitySwitch.d.ts:17:5 - (ae-undocumented) Missing documentation for "renderMultipleMatches". +// src/components/EntitySwitch/EntitySwitch.d.ts:20:22 - (ae-undocumented) Missing documentation for "EntitySwitch". +// src/components/EntitySwitch/conditions.d.ts:3:1 - (ae-undocumented) Missing documentation for "EntityPredicates". +// src/components/EntitySwitch/conditions.d.ts:4:5 - (ae-undocumented) Missing documentation for "kind". +// src/components/EntitySwitch/conditions.d.ts:5:5 - (ae-undocumented) Missing documentation for "type". +// src/components/FilteredEntityLayout/index.d.ts:6:22 - (ae-undocumented) Missing documentation for "FilteredEntityLayout". +// src/components/FilteredEntityLayout/index.d.ts:13:22 - (ae-undocumented) Missing documentation for "FilterContainer". +// src/components/FilteredEntityLayout/index.d.ts:24:22 - (ae-undocumented) Missing documentation for "EntityListContainer". +// src/components/HasComponentsCard/HasComponentsCard.d.ts:4:1 - (ae-undocumented) Missing documentation for "HasComponentsCardProps". +// src/components/HasComponentsCard/HasComponentsCard.d.ts:5:5 - (ae-undocumented) Missing documentation for "variant". +// src/components/HasComponentsCard/HasComponentsCard.d.ts:6:5 - (ae-undocumented) Missing documentation for "title". +// src/components/HasResourcesCard/HasResourcesCard.d.ts:4:1 - (ae-undocumented) Missing documentation for "HasResourcesCardProps". +// src/components/HasResourcesCard/HasResourcesCard.d.ts:5:5 - (ae-undocumented) Missing documentation for "variant". +// src/components/HasResourcesCard/HasResourcesCard.d.ts:6:5 - (ae-undocumented) Missing documentation for "title". +// src/components/HasSubcomponentsCard/HasSubcomponentsCard.d.ts:4:1 - (ae-undocumented) Missing documentation for "HasSubcomponentsCardProps". +// src/components/HasSubcomponentsCard/HasSubcomponentsCard.d.ts:5:5 - (ae-undocumented) Missing documentation for "variant". +// src/components/HasSubcomponentsCard/HasSubcomponentsCard.d.ts:6:5 - (ae-undocumented) Missing documentation for "tableOptions". +// src/components/HasSubcomponentsCard/HasSubcomponentsCard.d.ts:7:5 - (ae-undocumented) Missing documentation for "title". +// src/components/HasSystemsCard/HasSystemsCard.d.ts:4:1 - (ae-undocumented) Missing documentation for "HasSystemsCardProps". +// src/components/HasSystemsCard/HasSystemsCard.d.ts:5:5 - (ae-undocumented) Missing documentation for "variant". +// src/components/HasSystemsCard/HasSystemsCard.d.ts:6:5 - (ae-undocumented) Missing documentation for "title". +// src/components/RelatedEntitiesCard/RelatedEntitiesCard.d.ts:5:1 - (ae-undocumented) Missing documentation for "RelatedEntitiesCardProps". +// src/components/SystemDiagramCard/SystemDiagramCard.d.ts:3:1 - (ae-undocumented) Missing documentation for "SystemDiagramCardClassKey". +// src/overridableComponents.d.ts:7:1 - (ae-undocumented) Missing documentation for "PluginCatalogComponentsNameToClassKey". +// src/overridableComponents.d.ts:13:1 - (ae-undocumented) Missing documentation for "BackstageOverrides". +// src/plugin.d.ts:16:22 - (ae-undocumented) Missing documentation for "catalogPlugin". +// src/plugin.d.ts:37:22 - (ae-undocumented) Missing documentation for "CatalogIndexPage". +// src/plugin.d.ts:39:22 - (ae-undocumented) Missing documentation for "CatalogEntityPage". +// src/plugin.d.ts:54:22 - (ae-undocumented) Missing documentation for "EntityLinksCard". +// src/plugin.d.ts:56:22 - (ae-undocumented) Missing documentation for "EntityLabelsCard". +// src/plugin.d.ts:58:22 - (ae-undocumented) Missing documentation for "EntityHasSystemsCard". +// src/plugin.d.ts:60:22 - (ae-undocumented) Missing documentation for "EntityHasComponentsCard". +// src/plugin.d.ts:62:22 - (ae-undocumented) Missing documentation for "EntityHasSubcomponentsCard". +// src/plugin.d.ts:64:22 - (ae-undocumented) Missing documentation for "EntityHasResourcesCard". +// src/plugin.d.ts:66:22 - (ae-undocumented) Missing documentation for "EntityDependsOnComponentsCard". +// src/plugin.d.ts:68:22 - (ae-undocumented) Missing documentation for "EntityDependencyOfComponentsCard". +// src/plugin.d.ts:70:22 - (ae-undocumented) Missing documentation for "EntityDependsOnResourcesCard". +// src/plugin.d.ts:72:22 - (ae-undocumented) Missing documentation for "RelatedEntitiesCard". +// src/plugin.d.ts:74:22 - (ae-undocumented) Missing documentation for "CatalogSearchResultListItem". ``` diff --git a/plugins/config-schema/api-report.md b/plugins/config-schema/api-report.api.md similarity index 60% rename from plugins/config-schema/api-report.md rename to plugins/config-schema/api-report.api.md index 16630ae8d0..00a7a7fe0c 100644 --- a/plugins/config-schema/api-report.md +++ b/plugins/config-schema/api-report.api.md @@ -44,4 +44,15 @@ export class StaticSchemaLoader implements ConfigSchemaApi { // (undocumented) schema$(): Observable; } + +// Warnings were encountered during analysis: +// +// src/api/StaticSchemaLoader.d.ts:13:5 - (ae-undocumented) Missing documentation for "schema$". +// src/api/types.d.ts:4:1 - (ae-undocumented) Missing documentation for "ConfigSchemaResult". +// src/api/types.d.ts:5:5 - (ae-undocumented) Missing documentation for "schema". +// src/api/types.d.ts:8:1 - (ae-undocumented) Missing documentation for "ConfigSchemaApi". +// src/api/types.d.ts:9:5 - (ae-undocumented) Missing documentation for "schema$". +// src/api/types.d.ts:12:22 - (ae-undocumented) Missing documentation for "configSchemaApiRef". +// src/plugin.d.ts:3:22 - (ae-undocumented) Missing documentation for "configSchemaPlugin". +// src/plugin.d.ts:7:22 - (ae-undocumented) Missing documentation for "ConfigSchemaPage". ``` diff --git a/plugins/devtools-backend/api-report.md b/plugins/devtools-backend/api-report.api.md similarity index 59% rename from plugins/devtools-backend/api-report.md rename to plugins/devtools-backend/api-report.api.md index 5fceda3d46..f150975beb 100644 --- a/plugins/devtools-backend/api-report.md +++ b/plugins/devtools-backend/api-report.api.md @@ -48,4 +48,19 @@ export interface RouterOptions { // (undocumented) permissions: PermissionsService; } + +// Warnings were encountered during analysis: +// +// src/api/DevToolsBackendApi.d.ts:5:1 - (ae-undocumented) Missing documentation for "DevToolsBackendApi". +// src/api/DevToolsBackendApi.d.ts:9:5 - (ae-undocumented) Missing documentation for "listExternalDependencyDetails". +// src/api/DevToolsBackendApi.d.ts:12:5 - (ae-undocumented) Missing documentation for "listConfig". +// src/api/DevToolsBackendApi.d.ts:13:5 - (ae-undocumented) Missing documentation for "listInfo". +// src/service/router.d.ts:6:1 - (ae-undocumented) Missing documentation for "RouterOptions". +// src/service/router.d.ts:7:5 - (ae-undocumented) Missing documentation for "devToolsBackendApi". +// src/service/router.d.ts:8:5 - (ae-undocumented) Missing documentation for "logger". +// src/service/router.d.ts:9:5 - (ae-undocumented) Missing documentation for "config". +// src/service/router.d.ts:10:5 - (ae-undocumented) Missing documentation for "permissions". +// src/service/router.d.ts:11:5 - (ae-undocumented) Missing documentation for "discovery". +// src/service/router.d.ts:12:5 - (ae-undocumented) Missing documentation for "httpAuth". +// src/service/router.d.ts:15:1 - (ae-undocumented) Missing documentation for "createRouter". ``` diff --git a/plugins/devtools-common/api-report.md b/plugins/devtools-common/api-report.api.md similarity index 56% rename from plugins/devtools-common/api-report.md rename to plugins/devtools-common/api-report.api.md index 83af75d11a..bf71f1b87a 100644 --- a/plugins/devtools-common/api-report.md +++ b/plugins/devtools-common/api-report.api.md @@ -73,4 +73,20 @@ export type PackageDependency = { name: string; versions: string; }; + +// Warnings were encountered during analysis: +// +// src/permissions.d.ts:4:22 - (ae-undocumented) Missing documentation for "devToolsAdministerPermission". +// src/permissions.d.ts:8:22 - (ae-undocumented) Missing documentation for "devToolsInfoReadPermission". +// src/permissions.d.ts:12:22 - (ae-undocumented) Missing documentation for "devToolsConfigReadPermission". +// src/permissions.d.ts:16:22 - (ae-undocumented) Missing documentation for "devToolsExternalDependenciesReadPermission". +// src/types.d.ts:3:1 - (ae-undocumented) Missing documentation for "Endpoint". +// src/types.d.ts:9:1 - (ae-undocumented) Missing documentation for "ExternalDependency". +// src/types.d.ts:17:1 - (ae-undocumented) Missing documentation for "DevToolsInfo". +// src/types.d.ts:25:1 - (ae-undocumented) Missing documentation for "PackageDependency". +// src/types.d.ts:30:1 - (ae-undocumented) Missing documentation for "ExternalDependencyStatus". +// src/types.d.ts:31:5 - (ae-undocumented) Missing documentation for "healthy". +// src/types.d.ts:32:5 - (ae-undocumented) Missing documentation for "unhealthy". +// src/types.d.ts:35:1 - (ae-undocumented) Missing documentation for "ConfigInfo". +// src/types.d.ts:40:1 - (ae-undocumented) Missing documentation for "ConfigError". ``` diff --git a/plugins/devtools/api-report-alpha.md b/plugins/devtools/api-report-alpha.api.md similarity index 94% rename from plugins/devtools/api-report-alpha.md rename to plugins/devtools/api-report-alpha.api.md index 1b026d1f78..5db9e75117 100644 --- a/plugins/devtools/api-report-alpha.md +++ b/plugins/devtools/api-report-alpha.api.md @@ -89,5 +89,9 @@ const _default: FrontendPlugin< >; export default _default; +// Warnings were encountered during analysis: +// +// src/alpha/plugin.d.ts:12:15 - (ae-undocumented) Missing documentation for "_default". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/devtools/api-report.md b/plugins/devtools/api-report.api.md similarity index 62% rename from plugins/devtools/api-report.md rename to plugins/devtools/api-report.api.md index bba36a5a9a..75dfdc32f6 100644 --- a/plugins/devtools/api-report.md +++ b/plugins/devtools/api-report.api.md @@ -57,4 +57,14 @@ export type SubRoute = { } >; }; + +// Warnings were encountered during analysis: +// +// src/components/Content/ConfigContent/ConfigContent.d.ts:7:22 - (ae-undocumented) Missing documentation for "ConfigContent". +// src/components/Content/ExternalDependenciesContent/ExternalDependenciesContent.d.ts:5:22 - (ae-undocumented) Missing documentation for "ExternalDependenciesContent". +// src/components/Content/InfoContent/InfoContent.d.ts:3:22 - (ae-undocumented) Missing documentation for "InfoContent". +// src/components/DevToolsLayout/DevToolsLayout.d.ts:4:1 - (ae-undocumented) Missing documentation for "SubRoute". +// src/components/DevToolsLayout/DevToolsLayout.d.ts:13:1 - (ae-undocumented) Missing documentation for "DevToolsLayoutProps". +// src/plugin.d.ts:3:22 - (ae-undocumented) Missing documentation for "devToolsPlugin". +// src/plugin.d.ts:7:22 - (ae-undocumented) Missing documentation for "DevToolsPage". ``` diff --git a/plugins/events-backend-module-aws-sqs/api-report-alpha.md b/plugins/events-backend-module-aws-sqs/api-report-alpha.api.md similarity index 100% rename from plugins/events-backend-module-aws-sqs/api-report-alpha.md rename to plugins/events-backend-module-aws-sqs/api-report-alpha.api.md diff --git a/plugins/events-backend-module-aws-sqs/api-report.md b/plugins/events-backend-module-aws-sqs/api-report.api.md similarity index 71% rename from plugins/events-backend-module-aws-sqs/api-report.md rename to plugins/events-backend-module-aws-sqs/api-report.api.md index ac806bf01b..eee183519d 100644 --- a/plugins/events-backend-module-aws-sqs/api-report.md +++ b/plugins/events-backend-module-aws-sqs/api-report.api.md @@ -20,4 +20,9 @@ export class AwsSqsConsumingEventPublisher { // (undocumented) start(): Promise; } + +// Warnings were encountered during analysis: +// +// src/publisher/AwsSqsConsumingEventPublisher.d.ts:21:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/publisher/AwsSqsConsumingEventPublisher.d.ts:28:5 - (ae-undocumented) Missing documentation for "start". ``` diff --git a/plugins/events-backend-module-azure/api-report-alpha.md b/plugins/events-backend-module-azure/api-report-alpha.api.md similarity index 100% rename from plugins/events-backend-module-azure/api-report-alpha.md rename to plugins/events-backend-module-azure/api-report-alpha.api.md diff --git a/plugins/events-backend-module-azure/api-report.md b/plugins/events-backend-module-azure/api-report.api.md similarity index 70% rename from plugins/events-backend-module-azure/api-report.md rename to plugins/events-backend-module-azure/api-report.api.md index 66529ef2d4..0ad4d4e9fd 100644 --- a/plugins/events-backend-module-azure/api-report.md +++ b/plugins/events-backend-module-azure/api-report.api.md @@ -15,4 +15,9 @@ export class AzureDevOpsEventRouter extends SubTopicEventRouter { // (undocumented) protected getSubscriberId(): string; } + +// Warnings were encountered during analysis: +// +// src/router/AzureDevOpsEventRouter.d.ts:13:5 - (ae-undocumented) Missing documentation for "getSubscriberId". +// src/router/AzureDevOpsEventRouter.d.ts:14:5 - (ae-undocumented) Missing documentation for "determineSubTopic". ``` diff --git a/plugins/events-backend-module-bitbucket-cloud/api-report-alpha.md b/plugins/events-backend-module-bitbucket-cloud/api-report-alpha.api.md similarity index 100% rename from plugins/events-backend-module-bitbucket-cloud/api-report-alpha.md rename to plugins/events-backend-module-bitbucket-cloud/api-report-alpha.api.md diff --git a/plugins/events-backend-module-bitbucket-cloud/api-report.md b/plugins/events-backend-module-bitbucket-cloud/api-report.api.md similarity index 70% rename from plugins/events-backend-module-bitbucket-cloud/api-report.md rename to plugins/events-backend-module-bitbucket-cloud/api-report.api.md index ba4f61d739..51aa7f27cb 100644 --- a/plugins/events-backend-module-bitbucket-cloud/api-report.md +++ b/plugins/events-backend-module-bitbucket-cloud/api-report.api.md @@ -15,4 +15,9 @@ export class BitbucketCloudEventRouter extends SubTopicEventRouter { // (undocumented) protected getSubscriberId(): string; } + +// Warnings were encountered during analysis: +// +// src/router/BitbucketCloudEventRouter.d.ts:13:5 - (ae-undocumented) Missing documentation for "getSubscriberId". +// src/router/BitbucketCloudEventRouter.d.ts:14:5 - (ae-undocumented) Missing documentation for "determineSubTopic". ``` diff --git a/plugins/events-backend-module-gerrit/api-report-alpha.md b/plugins/events-backend-module-gerrit/api-report-alpha.api.md similarity index 100% rename from plugins/events-backend-module-gerrit/api-report-alpha.md rename to plugins/events-backend-module-gerrit/api-report-alpha.api.md diff --git a/plugins/events-backend-module-gerrit/api-report.md b/plugins/events-backend-module-gerrit/api-report.api.md similarity index 71% rename from plugins/events-backend-module-gerrit/api-report.md rename to plugins/events-backend-module-gerrit/api-report.api.md index c75857aa43..7a3f75ca6f 100644 --- a/plugins/events-backend-module-gerrit/api-report.md +++ b/plugins/events-backend-module-gerrit/api-report.api.md @@ -15,4 +15,9 @@ export class GerritEventRouter extends SubTopicEventRouter { // (undocumented) protected getSubscriberId(): string; } + +// Warnings were encountered during analysis: +// +// src/router/GerritEventRouter.d.ts:13:5 - (ae-undocumented) Missing documentation for "getSubscriberId". +// src/router/GerritEventRouter.d.ts:14:5 - (ae-undocumented) Missing documentation for "determineSubTopic". ``` diff --git a/plugins/events-backend-module-github/api-report-alpha.md b/plugins/events-backend-module-github/api-report-alpha.api.md similarity index 100% rename from plugins/events-backend-module-github/api-report-alpha.md rename to plugins/events-backend-module-github/api-report-alpha.api.md diff --git a/plugins/events-backend-module-github/api-report.md b/plugins/events-backend-module-github/api-report.api.md similarity index 76% rename from plugins/events-backend-module-github/api-report.md rename to plugins/events-backend-module-github/api-report.api.md index 5341f86039..a3b8adaaa5 100644 --- a/plugins/events-backend-module-github/api-report.md +++ b/plugins/events-backend-module-github/api-report.api.md @@ -22,4 +22,9 @@ export class GithubEventRouter extends SubTopicEventRouter { // (undocumented) protected getSubscriberId(): string; } + +// Warnings were encountered during analysis: +// +// src/router/GithubEventRouter.d.ts:13:5 - (ae-undocumented) Missing documentation for "getSubscriberId". +// src/router/GithubEventRouter.d.ts:14:5 - (ae-undocumented) Missing documentation for "determineSubTopic". ``` diff --git a/plugins/events-backend-module-gitlab/api-report-alpha.md b/plugins/events-backend-module-gitlab/api-report-alpha.api.md similarity index 100% rename from plugins/events-backend-module-gitlab/api-report-alpha.md rename to plugins/events-backend-module-gitlab/api-report-alpha.api.md diff --git a/plugins/events-backend-module-gitlab/api-report.md b/plugins/events-backend-module-gitlab/api-report.api.md similarity index 76% rename from plugins/events-backend-module-gitlab/api-report.md rename to plugins/events-backend-module-gitlab/api-report.api.md index f348436375..9753380364 100644 --- a/plugins/events-backend-module-gitlab/api-report.md +++ b/plugins/events-backend-module-gitlab/api-report.api.md @@ -20,4 +20,9 @@ export class GitlabEventRouter extends SubTopicEventRouter { // (undocumented) protected getSubscriberId(): string; } + +// Warnings were encountered during analysis: +// +// src/router/GitlabEventRouter.d.ts:13:5 - (ae-undocumented) Missing documentation for "getSubscriberId". +// src/router/GitlabEventRouter.d.ts:14:5 - (ae-undocumented) Missing documentation for "determineSubTopic". ``` diff --git a/plugins/events-backend-test-utils/api-report.api.md b/plugins/events-backend-test-utils/api-report.api.md new file mode 100644 index 0000000000..d88a9dbee0 --- /dev/null +++ b/plugins/events-backend-test-utils/api-report.api.md @@ -0,0 +1,86 @@ +## API Report File for "@backstage/plugin-events-backend-test-utils" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts +import { EventBroker } from '@backstage/plugin-events-node'; +import { EventParams } from '@backstage/plugin-events-node'; +import { EventPublisher } from '@backstage/plugin-events-node'; +import { EventsService } from '@backstage/plugin-events-node'; +import { EventsServiceSubscribeOptions } from '@backstage/plugin-events-node'; +import { EventSubscriber } from '@backstage/plugin-events-node'; + +// @public @deprecated (undocumented) +export class TestEventBroker implements EventBroker { + // (undocumented) + publish(params: EventParams): Promise; + // (undocumented) + readonly published: EventParams[]; + // (undocumented) + subscribe( + ...subscribers: Array> + ): void; + // (undocumented) + readonly subscribed: EventSubscriber[]; +} + +// @public @deprecated (undocumented) +export class TestEventPublisher implements EventPublisher { + // (undocumented) + get eventBroker(): EventBroker | undefined; + // (undocumented) + setEventBroker(eventBroker: EventBroker): Promise; +} + +// @public (undocumented) +export class TestEventsService implements EventsService { + // (undocumented) + publish(params: EventParams): Promise; + // (undocumented) + get published(): EventParams[]; + // (undocumented) + reset(): void; + // (undocumented) + subscribe(options: EventsServiceSubscribeOptions): Promise; + // (undocumented) + get subscribed(): EventsServiceSubscribeOptions[]; +} + +// @public @deprecated (undocumented) +export class TestEventSubscriber implements EventSubscriber { + constructor(name: string, topics: string[]); + // (undocumented) + readonly name: string; + // (undocumented) + onEvent(params: EventParams): Promise; + // (undocumented) + readonly receivedEvents: Record; + // (undocumented) + supportsEventTopics(): string[]; + // (undocumented) + readonly topics: string[]; +} + +// Warnings were encountered during analysis: +// +// src/testUtils/TestEventBroker.d.ts:6:1 - (ae-undocumented) Missing documentation for "TestEventBroker". +// src/testUtils/TestEventBroker.d.ts:7:5 - (ae-undocumented) Missing documentation for "published". +// src/testUtils/TestEventBroker.d.ts:8:5 - (ae-undocumented) Missing documentation for "subscribed". +// src/testUtils/TestEventBroker.d.ts:9:5 - (ae-undocumented) Missing documentation for "publish". +// src/testUtils/TestEventBroker.d.ts:10:5 - (ae-undocumented) Missing documentation for "subscribe". +// src/testUtils/TestEventPublisher.d.ts:6:1 - (ae-undocumented) Missing documentation for "TestEventPublisher". +// src/testUtils/TestEventPublisher.d.ts:8:5 - (ae-undocumented) Missing documentation for "setEventBroker". +// src/testUtils/TestEventPublisher.d.ts:9:5 - (ae-undocumented) Missing documentation for "eventBroker". +// src/testUtils/TestEventSubscriber.d.ts:6:1 - (ae-undocumented) Missing documentation for "TestEventSubscriber". +// src/testUtils/TestEventSubscriber.d.ts:7:5 - (ae-undocumented) Missing documentation for "name". +// src/testUtils/TestEventSubscriber.d.ts:8:5 - (ae-undocumented) Missing documentation for "topics". +// src/testUtils/TestEventSubscriber.d.ts:9:5 - (ae-undocumented) Missing documentation for "receivedEvents". +// src/testUtils/TestEventSubscriber.d.ts:11:5 - (ae-undocumented) Missing documentation for "supportsEventTopics". +// src/testUtils/TestEventSubscriber.d.ts:12:5 - (ae-undocumented) Missing documentation for "onEvent". +// src/testUtils/TestEventsService.d.ts:3:1 - (ae-undocumented) Missing documentation for "TestEventsService". +// src/testUtils/TestEventsService.d.ts:5:5 - (ae-undocumented) Missing documentation for "publish". +// src/testUtils/TestEventsService.d.ts:6:5 - (ae-undocumented) Missing documentation for "subscribe". +// src/testUtils/TestEventsService.d.ts:7:5 - (ae-undocumented) Missing documentation for "published". +// src/testUtils/TestEventsService.d.ts:8:5 - (ae-undocumented) Missing documentation for "subscribed". +// src/testUtils/TestEventsService.d.ts:9:5 - (ae-undocumented) Missing documentation for "reset". +``` diff --git a/plugins/events-backend-test-utils/api-report.md b/plugins/events-backend-test-utils/api-report.md deleted file mode 100644 index 9630c3d4e2..0000000000 --- a/plugins/events-backend-test-utils/api-report.md +++ /dev/null @@ -1,63 +0,0 @@ -## API Report File for "@backstage/plugin-events-backend-test-utils" - -> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). - -```ts -import { EventBroker } from '@backstage/plugin-events-node'; -import { EventParams } from '@backstage/plugin-events-node'; -import { EventPublisher } from '@backstage/plugin-events-node'; -import { EventsService } from '@backstage/plugin-events-node'; -import { EventsServiceSubscribeOptions } from '@backstage/plugin-events-node'; -import { EventSubscriber } from '@backstage/plugin-events-node'; - -// @public @deprecated (undocumented) -export class TestEventBroker implements EventBroker { - // (undocumented) - publish(params: EventParams): Promise; - // (undocumented) - readonly published: EventParams[]; - // (undocumented) - subscribe( - ...subscribers: Array> - ): void; - // (undocumented) - readonly subscribed: EventSubscriber[]; -} - -// @public @deprecated (undocumented) -export class TestEventPublisher implements EventPublisher { - // (undocumented) - get eventBroker(): EventBroker | undefined; - // (undocumented) - setEventBroker(eventBroker: EventBroker): Promise; -} - -// @public (undocumented) -export class TestEventsService implements EventsService { - // (undocumented) - publish(params: EventParams): Promise; - // (undocumented) - get published(): EventParams[]; - // (undocumented) - reset(): void; - // (undocumented) - subscribe(options: EventsServiceSubscribeOptions): Promise; - // (undocumented) - get subscribed(): EventsServiceSubscribeOptions[]; -} - -// @public @deprecated (undocumented) -export class TestEventSubscriber implements EventSubscriber { - constructor(name: string, topics: string[]); - // (undocumented) - readonly name: string; - // (undocumented) - onEvent(params: EventParams): Promise; - // (undocumented) - readonly receivedEvents: Record; - // (undocumented) - supportsEventTopics(): string[]; - // (undocumented) - readonly topics: string[]; -} -``` diff --git a/plugins/events-backend/api-report-alpha.md b/plugins/events-backend/api-report-alpha.api.md similarity index 100% rename from plugins/events-backend/api-report-alpha.md rename to plugins/events-backend/api-report-alpha.api.md diff --git a/plugins/events-backend/api-report.md b/plugins/events-backend/api-report.api.md similarity index 70% rename from plugins/events-backend/api-report.md rename to plugins/events-backend/api-report.api.md index 8b5d4e8d31..5511d8c410 100644 --- a/plugins/events-backend/api-report.md +++ b/plugins/events-backend/api-report.api.md @@ -56,4 +56,14 @@ export class HttpPostIngressEventPublisher { logger: LoggerService; }): HttpPostIngressEventPublisher; } + +// Warnings were encountered during analysis: +// +// src/service/DefaultEventBroker.d.ts:21:5 - (ae-undocumented) Missing documentation for "publish". +// src/service/DefaultEventBroker.d.ts:22:5 - (ae-undocumented) Missing documentation for "subscribe". +// src/service/EventsBackend.d.ts:14:5 - (ae-undocumented) Missing documentation for "setEventBroker". +// src/service/EventsBackend.d.ts:15:5 - (ae-undocumented) Missing documentation for "addPublishers". +// src/service/EventsBackend.d.ts:16:5 - (ae-undocumented) Missing documentation for "addSubscribers". +// src/service/http/HttpPostIngressEventPublisher.d.ts:15:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/service/http/HttpPostIngressEventPublisher.d.ts:24:5 - (ae-undocumented) Missing documentation for "bind". ``` diff --git a/plugins/events-node/api-report-alpha.md b/plugins/events-node/api-report-alpha.api.md similarity index 64% rename from plugins/events-node/api-report-alpha.md rename to plugins/events-node/api-report-alpha.api.md index f61048ac94..d11b170365 100644 --- a/plugins/events-node/api-report-alpha.md +++ b/plugins/events-node/api-report-alpha.api.md @@ -28,5 +28,14 @@ export interface EventsExtensionPoint { // @alpha (undocumented) export const eventsExtensionPoint: ExtensionPoint; +// Warnings were encountered during analysis: +// +// src/extensions.d.ts:5:1 - (ae-undocumented) Missing documentation for "EventsExtensionPoint". +// src/extensions.d.ts:9:5 - (ae-undocumented) Missing documentation for "setEventBroker". +// src/extensions.d.ts:13:5 - (ae-undocumented) Missing documentation for "addPublishers". +// src/extensions.d.ts:17:5 - (ae-undocumented) Missing documentation for "addSubscribers". +// src/extensions.d.ts:18:5 - (ae-undocumented) Missing documentation for "addHttpPostIngress". +// src/extensions.d.ts:23:22 - (ae-undocumented) Missing documentation for "eventsExtensionPoint". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/events-node/api-report.md b/plugins/events-node/api-report.api.md similarity index 63% rename from plugins/events-node/api-report.md rename to plugins/events-node/api-report.api.md index d8a2281faa..c885c7ec10 100644 --- a/plugins/events-node/api-report.md +++ b/plugins/events-node/api-report.api.md @@ -128,4 +128,26 @@ export abstract class SubTopicEventRouter extends EventRouter { // (undocumented) protected abstract determineSubTopic(params: EventParams): string | undefined; } + +// Warnings were encountered during analysis: +// +// src/api/DefaultEventsService.d.ts:16:5 - (ae-undocumented) Missing documentation for "create". +// src/api/DefaultEventsService.d.ts:26:5 - (ae-undocumented) Missing documentation for "publish". +// src/api/DefaultEventsService.d.ts:27:5 - (ae-undocumented) Missing documentation for "subscribe". +// src/api/EventParams.d.ts:4:1 - (ae-undocumented) Missing documentation for "EventParams". +// src/api/EventPublisher.d.ts:15:5 - (ae-undocumented) Missing documentation for "setEventBroker". +// src/api/EventRouter.d.ts:18:5 - (ae-undocumented) Missing documentation for "getSubscriberId". +// src/api/EventRouter.d.ts:19:5 - (ae-undocumented) Missing documentation for "determineDestinationTopic". +// src/api/EventRouter.d.ts:26:5 - (ae-undocumented) Missing documentation for "onEvent". +// src/api/EventsService.d.ts:26:1 - (ae-undocumented) Missing documentation for "EventsServiceSubscribeOptions". +// src/api/EventsService.d.ts:37:1 - (ae-undocumented) Missing documentation for "EventsServiceEventHandler". +// src/api/SubTopicEventRouter.d.ts:18:5 - (ae-undocumented) Missing documentation for "determineSubTopic". +// src/api/SubTopicEventRouter.d.ts:19:5 - (ae-undocumented) Missing documentation for "determineDestinationTopic". +// src/api/http/HttpPostIngressOptions.d.ts:5:1 - (ae-undocumented) Missing documentation for "HttpPostIngressOptions". +// src/api/http/HttpPostIngressOptions.d.ts:6:5 - (ae-undocumented) Missing documentation for "topic". +// src/api/http/HttpPostIngressOptions.d.ts:7:5 - (ae-undocumented) Missing documentation for "validator". +// src/api/http/validation/RequestDetails.d.ts:4:1 - (ae-undocumented) Missing documentation for "RequestDetails". +// src/api/http/validation/RequestRejectionDetails.d.ts:8:5 - (ae-undocumented) Missing documentation for "status". +// src/api/http/validation/RequestRejectionDetails.d.ts:9:5 - (ae-undocumented) Missing documentation for "payload". +// src/service.d.ts:10:22 - (ae-undocumented) Missing documentation for "eventsServiceFactory". ``` diff --git a/plugins/example-todo-list-backend/api-report.md b/plugins/example-todo-list-backend/api-report.api.md similarity index 100% rename from plugins/example-todo-list-backend/api-report.md rename to plugins/example-todo-list-backend/api-report.api.md diff --git a/plugins/example-todo-list-common/api-report.md b/plugins/example-todo-list-common/api-report.api.md similarity index 100% rename from plugins/example-todo-list-common/api-report.md rename to plugins/example-todo-list-common/api-report.api.md diff --git a/plugins/example-todo-list/api-report.md b/plugins/example-todo-list/api-report.api.md similarity index 100% rename from plugins/example-todo-list/api-report.md rename to plugins/example-todo-list/api-report.api.md diff --git a/plugins/home-react/api-report.md b/plugins/home-react/api-report.api.md similarity index 69% rename from plugins/home-react/api-report.md rename to plugins/home-react/api-report.api.md index 268f598a63..802d73605c 100644 --- a/plugins/home-react/api-report.md +++ b/plugins/home-react/api-report.api.md @@ -74,4 +74,15 @@ export const SettingsModal: (props: { componentName?: string; children: JSX.Element; }) => React_2.JSX.Element; + +// Warnings were encountered during analysis: +// +// src/components/SettingsModal.d.ts:3:22 - (ae-undocumented) Missing documentation for "SettingsModal". +// src/extensions.d.ts:6:1 - (ae-undocumented) Missing documentation for "ComponentRenderer". +// src/extensions.d.ts:12:1 - (ae-undocumented) Missing documentation for "ComponentParts". +// src/extensions.d.ts:21:1 - (ae-undocumented) Missing documentation for "RendererProps". +// src/extensions.d.ts:27:1 - (ae-undocumented) Missing documentation for "CardExtensionProps". +// src/extensions.d.ts:33:1 - (ae-undocumented) Missing documentation for "CardLayout". +// src/extensions.d.ts:48:1 - (ae-undocumented) Missing documentation for "CardSettings". +// src/extensions.d.ts:55:1 - (ae-undocumented) Missing documentation for "CardConfig". ``` diff --git a/plugins/home/api-report-alpha.md b/plugins/home/api-report-alpha.api.md similarity index 90% rename from plugins/home/api-report-alpha.md rename to plugins/home/api-report-alpha.api.md index 429af86a12..84c5082717 100644 --- a/plugins/home/api-report-alpha.md +++ b/plugins/home/api-report-alpha.api.md @@ -78,5 +78,10 @@ export const titleExtensionDataRef: ConfigurableExtensionDataRef< {} >; +// Warnings were encountered during analysis: +// +// src/alpha.d.ts:4:22 - (ae-undocumented) Missing documentation for "titleExtensionDataRef". +// src/alpha.d.ts:8:15 - (ae-undocumented) Missing documentation for "_default". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/home/api-report.md b/plugins/home/api-report.api.md similarity index 75% rename from plugins/home/api-report.md rename to plugins/home/api-report.api.md index 023c649ab4..985aed50ca 100644 --- a/plugins/home/api-report.md +++ b/plugins/home/api-report.api.md @@ -327,4 +327,34 @@ export const WelcomeTitle: ({ export type WelcomeTitleLanguageProps = { language?: string[]; }; + +// Warnings were encountered during analysis: +// +// src/api/VisitsApi.d.ts:106:22 - (ae-undocumented) Missing documentation for "visitsApiRef". +// src/api/VisitsStorageApi.d.ts:4:1 - (ae-undocumented) Missing documentation for "VisitsStorageApiOptions". +// src/api/VisitsStorageApi.d.ts:20:5 - (ae-undocumented) Missing documentation for "create". +// src/api/VisitsWebStorageApi.d.ts:4:1 - (ae-undocumented) Missing documentation for "VisitsWebStorageApiOptions". +// src/api/VisitsWebStorageApi.d.ts:14:5 - (ae-undocumented) Missing documentation for "create". +// src/assets/TemplateBackstageLogo.d.ts:3:22 - (ae-undocumented) Missing documentation for "TemplateBackstageLogo". +// src/assets/TemplateBackstageLogoIcon.d.ts:3:22 - (ae-undocumented) Missing documentation for "TemplateBackstageLogoIcon". +// src/deprecated.d.ts:7:22 - (ae-undocumented) Missing documentation for "createCardExtension". +// src/deprecated.d.ts:12:1 - (ae-undocumented) Missing documentation for "CardExtensionProps". +// src/deprecated.d.ts:17:1 - (ae-undocumented) Missing documentation for "CardLayout". +// src/deprecated.d.ts:22:1 - (ae-undocumented) Missing documentation for "CardSettings". +// src/deprecated.d.ts:27:1 - (ae-undocumented) Missing documentation for "CardConfig". +// src/deprecated.d.ts:32:1 - (ae-undocumented) Missing documentation for "ComponentParts". +// src/deprecated.d.ts:37:1 - (ae-undocumented) Missing documentation for "ComponentRenderer". +// src/deprecated.d.ts:42:1 - (ae-undocumented) Missing documentation for "RendererProps". +// src/deprecated.d.ts:47:22 - (ae-undocumented) Missing documentation for "SettingsModal". +// src/homePageComponents/HeaderWorldClock/HeaderWorldClock.d.ts:3:1 - (ae-undocumented) Missing documentation for "ClockConfig". +// src/homePageComponents/Toolkit/Context.d.ts:3:1 - (ae-undocumented) Missing documentation for "Tool". +// src/homePageComponents/VisitedByType/Content.d.ts:4:1 - (ae-undocumented) Missing documentation for "VisitedByTypeKind". +// src/homePageComponents/VisitedByType/Content.d.ts:6:1 - (ae-undocumented) Missing documentation for "VisitedByTypeProps". +// src/homePageComponents/WelcomeTitle/WelcomeTitle.d.ts:3:1 - (ae-undocumented) Missing documentation for "WelcomeTitleLanguageProps". +// src/plugin.d.ts:5:22 - (ae-undocumented) Missing documentation for "homePlugin". +// src/plugin.d.ts:9:22 - (ae-undocumented) Missing documentation for "HomepageCompositionRoot". +// src/plugin.d.ts:14:22 - (ae-undocumented) Missing documentation for "ComponentAccordion". +// src/plugin.d.ts:24:22 - (ae-undocumented) Missing documentation for "ComponentTabs". +// src/plugin.d.ts:32:22 - (ae-undocumented) Missing documentation for "ComponentTab". +// src/plugin.d.ts:53:22 - (ae-undocumented) Missing documentation for "HomePageRandomJoke". ``` diff --git a/plugins/kubernetes-backend/api-report-alpha.md b/plugins/kubernetes-backend/api-report-alpha.api.md similarity index 100% rename from plugins/kubernetes-backend/api-report-alpha.md rename to plugins/kubernetes-backend/api-report-alpha.api.md diff --git a/plugins/kubernetes-backend/api-report.md b/plugins/kubernetes-backend/api-report.api.md similarity index 54% rename from plugins/kubernetes-backend/api-report.md rename to plugins/kubernetes-backend/api-report.api.md index 2711085b81..9b2919ef66 100644 --- a/plugins/kubernetes-backend/api-report.md +++ b/plugins/kubernetes-backend/api-report.api.md @@ -425,4 +425,118 @@ export type SigningCreds = { secretAccessKey: string | undefined; sessionToken: string | undefined; }; + +// Warnings were encountered during analysis: +// +// src/auth/AksStrategy.d.ts:7:1 - (ae-undocumented) Missing documentation for "AksStrategy". +// src/auth/AksStrategy.d.ts:8:5 - (ae-undocumented) Missing documentation for "getCredential". +// src/auth/AksStrategy.d.ts:9:5 - (ae-undocumented) Missing documentation for "validateCluster". +// src/auth/AksStrategy.d.ts:10:5 - (ae-undocumented) Missing documentation for "presentAuthMetadata". +// src/auth/AnonymousStrategy.d.ts:6:1 - (ae-undocumented) Missing documentation for "AnonymousStrategy". +// src/auth/AnonymousStrategy.d.ts:7:5 - (ae-undocumented) Missing documentation for "getCredential". +// src/auth/AnonymousStrategy.d.ts:8:5 - (ae-undocumented) Missing documentation for "validateCluster". +// src/auth/AnonymousStrategy.d.ts:9:5 - (ae-undocumented) Missing documentation for "presentAuthMetadata". +// src/auth/AwsIamStrategy.d.ts:7:1 - (ae-undocumented) Missing documentation for "SigningCreds". +// src/auth/AwsIamStrategy.d.ts:16:1 - (ae-undocumented) Missing documentation for "AwsIamStrategy". +// src/auth/AwsIamStrategy.d.ts:21:5 - (ae-undocumented) Missing documentation for "getCredential". +// src/auth/AwsIamStrategy.d.ts:22:5 - (ae-undocumented) Missing documentation for "validateCluster". +// src/auth/AwsIamStrategy.d.ts:24:5 - (ae-undocumented) Missing documentation for "presentAuthMetadata". +// src/auth/AzureIdentityStrategy.d.ts:8:1 - (ae-undocumented) Missing documentation for "AzureIdentityStrategy". +// src/auth/AzureIdentityStrategy.d.ts:14:5 - (ae-undocumented) Missing documentation for "getCredential". +// src/auth/AzureIdentityStrategy.d.ts:15:5 - (ae-undocumented) Missing documentation for "validateCluster". +// src/auth/AzureIdentityStrategy.d.ts:19:5 - (ae-undocumented) Missing documentation for "presentAuthMetadata". +// src/auth/DispatchStrategy.d.ts:7:1 - (ae-undocumented) Missing documentation for "DispatchStrategyOptions". +// src/auth/DispatchStrategy.d.ts:19:5 - (ae-undocumented) Missing documentation for "getCredential". +// src/auth/DispatchStrategy.d.ts:20:5 - (ae-undocumented) Missing documentation for "validateCluster". +// src/auth/DispatchStrategy.d.ts:21:5 - (ae-undocumented) Missing documentation for "presentAuthMetadata". +// src/auth/GoogleServiceAccountStrategy.d.ts:6:1 - (ae-undocumented) Missing documentation for "GoogleServiceAccountStrategy". +// src/auth/GoogleServiceAccountStrategy.d.ts:7:5 - (ae-undocumented) Missing documentation for "getCredential". +// src/auth/GoogleServiceAccountStrategy.d.ts:8:5 - (ae-undocumented) Missing documentation for "validateCluster". +// src/auth/GoogleServiceAccountStrategy.d.ts:9:5 - (ae-undocumented) Missing documentation for "presentAuthMetadata". +// src/auth/GoogleStrategy.d.ts:7:1 - (ae-undocumented) Missing documentation for "GoogleStrategy". +// src/auth/GoogleStrategy.d.ts:8:5 - (ae-undocumented) Missing documentation for "getCredential". +// src/auth/GoogleStrategy.d.ts:9:5 - (ae-undocumented) Missing documentation for "validateCluster". +// src/auth/GoogleStrategy.d.ts:10:5 - (ae-undocumented) Missing documentation for "presentAuthMetadata". +// src/auth/OidcStrategy.d.ts:7:1 - (ae-undocumented) Missing documentation for "OidcStrategy". +// src/auth/OidcStrategy.d.ts:8:5 - (ae-undocumented) Missing documentation for "getCredential". +// src/auth/OidcStrategy.d.ts:9:5 - (ae-undocumented) Missing documentation for "validateCluster". +// src/auth/OidcStrategy.d.ts:10:5 - (ae-undocumented) Missing documentation for "presentAuthMetadata". +// src/auth/ServiceAccountStrategy.d.ts:6:1 - (ae-undocumented) Missing documentation for "ServiceAccountStrategy". +// src/auth/ServiceAccountStrategy.d.ts:7:5 - (ae-undocumented) Missing documentation for "getCredential". +// src/auth/ServiceAccountStrategy.d.ts:8:5 - (ae-undocumented) Missing documentation for "validateCluster". +// src/auth/ServiceAccountStrategy.d.ts:9:5 - (ae-undocumented) Missing documentation for "presentAuthMetadata". +// src/auth/types.d.ts:5:1 - (ae-undocumented) Missing documentation for "AuthenticationStrategy". +// src/auth/types.d.ts:9:1 - (ae-undocumented) Missing documentation for "KubernetesCredential". +// src/service/KubernetesBuilder.d.ts:14:1 - (ae-undocumented) Missing documentation for "KubernetesEnvironment". +// src/service/KubernetesBuilder.d.ts:15:5 - (ae-undocumented) Missing documentation for "logger". +// src/service/KubernetesBuilder.d.ts:16:5 - (ae-undocumented) Missing documentation for "config". +// src/service/KubernetesBuilder.d.ts:17:5 - (ae-undocumented) Missing documentation for "catalogApi". +// src/service/KubernetesBuilder.d.ts:18:5 - (ae-undocumented) Missing documentation for "discovery". +// src/service/KubernetesBuilder.d.ts:19:5 - (ae-undocumented) Missing documentation for "permissions". +// src/service/KubernetesBuilder.d.ts:20:5 - (ae-undocumented) Missing documentation for "auth". +// src/service/KubernetesBuilder.d.ts:21:5 - (ae-undocumented) Missing documentation for "httpAuth". +// src/service/KubernetesBuilder.d.ts:44:1 - (ae-undocumented) Missing documentation for "KubernetesBuilder". +// src/service/KubernetesBuilder.d.ts:45:5 - (ae-undocumented) Missing documentation for "env". +// src/service/KubernetesBuilder.d.ts:53:5 - (ae-undocumented) Missing documentation for "createBuilder". +// src/service/KubernetesBuilder.d.ts:55:5 - (ae-undocumented) Missing documentation for "build". +// src/service/KubernetesBuilder.d.ts:56:5 - (ae-undocumented) Missing documentation for "setClusterSupplier". +// src/service/KubernetesBuilder.d.ts:57:5 - (ae-undocumented) Missing documentation for "setDefaultClusterRefreshInterval". +// src/service/KubernetesBuilder.d.ts:58:5 - (ae-undocumented) Missing documentation for "setObjectsProvider". +// src/service/KubernetesBuilder.d.ts:59:5 - (ae-undocumented) Missing documentation for "setFetcher". +// src/service/KubernetesBuilder.d.ts:60:5 - (ae-undocumented) Missing documentation for "setServiceLocator". +// src/service/KubernetesBuilder.d.ts:61:5 - (ae-undocumented) Missing documentation for "setProxy". +// src/service/KubernetesBuilder.d.ts:62:5 - (ae-undocumented) Missing documentation for "setAuthStrategyMap". +// src/service/KubernetesBuilder.d.ts:65:5 - (ae-undocumented) Missing documentation for "addAuthStrategy". +// src/service/KubernetesBuilder.d.ts:66:5 - (ae-undocumented) Missing documentation for "buildCustomResources". +// src/service/KubernetesBuilder.d.ts:67:5 - (ae-undocumented) Missing documentation for "buildClusterSupplier". +// src/service/KubernetesBuilder.d.ts:68:5 - (ae-undocumented) Missing documentation for "buildObjectsProvider". +// src/service/KubernetesBuilder.d.ts:69:5 - (ae-undocumented) Missing documentation for "buildFetcher". +// src/service/KubernetesBuilder.d.ts:70:5 - (ae-undocumented) Missing documentation for "buildServiceLocator". +// src/service/KubernetesBuilder.d.ts:71:5 - (ae-undocumented) Missing documentation for "buildMultiTenantServiceLocator". +// src/service/KubernetesBuilder.d.ts:72:5 - (ae-undocumented) Missing documentation for "buildSingleTenantServiceLocator". +// src/service/KubernetesBuilder.d.ts:73:5 - (ae-undocumented) Missing documentation for "buildCatalogRelationServiceLocator". +// src/service/KubernetesBuilder.d.ts:74:5 - (ae-undocumented) Missing documentation for "buildHttpServiceLocator". +// src/service/KubernetesBuilder.d.ts:75:5 - (ae-undocumented) Missing documentation for "buildProxy". +// src/service/KubernetesBuilder.d.ts:76:5 - (ae-undocumented) Missing documentation for "buildRouter". +// src/service/KubernetesBuilder.d.ts:77:5 - (ae-undocumented) Missing documentation for "buildAuthStrategyMap". +// src/service/KubernetesBuilder.d.ts:80:5 - (ae-undocumented) Missing documentation for "fetchClusterDetails". +// src/service/KubernetesBuilder.d.ts:83:5 - (ae-undocumented) Missing documentation for "getServiceLocatorMethod". +// src/service/KubernetesBuilder.d.ts:84:5 - (ae-undocumented) Missing documentation for "getFetcher". +// src/service/KubernetesBuilder.d.ts:85:5 - (ae-undocumented) Missing documentation for "getClusterSupplier". +// src/service/KubernetesBuilder.d.ts:86:5 - (ae-undocumented) Missing documentation for "getServiceLocator". +// src/service/KubernetesBuilder.d.ts:87:5 - (ae-undocumented) Missing documentation for "getObjectsProvider". +// src/service/KubernetesBuilder.d.ts:88:5 - (ae-undocumented) Missing documentation for "getObjectTypesToFetch". +// src/service/KubernetesBuilder.d.ts:89:5 - (ae-undocumented) Missing documentation for "getProxy". +// src/service/KubernetesBuilder.d.ts:90:5 - (ae-undocumented) Missing documentation for "getAuthStrategyMap". +// src/service/KubernetesFanOutHandler.d.ts:9:22 - (ae-undocumented) Missing documentation for "DEFAULT_OBJECTS". +// src/service/KubernetesProxy.d.ts:50:5 - (ae-undocumented) Missing documentation for "createRequestHandler". +// src/service/router.d.ts:12:1 - (ae-undocumented) Missing documentation for "RouterOptions". +// src/service/router.d.ts:13:5 - (ae-undocumented) Missing documentation for "logger". +// src/service/router.d.ts:14:5 - (ae-undocumented) Missing documentation for "config". +// src/service/router.d.ts:15:5 - (ae-undocumented) Missing documentation for "catalogApi". +// src/service/router.d.ts:16:5 - (ae-undocumented) Missing documentation for "clusterSupplier". +// src/service/router.d.ts:17:5 - (ae-undocumented) Missing documentation for "discovery". +// src/service/router.d.ts:18:5 - (ae-undocumented) Missing documentation for "permissions". +// src/types/types.d.ts:9:1 - (ae-undocumented) Missing documentation for "ServiceLocatorMethod". +// src/types/types.d.ts:14:1 - (ae-undocumented) Missing documentation for "KubernetesObjectsProviderOptions". +// src/types/types.d.ts:15:5 - (ae-undocumented) Missing documentation for "logger". +// src/types/types.d.ts:16:5 - (ae-undocumented) Missing documentation for "config". +// src/types/types.d.ts:17:5 - (ae-undocumented) Missing documentation for "fetcher". +// src/types/types.d.ts:18:5 - (ae-undocumented) Missing documentation for "serviceLocator". +// src/types/types.d.ts:19:5 - (ae-undocumented) Missing documentation for "customResources". +// src/types/types.d.ts:20:5 - (ae-undocumented) Missing documentation for "objectTypesToFetch". +// src/types/types.d.ts:26:1 - (ae-undocumented) Missing documentation for "ObjectsByEntityRequest". +// src/types/types.d.ts:30:1 - (ae-undocumented) Missing documentation for "KubernetesObjectsProvider". +// src/types/types.d.ts:34:1 - (ae-undocumented) Missing documentation for "CustomResourcesByEntity". +// src/types/types.d.ts:39:1 - (ae-undocumented) Missing documentation for "AuthMetadata". +// src/types/types.d.ts:44:1 - (ae-undocumented) Missing documentation for "ClusterDetails". +// src/types/types.d.ts:49:1 - (ae-undocumented) Missing documentation for "KubernetesClustersSupplier". +// src/types/types.d.ts:53:1 - (ae-undocumented) Missing documentation for "KubernetesObjectTypes". +// src/types/types.d.ts:57:1 - (ae-undocumented) Missing documentation for "ObjectToFetch". +// src/types/types.d.ts:61:1 - (ae-undocumented) Missing documentation for "CustomResource". +// src/types/types.d.ts:65:1 - (ae-undocumented) Missing documentation for "ObjectFetchParams". +// src/types/types.d.ts:69:1 - (ae-undocumented) Missing documentation for "FetchResponseWrapper". +// src/types/types.d.ts:73:1 - (ae-undocumented) Missing documentation for "KubernetesFetcher". +// src/types/types.d.ts:77:1 - (ae-undocumented) Missing documentation for "ServiceLocatorRequestContext". +// src/types/types.d.ts:81:1 - (ae-undocumented) Missing documentation for "KubernetesServiceLocator". ``` diff --git a/plugins/kubernetes-cluster/api-report.md b/plugins/kubernetes-cluster/api-report.api.md similarity index 73% rename from plugins/kubernetes-cluster/api-report.md rename to plugins/kubernetes-cluster/api-report.api.md index 10d248097a..5e16134c2d 100644 --- a/plugins/kubernetes-cluster/api-report.md +++ b/plugins/kubernetes-cluster/api-report.api.md @@ -21,4 +21,9 @@ export const isKubernetesClusterAvailable: (entity: Entity) => boolean; // @public (undocumented) export const Router: () => React_2.JSX.Element; + +// Warnings were encountered during analysis: +// +// src/Router.d.ts:8:22 - (ae-undocumented) Missing documentation for "isKubernetesClusterAvailable". +// src/Router.d.ts:14:22 - (ae-undocumented) Missing documentation for "Router". ``` diff --git a/plugins/kubernetes-common/api-report.api.md b/plugins/kubernetes-common/api-report.api.md new file mode 100644 index 0000000000..283788cfe5 --- /dev/null +++ b/plugins/kubernetes-common/api-report.api.md @@ -0,0 +1,604 @@ +## API Report File for "@backstage/plugin-kubernetes-common" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts +import { BasicPermission } from '@backstage/plugin-permission-common'; +import { Entity } from '@backstage/catalog-model'; +import { FetchResponse as FetchResponse_2 } from '@backstage/plugin-kubernetes-common'; +import type { JsonObject } from '@backstage/types'; +import type { JsonValue } from '@backstage/types'; +import { ObjectsByEntityResponse as ObjectsByEntityResponse_2 } from '@backstage/plugin-kubernetes-common'; +import { PodStatus } from '@kubernetes/client-node'; +import { V1ConfigMap } from '@kubernetes/client-node'; +import { V1CronJob } from '@kubernetes/client-node'; +import { V1DaemonSet } from '@kubernetes/client-node'; +import { V1Deployment } from '@kubernetes/client-node'; +import { V1Ingress } from '@kubernetes/client-node'; +import { V1Job } from '@kubernetes/client-node'; +import { V1LimitRange } from '@kubernetes/client-node'; +import { V1Pod } from '@kubernetes/client-node'; +import { V1ReplicaSet } from '@kubernetes/client-node'; +import { V1ResourceQuota } from '@kubernetes/client-node'; +import { V1Service } from '@kubernetes/client-node'; +import { V1StatefulSet } from '@kubernetes/client-node'; +import { V2HorizontalPodAutoscaler } from '@kubernetes/client-node'; + +// @public +export const ANNOTATION_KUBERNETES_API_SERVER = 'kubernetes.io/api-server'; + +// @public +export const ANNOTATION_KUBERNETES_API_SERVER_CA = + 'kubernetes.io/api-server-certificate-authority'; + +// @public +export const ANNOTATION_KUBERNETES_AUTH_PROVIDER = + 'kubernetes.io/auth-provider'; + +// @public +export const ANNOTATION_KUBERNETES_AWS_ASSUME_ROLE = + 'kubernetes.io/aws-assume-role'; + +// @public +export const ANNOTATION_KUBERNETES_AWS_CLUSTER_ID = + 'kubernetes.io/x-k8s-aws-id'; + +// @public +export const ANNOTATION_KUBERNETES_AWS_EXTERNAL_ID = + 'kubernetes.io/aws-external-id'; + +// @public +export const ANNOTATION_KUBERNETES_DASHBOARD_APP = + 'kubernetes.io/dashboard-app'; + +// @public +export const ANNOTATION_KUBERNETES_DASHBOARD_PARAMETERS = + 'kubernetes.io/dashboard-parameters'; + +// @public +export const ANNOTATION_KUBERNETES_DASHBOARD_URL = + 'kubernetes.io/dashboard-url'; + +// @public +export const ANNOTATION_KUBERNETES_OIDC_TOKEN_PROVIDER = + 'kubernetes.io/oidc-token-provider'; + +// @public +export const ANNOTATION_KUBERNETES_SKIP_METRICS_LOOKUP = + 'kubernetes.io/skip-metrics-lookup'; + +// @public +export const ANNOTATION_KUBERNETES_SKIP_TLS_VERIFY = + 'kubernetes.io/skip-tls-verify'; + +// @public (undocumented) +export type AuthProviderType = 'google' | 'serviceAccount' | 'aws' | 'azure'; + +// @public (undocumented) +export interface ClientContainerStatus { + // (undocumented) + container: string; + // (undocumented) + cpuUsage: ClientCurrentResourceUsage; + // (undocumented) + memoryUsage: ClientCurrentResourceUsage; +} + +// @public (undocumented) +export interface ClientCurrentResourceUsage { + // (undocumented) + currentUsage: number | string; + // (undocumented) + limitTotal: number | string; + // (undocumented) + requestTotal: number | string; +} + +// @public (undocumented) +export interface ClientPodStatus { + // (undocumented) + containers: ClientContainerStatus[]; + // (undocumented) + cpu: ClientCurrentResourceUsage; + // (undocumented) + memory: ClientCurrentResourceUsage; + // (undocumented) + pod: V1Pod; +} + +// @public (undocumented) +export interface ClusterAttributes { + dashboardApp?: string; + dashboardParameters?: JsonObject; + dashboardUrl?: string; + name: string; + title?: string; +} + +// @public (undocumented) +export interface ClusterObjects { + // (undocumented) + cluster: ClusterAttributes; + // (undocumented) + errors: KubernetesFetchError[]; + // (undocumented) + podMetrics: ClientPodStatus[]; + // (undocumented) + resources: FetchResponse[]; +} + +// @public (undocumented) +export interface ConfigMapFetchResponse { + // (undocumented) + resources: Array; + // (undocumented) + type: 'configmaps'; +} + +// @public (undocumented) +export interface CronJobsFetchResponse { + // (undocumented) + resources: Array; + // (undocumented) + type: 'cronjobs'; +} + +// @public (undocumented) +export interface CustomObjectsByEntityRequest { + // (undocumented) + auth: KubernetesRequestAuth; + // (undocumented) + customResources: CustomResourceMatcher[]; + // (undocumented) + entity: Entity; +} + +// @public (undocumented) +export interface CustomResourceFetchResponse { + // (undocumented) + resources: Array; + // (undocumented) + type: 'customresources'; +} + +// @public (undocumented) +export interface CustomResourceMatcher { + // (undocumented) + apiVersion: string; + // (undocumented) + group: string; + // (undocumented) + plural: string; +} + +// @public (undocumented) +export interface DaemonSetsFetchResponse { + // (undocumented) + resources: Array; + // (undocumented) + type: 'daemonsets'; +} + +// @public (undocumented) +export interface DeploymentFetchResponse { + // (undocumented) + resources: Array; + // (undocumented) + type: 'deployments'; +} + +// @public (undocumented) +export interface DeploymentResources { + // (undocumented) + deployments: V1Deployment[]; + // (undocumented) + horizontalPodAutoscalers: V2HorizontalPodAutoscaler[]; + // (undocumented) + pods: V1Pod[]; + // (undocumented) + replicaSets: V1ReplicaSet[]; +} + +// @public +export interface DetectedError { + // (undocumented) + message: string; + // (undocumented) + occurrenceCount: number; + // (undocumented) + proposedFix?: ProposedFix; + // (undocumented) + severity: ErrorSeverity; + // (undocumented) + sourceRef: ResourceRef; + // (undocumented) + type: string; +} + +// @public +export type DetectedErrorsByCluster = Map; + +// @public +export const detectErrors: ( + objects: ObjectsByEntityResponse_2, +) => DetectedErrorsByCluster; + +// @public (undocumented) +export interface DocsSolution extends ProposedFixBase { + // (undocumented) + docsLink: string; + // (undocumented) + type: 'docs'; +} + +// @public (undocumented) +export interface ErrorMapper { + // (undocumented) + detectErrors: (resource: T) => DetectedError[]; +} + +// @public +export type ErrorSeverity = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10; + +// @public (undocumented) +export interface EventsSolution extends ProposedFixBase { + // (undocumented) + podName: string; + // (undocumented) + type: 'events'; +} + +// @public (undocumented) +export type FetchResponse = + | PodFetchResponse + | ServiceFetchResponse + | ConfigMapFetchResponse + | DeploymentFetchResponse + | LimitRangeFetchResponse + | ResourceQuotaFetchResponse + | ReplicaSetsFetchResponse + | HorizontalPodAutoscalersFetchResponse + | JobsFetchResponse + | CronJobsFetchResponse + | IngressesFetchResponse + | CustomResourceFetchResponse + | StatefulSetsFetchResponse + | DaemonSetsFetchResponse + | PodStatusFetchResponse; + +// @public (undocumented) +export interface GroupedResponses extends DeploymentResources { + // (undocumented) + configMaps: V1ConfigMap[]; + // (undocumented) + cronJobs: V1CronJob[]; + // (undocumented) + customResources: any[]; + // (undocumented) + daemonSets: V1DaemonSet[]; + // (undocumented) + ingresses: V1Ingress[]; + // (undocumented) + jobs: V1Job[]; + // (undocumented) + services: V1Service[]; + // (undocumented) + statefulsets: V1StatefulSet[]; +} + +// @public (undocumented) +export const groupResponses: ( + fetchResponse: FetchResponse_2[], +) => GroupedResponses; + +// @public (undocumented) +export interface HorizontalPodAutoscalersFetchResponse { + // (undocumented) + resources: Array; + // (undocumented) + type: 'horizontalpodautoscalers'; +} + +// @public (undocumented) +export interface IngressesFetchResponse { + // (undocumented) + resources: Array; + // (undocumented) + type: 'ingresses'; +} + +// @public (undocumented) +export interface JobsFetchResponse { + // (undocumented) + resources: Array; + // (undocumented) + type: 'jobs'; +} + +// @public (undocumented) +export type KubernetesErrorTypes = + | 'BAD_REQUEST' + | 'UNAUTHORIZED_ERROR' + | 'NOT_FOUND' + | 'SYSTEM_ERROR' + | 'UNKNOWN_ERROR'; + +// @public (undocumented) +export type KubernetesFetchError = StatusError | RawFetchError; + +// @public +export const kubernetesPermissions: BasicPermission[]; + +// @public +export const kubernetesProxyPermission: BasicPermission; + +// @public (undocumented) +export type KubernetesRequestAuth = { + [providerKey: string]: JsonValue | undefined; +}; + +// @public (undocumented) +export interface KubernetesRequestBody { + // (undocumented) + auth?: KubernetesRequestAuth; + // (undocumented) + entity: Entity; +} + +// @public (undocumented) +export interface LimitRangeFetchResponse { + // (undocumented) + resources: Array; + // (undocumented) + type: 'limitranges'; +} + +// @public (undocumented) +export interface LogSolution extends ProposedFixBase { + // (undocumented) + container: string; + // (undocumented) + type: 'logs'; +} + +// @public (undocumented) +export interface ObjectsByEntityResponse { + // (undocumented) + items: ClusterObjects[]; +} + +// @public (undocumented) +export interface PodFetchResponse { + // (undocumented) + resources: Array; + // (undocumented) + type: 'pods'; +} + +// @public (undocumented) +export interface PodStatusFetchResponse { + // (undocumented) + resources: Array; + // (undocumented) + type: 'podstatus'; +} + +// @public (undocumented) +export type ProposedFix = LogSolution | DocsSolution | EventsSolution; + +// @public (undocumented) +export interface ProposedFixBase { + // (undocumented) + actions: string[]; + // (undocumented) + errorType: string; + // (undocumented) + rootCauseExplanation: string; +} + +// @public (undocumented) +export interface RawFetchError { + // (undocumented) + errorType: 'FETCH_ERROR'; + // (undocumented) + message: string; +} + +// @public (undocumented) +export interface ReplicaSetsFetchResponse { + // (undocumented) + resources: Array; + // (undocumented) + type: 'replicasets'; +} + +// @public (undocumented) +export interface ResourceQuotaFetchResponse { + // (undocumented) + resources: Array; + // (undocumented) + type: 'resourcequotas'; +} + +// @public +export interface ResourceRef { + // (undocumented) + apiGroup: string; + // (undocumented) + kind: string; + // (undocumented) + name: string; + // (undocumented) + namespace: string; +} + +// @public (undocumented) +export interface ServiceFetchResponse { + // (undocumented) + resources: Array; + // (undocumented) + type: 'services'; +} + +// @public (undocumented) +export interface StatefulSetsFetchResponse { + // (undocumented) + resources: Array; + // (undocumented) + type: 'statefulsets'; +} + +// @public (undocumented) +export interface StatusError { + // (undocumented) + errorType: KubernetesErrorTypes; + // (undocumented) + resourcePath?: string; + // (undocumented) + statusCode?: number; +} + +// @public (undocumented) +export interface WorkloadsByEntityRequest { + // (undocumented) + auth: KubernetesRequestAuth; + // (undocumented) + entity: Entity; +} + +// Warnings were encountered during analysis: +// +// src/error-detection/types.d.ts:19:5 - (ae-undocumented) Missing documentation for "name". +// src/error-detection/types.d.ts:20:5 - (ae-undocumented) Missing documentation for "namespace". +// src/error-detection/types.d.ts:21:5 - (ae-undocumented) Missing documentation for "kind". +// src/error-detection/types.d.ts:22:5 - (ae-undocumented) Missing documentation for "apiGroup". +// src/error-detection/types.d.ts:30:5 - (ae-undocumented) Missing documentation for "type". +// src/error-detection/types.d.ts:31:5 - (ae-undocumented) Missing documentation for "severity". +// src/error-detection/types.d.ts:32:5 - (ae-undocumented) Missing documentation for "message". +// src/error-detection/types.d.ts:33:5 - (ae-undocumented) Missing documentation for "proposedFix". +// src/error-detection/types.d.ts:34:5 - (ae-undocumented) Missing documentation for "sourceRef". +// src/error-detection/types.d.ts:35:5 - (ae-undocumented) Missing documentation for "occurrenceCount". +// src/error-detection/types.d.ts:38:1 - (ae-undocumented) Missing documentation for "ProposedFix". +// src/error-detection/types.d.ts:40:1 - (ae-undocumented) Missing documentation for "ProposedFixBase". +// src/error-detection/types.d.ts:41:5 - (ae-undocumented) Missing documentation for "errorType". +// src/error-detection/types.d.ts:42:5 - (ae-undocumented) Missing documentation for "rootCauseExplanation". +// src/error-detection/types.d.ts:43:5 - (ae-undocumented) Missing documentation for "actions". +// src/error-detection/types.d.ts:46:1 - (ae-undocumented) Missing documentation for "LogSolution". +// src/error-detection/types.d.ts:47:5 - (ae-undocumented) Missing documentation for "type". +// src/error-detection/types.d.ts:48:5 - (ae-undocumented) Missing documentation for "container". +// src/error-detection/types.d.ts:51:1 - (ae-undocumented) Missing documentation for "DocsSolution". +// src/error-detection/types.d.ts:52:5 - (ae-undocumented) Missing documentation for "type". +// src/error-detection/types.d.ts:53:5 - (ae-undocumented) Missing documentation for "docsLink". +// src/error-detection/types.d.ts:56:1 - (ae-undocumented) Missing documentation for "EventsSolution". +// src/error-detection/types.d.ts:57:5 - (ae-undocumented) Missing documentation for "type". +// src/error-detection/types.d.ts:58:5 - (ae-undocumented) Missing documentation for "podName". +// src/error-detection/types.d.ts:61:1 - (ae-undocumented) Missing documentation for "ErrorMapper". +// src/error-detection/types.d.ts:62:5 - (ae-undocumented) Missing documentation for "detectErrors". +// src/types.d.ts:5:1 - (ae-undocumented) Missing documentation for "KubernetesRequestAuth". +// src/types.d.ts:9:1 - (ae-undocumented) Missing documentation for "CustomResourceMatcher". +// src/types.d.ts:10:5 - (ae-undocumented) Missing documentation for "group". +// src/types.d.ts:11:5 - (ae-undocumented) Missing documentation for "apiVersion". +// src/types.d.ts:12:5 - (ae-undocumented) Missing documentation for "plural". +// src/types.d.ts:15:1 - (ae-undocumented) Missing documentation for "WorkloadsByEntityRequest". +// src/types.d.ts:16:5 - (ae-undocumented) Missing documentation for "auth". +// src/types.d.ts:17:5 - (ae-undocumented) Missing documentation for "entity". +// src/types.d.ts:20:1 - (ae-undocumented) Missing documentation for "CustomObjectsByEntityRequest". +// src/types.d.ts:21:5 - (ae-undocumented) Missing documentation for "auth". +// src/types.d.ts:22:5 - (ae-undocumented) Missing documentation for "customResources". +// src/types.d.ts:23:5 - (ae-undocumented) Missing documentation for "entity". +// src/types.d.ts:26:1 - (ae-undocumented) Missing documentation for "KubernetesRequestBody". +// src/types.d.ts:27:5 - (ae-undocumented) Missing documentation for "auth". +// src/types.d.ts:28:5 - (ae-undocumented) Missing documentation for "entity". +// src/types.d.ts:31:1 - (ae-undocumented) Missing documentation for "ClusterAttributes". +// src/types.d.ts:73:1 - (ae-undocumented) Missing documentation for "ClusterObjects". +// src/types.d.ts:74:5 - (ae-undocumented) Missing documentation for "cluster". +// src/types.d.ts:75:5 - (ae-undocumented) Missing documentation for "resources". +// src/types.d.ts:76:5 - (ae-undocumented) Missing documentation for "podMetrics". +// src/types.d.ts:77:5 - (ae-undocumented) Missing documentation for "errors". +// src/types.d.ts:80:1 - (ae-undocumented) Missing documentation for "ObjectsByEntityResponse". +// src/types.d.ts:81:5 - (ae-undocumented) Missing documentation for "items". +// src/types.d.ts:84:1 - (ae-undocumented) Missing documentation for "AuthProviderType". +// src/types.d.ts:86:1 - (ae-undocumented) Missing documentation for "FetchResponse". +// src/types.d.ts:88:1 - (ae-undocumented) Missing documentation for "PodFetchResponse". +// src/types.d.ts:89:5 - (ae-undocumented) Missing documentation for "type". +// src/types.d.ts:90:5 - (ae-undocumented) Missing documentation for "resources". +// src/types.d.ts:93:1 - (ae-undocumented) Missing documentation for "ServiceFetchResponse". +// src/types.d.ts:94:5 - (ae-undocumented) Missing documentation for "type". +// src/types.d.ts:95:5 - (ae-undocumented) Missing documentation for "resources". +// src/types.d.ts:98:1 - (ae-undocumented) Missing documentation for "ConfigMapFetchResponse". +// src/types.d.ts:99:5 - (ae-undocumented) Missing documentation for "type". +// src/types.d.ts:100:5 - (ae-undocumented) Missing documentation for "resources". +// src/types.d.ts:103:1 - (ae-undocumented) Missing documentation for "DeploymentFetchResponse". +// src/types.d.ts:104:5 - (ae-undocumented) Missing documentation for "type". +// src/types.d.ts:105:5 - (ae-undocumented) Missing documentation for "resources". +// src/types.d.ts:108:1 - (ae-undocumented) Missing documentation for "ReplicaSetsFetchResponse". +// src/types.d.ts:109:5 - (ae-undocumented) Missing documentation for "type". +// src/types.d.ts:110:5 - (ae-undocumented) Missing documentation for "resources". +// src/types.d.ts:113:1 - (ae-undocumented) Missing documentation for "LimitRangeFetchResponse". +// src/types.d.ts:114:5 - (ae-undocumented) Missing documentation for "type". +// src/types.d.ts:115:5 - (ae-undocumented) Missing documentation for "resources". +// src/types.d.ts:118:1 - (ae-undocumented) Missing documentation for "ResourceQuotaFetchResponse". +// src/types.d.ts:119:5 - (ae-undocumented) Missing documentation for "type". +// src/types.d.ts:120:5 - (ae-undocumented) Missing documentation for "resources". +// src/types.d.ts:123:1 - (ae-undocumented) Missing documentation for "HorizontalPodAutoscalersFetchResponse". +// src/types.d.ts:124:5 - (ae-undocumented) Missing documentation for "type". +// src/types.d.ts:125:5 - (ae-undocumented) Missing documentation for "resources". +// src/types.d.ts:128:1 - (ae-undocumented) Missing documentation for "JobsFetchResponse". +// src/types.d.ts:129:5 - (ae-undocumented) Missing documentation for "type". +// src/types.d.ts:130:5 - (ae-undocumented) Missing documentation for "resources". +// src/types.d.ts:133:1 - (ae-undocumented) Missing documentation for "CronJobsFetchResponse". +// src/types.d.ts:134:5 - (ae-undocumented) Missing documentation for "type". +// src/types.d.ts:135:5 - (ae-undocumented) Missing documentation for "resources". +// src/types.d.ts:138:1 - (ae-undocumented) Missing documentation for "IngressesFetchResponse". +// src/types.d.ts:139:5 - (ae-undocumented) Missing documentation for "type". +// src/types.d.ts:140:5 - (ae-undocumented) Missing documentation for "resources". +// src/types.d.ts:143:1 - (ae-undocumented) Missing documentation for "CustomResourceFetchResponse". +// src/types.d.ts:144:5 - (ae-undocumented) Missing documentation for "type". +// src/types.d.ts:145:5 - (ae-undocumented) Missing documentation for "resources". +// src/types.d.ts:148:1 - (ae-undocumented) Missing documentation for "StatefulSetsFetchResponse". +// src/types.d.ts:149:5 - (ae-undocumented) Missing documentation for "type". +// src/types.d.ts:150:5 - (ae-undocumented) Missing documentation for "resources". +// src/types.d.ts:153:1 - (ae-undocumented) Missing documentation for "DaemonSetsFetchResponse". +// src/types.d.ts:154:5 - (ae-undocumented) Missing documentation for "type". +// src/types.d.ts:155:5 - (ae-undocumented) Missing documentation for "resources". +// src/types.d.ts:158:1 - (ae-undocumented) Missing documentation for "PodStatusFetchResponse". +// src/types.d.ts:159:5 - (ae-undocumented) Missing documentation for "type". +// src/types.d.ts:160:5 - (ae-undocumented) Missing documentation for "resources". +// src/types.d.ts:163:1 - (ae-undocumented) Missing documentation for "KubernetesFetchError". +// src/types.d.ts:165:1 - (ae-undocumented) Missing documentation for "StatusError". +// src/types.d.ts:166:5 - (ae-undocumented) Missing documentation for "errorType". +// src/types.d.ts:167:5 - (ae-undocumented) Missing documentation for "statusCode". +// src/types.d.ts:168:5 - (ae-undocumented) Missing documentation for "resourcePath". +// src/types.d.ts:171:1 - (ae-undocumented) Missing documentation for "RawFetchError". +// src/types.d.ts:172:5 - (ae-undocumented) Missing documentation for "errorType". +// src/types.d.ts:173:5 - (ae-undocumented) Missing documentation for "message". +// src/types.d.ts:176:1 - (ae-undocumented) Missing documentation for "KubernetesErrorTypes". +// src/types.d.ts:178:1 - (ae-undocumented) Missing documentation for "ClientCurrentResourceUsage". +// src/types.d.ts:179:5 - (ae-undocumented) Missing documentation for "currentUsage". +// src/types.d.ts:180:5 - (ae-undocumented) Missing documentation for "requestTotal". +// src/types.d.ts:181:5 - (ae-undocumented) Missing documentation for "limitTotal". +// src/types.d.ts:184:1 - (ae-undocumented) Missing documentation for "ClientContainerStatus". +// src/types.d.ts:185:5 - (ae-undocumented) Missing documentation for "container". +// src/types.d.ts:186:5 - (ae-undocumented) Missing documentation for "cpuUsage". +// src/types.d.ts:187:5 - (ae-undocumented) Missing documentation for "memoryUsage". +// src/types.d.ts:190:1 - (ae-undocumented) Missing documentation for "ClientPodStatus". +// src/types.d.ts:191:5 - (ae-undocumented) Missing documentation for "pod". +// src/types.d.ts:192:5 - (ae-undocumented) Missing documentation for "cpu". +// src/types.d.ts:193:5 - (ae-undocumented) Missing documentation for "memory". +// src/types.d.ts:194:5 - (ae-undocumented) Missing documentation for "containers". +// src/types.d.ts:197:1 - (ae-undocumented) Missing documentation for "DeploymentResources". +// src/types.d.ts:198:5 - (ae-undocumented) Missing documentation for "pods". +// src/types.d.ts:199:5 - (ae-undocumented) Missing documentation for "replicaSets". +// src/types.d.ts:200:5 - (ae-undocumented) Missing documentation for "deployments". +// src/types.d.ts:201:5 - (ae-undocumented) Missing documentation for "horizontalPodAutoscalers". +// src/types.d.ts:204:1 - (ae-undocumented) Missing documentation for "GroupedResponses". +// src/types.d.ts:205:5 - (ae-undocumented) Missing documentation for "services". +// src/types.d.ts:206:5 - (ae-undocumented) Missing documentation for "configMaps". +// src/types.d.ts:207:5 - (ae-undocumented) Missing documentation for "ingresses". +// src/types.d.ts:208:5 - (ae-undocumented) Missing documentation for "jobs". +// src/types.d.ts:209:5 - (ae-undocumented) Missing documentation for "cronJobs". +// src/types.d.ts:210:5 - (ae-undocumented) Missing documentation for "customResources". +// src/types.d.ts:211:5 - (ae-undocumented) Missing documentation for "statefulsets". +// src/types.d.ts:212:5 - (ae-undocumented) Missing documentation for "daemonSets". +// src/util/response.d.ts:4:22 - (ae-undocumented) Missing documentation for "groupResponses". +``` diff --git a/plugins/kubernetes-common/api-report.md b/plugins/kubernetes-common/api-report.md deleted file mode 100644 index 81e9ca28e7..0000000000 --- a/plugins/kubernetes-common/api-report.md +++ /dev/null @@ -1,468 +0,0 @@ -## API Report File for "@backstage/plugin-kubernetes-common" - -> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). - -```ts -import { BasicPermission } from '@backstage/plugin-permission-common'; -import { Entity } from '@backstage/catalog-model'; -import { FetchResponse as FetchResponse_2 } from '@backstage/plugin-kubernetes-common'; -import type { JsonObject } from '@backstage/types'; -import type { JsonValue } from '@backstage/types'; -import { ObjectsByEntityResponse as ObjectsByEntityResponse_2 } from '@backstage/plugin-kubernetes-common'; -import { PodStatus } from '@kubernetes/client-node'; -import { V1ConfigMap } from '@kubernetes/client-node'; -import { V1CronJob } from '@kubernetes/client-node'; -import { V1DaemonSet } from '@kubernetes/client-node'; -import { V1Deployment } from '@kubernetes/client-node'; -import { V1Ingress } from '@kubernetes/client-node'; -import { V1Job } from '@kubernetes/client-node'; -import { V1LimitRange } from '@kubernetes/client-node'; -import { V1Pod } from '@kubernetes/client-node'; -import { V1ReplicaSet } from '@kubernetes/client-node'; -import { V1ResourceQuota } from '@kubernetes/client-node'; -import { V1Service } from '@kubernetes/client-node'; -import { V1StatefulSet } from '@kubernetes/client-node'; -import { V2HorizontalPodAutoscaler } from '@kubernetes/client-node'; - -// @public -export const ANNOTATION_KUBERNETES_API_SERVER = 'kubernetes.io/api-server'; - -// @public -export const ANNOTATION_KUBERNETES_API_SERVER_CA = - 'kubernetes.io/api-server-certificate-authority'; - -// @public -export const ANNOTATION_KUBERNETES_AUTH_PROVIDER = - 'kubernetes.io/auth-provider'; - -// @public -export const ANNOTATION_KUBERNETES_AWS_ASSUME_ROLE = - 'kubernetes.io/aws-assume-role'; - -// @public -export const ANNOTATION_KUBERNETES_AWS_CLUSTER_ID = - 'kubernetes.io/x-k8s-aws-id'; - -// @public -export const ANNOTATION_KUBERNETES_AWS_EXTERNAL_ID = - 'kubernetes.io/aws-external-id'; - -// @public -export const ANNOTATION_KUBERNETES_DASHBOARD_APP = - 'kubernetes.io/dashboard-app'; - -// @public -export const ANNOTATION_KUBERNETES_DASHBOARD_PARAMETERS = - 'kubernetes.io/dashboard-parameters'; - -// @public -export const ANNOTATION_KUBERNETES_DASHBOARD_URL = - 'kubernetes.io/dashboard-url'; - -// @public -export const ANNOTATION_KUBERNETES_OIDC_TOKEN_PROVIDER = - 'kubernetes.io/oidc-token-provider'; - -// @public -export const ANNOTATION_KUBERNETES_SKIP_METRICS_LOOKUP = - 'kubernetes.io/skip-metrics-lookup'; - -// @public -export const ANNOTATION_KUBERNETES_SKIP_TLS_VERIFY = - 'kubernetes.io/skip-tls-verify'; - -// @public (undocumented) -export type AuthProviderType = 'google' | 'serviceAccount' | 'aws' | 'azure'; - -// @public (undocumented) -export interface ClientContainerStatus { - // (undocumented) - container: string; - // (undocumented) - cpuUsage: ClientCurrentResourceUsage; - // (undocumented) - memoryUsage: ClientCurrentResourceUsage; -} - -// @public (undocumented) -export interface ClientCurrentResourceUsage { - // (undocumented) - currentUsage: number | string; - // (undocumented) - limitTotal: number | string; - // (undocumented) - requestTotal: number | string; -} - -// @public (undocumented) -export interface ClientPodStatus { - // (undocumented) - containers: ClientContainerStatus[]; - // (undocumented) - cpu: ClientCurrentResourceUsage; - // (undocumented) - memory: ClientCurrentResourceUsage; - // (undocumented) - pod: V1Pod; -} - -// @public (undocumented) -export interface ClusterAttributes { - dashboardApp?: string; - dashboardParameters?: JsonObject; - dashboardUrl?: string; - name: string; - title?: string; -} - -// @public (undocumented) -export interface ClusterObjects { - // (undocumented) - cluster: ClusterAttributes; - // (undocumented) - errors: KubernetesFetchError[]; - // (undocumented) - podMetrics: ClientPodStatus[]; - // (undocumented) - resources: FetchResponse[]; -} - -// @public (undocumented) -export interface ConfigMapFetchResponse { - // (undocumented) - resources: Array; - // (undocumented) - type: 'configmaps'; -} - -// @public (undocumented) -export interface CronJobsFetchResponse { - // (undocumented) - resources: Array; - // (undocumented) - type: 'cronjobs'; -} - -// @public (undocumented) -export interface CustomObjectsByEntityRequest { - // (undocumented) - auth: KubernetesRequestAuth; - // (undocumented) - customResources: CustomResourceMatcher[]; - // (undocumented) - entity: Entity; -} - -// @public (undocumented) -export interface CustomResourceFetchResponse { - // (undocumented) - resources: Array; - // (undocumented) - type: 'customresources'; -} - -// @public (undocumented) -export interface CustomResourceMatcher { - // (undocumented) - apiVersion: string; - // (undocumented) - group: string; - // (undocumented) - plural: string; -} - -// @public (undocumented) -export interface DaemonSetsFetchResponse { - // (undocumented) - resources: Array; - // (undocumented) - type: 'daemonsets'; -} - -// @public (undocumented) -export interface DeploymentFetchResponse { - // (undocumented) - resources: Array; - // (undocumented) - type: 'deployments'; -} - -// @public (undocumented) -export interface DeploymentResources { - // (undocumented) - deployments: V1Deployment[]; - // (undocumented) - horizontalPodAutoscalers: V2HorizontalPodAutoscaler[]; - // (undocumented) - pods: V1Pod[]; - // (undocumented) - replicaSets: V1ReplicaSet[]; -} - -// @public -export interface DetectedError { - // (undocumented) - message: string; - // (undocumented) - occurrenceCount: number; - // (undocumented) - proposedFix?: ProposedFix; - // (undocumented) - severity: ErrorSeverity; - // (undocumented) - sourceRef: ResourceRef; - // (undocumented) - type: string; -} - -// @public -export type DetectedErrorsByCluster = Map; - -// @public -export const detectErrors: ( - objects: ObjectsByEntityResponse_2, -) => DetectedErrorsByCluster; - -// @public (undocumented) -export interface DocsSolution extends ProposedFixBase { - // (undocumented) - docsLink: string; - // (undocumented) - type: 'docs'; -} - -// @public (undocumented) -export interface ErrorMapper { - // (undocumented) - detectErrors: (resource: T) => DetectedError[]; -} - -// @public -export type ErrorSeverity = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10; - -// @public (undocumented) -export interface EventsSolution extends ProposedFixBase { - // (undocumented) - podName: string; - // (undocumented) - type: 'events'; -} - -// @public (undocumented) -export type FetchResponse = - | PodFetchResponse - | ServiceFetchResponse - | ConfigMapFetchResponse - | DeploymentFetchResponse - | LimitRangeFetchResponse - | ResourceQuotaFetchResponse - | ReplicaSetsFetchResponse - | HorizontalPodAutoscalersFetchResponse - | JobsFetchResponse - | CronJobsFetchResponse - | IngressesFetchResponse - | CustomResourceFetchResponse - | StatefulSetsFetchResponse - | DaemonSetsFetchResponse - | PodStatusFetchResponse; - -// @public (undocumented) -export interface GroupedResponses extends DeploymentResources { - // (undocumented) - configMaps: V1ConfigMap[]; - // (undocumented) - cronJobs: V1CronJob[]; - // (undocumented) - customResources: any[]; - // (undocumented) - daemonSets: V1DaemonSet[]; - // (undocumented) - ingresses: V1Ingress[]; - // (undocumented) - jobs: V1Job[]; - // (undocumented) - services: V1Service[]; - // (undocumented) - statefulsets: V1StatefulSet[]; -} - -// @public (undocumented) -export const groupResponses: ( - fetchResponse: FetchResponse_2[], -) => GroupedResponses; - -// @public (undocumented) -export interface HorizontalPodAutoscalersFetchResponse { - // (undocumented) - resources: Array; - // (undocumented) - type: 'horizontalpodautoscalers'; -} - -// @public (undocumented) -export interface IngressesFetchResponse { - // (undocumented) - resources: Array; - // (undocumented) - type: 'ingresses'; -} - -// @public (undocumented) -export interface JobsFetchResponse { - // (undocumented) - resources: Array; - // (undocumented) - type: 'jobs'; -} - -// @public (undocumented) -export type KubernetesErrorTypes = - | 'BAD_REQUEST' - | 'UNAUTHORIZED_ERROR' - | 'NOT_FOUND' - | 'SYSTEM_ERROR' - | 'UNKNOWN_ERROR'; - -// @public (undocumented) -export type KubernetesFetchError = StatusError | RawFetchError; - -// @public -export const kubernetesPermissions: BasicPermission[]; - -// @public -export const kubernetesProxyPermission: BasicPermission; - -// @public (undocumented) -export type KubernetesRequestAuth = { - [providerKey: string]: JsonValue | undefined; -}; - -// @public (undocumented) -export interface KubernetesRequestBody { - // (undocumented) - auth?: KubernetesRequestAuth; - // (undocumented) - entity: Entity; -} - -// @public (undocumented) -export interface LimitRangeFetchResponse { - // (undocumented) - resources: Array; - // (undocumented) - type: 'limitranges'; -} - -// @public (undocumented) -export interface LogSolution extends ProposedFixBase { - // (undocumented) - container: string; - // (undocumented) - type: 'logs'; -} - -// @public (undocumented) -export interface ObjectsByEntityResponse { - // (undocumented) - items: ClusterObjects[]; -} - -// @public (undocumented) -export interface PodFetchResponse { - // (undocumented) - resources: Array; - // (undocumented) - type: 'pods'; -} - -// @public (undocumented) -export interface PodStatusFetchResponse { - // (undocumented) - resources: Array; - // (undocumented) - type: 'podstatus'; -} - -// @public (undocumented) -export type ProposedFix = LogSolution | DocsSolution | EventsSolution; - -// @public (undocumented) -export interface ProposedFixBase { - // (undocumented) - actions: string[]; - // (undocumented) - errorType: string; - // (undocumented) - rootCauseExplanation: string; -} - -// @public (undocumented) -export interface RawFetchError { - // (undocumented) - errorType: 'FETCH_ERROR'; - // (undocumented) - message: string; -} - -// @public (undocumented) -export interface ReplicaSetsFetchResponse { - // (undocumented) - resources: Array; - // (undocumented) - type: 'replicasets'; -} - -// @public (undocumented) -export interface ResourceQuotaFetchResponse { - // (undocumented) - resources: Array; - // (undocumented) - type: 'resourcequotas'; -} - -// @public -export interface ResourceRef { - // (undocumented) - apiGroup: string; - // (undocumented) - kind: string; - // (undocumented) - name: string; - // (undocumented) - namespace: string; -} - -// @public (undocumented) -export interface ServiceFetchResponse { - // (undocumented) - resources: Array; - // (undocumented) - type: 'services'; -} - -// @public (undocumented) -export interface StatefulSetsFetchResponse { - // (undocumented) - resources: Array; - // (undocumented) - type: 'statefulsets'; -} - -// @public (undocumented) -export interface StatusError { - // (undocumented) - errorType: KubernetesErrorTypes; - // (undocumented) - resourcePath?: string; - // (undocumented) - statusCode?: number; -} - -// @public (undocumented) -export interface WorkloadsByEntityRequest { - // (undocumented) - auth: KubernetesRequestAuth; - // (undocumented) - entity: Entity; -} -``` diff --git a/plugins/kubernetes-node/api-report.md b/plugins/kubernetes-node/api-report.api.md similarity index 60% rename from plugins/kubernetes-node/api-report.md rename to plugins/kubernetes-node/api-report.api.md index f5b210b424..20c7f76b1f 100644 --- a/plugins/kubernetes-node/api-report.md +++ b/plugins/kubernetes-node/api-report.api.md @@ -282,4 +282,60 @@ export interface ServiceLocatorRequestContext { // (undocumented) objectTypesToFetch: Set; } + +// Warnings were encountered during analysis: +// +// src/auth/PinnipedHelper.d.ts:7:1 - (ae-undocumented) Missing documentation for "PinnipedClientCerts". +// src/auth/PinnipedHelper.d.ts:16:1 - (ae-undocumented) Missing documentation for "PinnipedParameters". +// src/auth/PinnipedHelper.d.ts:31:1 - (ae-undocumented) Missing documentation for "PinnipedHelper". +// src/auth/PinnipedHelper.d.ts:34:5 - (ae-undocumented) Missing documentation for "tokenCredentialRequest". +// src/extensions.d.ts:8:5 - (ae-undocumented) Missing documentation for "addObjectsProvider". +// src/extensions.d.ts:22:5 - (ae-undocumented) Missing documentation for "addClusterSupplier". +// src/extensions.d.ts:36:5 - (ae-undocumented) Missing documentation for "addAuthStrategy". +// src/extensions.d.ts:50:5 - (ae-undocumented) Missing documentation for "addFetcher". +// src/extensions.d.ts:64:5 - (ae-undocumented) Missing documentation for "addServiceLocator". +// src/types/types.d.ts:9:1 - (ae-undocumented) Missing documentation for "KubernetesObjectsProvider". +// src/types/types.d.ts:10:5 - (ae-undocumented) Missing documentation for "getKubernetesObjectsByEntity". +// src/types/types.d.ts:13:5 - (ae-undocumented) Missing documentation for "getCustomResourcesByEntity". +// src/types/types.d.ts:21:1 - (ae-undocumented) Missing documentation for "KubernetesObjectsByEntity". +// src/types/types.d.ts:22:5 - (ae-undocumented) Missing documentation for "entity". +// src/types/types.d.ts:23:5 - (ae-undocumented) Missing documentation for "auth". +// src/types/types.d.ts:29:1 - (ae-undocumented) Missing documentation for "CustomResourcesByEntity". +// src/types/types.d.ts:30:5 - (ae-undocumented) Missing documentation for "customResources". +// src/types/types.d.ts:41:1 - (ae-undocumented) Missing documentation for "ClusterDetails". +// src/types/types.d.ts:50:5 - (ae-undocumented) Missing documentation for "url". +// src/types/types.d.ts:51:5 - (ae-undocumented) Missing documentation for "authMetadata". +// src/types/types.d.ts:52:5 - (ae-undocumented) Missing documentation for "skipTLSVerify". +// src/types/types.d.ts:58:5 - (ae-undocumented) Missing documentation for "caData". +// src/types/types.d.ts:59:5 - (ae-undocumented) Missing documentation for "caFile". +// src/types/types.d.ts:131:1 - (ae-undocumented) Missing documentation for "AuthenticationStrategy". +// src/types/types.d.ts:132:5 - (ae-undocumented) Missing documentation for "getCredential". +// src/types/types.d.ts:133:5 - (ae-undocumented) Missing documentation for "validateCluster". +// src/types/types.d.ts:134:5 - (ae-undocumented) Missing documentation for "presentAuthMetadata". +// src/types/types.d.ts:140:1 - (ae-undocumented) Missing documentation for "KubernetesObjectTypes". +// src/types/types.d.ts:145:1 - (ae-undocumented) Missing documentation for "ObjectToFetch". +// src/types/types.d.ts:146:5 - (ae-undocumented) Missing documentation for "objectType". +// src/types/types.d.ts:147:5 - (ae-undocumented) Missing documentation for "group". +// src/types/types.d.ts:148:5 - (ae-undocumented) Missing documentation for "apiVersion". +// src/types/types.d.ts:149:5 - (ae-undocumented) Missing documentation for "plural". +// src/types/types.d.ts:155:1 - (ae-undocumented) Missing documentation for "CustomResource". +// src/types/types.d.ts:156:5 - (ae-undocumented) Missing documentation for "objectType". +// src/types/types.d.ts:162:1 - (ae-undocumented) Missing documentation for "ObjectFetchParams". +// src/types/types.d.ts:163:5 - (ae-undocumented) Missing documentation for "serviceId". +// src/types/types.d.ts:164:5 - (ae-undocumented) Missing documentation for "clusterDetails". +// src/types/types.d.ts:165:5 - (ae-undocumented) Missing documentation for "credential". +// src/types/types.d.ts:166:5 - (ae-undocumented) Missing documentation for "objectTypesToFetch". +// src/types/types.d.ts:167:5 - (ae-undocumented) Missing documentation for "labelSelector". +// src/types/types.d.ts:168:5 - (ae-undocumented) Missing documentation for "customResources". +// src/types/types.d.ts:169:5 - (ae-undocumented) Missing documentation for "namespace". +// src/types/types.d.ts:175:1 - (ae-undocumented) Missing documentation for "FetchResponseWrapper". +// src/types/types.d.ts:176:5 - (ae-undocumented) Missing documentation for "errors". +// src/types/types.d.ts:177:5 - (ae-undocumented) Missing documentation for "responses". +// src/types/types.d.ts:185:5 - (ae-undocumented) Missing documentation for "fetchObjectsForService". +// src/types/types.d.ts:186:5 - (ae-undocumented) Missing documentation for "fetchPodMetricsByNamespaces". +// src/types/types.d.ts:191:1 - (ae-undocumented) Missing documentation for "ServiceLocatorRequestContext". +// src/types/types.d.ts:192:5 - (ae-undocumented) Missing documentation for "objectTypesToFetch". +// src/types/types.d.ts:193:5 - (ae-undocumented) Missing documentation for "customResources". +// src/types/types.d.ts:194:5 - (ae-undocumented) Missing documentation for "credentials". +// src/types/types.d.ts:201:5 - (ae-undocumented) Missing documentation for "getClustersByEntity". ``` diff --git a/plugins/kubernetes-react/api-report.md b/plugins/kubernetes-react/api-report.api.md similarity index 51% rename from plugins/kubernetes-react/api-report.md rename to plugins/kubernetes-react/api-report.api.md index adb75a7d60..9b0080f019 100644 --- a/plugins/kubernetes-react/api-report.md +++ b/plugins/kubernetes-react/api-report.api.md @@ -865,4 +865,173 @@ export const usePodMetrics: ( clusterName: string, matcher: PodMetricsMatcher, ) => ClientPodStatus | undefined; + +// Warnings were encountered during analysis: +// +// src/api/KubernetesBackendClient.d.ts:6:1 - (ae-undocumented) Missing documentation for "KubernetesBackendClient". +// src/api/KubernetesBackendClient.d.ts:17:5 - (ae-undocumented) Missing documentation for "getCluster". +// src/api/KubernetesBackendClient.d.ts:23:5 - (ae-undocumented) Missing documentation for "getObjectsByEntity". +// src/api/KubernetesBackendClient.d.ts:24:5 - (ae-undocumented) Missing documentation for "getWorkloadsByEntity". +// src/api/KubernetesBackendClient.d.ts:25:5 - (ae-undocumented) Missing documentation for "getCustomObjectsByEntity". +// src/api/KubernetesBackendClient.d.ts:26:5 - (ae-undocumented) Missing documentation for "getClusters". +// src/api/KubernetesBackendClient.d.ts:30:5 - (ae-undocumented) Missing documentation for "proxy". +// src/api/KubernetesClusterLinkFormatter.d.ts:4:1 - (ae-undocumented) Missing documentation for "KubernetesClusterLinkFormatter". +// src/api/KubernetesClusterLinkFormatter.d.ts:11:5 - (ae-undocumented) Missing documentation for "formatClusterLink". +// src/api/KubernetesProxyClient.d.ts:15:5 - (ae-undocumented) Missing documentation for "getEventsByInvolvedObjectName". +// src/api/KubernetesProxyClient.d.ts:20:5 - (ae-undocumented) Missing documentation for "getPodLogs". +// src/api/formatters/AksClusterLinksFormatter.d.ts:3:1 - (ae-undocumented) Missing documentation for "AksClusterLinksFormatter". +// src/api/formatters/AksClusterLinksFormatter.d.ts:4:5 - (ae-undocumented) Missing documentation for "formatClusterLink". +// src/api/formatters/EksClusterLinksFormatter.d.ts:3:1 - (ae-undocumented) Missing documentation for "EksClusterLinksFormatter". +// src/api/formatters/EksClusterLinksFormatter.d.ts:4:5 - (ae-undocumented) Missing documentation for "formatClusterLink". +// src/api/formatters/GkeClusterLinksFormatter.d.ts:4:1 - (ae-undocumented) Missing documentation for "GkeClusterLinksFormatter". +// src/api/formatters/GkeClusterLinksFormatter.d.ts:7:5 - (ae-undocumented) Missing documentation for "formatClusterLink". +// src/api/formatters/OpenshiftClusterLinksFormatter.d.ts:3:1 - (ae-undocumented) Missing documentation for "OpenshiftClusterLinksFormatter". +// src/api/formatters/OpenshiftClusterLinksFormatter.d.ts:4:5 - (ae-undocumented) Missing documentation for "formatClusterLink". +// src/api/formatters/RancherClusterLinksFormatter.d.ts:3:1 - (ae-undocumented) Missing documentation for "RancherClusterLinksFormatter". +// src/api/formatters/RancherClusterLinksFormatter.d.ts:4:5 - (ae-undocumented) Missing documentation for "formatClusterLink". +// src/api/formatters/StandardClusterLinksFormatter.d.ts:3:1 - (ae-undocumented) Missing documentation for "StandardClusterLinksFormatter". +// src/api/formatters/StandardClusterLinksFormatter.d.ts:4:5 - (ae-undocumented) Missing documentation for "formatClusterLink". +// src/api/formatters/index.d.ts:11:22 - (ae-undocumented) Missing documentation for "DEFAULT_FORMATTER_NAME". +// src/api/formatters/index.d.ts:13:1 - (ae-undocumented) Missing documentation for "getDefaultFormatters". +// src/api/types.d.ts:5:22 - (ae-undocumented) Missing documentation for "kubernetesApiRef". +// src/api/types.d.ts:7:22 - (ae-undocumented) Missing documentation for "kubernetesProxyApiRef". +// src/api/types.d.ts:9:22 - (ae-undocumented) Missing documentation for "kubernetesClusterLinkFormatterApiRef". +// src/api/types.d.ts:11:1 - (ae-undocumented) Missing documentation for "KubernetesApi". +// src/api/types.d.ts:12:5 - (ae-undocumented) Missing documentation for "getObjectsByEntity". +// src/api/types.d.ts:13:5 - (ae-undocumented) Missing documentation for "getClusters". +// src/api/types.d.ts:18:5 - (ae-undocumented) Missing documentation for "getCluster". +// src/api/types.d.ts:24:5 - (ae-undocumented) Missing documentation for "getWorkloadsByEntity". +// src/api/types.d.ts:25:5 - (ae-undocumented) Missing documentation for "getCustomObjectsByEntity". +// src/api/types.d.ts:26:5 - (ae-undocumented) Missing documentation for "proxy". +// src/api/types.d.ts:33:1 - (ae-undocumented) Missing documentation for "KubernetesProxyApi". +// src/api/types.d.ts:34:5 - (ae-undocumented) Missing documentation for "getPodLogs". +// src/api/types.d.ts:43:5 - (ae-undocumented) Missing documentation for "getEventsByInvolvedObjectName". +// src/api/types.d.ts:52:1 - (ae-undocumented) Missing documentation for "FormatClusterLinkOptions". +// src/api/types.d.ts:60:1 - (ae-undocumented) Missing documentation for "KubernetesClusterLinkFormatterApi". +// src/api/types.d.ts:61:5 - (ae-undocumented) Missing documentation for "formatClusterLink". +// src/components/CronJobsAccordions/CronJobsAccordions.d.ts:7:1 - (ae-undocumented) Missing documentation for "CronJobsAccordionsProps". +// src/components/CronJobsAccordions/CronJobsAccordions.d.ts:15:22 - (ae-undocumented) Missing documentation for "CronJobsAccordions". +// src/components/CustomResources/CustomResources.d.ts:7:1 - (ae-undocumented) Missing documentation for "CustomResourcesProps". +// src/components/CustomResources/CustomResources.d.ts:8:5 - (ae-undocumented) Missing documentation for "children". +// src/components/CustomResources/CustomResources.d.ts:15:22 - (ae-undocumented) Missing documentation for "CustomResources". +// src/components/ErrorPanel/ErrorPanel.d.ts:8:1 - (ae-undocumented) Missing documentation for "ErrorPanelProps". +// src/components/ErrorPanel/ErrorPanel.d.ts:19:22 - (ae-undocumented) Missing documentation for "ErrorPanel". +// src/components/ErrorReporting/ErrorReporting.d.ts:8:1 - (ae-undocumented) Missing documentation for "ErrorReportingProps". +// src/components/ErrorReporting/ErrorReporting.d.ts:17:22 - (ae-undocumented) Missing documentation for "ErrorReporting". +// src/components/HorizontalPodAutoscalers/HorizontalPodAutoscalerDrawer.d.ts:4:22 - (ae-undocumented) Missing documentation for "HorizontalPodAutoscalerDrawer". +// src/components/IngressesAccordions/IngressesAccordions.d.ts:7:1 - (ae-undocumented) Missing documentation for "IngressesAccordionsProps". +// src/components/IngressesAccordions/IngressesAccordions.d.ts:13:22 - (ae-undocumented) Missing documentation for "IngressesAccordions". +// src/components/JobsAccordions/JobsAccordions.d.ts:8:1 - (ae-undocumented) Missing documentation for "JobsAccordionsProps". +// src/components/JobsAccordions/JobsAccordions.d.ts:17:22 - (ae-undocumented) Missing documentation for "JobsAccordions". +// src/components/KubernetesDrawer/KubernetesDrawer.d.ts:9:5 - (ae-undocumented) Missing documentation for "kind". +// src/components/KubernetesDrawer/KubernetesDrawer.d.ts:10:5 - (ae-undocumented) Missing documentation for "metadata". +// src/components/KubernetesDrawer/KubernetesDrawer.d.ts:18:5 - (ae-undocumented) Missing documentation for "open". +// src/components/KubernetesDrawer/KubernetesDrawer.d.ts:19:5 - (ae-undocumented) Missing documentation for "kubernetesObject". +// src/components/KubernetesDrawer/KubernetesDrawer.d.ts:20:5 - (ae-undocumented) Missing documentation for "label". +// src/components/KubernetesDrawer/KubernetesDrawer.d.ts:21:5 - (ae-undocumented) Missing documentation for "drawerContentsHeader". +// src/components/KubernetesDrawer/KubernetesDrawer.d.ts:22:5 - (ae-undocumented) Missing documentation for "children". +// src/components/KubernetesDrawer/KubernetesStructuredMetadataTableDrawer.d.ts:9:1 - (ae-undocumented) Missing documentation for "LinkErrorPanelProps". +// src/components/KubernetesDrawer/KubernetesStructuredMetadataTableDrawer.d.ts:19:22 - (ae-undocumented) Missing documentation for "LinkErrorPanel". +// src/components/KubernetesDrawer/KubernetesStructuredMetadataTableDrawer.d.ts:25:1 - (ae-undocumented) Missing documentation for "KubernetesDrawerable". +// src/components/KubernetesDrawer/KubernetesStructuredMetadataTableDrawer.d.ts:26:5 - (ae-undocumented) Missing documentation for "metadata". +// src/components/KubernetesDrawer/KubernetesStructuredMetadataTableDrawer.d.ts:32:1 - (ae-undocumented) Missing documentation for "KubernetesStructuredMetadataTableDrawerProps". +// src/components/KubernetesDrawer/KubernetesStructuredMetadataTableDrawer.d.ts:33:5 - (ae-undocumented) Missing documentation for "object". +// src/components/KubernetesDrawer/KubernetesStructuredMetadataTableDrawer.d.ts:34:5 - (ae-undocumented) Missing documentation for "renderObject". +// src/components/KubernetesDrawer/KubernetesStructuredMetadataTableDrawer.d.ts:35:5 - (ae-undocumented) Missing documentation for "buttonVariant". +// src/components/KubernetesDrawer/KubernetesStructuredMetadataTableDrawer.d.ts:36:5 - (ae-undocumented) Missing documentation for "kind". +// src/components/KubernetesDrawer/KubernetesStructuredMetadataTableDrawer.d.ts:37:5 - (ae-undocumented) Missing documentation for "expanded". +// src/components/KubernetesDrawer/KubernetesStructuredMetadataTableDrawer.d.ts:38:5 - (ae-undocumented) Missing documentation for "children". +// src/components/KubernetesDrawer/KubernetesStructuredMetadataTableDrawer.d.ts:44:22 - (ae-undocumented) Missing documentation for "KubernetesStructuredMetadataTableDrawer". +// src/components/KubernetesDrawer/ManifestYaml.d.ts:8:5 - (ae-undocumented) Missing documentation for "object". +// src/components/PodExecTerminal/PodExecTerminal.d.ts:10:5 - (ae-undocumented) Missing documentation for "cluster". +// src/components/PodExecTerminal/PodExecTerminal.d.ts:11:5 - (ae-undocumented) Missing documentation for "containerName". +// src/components/PodExecTerminal/PodExecTerminal.d.ts:12:5 - (ae-undocumented) Missing documentation for "podName". +// src/components/PodExecTerminal/PodExecTerminal.d.ts:13:5 - (ae-undocumented) Missing documentation for "podNamespace". +// src/components/Pods/ErrorList/ErrorList.d.ts:9:5 - (ae-undocumented) Missing documentation for "podAndErrors". +// src/components/Pods/Events/Events.d.ts:9:5 - (ae-undocumented) Missing documentation for "warningEventsOnly". +// src/components/Pods/Events/Events.d.ts:10:5 - (ae-undocumented) Missing documentation for "events". +// src/components/Pods/Events/Events.d.ts:24:5 - (ae-undocumented) Missing documentation for "involvedObjectName". +// src/components/Pods/Events/Events.d.ts:25:5 - (ae-undocumented) Missing documentation for "namespace". +// src/components/Pods/Events/Events.d.ts:26:5 - (ae-undocumented) Missing documentation for "clusterName". +// src/components/Pods/Events/Events.d.ts:27:5 - (ae-undocumented) Missing documentation for "warningEventsOnly". +// src/components/Pods/Events/useEvents.d.ts:7:5 - (ae-undocumented) Missing documentation for "involvedObjectName". +// src/components/Pods/Events/useEvents.d.ts:8:5 - (ae-undocumented) Missing documentation for "namespace". +// src/components/Pods/Events/useEvents.d.ts:9:5 - (ae-undocumented) Missing documentation for "clusterName". +// src/components/Pods/FixDialog/FixDialog.d.ts:10:5 - (ae-undocumented) Missing documentation for "open". +// src/components/Pods/FixDialog/FixDialog.d.ts:11:5 - (ae-undocumented) Missing documentation for "clusterName". +// src/components/Pods/FixDialog/FixDialog.d.ts:12:5 - (ae-undocumented) Missing documentation for "pod". +// src/components/Pods/FixDialog/FixDialog.d.ts:13:5 - (ae-undocumented) Missing documentation for "error". +// src/components/Pods/PodDrawer/ContainerCard.d.ts:11:5 - (ae-undocumented) Missing documentation for "podScope". +// src/components/Pods/PodDrawer/ContainerCard.d.ts:12:5 - (ae-undocumented) Missing documentation for "containerSpec". +// src/components/Pods/PodDrawer/ContainerCard.d.ts:13:5 - (ae-undocumented) Missing documentation for "containerStatus". +// src/components/Pods/PodDrawer/ContainerCard.d.ts:14:5 - (ae-undocumented) Missing documentation for "containerMetrics". +// src/components/Pods/PodDrawer/PendingPodContent.d.ts:9:5 - (ae-undocumented) Missing documentation for "pod". +// src/components/Pods/PodDrawer/PodDrawer.d.ts:9:5 - (ae-undocumented) Missing documentation for "open". +// src/components/Pods/PodDrawer/PodDrawer.d.ts:10:5 - (ae-undocumented) Missing documentation for "podAndErrors". +// src/components/Pods/PodLogs/PodLogs.d.ts:9:5 - (ae-undocumented) Missing documentation for "containerScope". +// src/components/Pods/PodLogs/PodLogs.d.ts:10:5 - (ae-undocumented) Missing documentation for "previous". +// src/components/Pods/PodLogs/PodLogsDialog.d.ts:9:5 - (ae-undocumented) Missing documentation for "containerScope". +// src/components/Pods/PodLogs/types.d.ts:8:5 - (ae-undocumented) Missing documentation for "podName". +// src/components/Pods/PodLogs/types.d.ts:9:5 - (ae-undocumented) Missing documentation for "podNamespace". +// src/components/Pods/PodLogs/types.d.ts:10:5 - (ae-undocumented) Missing documentation for "cluster". +// src/components/Pods/PodLogs/types.d.ts:18:5 - (ae-undocumented) Missing documentation for "containerName". +// src/components/Pods/PodLogs/usePodLogs.d.ts:8:5 - (ae-undocumented) Missing documentation for "containerScope". +// src/components/Pods/PodLogs/usePodLogs.d.ts:9:5 - (ae-undocumented) Missing documentation for "previous". +// src/components/Pods/PodsTable.d.ts:9:22 - (ae-undocumented) Missing documentation for "READY_COLUMNS". +// src/components/Pods/PodsTable.d.ts:15:22 - (ae-undocumented) Missing documentation for "RESOURCE_COLUMNS". +// src/components/Pods/PodsTable.d.ts:21:1 - (ae-undocumented) Missing documentation for "PodColumns". +// src/components/Pods/PodsTable.d.ts:27:1 - (ae-undocumented) Missing documentation for "PodsTablesProps". +// src/components/Pods/PodsTable.d.ts:37:22 - (ae-undocumented) Missing documentation for "PodsTable". +// src/components/Pods/types.d.ts:9:5 - (ae-undocumented) Missing documentation for "cluster". +// src/components/Pods/types.d.ts:10:5 - (ae-undocumented) Missing documentation for "pod". +// src/components/Pods/types.d.ts:11:5 - (ae-undocumented) Missing documentation for "errors". +// src/components/ResourceUtilization/ResourceUtilization.d.ts:8:5 - (ae-undocumented) Missing documentation for "compressed". +// src/components/ResourceUtilization/ResourceUtilization.d.ts:9:5 - (ae-undocumented) Missing documentation for "title". +// src/components/ResourceUtilization/ResourceUtilization.d.ts:10:5 - (ae-undocumented) Missing documentation for "usage". +// src/components/ResourceUtilization/ResourceUtilization.d.ts:11:5 - (ae-undocumented) Missing documentation for "total". +// src/components/ResourceUtilization/ResourceUtilization.d.ts:12:5 - (ae-undocumented) Missing documentation for "totalFormatted". +// src/components/ServicesAccordions/ServicesAccordions.d.ts:7:1 - (ae-undocumented) Missing documentation for "ServicesAccordionsProps". +// src/components/ServicesAccordions/ServicesAccordions.d.ts:13:22 - (ae-undocumented) Missing documentation for "ServicesAccordions". +// src/hooks/Cluster.d.ts:6:22 - (ae-undocumented) Missing documentation for "ClusterContext". +// src/hooks/GroupedResponses.d.ts:8:22 - (ae-undocumented) Missing documentation for "GroupedResponsesContext". +// src/hooks/PodNamesWithErrors.d.ts:5:22 - (ae-undocumented) Missing documentation for "PodNamesWithErrorsContext". +// src/hooks/PodNamesWithMetrics.d.ts:6:22 - (ae-undocumented) Missing documentation for "PodNamesWithMetricsContext". +// src/hooks/useKubernetesObjects.d.ts:7:1 - (ae-undocumented) Missing documentation for "KubernetesObjects". +// src/hooks/useKubernetesObjects.d.ts:8:5 - (ae-undocumented) Missing documentation for "kubernetesObjects". +// src/hooks/useKubernetesObjects.d.ts:9:5 - (ae-undocumented) Missing documentation for "loading". +// src/hooks/useKubernetesObjects.d.ts:10:5 - (ae-undocumented) Missing documentation for "error". +// src/hooks/useKubernetesObjects.d.ts:16:22 - (ae-undocumented) Missing documentation for "useKubernetesObjects". +// src/hooks/useMatchingErrors.d.ts:15:1 - (ae-undocumented) Missing documentation for "ErrorMatcher". +// src/hooks/usePodMetrics.d.ts:13:1 - (ae-undocumented) Missing documentation for "PodMetricsMatcher". +// src/kubernetes-auth-provider/AksKubernetesAuthProvider.d.ts:5:1 - (ae-undocumented) Missing documentation for "AksKubernetesAuthProvider". +// src/kubernetes-auth-provider/AksKubernetesAuthProvider.d.ts:8:5 - (ae-undocumented) Missing documentation for "decorateRequestBodyForAuth". +// src/kubernetes-auth-provider/AksKubernetesAuthProvider.d.ts:9:5 - (ae-undocumented) Missing documentation for "getCredentials". +// src/kubernetes-auth-provider/GoogleKubernetesAuthProvider.d.ts:5:1 - (ae-undocumented) Missing documentation for "GoogleKubernetesAuthProvider". +// src/kubernetes-auth-provider/GoogleKubernetesAuthProvider.d.ts:6:5 - (ae-undocumented) Missing documentation for "authProvider". +// src/kubernetes-auth-provider/GoogleKubernetesAuthProvider.d.ts:8:5 - (ae-undocumented) Missing documentation for "decorateRequestBodyForAuth". +// src/kubernetes-auth-provider/GoogleKubernetesAuthProvider.d.ts:9:5 - (ae-undocumented) Missing documentation for "getCredentials". +// src/kubernetes-auth-provider/KubernetesAuthProviders.d.ts:5:1 - (ae-undocumented) Missing documentation for "KubernetesAuthProviders". +// src/kubernetes-auth-provider/KubernetesAuthProviders.d.ts:14:5 - (ae-undocumented) Missing documentation for "decorateRequestBodyForAuth". +// src/kubernetes-auth-provider/KubernetesAuthProviders.d.ts:15:5 - (ae-undocumented) Missing documentation for "getCredentials". +// src/kubernetes-auth-provider/OidcKubernetesAuthProvider.d.ts:5:1 - (ae-undocumented) Missing documentation for "OidcKubernetesAuthProvider". +// src/kubernetes-auth-provider/OidcKubernetesAuthProvider.d.ts:6:5 - (ae-undocumented) Missing documentation for "providerName". +// src/kubernetes-auth-provider/OidcKubernetesAuthProvider.d.ts:7:5 - (ae-undocumented) Missing documentation for "authProvider". +// src/kubernetes-auth-provider/OidcKubernetesAuthProvider.d.ts:9:5 - (ae-undocumented) Missing documentation for "decorateRequestBodyForAuth". +// src/kubernetes-auth-provider/OidcKubernetesAuthProvider.d.ts:10:5 - (ae-undocumented) Missing documentation for "getCredentials". +// src/kubernetes-auth-provider/ServerSideAuthProvider.d.ts:9:5 - (ae-undocumented) Missing documentation for "decorateRequestBodyForAuth". +// src/kubernetes-auth-provider/ServerSideAuthProvider.d.ts:10:5 - (ae-undocumented) Missing documentation for "getCredentials". +// src/kubernetes-auth-provider/types.d.ts:3:1 - (ae-undocumented) Missing documentation for "KubernetesAuthProvider". +// src/kubernetes-auth-provider/types.d.ts:4:5 - (ae-undocumented) Missing documentation for "decorateRequestBodyForAuth". +// src/kubernetes-auth-provider/types.d.ts:5:5 - (ae-undocumented) Missing documentation for "getCredentials". +// src/kubernetes-auth-provider/types.d.ts:10:22 - (ae-undocumented) Missing documentation for "kubernetesAuthProvidersApiRef". +// src/kubernetes-auth-provider/types.d.ts:12:1 - (ae-undocumented) Missing documentation for "KubernetesAuthProvidersApi". +// src/kubernetes-auth-provider/types.d.ts:13:5 - (ae-undocumented) Missing documentation for "decorateRequestBodyForAuth". +// src/kubernetes-auth-provider/types.d.ts:14:5 - (ae-undocumented) Missing documentation for "getCredentials". +// src/types/types.d.ts:5:1 - (ae-undocumented) Missing documentation for "ClusterLinksFormatterOptions". +// src/types/types.d.ts:6:5 - (ae-undocumented) Missing documentation for "dashboardUrl". +// src/types/types.d.ts:7:5 - (ae-undocumented) Missing documentation for "dashboardParameters". +// src/types/types.d.ts:8:5 - (ae-undocumented) Missing documentation for "object". +// src/types/types.d.ts:9:5 - (ae-undocumented) Missing documentation for "kind". +// src/types/types.d.ts:14:1 - (ae-undocumented) Missing documentation for "ClusterLinksFormatter". +// src/types/types.d.ts:15:5 - (ae-undocumented) Missing documentation for "formatClusterLink". ``` diff --git a/plugins/kubernetes/api-report.md b/plugins/kubernetes/api-report.api.md similarity index 80% rename from plugins/kubernetes/api-report.md rename to plugins/kubernetes/api-report.api.md index 64b56cf786..e5038b674a 100644 --- a/plugins/kubernetes/api-report.md +++ b/plugins/kubernetes/api-report.api.md @@ -47,4 +47,11 @@ export const Router: (props: { }) => React_2.JSX.Element; export * from '@backstage/plugin-kubernetes-react'; + +// Warnings were encountered during analysis: +// +// src/Router.d.ts:3:22 - (ae-undocumented) Missing documentation for "isKubernetesAvailable". +// src/Router.d.ts:4:22 - (ae-undocumented) Missing documentation for "Router". +// src/plugin.d.ts:3:22 - (ae-undocumented) Missing documentation for "kubernetesPlugin". +// src/plugin.d.ts:17:22 - (ae-undocumented) Missing documentation for "EntityKubernetesContent". ``` diff --git a/plugins/notifications-backend-module-email/api-report.md b/plugins/notifications-backend-module-email/api-report.api.md similarity index 57% rename from plugins/notifications-backend-module-email/api-report.md rename to plugins/notifications-backend-module-email/api-report.api.md index be3b58d1fd..2116bd4ef4 100644 --- a/plugins/notifications-backend-module-email/api-report.md +++ b/plugins/notifications-backend-module-email/api-report.api.md @@ -29,4 +29,15 @@ export interface NotificationTemplateRenderer { // (undocumented) getText?(notification: Notification_2): Promise; } + +// Warnings were encountered during analysis: +// +// src/extensions.d.ts:5:1 - (ae-undocumented) Missing documentation for "NotificationTemplateRenderer". +// src/extensions.d.ts:6:5 - (ae-undocumented) Missing documentation for "getSubject". +// src/extensions.d.ts:7:5 - (ae-undocumented) Missing documentation for "getText". +// src/extensions.d.ts:8:5 - (ae-undocumented) Missing documentation for "getHtml". +// src/extensions.d.ts:13:1 - (ae-undocumented) Missing documentation for "NotificationsEmailTemplateExtensionPoint". +// src/extensions.d.ts:14:5 - (ae-undocumented) Missing documentation for "setTemplateRenderer". +// src/extensions.d.ts:19:22 - (ae-undocumented) Missing documentation for "notificationsEmailTemplateExtensionPoint". +// src/module.d.ts:4:22 - (ae-undocumented) Missing documentation for "notificationsModuleEmail". ``` diff --git a/plugins/notifications-backend/api-report.md b/plugins/notifications-backend/api-report.api.md similarity index 100% rename from plugins/notifications-backend/api-report.md rename to plugins/notifications-backend/api-report.api.md diff --git a/plugins/notifications-common/api-report.md b/plugins/notifications-common/api-report.api.md similarity index 64% rename from plugins/notifications-common/api-report.md rename to plugins/notifications-common/api-report.api.md index 0f59a85849..a02bfb2eaa 100644 --- a/plugins/notifications-common/api-report.md +++ b/plugins/notifications-common/api-report.api.md @@ -67,4 +67,16 @@ export type NotificationStatus = { unread: number; read: number; }; + +// Warnings were encountered during analysis: +// +// src/filters.d.ts:4:22 - (ae-undocumented) Missing documentation for "getProcessorFiltersFromConfig". +// src/types.d.ts:2:1 - (ae-undocumented) Missing documentation for "NotificationSeverity". +// src/types.d.ts:4:1 - (ae-undocumented) Missing documentation for "NotificationPayload". +// src/types.d.ts:36:1 - (ae-undocumented) Missing documentation for "Notification". +// src/types.d.ts:73:1 - (ae-undocumented) Missing documentation for "NotificationStatus". +// src/types.d.ts:84:1 - (ae-undocumented) Missing documentation for "NewNotificationSignal". +// src/types.d.ts:89:1 - (ae-undocumented) Missing documentation for "NotificationReadSignal". +// src/types.d.ts:94:1 - (ae-undocumented) Missing documentation for "NotificationSignal". +// src/types.d.ts:98:1 - (ae-undocumented) Missing documentation for "NotificationProcessorFilters". ``` diff --git a/plugins/notifications-node/api-report.md b/plugins/notifications-node/api-report.api.md similarity index 64% rename from plugins/notifications-node/api-report.md rename to plugins/notifications-node/api-report.api.md index 995b98bc21..869bf6c6bb 100644 --- a/plugins/notifications-node/api-report.md +++ b/plugins/notifications-node/api-report.api.md @@ -87,4 +87,20 @@ export interface NotificationsProcessingExtensionPoint { // @public (undocumented) export const notificationsProcessingExtensionPoint: ExtensionPoint; + +// Warnings were encountered during analysis: +// +// src/extensions.d.ts:73:1 - (ae-undocumented) Missing documentation for "NotificationsProcessingExtensionPoint". +// src/extensions.d.ts:74:5 - (ae-undocumented) Missing documentation for "addProcessor". +// src/extensions.d.ts:79:22 - (ae-undocumented) Missing documentation for "notificationsProcessingExtensionPoint". +// src/extensions.d.ts:84:1 - (ae-undocumented) Missing documentation for "NotificationProcessorFilters". +// src/lib.d.ts:3:22 - (ae-undocumented) Missing documentation for "notificationService". +// src/service/DefaultNotificationService.d.ts:5:1 - (ae-undocumented) Missing documentation for "NotificationServiceOptions". +// src/service/DefaultNotificationService.d.ts:10:1 - (ae-undocumented) Missing documentation for "NotificationRecipients". +// src/service/DefaultNotificationService.d.ts:26:1 - (ae-undocumented) Missing documentation for "NotificationSendOptions". +// src/service/DefaultNotificationService.d.ts:31:1 - (ae-undocumented) Missing documentation for "DefaultNotificationService". +// src/service/DefaultNotificationService.d.ts:35:5 - (ae-undocumented) Missing documentation for "create". +// src/service/DefaultNotificationService.d.ts:36:5 - (ae-undocumented) Missing documentation for "send". +// src/service/NotificationService.d.ts:3:1 - (ae-undocumented) Missing documentation for "NotificationService". +// src/service/NotificationService.d.ts:4:5 - (ae-undocumented) Missing documentation for "send". ``` diff --git a/plugins/notifications/api-report.md b/plugins/notifications/api-report.api.md similarity index 100% rename from plugins/notifications/api-report.md rename to plugins/notifications/api-report.api.md diff --git a/plugins/org-react/api-report.md b/plugins/org-react/api-report.api.md similarity index 77% rename from plugins/org-react/api-report.md rename to plugins/org-react/api-report.api.md index 5cfe5ca90a..924f1ea7ca 100644 --- a/plugins/org-react/api-report.md +++ b/plugins/org-react/api-report.api.md @@ -19,5 +19,9 @@ export type GroupListPickerProps = { onChange: (value: GroupEntity | undefined) => void; }; +// Warnings were encountered during analysis: +// +// src/components/GroupListPicker/GroupListPicker.d.ts:15:22 - (ae-undocumented) Missing documentation for "GroupListPicker". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/org/api-report-alpha.md b/plugins/org/api-report-alpha.api.md similarity index 97% rename from plugins/org/api-report-alpha.md rename to plugins/org/api-report-alpha.api.md index 1040b61733..eaa98f98d1 100644 --- a/plugins/org/api-report-alpha.md +++ b/plugins/org/api-report-alpha.api.md @@ -161,5 +161,9 @@ const _default: FrontendPlugin< >; export default _default; +// Warnings were encountered during analysis: +// +// src/alpha.d.ts:2:15 - (ae-undocumented) Missing documentation for "_default". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/org/api-report.md b/plugins/org/api-report.api.md similarity index 73% rename from plugins/org/api-report.md rename to plugins/org/api-report.api.md index af03687240..fd1e3010e9 100644 --- a/plugins/org/api-report.md +++ b/plugins/org/api-report.api.md @@ -102,4 +102,17 @@ export const UserProfileCard: (props: { variant?: InfoCardVariants; showLinks?: boolean; }) => React_2.JSX.Element; + +// Warnings were encountered during analysis: +// +// src/components/Cards/Group/GroupProfile/GroupProfileCard.d.ts:4:22 - (ae-undocumented) Missing documentation for "GroupProfileCard". +// src/components/Cards/Group/MembersList/MembersListCard.d.ts:4:22 - (ae-undocumented) Missing documentation for "MembersListCard". +// src/components/Cards/OwnershipCard/OwnershipCard.d.ts:5:22 - (ae-undocumented) Missing documentation for "OwnershipCard". +// src/components/Cards/User/UserProfileCard/UserProfileCard.d.ts:4:22 - (ae-undocumented) Missing documentation for "UserProfileCard". +// src/components/Cards/types.d.ts:2:1 - (ae-undocumented) Missing documentation for "EntityRelationAggregation". +// src/plugin.d.ts:3:22 - (ae-undocumented) Missing documentation for "orgPlugin". +// src/plugin.d.ts:7:22 - (ae-undocumented) Missing documentation for "EntityGroupProfileCard". +// src/plugin.d.ts:12:22 - (ae-undocumented) Missing documentation for "EntityMembersListCard". +// src/plugin.d.ts:21:22 - (ae-undocumented) Missing documentation for "EntityOwnershipCard". +// src/plugin.d.ts:30:22 - (ae-undocumented) Missing documentation for "EntityUserProfileCard". ``` diff --git a/plugins/permission-backend-module-policy-allow-all/api-report.md b/plugins/permission-backend-module-policy-allow-all/api-report.api.md similarity index 100% rename from plugins/permission-backend-module-policy-allow-all/api-report.md rename to plugins/permission-backend-module-policy-allow-all/api-report.api.md diff --git a/plugins/permission-backend/api-report-alpha.md b/plugins/permission-backend/api-report-alpha.api.md similarity index 100% rename from plugins/permission-backend/api-report-alpha.md rename to plugins/permission-backend/api-report-alpha.api.md diff --git a/plugins/permission-backend/api-report.md b/plugins/permission-backend/api-report.api.md similarity index 62% rename from plugins/permission-backend/api-report.md rename to plugins/permission-backend/api-report.api.md index bd976a8d7b..11d5ca7d62 100644 --- a/plugins/permission-backend/api-report.md +++ b/plugins/permission-backend/api-report.api.md @@ -35,4 +35,15 @@ export interface RouterOptions { // (undocumented) userInfo?: UserInfoService; } + +// Warnings were encountered during analysis: +// +// src/service/router.d.ts:13:5 - (ae-undocumented) Missing documentation for "logger". +// src/service/router.d.ts:14:5 - (ae-undocumented) Missing documentation for "discovery". +// src/service/router.d.ts:15:5 - (ae-undocumented) Missing documentation for "policy". +// src/service/router.d.ts:16:5 - (ae-undocumented) Missing documentation for "identity". +// src/service/router.d.ts:17:5 - (ae-undocumented) Missing documentation for "config". +// src/service/router.d.ts:18:5 - (ae-undocumented) Missing documentation for "auth". +// src/service/router.d.ts:19:5 - (ae-undocumented) Missing documentation for "httpAuth". +// src/service/router.d.ts:20:5 - (ae-undocumented) Missing documentation for "userInfo". ``` diff --git a/plugins/permission-common/api-report.md b/plugins/permission-common/api-report.api.md similarity index 97% rename from plugins/permission-common/api-report.md rename to plugins/permission-common/api-report.api.md index 465c43846f..856b650dba 100644 --- a/plugins/permission-common/api-report.md +++ b/plugins/permission-common/api-report.api.md @@ -261,4 +261,8 @@ export type ResourcePermission = export function toPermissionEvaluator( permissionAuthorizer: PermissionAuthorizer, ): PermissionEvaluator; + +// Warnings were encountered during analysis: +// +// src/types/permission.d.ts:71:5 - (ae-undocumented) Missing documentation for "authorize". ``` diff --git a/plugins/permission-node/api-report-alpha.md b/plugins/permission-node/api-report-alpha.api.md similarity index 100% rename from plugins/permission-node/api-report-alpha.md rename to plugins/permission-node/api-report-alpha.api.md diff --git a/plugins/permission-node/api-report.md b/plugins/permission-node/api-report.api.md similarity index 93% rename from plugins/permission-node/api-report.md rename to plugins/permission-node/api-report.api.md index 0f0885e180..8dd8ac3c88 100644 --- a/plugins/permission-node/api-report.md +++ b/plugins/permission-node/api-report.api.md @@ -149,7 +149,7 @@ export type CreatePermissionIntegrationRouterResourceOptions< > = { resourceType: TResourceType; permissions?: Array; - rules: PermissionRule>[]; + rules: PermissionRule>[]; getResources?: ( resourceRefs: string[], ) => Promise>; @@ -255,8 +255,8 @@ export type PermissionRule< description: string; resourceType: TResourceType; paramsSchema?: z.ZodSchema; - apply(resource: TResource, params: NoInfer): boolean; - toQuery(params: NoInfer): PermissionCriteria; + apply(resource: TResource, params: NoInfer_2): boolean; + toQuery(params: NoInfer_2): PermissionCriteria; }; // @public @@ -295,4 +295,11 @@ export class ServerPermissionClient implements PermissionsService { }, ): ServerPermissionClient; } + +// Warnings were encountered during analysis: +// +// src/ServerPermissionClient.d.ts:12:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/ServerPermissionClient.d.ts:18:5 - (ae-undocumented) Missing documentation for "authorizeConditional". +// src/ServerPermissionClient.d.ts:19:5 - (ae-undocumented) Missing documentation for "authorize". +// src/policy/types.d.ts:67:5 - (ae-undocumented) Missing documentation for "handle". ``` diff --git a/plugins/permission-react/api-report.md b/plugins/permission-react/api-report.api.md similarity index 88% rename from plugins/permission-react/api-report.md rename to plugins/permission-react/api-report.api.md index 4c51d16b80..d1b5de1d9e 100644 --- a/plugins/permission-react/api-report.md +++ b/plugins/permission-react/api-report.api.md @@ -100,4 +100,10 @@ export function usePermission( resourceRef: string | undefined; }, ): AsyncPermissionResult; + +// Warnings were encountered during analysis: +// +// src/apis/IdentityPermissionApi.d.ts:14:5 - (ae-undocumented) Missing documentation for "create". +// src/apis/IdentityPermissionApi.d.ts:19:5 - (ae-undocumented) Missing documentation for "authorize". +// src/hooks/usePermission.d.ts:3:1 - (ae-undocumented) Missing documentation for "AsyncPermissionResult". ``` diff --git a/plugins/proxy-backend/api-report-alpha.md b/plugins/proxy-backend/api-report-alpha.api.md similarity index 100% rename from plugins/proxy-backend/api-report-alpha.md rename to plugins/proxy-backend/api-report-alpha.api.md diff --git a/plugins/proxy-backend/api-report.md b/plugins/proxy-backend/api-report.api.md similarity index 56% rename from plugins/proxy-backend/api-report.md rename to plugins/proxy-backend/api-report.api.md index 9e1b5087f1..7590d3b8d4 100644 --- a/plugins/proxy-backend/api-report.md +++ b/plugins/proxy-backend/api-report.api.md @@ -24,4 +24,13 @@ export interface RouterOptions { // (undocumented) skipInvalidProxies?: boolean; } + +// Warnings were encountered during analysis: +// +// src/service/router.d.ts:8:1 - (ae-undocumented) Missing documentation for "RouterOptions". +// src/service/router.d.ts:9:5 - (ae-undocumented) Missing documentation for "logger". +// src/service/router.d.ts:10:5 - (ae-undocumented) Missing documentation for "config". +// src/service/router.d.ts:11:5 - (ae-undocumented) Missing documentation for "discovery". +// src/service/router.d.ts:12:5 - (ae-undocumented) Missing documentation for "skipInvalidProxies". +// src/service/router.d.ts:13:5 - (ae-undocumented) Missing documentation for "reviveConsumedRequestBodies". ``` diff --git a/plugins/scaffolder-backend-module-azure/api-report.md b/plugins/scaffolder-backend-module-azure/api-report.api.md similarity index 100% rename from plugins/scaffolder-backend-module-azure/api-report.md rename to plugins/scaffolder-backend-module-azure/api-report.api.md diff --git a/plugins/scaffolder-backend-module-bitbucket-cloud/api-report.md b/plugins/scaffolder-backend-module-bitbucket-cloud/api-report.api.md similarity index 100% rename from plugins/scaffolder-backend-module-bitbucket-cloud/api-report.md rename to plugins/scaffolder-backend-module-bitbucket-cloud/api-report.api.md diff --git a/plugins/scaffolder-backend-module-bitbucket-server/api-report.md b/plugins/scaffolder-backend-module-bitbucket-server/api-report.api.md similarity index 100% rename from plugins/scaffolder-backend-module-bitbucket-server/api-report.md rename to plugins/scaffolder-backend-module-bitbucket-server/api-report.api.md diff --git a/plugins/scaffolder-backend-module-bitbucket/api-report.md b/plugins/scaffolder-backend-module-bitbucket/api-report.api.md similarity index 80% rename from plugins/scaffolder-backend-module-bitbucket/api-report.md rename to plugins/scaffolder-backend-module-bitbucket/api-report.api.md index 952b1665fb..34c9eb8c67 100644 --- a/plugins/scaffolder-backend-module-bitbucket/api-report.md +++ b/plugins/scaffolder-backend-module-bitbucket/api-report.api.md @@ -56,4 +56,11 @@ export const createPublishBitbucketServerAction: typeof bitbucketServer.createPu // @public @deprecated (undocumented) export const createPublishBitbucketServerPullRequestAction: typeof bitbucketServer.createPublishBitbucketServerPullRequestAction; + +// Warnings were encountered during analysis: +// +// src/deprecated.d.ts:7:22 - (ae-undocumented) Missing documentation for "createPublishBitbucketCloudAction". +// src/deprecated.d.ts:11:22 - (ae-undocumented) Missing documentation for "createBitbucketPipelinesRunAction". +// src/deprecated.d.ts:22:22 - (ae-undocumented) Missing documentation for "createPublishBitbucketServerAction". +// src/deprecated.d.ts:26:22 - (ae-undocumented) Missing documentation for "createPublishBitbucketServerPullRequestAction". ``` diff --git a/plugins/scaffolder-backend-module-confluence-to-markdown/api-report.md b/plugins/scaffolder-backend-module-confluence-to-markdown/api-report.api.md similarity index 82% rename from plugins/scaffolder-backend-module-confluence-to-markdown/api-report.md rename to plugins/scaffolder-backend-module-confluence-to-markdown/api-report.api.md index 2dd5e244dd..4d08c12e7d 100644 --- a/plugins/scaffolder-backend-module-confluence-to-markdown/api-report.md +++ b/plugins/scaffolder-backend-module-confluence-to-markdown/api-report.api.md @@ -26,4 +26,8 @@ export const createConfluenceToMarkdownAction: (options: { }, JsonObject >; + +// Warnings were encountered during analysis: +// +// src/actions/confluence/confluenceToMarkdown.d.ts:7:22 - (ae-undocumented) Missing documentation for "createConfluenceToMarkdownAction". ``` diff --git a/plugins/scaffolder-backend-module-cookiecutter/api-report.md b/plugins/scaffolder-backend-module-cookiecutter/api-report.api.md similarity index 100% rename from plugins/scaffolder-backend-module-cookiecutter/api-report.md rename to plugins/scaffolder-backend-module-cookiecutter/api-report.api.md diff --git a/plugins/scaffolder-backend-module-gcp/api-report.md b/plugins/scaffolder-backend-module-gcp/api-report.api.md similarity index 100% rename from plugins/scaffolder-backend-module-gcp/api-report.md rename to plugins/scaffolder-backend-module-gcp/api-report.api.md diff --git a/plugins/scaffolder-backend-module-gerrit/api-report.md b/plugins/scaffolder-backend-module-gerrit/api-report.api.md similarity index 100% rename from plugins/scaffolder-backend-module-gerrit/api-report.md rename to plugins/scaffolder-backend-module-gerrit/api-report.api.md diff --git a/plugins/scaffolder-backend-module-gitea/api-report.md b/plugins/scaffolder-backend-module-gitea/api-report.api.md similarity index 100% rename from plugins/scaffolder-backend-module-gitea/api-report.md rename to plugins/scaffolder-backend-module-gitea/api-report.api.md diff --git a/plugins/scaffolder-backend-module-github/api-report.md b/plugins/scaffolder-backend-module-github/api-report.api.md similarity index 100% rename from plugins/scaffolder-backend-module-github/api-report.md rename to plugins/scaffolder-backend-module-github/api-report.api.md diff --git a/plugins/scaffolder-backend-module-gitlab/api-report.md b/plugins/scaffolder-backend-module-gitlab/api-report.api.md similarity index 92% rename from plugins/scaffolder-backend-module-gitlab/api-report.md rename to plugins/scaffolder-backend-module-gitlab/api-report.api.md index 49bda648f6..f00055a876 100644 --- a/plugins/scaffolder-backend-module-gitlab/api-report.md +++ b/plugins/scaffolder-backend-module-gitlab/api-report.api.md @@ -277,4 +277,13 @@ export enum IssueType { // (undocumented) TEST = 'test_case', } + +// Warnings were encountered during analysis: +// +// src/commonGitlabConfig.d.ts:23:5 - (ae-undocumented) Missing documentation for "ISSUE". +// src/commonGitlabConfig.d.ts:24:5 - (ae-undocumented) Missing documentation for "INCIDENT". +// src/commonGitlabConfig.d.ts:25:5 - (ae-undocumented) Missing documentation for "TEST". +// src/commonGitlabConfig.d.ts:26:5 - (ae-undocumented) Missing documentation for "TASK". +// src/commonGitlabConfig.d.ts:34:5 - (ae-undocumented) Missing documentation for "CLOSE". +// src/commonGitlabConfig.d.ts:35:5 - (ae-undocumented) Missing documentation for "REOPEN". ``` diff --git a/plugins/scaffolder-backend-module-notifications/api-report.md b/plugins/scaffolder-backend-module-notifications/api-report.api.md similarity index 86% rename from plugins/scaffolder-backend-module-notifications/api-report.md rename to plugins/scaffolder-backend-module-notifications/api-report.api.md index 091782449f..7e283573b0 100644 --- a/plugins/scaffolder-backend-module-notifications/api-report.md +++ b/plugins/scaffolder-backend-module-notifications/api-report.api.md @@ -29,4 +29,8 @@ export function createSendNotificationAction(options: { // @public const scaffolderModuleNotifications: BackendFeature; export default scaffolderModuleNotifications; + +// Warnings were encountered during analysis: +// +// src/actions/sendNotification.d.ts:6:1 - (ae-undocumented) Missing documentation for "createSendNotificationAction". ``` diff --git a/plugins/scaffolder-backend-module-rails/api-report.md b/plugins/scaffolder-backend-module-rails/api-report.api.md similarity index 100% rename from plugins/scaffolder-backend-module-rails/api-report.md rename to plugins/scaffolder-backend-module-rails/api-report.api.md diff --git a/plugins/scaffolder-backend-module-sentry/api-report.md b/plugins/scaffolder-backend-module-sentry/api-report.api.md similarity index 100% rename from plugins/scaffolder-backend-module-sentry/api-report.md rename to plugins/scaffolder-backend-module-sentry/api-report.api.md diff --git a/plugins/scaffolder-backend-module-yeoman/api-report.md b/plugins/scaffolder-backend-module-yeoman/api-report.api.md similarity index 100% rename from plugins/scaffolder-backend-module-yeoman/api-report.md rename to plugins/scaffolder-backend-module-yeoman/api-report.api.md diff --git a/plugins/scaffolder-backend/api-report-alpha.md b/plugins/scaffolder-backend/api-report-alpha.api.md similarity index 93% rename from plugins/scaffolder-backend/api-report-alpha.md rename to plugins/scaffolder-backend/api-report-alpha.api.md index db62c6caf7..d53ce7a4e4 100644 --- a/plugins/scaffolder-backend/api-report-alpha.md +++ b/plugins/scaffolder-backend/api-report-alpha.api.md @@ -93,5 +93,9 @@ export const scaffolderTemplateConditions: Conditions<{ >; }>; +// Warnings were encountered during analysis: +// +// src/service/conditionExports.d.ts:48:22 - (ae-undocumented) Missing documentation for "createScaffolderActionConditionalDecision". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/scaffolder-backend/api-report.md b/plugins/scaffolder-backend/api-report.api.md similarity index 67% rename from plugins/scaffolder-backend/api-report.md rename to plugins/scaffolder-backend/api-report.api.md index 3d76fb8fb1..082e0baaa5 100644 --- a/plugins/scaffolder-backend/api-report.md +++ b/plugins/scaffolder-backend/api-report.api.md @@ -835,4 +835,115 @@ export type TemplatePermissionRuleInput< typeof RESOURCE_TYPE_SCAFFOLDER_TEMPLATE, TParams >; + +// Warnings were encountered during analysis: +// +// src/deprecated.d.ts:8:1 - (ae-undocumented) Missing documentation for "ActionContext". +// src/deprecated.d.ts:13:22 - (ae-undocumented) Missing documentation for "createTemplateAction". +// src/deprecated.d.ts:18:1 - (ae-undocumented) Missing documentation for "TaskSecrets". +// src/deprecated.d.ts:23:1 - (ae-undocumented) Missing documentation for "TemplateAction". +// src/lib/templating/SecureTemplater.d.ts:6:1 - (ae-undocumented) Missing documentation for "TemplateFilter". +// src/lib/templating/SecureTemplater.d.ts:11:1 - (ae-undocumented) Missing documentation for "TemplateGlobal". +// src/scaffolder/actions/TemplateActionRegistry.d.ts:8:5 - (ae-undocumented) Missing documentation for "register". +// src/scaffolder/actions/TemplateActionRegistry.d.ts:9:5 - (ae-undocumented) Missing documentation for "get". +// src/scaffolder/actions/TemplateActionRegistry.d.ts:10:5 - (ae-undocumented) Missing documentation for "list". +// src/scaffolder/actions/builtin/createBuiltinActions.d.ts:37:5 - (ae-undocumented) Missing documentation for "additionalTemplateGlobals". +// src/scaffolder/actions/deprecated.d.ts:11:22 - (ae-undocumented) Missing documentation for "createGithubActionsDispatchAction". +// src/scaffolder/actions/deprecated.d.ts:15:22 - (ae-undocumented) Missing documentation for "createGithubDeployKeyAction". +// src/scaffolder/actions/deprecated.d.ts:19:22 - (ae-undocumented) Missing documentation for "createGithubEnvironmentAction". +// src/scaffolder/actions/deprecated.d.ts:23:22 - (ae-undocumented) Missing documentation for "createGithubIssuesLabelAction". +// src/scaffolder/actions/deprecated.d.ts:27:1 - (ae-undocumented) Missing documentation for "CreateGithubPullRequestActionOptions". +// src/scaffolder/actions/deprecated.d.ts:31:22 - (ae-undocumented) Missing documentation for "createGithubRepoCreateAction". +// src/scaffolder/actions/deprecated.d.ts:35:22 - (ae-undocumented) Missing documentation for "createGithubRepoPushAction". +// src/scaffolder/actions/deprecated.d.ts:39:22 - (ae-undocumented) Missing documentation for "createGithubWebhookAction". +// src/scaffolder/actions/deprecated.d.ts:43:22 - (ae-undocumented) Missing documentation for "createPublishGithubAction". +// src/scaffolder/actions/deprecated.d.ts:47:22 - (ae-undocumented) Missing documentation for "createPublishGithubPullRequestAction". +// src/scaffolder/actions/deprecated.d.ts:69:22 - (ae-undocumented) Missing documentation for "createPublishBitbucketAction". +// src/scaffolder/actions/deprecated.d.ts:73:22 - (ae-undocumented) Missing documentation for "createPublishBitbucketCloudAction". +// src/scaffolder/actions/deprecated.d.ts:77:22 - (ae-undocumented) Missing documentation for "createPublishBitbucketServerAction". +// src/scaffolder/actions/deprecated.d.ts:81:22 - (ae-undocumented) Missing documentation for "createPublishBitbucketServerPullRequestAction". +// src/scaffolder/actions/deprecated.d.ts:85:22 - (ae-undocumented) Missing documentation for "createPublishAzureAction". +// src/scaffolder/actions/deprecated.d.ts:89:22 - (ae-undocumented) Missing documentation for "createPublishGerritAction". +// src/scaffolder/actions/deprecated.d.ts:93:22 - (ae-undocumented) Missing documentation for "createPublishGerritReviewAction". +// src/scaffolder/actions/deprecated.d.ts:97:22 - (ae-undocumented) Missing documentation for "createPublishGitlabAction". +// src/scaffolder/actions/deprecated.d.ts:101:22 - (ae-undocumented) Missing documentation for "createPublishGitlabMergeRequestAction". +// src/scaffolder/tasks/DatabaseTaskStore.d.ts:41:5 - (ae-undocumented) Missing documentation for "create". +// src/scaffolder/tasks/DatabaseTaskStore.d.ts:48:5 - (ae-undocumented) Missing documentation for "list". +// src/scaffolder/tasks/DatabaseTaskStore.d.ts:53:5 - (ae-undocumented) Missing documentation for "getTask". +// src/scaffolder/tasks/DatabaseTaskStore.d.ts:54:5 - (ae-undocumented) Missing documentation for "createTask". +// src/scaffolder/tasks/DatabaseTaskStore.d.ts:55:5 - (ae-undocumented) Missing documentation for "claimTask". +// src/scaffolder/tasks/DatabaseTaskStore.d.ts:56:5 - (ae-undocumented) Missing documentation for "heartbeatTask". +// src/scaffolder/tasks/DatabaseTaskStore.d.ts:57:5 - (ae-undocumented) Missing documentation for "listStaleTasks". +// src/scaffolder/tasks/DatabaseTaskStore.d.ts:65:5 - (ae-undocumented) Missing documentation for "completeTask". +// src/scaffolder/tasks/DatabaseTaskStore.d.ts:70:5 - (ae-undocumented) Missing documentation for "emitLogEvent". +// src/scaffolder/tasks/DatabaseTaskStore.d.ts:73:5 - (ae-undocumented) Missing documentation for "getTaskState". +// src/scaffolder/tasks/DatabaseTaskStore.d.ts:78:5 - (ae-undocumented) Missing documentation for "saveTaskState". +// src/scaffolder/tasks/DatabaseTaskStore.d.ts:82:5 - (ae-undocumented) Missing documentation for "listEvents". +// src/scaffolder/tasks/DatabaseTaskStore.d.ts:85:5 - (ae-undocumented) Missing documentation for "shutdownTask". +// src/scaffolder/tasks/DatabaseTaskStore.d.ts:86:5 - (ae-undocumented) Missing documentation for "rehydrateWorkspace". +// src/scaffolder/tasks/DatabaseTaskStore.d.ts:90:5 - (ae-undocumented) Missing documentation for "cleanWorkspace". +// src/scaffolder/tasks/DatabaseTaskStore.d.ts:93:5 - (ae-undocumented) Missing documentation for "serializeWorkspace". +// src/scaffolder/tasks/DatabaseTaskStore.d.ts:97:5 - (ae-undocumented) Missing documentation for "cancelTask". +// src/scaffolder/tasks/DatabaseTaskStore.d.ts:100:5 - (ae-undocumented) Missing documentation for "recoverTasks". +// src/scaffolder/tasks/StorageTaskBroker.d.ts:24:5 - (ae-undocumented) Missing documentation for "create". +// src/scaffolder/tasks/StorageTaskBroker.d.ts:26:5 - (ae-undocumented) Missing documentation for "spec". +// src/scaffolder/tasks/StorageTaskBroker.d.ts:27:5 - (ae-undocumented) Missing documentation for "cancelSignal". +// src/scaffolder/tasks/StorageTaskBroker.d.ts:28:5 - (ae-undocumented) Missing documentation for "secrets". +// src/scaffolder/tasks/StorageTaskBroker.d.ts:29:5 - (ae-undocumented) Missing documentation for "createdBy". +// src/scaffolder/tasks/StorageTaskBroker.d.ts:30:5 - (ae-undocumented) Missing documentation for "getWorkspaceName". +// src/scaffolder/tasks/StorageTaskBroker.d.ts:31:5 - (ae-undocumented) Missing documentation for "rehydrateWorkspace". +// src/scaffolder/tasks/StorageTaskBroker.d.ts:35:5 - (ae-undocumented) Missing documentation for "done". +// src/scaffolder/tasks/StorageTaskBroker.d.ts:36:5 - (ae-undocumented) Missing documentation for "emitLog". +// src/scaffolder/tasks/StorageTaskBroker.d.ts:37:5 - (ae-undocumented) Missing documentation for "getTaskState". +// src/scaffolder/tasks/StorageTaskBroker.d.ts:40:5 - (ae-undocumented) Missing documentation for "updateCheckpoint". +// src/scaffolder/tasks/StorageTaskBroker.d.ts:49:5 - (ae-undocumented) Missing documentation for "serializeWorkspace". +// src/scaffolder/tasks/StorageTaskBroker.d.ts:52:5 - (ae-undocumented) Missing documentation for "cleanWorkspace". +// src/scaffolder/tasks/StorageTaskBroker.d.ts:53:5 - (ae-undocumented) Missing documentation for "complete". +// src/scaffolder/tasks/StorageTaskBroker.d.ts:55:5 - (ae-undocumented) Missing documentation for "getInitiatorCredentials". +// src/scaffolder/tasks/StorageTaskBroker.d.ts:83:5 - (ae-undocumented) Missing documentation for "workspace". +// src/scaffolder/tasks/TaskWorker.d.ts:60:5 - (ae-undocumented) Missing documentation for "create". +// src/scaffolder/tasks/TaskWorker.d.ts:61:5 - (ae-undocumented) Missing documentation for "recoverTasks". +// src/scaffolder/tasks/TaskWorker.d.ts:62:5 - (ae-undocumented) Missing documentation for "start". +// src/scaffolder/tasks/TaskWorker.d.ts:63:5 - (ae-undocumented) Missing documentation for "stop". +// src/scaffolder/tasks/TaskWorker.d.ts:64:5 - (ae-undocumented) Missing documentation for "onReadyToClaimTask". +// src/scaffolder/tasks/TaskWorker.d.ts:65:5 - (ae-undocumented) Missing documentation for "runOneTask". +// src/scaffolder/tasks/types.d.ts:124:5 - (ae-undocumented) Missing documentation for "cancelTask". +// src/scaffolder/tasks/types.d.ts:125:5 - (ae-undocumented) Missing documentation for "createTask". +// src/scaffolder/tasks/types.d.ts:126:5 - (ae-undocumented) Missing documentation for "recoverTasks". +// src/scaffolder/tasks/types.d.ts:129:5 - (ae-undocumented) Missing documentation for "getTask". +// src/scaffolder/tasks/types.d.ts:130:5 - (ae-undocumented) Missing documentation for "claimTask". +// src/scaffolder/tasks/types.d.ts:131:5 - (ae-undocumented) Missing documentation for "completeTask". +// src/scaffolder/tasks/types.d.ts:136:5 - (ae-undocumented) Missing documentation for "heartbeatTask". +// src/scaffolder/tasks/types.d.ts:137:5 - (ae-undocumented) Missing documentation for "listStaleTasks". +// src/scaffolder/tasks/types.d.ts:144:5 - (ae-undocumented) Missing documentation for "list". +// src/scaffolder/tasks/types.d.ts:149:5 - (ae-undocumented) Missing documentation for "emitLogEvent". +// src/scaffolder/tasks/types.d.ts:150:5 - (ae-undocumented) Missing documentation for "getTaskState". +// src/scaffolder/tasks/types.d.ts:155:5 - (ae-undocumented) Missing documentation for "saveTaskState". +// src/scaffolder/tasks/types.d.ts:159:5 - (ae-undocumented) Missing documentation for "listEvents". +// src/scaffolder/tasks/types.d.ts:162:5 - (ae-undocumented) Missing documentation for "shutdownTask". +// src/scaffolder/tasks/types.d.ts:163:5 - (ae-undocumented) Missing documentation for "rehydrateWorkspace". +// src/scaffolder/tasks/types.d.ts:167:5 - (ae-undocumented) Missing documentation for "cleanWorkspace". +// src/scaffolder/tasks/types.d.ts:170:5 - (ae-undocumented) Missing documentation for "serializeWorkspace". +// src/service/router.d.ts:19:1 - (ae-undocumented) Missing documentation for "TemplatePermissionRuleInput". +// src/service/router.d.ts:24:1 - (ae-undocumented) Missing documentation for "ActionPermissionRuleInput". +// src/service/router.d.ts:31:5 - (ae-undocumented) Missing documentation for "logger". +// src/service/router.d.ts:32:5 - (ae-undocumented) Missing documentation for "config". +// src/service/router.d.ts:33:5 - (ae-undocumented) Missing documentation for "reader". +// src/service/router.d.ts:34:5 - (ae-undocumented) Missing documentation for "lifecycle". +// src/service/router.d.ts:35:5 - (ae-undocumented) Missing documentation for "database". +// src/service/router.d.ts:36:5 - (ae-undocumented) Missing documentation for "catalogClient". +// src/service/router.d.ts:37:5 - (ae-undocumented) Missing documentation for "scheduler". +// src/service/router.d.ts:38:5 - (ae-undocumented) Missing documentation for "actions". +// src/service/router.d.ts:43:5 - (ae-undocumented) Missing documentation for "taskWorkers". +// src/service/router.d.ts:49:5 - (ae-undocumented) Missing documentation for "taskBroker". +// src/service/router.d.ts:50:5 - (ae-undocumented) Missing documentation for "additionalTemplateFilters". +// src/service/router.d.ts:51:5 - (ae-undocumented) Missing documentation for "additionalTemplateGlobals". +// src/service/router.d.ts:52:5 - (ae-undocumented) Missing documentation for "additionalWorkspaceProviders". +// src/service/router.d.ts:53:5 - (ae-undocumented) Missing documentation for "permissions". +// src/service/router.d.ts:54:5 - (ae-undocumented) Missing documentation for "permissionRules". +// src/service/router.d.ts:55:5 - (ae-undocumented) Missing documentation for "auth". +// src/service/router.d.ts:56:5 - (ae-undocumented) Missing documentation for "httpAuth". +// src/service/router.d.ts:57:5 - (ae-undocumented) Missing documentation for "identity". +// src/service/router.d.ts:58:5 - (ae-undocumented) Missing documentation for "discovery". +// src/service/router.d.ts:59:5 - (ae-undocumented) Missing documentation for "autocompleteHandlers". ``` diff --git a/plugins/scaffolder-common/api-report-alpha.md b/plugins/scaffolder-common/api-report-alpha.api.md similarity index 100% rename from plugins/scaffolder-common/api-report-alpha.md rename to plugins/scaffolder-common/api-report-alpha.api.md diff --git a/plugins/scaffolder-common/api-report.md b/plugins/scaffolder-common/api-report.api.md similarity index 77% rename from plugins/scaffolder-common/api-report.md rename to plugins/scaffolder-common/api-report.api.md index 8d7a61910d..2058c08203 100644 --- a/plugins/scaffolder-common/api-report.md +++ b/plugins/scaffolder-common/api-report.api.md @@ -123,4 +123,15 @@ export interface TemplatePresentationV1beta3 extends JsonObject { export interface TemplateRecoveryV1beta3 extends JsonObject { EXPERIMENTAL_strategy?: 'none' | 'startOver'; } + +// Warnings were encountered during analysis: +// +// src/TemplateEntityV1beta3.d.ts:102:5 - (ae-undocumented) Missing documentation for "id". +// src/TemplateEntityV1beta3.d.ts:103:5 - (ae-undocumented) Missing documentation for "name". +// src/TemplateEntityV1beta3.d.ts:104:5 - (ae-undocumented) Missing documentation for "action". +// src/TemplateEntityV1beta3.d.ts:105:5 - (ae-undocumented) Missing documentation for "input". +// src/TemplateEntityV1beta3.d.ts:106:5 - (ae-undocumented) Missing documentation for "if". +// src/TemplateEntityV1beta3.d.ts:107:5 - (ae-undocumented) Missing documentation for ""backstage:permissions"". +// src/TemplateEntityV1beta3.d.ts:115:5 - (ae-undocumented) Missing documentation for ""backstage:permissions"". +// src/TemplateEntityV1beta3.d.ts:123:5 - (ae-undocumented) Missing documentation for "tags". ``` diff --git a/plugins/scaffolder-node-test-utils/api-report.md b/plugins/scaffolder-node-test-utils/api-report.api.md similarity index 100% rename from plugins/scaffolder-node-test-utils/api-report.md rename to plugins/scaffolder-node-test-utils/api-report.api.md diff --git a/plugins/scaffolder-node/api-report-alpha.md b/plugins/scaffolder-node/api-report-alpha.api.md similarity index 77% rename from plugins/scaffolder-node/api-report-alpha.md rename to plugins/scaffolder-node/api-report-alpha.api.md index c9b8130f0e..2258515b6d 100644 --- a/plugins/scaffolder-node/api-report-alpha.md +++ b/plugins/scaffolder-node/api-report-alpha.api.md @@ -109,5 +109,17 @@ export interface WorkspaceProvider { }): Promise; } +// Warnings were encountered during analysis: +// +// src/alpha.d.ts:9:5 - (ae-undocumented) Missing documentation for "addActions". +// src/alpha.d.ts:23:5 - (ae-undocumented) Missing documentation for "setTaskBroker". +// src/alpha.d.ts:37:5 - (ae-undocumented) Missing documentation for "addTemplateFilters". +// src/alpha.d.ts:38:5 - (ae-undocumented) Missing documentation for "addTemplateGlobals". +// src/alpha.d.ts:64:5 - (ae-undocumented) Missing documentation for "addAutocompleteProvider". +// src/alpha.d.ts:81:5 - (ae-undocumented) Missing documentation for "serializeWorkspace". +// src/alpha.d.ts:85:5 - (ae-undocumented) Missing documentation for "cleanWorkspace". +// src/alpha.d.ts:88:5 - (ae-undocumented) Missing documentation for "rehydrateWorkspace". +// src/alpha.d.ts:99:5 - (ae-undocumented) Missing documentation for "addProviders". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/scaffolder-node/api-report.md b/plugins/scaffolder-node/api-report.api.md similarity index 73% rename from plugins/scaffolder-node/api-report.md rename to plugins/scaffolder-node/api-report.api.md index 6bfa743415..3dc385f202 100644 --- a/plugins/scaffolder-node/api-report.md +++ b/plugins/scaffolder-node/api-report.api.md @@ -478,4 +478,49 @@ export type TemplateFilter = (...args: JsonValue[]) => JsonValue | undefined; export type TemplateGlobal = | ((...args: JsonValue[]) => JsonValue | undefined) | JsonValue; + +// Warnings were encountered during analysis: +// +// src/actions/createTemplateAction.d.ts:6:1 - (ae-undocumented) Missing documentation for "TemplateExample". +// src/actions/createTemplateAction.d.ts:11:1 - (ae-undocumented) Missing documentation for "TemplateActionOptions". +// src/actions/gitHelpers.d.ts:5:1 - (ae-undocumented) Missing documentation for "initRepoAndPush". +// src/actions/gitHelpers.d.ts:27:1 - (ae-undocumented) Missing documentation for "commitAndPushRepo". +// src/actions/gitHelpers.d.ts:49:1 - (ae-undocumented) Missing documentation for "cloneRepo". +// src/actions/gitHelpers.d.ts:66:1 - (ae-undocumented) Missing documentation for "createBranch". +// src/actions/gitHelpers.d.ts:80:1 - (ae-undocumented) Missing documentation for "addFiles". +// src/actions/gitHelpers.d.ts:94:1 - (ae-undocumented) Missing documentation for "commitAndPushBranch". +// src/actions/types.d.ts:60:1 - (ae-undocumented) Missing documentation for "TemplateAction". +// src/actions/util.d.ts:5:22 - (ae-undocumented) Missing documentation for "getRepoSourceDirectory". +// src/actions/util.d.ts:9:22 - (ae-undocumented) Missing documentation for "parseRepoUrl". +// src/files/serializeDirectoryContents.d.ts:6:1 - (ae-undocumented) Missing documentation for "serializeDirectoryContents". +// src/files/types.d.ts:5:1 - (ae-undocumented) Missing documentation for "SerializedFile". +// src/files/types.d.ts:6:5 - (ae-undocumented) Missing documentation for "path". +// src/files/types.d.ts:7:5 - (ae-undocumented) Missing documentation for "content". +// src/files/types.d.ts:8:5 - (ae-undocumented) Missing documentation for "executable". +// src/files/types.d.ts:9:5 - (ae-undocumented) Missing documentation for "symlink". +// src/tasks/types.d.ts:82:5 - (ae-undocumented) Missing documentation for "cancelSignal". +// src/tasks/types.d.ts:83:5 - (ae-undocumented) Missing documentation for "spec". +// src/tasks/types.d.ts:84:5 - (ae-undocumented) Missing documentation for "secrets". +// src/tasks/types.d.ts:85:5 - (ae-undocumented) Missing documentation for "createdBy". +// src/tasks/types.d.ts:86:5 - (ae-undocumented) Missing documentation for "done". +// src/tasks/types.d.ts:87:5 - (ae-undocumented) Missing documentation for "isDryRun". +// src/tasks/types.d.ts:88:5 - (ae-undocumented) Missing documentation for "complete". +// src/tasks/types.d.ts:89:5 - (ae-undocumented) Missing documentation for "emitLog". +// src/tasks/types.d.ts:90:5 - (ae-undocumented) Missing documentation for "getTaskState". +// src/tasks/types.d.ts:93:5 - (ae-undocumented) Missing documentation for "updateCheckpoint". +// src/tasks/types.d.ts:102:5 - (ae-undocumented) Missing documentation for "serializeWorkspace". +// src/tasks/types.d.ts:105:5 - (ae-undocumented) Missing documentation for "cleanWorkspace". +// src/tasks/types.d.ts:106:5 - (ae-undocumented) Missing documentation for "rehydrateWorkspace". +// src/tasks/types.d.ts:110:5 - (ae-undocumented) Missing documentation for "getWorkspaceName". +// src/tasks/types.d.ts:111:5 - (ae-undocumented) Missing documentation for "getInitiatorCredentials". +// src/tasks/types.d.ts:119:5 - (ae-undocumented) Missing documentation for "cancel". +// src/tasks/types.d.ts:120:5 - (ae-undocumented) Missing documentation for "claim". +// src/tasks/types.d.ts:121:5 - (ae-undocumented) Missing documentation for "recoverTasks". +// src/tasks/types.d.ts:122:5 - (ae-undocumented) Missing documentation for "dispatch". +// src/tasks/types.d.ts:123:5 - (ae-undocumented) Missing documentation for "vacuumTasks". +// src/tasks/types.d.ts:126:5 - (ae-undocumented) Missing documentation for "event$". +// src/tasks/types.d.ts:132:5 - (ae-undocumented) Missing documentation for "get". +// src/tasks/types.d.ts:133:5 - (ae-undocumented) Missing documentation for "list". +// src/types.d.ts:3:1 - (ae-undocumented) Missing documentation for "TemplateFilter". +// src/types.d.ts:5:1 - (ae-undocumented) Missing documentation for "TemplateGlobal". ``` diff --git a/plugins/scaffolder-react/api-report-alpha.md b/plugins/scaffolder-react/api-report-alpha.api.md similarity index 62% rename from plugins/scaffolder-react/api-report-alpha.md rename to plugins/scaffolder-react/api-report-alpha.api.md index 545cc02e9e..b9f0569714 100644 --- a/plugins/scaffolder-react/api-report-alpha.md +++ b/plugins/scaffolder-react/api-report-alpha.api.md @@ -318,5 +318,50 @@ export type WorkflowProps = { | 'layouts' >; +// Warnings were encountered during analysis: +// +// src/next/components/ScaffolderField/ScaffolderField.d.ts:7:5 - (ae-undocumented) Missing documentation for "rawDescription". +// src/next/components/ScaffolderField/ScaffolderField.d.ts:8:5 - (ae-undocumented) Missing documentation for "errors". +// src/next/components/ScaffolderField/ScaffolderField.d.ts:9:5 - (ae-undocumented) Missing documentation for "rawErrors". +// src/next/components/ScaffolderField/ScaffolderField.d.ts:10:5 - (ae-undocumented) Missing documentation for "help". +// src/next/components/ScaffolderField/ScaffolderField.d.ts:11:5 - (ae-undocumented) Missing documentation for "rawHelp". +// src/next/components/ScaffolderField/ScaffolderField.d.ts:12:5 - (ae-undocumented) Missing documentation for "required". +// src/next/components/ScaffolderField/ScaffolderField.d.ts:13:5 - (ae-undocumented) Missing documentation for "disabled". +// src/next/components/ScaffolderField/ScaffolderField.d.ts:14:5 - (ae-undocumented) Missing documentation for "displayLabel". +// src/next/components/ScaffolderPageContextMenu/ScaffolderPageContextMenu.d.ts:5:1 - (ae-undocumented) Missing documentation for "ScaffolderPageContextMenuProps". +// src/next/components/ScaffolderPageContextMenu/ScaffolderPageContextMenu.d.ts:14:1 - (ae-undocumented) Missing documentation for "ScaffolderPageContextMenu". +// src/next/components/Stepper/createAsyncValidators.d.ts:6:1 - (ae-undocumented) Missing documentation for "FormValidation". +// src/next/components/Stepper/createAsyncValidators.d.ts:10:22 - (ae-undocumented) Missing documentation for "createAsyncValidators". +// src/next/components/TaskSteps/TaskSteps.d.ts:10:5 - (ae-undocumented) Missing documentation for "steps". +// src/next/components/TaskSteps/TaskSteps.d.ts:11:5 - (ae-undocumented) Missing documentation for "activeStep". +// src/next/components/TaskSteps/TaskSteps.d.ts:12:5 - (ae-undocumented) Missing documentation for "isComplete". +// src/next/components/TaskSteps/TaskSteps.d.ts:13:5 - (ae-undocumented) Missing documentation for "isError". +// src/next/components/TemplateCard/TemplateCard.d.ts:9:5 - (ae-undocumented) Missing documentation for "template". +// src/next/components/TemplateCard/TemplateCard.d.ts:10:5 - (ae-undocumented) Missing documentation for "additionalLinks". +// src/next/components/TemplateCard/TemplateCard.d.ts:15:5 - (ae-undocumented) Missing documentation for "onSelected". +// src/next/components/TemplateCategoryPicker/TemplateCategoryPicker.d.ts:3:1 - (ae-undocumented) Missing documentation for "ScaffolderReactTemplateCategoryPickerClassKey". +// src/next/components/TemplateGroup/TemplateGroup.d.ts:10:5 - (ae-undocumented) Missing documentation for "templates". +// src/next/components/TemplateGroup/TemplateGroup.d.ts:18:5 - (ae-undocumented) Missing documentation for "onSelected". +// src/next/components/TemplateGroup/TemplateGroup.d.ts:19:5 - (ae-undocumented) Missing documentation for "title". +// src/next/components/TemplateGroup/TemplateGroup.d.ts:20:5 - (ae-undocumented) Missing documentation for "components". +// src/next/components/TemplateGroups/TemplateGroups.d.ts:8:1 - (ae-undocumented) Missing documentation for "TemplateGroupsProps". +// src/next/components/TemplateGroups/TemplateGroups.d.ts:9:5 - (ae-undocumented) Missing documentation for "groups". +// src/next/components/TemplateGroups/TemplateGroups.d.ts:10:5 - (ae-undocumented) Missing documentation for "templateFilter". +// src/next/components/TemplateGroups/TemplateGroups.d.ts:11:5 - (ae-undocumented) Missing documentation for "TemplateCardComponent". +// src/next/components/TemplateGroups/TemplateGroups.d.ts:14:5 - (ae-undocumented) Missing documentation for "onTemplateSelected". +// src/next/components/TemplateGroups/TemplateGroups.d.ts:15:5 - (ae-undocumented) Missing documentation for "additionalLinksForEntity". +// src/next/components/TemplateGroups/TemplateGroups.d.ts:24:22 - (ae-undocumented) Missing documentation for "TemplateGroups". +// src/next/components/Workflow/Workflow.d.ts:7:1 - (ae-undocumented) Missing documentation for "WorkflowProps". +// src/next/components/Workflow/Workflow.d.ts:20:22 - (ae-undocumented) Missing documentation for "Workflow". +// src/next/components/Workflow/Workflow.d.ts:24:22 - (ae-undocumented) Missing documentation for "EmbeddableWorkflow". +// src/next/hooks/useTemplateParameterSchema.d.ts:5:22 - (ae-undocumented) Missing documentation for "useTemplateParameterSchema". +// src/next/hooks/useTemplateSchema.d.ts:10:5 - (ae-undocumented) Missing documentation for "uiSchema". +// src/next/hooks/useTemplateSchema.d.ts:11:5 - (ae-undocumented) Missing documentation for "mergedSchema". +// src/next/hooks/useTemplateSchema.d.ts:12:5 - (ae-undocumented) Missing documentation for "schema". +// src/next/hooks/useTemplateSchema.d.ts:13:5 - (ae-undocumented) Missing documentation for "title". +// src/next/hooks/useTemplateSchema.d.ts:14:5 - (ae-undocumented) Missing documentation for "description". +// src/next/overridableComponents.d.ts:5:1 - (ae-undocumented) Missing documentation for "ScaffolderReactComponentsNameToClassKey". +// src/next/overridableComponents.d.ts:9:1 - (ae-undocumented) Missing documentation for "BackstageOverrides". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/scaffolder-react/api-report.md b/plugins/scaffolder-react/api-report.api.md similarity index 80% rename from plugins/scaffolder-react/api-report.md rename to plugins/scaffolder-react/api-report.api.md index f73365f0ac..0fcb3fbf04 100644 --- a/plugins/scaffolder-react/api-report.md +++ b/plugins/scaffolder-react/api-report.api.md @@ -528,5 +528,44 @@ export const useTaskEventStream: (taskId: string) => TaskStream; // @public export const useTemplateSecrets: () => ScaffolderUseTemplateSecrets; +// Warnings were encountered during analysis: +// +// src/api/ref.d.ts:3:22 - (ae-undocumented) Missing documentation for "scaffolderApiRef". +// src/api/types.d.ts:53:1 - (ae-undocumented) Missing documentation for "ScaffolderOutputLink". +// src/api/types.d.ts:60:1 - (ae-undocumented) Missing documentation for "ScaffolderOutputText". +// src/api/types.d.ts:67:1 - (ae-undocumented) Missing documentation for "ScaffolderTaskOutput". +// src/api/types.d.ts:95:5 - (ae-undocumented) Missing documentation for "templateRef". +// src/api/types.d.ts:96:5 - (ae-undocumented) Missing documentation for "values". +// src/api/types.d.ts:97:5 - (ae-undocumented) Missing documentation for "secrets". +// src/api/types.d.ts:105:5 - (ae-undocumented) Missing documentation for "taskId". +// src/api/types.d.ts:113:5 - (ae-undocumented) Missing documentation for "allowedHosts". +// src/api/types.d.ts:121:5 - (ae-undocumented) Missing documentation for "integrations". +// src/api/types.d.ts:133:5 - (ae-undocumented) Missing documentation for "taskId". +// src/api/types.d.ts:134:5 - (ae-undocumented) Missing documentation for "after". +// src/api/types.d.ts:137:1 - (ae-undocumented) Missing documentation for "ScaffolderDryRunOptions". +// src/api/types.d.ts:138:5 - (ae-undocumented) Missing documentation for "template". +// src/api/types.d.ts:139:5 - (ae-undocumented) Missing documentation for "values". +// src/api/types.d.ts:140:5 - (ae-undocumented) Missing documentation for "secrets". +// src/api/types.d.ts:141:5 - (ae-undocumented) Missing documentation for "directoryContents". +// src/api/types.d.ts:147:1 - (ae-undocumented) Missing documentation for "ScaffolderDryRunResponse". +// src/api/types.d.ts:148:5 - (ae-undocumented) Missing documentation for "directoryContents". +// src/api/types.d.ts:153:5 - (ae-undocumented) Missing documentation for "log". +// src/api/types.d.ts:154:5 - (ae-undocumented) Missing documentation for "steps". +// src/api/types.d.ts:155:5 - (ae-undocumented) Missing documentation for "output". +// src/api/types.d.ts:163:5 - (ae-undocumented) Missing documentation for "getTemplateParameterSchema". +// src/api/types.d.ts:171:5 - (ae-undocumented) Missing documentation for "getTask". +// src/api/types.d.ts:178:5 - (ae-undocumented) Missing documentation for "listTasks". +// src/api/types.d.ts:183:5 - (ae-undocumented) Missing documentation for "getIntegrationsList". +// src/api/types.d.ts:188:5 - (ae-undocumented) Missing documentation for "streamLogs". +// src/api/types.d.ts:189:5 - (ae-undocumented) Missing documentation for "dryRun". +// src/api/types.d.ts:190:5 - (ae-undocumented) Missing documentation for "autocomplete". +// src/components/types.d.ts:7:1 - (ae-undocumented) Missing documentation for "TemplateGroupFilter". +// src/extensions/types.d.ts:13:5 - (ae-undocumented) Missing documentation for "uiSchema". +// src/extensions/types.d.ts:30:5 - (ae-undocumented) Missing documentation for ""ui:options"". +// src/layouts/createScaffolderLayout.d.ts:16:5 - (ae-undocumented) Missing documentation for "name". +// src/layouts/createScaffolderLayout.d.ts:17:5 - (ae-undocumented) Missing documentation for "component". +// src/secrets/SecretsContext.d.ts:14:5 - (ae-undocumented) Missing documentation for "setSecrets". +// src/secrets/SecretsContext.d.ts:15:5 - (ae-undocumented) Missing documentation for "secrets". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/scaffolder/api-report-alpha.md b/plugins/scaffolder/api-report-alpha.api.md similarity index 97% rename from plugins/scaffolder/api-report-alpha.md rename to plugins/scaffolder/api-report-alpha.api.md index 4e8ded2644..9cbbfe5ee9 100644 --- a/plugins/scaffolder/api-report-alpha.md +++ b/plugins/scaffolder/api-report-alpha.api.md @@ -311,5 +311,11 @@ export type TemplateWizardPageProps = { }; }; +// Warnings were encountered during analysis: +// +// src/alpha.d.ts:3:15 - (ae-undocumented) Missing documentation for "_default". +// src/next/TemplateListPage/TemplateListPage.d.ts:7:1 - (ae-undocumented) Missing documentation for "TemplateListPageProps". +// src/next/TemplateWizardPage/TemplateWizardPage.d.ts:6:1 - (ae-undocumented) Missing documentation for "TemplateWizardPageProps". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/scaffolder/api-report.md b/plugins/scaffolder/api-report.api.md similarity index 80% rename from plugins/scaffolder/api-report.md rename to plugins/scaffolder/api-report.api.md index 81cf0ecced..ae8a440161 100644 --- a/plugins/scaffolder/api-report.md +++ b/plugins/scaffolder/api-report.api.md @@ -669,4 +669,56 @@ export const TemplateTypePicker: () => React_2.JSX.Element | null; // @public @deprecated (undocumented) export const useTemplateSecrets: () => ScaffolderUseTemplateSecrets_2; + +// Warnings were encountered during analysis: +// +// src/api.d.ts:23:5 - (ae-undocumented) Missing documentation for "listTasks". +// src/api.d.ts:28:5 - (ae-undocumented) Missing documentation for "getIntegrationsList". +// src/api.d.ts:29:5 - (ae-undocumented) Missing documentation for "getTemplateParameterSchema". +// src/api.d.ts:30:5 - (ae-undocumented) Missing documentation for "scaffold". +// src/api.d.ts:31:5 - (ae-undocumented) Missing documentation for "getTask". +// src/api.d.ts:32:5 - (ae-undocumented) Missing documentation for "streamLogs". +// src/api.d.ts:33:5 - (ae-undocumented) Missing documentation for "dryRun". +// src/api.d.ts:36:5 - (ae-undocumented) Missing documentation for "listActions". +// src/api.d.ts:37:5 - (ae-undocumented) Missing documentation for "cancelTask". +// src/api.d.ts:38:5 - (ae-undocumented) Missing documentation for "autocomplete". +// src/components/OngoingTask/OngoingTask.d.ts:6:22 - (ae-undocumented) Missing documentation for "OngoingTask". +// src/components/fields/EntityPicker/schema.d.ts:15:22 - (ae-undocumented) Missing documentation for "EntityPickerFieldSchema". +// src/components/fields/EntityTagsPicker/schema.d.ts:4:22 - (ae-undocumented) Missing documentation for "EntityTagsPickerFieldSchema". +// src/components/fields/OwnedEntityPicker/schema.d.ts:4:22 - (ae-undocumented) Missing documentation for "OwnedEntityPickerFieldSchema". +// src/components/fields/OwnerPicker/schema.d.ts:4:22 - (ae-undocumented) Missing documentation for "OwnerPickerFieldSchema". +// src/components/fields/RepoUrlPicker/schema.d.ts:4:22 - (ae-undocumented) Missing documentation for "RepoUrlPickerFieldSchema". +// src/components/fields/utils.d.ts:9:5 - (ae-undocumented) Missing documentation for "schema". +// src/components/fields/utils.d.ts:10:5 - (ae-undocumented) Missing documentation for "type". +// src/components/fields/utils.d.ts:11:5 - (ae-undocumented) Missing documentation for "uiOptionsType". +// src/deprecated.d.ts:7:22 - (ae-undocumented) Missing documentation for "rootRouteRef". +// src/deprecated.d.ts:12:22 - (ae-undocumented) Missing documentation for "createScaffolderFieldExtension". +// src/deprecated.d.ts:17:22 - (ae-undocumented) Missing documentation for "ScaffolderFieldExtensions". +// src/deprecated.d.ts:24:22 - (ae-undocumented) Missing documentation for "useTemplateSecrets". +// src/deprecated.d.ts:29:22 - (ae-undocumented) Missing documentation for "scaffolderApiRef". +// src/deprecated.d.ts:34:1 - (ae-undocumented) Missing documentation for "ScaffolderApi". +// src/deprecated.d.ts:39:1 - (ae-undocumented) Missing documentation for "ScaffolderUseTemplateSecrets". +// src/deprecated.d.ts:44:1 - (ae-undocumented) Missing documentation for "TemplateParameterSchema". +// src/deprecated.d.ts:49:1 - (ae-undocumented) Missing documentation for "CustomFieldExtensionSchema". +// src/deprecated.d.ts:54:1 - (ae-undocumented) Missing documentation for "CustomFieldValidator". +// src/deprecated.d.ts:59:1 - (ae-undocumented) Missing documentation for "FieldExtensionOptions". +// src/deprecated.d.ts:64:1 - (ae-undocumented) Missing documentation for "FieldExtensionComponentProps". +// src/deprecated.d.ts:69:1 - (ae-undocumented) Missing documentation for "FieldExtensionComponent". +// src/deprecated.d.ts:74:1 - (ae-undocumented) Missing documentation for "ListActionsResponse". +// src/deprecated.d.ts:79:1 - (ae-undocumented) Missing documentation for "LogEvent". +// src/deprecated.d.ts:84:1 - (ae-undocumented) Missing documentation for "ScaffolderDryRunOptions". +// src/deprecated.d.ts:89:1 - (ae-undocumented) Missing documentation for "ScaffolderDryRunResponse". +// src/deprecated.d.ts:94:1 - (ae-undocumented) Missing documentation for "ScaffolderGetIntegrationsListOptions". +// src/deprecated.d.ts:99:1 - (ae-undocumented) Missing documentation for "ScaffolderGetIntegrationsListResponse". +// src/deprecated.d.ts:104:1 - (ae-undocumented) Missing documentation for "ScaffolderOutputlink". +// src/deprecated.d.ts:109:1 - (ae-undocumented) Missing documentation for "ScaffolderScaffoldOptions". +// src/deprecated.d.ts:114:1 - (ae-undocumented) Missing documentation for "ScaffolderScaffoldResponse". +// src/deprecated.d.ts:119:1 - (ae-undocumented) Missing documentation for "ScaffolderStreamLogsOptions". +// src/deprecated.d.ts:124:1 - (ae-undocumented) Missing documentation for "ScaffolderTask". +// src/deprecated.d.ts:129:1 - (ae-undocumented) Missing documentation for "ScaffolderTaskOutput". +// src/deprecated.d.ts:134:1 - (ae-undocumented) Missing documentation for "ScaffolderTaskStatus". +// src/deprecated.d.ts:139:22 - (ae-undocumented) Missing documentation for "createScaffolderLayout". +// src/deprecated.d.ts:144:22 - (ae-undocumented) Missing documentation for "ScaffolderLayouts". +// src/deprecated.d.ts:151:1 - (ae-undocumented) Missing documentation for "LayoutTemplate". +// src/deprecated.d.ts:156:1 - (ae-undocumented) Missing documentation for "LayoutOptions". ``` diff --git a/plugins/search-backend-module-catalog/api-report-alpha.md b/plugins/search-backend-module-catalog/api-report-alpha.api.md similarity index 100% rename from plugins/search-backend-module-catalog/api-report-alpha.md rename to plugins/search-backend-module-catalog/api-report-alpha.api.md diff --git a/plugins/search-backend-module-catalog/api-report.md b/plugins/search-backend-module-catalog/api-report.api.md similarity index 66% rename from plugins/search-backend-module-catalog/api-report.md rename to plugins/search-backend-module-catalog/api-report.api.md index aed73254cc..5a1efffcb7 100644 --- a/plugins/search-backend-module-catalog/api-report.md +++ b/plugins/search-backend-module-catalog/api-report.api.md @@ -51,4 +51,14 @@ export type DefaultCatalogCollatorFactoryOptions = { catalogClient?: CatalogApi; entityTransformer?: CatalogCollatorEntityTransformer; }; + +// Warnings were encountered during analysis: +// +// src/collators/CatalogCollatorEntityTransformer.d.ts:4:1 - (ae-undocumented) Missing documentation for "CatalogCollatorEntityTransformer". +// src/collators/DefaultCatalogCollatorFactory.d.ts:11:1 - (ae-undocumented) Missing documentation for "DefaultCatalogCollatorFactoryOptions". +// src/collators/DefaultCatalogCollatorFactory.d.ts:39:5 - (ae-undocumented) Missing documentation for "type". +// src/collators/DefaultCatalogCollatorFactory.d.ts:40:5 - (ae-undocumented) Missing documentation for "visibilityPermission". +// src/collators/DefaultCatalogCollatorFactory.d.ts:47:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/collators/DefaultCatalogCollatorFactory.d.ts:49:5 - (ae-undocumented) Missing documentation for "getCollator". +// src/collators/defaultCatalogCollatorEntityTransformer.d.ts:3:22 - (ae-undocumented) Missing documentation for "defaultCatalogCollatorEntityTransformer". ``` diff --git a/plugins/search-backend-module-elasticsearch/api-report-alpha.md b/plugins/search-backend-module-elasticsearch/api-report-alpha.api.md similarity index 77% rename from plugins/search-backend-module-elasticsearch/api-report-alpha.md rename to plugins/search-backend-module-elasticsearch/api-report-alpha.api.md index 23a4664f9c..e612215a87 100644 --- a/plugins/search-backend-module-elasticsearch/api-report-alpha.md +++ b/plugins/search-backend-module-elasticsearch/api-report-alpha.api.md @@ -20,5 +20,10 @@ export interface ElasticSearchQueryTranslatorExtensionPoint { // @alpha export const elasticsearchTranslatorExtensionPoint: ExtensionPoint; +// Warnings were encountered during analysis: +// +// src/alpha.d.ts:3:1 - (ae-undocumented) Missing documentation for "ElasticSearchQueryTranslatorExtensionPoint". +// src/alpha.d.ts:4:5 - (ae-undocumented) Missing documentation for "setTranslator". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/search-backend-module-elasticsearch/api-report.md b/plugins/search-backend-module-elasticsearch/api-report.api.md similarity index 53% rename from plugins/search-backend-module-elasticsearch/api-report.md rename to plugins/search-backend-module-elasticsearch/api-report.api.md index c565a554ed..4b55c64495 100644 --- a/plugins/search-backend-module-elasticsearch/api-report.md +++ b/plugins/search-backend-module-elasticsearch/api-report.api.md @@ -457,4 +457,99 @@ export interface OpenSearchNodeOptions { // (undocumented) url: URL; } + +// Warnings were encountered during analysis: +// +// src/engines/ElasticSearchClientOptions.d.ts:29:5 - (ae-undocumented) Missing documentation for "provider". +// src/engines/ElasticSearchClientOptions.d.ts:30:5 - (ae-undocumented) Missing documentation for "region". +// src/engines/ElasticSearchClientOptions.d.ts:31:5 - (ae-undocumented) Missing documentation for "service". +// src/engines/ElasticSearchClientOptions.d.ts:32:5 - (ae-undocumented) Missing documentation for "auth". +// src/engines/ElasticSearchClientOptions.d.ts:33:5 - (ae-undocumented) Missing documentation for "connection". +// src/engines/ElasticSearchClientOptions.d.ts:34:5 - (ae-undocumented) Missing documentation for "node". +// src/engines/ElasticSearchClientOptions.d.ts:35:5 - (ae-undocumented) Missing documentation for "nodes". +// src/engines/ElasticSearchClientOptions.d.ts:46:5 - (ae-undocumented) Missing documentation for "provider". +// src/engines/ElasticSearchClientOptions.d.ts:47:5 - (ae-undocumented) Missing documentation for "auth". +// src/engines/ElasticSearchClientOptions.d.ts:48:5 - (ae-undocumented) Missing documentation for "Connection". +// src/engines/ElasticSearchClientOptions.d.ts:49:5 - (ae-undocumented) Missing documentation for "node". +// src/engines/ElasticSearchClientOptions.d.ts:50:5 - (ae-undocumented) Missing documentation for "nodes". +// src/engines/ElasticSearchClientOptions.d.ts:51:5 - (ae-undocumented) Missing documentation for "cloud". +// src/engines/ElasticSearchClientOptions.d.ts:64:5 - (ae-undocumented) Missing documentation for "Transport". +// src/engines/ElasticSearchClientOptions.d.ts:65:5 - (ae-undocumented) Missing documentation for "maxRetries". +// src/engines/ElasticSearchClientOptions.d.ts:66:5 - (ae-undocumented) Missing documentation for "requestTimeout". +// src/engines/ElasticSearchClientOptions.d.ts:67:5 - (ae-undocumented) Missing documentation for "pingTimeout". +// src/engines/ElasticSearchClientOptions.d.ts:68:5 - (ae-undocumented) Missing documentation for "sniffInterval". +// src/engines/ElasticSearchClientOptions.d.ts:69:5 - (ae-undocumented) Missing documentation for "sniffOnStart". +// src/engines/ElasticSearchClientOptions.d.ts:70:5 - (ae-undocumented) Missing documentation for "sniffEndpoint". +// src/engines/ElasticSearchClientOptions.d.ts:71:5 - (ae-undocumented) Missing documentation for "sniffOnConnectionFault". +// src/engines/ElasticSearchClientOptions.d.ts:72:5 - (ae-undocumented) Missing documentation for "resurrectStrategy". +// src/engines/ElasticSearchClientOptions.d.ts:73:5 - (ae-undocumented) Missing documentation for "suggestCompression". +// src/engines/ElasticSearchClientOptions.d.ts:74:5 - (ae-undocumented) Missing documentation for "compression". +// src/engines/ElasticSearchClientOptions.d.ts:75:5 - (ae-undocumented) Missing documentation for "ssl". +// src/engines/ElasticSearchClientOptions.d.ts:76:5 - (ae-undocumented) Missing documentation for "agent". +// src/engines/ElasticSearchClientOptions.d.ts:77:5 - (ae-undocumented) Missing documentation for "nodeFilter". +// src/engines/ElasticSearchClientOptions.d.ts:78:5 - (ae-undocumented) Missing documentation for "nodeSelector". +// src/engines/ElasticSearchClientOptions.d.ts:79:5 - (ae-undocumented) Missing documentation for "headers". +// src/engines/ElasticSearchClientOptions.d.ts:80:5 - (ae-undocumented) Missing documentation for "opaqueIdPrefix". +// src/engines/ElasticSearchClientOptions.d.ts:81:5 - (ae-undocumented) Missing documentation for "name". +// src/engines/ElasticSearchClientOptions.d.ts:82:5 - (ae-undocumented) Missing documentation for "proxy". +// src/engines/ElasticSearchClientOptions.d.ts:83:5 - (ae-undocumented) Missing documentation for "enableMetaHeader". +// src/engines/ElasticSearchClientOptions.d.ts:84:5 - (ae-undocumented) Missing documentation for "disablePrototypePoisoningProtection". +// src/engines/ElasticSearchClientOptions.d.ts:89:1 - (ae-undocumented) Missing documentation for "OpenSearchAuth". +// src/engines/ElasticSearchClientOptions.d.ts:96:1 - (ae-undocumented) Missing documentation for "ElasticSearchAuth". +// src/engines/ElasticSearchClientOptions.d.ts:105:1 - (ae-undocumented) Missing documentation for "ElasticSearchNodeOptions". +// src/engines/ElasticSearchClientOptions.d.ts:106:5 - (ae-undocumented) Missing documentation for "url". +// src/engines/ElasticSearchClientOptions.d.ts:107:5 - (ae-undocumented) Missing documentation for "id". +// src/engines/ElasticSearchClientOptions.d.ts:108:5 - (ae-undocumented) Missing documentation for "agent". +// src/engines/ElasticSearchClientOptions.d.ts:109:5 - (ae-undocumented) Missing documentation for "ssl". +// src/engines/ElasticSearchClientOptions.d.ts:110:5 - (ae-undocumented) Missing documentation for "headers". +// src/engines/ElasticSearchClientOptions.d.ts:111:5 - (ae-undocumented) Missing documentation for "roles". +// src/engines/ElasticSearchClientOptions.d.ts:121:1 - (ae-undocumented) Missing documentation for "OpenSearchNodeOptions". +// src/engines/ElasticSearchClientOptions.d.ts:122:5 - (ae-undocumented) Missing documentation for "url". +// src/engines/ElasticSearchClientOptions.d.ts:123:5 - (ae-undocumented) Missing documentation for "id". +// src/engines/ElasticSearchClientOptions.d.ts:124:5 - (ae-undocumented) Missing documentation for "agent". +// src/engines/ElasticSearchClientOptions.d.ts:125:5 - (ae-undocumented) Missing documentation for "ssl". +// src/engines/ElasticSearchClientOptions.d.ts:126:5 - (ae-undocumented) Missing documentation for "headers". +// src/engines/ElasticSearchClientOptions.d.ts:127:5 - (ae-undocumented) Missing documentation for "roles". +// src/engines/ElasticSearchClientOptions.d.ts:136:1 - (ae-undocumented) Missing documentation for "ElasticSearchAgentOptions". +// src/engines/ElasticSearchClientOptions.d.ts:137:5 - (ae-undocumented) Missing documentation for "keepAlive". +// src/engines/ElasticSearchClientOptions.d.ts:138:5 - (ae-undocumented) Missing documentation for "keepAliveMsecs". +// src/engines/ElasticSearchClientOptions.d.ts:139:5 - (ae-undocumented) Missing documentation for "maxSockets". +// src/engines/ElasticSearchClientOptions.d.ts:140:5 - (ae-undocumented) Missing documentation for "maxFreeSockets". +// src/engines/ElasticSearchClientOptions.d.ts:145:1 - (ae-undocumented) Missing documentation for "ElasticSearchConnectionConstructor". +// src/engines/ElasticSearchClientOptions.d.ts:146:5 - (ae-undocumented) Missing documentation for "__new". +// src/engines/ElasticSearchClientOptions.d.ts:147:5 - (ae-undocumented) Missing documentation for "statuses". +// src/engines/ElasticSearchClientOptions.d.ts:151:5 - (ae-undocumented) Missing documentation for "roles". +// src/engines/ElasticSearchClientOptions.d.ts:161:1 - (ae-undocumented) Missing documentation for "OpenSearchConnectionConstructor". +// src/engines/ElasticSearchClientOptions.d.ts:162:5 - (ae-undocumented) Missing documentation for "__new". +// src/engines/ElasticSearchClientOptions.d.ts:163:5 - (ae-undocumented) Missing documentation for "statuses". +// src/engines/ElasticSearchClientOptions.d.ts:167:5 - (ae-undocumented) Missing documentation for "roles". +// src/engines/ElasticSearchClientOptions.d.ts:176:1 - (ae-undocumented) Missing documentation for "ElasticSearchTransportConstructor". +// src/engines/ElasticSearchClientOptions.d.ts:177:5 - (ae-undocumented) Missing documentation for "__new". +// src/engines/ElasticSearchClientOptions.d.ts:178:5 - (ae-undocumented) Missing documentation for "sniffReasons". +// src/engines/ElasticSearchClientWrapper.d.ts:8:1 - (ae-undocumented) Missing documentation for "ElasticSearchAliasAction". +// src/engines/ElasticSearchClientWrapper.d.ts:32:1 - (ae-undocumented) Missing documentation for "ElasticSearchIndexAction". +// src/engines/ElasticSearchClientWrapper.d.ts:57:5 - (ae-undocumented) Missing documentation for "fromClientOptions". +// src/engines/ElasticSearchClientWrapper.d.ts:58:5 - (ae-undocumented) Missing documentation for "search". +// src/engines/ElasticSearchClientWrapper.d.ts:62:5 - (ae-undocumented) Missing documentation for "bulk". +// src/engines/ElasticSearchClientWrapper.d.ts:67:5 - (ae-undocumented) Missing documentation for "putIndexTemplate". +// src/engines/ElasticSearchClientWrapper.d.ts:68:5 - (ae-undocumented) Missing documentation for "listIndices". +// src/engines/ElasticSearchClientWrapper.d.ts:71:5 - (ae-undocumented) Missing documentation for "indexExists". +// src/engines/ElasticSearchClientWrapper.d.ts:74:5 - (ae-undocumented) Missing documentation for "deleteIndex". +// src/engines/ElasticSearchClientWrapper.d.ts:80:5 - (ae-undocumented) Missing documentation for "getAliases". +// src/engines/ElasticSearchClientWrapper.d.ts:83:5 - (ae-undocumented) Missing documentation for "createIndex". +// src/engines/ElasticSearchClientWrapper.d.ts:86:5 - (ae-undocumented) Missing documentation for "updateAliases". +// src/engines/ElasticSearchSearchEngine.d.ts:45:1 - (ae-undocumented) Missing documentation for "ElasticSearchHighlightOptions". +// src/engines/ElasticSearchSearchEngine.d.ts:53:1 - (ae-undocumented) Missing documentation for "ElasticSearchHighlightConfig". +// src/engines/ElasticSearchSearchEngine.d.ts:63:1 - (ae-undocumented) Missing documentation for "ElasticSearchSearchEngine". +// src/engines/ElasticSearchSearchEngine.d.ts:72:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/engines/ElasticSearchSearchEngine.d.ts:94:5 - (ae-undocumented) Missing documentation for "translator". +// src/engines/ElasticSearchSearchEngine.d.ts:95:5 - (ae-undocumented) Missing documentation for "setTranslator". +// src/engines/ElasticSearchSearchEngine.d.ts:96:5 - (ae-undocumented) Missing documentation for "setIndexTemplate". +// src/engines/ElasticSearchSearchEngine.d.ts:97:5 - (ae-undocumented) Missing documentation for "getIndexer". +// src/engines/ElasticSearchSearchEngine.d.ts:98:5 - (ae-undocumented) Missing documentation for "query". +// src/engines/ElasticSearchSearchEngine.d.ts:108:1 - (ae-undocumented) Missing documentation for "decodePageCursor". +// src/engines/ElasticSearchSearchEngineIndexer.d.ts:29:5 - (ae-undocumented) Missing documentation for "indexName". +// src/engines/ElasticSearchSearchEngineIndexer.d.ts:40:5 - (ae-undocumented) Missing documentation for "initialize". +// src/engines/ElasticSearchSearchEngineIndexer.d.ts:41:5 - (ae-undocumented) Missing documentation for "index". +// src/engines/ElasticSearchSearchEngineIndexer.d.ts:42:5 - (ae-undocumented) Missing documentation for "finalize". ``` diff --git a/plugins/search-backend-module-explore/api-report-alpha.md b/plugins/search-backend-module-explore/api-report-alpha.api.md similarity index 100% rename from plugins/search-backend-module-explore/api-report-alpha.md rename to plugins/search-backend-module-explore/api-report-alpha.api.md diff --git a/plugins/search-backend-module-explore/api-report.md b/plugins/search-backend-module-explore/api-report.api.md similarity index 74% rename from plugins/search-backend-module-explore/api-report.md rename to plugins/search-backend-module-explore/api-report.api.md index 79163df05c..39a732c2ca 100644 --- a/plugins/search-backend-module-explore/api-report.md +++ b/plugins/search-backend-module-explore/api-report.api.md @@ -40,4 +40,11 @@ export type ToolDocumentCollatorFactoryOptions = { tokenManager?: TokenManager; auth?: AuthService; }; + +// Warnings were encountered during analysis: +// +// src/collators/ToolDocumentCollatorFactory.d.ts:32:5 - (ae-undocumented) Missing documentation for "type". +// src/collators/ToolDocumentCollatorFactory.d.ts:37:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/collators/ToolDocumentCollatorFactory.d.ts:38:5 - (ae-undocumented) Missing documentation for "getCollator". +// src/collators/ToolDocumentCollatorFactory.d.ts:39:5 - (ae-undocumented) Missing documentation for "execute". ``` diff --git a/plugins/search-backend-module-pg/api-report-alpha.md b/plugins/search-backend-module-pg/api-report-alpha.api.md similarity index 100% rename from plugins/search-backend-module-pg/api-report-alpha.md rename to plugins/search-backend-module-pg/api-report-alpha.api.md diff --git a/plugins/search-backend-module-pg/api-report.md b/plugins/search-backend-module-pg/api-report.api.md similarity index 53% rename from plugins/search-backend-module-pg/api-report.md rename to plugins/search-backend-module-pg/api-report.api.md index f0dea48b9c..af9a139261 100644 --- a/plugins/search-backend-module-pg/api-report.md +++ b/plugins/search-backend-module-pg/api-report.api.md @@ -188,4 +188,51 @@ export interface RawDocumentRow { // (undocumented) type: string; } + +// Warnings were encountered during analysis: +// +// src/PgSearchEngine/PgSearchEngine.d.ts:52:1 - (ae-undocumented) Missing documentation for "PgSearchEngine". +// src/PgSearchEngine/PgSearchEngine.d.ts:64:5 - (ae-undocumented) Missing documentation for "from". +// src/PgSearchEngine/PgSearchEngine.d.ts:69:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/PgSearchEngine/PgSearchEngine.d.ts:70:5 - (ae-undocumented) Missing documentation for "supported". +// src/PgSearchEngine/PgSearchEngine.d.ts:71:5 - (ae-undocumented) Missing documentation for "translator". +// src/PgSearchEngine/PgSearchEngine.d.ts:72:5 - (ae-undocumented) Missing documentation for "setTranslator". +// src/PgSearchEngine/PgSearchEngine.d.ts:73:5 - (ae-undocumented) Missing documentation for "getIndexer". +// src/PgSearchEngine/PgSearchEngine.d.ts:74:5 - (ae-undocumented) Missing documentation for "query". +// src/PgSearchEngine/PgSearchEngineIndexer.d.ts:6:1 - (ae-undocumented) Missing documentation for "PgSearchEngineIndexerOptions". +// src/PgSearchEngine/PgSearchEngineIndexer.d.ts:13:1 - (ae-undocumented) Missing documentation for "PgSearchEngineIndexer". +// src/PgSearchEngine/PgSearchEngineIndexer.d.ts:20:5 - (ae-undocumented) Missing documentation for "initialize". +// src/PgSearchEngine/PgSearchEngineIndexer.d.ts:21:5 - (ae-undocumented) Missing documentation for "index". +// src/PgSearchEngine/PgSearchEngineIndexer.d.ts:22:5 - (ae-undocumented) Missing documentation for "finalize". +// src/database/DatabaseDocumentStore.d.ts:6:1 - (ae-undocumented) Missing documentation for "DatabaseDocumentStore". +// src/database/DatabaseDocumentStore.d.ts:8:5 - (ae-undocumented) Missing documentation for "create". +// src/database/DatabaseDocumentStore.d.ts:9:5 - (ae-undocumented) Missing documentation for "supported". +// src/database/DatabaseDocumentStore.d.ts:11:5 - (ae-undocumented) Missing documentation for "transaction". +// src/database/DatabaseDocumentStore.d.ts:12:5 - (ae-undocumented) Missing documentation for "getTransaction". +// src/database/DatabaseDocumentStore.d.ts:13:5 - (ae-undocumented) Missing documentation for "prepareInsert". +// src/database/DatabaseDocumentStore.d.ts:14:5 - (ae-undocumented) Missing documentation for "completeInsert". +// src/database/DatabaseDocumentStore.d.ts:15:5 - (ae-undocumented) Missing documentation for "insertDocuments". +// src/database/DatabaseDocumentStore.d.ts:16:5 - (ae-undocumented) Missing documentation for "query". +// src/database/types.d.ts:5:1 - (ae-undocumented) Missing documentation for "PgSearchQuery". +// src/database/types.d.ts:6:5 - (ae-undocumented) Missing documentation for "fields". +// src/database/types.d.ts:7:5 - (ae-undocumented) Missing documentation for "types". +// src/database/types.d.ts:8:5 - (ae-undocumented) Missing documentation for "pgTerm". +// src/database/types.d.ts:9:5 - (ae-undocumented) Missing documentation for "offset". +// src/database/types.d.ts:10:5 - (ae-undocumented) Missing documentation for "limit". +// src/database/types.d.ts:11:5 - (ae-undocumented) Missing documentation for "options". +// src/database/types.d.ts:14:1 - (ae-undocumented) Missing documentation for "DatabaseStore". +// src/database/types.d.ts:15:5 - (ae-undocumented) Missing documentation for "transaction". +// src/database/types.d.ts:16:5 - (ae-undocumented) Missing documentation for "getTransaction". +// src/database/types.d.ts:17:5 - (ae-undocumented) Missing documentation for "prepareInsert". +// src/database/types.d.ts:18:5 - (ae-undocumented) Missing documentation for "insertDocuments". +// src/database/types.d.ts:19:5 - (ae-undocumented) Missing documentation for "completeInsert". +// src/database/types.d.ts:20:5 - (ae-undocumented) Missing documentation for "query". +// src/database/types.d.ts:23:1 - (ae-undocumented) Missing documentation for "RawDocumentRow". +// src/database/types.d.ts:24:5 - (ae-undocumented) Missing documentation for "document". +// src/database/types.d.ts:25:5 - (ae-undocumented) Missing documentation for "type". +// src/database/types.d.ts:26:5 - (ae-undocumented) Missing documentation for "hash". +// src/database/types.d.ts:29:1 - (ae-undocumented) Missing documentation for "DocumentResultRow". +// src/database/types.d.ts:30:5 - (ae-undocumented) Missing documentation for "document". +// src/database/types.d.ts:31:5 - (ae-undocumented) Missing documentation for "type". +// src/database/types.d.ts:32:5 - (ae-undocumented) Missing documentation for "highlight". ``` diff --git a/plugins/search-backend-module-stack-overflow-collator/api-report.md b/plugins/search-backend-module-stack-overflow-collator/api-report.api.md similarity index 65% rename from plugins/search-backend-module-stack-overflow-collator/api-report.md rename to plugins/search-backend-module-stack-overflow-collator/api-report.api.md index 3b9b79c597..aeb7bd03ea 100644 --- a/plugins/search-backend-module-stack-overflow-collator/api-report.md +++ b/plugins/search-backend-module-stack-overflow-collator/api-report.api.md @@ -58,4 +58,14 @@ export type StackOverflowQuestionsCollatorFactoryOptions = { export type StackOverflowQuestionsRequestParams = { [key: string]: string | string[] | number; }; + +// Warnings were encountered during analysis: +// +// src/collators/StackOverflowQuestionsCollatorFactory.d.ts:12:5 - (ae-undocumented) Missing documentation for "answers". +// src/collators/StackOverflowQuestionsCollatorFactory.d.ts:13:5 - (ae-undocumented) Missing documentation for "tags". +// src/collators/StackOverflowQuestionsCollatorFactory.d.ts:43:5 - (ae-undocumented) Missing documentation for "requestParams". +// src/collators/StackOverflowQuestionsCollatorFactory.d.ts:50:5 - (ae-undocumented) Missing documentation for "type". +// src/collators/StackOverflowQuestionsCollatorFactory.d.ts:52:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/collators/StackOverflowQuestionsCollatorFactory.d.ts:53:5 - (ae-undocumented) Missing documentation for "getCollator". +// src/collators/StackOverflowQuestionsCollatorFactory.d.ts:54:5 - (ae-undocumented) Missing documentation for "execute". ``` diff --git a/plugins/search-backend-module-techdocs/api-report-alpha.md b/plugins/search-backend-module-techdocs/api-report-alpha.api.md similarity index 77% rename from plugins/search-backend-module-techdocs/api-report-alpha.md rename to plugins/search-backend-module-techdocs/api-report-alpha.api.md index 4176bd56c6..16dd73f705 100644 --- a/plugins/search-backend-module-techdocs/api-report-alpha.md +++ b/plugins/search-backend-module-techdocs/api-report-alpha.api.md @@ -20,5 +20,10 @@ export interface TechDocsCollatorEntityTransformerExtensionPoint { // @alpha export const techdocsCollatorEntityTransformerExtensionPoint: ExtensionPoint; +// Warnings were encountered during analysis: +// +// src/alpha.d.ts:3:1 - (ae-undocumented) Missing documentation for "TechDocsCollatorEntityTransformerExtensionPoint". +// src/alpha.d.ts:4:5 - (ae-undocumented) Missing documentation for "setTransformer". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/search-backend-module-techdocs/api-report.md b/plugins/search-backend-module-techdocs/api-report.api.md similarity index 70% rename from plugins/search-backend-module-techdocs/api-report.md rename to plugins/search-backend-module-techdocs/api-report.api.md index 9c9fae1a38..3ef7bea9c1 100644 --- a/plugins/search-backend-module-techdocs/api-report.md +++ b/plugins/search-backend-module-techdocs/api-report.api.md @@ -54,4 +54,13 @@ export type TechDocsCollatorFactoryOptions = { legacyPathCasing?: boolean; entityTransformer?: TechDocsCollatorEntityTransformer; }; + +// Warnings were encountered during analysis: +// +// src/collators/DefaultTechDocsCollatorFactory.d.ts:34:5 - (ae-undocumented) Missing documentation for "type". +// src/collators/DefaultTechDocsCollatorFactory.d.ts:35:5 - (ae-undocumented) Missing documentation for "visibilityPermission". +// src/collators/DefaultTechDocsCollatorFactory.d.ts:45:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/collators/DefaultTechDocsCollatorFactory.d.ts:46:5 - (ae-undocumented) Missing documentation for "getCollator". +// 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". ``` diff --git a/plugins/search-backend-node/api-report-alpha.md b/plugins/search-backend-node/api-report-alpha.api.md similarity index 85% rename from plugins/search-backend-node/api-report-alpha.md rename to plugins/search-backend-node/api-report-alpha.api.md index e1d5bd024d..5c5503db13 100644 --- a/plugins/search-backend-node/api-report-alpha.md +++ b/plugins/search-backend-node/api-report-alpha.api.md @@ -52,5 +52,11 @@ export const searchIndexServiceRef: ServiceRef< 'singleton' >; +// Warnings were encountered during analysis: +// +// src/alpha.d.ts:39:5 - (ae-undocumented) Missing documentation for "addCollator". +// src/alpha.d.ts:40:5 - (ae-undocumented) Missing documentation for "addDecorator". +// src/alpha.d.ts:47:5 - (ae-undocumented) Missing documentation for "setSearchEngine". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/search-backend-node/api-report.md b/plugins/search-backend-node/api-report.api.md similarity index 76% rename from plugins/search-backend-node/api-report.md rename to plugins/search-backend-node/api-report.api.md index 4e769d0eae..b2dae26f86 100644 --- a/plugins/search-backend-node/api-report.md +++ b/plugins/search-backend-node/api-report.api.md @@ -210,4 +210,24 @@ export type TestPipelineResult = { error: unknown; documents: IndexableDocument[]; }; + +// Warnings were encountered during analysis: +// +// src/collators/NewlineDelimitedJsonCollatorFactory.d.ts:52:5 - (ae-undocumented) Missing documentation for "type". +// src/collators/NewlineDelimitedJsonCollatorFactory.d.ts:53:5 - (ae-undocumented) Missing documentation for "visibilityPermission". +// src/collators/NewlineDelimitedJsonCollatorFactory.d.ts:65:5 - (ae-undocumented) Missing documentation for "getCollator". +// src/engines/LunrSearchEngine.d.ts:25:5 - (ae-undocumented) Missing documentation for "lunrIndices". +// src/engines/LunrSearchEngine.d.ts:26:5 - (ae-undocumented) Missing documentation for "docStore". +// src/engines/LunrSearchEngine.d.ts:27:5 - (ae-undocumented) Missing documentation for "logger". +// src/engines/LunrSearchEngine.d.ts:28:5 - (ae-undocumented) Missing documentation for "highlightPreTag". +// src/engines/LunrSearchEngine.d.ts:29:5 - (ae-undocumented) Missing documentation for "highlightPostTag". +// src/engines/LunrSearchEngine.d.ts:33:5 - (ae-undocumented) Missing documentation for "translator". +// src/engines/LunrSearchEngine.d.ts:34:5 - (ae-undocumented) Missing documentation for "setTranslator". +// src/engines/LunrSearchEngine.d.ts:35:5 - (ae-undocumented) Missing documentation for "getIndexer". +// src/engines/LunrSearchEngine.d.ts:36:5 - (ae-undocumented) Missing documentation for "query". +// src/engines/LunrSearchEngineIndexer.d.ts:13:5 - (ae-undocumented) Missing documentation for "initialize". +// src/engines/LunrSearchEngineIndexer.d.ts:14:5 - (ae-undocumented) Missing documentation for "finalize". +// src/engines/LunrSearchEngineIndexer.d.ts:15:5 - (ae-undocumented) Missing documentation for "index". +// src/engines/LunrSearchEngineIndexer.d.ts:16:5 - (ae-undocumented) Missing documentation for "buildIndex". +// src/engines/LunrSearchEngineIndexer.d.ts:17:5 - (ae-undocumented) Missing documentation for "getDocumentStore". ``` diff --git a/plugins/search-backend/api-report-alpha.md b/plugins/search-backend/api-report-alpha.api.md similarity index 100% rename from plugins/search-backend/api-report-alpha.md rename to plugins/search-backend/api-report-alpha.api.md diff --git a/plugins/search-backend/api-report.md b/plugins/search-backend/api-report.api.md similarity index 83% rename from plugins/search-backend/api-report.md rename to plugins/search-backend/api-report.api.md index b3f617e5e1..8f739c76f1 100644 --- a/plugins/search-backend/api-report.md +++ b/plugins/search-backend/api-report.api.md @@ -28,4 +28,9 @@ export type RouterOptions = { auth?: AuthService; httpAuth?: HttpAuthService; }; + +// Warnings were encountered during analysis: +// +// src/service/router.d.ts:10:1 - (ae-undocumented) Missing documentation for "RouterOptions". +// src/service/router.d.ts:23:1 - (ae-undocumented) Missing documentation for "createRouter". ``` diff --git a/plugins/search-common/api-report.md b/plugins/search-common/api-report.api.md similarity index 64% rename from plugins/search-common/api-report.md rename to plugins/search-common/api-report.api.md index 497defc46d..8cda7b0168 100644 --- a/plugins/search-common/api-report.md +++ b/plugins/search-common/api-report.api.md @@ -116,4 +116,24 @@ export type SearchResult = Result; // @public (undocumented) export type SearchResultSet = ResultSet; + +// Warnings were encountered during analysis: +// +// src/types.d.ts:8:1 - (ae-undocumented) Missing documentation for "SearchQuery". +// src/types.d.ts:9:5 - (ae-undocumented) Missing documentation for "term". +// src/types.d.ts:10:5 - (ae-undocumented) Missing documentation for "types". +// src/types.d.ts:11:5 - (ae-undocumented) Missing documentation for "filters". +// src/types.d.ts:12:5 - (ae-undocumented) Missing documentation for "pageLimit". +// src/types.d.ts:13:5 - (ae-undocumented) Missing documentation for "pageCursor". +// src/types.d.ts:30:5 - (ae-undocumented) Missing documentation for "fields". +// src/types.d.ts:41:1 - (ae-undocumented) Missing documentation for "Result". +// src/types.d.ts:64:1 - (ae-undocumented) Missing documentation for "ResultSet". +// src/types.d.ts:65:5 - (ae-undocumented) Missing documentation for "results". +// src/types.d.ts:66:5 - (ae-undocumented) Missing documentation for "nextPageCursor". +// src/types.d.ts:67:5 - (ae-undocumented) Missing documentation for "previousPageCursor". +// src/types.d.ts:68:5 - (ae-undocumented) Missing documentation for "numberOfResults". +// src/types.d.ts:73:1 - (ae-undocumented) Missing documentation for "SearchResult". +// src/types.d.ts:77:1 - (ae-undocumented) Missing documentation for "SearchResultSet". +// src/types.d.ts:81:1 - (ae-undocumented) Missing documentation for "IndexableResult". +// src/types.d.ts:85:1 - (ae-undocumented) Missing documentation for "IndexableResultSet". ``` diff --git a/plugins/search-react/api-report-alpha.md b/plugins/search-react/api-report-alpha.api.md similarity index 100% rename from plugins/search-react/api-report-alpha.md rename to plugins/search-react/api-report-alpha.api.md diff --git a/plugins/search-react/api-report.md b/plugins/search-react/api-report.api.md similarity index 87% rename from plugins/search-react/api-report.md rename to plugins/search-react/api-report.api.md index 3efed073d8..46097fe188 100644 --- a/plugins/search-react/api-report.md +++ b/plugins/search-react/api-report.api.md @@ -483,4 +483,24 @@ export const useSearchContextCheck: () => boolean; export const useSearchResultListItemExtensions: ( children: ReactNode, ) => (result: SearchResult_2, key?: number) => React_2.JSX.Element; + +// Warnings were encountered during analysis: +// +// src/api.d.ts:5:22 - (ae-undocumented) Missing documentation for "searchApiRef". +// src/api.d.ts:9:1 - (ae-undocumented) Missing documentation for "SearchApi". +// src/api.d.ts:10:5 - (ae-undocumented) Missing documentation for "query". +// src/api.d.ts:18:5 - (ae-undocumented) Missing documentation for "mockedResults". +// src/api.d.ts:20:5 - (ae-undocumented) Missing documentation for "query". +// src/components/DefaultResultListItem/DefaultResultListItem.d.ts:26:15 - (ae-undocumented) Missing documentation for "HigherOrderDefaultResultListItem". +// src/components/HighlightedSearchResultText/HighlightedSearchResultText.d.ts:15:22 - (ae-undocumented) Missing documentation for "HighlightedSearchResultText". +// src/components/SearchFilter/SearchFilter.Autocomplete.d.ts:6:1 - (ae-undocumented) Missing documentation for "SearchAutocompleteFilterProps". +// src/components/SearchFilter/SearchFilter.Autocomplete.d.ts:14:22 - (ae-undocumented) Missing documentation for "AutocompleteFilter". +// src/components/SearchFilter/SearchFilter.d.ts:6:1 - (ae-undocumented) Missing documentation for "SearchFilterComponentProps". +// src/components/SearchFilter/SearchFilter.d.ts:27:1 - (ae-undocumented) Missing documentation for "SearchFilterWrapperProps". +// src/components/SearchFilter/SearchFilter.d.ts:34:22 - (ae-undocumented) Missing documentation for "CheckboxFilter". +// src/components/SearchFilter/SearchFilter.d.ts:38:22 - (ae-undocumented) Missing documentation for "SelectFilter". +// src/components/SearchFilter/SearchFilter.d.ts:42:15 - (ae-undocumented) Missing documentation for "SearchFilter". +// src/components/SearchResultPager/SearchResultPager.d.ts:5:22 - (ae-undocumented) Missing documentation for "SearchResultPager". +// src/context/SearchContext.d.ts:9:1 - (ae-undocumented) Missing documentation for "SearchContextValue". +// src/context/SearchContext.d.ts:23:1 - (ae-undocumented) Missing documentation for "SearchContextState". ``` diff --git a/plugins/search/api-report-alpha.md b/plugins/search/api-report-alpha.api.md similarity index 92% rename from plugins/search/api-report-alpha.md rename to plugins/search/api-report-alpha.api.md index 9b8f21fa43..36c703a669 100644 --- a/plugins/search/api-report-alpha.md +++ b/plugins/search/api-report-alpha.api.md @@ -194,5 +194,12 @@ export const searchPage: ExtensionDefinition<{ }; }>; +// Warnings were encountered during analysis: +// +// src/alpha.d.ts:2:22 - (ae-undocumented) Missing documentation for "searchApi". +// src/alpha.d.ts:4:22 - (ae-undocumented) Missing documentation for "searchPage". +// src/alpha.d.ts:9:22 - (ae-undocumented) Missing documentation for "searchNavItem". +// src/alpha.d.ts:13:15 - (ae-undocumented) Missing documentation for "_default". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/search/api-report.md b/plugins/search/api-report.api.md similarity index 71% rename from plugins/search/api-report.md rename to plugins/search/api-report.api.md index a47c11b194..5ff64322e2 100644 --- a/plugins/search/api-report.md +++ b/plugins/search/api-report.api.md @@ -140,4 +140,19 @@ export type SidebarSearchProps = { // @public export function useSearchModal(initialState?: boolean): SearchModalValue; + +// Warnings were encountered during analysis: +// +// src/components/SearchModal/SearchModal.d.ts:5:1 - (ae-undocumented) Missing documentation for "SearchModalChildrenProps". +// src/components/SearchModal/SearchModal.d.ts:14:1 - (ae-undocumented) Missing documentation for "SearchModalProps". +// src/components/SearchModal/SearchModal.d.ts:41:22 - (ae-undocumented) Missing documentation for "SearchModal". +// src/components/SearchPage/SearchPage.d.ts:6:22 - (ae-undocumented) Missing documentation for "SearchPage". +// src/components/SearchType/SearchType.Accordion.d.ts:5:1 - (ae-undocumented) Missing documentation for "SearchTypeAccordionProps". +// src/components/SearchType/SearchType.Tabs.d.ts:5:1 - (ae-undocumented) Missing documentation for "SearchTypeTabsProps". +// src/components/SearchType/SearchType.d.ts:18:15 - (ae-undocumented) Missing documentation for "SearchType". +// src/components/SidebarSearch/SidebarSearch.d.ts:14:22 - (ae-undocumented) Missing documentation for "SidebarSearch". +// src/plugin.d.ts:6:22 - (ae-undocumented) Missing documentation for "searchPlugin". +// src/plugin.d.ts:12:22 - (ae-undocumented) Missing documentation for "SearchPage". +// src/plugin.d.ts:16:22 - (ae-undocumented) Missing documentation for "SidebarSearchModal". +// src/plugin.d.ts:20:22 - (ae-undocumented) Missing documentation for "HomePageSearchBar". ``` diff --git a/plugins/signals-backend/api-report.md b/plugins/signals-backend/api-report.api.md similarity index 60% rename from plugins/signals-backend/api-report.md rename to plugins/signals-backend/api-report.api.md index 10f74ba37e..5e3069f382 100644 --- a/plugins/signals-backend/api-report.md +++ b/plugins/signals-backend/api-report.api.md @@ -41,5 +41,18 @@ export interface RouterOptions { const signalsPlugin: BackendFeature; export default signalsPlugin; +// Warnings were encountered during analysis: +// +// src/service/router.d.ts:8:1 - (ae-undocumented) Missing documentation for "RouterOptions". +// src/service/router.d.ts:9:5 - (ae-undocumented) Missing documentation for "logger". +// src/service/router.d.ts:10:5 - (ae-undocumented) Missing documentation for "events". +// src/service/router.d.ts:11:5 - (ae-undocumented) Missing documentation for "identity". +// src/service/router.d.ts:12:5 - (ae-undocumented) Missing documentation for "discovery". +// src/service/router.d.ts:13:5 - (ae-undocumented) Missing documentation for "config". +// src/service/router.d.ts:14:5 - (ae-undocumented) Missing documentation for "lifecycle". +// src/service/router.d.ts:15:5 - (ae-undocumented) Missing documentation for "auth". +// src/service/router.d.ts:16:5 - (ae-undocumented) Missing documentation for "userInfo". +// src/service/router.d.ts:19:1 - (ae-undocumented) Missing documentation for "createRouter". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/signals-node/api-report.md b/plugins/signals-node/api-report.api.md similarity index 64% rename from plugins/signals-node/api-report.md rename to plugins/signals-node/api-report.api.md index a368dd2ece..97f06a8ede 100644 --- a/plugins/signals-node/api-report.md +++ b/plugins/signals-node/api-report.api.md @@ -58,5 +58,17 @@ export const signalsServiceRef: ServiceRef< 'singleton' >; +// Warnings were encountered during analysis: +// +// src/DefaultSignalsService.d.ts:5:1 - (ae-undocumented) Missing documentation for "DefaultSignalsService". +// src/DefaultSignalsService.d.ts:7:5 - (ae-undocumented) Missing documentation for "create". +// src/DefaultSignalsService.d.ts:19:22 - (ae-undocumented) Missing documentation for "DefaultSignalService". +// src/SignalsService.d.ts:4:1 - (ae-undocumented) Missing documentation for "SignalsService". +// src/SignalsService.d.ts:15:1 - (ae-undocumented) Missing documentation for "SignalService". +// src/lib.d.ts:3:22 - (ae-undocumented) Missing documentation for "signalsServiceRef". +// src/lib.d.ts:8:22 - (ae-undocumented) Missing documentation for "signalService". +// src/types.d.ts:6:1 - (ae-undocumented) Missing documentation for "SignalsServiceOptions". +// src/types.d.ts:10:1 - (ae-undocumented) Missing documentation for "SignalPayload". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/signals-react/api-report.md b/plugins/signals-react/api-report.api.md similarity index 60% rename from plugins/signals-react/api-report.md rename to plugins/signals-react/api-report.api.md index 87d856288b..f17f53366a 100644 --- a/plugins/signals-react/api-report.md +++ b/plugins/signals-react/api-report.api.md @@ -32,5 +32,14 @@ export const useSignal: ( isSignalsAvailable: boolean; }; +// Warnings were encountered during analysis: +// +// src/api/SignalApi.d.ts:3:22 - (ae-undocumented) Missing documentation for "signalApiRef". +// src/api/SignalApi.d.ts:5:1 - (ae-undocumented) Missing documentation for "SignalSubscriber". +// src/api/SignalApi.d.ts:6:5 - (ae-undocumented) Missing documentation for "unsubscribe". +// src/api/SignalApi.d.ts:9:1 - (ae-undocumented) Missing documentation for "SignalApi". +// src/api/SignalApi.d.ts:10:5 - (ae-undocumented) Missing documentation for "subscribe". +// src/hooks/useSignal.d.ts:3:22 - (ae-undocumented) Missing documentation for "useSignal". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/signals/api-report.md b/plugins/signals/api-report.api.md similarity index 67% rename from plugins/signals/api-report.md rename to plugins/signals/api-report.api.md index ca7695aeec..27a4a3fea5 100644 --- a/plugins/signals/api-report.md +++ b/plugins/signals/api-report.api.md @@ -36,5 +36,14 @@ export const SignalsDisplay: () => null; // @public (undocumented) export const signalsPlugin: BackstagePlugin<{}, {}>; +// Warnings were encountered during analysis: +// +// src/api/SignalClient.d.ts:5:1 - (ae-undocumented) Missing documentation for "SignalClient". +// src/api/SignalClient.d.ts:10:5 - (ae-undocumented) Missing documentation for "DEFAULT_CONNECT_TIMEOUT_MS". +// src/api/SignalClient.d.ts:11:5 - (ae-undocumented) Missing documentation for "DEFAULT_RECONNECT_TIMEOUT_MS". +// src/api/SignalClient.d.ts:16:5 - (ae-undocumented) Missing documentation for "create". +// src/api/SignalClient.d.ts:23:5 - (ae-undocumented) Missing documentation for "subscribe". +// src/plugin.d.ts:2:22 - (ae-undocumented) Missing documentation for "signalsPlugin". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/techdocs-addons-test-utils/api-report.md b/plugins/techdocs-addons-test-utils/api-report.api.md similarity index 100% rename from plugins/techdocs-addons-test-utils/api-report.md rename to plugins/techdocs-addons-test-utils/api-report.api.md diff --git a/plugins/techdocs-backend/api-report-alpha.md b/plugins/techdocs-backend/api-report-alpha.api.md similarity index 100% rename from plugins/techdocs-backend/api-report-alpha.md rename to plugins/techdocs-backend/api-report-alpha.api.md diff --git a/plugins/techdocs-backend/api-report.md b/plugins/techdocs-backend/api-report.api.md similarity index 77% rename from plugins/techdocs-backend/api-report.md rename to plugins/techdocs-backend/api-report.api.md index dceb0a4d9a..59d21df21c 100644 --- a/plugins/techdocs-backend/api-report.md +++ b/plugins/techdocs-backend/api-report.api.md @@ -112,4 +112,17 @@ export type TechDocsCollatorOptions = { export type TechDocsDocument = TechDocsDocument_2; export * from '@backstage/plugin-techdocs-node'; + +// Warnings were encountered during analysis: +// +// src/index.d.ts:16:1 - (ae-undocumented) Missing documentation for "DocsBuildStrategy". +// src/index.d.ts:21:1 - (ae-undocumented) Missing documentation for "ShouldBuildParameters". +// src/index.d.ts:28:1 - (ae-undocumented) Missing documentation for "TechDocsDocument". +// src/search/DefaultTechDocsCollator.d.ts:31:5 - (ae-undocumented) Missing documentation for "type". +// src/search/DefaultTechDocsCollator.d.ts:32:5 - (ae-undocumented) Missing documentation for "visibilityPermission". +// src/search/DefaultTechDocsCollator.d.ts:34:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/search/DefaultTechDocsCollator.d.ts:35:5 - (ae-undocumented) Missing documentation for "execute". +// src/search/DefaultTechDocsCollator.d.ts:36:5 - (ae-undocumented) Missing documentation for "applyArgsToFormat". +// src/search/index.d.ts:12:1 - (ae-undocumented) Missing documentation for "TechDocsCollatorFactoryOptions". +// src/search/index.d.ts:17:22 - (ae-undocumented) Missing documentation for "DefaultTechDocsCollatorFactory". ``` diff --git a/plugins/techdocs-module-addons-contrib/api-report.md b/plugins/techdocs-module-addons-contrib/api-report.api.md similarity index 100% rename from plugins/techdocs-module-addons-contrib/api-report.md rename to plugins/techdocs-module-addons-contrib/api-report.api.md diff --git a/plugins/techdocs-node/api-report.md b/plugins/techdocs-node/api-report.api.md similarity index 90% rename from plugins/techdocs-node/api-report.md rename to plugins/techdocs-node/api-report.api.md index ea93ddfc98..ad6e01636f 100644 --- a/plugins/techdocs-node/api-report.md +++ b/plugins/techdocs-node/api-report.api.md @@ -365,4 +365,16 @@ export class UrlPreparer implements PreparerBase { prepare(entity: Entity, options?: PreparerOptions): Promise; shouldCleanPreparedDirectory(): boolean; } + +// Warnings were encountered during analysis: +// +// src/extensions.d.ts:10:5 - (ae-undocumented) Missing documentation for "setBuildStrategy". +// src/extensions.d.ts:11:5 - (ae-undocumented) Missing documentation for "setBuildLogTransport". +// src/extensions.d.ts:25:5 - (ae-undocumented) Missing documentation for "setTechdocsGenerator". +// src/extensions.d.ts:39:5 - (ae-undocumented) Missing documentation for "registerPreparer". +// src/extensions.d.ts:53:5 - (ae-undocumented) Missing documentation for "registerPublisher". +// src/stages/generate/index.d.ts:10:22 - (ae-undocumented) Missing documentation for "getMkDocsYml". +// src/stages/publish/publish.d.ts:10:5 - (ae-undocumented) Missing documentation for "register". +// src/stages/publish/publish.d.ts:11:5 - (ae-undocumented) Missing documentation for "get". +// src/techdocsTypes.d.ts:39:5 - (ae-undocumented) Missing documentation for "shouldBuild". ``` diff --git a/plugins/techdocs-react/api-report.md b/plugins/techdocs-react/api-report.api.md similarity index 85% rename from plugins/techdocs-react/api-report.md rename to plugins/techdocs-react/api-report.api.md index c158bbd81e..73f122068e 100644 --- a/plugins/techdocs-react/api-report.md +++ b/plugins/techdocs-react/api-report.api.md @@ -192,4 +192,17 @@ export const useTechDocsAddons: () => { // @public export const useTechDocsReaderPage: () => TechDocsReaderPageValue; + +// Warnings were encountered during analysis: +// +// src/api.d.ts:9:5 - (ae-undocumented) Missing documentation for "getCookie". +// src/api.d.ts:12:5 - (ae-undocumented) Missing documentation for "getApiOrigin". +// src/api.d.ts:13:5 - (ae-undocumented) Missing documentation for "getTechDocsMetadata". +// src/api.d.ts:14:5 - (ae-undocumented) Missing documentation for "getEntityMetadata". +// src/api.d.ts:34:5 - (ae-undocumented) Missing documentation for "getApiOrigin". +// src/api.d.ts:35:5 - (ae-undocumented) Missing documentation for "getStorageUrl". +// src/api.d.ts:36:5 - (ae-undocumented) Missing documentation for "getBuilder". +// src/api.d.ts:37:5 - (ae-undocumented) Missing documentation for "getEntityDocs". +// src/api.d.ts:38:5 - (ae-undocumented) Missing documentation for "syncEntityDocs". +// src/api.d.ts:39:5 - (ae-undocumented) Missing documentation for "getBaseUrl". ``` diff --git a/plugins/techdocs/api-report-alpha.md b/plugins/techdocs/api-report-alpha.api.md similarity index 97% rename from plugins/techdocs/api-report-alpha.md rename to plugins/techdocs/api-report-alpha.api.md index 19bdccc948..8a9ce1e1dc 100644 --- a/plugins/techdocs/api-report-alpha.md +++ b/plugins/techdocs/api-report-alpha.api.md @@ -314,5 +314,10 @@ export const techDocsSearchResultListItemExtension: ExtensionDefinition<{ params: SearchResultListItemBlueprintParams; }>; +// Warnings were encountered during analysis: +// +// src/alpha.d.ts:2:22 - (ae-undocumented) Missing documentation for "techDocsSearchResultListItemExtension". +// src/alpha.d.ts:10:15 - (ae-undocumented) Missing documentation for "_default". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/techdocs/api-report.md b/plugins/techdocs/api-report.api.md similarity index 82% rename from plugins/techdocs/api-report.md rename to plugins/techdocs/api-report.api.md index c58a946287..3d90d05eca 100644 --- a/plugins/techdocs/api-report.md +++ b/plugins/techdocs/api-report.api.md @@ -506,4 +506,36 @@ export class TechDocsStorageClient implements TechDocsStorageApi_2 { logHandler?: (line: string) => void, ): Promise; } + +// Warnings were encountered during analysis: +// +// src/api.d.ts:31:5 - (ae-undocumented) Missing documentation for "getApiOrigin". +// src/api.d.ts:32:5 - (ae-undocumented) Missing documentation for "getStorageUrl". +// src/api.d.ts:33:5 - (ae-undocumented) Missing documentation for "getBuilder". +// src/api.d.ts:34:5 - (ae-undocumented) Missing documentation for "getEntityDocs". +// src/api.d.ts:35:5 - (ae-undocumented) Missing documentation for "syncEntityDocs". +// src/api.d.ts:36:5 - (ae-undocumented) Missing documentation for "getBaseUrl". +// src/api.d.ts:45:5 - (ae-undocumented) Missing documentation for "getApiOrigin". +// src/api.d.ts:46:5 - (ae-undocumented) Missing documentation for "getTechDocsMetadata". +// src/api.d.ts:47:5 - (ae-undocumented) Missing documentation for "getEntityMetadata". +// src/client.d.ts:11:5 - (ae-undocumented) Missing documentation for "configApi". +// src/client.d.ts:12:5 - (ae-undocumented) Missing documentation for "discoveryApi". +// src/client.d.ts:19:5 - (ae-undocumented) Missing documentation for "getCookie". +// src/client.d.ts:22:5 - (ae-undocumented) Missing documentation for "getApiOrigin". +// src/client.d.ts:49:5 - (ae-undocumented) Missing documentation for "configApi". +// src/client.d.ts:50:5 - (ae-undocumented) Missing documentation for "discoveryApi". +// src/client.d.ts:59:5 - (ae-undocumented) Missing documentation for "getApiOrigin". +// src/client.d.ts:60:5 - (ae-undocumented) Missing documentation for "getStorageUrl". +// src/client.d.ts:61:5 - (ae-undocumented) Missing documentation for "getBuilder". +// src/client.d.ts:80:5 - (ae-undocumented) Missing documentation for "getBaseUrl". +// src/home/components/TechDocsCustomHome.d.ts:16:5 - (ae-undocumented) Missing documentation for "title". +// src/home/components/TechDocsCustomHome.d.ts:17:5 - (ae-undocumented) Missing documentation for "description". +// src/home/components/TechDocsCustomHome.d.ts:18:5 - (ae-undocumented) Missing documentation for "panelType". +// src/home/components/TechDocsCustomHome.d.ts:19:5 - (ae-undocumented) Missing documentation for "panelCSS". +// src/home/components/TechDocsCustomHome.d.ts:20:5 - (ae-undocumented) Missing documentation for "filterPredicate". +// src/home/components/TechDocsCustomHome.d.ts:28:5 - (ae-undocumented) Missing documentation for "label". +// src/home/components/TechDocsCustomHome.d.ts:29:5 - (ae-undocumented) Missing documentation for "panels". +// src/index.d.ts:21:1 - (ae-undocumented) Missing documentation for "DeprecatedTechDocsMetadata". +// src/index.d.ts:27:1 - (ae-undocumented) Missing documentation for "DeprecatedTechDocsEntityMetadata". +// src/reader/components/TechDocsReaderPage/TechDocsReaderPage.d.ts:26:1 - (ae-undocumented) Missing documentation for "TechDocsReaderPageProps". ``` diff --git a/plugins/user-settings-backend/api-report-alpha.md b/plugins/user-settings-backend/api-report-alpha.api.md similarity index 100% rename from plugins/user-settings-backend/api-report-alpha.md rename to plugins/user-settings-backend/api-report-alpha.api.md diff --git a/plugins/user-settings-backend/api-report.md b/plugins/user-settings-backend/api-report.api.md similarity index 62% rename from plugins/user-settings-backend/api-report.md rename to plugins/user-settings-backend/api-report.api.md index 04aecca574..ac33b9af5d 100644 --- a/plugins/user-settings-backend/api-report.md +++ b/plugins/user-settings-backend/api-report.api.md @@ -18,5 +18,12 @@ export type RouterOptions = { signals?: SignalsService; }; +// Warnings were encountered during analysis: +// +// src/service/router.d.ts:9:1 - (ae-undocumented) Missing documentation for "RouterOptions". +// src/service/router.d.ts:10:5 - (ae-undocumented) Missing documentation for "database". +// src/service/router.d.ts:11:5 - (ae-undocumented) Missing documentation for "identity". +// src/service/router.d.ts:12:5 - (ae-undocumented) Missing documentation for "signals". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/user-settings-common/api-report.md b/plugins/user-settings-common/api-report.api.md similarity index 71% rename from plugins/user-settings-common/api-report.md rename to plugins/user-settings-common/api-report.api.md index b69f4a4190..a984f71e47 100644 --- a/plugins/user-settings-common/api-report.md +++ b/plugins/user-settings-common/api-report.api.md @@ -9,5 +9,9 @@ export type UserSettingsSignal = { key: string; }; +// Warnings were encountered during analysis: +// +// src/types.d.ts:2:1 - (ae-undocumented) Missing documentation for "UserSettingsSignal". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/user-settings/api-report-alpha.md b/plugins/user-settings/api-report-alpha.api.md similarity index 91% rename from plugins/user-settings/api-report-alpha.md rename to plugins/user-settings/api-report-alpha.api.md index 63db1defe0..0a5dbde28d 100644 --- a/plugins/user-settings/api-report-alpha.md +++ b/plugins/user-settings/api-report-alpha.api.md @@ -127,5 +127,11 @@ export const userSettingsTranslationRef: TranslationRef< } >; +// Warnings were encountered during analysis: +// +// src/alpha.d.ts:3:22 - (ae-undocumented) Missing documentation for "settingsNavItem". +// src/alpha.d.ts:9:15 - (ae-undocumented) Missing documentation for "_default". +// src/translation.d.ts:2:22 - (ae-undocumented) Missing documentation for "userSettingsTranslationRef". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/user-settings/api-report.md b/plugins/user-settings/api-report.api.md similarity index 59% rename from plugins/user-settings/api-report.md rename to plugins/user-settings/api-report.api.md index cee35724bb..6169668adc 100644 --- a/plugins/user-settings/api-report.md +++ b/plugins/user-settings/api-report.api.md @@ -179,4 +179,36 @@ export const useUserProfile: () => displayName: string; loading: false; }; + +// Warnings were encountered during analysis: +// +// src/apis/StorageApi/UserSettingsStorage.d.ts:21:5 - (ae-undocumented) Missing documentation for "create". +// src/apis/StorageApi/UserSettingsStorage.d.ts:29:5 - (ae-undocumented) Missing documentation for "forBucket". +// src/apis/StorageApi/UserSettingsStorage.d.ts:30:5 - (ae-undocumented) Missing documentation for "remove". +// src/apis/StorageApi/UserSettingsStorage.d.ts:31:5 - (ae-undocumented) Missing documentation for "set". +// src/apis/StorageApi/UserSettingsStorage.d.ts:32:5 - (ae-undocumented) Missing documentation for "observe$". +// src/apis/StorageApi/UserSettingsStorage.d.ts:33:5 - (ae-undocumented) Missing documentation for "snapshot". +// src/components/AuthProviders/DefaultProviderSettings.d.ts:3:22 - (ae-undocumented) Missing documentation for "DefaultProviderSettings". +// src/components/AuthProviders/ProviderSettingsItem.d.ts:4:22 - (ae-undocumented) Missing documentation for "ProviderSettingsItem". +// src/components/AuthProviders/UserSettingsAuthProviders.d.ts:3:22 - (ae-undocumented) Missing documentation for "UserSettingsAuthProviders". +// src/components/FeatureFlags/UserSettingsFeatureFlags.d.ts:5:22 - (ae-undocumented) Missing documentation for "UserSettingsFeatureFlags". +// src/components/General/UserSettingsAppearanceCard.d.ts:3:22 - (ae-undocumented) Missing documentation for "UserSettingsAppearanceCard". +// src/components/General/UserSettingsGeneral.d.ts:3:22 - (ae-undocumented) Missing documentation for "UserSettingsGeneral". +// src/components/General/UserSettingsIdentityCard.d.ts:3:22 - (ae-undocumented) Missing documentation for "UserSettingsIdentityCard". +// src/components/General/UserSettingsLanguageToggle.d.ts:3:22 - (ae-undocumented) Missing documentation for "UserSettingsLanguageToggle". +// src/components/General/UserSettingsMenu.d.ts:3:22 - (ae-undocumented) Missing documentation for "UserSettingsMenu". +// src/components/General/UserSettingsPinToggle.d.ts:3:22 - (ae-undocumented) Missing documentation for "UserSettingsPinToggle". +// src/components/General/UserSettingsProfileCard.d.ts:3:22 - (ae-undocumented) Missing documentation for "UserSettingsProfileCard". +// src/components/General/UserSettingsSignInAvatar.d.ts:3:22 - (ae-undocumented) Missing documentation for "UserSettingsSignInAvatar". +// src/components/General/UserSettingsThemeToggle.d.ts:3:22 - (ae-undocumented) Missing documentation for "UserSettingsThemeToggle". +// src/components/Settings.d.ts:4:22 - (ae-undocumented) Missing documentation for "Settings". +// src/components/SettingsLayout/SettingsLayout.d.ts:4:1 - (ae-undocumented) Missing documentation for "SettingsLayoutRouteProps". +// src/components/SettingsLayout/SettingsLayout.d.ts:15:1 - (ae-undocumented) Missing documentation for "SettingsLayoutProps". +// src/components/SettingsLayout/SettingsLayout.d.ts:23:22 - (ae-undocumented) Missing documentation for "SettingsLayout". +// src/components/SettingsPage/SettingsPage.d.ts:3:22 - (ae-undocumented) Missing documentation for "SettingsPage". +// src/components/UserSettingsTab/UserSettingsTab.d.ts:3:22 - (ae-undocumented) Missing documentation for "USER_SETTINGS_TAB_KEY". +// src/components/UserSettingsTab/UserSettingsTab.d.ts:5:1 - (ae-undocumented) Missing documentation for "UserSettingsTabProps". +// src/components/useUserProfileInfo.d.ts:3:22 - (ae-undocumented) Missing documentation for "useUserProfile". +// src/plugin.d.ts:4:22 - (ae-undocumented) Missing documentation for "userSettingsPlugin". +// src/plugin.d.ts:8:22 - (ae-undocumented) Missing documentation for "UserSettingsPage". ``` From a2ae88d21a77aa4596905877b88e81ba70911d28 Mon Sep 17 00:00:00 2001 From: secustor Date: Fri, 26 Jul 2024 14:02:43 +0200 Subject: [PATCH 127/164] feat: use report.api.md pattern for api reports Signed-off-by: secustor --- .prettierignore | 4 ++-- .../src/commands/api-reports/api-extractor.ts | 11 +++++++---- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/.prettierignore b/.prettierignore index 2212e834c0..c7a16065e5 100644 --- a/.prettierignore +++ b/.prettierignore @@ -8,8 +8,8 @@ templates api-report.md api-report-*.md # new reports -api-report.api.md -api-report-*.api.md +report.api.md +report-*.api.md knip-report.md cli-report.md diff --git a/packages/repo-tools/src/commands/api-reports/api-extractor.ts b/packages/repo-tools/src/commands/api-reports/api-extractor.ts index fa8dea5f28..4546b292c8 100644 --- a/packages/repo-tools/src/commands/api-reports/api-extractor.ts +++ b/packages/repo-tools/src/commands/api-reports/api-extractor.ts @@ -393,16 +393,19 @@ export async function runApiExtraction({ ); const remainingReportFiles = new Set( - fs.readdirSync(projectFolder).filter(filename => - // https://regex101.com/r/QDZIV0/1 - filename.match(/^.*?api-report(-[^.-]+)?(\.md(\.api\.md)?)$/), + fs.readdirSync(projectFolder).filter( + filename => + // https://regex101.com/r/QDZIV0/2 + filename !== 'knip-report.md' && + // this has to temporarily match all old api report formats + filename.match(/^.*?(api-)?report(-[^.-]+)?(.*?)\.md$/), ), ); for (const packageEntryPoint of packageEntryPoints) { const suffix = packageEntryPoint.name === 'index' ? '' : `-${packageEntryPoint.name}`; - const reportFileName = `api-report${suffix}`; + const reportFileName = `report${suffix}`; const reportPath = resolvePath(projectFolder, reportFileName); remainingReportFiles.delete(reportFileName); From c28596309f8ba79516614072fdf1e45206d29b33 Mon Sep 17 00:00:00 2001 From: secustor Date: Fri, 26 Jul 2024 14:05:09 +0200 Subject: [PATCH 128/164] update files Signed-off-by: secustor --- .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 2 +- ...eport-alpha.api.md => report-alpha.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 ...-report-auth.api.md => report-auth.api.md} | 0 ...eport-cache.api.md => report-cache.api.md} | 0 ...database.api.md => report-database.api.md} | 0 ...scovery.api.md => report-discovery.api.md} | 0 ...httpAuth.api.md => report-httpAuth.api.md} | 0 ...Router.api.md => report-httpRouter.api.md} | 0 ...fecycle.api.md => report-lifecycle.api.md} | 0 ...ort-logger.api.md => report-logger.api.md} | 0 ...sions.api.md => report-permissions.api.md} | 0 ...Config.api.md => report-rootConfig.api.md} | 0 ...Health.api.md => report-rootHealth.api.md} | 0 ...er.api.md => report-rootHttpRouter.api.md} | 1 + ...cle.api.md => report-rootLifecycle.api.md} | 0 ...Logger.api.md => report-rootLogger.api.md} | 0 ...heduler.api.md => report-scheduler.api.md} | 0 ...lReader.api.md => report-urlReader.api.md} | 0 ...userInfo.api.md => report-userInfo.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 ...eport-alpha.api.md => report-alpha.api.md} | 0 ...stUtils.api.md => report-testUtils.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 ...eport-alpha.api.md => report-alpha.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 6 +- .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 ...eport-alpha.api.md => report-alpha.api.md} | 0 ...stUtils.api.md => report-testUtils.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 ...eport-alpha.api.md => report-alpha.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 ...wright.api.md => report-playwright.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 1618 +++++++---------- .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 ...eport-alpha.api.md => report-alpha.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 ...eport-alpha.api.md => report-alpha.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 ...eport-alpha.api.md => report-alpha.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 2 +- .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 ...eport-alpha.api.md => report-alpha.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 ...eport-alpha.api.md => report-alpha.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 ...eport-alpha.api.md => report-alpha.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 ...eport-alpha.api.md => report-alpha.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 ...eport-alpha.api.md => report-alpha.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 ...eport-alpha.api.md => report-alpha.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 ...eport-alpha.api.md => report-alpha.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 ...eport-alpha.api.md => report-alpha.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 ...eport-alpha.api.md => report-alpha.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 ...eport-alpha.api.md => report-alpha.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 ...eport-alpha.api.md => report-alpha.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 ...eport-alpha.api.md => report-alpha.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 ...eport-alpha.api.md => report-alpha.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 ...eport-alpha.api.md => report-alpha.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 ...eport-alpha.api.md => report-alpha.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 ...eport-alpha.api.md => report-alpha.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 ...eport-alpha.api.md => report-alpha.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 ...eport-alpha.api.md => report-alpha.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 ...eport-alpha.api.md => report-alpha.api.md} | 2 +- .../{api-report.api.md => report.api.md} | 0 ...eport-alpha.api.md => report-alpha.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 ...eport-alpha.api.md => report-alpha.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 ...eport-alpha.api.md => report-alpha.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 ...eport-alpha.api.md => report-alpha.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 ...eport-alpha.api.md => report-alpha.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 ...eport-alpha.api.md => report-alpha.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 ...eport-alpha.api.md => report-alpha.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 ...eport-alpha.api.md => report-alpha.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 ...eport-alpha.api.md => report-alpha.api.md} | 0 .../home/{api-report.api.md => report.api.md} | 0 ...eport-alpha.api.md => report-alpha.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 ...pi-report-alpha.md => report-alpha.api.md} | 4 + .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 ...eport-alpha.api.md => report-alpha.api.md} | 0 .../org/{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 ...eport-alpha.api.md => report-alpha.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 ...eport-alpha.api.md => report-alpha.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 ...eport-alpha.api.md => report-alpha.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 8 +- .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 ...eport-alpha.api.md => report-alpha.api.md} | 0 .../{api-report.api.md => report.api.md} | 38 +- ...eport-alpha.api.md => report-alpha.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 ...eport-alpha.api.md => report-alpha.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 ...eport-alpha.api.md => report-alpha.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 ...eport-alpha.api.md => report-alpha.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 ...eport-alpha.api.md => report-alpha.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 ...eport-alpha.api.md => report-alpha.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 ...eport-alpha.api.md => report-alpha.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 ...eport-alpha.api.md => report-alpha.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 ...eport-alpha.api.md => report-alpha.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 ...eport-alpha.api.md => report-alpha.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 ...eport-alpha.api.md => report-alpha.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 ...eport-alpha.api.md => report-alpha.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 ...eport-alpha.api.md => report-alpha.api.md} | 4 +- .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 ...eport-alpha.api.md => report-alpha.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 ...eport-alpha.api.md => report-alpha.api.md} | 2 +- .../{api-report.api.md => report.api.md} | 0 ...eport-alpha.api.md => report-alpha.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 .../{api-report.api.md => report.api.md} | 0 ...eport-alpha.api.md => report-alpha.api.md} | 2 +- .../{api-report.api.md => report.api.md} | 0 250 files changed, 700 insertions(+), 989 deletions(-) rename packages/app-defaults/{api-report.api.md => report.api.md} (100%) rename packages/app-next-example-plugin/{api-report.api.md => report.api.md} (96%) rename packages/backend-app-api/{api-report-alpha.api.md => report-alpha.api.md} (100%) rename packages/backend-app-api/{api-report.api.md => report.api.md} (100%) rename packages/backend-defaults/{api-report-auth.api.md => report-auth.api.md} (100%) rename packages/backend-defaults/{api-report-cache.api.md => report-cache.api.md} (100%) rename packages/backend-defaults/{api-report-database.api.md => report-database.api.md} (100%) rename packages/backend-defaults/{api-report-discovery.api.md => report-discovery.api.md} (100%) rename packages/backend-defaults/{api-report-httpAuth.api.md => report-httpAuth.api.md} (100%) rename packages/backend-defaults/{api-report-httpRouter.api.md => report-httpRouter.api.md} (100%) rename packages/backend-defaults/{api-report-lifecycle.api.md => report-lifecycle.api.md} (100%) rename packages/backend-defaults/{api-report-logger.api.md => report-logger.api.md} (100%) rename packages/backend-defaults/{api-report-permissions.api.md => report-permissions.api.md} (100%) rename packages/backend-defaults/{api-report-rootConfig.api.md => report-rootConfig.api.md} (100%) rename packages/backend-defaults/{api-report-rootHealth.api.md => report-rootHealth.api.md} (100%) rename packages/backend-defaults/{api-report-rootHttpRouter.api.md => report-rootHttpRouter.api.md} (98%) rename packages/backend-defaults/{api-report-rootLifecycle.api.md => report-rootLifecycle.api.md} (100%) rename packages/backend-defaults/{api-report-rootLogger.api.md => report-rootLogger.api.md} (100%) rename packages/backend-defaults/{api-report-scheduler.api.md => report-scheduler.api.md} (100%) rename packages/backend-defaults/{api-report-urlReader.api.md => report-urlReader.api.md} (100%) rename packages/backend-defaults/{api-report-userInfo.api.md => report-userInfo.api.md} (100%) rename packages/backend-defaults/{api-report.api.md => report.api.md} (100%) rename packages/backend-dev-utils/{api-report.api.md => report.api.md} (100%) rename packages/backend-dynamic-feature-service/{api-report.api.md => report.api.md} (100%) rename packages/backend-openapi-utils/{api-report.api.md => report.api.md} (100%) rename packages/backend-plugin-api/{api-report-alpha.api.md => report-alpha.api.md} (100%) rename packages/backend-plugin-api/{api-report-testUtils.api.md => report-testUtils.api.md} (100%) rename packages/backend-plugin-api/{api-report.api.md => report.api.md} (100%) rename packages/backend-test-utils/{api-report.api.md => report.api.md} (100%) rename packages/catalog-client/{api-report.api.md => report.api.md} (100%) rename packages/catalog-model/{api-report-alpha.api.md => report-alpha.api.md} (100%) rename packages/catalog-model/{api-report.api.md => report.api.md} (100%) rename packages/cli-common/{api-report.api.md => report.api.md} (100%) rename packages/cli-node/{api-report.api.md => report.api.md} (100%) rename packages/config-loader/{api-report.api.md => report.api.md} (97%) rename packages/config/{api-report.api.md => report.api.md} (100%) rename packages/core-app-api/{api-report.api.md => report.api.md} (100%) rename packages/core-compat-api/{api-report.api.md => report.api.md} (100%) rename packages/core-components/{api-report-alpha.api.md => report-alpha.api.md} (100%) rename packages/core-components/{api-report-testUtils.api.md => report-testUtils.api.md} (100%) rename packages/core-components/{api-report.api.md => report.api.md} (100%) rename packages/core-plugin-api/{api-report-alpha.api.md => report-alpha.api.md} (100%) rename packages/core-plugin-api/{api-report.api.md => report.api.md} (100%) rename packages/dev-utils/{api-report.api.md => report.api.md} (100%) rename packages/e2e-test-utils/{api-report-playwright.api.md => report-playwright.api.md} (100%) rename packages/errors/{api-report.api.md => report.api.md} (100%) rename packages/frontend-app-api/{api-report.api.md => report.api.md} (100%) rename packages/frontend-plugin-api/{api-report.api.md => report.api.md} (60%) rename packages/frontend-test-utils/{api-report.api.md => report.api.md} (100%) rename packages/integration-aws-node/{api-report.api.md => report.api.md} (100%) rename packages/integration-react/{api-report.api.md => report.api.md} (100%) rename packages/integration/{api-report.api.md => report.api.md} (100%) rename packages/release-manifests/{api-report.api.md => report.api.md} (100%) rename packages/test-utils/{api-report-alpha.api.md => report-alpha.api.md} (100%) rename packages/test-utils/{api-report.api.md => report.api.md} (100%) rename packages/theme/{api-report.api.md => report.api.md} (100%) rename packages/types/{api-report.api.md => report.api.md} (100%) rename packages/version-bridge/{api-report.api.md => report.api.md} (100%) rename packages/yarn-plugin/{api-report.api.md => report.api.md} (100%) rename plugins/api-docs-module-protoc-gen-doc/{api-report.api.md => report.api.md} (100%) rename plugins/api-docs/{api-report-alpha.api.md => report-alpha.api.md} (100%) rename plugins/api-docs/{api-report.api.md => report.api.md} (100%) rename plugins/app-backend/{api-report-alpha.api.md => report-alpha.api.md} (100%) rename plugins/app-backend/{api-report.api.md => report.api.md} (100%) rename plugins/app-node/{api-report.api.md => report.api.md} (100%) rename plugins/app-visualizer/{api-report.api.md => report.api.md} (97%) rename plugins/auth-backend-module-atlassian-provider/{api-report.api.md => report.api.md} (100%) rename plugins/auth-backend-module-aws-alb-provider/{api-report.api.md => report.api.md} (100%) rename plugins/auth-backend-module-azure-easyauth-provider/{api-report.api.md => report.api.md} (100%) rename plugins/auth-backend-module-bitbucket-provider/{api-report.api.md => report.api.md} (100%) rename plugins/auth-backend-module-cloudflare-access-provider/{api-report.api.md => report.api.md} (100%) rename plugins/auth-backend-module-gcp-iap-provider/{api-report.api.md => report.api.md} (100%) rename plugins/auth-backend-module-github-provider/{api-report.api.md => report.api.md} (100%) rename plugins/auth-backend-module-gitlab-provider/{api-report.api.md => report.api.md} (100%) rename plugins/auth-backend-module-google-provider/{api-report.api.md => report.api.md} (100%) rename plugins/auth-backend-module-guest-provider/{api-report.api.md => report.api.md} (100%) rename plugins/auth-backend-module-microsoft-provider/{api-report.api.md => report.api.md} (100%) rename plugins/auth-backend-module-oauth2-provider/{api-report.api.md => report.api.md} (100%) rename plugins/auth-backend-module-oauth2-proxy-provider/{api-report.api.md => report.api.md} (100%) rename plugins/auth-backend-module-oidc-provider/{api-report.api.md => report.api.md} (100%) rename plugins/auth-backend-module-okta-provider/{api-report.api.md => report.api.md} (100%) rename plugins/auth-backend-module-onelogin-provider/{api-report.api.md => report.api.md} (100%) rename plugins/auth-backend-module-pinniped-provider/{api-report.api.md => report.api.md} (100%) rename plugins/auth-backend-module-vmware-cloud-provider/{api-report.api.md => report.api.md} (100%) rename plugins/auth-backend/{api-report.api.md => report.api.md} (100%) rename plugins/auth-node/{api-report.api.md => report.api.md} (100%) rename plugins/auth-react/{api-report.api.md => report.api.md} (100%) rename plugins/bitbucket-cloud-common/{api-report.api.md => report.api.md} (100%) rename plugins/catalog-backend-module-aws/{api-report-alpha.api.md => report-alpha.api.md} (100%) rename plugins/catalog-backend-module-aws/{api-report.api.md => report.api.md} (100%) rename plugins/catalog-backend-module-azure/{api-report-alpha.api.md => report-alpha.api.md} (100%) rename plugins/catalog-backend-module-azure/{api-report.api.md => report.api.md} (100%) rename plugins/catalog-backend-module-backstage-openapi/{api-report.api.md => report.api.md} (100%) rename plugins/catalog-backend-module-bitbucket-cloud/{api-report-alpha.api.md => report-alpha.api.md} (100%) rename plugins/catalog-backend-module-bitbucket-cloud/{api-report.api.md => report.api.md} (100%) rename plugins/catalog-backend-module-bitbucket-server/{api-report-alpha.api.md => report-alpha.api.md} (100%) rename plugins/catalog-backend-module-bitbucket-server/{api-report.api.md => report.api.md} (100%) rename plugins/catalog-backend-module-gcp/{api-report-alpha.api.md => report-alpha.api.md} (100%) rename plugins/catalog-backend-module-gcp/{api-report.api.md => report.api.md} (100%) rename plugins/catalog-backend-module-gerrit/{api-report-alpha.api.md => report-alpha.api.md} (100%) rename plugins/catalog-backend-module-gerrit/{api-report.api.md => report.api.md} (100%) rename plugins/catalog-backend-module-github-org/{api-report.api.md => report.api.md} (100%) rename plugins/catalog-backend-module-github/{api-report-alpha.api.md => report-alpha.api.md} (100%) rename plugins/catalog-backend-module-github/{api-report.api.md => report.api.md} (100%) rename plugins/catalog-backend-module-gitlab-org/{api-report.api.md => report.api.md} (100%) rename plugins/catalog-backend-module-gitlab/{api-report-alpha.api.md => report-alpha.api.md} (100%) rename plugins/catalog-backend-module-gitlab/{api-report.api.md => report.api.md} (100%) rename plugins/catalog-backend-module-incremental-ingestion/{api-report-alpha.api.md => report-alpha.api.md} (100%) rename plugins/catalog-backend-module-incremental-ingestion/{api-report.api.md => report.api.md} (100%) rename plugins/catalog-backend-module-ldap/{api-report.api.md => report.api.md} (100%) rename plugins/catalog-backend-module-logs/{api-report.api.md => report.api.md} (100%) rename plugins/catalog-backend-module-msgraph/{api-report-alpha.api.md => report-alpha.api.md} (100%) rename plugins/catalog-backend-module-msgraph/{api-report.api.md => report.api.md} (100%) rename plugins/catalog-backend-module-openapi/{api-report.api.md => report.api.md} (100%) rename plugins/catalog-backend-module-puppetdb/{api-report-alpha.api.md => report-alpha.api.md} (100%) rename plugins/catalog-backend-module-puppetdb/{api-report.api.md => report.api.md} (100%) rename plugins/catalog-backend-module-scaffolder-entity-model/{api-report.api.md => report.api.md} (100%) rename plugins/catalog-backend-module-unprocessed/{api-report.api.md => report.api.md} (100%) rename plugins/catalog-backend/{api-report-alpha.api.md => report-alpha.api.md} (100%) rename plugins/catalog-backend/{api-report.api.md => report.api.md} (100%) rename plugins/catalog-common/{api-report-alpha.api.md => report-alpha.api.md} (100%) rename plugins/catalog-common/{api-report.api.md => report.api.md} (100%) rename plugins/catalog-graph/{api-report-alpha.api.md => report-alpha.api.md} (100%) rename plugins/catalog-graph/{api-report.api.md => report.api.md} (100%) rename plugins/catalog-import/{api-report-alpha.api.md => report-alpha.api.md} (100%) rename plugins/catalog-import/{api-report.api.md => report.api.md} (100%) rename plugins/catalog-node/{api-report-alpha.api.md => report-alpha.api.md} (100%) rename plugins/catalog-node/{api-report.api.md => report.api.md} (100%) rename plugins/catalog-react/{api-report-alpha.api.md => report-alpha.api.md} (100%) rename plugins/catalog-react/{api-report.api.md => report.api.md} (100%) rename plugins/catalog-unprocessed-entities-common/{api-report.api.md => report.api.md} (100%) rename plugins/catalog-unprocessed-entities/{api-report.api.md => report.api.md} (100%) rename plugins/catalog/{api-report-alpha.api.md => report-alpha.api.md} (100%) rename plugins/catalog/{api-report.api.md => report.api.md} (100%) rename plugins/config-schema/{api-report.api.md => report.api.md} (100%) rename plugins/devtools-backend/{api-report.api.md => report.api.md} (100%) rename plugins/devtools-common/{api-report.api.md => report.api.md} (100%) rename plugins/devtools/{api-report-alpha.api.md => report-alpha.api.md} (97%) rename plugins/devtools/{api-report.api.md => report.api.md} (100%) rename plugins/events-backend-module-aws-sqs/{api-report-alpha.api.md => report-alpha.api.md} (100%) rename plugins/events-backend-module-aws-sqs/{api-report.api.md => report.api.md} (100%) rename plugins/events-backend-module-azure/{api-report-alpha.api.md => report-alpha.api.md} (100%) rename plugins/events-backend-module-azure/{api-report.api.md => report.api.md} (100%) rename plugins/events-backend-module-bitbucket-cloud/{api-report-alpha.api.md => report-alpha.api.md} (100%) rename plugins/events-backend-module-bitbucket-cloud/{api-report.api.md => report.api.md} (100%) rename plugins/events-backend-module-gerrit/{api-report-alpha.api.md => report-alpha.api.md} (100%) rename plugins/events-backend-module-gerrit/{api-report.api.md => report.api.md} (100%) rename plugins/events-backend-module-github/{api-report-alpha.api.md => report-alpha.api.md} (100%) rename plugins/events-backend-module-github/{api-report.api.md => report.api.md} (100%) rename plugins/events-backend-module-gitlab/{api-report-alpha.api.md => report-alpha.api.md} (100%) rename plugins/events-backend-module-gitlab/{api-report.api.md => report.api.md} (100%) rename plugins/events-backend-test-utils/{api-report.api.md => report.api.md} (100%) rename plugins/events-backend/{api-report-alpha.api.md => report-alpha.api.md} (100%) rename plugins/events-backend/{api-report.api.md => report.api.md} (100%) rename plugins/events-node/{api-report-alpha.api.md => report-alpha.api.md} (100%) rename plugins/events-node/{api-report.api.md => report.api.md} (100%) rename plugins/example-todo-list-backend/{api-report.api.md => report.api.md} (100%) rename plugins/example-todo-list-common/{api-report.api.md => report.api.md} (100%) rename plugins/example-todo-list/{api-report.api.md => report.api.md} (100%) rename plugins/home-react/{api-report.api.md => report.api.md} (100%) rename plugins/home/{api-report-alpha.api.md => report-alpha.api.md} (100%) rename plugins/home/{api-report.api.md => report.api.md} (100%) rename plugins/kubernetes-backend/{api-report-alpha.api.md => report-alpha.api.md} (100%) rename plugins/kubernetes-backend/{api-report.api.md => report.api.md} (100%) rename plugins/kubernetes-cluster/{api-report.api.md => report.api.md} (100%) rename plugins/kubernetes-common/{api-report.api.md => report.api.md} (100%) rename plugins/kubernetes-node/{api-report.api.md => report.api.md} (100%) rename plugins/kubernetes-react/{api-report.api.md => report.api.md} (100%) rename plugins/kubernetes/{api-report-alpha.md => report-alpha.api.md} (97%) rename plugins/kubernetes/{api-report.api.md => report.api.md} (100%) rename plugins/notifications-backend-module-email/{api-report.api.md => report.api.md} (100%) rename plugins/notifications-backend/{api-report.api.md => report.api.md} (100%) rename plugins/notifications-common/{api-report.api.md => report.api.md} (100%) rename plugins/notifications-node/{api-report.api.md => report.api.md} (100%) rename plugins/notifications/{api-report.api.md => report.api.md} (100%) rename plugins/org-react/{api-report.api.md => report.api.md} (100%) rename plugins/org/{api-report-alpha.api.md => report-alpha.api.md} (100%) rename plugins/org/{api-report.api.md => report.api.md} (100%) rename plugins/permission-backend-module-policy-allow-all/{api-report.api.md => report.api.md} (100%) rename plugins/permission-backend/{api-report-alpha.api.md => report-alpha.api.md} (100%) rename plugins/permission-backend/{api-report.api.md => report.api.md} (100%) rename plugins/permission-common/{api-report.api.md => report.api.md} (100%) rename plugins/permission-node/{api-report-alpha.api.md => report-alpha.api.md} (100%) rename plugins/permission-node/{api-report.api.md => report.api.md} (100%) rename plugins/permission-react/{api-report.api.md => report.api.md} (100%) rename plugins/proxy-backend/{api-report-alpha.api.md => report-alpha.api.md} (100%) rename plugins/proxy-backend/{api-report.api.md => report.api.md} (100%) rename plugins/scaffolder-backend-module-azure/{api-report.api.md => report.api.md} (100%) rename plugins/scaffolder-backend-module-bitbucket-cloud/{api-report.api.md => report.api.md} (100%) rename plugins/scaffolder-backend-module-bitbucket-server/{api-report.api.md => report.api.md} (100%) rename plugins/scaffolder-backend-module-bitbucket/{api-report.api.md => report.api.md} (90%) rename plugins/scaffolder-backend-module-confluence-to-markdown/{api-report.api.md => report.api.md} (100%) rename plugins/scaffolder-backend-module-cookiecutter/{api-report.api.md => report.api.md} (100%) rename plugins/scaffolder-backend-module-gcp/{api-report.api.md => report.api.md} (100%) rename plugins/scaffolder-backend-module-gerrit/{api-report.api.md => report.api.md} (100%) rename plugins/scaffolder-backend-module-gitea/{api-report.api.md => report.api.md} (100%) rename plugins/scaffolder-backend-module-github/{api-report.api.md => report.api.md} (100%) rename plugins/scaffolder-backend-module-gitlab/{api-report.api.md => report.api.md} (100%) rename plugins/scaffolder-backend-module-notifications/{api-report.api.md => report.api.md} (100%) rename plugins/scaffolder-backend-module-rails/{api-report.api.md => report.api.md} (100%) rename plugins/scaffolder-backend-module-sentry/{api-report.api.md => report.api.md} (100%) rename plugins/scaffolder-backend-module-yeoman/{api-report.api.md => report.api.md} (100%) rename plugins/scaffolder-backend/{api-report-alpha.api.md => report-alpha.api.md} (100%) rename plugins/scaffolder-backend/{api-report.api.md => report.api.md} (96%) rename plugins/scaffolder-common/{api-report-alpha.api.md => report-alpha.api.md} (100%) rename plugins/scaffolder-common/{api-report.api.md => report.api.md} (100%) rename plugins/scaffolder-node-test-utils/{api-report.api.md => report.api.md} (100%) rename plugins/scaffolder-node/{api-report-alpha.api.md => report-alpha.api.md} (100%) rename plugins/scaffolder-node/{api-report.api.md => report.api.md} (100%) rename plugins/scaffolder-react/{api-report-alpha.api.md => report-alpha.api.md} (100%) rename plugins/scaffolder-react/{api-report.api.md => report.api.md} (100%) rename plugins/scaffolder/{api-report-alpha.api.md => report-alpha.api.md} (100%) rename plugins/scaffolder/{api-report.api.md => report.api.md} (100%) rename plugins/search-backend-module-catalog/{api-report-alpha.api.md => report-alpha.api.md} (100%) rename plugins/search-backend-module-catalog/{api-report.api.md => report.api.md} (100%) rename plugins/search-backend-module-elasticsearch/{api-report-alpha.api.md => report-alpha.api.md} (100%) rename plugins/search-backend-module-elasticsearch/{api-report.api.md => report.api.md} (100%) rename plugins/search-backend-module-explore/{api-report-alpha.api.md => report-alpha.api.md} (100%) rename plugins/search-backend-module-explore/{api-report.api.md => report.api.md} (100%) rename plugins/search-backend-module-pg/{api-report-alpha.api.md => report-alpha.api.md} (100%) rename plugins/search-backend-module-pg/{api-report.api.md => report.api.md} (100%) rename plugins/search-backend-module-stack-overflow-collator/{api-report.api.md => report.api.md} (100%) rename plugins/search-backend-module-techdocs/{api-report-alpha.api.md => report-alpha.api.md} (100%) rename plugins/search-backend-module-techdocs/{api-report.api.md => report.api.md} (100%) rename plugins/search-backend-node/{api-report-alpha.api.md => report-alpha.api.md} (100%) rename plugins/search-backend-node/{api-report.api.md => report.api.md} (100%) rename plugins/search-backend/{api-report-alpha.api.md => report-alpha.api.md} (100%) rename plugins/search-backend/{api-report.api.md => report.api.md} (100%) rename plugins/search-common/{api-report.api.md => report.api.md} (100%) rename plugins/search-react/{api-report-alpha.api.md => report-alpha.api.md} (100%) rename plugins/search-react/{api-report.api.md => report.api.md} (100%) rename plugins/search/{api-report-alpha.api.md => report-alpha.api.md} (97%) rename plugins/search/{api-report.api.md => report.api.md} (100%) rename plugins/signals-backend/{api-report.api.md => report.api.md} (100%) rename plugins/signals-node/{api-report.api.md => report.api.md} (100%) rename plugins/signals-react/{api-report.api.md => report.api.md} (100%) rename plugins/signals/{api-report.api.md => report.api.md} (100%) rename plugins/techdocs-addons-test-utils/{api-report.api.md => report.api.md} (100%) rename plugins/techdocs-backend/{api-report-alpha.api.md => report-alpha.api.md} (100%) rename plugins/techdocs-backend/{api-report.api.md => report.api.md} (100%) rename plugins/techdocs-module-addons-contrib/{api-report.api.md => report.api.md} (100%) rename plugins/techdocs-node/{api-report.api.md => report.api.md} (100%) rename plugins/techdocs-react/{api-report.api.md => report.api.md} (100%) rename plugins/techdocs/{api-report-alpha.api.md => report-alpha.api.md} (99%) rename plugins/techdocs/{api-report.api.md => report.api.md} (100%) rename plugins/user-settings-backend/{api-report-alpha.api.md => report-alpha.api.md} (100%) rename plugins/user-settings-backend/{api-report.api.md => report.api.md} (100%) rename plugins/user-settings-common/{api-report.api.md => report.api.md} (100%) rename plugins/user-settings/{api-report-alpha.api.md => report-alpha.api.md} (97%) rename plugins/user-settings/{api-report.api.md => report.api.md} (100%) diff --git a/packages/app-defaults/api-report.api.md b/packages/app-defaults/report.api.md similarity index 100% rename from packages/app-defaults/api-report.api.md rename to packages/app-defaults/report.api.md diff --git a/packages/app-next-example-plugin/api-report.api.md b/packages/app-next-example-plugin/report.api.md similarity index 96% rename from packages/app-next-example-plugin/api-report.api.md rename to packages/app-next-example-plugin/report.api.md index ededab5e47..842e58aeb5 100644 --- a/packages/app-next-example-plugin/api-report.api.md +++ b/packages/app-next-example-plugin/report.api.md @@ -55,7 +55,7 @@ export const ExampleSidebarItem: () => React_2.JSX.Element; // Warnings were encountered during analysis: // // src/ExampleSidebarItem.d.ts:3:22 - (ae-undocumented) Missing documentation for "ExampleSidebarItem". -// src/plugin.d.ts:5:22 - (ae-undocumented) Missing documentation for "examplePlugin". +// src/plugin.d.ts:7:22 - (ae-undocumented) Missing documentation for "examplePlugin". // (No @packageDocumentation comment for this package) ``` diff --git a/packages/backend-app-api/api-report-alpha.api.md b/packages/backend-app-api/report-alpha.api.md similarity index 100% rename from packages/backend-app-api/api-report-alpha.api.md rename to packages/backend-app-api/report-alpha.api.md diff --git a/packages/backend-app-api/api-report.api.md b/packages/backend-app-api/report.api.md similarity index 100% rename from packages/backend-app-api/api-report.api.md rename to packages/backend-app-api/report.api.md diff --git a/packages/backend-defaults/api-report-auth.api.md b/packages/backend-defaults/report-auth.api.md similarity index 100% rename from packages/backend-defaults/api-report-auth.api.md rename to packages/backend-defaults/report-auth.api.md diff --git a/packages/backend-defaults/api-report-cache.api.md b/packages/backend-defaults/report-cache.api.md similarity index 100% rename from packages/backend-defaults/api-report-cache.api.md rename to packages/backend-defaults/report-cache.api.md diff --git a/packages/backend-defaults/api-report-database.api.md b/packages/backend-defaults/report-database.api.md similarity index 100% rename from packages/backend-defaults/api-report-database.api.md rename to packages/backend-defaults/report-database.api.md diff --git a/packages/backend-defaults/api-report-discovery.api.md b/packages/backend-defaults/report-discovery.api.md similarity index 100% rename from packages/backend-defaults/api-report-discovery.api.md rename to packages/backend-defaults/report-discovery.api.md diff --git a/packages/backend-defaults/api-report-httpAuth.api.md b/packages/backend-defaults/report-httpAuth.api.md similarity index 100% rename from packages/backend-defaults/api-report-httpAuth.api.md rename to packages/backend-defaults/report-httpAuth.api.md diff --git a/packages/backend-defaults/api-report-httpRouter.api.md b/packages/backend-defaults/report-httpRouter.api.md similarity index 100% rename from packages/backend-defaults/api-report-httpRouter.api.md rename to packages/backend-defaults/report-httpRouter.api.md diff --git a/packages/backend-defaults/api-report-lifecycle.api.md b/packages/backend-defaults/report-lifecycle.api.md similarity index 100% rename from packages/backend-defaults/api-report-lifecycle.api.md rename to packages/backend-defaults/report-lifecycle.api.md diff --git a/packages/backend-defaults/api-report-logger.api.md b/packages/backend-defaults/report-logger.api.md similarity index 100% rename from packages/backend-defaults/api-report-logger.api.md rename to packages/backend-defaults/report-logger.api.md diff --git a/packages/backend-defaults/api-report-permissions.api.md b/packages/backend-defaults/report-permissions.api.md similarity index 100% rename from packages/backend-defaults/api-report-permissions.api.md rename to packages/backend-defaults/report-permissions.api.md diff --git a/packages/backend-defaults/api-report-rootConfig.api.md b/packages/backend-defaults/report-rootConfig.api.md similarity index 100% rename from packages/backend-defaults/api-report-rootConfig.api.md rename to packages/backend-defaults/report-rootConfig.api.md diff --git a/packages/backend-defaults/api-report-rootHealth.api.md b/packages/backend-defaults/report-rootHealth.api.md similarity index 100% rename from packages/backend-defaults/api-report-rootHealth.api.md rename to packages/backend-defaults/report-rootHealth.api.md diff --git a/packages/backend-defaults/api-report-rootHttpRouter.api.md b/packages/backend-defaults/report-rootHttpRouter.api.md similarity index 98% rename from packages/backend-defaults/api-report-rootHttpRouter.api.md rename to packages/backend-defaults/report-rootHttpRouter.api.md index 672844a98e..9a435f5c27 100644 --- a/packages/backend-defaults/api-report-rootHttpRouter.api.md +++ b/packages/backend-defaults/report-rootHttpRouter.api.md @@ -159,6 +159,7 @@ export const rootHttpRouterServiceFactory: (( // src/entrypoints/rootHttpRouter/DefaultRootHttpRouter.d.ts:23:5 - (ae-undocumented) Missing documentation for "create". // src/entrypoints/rootHttpRouter/DefaultRootHttpRouter.d.ts:25:5 - (ae-undocumented) Missing documentation for "use". // src/entrypoints/rootHttpRouter/DefaultRootHttpRouter.d.ts:26:5 - (ae-undocumented) Missing documentation for "handler". +// src/entrypoints/rootHttpRouter/createHealthRouter.d.ts:6:1 - (ae-undocumented) Missing documentation for "createHealthRouter". // src/entrypoints/rootHttpRouter/http/MiddlewareFactory.d.ts:9:5 - (ae-undocumented) Missing documentation for "config". // src/entrypoints/rootHttpRouter/http/MiddlewareFactory.d.ts:10:5 - (ae-undocumented) Missing documentation for "logger". // src/entrypoints/rootHttpRouter/http/types.d.ts:9:5 - (ae-undocumented) Missing documentation for "start". diff --git a/packages/backend-defaults/api-report-rootLifecycle.api.md b/packages/backend-defaults/report-rootLifecycle.api.md similarity index 100% rename from packages/backend-defaults/api-report-rootLifecycle.api.md rename to packages/backend-defaults/report-rootLifecycle.api.md diff --git a/packages/backend-defaults/api-report-rootLogger.api.md b/packages/backend-defaults/report-rootLogger.api.md similarity index 100% rename from packages/backend-defaults/api-report-rootLogger.api.md rename to packages/backend-defaults/report-rootLogger.api.md diff --git a/packages/backend-defaults/api-report-scheduler.api.md b/packages/backend-defaults/report-scheduler.api.md similarity index 100% rename from packages/backend-defaults/api-report-scheduler.api.md rename to packages/backend-defaults/report-scheduler.api.md diff --git a/packages/backend-defaults/api-report-urlReader.api.md b/packages/backend-defaults/report-urlReader.api.md similarity index 100% rename from packages/backend-defaults/api-report-urlReader.api.md rename to packages/backend-defaults/report-urlReader.api.md diff --git a/packages/backend-defaults/api-report-userInfo.api.md b/packages/backend-defaults/report-userInfo.api.md similarity index 100% rename from packages/backend-defaults/api-report-userInfo.api.md rename to packages/backend-defaults/report-userInfo.api.md diff --git a/packages/backend-defaults/api-report.api.md b/packages/backend-defaults/report.api.md similarity index 100% rename from packages/backend-defaults/api-report.api.md rename to packages/backend-defaults/report.api.md diff --git a/packages/backend-dev-utils/api-report.api.md b/packages/backend-dev-utils/report.api.md similarity index 100% rename from packages/backend-dev-utils/api-report.api.md rename to packages/backend-dev-utils/report.api.md diff --git a/packages/backend-dynamic-feature-service/api-report.api.md b/packages/backend-dynamic-feature-service/report.api.md similarity index 100% rename from packages/backend-dynamic-feature-service/api-report.api.md rename to packages/backend-dynamic-feature-service/report.api.md diff --git a/packages/backend-openapi-utils/api-report.api.md b/packages/backend-openapi-utils/report.api.md similarity index 100% rename from packages/backend-openapi-utils/api-report.api.md rename to packages/backend-openapi-utils/report.api.md diff --git a/packages/backend-plugin-api/api-report-alpha.api.md b/packages/backend-plugin-api/report-alpha.api.md similarity index 100% rename from packages/backend-plugin-api/api-report-alpha.api.md rename to packages/backend-plugin-api/report-alpha.api.md diff --git a/packages/backend-plugin-api/api-report-testUtils.api.md b/packages/backend-plugin-api/report-testUtils.api.md similarity index 100% rename from packages/backend-plugin-api/api-report-testUtils.api.md rename to packages/backend-plugin-api/report-testUtils.api.md diff --git a/packages/backend-plugin-api/api-report.api.md b/packages/backend-plugin-api/report.api.md similarity index 100% rename from packages/backend-plugin-api/api-report.api.md rename to packages/backend-plugin-api/report.api.md diff --git a/packages/backend-test-utils/api-report.api.md b/packages/backend-test-utils/report.api.md similarity index 100% rename from packages/backend-test-utils/api-report.api.md rename to packages/backend-test-utils/report.api.md diff --git a/packages/catalog-client/api-report.api.md b/packages/catalog-client/report.api.md similarity index 100% rename from packages/catalog-client/api-report.api.md rename to packages/catalog-client/report.api.md diff --git a/packages/catalog-model/api-report-alpha.api.md b/packages/catalog-model/report-alpha.api.md similarity index 100% rename from packages/catalog-model/api-report-alpha.api.md rename to packages/catalog-model/report-alpha.api.md diff --git a/packages/catalog-model/api-report.api.md b/packages/catalog-model/report.api.md similarity index 100% rename from packages/catalog-model/api-report.api.md rename to packages/catalog-model/report.api.md diff --git a/packages/cli-common/api-report.api.md b/packages/cli-common/report.api.md similarity index 100% rename from packages/cli-common/api-report.api.md rename to packages/cli-common/report.api.md diff --git a/packages/cli-node/api-report.api.md b/packages/cli-node/report.api.md similarity index 100% rename from packages/cli-node/api-report.api.md rename to packages/cli-node/report.api.md diff --git a/packages/config-loader/api-report.api.md b/packages/config-loader/report.api.md similarity index 97% rename from packages/config-loader/api-report.api.md rename to packages/config-loader/report.api.md index 42b6dcab96..0bb88a67b3 100644 --- a/packages/config-loader/api-report.api.md +++ b/packages/config-loader/report.api.md @@ -293,9 +293,9 @@ export type TransformFunc = ( // src/sources/ConfigSources.d.ts:42:5 - (ae-undocumented) Missing documentation for "watch". // src/sources/ConfigSources.d.ts:43:5 - (ae-undocumented) Missing documentation for "rootDir". // src/sources/ConfigSources.d.ts:44:5 - (ae-undocumented) Missing documentation for "remote". -// src/sources/ConfigSources.d.ts:60:5 - (ae-undocumented) Missing documentation for "targets". -// src/sources/ConfigSources.d.ts:68:5 - (ae-undocumented) Missing documentation for "argv". -// src/sources/ConfigSources.d.ts:69:5 - (ae-undocumented) Missing documentation for "env". +// src/sources/ConfigSources.d.ts:65:5 - (ae-undocumented) Missing documentation for "targets". +// src/sources/ConfigSources.d.ts:73:5 - (ae-undocumented) Missing documentation for "argv". +// src/sources/ConfigSources.d.ts:74:5 - (ae-undocumented) Missing documentation for "env". // src/sources/EnvConfigSource.d.ts:46:5 - (ae-undocumented) Missing documentation for "readConfigData". // src/sources/EnvConfigSource.d.ts:47:5 - (ae-undocumented) Missing documentation for "toString". // src/sources/FileConfigSource.d.ts:40:5 - (ae-undocumented) Missing documentation for "readConfigData". diff --git a/packages/config/api-report.api.md b/packages/config/report.api.md similarity index 100% rename from packages/config/api-report.api.md rename to packages/config/report.api.md diff --git a/packages/core-app-api/api-report.api.md b/packages/core-app-api/report.api.md similarity index 100% rename from packages/core-app-api/api-report.api.md rename to packages/core-app-api/report.api.md diff --git a/packages/core-compat-api/api-report.api.md b/packages/core-compat-api/report.api.md similarity index 100% rename from packages/core-compat-api/api-report.api.md rename to packages/core-compat-api/report.api.md diff --git a/packages/core-components/api-report-alpha.api.md b/packages/core-components/report-alpha.api.md similarity index 100% rename from packages/core-components/api-report-alpha.api.md rename to packages/core-components/report-alpha.api.md diff --git a/packages/core-components/api-report-testUtils.api.md b/packages/core-components/report-testUtils.api.md similarity index 100% rename from packages/core-components/api-report-testUtils.api.md rename to packages/core-components/report-testUtils.api.md diff --git a/packages/core-components/api-report.api.md b/packages/core-components/report.api.md similarity index 100% rename from packages/core-components/api-report.api.md rename to packages/core-components/report.api.md diff --git a/packages/core-plugin-api/api-report-alpha.api.md b/packages/core-plugin-api/report-alpha.api.md similarity index 100% rename from packages/core-plugin-api/api-report-alpha.api.md rename to packages/core-plugin-api/report-alpha.api.md diff --git a/packages/core-plugin-api/api-report.api.md b/packages/core-plugin-api/report.api.md similarity index 100% rename from packages/core-plugin-api/api-report.api.md rename to packages/core-plugin-api/report.api.md diff --git a/packages/dev-utils/api-report.api.md b/packages/dev-utils/report.api.md similarity index 100% rename from packages/dev-utils/api-report.api.md rename to packages/dev-utils/report.api.md diff --git a/packages/e2e-test-utils/api-report-playwright.api.md b/packages/e2e-test-utils/report-playwright.api.md similarity index 100% rename from packages/e2e-test-utils/api-report-playwright.api.md rename to packages/e2e-test-utils/report-playwright.api.md diff --git a/packages/errors/api-report.api.md b/packages/errors/report.api.md similarity index 100% rename from packages/errors/api-report.api.md rename to packages/errors/report.api.md diff --git a/packages/frontend-app-api/api-report.api.md b/packages/frontend-app-api/report.api.md similarity index 100% rename from packages/frontend-app-api/api-report.api.md rename to packages/frontend-app-api/report.api.md diff --git a/packages/frontend-plugin-api/api-report.api.md b/packages/frontend-plugin-api/report.api.md similarity index 60% rename from packages/frontend-plugin-api/api-report.api.md rename to packages/frontend-plugin-api/report.api.md index 9afcb1b91e..24aa1d5b52 100644 --- a/packages/frontend-plugin-api/api-report.api.md +++ b/packages/frontend-plugin-api/report.api.md @@ -89,6 +89,8 @@ import { useTranslationRef } from '@backstage/core-plugin-api/alpha'; import { vmwareCloudAuthApiRef } from '@backstage/core-plugin-api'; import { withApis } from '@backstage/core-plugin-api'; import { z } from 'zod'; +import { ZodSchema } from 'zod'; +import { ZodTypeDef } from 'zod'; export { AlertApi }; @@ -146,13 +148,26 @@ export { AnyApiFactory }; export { AnyApiRef }; // @public (undocumented) -export type AnyExtensionDataRef = ExtensionDataRef< - unknown, - string, - { - optional?: true; - } ->; +export type AnyExtensionDataMap = { + [name in string]: ExtensionDataRef< + unknown, + string, + { + optional?: true; + } + >; +}; + +// @public (undocumented) +export type AnyExtensionInputMap = { + [inputName in string]: ExtensionInput< + AnyExtensionDataMap, + { + optional: boolean; + singleton: boolean; + } + >; +}; // @public (undocumented) export type AnyExternalRoutes = { @@ -171,26 +186,6 @@ export type AnyRoutes = { [name in string]: RouteRef | SubRouteRef; }; -// @public -export const ApiBlueprint: ExtensionBlueprint<{ - kind: 'api'; - name: undefined; - params: { - factory: AnyApiFactory; - }; - output: ConfigurableExtensionDataRef; - inputs: {}; - config: {}; - configInput: {}; - dataRefs: { - factory: ConfigurableExtensionDataRef< - AnyApiFactory, - 'core.api.factory', - {} - >; - }; -}>; - export { ApiFactory }; export { ApiHolder }; @@ -239,51 +234,9 @@ export interface AppNodeSpec { // (undocumented) readonly id: string; // (undocumented) - readonly source?: FrontendPlugin; + readonly source?: BackstagePlugin; } -// @public -export const AppRootElementBlueprint: ExtensionBlueprint<{ - kind: 'app-root-element'; - name: undefined; - params: { - element: JSX.Element | (() => JSX.Element); - }; - output: ConfigurableExtensionDataRef; - inputs: {}; - config: {}; - configInput: {}; - dataRefs: never; -}>; - -// @public -export const AppRootWrapperBlueprint: ExtensionBlueprint<{ - kind: 'app-root-wrapper'; - name: undefined; - params: { - Component: ComponentType>; - }; - output: ConfigurableExtensionDataRef< - React_2.ComponentType<{ - children?: React_2.ReactNode; - }>, - 'app.root.wrapper', - {} - >; - inputs: {}; - config: {}; - configInput: {}; - dataRefs: { - component: ConfigurableExtensionDataRef< - React_2.ComponentType<{ - children?: React_2.ReactNode; - }>, - 'app.root.wrapper', - {} - >; - }; -}>; - export { AppTheme }; export { AppThemeApi }; @@ -317,6 +270,21 @@ export { BackstageIdentityApi }; export { BackstageIdentityResponse }; +// @public (undocumented) +export interface BackstagePlugin< + Routes extends AnyRoutes = AnyRoutes, + ExternalRoutes extends AnyExternalRoutes = AnyExternalRoutes, +> { + // (undocumented) + readonly $$type: '@backstage/BackstagePlugin'; + // (undocumented) + readonly externalRoutes: ExternalRoutes; + // (undocumented) + readonly id: string; + // (undocumented) + readonly routes: Routes; +} + export { BackstageUserIdentity }; export { bitbucketAuthApiRef }; @@ -350,19 +318,17 @@ export { configApiRef }; // @public (undocumented) export interface ConfigurableExtensionDataRef< - TData, TId extends string, + TData, TConfig extends { optional?: true; } = {}, > extends ExtensionDataRef { - // (undocumented) - (t: TData): ExtensionDataValue; // (undocumented) optional(): ConfigurableExtensionDataRef< - TData, TId, - TConfig & { + TData, + TData & { optional: true; } >; @@ -377,7 +343,7 @@ export const coreComponentRefs: { // @public (undocumented) export type CoreErrorBoundaryFallbackProps = { - plugin?: FrontendPlugin; + plugin?: BackstagePlugin; error: Error; resetError: () => void; }; @@ -385,14 +351,14 @@ export type CoreErrorBoundaryFallbackProps = { // @public (undocumented) export const coreExtensionData: { reactElement: ConfigurableExtensionDataRef< - JSX_2.Element, 'core.reactElement', + JSX_2.Element, {} >; - routePath: ConfigurableExtensionDataRef; + routePath: ConfigurableExtensionDataRef<'core.routing.path', string, {}>; routeRef: ConfigurableExtensionDataRef< - RouteRef, 'core.routing.ref', + RouteRef, {} >; }; @@ -405,56 +371,133 @@ export type CoreNotFoundErrorPageProps = { // @public (undocumented) export type CoreProgressProps = {}; +// @public (undocumented) +export function createApiExtension< + TConfig extends {}, + TInputs extends AnyExtensionInputMap, +>( + options: ( + | { + api: AnyApiRef; + factory: (options: { + config: TConfig; + inputs: Expand>; + }) => AnyApiFactory; + } + | { + factory: AnyApiFactory; + } + ) & { + configSchema?: PortableSchema; + inputs?: TInputs; + }, +): ExtensionDefinition; + +// @public (undocumented) +export namespace createApiExtension { + const // (undocumented) + factoryDataRef: ConfigurableExtensionDataRef< + 'core.api.factory', + AnyApiFactory, + {} + >; +} + export { createApiFactory }; export { createApiRef }; +// @public +export function createAppRootElementExtension< + TConfig extends {}, + TInputs extends AnyExtensionInputMap, +>(options: { + namespace?: string; + name?: string; + attachTo?: { + id: string; + input: string; + }; + configSchema?: PortableSchema; + disabled?: boolean; + inputs?: TInputs; + element: + | JSX_2.Element + | ((options: { + inputs: Expand>; + config: TConfig; + }) => JSX_2.Element); +}): ExtensionDefinition; + +// @public +export function createAppRootWrapperExtension< + TConfig extends {}, + TInputs extends AnyExtensionInputMap, +>(options: { + namespace?: string; + name?: string; + attachTo?: { + id: string; + input: string; + }; + configSchema?: PortableSchema; + disabled?: boolean; + inputs?: TInputs; + Component: ComponentType< + PropsWithChildren<{ + inputs: Expand>; + config: TConfig; + }> + >; +}): ExtensionDefinition; + // @public (undocumented) -export function createComponentExtension(options: { +export namespace createAppRootWrapperExtension { + const // (undocumented) + componentDataRef: ConfigurableExtensionDataRef< + 'app.root.wrapper', + React_2.ComponentType<{ + children?: React_2.ReactNode; + }>, + {} + >; +} + +// @public (undocumented) +export function createComponentExtension< + TProps extends {}, + TConfig extends {}, + TInputs extends AnyExtensionInputMap, +>(options: { ref: ComponentRef; name?: string; disabled?: boolean; + inputs?: TInputs; + configSchema?: PortableSchema; loader: | { - lazy: () => Promise>; + lazy: (values: { + config: TConfig; + inputs: Expand>; + }) => Promise>; } | { - sync: () => ComponentType; + sync: (values: { + config: TConfig; + inputs: Expand>; + }) => ComponentType; }; -}): ExtensionDefinition<{ - config: {}; - configInput: {}; - output: ConfigurableExtensionDataRef< - { - ref: ComponentRef; - impl: ComponentType; - }, - 'core.component.component', - {} - >; - inputs: { - [x: string]: ExtensionInput< - AnyExtensionDataRef, - { - optional: boolean; - singleton: boolean; - } - >; - }; - params: never; - kind: 'component'; - name: string; -}>; +}): ExtensionDefinition; // @public (undocumented) export namespace createComponentExtension { const // (undocumented) componentDataRef: ConfigurableExtensionDataRef< + 'core.component.component', { ref: ComponentRef; impl: ComponentType; }, - 'core.component.component', {} >; } @@ -466,189 +509,142 @@ export function createComponentRef(options: { // @public (undocumented) export function createExtension< - UOutput extends AnyExtensionDataRef, - TInputs extends { - [inputName in string]: ExtensionInput< - AnyExtensionDataRef, - { - optional: boolean; - singleton: boolean; - } - >; - }, + TOutput extends AnyExtensionDataMap, + TInputs extends AnyExtensionInputMap, + TConfig, + TConfigInput, TConfigSchema extends { [key: string]: (zImpl: typeof z) => z.ZodType; }, - UFactoryOutput extends ExtensionDataValue, - const TKind extends string | undefined = undefined, - const TName extends string | undefined = undefined, >( options: CreateExtensionOptions< - TKind, - TName, - UOutput, + TOutput, TInputs, - TConfigSchema, - UFactoryOutput + TConfig, + TConfigInput, + TConfigSchema >, -): ExtensionDefinition<{ - config: string extends keyof TConfigSchema - ? {} - : { - [key in keyof TConfigSchema]: z.infer>; - }; - configInput: string extends keyof TConfigSchema - ? {} - : z.input< - z.ZodObject<{ - [key in keyof TConfigSchema]: ReturnType; - }> - >; - output: UOutput; - inputs: TInputs; - params: never; - kind: string | undefined extends TKind ? undefined : TKind; - name: string | undefined extends TName ? undefined : TName; -}>; +): ExtensionDefinition< + TConfig & + (string extends keyof TConfigSchema + ? {} + : { + [key in keyof TConfigSchema]: z.infer>; + }), + TConfigInput & + (string extends keyof TConfigSchema + ? {} + : z.input< + z.ZodObject<{ + [key in keyof TConfigSchema]: ReturnType; + }> + >) +>; // @public export function createExtensionBlueprint< - TParams extends object, - UOutput extends AnyExtensionDataRef, - TInputs extends { - [inputName in string]: ExtensionInput< - AnyExtensionDataRef, - { - optional: boolean; - singleton: boolean; - } - >; - }, + TParams, + TInputs extends AnyExtensionInputMap, + TOutput extends AnyExtensionDataMap, TConfigSchema extends { [key in string]: (zImpl: typeof z) => z.ZodType; }, - UFactoryOutput extends ExtensionDataValue, - TKind extends string, - TName extends string | undefined = undefined, - TDataRefs extends { - [name in string]: AnyExtensionDataRef; - } = never, + TDataRefs extends AnyExtensionDataMap = never, >( options: CreateExtensionBlueprintOptions< - TKind, - TName, TParams, - UOutput, TInputs, + TOutput, TConfigSchema, - UFactoryOutput, TDataRefs >, -): ExtensionBlueprint<{ - kind: TKind; - name: TName; - params: TParams; - output: UOutput; - inputs: string extends keyof TInputs ? {} : TInputs; - config: string extends keyof TConfigSchema +): ExtensionBlueprint< + TParams, + TInputs, + TOutput, + string extends keyof TConfigSchema ? {} : { [key in keyof TConfigSchema]: z.infer>; - }; - configInput: string extends keyof TConfigSchema + }, + string extends keyof TConfigSchema ? {} : z.input< z.ZodObject<{ [key in keyof TConfigSchema]: ReturnType; }> - >; - dataRefs: TDataRefs; -}>; + >, + TDataRefs +>; // @public (undocumented) -export type CreateExtensionBlueprintOptions< - TKind extends string, - TName extends string | undefined, +export interface CreateExtensionBlueprintOptions< TParams, - UOutput extends AnyExtensionDataRef, - TInputs extends { - [inputName in string]: ExtensionInput< - AnyExtensionDataRef, - { - optional: boolean; - singleton: boolean; - } - >; - }, + TInputs extends AnyExtensionInputMap, + TOutput extends AnyExtensionDataMap, TConfigSchema extends { [key in string]: (zImpl: typeof z) => z.ZodType; }, - UFactoryOutput extends ExtensionDataValue, - TDataRefs extends { - [name in string]: AnyExtensionDataRef; - }, -> = { - kind: TKind; + TDataRefs extends AnyExtensionDataMap, +> { + // (undocumented) attachTo: { id: string; input: string; }; - disabled?: boolean; - inputs?: TInputs; - output: Array; - name?: TName; + // (undocumented) config?: { schema: TConfigSchema; }; + // (undocumented) + dataRefs?: TDataRefs; + // (undocumented) + disabled?: boolean; + // (undocumented) factory( params: TParams, context: { node: AppNode; - apis: ApiHolder; config: { [key in keyof TConfigSchema]: z.infer>; }; inputs: Expand>; }, - ): Iterable; - dataRefs?: TDataRefs; -} & VerifyExtensionFactoryOutput; + ): Expand>; + // (undocumented) + inputs?: TInputs; + // (undocumented) + kind: string; + // (undocumented) + namespace?: string; + // (undocumented) + output: TOutput; +} // @public @deprecated (undocumented) export function createExtensionDataRef( id: string, -): ConfigurableExtensionDataRef; +): ConfigurableExtensionDataRef; // @public (undocumented) export function createExtensionDataRef(): { with(options: { id: TId; - }): ConfigurableExtensionDataRef; + }): ConfigurableExtensionDataRef; }; // @public (undocumented) export function createExtensionInput< - UExtensionData extends ExtensionDataRef< - unknown, - string, - { - optional?: true; - } - >, + TExtensionData extends AnyExtensionDataMap, TConfig extends { singleton?: boolean; optional?: boolean; }, >( - extensionData: Array, - config?: TConfig & { - replaces?: Array<{ - id: string; - input: string; - }>; - }, + extensionData: TExtensionData, + config?: TConfig, ): ExtensionInput< - UExtensionData, + TExtensionData, { singleton: TConfig['singleton'] extends true ? true : false; optional: TConfig['optional'] extends true ? true : false; @@ -656,45 +652,57 @@ export function createExtensionInput< >; // @public (undocumented) -export type CreateExtensionOptions< - TKind extends string | undefined, - TName extends string | undefined, - UOutput extends AnyExtensionDataRef, - TInputs extends { - [inputName in string]: ExtensionInput< - AnyExtensionDataRef, - { - optional: boolean; - singleton: boolean; - } - >; - }, +export interface CreateExtensionOptions< + TOutput extends AnyExtensionDataMap, + TInputs extends AnyExtensionInputMap, + TConfig, + TConfigInput, TConfigSchema extends { [key: string]: (zImpl: typeof z) => z.ZodType; }, - UFactoryOutput extends ExtensionDataValue, -> = { - kind?: TKind; - name?: TName; +> { + // (undocumented) attachTo: { id: string; input: string; }; - disabled?: boolean; - inputs?: TInputs; - output: Array; + // (undocumented) config?: { schema: TConfigSchema; }; + // @deprecated (undocumented) + configSchema?: PortableSchema; + // (undocumented) + disabled?: boolean; + // (undocumented) factory(context: { node: AppNode; - apis: ApiHolder; - config: { - [key in keyof TConfigSchema]: z.infer>; - }; + config: TConfig & + (string extends keyof TConfigSchema + ? {} + : { + [key in keyof TConfigSchema]: z.infer< + ReturnType + >; + }); inputs: Expand>; - }): Iterable; -} & VerifyExtensionFactoryOutput; + }): Expand>; + // (undocumented) + inputs?: TInputs; + // (undocumented) + kind?: string; + // (undocumented) + name?: string; + // (undocumented) + namespace?: string; + // (undocumented) + output: TOutput; +} + +// @public (undocumented) +export function createExtensionOverrides( + options: ExtensionOverridesOptions, +): ExtensionOverrides; // @public export function createExternalRouteRef< @@ -703,11 +711,13 @@ export function createExternalRouteRef< [param in TParamKeys]: string; } | undefined = undefined, + TOptional extends boolean = false, TParamKeys extends string = string, >(options?: { readonly params?: string extends TParamKeys ? (keyof TParams)[] : TParamKeys[]; + optional?: TOptional; defaultTarget?: string; }): ExternalRouteRef< keyof TParams extends never @@ -716,47 +726,100 @@ export function createExternalRouteRef< ? TParams : { [param in TParamKeys]: string; - } + }, + TOptional >; -// @public (undocumented) -export function createFrontendModule< - TId extends string, - TExtensions extends readonly ExtensionDefinition[] = [], ->(options: CreateFrontendModuleOptions): FrontendModule; - -// @public (undocumented) -export interface CreateFrontendModuleOptions< - TPluginId extends string, - TExtensions extends readonly ExtensionDefinition[], -> { - // (undocumented) - extensions?: TExtensions; - // (undocumented) - featureFlags?: FeatureFlagConfig[]; - // (undocumented) - pluginId: TPluginId; -} - -// @public (undocumented) -export function createFrontendPlugin< - TId extends string, - TRoutes extends AnyRoutes = {}, - TExternalRoutes extends AnyExternalRoutes = {}, - TExtensions extends readonly ExtensionDefinition[] = [], ->( - options: PluginOptions, -): FrontendPlugin< - TRoutes, - TExternalRoutes, +// @public +export function createNavItemExtension(options: { + namespace?: string; + name?: string; + routeRef: RouteRef; + title: string; + icon: IconComponent_2; +}): ExtensionDefinition< { - [KExtension in TExtensions[number] as ResolveExtensionId< - KExtension, - TId - >]: KExtension; + title: string; + }, + { + title?: string | undefined; } >; +// @public (undocumented) +export namespace createNavItemExtension { + const // (undocumented) + targetDataRef: ConfigurableExtensionDataRef< + 'core.nav-item.target', + { + title: string; + icon: IconComponent_2; + routeRef: RouteRef; + }, + {} + >; +} + +// @public +export function createNavLogoExtension(options: { + name?: string; + namespace?: string; + logoIcon: JSX.Element; + logoFull: JSX.Element; +}): ExtensionDefinition<{}, {}>; + +// @public (undocumented) +export namespace createNavLogoExtension { + const // (undocumented) + logoElementsDataRef: ConfigurableExtensionDataRef< + 'core.nav-logo.logo-elements', + { + logoIcon?: JSX.Element | undefined; + logoFull?: JSX.Element | undefined; + }, + {} + >; +} + +// @public +export function createPageExtension< + TConfig extends { + path: string; + }, + TInputs extends AnyExtensionInputMap, +>( + options: ( + | { + defaultPath: string; + } + | { + configSchema: PortableSchema; + } + ) & { + namespace?: string; + name?: string; + attachTo?: { + id: string; + input: string; + }; + disabled?: boolean; + inputs?: TInputs; + routeRef?: RouteRef; + loader: (options: { + config: TConfig; + inputs: Expand>; + }) => Promise; + }, +): ExtensionDefinition; + +// @public (undocumented) +export function createPlugin< + Routes extends AnyRoutes = {}, + ExternalRoutes extends AnyExternalRoutes = {}, +>( + options: PluginOptions, +): BackstagePlugin; + // @public export function createRouteRef< TParams extends @@ -777,6 +840,75 @@ export function createRouteRef< } >; +// @public +export function createRouterExtension< + TConfig extends {}, + TInputs extends AnyExtensionInputMap, +>(options: { + namespace?: string; + name?: string; + attachTo?: { + id: string; + input: string; + }; + configSchema?: PortableSchema; + disabled?: boolean; + inputs?: TInputs; + Component: ComponentType< + PropsWithChildren<{ + inputs: Expand>; + config: TConfig; + }> + >; +}): ExtensionDefinition; + +// @public (undocumented) +export namespace createRouterExtension { + const // (undocumented) + componentDataRef: ConfigurableExtensionDataRef< + 'app.router.wrapper', + React_2.ComponentType<{ + children?: React_2.ReactNode; + }>, + {} + >; +} + +// @public @deprecated (undocumented) +export function createSchemaFromZod( + schemaCreator: (zImpl: typeof z) => ZodSchema, +): PortableSchema; + +// @public (undocumented) +export function createSignInPageExtension< + TConfig extends {}, + TInputs extends AnyExtensionInputMap, +>(options: { + namespace?: string; + name?: string; + attachTo?: { + id: string; + input: string; + }; + configSchema?: PortableSchema; + disabled?: boolean; + inputs?: TInputs; + loader: (options: { + config: TConfig; + inputs: Expand>; + }) => Promise>; +}): ExtensionDefinition; + +// @public (undocumented) +export namespace createSignInPageExtension { + const // (undocumented) + componentDataRef: ConfigurableExtensionDataRef< + 'core.sign-in-page.component', + React_2.ComponentType, + {} + >; +} + // @public export function createSubRouteRef< Path extends string, @@ -786,6 +918,44 @@ export function createSubRouteRef< parent: RouteRef; }): MakeSubRouteRef, ParentParams>; +// @public (undocumented) +export function createThemeExtension( + theme: AppTheme, +): ExtensionDefinition<{}, {}>; + +// @public (undocumented) +export namespace createThemeExtension { + const // (undocumented) + themeDataRef: ConfigurableExtensionDataRef< + 'core.theme.theme', + AppTheme, + {} + >; +} + +// @public (undocumented) +export function createTranslationExtension(options: { + name?: string; + resource: TranslationResource | TranslationMessages; +}): ExtensionDefinition<{}, {}>; + +// @public (undocumented) +export namespace createTranslationExtension { + const // (undocumented) + translationDataRef: ConfigurableExtensionDataRef< + 'core.translation.translation', + | TranslationResource + | TranslationMessages< + string, + { + [x: string]: string; + }, + boolean + >, + {} + >; +} + export { createTranslationMessages }; export { createTranslationRef }; @@ -823,154 +993,87 @@ export interface Extension { // @public (undocumented) export interface ExtensionBlueprint< - T extends ExtensionBlueprintParameters = ExtensionBlueprintParameters, + TParams, + TInputs extends AnyExtensionInputMap, + TOutput extends AnyExtensionDataMap, + TConfig extends { + [key in string]: unknown; + }, + TConfigInput extends { + [key in string]: unknown; + }, + TDataRefs extends AnyExtensionDataMap, > { // (undocumented) - dataRefs: T['dataRefs']; - // (undocumented) - make(args: { - name?: TNewName; - attachTo?: { - id: string; - input: string; - }; - disabled?: boolean; - params: T['params']; - }): ExtensionDefinition<{ - kind: T['kind']; - name: string | undefined extends TNewName ? T['name'] : TNewName; - config: T['config']; - configInput: T['configInput']; - output: T['output']; - inputs: T['inputs']; - params: T['params']; - }>; - makeWithOverrides< - TNewName extends string | undefined, + dataRefs: TDataRefs; + make< TExtensionConfigSchema extends { [key in string]: (zImpl: typeof z) => z.ZodType; }, - UFactoryOutput extends ExtensionDataValue, - UNewOutput extends AnyExtensionDataRef, - TExtraInputs extends { - [inputName in string]: ExtensionInput< - AnyExtensionDataRef, - { - optional: boolean; - singleton: boolean; - } - >; - }, - >(args: { - name?: TNewName; - attachTo?: { - id: string; - input: string; - }; - disabled?: boolean; - inputs?: TExtraInputs & { - [KName in keyof T['inputs']]?: `Error: Input '${KName & - string}' is already defined in parent definition`; - }; - output?: Array; - config?: { - schema: TExtensionConfigSchema & { - [KName in keyof T['config']]?: `Error: Config key '${KName & - string}' is already defined in parent schema`; + >( + args: { + namespace?: string; + name?: string; + attachTo?: { + id: string; + input: string; }; - }; - factory( - originalFactory: ( - params: T['params'], - context?: { - config?: T['config']; - inputs?: ResolveInputValueOverrides>; - }, - ) => ExtensionDataContainer>, - context: { - node: AppNode; - apis: ApiHolder; - config: T['config'] & { - [key in keyof TExtensionConfigSchema]: z.infer< - ReturnType - >; + disabled?: boolean; + inputs?: TInputs; + output?: TOutput; + config?: { + schema: TExtensionConfigSchema & { + [KName in keyof TConfig]?: `Error: Config key '${KName & + string}' is already defined in parent schema`; }; - inputs: Expand>; - }, - ): Iterable & - VerifyExtensionFactoryOutput< - AnyExtensionDataRef extends UNewOutput - ? NonNullable - : UNewOutput, - UFactoryOutput + }; + } & ( + | { + factory( + originalFactory: ( + params: TParams, + context?: { + config?: TConfig; + inputs?: Expand>; + }, + ) => Expand>, + context: { + node: AppNode; + config: TConfig & { + [key in keyof TExtensionConfigSchema]: z.infer< + ReturnType + >; + }; + inputs: Expand>; + }, + ): Expand>; + } + | { + params: TParams; + } + ), + ): ExtensionDefinition< + { + [key in keyof TExtensionConfigSchema]: z.infer< + ReturnType >; - }): ExtensionDefinition<{ - config: (string extends keyof TExtensionConfigSchema - ? {} - : { - [key in keyof TExtensionConfigSchema]: z.infer< - ReturnType - >; - }) & - T['config']; - configInput: (string extends keyof TExtensionConfigSchema - ? {} - : z.input< - z.ZodObject<{ - [key in keyof TExtensionConfigSchema]: ReturnType< - TExtensionConfigSchema[key] - >; - }> - >) & - T['configInput']; - output: AnyExtensionDataRef extends UNewOutput ? T['output'] : UNewOutput; - inputs: T['inputs'] & TExtraInputs; - kind: T['kind']; - name: string | undefined extends TNewName ? T['name'] : TNewName; - params: T['params']; - }>; + } & TConfig, + z.input< + z.ZodObject<{ + [key in keyof TExtensionConfigSchema]: ReturnType< + TExtensionConfigSchema[key] + >; + }> + > & + TConfigInput + >; } -// @public (undocumented) -export type ExtensionBlueprintParameters = { - kind: string; - name?: string; - params?: object; - configInput?: { - [K in string]: any; - }; - config?: { - [K in string]: any; - }; - output?: AnyExtensionDataRef; - inputs?: { - [KName in string]: ExtensionInput< - AnyExtensionDataRef, - { - optional: boolean; - singleton: boolean; - } - >; - }; - dataRefs?: { - [name in string]: AnyExtensionDataRef; - }; -}; - // @public (undocumented) export function ExtensionBoundary( props: ExtensionBoundaryProps, ): React_2.JSX.Element; -// @public (undocumented) -export namespace ExtensionBoundary { - // (undocumented) - export function lazy( - appNode: AppNode, - lazyElement: () => Promise, - ): JSX.Element; -} - // @public (undocumented) export interface ExtensionBoundaryProps { // (undocumented) @@ -980,28 +1083,6 @@ export interface ExtensionBoundaryProps { routable?: boolean; } -// @public (undocumented) -export type ExtensionDataContainer = - Iterable< - UExtensionData extends ExtensionDataRef< - infer IData, - infer IId, - infer IConfig - > - ? IConfig['optional'] extends true - ? never - : ExtensionDataValue - : never - > & { - get( - ref: ExtensionDataRef, - ): UExtensionData extends ExtensionDataRef - ? IConfig['optional'] extends true - ? IData | undefined - : IData - : never; - }; - // @public (undocumented) export type ExtensionDataRef< TData, @@ -1010,154 +1091,51 @@ export type ExtensionDataRef< optional?: true; } = {}, > = { - readonly $$type: '@backstage/ExtensionDataRef'; - readonly id: TId; - readonly T: TData; - readonly config: TConfig; + id: TId; + T: TData; + config: TConfig; + $$type: '@backstage/ExtensionDataRef'; +}; + +// @public +export type ExtensionDataValues = { + [DataName in keyof TExtensionData as TExtensionData[DataName]['config'] extends { + optional: true; + } + ? never + : DataName]: TExtensionData[DataName]['T']; +} & { + [DataName in keyof TExtensionData as TExtensionData[DataName]['config'] extends { + optional: true; + } + ? DataName + : never]?: TExtensionData[DataName]['T']; }; // @public (undocumented) -export type ExtensionDataRefToValue = - TDataRef extends ExtensionDataRef - ? ExtensionDataValue - : never; - -// @public (undocumented) -export type ExtensionDataValue = { - readonly $$type: '@backstage/ExtensionDataValue'; - readonly id: TId; - readonly value: TData; -}; - -// @public (undocumented) -export type ExtensionDefinition< - T extends ExtensionDefinitionParameters = ExtensionDefinitionParameters, -> = { +export interface ExtensionDefinition { + // (undocumented) $$type: '@backstage/ExtensionDefinition'; - readonly T: T; - override< - TExtensionConfigSchema extends { - [key in string]: (zImpl: typeof z) => z.ZodType; - }, - UFactoryOutput extends ExtensionDataValue, - UNewOutput extends AnyExtensionDataRef, - TExtraInputs extends { - [inputName in string]: ExtensionInput< - AnyExtensionDataRef, - { - optional: boolean; - singleton: boolean; - } - >; - }, - >( - args: Expand< - { - attachTo?: { - id: string; - input: string; - }; - disabled?: boolean; - inputs?: TExtraInputs & { - [KName in keyof T['inputs']]?: `Error: Input '${KName & - string}' is already defined in parent definition`; - }; - output?: Array; - config?: { - schema: TExtensionConfigSchema & { - [KName in keyof T['config']]?: `Error: Config key '${KName & - string}' is already defined in parent schema`; - }; - }; - factory?( - originalFactory: ( - context?: Expand< - { - config?: T['config']; - inputs?: ResolveInputValueOverrides>; - } & ([T['params']] extends [never] - ? {} - : { - params?: Partial; - }) - >, - ) => ExtensionDataContainer>, - context: { - node: AppNode; - apis: ApiHolder; - config: T['config'] & { - [key in keyof TExtensionConfigSchema]: z.infer< - ReturnType - >; - }; - inputs: Expand>; - }, - ): Iterable; - } & ([T['params']] extends [never] - ? {} - : { - params?: Partial; - }) - > & - VerifyExtensionFactoryOutput< - AnyExtensionDataRef extends UNewOutput - ? NonNullable - : UNewOutput, - UFactoryOutput - >, - ): ExtensionDefinition<{ - kind: T['kind']; - name: T['name']; - output: AnyExtensionDataRef extends UNewOutput ? T['output'] : UNewOutput; - inputs: T['inputs'] & TExtraInputs; - config: T['config'] & { - [key in keyof TExtensionConfigSchema]: z.infer< - ReturnType - >; - }; - configInput: T['configInput'] & - z.input< - z.ZodObject<{ - [key in keyof TExtensionConfigSchema]: ReturnType< - TExtensionConfigSchema[key] - >; - }> - >; - }>; -}; - -// @public (undocumented) -export type ExtensionDefinitionParameters = { - kind?: string; - name?: string; - configInput?: { - [K in string]: any; + // (undocumented) + readonly attachTo: { + id: string; + input: string; }; - config?: { - [K in string]: any; - }; - output?: AnyExtensionDataRef; - inputs?: { - [KName in string]: ExtensionInput< - AnyExtensionDataRef, - { - optional: boolean; - singleton: boolean; - } - >; - }; - params?: object; -}; + // (undocumented) + readonly configSchema?: PortableSchema; + // (undocumented) + readonly disabled: boolean; + // (undocumented) + readonly kind?: string; + // (undocumented) + readonly name?: string; + // (undocumented) + readonly namespace?: string; +} // @public (undocumented) export interface ExtensionInput< - UExtensionData extends ExtensionDataRef< - unknown, - string, - { - optional?: true; - } - >, + TExtensionData extends AnyExtensionDataMap, TConfig extends { singleton: boolean; optional: boolean; @@ -1168,12 +1146,7 @@ export interface ExtensionInput< // (undocumented) config: TConfig; // (undocumented) - extensionData: Array; - // (undocumented) - replaces?: Array<{ - id: string; - input: string; - }>; + extensionData: TExtensionData; } // @public (undocumented) @@ -1182,13 +1155,24 @@ export interface ExtensionOverrides { readonly $$type: '@backstage/ExtensionOverrides'; } +// @public (undocumented) +export interface ExtensionOverridesOptions { + // (undocumented) + extensions: ExtensionDefinition[]; + // (undocumented) + featureFlags?: FeatureFlagConfig[]; +} + // @public export interface ExternalRouteRef< TParams extends AnyRouteRefParams = AnyRouteRefParams, + TOptional extends boolean = boolean, > { // (undocumented) readonly $$type: '@backstage/ExternalRouteRef'; // (undocumented) + readonly optional: TOptional; + // (undocumented) readonly T: TParams; } @@ -1211,42 +1195,8 @@ export { FetchApi }; export { fetchApiRef }; -// @public @deprecated (undocumented) -export type FrontendFeature = FrontendPlugin | ExtensionOverrides; - // @public (undocumented) -export interface FrontendModule { - // (undocumented) - readonly $$type: '@backstage/FrontendModule'; - // (undocumented) - readonly pluginId: string; -} - -// @public (undocumented) -export interface FrontendPlugin< - TRoutes extends AnyRoutes = AnyRoutes, - TExternalRoutes extends AnyExternalRoutes = AnyExternalRoutes, - TExtensionMap extends { - [id in string]: ExtensionDefinition; - } = { - [id in string]: ExtensionDefinition; - }, -> { - // (undocumented) - readonly $$type: '@backstage/FrontendPlugin'; - // (undocumented) - readonly externalRoutes: TExternalRoutes; - // (undocumented) - getExtension(id: TId): TExtensionMap[TId]; - // (undocumented) - readonly id: string; - // (undocumented) - readonly routes: TRoutes; - // (undocumented) - withOverrides(options: { - extensions: Array; - }): FrontendPlugin; -} +export type FrontendFeature = BackstagePlugin | ExtensionOverrides; export { githubAuthApiRef }; @@ -1255,34 +1205,40 @@ export { gitlabAuthApiRef }; export { googleAuthApiRef }; // @public (undocumented) -export const IconBundleBlueprint: ExtensionBlueprint<{ - kind: 'icon-bundle'; - name: undefined; - params: { +export const IconBundleBlueprint: ExtensionBlueprint< + { icons: { [x: string]: IconComponent; }; - }; - output: ConfigurableExtensionDataRef< - { - [x: string]: IconComponent; - }, - 'core.icons', - {} - >; - inputs: {}; - config: {}; - configInput: {}; - dataRefs: { + }, + AnyExtensionInputMap, + { icons: ConfigurableExtensionDataRef< + 'core.icons', { [x: string]: IconComponent; }, - 'core.icons', {} >; - }; -}>; + }, + { + icons: string; + test: string; + }, + { + test: string; + icons?: string | undefined; + }, + { + icons: ConfigurableExtensionDataRef< + 'core.icons', + { + [x: string]: IconComponent; + }, + {} + >; + } +>; // @public export type IconComponent = ComponentType< @@ -1311,71 +1267,6 @@ export { identityApiRef }; export { microsoftAuthApiRef }; -// @public -export const NavItemBlueprint: ExtensionBlueprint<{ - kind: 'nav-item'; - name: undefined; - params: { - title: string; - icon: IconComponent_2; - routeRef: RouteRef; - }; - output: ConfigurableExtensionDataRef< - { - title: string; - icon: IconComponent_2; - routeRef: RouteRef; - }, - 'core.nav-item.target', - {} - >; - inputs: {}; - config: {}; - configInput: {}; - dataRefs: { - target: ConfigurableExtensionDataRef< - { - title: string; - icon: IconComponent_2; - routeRef: RouteRef; - }, - 'core.nav-item.target', - {} - >; - }; -}>; - -// @public -export const NavLogoBlueprint: ExtensionBlueprint<{ - kind: 'nav-logo'; - name: undefined; - params: { - logoIcon: JSX.Element; - logoFull: JSX.Element; - }; - output: ConfigurableExtensionDataRef< - { - logoIcon?: JSX.Element | undefined; - logoFull?: JSX.Element | undefined; - }, - 'core.nav-logo.logo-elements', - {} - >; - inputs: {}; - config: {}; - configInput: {}; - dataRefs: { - logoElements: ConfigurableExtensionDataRef< - { - logoIcon?: JSX.Element | undefined; - logoFull?: JSX.Element | undefined; - }, - 'core.nav-logo.logo-elements', - {} - >; - }; -}>; - export { OAuthApi }; export { OAuthRequestApi }; @@ -1394,54 +1285,23 @@ export { oneloginAuthApiRef }; export { OpenIdConnectApi }; -// @public -export const PageBlueprint: ExtensionBlueprint<{ - kind: 'page'; - name: undefined; - params: { - defaultPath: string; - loader: () => Promise; - routeRef?: RouteRef | undefined; - }; - output: - | ConfigurableExtensionDataRef - | ConfigurableExtensionDataRef - | ConfigurableExtensionDataRef< - RouteRef, - 'core.routing.ref', - { - optional: true; - } - >; - inputs: {}; - config: { - path: string | undefined; - }; - configInput: { - path?: string | undefined; - }; - dataRefs: never; -}>; - export { PendingOAuthRequest }; // @public (undocumented) export interface PluginOptions< - TId extends string, - TRoutes extends AnyRoutes, - TExternalRoutes extends AnyExternalRoutes, - TExtensions extends readonly ExtensionDefinition[], + Routes extends AnyRoutes, + ExternalRoutes extends AnyExternalRoutes, > { // (undocumented) - extensions?: TExtensions; + extensions?: ExtensionDefinition[]; // (undocumented) - externalRoutes?: TExternalRoutes; + externalRoutes?: ExternalRoutes; // (undocumented) featureFlags?: FeatureFlagConfig[]; // (undocumented) - id: TId; + id: string; // (undocumented) - routes?: TRoutes; + routes?: Routes; } // @public (undocumented) @@ -1455,13 +1315,11 @@ export { ProfileInfo }; export { ProfileInfoApi }; // @public -export type ResolvedExtensionInput< - TExtensionInput extends ExtensionInput, -> = TExtensionInput['extensionData'] extends Array - ? { - node: AppNode; - } & ExtensionDataContainer - : never; +export type ResolvedExtensionInput = + { + node: AppNode; + output: ExtensionDataValues; + }; // @public export type ResolvedExtensionInputs< @@ -1470,79 +1328,14 @@ export type ResolvedExtensionInputs< }, > = { [InputName in keyof TInputs]: false extends TInputs[InputName]['config']['singleton'] - ? Array>> + ? Array>> : false extends TInputs[InputName]['config']['optional'] - ? Expand> - : Expand | undefined>; + ? Expand> + : Expand< + ResolvedExtensionInput | undefined + >; }; -// @public (undocumented) -export type ResolveInputValueOverrides< - TInputs extends { - [inputName in string]: ExtensionInput< - AnyExtensionDataRef, - { - optional: boolean; - singleton: boolean; - } - >; - } = { - [inputName in string]: ExtensionInput< - AnyExtensionDataRef, - { - optional: boolean; - singleton: boolean; - } - >; - }, -> = Expand< - { - [KName in keyof TInputs as TInputs[KName] extends ExtensionInput< - any, - { - optional: infer IOptional extends boolean; - singleton: boolean; - } - > - ? IOptional extends true - ? never - : KName - : never]: TInputs[KName] extends ExtensionInput< - infer IDataRefs, - { - optional: boolean; - singleton: infer ISingleton extends boolean; - } - > - ? ISingleton extends true - ? Iterable> - : Array>> - : never; - } & { - [KName in keyof TInputs as TInputs[KName] extends ExtensionInput< - any, - { - optional: infer IOptional extends boolean; - singleton: boolean; - } - > - ? IOptional extends true - ? KName - : never - : never]?: TInputs[KName] extends ExtensionInput< - infer IDataRefs, - { - optional: boolean; - singleton: infer ISingleton extends boolean; - } - > - ? ISingleton extends true - ? Iterable> - : Array>> - : never; - } ->; - // @public export type RouteFunc = ( ...[params]: TParams extends undefined @@ -1550,34 +1343,6 @@ export type RouteFunc = ( : readonly [params: TParams] ) => string; -// @public (undocumented) -export const RouterBlueprint: ExtensionBlueprint<{ - kind: 'app-router-component'; - name: undefined; - params: { - Component: ComponentType>; - }; - output: ConfigurableExtensionDataRef< - ComponentType<{ - children?: ReactNode; - }>, - 'app.router.wrapper', - {} - >; - inputs: {}; - config: {}; - configInput: {}; - dataRefs: { - component: ConfigurableExtensionDataRef< - ComponentType<{ - children?: ReactNode; - }>, - 'app.router.wrapper', - {} - >; - }; -}>; - // @public export interface RouteRef< TParams extends AnyRouteRefParams = AnyRouteRefParams, @@ -1595,7 +1360,7 @@ export interface RouteResolutionApi { anyRouteRef: | RouteRef | SubRouteRef - | ExternalRouteRef, + | ExternalRouteRef, options?: RouteResolutionApiResolveOptions, ): RouteFunc | undefined; } @@ -1612,30 +1377,6 @@ export { SessionApi }; export { SessionState }; -// @public -export const SignInPageBlueprint: ExtensionBlueprint<{ - kind: 'sign-in-page'; - name: undefined; - params: { - loader: () => Promise>; - }; - output: ConfigurableExtensionDataRef< - React_2.ComponentType, - 'core.sign-in-page.component', - {} - >; - inputs: {}; - config: {}; - configInput: {}; - dataRefs: { - component: ConfigurableExtensionDataRef< - React_2.ComponentType, - 'core.sign-in-page.component', - {} - >; - }; -}>; - export { StorageApi }; export { storageApiRef }; @@ -1654,60 +1395,6 @@ export interface SubRouteRef< readonly T: TParams; } -// @public -export const ThemeBlueprint: ExtensionBlueprint<{ - kind: 'theme'; - name: undefined; - params: { - theme: AppTheme; - }; - output: ConfigurableExtensionDataRef; - inputs: {}; - config: {}; - configInput: {}; - dataRefs: { - theme: ConfigurableExtensionDataRef; - }; -}>; - -// @public -export const TranslationBlueprint: ExtensionBlueprint<{ - kind: 'translation'; - name: undefined; - params: { - resource: TranslationResource | TranslationMessages; - }; - output: ConfigurableExtensionDataRef< - | TranslationResource - | TranslationMessages< - string, - { - [x: string]: string; - }, - boolean - >, - 'core.translation.translation', - {} - >; - inputs: {}; - config: {}; - configInput: {}; - dataRefs: { - translation: ConfigurableExtensionDataRef< - | TranslationResource - | TranslationMessages< - string, - { - [x: string]: string; - }, - boolean - >, - 'core.translation.translation', - {} - >; - }; -}>; - export { TranslationMessages }; export { TranslationMessagesOptions }; @@ -1734,13 +1421,18 @@ export function useComponentRef( ref: ComponentRef, ): ComponentType; +// @public +export function useRouteRef< + TOptional extends boolean, + TParams extends AnyRouteRefParams, +>( + routeRef: ExternalRouteRef, +): TOptional extends true ? RouteFunc | undefined : RouteFunc; + // @public export function useRouteRef( - routeRef: - | RouteRef - | SubRouteRef - | ExternalRouteRef, -): RouteFunc | undefined; + routeRef: RouteRef | SubRouteRef, +): RouteFunc; // @public export function useRouteRefParams( @@ -1771,12 +1463,12 @@ export { withApis }; // src/apis/definitions/RouteResolutionApi.d.ts:30:5 - (ae-undocumented) Missing documentation for "resolve". // src/components/ExtensionBoundary.d.ts:4:1 - (ae-undocumented) Missing documentation for "ExtensionBoundaryProps". // src/components/ExtensionBoundary.d.ts:5:5 - (ae-undocumented) Missing documentation for "node". -// src/components/ExtensionBoundary.d.ts:6:5 - (ae-undocumented) Missing documentation for "routable". -// src/components/ExtensionBoundary.d.ts:7:5 - (ae-undocumented) Missing documentation for "children". -// src/components/ExtensionBoundary.d.ts:10:1 - (ae-undocumented) Missing documentation for "ExtensionBoundary". +// src/components/ExtensionBoundary.d.ts:12:5 - (ae-undocumented) Missing documentation for "children". +// src/components/ExtensionBoundary.d.ts:15:1 - (ae-undocumented) Missing documentation for "ExtensionBoundary". // src/components/coreComponentRefs.d.ts:3:22 - (ae-undocumented) Missing documentation for "coreComponentRefs". // src/components/createComponentRef.d.ts:2:1 - (ae-undocumented) Missing documentation for "ComponentRef". // src/components/createComponentRef.d.ts:7:1 - (ae-undocumented) Missing documentation for "createComponentRef". +// src/extensions/IconBundleBlueprint.d.ts:3:22 - (ae-undocumented) Missing documentation for "IconBundleBlueprint". // src/extensions/createApiExtension.d.ts:7:1 - (ae-undocumented) Missing documentation for "createApiExtension". // src/extensions/createApiExtension.d.ts:20:1 - (ae-undocumented) Missing documentation for "createApiExtension". // src/extensions/createApiExtension.d.ts:21:11 - (ae-undocumented) Missing documentation for "factoryDataRef". @@ -1785,8 +1477,8 @@ export { withApis }; // src/extensions/createComponentExtension.d.ts:7:1 - (ae-undocumented) Missing documentation for "createComponentExtension". // src/extensions/createComponentExtension.d.ts:26:1 - (ae-undocumented) Missing documentation for "createComponentExtension". // src/extensions/createComponentExtension.d.ts:27:11 - (ae-undocumented) Missing documentation for "componentDataRef". -// src/extensions/createNavItemExtension.d.ts:17:1 - (ae-undocumented) Missing documentation for "createNavItemExtension". -// src/extensions/createNavItemExtension.d.ts:18:11 - (ae-undocumented) Missing documentation for "targetDataRef". +// src/extensions/createNavItemExtension.d.ts:19:1 - (ae-undocumented) Missing documentation for "createNavItemExtension". +// src/extensions/createNavItemExtension.d.ts:20:11 - (ae-undocumented) Missing documentation for "targetDataRef". // src/extensions/createNavLogoExtension.d.ts:13:1 - (ae-undocumented) Missing documentation for "createNavLogoExtension". // src/extensions/createNavLogoExtension.d.ts:14:11 - (ae-undocumented) Missing documentation for "logoElementsDataRef". // src/extensions/createRouterExtension.d.ts:28:1 - (ae-undocumented) Missing documentation for "createRouterExtension". @@ -1808,37 +1500,51 @@ export { withApis }; // src/routing/SubRouteRef.d.ts:13:5 - (ae-undocumented) Missing documentation for "$$type". // src/routing/SubRouteRef.d.ts:14:5 - (ae-undocumented) Missing documentation for "T". // src/routing/SubRouteRef.d.ts:15:5 - (ae-undocumented) Missing documentation for "path". -// src/schema/createSchemaFromZod.d.ts:4:1 - (ae-undocumented) Missing documentation for "createSchemaFromZod". +// src/schema/createSchemaFromZod.d.ts:7:1 - (ae-undocumented) Missing documentation for "createSchemaFromZod". // src/schema/types.d.ts:3:1 - (ae-undocumented) Missing documentation for "PortableSchema". // src/types.d.ts:11:1 - (ae-undocumented) Missing documentation for "CoreProgressProps". // src/types.d.ts:13:1 - (ae-undocumented) Missing documentation for "CoreNotFoundErrorPageProps". // src/types.d.ts:17:1 - (ae-undocumented) Missing documentation for "CoreErrorBoundaryFallbackProps". // src/wiring/coreExtensionData.d.ts:4:22 - (ae-undocumented) Missing documentation for "coreExtensionData". -// src/wiring/createExtension.d.ts:7:1 - (ae-undocumented) Missing documentation for "AnyExtensionDataMap". -// src/wiring/createExtension.d.ts:13:1 - (ae-undocumented) Missing documentation for "AnyExtensionInputMap". -// src/wiring/createExtension.d.ts:50:1 - (ae-undocumented) Missing documentation for "CreateExtensionOptions". -// src/wiring/createExtension.d.ts:51:5 - (ae-undocumented) Missing documentation for "kind". -// src/wiring/createExtension.d.ts:52:5 - (ae-undocumented) Missing documentation for "namespace". -// src/wiring/createExtension.d.ts:53:5 - (ae-undocumented) Missing documentation for "name". -// src/wiring/createExtension.d.ts:54:5 - (ae-undocumented) Missing documentation for "attachTo". -// src/wiring/createExtension.d.ts:58:5 - (ae-undocumented) Missing documentation for "disabled". -// src/wiring/createExtension.d.ts:59:5 - (ae-undocumented) Missing documentation for "inputs". -// src/wiring/createExtension.d.ts:60:5 - (ae-undocumented) Missing documentation for "output". -// src/wiring/createExtension.d.ts:61:5 - (ae-undocumented) Missing documentation for "configSchema". -// src/wiring/createExtension.d.ts:62:5 - (ae-undocumented) Missing documentation for "factory". -// src/wiring/createExtension.d.ts:69:1 - (ae-undocumented) Missing documentation for "ExtensionDefinition". -// src/wiring/createExtension.d.ts:70:5 - (ae-undocumented) Missing documentation for "$$type". -// src/wiring/createExtension.d.ts:71:5 - (ae-undocumented) Missing documentation for "kind". -// src/wiring/createExtension.d.ts:72:5 - (ae-undocumented) Missing documentation for "namespace". -// src/wiring/createExtension.d.ts:73:5 - (ae-undocumented) Missing documentation for "name". -// src/wiring/createExtension.d.ts:74:5 - (ae-undocumented) Missing documentation for "attachTo". -// src/wiring/createExtension.d.ts:78:5 - (ae-undocumented) Missing documentation for "disabled". -// src/wiring/createExtension.d.ts:79:5 - (ae-undocumented) Missing documentation for "configSchema". -// src/wiring/createExtension.d.ts:82:1 - (ae-undocumented) Missing documentation for "createExtension". +// src/wiring/createExtension.d.ts:8:1 - (ae-undocumented) Missing documentation for "AnyExtensionDataMap". +// src/wiring/createExtension.d.ts:14:1 - (ae-undocumented) Missing documentation for "AnyExtensionInputMap". +// src/wiring/createExtension.d.ts:51:1 - (ae-undocumented) Missing documentation for "CreateExtensionOptions". +// src/wiring/createExtension.d.ts:54:5 - (ae-undocumented) Missing documentation for "kind". +// src/wiring/createExtension.d.ts:55:5 - (ae-undocumented) Missing documentation for "namespace". +// src/wiring/createExtension.d.ts:56:5 - (ae-undocumented) Missing documentation for "name". +// src/wiring/createExtension.d.ts:57:5 - (ae-undocumented) Missing documentation for "attachTo". +// src/wiring/createExtension.d.ts:61:5 - (ae-undocumented) Missing documentation for "disabled". +// src/wiring/createExtension.d.ts:62:5 - (ae-undocumented) Missing documentation for "inputs". +// src/wiring/createExtension.d.ts:63:5 - (ae-undocumented) Missing documentation for "output". +// src/wiring/createExtension.d.ts:65:5 - (ae-undocumented) Missing documentation for "configSchema". +// src/wiring/createExtension.d.ts:66:5 - (ae-undocumented) Missing documentation for "config". +// src/wiring/createExtension.d.ts:69:5 - (ae-undocumented) Missing documentation for "factory". +// src/wiring/createExtension.d.ts:78:1 - (ae-undocumented) Missing documentation for "ExtensionDefinition". +// src/wiring/createExtension.d.ts:79:5 - (ae-undocumented) Missing documentation for "$$type". +// src/wiring/createExtension.d.ts:80:5 - (ae-undocumented) Missing documentation for "kind". +// src/wiring/createExtension.d.ts:81:5 - (ae-undocumented) Missing documentation for "namespace". +// src/wiring/createExtension.d.ts:82:5 - (ae-undocumented) Missing documentation for "name". +// src/wiring/createExtension.d.ts:83:5 - (ae-undocumented) Missing documentation for "attachTo". +// src/wiring/createExtension.d.ts:87:5 - (ae-undocumented) Missing documentation for "disabled". +// src/wiring/createExtension.d.ts:88:5 - (ae-undocumented) Missing documentation for "configSchema". +// src/wiring/createExtension.d.ts:91:1 - (ae-undocumented) Missing documentation for "createExtension". +// src/wiring/createExtensionBlueprint.d.ts:8:1 - (ae-undocumented) Missing documentation for "CreateExtensionBlueprintOptions". +// src/wiring/createExtensionBlueprint.d.ts:11:5 - (ae-undocumented) Missing documentation for "kind". +// src/wiring/createExtensionBlueprint.d.ts:12:5 - (ae-undocumented) Missing documentation for "namespace". +// src/wiring/createExtensionBlueprint.d.ts:13:5 - (ae-undocumented) Missing documentation for "attachTo". +// src/wiring/createExtensionBlueprint.d.ts:17:5 - (ae-undocumented) Missing documentation for "disabled". +// src/wiring/createExtensionBlueprint.d.ts:18:5 - (ae-undocumented) Missing documentation for "inputs". +// src/wiring/createExtensionBlueprint.d.ts:19:5 - (ae-undocumented) Missing documentation for "output". +// src/wiring/createExtensionBlueprint.d.ts:20:5 - (ae-undocumented) Missing documentation for "config". +// src/wiring/createExtensionBlueprint.d.ts:23:5 - (ae-undocumented) Missing documentation for "factory". +// src/wiring/createExtensionBlueprint.d.ts:30:5 - (ae-undocumented) Missing documentation for "dataRefs". +// src/wiring/createExtensionBlueprint.d.ts:35:1 - (ae-undocumented) Missing documentation for "ExtensionBlueprint". +// src/wiring/createExtensionBlueprint.d.ts:40:5 - (ae-undocumented) Missing documentation for "dataRefs". // src/wiring/createExtensionDataRef.d.ts:2:1 - (ae-undocumented) Missing documentation for "ExtensionDataRef". // src/wiring/createExtensionDataRef.d.ts:11:1 - (ae-undocumented) Missing documentation for "ConfigurableExtensionDataRef". // src/wiring/createExtensionDataRef.d.ts:14:5 - (ae-undocumented) Missing documentation for "optional". -// src/wiring/createExtensionDataRef.d.ts:19:1 - (ae-undocumented) Missing documentation for "createExtensionDataRef". +// src/wiring/createExtensionDataRef.d.ts:22:1 - (ae-undocumented) Missing documentation for "createExtensionDataRef". +// src/wiring/createExtensionDataRef.d.ts:24:1 - (ae-undocumented) Missing documentation for "createExtensionDataRef". // src/wiring/createExtensionInput.d.ts:3:1 - (ae-undocumented) Missing documentation for "ExtensionInput". // src/wiring/createExtensionInput.d.ts:7:5 - (ae-undocumented) Missing documentation for "$$type". // src/wiring/createExtensionInput.d.ts:8:5 - (ae-undocumented) Missing documentation for "extensionData". diff --git a/packages/frontend-test-utils/api-report.api.md b/packages/frontend-test-utils/report.api.md similarity index 100% rename from packages/frontend-test-utils/api-report.api.md rename to packages/frontend-test-utils/report.api.md diff --git a/packages/integration-aws-node/api-report.api.md b/packages/integration-aws-node/report.api.md similarity index 100% rename from packages/integration-aws-node/api-report.api.md rename to packages/integration-aws-node/report.api.md diff --git a/packages/integration-react/api-report.api.md b/packages/integration-react/report.api.md similarity index 100% rename from packages/integration-react/api-report.api.md rename to packages/integration-react/report.api.md diff --git a/packages/integration/api-report.api.md b/packages/integration/report.api.md similarity index 100% rename from packages/integration/api-report.api.md rename to packages/integration/report.api.md diff --git a/packages/release-manifests/api-report.api.md b/packages/release-manifests/report.api.md similarity index 100% rename from packages/release-manifests/api-report.api.md rename to packages/release-manifests/report.api.md diff --git a/packages/test-utils/api-report-alpha.api.md b/packages/test-utils/report-alpha.api.md similarity index 100% rename from packages/test-utils/api-report-alpha.api.md rename to packages/test-utils/report-alpha.api.md diff --git a/packages/test-utils/api-report.api.md b/packages/test-utils/report.api.md similarity index 100% rename from packages/test-utils/api-report.api.md rename to packages/test-utils/report.api.md diff --git a/packages/theme/api-report.api.md b/packages/theme/report.api.md similarity index 100% rename from packages/theme/api-report.api.md rename to packages/theme/report.api.md diff --git a/packages/types/api-report.api.md b/packages/types/report.api.md similarity index 100% rename from packages/types/api-report.api.md rename to packages/types/report.api.md diff --git a/packages/version-bridge/api-report.api.md b/packages/version-bridge/report.api.md similarity index 100% rename from packages/version-bridge/api-report.api.md rename to packages/version-bridge/report.api.md diff --git a/packages/yarn-plugin/api-report.api.md b/packages/yarn-plugin/report.api.md similarity index 100% rename from packages/yarn-plugin/api-report.api.md rename to packages/yarn-plugin/report.api.md diff --git a/plugins/api-docs-module-protoc-gen-doc/api-report.api.md b/plugins/api-docs-module-protoc-gen-doc/report.api.md similarity index 100% rename from plugins/api-docs-module-protoc-gen-doc/api-report.api.md rename to plugins/api-docs-module-protoc-gen-doc/report.api.md diff --git a/plugins/api-docs/api-report-alpha.api.md b/plugins/api-docs/report-alpha.api.md similarity index 100% rename from plugins/api-docs/api-report-alpha.api.md rename to plugins/api-docs/report-alpha.api.md diff --git a/plugins/api-docs/api-report.api.md b/plugins/api-docs/report.api.md similarity index 100% rename from plugins/api-docs/api-report.api.md rename to plugins/api-docs/report.api.md diff --git a/plugins/app-backend/api-report-alpha.api.md b/plugins/app-backend/report-alpha.api.md similarity index 100% rename from plugins/app-backend/api-report-alpha.api.md rename to plugins/app-backend/report-alpha.api.md diff --git a/plugins/app-backend/api-report.api.md b/plugins/app-backend/report.api.md similarity index 100% rename from plugins/app-backend/api-report.api.md rename to plugins/app-backend/report.api.md diff --git a/plugins/app-node/api-report.api.md b/plugins/app-node/report.api.md similarity index 100% rename from plugins/app-node/api-report.api.md rename to plugins/app-node/report.api.md diff --git a/plugins/app-visualizer/api-report.api.md b/plugins/app-visualizer/report.api.md similarity index 97% rename from plugins/app-visualizer/api-report.api.md rename to plugins/app-visualizer/report.api.md index 7466ff24f6..7495797a79 100644 --- a/plugins/app-visualizer/api-report.api.md +++ b/plugins/app-visualizer/report.api.md @@ -73,7 +73,7 @@ export default visualizerPlugin; // Warnings were encountered during analysis: // -// src/plugin.d.ts:5:22 - (ae-undocumented) Missing documentation for "visualizerPlugin". +// src/plugin.d.ts:7:22 - (ae-undocumented) Missing documentation for "visualizerPlugin". // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/auth-backend-module-atlassian-provider/api-report.api.md b/plugins/auth-backend-module-atlassian-provider/report.api.md similarity index 100% rename from plugins/auth-backend-module-atlassian-provider/api-report.api.md rename to plugins/auth-backend-module-atlassian-provider/report.api.md diff --git a/plugins/auth-backend-module-aws-alb-provider/api-report.api.md b/plugins/auth-backend-module-aws-alb-provider/report.api.md similarity index 100% rename from plugins/auth-backend-module-aws-alb-provider/api-report.api.md rename to plugins/auth-backend-module-aws-alb-provider/report.api.md diff --git a/plugins/auth-backend-module-azure-easyauth-provider/api-report.api.md b/plugins/auth-backend-module-azure-easyauth-provider/report.api.md similarity index 100% rename from plugins/auth-backend-module-azure-easyauth-provider/api-report.api.md rename to plugins/auth-backend-module-azure-easyauth-provider/report.api.md diff --git a/plugins/auth-backend-module-bitbucket-provider/api-report.api.md b/plugins/auth-backend-module-bitbucket-provider/report.api.md similarity index 100% rename from plugins/auth-backend-module-bitbucket-provider/api-report.api.md rename to plugins/auth-backend-module-bitbucket-provider/report.api.md diff --git a/plugins/auth-backend-module-cloudflare-access-provider/api-report.api.md b/plugins/auth-backend-module-cloudflare-access-provider/report.api.md similarity index 100% rename from plugins/auth-backend-module-cloudflare-access-provider/api-report.api.md rename to plugins/auth-backend-module-cloudflare-access-provider/report.api.md diff --git a/plugins/auth-backend-module-gcp-iap-provider/api-report.api.md b/plugins/auth-backend-module-gcp-iap-provider/report.api.md similarity index 100% rename from plugins/auth-backend-module-gcp-iap-provider/api-report.api.md rename to plugins/auth-backend-module-gcp-iap-provider/report.api.md diff --git a/plugins/auth-backend-module-github-provider/api-report.api.md b/plugins/auth-backend-module-github-provider/report.api.md similarity index 100% rename from plugins/auth-backend-module-github-provider/api-report.api.md rename to plugins/auth-backend-module-github-provider/report.api.md diff --git a/plugins/auth-backend-module-gitlab-provider/api-report.api.md b/plugins/auth-backend-module-gitlab-provider/report.api.md similarity index 100% rename from plugins/auth-backend-module-gitlab-provider/api-report.api.md rename to plugins/auth-backend-module-gitlab-provider/report.api.md diff --git a/plugins/auth-backend-module-google-provider/api-report.api.md b/plugins/auth-backend-module-google-provider/report.api.md similarity index 100% rename from plugins/auth-backend-module-google-provider/api-report.api.md rename to plugins/auth-backend-module-google-provider/report.api.md diff --git a/plugins/auth-backend-module-guest-provider/api-report.api.md b/plugins/auth-backend-module-guest-provider/report.api.md similarity index 100% rename from plugins/auth-backend-module-guest-provider/api-report.api.md rename to plugins/auth-backend-module-guest-provider/report.api.md diff --git a/plugins/auth-backend-module-microsoft-provider/api-report.api.md b/plugins/auth-backend-module-microsoft-provider/report.api.md similarity index 100% rename from plugins/auth-backend-module-microsoft-provider/api-report.api.md rename to plugins/auth-backend-module-microsoft-provider/report.api.md diff --git a/plugins/auth-backend-module-oauth2-provider/api-report.api.md b/plugins/auth-backend-module-oauth2-provider/report.api.md similarity index 100% rename from plugins/auth-backend-module-oauth2-provider/api-report.api.md rename to plugins/auth-backend-module-oauth2-provider/report.api.md diff --git a/plugins/auth-backend-module-oauth2-proxy-provider/api-report.api.md b/plugins/auth-backend-module-oauth2-proxy-provider/report.api.md similarity index 100% rename from plugins/auth-backend-module-oauth2-proxy-provider/api-report.api.md rename to plugins/auth-backend-module-oauth2-proxy-provider/report.api.md diff --git a/plugins/auth-backend-module-oidc-provider/api-report.api.md b/plugins/auth-backend-module-oidc-provider/report.api.md similarity index 100% rename from plugins/auth-backend-module-oidc-provider/api-report.api.md rename to plugins/auth-backend-module-oidc-provider/report.api.md diff --git a/plugins/auth-backend-module-okta-provider/api-report.api.md b/plugins/auth-backend-module-okta-provider/report.api.md similarity index 100% rename from plugins/auth-backend-module-okta-provider/api-report.api.md rename to plugins/auth-backend-module-okta-provider/report.api.md diff --git a/plugins/auth-backend-module-onelogin-provider/api-report.api.md b/plugins/auth-backend-module-onelogin-provider/report.api.md similarity index 100% rename from plugins/auth-backend-module-onelogin-provider/api-report.api.md rename to plugins/auth-backend-module-onelogin-provider/report.api.md diff --git a/plugins/auth-backend-module-pinniped-provider/api-report.api.md b/plugins/auth-backend-module-pinniped-provider/report.api.md similarity index 100% rename from plugins/auth-backend-module-pinniped-provider/api-report.api.md rename to plugins/auth-backend-module-pinniped-provider/report.api.md diff --git a/plugins/auth-backend-module-vmware-cloud-provider/api-report.api.md b/plugins/auth-backend-module-vmware-cloud-provider/report.api.md similarity index 100% rename from plugins/auth-backend-module-vmware-cloud-provider/api-report.api.md rename to plugins/auth-backend-module-vmware-cloud-provider/report.api.md diff --git a/plugins/auth-backend/api-report.api.md b/plugins/auth-backend/report.api.md similarity index 100% rename from plugins/auth-backend/api-report.api.md rename to plugins/auth-backend/report.api.md diff --git a/plugins/auth-node/api-report.api.md b/plugins/auth-node/report.api.md similarity index 100% rename from plugins/auth-node/api-report.api.md rename to plugins/auth-node/report.api.md diff --git a/plugins/auth-react/api-report.api.md b/plugins/auth-react/report.api.md similarity index 100% rename from plugins/auth-react/api-report.api.md rename to plugins/auth-react/report.api.md diff --git a/plugins/bitbucket-cloud-common/api-report.api.md b/plugins/bitbucket-cloud-common/report.api.md similarity index 100% rename from plugins/bitbucket-cloud-common/api-report.api.md rename to plugins/bitbucket-cloud-common/report.api.md diff --git a/plugins/catalog-backend-module-aws/api-report-alpha.api.md b/plugins/catalog-backend-module-aws/report-alpha.api.md similarity index 100% rename from plugins/catalog-backend-module-aws/api-report-alpha.api.md rename to plugins/catalog-backend-module-aws/report-alpha.api.md diff --git a/plugins/catalog-backend-module-aws/api-report.api.md b/plugins/catalog-backend-module-aws/report.api.md similarity index 100% rename from plugins/catalog-backend-module-aws/api-report.api.md rename to plugins/catalog-backend-module-aws/report.api.md diff --git a/plugins/catalog-backend-module-azure/api-report-alpha.api.md b/plugins/catalog-backend-module-azure/report-alpha.api.md similarity index 100% rename from plugins/catalog-backend-module-azure/api-report-alpha.api.md rename to plugins/catalog-backend-module-azure/report-alpha.api.md diff --git a/plugins/catalog-backend-module-azure/api-report.api.md b/plugins/catalog-backend-module-azure/report.api.md similarity index 100% rename from plugins/catalog-backend-module-azure/api-report.api.md rename to plugins/catalog-backend-module-azure/report.api.md diff --git a/plugins/catalog-backend-module-backstage-openapi/api-report.api.md b/plugins/catalog-backend-module-backstage-openapi/report.api.md similarity index 100% rename from plugins/catalog-backend-module-backstage-openapi/api-report.api.md rename to plugins/catalog-backend-module-backstage-openapi/report.api.md diff --git a/plugins/catalog-backend-module-bitbucket-cloud/api-report-alpha.api.md b/plugins/catalog-backend-module-bitbucket-cloud/report-alpha.api.md similarity index 100% rename from plugins/catalog-backend-module-bitbucket-cloud/api-report-alpha.api.md rename to plugins/catalog-backend-module-bitbucket-cloud/report-alpha.api.md diff --git a/plugins/catalog-backend-module-bitbucket-cloud/api-report.api.md b/plugins/catalog-backend-module-bitbucket-cloud/report.api.md similarity index 100% rename from plugins/catalog-backend-module-bitbucket-cloud/api-report.api.md rename to plugins/catalog-backend-module-bitbucket-cloud/report.api.md diff --git a/plugins/catalog-backend-module-bitbucket-server/api-report-alpha.api.md b/plugins/catalog-backend-module-bitbucket-server/report-alpha.api.md similarity index 100% rename from plugins/catalog-backend-module-bitbucket-server/api-report-alpha.api.md rename to plugins/catalog-backend-module-bitbucket-server/report-alpha.api.md diff --git a/plugins/catalog-backend-module-bitbucket-server/api-report.api.md b/plugins/catalog-backend-module-bitbucket-server/report.api.md similarity index 100% rename from plugins/catalog-backend-module-bitbucket-server/api-report.api.md rename to plugins/catalog-backend-module-bitbucket-server/report.api.md diff --git a/plugins/catalog-backend-module-gcp/api-report-alpha.api.md b/plugins/catalog-backend-module-gcp/report-alpha.api.md similarity index 100% rename from plugins/catalog-backend-module-gcp/api-report-alpha.api.md rename to plugins/catalog-backend-module-gcp/report-alpha.api.md diff --git a/plugins/catalog-backend-module-gcp/api-report.api.md b/plugins/catalog-backend-module-gcp/report.api.md similarity index 100% rename from plugins/catalog-backend-module-gcp/api-report.api.md rename to plugins/catalog-backend-module-gcp/report.api.md diff --git a/plugins/catalog-backend-module-gerrit/api-report-alpha.api.md b/plugins/catalog-backend-module-gerrit/report-alpha.api.md similarity index 100% rename from plugins/catalog-backend-module-gerrit/api-report-alpha.api.md rename to plugins/catalog-backend-module-gerrit/report-alpha.api.md diff --git a/plugins/catalog-backend-module-gerrit/api-report.api.md b/plugins/catalog-backend-module-gerrit/report.api.md similarity index 100% rename from plugins/catalog-backend-module-gerrit/api-report.api.md rename to plugins/catalog-backend-module-gerrit/report.api.md diff --git a/plugins/catalog-backend-module-github-org/api-report.api.md b/plugins/catalog-backend-module-github-org/report.api.md similarity index 100% rename from plugins/catalog-backend-module-github-org/api-report.api.md rename to plugins/catalog-backend-module-github-org/report.api.md diff --git a/plugins/catalog-backend-module-github/api-report-alpha.api.md b/plugins/catalog-backend-module-github/report-alpha.api.md similarity index 100% rename from plugins/catalog-backend-module-github/api-report-alpha.api.md rename to plugins/catalog-backend-module-github/report-alpha.api.md diff --git a/plugins/catalog-backend-module-github/api-report.api.md b/plugins/catalog-backend-module-github/report.api.md similarity index 100% rename from plugins/catalog-backend-module-github/api-report.api.md rename to plugins/catalog-backend-module-github/report.api.md diff --git a/plugins/catalog-backend-module-gitlab-org/api-report.api.md b/plugins/catalog-backend-module-gitlab-org/report.api.md similarity index 100% rename from plugins/catalog-backend-module-gitlab-org/api-report.api.md rename to plugins/catalog-backend-module-gitlab-org/report.api.md diff --git a/plugins/catalog-backend-module-gitlab/api-report-alpha.api.md b/plugins/catalog-backend-module-gitlab/report-alpha.api.md similarity index 100% rename from plugins/catalog-backend-module-gitlab/api-report-alpha.api.md rename to plugins/catalog-backend-module-gitlab/report-alpha.api.md diff --git a/plugins/catalog-backend-module-gitlab/api-report.api.md b/plugins/catalog-backend-module-gitlab/report.api.md similarity index 100% rename from plugins/catalog-backend-module-gitlab/api-report.api.md rename to plugins/catalog-backend-module-gitlab/report.api.md diff --git a/plugins/catalog-backend-module-incremental-ingestion/api-report-alpha.api.md b/plugins/catalog-backend-module-incremental-ingestion/report-alpha.api.md similarity index 100% rename from plugins/catalog-backend-module-incremental-ingestion/api-report-alpha.api.md rename to plugins/catalog-backend-module-incremental-ingestion/report-alpha.api.md diff --git a/plugins/catalog-backend-module-incremental-ingestion/api-report.api.md b/plugins/catalog-backend-module-incremental-ingestion/report.api.md similarity index 100% rename from plugins/catalog-backend-module-incremental-ingestion/api-report.api.md rename to plugins/catalog-backend-module-incremental-ingestion/report.api.md diff --git a/plugins/catalog-backend-module-ldap/api-report.api.md b/plugins/catalog-backend-module-ldap/report.api.md similarity index 100% rename from plugins/catalog-backend-module-ldap/api-report.api.md rename to plugins/catalog-backend-module-ldap/report.api.md diff --git a/plugins/catalog-backend-module-logs/api-report.api.md b/plugins/catalog-backend-module-logs/report.api.md similarity index 100% rename from plugins/catalog-backend-module-logs/api-report.api.md rename to plugins/catalog-backend-module-logs/report.api.md diff --git a/plugins/catalog-backend-module-msgraph/api-report-alpha.api.md b/plugins/catalog-backend-module-msgraph/report-alpha.api.md similarity index 100% rename from plugins/catalog-backend-module-msgraph/api-report-alpha.api.md rename to plugins/catalog-backend-module-msgraph/report-alpha.api.md diff --git a/plugins/catalog-backend-module-msgraph/api-report.api.md b/plugins/catalog-backend-module-msgraph/report.api.md similarity index 100% rename from plugins/catalog-backend-module-msgraph/api-report.api.md rename to plugins/catalog-backend-module-msgraph/report.api.md diff --git a/plugins/catalog-backend-module-openapi/api-report.api.md b/plugins/catalog-backend-module-openapi/report.api.md similarity index 100% rename from plugins/catalog-backend-module-openapi/api-report.api.md rename to plugins/catalog-backend-module-openapi/report.api.md diff --git a/plugins/catalog-backend-module-puppetdb/api-report-alpha.api.md b/plugins/catalog-backend-module-puppetdb/report-alpha.api.md similarity index 100% rename from plugins/catalog-backend-module-puppetdb/api-report-alpha.api.md rename to plugins/catalog-backend-module-puppetdb/report-alpha.api.md diff --git a/plugins/catalog-backend-module-puppetdb/api-report.api.md b/plugins/catalog-backend-module-puppetdb/report.api.md similarity index 100% rename from plugins/catalog-backend-module-puppetdb/api-report.api.md rename to plugins/catalog-backend-module-puppetdb/report.api.md diff --git a/plugins/catalog-backend-module-scaffolder-entity-model/api-report.api.md b/plugins/catalog-backend-module-scaffolder-entity-model/report.api.md similarity index 100% rename from plugins/catalog-backend-module-scaffolder-entity-model/api-report.api.md rename to plugins/catalog-backend-module-scaffolder-entity-model/report.api.md diff --git a/plugins/catalog-backend-module-unprocessed/api-report.api.md b/plugins/catalog-backend-module-unprocessed/report.api.md similarity index 100% rename from plugins/catalog-backend-module-unprocessed/api-report.api.md rename to plugins/catalog-backend-module-unprocessed/report.api.md diff --git a/plugins/catalog-backend/api-report-alpha.api.md b/plugins/catalog-backend/report-alpha.api.md similarity index 100% rename from plugins/catalog-backend/api-report-alpha.api.md rename to plugins/catalog-backend/report-alpha.api.md diff --git a/plugins/catalog-backend/api-report.api.md b/plugins/catalog-backend/report.api.md similarity index 100% rename from plugins/catalog-backend/api-report.api.md rename to plugins/catalog-backend/report.api.md diff --git a/plugins/catalog-common/api-report-alpha.api.md b/plugins/catalog-common/report-alpha.api.md similarity index 100% rename from plugins/catalog-common/api-report-alpha.api.md rename to plugins/catalog-common/report-alpha.api.md diff --git a/plugins/catalog-common/api-report.api.md b/plugins/catalog-common/report.api.md similarity index 100% rename from plugins/catalog-common/api-report.api.md rename to plugins/catalog-common/report.api.md diff --git a/plugins/catalog-graph/api-report-alpha.api.md b/plugins/catalog-graph/report-alpha.api.md similarity index 100% rename from plugins/catalog-graph/api-report-alpha.api.md rename to plugins/catalog-graph/report-alpha.api.md diff --git a/plugins/catalog-graph/api-report.api.md b/plugins/catalog-graph/report.api.md similarity index 100% rename from plugins/catalog-graph/api-report.api.md rename to plugins/catalog-graph/report.api.md diff --git a/plugins/catalog-import/api-report-alpha.api.md b/plugins/catalog-import/report-alpha.api.md similarity index 100% rename from plugins/catalog-import/api-report-alpha.api.md rename to plugins/catalog-import/report-alpha.api.md diff --git a/plugins/catalog-import/api-report.api.md b/plugins/catalog-import/report.api.md similarity index 100% rename from plugins/catalog-import/api-report.api.md rename to plugins/catalog-import/report.api.md diff --git a/plugins/catalog-node/api-report-alpha.api.md b/plugins/catalog-node/report-alpha.api.md similarity index 100% rename from plugins/catalog-node/api-report-alpha.api.md rename to plugins/catalog-node/report-alpha.api.md diff --git a/plugins/catalog-node/api-report.api.md b/plugins/catalog-node/report.api.md similarity index 100% rename from plugins/catalog-node/api-report.api.md rename to plugins/catalog-node/report.api.md diff --git a/plugins/catalog-react/api-report-alpha.api.md b/plugins/catalog-react/report-alpha.api.md similarity index 100% rename from plugins/catalog-react/api-report-alpha.api.md rename to plugins/catalog-react/report-alpha.api.md diff --git a/plugins/catalog-react/api-report.api.md b/plugins/catalog-react/report.api.md similarity index 100% rename from plugins/catalog-react/api-report.api.md rename to plugins/catalog-react/report.api.md diff --git a/plugins/catalog-unprocessed-entities-common/api-report.api.md b/plugins/catalog-unprocessed-entities-common/report.api.md similarity index 100% rename from plugins/catalog-unprocessed-entities-common/api-report.api.md rename to plugins/catalog-unprocessed-entities-common/report.api.md diff --git a/plugins/catalog-unprocessed-entities/api-report.api.md b/plugins/catalog-unprocessed-entities/report.api.md similarity index 100% rename from plugins/catalog-unprocessed-entities/api-report.api.md rename to plugins/catalog-unprocessed-entities/report.api.md diff --git a/plugins/catalog/api-report-alpha.api.md b/plugins/catalog/report-alpha.api.md similarity index 100% rename from plugins/catalog/api-report-alpha.api.md rename to plugins/catalog/report-alpha.api.md diff --git a/plugins/catalog/api-report.api.md b/plugins/catalog/report.api.md similarity index 100% rename from plugins/catalog/api-report.api.md rename to plugins/catalog/report.api.md diff --git a/plugins/config-schema/api-report.api.md b/plugins/config-schema/report.api.md similarity index 100% rename from plugins/config-schema/api-report.api.md rename to plugins/config-schema/report.api.md diff --git a/plugins/devtools-backend/api-report.api.md b/plugins/devtools-backend/report.api.md similarity index 100% rename from plugins/devtools-backend/api-report.api.md rename to plugins/devtools-backend/report.api.md diff --git a/plugins/devtools-common/api-report.api.md b/plugins/devtools-common/report.api.md similarity index 100% rename from plugins/devtools-common/api-report.api.md rename to plugins/devtools-common/report.api.md diff --git a/plugins/devtools/api-report-alpha.api.md b/plugins/devtools/report-alpha.api.md similarity index 97% rename from plugins/devtools/api-report-alpha.api.md rename to plugins/devtools/report-alpha.api.md index 5db9e75117..dbf690bc09 100644 --- a/plugins/devtools/api-report-alpha.api.md +++ b/plugins/devtools/report-alpha.api.md @@ -91,7 +91,7 @@ export default _default; // Warnings were encountered during analysis: // -// src/alpha/plugin.d.ts:12:15 - (ae-undocumented) Missing documentation for "_default". +// src/alpha/plugin.d.ts:16:15 - (ae-undocumented) Missing documentation for "_default". // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/devtools/api-report.api.md b/plugins/devtools/report.api.md similarity index 100% rename from plugins/devtools/api-report.api.md rename to plugins/devtools/report.api.md diff --git a/plugins/events-backend-module-aws-sqs/api-report-alpha.api.md b/plugins/events-backend-module-aws-sqs/report-alpha.api.md similarity index 100% rename from plugins/events-backend-module-aws-sqs/api-report-alpha.api.md rename to plugins/events-backend-module-aws-sqs/report-alpha.api.md diff --git a/plugins/events-backend-module-aws-sqs/api-report.api.md b/plugins/events-backend-module-aws-sqs/report.api.md similarity index 100% rename from plugins/events-backend-module-aws-sqs/api-report.api.md rename to plugins/events-backend-module-aws-sqs/report.api.md diff --git a/plugins/events-backend-module-azure/api-report-alpha.api.md b/plugins/events-backend-module-azure/report-alpha.api.md similarity index 100% rename from plugins/events-backend-module-azure/api-report-alpha.api.md rename to plugins/events-backend-module-azure/report-alpha.api.md diff --git a/plugins/events-backend-module-azure/api-report.api.md b/plugins/events-backend-module-azure/report.api.md similarity index 100% rename from plugins/events-backend-module-azure/api-report.api.md rename to plugins/events-backend-module-azure/report.api.md diff --git a/plugins/events-backend-module-bitbucket-cloud/api-report-alpha.api.md b/plugins/events-backend-module-bitbucket-cloud/report-alpha.api.md similarity index 100% rename from plugins/events-backend-module-bitbucket-cloud/api-report-alpha.api.md rename to plugins/events-backend-module-bitbucket-cloud/report-alpha.api.md diff --git a/plugins/events-backend-module-bitbucket-cloud/api-report.api.md b/plugins/events-backend-module-bitbucket-cloud/report.api.md similarity index 100% rename from plugins/events-backend-module-bitbucket-cloud/api-report.api.md rename to plugins/events-backend-module-bitbucket-cloud/report.api.md diff --git a/plugins/events-backend-module-gerrit/api-report-alpha.api.md b/plugins/events-backend-module-gerrit/report-alpha.api.md similarity index 100% rename from plugins/events-backend-module-gerrit/api-report-alpha.api.md rename to plugins/events-backend-module-gerrit/report-alpha.api.md diff --git a/plugins/events-backend-module-gerrit/api-report.api.md b/plugins/events-backend-module-gerrit/report.api.md similarity index 100% rename from plugins/events-backend-module-gerrit/api-report.api.md rename to plugins/events-backend-module-gerrit/report.api.md diff --git a/plugins/events-backend-module-github/api-report-alpha.api.md b/plugins/events-backend-module-github/report-alpha.api.md similarity index 100% rename from plugins/events-backend-module-github/api-report-alpha.api.md rename to plugins/events-backend-module-github/report-alpha.api.md diff --git a/plugins/events-backend-module-github/api-report.api.md b/plugins/events-backend-module-github/report.api.md similarity index 100% rename from plugins/events-backend-module-github/api-report.api.md rename to plugins/events-backend-module-github/report.api.md diff --git a/plugins/events-backend-module-gitlab/api-report-alpha.api.md b/plugins/events-backend-module-gitlab/report-alpha.api.md similarity index 100% rename from plugins/events-backend-module-gitlab/api-report-alpha.api.md rename to plugins/events-backend-module-gitlab/report-alpha.api.md diff --git a/plugins/events-backend-module-gitlab/api-report.api.md b/plugins/events-backend-module-gitlab/report.api.md similarity index 100% rename from plugins/events-backend-module-gitlab/api-report.api.md rename to plugins/events-backend-module-gitlab/report.api.md diff --git a/plugins/events-backend-test-utils/api-report.api.md b/plugins/events-backend-test-utils/report.api.md similarity index 100% rename from plugins/events-backend-test-utils/api-report.api.md rename to plugins/events-backend-test-utils/report.api.md diff --git a/plugins/events-backend/api-report-alpha.api.md b/plugins/events-backend/report-alpha.api.md similarity index 100% rename from plugins/events-backend/api-report-alpha.api.md rename to plugins/events-backend/report-alpha.api.md diff --git a/plugins/events-backend/api-report.api.md b/plugins/events-backend/report.api.md similarity index 100% rename from plugins/events-backend/api-report.api.md rename to plugins/events-backend/report.api.md diff --git a/plugins/events-node/api-report-alpha.api.md b/plugins/events-node/report-alpha.api.md similarity index 100% rename from plugins/events-node/api-report-alpha.api.md rename to plugins/events-node/report-alpha.api.md diff --git a/plugins/events-node/api-report.api.md b/plugins/events-node/report.api.md similarity index 100% rename from plugins/events-node/api-report.api.md rename to plugins/events-node/report.api.md diff --git a/plugins/example-todo-list-backend/api-report.api.md b/plugins/example-todo-list-backend/report.api.md similarity index 100% rename from plugins/example-todo-list-backend/api-report.api.md rename to plugins/example-todo-list-backend/report.api.md diff --git a/plugins/example-todo-list-common/api-report.api.md b/plugins/example-todo-list-common/report.api.md similarity index 100% rename from plugins/example-todo-list-common/api-report.api.md rename to plugins/example-todo-list-common/report.api.md diff --git a/plugins/example-todo-list/api-report.api.md b/plugins/example-todo-list/report.api.md similarity index 100% rename from plugins/example-todo-list/api-report.api.md rename to plugins/example-todo-list/report.api.md diff --git a/plugins/home-react/api-report.api.md b/plugins/home-react/report.api.md similarity index 100% rename from plugins/home-react/api-report.api.md rename to plugins/home-react/report.api.md diff --git a/plugins/home/api-report-alpha.api.md b/plugins/home/report-alpha.api.md similarity index 100% rename from plugins/home/api-report-alpha.api.md rename to plugins/home/report-alpha.api.md diff --git a/plugins/home/api-report.api.md b/plugins/home/report.api.md similarity index 100% rename from plugins/home/api-report.api.md rename to plugins/home/report.api.md diff --git a/plugins/kubernetes-backend/api-report-alpha.api.md b/plugins/kubernetes-backend/report-alpha.api.md similarity index 100% rename from plugins/kubernetes-backend/api-report-alpha.api.md rename to plugins/kubernetes-backend/report-alpha.api.md diff --git a/plugins/kubernetes-backend/api-report.api.md b/plugins/kubernetes-backend/report.api.md similarity index 100% rename from plugins/kubernetes-backend/api-report.api.md rename to plugins/kubernetes-backend/report.api.md diff --git a/plugins/kubernetes-cluster/api-report.api.md b/plugins/kubernetes-cluster/report.api.md similarity index 100% rename from plugins/kubernetes-cluster/api-report.api.md rename to plugins/kubernetes-cluster/report.api.md diff --git a/plugins/kubernetes-common/api-report.api.md b/plugins/kubernetes-common/report.api.md similarity index 100% rename from plugins/kubernetes-common/api-report.api.md rename to plugins/kubernetes-common/report.api.md diff --git a/plugins/kubernetes-node/api-report.api.md b/plugins/kubernetes-node/report.api.md similarity index 100% rename from plugins/kubernetes-node/api-report.api.md rename to plugins/kubernetes-node/report.api.md diff --git a/plugins/kubernetes-react/api-report.api.md b/plugins/kubernetes-react/report.api.md similarity index 100% rename from plugins/kubernetes-react/api-report.api.md rename to plugins/kubernetes-react/report.api.md diff --git a/plugins/kubernetes/api-report-alpha.md b/plugins/kubernetes/report-alpha.api.md similarity index 97% rename from plugins/kubernetes/api-report-alpha.md rename to plugins/kubernetes/report-alpha.api.md index 9ba748577f..f257d56587 100644 --- a/plugins/kubernetes/api-report-alpha.md +++ b/plugins/kubernetes/report-alpha.api.md @@ -162,5 +162,9 @@ const _default: FrontendPlugin< >; export default _default; +// Warnings were encountered during analysis: +// +// src/alpha/plugin.d.ts:1:15 - (ae-undocumented) Missing documentation for "_default". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/kubernetes/api-report.api.md b/plugins/kubernetes/report.api.md similarity index 100% rename from plugins/kubernetes/api-report.api.md rename to plugins/kubernetes/report.api.md diff --git a/plugins/notifications-backend-module-email/api-report.api.md b/plugins/notifications-backend-module-email/report.api.md similarity index 100% rename from plugins/notifications-backend-module-email/api-report.api.md rename to plugins/notifications-backend-module-email/report.api.md diff --git a/plugins/notifications-backend/api-report.api.md b/plugins/notifications-backend/report.api.md similarity index 100% rename from plugins/notifications-backend/api-report.api.md rename to plugins/notifications-backend/report.api.md diff --git a/plugins/notifications-common/api-report.api.md b/plugins/notifications-common/report.api.md similarity index 100% rename from plugins/notifications-common/api-report.api.md rename to plugins/notifications-common/report.api.md diff --git a/plugins/notifications-node/api-report.api.md b/plugins/notifications-node/report.api.md similarity index 100% rename from plugins/notifications-node/api-report.api.md rename to plugins/notifications-node/report.api.md diff --git a/plugins/notifications/api-report.api.md b/plugins/notifications/report.api.md similarity index 100% rename from plugins/notifications/api-report.api.md rename to plugins/notifications/report.api.md diff --git a/plugins/org-react/api-report.api.md b/plugins/org-react/report.api.md similarity index 100% rename from plugins/org-react/api-report.api.md rename to plugins/org-react/report.api.md diff --git a/plugins/org/api-report-alpha.api.md b/plugins/org/report-alpha.api.md similarity index 100% rename from plugins/org/api-report-alpha.api.md rename to plugins/org/report-alpha.api.md diff --git a/plugins/org/api-report.api.md b/plugins/org/report.api.md similarity index 100% rename from plugins/org/api-report.api.md rename to plugins/org/report.api.md diff --git a/plugins/permission-backend-module-policy-allow-all/api-report.api.md b/plugins/permission-backend-module-policy-allow-all/report.api.md similarity index 100% rename from plugins/permission-backend-module-policy-allow-all/api-report.api.md rename to plugins/permission-backend-module-policy-allow-all/report.api.md diff --git a/plugins/permission-backend/api-report-alpha.api.md b/plugins/permission-backend/report-alpha.api.md similarity index 100% rename from plugins/permission-backend/api-report-alpha.api.md rename to plugins/permission-backend/report-alpha.api.md diff --git a/plugins/permission-backend/api-report.api.md b/plugins/permission-backend/report.api.md similarity index 100% rename from plugins/permission-backend/api-report.api.md rename to plugins/permission-backend/report.api.md diff --git a/plugins/permission-common/api-report.api.md b/plugins/permission-common/report.api.md similarity index 100% rename from plugins/permission-common/api-report.api.md rename to plugins/permission-common/report.api.md diff --git a/plugins/permission-node/api-report-alpha.api.md b/plugins/permission-node/report-alpha.api.md similarity index 100% rename from plugins/permission-node/api-report-alpha.api.md rename to plugins/permission-node/report-alpha.api.md diff --git a/plugins/permission-node/api-report.api.md b/plugins/permission-node/report.api.md similarity index 100% rename from plugins/permission-node/api-report.api.md rename to plugins/permission-node/report.api.md diff --git a/plugins/permission-react/api-report.api.md b/plugins/permission-react/report.api.md similarity index 100% rename from plugins/permission-react/api-report.api.md rename to plugins/permission-react/report.api.md diff --git a/plugins/proxy-backend/api-report-alpha.api.md b/plugins/proxy-backend/report-alpha.api.md similarity index 100% rename from plugins/proxy-backend/api-report-alpha.api.md rename to plugins/proxy-backend/report-alpha.api.md diff --git a/plugins/proxy-backend/api-report.api.md b/plugins/proxy-backend/report.api.md similarity index 100% rename from plugins/proxy-backend/api-report.api.md rename to plugins/proxy-backend/report.api.md diff --git a/plugins/scaffolder-backend-module-azure/api-report.api.md b/plugins/scaffolder-backend-module-azure/report.api.md similarity index 100% rename from plugins/scaffolder-backend-module-azure/api-report.api.md rename to plugins/scaffolder-backend-module-azure/report.api.md diff --git a/plugins/scaffolder-backend-module-bitbucket-cloud/api-report.api.md b/plugins/scaffolder-backend-module-bitbucket-cloud/report.api.md similarity index 100% rename from plugins/scaffolder-backend-module-bitbucket-cloud/api-report.api.md rename to plugins/scaffolder-backend-module-bitbucket-cloud/report.api.md diff --git a/plugins/scaffolder-backend-module-bitbucket-server/api-report.api.md b/plugins/scaffolder-backend-module-bitbucket-server/report.api.md similarity index 100% rename from plugins/scaffolder-backend-module-bitbucket-server/api-report.api.md rename to plugins/scaffolder-backend-module-bitbucket-server/report.api.md diff --git a/plugins/scaffolder-backend-module-bitbucket/api-report.api.md b/plugins/scaffolder-backend-module-bitbucket/report.api.md similarity index 90% rename from plugins/scaffolder-backend-module-bitbucket/api-report.api.md rename to plugins/scaffolder-backend-module-bitbucket/report.api.md index 34c9eb8c67..8721760248 100644 --- a/plugins/scaffolder-backend-module-bitbucket/api-report.api.md +++ b/plugins/scaffolder-backend-module-bitbucket/report.api.md @@ -59,8 +59,8 @@ export const createPublishBitbucketServerPullRequestAction: typeof bitbucketServ // Warnings were encountered during analysis: // -// src/deprecated.d.ts:7:22 - (ae-undocumented) Missing documentation for "createPublishBitbucketCloudAction". -// src/deprecated.d.ts:11:22 - (ae-undocumented) Missing documentation for "createBitbucketPipelinesRunAction". -// src/deprecated.d.ts:22:22 - (ae-undocumented) Missing documentation for "createPublishBitbucketServerAction". -// src/deprecated.d.ts:26:22 - (ae-undocumented) Missing documentation for "createPublishBitbucketServerPullRequestAction". +// src/deprecated.d.ts:8:22 - (ae-undocumented) Missing documentation for "createPublishBitbucketCloudAction". +// src/deprecated.d.ts:13:22 - (ae-undocumented) Missing documentation for "createBitbucketPipelinesRunAction". +// src/deprecated.d.ts:29:22 - (ae-undocumented) Missing documentation for "createPublishBitbucketServerAction". +// src/deprecated.d.ts:34:22 - (ae-undocumented) Missing documentation for "createPublishBitbucketServerPullRequestAction". ``` diff --git a/plugins/scaffolder-backend-module-confluence-to-markdown/api-report.api.md b/plugins/scaffolder-backend-module-confluence-to-markdown/report.api.md similarity index 100% rename from plugins/scaffolder-backend-module-confluence-to-markdown/api-report.api.md rename to plugins/scaffolder-backend-module-confluence-to-markdown/report.api.md diff --git a/plugins/scaffolder-backend-module-cookiecutter/api-report.api.md b/plugins/scaffolder-backend-module-cookiecutter/report.api.md similarity index 100% rename from plugins/scaffolder-backend-module-cookiecutter/api-report.api.md rename to plugins/scaffolder-backend-module-cookiecutter/report.api.md diff --git a/plugins/scaffolder-backend-module-gcp/api-report.api.md b/plugins/scaffolder-backend-module-gcp/report.api.md similarity index 100% rename from plugins/scaffolder-backend-module-gcp/api-report.api.md rename to plugins/scaffolder-backend-module-gcp/report.api.md diff --git a/plugins/scaffolder-backend-module-gerrit/api-report.api.md b/plugins/scaffolder-backend-module-gerrit/report.api.md similarity index 100% rename from plugins/scaffolder-backend-module-gerrit/api-report.api.md rename to plugins/scaffolder-backend-module-gerrit/report.api.md diff --git a/plugins/scaffolder-backend-module-gitea/api-report.api.md b/plugins/scaffolder-backend-module-gitea/report.api.md similarity index 100% rename from plugins/scaffolder-backend-module-gitea/api-report.api.md rename to plugins/scaffolder-backend-module-gitea/report.api.md diff --git a/plugins/scaffolder-backend-module-github/api-report.api.md b/plugins/scaffolder-backend-module-github/report.api.md similarity index 100% rename from plugins/scaffolder-backend-module-github/api-report.api.md rename to plugins/scaffolder-backend-module-github/report.api.md diff --git a/plugins/scaffolder-backend-module-gitlab/api-report.api.md b/plugins/scaffolder-backend-module-gitlab/report.api.md similarity index 100% rename from plugins/scaffolder-backend-module-gitlab/api-report.api.md rename to plugins/scaffolder-backend-module-gitlab/report.api.md diff --git a/plugins/scaffolder-backend-module-notifications/api-report.api.md b/plugins/scaffolder-backend-module-notifications/report.api.md similarity index 100% rename from plugins/scaffolder-backend-module-notifications/api-report.api.md rename to plugins/scaffolder-backend-module-notifications/report.api.md diff --git a/plugins/scaffolder-backend-module-rails/api-report.api.md b/plugins/scaffolder-backend-module-rails/report.api.md similarity index 100% rename from plugins/scaffolder-backend-module-rails/api-report.api.md rename to plugins/scaffolder-backend-module-rails/report.api.md diff --git a/plugins/scaffolder-backend-module-sentry/api-report.api.md b/plugins/scaffolder-backend-module-sentry/report.api.md similarity index 100% rename from plugins/scaffolder-backend-module-sentry/api-report.api.md rename to plugins/scaffolder-backend-module-sentry/report.api.md diff --git a/plugins/scaffolder-backend-module-yeoman/api-report.api.md b/plugins/scaffolder-backend-module-yeoman/report.api.md similarity index 100% rename from plugins/scaffolder-backend-module-yeoman/api-report.api.md rename to plugins/scaffolder-backend-module-yeoman/report.api.md diff --git a/plugins/scaffolder-backend/api-report-alpha.api.md b/plugins/scaffolder-backend/report-alpha.api.md similarity index 100% rename from plugins/scaffolder-backend/api-report-alpha.api.md rename to plugins/scaffolder-backend/report-alpha.api.md diff --git a/plugins/scaffolder-backend/api-report.api.md b/plugins/scaffolder-backend/report.api.md similarity index 96% rename from plugins/scaffolder-backend/api-report.api.md rename to plugins/scaffolder-backend/report.api.md index 082e0baaa5..f51d756528 100644 --- a/plugins/scaffolder-backend/api-report.api.md +++ b/plugins/scaffolder-backend/report.api.md @@ -848,25 +848,25 @@ export type TemplatePermissionRuleInput< // src/scaffolder/actions/TemplateActionRegistry.d.ts:9:5 - (ae-undocumented) Missing documentation for "get". // src/scaffolder/actions/TemplateActionRegistry.d.ts:10:5 - (ae-undocumented) Missing documentation for "list". // src/scaffolder/actions/builtin/createBuiltinActions.d.ts:37:5 - (ae-undocumented) Missing documentation for "additionalTemplateGlobals". -// src/scaffolder/actions/deprecated.d.ts:11:22 - (ae-undocumented) Missing documentation for "createGithubActionsDispatchAction". -// src/scaffolder/actions/deprecated.d.ts:15:22 - (ae-undocumented) Missing documentation for "createGithubDeployKeyAction". -// src/scaffolder/actions/deprecated.d.ts:19:22 - (ae-undocumented) Missing documentation for "createGithubEnvironmentAction". -// src/scaffolder/actions/deprecated.d.ts:23:22 - (ae-undocumented) Missing documentation for "createGithubIssuesLabelAction". -// src/scaffolder/actions/deprecated.d.ts:27:1 - (ae-undocumented) Missing documentation for "CreateGithubPullRequestActionOptions". -// src/scaffolder/actions/deprecated.d.ts:31:22 - (ae-undocumented) Missing documentation for "createGithubRepoCreateAction". -// src/scaffolder/actions/deprecated.d.ts:35:22 - (ae-undocumented) Missing documentation for "createGithubRepoPushAction". -// src/scaffolder/actions/deprecated.d.ts:39:22 - (ae-undocumented) Missing documentation for "createGithubWebhookAction". -// src/scaffolder/actions/deprecated.d.ts:43:22 - (ae-undocumented) Missing documentation for "createPublishGithubAction". -// src/scaffolder/actions/deprecated.d.ts:47:22 - (ae-undocumented) Missing documentation for "createPublishGithubPullRequestAction". -// src/scaffolder/actions/deprecated.d.ts:69:22 - (ae-undocumented) Missing documentation for "createPublishBitbucketAction". -// src/scaffolder/actions/deprecated.d.ts:73:22 - (ae-undocumented) Missing documentation for "createPublishBitbucketCloudAction". -// src/scaffolder/actions/deprecated.d.ts:77:22 - (ae-undocumented) Missing documentation for "createPublishBitbucketServerAction". -// src/scaffolder/actions/deprecated.d.ts:81:22 - (ae-undocumented) Missing documentation for "createPublishBitbucketServerPullRequestAction". -// src/scaffolder/actions/deprecated.d.ts:85:22 - (ae-undocumented) Missing documentation for "createPublishAzureAction". -// src/scaffolder/actions/deprecated.d.ts:89:22 - (ae-undocumented) Missing documentation for "createPublishGerritAction". -// src/scaffolder/actions/deprecated.d.ts:93:22 - (ae-undocumented) Missing documentation for "createPublishGerritReviewAction". -// src/scaffolder/actions/deprecated.d.ts:97:22 - (ae-undocumented) Missing documentation for "createPublishGitlabAction". -// src/scaffolder/actions/deprecated.d.ts:101:22 - (ae-undocumented) Missing documentation for "createPublishGitlabMergeRequestAction". +// src/scaffolder/actions/deprecated.d.ts:12:22 - (ae-undocumented) Missing documentation for "createGithubActionsDispatchAction". +// src/scaffolder/actions/deprecated.d.ts:17:22 - (ae-undocumented) Missing documentation for "createGithubDeployKeyAction". +// src/scaffolder/actions/deprecated.d.ts:22:22 - (ae-undocumented) Missing documentation for "createGithubEnvironmentAction". +// src/scaffolder/actions/deprecated.d.ts:27:22 - (ae-undocumented) Missing documentation for "createGithubIssuesLabelAction". +// src/scaffolder/actions/deprecated.d.ts:32:1 - (ae-undocumented) Missing documentation for "CreateGithubPullRequestActionOptions". +// src/scaffolder/actions/deprecated.d.ts:37:22 - (ae-undocumented) Missing documentation for "createGithubRepoCreateAction". +// src/scaffolder/actions/deprecated.d.ts:42:22 - (ae-undocumented) Missing documentation for "createGithubRepoPushAction". +// src/scaffolder/actions/deprecated.d.ts:47:22 - (ae-undocumented) Missing documentation for "createGithubWebhookAction". +// src/scaffolder/actions/deprecated.d.ts:52:22 - (ae-undocumented) Missing documentation for "createPublishGithubAction". +// src/scaffolder/actions/deprecated.d.ts:57:22 - (ae-undocumented) Missing documentation for "createPublishGithubPullRequestAction". +// src/scaffolder/actions/deprecated.d.ts:79:22 - (ae-undocumented) Missing documentation for "createPublishBitbucketAction". +// src/scaffolder/actions/deprecated.d.ts:84:22 - (ae-undocumented) Missing documentation for "createPublishBitbucketCloudAction". +// src/scaffolder/actions/deprecated.d.ts:89:22 - (ae-undocumented) Missing documentation for "createPublishBitbucketServerAction". +// src/scaffolder/actions/deprecated.d.ts:94:22 - (ae-undocumented) Missing documentation for "createPublishBitbucketServerPullRequestAction". +// src/scaffolder/actions/deprecated.d.ts:99:22 - (ae-undocumented) Missing documentation for "createPublishAzureAction". +// src/scaffolder/actions/deprecated.d.ts:104:22 - (ae-undocumented) Missing documentation for "createPublishGerritAction". +// src/scaffolder/actions/deprecated.d.ts:109:22 - (ae-undocumented) Missing documentation for "createPublishGerritReviewAction". +// src/scaffolder/actions/deprecated.d.ts:114:22 - (ae-undocumented) Missing documentation for "createPublishGitlabAction". +// src/scaffolder/actions/deprecated.d.ts:119:22 - (ae-undocumented) Missing documentation for "createPublishGitlabMergeRequestAction". // src/scaffolder/tasks/DatabaseTaskStore.d.ts:41:5 - (ae-undocumented) Missing documentation for "create". // src/scaffolder/tasks/DatabaseTaskStore.d.ts:48:5 - (ae-undocumented) Missing documentation for "list". // src/scaffolder/tasks/DatabaseTaskStore.d.ts:53:5 - (ae-undocumented) Missing documentation for "getTask". diff --git a/plugins/scaffolder-common/api-report-alpha.api.md b/plugins/scaffolder-common/report-alpha.api.md similarity index 100% rename from plugins/scaffolder-common/api-report-alpha.api.md rename to plugins/scaffolder-common/report-alpha.api.md diff --git a/plugins/scaffolder-common/api-report.api.md b/plugins/scaffolder-common/report.api.md similarity index 100% rename from plugins/scaffolder-common/api-report.api.md rename to plugins/scaffolder-common/report.api.md diff --git a/plugins/scaffolder-node-test-utils/api-report.api.md b/plugins/scaffolder-node-test-utils/report.api.md similarity index 100% rename from plugins/scaffolder-node-test-utils/api-report.api.md rename to plugins/scaffolder-node-test-utils/report.api.md diff --git a/plugins/scaffolder-node/api-report-alpha.api.md b/plugins/scaffolder-node/report-alpha.api.md similarity index 100% rename from plugins/scaffolder-node/api-report-alpha.api.md rename to plugins/scaffolder-node/report-alpha.api.md diff --git a/plugins/scaffolder-node/api-report.api.md b/plugins/scaffolder-node/report.api.md similarity index 100% rename from plugins/scaffolder-node/api-report.api.md rename to plugins/scaffolder-node/report.api.md diff --git a/plugins/scaffolder-react/api-report-alpha.api.md b/plugins/scaffolder-react/report-alpha.api.md similarity index 100% rename from plugins/scaffolder-react/api-report-alpha.api.md rename to plugins/scaffolder-react/report-alpha.api.md diff --git a/plugins/scaffolder-react/api-report.api.md b/plugins/scaffolder-react/report.api.md similarity index 100% rename from plugins/scaffolder-react/api-report.api.md rename to plugins/scaffolder-react/report.api.md diff --git a/plugins/scaffolder/api-report-alpha.api.md b/plugins/scaffolder/report-alpha.api.md similarity index 100% rename from plugins/scaffolder/api-report-alpha.api.md rename to plugins/scaffolder/report-alpha.api.md diff --git a/plugins/scaffolder/api-report.api.md b/plugins/scaffolder/report.api.md similarity index 100% rename from plugins/scaffolder/api-report.api.md rename to plugins/scaffolder/report.api.md diff --git a/plugins/search-backend-module-catalog/api-report-alpha.api.md b/plugins/search-backend-module-catalog/report-alpha.api.md similarity index 100% rename from plugins/search-backend-module-catalog/api-report-alpha.api.md rename to plugins/search-backend-module-catalog/report-alpha.api.md diff --git a/plugins/search-backend-module-catalog/api-report.api.md b/plugins/search-backend-module-catalog/report.api.md similarity index 100% rename from plugins/search-backend-module-catalog/api-report.api.md rename to plugins/search-backend-module-catalog/report.api.md diff --git a/plugins/search-backend-module-elasticsearch/api-report-alpha.api.md b/plugins/search-backend-module-elasticsearch/report-alpha.api.md similarity index 100% rename from plugins/search-backend-module-elasticsearch/api-report-alpha.api.md rename to plugins/search-backend-module-elasticsearch/report-alpha.api.md diff --git a/plugins/search-backend-module-elasticsearch/api-report.api.md b/plugins/search-backend-module-elasticsearch/report.api.md similarity index 100% rename from plugins/search-backend-module-elasticsearch/api-report.api.md rename to plugins/search-backend-module-elasticsearch/report.api.md diff --git a/plugins/search-backend-module-explore/api-report-alpha.api.md b/plugins/search-backend-module-explore/report-alpha.api.md similarity index 100% rename from plugins/search-backend-module-explore/api-report-alpha.api.md rename to plugins/search-backend-module-explore/report-alpha.api.md diff --git a/plugins/search-backend-module-explore/api-report.api.md b/plugins/search-backend-module-explore/report.api.md similarity index 100% rename from plugins/search-backend-module-explore/api-report.api.md rename to plugins/search-backend-module-explore/report.api.md diff --git a/plugins/search-backend-module-pg/api-report-alpha.api.md b/plugins/search-backend-module-pg/report-alpha.api.md similarity index 100% rename from plugins/search-backend-module-pg/api-report-alpha.api.md rename to plugins/search-backend-module-pg/report-alpha.api.md diff --git a/plugins/search-backend-module-pg/api-report.api.md b/plugins/search-backend-module-pg/report.api.md similarity index 100% rename from plugins/search-backend-module-pg/api-report.api.md rename to plugins/search-backend-module-pg/report.api.md diff --git a/plugins/search-backend-module-stack-overflow-collator/api-report.api.md b/plugins/search-backend-module-stack-overflow-collator/report.api.md similarity index 100% rename from plugins/search-backend-module-stack-overflow-collator/api-report.api.md rename to plugins/search-backend-module-stack-overflow-collator/report.api.md diff --git a/plugins/search-backend-module-techdocs/api-report-alpha.api.md b/plugins/search-backend-module-techdocs/report-alpha.api.md similarity index 100% rename from plugins/search-backend-module-techdocs/api-report-alpha.api.md rename to plugins/search-backend-module-techdocs/report-alpha.api.md diff --git a/plugins/search-backend-module-techdocs/api-report.api.md b/plugins/search-backend-module-techdocs/report.api.md similarity index 100% rename from plugins/search-backend-module-techdocs/api-report.api.md rename to plugins/search-backend-module-techdocs/report.api.md diff --git a/plugins/search-backend-node/api-report-alpha.api.md b/plugins/search-backend-node/report-alpha.api.md similarity index 100% rename from plugins/search-backend-node/api-report-alpha.api.md rename to plugins/search-backend-node/report-alpha.api.md diff --git a/plugins/search-backend-node/api-report.api.md b/plugins/search-backend-node/report.api.md similarity index 100% rename from plugins/search-backend-node/api-report.api.md rename to plugins/search-backend-node/report.api.md diff --git a/plugins/search-backend/api-report-alpha.api.md b/plugins/search-backend/report-alpha.api.md similarity index 100% rename from plugins/search-backend/api-report-alpha.api.md rename to plugins/search-backend/report-alpha.api.md diff --git a/plugins/search-backend/api-report.api.md b/plugins/search-backend/report.api.md similarity index 100% rename from plugins/search-backend/api-report.api.md rename to plugins/search-backend/report.api.md diff --git a/plugins/search-common/api-report.api.md b/plugins/search-common/report.api.md similarity index 100% rename from plugins/search-common/api-report.api.md rename to plugins/search-common/report.api.md diff --git a/plugins/search-react/api-report-alpha.api.md b/plugins/search-react/report-alpha.api.md similarity index 100% rename from plugins/search-react/api-report-alpha.api.md rename to plugins/search-react/report-alpha.api.md diff --git a/plugins/search-react/api-report.api.md b/plugins/search-react/report.api.md similarity index 100% rename from plugins/search-react/api-report.api.md rename to plugins/search-react/report.api.md diff --git a/plugins/search/api-report-alpha.api.md b/plugins/search/report-alpha.api.md similarity index 97% rename from plugins/search/api-report-alpha.api.md rename to plugins/search/report-alpha.api.md index 36c703a669..052340c432 100644 --- a/plugins/search/api-report-alpha.api.md +++ b/plugins/search/report-alpha.api.md @@ -198,8 +198,8 @@ export const searchPage: ExtensionDefinition<{ // // src/alpha.d.ts:2:22 - (ae-undocumented) Missing documentation for "searchApi". // src/alpha.d.ts:4:22 - (ae-undocumented) Missing documentation for "searchPage". -// src/alpha.d.ts:9:22 - (ae-undocumented) Missing documentation for "searchNavItem". -// src/alpha.d.ts:13:15 - (ae-undocumented) Missing documentation for "_default". +// src/alpha.d.ts:12:22 - (ae-undocumented) Missing documentation for "searchNavItem". +// src/alpha.d.ts:18:15 - (ae-undocumented) Missing documentation for "_default". // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/search/api-report.api.md b/plugins/search/report.api.md similarity index 100% rename from plugins/search/api-report.api.md rename to plugins/search/report.api.md diff --git a/plugins/signals-backend/api-report.api.md b/plugins/signals-backend/report.api.md similarity index 100% rename from plugins/signals-backend/api-report.api.md rename to plugins/signals-backend/report.api.md diff --git a/plugins/signals-node/api-report.api.md b/plugins/signals-node/report.api.md similarity index 100% rename from plugins/signals-node/api-report.api.md rename to plugins/signals-node/report.api.md diff --git a/plugins/signals-react/api-report.api.md b/plugins/signals-react/report.api.md similarity index 100% rename from plugins/signals-react/api-report.api.md rename to plugins/signals-react/report.api.md diff --git a/plugins/signals/api-report.api.md b/plugins/signals/report.api.md similarity index 100% rename from plugins/signals/api-report.api.md rename to plugins/signals/report.api.md diff --git a/plugins/techdocs-addons-test-utils/api-report.api.md b/plugins/techdocs-addons-test-utils/report.api.md similarity index 100% rename from plugins/techdocs-addons-test-utils/api-report.api.md rename to plugins/techdocs-addons-test-utils/report.api.md diff --git a/plugins/techdocs-backend/api-report-alpha.api.md b/plugins/techdocs-backend/report-alpha.api.md similarity index 100% rename from plugins/techdocs-backend/api-report-alpha.api.md rename to plugins/techdocs-backend/report-alpha.api.md diff --git a/plugins/techdocs-backend/api-report.api.md b/plugins/techdocs-backend/report.api.md similarity index 100% rename from plugins/techdocs-backend/api-report.api.md rename to plugins/techdocs-backend/report.api.md diff --git a/plugins/techdocs-module-addons-contrib/api-report.api.md b/plugins/techdocs-module-addons-contrib/report.api.md similarity index 100% rename from plugins/techdocs-module-addons-contrib/api-report.api.md rename to plugins/techdocs-module-addons-contrib/report.api.md diff --git a/plugins/techdocs-node/api-report.api.md b/plugins/techdocs-node/report.api.md similarity index 100% rename from plugins/techdocs-node/api-report.api.md rename to plugins/techdocs-node/report.api.md diff --git a/plugins/techdocs-react/api-report.api.md b/plugins/techdocs-react/report.api.md similarity index 100% rename from plugins/techdocs-react/api-report.api.md rename to plugins/techdocs-react/report.api.md diff --git a/plugins/techdocs/api-report-alpha.api.md b/plugins/techdocs/report-alpha.api.md similarity index 99% rename from plugins/techdocs/api-report-alpha.api.md rename to plugins/techdocs/report-alpha.api.md index 8a9ce1e1dc..c2f75be11e 100644 --- a/plugins/techdocs/api-report-alpha.api.md +++ b/plugins/techdocs/report-alpha.api.md @@ -317,7 +317,7 @@ export const techDocsSearchResultListItemExtension: ExtensionDefinition<{ // Warnings were encountered during analysis: // // src/alpha.d.ts:2:22 - (ae-undocumented) Missing documentation for "techDocsSearchResultListItemExtension". -// src/alpha.d.ts:10:15 - (ae-undocumented) Missing documentation for "_default". +// src/alpha.d.ts:16:15 - (ae-undocumented) Missing documentation for "_default". // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/techdocs/api-report.api.md b/plugins/techdocs/report.api.md similarity index 100% rename from plugins/techdocs/api-report.api.md rename to plugins/techdocs/report.api.md diff --git a/plugins/user-settings-backend/api-report-alpha.api.md b/plugins/user-settings-backend/report-alpha.api.md similarity index 100% rename from plugins/user-settings-backend/api-report-alpha.api.md rename to plugins/user-settings-backend/report-alpha.api.md diff --git a/plugins/user-settings-backend/api-report.api.md b/plugins/user-settings-backend/report.api.md similarity index 100% rename from plugins/user-settings-backend/api-report.api.md rename to plugins/user-settings-backend/report.api.md diff --git a/plugins/user-settings-common/api-report.api.md b/plugins/user-settings-common/report.api.md similarity index 100% rename from plugins/user-settings-common/api-report.api.md rename to plugins/user-settings-common/report.api.md diff --git a/plugins/user-settings/api-report-alpha.api.md b/plugins/user-settings/report-alpha.api.md similarity index 97% rename from plugins/user-settings/api-report-alpha.api.md rename to plugins/user-settings/report-alpha.api.md index 0a5dbde28d..299bbc3498 100644 --- a/plugins/user-settings/api-report-alpha.api.md +++ b/plugins/user-settings/report-alpha.api.md @@ -130,7 +130,7 @@ export const userSettingsTranslationRef: TranslationRef< // Warnings were encountered during analysis: // // src/alpha.d.ts:3:22 - (ae-undocumented) Missing documentation for "settingsNavItem". -// src/alpha.d.ts:9:15 - (ae-undocumented) Missing documentation for "_default". +// src/alpha.d.ts:11:15 - (ae-undocumented) Missing documentation for "_default". // src/translation.d.ts:2:22 - (ae-undocumented) Missing documentation for "userSettingsTranslationRef". // (No @packageDocumentation comment for this package) diff --git a/plugins/user-settings/api-report.api.md b/plugins/user-settings/report.api.md similarity index 100% rename from plugins/user-settings/api-report.api.md rename to plugins/user-settings/report.api.md From abfbf718130c4240c80705cfa4567c30bb28e16f Mon Sep 17 00:00:00 2001 From: secustor Date: Fri, 26 Jul 2024 14:07:18 +0200 Subject: [PATCH 129/164] update changesets Signed-off-by: secustor --- .changeset/fluffy-pears-cry.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.changeset/fluffy-pears-cry.md b/.changeset/fluffy-pears-cry.md index ad7eed680c..2da74eb857 100644 --- a/.changeset/fluffy-pears-cry.md +++ b/.changeset/fluffy-pears-cry.md @@ -1,5 +1,6 @@ --- -'@backstage/repo-tools': patch +'@backstage/repo-tools': minor --- -Update @microsoft/api-extractor and use their api report resolution +Update @microsoft/api-extractor and use their api report resolution. +Change api report format from `api-report.md` to `report.api.md` From 3dff35c220f245ed408fd989546cb7c8b71a95ef Mon Sep 17 00:00:00 2001 From: secustor Date: Fri, 26 Jul 2024 15:21:53 +0200 Subject: [PATCH 130/164] use extractor output to remove reports from tracking set Signed-off-by: secustor --- .../repo-tools/src/commands/api-reports/api-extractor.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/repo-tools/src/commands/api-reports/api-extractor.ts b/packages/repo-tools/src/commands/api-reports/api-extractor.ts index 4546b292c8..70b4e54739 100644 --- a/packages/repo-tools/src/commands/api-reports/api-extractor.ts +++ b/packages/repo-tools/src/commands/api-reports/api-extractor.ts @@ -407,7 +407,6 @@ export async function runApiExtraction({ packageEntryPoint.name === 'index' ? '' : `-${packageEntryPoint.name}`; const reportFileName = `report${suffix}`; const reportPath = resolvePath(projectFolder, reportFileName); - remainingReportFiles.delete(reportFileName); const warningCountBefore = await countApiReportWarnings(reportPath); @@ -485,6 +484,11 @@ export async function runApiExtraction({ ignoreMissingEntryPoint: true, }); + // remove extracted reports from current list + for (const reportConfig of extractorConfig.reportConfigs) { + remainingReportFiles.delete(reportConfig.fileName); + } + // The `packageFolder` needs to point to the location within `dist-types` in order for relative // paths to be logged. Unfortunately the `prepare` method above derives it from the `packageJsonFullPath`, // which needs to point to the actual file, so we override `packageFolder` afterwards. From 23c2602fc38448763a688cb0ada268dec2f3ff32 Mon Sep 17 00:00:00 2001 From: secustor Date: Fri, 26 Jul 2024 15:23:06 +0200 Subject: [PATCH 131/164] update docs Signed-off-by: secustor --- REVIEWING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/REVIEWING.md b/REVIEWING.md index 880577da40..7517791ebd 100644 --- a/REVIEWING.md +++ b/REVIEWING.md @@ -168,7 +168,7 @@ In this section we will be talking about changed "types", but by that we mean an #### API Reports -We generate API Reports using the [API Extractor](https://api-extractor.com/) tool. These reports are generated for most packages in the Backstage repository, and are stored in the `api-report.api.md` file of each package. For CLI package we use custom tooling, and instead store the result in `cli-report.md`. Whenever the public API of a package changes, the API Report needs to be updated to reflect the new state of the API. Our CI checks will fail if the API reports are not up to date in a pull request. +We generate API Reports using the [API Extractor](https://api-extractor.com/) tool. These reports are generated for most packages in the Backstage repository, and are stored in the `report.api.md` file of each package. For CLI package we use custom tooling, and instead store the result in `cli-report.md`. Whenever the public API of a package changes, the API Report needs to be updated to reflect the new state of the API. Our CI checks will fail if the API reports are not up to date in a pull request. Each API report contains a list of all the exported types of each package. As long as the API report does not have any warnings it will contain the full publicly facing API of the package, meaning you do not need to consider any other changes to the package from the point of view of TypeScript API stability. From d427b560739b4538253ba04533bd5dbec80056ed Mon Sep 17 00:00:00 2001 From: secustor Date: Fri, 26 Jul 2024 15:23:56 +0200 Subject: [PATCH 132/164] update docs Signed-off-by: secustor --- REVIEWING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/REVIEWING.md b/REVIEWING.md index 7517791ebd..66af880f43 100644 --- a/REVIEWING.md +++ b/REVIEWING.md @@ -68,7 +68,7 @@ In general our changeset feedback bot will take care of informing whether a chan Changes that do NOT need a new changeset: -- Changes to any test, storybook, or other local development files, for example, `MyComponent.test.tsx`, `MyComponent.stories.tsx`, `**mocks**/MyMock.ts`, `.eslintrc.js`, `setupTests.ts`, or `api-report.api.md`. Explained differently, it is only files that affect the published package that need changesets, such as source files and additional resources like `package.json`, `README.md`, `config.d.ts`, etc. +- Changes to any test, storybook, or other local development files, for example, `MyComponent.test.tsx`, `MyComponent.stories.tsx`, `**mocks**/MyMock.ts`, `.eslintrc.js`, `setupTests.ts`, or `report.api.md`. Explained differently, it is only files that affect the published package that need changesets, such as source files and additional resources like `package.json`, `README.md`, `config.d.ts`, etc. - When tweaking a change that has not yet been released, you can rely on and potentially modify the existing changeset instead. - Changes that do not belong to a published packages, either because it's not a package at all, such as `docs/`, or because the package is private, such as `packages/app`. - Changes that do not end up having an effect on the published package, such as whitespace fixes or code formatting changes. Although it's also fine to have a short changeset for these kind of changes too. From d784231fbc471d82e281888229ad4a29d19e76e2 Mon Sep 17 00:00:00 2001 From: secustor Date: Fri, 26 Jul 2024 15:43:53 +0200 Subject: [PATCH 133/164] fixup microsite links Signed-off-by: secustor --- .../03-common-extension-blueprints.md | 6 +++--- plugins/api-docs/README-alpha.md | 14 +++++++------- plugins/org/README-alpha.md | 8 ++++---- scripts/list-backend-feature.js | 2 +- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/docs/frontend-system/building-plugins/03-common-extension-blueprints.md b/docs/frontend-system/building-plugins/03-common-extension-blueprints.md index 5193fd85b1..d08de7012d 100644 --- a/docs/frontend-system/building-plugins/03-common-extension-blueprints.md +++ b/docs/frontend-system/building-plugins/03-common-extension-blueprints.md @@ -50,14 +50,14 @@ Translation extension provide custom translation messages for the app. They can These are the [extension blueprints](../architecture/23-extension-blueprints.md) provided by the Backstage core feature plugins. -### EntityCard - [Reference](https://github.com/backstage/backstage/blob/master/plugins/catalog-react/api-report-alpha.md) +### EntityCard - [Reference](https://github.com/backstage/backstage/blob/master/plugins/catalog-react/report-alpha.api.md) Creates entity cards to be displayed on the entity pages of the catalog plugin. Exported as `EntityCardBlueprint`. -### EntityContent - [Reference](https://github.com/backstage/backstage/blob/master/plugins/catalog-react/api-report-alpha.md) +### EntityContent - [Reference](https://github.com/backstage/backstage/blob/master/plugins/catalog-react/report-alpha.api.md) Creates entity content to be displayed on the entity pages of the catalog plugin. Exported as `EntityContentBlueprint`. -### SearchResultListItem - [Reference](https://github.com/backstage/backstage/blob/master/plugins/search-react/api-report-alpha.md) +### SearchResultListItem - [Reference](https://github.com/backstage/backstage/blob/master/plugins/search-react/report-alpha.api.md) Creates search result list items for different types of search results, to be displayed in search result lists. Exported as `SearchResultListItemBlueprint`. diff --git a/plugins/api-docs/README-alpha.md b/plugins/api-docs/README-alpha.md index 07f4d5b6bc..d92fdb53da 100644 --- a/plugins/api-docs/README-alpha.md +++ b/plugins/api-docs/README-alpha.md @@ -309,7 +309,7 @@ See a complete cards list below: ##### Has Apis Entity Card -An [entity card](https://github.com/backstage/backstage/blob/master/plugins/catalog-react/api-report-alpha.md) extension that renders a table of entities that have an api relation with a particular Software catalog entity. +An [entity card](https://github.com/backstage/backstage/blob/master/plugins/catalog-react/report-alpha.api.md) extension that renders a table of entities that have an api relation with a particular Software catalog entity. | Kind | Namespace | Name | Id | | ------------- | ---------- | ---------- | ------------------------------- | @@ -382,7 +382,7 @@ For more information about where to place extension overrides, see the official ##### Definition Entity Card -An [entity card](https://github.com/backstage/backstage/blob/master/plugins/catalog-react/api-report-alpha.md) extension that renders an entity api definition widget. +An [entity card](https://github.com/backstage/backstage/blob/master/plugins/catalog-react/report-alpha.api.md) extension that renders an entity api definition widget. | Kind | Namespace | Name | Id | | ------------- | ---------- | ------------ | --------------------------------- | @@ -455,7 +455,7 @@ For more information about where to place extension overrides, see the official ##### Provided Apis Entity Card -An [entity card](https://github.com/backstage/backstage/blob/master/plugins/catalog-react/api-report-alpha.md) extension that renders a table of apis provided by a particular Software Catalog Component. +An [entity card](https://github.com/backstage/backstage/blob/master/plugins/catalog-react/report-alpha.api.md) extension that renders a table of apis provided by a particular Software Catalog Component. | Kind | Namespace | Name | Id | | ------------- | ---------- | --------------- | ------------------------------------ | @@ -528,7 +528,7 @@ For more information about where to place extension overrides, see the official ##### Consumed Apis Entity Card -An [entity card](https://github.com/backstage/backstage/blob/master/plugins/catalog-react/api-report-alpha.md) extension that renders a table of apis consumed by a particular Software Catalog Component. +An [entity card](https://github.com/backstage/backstage/blob/master/plugins/catalog-react/report-alpha.api.md) extension that renders a table of apis consumed by a particular Software Catalog Component. | Kind | Namespace | Name | Id | | ------------- | ---------- | --------------- | ------------------------------------ | @@ -601,7 +601,7 @@ For more information about where to place extension overrides, see the official ##### Providing Components Entity Card -An [entity card](https://github.com/backstage/backstage/blob/master/plugins/catalog-react/api-report-alpha.md) extension that renders a table of components that provides a particular Software Catalog api. +An [entity card](https://github.com/backstage/backstage/blob/master/plugins/catalog-react/report-alpha.api.md) extension that renders a table of components that provides a particular Software Catalog api. | Kind | Namespace | Name | Id | | ------------- | ---------- | ---------------------- | ------------------------------------------- | @@ -676,7 +676,7 @@ For more information about where to place extension overrides, see the official ##### Consuming Components Entity Card -An [entity card](https://github.com/backstage/backstage/blob/master/plugins/catalog-react/api-report-alpha.md) extension that renders a table of components that consumes a particular Software Catalog api. +An [entity card](https://github.com/backstage/backstage/blob/master/plugins/catalog-react/report-alpha.api.md) extension that renders a table of components that consumes a particular Software Catalog api. | Kind | Namespace | Name | Id | | ------------- | ---------- | ---------------------- | ------------------------------------------- | @@ -760,7 +760,7 @@ See a complete contents list below: ##### Definition Entity Content -An [entity content](https://github.com/backstage/backstage/blob/master/plugins/catalog-react/api-report-alpha.md) extension that renders a tab in the entity page showing a particular entity api definition. +An [entity content](https://github.com/backstage/backstage/blob/master/plugins/catalog-react/report-alpha.api.md) extension that renders a tab in the entity page showing a particular entity api definition. | Kind | Namespace | Name | Id | | ---------------- | ---------- | ------------ | ------------------------------------ | diff --git a/plugins/org/README-alpha.md b/plugins/org/README-alpha.md index 91aaa28167..942192252b 100644 --- a/plugins/org/README-alpha.md +++ b/plugins/org/README-alpha.md @@ -90,7 +90,7 @@ Route binding is also possible through code. For more information, see [this](ht ### Entity Group Profile Card -This [entity card](https://github.com/backstage/backstage/blob/master/plugins/catalog-react/api-report-alpha.md) extension allows you to view, edit, or update groups metadata, such as team avatar, name, email, parent, and child groups. +This [entity card](https://github.com/backstage/backstage/blob/master/plugins/catalog-react/report-alpha.api.md) extension allows you to view, edit, or update groups metadata, such as team avatar, name, email, parent, and child groups. | Kind | Namespace | Name | Id | | ------------- | --------- | --------------- | ------------------------------- | @@ -142,7 +142,7 @@ For more information about where to place extension overrides, see the official ### Entity Members List Card -An [entity card](https://github.com/backstage/backstage/blob/master/plugins/catalog-react/api-report-alpha.md) extension that displays the names and emails of group members. By clicking the member's name, you'll be directed to the user's catalog page, and the email opens your default email program. +An [entity card](https://github.com/backstage/backstage/blob/master/plugins/catalog-react/report-alpha.api.md) extension that displays the names and emails of group members. By clicking the member's name, you'll be directed to the user's catalog page, and the email opens your default email program. | Kind | Namespace | Name | Id | | ------------- | --------- | -------------- | ------------------------------ | @@ -194,7 +194,7 @@ For more information about where to place extension overrides, see the official ### Entity Ownership Card -An [entity card](https://github.com/backstage/backstage/blob/master/plugins/catalog-react/api-report-alpha.md) extension that displays direct or aggregated group or user ownership relationships. Each entity listed in the card links to its respective entity page in the catalog. +An [entity card](https://github.com/backstage/backstage/blob/master/plugins/catalog-react/report-alpha.api.md) extension that displays direct or aggregated group or user ownership relationships. Each entity listed in the card links to its respective entity page in the catalog. | Kind | Namespace | Name | Id | | ------------- | --------- | ----------- | --------------------------- | @@ -246,7 +246,7 @@ For more information about where to place extension overrides, see the official ### Entity User Profile Card -This [entity card](https://github.com/backstage/backstage/blob/master/plugins/catalog-react/api-report-alpha.md) extension allows you to view user metadata including avatar, name, email, and team. Clicking on the email link will open your default email program while clicking on the team link will direct you to the team page in the catalog plugin. +This [entity card](https://github.com/backstage/backstage/blob/master/plugins/catalog-react/report-alpha.api.md) extension allows you to view user metadata including avatar, name, email, and team. Clicking on the email link will open your default email program while clicking on the team link will direct you to the team page in the catalog plugin. | Kind | Namespace | Name | Id | | ------------- | --------- | -------------- | ------------------------------ | diff --git a/scripts/list-backend-feature.js b/scripts/list-backend-feature.js index 53cff217b1..91bce6852b 100644 --- a/scripts/list-backend-feature.js +++ b/scripts/list-backend-feature.js @@ -52,7 +52,7 @@ async function main(args) { backendFeatureReport.alpha = false; } - const apiReportAlphaPath = join(pkg.dir, 'api-report-alpha.md'); + const apiReportAlphaPath = join(pkg.dir, 'report-alpha.api.md'); if (fs.existsSync(apiReportAlphaPath)) { const apiReportAlpha = ( await fs.readFile(apiReportAlphaPath) From 831571c2512e0396cfe9f9be0d1d7ff61f17d5f9 Mon Sep 17 00:00:00 2001 From: secustor Date: Mon, 23 Sep 2024 14:54:45 +0200 Subject: [PATCH 134/164] merge new changes Signed-off-by: secustor --- .../app-next-example-plugin/report.api.md | 2 +- packages/backend-app-api/report-alpha.api.md | 2 +- packages/backend-app-api/report.api.md | 10 + .../backend-defaults/report-discovery.api.md | 4 +- .../backend-defaults/report-urlReader.api.md | 6 +- packages/backend-defaults/report.api.md | 4 + .../report.api.md | 76 +- packages/backend-plugin-api/report.api.md | 47 +- packages/backend-test-utils/report.api.md | 126 +- .../catalog-client/api-report-testUtils.md | 71 - packages/cli-node/report.api.md | 18 +- packages/config-loader/report.api.md | 12 +- packages/core-compat-api/report.api.md | 2 + packages/core-components/report.api.md | 16 +- packages/dev-utils/report.api.md | 3 +- packages/frontend-app-api/report.api.md | 4 + packages/frontend-defaults/api-report.md | 43 - packages/frontend-plugin-api/report.api.md | 1737 ++++++++++------- packages/frontend-test-utils/report.api.md | 14 +- plugins/api-docs/report-alpha.api.md | 2 +- plugins/api-docs/report.api.md | 17 +- plugins/app-backend/report.api.md | 12 +- plugins/app-visualizer/report.api.md | 2 +- plugins/app/api-report.md | 713 ------- .../api-report.md | 25 - .../api-report.md | 33 - plugins/auth-backend/report.api.md | 32 +- plugins/bitbucket-cloud-common/api-report.md | 485 ----- plugins/bitbucket-cloud-common/report.api.md | 170 +- .../catalog-backend-module-aws/report.api.md | 4 +- .../report.api.md | 4 +- .../report.api.md | 6 +- .../report.api.md | 4 +- .../report.api.md | 10 +- .../report.api.md | 42 +- .../report.api.md | 36 +- .../report.api.md | 4 +- .../catalog-backend-module-ldap/report.api.md | 11 +- .../report.api.md | 2 +- .../report.api.md | 10 +- plugins/catalog-backend/report.api.md | 16 +- plugins/catalog-graph/report-alpha.api.md | 2 +- plugins/catalog-graph/report.api.md | 5 +- plugins/catalog-import/report-alpha.api.md | 2 +- plugins/catalog-node/api-report-testUtils.md | 27 - plugins/catalog-node/report-alpha.api.md | 32 +- plugins/catalog-node/report.api.md | 14 +- plugins/catalog-react/report-alpha.api.md | 5 +- plugins/catalog-react/report.api.md | 15 +- plugins/catalog/report-alpha.api.md | 5 +- plugins/catalog/report.api.md | 95 +- plugins/devtools-backend/report.api.md | 16 +- plugins/devtools/report-alpha.api.md | 2 +- plugins/home/report-alpha.api.md | 4 +- plugins/kubernetes-backend/report.api.md | 14 +- plugins/kubernetes/report-alpha.api.md | 2 +- plugins/notifications/report.api.md | 24 + plugins/org/report-alpha.api.md | 2 +- plugins/org/report.api.md | 4 +- plugins/permission-node/report.api.md | 6 +- plugins/proxy-backend/report.api.md | 12 +- plugins/scaffolder-backend/report.api.md | 113 +- plugins/scaffolder-node/report.api.md | 1 + plugins/scaffolder/report-alpha.api.md | 6 +- .../report.api.md | 10 +- .../report.api.md | 28 +- .../report.api.md | 1 + .../search-backend-module-pg/report.api.md | 16 +- .../report.api.md | 8 +- plugins/search-backend-node/report.api.md | 6 +- plugins/search-backend/report.api.md | 4 +- plugins/search-react/report-alpha.api.md | 7 + plugins/search-react/report.api.md | 3 +- plugins/search/report-alpha.api.md | 8 +- plugins/search/report.api.md | 14 +- plugins/signals-backend/report.api.md | 20 +- plugins/signals/report.api.md | 1 + plugins/techdocs-backend/report.api.md | 10 +- plugins/techdocs-common/api-report.md | 11 - plugins/techdocs/report-alpha.api.md | 4 +- plugins/techdocs/report.api.md | 2 +- plugins/user-settings-backend/report.api.md | 7 - plugins/user-settings/report-alpha.api.md | 4 +- yarn.lock | 257 +-- 84 files changed, 1816 insertions(+), 2850 deletions(-) delete mode 100644 packages/catalog-client/api-report-testUtils.md delete mode 100644 packages/frontend-defaults/api-report.md delete mode 100644 plugins/app/api-report.md delete mode 100644 plugins/auth-backend-module-auth0-provider/api-report.md delete mode 100644 plugins/auth-backend-module-bitbucket-server-provider/api-report.md delete mode 100644 plugins/bitbucket-cloud-common/api-report.md delete mode 100644 plugins/catalog-node/api-report-testUtils.md delete mode 100644 plugins/techdocs-common/api-report.md diff --git a/packages/app-next-example-plugin/report.api.md b/packages/app-next-example-plugin/report.api.md index 842e58aeb5..3094fee56e 100644 --- a/packages/app-next-example-plugin/report.api.md +++ b/packages/app-next-example-plugin/report.api.md @@ -55,7 +55,7 @@ export const ExampleSidebarItem: () => React_2.JSX.Element; // Warnings were encountered during analysis: // // src/ExampleSidebarItem.d.ts:3:22 - (ae-undocumented) Missing documentation for "ExampleSidebarItem". -// src/plugin.d.ts:7:22 - (ae-undocumented) Missing documentation for "examplePlugin". +// src/plugin.d.ts:22:22 - (ae-undocumented) Missing documentation for "examplePlugin". // (No @packageDocumentation comment for this package) ``` diff --git a/packages/backend-app-api/report-alpha.api.md b/packages/backend-app-api/report-alpha.api.md index 12a4b66d68..e3f11bb800 100644 --- a/packages/backend-app-api/report-alpha.api.md +++ b/packages/backend-app-api/report-alpha.api.md @@ -15,7 +15,7 @@ export const featureDiscoveryServiceFactory: ServiceFactory< // Warnings were encountered during analysis: // -// src/alpha/featureDiscoveryServiceFactory.d.ts:3:22 - (ae-undocumented) Missing documentation for "featureDiscoveryServiceFactory". +// src/alpha/featureDiscoveryServiceFactory.d.ts:5:22 - (ae-undocumented) Missing documentation for "featureDiscoveryServiceFactory". // (No @packageDocumentation comment for this package) ``` diff --git a/packages/backend-app-api/report.api.md b/packages/backend-app-api/report.api.md index 88fa34e6e4..ec32ec9b67 100644 --- a/packages/backend-app-api/report.api.md +++ b/packages/backend-app-api/report.api.md @@ -32,4 +32,14 @@ export interface CreateSpecializedBackendOptions { // (undocumented) defaultServiceFactories: ServiceFactory[]; } + +// Warnings were encountered during analysis: +// +// src/wiring/createSpecializedBackend.d.ts:5:1 - (ae-undocumented) Missing documentation for "createSpecializedBackend". +// src/wiring/types.d.ts:5:1 - (ae-undocumented) Missing documentation for "Backend". +// src/wiring/types.d.ts:6:5 - (ae-undocumented) Missing documentation for "add". +// src/wiring/types.d.ts:9:5 - (ae-undocumented) Missing documentation for "start". +// src/wiring/types.d.ts:10:5 - (ae-undocumented) Missing documentation for "stop". +// src/wiring/types.d.ts:15:1 - (ae-undocumented) Missing documentation for "CreateSpecializedBackendOptions". +// src/wiring/types.d.ts:16:5 - (ae-undocumented) Missing documentation for "defaultServiceFactories". ``` diff --git a/packages/backend-defaults/report-discovery.api.md b/packages/backend-defaults/report-discovery.api.md index fe7d639ebc..e39d281b4e 100644 --- a/packages/backend-defaults/report-discovery.api.md +++ b/packages/backend-defaults/report-discovery.api.md @@ -25,8 +25,8 @@ export class HostDiscovery implements DiscoveryService { // Warnings were encountered during analysis: // -// src/entrypoints/discovery/HostDiscovery.d.ts:46:5 - (ae-undocumented) Missing documentation for "getBaseUrl". -// src/entrypoints/discovery/HostDiscovery.d.ts:47:5 - (ae-undocumented) Missing documentation for "getExternalBaseUrl". +// src/entrypoints/discovery/HostDiscovery.d.ts:44:5 - (ae-undocumented) Missing documentation for "getBaseUrl". +// src/entrypoints/discovery/HostDiscovery.d.ts:45:5 - (ae-undocumented) Missing documentation for "getExternalBaseUrl". // (No @packageDocumentation comment for this package) ``` diff --git a/packages/backend-defaults/report-urlReader.api.md b/packages/backend-defaults/report-urlReader.api.md index 029332e12f..7b41ce33e4 100644 --- a/packages/backend-defaults/report-urlReader.api.md +++ b/packages/backend-defaults/report-urlReader.api.md @@ -516,9 +516,9 @@ export type UrlReadersOptions = { // src/entrypoints/urlReader/lib/HarnessUrlReader.d.ts:20:5 - (ae-undocumented) Missing documentation for "readTree". // src/entrypoints/urlReader/lib/HarnessUrlReader.d.ts:21:5 - (ae-undocumented) Missing documentation for "search". // src/entrypoints/urlReader/lib/HarnessUrlReader.d.ts:22:5 - (ae-undocumented) Missing documentation for "toString". -// src/entrypoints/urlReader/lib/types.d.ts:75:5 - (ae-undocumented) Missing documentation for "fromTarArchive". -// src/entrypoints/urlReader/lib/types.d.ts:82:5 - (ae-undocumented) Missing documentation for "fromZipArchive". -// src/entrypoints/urlReader/lib/types.d.ts:83:5 - (ae-undocumented) Missing documentation for "fromReadableArray". +// src/entrypoints/urlReader/lib/types.d.ts:74:5 - (ae-undocumented) Missing documentation for "fromTarArchive". +// src/entrypoints/urlReader/lib/types.d.ts:81:5 - (ae-undocumented) Missing documentation for "fromZipArchive". +// src/entrypoints/urlReader/lib/types.d.ts:82:5 - (ae-undocumented) Missing documentation for "fromReadableArray". // (No @packageDocumentation comment for this package) ``` diff --git a/packages/backend-defaults/report.api.md b/packages/backend-defaults/report.api.md index def38beda7..9878336d27 100644 --- a/packages/backend-defaults/report.api.md +++ b/packages/backend-defaults/report.api.md @@ -11,4 +11,8 @@ export function createBackend(): Backend; // @public export const discoveryFeatureLoader: BackendFeature; + +// Warnings were encountered during analysis: +// +// src/CreateBackend.d.ts:6:1 - (ae-undocumented) Missing documentation for "createBackend". ``` diff --git a/packages/backend-dynamic-feature-service/report.api.md b/packages/backend-dynamic-feature-service/report.api.md index 5093458a6c..9170fedf43 100644 --- a/packages/backend-dynamic-feature-service/report.api.md +++ b/packages/backend-dynamic-feature-service/report.api.md @@ -293,42 +293,43 @@ export interface ScannedPluginPackage { // src/manager/plugin-manager.d.ts:31:5 - (ae-undocumented) Missing documentation for "backendPlugins". // src/manager/plugin-manager.d.ts:32:5 - (ae-undocumented) Missing documentation for "frontendPlugins". // src/manager/plugin-manager.d.ts:33:5 - (ae-undocumented) Missing documentation for "plugins". -// src/manager/plugin-manager.d.ts:38:22 - (ae-undocumented) Missing documentation for "dynamicPluginsServiceRef". -// src/manager/plugin-manager.d.ts:42:1 - (ae-undocumented) Missing documentation for "DynamicPluginsFactoryOptions". -// src/manager/plugin-manager.d.ts:43:5 - (ae-undocumented) Missing documentation for "moduleLoader". -// src/manager/plugin-manager.d.ts:48:22 - (ae-undocumented) Missing documentation for "dynamicPluginsServiceFactory". -// src/manager/plugin-manager.d.ts:52:22 - (ae-undocumented) Missing documentation for "dynamicPluginsFeatureDiscoveryServiceFactory". -// src/manager/types.d.ts:28:1 - (ae-undocumented) Missing documentation for "LegacyPluginEnvironment". -// src/manager/types.d.ts:46:1 - (ae-undocumented) Missing documentation for "DynamicPluginProvider". -// src/manager/types.d.ts:47:5 - (ae-undocumented) Missing documentation for "plugins". -// src/manager/types.d.ts:52:1 - (ae-undocumented) Missing documentation for "BackendPluginProvider". -// src/manager/types.d.ts:53:5 - (ae-undocumented) Missing documentation for "backendPlugins". -// src/manager/types.d.ts:58:1 - (ae-undocumented) Missing documentation for "FrontendPluginProvider". -// src/manager/types.d.ts:59:5 - (ae-undocumented) Missing documentation for "frontendPlugins". -// src/manager/types.d.ts:64:1 - (ae-undocumented) Missing documentation for "BaseDynamicPlugin". -// src/manager/types.d.ts:65:5 - (ae-undocumented) Missing documentation for "name". -// src/manager/types.d.ts:66:5 - (ae-undocumented) Missing documentation for "version". -// src/manager/types.d.ts:67:5 - (ae-undocumented) Missing documentation for "role". -// src/manager/types.d.ts:68:5 - (ae-undocumented) Missing documentation for "platform". -// src/manager/types.d.ts:73:1 - (ae-undocumented) Missing documentation for "DynamicPlugin". -// src/manager/types.d.ts:77:1 - (ae-undocumented) Missing documentation for "FrontendDynamicPlugin". -// src/manager/types.d.ts:78:5 - (ae-undocumented) Missing documentation for "platform". -// src/manager/types.d.ts:83:1 - (ae-undocumented) Missing documentation for "BackendDynamicPlugin". -// src/manager/types.d.ts:84:5 - (ae-undocumented) Missing documentation for "platform". -// src/manager/types.d.ts:85:5 - (ae-undocumented) Missing documentation for "installer". -// src/manager/types.d.ts:90:1 - (ae-undocumented) Missing documentation for "BackendDynamicPluginInstaller". -// src/manager/types.d.ts:94:1 - (ae-undocumented) Missing documentation for "NewBackendPluginInstaller". -// src/manager/types.d.ts:95:5 - (ae-undocumented) Missing documentation for "kind". -// src/manager/types.d.ts:96:5 - (ae-undocumented) Missing documentation for "install". -// src/manager/types.d.ts:109:1 - (ae-undocumented) Missing documentation for "LegacyBackendPluginInstaller". -// src/manager/types.d.ts:110:5 - (ae-undocumented) Missing documentation for "kind". -// src/manager/types.d.ts:111:5 - (ae-undocumented) Missing documentation for "router". -// src/manager/types.d.ts:115:5 - (ae-undocumented) Missing documentation for "catalog". -// src/manager/types.d.ts:116:5 - (ae-undocumented) Missing documentation for "scaffolder". -// src/manager/types.d.ts:117:5 - (ae-undocumented) Missing documentation for "search". -// src/manager/types.d.ts:118:5 - (ae-undocumented) Missing documentation for "events". -// src/manager/types.d.ts:119:5 - (ae-undocumented) Missing documentation for "permissions". -// src/manager/types.d.ts:126:1 - (ae-undocumented) Missing documentation for "isBackendDynamicPluginInstaller". +// src/manager/plugin-manager.d.ts:39:22 - (ae-undocumented) Missing documentation for "dynamicPluginsServiceRef". +// src/manager/plugin-manager.d.ts:43:1 - (ae-undocumented) Missing documentation for "DynamicPluginsFactoryOptions". +// src/manager/plugin-manager.d.ts:44:5 - (ae-undocumented) Missing documentation for "moduleLoader". +// src/manager/plugin-manager.d.ts:50:22 - (ae-undocumented) Missing documentation for "dynamicPluginsServiceFactoryWithOptions". +// src/manager/plugin-manager.d.ts:55:22 - (ae-undocumented) Missing documentation for "dynamicPluginsServiceFactory". +// src/manager/plugin-manager.d.ts:60:22 - (ae-undocumented) Missing documentation for "dynamicPluginsFeatureDiscoveryServiceFactory". +// src/manager/types.d.ts:27:1 - (ae-undocumented) Missing documentation for "LegacyPluginEnvironment". +// src/manager/types.d.ts:45:1 - (ae-undocumented) Missing documentation for "DynamicPluginProvider". +// src/manager/types.d.ts:46:5 - (ae-undocumented) Missing documentation for "plugins". +// src/manager/types.d.ts:51:1 - (ae-undocumented) Missing documentation for "BackendPluginProvider". +// src/manager/types.d.ts:52:5 - (ae-undocumented) Missing documentation for "backendPlugins". +// src/manager/types.d.ts:57:1 - (ae-undocumented) Missing documentation for "FrontendPluginProvider". +// src/manager/types.d.ts:58:5 - (ae-undocumented) Missing documentation for "frontendPlugins". +// src/manager/types.d.ts:63:1 - (ae-undocumented) Missing documentation for "BaseDynamicPlugin". +// src/manager/types.d.ts:64:5 - (ae-undocumented) Missing documentation for "name". +// src/manager/types.d.ts:65:5 - (ae-undocumented) Missing documentation for "version". +// src/manager/types.d.ts:66:5 - (ae-undocumented) Missing documentation for "role". +// src/manager/types.d.ts:67:5 - (ae-undocumented) Missing documentation for "platform". +// src/manager/types.d.ts:72:1 - (ae-undocumented) Missing documentation for "DynamicPlugin". +// src/manager/types.d.ts:76:1 - (ae-undocumented) Missing documentation for "FrontendDynamicPlugin". +// src/manager/types.d.ts:77:5 - (ae-undocumented) Missing documentation for "platform". +// src/manager/types.d.ts:82:1 - (ae-undocumented) Missing documentation for "BackendDynamicPlugin". +// src/manager/types.d.ts:83:5 - (ae-undocumented) Missing documentation for "platform". +// src/manager/types.d.ts:84:5 - (ae-undocumented) Missing documentation for "installer". +// src/manager/types.d.ts:89:1 - (ae-undocumented) Missing documentation for "BackendDynamicPluginInstaller". +// src/manager/types.d.ts:93:1 - (ae-undocumented) Missing documentation for "NewBackendPluginInstaller". +// src/manager/types.d.ts:94:5 - (ae-undocumented) Missing documentation for "kind". +// src/manager/types.d.ts:95:5 - (ae-undocumented) Missing documentation for "install". +// src/manager/types.d.ts:108:1 - (ae-undocumented) Missing documentation for "LegacyBackendPluginInstaller". +// src/manager/types.d.ts:109:5 - (ae-undocumented) Missing documentation for "kind". +// src/manager/types.d.ts:110:5 - (ae-undocumented) Missing documentation for "router". +// src/manager/types.d.ts:114:5 - (ae-undocumented) Missing documentation for "catalog". +// src/manager/types.d.ts:115:5 - (ae-undocumented) Missing documentation for "scaffolder". +// src/manager/types.d.ts:116:5 - (ae-undocumented) Missing documentation for "search". +// src/manager/types.d.ts:117:5 - (ae-undocumented) Missing documentation for "events". +// src/manager/types.d.ts:118:5 - (ae-undocumented) Missing documentation for "permissions". +// src/manager/types.d.ts:125:1 - (ae-undocumented) Missing documentation for "isBackendDynamicPluginInstaller". // src/scanner/types.d.ts:5:1 - (ae-undocumented) Missing documentation for "ScannedPluginPackage". // src/scanner/types.d.ts:6:5 - (ae-undocumented) Missing documentation for "location". // src/scanner/types.d.ts:7:5 - (ae-undocumented) Missing documentation for "manifest". @@ -338,7 +339,8 @@ export interface ScannedPluginPackage { // src/schemas/schemas.d.ts:7:1 - (ae-undocumented) Missing documentation for "DynamicPluginsSchemasService". // src/schemas/schemas.d.ts:8:5 - (ae-undocumented) Missing documentation for "addDynamicPluginsSchemas". // src/schemas/schemas.d.ts:21:1 - (ae-undocumented) Missing documentation for "DynamicPluginsSchemasOptions". -// src/schemas/schemas.d.ts:36:22 - (ae-undocumented) Missing documentation for "dynamicPluginsSchemasServiceFactory". +// src/schemas/schemas.d.ts:36:22 - (ae-undocumented) Missing documentation for "dynamicPluginsSchemasServiceFactoryWithOptions". +// src/schemas/schemas.d.ts:40:22 - (ae-undocumented) Missing documentation for "dynamicPluginsSchemasServiceFactory". // (No @packageDocumentation comment for this package) ``` diff --git a/packages/backend-plugin-api/report.api.md b/packages/backend-plugin-api/report.api.md index 7cd89364d0..e03179e851 100644 --- a/packages/backend-plugin-api/report.api.md +++ b/packages/backend-plugin-api/report.api.md @@ -738,9 +738,6 @@ export interface UserInfoService { // Warnings were encountered during analysis: // -// src/deprecated.d.ts:6:1 - (ae-undocumented) Missing documentation for "ServiceRefConfig". -// src/deprecated.d.ts:11:1 - (ae-undocumented) Missing documentation for "RootServiceFactoryConfig". -// src/deprecated.d.ts:18:1 - (ae-undocumented) Missing documentation for "PluginServiceFactoryConfig". // src/services/definitions/HttpRouterService.d.ts:8:5 - (ae-undocumented) Missing documentation for "path". // src/services/definitions/HttpRouterService.d.ts:9:5 - (ae-undocumented) Missing documentation for "allow". // src/services/definitions/LifecycleService.d.ts:5:1 - (ae-undocumented) Missing documentation for "LifecycleServiceStartupHook". @@ -754,26 +751,15 @@ export interface UserInfoService { // src/services/definitions/LoggerService.d.ts:14:5 - (ae-undocumented) Missing documentation for "child". // src/services/definitions/PermissionsService.d.ts:9:5 - (ae-undocumented) Missing documentation for "credentials". // src/services/definitions/RootHealthService.d.ts:5:1 - (ae-undocumented) Missing documentation for "RootHealthService". -// src/services/definitions/UrlReaderService.d.ts:323:1 - (ae-undocumented) Missing documentation for "ReadTreeOptions". -// src/services/definitions/UrlReaderService.d.ts:328:1 - (ae-undocumented) Missing documentation for "ReadTreeResponse". -// src/services/definitions/UrlReaderService.d.ts:333:1 - (ae-undocumented) Missing documentation for "ReadTreeResponseDirOptions". -// src/services/definitions/UrlReaderService.d.ts:338:1 - (ae-undocumented) Missing documentation for "ReadTreeResponseFile". -// src/services/definitions/UrlReaderService.d.ts:343:1 - (ae-undocumented) Missing documentation for "ReadUrlResponse". -// src/services/definitions/UrlReaderService.d.ts:348:1 - (ae-undocumented) Missing documentation for "ReadUrlOptions". -// src/services/definitions/UrlReaderService.d.ts:353:1 - (ae-undocumented) Missing documentation for "SearchOptions". -// src/services/definitions/UrlReaderService.d.ts:358:1 - (ae-undocumented) Missing documentation for "SearchResponse". -// src/services/definitions/UrlReaderService.d.ts:363:1 - (ae-undocumented) Missing documentation for "SearchResponseFile". // src/services/definitions/UserInfoService.d.ts:9:5 - (ae-undocumented) Missing documentation for "userEntityRef". // src/services/definitions/UserInfoService.d.ts:10:5 - (ae-undocumented) Missing documentation for "ownershipEntityRefs". -// src/services/system/types.d.ts:27:1 - (ae-undocumented) Missing documentation for "ServiceFactory". -// src/services/system/types.d.ts:28:5 - (ae-undocumented) Missing documentation for "service". -// src/services/system/types.d.ts:34:1 - (ae-undocumented) Missing documentation for "ServiceFactoryCompat". -// src/services/system/types.d.ts:38:5 - (ae-undocumented) Missing documentation for "__call". -// src/services/system/types.d.ts:48:1 - (ae-undocumented) Missing documentation for "ServiceRefOptions". -// src/services/system/types.d.ts:49:5 - (ae-undocumented) Missing documentation for "id". -// src/services/system/types.d.ts:50:5 - (ae-undocumented) Missing documentation for "scope". -// src/services/system/types.d.ts:51:5 - (ae-undocumented) Missing documentation for "defaultFactory". -// src/services/system/types.d.ts:55:5 - (ae-undocumented) Missing documentation for "defaultFactory". +// src/services/system/types.d.ts:35:1 - (ae-undocumented) Missing documentation for "ServiceFactory". +// src/services/system/types.d.ts:36:5 - (ae-undocumented) Missing documentation for "service". +// src/services/system/types.d.ts:39:1 - (ae-undocumented) Missing documentation for "ServiceRefOptions". +// src/services/system/types.d.ts:40:5 - (ae-undocumented) Missing documentation for "id". +// src/services/system/types.d.ts:41:5 - (ae-undocumented) Missing documentation for "scope". +// src/services/system/types.d.ts:42:5 - (ae-undocumented) Missing documentation for "multiton". +// src/services/system/types.d.ts:43:5 - (ae-undocumented) Missing documentation for "defaultFactory". // src/services/system/types.d.ts:76:1 - (ae-undocumented) Missing documentation for "RootServiceFactoryOptions". // src/services/system/types.d.ts:90:5 - (ae-undocumented) Missing documentation for "service". // src/services/system/types.d.ts:91:5 - (ae-undocumented) Missing documentation for "deps". @@ -785,15 +771,12 @@ export interface UserInfoService { // src/services/system/types.d.ts:112:5 - (ae-undocumented) Missing documentation for "factory". // src/types.d.ts:2:1 - (ae-undocumented) Missing documentation for "BackendFeature". // src/types.d.ts:3:5 - (ae-undocumented) Missing documentation for "$$type". -// src/types.d.ts:9:1 - (ae-undocumented) Missing documentation for "BackendFeatureCompat". -// src/types.d.ts:13:5 - (ae-undocumented) Missing documentation for "__call". -// src/wiring/factories.d.ts:39:5 - (ae-undocumented) Missing documentation for "register". -// src/wiring/factories.d.ts:67:5 - (ae-undocumented) Missing documentation for "register". -// src/wiring/index.d.ts:9:1 - (ae-undocumented) Missing documentation for "BackendPluginConfig". -// src/wiring/index.d.ts:14:1 - (ae-undocumented) Missing documentation for "BackendModuleConfig". -// src/wiring/index.d.ts:19:1 - (ae-undocumented) Missing documentation for "ExtensionPointConfig". -// src/wiring/types.d.ts:23:5 - (ae-undocumented) Missing documentation for "registerExtensionPoint". -// src/wiring/types.d.ts:24:5 - (ae-undocumented) Missing documentation for "registerInit". -// src/wiring/types.d.ts:39:5 - (ae-undocumented) Missing documentation for "registerExtensionPoint". -// src/wiring/types.d.ts:40:5 - (ae-undocumented) Missing documentation for "registerInit". +// src/wiring/createBackendFeatureLoader.d.ts:10:5 - (ae-undocumented) Missing documentation for "deps". +// src/wiring/createBackendFeatureLoader.d.ts:13:5 - (ae-undocumented) Missing documentation for "loader". +// src/wiring/createBackendModule.d.ts:21:5 - (ae-undocumented) Missing documentation for "register". +// src/wiring/createBackendPlugin.d.ts:17:5 - (ae-undocumented) Missing documentation for "register". +// src/wiring/types.d.ts:30:5 - (ae-undocumented) Missing documentation for "registerExtensionPoint". +// src/wiring/types.d.ts:31:5 - (ae-undocumented) Missing documentation for "registerInit". +// src/wiring/types.d.ts:44:5 - (ae-undocumented) Missing documentation for "registerExtensionPoint". +// src/wiring/types.d.ts:45:5 - (ae-undocumented) Missing documentation for "registerInit". ``` diff --git a/packages/backend-test-utils/report.api.md b/packages/backend-test-utils/report.api.md index 1234297c2e..1235cd7cb3 100644 --- a/packages/backend-test-utils/report.api.md +++ b/packages/backend-test-utils/report.api.md @@ -483,9 +483,6 @@ export class TestDatabases { // src/database/TestDatabases.d.ts:29:5 - (ae-undocumented) Missing documentation for "setDefaults". // src/database/TestDatabases.d.ts:33:5 - (ae-undocumented) Missing documentation for "supports". // src/database/TestDatabases.d.ts:34:5 - (ae-undocumented) Missing documentation for "eachSupportedId". -// src/deprecated.d.ts:6:1 - (ae-undocumented) Missing documentation for "MockDirectoryOptions". -// src/deprecated.d.ts:11:1 - (ae-undocumented) Missing documentation for "setupRequestMockHandlers". -// src/deprecated.d.ts:20:1 - (ae-undocumented) Missing documentation for "isDockerDisabledForTests". // src/next/services/mockCredentials.d.ts:17:1 - (ae-undocumented) Missing documentation for "mockCredentials". // src/next/services/mockCredentials.d.ts:58:9 - (ae-undocumented) Missing documentation for "invalidToken". // src/next/services/mockCredentials.d.ts:59:9 - (ae-undocumented) Missing documentation for "invalidHeader". @@ -499,70 +496,63 @@ export class TestDatabases { // src/next/services/mockServices.d.ts:15:5 - (ae-undocumented) Missing documentation for "rootConfig". // src/next/services/mockServices.d.ts:16:9 - (ae-undocumented) Missing documentation for "Options". // src/next/services/mockServices.d.ts:19:15 - (ae-undocumented) Missing documentation for "factory". -// src/next/services/mockServices.d.ts:21:5 - (ae-undocumented) Missing documentation for "rootLogger". +// src/next/services/mockServices.d.ts:20:15 - (ae-undocumented) Missing documentation for "mock". // src/next/services/mockServices.d.ts:22:5 - (ae-undocumented) Missing documentation for "rootLogger". -// src/next/services/mockServices.d.ts:23:9 - (ae-undocumented) Missing documentation for "Options". -// src/next/services/mockServices.d.ts:26:15 - (ae-undocumented) Missing documentation for "factory". -// src/next/services/mockServices.d.ts:27:15 - (ae-undocumented) Missing documentation for "mock". -// src/next/services/mockServices.d.ts:29:5 - (ae-undocumented) Missing documentation for "tokenManager". -// src/next/services/mockServices.d.ts:30:5 - (ae-undocumented) Missing documentation for "tokenManager". -// src/next/services/mockServices.d.ts:31:15 - (ae-undocumented) Missing documentation for "factory". -// src/next/services/mockServices.d.ts:32:15 - (ae-undocumented) Missing documentation for "mock". -// src/next/services/mockServices.d.ts:34:5 - (ae-undocumented) Missing documentation for "identity". -// src/next/services/mockServices.d.ts:35:5 - (ae-undocumented) Missing documentation for "identity". -// src/next/services/mockServices.d.ts:36:15 - (ae-undocumented) Missing documentation for "factory". -// src/next/services/mockServices.d.ts:37:15 - (ae-undocumented) Missing documentation for "mock". -// src/next/services/mockServices.d.ts:39:5 - (ae-undocumented) Missing documentation for "auth". -// src/next/services/mockServices.d.ts:43:5 - (ae-undocumented) Missing documentation for "auth". -// src/next/services/mockServices.d.ts:44:15 - (ae-undocumented) Missing documentation for "factory". -// src/next/services/mockServices.d.ts:45:15 - (ae-undocumented) Missing documentation for "mock". -// src/next/services/mockServices.d.ts:47:5 - (ae-undocumented) Missing documentation for "discovery". -// src/next/services/mockServices.d.ts:48:5 - (ae-undocumented) Missing documentation for "discovery". -// src/next/services/mockServices.d.ts:49:15 - (ae-undocumented) Missing documentation for "factory". -// src/next/services/mockServices.d.ts:50:15 - (ae-undocumented) Missing documentation for "mock". -// src/next/services/mockServices.d.ts:70:5 - (ae-undocumented) Missing documentation for "httpAuth". -// src/next/services/mockServices.d.ts:81:15 - (ae-undocumented) Missing documentation for "mock". -// src/next/services/mockServices.d.ts:91:5 - (ae-undocumented) Missing documentation for "userInfo". -// src/next/services/mockServices.d.ts:99:15 - (ae-undocumented) Missing documentation for "mock". -// src/next/services/mockServices.d.ts:101:5 - (ae-undocumented) Missing documentation for "cache". -// src/next/services/mockServices.d.ts:102:15 - (ae-undocumented) Missing documentation for "factory". -// src/next/services/mockServices.d.ts:103:15 - (ae-undocumented) Missing documentation for "mock". -// src/next/services/mockServices.d.ts:105:5 - (ae-undocumented) Missing documentation for "database". -// src/next/services/mockServices.d.ts:106:15 - (ae-undocumented) Missing documentation for "factory". -// src/next/services/mockServices.d.ts:107:15 - (ae-undocumented) Missing documentation for "mock". -// src/next/services/mockServices.d.ts:109:5 - (ae-undocumented) Missing documentation for "rootHealth". -// src/next/services/mockServices.d.ts:110:15 - (ae-undocumented) Missing documentation for "factory". -// src/next/services/mockServices.d.ts:111:15 - (ae-undocumented) Missing documentation for "mock". -// src/next/services/mockServices.d.ts:113:5 - (ae-undocumented) Missing documentation for "httpRouter". -// src/next/services/mockServices.d.ts:114:15 - (ae-undocumented) Missing documentation for "factory". -// src/next/services/mockServices.d.ts:115:15 - (ae-undocumented) Missing documentation for "mock". -// src/next/services/mockServices.d.ts:117:5 - (ae-undocumented) Missing documentation for "rootHttpRouter". -// src/next/services/mockServices.d.ts:118:15 - (ae-undocumented) Missing documentation for "factory". -// src/next/services/mockServices.d.ts:119:15 - (ae-undocumented) Missing documentation for "mock". -// src/next/services/mockServices.d.ts:121:5 - (ae-undocumented) Missing documentation for "lifecycle". -// src/next/services/mockServices.d.ts:122:15 - (ae-undocumented) Missing documentation for "factory". -// src/next/services/mockServices.d.ts:123:15 - (ae-undocumented) Missing documentation for "mock". -// src/next/services/mockServices.d.ts:125:5 - (ae-undocumented) Missing documentation for "logger". -// src/next/services/mockServices.d.ts:126:15 - (ae-undocumented) Missing documentation for "factory". -// src/next/services/mockServices.d.ts:127:15 - (ae-undocumented) Missing documentation for "mock". -// src/next/services/mockServices.d.ts:129:5 - (ae-undocumented) Missing documentation for "permissions". -// src/next/services/mockServices.d.ts:130:15 - (ae-undocumented) Missing documentation for "factory". -// src/next/services/mockServices.d.ts:131:15 - (ae-undocumented) Missing documentation for "mock". -// src/next/services/mockServices.d.ts:133:5 - (ae-undocumented) Missing documentation for "rootLifecycle". -// src/next/services/mockServices.d.ts:134:15 - (ae-undocumented) Missing documentation for "factory". -// src/next/services/mockServices.d.ts:135:15 - (ae-undocumented) Missing documentation for "mock". -// src/next/services/mockServices.d.ts:137:5 - (ae-undocumented) Missing documentation for "scheduler". -// src/next/services/mockServices.d.ts:138:15 - (ae-undocumented) Missing documentation for "factory". -// src/next/services/mockServices.d.ts:139:15 - (ae-undocumented) Missing documentation for "mock". -// src/next/services/mockServices.d.ts:141:5 - (ae-undocumented) Missing documentation for "urlReader". -// src/next/services/mockServices.d.ts:142:15 - (ae-undocumented) Missing documentation for "factory". -// src/next/services/mockServices.d.ts:143:15 - (ae-undocumented) Missing documentation for "mock". -// src/next/services/mockServices.d.ts:145:5 - (ae-undocumented) Missing documentation for "events". -// src/next/services/mockServices.d.ts:146:15 - (ae-undocumented) Missing documentation for "factory". -// src/next/services/mockServices.d.ts:147:15 - (ae-undocumented) Missing documentation for "mock". -// src/next/wiring/TestBackend.d.ts:4:1 - (ae-undocumented) Missing documentation for "TestBackendOptions". -// src/next/wiring/TestBackend.d.ts:5:5 - (ae-undocumented) Missing documentation for "extensionPoints". -// src/next/wiring/TestBackend.d.ts:13:5 - (ae-undocumented) Missing documentation for "features". -// src/next/wiring/TestBackend.d.ts:18:1 - (ae-undocumented) Missing documentation for "TestBackend". -// src/next/wiring/TestBackend.d.ts:29:1 - (ae-undocumented) Missing documentation for "startTestBackend". +// src/next/services/mockServices.d.ts:23:5 - (ae-undocumented) Missing documentation for "rootLogger". +// src/next/services/mockServices.d.ts:24:9 - (ae-undocumented) Missing documentation for "Options". +// src/next/services/mockServices.d.ts:27:15 - (ae-undocumented) Missing documentation for "factory". +// src/next/services/mockServices.d.ts:28:15 - (ae-undocumented) Missing documentation for "mock". +// src/next/services/mockServices.d.ts:30:5 - (ae-undocumented) Missing documentation for "auth". +// src/next/services/mockServices.d.ts:34:5 - (ae-undocumented) Missing documentation for "auth". +// src/next/services/mockServices.d.ts:35:15 - (ae-undocumented) Missing documentation for "factory". +// src/next/services/mockServices.d.ts:36:15 - (ae-undocumented) Missing documentation for "mock". +// src/next/services/mockServices.d.ts:38:5 - (ae-undocumented) Missing documentation for "discovery". +// src/next/services/mockServices.d.ts:39:5 - (ae-undocumented) Missing documentation for "discovery". +// src/next/services/mockServices.d.ts:40:15 - (ae-undocumented) Missing documentation for "factory". +// src/next/services/mockServices.d.ts:41:15 - (ae-undocumented) Missing documentation for "mock". +// src/next/services/mockServices.d.ts:61:5 - (ae-undocumented) Missing documentation for "httpAuth". +// src/next/services/mockServices.d.ts:72:15 - (ae-undocumented) Missing documentation for "mock". +// src/next/services/mockServices.d.ts:82:5 - (ae-undocumented) Missing documentation for "userInfo". +// src/next/services/mockServices.d.ts:90:15 - (ae-undocumented) Missing documentation for "mock". +// src/next/services/mockServices.d.ts:92:5 - (ae-undocumented) Missing documentation for "cache". +// src/next/services/mockServices.d.ts:93:15 - (ae-undocumented) Missing documentation for "factory". +// src/next/services/mockServices.d.ts:94:15 - (ae-undocumented) Missing documentation for "mock". +// src/next/services/mockServices.d.ts:96:5 - (ae-undocumented) Missing documentation for "database". +// src/next/services/mockServices.d.ts:97:15 - (ae-undocumented) Missing documentation for "factory". +// src/next/services/mockServices.d.ts:98:15 - (ae-undocumented) Missing documentation for "mock". +// src/next/services/mockServices.d.ts:100:5 - (ae-undocumented) Missing documentation for "rootHealth". +// src/next/services/mockServices.d.ts:101:15 - (ae-undocumented) Missing documentation for "factory". +// src/next/services/mockServices.d.ts:102:15 - (ae-undocumented) Missing documentation for "mock". +// src/next/services/mockServices.d.ts:104:5 - (ae-undocumented) Missing documentation for "httpRouter". +// src/next/services/mockServices.d.ts:105:15 - (ae-undocumented) Missing documentation for "factory". +// src/next/services/mockServices.d.ts:106:15 - (ae-undocumented) Missing documentation for "mock". +// src/next/services/mockServices.d.ts:108:5 - (ae-undocumented) Missing documentation for "rootHttpRouter". +// src/next/services/mockServices.d.ts:109:15 - (ae-undocumented) Missing documentation for "factory". +// src/next/services/mockServices.d.ts:110:15 - (ae-undocumented) Missing documentation for "mock". +// src/next/services/mockServices.d.ts:112:5 - (ae-undocumented) Missing documentation for "lifecycle". +// src/next/services/mockServices.d.ts:113:15 - (ae-undocumented) Missing documentation for "factory". +// src/next/services/mockServices.d.ts:114:15 - (ae-undocumented) Missing documentation for "mock". +// src/next/services/mockServices.d.ts:116:5 - (ae-undocumented) Missing documentation for "logger". +// src/next/services/mockServices.d.ts:117:15 - (ae-undocumented) Missing documentation for "factory". +// src/next/services/mockServices.d.ts:118:15 - (ae-undocumented) Missing documentation for "mock". +// src/next/services/mockServices.d.ts:120:5 - (ae-undocumented) Missing documentation for "permissions". +// src/next/services/mockServices.d.ts:121:15 - (ae-undocumented) Missing documentation for "factory". +// src/next/services/mockServices.d.ts:122:15 - (ae-undocumented) Missing documentation for "mock". +// src/next/services/mockServices.d.ts:124:5 - (ae-undocumented) Missing documentation for "rootLifecycle". +// src/next/services/mockServices.d.ts:125:15 - (ae-undocumented) Missing documentation for "factory". +// src/next/services/mockServices.d.ts:126:15 - (ae-undocumented) Missing documentation for "mock". +// src/next/services/mockServices.d.ts:128:5 - (ae-undocumented) Missing documentation for "scheduler". +// src/next/services/mockServices.d.ts:129:15 - (ae-undocumented) Missing documentation for "factory". +// src/next/services/mockServices.d.ts:130:15 - (ae-undocumented) Missing documentation for "mock". +// src/next/services/mockServices.d.ts:132:5 - (ae-undocumented) Missing documentation for "urlReader". +// src/next/services/mockServices.d.ts:133:15 - (ae-undocumented) Missing documentation for "factory". +// src/next/services/mockServices.d.ts:134:15 - (ae-undocumented) Missing documentation for "mock". +// src/next/services/mockServices.d.ts:136:5 - (ae-undocumented) Missing documentation for "events". +// src/next/services/mockServices.d.ts:137:15 - (ae-undocumented) Missing documentation for "factory". +// src/next/services/mockServices.d.ts:138:15 - (ae-undocumented) Missing documentation for "mock". +// src/next/wiring/TestBackend.d.ts:5:1 - (ae-undocumented) Missing documentation for "TestBackendOptions". +// src/next/wiring/TestBackend.d.ts:6:5 - (ae-undocumented) Missing documentation for "extensionPoints". +// src/next/wiring/TestBackend.d.ts:14:5 - (ae-undocumented) Missing documentation for "features". +// src/next/wiring/TestBackend.d.ts:19:1 - (ae-undocumented) Missing documentation for "TestBackend". +// src/next/wiring/TestBackend.d.ts:30:1 - (ae-undocumented) Missing documentation for "startTestBackend". ``` diff --git a/packages/catalog-client/api-report-testUtils.md b/packages/catalog-client/api-report-testUtils.md deleted file mode 100644 index 88d14b4f7a..0000000000 --- a/packages/catalog-client/api-report-testUtils.md +++ /dev/null @@ -1,71 +0,0 @@ -## API Report File for "@backstage/catalog-client" - -> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). - -```ts -import { AddLocationRequest } from '@backstage/catalog-client'; -import { AddLocationResponse } from '@backstage/catalog-client'; -import { CatalogApi } from '@backstage/catalog-client'; -import { CompoundEntityRef } from '@backstage/catalog-model'; -import { Entity } from '@backstage/catalog-model'; -import { GetEntitiesByRefsRequest } from '@backstage/catalog-client'; -import { GetEntitiesByRefsResponse } from '@backstage/catalog-client'; -import { GetEntitiesRequest } from '@backstage/catalog-client'; -import { GetEntitiesResponse } from '@backstage/catalog-client'; -import { GetEntityAncestorsRequest } from '@backstage/catalog-client'; -import { GetEntityAncestorsResponse } from '@backstage/catalog-client'; -import { GetEntityFacetsRequest } from '@backstage/catalog-client'; -import { GetEntityFacetsResponse } from '@backstage/catalog-client'; -import { Location as Location_2 } from '@backstage/catalog-client'; -import { QueryEntitiesRequest } from '@backstage/catalog-client'; -import { QueryEntitiesResponse } from '@backstage/catalog-client'; -import { ValidateEntityResponse } from '@backstage/catalog-client'; - -// @public -export class InMemoryCatalogClient implements CatalogApi { - constructor(options?: { entities?: Entity[] }); - // (undocumented) - addLocation(_location: AddLocationRequest): Promise; - // (undocumented) - getEntities(request?: GetEntitiesRequest): Promise; - // (undocumented) - getEntitiesByRefs( - request: GetEntitiesByRefsRequest, - ): Promise; - // (undocumented) - getEntityAncestors( - request: GetEntityAncestorsRequest, - ): Promise; - // (undocumented) - getEntityByRef( - entityRef: string | CompoundEntityRef, - ): Promise; - // (undocumented) - getEntityFacets( - request: GetEntityFacetsRequest, - ): Promise; - // (undocumented) - getLocationByEntity( - _entityRef: string | CompoundEntityRef, - ): Promise; - // (undocumented) - getLocationById(_id: string): Promise; - // (undocumented) - getLocationByRef(_locationRef: string): Promise; - // (undocumented) - queryEntities(request?: QueryEntitiesRequest): Promise; - // (undocumented) - refreshEntity(_entityRef: string): Promise; - // (undocumented) - removeEntityByUid(uid: string): Promise; - // (undocumented) - removeLocationById(_id: string): Promise; - // (undocumented) - validateEntity( - _entity: Entity, - _locationRef: string, - ): Promise; -} - -// (No @packageDocumentation comment for this package) -``` diff --git a/packages/cli-node/report.api.md b/packages/cli-node/report.api.md index 8a0b9bc6df..97dab9684d 100644 --- a/packages/cli-node/report.api.md +++ b/packages/cli-node/report.api.md @@ -187,15 +187,15 @@ export class PackageRoles { // src/monorepo/PackageGraph.d.ts:16:5 - (ae-undocumented) Missing documentation for "scripts". // src/monorepo/PackageGraph.d.ts:19:5 - (ae-undocumented) Missing documentation for "bundled". // src/monorepo/PackageGraph.d.ts:20:5 - (ae-undocumented) Missing documentation for "backstage". -// src/monorepo/PackageGraph.d.ts:36:5 - (ae-undocumented) Missing documentation for "exports". -// src/monorepo/PackageGraph.d.ts:37:5 - (ae-undocumented) Missing documentation for "typesVersions". -// src/monorepo/PackageGraph.d.ts:38:5 - (ae-undocumented) Missing documentation for "files". -// src/monorepo/PackageGraph.d.ts:39:5 - (ae-undocumented) Missing documentation for "publishConfig". -// src/monorepo/PackageGraph.d.ts:44:5 - (ae-undocumented) Missing documentation for "repository". -// src/monorepo/PackageGraph.d.ts:49:5 - (ae-undocumented) Missing documentation for "dependencies". -// src/monorepo/PackageGraph.d.ts:52:5 - (ae-undocumented) Missing documentation for "peerDependencies". -// src/monorepo/PackageGraph.d.ts:55:5 - (ae-undocumented) Missing documentation for "devDependencies". -// src/monorepo/PackageGraph.d.ts:58:5 - (ae-undocumented) Missing documentation for "optionalDependencies". +// src/monorepo/PackageGraph.d.ts:44:5 - (ae-undocumented) Missing documentation for "exports". +// src/monorepo/PackageGraph.d.ts:45:5 - (ae-undocumented) Missing documentation for "typesVersions". +// src/monorepo/PackageGraph.d.ts:46:5 - (ae-undocumented) Missing documentation for "files". +// src/monorepo/PackageGraph.d.ts:47:5 - (ae-undocumented) Missing documentation for "publishConfig". +// src/monorepo/PackageGraph.d.ts:52:5 - (ae-undocumented) Missing documentation for "repository". +// src/monorepo/PackageGraph.d.ts:57:5 - (ae-undocumented) Missing documentation for "dependencies". +// src/monorepo/PackageGraph.d.ts:60:5 - (ae-undocumented) Missing documentation for "peerDependencies". +// src/monorepo/PackageGraph.d.ts:63:5 - (ae-undocumented) Missing documentation for "devDependencies". +// src/monorepo/PackageGraph.d.ts:66:5 - (ae-undocumented) Missing documentation for "optionalDependencies". // src/roles/types.d.ts:25:5 - (ae-undocumented) Missing documentation for "role". // src/roles/types.d.ts:26:5 - (ae-undocumented) Missing documentation for "platform". // src/roles/types.d.ts:27:5 - (ae-undocumented) Missing documentation for "output". diff --git a/packages/config-loader/report.api.md b/packages/config-loader/report.api.md index 0bb88a67b3..7d7047d493 100644 --- a/packages/config-loader/report.api.md +++ b/packages/config-loader/report.api.md @@ -298,18 +298,18 @@ export type TransformFunc = ( // src/sources/ConfigSources.d.ts:74:5 - (ae-undocumented) Missing documentation for "env". // src/sources/EnvConfigSource.d.ts:46:5 - (ae-undocumented) Missing documentation for "readConfigData". // src/sources/EnvConfigSource.d.ts:47:5 - (ae-undocumented) Missing documentation for "toString". -// src/sources/FileConfigSource.d.ts:40:5 - (ae-undocumented) Missing documentation for "readConfigData". -// src/sources/FileConfigSource.d.ts:41:5 - (ae-undocumented) Missing documentation for "toString". +// src/sources/FileConfigSource.d.ts:44:5 - (ae-undocumented) Missing documentation for "readConfigData". +// src/sources/FileConfigSource.d.ts:45:5 - (ae-undocumented) Missing documentation for "toString". // src/sources/MutableConfigSource.d.ts:9:5 - (ae-undocumented) Missing documentation for "data". // src/sources/MutableConfigSource.d.ts:10:5 - (ae-undocumented) Missing documentation for "context". // src/sources/MutableConfigSource.d.ts:27:5 - (ae-undocumented) Missing documentation for "readConfigData". // src/sources/MutableConfigSource.d.ts:38:5 - (ae-undocumented) Missing documentation for "toString". -// src/sources/RemoteConfigSource.d.ts:39:5 - (ae-undocumented) Missing documentation for "readConfigData". -// src/sources/RemoteConfigSource.d.ts:40:5 - (ae-undocumented) Missing documentation for "toString". +// src/sources/RemoteConfigSource.d.ts:43:5 - (ae-undocumented) Missing documentation for "readConfigData". +// src/sources/RemoteConfigSource.d.ts:44:5 - (ae-undocumented) Missing documentation for "toString". // src/sources/StaticConfigSource.d.ts:9:5 - (ae-undocumented) Missing documentation for "data". // src/sources/StaticConfigSource.d.ts:10:5 - (ae-undocumented) Missing documentation for "context". // src/sources/StaticConfigSource.d.ts:28:5 - (ae-undocumented) Missing documentation for "readConfigData". // src/sources/StaticConfigSource.d.ts:29:5 - (ae-undocumented) Missing documentation for "toString". -// src/sources/types.d.ts:19:5 - (ae-undocumented) Missing documentation for "signal". -// src/sources/types.d.ts:54:5 - (ae-undocumented) Missing documentation for "readConfigData". +// src/sources/types.d.ts:20:5 - (ae-undocumented) Missing documentation for "signal". +// src/sources/types.d.ts:55:5 - (ae-undocumented) Missing documentation for "readConfigData". ``` diff --git a/packages/core-compat-api/report.api.md b/packages/core-compat-api/report.api.md index 6d1390fd2f..e6971975b2 100644 --- a/packages/core-compat-api/report.api.md +++ b/packages/core-compat-api/report.api.md @@ -117,6 +117,8 @@ export type ToNewRouteRef = // // src/apis/implementations/AnalyticsApi/NoOpAnalyticsApi.d.ts:9:5 - (ae-undocumented) Missing documentation for "captureEvent". // src/convertLegacyApp.d.ts:4:1 - (ae-undocumented) Missing documentation for "convertLegacyApp". +// src/convertLegacyPageExtension.d.ts:4:1 - (ae-undocumented) Missing documentation for "convertLegacyPageExtension". +// src/convertLegacyPlugin.d.ts:4:1 - (ae-undocumented) Missing documentation for "convertLegacyPlugin". // (No @packageDocumentation comment for this package) ``` diff --git a/packages/core-components/report.api.md b/packages/core-components/report.api.md index 5b91140856..d71d6a1e9f 100644 --- a/packages/core-components/report.api.md +++ b/packages/core-components/report.api.md @@ -1589,10 +1589,10 @@ export type WarningPanelClassKey = // src/components/DismissableBanner/DismissableBanner.d.ts:16:22 - (ae-undocumented) Missing documentation for "DismissableBanner". // src/components/EmptyState/EmptyState.d.ts:3:1 - (ae-undocumented) Missing documentation for "EmptyStateClassKey". // src/components/EmptyState/EmptyStateImage.d.ts:6:1 - (ae-undocumented) Missing documentation for "EmptyStateImageClassKey". -// src/components/EmptyState/MissingAnnotationEmptyState.d.ts:10:1 - (ae-undocumented) Missing documentation for "MissingAnnotationEmptyStateClassKey". -// src/components/EmptyState/MissingAnnotationEmptyState.d.ts:15:1 - (ae-undocumented) Missing documentation for "MissingAnnotationEmptyState". +// src/components/EmptyState/MissingAnnotationEmptyState.d.ts:10:1 - (ae-undocumented) Missing documentation for "MissingAnnotationEmptyState". // src/components/ErrorPanel/ErrorPanel.d.ts:3:1 - (ae-undocumented) Missing documentation for "ErrorPanelClassKey". // src/components/ErrorPanel/ErrorPanel.d.ts:5:1 - (ae-undocumented) Missing documentation for "ErrorPanelProps". +// src/components/FavoriteToggle/FavoriteToggle.d.ts:6:1 - (ae-undocumented) Missing documentation for "FavoriteToggleIconClassKey". // src/components/FeatureDiscovery/FeatureCalloutCircular.d.ts:3:1 - (ae-undocumented) Missing documentation for "FeatureCalloutCircleClassKey". // src/components/HeaderIconLinkRow/HeaderIconLinkRow.d.ts:4:1 - (ae-undocumented) Missing documentation for "HeaderIconLinkRowClassKey". // src/components/HeaderIconLinkRow/IconLinkVertical.d.ts:2:1 - (ae-undocumented) Missing documentation for "IconLinkVerticalProps". @@ -1601,7 +1601,8 @@ export type WarningPanelClassKey = // src/components/HorizontalScrollGrid/HorizontalScrollGrid.d.ts:8:1 - (ae-undocumented) Missing documentation for "HorizontalScrollGridClassKey". // src/components/Lifecycle/Lifecycle.d.ts:7:1 - (ae-undocumented) Missing documentation for "LifecycleClassKey". // src/components/Lifecycle/Lifecycle.d.ts:8:1 - (ae-undocumented) Missing documentation for "Lifecycle". -// src/components/Link/Link.d.ts:6:1 - (ae-undocumented) Missing documentation for "LinkProps". +// src/components/Link/Link.d.ts:6:1 - (ae-undocumented) Missing documentation for "LinkClassKey". +// src/components/Link/Link.d.ts:8:1 - (ae-undocumented) Missing documentation for "LinkProps". // src/components/LinkButton/LinkButton.d.ts:24:22 - (ae-undocumented) Missing documentation for "Button". // src/components/LinkButton/LinkButton.d.ts:29:1 - (ae-undocumented) Missing documentation for "ButtonProps". // src/components/MarkdownContent/MarkdownContent.d.ts:3:1 - (ae-undocumented) Missing documentation for "MarkdownContentClassKey". @@ -1695,6 +1696,8 @@ export type WarningPanelClassKey = // src/icons/icons.d.ts:41:1 - (ae-undocumented) Missing documentation for "HelpIcon". // src/icons/icons.d.ts:43:1 - (ae-undocumented) Missing documentation for "UserIcon". // src/icons/icons.d.ts:45:1 - (ae-undocumented) Missing documentation for "WarningIcon". +// src/icons/icons.d.ts:47:1 - (ae-undocumented) Missing documentation for "StarIcon". +// src/icons/icons.d.ts:49:1 - (ae-undocumented) Missing documentation for "UnstarredIcon". // src/layout/BottomLink/BottomLink.d.ts:3:1 - (ae-undocumented) Missing documentation for "BottomLinkClassKey". // src/layout/BottomLink/BottomLink.d.ts:5:1 - (ae-undocumented) Missing documentation for "BottomLinkProps". // src/layout/Breadcrumbs/Breadcrumbs.d.ts:5:1 - (ae-undocumented) Missing documentation for "BreadcrumbsClickableTextClassKey". @@ -1707,6 +1710,7 @@ export type WarningPanelClassKey = // src/layout/ErrorBoundary/ErrorBoundary.d.ts:16:22 - (ae-undocumented) Missing documentation for "ErrorBoundary". // src/layout/ErrorPage/ErrorPage.d.ts:10:1 - (ae-undocumented) Missing documentation for "ErrorPageClassKey". // src/layout/ErrorPage/MicDrop.d.ts:2:1 - (ae-undocumented) Missing documentation for "MicDropClassKey". +// src/layout/ErrorPage/StackDetails.d.ts:6:1 - (ae-undocumented) Missing documentation for "StackDetailsClassKey". // src/layout/Header/Header.d.ts:3:1 - (ae-undocumented) Missing documentation for "HeaderClassKey". // src/layout/HeaderActionMenu/HeaderActionMenu.d.ts:6:1 - (ae-undocumented) Missing documentation for "HeaderActionMenuItem". // src/layout/HeaderActionMenu/HeaderActionMenu.d.ts:16:1 - (ae-undocumented) Missing documentation for "HeaderActionMenuProps". @@ -1737,11 +1741,13 @@ export type WarningPanelClassKey = // src/layout/Sidebar/Items.d.ts:60:22 - (ae-undocumented) Missing documentation for "SidebarScrollWrapper". // src/layout/Sidebar/Page.d.ts:2:1 - (ae-undocumented) Missing documentation for "SidebarPageClassKey". // src/layout/Sidebar/Page.d.ts:11:1 - (ae-undocumented) Missing documentation for "SidebarPage". +// src/layout/Sidebar/SidebarSubmenu.d.ts:3:1 - (ae-undocumented) Missing documentation for "SidebarSubmenuClassKey". +// src/layout/Sidebar/SidebarSubmenuItem.d.ts:4:1 - (ae-undocumented) Missing documentation for "SidebarSubmenuItemClassKey". // src/layout/Sidebar/config.d.ts:3:1 - (ae-undocumented) Missing documentation for "SidebarOptions". // src/layout/Sidebar/config.d.ts:8:1 - (ae-undocumented) Missing documentation for "SubmenuOptions". // src/layout/Sidebar/config.d.ts:12:22 - (ae-undocumented) Missing documentation for "sidebarConfig". // src/layout/Sidebar/config.d.ts:52:22 - (ae-undocumented) Missing documentation for "SIDEBAR_INTRO_LOCAL_STORAGE". -// src/layout/SignInPage/SignInPage.d.ts:16:1 - (ae-undocumented) Missing documentation for "SignInPage". +// src/layout/SignInPage/SignInPage.d.ts:17:1 - (ae-undocumented) Missing documentation for "SignInPage". // src/layout/SignInPage/customProvider.d.ts:3:1 - (ae-undocumented) Missing documentation for "CustomProviderClassKey". // src/layout/SignInPage/styles.d.ts:2:1 - (ae-undocumented) Missing documentation for "SignInPageClassKey". // src/layout/SignInPage/types.d.ts:3:1 - (ae-undocumented) Missing documentation for "SignInProviderConfig". @@ -1750,5 +1756,5 @@ export type WarningPanelClassKey = // src/layout/TabbedCard/TabbedCard.d.ts:7:1 - (ae-undocumented) Missing documentation for "BoldHeaderClassKey". // src/layout/TabbedCard/TabbedCard.d.ts:18:1 - (ae-undocumented) Missing documentation for "TabbedCard". // src/layout/TabbedCard/TabbedCard.d.ts:20:1 - (ae-undocumented) Missing documentation for "CardTabClassKey". -// src/overridableComponents.d.ts:78:1 - (ae-undocumented) Missing documentation for "BackstageOverrides". +// src/overridableComponents.d.ts:83:1 - (ae-undocumented) Missing documentation for "BackstageOverrides". ``` diff --git a/packages/dev-utils/report.api.md b/packages/dev-utils/report.api.md index ccde681f41..18da50026e 100644 --- a/packages/dev-utils/report.api.md +++ b/packages/dev-utils/report.api.md @@ -71,5 +71,6 @@ export const SidebarSignOutButton: (props: { // Warnings were encountered during analysis: // // src/components/EntityGridItem/EntityGridItem.d.ts:5:22 - (ae-undocumented) Missing documentation for "EntityGridItem". -// src/devApp/render.d.ts:7:1 - (ae-undocumented) Missing documentation for "DevAppPageOptions". +// src/components/SidebarLanguageSwitcher/SidebarLanguageSwitcher.d.ts:3:22 - (ae-undocumented) Missing documentation for "SidebarLanguageSwitcher". +// src/devApp/render.d.ts:8:1 - (ae-undocumented) Missing documentation for "DevAppPageOptions". ``` diff --git a/packages/frontend-app-api/report.api.md b/packages/frontend-app-api/report.api.md index 4216f1f823..b5e5f801e6 100644 --- a/packages/frontend-app-api/report.api.md +++ b/packages/frontend-app-api/report.api.md @@ -43,4 +43,8 @@ export type FrontendFeature = | { $$type: '@backstage/BackstagePlugin'; }; + +// Warnings were encountered during analysis: +// +// src/wiring/types.d.ts:3:1 - (ae-undocumented) Missing documentation for "FrontendFeature". ``` diff --git a/packages/frontend-defaults/api-report.md b/packages/frontend-defaults/api-report.md deleted file mode 100644 index b99232b784..0000000000 --- a/packages/frontend-defaults/api-report.md +++ /dev/null @@ -1,43 +0,0 @@ -## API Report File for "@backstage/frontend-defaults" - -> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). - -```ts -import { ConfigApi } from '@backstage/frontend-plugin-api'; -import { CreateAppRouteBinder } from '@backstage/frontend-app-api'; -import { FrontendFeature } from '@backstage/frontend-app-api'; -import { JSX as JSX_2 } from 'react'; -import { default as React_2 } from 'react'; -import { ReactNode } from 'react'; - -// @public -export function createApp(options?: CreateAppOptions): { - createRoot(): JSX_2.Element; -}; - -// @public -export interface CreateAppFeatureLoader { - getLoaderName(): string; - load(options: { config: ConfigApi }): Promise<{ - features: FrontendFeature[]; - }>; -} - -// @public -export interface CreateAppOptions { - // (undocumented) - bindRoutes?(context: { bind: CreateAppRouteBinder }): void; - // (undocumented) - configLoader?: () => Promise<{ - config: ConfigApi; - }>; - // (undocumented) - features?: (FrontendFeature | CreateAppFeatureLoader)[]; - loadingComponent?: ReactNode; -} - -// @public -export function createPublicSignInApp(options?: CreateAppOptions): { - createRoot(): React_2.JSX.Element; -}; -``` diff --git a/packages/frontend-plugin-api/report.api.md b/packages/frontend-plugin-api/report.api.md index 24aa1d5b52..b575a94837 100644 --- a/packages/frontend-plugin-api/report.api.md +++ b/packages/frontend-plugin-api/report.api.md @@ -89,8 +89,6 @@ import { useTranslationRef } from '@backstage/core-plugin-api/alpha'; import { vmwareCloudAuthApiRef } from '@backstage/core-plugin-api'; import { withApis } from '@backstage/core-plugin-api'; import { z } from 'zod'; -import { ZodSchema } from 'zod'; -import { ZodTypeDef } from 'zod'; export { AlertApi }; @@ -148,26 +146,13 @@ export { AnyApiFactory }; export { AnyApiRef }; // @public (undocumented) -export type AnyExtensionDataMap = { - [name in string]: ExtensionDataRef< - unknown, - string, - { - optional?: true; - } - >; -}; - -// @public (undocumented) -export type AnyExtensionInputMap = { - [inputName in string]: ExtensionInput< - AnyExtensionDataMap, - { - optional: boolean; - singleton: boolean; - } - >; -}; +export type AnyExtensionDataRef = ExtensionDataRef< + unknown, + string, + { + optional?: true; + } +>; // @public (undocumented) export type AnyExternalRoutes = { @@ -186,6 +171,26 @@ export type AnyRoutes = { [name in string]: RouteRef | SubRouteRef; }; +// @public +export const ApiBlueprint: ExtensionBlueprint<{ + kind: 'api'; + name: undefined; + params: { + factory: AnyApiFactory; + }; + output: ConfigurableExtensionDataRef; + inputs: {}; + config: {}; + configInput: {}; + dataRefs: { + factory: ConfigurableExtensionDataRef< + AnyApiFactory, + 'core.api.factory', + {} + >; + }; +}>; + export { ApiFactory }; export { ApiHolder }; @@ -234,9 +239,51 @@ export interface AppNodeSpec { // (undocumented) readonly id: string; // (undocumented) - readonly source?: BackstagePlugin; + readonly source?: FrontendPlugin; } +// @public +export const AppRootElementBlueprint: ExtensionBlueprint<{ + kind: 'app-root-element'; + name: undefined; + params: { + element: JSX.Element | (() => JSX.Element); + }; + output: ConfigurableExtensionDataRef; + inputs: {}; + config: {}; + configInput: {}; + dataRefs: never; +}>; + +// @public +export const AppRootWrapperBlueprint: ExtensionBlueprint<{ + kind: 'app-root-wrapper'; + name: undefined; + params: { + Component: ComponentType>; + }; + output: ConfigurableExtensionDataRef< + React_2.ComponentType<{ + children?: React_2.ReactNode; + }>, + 'app.root.wrapper', + {} + >; + inputs: {}; + config: {}; + configInput: {}; + dataRefs: { + component: ConfigurableExtensionDataRef< + React_2.ComponentType<{ + children?: React_2.ReactNode; + }>, + 'app.root.wrapper', + {} + >; + }; +}>; + export { AppTheme }; export { AppThemeApi }; @@ -270,21 +317,6 @@ export { BackstageIdentityApi }; export { BackstageIdentityResponse }; -// @public (undocumented) -export interface BackstagePlugin< - Routes extends AnyRoutes = AnyRoutes, - ExternalRoutes extends AnyExternalRoutes = AnyExternalRoutes, -> { - // (undocumented) - readonly $$type: '@backstage/BackstagePlugin'; - // (undocumented) - readonly externalRoutes: ExternalRoutes; - // (undocumented) - readonly id: string; - // (undocumented) - readonly routes: Routes; -} - export { BackstageUserIdentity }; export { bitbucketAuthApiRef }; @@ -318,17 +350,19 @@ export { configApiRef }; // @public (undocumented) export interface ConfigurableExtensionDataRef< - TId extends string, TData, + TId extends string, TConfig extends { optional?: true; } = {}, > extends ExtensionDataRef { + // (undocumented) + (t: TData): ExtensionDataValue; // (undocumented) optional(): ConfigurableExtensionDataRef< - TId, TData, - TData & { + TId, + TConfig & { optional: true; } >; @@ -343,7 +377,7 @@ export const coreComponentRefs: { // @public (undocumented) export type CoreErrorBoundaryFallbackProps = { - plugin?: BackstagePlugin; + plugin?: FrontendPlugin; error: Error; resetError: () => void; }; @@ -351,14 +385,14 @@ export type CoreErrorBoundaryFallbackProps = { // @public (undocumented) export const coreExtensionData: { reactElement: ConfigurableExtensionDataRef< - 'core.reactElement', JSX_2.Element, + 'core.reactElement', {} >; - routePath: ConfigurableExtensionDataRef<'core.routing.path', string, {}>; + routePath: ConfigurableExtensionDataRef; routeRef: ConfigurableExtensionDataRef< - 'core.routing.ref', RouteRef, + 'core.routing.ref', {} >; }; @@ -371,133 +405,56 @@ export type CoreNotFoundErrorPageProps = { // @public (undocumented) export type CoreProgressProps = {}; -// @public (undocumented) -export function createApiExtension< - TConfig extends {}, - TInputs extends AnyExtensionInputMap, ->( - options: ( - | { - api: AnyApiRef; - factory: (options: { - config: TConfig; - inputs: Expand>; - }) => AnyApiFactory; - } - | { - factory: AnyApiFactory; - } - ) & { - configSchema?: PortableSchema; - inputs?: TInputs; - }, -): ExtensionDefinition; - -// @public (undocumented) -export namespace createApiExtension { - const // (undocumented) - factoryDataRef: ConfigurableExtensionDataRef< - 'core.api.factory', - AnyApiFactory, - {} - >; -} - export { createApiFactory }; export { createApiRef }; -// @public -export function createAppRootElementExtension< - TConfig extends {}, - TInputs extends AnyExtensionInputMap, ->(options: { - namespace?: string; - name?: string; - attachTo?: { - id: string; - input: string; - }; - configSchema?: PortableSchema; - disabled?: boolean; - inputs?: TInputs; - element: - | JSX_2.Element - | ((options: { - inputs: Expand>; - config: TConfig; - }) => JSX_2.Element); -}): ExtensionDefinition; - -// @public -export function createAppRootWrapperExtension< - TConfig extends {}, - TInputs extends AnyExtensionInputMap, ->(options: { - namespace?: string; - name?: string; - attachTo?: { - id: string; - input: string; - }; - configSchema?: PortableSchema; - disabled?: boolean; - inputs?: TInputs; - Component: ComponentType< - PropsWithChildren<{ - inputs: Expand>; - config: TConfig; - }> - >; -}): ExtensionDefinition; - // @public (undocumented) -export namespace createAppRootWrapperExtension { - const // (undocumented) - componentDataRef: ConfigurableExtensionDataRef< - 'app.root.wrapper', - React_2.ComponentType<{ - children?: React_2.ReactNode; - }>, - {} - >; -} - -// @public (undocumented) -export function createComponentExtension< - TProps extends {}, - TConfig extends {}, - TInputs extends AnyExtensionInputMap, ->(options: { +export function createComponentExtension(options: { ref: ComponentRef; name?: string; disabled?: boolean; - inputs?: TInputs; - configSchema?: PortableSchema; loader: | { - lazy: (values: { - config: TConfig; - inputs: Expand>; - }) => Promise>; + lazy: () => Promise>; } | { - sync: (values: { - config: TConfig; - inputs: Expand>; - }) => ComponentType; + sync: () => ComponentType; }; -}): ExtensionDefinition; +}): ExtensionDefinition<{ + config: {}; + configInput: {}; + output: ConfigurableExtensionDataRef< + { + ref: ComponentRef; + impl: ComponentType; + }, + 'core.component.component', + {} + >; + inputs: { + [x: string]: ExtensionInput< + AnyExtensionDataRef, + { + optional: boolean; + singleton: boolean; + } + >; + }; + params: never; + kind: 'component'; + name: string; +}>; // @public (undocumented) export namespace createComponentExtension { const // (undocumented) componentDataRef: ConfigurableExtensionDataRef< - 'core.component.component', { ref: ComponentRef; impl: ComponentType; }, + 'core.component.component', {} >; } @@ -509,142 +466,189 @@ export function createComponentRef(options: { // @public (undocumented) export function createExtension< - TOutput extends AnyExtensionDataMap, - TInputs extends AnyExtensionInputMap, - TConfig, - TConfigInput, + UOutput extends AnyExtensionDataRef, + TInputs extends { + [inputName in string]: ExtensionInput< + AnyExtensionDataRef, + { + optional: boolean; + singleton: boolean; + } + >; + }, TConfigSchema extends { [key: string]: (zImpl: typeof z) => z.ZodType; }, + UFactoryOutput extends ExtensionDataValue, + const TKind extends string | undefined = undefined, + const TName extends string | undefined = undefined, >( options: CreateExtensionOptions< - TOutput, + TKind, + TName, + UOutput, TInputs, - TConfig, - TConfigInput, - TConfigSchema - >, -): ExtensionDefinition< - TConfig & - (string extends keyof TConfigSchema - ? {} - : { - [key in keyof TConfigSchema]: z.infer>; - }), - TConfigInput & - (string extends keyof TConfigSchema - ? {} - : z.input< - z.ZodObject<{ - [key in keyof TConfigSchema]: ReturnType; - }> - >) ->; - -// @public -export function createExtensionBlueprint< - TParams, - TInputs extends AnyExtensionInputMap, - TOutput extends AnyExtensionDataMap, - TConfigSchema extends { - [key in string]: (zImpl: typeof z) => z.ZodType; - }, - TDataRefs extends AnyExtensionDataMap = never, ->( - options: CreateExtensionBlueprintOptions< - TParams, - TInputs, - TOutput, TConfigSchema, - TDataRefs + UFactoryOutput >, -): ExtensionBlueprint< - TParams, - TInputs, - TOutput, - string extends keyof TConfigSchema +): ExtensionDefinition<{ + config: string extends keyof TConfigSchema ? {} : { [key in keyof TConfigSchema]: z.infer>; - }, - string extends keyof TConfigSchema + }; + configInput: string extends keyof TConfigSchema ? {} : z.input< z.ZodObject<{ [key in keyof TConfigSchema]: ReturnType; }> - >, - TDataRefs ->; + >; + output: UOutput; + inputs: TInputs; + params: never; + kind: string | undefined extends TKind ? undefined : TKind; + name: string | undefined extends TName ? undefined : TName; +}>; -// @public (undocumented) -export interface CreateExtensionBlueprintOptions< - TParams, - TInputs extends AnyExtensionInputMap, - TOutput extends AnyExtensionDataMap, +// @public +export function createExtensionBlueprint< + TParams extends object, + UOutput extends AnyExtensionDataRef, + TInputs extends { + [inputName in string]: ExtensionInput< + AnyExtensionDataRef, + { + optional: boolean; + singleton: boolean; + } + >; + }, TConfigSchema extends { [key in string]: (zImpl: typeof z) => z.ZodType; }, - TDataRefs extends AnyExtensionDataMap, -> { - // (undocumented) + UFactoryOutput extends ExtensionDataValue, + TKind extends string, + TName extends string | undefined = undefined, + TDataRefs extends { + [name in string]: AnyExtensionDataRef; + } = never, +>( + options: CreateExtensionBlueprintOptions< + TKind, + TName, + TParams, + UOutput, + TInputs, + TConfigSchema, + UFactoryOutput, + TDataRefs + >, +): ExtensionBlueprint<{ + kind: TKind; + name: TName; + params: TParams; + output: UOutput; + inputs: string extends keyof TInputs ? {} : TInputs; + config: string extends keyof TConfigSchema + ? {} + : { + [key in keyof TConfigSchema]: z.infer>; + }; + configInput: string extends keyof TConfigSchema + ? {} + : z.input< + z.ZodObject<{ + [key in keyof TConfigSchema]: ReturnType; + }> + >; + dataRefs: TDataRefs; +}>; + +// @public (undocumented) +export type CreateExtensionBlueprintOptions< + TKind extends string, + TName extends string | undefined, + TParams, + UOutput extends AnyExtensionDataRef, + TInputs extends { + [inputName in string]: ExtensionInput< + AnyExtensionDataRef, + { + optional: boolean; + singleton: boolean; + } + >; + }, + TConfigSchema extends { + [key in string]: (zImpl: typeof z) => z.ZodType; + }, + UFactoryOutput extends ExtensionDataValue, + TDataRefs extends { + [name in string]: AnyExtensionDataRef; + }, +> = { + kind: TKind; attachTo: { id: string; input: string; }; - // (undocumented) + disabled?: boolean; + inputs?: TInputs; + output: Array; + name?: TName; config?: { schema: TConfigSchema; }; - // (undocumented) - dataRefs?: TDataRefs; - // (undocumented) - disabled?: boolean; - // (undocumented) factory( params: TParams, context: { node: AppNode; + apis: ApiHolder; config: { [key in keyof TConfigSchema]: z.infer>; }; inputs: Expand>; }, - ): Expand>; - // (undocumented) - inputs?: TInputs; - // (undocumented) - kind: string; - // (undocumented) - namespace?: string; - // (undocumented) - output: TOutput; -} + ): Iterable; + dataRefs?: TDataRefs; +} & VerifyExtensionFactoryOutput; // @public @deprecated (undocumented) export function createExtensionDataRef( id: string, -): ConfigurableExtensionDataRef; +): ConfigurableExtensionDataRef; // @public (undocumented) export function createExtensionDataRef(): { with(options: { id: TId; - }): ConfigurableExtensionDataRef; + }): ConfigurableExtensionDataRef; }; // @public (undocumented) export function createExtensionInput< - TExtensionData extends AnyExtensionDataMap, + UExtensionData extends ExtensionDataRef< + unknown, + string, + { + optional?: true; + } + >, TConfig extends { singleton?: boolean; optional?: boolean; }, >( - extensionData: TExtensionData, - config?: TConfig, + extensionData: Array, + config?: TConfig & { + replaces?: Array<{ + id: string; + input: string; + }>; + }, ): ExtensionInput< - TExtensionData, + UExtensionData, { singleton: TConfig['singleton'] extends true ? true : false; optional: TConfig['optional'] extends true ? true : false; @@ -652,57 +656,45 @@ export function createExtensionInput< >; // @public (undocumented) -export interface CreateExtensionOptions< - TOutput extends AnyExtensionDataMap, - TInputs extends AnyExtensionInputMap, - TConfig, - TConfigInput, +export type CreateExtensionOptions< + TKind extends string | undefined, + TName extends string | undefined, + UOutput extends AnyExtensionDataRef, + TInputs extends { + [inputName in string]: ExtensionInput< + AnyExtensionDataRef, + { + optional: boolean; + singleton: boolean; + } + >; + }, TConfigSchema extends { [key: string]: (zImpl: typeof z) => z.ZodType; }, -> { - // (undocumented) + UFactoryOutput extends ExtensionDataValue, +> = { + kind?: TKind; + name?: TName; attachTo: { id: string; input: string; }; - // (undocumented) + disabled?: boolean; + inputs?: TInputs; + output: Array; config?: { schema: TConfigSchema; }; - // @deprecated (undocumented) - configSchema?: PortableSchema; - // (undocumented) - disabled?: boolean; - // (undocumented) factory(context: { node: AppNode; - config: TConfig & - (string extends keyof TConfigSchema - ? {} - : { - [key in keyof TConfigSchema]: z.infer< - ReturnType - >; - }); + apis: ApiHolder; + config: { + [key in keyof TConfigSchema]: z.infer>; + }; inputs: Expand>; - }): Expand>; - // (undocumented) - inputs?: TInputs; - // (undocumented) - kind?: string; - // (undocumented) - name?: string; - // (undocumented) - namespace?: string; - // (undocumented) - output: TOutput; -} - -// @public (undocumented) -export function createExtensionOverrides( - options: ExtensionOverridesOptions, -): ExtensionOverrides; + }): Iterable; +} & VerifyExtensionFactoryOutput; // @public export function createExternalRouteRef< @@ -711,13 +703,11 @@ export function createExternalRouteRef< [param in TParamKeys]: string; } | undefined = undefined, - TOptional extends boolean = false, TParamKeys extends string = string, >(options?: { readonly params?: string extends TParamKeys ? (keyof TParams)[] : TParamKeys[]; - optional?: TOptional; defaultTarget?: string; }): ExternalRouteRef< keyof TParams extends never @@ -726,100 +716,47 @@ export function createExternalRouteRef< ? TParams : { [param in TParamKeys]: string; - }, - TOptional + } >; -// @public -export function createNavItemExtension(options: { - namespace?: string; - name?: string; - routeRef: RouteRef; - title: string; - icon: IconComponent_2; -}): ExtensionDefinition< +// @public (undocumented) +export function createFrontendModule< + TId extends string, + TExtensions extends readonly ExtensionDefinition[] = [], +>(options: CreateFrontendModuleOptions): FrontendModule; + +// @public (undocumented) +export interface CreateFrontendModuleOptions< + TPluginId extends string, + TExtensions extends readonly ExtensionDefinition[], +> { + // (undocumented) + extensions?: TExtensions; + // (undocumented) + featureFlags?: FeatureFlagConfig[]; + // (undocumented) + pluginId: TPluginId; +} + +// @public (undocumented) +export function createFrontendPlugin< + TId extends string, + TRoutes extends AnyRoutes = {}, + TExternalRoutes extends AnyExternalRoutes = {}, + TExtensions extends readonly ExtensionDefinition[] = [], +>( + options: PluginOptions, +): FrontendPlugin< + TRoutes, + TExternalRoutes, { - title: string; - }, - { - title?: string | undefined; + [KExtension in TExtensions[number] as ResolveExtensionId< + KExtension, + TId + >]: KExtension; } >; -// @public (undocumented) -export namespace createNavItemExtension { - const // (undocumented) - targetDataRef: ConfigurableExtensionDataRef< - 'core.nav-item.target', - { - title: string; - icon: IconComponent_2; - routeRef: RouteRef; - }, - {} - >; -} - -// @public -export function createNavLogoExtension(options: { - name?: string; - namespace?: string; - logoIcon: JSX.Element; - logoFull: JSX.Element; -}): ExtensionDefinition<{}, {}>; - -// @public (undocumented) -export namespace createNavLogoExtension { - const // (undocumented) - logoElementsDataRef: ConfigurableExtensionDataRef< - 'core.nav-logo.logo-elements', - { - logoIcon?: JSX.Element | undefined; - logoFull?: JSX.Element | undefined; - }, - {} - >; -} - -// @public -export function createPageExtension< - TConfig extends { - path: string; - }, - TInputs extends AnyExtensionInputMap, ->( - options: ( - | { - defaultPath: string; - } - | { - configSchema: PortableSchema; - } - ) & { - namespace?: string; - name?: string; - attachTo?: { - id: string; - input: string; - }; - disabled?: boolean; - inputs?: TInputs; - routeRef?: RouteRef; - loader: (options: { - config: TConfig; - inputs: Expand>; - }) => Promise; - }, -): ExtensionDefinition; - -// @public (undocumented) -export function createPlugin< - Routes extends AnyRoutes = {}, - ExternalRoutes extends AnyExternalRoutes = {}, ->( - options: PluginOptions, -): BackstagePlugin; - // @public export function createRouteRef< TParams extends @@ -840,75 +777,6 @@ export function createRouteRef< } >; -// @public -export function createRouterExtension< - TConfig extends {}, - TInputs extends AnyExtensionInputMap, ->(options: { - namespace?: string; - name?: string; - attachTo?: { - id: string; - input: string; - }; - configSchema?: PortableSchema; - disabled?: boolean; - inputs?: TInputs; - Component: ComponentType< - PropsWithChildren<{ - inputs: Expand>; - config: TConfig; - }> - >; -}): ExtensionDefinition; - -// @public (undocumented) -export namespace createRouterExtension { - const // (undocumented) - componentDataRef: ConfigurableExtensionDataRef< - 'app.router.wrapper', - React_2.ComponentType<{ - children?: React_2.ReactNode; - }>, - {} - >; -} - -// @public @deprecated (undocumented) -export function createSchemaFromZod( - schemaCreator: (zImpl: typeof z) => ZodSchema, -): PortableSchema; - -// @public (undocumented) -export function createSignInPageExtension< - TConfig extends {}, - TInputs extends AnyExtensionInputMap, ->(options: { - namespace?: string; - name?: string; - attachTo?: { - id: string; - input: string; - }; - configSchema?: PortableSchema; - disabled?: boolean; - inputs?: TInputs; - loader: (options: { - config: TConfig; - inputs: Expand>; - }) => Promise>; -}): ExtensionDefinition; - -// @public (undocumented) -export namespace createSignInPageExtension { - const // (undocumented) - componentDataRef: ConfigurableExtensionDataRef< - 'core.sign-in-page.component', - React_2.ComponentType, - {} - >; -} - // @public export function createSubRouteRef< Path extends string, @@ -918,44 +786,6 @@ export function createSubRouteRef< parent: RouteRef; }): MakeSubRouteRef, ParentParams>; -// @public (undocumented) -export function createThemeExtension( - theme: AppTheme, -): ExtensionDefinition<{}, {}>; - -// @public (undocumented) -export namespace createThemeExtension { - const // (undocumented) - themeDataRef: ConfigurableExtensionDataRef< - 'core.theme.theme', - AppTheme, - {} - >; -} - -// @public (undocumented) -export function createTranslationExtension(options: { - name?: string; - resource: TranslationResource | TranslationMessages; -}): ExtensionDefinition<{}, {}>; - -// @public (undocumented) -export namespace createTranslationExtension { - const // (undocumented) - translationDataRef: ConfigurableExtensionDataRef< - 'core.translation.translation', - | TranslationResource - | TranslationMessages< - string, - { - [x: string]: string; - }, - boolean - >, - {} - >; -} - export { createTranslationMessages }; export { createTranslationRef }; @@ -993,87 +823,154 @@ export interface Extension { // @public (undocumented) export interface ExtensionBlueprint< - TParams, - TInputs extends AnyExtensionInputMap, - TOutput extends AnyExtensionDataMap, - TConfig extends { - [key in string]: unknown; - }, - TConfigInput extends { - [key in string]: unknown; - }, - TDataRefs extends AnyExtensionDataMap, + T extends ExtensionBlueprintParameters = ExtensionBlueprintParameters, > { // (undocumented) - dataRefs: TDataRefs; - make< + dataRefs: T['dataRefs']; + // (undocumented) + make(args: { + name?: TNewName; + attachTo?: { + id: string; + input: string; + }; + disabled?: boolean; + params: T['params']; + }): ExtensionDefinition<{ + kind: T['kind']; + name: string | undefined extends TNewName ? T['name'] : TNewName; + config: T['config']; + configInput: T['configInput']; + output: T['output']; + inputs: T['inputs']; + params: T['params']; + }>; + makeWithOverrides< + TNewName extends string | undefined, TExtensionConfigSchema extends { [key in string]: (zImpl: typeof z) => z.ZodType; }, - >( - args: { - namespace?: string; - name?: string; - attachTo?: { - id: string; - input: string; - }; - disabled?: boolean; - inputs?: TInputs; - output?: TOutput; - config?: { - schema: TExtensionConfigSchema & { - [KName in keyof TConfig]?: `Error: Config key '${KName & - string}' is already defined in parent schema`; - }; - }; - } & ( - | { - factory( - originalFactory: ( - params: TParams, - context?: { - config?: TConfig; - inputs?: Expand>; - }, - ) => Expand>, - context: { - node: AppNode; - config: TConfig & { - [key in keyof TExtensionConfigSchema]: z.infer< - ReturnType - >; - }; - inputs: Expand>; - }, - ): Expand>; + UFactoryOutput extends ExtensionDataValue, + UNewOutput extends AnyExtensionDataRef, + TExtraInputs extends { + [inputName in string]: ExtensionInput< + AnyExtensionDataRef, + { + optional: boolean; + singleton: boolean; } - | { - params: TParams; - } - ), - ): ExtensionDefinition< - { - [key in keyof TExtensionConfigSchema]: z.infer< - ReturnType >; - } & TConfig, - z.input< - z.ZodObject<{ - [key in keyof TExtensionConfigSchema]: ReturnType< - TExtensionConfigSchema[key] - >; - }> - > & - TConfigInput - >; + }, + >(args: { + name?: TNewName; + attachTo?: { + id: string; + input: string; + }; + disabled?: boolean; + inputs?: TExtraInputs & { + [KName in keyof T['inputs']]?: `Error: Input '${KName & + string}' is already defined in parent definition`; + }; + output?: Array; + config?: { + schema: TExtensionConfigSchema & { + [KName in keyof T['config']]?: `Error: Config key '${KName & + string}' is already defined in parent schema`; + }; + }; + factory( + originalFactory: ( + params: T['params'], + context?: { + config?: T['config']; + inputs?: ResolveInputValueOverrides>; + }, + ) => ExtensionDataContainer>, + context: { + node: AppNode; + apis: ApiHolder; + config: T['config'] & { + [key in keyof TExtensionConfigSchema]: z.infer< + ReturnType + >; + }; + inputs: Expand>; + }, + ): Iterable & + VerifyExtensionFactoryOutput< + AnyExtensionDataRef extends UNewOutput + ? NonNullable + : UNewOutput, + UFactoryOutput + >; + }): ExtensionDefinition<{ + config: (string extends keyof TExtensionConfigSchema + ? {} + : { + [key in keyof TExtensionConfigSchema]: z.infer< + ReturnType + >; + }) & + T['config']; + configInput: (string extends keyof TExtensionConfigSchema + ? {} + : z.input< + z.ZodObject<{ + [key in keyof TExtensionConfigSchema]: ReturnType< + TExtensionConfigSchema[key] + >; + }> + >) & + T['configInput']; + output: AnyExtensionDataRef extends UNewOutput ? T['output'] : UNewOutput; + inputs: T['inputs'] & TExtraInputs; + kind: T['kind']; + name: string | undefined extends TNewName ? T['name'] : TNewName; + params: T['params']; + }>; } +// @public (undocumented) +export type ExtensionBlueprintParameters = { + kind: string; + name?: string; + params?: object; + configInput?: { + [K in string]: any; + }; + config?: { + [K in string]: any; + }; + output?: AnyExtensionDataRef; + inputs?: { + [KName in string]: ExtensionInput< + AnyExtensionDataRef, + { + optional: boolean; + singleton: boolean; + } + >; + }; + dataRefs?: { + [name in string]: AnyExtensionDataRef; + }; +}; + // @public (undocumented) export function ExtensionBoundary( props: ExtensionBoundaryProps, ): React_2.JSX.Element; +// @public (undocumented) +export namespace ExtensionBoundary { + // (undocumented) + export function lazy( + appNode: AppNode, + lazyElement: () => Promise, + ): JSX.Element; +} + // @public (undocumented) export interface ExtensionBoundaryProps { // (undocumented) @@ -1083,6 +980,28 @@ export interface ExtensionBoundaryProps { routable?: boolean; } +// @public (undocumented) +export type ExtensionDataContainer = + Iterable< + UExtensionData extends ExtensionDataRef< + infer IData, + infer IId, + infer IConfig + > + ? IConfig['optional'] extends true + ? never + : ExtensionDataValue + : never + > & { + get( + ref: ExtensionDataRef, + ): UExtensionData extends ExtensionDataRef + ? IConfig['optional'] extends true + ? IData | undefined + : IData + : never; + }; + // @public (undocumented) export type ExtensionDataRef< TData, @@ -1091,51 +1010,154 @@ export type ExtensionDataRef< optional?: true; } = {}, > = { - id: TId; - T: TData; - config: TConfig; - $$type: '@backstage/ExtensionDataRef'; -}; - -// @public -export type ExtensionDataValues = { - [DataName in keyof TExtensionData as TExtensionData[DataName]['config'] extends { - optional: true; - } - ? never - : DataName]: TExtensionData[DataName]['T']; -} & { - [DataName in keyof TExtensionData as TExtensionData[DataName]['config'] extends { - optional: true; - } - ? DataName - : never]?: TExtensionData[DataName]['T']; + readonly $$type: '@backstage/ExtensionDataRef'; + readonly id: TId; + readonly T: TData; + readonly config: TConfig; }; // @public (undocumented) -export interface ExtensionDefinition { - // (undocumented) +export type ExtensionDataRefToValue = + TDataRef extends ExtensionDataRef + ? ExtensionDataValue + : never; + +// @public (undocumented) +export type ExtensionDataValue = { + readonly $$type: '@backstage/ExtensionDataValue'; + readonly id: TId; + readonly value: TData; +}; + +// @public (undocumented) +export type ExtensionDefinition< + T extends ExtensionDefinitionParameters = ExtensionDefinitionParameters, +> = { $$type: '@backstage/ExtensionDefinition'; - // (undocumented) - readonly attachTo: { - id: string; - input: string; + readonly T: T; + override< + TExtensionConfigSchema extends { + [key in string]: (zImpl: typeof z) => z.ZodType; + }, + UFactoryOutput extends ExtensionDataValue, + UNewOutput extends AnyExtensionDataRef, + TExtraInputs extends { + [inputName in string]: ExtensionInput< + AnyExtensionDataRef, + { + optional: boolean; + singleton: boolean; + } + >; + }, + >( + args: Expand< + { + attachTo?: { + id: string; + input: string; + }; + disabled?: boolean; + inputs?: TExtraInputs & { + [KName in keyof T['inputs']]?: `Error: Input '${KName & + string}' is already defined in parent definition`; + }; + output?: Array; + config?: { + schema: TExtensionConfigSchema & { + [KName in keyof T['config']]?: `Error: Config key '${KName & + string}' is already defined in parent schema`; + }; + }; + factory?( + originalFactory: ( + context?: Expand< + { + config?: T['config']; + inputs?: ResolveInputValueOverrides>; + } & ([T['params']] extends [never] + ? {} + : { + params?: Partial; + }) + >, + ) => ExtensionDataContainer>, + context: { + node: AppNode; + apis: ApiHolder; + config: T['config'] & { + [key in keyof TExtensionConfigSchema]: z.infer< + ReturnType + >; + }; + inputs: Expand>; + }, + ): Iterable; + } & ([T['params']] extends [never] + ? {} + : { + params?: Partial; + }) + > & + VerifyExtensionFactoryOutput< + AnyExtensionDataRef extends UNewOutput + ? NonNullable + : UNewOutput, + UFactoryOutput + >, + ): ExtensionDefinition<{ + kind: T['kind']; + name: T['name']; + output: AnyExtensionDataRef extends UNewOutput ? T['output'] : UNewOutput; + inputs: T['inputs'] & TExtraInputs; + config: T['config'] & { + [key in keyof TExtensionConfigSchema]: z.infer< + ReturnType + >; + }; + configInput: T['configInput'] & + z.input< + z.ZodObject<{ + [key in keyof TExtensionConfigSchema]: ReturnType< + TExtensionConfigSchema[key] + >; + }> + >; + }>; +}; + +// @public (undocumented) +export type ExtensionDefinitionParameters = { + kind?: string; + name?: string; + configInput?: { + [K in string]: any; }; - // (undocumented) - readonly configSchema?: PortableSchema; - // (undocumented) - readonly disabled: boolean; - // (undocumented) - readonly kind?: string; - // (undocumented) - readonly name?: string; - // (undocumented) - readonly namespace?: string; -} + config?: { + [K in string]: any; + }; + output?: AnyExtensionDataRef; + inputs?: { + [KName in string]: ExtensionInput< + AnyExtensionDataRef, + { + optional: boolean; + singleton: boolean; + } + >; + }; + params?: object; +}; // @public (undocumented) export interface ExtensionInput< - TExtensionData extends AnyExtensionDataMap, + UExtensionData extends ExtensionDataRef< + unknown, + string, + { + optional?: true; + } + >, TConfig extends { singleton: boolean; optional: boolean; @@ -1146,7 +1168,12 @@ export interface ExtensionInput< // (undocumented) config: TConfig; // (undocumented) - extensionData: TExtensionData; + extensionData: Array; + // (undocumented) + replaces?: Array<{ + id: string; + input: string; + }>; } // @public (undocumented) @@ -1155,24 +1182,13 @@ export interface ExtensionOverrides { readonly $$type: '@backstage/ExtensionOverrides'; } -// @public (undocumented) -export interface ExtensionOverridesOptions { - // (undocumented) - extensions: ExtensionDefinition[]; - // (undocumented) - featureFlags?: FeatureFlagConfig[]; -} - // @public export interface ExternalRouteRef< TParams extends AnyRouteRefParams = AnyRouteRefParams, - TOptional extends boolean = boolean, > { // (undocumented) readonly $$type: '@backstage/ExternalRouteRef'; // (undocumented) - readonly optional: TOptional; - // (undocumented) readonly T: TParams; } @@ -1195,8 +1211,42 @@ export { FetchApi }; export { fetchApiRef }; +// @public @deprecated (undocumented) +export type FrontendFeature = FrontendPlugin | ExtensionOverrides; + // @public (undocumented) -export type FrontendFeature = BackstagePlugin | ExtensionOverrides; +export interface FrontendModule { + // (undocumented) + readonly $$type: '@backstage/FrontendModule'; + // (undocumented) + readonly pluginId: string; +} + +// @public (undocumented) +export interface FrontendPlugin< + TRoutes extends AnyRoutes = AnyRoutes, + TExternalRoutes extends AnyExternalRoutes = AnyExternalRoutes, + TExtensionMap extends { + [id in string]: ExtensionDefinition; + } = { + [id in string]: ExtensionDefinition; + }, +> { + // (undocumented) + readonly $$type: '@backstage/FrontendPlugin'; + // (undocumented) + readonly externalRoutes: TExternalRoutes; + // (undocumented) + getExtension(id: TId): TExtensionMap[TId]; + // (undocumented) + readonly id: string; + // (undocumented) + readonly routes: TRoutes; + // (undocumented) + withOverrides(options: { + extensions: Array; + }): FrontendPlugin; +} export { githubAuthApiRef }; @@ -1205,40 +1255,34 @@ export { gitlabAuthApiRef }; export { googleAuthApiRef }; // @public (undocumented) -export const IconBundleBlueprint: ExtensionBlueprint< - { +export const IconBundleBlueprint: ExtensionBlueprint<{ + kind: 'icon-bundle'; + name: undefined; + params: { icons: { [x: string]: IconComponent; }; - }, - AnyExtensionInputMap, - { + }; + output: ConfigurableExtensionDataRef< + { + [x: string]: IconComponent; + }, + 'core.icons', + {} + >; + inputs: {}; + config: {}; + configInput: {}; + dataRefs: { icons: ConfigurableExtensionDataRef< - 'core.icons', { [x: string]: IconComponent; }, - {} - >; - }, - { - icons: string; - test: string; - }, - { - test: string; - icons?: string | undefined; - }, - { - icons: ConfigurableExtensionDataRef< 'core.icons', - { - [x: string]: IconComponent; - }, {} >; - } ->; + }; +}>; // @public export type IconComponent = ComponentType< @@ -1267,6 +1311,71 @@ export { identityApiRef }; export { microsoftAuthApiRef }; +// @public +export const NavItemBlueprint: ExtensionBlueprint<{ + kind: 'nav-item'; + name: undefined; + params: { + title: string; + icon: IconComponent_2; + routeRef: RouteRef; + }; + output: ConfigurableExtensionDataRef< + { + title: string; + icon: IconComponent_2; + routeRef: RouteRef; + }, + 'core.nav-item.target', + {} + >; + inputs: {}; + config: {}; + configInput: {}; + dataRefs: { + target: ConfigurableExtensionDataRef< + { + title: string; + icon: IconComponent_2; + routeRef: RouteRef; + }, + 'core.nav-item.target', + {} + >; + }; +}>; + +// @public +export const NavLogoBlueprint: ExtensionBlueprint<{ + kind: 'nav-logo'; + name: undefined; + params: { + logoIcon: JSX.Element; + logoFull: JSX.Element; + }; + output: ConfigurableExtensionDataRef< + { + logoIcon?: JSX.Element | undefined; + logoFull?: JSX.Element | undefined; + }, + 'core.nav-logo.logo-elements', + {} + >; + inputs: {}; + config: {}; + configInput: {}; + dataRefs: { + logoElements: ConfigurableExtensionDataRef< + { + logoIcon?: JSX.Element | undefined; + logoFull?: JSX.Element | undefined; + }, + 'core.nav-logo.logo-elements', + {} + >; + }; +}>; + export { OAuthApi }; export { OAuthRequestApi }; @@ -1285,23 +1394,54 @@ export { oneloginAuthApiRef }; export { OpenIdConnectApi }; +// @public +export const PageBlueprint: ExtensionBlueprint<{ + kind: 'page'; + name: undefined; + params: { + defaultPath: string; + loader: () => Promise; + routeRef?: RouteRef | undefined; + }; + output: + | ConfigurableExtensionDataRef + | ConfigurableExtensionDataRef + | ConfigurableExtensionDataRef< + RouteRef, + 'core.routing.ref', + { + optional: true; + } + >; + inputs: {}; + config: { + path: string | undefined; + }; + configInput: { + path?: string | undefined; + }; + dataRefs: never; +}>; + export { PendingOAuthRequest }; // @public (undocumented) export interface PluginOptions< - Routes extends AnyRoutes, - ExternalRoutes extends AnyExternalRoutes, + TId extends string, + TRoutes extends AnyRoutes, + TExternalRoutes extends AnyExternalRoutes, + TExtensions extends readonly ExtensionDefinition[], > { // (undocumented) - extensions?: ExtensionDefinition[]; + extensions?: TExtensions; // (undocumented) - externalRoutes?: ExternalRoutes; + externalRoutes?: TExternalRoutes; // (undocumented) featureFlags?: FeatureFlagConfig[]; // (undocumented) - id: string; + id: TId; // (undocumented) - routes?: Routes; + routes?: TRoutes; } // @public (undocumented) @@ -1315,11 +1455,13 @@ export { ProfileInfo }; export { ProfileInfoApi }; // @public -export type ResolvedExtensionInput = - { - node: AppNode; - output: ExtensionDataValues; - }; +export type ResolvedExtensionInput< + TExtensionInput extends ExtensionInput, +> = TExtensionInput['extensionData'] extends Array + ? { + node: AppNode; + } & ExtensionDataContainer + : never; // @public export type ResolvedExtensionInputs< @@ -1328,14 +1470,79 @@ export type ResolvedExtensionInputs< }, > = { [InputName in keyof TInputs]: false extends TInputs[InputName]['config']['singleton'] - ? Array>> + ? Array>> : false extends TInputs[InputName]['config']['optional'] - ? Expand> - : Expand< - ResolvedExtensionInput | undefined - >; + ? Expand> + : Expand | undefined>; }; +// @public (undocumented) +export type ResolveInputValueOverrides< + TInputs extends { + [inputName in string]: ExtensionInput< + AnyExtensionDataRef, + { + optional: boolean; + singleton: boolean; + } + >; + } = { + [inputName in string]: ExtensionInput< + AnyExtensionDataRef, + { + optional: boolean; + singleton: boolean; + } + >; + }, +> = Expand< + { + [KName in keyof TInputs as TInputs[KName] extends ExtensionInput< + any, + { + optional: infer IOptional extends boolean; + singleton: boolean; + } + > + ? IOptional extends true + ? never + : KName + : never]: TInputs[KName] extends ExtensionInput< + infer IDataRefs, + { + optional: boolean; + singleton: infer ISingleton extends boolean; + } + > + ? ISingleton extends true + ? Iterable> + : Array>> + : never; + } & { + [KName in keyof TInputs as TInputs[KName] extends ExtensionInput< + any, + { + optional: infer IOptional extends boolean; + singleton: boolean; + } + > + ? IOptional extends true + ? KName + : never + : never]?: TInputs[KName] extends ExtensionInput< + infer IDataRefs, + { + optional: boolean; + singleton: infer ISingleton extends boolean; + } + > + ? ISingleton extends true + ? Iterable> + : Array>> + : never; + } +>; + // @public export type RouteFunc = ( ...[params]: TParams extends undefined @@ -1343,6 +1550,34 @@ export type RouteFunc = ( : readonly [params: TParams] ) => string; +// @public (undocumented) +export const RouterBlueprint: ExtensionBlueprint<{ + kind: 'app-router-component'; + name: undefined; + params: { + Component: ComponentType>; + }; + output: ConfigurableExtensionDataRef< + ComponentType<{ + children?: ReactNode; + }>, + 'app.router.wrapper', + {} + >; + inputs: {}; + config: {}; + configInput: {}; + dataRefs: { + component: ConfigurableExtensionDataRef< + ComponentType<{ + children?: ReactNode; + }>, + 'app.router.wrapper', + {} + >; + }; +}>; + // @public export interface RouteRef< TParams extends AnyRouteRefParams = AnyRouteRefParams, @@ -1360,7 +1595,7 @@ export interface RouteResolutionApi { anyRouteRef: | RouteRef | SubRouteRef - | ExternalRouteRef, + | ExternalRouteRef, options?: RouteResolutionApiResolveOptions, ): RouteFunc | undefined; } @@ -1377,6 +1612,30 @@ export { SessionApi }; export { SessionState }; +// @public +export const SignInPageBlueprint: ExtensionBlueprint<{ + kind: 'sign-in-page'; + name: undefined; + params: { + loader: () => Promise>; + }; + output: ConfigurableExtensionDataRef< + React_2.ComponentType, + 'core.sign-in-page.component', + {} + >; + inputs: {}; + config: {}; + configInput: {}; + dataRefs: { + component: ConfigurableExtensionDataRef< + React_2.ComponentType, + 'core.sign-in-page.component', + {} + >; + }; +}>; + export { StorageApi }; export { storageApiRef }; @@ -1395,6 +1654,60 @@ export interface SubRouteRef< readonly T: TParams; } +// @public +export const ThemeBlueprint: ExtensionBlueprint<{ + kind: 'theme'; + name: undefined; + params: { + theme: AppTheme; + }; + output: ConfigurableExtensionDataRef; + inputs: {}; + config: {}; + configInput: {}; + dataRefs: { + theme: ConfigurableExtensionDataRef; + }; +}>; + +// @public +export const TranslationBlueprint: ExtensionBlueprint<{ + kind: 'translation'; + name: undefined; + params: { + resource: TranslationResource | TranslationMessages; + }; + output: ConfigurableExtensionDataRef< + | TranslationResource + | TranslationMessages< + string, + { + [x: string]: string; + }, + boolean + >, + 'core.translation.translation', + {} + >; + inputs: {}; + config: {}; + configInput: {}; + dataRefs: { + translation: ConfigurableExtensionDataRef< + | TranslationResource + | TranslationMessages< + string, + { + [x: string]: string; + }, + boolean + >, + 'core.translation.translation', + {} + >; + }; +}>; + export { TranslationMessages }; export { TranslationMessagesOptions }; @@ -1421,18 +1734,13 @@ export function useComponentRef( ref: ComponentRef, ): ComponentType; -// @public -export function useRouteRef< - TOptional extends boolean, - TParams extends AnyRouteRefParams, ->( - routeRef: ExternalRouteRef, -): TOptional extends true ? RouteFunc | undefined : RouteFunc; - // @public export function useRouteRef( - routeRef: RouteRef | SubRouteRef, -): RouteFunc; + routeRef: + | RouteRef + | SubRouteRef + | ExternalRouteRef, +): RouteFunc | undefined; // @public export function useRouteRefParams( @@ -1461,120 +1769,89 @@ export { withApis }; // src/apis/definitions/RouteResolutionApi.d.ts:19:1 - (ae-undocumented) Missing documentation for "RouteResolutionApiResolveOptions". // src/apis/definitions/RouteResolutionApi.d.ts:29:1 - (ae-undocumented) Missing documentation for "RouteResolutionApi". // src/apis/definitions/RouteResolutionApi.d.ts:30:5 - (ae-undocumented) Missing documentation for "resolve". +// src/blueprints/IconBundleBlueprint.d.ts:3:22 - (ae-undocumented) Missing documentation for "IconBundleBlueprint". +// src/blueprints/RouterBlueprint.d.ts:3:22 - (ae-undocumented) Missing documentation for "RouterBlueprint". // src/components/ExtensionBoundary.d.ts:4:1 - (ae-undocumented) Missing documentation for "ExtensionBoundaryProps". // src/components/ExtensionBoundary.d.ts:5:5 - (ae-undocumented) Missing documentation for "node". // src/components/ExtensionBoundary.d.ts:12:5 - (ae-undocumented) Missing documentation for "children". // src/components/ExtensionBoundary.d.ts:15:1 - (ae-undocumented) Missing documentation for "ExtensionBoundary". +// src/components/ExtensionBoundary.d.ts:17:1 - (ae-undocumented) Missing documentation for "ExtensionBoundary". +// src/components/ExtensionBoundary.d.ts:18:5 - (ae-undocumented) Missing documentation for "lazy". // src/components/coreComponentRefs.d.ts:3:22 - (ae-undocumented) Missing documentation for "coreComponentRefs". // src/components/createComponentRef.d.ts:2:1 - (ae-undocumented) Missing documentation for "ComponentRef". // src/components/createComponentRef.d.ts:7:1 - (ae-undocumented) Missing documentation for "createComponentRef". -// src/extensions/IconBundleBlueprint.d.ts:3:22 - (ae-undocumented) Missing documentation for "IconBundleBlueprint". -// src/extensions/createApiExtension.d.ts:7:1 - (ae-undocumented) Missing documentation for "createApiExtension". -// src/extensions/createApiExtension.d.ts:20:1 - (ae-undocumented) Missing documentation for "createApiExtension". -// src/extensions/createApiExtension.d.ts:21:11 - (ae-undocumented) Missing documentation for "factoryDataRef". -// src/extensions/createAppRootWrapperExtension.d.ts:28:1 - (ae-undocumented) Missing documentation for "createAppRootWrapperExtension". -// src/extensions/createAppRootWrapperExtension.d.ts:29:11 - (ae-undocumented) Missing documentation for "componentDataRef". -// src/extensions/createComponentExtension.d.ts:7:1 - (ae-undocumented) Missing documentation for "createComponentExtension". -// src/extensions/createComponentExtension.d.ts:26:1 - (ae-undocumented) Missing documentation for "createComponentExtension". -// src/extensions/createComponentExtension.d.ts:27:11 - (ae-undocumented) Missing documentation for "componentDataRef". -// src/extensions/createNavItemExtension.d.ts:19:1 - (ae-undocumented) Missing documentation for "createNavItemExtension". -// src/extensions/createNavItemExtension.d.ts:20:11 - (ae-undocumented) Missing documentation for "targetDataRef". -// src/extensions/createNavLogoExtension.d.ts:13:1 - (ae-undocumented) Missing documentation for "createNavLogoExtension". -// src/extensions/createNavLogoExtension.d.ts:14:11 - (ae-undocumented) Missing documentation for "logoElementsDataRef". -// src/extensions/createRouterExtension.d.ts:28:1 - (ae-undocumented) Missing documentation for "createRouterExtension". -// src/extensions/createRouterExtension.d.ts:29:11 - (ae-undocumented) Missing documentation for "componentDataRef". -// src/extensions/createSignInPageExtension.d.ts:10:1 - (ae-undocumented) Missing documentation for "createSignInPageExtension". -// src/extensions/createSignInPageExtension.d.ts:26:1 - (ae-undocumented) Missing documentation for "createSignInPageExtension". -// src/extensions/createSignInPageExtension.d.ts:27:11 - (ae-undocumented) Missing documentation for "componentDataRef". -// src/extensions/createThemeExtension.d.ts:3:1 - (ae-undocumented) Missing documentation for "createThemeExtension". -// src/extensions/createThemeExtension.d.ts:5:1 - (ae-undocumented) Missing documentation for "createThemeExtension". -// src/extensions/createThemeExtension.d.ts:6:11 - (ae-undocumented) Missing documentation for "themeDataRef". -// src/extensions/createTranslationExtension.d.ts:3:1 - (ae-undocumented) Missing documentation for "createTranslationExtension". -// src/extensions/createTranslationExtension.d.ts:8:1 - (ae-undocumented) Missing documentation for "createTranslationExtension". -// src/extensions/createTranslationExtension.d.ts:9:11 - (ae-undocumented) Missing documentation for "translationDataRef". +// src/extensions/createComponentExtension.d.ts:4:1 - (ae-undocumented) Missing documentation for "createComponentExtension". +// src/extensions/createComponentExtension.d.ts:31:1 - (ae-undocumented) Missing documentation for "createComponentExtension". +// src/extensions/createComponentExtension.d.ts:32:11 - (ae-undocumented) Missing documentation for "componentDataRef". // src/routing/ExternalRouteRef.d.ts:12:5 - (ae-undocumented) Missing documentation for "$$type". // src/routing/ExternalRouteRef.d.ts:13:5 - (ae-undocumented) Missing documentation for "T". -// src/routing/ExternalRouteRef.d.ts:14:5 - (ae-undocumented) Missing documentation for "optional". // src/routing/RouteRef.d.ts:12:5 - (ae-undocumented) Missing documentation for "$$type". // src/routing/RouteRef.d.ts:13:5 - (ae-undocumented) Missing documentation for "T". // src/routing/SubRouteRef.d.ts:13:5 - (ae-undocumented) Missing documentation for "$$type". // src/routing/SubRouteRef.d.ts:14:5 - (ae-undocumented) Missing documentation for "T". // src/routing/SubRouteRef.d.ts:15:5 - (ae-undocumented) Missing documentation for "path". -// src/schema/createSchemaFromZod.d.ts:7:1 - (ae-undocumented) Missing documentation for "createSchemaFromZod". // src/schema/types.d.ts:3:1 - (ae-undocumented) Missing documentation for "PortableSchema". // src/types.d.ts:11:1 - (ae-undocumented) Missing documentation for "CoreProgressProps". // src/types.d.ts:13:1 - (ae-undocumented) Missing documentation for "CoreNotFoundErrorPageProps". // src/types.d.ts:17:1 - (ae-undocumented) Missing documentation for "CoreErrorBoundaryFallbackProps". // src/wiring/coreExtensionData.d.ts:4:22 - (ae-undocumented) Missing documentation for "coreExtensionData". -// src/wiring/createExtension.d.ts:8:1 - (ae-undocumented) Missing documentation for "AnyExtensionDataMap". -// src/wiring/createExtension.d.ts:14:1 - (ae-undocumented) Missing documentation for "AnyExtensionInputMap". -// src/wiring/createExtension.d.ts:51:1 - (ae-undocumented) Missing documentation for "CreateExtensionOptions". -// src/wiring/createExtension.d.ts:54:5 - (ae-undocumented) Missing documentation for "kind". -// src/wiring/createExtension.d.ts:55:5 - (ae-undocumented) Missing documentation for "namespace". -// src/wiring/createExtension.d.ts:56:5 - (ae-undocumented) Missing documentation for "name". -// src/wiring/createExtension.d.ts:57:5 - (ae-undocumented) Missing documentation for "attachTo". -// src/wiring/createExtension.d.ts:61:5 - (ae-undocumented) Missing documentation for "disabled". -// src/wiring/createExtension.d.ts:62:5 - (ae-undocumented) Missing documentation for "inputs". -// src/wiring/createExtension.d.ts:63:5 - (ae-undocumented) Missing documentation for "output". -// src/wiring/createExtension.d.ts:65:5 - (ae-undocumented) Missing documentation for "configSchema". -// src/wiring/createExtension.d.ts:66:5 - (ae-undocumented) Missing documentation for "config". -// src/wiring/createExtension.d.ts:69:5 - (ae-undocumented) Missing documentation for "factory". -// src/wiring/createExtension.d.ts:78:1 - (ae-undocumented) Missing documentation for "ExtensionDefinition". -// src/wiring/createExtension.d.ts:79:5 - (ae-undocumented) Missing documentation for "$$type". -// src/wiring/createExtension.d.ts:80:5 - (ae-undocumented) Missing documentation for "kind". -// src/wiring/createExtension.d.ts:81:5 - (ae-undocumented) Missing documentation for "namespace". -// src/wiring/createExtension.d.ts:82:5 - (ae-undocumented) Missing documentation for "name". -// src/wiring/createExtension.d.ts:83:5 - (ae-undocumented) Missing documentation for "attachTo". -// src/wiring/createExtension.d.ts:87:5 - (ae-undocumented) Missing documentation for "disabled". -// src/wiring/createExtension.d.ts:88:5 - (ae-undocumented) Missing documentation for "configSchema". -// src/wiring/createExtension.d.ts:91:1 - (ae-undocumented) Missing documentation for "createExtension". -// src/wiring/createExtensionBlueprint.d.ts:8:1 - (ae-undocumented) Missing documentation for "CreateExtensionBlueprintOptions". -// src/wiring/createExtensionBlueprint.d.ts:11:5 - (ae-undocumented) Missing documentation for "kind". -// src/wiring/createExtensionBlueprint.d.ts:12:5 - (ae-undocumented) Missing documentation for "namespace". -// src/wiring/createExtensionBlueprint.d.ts:13:5 - (ae-undocumented) Missing documentation for "attachTo". -// src/wiring/createExtensionBlueprint.d.ts:17:5 - (ae-undocumented) Missing documentation for "disabled". -// src/wiring/createExtensionBlueprint.d.ts:18:5 - (ae-undocumented) Missing documentation for "inputs". -// src/wiring/createExtensionBlueprint.d.ts:19:5 - (ae-undocumented) Missing documentation for "output". -// src/wiring/createExtensionBlueprint.d.ts:20:5 - (ae-undocumented) Missing documentation for "config". -// src/wiring/createExtensionBlueprint.d.ts:23:5 - (ae-undocumented) Missing documentation for "factory". -// src/wiring/createExtensionBlueprint.d.ts:30:5 - (ae-undocumented) Missing documentation for "dataRefs". -// src/wiring/createExtensionBlueprint.d.ts:35:1 - (ae-undocumented) Missing documentation for "ExtensionBlueprint". -// src/wiring/createExtensionBlueprint.d.ts:40:5 - (ae-undocumented) Missing documentation for "dataRefs". -// src/wiring/createExtensionDataRef.d.ts:2:1 - (ae-undocumented) Missing documentation for "ExtensionDataRef". -// src/wiring/createExtensionDataRef.d.ts:11:1 - (ae-undocumented) Missing documentation for "ConfigurableExtensionDataRef". -// src/wiring/createExtensionDataRef.d.ts:14:5 - (ae-undocumented) Missing documentation for "optional". -// src/wiring/createExtensionDataRef.d.ts:22:1 - (ae-undocumented) Missing documentation for "createExtensionDataRef". -// src/wiring/createExtensionDataRef.d.ts:24:1 - (ae-undocumented) Missing documentation for "createExtensionDataRef". +// src/wiring/createExtension.d.ts:31:1 - (ae-undocumented) Missing documentation for "CreateExtensionOptions". +// src/wiring/createExtension.d.ts:61:1 - (ae-undocumented) Missing documentation for "ExtensionDefinitionParameters". +// src/wiring/createExtension.d.ts:80:1 - (ae-undocumented) Missing documentation for "ExtensionDefinition". +// src/wiring/createExtension.d.ts:134:1 - (ae-undocumented) Missing documentation for "createExtension". +// src/wiring/createExtensionBlueprint.d.ts:12:1 - (ae-undocumented) Missing documentation for "CreateExtensionBlueprintOptions". +// src/wiring/createExtensionBlueprint.d.ts:45:1 - (ae-undocumented) Missing documentation for "ExtensionBlueprintParameters". +// src/wiring/createExtensionBlueprint.d.ts:69:1 - (ae-undocumented) Missing documentation for "ExtensionBlueprint". +// src/wiring/createExtensionBlueprint.d.ts:70:5 - (ae-undocumented) Missing documentation for "dataRefs". +// src/wiring/createExtensionBlueprint.d.ts:71:5 - (ae-undocumented) Missing documentation for "make". +// src/wiring/createExtensionDataContainer.d.ts:3:1 - (ae-undocumented) Missing documentation for "ExtensionDataContainer". +// src/wiring/createExtensionDataRef.d.ts:2:1 - (ae-undocumented) Missing documentation for "ExtensionDataValue". +// src/wiring/createExtensionDataRef.d.ts:8:1 - (ae-undocumented) Missing documentation for "ExtensionDataRef". +// src/wiring/createExtensionDataRef.d.ts:17:1 - (ae-undocumented) Missing documentation for "ExtensionDataRefToValue". +// src/wiring/createExtensionDataRef.d.ts:19:1 - (ae-undocumented) Missing documentation for "AnyExtensionDataRef". +// src/wiring/createExtensionDataRef.d.ts:23:1 - (ae-undocumented) Missing documentation for "ConfigurableExtensionDataRef". +// src/wiring/createExtensionDataRef.d.ts:26:5 - (ae-undocumented) Missing documentation for "optional". +// src/wiring/createExtensionDataRef.d.ts:29:5 - (ae-undocumented) Missing documentation for "__call". +// src/wiring/createExtensionDataRef.d.ts:35:1 - (ae-undocumented) Missing documentation for "createExtensionDataRef". +// src/wiring/createExtensionDataRef.d.ts:37:1 - (ae-undocumented) Missing documentation for "createExtensionDataRef". // src/wiring/createExtensionInput.d.ts:3:1 - (ae-undocumented) Missing documentation for "ExtensionInput". -// src/wiring/createExtensionInput.d.ts:7:5 - (ae-undocumented) Missing documentation for "$$type". -// src/wiring/createExtensionInput.d.ts:8:5 - (ae-undocumented) Missing documentation for "extensionData". -// src/wiring/createExtensionInput.d.ts:9:5 - (ae-undocumented) Missing documentation for "config". -// src/wiring/createExtensionInput.d.ts:12:1 - (ae-undocumented) Missing documentation for "createExtensionInput". -// src/wiring/createExtensionOverrides.d.ts:4:1 - (ae-undocumented) Missing documentation for "ExtensionOverridesOptions". -// src/wiring/createExtensionOverrides.d.ts:5:5 - (ae-undocumented) Missing documentation for "extensions". -// src/wiring/createExtensionOverrides.d.ts:6:5 - (ae-undocumented) Missing documentation for "featureFlags". -// src/wiring/createExtensionOverrides.d.ts:9:1 - (ae-undocumented) Missing documentation for "createExtensionOverrides". -// src/wiring/createPlugin.d.ts:5:1 - (ae-undocumented) Missing documentation for "PluginOptions". -// src/wiring/createPlugin.d.ts:6:5 - (ae-undocumented) Missing documentation for "id". -// src/wiring/createPlugin.d.ts:7:5 - (ae-undocumented) Missing documentation for "routes". -// src/wiring/createPlugin.d.ts:8:5 - (ae-undocumented) Missing documentation for "externalRoutes". -// src/wiring/createPlugin.d.ts:9:5 - (ae-undocumented) Missing documentation for "extensions". -// src/wiring/createPlugin.d.ts:10:5 - (ae-undocumented) Missing documentation for "featureFlags". -// src/wiring/createPlugin.d.ts:19:1 - (ae-undocumented) Missing documentation for "createPlugin". -// src/wiring/resolveExtensionDefinition.d.ts:3:1 - (ae-undocumented) Missing documentation for "Extension". -// src/wiring/resolveExtensionDefinition.d.ts:4:5 - (ae-undocumented) Missing documentation for "$$type". -// src/wiring/resolveExtensionDefinition.d.ts:5:5 - (ae-undocumented) Missing documentation for "id". -// src/wiring/resolveExtensionDefinition.d.ts:6:5 - (ae-undocumented) Missing documentation for "attachTo". -// src/wiring/resolveExtensionDefinition.d.ts:10:5 - (ae-undocumented) Missing documentation for "disabled". -// src/wiring/resolveExtensionDefinition.d.ts:11:5 - (ae-undocumented) Missing documentation for "configSchema". -// src/wiring/types.d.ts:12:1 - (ae-undocumented) Missing documentation for "AnyRoutes". -// src/wiring/types.d.ts:16:1 - (ae-undocumented) Missing documentation for "AnyExternalRoutes". -// src/wiring/types.d.ts:20:1 - (ae-undocumented) Missing documentation for "BackstagePlugin". -// src/wiring/types.d.ts:21:5 - (ae-undocumented) Missing documentation for "$$type". -// src/wiring/types.d.ts:22:5 - (ae-undocumented) Missing documentation for "id". -// src/wiring/types.d.ts:23:5 - (ae-undocumented) Missing documentation for "routes". -// src/wiring/types.d.ts:24:5 - (ae-undocumented) Missing documentation for "externalRoutes". -// src/wiring/types.d.ts:27:1 - (ae-undocumented) Missing documentation for "ExtensionOverrides". -// src/wiring/types.d.ts:28:5 - (ae-undocumented) Missing documentation for "$$type". -// src/wiring/types.d.ts:31:1 - (ae-undocumented) Missing documentation for "FrontendFeature". +// src/wiring/createExtensionInput.d.ts:9:5 - (ae-undocumented) Missing documentation for "$$type". +// src/wiring/createExtensionInput.d.ts:10:5 - (ae-undocumented) Missing documentation for "extensionData". +// src/wiring/createExtensionInput.d.ts:11:5 - (ae-undocumented) Missing documentation for "config". +// src/wiring/createExtensionInput.d.ts:12:5 - (ae-undocumented) Missing documentation for "replaces". +// src/wiring/createExtensionInput.d.ts:18:1 - (ae-undocumented) Missing documentation for "createExtensionInput". +// src/wiring/createFrontendModule.d.ts:4:1 - (ae-undocumented) Missing documentation for "CreateFrontendModuleOptions". +// src/wiring/createFrontendModule.d.ts:5:5 - (ae-undocumented) Missing documentation for "pluginId". +// src/wiring/createFrontendModule.d.ts:6:5 - (ae-undocumented) Missing documentation for "extensions". +// src/wiring/createFrontendModule.d.ts:7:5 - (ae-undocumented) Missing documentation for "featureFlags". +// src/wiring/createFrontendModule.d.ts:10:1 - (ae-undocumented) Missing documentation for "FrontendModule". +// src/wiring/createFrontendModule.d.ts:11:5 - (ae-undocumented) Missing documentation for "$$type". +// src/wiring/createFrontendModule.d.ts:12:5 - (ae-undocumented) Missing documentation for "pluginId". +// src/wiring/createFrontendModule.d.ts:15:1 - (ae-undocumented) Missing documentation for "createFrontendModule". +// src/wiring/createFrontendPlugin.d.ts:5:1 - (ae-undocumented) Missing documentation for "FrontendPlugin". +// src/wiring/createFrontendPlugin.d.ts:10:5 - (ae-undocumented) Missing documentation for "$$type". +// src/wiring/createFrontendPlugin.d.ts:11:5 - (ae-undocumented) Missing documentation for "id". +// src/wiring/createFrontendPlugin.d.ts:12:5 - (ae-undocumented) Missing documentation for "routes". +// src/wiring/createFrontendPlugin.d.ts:13:5 - (ae-undocumented) Missing documentation for "externalRoutes". +// src/wiring/createFrontendPlugin.d.ts:14:5 - (ae-undocumented) Missing documentation for "getExtension". +// src/wiring/createFrontendPlugin.d.ts:15:5 - (ae-undocumented) Missing documentation for "withOverrides". +// src/wiring/createFrontendPlugin.d.ts:20:1 - (ae-undocumented) Missing documentation for "PluginOptions". +// src/wiring/createFrontendPlugin.d.ts:21:5 - (ae-undocumented) Missing documentation for "id". +// src/wiring/createFrontendPlugin.d.ts:22:5 - (ae-undocumented) Missing documentation for "routes". +// src/wiring/createFrontendPlugin.d.ts:23:5 - (ae-undocumented) Missing documentation for "externalRoutes". +// src/wiring/createFrontendPlugin.d.ts:24:5 - (ae-undocumented) Missing documentation for "extensions". +// src/wiring/createFrontendPlugin.d.ts:25:5 - (ae-undocumented) Missing documentation for "featureFlags". +// src/wiring/createFrontendPlugin.d.ts:28:1 - (ae-undocumented) Missing documentation for "createFrontendPlugin". +// src/wiring/resolveExtensionDefinition.d.ts:4:1 - (ae-undocumented) Missing documentation for "Extension". +// src/wiring/resolveExtensionDefinition.d.ts:5:5 - (ae-undocumented) Missing documentation for "$$type". +// src/wiring/resolveExtensionDefinition.d.ts:6:5 - (ae-undocumented) Missing documentation for "id". +// src/wiring/resolveExtensionDefinition.d.ts:7:5 - (ae-undocumented) Missing documentation for "attachTo". +// src/wiring/resolveExtensionDefinition.d.ts:11:5 - (ae-undocumented) Missing documentation for "disabled". +// src/wiring/resolveExtensionDefinition.d.ts:12:5 - (ae-undocumented) Missing documentation for "configSchema". +// src/wiring/resolveInputOverrides.d.ts:5:1 - (ae-undocumented) Missing documentation for "ResolveInputValueOverrides". +// src/wiring/types.d.ts:14:1 - (ae-undocumented) Missing documentation for "AnyRoutes". +// src/wiring/types.d.ts:18:1 - (ae-undocumented) Missing documentation for "AnyExternalRoutes". +// src/wiring/types.d.ts:28:1 - (ae-undocumented) Missing documentation for "ExtensionOverrides". +// src/wiring/types.d.ts:29:5 - (ae-undocumented) Missing documentation for "$$type". +// src/wiring/types.d.ts:35:1 - (ae-undocumented) Missing documentation for "FrontendFeature". ``` diff --git a/packages/frontend-test-utils/report.api.md b/packages/frontend-test-utils/report.api.md index ebe02dee2c..1337e5eb4f 100644 --- a/packages/frontend-test-utils/report.api.md +++ b/packages/frontend-test-utils/report.api.md @@ -145,9 +145,15 @@ export { withLogCollector }; // // src/apis/AnalyticsApi/MockAnalyticsApi.d.ts:10:5 - (ae-undocumented) Missing documentation for "captureEvent". // src/apis/AnalyticsApi/MockAnalyticsApi.d.ts:11:5 - (ae-undocumented) Missing documentation for "getEvents". -// src/app/createExtensionTester.d.ts:5:1 - (ae-undocumented) Missing documentation for "ExtensionTester". -// src/app/createExtensionTester.d.ts:7:5 - (ae-undocumented) Missing documentation for "add". -// src/app/createExtensionTester.d.ts:10:5 - (ae-undocumented) Missing documentation for "render". -// src/app/createExtensionTester.d.ts:15:1 - (ae-undocumented) Missing documentation for "createExtensionTester". +// src/app/createExtensionTester.d.ts:4:1 - (ae-undocumented) Missing documentation for "ExtensionQuery". +// src/app/createExtensionTester.d.ts:7:5 - (ae-undocumented) Missing documentation for "node". +// src/app/createExtensionTester.d.ts:8:5 - (ae-undocumented) Missing documentation for "instance". +// src/app/createExtensionTester.d.ts:9:5 - (ae-undocumented) Missing documentation for "get". +// src/app/createExtensionTester.d.ts:12:1 - (ae-undocumented) Missing documentation for "ExtensionTester". +// src/app/createExtensionTester.d.ts:14:5 - (ae-undocumented) Missing documentation for "add". +// src/app/createExtensionTester.d.ts:17:5 - (ae-undocumented) Missing documentation for "get". +// src/app/createExtensionTester.d.ts:18:5 - (ae-undocumented) Missing documentation for "query". +// src/app/createExtensionTester.d.ts:19:5 - (ae-undocumented) Missing documentation for "reactElement". +// src/app/createExtensionTester.d.ts:22:1 - (ae-undocumented) Missing documentation for "createExtensionTester". // src/deprecated.d.ts:5:1 - (ae-undocumented) Missing documentation for "setupRequestMockHandlers". ``` diff --git a/plugins/api-docs/report-alpha.api.md b/plugins/api-docs/report-alpha.api.md index 66fa1b1be5..274d5d4aac 100644 --- a/plugins/api-docs/report-alpha.api.md +++ b/plugins/api-docs/report-alpha.api.md @@ -429,7 +429,7 @@ export default _default; // Warnings were encountered during analysis: // -// src/alpha.d.ts:1:15 - (ae-undocumented) Missing documentation for "_default". +// src/alpha.d.ts:2:15 - (ae-undocumented) Missing documentation for "_default". // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/api-docs/report.api.md b/plugins/api-docs/report.api.md index 023b8e02ee..74318781c8 100644 --- a/plugins/api-docs/report.api.md +++ b/plugins/api-docs/report.api.md @@ -239,10 +239,11 @@ export type TrpcApiDefinitionWidgetProps = { // src/components/ApisCards/ConsumedApisCard.d.ts:7:22 - (ae-undocumented) Missing documentation for "ConsumedApisCard". // src/components/ApisCards/HasApisCard.d.ts:7:22 - (ae-undocumented) Missing documentation for "HasApisCard". // src/components/ApisCards/ProvidedApisCard.d.ts:7:22 - (ae-undocumented) Missing documentation for "ProvidedApisCard". -// src/components/AsyncApiDefinitionWidget/AsyncApiDefinitionWidget.d.ts:3:1 - (ae-undocumented) Missing documentation for "AsyncApiDefinitionWidgetProps". -// src/components/AsyncApiDefinitionWidget/AsyncApiDefinitionWidget.d.ts:7:22 - (ae-undocumented) Missing documentation for "AsyncApiDefinitionWidget". -// src/components/ComponentsCards/ConsumingComponentsCard.d.ts:6:22 - (ae-undocumented) Missing documentation for "ConsumingComponentsCard". -// src/components/ComponentsCards/ProvidingComponentsCard.d.ts:4:22 - (ae-undocumented) Missing documentation for "ProvidingComponentsCard". +// src/components/AsyncApiDefinitionWidget/AsyncApiDefinition.d.ts:4:1 - (ae-undocumented) Missing documentation for "AsyncApiResolver". +// src/components/AsyncApiDefinitionWidget/AsyncApiDefinitionWidget.d.ts:4:1 - (ae-undocumented) Missing documentation for "AsyncApiDefinitionWidgetProps". +// src/components/AsyncApiDefinitionWidget/AsyncApiDefinitionWidget.d.ts:9:22 - (ae-undocumented) Missing documentation for "AsyncApiDefinitionWidget". +// src/components/ComponentsCards/ConsumingComponentsCard.d.ts:7:22 - (ae-undocumented) Missing documentation for "ConsumingComponentsCard". +// src/components/ComponentsCards/ProvidingComponentsCard.d.ts:5:22 - (ae-undocumented) Missing documentation for "ProvidingComponentsCard". // src/components/GraphQlDefinitionWidget/GraphQlDefinitionWidget.d.ts:3:1 - (ae-undocumented) Missing documentation for "GraphQlDefinitionWidgetProps". // src/components/GraphQlDefinitionWidget/GraphQlDefinitionWidget.d.ts:7:22 - (ae-undocumented) Missing documentation for "GraphQlDefinitionWidget". // src/components/OpenApiDefinitionWidget/OpenApiDefinitionWidget.d.ts:3:1 - (ae-undocumented) Missing documentation for "OpenApiDefinitionWidgetProps". @@ -258,8 +259,8 @@ export type TrpcApiDefinitionWidgetProps = { // src/plugin.d.ts:10:22 - (ae-undocumented) Missing documentation for "ApiExplorerPage". // src/plugin.d.ts:12:22 - (ae-undocumented) Missing documentation for "EntityApiDefinitionCard". // src/plugin.d.ts:14:22 - (ae-undocumented) Missing documentation for "EntityConsumedApisCard". -// src/plugin.d.ts:19:22 - (ae-undocumented) Missing documentation for "EntityConsumingComponentsCard". -// src/plugin.d.ts:23:22 - (ae-undocumented) Missing documentation for "EntityProvidedApisCard". -// src/plugin.d.ts:28:22 - (ae-undocumented) Missing documentation for "EntityProvidingComponentsCard". -// src/plugin.d.ts:32:22 - (ae-undocumented) Missing documentation for "EntityHasApisCard". +// src/plugin.d.ts:21:22 - (ae-undocumented) Missing documentation for "EntityConsumingComponentsCard". +// src/plugin.d.ts:26:22 - (ae-undocumented) Missing documentation for "EntityProvidedApisCard". +// src/plugin.d.ts:33:22 - (ae-undocumented) Missing documentation for "EntityProvidingComponentsCard". +// src/plugin.d.ts:38:22 - (ae-undocumented) Missing documentation for "EntityHasApisCard". ``` diff --git a/plugins/app-backend/report.api.md b/plugins/app-backend/report.api.md index 3de36b0338..ab36eb95d3 100644 --- a/plugins/app-backend/report.api.md +++ b/plugins/app-backend/report.api.md @@ -33,10 +33,10 @@ export interface RouterOptions { // Warnings were encountered during analysis: // -// src/service/router.d.ts:7:1 - (ae-undocumented) Missing documentation for "RouterOptions". -// src/service/router.d.ts:8:5 - (ae-undocumented) Missing documentation for "config". -// src/service/router.d.ts:9:5 - (ae-undocumented) Missing documentation for "logger". -// src/service/router.d.ts:10:5 - (ae-undocumented) Missing documentation for "auth". -// src/service/router.d.ts:11:5 - (ae-undocumented) Missing documentation for "httpAuth". -// src/service/router.d.ts:56:1 - (ae-undocumented) Missing documentation for "createRouter". +// src/service/router.d.ts:9:1 - (ae-undocumented) Missing documentation for "RouterOptions". +// src/service/router.d.ts:10:5 - (ae-undocumented) Missing documentation for "config". +// src/service/router.d.ts:11:5 - (ae-undocumented) Missing documentation for "logger". +// src/service/router.d.ts:12:5 - (ae-undocumented) Missing documentation for "auth". +// src/service/router.d.ts:13:5 - (ae-undocumented) Missing documentation for "httpAuth". +// src/service/router.d.ts:61:1 - (ae-undocumented) Missing documentation for "createRouter". ``` diff --git a/plugins/app-visualizer/report.api.md b/plugins/app-visualizer/report.api.md index 7495797a79..15f7384c42 100644 --- a/plugins/app-visualizer/report.api.md +++ b/plugins/app-visualizer/report.api.md @@ -73,7 +73,7 @@ export default visualizerPlugin; // Warnings were encountered during analysis: // -// src/plugin.d.ts:7:22 - (ae-undocumented) Missing documentation for "visualizerPlugin". +// src/plugin.d.ts:20:22 - (ae-undocumented) Missing documentation for "visualizerPlugin". // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/app/api-report.md b/plugins/app/api-report.md deleted file mode 100644 index c8fb0a94d9..0000000000 --- a/plugins/app/api-report.md +++ /dev/null @@ -1,713 +0,0 @@ -## API Report File for "@backstage/plugin-app" - -> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). - -```ts -/// - -import { AnyApiFactory } from '@backstage/frontend-plugin-api'; -import { AnyExtensionDataRef } from '@backstage/frontend-plugin-api'; -import { AnyRouteRefParams } from '@backstage/frontend-plugin-api'; -import { AppTheme } from '@backstage/frontend-plugin-api'; -import { ComponentRef } from '@backstage/frontend-plugin-api'; -import { ComponentType } from 'react'; -import { ConfigurableExtensionDataRef } from '@backstage/frontend-plugin-api'; -import { ExtensionDefinition } from '@backstage/frontend-plugin-api'; -import { ExtensionInput } from '@backstage/frontend-plugin-api'; -import { FrontendPlugin } from '@backstage/frontend-plugin-api'; -import { IconComponent } from '@backstage/core-plugin-api'; -import { IconComponent as IconComponent_2 } from '@backstage/frontend-plugin-api'; -import { JSX as JSX_2 } from 'react'; -import { ReactNode } from 'react'; -import { RouteRef } from '@backstage/frontend-plugin-api'; -import { SignInPageProps } from '@backstage/core-plugin-api'; -import { TranslationMessages } from '@backstage/frontend-plugin-api'; -import { TranslationResource } from '@backstage/frontend-plugin-api'; - -// @public (undocumented) -const appPlugin: FrontendPlugin< - {}, - {}, - { - app: ExtensionDefinition<{ - config: {}; - configInput: {}; - output: ConfigurableExtensionDataRef< - JSX_2.Element, - 'core.reactElement', - {} - >; - inputs: { - root: ExtensionInput< - ConfigurableExtensionDataRef, - { - singleton: true; - optional: false; - } - >; - }; - params: never; - kind: undefined; - name: undefined; - }>; - 'api:app/app-language': ExtensionDefinition<{ - kind: 'api'; - name: 'app-language'; - config: {}; - configInput: {}; - output: ConfigurableExtensionDataRef< - AnyApiFactory, - 'core.api.factory', - {} - >; - inputs: {}; - params: { - factory: AnyApiFactory; - }; - }>; - 'app/layout': ExtensionDefinition<{ - config: {}; - configInput: {}; - output: ConfigurableExtensionDataRef< - JSX_2.Element, - 'core.reactElement', - {} - >; - inputs: { - nav: ExtensionInput< - ConfigurableExtensionDataRef, - { - singleton: true; - optional: false; - } - >; - content: ExtensionInput< - ConfigurableExtensionDataRef, - { - singleton: true; - optional: false; - } - >; - }; - params: never; - kind: undefined; - name: 'layout'; - }>; - 'app/nav': ExtensionDefinition<{ - config: {}; - configInput: {}; - output: ConfigurableExtensionDataRef< - JSX_2.Element, - 'core.reactElement', - {} - >; - inputs: { - items: ExtensionInput< - ConfigurableExtensionDataRef< - { - title: string; - icon: IconComponent; - routeRef: RouteRef; - }, - 'core.nav-item.target', - {} - >, - { - singleton: false; - optional: false; - } - >; - logos: ExtensionInput< - ConfigurableExtensionDataRef< - { - logoIcon?: JSX.Element | undefined; - logoFull?: JSX.Element | undefined; - }, - 'core.nav-logo.logo-elements', - {} - >, - { - singleton: true; - optional: true; - } - >; - }; - params: never; - kind: undefined; - name: 'nav'; - }>; - 'app/root': ExtensionDefinition<{ - config: {}; - configInput: {}; - output: ConfigurableExtensionDataRef< - JSX_2.Element, - 'core.reactElement', - {} - >; - inputs: { - router: ExtensionInput< - ConfigurableExtensionDataRef< - ComponentType<{ - children?: ReactNode; - }>, - 'app.router.wrapper', - {} - >, - { - singleton: true; - optional: true; - } - >; - signInPage: ExtensionInput< - ConfigurableExtensionDataRef< - ComponentType, - 'core.sign-in-page.component', - {} - >, - { - singleton: true; - optional: true; - } - >; - children: ExtensionInput< - ConfigurableExtensionDataRef, - { - singleton: true; - optional: false; - } - >; - elements: ExtensionInput< - ConfigurableExtensionDataRef, - { - singleton: false; - optional: false; - } - >; - wrappers: ExtensionInput< - ConfigurableExtensionDataRef< - ComponentType<{ - children?: ReactNode; - }>, - 'app.root.wrapper', - {} - >, - { - singleton: false; - optional: false; - } - >; - }; - params: never; - kind: undefined; - name: 'root'; - }>; - 'app/routes': ExtensionDefinition<{ - config: {}; - configInput: {}; - output: ConfigurableExtensionDataRef< - JSX_2.Element, - 'core.reactElement', - {} - >; - inputs: { - routes: ExtensionInput< - | ConfigurableExtensionDataRef - | ConfigurableExtensionDataRef - | ConfigurableExtensionDataRef< - RouteRef, - 'core.routing.ref', - { - optional: true; - } - >, - { - singleton: false; - optional: false; - } - >; - }; - params: never; - kind: undefined; - name: 'routes'; - }>; - 'api:app/app-theme': ExtensionDefinition<{ - config: {}; - configInput: {}; - output: ConfigurableExtensionDataRef< - AnyApiFactory, - 'core.api.factory', - {} - >; - inputs: { - themes: ExtensionInput< - ConfigurableExtensionDataRef, - { - singleton: false; - optional: false; - } - >; - }; - kind: 'api'; - name: 'app-theme'; - params: { - factory: AnyApiFactory; - }; - }>; - 'theme:app/light': ExtensionDefinition<{ - kind: 'theme'; - name: 'light'; - config: {}; - configInput: {}; - output: ConfigurableExtensionDataRef; - inputs: {}; - params: { - theme: AppTheme; - }; - }>; - 'theme:app/dark': ExtensionDefinition<{ - kind: 'theme'; - name: 'dark'; - config: {}; - configInput: {}; - output: ConfigurableExtensionDataRef; - inputs: {}; - params: { - theme: AppTheme; - }; - }>; - 'api:app/components': ExtensionDefinition<{ - config: {}; - configInput: {}; - output: ConfigurableExtensionDataRef< - AnyApiFactory, - 'core.api.factory', - {} - >; - inputs: { - components: ExtensionInput< - ConfigurableExtensionDataRef< - { - ref: ComponentRef; - impl: ComponentType; - }, - 'core.component.component', - {} - >, - { - singleton: false; - optional: false; - } - >; - }; - kind: 'api'; - name: 'components'; - params: { - factory: AnyApiFactory; - }; - }>; - 'api:app/icons': ExtensionDefinition<{ - config: {}; - configInput: {}; - output: ConfigurableExtensionDataRef< - AnyApiFactory, - 'core.api.factory', - {} - >; - inputs: { - icons: ExtensionInput< - ConfigurableExtensionDataRef< - { - [x: string]: IconComponent_2; - }, - 'core.icons', - {} - >, - { - singleton: false; - optional: false; - } - >; - }; - kind: 'api'; - name: 'icons'; - params: { - factory: AnyApiFactory; - }; - }>; - 'api:app/feature-flags': ExtensionDefinition<{ - kind: 'api'; - name: 'feature-flags'; - config: {}; - configInput: {}; - output: ConfigurableExtensionDataRef< - AnyApiFactory, - 'core.api.factory', - {} - >; - inputs: {}; - params: { - factory: AnyApiFactory; - }; - }>; - 'api:app/translations': ExtensionDefinition<{ - config: {}; - configInput: {}; - output: ConfigurableExtensionDataRef< - AnyApiFactory, - 'core.api.factory', - {} - >; - inputs: { - translations: ExtensionInput< - ConfigurableExtensionDataRef< - | TranslationResource - | TranslationMessages< - string, - { - [x: string]: string; - }, - boolean - >, - 'core.translation.translation', - {} - >, - { - singleton: false; - optional: false; - } - >; - }; - kind: 'api'; - name: 'translations'; - params: { - factory: AnyApiFactory; - }; - }>; - 'app-root-element:app/oauth-request-dialog': ExtensionDefinition<{ - kind: 'app-root-element'; - name: 'oauth-request-dialog'; - config: {}; - configInput: {}; - output: ConfigurableExtensionDataRef< - JSX_2.Element, - 'core.reactElement', - {} - >; - inputs: {}; - params: { - element: JSX.Element | (() => JSX.Element); - }; - }>; - 'app-root-element:app/alert-display': ExtensionDefinition<{ - config: { - transientTimeoutMs: number; - anchorOrigin: { - horizontal: 'center' | 'left' | 'right'; - vertical: 'top' | 'bottom'; - }; - }; - configInput: { - anchorOrigin?: - | { - horizontal?: 'center' | 'left' | 'right' | undefined; - vertical?: 'top' | 'bottom' | undefined; - } - | undefined; - transientTimeoutMs?: number | undefined; - }; - output: ConfigurableExtensionDataRef< - JSX_2.Element, - 'core.reactElement', - {} - >; - inputs: { - [x: string]: ExtensionInput< - AnyExtensionDataRef, - { - optional: boolean; - singleton: boolean; - } - >; - }; - kind: 'app-root-element'; - name: 'alert-display'; - params: { - element: JSX.Element | (() => JSX.Element); - }; - }>; - 'api:app/discovery': ExtensionDefinition<{ - kind: 'api'; - name: 'discovery'; - config: {}; - configInput: {}; - output: ConfigurableExtensionDataRef< - AnyApiFactory, - 'core.api.factory', - {} - >; - inputs: {}; - params: { - factory: AnyApiFactory; - }; - }>; - 'api:app/alert': ExtensionDefinition<{ - kind: 'api'; - name: 'alert'; - config: {}; - configInput: {}; - output: ConfigurableExtensionDataRef< - AnyApiFactory, - 'core.api.factory', - {} - >; - inputs: {}; - params: { - factory: AnyApiFactory; - }; - }>; - 'api:app/analytics': ExtensionDefinition<{ - kind: 'api'; - name: 'analytics'; - config: {}; - configInput: {}; - output: ConfigurableExtensionDataRef< - AnyApiFactory, - 'core.api.factory', - {} - >; - inputs: {}; - params: { - factory: AnyApiFactory; - }; - }>; - 'api:app/error': ExtensionDefinition<{ - kind: 'api'; - name: 'error'; - config: {}; - configInput: {}; - output: ConfigurableExtensionDataRef< - AnyApiFactory, - 'core.api.factory', - {} - >; - inputs: {}; - params: { - factory: AnyApiFactory; - }; - }>; - 'api:app/storage': ExtensionDefinition<{ - kind: 'api'; - name: 'storage'; - config: {}; - configInput: {}; - output: ConfigurableExtensionDataRef< - AnyApiFactory, - 'core.api.factory', - {} - >; - inputs: {}; - params: { - factory: AnyApiFactory; - }; - }>; - 'api:app/fetch': ExtensionDefinition<{ - kind: 'api'; - name: 'fetch'; - config: {}; - configInput: {}; - output: ConfigurableExtensionDataRef< - AnyApiFactory, - 'core.api.factory', - {} - >; - inputs: {}; - params: { - factory: AnyApiFactory; - }; - }>; - 'api:app/oauth-request': ExtensionDefinition<{ - kind: 'api'; - name: 'oauth-request'; - config: {}; - configInput: {}; - output: ConfigurableExtensionDataRef< - AnyApiFactory, - 'core.api.factory', - {} - >; - inputs: {}; - params: { - factory: AnyApiFactory; - }; - }>; - 'api:app/google-auth': ExtensionDefinition<{ - kind: 'api'; - name: 'google-auth'; - config: {}; - configInput: {}; - output: ConfigurableExtensionDataRef< - AnyApiFactory, - 'core.api.factory', - {} - >; - inputs: {}; - params: { - factory: AnyApiFactory; - }; - }>; - 'api:app/microsoft-auth': ExtensionDefinition<{ - kind: 'api'; - name: 'microsoft-auth'; - config: {}; - configInput: {}; - output: ConfigurableExtensionDataRef< - AnyApiFactory, - 'core.api.factory', - {} - >; - inputs: {}; - params: { - factory: AnyApiFactory; - }; - }>; - 'api:app/github-auth': ExtensionDefinition<{ - kind: 'api'; - name: 'github-auth'; - config: {}; - configInput: {}; - output: ConfigurableExtensionDataRef< - AnyApiFactory, - 'core.api.factory', - {} - >; - inputs: {}; - params: { - factory: AnyApiFactory; - }; - }>; - 'api:app/okta-auth': ExtensionDefinition<{ - kind: 'api'; - name: 'okta-auth'; - config: {}; - configInput: {}; - output: ConfigurableExtensionDataRef< - AnyApiFactory, - 'core.api.factory', - {} - >; - inputs: {}; - params: { - factory: AnyApiFactory; - }; - }>; - 'api:app/gitlab-auth': ExtensionDefinition<{ - kind: 'api'; - name: 'gitlab-auth'; - config: {}; - configInput: {}; - output: ConfigurableExtensionDataRef< - AnyApiFactory, - 'core.api.factory', - {} - >; - inputs: {}; - params: { - factory: AnyApiFactory; - }; - }>; - 'api:app/onelogin-auth': ExtensionDefinition<{ - kind: 'api'; - name: 'onelogin-auth'; - config: {}; - configInput: {}; - output: ConfigurableExtensionDataRef< - AnyApiFactory, - 'core.api.factory', - {} - >; - inputs: {}; - params: { - factory: AnyApiFactory; - }; - }>; - 'api:app/bitbucket-auth': ExtensionDefinition<{ - kind: 'api'; - name: 'bitbucket-auth'; - config: {}; - configInput: {}; - output: ConfigurableExtensionDataRef< - AnyApiFactory, - 'core.api.factory', - {} - >; - inputs: {}; - params: { - factory: AnyApiFactory; - }; - }>; - 'api:app/bitbucket-server-auth': ExtensionDefinition<{ - kind: 'api'; - name: 'bitbucket-server-auth'; - config: {}; - configInput: {}; - output: ConfigurableExtensionDataRef< - AnyApiFactory, - 'core.api.factory', - {} - >; - inputs: {}; - params: { - factory: AnyApiFactory; - }; - }>; - 'api:app/atlassian-auth': ExtensionDefinition<{ - kind: 'api'; - name: 'atlassian-auth'; - config: {}; - configInput: {}; - output: ConfigurableExtensionDataRef< - AnyApiFactory, - 'core.api.factory', - {} - >; - inputs: {}; - params: { - factory: AnyApiFactory; - }; - }>; - 'api:app/vmware-cloud-auth': ExtensionDefinition<{ - kind: 'api'; - name: 'vmware-cloud-auth'; - config: {}; - configInput: {}; - output: ConfigurableExtensionDataRef< - AnyApiFactory, - 'core.api.factory', - {} - >; - inputs: {}; - params: { - factory: AnyApiFactory; - }; - }>; - 'api:app/permission': ExtensionDefinition<{ - kind: 'api'; - name: 'permission'; - config: {}; - configInput: {}; - output: ConfigurableExtensionDataRef< - AnyApiFactory, - 'core.api.factory', - {} - >; - inputs: {}; - params: { - factory: AnyApiFactory; - }; - }>; - } ->; -export default appPlugin; - -// (No @packageDocumentation comment for this package) -``` diff --git a/plugins/auth-backend-module-auth0-provider/api-report.md b/plugins/auth-backend-module-auth0-provider/api-report.md deleted file mode 100644 index fb7aa9d0ba..0000000000 --- a/plugins/auth-backend-module-auth0-provider/api-report.md +++ /dev/null @@ -1,25 +0,0 @@ -## API Report File for "@backstage/plugin-auth-backend-module-auth0-provider" - -> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). - -```ts -import { BackendFeature } from '@backstage/backend-plugin-api'; -import { OAuthAuthenticator } from '@backstage/plugin-auth-node'; -import { PassportOAuthAuthenticatorHelper } from '@backstage/plugin-auth-node'; -import { PassportProfile } from '@backstage/plugin-auth-node'; - -// @public (undocumented) -export const auth0Authenticator: OAuthAuthenticator< - { - helper: PassportOAuthAuthenticatorHelper; - audience: string | undefined; - connection: string | undefined; - connectionScope: string | undefined; - }, - PassportProfile ->; - -// @public (undocumented) -const authModuleAuth0Provider: BackendFeature; -export default authModuleAuth0Provider; -``` diff --git a/plugins/auth-backend-module-bitbucket-server-provider/api-report.md b/plugins/auth-backend-module-bitbucket-server-provider/api-report.md deleted file mode 100644 index d5c484f6e3..0000000000 --- a/plugins/auth-backend-module-bitbucket-server-provider/api-report.md +++ /dev/null @@ -1,33 +0,0 @@ -## API Report File for "@backstage/plugin-auth-backend-module-bitbucket-server-provider" - -> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). - -```ts -import { BackendFeature } from '@backstage/backend-plugin-api'; -import { OAuthAuthenticator } from '@backstage/plugin-auth-node'; -import { OAuthAuthenticatorResult } from '@backstage/plugin-auth-node'; -import { PassportOAuthAuthenticatorHelper } from '@backstage/plugin-auth-node'; -import { PassportProfile } from '@backstage/plugin-auth-node'; -import { SignInResolverFactory } from '@backstage/plugin-auth-node'; - -// @public (undocumented) -const authModuleBitbucketServerProvider: BackendFeature; -export default authModuleBitbucketServerProvider; - -// @public (undocumented) -export const bitbucketServerAuthenticator: OAuthAuthenticator< - { - helper: PassportOAuthAuthenticatorHelper; - host: string; - }, - PassportProfile ->; - -// @public -export namespace bitbucketServerSignInResolvers { - const emailMatchingUserEntityProfileEmail: SignInResolverFactory< - OAuthAuthenticatorResult, - unknown - >; -} -``` diff --git a/plugins/auth-backend/report.api.md b/plugins/auth-backend/report.api.md index fff72d034c..80976525d3 100644 --- a/plugins/auth-backend/report.api.md +++ b/plugins/auth-backend/report.api.md @@ -729,8 +729,8 @@ export type WebMessageResponse = WebMessageResponse_2; // src/providers/azure-easyauth/index.d.ts:7:1 - (ae-undocumented) Missing documentation for "EasyAuthResult". // src/providers/bitbucket/provider.d.ts:9:1 - (ae-undocumented) Missing documentation for "BitbucketOAuthResult". // src/providers/bitbucket/provider.d.ts:23:1 - (ae-undocumented) Missing documentation for "BitbucketPassportProfile". -// src/providers/bitbucketServer/provider.d.ts:7:1 - (ae-undocumented) Missing documentation for "BitbucketServerOAuthResult". -// src/providers/cloudflare-access/provider.d.ts:89:1 - (ae-undocumented) Missing documentation for "CloudflareAccessResult". +// src/providers/bitbucketServer/provider.d.ts:9:1 - (ae-undocumented) Missing documentation for "BitbucketServerOAuthResult". +// src/providers/cloudflare-access/provider.d.ts:90:1 - (ae-undocumented) Missing documentation for "CloudflareAccessResult". // src/providers/github/provider.d.ts:5:1 - (ae-undocumented) Missing documentation for "GithubOAuthResult". // src/providers/oauth2-proxy/index.d.ts:7:1 - (ae-undocumented) Missing documentation for "OAuth2ProxyResult". // src/providers/oidc/index.d.ts:7:1 - (ae-undocumented) Missing documentation for "OidcAuthResult". @@ -750,18 +750,18 @@ export type WebMessageResponse = WebMessageResponse_2; // src/providers/types.d.ts:61:1 - (ae-undocumented) Missing documentation for "SignInInfo". // src/providers/types.d.ts:66:1 - (ae-undocumented) Missing documentation for "SignInResolver". // src/providers/types.d.ts:96:1 - (ae-undocumented) Missing documentation for "StateEncoder". -// src/service/router.d.ts:9:1 - (ae-undocumented) Missing documentation for "RouterOptions". -// src/service/router.d.ts:10:5 - (ae-undocumented) Missing documentation for "logger". -// src/service/router.d.ts:11:5 - (ae-undocumented) Missing documentation for "database". -// src/service/router.d.ts:12:5 - (ae-undocumented) Missing documentation for "config". -// src/service/router.d.ts:13:5 - (ae-undocumented) Missing documentation for "discovery". -// src/service/router.d.ts:14:5 - (ae-undocumented) Missing documentation for "tokenManager". -// src/service/router.d.ts:15:5 - (ae-undocumented) Missing documentation for "auth". -// src/service/router.d.ts:16:5 - (ae-undocumented) Missing documentation for "httpAuth". -// src/service/router.d.ts:17:5 - (ae-undocumented) Missing documentation for "tokenFactoryAlgorithm". -// src/service/router.d.ts:18:5 - (ae-undocumented) Missing documentation for "providerFactories". -// src/service/router.d.ts:19:5 - (ae-undocumented) Missing documentation for "disableDefaultProviderFactories". -// src/service/router.d.ts:20:5 - (ae-undocumented) Missing documentation for "catalogApi". -// src/service/router.d.ts:21:5 - (ae-undocumented) Missing documentation for "ownershipResolver". -// src/service/router.d.ts:24:1 - (ae-undocumented) Missing documentation for "createRouter". +// src/service/router.d.ts:11:1 - (ae-undocumented) Missing documentation for "RouterOptions". +// src/service/router.d.ts:12:5 - (ae-undocumented) Missing documentation for "logger". +// src/service/router.d.ts:13:5 - (ae-undocumented) Missing documentation for "database". +// src/service/router.d.ts:14:5 - (ae-undocumented) Missing documentation for "config". +// src/service/router.d.ts:15:5 - (ae-undocumented) Missing documentation for "discovery". +// src/service/router.d.ts:16:5 - (ae-undocumented) Missing documentation for "tokenManager". +// src/service/router.d.ts:17:5 - (ae-undocumented) Missing documentation for "auth". +// src/service/router.d.ts:18:5 - (ae-undocumented) Missing documentation for "httpAuth". +// src/service/router.d.ts:19:5 - (ae-undocumented) Missing documentation for "tokenFactoryAlgorithm". +// src/service/router.d.ts:20:5 - (ae-undocumented) Missing documentation for "providerFactories". +// src/service/router.d.ts:21:5 - (ae-undocumented) Missing documentation for "disableDefaultProviderFactories". +// src/service/router.d.ts:22:5 - (ae-undocumented) Missing documentation for "catalogApi". +// src/service/router.d.ts:23:5 - (ae-undocumented) Missing documentation for "ownershipResolver". +// src/service/router.d.ts:29:1 - (ae-undocumented) Missing documentation for "createRouter". ``` diff --git a/plugins/bitbucket-cloud-common/api-report.md b/plugins/bitbucket-cloud-common/api-report.md deleted file mode 100644 index 833a367c03..0000000000 --- a/plugins/bitbucket-cloud-common/api-report.md +++ /dev/null @@ -1,485 +0,0 @@ -## API Report File for "@backstage/plugin-bitbucket-cloud-common" - -> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). - -```ts -import { BitbucketCloudIntegrationConfig } from '@backstage/integration'; - -// @public (undocumented) -export class BitbucketCloudClient { - // (undocumented) - static fromConfig( - config: BitbucketCloudIntegrationConfig, - ): BitbucketCloudClient; - // (undocumented) - listBranchesByRepository( - repository: string, - workspace: string, - options?: FilterAndSortOptions & PartialResponseOptions, - ): WithPagination; - // (undocumented) - listProjectsByWorkspace( - workspace: string, - options?: FilterAndSortOptions & PartialResponseOptions, - ): WithPagination; - // (undocumented) - listRepositoriesByWorkspace( - workspace: string, - options?: FilterAndSortOptions & PartialResponseOptions, - ): WithPagination; - // (undocumented) - listWorkspaces( - options?: FilterAndSortOptions & PartialResponseOptions, - ): WithPagination; - // (undocumented) - searchCode( - workspace: string, - query: string, - options?: FilterAndSortOptions & PartialResponseOptions, - ): WithPagination; -} - -// @public (undocumented) -export namespace Events { - // (undocumented) - export interface Change { - // (undocumented) - closed: boolean; - // (undocumented) - commits: Models.Commit[]; - // (undocumented) - created: boolean; - // (undocumented) - forced: boolean; - // (undocumented) - links: ChangeLinks; - // (undocumented) - new: Models.Branch; - // (undocumented) - old: Models.Branch; - // (undocumented) - truncated: boolean; - } - // (undocumented) - export interface ChangeLinks { - // (undocumented) - commits: Models.Link; - // (undocumented) - diff: Models.Link; - // (undocumented) - html: Models.Link; - } - // (undocumented) - export interface RepoEvent { - // (undocumented) - actor: Models.Account; - // (undocumented) - repository: Models.Repository & { - workspace: Models.Workspace; - }; - } - // (undocumented) - export interface RepoPush { - // (undocumented) - changes: Change[]; - } - // (undocumented) - export interface RepoPushEvent extends RepoEvent { - // (undocumented) - push: RepoPush; - } -} - -// @public (undocumented) -export type FilterAndSortOptions = { - q?: string; - sort?: string; -}; - -// @public (undocumented) -export namespace Models { - export interface Account extends ModelObject { - // (undocumented) - created_on?: string; - // (undocumented) - display_name?: string; - // (undocumented) - links?: AccountLinks; - // (undocumented) - username?: string; - // (undocumented) - uuid?: string; - } - export interface AccountLinks { - // (undocumented) - [key: string]: unknown; - // (undocumented) - avatar?: Link; - } - export interface Author extends ModelObject { - raw?: string; - // (undocumented) - user?: Account; - } - export interface BaseCommit extends ModelObject { - // (undocumented) - author?: Author; - // (undocumented) - date?: string; - // (undocumented) - hash?: string; - // (undocumented) - message?: string; - // (undocumented) - parents?: Array; - // (undocumented) - summary?: BaseCommitSummary; - } - // (undocumented) - export interface BaseCommitSummary { - html?: string; - markup?: BaseCommitSummaryMarkupEnum; - raw?: string; - } - const BaseCommitSummaryMarkupEnum: { - readonly Markdown: 'markdown'; - readonly Creole: 'creole'; - readonly Plaintext: 'plaintext'; - }; - export type BaseCommitSummaryMarkupEnum = - (typeof BaseCommitSummaryMarkupEnum)[keyof typeof BaseCommitSummaryMarkupEnum]; - export interface Branch { - default_merge_strategy?: string; - // (undocumented) - links?: RefLinks; - merge_strategies?: Array; - name?: string; - // (undocumented) - target?: Commit; - // (undocumented) - type: string; - } - const BranchMergeStrategiesEnum: { - readonly MergeCommit: 'merge_commit'; - readonly Squash: 'squash'; - readonly FastForward: 'fast_forward'; - }; - export type BranchMergeStrategiesEnum = - (typeof BranchMergeStrategiesEnum)[keyof typeof BranchMergeStrategiesEnum]; - export interface Commit extends BaseCommit { - // (undocumented) - participants?: Array; - // (undocumented) - repository?: Repository; - } - export interface CommitFile { - // (undocumented) - [key: string]: unknown; - // (undocumented) - attributes?: CommitFileAttributesEnum; - // (undocumented) - commit?: Commit; - escaped_path?: string; - path?: string; - // (undocumented) - type: string; - } - const // (undocumented) - CommitFileAttributesEnum: { - readonly Link: 'link'; - readonly Executable: 'executable'; - readonly Subrepository: 'subrepository'; - readonly Binary: 'binary'; - readonly Lfs: 'lfs'; - }; - // (undocumented) - export type CommitFileAttributesEnum = - (typeof CommitFileAttributesEnum)[keyof typeof CommitFileAttributesEnum]; - export interface Link { - // (undocumented) - href?: string; - // (undocumented) - name?: string; - } - export interface ModelObject { - // (undocumented) - [key: string]: unknown; - // (undocumented) - type: string; - } - export interface Paginated { - next?: string; - page?: number; - pagelen?: number; - previous?: string; - size?: number; - values?: Array | Set; - } - export interface PaginatedBranches extends Paginated { - values?: Set; - } - export interface PaginatedProjects extends Paginated { - values?: Set; - } - export interface PaginatedRepositories extends Paginated { - values?: Set; - } - export interface PaginatedWorkspaces extends Paginated { - values?: Set; - } - export interface Participant extends ModelObject { - // (undocumented) - approved?: boolean; - participated_on?: string; - // (undocumented) - role?: ParticipantRoleEnum; - // (undocumented) - state?: ParticipantStateEnum; - // (undocumented) - user?: Account; - } - const // (undocumented) - ParticipantRoleEnum: { - readonly Participant: 'PARTICIPANT'; - readonly Reviewer: 'REVIEWER'; - }; - // (undocumented) - export type ParticipantRoleEnum = - (typeof ParticipantRoleEnum)[keyof typeof ParticipantRoleEnum]; - const // (undocumented) - ParticipantStateEnum: { - readonly Approved: 'approved'; - readonly ChangesRequested: 'changes_requested'; - readonly Null: 'null'; - }; - // (undocumented) - export type ParticipantStateEnum = - (typeof ParticipantStateEnum)[keyof typeof ParticipantStateEnum]; - export interface Project extends ModelObject { - // (undocumented) - created_on?: string; - // (undocumented) - description?: string; - has_publicly_visible_repos?: boolean; - is_private?: boolean; - key?: string; - // (undocumented) - links?: ProjectLinks; - name?: string; - // (undocumented) - owner?: Team; - // (undocumented) - updated_on?: string; - uuid?: string; - } - // (undocumented) - export interface ProjectLinks { - // (undocumented) - avatar?: Link; - // (undocumented) - html?: Link; - } - // (undocumented) - export interface RefLinks { - // (undocumented) - commits?: Link; - // (undocumented) - html?: Link; - // (undocumented) - self?: Link; - } - export interface Repository extends ModelObject { - // (undocumented) - created_on?: string; - // (undocumented) - description?: string; - fork_policy?: RepositoryForkPolicyEnum; - full_name?: string; - has_issues?: boolean; - has_wiki?: boolean; - // (undocumented) - is_private?: boolean; - // (undocumented) - language?: string; - // (undocumented) - links?: RepositoryLinks; - // (undocumented) - mainbranch?: Branch; - // (undocumented) - name?: string; - // (undocumented) - owner?: Account; - // (undocumented) - parent?: Repository; - // (undocumented) - project?: Project; - // (undocumented) - scm?: RepositoryScmEnum; - // (undocumented) - size?: number; - slug?: string; - // (undocumented) - updated_on?: string; - uuid?: string; - } - const RepositoryForkPolicyEnum: { - readonly AllowForks: 'allow_forks'; - readonly NoPublicForks: 'no_public_forks'; - readonly NoForks: 'no_forks'; - }; - export type RepositoryForkPolicyEnum = - (typeof RepositoryForkPolicyEnum)[keyof typeof RepositoryForkPolicyEnum]; - const // (undocumented) - RepositoryScmEnum: { - readonly Git: 'git'; - }; - // (undocumented) - export interface RepositoryLinks { - // (undocumented) - avatar?: Link; - // (undocumented) - clone?: Array; - // (undocumented) - commits?: Link; - // (undocumented) - downloads?: Link; - // (undocumented) - forks?: Link; - // (undocumented) - hooks?: Link; - // (undocumented) - html?: Link; - // (undocumented) - pullrequests?: Link; - // (undocumented) - self?: Link; - // (undocumented) - watchers?: Link; - } - // (undocumented) - export type RepositoryScmEnum = - (typeof RepositoryScmEnum)[keyof typeof RepositoryScmEnum]; - // (undocumented) - export interface SearchCodeSearchResult { - // (undocumented) - readonly content_match_count?: number; - // (undocumented) - readonly content_matches?: Array; - // (undocumented) - file?: CommitFile; - // (undocumented) - readonly path_matches?: Array; - // (undocumented) - readonly type?: string; - } - // (undocumented) - export interface SearchContentMatch { - // (undocumented) - readonly lines?: Array; - } - // (undocumented) - export interface SearchLine { - // (undocumented) - readonly line?: number; - // (undocumented) - readonly segments?: Array; - } - // (undocumented) - export interface SearchResultPage extends Paginated { - // (undocumented) - readonly query_substituted?: boolean; - readonly values?: Array; - } - // (undocumented) - export interface SearchSegment { - // (undocumented) - readonly match?: boolean; - // (undocumented) - readonly text?: string; - } - export interface Team extends Account { - // (undocumented) - links?: TeamLinks; - } - export interface TeamLinks extends AccountLinks { - // (undocumented) - html?: Link; - // (undocumented) - members?: Link; - // (undocumented) - projects?: Link; - // (undocumented) - repositories?: Link; - // (undocumented) - self?: Link; - } - export interface Workspace extends ModelObject { - // (undocumented) - created_on?: string; - is_private?: boolean; - // (undocumented) - links?: WorkspaceLinks; - name?: string; - slug?: string; - // (undocumented) - updated_on?: string; - uuid?: string; - } - // (undocumented) - export interface WorkspaceLinks { - // (undocumented) - avatar?: Link; - // (undocumented) - html?: Link; - // (undocumented) - members?: Link; - // (undocumented) - owners?: Link; - // (undocumented) - projects?: Link; - // (undocumented) - repositories?: Link; - // (undocumented) - self?: Link; - // (undocumented) - snippets?: Link; - } -} - -// @public (undocumented) -export type PaginationOptions = { - page?: number; - pagelen?: number; -}; - -// @public (undocumented) -export type PartialResponseOptions = { - fields?: string; -}; - -// @public (undocumented) -export type RequestOptions = FilterAndSortOptions & - PaginationOptions & - PartialResponseOptions & { - [key: string]: string | number | undefined; - }; - -// @public (undocumented) -export class WithPagination< - TPage extends Models.Paginated, - TResultItem, -> { - constructor( - createUrl: (options: PaginationOptions) => URL, - fetch: (url: URL) => Promise, - ); - // (undocumented) - getPage(options?: PaginationOptions): Promise; - // (undocumented) - iteratePages(options?: PaginationOptions): AsyncGenerator; - // (undocumented) - iterateResults( - options?: PaginationOptions, - ): AsyncGenerator, void, unknown>; -} -``` diff --git a/plugins/bitbucket-cloud-common/report.api.md b/plugins/bitbucket-cloud-common/report.api.md index 93fcbffbc6..ebad8ff878 100644 --- a/plugins/bitbucket-cloud-common/report.api.md +++ b/plugins/bitbucket-cloud-common/report.api.md @@ -12,6 +12,12 @@ export class BitbucketCloudClient { config: BitbucketCloudIntegrationConfig, ): BitbucketCloudClient; // (undocumented) + listBranchesByRepository( + repository: string, + workspace: string, + options?: FilterAndSortOptions & PartialResponseOptions, + ): WithPagination; + // (undocumented) listProjectsByWorkspace( workspace: string, options?: FilterAndSortOptions & PartialResponseOptions, @@ -209,6 +215,9 @@ export namespace Models { size?: number; values?: Array | Set; } + export interface PaginatedBranches extends Paginated { + values?: Set; + } export interface PaginatedProjects extends Paginated { values?: Set; } @@ -482,6 +491,7 @@ export class WithPagination< // src/BitbucketCloudClient.d.ts:11:5 - (ae-undocumented) Missing documentation for "listRepositoriesByWorkspace". // src/BitbucketCloudClient.d.ts:12:5 - (ae-undocumented) Missing documentation for "listProjectsByWorkspace". // src/BitbucketCloudClient.d.ts:13:5 - (ae-undocumented) Missing documentation for "listWorkspaces". +// src/BitbucketCloudClient.d.ts:14:5 - (ae-undocumented) Missing documentation for "listBranchesByRepository". // src/events/index.d.ts:3:1 - (ae-undocumented) Missing documentation for "Events". // src/events/index.d.ts:5:5 - (ae-undocumented) Missing documentation for "RepoEvent". // src/events/index.d.ts:6:9 - (ae-undocumented) Missing documentation for "repository". @@ -534,86 +544,86 @@ export class WithPagination< // src/models/index.d.ts:168:9 - (ae-undocumented) Missing documentation for "name". // src/models/index.d.ts:175:9 - (ae-undocumented) Missing documentation for "__index". // src/models/index.d.ts:176:9 - (ae-undocumented) Missing documentation for "type". -// src/models/index.d.ts:243:9 - (ae-undocumented) Missing documentation for "approved". -// src/models/index.d.ts:248:9 - (ae-undocumented) Missing documentation for "role". -// src/models/index.d.ts:249:9 - (ae-undocumented) Missing documentation for "state". -// src/models/index.d.ts:250:9 - (ae-undocumented) Missing documentation for "user". -// src/models/index.d.ts:255:11 - (ae-undocumented) Missing documentation for "ParticipantRoleEnum". -// src/models/index.d.ts:262:5 - (ae-undocumented) Missing documentation for "ParticipantRoleEnum". -// src/models/index.d.ts:266:11 - (ae-undocumented) Missing documentation for "ParticipantStateEnum". -// src/models/index.d.ts:274:5 - (ae-undocumented) Missing documentation for "ParticipantStateEnum". -// src/models/index.d.ts:281:9 - (ae-undocumented) Missing documentation for "created_on". -// src/models/index.d.ts:282:9 - (ae-undocumented) Missing documentation for "description". -// src/models/index.d.ts:300:9 - (ae-undocumented) Missing documentation for "links". -// src/models/index.d.ts:305:9 - (ae-undocumented) Missing documentation for "owner". -// src/models/index.d.ts:306:9 - (ae-undocumented) Missing documentation for "updated_on". -// src/models/index.d.ts:315:5 - (ae-undocumented) Missing documentation for "ProjectLinks". -// src/models/index.d.ts:316:9 - (ae-undocumented) Missing documentation for "avatar". -// src/models/index.d.ts:317:9 - (ae-undocumented) Missing documentation for "html". -// src/models/index.d.ts:322:5 - (ae-undocumented) Missing documentation for "RefLinks". -// src/models/index.d.ts:323:9 - (ae-undocumented) Missing documentation for "commits". -// src/models/index.d.ts:324:9 - (ae-undocumented) Missing documentation for "html". -// src/models/index.d.ts:325:9 - (ae-undocumented) Missing documentation for "self". -// src/models/index.d.ts:332:9 - (ae-undocumented) Missing documentation for "created_on". -// src/models/index.d.ts:333:9 - (ae-undocumented) Missing documentation for "description". -// src/models/index.d.ts:362:9 - (ae-undocumented) Missing documentation for "is_private". -// src/models/index.d.ts:363:9 - (ae-undocumented) Missing documentation for "language". -// src/models/index.d.ts:364:9 - (ae-undocumented) Missing documentation for "links". -// src/models/index.d.ts:365:9 - (ae-undocumented) Missing documentation for "mainbranch". -// src/models/index.d.ts:366:9 - (ae-undocumented) Missing documentation for "name". -// src/models/index.d.ts:367:9 - (ae-undocumented) Missing documentation for "owner". -// src/models/index.d.ts:368:9 - (ae-undocumented) Missing documentation for "parent". -// src/models/index.d.ts:369:9 - (ae-undocumented) Missing documentation for "project". -// src/models/index.d.ts:370:9 - (ae-undocumented) Missing documentation for "scm". -// src/models/index.d.ts:371:9 - (ae-undocumented) Missing documentation for "size". -// src/models/index.d.ts:376:9 - (ae-undocumented) Missing documentation for "updated_on". -// src/models/index.d.ts:411:11 - (ae-undocumented) Missing documentation for "RepositoryScmEnum". -// src/models/index.d.ts:417:5 - (ae-undocumented) Missing documentation for "RepositoryScmEnum". -// src/models/index.d.ts:421:5 - (ae-undocumented) Missing documentation for "RepositoryLinks". -// src/models/index.d.ts:422:9 - (ae-undocumented) Missing documentation for "avatar". -// src/models/index.d.ts:423:9 - (ae-undocumented) Missing documentation for "clone". -// src/models/index.d.ts:424:9 - (ae-undocumented) Missing documentation for "commits". -// src/models/index.d.ts:425:9 - (ae-undocumented) Missing documentation for "downloads". -// src/models/index.d.ts:426:9 - (ae-undocumented) Missing documentation for "forks". -// src/models/index.d.ts:427:9 - (ae-undocumented) Missing documentation for "hooks". -// src/models/index.d.ts:428:9 - (ae-undocumented) Missing documentation for "html". -// src/models/index.d.ts:429:9 - (ae-undocumented) Missing documentation for "pullrequests". -// src/models/index.d.ts:430:9 - (ae-undocumented) Missing documentation for "self". -// src/models/index.d.ts:431:9 - (ae-undocumented) Missing documentation for "watchers". -// src/models/index.d.ts:436:5 - (ae-undocumented) Missing documentation for "SearchCodeSearchResult". -// src/models/index.d.ts:437:9 - (ae-undocumented) Missing documentation for "content_match_count". -// src/models/index.d.ts:438:9 - (ae-undocumented) Missing documentation for "content_matches". -// src/models/index.d.ts:439:9 - (ae-undocumented) Missing documentation for "file". -// src/models/index.d.ts:440:9 - (ae-undocumented) Missing documentation for "path_matches". -// src/models/index.d.ts:441:9 - (ae-undocumented) Missing documentation for "type". -// src/models/index.d.ts:446:5 - (ae-undocumented) Missing documentation for "SearchContentMatch". -// src/models/index.d.ts:447:9 - (ae-undocumented) Missing documentation for "lines". -// src/models/index.d.ts:452:5 - (ae-undocumented) Missing documentation for "SearchLine". -// src/models/index.d.ts:453:9 - (ae-undocumented) Missing documentation for "line". -// src/models/index.d.ts:454:9 - (ae-undocumented) Missing documentation for "segments". -// src/models/index.d.ts:459:5 - (ae-undocumented) Missing documentation for "SearchResultPage". -// src/models/index.d.ts:460:9 - (ae-undocumented) Missing documentation for "query_substituted". -// src/models/index.d.ts:469:5 - (ae-undocumented) Missing documentation for "SearchSegment". -// src/models/index.d.ts:470:9 - (ae-undocumented) Missing documentation for "match". -// src/models/index.d.ts:471:9 - (ae-undocumented) Missing documentation for "text". -// src/models/index.d.ts:478:9 - (ae-undocumented) Missing documentation for "links". -// src/models/index.d.ts:485:9 - (ae-undocumented) Missing documentation for "html". -// src/models/index.d.ts:486:9 - (ae-undocumented) Missing documentation for "members". -// src/models/index.d.ts:487:9 - (ae-undocumented) Missing documentation for "projects". -// src/models/index.d.ts:488:9 - (ae-undocumented) Missing documentation for "repositories". -// src/models/index.d.ts:489:9 - (ae-undocumented) Missing documentation for "self". -// src/models/index.d.ts:497:9 - (ae-undocumented) Missing documentation for "created_on". -// src/models/index.d.ts:503:9 - (ae-undocumented) Missing documentation for "links". -// src/models/index.d.ts:512:9 - (ae-undocumented) Missing documentation for "updated_on". -// src/models/index.d.ts:521:5 - (ae-undocumented) Missing documentation for "WorkspaceLinks". -// src/models/index.d.ts:522:9 - (ae-undocumented) Missing documentation for "avatar". -// src/models/index.d.ts:523:9 - (ae-undocumented) Missing documentation for "html". -// src/models/index.d.ts:524:9 - (ae-undocumented) Missing documentation for "members". -// src/models/index.d.ts:525:9 - (ae-undocumented) Missing documentation for "owners". -// src/models/index.d.ts:526:9 - (ae-undocumented) Missing documentation for "projects". -// src/models/index.d.ts:527:9 - (ae-undocumented) Missing documentation for "repositories". -// src/models/index.d.ts:528:9 - (ae-undocumented) Missing documentation for "self". -// src/models/index.d.ts:529:9 - (ae-undocumented) Missing documentation for "snippets". +// src/models/index.d.ts:253:9 - (ae-undocumented) Missing documentation for "approved". +// src/models/index.d.ts:258:9 - (ae-undocumented) Missing documentation for "role". +// src/models/index.d.ts:259:9 - (ae-undocumented) Missing documentation for "state". +// src/models/index.d.ts:260:9 - (ae-undocumented) Missing documentation for "user". +// src/models/index.d.ts:265:11 - (ae-undocumented) Missing documentation for "ParticipantRoleEnum". +// src/models/index.d.ts:272:5 - (ae-undocumented) Missing documentation for "ParticipantRoleEnum". +// src/models/index.d.ts:276:11 - (ae-undocumented) Missing documentation for "ParticipantStateEnum". +// src/models/index.d.ts:284:5 - (ae-undocumented) Missing documentation for "ParticipantStateEnum". +// src/models/index.d.ts:291:9 - (ae-undocumented) Missing documentation for "created_on". +// src/models/index.d.ts:292:9 - (ae-undocumented) Missing documentation for "description". +// src/models/index.d.ts:310:9 - (ae-undocumented) Missing documentation for "links". +// src/models/index.d.ts:315:9 - (ae-undocumented) Missing documentation for "owner". +// src/models/index.d.ts:316:9 - (ae-undocumented) Missing documentation for "updated_on". +// src/models/index.d.ts:325:5 - (ae-undocumented) Missing documentation for "ProjectLinks". +// src/models/index.d.ts:326:9 - (ae-undocumented) Missing documentation for "avatar". +// src/models/index.d.ts:327:9 - (ae-undocumented) Missing documentation for "html". +// src/models/index.d.ts:332:5 - (ae-undocumented) Missing documentation for "RefLinks". +// src/models/index.d.ts:333:9 - (ae-undocumented) Missing documentation for "commits". +// src/models/index.d.ts:334:9 - (ae-undocumented) Missing documentation for "html". +// src/models/index.d.ts:335:9 - (ae-undocumented) Missing documentation for "self". +// src/models/index.d.ts:342:9 - (ae-undocumented) Missing documentation for "created_on". +// src/models/index.d.ts:343:9 - (ae-undocumented) Missing documentation for "description". +// src/models/index.d.ts:372:9 - (ae-undocumented) Missing documentation for "is_private". +// src/models/index.d.ts:373:9 - (ae-undocumented) Missing documentation for "language". +// src/models/index.d.ts:374:9 - (ae-undocumented) Missing documentation for "links". +// src/models/index.d.ts:375:9 - (ae-undocumented) Missing documentation for "mainbranch". +// src/models/index.d.ts:376:9 - (ae-undocumented) Missing documentation for "name". +// src/models/index.d.ts:377:9 - (ae-undocumented) Missing documentation for "owner". +// src/models/index.d.ts:378:9 - (ae-undocumented) Missing documentation for "parent". +// src/models/index.d.ts:379:9 - (ae-undocumented) Missing documentation for "project". +// src/models/index.d.ts:380:9 - (ae-undocumented) Missing documentation for "scm". +// src/models/index.d.ts:381:9 - (ae-undocumented) Missing documentation for "size". +// src/models/index.d.ts:386:9 - (ae-undocumented) Missing documentation for "updated_on". +// src/models/index.d.ts:421:11 - (ae-undocumented) Missing documentation for "RepositoryScmEnum". +// src/models/index.d.ts:427:5 - (ae-undocumented) Missing documentation for "RepositoryScmEnum". +// src/models/index.d.ts:431:5 - (ae-undocumented) Missing documentation for "RepositoryLinks". +// src/models/index.d.ts:432:9 - (ae-undocumented) Missing documentation for "avatar". +// src/models/index.d.ts:433:9 - (ae-undocumented) Missing documentation for "clone". +// src/models/index.d.ts:434:9 - (ae-undocumented) Missing documentation for "commits". +// src/models/index.d.ts:435:9 - (ae-undocumented) Missing documentation for "downloads". +// src/models/index.d.ts:436:9 - (ae-undocumented) Missing documentation for "forks". +// src/models/index.d.ts:437:9 - (ae-undocumented) Missing documentation for "hooks". +// src/models/index.d.ts:438:9 - (ae-undocumented) Missing documentation for "html". +// src/models/index.d.ts:439:9 - (ae-undocumented) Missing documentation for "pullrequests". +// src/models/index.d.ts:440:9 - (ae-undocumented) Missing documentation for "self". +// src/models/index.d.ts:441:9 - (ae-undocumented) Missing documentation for "watchers". +// src/models/index.d.ts:446:5 - (ae-undocumented) Missing documentation for "SearchCodeSearchResult". +// src/models/index.d.ts:447:9 - (ae-undocumented) Missing documentation for "content_match_count". +// src/models/index.d.ts:448:9 - (ae-undocumented) Missing documentation for "content_matches". +// src/models/index.d.ts:449:9 - (ae-undocumented) Missing documentation for "file". +// src/models/index.d.ts:450:9 - (ae-undocumented) Missing documentation for "path_matches". +// src/models/index.d.ts:451:9 - (ae-undocumented) Missing documentation for "type". +// src/models/index.d.ts:456:5 - (ae-undocumented) Missing documentation for "SearchContentMatch". +// src/models/index.d.ts:457:9 - (ae-undocumented) Missing documentation for "lines". +// src/models/index.d.ts:462:5 - (ae-undocumented) Missing documentation for "SearchLine". +// src/models/index.d.ts:463:9 - (ae-undocumented) Missing documentation for "line". +// src/models/index.d.ts:464:9 - (ae-undocumented) Missing documentation for "segments". +// src/models/index.d.ts:469:5 - (ae-undocumented) Missing documentation for "SearchResultPage". +// src/models/index.d.ts:470:9 - (ae-undocumented) Missing documentation for "query_substituted". +// src/models/index.d.ts:479:5 - (ae-undocumented) Missing documentation for "SearchSegment". +// src/models/index.d.ts:480:9 - (ae-undocumented) Missing documentation for "match". +// src/models/index.d.ts:481:9 - (ae-undocumented) Missing documentation for "text". +// src/models/index.d.ts:488:9 - (ae-undocumented) Missing documentation for "links". +// src/models/index.d.ts:495:9 - (ae-undocumented) Missing documentation for "html". +// src/models/index.d.ts:496:9 - (ae-undocumented) Missing documentation for "members". +// src/models/index.d.ts:497:9 - (ae-undocumented) Missing documentation for "projects". +// src/models/index.d.ts:498:9 - (ae-undocumented) Missing documentation for "repositories". +// src/models/index.d.ts:499:9 - (ae-undocumented) Missing documentation for "self". +// src/models/index.d.ts:507:9 - (ae-undocumented) Missing documentation for "created_on". +// src/models/index.d.ts:513:9 - (ae-undocumented) Missing documentation for "links". +// src/models/index.d.ts:522:9 - (ae-undocumented) Missing documentation for "updated_on". +// src/models/index.d.ts:531:5 - (ae-undocumented) Missing documentation for "WorkspaceLinks". +// src/models/index.d.ts:532:9 - (ae-undocumented) Missing documentation for "avatar". +// src/models/index.d.ts:533:9 - (ae-undocumented) Missing documentation for "html". +// src/models/index.d.ts:534:9 - (ae-undocumented) Missing documentation for "members". +// src/models/index.d.ts:535:9 - (ae-undocumented) Missing documentation for "owners". +// src/models/index.d.ts:536:9 - (ae-undocumented) Missing documentation for "projects". +// src/models/index.d.ts:537:9 - (ae-undocumented) Missing documentation for "repositories". +// src/models/index.d.ts:538:9 - (ae-undocumented) Missing documentation for "self". +// src/models/index.d.ts:539:9 - (ae-undocumented) Missing documentation for "snippets". // src/pagination.d.ts:3:1 - (ae-undocumented) Missing documentation for "PaginationOptions". // src/pagination.d.ts:8:1 - (ae-undocumented) Missing documentation for "WithPagination". // src/pagination.d.ts:12:5 - (ae-undocumented) Missing documentation for "getPage". diff --git a/plugins/catalog-backend-module-aws/report.api.md b/plugins/catalog-backend-module-aws/report.api.md index 2f5a9bb105..3d24c71035 100644 --- a/plugins/catalog-backend-module-aws/report.api.md +++ b/plugins/catalog-backend-module-aws/report.api.md @@ -123,6 +123,6 @@ export type EksClusterEntityTransformer = ( // src/processors/AwsOrganizationCloudAccountProcessor.d.ts:22:5 - (ae-undocumented) Missing documentation for "readLocation". // src/processors/AwsS3DiscoveryProcessor.d.ts:15:5 - (ae-undocumented) Missing documentation for "getProcessorName". // src/processors/AwsS3DiscoveryProcessor.d.ts:16:5 - (ae-undocumented) Missing documentation for "readLocation". -// src/providers/AwsS3EntityProvider.d.ts:21:5 - (ae-undocumented) Missing documentation for "fromConfig". -// src/providers/AwsS3EntityProvider.d.ts:32:5 - (ae-undocumented) Missing documentation for "refresh". +// src/providers/AwsS3EntityProvider.d.ts:20:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/providers/AwsS3EntityProvider.d.ts:31:5 - (ae-undocumented) Missing documentation for "refresh". ``` diff --git a/plugins/catalog-backend-module-azure/report.api.md b/plugins/catalog-backend-module-azure/report.api.md index 78f9a29d1d..f3121296a5 100644 --- a/plugins/catalog-backend-module-azure/report.api.md +++ b/plugins/catalog-backend-module-azure/report.api.md @@ -59,6 +59,6 @@ export class AzureDevOpsEntityProvider implements EntityProvider { // src/processors/AzureDevOpsDiscoveryProcessor.d.ts:26:5 - (ae-undocumented) Missing documentation for "fromConfig". // src/processors/AzureDevOpsDiscoveryProcessor.d.ts:33:5 - (ae-undocumented) Missing documentation for "getProcessorName". // src/processors/AzureDevOpsDiscoveryProcessor.d.ts:34:5 - (ae-undocumented) Missing documentation for "readLocation". -// src/providers/AzureDevOpsEntityProvider.d.ts:19:5 - (ae-undocumented) Missing documentation for "fromConfig". -// src/providers/AzureDevOpsEntityProvider.d.ts:30:5 - (ae-undocumented) Missing documentation for "refresh". +// src/providers/AzureDevOpsEntityProvider.d.ts:18:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/providers/AzureDevOpsEntityProvider.d.ts:29:5 - (ae-undocumented) Missing documentation for "refresh". ``` diff --git a/plugins/catalog-backend-module-bitbucket-cloud/report.api.md b/plugins/catalog-backend-module-bitbucket-cloud/report.api.md index 47e8184aea..d6c1977ce8 100644 --- a/plugins/catalog-backend-module-bitbucket-cloud/report.api.md +++ b/plugins/catalog-backend-module-bitbucket-cloud/report.api.md @@ -39,7 +39,7 @@ export class BitbucketCloudEntityProvider implements EntityProvider { // Warnings were encountered during analysis: // -// src/providers/BitbucketCloudEntityProvider.d.ts:29:5 - (ae-undocumented) Missing documentation for "fromConfig". -// src/providers/BitbucketCloudEntityProvider.d.ts:45:5 - (ae-undocumented) Missing documentation for "refresh". -// src/providers/BitbucketCloudEntityProvider.d.ts:48:5 - (ae-undocumented) Missing documentation for "onRepoPush". +// src/providers/BitbucketCloudEntityProvider.d.ts:28:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/providers/BitbucketCloudEntityProvider.d.ts:44:5 - (ae-undocumented) Missing documentation for "refresh". +// src/providers/BitbucketCloudEntityProvider.d.ts:47:5 - (ae-undocumented) Missing documentation for "onRepoPush". ``` diff --git a/plugins/catalog-backend-module-bitbucket-server/report.api.md b/plugins/catalog-backend-module-bitbucket-server/report.api.md index a269d91d93..a7febe8e7a 100644 --- a/plugins/catalog-backend-module-bitbucket-server/report.api.md +++ b/plugins/catalog-backend-module-bitbucket-server/report.api.md @@ -122,6 +122,6 @@ export type BitbucketServerRepository = { // src/lib/BitbucketServerClient.d.ts:56:1 - (ae-undocumented) Missing documentation for "BitbucketServerPagedResponse". // src/lib/types.d.ts:2:1 - (ae-undocumented) Missing documentation for "BitbucketServerRepository". // src/lib/types.d.ts:14:1 - (ae-undocumented) Missing documentation for "BitbucketServerProject". -// src/providers/BitbucketServerEntityProvider.d.ts:21:5 - (ae-undocumented) Missing documentation for "fromConfig". -// src/providers/BitbucketServerEntityProvider.d.ts:33:5 - (ae-undocumented) Missing documentation for "refresh". +// src/providers/BitbucketServerEntityProvider.d.ts:20:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/providers/BitbucketServerEntityProvider.d.ts:32:5 - (ae-undocumented) Missing documentation for "refresh". ``` diff --git a/plugins/catalog-backend-module-gerrit/report.api.md b/plugins/catalog-backend-module-gerrit/report.api.md index 29c8af4212..56930f3357 100644 --- a/plugins/catalog-backend-module-gerrit/report.api.md +++ b/plugins/catalog-backend-module-gerrit/report.api.md @@ -31,11 +31,11 @@ export class GerritEntityProvider implements EntityProvider { // Warnings were encountered during analysis: // -// src/providers/GerritEntityProvider.d.ts:6:1 - (ae-undocumented) Missing documentation for "GerritEntityProvider". -// src/providers/GerritEntityProvider.d.ts:12:5 - (ae-undocumented) Missing documentation for "fromConfig". -// src/providers/GerritEntityProvider.d.ts:18:5 - (ae-undocumented) Missing documentation for "getProviderName". -// src/providers/GerritEntityProvider.d.ts:19:5 - (ae-undocumented) Missing documentation for "connect". -// src/providers/GerritEntityProvider.d.ts:21:5 - (ae-undocumented) Missing documentation for "refresh". +// src/providers/GerritEntityProvider.d.ts:5:1 - (ae-undocumented) Missing documentation for "GerritEntityProvider". +// src/providers/GerritEntityProvider.d.ts:11:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/providers/GerritEntityProvider.d.ts:17:5 - (ae-undocumented) Missing documentation for "getProviderName". +// src/providers/GerritEntityProvider.d.ts:18:5 - (ae-undocumented) Missing documentation for "connect". +// src/providers/GerritEntityProvider.d.ts:20:5 - (ae-undocumented) Missing documentation for "refresh". // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/catalog-backend-module-github/report.api.md b/plugins/catalog-backend-module-github/report.api.md index ff118b92f8..4ffe434615 100644 --- a/plugins/catalog-backend-module-github/report.api.md +++ b/plugins/catalog-backend-module-github/report.api.md @@ -321,18 +321,18 @@ export type UserTransformer = ( // Warnings were encountered during analysis: // -// src/analyzers/GithubLocationAnalyzer.d.ts:7:1 - (ae-undocumented) Missing documentation for "GithubLocationAnalyzerOptions". -// src/analyzers/GithubLocationAnalyzer.d.ts:15:1 - (ae-undocumented) Missing documentation for "GithubLocationAnalyzer". -// src/analyzers/GithubLocationAnalyzer.d.ts:21:5 - (ae-undocumented) Missing documentation for "supports". -// src/analyzers/GithubLocationAnalyzer.d.ts:22:5 - (ae-undocumented) Missing documentation for "analyze". -// src/deprecated.d.ts:10:1 - (ae-undocumented) Missing documentation for "GitHubOrgEntityProvider". -// src/deprecated.d.ts:11:5 - (ae-undocumented) Missing documentation for "fromConfig". -// src/deprecated.d.ts:17:1 - (ae-undocumented) Missing documentation for "GitHubOrgEntityProviderOptions". -// src/deprecated.d.ts:22:1 - (ae-undocumented) Missing documentation for "GitHubEntityProvider". -// src/deprecated.d.ts:24:5 - (ae-undocumented) Missing documentation for "fromConfig". -// src/deprecated.d.ts:30:5 - (ae-undocumented) Missing documentation for "connect". -// src/deprecated.d.ts:31:5 - (ae-undocumented) Missing documentation for "getProviderName". -// src/deprecated.d.ts:32:5 - (ae-undocumented) Missing documentation for "refresh". +// src/analyzers/GithubLocationAnalyzer.d.ts:8:1 - (ae-undocumented) Missing documentation for "GithubLocationAnalyzerOptions". +// src/analyzers/GithubLocationAnalyzer.d.ts:17:1 - (ae-undocumented) Missing documentation for "GithubLocationAnalyzer". +// src/analyzers/GithubLocationAnalyzer.d.ts:23:5 - (ae-undocumented) Missing documentation for "supports". +// src/analyzers/GithubLocationAnalyzer.d.ts:24:5 - (ae-undocumented) Missing documentation for "analyze". +// src/deprecated.d.ts:9:1 - (ae-undocumented) Missing documentation for "GitHubOrgEntityProvider". +// src/deprecated.d.ts:10:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/deprecated.d.ts:16:1 - (ae-undocumented) Missing documentation for "GitHubOrgEntityProviderOptions". +// src/deprecated.d.ts:21:1 - (ae-undocumented) Missing documentation for "GitHubEntityProvider". +// src/deprecated.d.ts:23:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/deprecated.d.ts:29:5 - (ae-undocumented) Missing documentation for "connect". +// src/deprecated.d.ts:30:5 - (ae-undocumented) Missing documentation for "getProviderName". +// src/deprecated.d.ts:31:5 - (ae-undocumented) Missing documentation for "refresh". // src/lib/defaultTransformers.d.ts:10:5 - (ae-undocumented) Missing documentation for "client". // src/lib/defaultTransformers.d.ts:11:5 - (ae-undocumented) Missing documentation for "query". // src/lib/defaultTransformers.d.ts:12:5 - (ae-undocumented) Missing documentation for "org". @@ -345,14 +345,14 @@ export type UserTransformer = ( // src/processors/GithubOrgReaderProcessor.d.ts:18:5 - (ae-undocumented) Missing documentation for "fromConfig". // src/processors/GithubOrgReaderProcessor.d.ts:27:5 - (ae-undocumented) Missing documentation for "getProcessorName". // src/processors/GithubOrgReaderProcessor.d.ts:28:5 - (ae-undocumented) Missing documentation for "readLocation". -// src/providers/GithubEntityProvider.d.ts:22:5 - (ae-undocumented) Missing documentation for "fromConfig". -// src/providers/GithubEntityProvider.d.ts:34:5 - (ae-undocumented) Missing documentation for "refresh". -// src/providers/GithubEntityProvider.d.ts:52:8 - (tsdoc-undefined-tag) The TSDoc tag "@private" is not defined in this configuration -// src/providers/GithubEntityProvider.d.ts:61:8 - (tsdoc-undefined-tag) The TSDoc tag "@private" is not defined in this configuration -// src/providers/GithubEntityProvider.d.ts:72:8 - (tsdoc-undefined-tag) The TSDoc tag "@private" is not defined in this configuration -// src/providers/GithubEntityProvider.d.ts:82:8 - (tsdoc-undefined-tag) The TSDoc tag "@private" is not defined in this configuration -// src/providers/GithubEntityProvider.d.ts:94:8 - (tsdoc-undefined-tag) The TSDoc tag "@private" is not defined in this configuration -// src/providers/GithubEntityProvider.d.ts:103:8 - (tsdoc-undefined-tag) The TSDoc tag "@private" is not defined in this configuration -// src/providers/GithubMultiOrgEntityProvider.d.ts:85:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/providers/GithubEntityProvider.d.ts:21:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/providers/GithubEntityProvider.d.ts:33:5 - (ae-undocumented) Missing documentation for "refresh". +// src/providers/GithubEntityProvider.d.ts:51:8 - (tsdoc-undefined-tag) The TSDoc tag "@private" is not defined in this configuration +// src/providers/GithubEntityProvider.d.ts:60:8 - (tsdoc-undefined-tag) The TSDoc tag "@private" is not defined in this configuration +// src/providers/GithubEntityProvider.d.ts:71:8 - (tsdoc-undefined-tag) The TSDoc tag "@private" is not defined in this configuration +// src/providers/GithubEntityProvider.d.ts:81:8 - (tsdoc-undefined-tag) The TSDoc tag "@private" is not defined in this configuration +// src/providers/GithubEntityProvider.d.ts:93:8 - (tsdoc-undefined-tag) The TSDoc tag "@private" is not defined in this configuration +// src/providers/GithubEntityProvider.d.ts:102:8 - (tsdoc-undefined-tag) The TSDoc tag "@private" is not defined in this configuration +// src/providers/GithubMultiOrgEntityProvider.d.ts:84:5 - (ae-undocumented) Missing documentation for "fromConfig". // src/providers/GithubOrgEntityProvider.d.ts:71:5 - (ae-undocumented) Missing documentation for "fromConfig". ``` diff --git a/plugins/catalog-backend-module-gitlab/report.api.md b/plugins/catalog-backend-module-gitlab/report.api.md index 143d4b5823..0cc2f93ce1 100644 --- a/plugins/catalog-backend-module-gitlab/report.api.md +++ b/plugins/catalog-backend-module-gitlab/report.api.md @@ -178,22 +178,22 @@ export interface UserTransformerOptions { // src/GitLabDiscoveryProcessor.d.ts:20:5 - (ae-undocumented) Missing documentation for "getProcessorName". // src/GitLabDiscoveryProcessor.d.ts:21:5 - (ae-undocumented) Missing documentation for "readLocation". // src/lib/types.d.ts:48:1 - (ae-undocumented) Missing documentation for "GitLabGroupSamlIdentity". -// src/lib/types.d.ts:193:5 - (ae-undocumented) Missing documentation for "group". -// src/lib/types.d.ts:194:5 - (ae-undocumented) Missing documentation for "providerConfig". -// src/lib/types.d.ts:208:5 - (ae-undocumented) Missing documentation for "user". -// src/lib/types.d.ts:209:5 - (ae-undocumented) Missing documentation for "integrationConfig". -// src/lib/types.d.ts:210:5 - (ae-undocumented) Missing documentation for "providerConfig". -// src/lib/types.d.ts:211:5 - (ae-undocumented) Missing documentation for "groupNameTransformer". -// src/lib/types.d.ts:225:5 - (ae-undocumented) Missing documentation for "groups". -// src/lib/types.d.ts:226:5 - (ae-undocumented) Missing documentation for "providerConfig". -// src/lib/types.d.ts:227:5 - (ae-undocumented) Missing documentation for "groupNameTransformer". -// src/providers/GitlabDiscoveryEntityProvider.d.ts:22:5 - (ae-undocumented) Missing documentation for "fromConfig". -// src/providers/GitlabDiscoveryEntityProvider.d.ts:34:5 - (ae-undocumented) Missing documentation for "getProviderName". -// src/providers/GitlabDiscoveryEntityProvider.d.ts:35:5 - (ae-undocumented) Missing documentation for "connect". -// src/providers/GitlabDiscoveryEntityProvider.d.ts:76:15 - (tsdoc-param-tag-with-invalid-type) The @param block should not include a JSDoc-style '{type}' -// src/providers/GitlabDiscoveryEntityProvider.d.ts:77:30 - (tsdoc-escape-right-brace) The "}" character should be escaped using a backslash to avoid confusion with a TSDoc inline tag -// src/providers/GitlabDiscoveryEntityProvider.d.ts:77:17 - (tsdoc-malformed-inline-tag) Expecting a TSDoc tag starting with "{@" -// src/providers/GitlabOrgDiscoveryEntityProvider.d.ts:22:5 - (ae-undocumented) Missing documentation for "fromConfig". -// src/providers/GitlabOrgDiscoveryEntityProvider.d.ts:32:5 - (ae-undocumented) Missing documentation for "getProviderName". -// src/providers/GitlabOrgDiscoveryEntityProvider.d.ts:33:5 - (ae-undocumented) Missing documentation for "connect". +// src/lib/types.d.ts:234:5 - (ae-undocumented) Missing documentation for "group". +// src/lib/types.d.ts:235:5 - (ae-undocumented) Missing documentation for "providerConfig". +// src/lib/types.d.ts:249:5 - (ae-undocumented) Missing documentation for "user". +// src/lib/types.d.ts:250:5 - (ae-undocumented) Missing documentation for "integrationConfig". +// src/lib/types.d.ts:251:5 - (ae-undocumented) Missing documentation for "providerConfig". +// src/lib/types.d.ts:252:5 - (ae-undocumented) Missing documentation for "groupNameTransformer". +// src/lib/types.d.ts:266:5 - (ae-undocumented) Missing documentation for "groups". +// src/lib/types.d.ts:267:5 - (ae-undocumented) Missing documentation for "providerConfig". +// src/lib/types.d.ts:268:5 - (ae-undocumented) Missing documentation for "groupNameTransformer". +// src/providers/GitlabDiscoveryEntityProvider.d.ts:21:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/providers/GitlabDiscoveryEntityProvider.d.ts:33:5 - (ae-undocumented) Missing documentation for "getProviderName". +// src/providers/GitlabDiscoveryEntityProvider.d.ts:34:5 - (ae-undocumented) Missing documentation for "connect". +// src/providers/GitlabDiscoveryEntityProvider.d.ts:75:15 - (tsdoc-param-tag-with-invalid-type) The @param block should not include a JSDoc-style '{type}' +// src/providers/GitlabDiscoveryEntityProvider.d.ts:76:30 - (tsdoc-escape-right-brace) The "}" character should be escaped using a backslash to avoid confusion with a TSDoc inline tag +// src/providers/GitlabDiscoveryEntityProvider.d.ts:76:17 - (tsdoc-malformed-inline-tag) Expecting a TSDoc tag starting with "{@" +// src/providers/GitlabOrgDiscoveryEntityProvider.d.ts:21:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/providers/GitlabOrgDiscoveryEntityProvider.d.ts:31:5 - (ae-undocumented) Missing documentation for "getProviderName". +// src/providers/GitlabOrgDiscoveryEntityProvider.d.ts:32:5 - (ae-undocumented) Missing documentation for "connect". ``` diff --git a/plugins/catalog-backend-module-incremental-ingestion/report.api.md b/plugins/catalog-backend-module-incremental-ingestion/report.api.md index 5f2abb5f60..7160ff504f 100644 --- a/plugins/catalog-backend-module-incremental-ingestion/report.api.md +++ b/plugins/catalog-backend-module-incremental-ingestion/report.api.md @@ -100,6 +100,6 @@ export type PluginEnvironment = { // src/service/IncrementalCatalogBuilder.d.ts:6:1 - (ae-undocumented) Missing documentation for "IncrementalCatalogBuilder". // src/service/IncrementalCatalogBuilder.d.ts:20:5 - (ae-undocumented) Missing documentation for "build". // src/service/IncrementalCatalogBuilder.d.ts:23:5 - (ae-undocumented) Missing documentation for "addIncrementalEntityProvider". -// src/types.d.ts:107:1 - (ae-undocumented) Missing documentation for "IncrementalEntityProviderOptions". -// src/types.d.ts:146:1 - (ae-undocumented) Missing documentation for "PluginEnvironment". +// src/types.d.ts:106:1 - (ae-undocumented) Missing documentation for "IncrementalEntityProviderOptions". +// src/types.d.ts:145:1 - (ae-undocumented) Missing documentation for "PluginEnvironment". ``` diff --git a/plugins/catalog-backend-module-ldap/report.api.md b/plugins/catalog-backend-module-ldap/report.api.md index a786d48fdb..e8b20073a3 100644 --- a/plugins/catalog-backend-module-ldap/report.api.md +++ b/plugins/catalog-backend-module-ldap/report.api.md @@ -113,7 +113,6 @@ export class LdapOrgEntityProvider implements EntityProvider { userTransformer?: UserTransformer; groupTransformer?: GroupTransformer; }); - // (undocumented) connect(connection: EntityProviderConnection): Promise; // (undocumented) static fromConfig( @@ -125,7 +124,6 @@ export class LdapOrgEntityProvider implements EntityProvider { configRoot: Config, options: LdapOrgEntityProviderLegacyOptions, ): LdapOrgEntityProvider; - // (undocumented) getProviderName(): string; read(options?: { logger?: LoggerService }): Promise; } @@ -277,4 +275,13 @@ export type VendorConfig = { dnAttributeName?: string; uuidAttributeName?: string; }; + +// Warnings were encountered during analysis: +// +// src/ldap/client.d.ts:16:5 - (ae-undocumented) Missing documentation for "create". +// src/processors/LdapOrgEntityProvider.d.ts:107:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/processors/LdapOrgEntityProvider.d.ts:108:5 - (ae-undocumented) Missing documentation for "fromLegacyConfig". +// src/processors/LdapOrgReaderProcessor.d.ts:16:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/processors/LdapOrgReaderProcessor.d.ts:27:5 - (ae-undocumented) Missing documentation for "getProcessorName". +// src/processors/LdapOrgReaderProcessor.d.ts:28:5 - (ae-undocumented) Missing documentation for "readLocation". ``` diff --git a/plugins/catalog-backend-module-msgraph/report.api.md b/plugins/catalog-backend-module-msgraph/report.api.md index 449825df37..3df99752db 100644 --- a/plugins/catalog-backend-module-msgraph/report.api.md +++ b/plugins/catalog-backend-module-msgraph/report.api.md @@ -296,7 +296,7 @@ export type UserTransformer = ( // src/microsoftGraph/client.d.ts:109:5 - (ae-undocumented) Missing documentation for "getUserPhoto". // src/microsoftGraph/client.d.ts:129:5 - (ae-undocumented) Missing documentation for "getGroupPhoto". // src/microsoftGraph/client.d.ts:176:5 - (ae-unresolved-link) The @link reference could not be resolved: The package "@backstage/plugin-catalog-backend-module-msgraph" does not have an export "entityName" -// src/processors/MicrosoftGraphOrgEntityProvider.d.ts:120:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/processors/MicrosoftGraphOrgEntityProvider.d.ts:119:5 - (ae-undocumented) Missing documentation for "fromConfig". // src/processors/MicrosoftGraphOrgReaderProcessor.d.ts:18:5 - (ae-undocumented) Missing documentation for "fromConfig". // src/processors/MicrosoftGraphOrgReaderProcessor.d.ts:31:5 - (ae-undocumented) Missing documentation for "getProcessorName". // src/processors/MicrosoftGraphOrgReaderProcessor.d.ts:32:5 - (ae-undocumented) Missing documentation for "readLocation". diff --git a/plugins/catalog-backend-module-puppetdb/report.api.md b/plugins/catalog-backend-module-puppetdb/report.api.md index 1b22398086..00874a3b2f 100644 --- a/plugins/catalog-backend-module-puppetdb/report.api.md +++ b/plugins/catalog-backend-module-puppetdb/report.api.md @@ -78,9 +78,9 @@ export type ResourceTransformer = ( // Warnings were encountered during analysis: // -// src/providers/PuppetDbEntityProvider.d.ts:40:8 - (tsdoc-undefined-tag) The TSDoc tag "@private" is not defined in this configuration -// src/providers/PuppetDbEntityProvider.d.ts:42:5 - (ae-unresolved-link) The @link reference could not be resolved: The package "@backstage/plugin-catalog-backend-module-puppetdb" does not have an export "LoggerService" -// src/providers/PuppetDbEntityProvider.d.ts:42:5 - (ae-unresolved-link) The @link reference could not be resolved: The package "@backstage/plugin-catalog-backend-module-puppetdb" does not have an export "TaskRunner" -// src/providers/PuppetDbEntityProvider.d.ts:52:8 - (tsdoc-undefined-tag) The TSDoc tag "@private" is not defined in this configuration -// src/providers/PuppetDbEntityProvider.d.ts:54:5 - (ae-unresolved-link) The @link reference could not be resolved: The package "@backstage/plugin-catalog-backend-module-puppetdb" does not have an export "TaskRunner" +// src/providers/PuppetDbEntityProvider.d.ts:39:8 - (tsdoc-undefined-tag) The TSDoc tag "@private" is not defined in this configuration +// src/providers/PuppetDbEntityProvider.d.ts:41:5 - (ae-unresolved-link) The @link reference could not be resolved: The package "@backstage/plugin-catalog-backend-module-puppetdb" does not have an export "LoggerService" +// src/providers/PuppetDbEntityProvider.d.ts:41:5 - (ae-unresolved-link) The @link reference could not be resolved: The package "@backstage/plugin-catalog-backend-module-puppetdb" does not have an export "SchedulerServiceTaskRunner" +// src/providers/PuppetDbEntityProvider.d.ts:51:8 - (tsdoc-undefined-tag) The TSDoc tag "@private" is not defined in this configuration +// src/providers/PuppetDbEntityProvider.d.ts:53:5 - (ae-unresolved-link) The @link reference could not be resolved: The package "@backstage/plugin-catalog-backend-module-puppetdb" does not have an export "SchedulerServiceTaskRunner" ``` diff --git a/plugins/catalog-backend/report.api.md b/plugins/catalog-backend/report.api.md index 1c3949adfa..375f14e5f8 100644 --- a/plugins/catalog-backend/report.api.md +++ b/plugins/catalog-backend/report.api.md @@ -516,10 +516,10 @@ export class UrlReaderProcessor implements CatalogProcessor_2 { // src/deprecated.d.ts:207:22 - (ae-undocumented) Missing documentation for "defaultCatalogCollatorEntityTransformer". // src/deprecated.d.ts:212:1 - (ae-undocumented) Missing documentation for "DefaultCatalogCollatorFactoryOptions". // src/deprecated.d.ts:217:1 - (ae-undocumented) Missing documentation for "CatalogCollatorEntityTransformer". -// src/modules/codeowners/CodeOwnersProcessor.d.ts:9:1 - (ae-undocumented) Missing documentation for "CodeOwnersProcessor". -// src/modules/codeowners/CodeOwnersProcessor.d.ts:13:5 - (ae-undocumented) Missing documentation for "fromConfig". -// src/modules/codeowners/CodeOwnersProcessor.d.ts:22:5 - (ae-undocumented) Missing documentation for "getProcessorName". -// src/modules/codeowners/CodeOwnersProcessor.d.ts:23:5 - (ae-undocumented) Missing documentation for "preProcessEntity". +// src/modules/codeowners/CodeOwnersProcessor.d.ts:8:1 - (ae-undocumented) Missing documentation for "CodeOwnersProcessor". +// src/modules/codeowners/CodeOwnersProcessor.d.ts:12:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/modules/codeowners/CodeOwnersProcessor.d.ts:21:5 - (ae-undocumented) Missing documentation for "getProcessorName". +// src/modules/codeowners/CodeOwnersProcessor.d.ts:22:5 - (ae-undocumented) Missing documentation for "preProcessEntity". // src/modules/core/AnnotateLocationEntityProcessor.d.ts:6:1 - (ae-undocumented) Missing documentation for "AnnotateLocationEntityProcessor". // src/modules/core/AnnotateLocationEntityProcessor.d.ts:11:5 - (ae-undocumented) Missing documentation for "getProcessorName". // src/modules/core/AnnotateLocationEntityProcessor.d.ts:12:5 - (ae-undocumented) Missing documentation for "preProcessEntity". @@ -540,9 +540,9 @@ export class UrlReaderProcessor implements CatalogProcessor_2 { // src/modules/core/PlaceholderProcessor.d.ts:8:1 - (ae-undocumented) Missing documentation for "PlaceholderProcessorOptions". // src/modules/core/PlaceholderProcessor.d.ts:21:5 - (ae-undocumented) Missing documentation for "getProcessorName". // src/modules/core/PlaceholderProcessor.d.ts:22:5 - (ae-undocumented) Missing documentation for "preProcessEntity". -// src/modules/core/UrlReaderProcessor.d.ts:6:1 - (ae-undocumented) Missing documentation for "UrlReaderProcessor". -// src/modules/core/UrlReaderProcessor.d.ts:12:5 - (ae-undocumented) Missing documentation for "getProcessorName". -// src/modules/core/UrlReaderProcessor.d.ts:13:5 - (ae-undocumented) Missing documentation for "readLocation". +// src/modules/core/UrlReaderProcessor.d.ts:5:1 - (ae-undocumented) Missing documentation for "UrlReaderProcessor". +// src/modules/core/UrlReaderProcessor.d.ts:11:5 - (ae-undocumented) Missing documentation for "getProcessorName". +// src/modules/core/UrlReaderProcessor.d.ts:12:5 - (ae-undocumented) Missing documentation for "readLocation". // src/modules/util/parse.d.ts:5:1 - (ae-undocumented) Missing documentation for "parseEntityYaml". // src/processing/types.d.ts:31:5 - (ae-undocumented) Missing documentation for "start". // src/processing/types.d.ts:32:5 - (ae-undocumented) Missing documentation for "stop". @@ -558,5 +558,5 @@ export class UrlReaderProcessor implements CatalogProcessor_2 { // src/search/DefaultCatalogCollator.d.ts:31:5 - (ae-undocumented) Missing documentation for "applyArgsToFormat". // src/search/DefaultCatalogCollator.d.ts:33:5 - (ae-undocumented) Missing documentation for "execute". // src/service/CatalogBuilder.d.ts:19:1 - (ae-undocumented) Missing documentation for "CatalogEnvironment". -// src/service/CatalogBuilder.d.ts:232:5 - (ae-undocumented) Missing documentation for "subscribe". +// src/service/CatalogBuilder.d.ts:233:5 - (ae-undocumented) Missing documentation for "subscribe". ``` diff --git a/plugins/catalog-graph/report-alpha.api.md b/plugins/catalog-graph/report-alpha.api.md index 8d0137fed7..944fa203f1 100644 --- a/plugins/catalog-graph/report-alpha.api.md +++ b/plugins/catalog-graph/report-alpha.api.md @@ -167,7 +167,7 @@ export default _default; // Warnings were encountered during analysis: // -// src/alpha.d.ts:1:15 - (ae-undocumented) Missing documentation for "_default". +// src/alpha.d.ts:3:15 - (ae-undocumented) Missing documentation for "_default". // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/catalog-graph/report.api.md b/plugins/catalog-graph/report.api.md index 44f0f93e1e..8812394d4f 100644 --- a/plugins/catalog-graph/report.api.md +++ b/plugins/catalog-graph/report.api.md @@ -141,5 +141,8 @@ export type RelationPairs = [string, string][]; // Warnings were encountered during analysis: // -// src/components/EntityRelationsGraph/EntityRelationsGraph.d.ts:9:1 - (ae-undocumented) Missing documentation for "EntityRelationsGraphProps". +// src/components/EntityRelationsGraph/DefaultRenderLabel.d.ts:5:1 - (ae-undocumented) Missing documentation for "CustomLabelClassKey". +// src/components/EntityRelationsGraph/DefaultRenderNode.d.ts:5:1 - (ae-undocumented) Missing documentation for "CustomNodeClassKey". +// src/components/EntityRelationsGraph/EntityRelationsGraph.d.ts:7:1 - (ae-undocumented) Missing documentation for "EntityRelationsGraphClassKey". +// src/components/EntityRelationsGraph/EntityRelationsGraph.d.ts:11:1 - (ae-undocumented) Missing documentation for "EntityRelationsGraphProps". ``` diff --git a/plugins/catalog-import/report-alpha.api.md b/plugins/catalog-import/report-alpha.api.md index a70d8c46c8..d966e04e7e 100644 --- a/plugins/catalog-import/report-alpha.api.md +++ b/plugins/catalog-import/report-alpha.api.md @@ -69,7 +69,7 @@ export default _default; // Warnings were encountered during analysis: // -// src/alpha.d.ts:2:15 - (ae-undocumented) Missing documentation for "_default". +// src/alpha.d.ts:3:15 - (ae-undocumented) Missing documentation for "_default". // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/catalog-node/api-report-testUtils.md b/plugins/catalog-node/api-report-testUtils.md deleted file mode 100644 index c1dfb0bd7a..0000000000 --- a/plugins/catalog-node/api-report-testUtils.md +++ /dev/null @@ -1,27 +0,0 @@ -## API Report File for "@backstage/plugin-catalog-node" - -> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). - -```ts -import { CatalogApi } from '@backstage/catalog-client'; -import { Entity } from '@backstage/catalog-model'; -import { ServiceFactory } from '@backstage/backend-plugin-api'; -import { ServiceMock } from '@backstage/backend-test-utils'; - -// @public -export function catalogServiceMock(options?: { - entities?: Entity[]; -}): CatalogApi; - -// @public -export namespace catalogServiceMock { - const factory: (options?: { - entities?: Entity[]; - }) => ServiceFactory; - const mock: ( - partialImpl?: Partial | undefined, - ) => ServiceMock; -} - -// (No @packageDocumentation comment for this package) -``` diff --git a/plugins/catalog-node/report-alpha.api.md b/plugins/catalog-node/report-alpha.api.md index 6fc361896d..4ef79f1f3c 100644 --- a/plugins/catalog-node/report-alpha.api.md +++ b/plugins/catalog-node/report-alpha.api.md @@ -100,21 +100,23 @@ export const catalogServiceRef: ServiceRef; // Warnings were encountered during analysis: // -// src/extensions.d.ts:8:1 - (ae-undocumented) Missing documentation for "CatalogProcessingExtensionPoint". -// src/extensions.d.ts:9:5 - (ae-undocumented) Missing documentation for "addProcessor". -// src/extensions.d.ts:10:5 - (ae-undocumented) Missing documentation for "addEntityProvider". -// src/extensions.d.ts:11:5 - (ae-undocumented) Missing documentation for "addPlaceholderResolver". -// src/extensions.d.ts:12:5 - (ae-undocumented) Missing documentation for "setOnProcessingErrorHandler". -// src/extensions.d.ts:18:1 - (ae-undocumented) Missing documentation for "CatalogModelExtensionPoint". -// src/extensions.d.ts:36:22 - (ae-undocumented) Missing documentation for "catalogProcessingExtensionPoint". -// src/extensions.d.ts:40:1 - (ae-undocumented) Missing documentation for "CatalogAnalysisExtensionPoint". -// src/extensions.d.ts:63:22 - (ae-undocumented) Missing documentation for "catalogAnalysisExtensionPoint". -// src/extensions.d.ts:65:22 - (ae-undocumented) Missing documentation for "catalogModelExtensionPoint". -// src/extensions.d.ts:69:1 - (ae-undocumented) Missing documentation for "CatalogPermissionRuleInput". -// src/extensions.d.ts:73:1 - (ae-undocumented) Missing documentation for "CatalogPermissionExtensionPoint". -// src/extensions.d.ts:74:5 - (ae-undocumented) Missing documentation for "addPermissions". -// src/extensions.d.ts:75:5 - (ae-undocumented) Missing documentation for "addPermissionRules". -// src/extensions.d.ts:80:22 - (ae-undocumented) Missing documentation for "catalogPermissionExtensionPoint". +// src/extensions.d.ts:8:1 - (ae-undocumented) Missing documentation for "CatalogLocationsExtensionPoint". +// src/extensions.d.ts:18:22 - (ae-undocumented) Missing documentation for "catalogLocationsExtensionPoint". +// src/extensions.d.ts:22:1 - (ae-undocumented) Missing documentation for "CatalogProcessingExtensionPoint". +// src/extensions.d.ts:23:5 - (ae-undocumented) Missing documentation for "addProcessor". +// src/extensions.d.ts:24:5 - (ae-undocumented) Missing documentation for "addEntityProvider". +// src/extensions.d.ts:25:5 - (ae-undocumented) Missing documentation for "addPlaceholderResolver". +// src/extensions.d.ts:26:5 - (ae-undocumented) Missing documentation for "setOnProcessingErrorHandler". +// src/extensions.d.ts:32:1 - (ae-undocumented) Missing documentation for "CatalogModelExtensionPoint". +// src/extensions.d.ts:50:22 - (ae-undocumented) Missing documentation for "catalogProcessingExtensionPoint". +// src/extensions.d.ts:54:1 - (ae-undocumented) Missing documentation for "CatalogAnalysisExtensionPoint". +// src/extensions.d.ts:77:22 - (ae-undocumented) Missing documentation for "catalogAnalysisExtensionPoint". +// src/extensions.d.ts:79:22 - (ae-undocumented) Missing documentation for "catalogModelExtensionPoint". +// src/extensions.d.ts:83:1 - (ae-undocumented) Missing documentation for "CatalogPermissionRuleInput". +// src/extensions.d.ts:87:1 - (ae-undocumented) Missing documentation for "CatalogPermissionExtensionPoint". +// src/extensions.d.ts:88:5 - (ae-undocumented) Missing documentation for "addPermissions". +// src/extensions.d.ts:89:5 - (ae-undocumented) Missing documentation for "addPermissionRules". +// src/extensions.d.ts:94:22 - (ae-undocumented) Missing documentation for "catalogPermissionExtensionPoint". // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/catalog-node/report.api.md b/plugins/catalog-node/report.api.md index 5c18c4756e..1e585d59e2 100644 --- a/plugins/catalog-node/report.api.md +++ b/plugins/catalog-node/report.api.md @@ -254,11 +254,11 @@ export type ScmLocationAnalyzer = { // src/api/processor.d.ts:122:1 - (ae-undocumented) Missing documentation for "CatalogProcessorErrorResult". // src/api/processor.d.ts:128:1 - (ae-undocumented) Missing documentation for "CatalogProcessorRefreshKeysResult". // src/api/processor.d.ts:133:1 - (ae-undocumented) Missing documentation for "CatalogProcessorResult". -// src/processing/types.d.ts:15:1 - (ae-undocumented) Missing documentation for "PlaceholderResolverRead". -// src/processing/types.d.ts:17:1 - (ae-undocumented) Missing documentation for "PlaceholderResolverResolveUrl". -// src/processing/types.d.ts:19:1 - (ae-undocumented) Missing documentation for "PlaceholderResolverParams". -// src/processing/types.d.ts:28:1 - (ae-undocumented) Missing documentation for "PlaceholderResolver". -// src/processing/types.d.ts:30:1 - (ae-undocumented) Missing documentation for "LocationAnalyzer". -// src/processing/types.d.ts:40:1 - (ae-undocumented) Missing documentation for "AnalyzeOptions". -// src/processing/types.d.ts:45:1 - (ae-undocumented) Missing documentation for "ScmLocationAnalyzer". +// src/processing/types.d.ts:16:1 - (ae-undocumented) Missing documentation for "PlaceholderResolverRead". +// src/processing/types.d.ts:18:1 - (ae-undocumented) Missing documentation for "PlaceholderResolverResolveUrl". +// src/processing/types.d.ts:20:1 - (ae-undocumented) Missing documentation for "PlaceholderResolverParams". +// src/processing/types.d.ts:29:1 - (ae-undocumented) Missing documentation for "PlaceholderResolver". +// src/processing/types.d.ts:31:1 - (ae-undocumented) Missing documentation for "LocationAnalyzer". +// src/processing/types.d.ts:41:1 - (ae-undocumented) Missing documentation for "AnalyzeOptions". +// src/processing/types.d.ts:46:1 - (ae-undocumented) Missing documentation for "ScmLocationAnalyzer". ``` diff --git a/plugins/catalog-react/report-alpha.api.md b/plugins/catalog-react/report-alpha.api.md index 6873fa6cfa..6eec97b815 100644 --- a/plugins/catalog-react/report-alpha.api.md +++ b/plugins/catalog-react/report-alpha.api.md @@ -223,9 +223,8 @@ export function useEntityPermission( // Warnings were encountered during analysis: // -// src/alpha.d.ts:9:22 - (ae-undocumented) Missing documentation for "catalogExtensionData". -// src/alpha.d.ts:15:1 - (ae-undocumented) Missing documentation for "createEntityCardExtension". -// src/alpha.d.ts:34:1 - (ae-undocumented) Missing documentation for "createEntityContentExtension". +// src/alpha/converters/convertLegacyEntityCardExtension.d.ts:5:1 - (ae-undocumented) Missing documentation for "convertLegacyEntityCardExtension". +// src/alpha/converters/convertLegacyEntityContentExtension.d.ts:5:1 - (ae-undocumented) Missing documentation for "convertLegacyEntityContentExtension". // src/translation.d.ts:2:22 - (ae-undocumented) Missing documentation for "catalogReactTranslationRef". // (No @packageDocumentation comment for this package) diff --git a/plugins/catalog-react/report.api.md b/plugins/catalog-react/report.api.md index aafe29e16d..fccc269e07 100644 --- a/plugins/catalog-react/report.api.md +++ b/plugins/catalog-react/report.api.md @@ -859,8 +859,9 @@ export function useStarredEntity( // src/components/EntityNamespacePicker/EntityNamespacePicker.d.ts:10:5 - (ae-undocumented) Missing documentation for "initiallySelectedNamespaces". // src/components/EntityNamespacePicker/EntityNamespacePicker.d.ts:13:22 - (ae-undocumented) Missing documentation for "EntityNamespacePicker". // src/components/EntityOwnerPicker/EntityOwnerPicker.d.ts:3:1 - (ae-undocumented) Missing documentation for "CatalogReactEntityOwnerPickerClassKey". -// src/components/EntityOwnerPicker/EntityOwnerPicker.d.ts:7:1 - (ae-undocumented) Missing documentation for "EntityOwnerPickerProps". -// src/components/EntityOwnerPicker/EntityOwnerPicker.d.ts:11:22 - (ae-undocumented) Missing documentation for "EntityOwnerPicker". +// src/components/EntityOwnerPicker/EntityOwnerPicker.d.ts:5:1 - (ae-undocumented) Missing documentation for "FixedWidthFormControlLabelClassKey". +// src/components/EntityOwnerPicker/EntityOwnerPicker.d.ts:9:1 - (ae-undocumented) Missing documentation for "EntityOwnerPickerProps". +// src/components/EntityOwnerPicker/EntityOwnerPicker.d.ts:13:22 - (ae-undocumented) Missing documentation for "EntityOwnerPicker". // src/components/EntityProcessingStatusPicker/EntityProcessingStatusPicker.d.ts:3:1 - (ae-undocumented) Missing documentation for "CatalogReactEntityProcessingStatusPickerClassKey". // src/components/EntityProcessingStatusPicker/EntityProcessingStatusPicker.d.ts:5:22 - (ae-undocumented) Missing documentation for "EntityProcessingStatusPicker". // src/components/EntityRefLink/humanize.d.ts:8:1 - (ae-undocumented) Missing documentation for "humanizeEntityRef". @@ -938,16 +939,18 @@ export function useStarredEntity( // src/hooks/useEntity.d.ts:20:5 - (ae-undocumented) Missing documentation for "refresh". // src/hooks/useEntity.d.ts:34:5 - (ae-undocumented) Missing documentation for "children". // src/hooks/useEntity.d.ts:35:5 - (ae-undocumented) Missing documentation for "entity". -// src/hooks/useEntityListProvider.d.ts:5:1 - (ae-undocumented) Missing documentation for "DefaultEntityFilters". -// src/hooks/useEntityListProvider.d.ts:18:1 - (ae-undocumented) Missing documentation for "EntityListContextProps". -// src/hooks/useEntityListProvider.d.ts:57:1 - (ae-undocumented) Missing documentation for "EntityListProviderProps". +// src/hooks/useEntityListProvider.d.ts:6:1 - (ae-undocumented) Missing documentation for "DefaultEntityFilters". +// src/hooks/useEntityListProvider.d.ts:19:1 - (ae-undocumented) Missing documentation for "PaginationMode". +// src/hooks/useEntityListProvider.d.ts:21:1 - (ae-undocumented) Missing documentation for "EntityListContextProps". +// src/hooks/useEntityListProvider.d.ts:65:1 - (ae-undocumented) Missing documentation for "EntityListProviderProps". // src/hooks/useStarredEntities.d.ts:3:1 - (ae-undocumented) Missing documentation for "useStarredEntities". // src/hooks/useStarredEntity.d.ts:3:1 - (ae-undocumented) Missing documentation for "useStarredEntity". // src/overridableComponents.d.ts:6:1 - (ae-undocumented) Missing documentation for "CatalogReactComponentsNameToClassKey". -// src/overridableComponents.d.ts:17:1 - (ae-undocumented) Missing documentation for "BackstageOverrides". +// src/overridableComponents.d.ts:19:1 - (ae-undocumented) Missing documentation for "BackstageOverrides". // src/testUtils/providers.d.ts:4:1 - (ae-undocumented) Missing documentation for "MockEntityListContextProvider". // src/types.d.ts:3:1 - (ae-undocumented) Missing documentation for "EntityFilter". // src/types.d.ts:25:1 - (ae-undocumented) Missing documentation for "UserListFilterKind". +// src/types.d.ts:27:1 - (ae-undocumented) Missing documentation for "EntityListPagination". // src/utils/getEntitySourceLocation.d.ts:4:1 - (ae-undocumented) Missing documentation for "EntitySourceLocation". // src/utils/getEntitySourceLocation.d.ts:9:1 - (ae-undocumented) Missing documentation for "getEntitySourceLocation". ``` diff --git a/plugins/catalog/report-alpha.api.md b/plugins/catalog/report-alpha.api.md index 0dd7778dc3..13ee6d0314 100644 --- a/plugins/catalog/report-alpha.api.md +++ b/plugins/catalog/report-alpha.api.md @@ -872,9 +872,8 @@ export default _default; // Warnings were encountered during analysis: // -// src/alpha/createCatalogFilterExtension.d.ts:4:1 - (ae-undocumented) Missing documentation for "createCatalogFilterExtension". -// src/alpha/plugin.d.ts:2:15 - (ae-undocumented) Missing documentation for "_default". -// src/translation.d.ts:2:22 - (ae-undocumented) Missing documentation for "catalogTranslationRef". +// src/alpha/plugin.d.ts:3:15 - (ae-undocumented) Missing documentation for "_default". +// src/alpha/translation.d.ts:2:22 - (ae-undocumented) Missing documentation for "catalogTranslationRef". // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/catalog/report.api.md b/plugins/catalog/report.api.md index 2d149c4c51..a7538900a0 100644 --- a/plugins/catalog/report.api.md +++ b/plugins/catalog/report.api.md @@ -688,26 +688,30 @@ export type SystemDiagramCardClassKey = // src/components/CatalogPage/DefaultCatalogPage.d.ts:16:5 - (ae-undocumented) Missing documentation for "tableOptions". // src/components/CatalogPage/DefaultCatalogPage.d.ts:17:5 - (ae-undocumented) Missing documentation for "emptyContent". // src/components/CatalogPage/DefaultCatalogPage.d.ts:18:5 - (ae-undocumented) Missing documentation for "ownerPickerMode". -// src/components/CatalogPage/DefaultCatalogPage.d.ts:19:5 - (ae-undocumented) Missing documentation for "pagination". -// src/components/CatalogPage/DefaultCatalogPage.d.ts:22:5 - (ae-undocumented) Missing documentation for "filters". -// src/components/CatalogPage/DefaultCatalogPage.d.ts:23:5 - (ae-undocumented) Missing documentation for "initiallySelectedNamespaces". -// src/components/CatalogSearchResultListItem/CatalogSearchResultListItem.d.ts:9:5 - (ae-undocumented) Missing documentation for "icon". -// src/components/CatalogSearchResultListItem/CatalogSearchResultListItem.d.ts:10:5 - (ae-undocumented) Missing documentation for "result". -// src/components/CatalogSearchResultListItem/CatalogSearchResultListItem.d.ts:11:5 - (ae-undocumented) Missing documentation for "highlight". -// src/components/CatalogSearchResultListItem/CatalogSearchResultListItem.d.ts:12:5 - (ae-undocumented) Missing documentation for "rank". -// src/components/CatalogSearchResultListItem/CatalogSearchResultListItem.d.ts:13:5 - (ae-undocumented) Missing documentation for "lineClamp". +// src/components/CatalogPage/DefaultCatalogPage.d.ts:19:5 - (ae-undocumented) Missing documentation for "filters". +// src/components/CatalogPage/DefaultCatalogPage.d.ts:20:5 - (ae-undocumented) Missing documentation for "initiallySelectedNamespaces". +// src/components/CatalogPage/DefaultCatalogPage.d.ts:21:5 - (ae-undocumented) Missing documentation for "pagination". +// src/components/CatalogSearchResultListItem/CatalogSearchResultListItem.d.ts:4:1 - (ae-undocumented) Missing documentation for "CatalogSearchResultListItemClassKey". +// src/components/CatalogSearchResultListItem/CatalogSearchResultListItem.d.ts:11:5 - (ae-undocumented) Missing documentation for "icon". +// src/components/CatalogSearchResultListItem/CatalogSearchResultListItem.d.ts:12:5 - (ae-undocumented) Missing documentation for "result". +// src/components/CatalogSearchResultListItem/CatalogSearchResultListItem.d.ts:13:5 - (ae-undocumented) Missing documentation for "highlight". +// src/components/CatalogSearchResultListItem/CatalogSearchResultListItem.d.ts:14:5 - (ae-undocumented) Missing documentation for "rank". +// src/components/CatalogSearchResultListItem/CatalogSearchResultListItem.d.ts:15:5 - (ae-undocumented) Missing documentation for "lineClamp". // src/components/CatalogTable/CatalogTable.d.ts:10:5 - (ae-undocumented) Missing documentation for "columns". // src/components/CatalogTable/CatalogTable.d.ts:11:5 - (ae-undocumented) Missing documentation for "actions". // src/components/CatalogTable/CatalogTable.d.ts:12:5 - (ae-undocumented) Missing documentation for "tableOptions". // src/components/CatalogTable/CatalogTable.d.ts:13:5 - (ae-undocumented) Missing documentation for "emptyContent". // src/components/CatalogTable/CatalogTable.d.ts:14:5 - (ae-undocumented) Missing documentation for "subtitle". // src/components/CatalogTable/CatalogTable.d.ts:17:22 - (ae-undocumented) Missing documentation for "CatalogTable". +// src/components/CatalogTable/CatalogTableToolbar.d.ts:3:1 - (ae-undocumented) Missing documentation for "CatalogTableToolbarClassKey". // src/components/CatalogTable/types.d.ts:5:1 - (ae-undocumented) Missing documentation for "CatalogTableRow". // src/components/CatalogTable/types.d.ts:6:5 - (ae-undocumented) Missing documentation for "entity". // src/components/CatalogTable/types.d.ts:7:5 - (ae-undocumented) Missing documentation for "resolved". -// src/components/DependencyOfComponentsCard/DependencyOfComponentsCard.d.ts:4:1 - (ae-undocumented) Missing documentation for "DependencyOfComponentsCardProps". -// src/components/DependencyOfComponentsCard/DependencyOfComponentsCard.d.ts:5:5 - (ae-undocumented) Missing documentation for "variant". -// src/components/DependencyOfComponentsCard/DependencyOfComponentsCard.d.ts:6:5 - (ae-undocumented) Missing documentation for "title". +// src/components/DependencyOfComponentsCard/DependencyOfComponentsCard.d.ts:5:1 - (ae-undocumented) Missing documentation for "DependencyOfComponentsCardProps". +// src/components/DependencyOfComponentsCard/DependencyOfComponentsCard.d.ts:6:5 - (ae-undocumented) Missing documentation for "variant". +// src/components/DependencyOfComponentsCard/DependencyOfComponentsCard.d.ts:7:5 - (ae-undocumented) Missing documentation for "title". +// src/components/DependencyOfComponentsCard/DependencyOfComponentsCard.d.ts:8:5 - (ae-undocumented) Missing documentation for "columns". +// src/components/DependencyOfComponentsCard/DependencyOfComponentsCard.d.ts:9:5 - (ae-undocumented) Missing documentation for "tableOptions". // src/components/DependsOnComponentsCard/DependsOnComponentsCard.d.ts:5:1 - (ae-undocumented) Missing documentation for "DependsOnComponentsCardProps". // src/components/DependsOnComponentsCard/DependsOnComponentsCard.d.ts:6:5 - (ae-undocumented) Missing documentation for "variant". // src/components/DependsOnComponentsCard/DependsOnComponentsCard.d.ts:7:5 - (ae-undocumented) Missing documentation for "title". @@ -722,6 +726,7 @@ export type SystemDiagramCardClassKey = // src/components/EntityLabelsCard/EntityLabelsCard.d.ts:4:1 - (ae-undocumented) Missing documentation for "EntityLabelsCardProps". // src/components/EntityLabelsCard/EntityLabelsCard.d.ts:5:5 - (ae-undocumented) Missing documentation for "variant". // src/components/EntityLabelsCard/EntityLabelsCard.d.ts:6:5 - (ae-undocumented) Missing documentation for "title". +// src/components/EntityLabelsCard/EntityLabelsEmptyState.d.ts:3:1 - (ae-undocumented) Missing documentation for "EntityLabelsEmptyStateClassKey". // src/components/EntityLayout/EntityLayout.d.ts:6:1 - (ae-undocumented) Missing documentation for "EntityLayoutRouteProps". // src/components/EntityLayout/EntityLayout.d.ts:25:1 - (ae-undocumented) Missing documentation for "EntityLayoutProps". // src/components/EntityLayout/EntityLayout.d.ts:26:5 - (ae-undocumented) Missing documentation for "UNSTABLE_extraContextMenuItems". @@ -746,35 +751,47 @@ export type SystemDiagramCardClassKey = // src/components/FilteredEntityLayout/index.d.ts:6:22 - (ae-undocumented) Missing documentation for "FilteredEntityLayout". // src/components/FilteredEntityLayout/index.d.ts:13:22 - (ae-undocumented) Missing documentation for "FilterContainer". // src/components/FilteredEntityLayout/index.d.ts:24:22 - (ae-undocumented) Missing documentation for "EntityListContainer". -// src/components/HasComponentsCard/HasComponentsCard.d.ts:4:1 - (ae-undocumented) Missing documentation for "HasComponentsCardProps". -// src/components/HasComponentsCard/HasComponentsCard.d.ts:5:5 - (ae-undocumented) Missing documentation for "variant". -// src/components/HasComponentsCard/HasComponentsCard.d.ts:6:5 - (ae-undocumented) Missing documentation for "title". -// src/components/HasResourcesCard/HasResourcesCard.d.ts:4:1 - (ae-undocumented) Missing documentation for "HasResourcesCardProps". -// src/components/HasResourcesCard/HasResourcesCard.d.ts:5:5 - (ae-undocumented) Missing documentation for "variant". -// src/components/HasResourcesCard/HasResourcesCard.d.ts:6:5 - (ae-undocumented) Missing documentation for "title". -// src/components/HasSubcomponentsCard/HasSubcomponentsCard.d.ts:4:1 - (ae-undocumented) Missing documentation for "HasSubcomponentsCardProps". -// src/components/HasSubcomponentsCard/HasSubcomponentsCard.d.ts:5:5 - (ae-undocumented) Missing documentation for "variant". -// src/components/HasSubcomponentsCard/HasSubcomponentsCard.d.ts:6:5 - (ae-undocumented) Missing documentation for "tableOptions". +// src/components/HasComponentsCard/HasComponentsCard.d.ts:5:1 - (ae-undocumented) Missing documentation for "HasComponentsCardProps". +// src/components/HasComponentsCard/HasComponentsCard.d.ts:6:5 - (ae-undocumented) Missing documentation for "variant". +// src/components/HasComponentsCard/HasComponentsCard.d.ts:7:5 - (ae-undocumented) Missing documentation for "title". +// src/components/HasComponentsCard/HasComponentsCard.d.ts:8:5 - (ae-undocumented) Missing documentation for "columns". +// src/components/HasComponentsCard/HasComponentsCard.d.ts:9:5 - (ae-undocumented) Missing documentation for "tableOptions". +// src/components/HasResourcesCard/HasResourcesCard.d.ts:5:1 - (ae-undocumented) Missing documentation for "HasResourcesCardProps". +// src/components/HasResourcesCard/HasResourcesCard.d.ts:6:5 - (ae-undocumented) Missing documentation for "variant". +// src/components/HasResourcesCard/HasResourcesCard.d.ts:7:5 - (ae-undocumented) Missing documentation for "title". +// src/components/HasResourcesCard/HasResourcesCard.d.ts:8:5 - (ae-undocumented) Missing documentation for "columns". +// src/components/HasResourcesCard/HasResourcesCard.d.ts:9:5 - (ae-undocumented) Missing documentation for "tableOptions". +// src/components/HasSubcomponentsCard/HasSubcomponentsCard.d.ts:5:1 - (ae-undocumented) Missing documentation for "HasSubcomponentsCardProps". +// src/components/HasSubcomponentsCard/HasSubcomponentsCard.d.ts:6:5 - (ae-undocumented) Missing documentation for "variant". // src/components/HasSubcomponentsCard/HasSubcomponentsCard.d.ts:7:5 - (ae-undocumented) Missing documentation for "title". -// src/components/HasSystemsCard/HasSystemsCard.d.ts:4:1 - (ae-undocumented) Missing documentation for "HasSystemsCardProps". -// src/components/HasSystemsCard/HasSystemsCard.d.ts:5:5 - (ae-undocumented) Missing documentation for "variant". -// src/components/HasSystemsCard/HasSystemsCard.d.ts:6:5 - (ae-undocumented) Missing documentation for "title". +// src/components/HasSubcomponentsCard/HasSubcomponentsCard.d.ts:8:5 - (ae-undocumented) Missing documentation for "columns". +// src/components/HasSubcomponentsCard/HasSubcomponentsCard.d.ts:9:5 - (ae-undocumented) Missing documentation for "tableOptions". +// src/components/HasSubdomainsCard/HasSubdomainsCard.d.ts:4:1 - (ae-undocumented) Missing documentation for "HasSubdomainsCardProps". +// src/components/HasSubdomainsCard/HasSubdomainsCard.d.ts:5:5 - (ae-undocumented) Missing documentation for "variant". +// src/components/HasSubdomainsCard/HasSubdomainsCard.d.ts:6:5 - (ae-undocumented) Missing documentation for "tableOptions". +// src/components/HasSubdomainsCard/HasSubdomainsCard.d.ts:7:5 - (ae-undocumented) Missing documentation for "title". +// src/components/HasSystemsCard/HasSystemsCard.d.ts:5:1 - (ae-undocumented) Missing documentation for "HasSystemsCardProps". +// src/components/HasSystemsCard/HasSystemsCard.d.ts:6:5 - (ae-undocumented) Missing documentation for "variant". +// src/components/HasSystemsCard/HasSystemsCard.d.ts:7:5 - (ae-undocumented) Missing documentation for "title". +// src/components/HasSystemsCard/HasSystemsCard.d.ts:8:5 - (ae-undocumented) Missing documentation for "columns". +// src/components/HasSystemsCard/HasSystemsCard.d.ts:9:5 - (ae-undocumented) Missing documentation for "tableOptions". // src/components/RelatedEntitiesCard/RelatedEntitiesCard.d.ts:5:1 - (ae-undocumented) Missing documentation for "RelatedEntitiesCardProps". // src/components/SystemDiagramCard/SystemDiagramCard.d.ts:3:1 - (ae-undocumented) Missing documentation for "SystemDiagramCardClassKey". -// src/overridableComponents.d.ts:7:1 - (ae-undocumented) Missing documentation for "PluginCatalogComponentsNameToClassKey". -// src/overridableComponents.d.ts:13:1 - (ae-undocumented) Missing documentation for "BackstageOverrides". -// src/plugin.d.ts:16:22 - (ae-undocumented) Missing documentation for "catalogPlugin". -// src/plugin.d.ts:37:22 - (ae-undocumented) Missing documentation for "CatalogIndexPage". -// src/plugin.d.ts:39:22 - (ae-undocumented) Missing documentation for "CatalogEntityPage". -// src/plugin.d.ts:54:22 - (ae-undocumented) Missing documentation for "EntityLinksCard". -// src/plugin.d.ts:56:22 - (ae-undocumented) Missing documentation for "EntityLabelsCard". -// src/plugin.d.ts:58:22 - (ae-undocumented) Missing documentation for "EntityHasSystemsCard". -// src/plugin.d.ts:60:22 - (ae-undocumented) Missing documentation for "EntityHasComponentsCard". -// src/plugin.d.ts:62:22 - (ae-undocumented) Missing documentation for "EntityHasSubcomponentsCard". -// src/plugin.d.ts:64:22 - (ae-undocumented) Missing documentation for "EntityHasResourcesCard". -// src/plugin.d.ts:66:22 - (ae-undocumented) Missing documentation for "EntityDependsOnComponentsCard". -// src/plugin.d.ts:68:22 - (ae-undocumented) Missing documentation for "EntityDependencyOfComponentsCard". -// src/plugin.d.ts:70:22 - (ae-undocumented) Missing documentation for "EntityDependsOnResourcesCard". -// src/plugin.d.ts:72:22 - (ae-undocumented) Missing documentation for "RelatedEntitiesCard". -// src/plugin.d.ts:74:22 - (ae-undocumented) Missing documentation for "CatalogSearchResultListItem". +// src/overridableComponents.d.ts:10:1 - (ae-undocumented) Missing documentation for "PluginCatalogComponentsNameToClassKey". +// src/overridableComponents.d.ts:19:1 - (ae-undocumented) Missing documentation for "BackstageOverrides". +// src/plugin.d.ts:17:22 - (ae-undocumented) Missing documentation for "catalogPlugin". +// src/plugin.d.ts:38:22 - (ae-undocumented) Missing documentation for "CatalogIndexPage". +// src/plugin.d.ts:40:22 - (ae-undocumented) Missing documentation for "CatalogEntityPage". +// src/plugin.d.ts:55:22 - (ae-undocumented) Missing documentation for "EntityLinksCard". +// src/plugin.d.ts:57:22 - (ae-undocumented) Missing documentation for "EntityLabelsCard". +// src/plugin.d.ts:59:22 - (ae-undocumented) Missing documentation for "EntityHasSystemsCard". +// src/plugin.d.ts:61:22 - (ae-undocumented) Missing documentation for "EntityHasComponentsCard". +// src/plugin.d.ts:63:22 - (ae-undocumented) Missing documentation for "EntityHasSubcomponentsCard". +// src/plugin.d.ts:65:22 - (ae-undocumented) Missing documentation for "EntityHasSubdomainsCard". +// src/plugin.d.ts:67:22 - (ae-undocumented) Missing documentation for "EntityHasResourcesCard". +// src/plugin.d.ts:69:22 - (ae-undocumented) Missing documentation for "EntityDependsOnComponentsCard". +// src/plugin.d.ts:71:22 - (ae-undocumented) Missing documentation for "EntityDependencyOfComponentsCard". +// src/plugin.d.ts:73:22 - (ae-undocumented) Missing documentation for "EntityDependsOnResourcesCard". +// src/plugin.d.ts:75:22 - (ae-undocumented) Missing documentation for "RelatedEntitiesCard". +// src/plugin.d.ts:77:22 - (ae-undocumented) Missing documentation for "CatalogSearchResultListItem". ``` diff --git a/plugins/devtools-backend/report.api.md b/plugins/devtools-backend/report.api.md index f150975beb..1ca69d686e 100644 --- a/plugins/devtools-backend/report.api.md +++ b/plugins/devtools-backend/report.api.md @@ -55,12 +55,12 @@ export interface RouterOptions { // src/api/DevToolsBackendApi.d.ts:9:5 - (ae-undocumented) Missing documentation for "listExternalDependencyDetails". // src/api/DevToolsBackendApi.d.ts:12:5 - (ae-undocumented) Missing documentation for "listConfig". // src/api/DevToolsBackendApi.d.ts:13:5 - (ae-undocumented) Missing documentation for "listInfo". -// src/service/router.d.ts:6:1 - (ae-undocumented) Missing documentation for "RouterOptions". -// src/service/router.d.ts:7:5 - (ae-undocumented) Missing documentation for "devToolsBackendApi". -// src/service/router.d.ts:8:5 - (ae-undocumented) Missing documentation for "logger". -// src/service/router.d.ts:9:5 - (ae-undocumented) Missing documentation for "config". -// src/service/router.d.ts:10:5 - (ae-undocumented) Missing documentation for "permissions". -// src/service/router.d.ts:11:5 - (ae-undocumented) Missing documentation for "discovery". -// src/service/router.d.ts:12:5 - (ae-undocumented) Missing documentation for "httpAuth". -// src/service/router.d.ts:15:1 - (ae-undocumented) Missing documentation for "createRouter". +// src/service/router.d.ts:8:1 - (ae-undocumented) Missing documentation for "RouterOptions". +// src/service/router.d.ts:9:5 - (ae-undocumented) Missing documentation for "devToolsBackendApi". +// src/service/router.d.ts:10:5 - (ae-undocumented) Missing documentation for "logger". +// src/service/router.d.ts:11:5 - (ae-undocumented) Missing documentation for "config". +// src/service/router.d.ts:12:5 - (ae-undocumented) Missing documentation for "permissions". +// src/service/router.d.ts:13:5 - (ae-undocumented) Missing documentation for "discovery". +// src/service/router.d.ts:14:5 - (ae-undocumented) Missing documentation for "httpAuth". +// src/service/router.d.ts:20:1 - (ae-undocumented) Missing documentation for "createRouter". ``` diff --git a/plugins/devtools/report-alpha.api.md b/plugins/devtools/report-alpha.api.md index dbf690bc09..aa1806277e 100644 --- a/plugins/devtools/report-alpha.api.md +++ b/plugins/devtools/report-alpha.api.md @@ -91,7 +91,7 @@ export default _default; // Warnings were encountered during analysis: // -// src/alpha/plugin.d.ts:16:15 - (ae-undocumented) Missing documentation for "_default". +// src/alpha/plugin.d.ts:53:15 - (ae-undocumented) Missing documentation for "_default". // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/home/report-alpha.api.md b/plugins/home/report-alpha.api.md index 84c5082717..e8f8ddf6a1 100644 --- a/plugins/home/report-alpha.api.md +++ b/plugins/home/report-alpha.api.md @@ -80,8 +80,8 @@ export const titleExtensionDataRef: ConfigurableExtensionDataRef< // Warnings were encountered during analysis: // -// src/alpha.d.ts:4:22 - (ae-undocumented) Missing documentation for "titleExtensionDataRef". -// src/alpha.d.ts:8:15 - (ae-undocumented) Missing documentation for "_default". +// src/alpha.d.ts:5:22 - (ae-undocumented) Missing documentation for "titleExtensionDataRef". +// src/alpha.d.ts:9:15 - (ae-undocumented) Missing documentation for "_default". // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/kubernetes-backend/report.api.md b/plugins/kubernetes-backend/report.api.md index 9b2919ef66..e01ada7e1c 100644 --- a/plugins/kubernetes-backend/report.api.md +++ b/plugins/kubernetes-backend/report.api.md @@ -510,13 +510,13 @@ export type SigningCreds = { // src/service/KubernetesBuilder.d.ts:90:5 - (ae-undocumented) Missing documentation for "getAuthStrategyMap". // src/service/KubernetesFanOutHandler.d.ts:9:22 - (ae-undocumented) Missing documentation for "DEFAULT_OBJECTS". // src/service/KubernetesProxy.d.ts:50:5 - (ae-undocumented) Missing documentation for "createRequestHandler". -// src/service/router.d.ts:12:1 - (ae-undocumented) Missing documentation for "RouterOptions". -// src/service/router.d.ts:13:5 - (ae-undocumented) Missing documentation for "logger". -// src/service/router.d.ts:14:5 - (ae-undocumented) Missing documentation for "config". -// src/service/router.d.ts:15:5 - (ae-undocumented) Missing documentation for "catalogApi". -// src/service/router.d.ts:16:5 - (ae-undocumented) Missing documentation for "clusterSupplier". -// src/service/router.d.ts:17:5 - (ae-undocumented) Missing documentation for "discovery". -// src/service/router.d.ts:18:5 - (ae-undocumented) Missing documentation for "permissions". +// src/service/router.d.ts:11:1 - (ae-undocumented) Missing documentation for "RouterOptions". +// src/service/router.d.ts:12:5 - (ae-undocumented) Missing documentation for "logger". +// src/service/router.d.ts:13:5 - (ae-undocumented) Missing documentation for "config". +// src/service/router.d.ts:14:5 - (ae-undocumented) Missing documentation for "catalogApi". +// src/service/router.d.ts:15:5 - (ae-undocumented) Missing documentation for "clusterSupplier". +// src/service/router.d.ts:16:5 - (ae-undocumented) Missing documentation for "discovery". +// src/service/router.d.ts:17:5 - (ae-undocumented) Missing documentation for "permissions". // src/types/types.d.ts:9:1 - (ae-undocumented) Missing documentation for "ServiceLocatorMethod". // src/types/types.d.ts:14:1 - (ae-undocumented) Missing documentation for "KubernetesObjectsProviderOptions". // src/types/types.d.ts:15:5 - (ae-undocumented) Missing documentation for "logger". diff --git a/plugins/kubernetes/report-alpha.api.md b/plugins/kubernetes/report-alpha.api.md index f257d56587..93919acd47 100644 --- a/plugins/kubernetes/report-alpha.api.md +++ b/plugins/kubernetes/report-alpha.api.md @@ -164,7 +164,7 @@ export default _default; // Warnings were encountered during analysis: // -// src/alpha/plugin.d.ts:1:15 - (ae-undocumented) Missing documentation for "_default". +// src/alpha/plugin.d.ts:2:15 - (ae-undocumented) Missing documentation for "_default". // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/notifications/report.api.md b/plugins/notifications/report.api.md index 5e06ae2616..ab1fc6d5a1 100644 --- a/plugins/notifications/report.api.md +++ b/plugins/notifications/report.api.md @@ -176,5 +176,29 @@ export function useNotificationsApi( value: T; }; +// Warnings were encountered during analysis: +// +// src/api/NotificationsApi.d.ts:3:22 - (ae-undocumented) Missing documentation for "notificationsApiRef". +// src/api/NotificationsApi.d.ts:5:1 - (ae-undocumented) Missing documentation for "GetNotificationsOptions". +// src/api/NotificationsApi.d.ts:17:1 - (ae-undocumented) Missing documentation for "UpdateNotificationsOptions". +// src/api/NotificationsApi.d.ts:23:1 - (ae-undocumented) Missing documentation for "GetNotificationsResponse". +// src/api/NotificationsApi.d.ts:28:1 - (ae-undocumented) Missing documentation for "NotificationsApi". +// src/api/NotificationsApi.d.ts:29:5 - (ae-undocumented) Missing documentation for "getNotifications". +// src/api/NotificationsApi.d.ts:30:5 - (ae-undocumented) Missing documentation for "getNotification". +// src/api/NotificationsApi.d.ts:31:5 - (ae-undocumented) Missing documentation for "getStatus". +// src/api/NotificationsApi.d.ts:32:5 - (ae-undocumented) Missing documentation for "updateNotifications". +// src/api/NotificationsClient.d.ts:5:1 - (ae-undocumented) Missing documentation for "NotificationsClient". +// src/api/NotificationsClient.d.ts:12:5 - (ae-undocumented) Missing documentation for "getNotifications". +// src/api/NotificationsClient.d.ts:13:5 - (ae-undocumented) Missing documentation for "getNotification". +// src/api/NotificationsClient.d.ts:14:5 - (ae-undocumented) Missing documentation for "getStatus". +// src/api/NotificationsClient.d.ts:15:5 - (ae-undocumented) Missing documentation for "updateNotifications". +// src/components/NotificationsPage/NotificationsPage.d.ts:3:1 - (ae-undocumented) Missing documentation for "NotificationsPageProps". +// src/components/NotificationsSideBarItem/NotificationsSideBarItem.d.ts:12:22 - (ae-undocumented) Missing documentation for "NotificationsSidebarItem". +// src/components/NotificationsTable/NotificationsTable.d.ts:5:1 - (ae-undocumented) Missing documentation for "NotificationsTableProps". +// src/components/NotificationsTable/NotificationsTable.d.ts:15:22 - (ae-undocumented) Missing documentation for "NotificationsTable". +// src/hooks/useNotificationsApi.d.ts:3:1 - (ae-undocumented) Missing documentation for "useNotificationsApi". +// src/plugin.d.ts:3:22 - (ae-undocumented) Missing documentation for "notificationsPlugin". +// src/plugin.d.ts:7:22 - (ae-undocumented) Missing documentation for "NotificationsPage". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/org/report-alpha.api.md b/plugins/org/report-alpha.api.md index eaa98f98d1..14833df450 100644 --- a/plugins/org/report-alpha.api.md +++ b/plugins/org/report-alpha.api.md @@ -163,7 +163,7 @@ export default _default; // Warnings were encountered during analysis: // -// src/alpha.d.ts:2:15 - (ae-undocumented) Missing documentation for "_default". +// src/alpha.d.ts:3:15 - (ae-undocumented) Missing documentation for "_default". // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/org/report.api.md b/plugins/org/report.api.md index fd1e3010e9..033d363606 100644 --- a/plugins/org/report.api.md +++ b/plugins/org/report.api.md @@ -106,7 +106,9 @@ export const UserProfileCard: (props: { // Warnings were encountered during analysis: // // src/components/Cards/Group/GroupProfile/GroupProfileCard.d.ts:4:22 - (ae-undocumented) Missing documentation for "GroupProfileCard". -// src/components/Cards/Group/MembersList/MembersListCard.d.ts:4:22 - (ae-undocumented) Missing documentation for "MembersListCard". +// src/components/Cards/Group/MembersList/MembersListCard.d.ts:4:1 - (ae-undocumented) Missing documentation for "MemberComponentClassKey". +// src/components/Cards/Group/MembersList/MembersListCard.d.ts:6:1 - (ae-undocumented) Missing documentation for "MembersListCardClassKey". +// src/components/Cards/Group/MembersList/MembersListCard.d.ts:8:22 - (ae-undocumented) Missing documentation for "MembersListCard". // src/components/Cards/OwnershipCard/OwnershipCard.d.ts:5:22 - (ae-undocumented) Missing documentation for "OwnershipCard". // src/components/Cards/User/UserProfileCard/UserProfileCard.d.ts:4:22 - (ae-undocumented) Missing documentation for "UserProfileCard". // src/components/Cards/types.d.ts:2:1 - (ae-undocumented) Missing documentation for "EntityRelationAggregation". diff --git a/plugins/permission-node/report.api.md b/plugins/permission-node/report.api.md index 8dd8ac3c88..3deb87d141 100644 --- a/plugins/permission-node/report.api.md +++ b/plugins/permission-node/report.api.md @@ -298,8 +298,8 @@ export class ServerPermissionClient implements PermissionsService { // Warnings were encountered during analysis: // -// src/ServerPermissionClient.d.ts:12:5 - (ae-undocumented) Missing documentation for "fromConfig". -// src/ServerPermissionClient.d.ts:18:5 - (ae-undocumented) Missing documentation for "authorizeConditional". -// src/ServerPermissionClient.d.ts:19:5 - (ae-undocumented) Missing documentation for "authorize". +// src/ServerPermissionClient.d.ts:13:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/ServerPermissionClient.d.ts:20:5 - (ae-undocumented) Missing documentation for "authorizeConditional". +// src/ServerPermissionClient.d.ts:21:5 - (ae-undocumented) Missing documentation for "authorize". // src/policy/types.d.ts:67:5 - (ae-undocumented) Missing documentation for "handle". ``` diff --git a/plugins/proxy-backend/report.api.md b/plugins/proxy-backend/report.api.md index 7590d3b8d4..bf6ac6ae39 100644 --- a/plugins/proxy-backend/report.api.md +++ b/plugins/proxy-backend/report.api.md @@ -27,10 +27,10 @@ export interface RouterOptions { // Warnings were encountered during analysis: // -// src/service/router.d.ts:8:1 - (ae-undocumented) Missing documentation for "RouterOptions". -// src/service/router.d.ts:9:5 - (ae-undocumented) Missing documentation for "logger". -// src/service/router.d.ts:10:5 - (ae-undocumented) Missing documentation for "config". -// src/service/router.d.ts:11:5 - (ae-undocumented) Missing documentation for "discovery". -// src/service/router.d.ts:12:5 - (ae-undocumented) Missing documentation for "skipInvalidProxies". -// src/service/router.d.ts:13:5 - (ae-undocumented) Missing documentation for "reviveConsumedRequestBodies". +// src/service/router.d.ts:9:1 - (ae-undocumented) Missing documentation for "RouterOptions". +// src/service/router.d.ts:10:5 - (ae-undocumented) Missing documentation for "logger". +// src/service/router.d.ts:11:5 - (ae-undocumented) Missing documentation for "config". +// src/service/router.d.ts:12:5 - (ae-undocumented) Missing documentation for "discovery". +// src/service/router.d.ts:13:5 - (ae-undocumented) Missing documentation for "skipInvalidProxies". +// src/service/router.d.ts:14:5 - (ae-undocumented) Missing documentation for "reviveConsumedRequestBodies". ``` diff --git a/plugins/scaffolder-backend/report.api.md b/plugins/scaffolder-backend/report.api.md index f51d756528..112d58046b 100644 --- a/plugins/scaffolder-backend/report.api.md +++ b/plugins/scaffolder-backend/report.api.md @@ -847,7 +847,7 @@ export type TemplatePermissionRuleInput< // src/scaffolder/actions/TemplateActionRegistry.d.ts:8:5 - (ae-undocumented) Missing documentation for "register". // src/scaffolder/actions/TemplateActionRegistry.d.ts:9:5 - (ae-undocumented) Missing documentation for "get". // src/scaffolder/actions/TemplateActionRegistry.d.ts:10:5 - (ae-undocumented) Missing documentation for "list". -// src/scaffolder/actions/builtin/createBuiltinActions.d.ts:37:5 - (ae-undocumented) Missing documentation for "additionalTemplateGlobals". +// src/scaffolder/actions/builtin/createBuiltinActions.d.ts:36:5 - (ae-undocumented) Missing documentation for "additionalTemplateGlobals". // src/scaffolder/actions/deprecated.d.ts:12:22 - (ae-undocumented) Missing documentation for "createGithubActionsDispatchAction". // src/scaffolder/actions/deprecated.d.ts:17:22 - (ae-undocumented) Missing documentation for "createGithubDeployKeyAction". // src/scaffolder/actions/deprecated.d.ts:22:22 - (ae-undocumented) Missing documentation for "createGithubEnvironmentAction". @@ -869,22 +869,22 @@ export type TemplatePermissionRuleInput< // src/scaffolder/actions/deprecated.d.ts:119:22 - (ae-undocumented) Missing documentation for "createPublishGitlabMergeRequestAction". // src/scaffolder/tasks/DatabaseTaskStore.d.ts:41:5 - (ae-undocumented) Missing documentation for "create". // src/scaffolder/tasks/DatabaseTaskStore.d.ts:48:5 - (ae-undocumented) Missing documentation for "list". -// src/scaffolder/tasks/DatabaseTaskStore.d.ts:53:5 - (ae-undocumented) Missing documentation for "getTask". -// src/scaffolder/tasks/DatabaseTaskStore.d.ts:54:5 - (ae-undocumented) Missing documentation for "createTask". -// src/scaffolder/tasks/DatabaseTaskStore.d.ts:55:5 - (ae-undocumented) Missing documentation for "claimTask". -// src/scaffolder/tasks/DatabaseTaskStore.d.ts:56:5 - (ae-undocumented) Missing documentation for "heartbeatTask". -// src/scaffolder/tasks/DatabaseTaskStore.d.ts:57:5 - (ae-undocumented) Missing documentation for "listStaleTasks". -// src/scaffolder/tasks/DatabaseTaskStore.d.ts:65:5 - (ae-undocumented) Missing documentation for "completeTask". -// src/scaffolder/tasks/DatabaseTaskStore.d.ts:70:5 - (ae-undocumented) Missing documentation for "emitLogEvent". -// src/scaffolder/tasks/DatabaseTaskStore.d.ts:73:5 - (ae-undocumented) Missing documentation for "getTaskState". -// src/scaffolder/tasks/DatabaseTaskStore.d.ts:78:5 - (ae-undocumented) Missing documentation for "saveTaskState". -// src/scaffolder/tasks/DatabaseTaskStore.d.ts:82:5 - (ae-undocumented) Missing documentation for "listEvents". -// src/scaffolder/tasks/DatabaseTaskStore.d.ts:85:5 - (ae-undocumented) Missing documentation for "shutdownTask". -// src/scaffolder/tasks/DatabaseTaskStore.d.ts:86:5 - (ae-undocumented) Missing documentation for "rehydrateWorkspace". -// src/scaffolder/tasks/DatabaseTaskStore.d.ts:90:5 - (ae-undocumented) Missing documentation for "cleanWorkspace". -// src/scaffolder/tasks/DatabaseTaskStore.d.ts:93:5 - (ae-undocumented) Missing documentation for "serializeWorkspace". -// src/scaffolder/tasks/DatabaseTaskStore.d.ts:97:5 - (ae-undocumented) Missing documentation for "cancelTask". -// src/scaffolder/tasks/DatabaseTaskStore.d.ts:100:5 - (ae-undocumented) Missing documentation for "recoverTasks". +// src/scaffolder/tasks/DatabaseTaskStore.d.ts:67:5 - (ae-undocumented) Missing documentation for "getTask". +// src/scaffolder/tasks/DatabaseTaskStore.d.ts:68:5 - (ae-undocumented) Missing documentation for "createTask". +// src/scaffolder/tasks/DatabaseTaskStore.d.ts:69:5 - (ae-undocumented) Missing documentation for "claimTask". +// src/scaffolder/tasks/DatabaseTaskStore.d.ts:70:5 - (ae-undocumented) Missing documentation for "heartbeatTask". +// src/scaffolder/tasks/DatabaseTaskStore.d.ts:71:5 - (ae-undocumented) Missing documentation for "listStaleTasks". +// src/scaffolder/tasks/DatabaseTaskStore.d.ts:79:5 - (ae-undocumented) Missing documentation for "completeTask". +// src/scaffolder/tasks/DatabaseTaskStore.d.ts:84:5 - (ae-undocumented) Missing documentation for "emitLogEvent". +// src/scaffolder/tasks/DatabaseTaskStore.d.ts:87:5 - (ae-undocumented) Missing documentation for "getTaskState". +// src/scaffolder/tasks/DatabaseTaskStore.d.ts:92:5 - (ae-undocumented) Missing documentation for "saveTaskState". +// src/scaffolder/tasks/DatabaseTaskStore.d.ts:96:5 - (ae-undocumented) Missing documentation for "listEvents". +// src/scaffolder/tasks/DatabaseTaskStore.d.ts:99:5 - (ae-undocumented) Missing documentation for "shutdownTask". +// src/scaffolder/tasks/DatabaseTaskStore.d.ts:100:5 - (ae-undocumented) Missing documentation for "rehydrateWorkspace". +// src/scaffolder/tasks/DatabaseTaskStore.d.ts:104:5 - (ae-undocumented) Missing documentation for "cleanWorkspace". +// src/scaffolder/tasks/DatabaseTaskStore.d.ts:107:5 - (ae-undocumented) Missing documentation for "serializeWorkspace". +// src/scaffolder/tasks/DatabaseTaskStore.d.ts:111:5 - (ae-undocumented) Missing documentation for "cancelTask". +// src/scaffolder/tasks/DatabaseTaskStore.d.ts:114:5 - (ae-undocumented) Missing documentation for "recoverTasks". // src/scaffolder/tasks/StorageTaskBroker.d.ts:24:5 - (ae-undocumented) Missing documentation for "create". // src/scaffolder/tasks/StorageTaskBroker.d.ts:26:5 - (ae-undocumented) Missing documentation for "spec". // src/scaffolder/tasks/StorageTaskBroker.d.ts:27:5 - (ae-undocumented) Missing documentation for "cancelSignal". @@ -907,43 +907,44 @@ export type TemplatePermissionRuleInput< // src/scaffolder/tasks/TaskWorker.d.ts:63:5 - (ae-undocumented) Missing documentation for "stop". // src/scaffolder/tasks/TaskWorker.d.ts:64:5 - (ae-undocumented) Missing documentation for "onReadyToClaimTask". // src/scaffolder/tasks/TaskWorker.d.ts:65:5 - (ae-undocumented) Missing documentation for "runOneTask". -// src/scaffolder/tasks/types.d.ts:124:5 - (ae-undocumented) Missing documentation for "cancelTask". -// src/scaffolder/tasks/types.d.ts:125:5 - (ae-undocumented) Missing documentation for "createTask". -// src/scaffolder/tasks/types.d.ts:126:5 - (ae-undocumented) Missing documentation for "recoverTasks". -// src/scaffolder/tasks/types.d.ts:129:5 - (ae-undocumented) Missing documentation for "getTask". -// src/scaffolder/tasks/types.d.ts:130:5 - (ae-undocumented) Missing documentation for "claimTask". -// src/scaffolder/tasks/types.d.ts:131:5 - (ae-undocumented) Missing documentation for "completeTask". -// src/scaffolder/tasks/types.d.ts:136:5 - (ae-undocumented) Missing documentation for "heartbeatTask". -// src/scaffolder/tasks/types.d.ts:137:5 - (ae-undocumented) Missing documentation for "listStaleTasks". -// src/scaffolder/tasks/types.d.ts:144:5 - (ae-undocumented) Missing documentation for "list". -// src/scaffolder/tasks/types.d.ts:149:5 - (ae-undocumented) Missing documentation for "emitLogEvent". -// src/scaffolder/tasks/types.d.ts:150:5 - (ae-undocumented) Missing documentation for "getTaskState". -// src/scaffolder/tasks/types.d.ts:155:5 - (ae-undocumented) Missing documentation for "saveTaskState". -// src/scaffolder/tasks/types.d.ts:159:5 - (ae-undocumented) Missing documentation for "listEvents". -// src/scaffolder/tasks/types.d.ts:162:5 - (ae-undocumented) Missing documentation for "shutdownTask". -// src/scaffolder/tasks/types.d.ts:163:5 - (ae-undocumented) Missing documentation for "rehydrateWorkspace". -// src/scaffolder/tasks/types.d.ts:167:5 - (ae-undocumented) Missing documentation for "cleanWorkspace". -// src/scaffolder/tasks/types.d.ts:170:5 - (ae-undocumented) Missing documentation for "serializeWorkspace". -// src/service/router.d.ts:19:1 - (ae-undocumented) Missing documentation for "TemplatePermissionRuleInput". -// src/service/router.d.ts:24:1 - (ae-undocumented) Missing documentation for "ActionPermissionRuleInput". -// src/service/router.d.ts:31:5 - (ae-undocumented) Missing documentation for "logger". -// src/service/router.d.ts:32:5 - (ae-undocumented) Missing documentation for "config". -// src/service/router.d.ts:33:5 - (ae-undocumented) Missing documentation for "reader". -// src/service/router.d.ts:34:5 - (ae-undocumented) Missing documentation for "lifecycle". -// src/service/router.d.ts:35:5 - (ae-undocumented) Missing documentation for "database". -// src/service/router.d.ts:36:5 - (ae-undocumented) Missing documentation for "catalogClient". -// src/service/router.d.ts:37:5 - (ae-undocumented) Missing documentation for "scheduler". -// src/service/router.d.ts:38:5 - (ae-undocumented) Missing documentation for "actions". -// src/service/router.d.ts:43:5 - (ae-undocumented) Missing documentation for "taskWorkers". -// src/service/router.d.ts:49:5 - (ae-undocumented) Missing documentation for "taskBroker". -// src/service/router.d.ts:50:5 - (ae-undocumented) Missing documentation for "additionalTemplateFilters". -// src/service/router.d.ts:51:5 - (ae-undocumented) Missing documentation for "additionalTemplateGlobals". -// src/service/router.d.ts:52:5 - (ae-undocumented) Missing documentation for "additionalWorkspaceProviders". -// src/service/router.d.ts:53:5 - (ae-undocumented) Missing documentation for "permissions". -// src/service/router.d.ts:54:5 - (ae-undocumented) Missing documentation for "permissionRules". -// src/service/router.d.ts:55:5 - (ae-undocumented) Missing documentation for "auth". -// src/service/router.d.ts:56:5 - (ae-undocumented) Missing documentation for "httpAuth". -// src/service/router.d.ts:57:5 - (ae-undocumented) Missing documentation for "identity". -// src/service/router.d.ts:58:5 - (ae-undocumented) Missing documentation for "discovery". -// src/service/router.d.ts:59:5 - (ae-undocumented) Missing documentation for "autocompleteHandlers". +// src/scaffolder/tasks/types.d.ts:123:5 - (ae-undocumented) Missing documentation for "cancelTask". +// src/scaffolder/tasks/types.d.ts:124:5 - (ae-undocumented) Missing documentation for "createTask". +// src/scaffolder/tasks/types.d.ts:125:5 - (ae-undocumented) Missing documentation for "recoverTasks". +// src/scaffolder/tasks/types.d.ts:128:5 - (ae-undocumented) Missing documentation for "getTask". +// src/scaffolder/tasks/types.d.ts:129:5 - (ae-undocumented) Missing documentation for "claimTask". +// src/scaffolder/tasks/types.d.ts:130:5 - (ae-undocumented) Missing documentation for "completeTask". +// src/scaffolder/tasks/types.d.ts:135:5 - (ae-undocumented) Missing documentation for "heartbeatTask". +// src/scaffolder/tasks/types.d.ts:136:5 - (ae-undocumented) Missing documentation for "listStaleTasks". +// src/scaffolder/tasks/types.d.ts:143:5 - (ae-undocumented) Missing documentation for "list". +// src/scaffolder/tasks/types.d.ts:163:5 - (ae-undocumented) Missing documentation for "list". +// src/scaffolder/tasks/types.d.ts:182:5 - (ae-undocumented) Missing documentation for "emitLogEvent". +// src/scaffolder/tasks/types.d.ts:183:5 - (ae-undocumented) Missing documentation for "getTaskState". +// src/scaffolder/tasks/types.d.ts:188:5 - (ae-undocumented) Missing documentation for "saveTaskState". +// src/scaffolder/tasks/types.d.ts:192:5 - (ae-undocumented) Missing documentation for "listEvents". +// src/scaffolder/tasks/types.d.ts:195:5 - (ae-undocumented) Missing documentation for "shutdownTask". +// src/scaffolder/tasks/types.d.ts:196:5 - (ae-undocumented) Missing documentation for "rehydrateWorkspace". +// src/scaffolder/tasks/types.d.ts:200:5 - (ae-undocumented) Missing documentation for "cleanWorkspace". +// src/scaffolder/tasks/types.d.ts:203:5 - (ae-undocumented) Missing documentation for "serializeWorkspace". +// src/service/router.d.ts:17:1 - (ae-undocumented) Missing documentation for "TemplatePermissionRuleInput". +// src/service/router.d.ts:22:1 - (ae-undocumented) Missing documentation for "ActionPermissionRuleInput". +// src/service/router.d.ts:30:5 - (ae-undocumented) Missing documentation for "logger". +// src/service/router.d.ts:31:5 - (ae-undocumented) Missing documentation for "config". +// src/service/router.d.ts:32:5 - (ae-undocumented) Missing documentation for "reader". +// src/service/router.d.ts:33:5 - (ae-undocumented) Missing documentation for "lifecycle". +// src/service/router.d.ts:34:5 - (ae-undocumented) Missing documentation for "database". +// src/service/router.d.ts:35:5 - (ae-undocumented) Missing documentation for "catalogClient". +// src/service/router.d.ts:36:5 - (ae-undocumented) Missing documentation for "scheduler". +// src/service/router.d.ts:37:5 - (ae-undocumented) Missing documentation for "actions". +// src/service/router.d.ts:42:5 - (ae-undocumented) Missing documentation for "taskWorkers". +// src/service/router.d.ts:48:5 - (ae-undocumented) Missing documentation for "taskBroker". +// src/service/router.d.ts:49:5 - (ae-undocumented) Missing documentation for "additionalTemplateFilters". +// src/service/router.d.ts:50:5 - (ae-undocumented) Missing documentation for "additionalTemplateGlobals". +// src/service/router.d.ts:51:5 - (ae-undocumented) Missing documentation for "additionalWorkspaceProviders". +// src/service/router.d.ts:52:5 - (ae-undocumented) Missing documentation for "permissions". +// src/service/router.d.ts:53:5 - (ae-undocumented) Missing documentation for "permissionRules". +// src/service/router.d.ts:54:5 - (ae-undocumented) Missing documentation for "auth". +// src/service/router.d.ts:55:5 - (ae-undocumented) Missing documentation for "httpAuth". +// src/service/router.d.ts:56:5 - (ae-undocumented) Missing documentation for "identity". +// src/service/router.d.ts:57:5 - (ae-undocumented) Missing documentation for "discovery". +// src/service/router.d.ts:58:5 - (ae-undocumented) Missing documentation for "autocompleteHandlers". ``` diff --git a/plugins/scaffolder-node/report.api.md b/plugins/scaffolder-node/report.api.md index 3dc385f202..ca48a25aa8 100644 --- a/plugins/scaffolder-node/report.api.md +++ b/plugins/scaffolder-node/report.api.md @@ -521,6 +521,7 @@ export type TemplateGlobal = // src/tasks/types.d.ts:126:5 - (ae-undocumented) Missing documentation for "event$". // src/tasks/types.d.ts:132:5 - (ae-undocumented) Missing documentation for "get". // src/tasks/types.d.ts:133:5 - (ae-undocumented) Missing documentation for "list". +// src/tasks/types.d.ts:153:5 - (ae-undocumented) Missing documentation for "list". // src/types.d.ts:3:1 - (ae-undocumented) Missing documentation for "TemplateFilter". // src/types.d.ts:5:1 - (ae-undocumented) Missing documentation for "TemplateGlobal". ``` diff --git a/plugins/scaffolder/report-alpha.api.md b/plugins/scaffolder/report-alpha.api.md index 9cbbfe5ee9..c8dc7c00e6 100644 --- a/plugins/scaffolder/report-alpha.api.md +++ b/plugins/scaffolder/report-alpha.api.md @@ -313,9 +313,13 @@ export type TemplateWizardPageProps = { // Warnings were encountered during analysis: // -// src/alpha.d.ts:3:15 - (ae-undocumented) Missing documentation for "_default". +// src/alpha.d.ts:5:15 - (ae-undocumented) Missing documentation for "_default". +// src/next/TemplateEditorPage/CustomFieldExplorer.d.ts:4:1 - (ae-undocumented) Missing documentation for "ScaffolderCustomFieldExplorerClassKey". +// src/next/TemplateEditorPage/TemplateEditor.d.ts:6:1 - (ae-undocumented) Missing documentation for "ScaffolderTemplateEditorClassKey". +// src/next/TemplateEditorPage/TemplateFormPreviewer.d.ts:4:1 - (ae-undocumented) Missing documentation for "ScaffolderTemplateFormPreviewerClassKey". // src/next/TemplateListPage/TemplateListPage.d.ts:7:1 - (ae-undocumented) Missing documentation for "TemplateListPageProps". // src/next/TemplateWizardPage/TemplateWizardPage.d.ts:6:1 - (ae-undocumented) Missing documentation for "TemplateWizardPageProps". +// src/translation.d.ts:2:22 - (ae-undocumented) Missing documentation for "scaffolderTranslationRef". // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/search-backend-module-catalog/report.api.md b/plugins/search-backend-module-catalog/report.api.md index 5a1efffcb7..9ab87b31fe 100644 --- a/plugins/search-backend-module-catalog/report.api.md +++ b/plugins/search-backend-module-catalog/report.api.md @@ -55,10 +55,10 @@ export type DefaultCatalogCollatorFactoryOptions = { // Warnings were encountered during analysis: // // src/collators/CatalogCollatorEntityTransformer.d.ts:4:1 - (ae-undocumented) Missing documentation for "CatalogCollatorEntityTransformer". -// src/collators/DefaultCatalogCollatorFactory.d.ts:11:1 - (ae-undocumented) Missing documentation for "DefaultCatalogCollatorFactoryOptions". -// src/collators/DefaultCatalogCollatorFactory.d.ts:39:5 - (ae-undocumented) Missing documentation for "type". -// src/collators/DefaultCatalogCollatorFactory.d.ts:40:5 - (ae-undocumented) Missing documentation for "visibilityPermission". -// src/collators/DefaultCatalogCollatorFactory.d.ts:47:5 - (ae-undocumented) Missing documentation for "fromConfig". -// src/collators/DefaultCatalogCollatorFactory.d.ts:49:5 - (ae-undocumented) Missing documentation for "getCollator". +// src/collators/DefaultCatalogCollatorFactory.d.ts:14:1 - (ae-undocumented) Missing documentation for "DefaultCatalogCollatorFactoryOptions". +// src/collators/DefaultCatalogCollatorFactory.d.ts:43:5 - (ae-undocumented) Missing documentation for "type". +// src/collators/DefaultCatalogCollatorFactory.d.ts:44:5 - (ae-undocumented) Missing documentation for "visibilityPermission". +// src/collators/DefaultCatalogCollatorFactory.d.ts:51:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/collators/DefaultCatalogCollatorFactory.d.ts:53:5 - (ae-undocumented) Missing documentation for "getCollator". // src/collators/defaultCatalogCollatorEntityTransformer.d.ts:3:22 - (ae-undocumented) Missing documentation for "defaultCatalogCollatorEntityTransformer". ``` diff --git a/plugins/search-backend-module-elasticsearch/report.api.md b/plugins/search-backend-module-elasticsearch/report.api.md index 4b55c64495..5cb0671a54 100644 --- a/plugins/search-backend-module-elasticsearch/report.api.md +++ b/plugins/search-backend-module-elasticsearch/report.api.md @@ -538,18 +538,18 @@ export interface OpenSearchNodeOptions { // src/engines/ElasticSearchClientWrapper.d.ts:80:5 - (ae-undocumented) Missing documentation for "getAliases". // src/engines/ElasticSearchClientWrapper.d.ts:83:5 - (ae-undocumented) Missing documentation for "createIndex". // src/engines/ElasticSearchClientWrapper.d.ts:86:5 - (ae-undocumented) Missing documentation for "updateAliases". -// src/engines/ElasticSearchSearchEngine.d.ts:45:1 - (ae-undocumented) Missing documentation for "ElasticSearchHighlightOptions". -// src/engines/ElasticSearchSearchEngine.d.ts:53:1 - (ae-undocumented) Missing documentation for "ElasticSearchHighlightConfig". -// src/engines/ElasticSearchSearchEngine.d.ts:63:1 - (ae-undocumented) Missing documentation for "ElasticSearchSearchEngine". -// src/engines/ElasticSearchSearchEngine.d.ts:72:5 - (ae-undocumented) Missing documentation for "fromConfig". -// src/engines/ElasticSearchSearchEngine.d.ts:94:5 - (ae-undocumented) Missing documentation for "translator". -// src/engines/ElasticSearchSearchEngine.d.ts:95:5 - (ae-undocumented) Missing documentation for "setTranslator". -// src/engines/ElasticSearchSearchEngine.d.ts:96:5 - (ae-undocumented) Missing documentation for "setIndexTemplate". -// src/engines/ElasticSearchSearchEngine.d.ts:97:5 - (ae-undocumented) Missing documentation for "getIndexer". -// src/engines/ElasticSearchSearchEngine.d.ts:98:5 - (ae-undocumented) Missing documentation for "query". -// src/engines/ElasticSearchSearchEngine.d.ts:108:1 - (ae-undocumented) Missing documentation for "decodePageCursor". -// src/engines/ElasticSearchSearchEngineIndexer.d.ts:29:5 - (ae-undocumented) Missing documentation for "indexName". -// src/engines/ElasticSearchSearchEngineIndexer.d.ts:40:5 - (ae-undocumented) Missing documentation for "initialize". -// src/engines/ElasticSearchSearchEngineIndexer.d.ts:41:5 - (ae-undocumented) Missing documentation for "index". -// src/engines/ElasticSearchSearchEngineIndexer.d.ts:42:5 - (ae-undocumented) Missing documentation for "finalize". +// src/engines/ElasticSearchSearchEngine.d.ts:44:1 - (ae-undocumented) Missing documentation for "ElasticSearchHighlightOptions". +// src/engines/ElasticSearchSearchEngine.d.ts:52:1 - (ae-undocumented) Missing documentation for "ElasticSearchHighlightConfig". +// src/engines/ElasticSearchSearchEngine.d.ts:62:1 - (ae-undocumented) Missing documentation for "ElasticSearchSearchEngine". +// src/engines/ElasticSearchSearchEngine.d.ts:71:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/engines/ElasticSearchSearchEngine.d.ts:93:5 - (ae-undocumented) Missing documentation for "translator". +// src/engines/ElasticSearchSearchEngine.d.ts:94:5 - (ae-undocumented) Missing documentation for "setTranslator". +// src/engines/ElasticSearchSearchEngine.d.ts:95:5 - (ae-undocumented) Missing documentation for "setIndexTemplate". +// src/engines/ElasticSearchSearchEngine.d.ts:96:5 - (ae-undocumented) Missing documentation for "getIndexer". +// src/engines/ElasticSearchSearchEngine.d.ts:97:5 - (ae-undocumented) Missing documentation for "query". +// src/engines/ElasticSearchSearchEngine.d.ts:107:1 - (ae-undocumented) Missing documentation for "decodePageCursor". +// src/engines/ElasticSearchSearchEngineIndexer.d.ts:28:5 - (ae-undocumented) Missing documentation for "indexName". +// src/engines/ElasticSearchSearchEngineIndexer.d.ts:39:5 - (ae-undocumented) Missing documentation for "initialize". +// src/engines/ElasticSearchSearchEngineIndexer.d.ts:40:5 - (ae-undocumented) Missing documentation for "index". +// src/engines/ElasticSearchSearchEngineIndexer.d.ts:41:5 - (ae-undocumented) Missing documentation for "finalize". ``` diff --git a/plugins/search-backend-module-explore/report.api.md b/plugins/search-backend-module-explore/report.api.md index 39a732c2ca..8738ad2c86 100644 --- a/plugins/search-backend-module-explore/report.api.md +++ b/plugins/search-backend-module-explore/report.api.md @@ -43,6 +43,7 @@ export type ToolDocumentCollatorFactoryOptions = { // Warnings were encountered during analysis: // +// src/collators/ToolDocumentCollatorFactory.d.ts:19:1 - (ae-undocumented) Missing documentation for "ToolDocumentCollatorFactoryOptions". // src/collators/ToolDocumentCollatorFactory.d.ts:32:5 - (ae-undocumented) Missing documentation for "type". // src/collators/ToolDocumentCollatorFactory.d.ts:37:5 - (ae-undocumented) Missing documentation for "fromConfig". // src/collators/ToolDocumentCollatorFactory.d.ts:38:5 - (ae-undocumented) Missing documentation for "getCollator". diff --git a/plugins/search-backend-module-pg/report.api.md b/plugins/search-backend-module-pg/report.api.md index af9a139261..36346491fa 100644 --- a/plugins/search-backend-module-pg/report.api.md +++ b/plugins/search-backend-module-pg/report.api.md @@ -191,14 +191,14 @@ export interface RawDocumentRow { // Warnings were encountered during analysis: // -// src/PgSearchEngine/PgSearchEngine.d.ts:52:1 - (ae-undocumented) Missing documentation for "PgSearchEngine". -// src/PgSearchEngine/PgSearchEngine.d.ts:64:5 - (ae-undocumented) Missing documentation for "from". -// src/PgSearchEngine/PgSearchEngine.d.ts:69:5 - (ae-undocumented) Missing documentation for "fromConfig". -// src/PgSearchEngine/PgSearchEngine.d.ts:70:5 - (ae-undocumented) Missing documentation for "supported". -// src/PgSearchEngine/PgSearchEngine.d.ts:71:5 - (ae-undocumented) Missing documentation for "translator". -// src/PgSearchEngine/PgSearchEngine.d.ts:72:5 - (ae-undocumented) Missing documentation for "setTranslator". -// src/PgSearchEngine/PgSearchEngine.d.ts:73:5 - (ae-undocumented) Missing documentation for "getIndexer". -// src/PgSearchEngine/PgSearchEngine.d.ts:74:5 - (ae-undocumented) Missing documentation for "query". +// src/PgSearchEngine/PgSearchEngine.d.ts:51:1 - (ae-undocumented) Missing documentation for "PgSearchEngine". +// src/PgSearchEngine/PgSearchEngine.d.ts:63:5 - (ae-undocumented) Missing documentation for "from". +// src/PgSearchEngine/PgSearchEngine.d.ts:68:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/PgSearchEngine/PgSearchEngine.d.ts:69:5 - (ae-undocumented) Missing documentation for "supported". +// src/PgSearchEngine/PgSearchEngine.d.ts:70:5 - (ae-undocumented) Missing documentation for "translator". +// src/PgSearchEngine/PgSearchEngine.d.ts:71:5 - (ae-undocumented) Missing documentation for "setTranslator". +// src/PgSearchEngine/PgSearchEngine.d.ts:72:5 - (ae-undocumented) Missing documentation for "getIndexer". +// src/PgSearchEngine/PgSearchEngine.d.ts:73:5 - (ae-undocumented) Missing documentation for "query". // src/PgSearchEngine/PgSearchEngineIndexer.d.ts:6:1 - (ae-undocumented) Missing documentation for "PgSearchEngineIndexerOptions". // src/PgSearchEngine/PgSearchEngineIndexer.d.ts:13:1 - (ae-undocumented) Missing documentation for "PgSearchEngineIndexer". // src/PgSearchEngine/PgSearchEngineIndexer.d.ts:20:5 - (ae-undocumented) Missing documentation for "initialize". diff --git a/plugins/search-backend-module-techdocs/report.api.md b/plugins/search-backend-module-techdocs/report.api.md index 3ef7bea9c1..49336d223d 100644 --- a/plugins/search-backend-module-techdocs/report.api.md +++ b/plugins/search-backend-module-techdocs/report.api.md @@ -57,10 +57,10 @@ export type TechDocsCollatorFactoryOptions = { // Warnings were encountered during analysis: // -// src/collators/DefaultTechDocsCollatorFactory.d.ts:34:5 - (ae-undocumented) Missing documentation for "type". -// src/collators/DefaultTechDocsCollatorFactory.d.ts:35:5 - (ae-undocumented) Missing documentation for "visibilityPermission". -// src/collators/DefaultTechDocsCollatorFactory.d.ts:45:5 - (ae-undocumented) Missing documentation for "fromConfig". -// src/collators/DefaultTechDocsCollatorFactory.d.ts:46:5 - (ae-undocumented) Missing documentation for "getCollator". +// 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/TechDocsCollatorEntityTransformer.d.ts:4:1 - (ae-undocumented) Missing documentation for "TechDocsCollatorEntityTransformer". // src/collators/defaultTechDocsCollatorEntityTransformer.d.ts:3:22 - (ae-undocumented) Missing documentation for "defaultTechDocsCollatorEntityTransformer". ``` diff --git a/plugins/search-backend-node/report.api.md b/plugins/search-backend-node/report.api.md index b2dae26f86..2086e3a351 100644 --- a/plugins/search-backend-node/report.api.md +++ b/plugins/search-backend-node/report.api.md @@ -213,9 +213,9 @@ export type TestPipelineResult = { // Warnings were encountered during analysis: // -// src/collators/NewlineDelimitedJsonCollatorFactory.d.ts:52:5 - (ae-undocumented) Missing documentation for "type". -// src/collators/NewlineDelimitedJsonCollatorFactory.d.ts:53:5 - (ae-undocumented) Missing documentation for "visibilityPermission". -// src/collators/NewlineDelimitedJsonCollatorFactory.d.ts:65:5 - (ae-undocumented) Missing documentation for "getCollator". +// src/collators/NewlineDelimitedJsonCollatorFactory.d.ts:51:5 - (ae-undocumented) Missing documentation for "type". +// src/collators/NewlineDelimitedJsonCollatorFactory.d.ts:52:5 - (ae-undocumented) Missing documentation for "visibilityPermission". +// src/collators/NewlineDelimitedJsonCollatorFactory.d.ts:64:5 - (ae-undocumented) Missing documentation for "getCollator". // src/engines/LunrSearchEngine.d.ts:25:5 - (ae-undocumented) Missing documentation for "lunrIndices". // src/engines/LunrSearchEngine.d.ts:26:5 - (ae-undocumented) Missing documentation for "docStore". // src/engines/LunrSearchEngine.d.ts:27:5 - (ae-undocumented) Missing documentation for "logger". diff --git a/plugins/search-backend/report.api.md b/plugins/search-backend/report.api.md index 8f739c76f1..42714f5070 100644 --- a/plugins/search-backend/report.api.md +++ b/plugins/search-backend/report.api.md @@ -31,6 +31,6 @@ export type RouterOptions = { // Warnings were encountered during analysis: // -// src/service/router.d.ts:10:1 - (ae-undocumented) Missing documentation for "RouterOptions". -// src/service/router.d.ts:23:1 - (ae-undocumented) Missing documentation for "createRouter". +// src/service/router.d.ts:11:1 - (ae-undocumented) Missing documentation for "RouterOptions". +// src/service/router.d.ts:25:1 - (ae-undocumented) Missing documentation for "createRouter". ``` diff --git a/plugins/search-react/report-alpha.api.md b/plugins/search-react/report-alpha.api.md index e49b0bbeee..2397995355 100644 --- a/plugins/search-react/report-alpha.api.md +++ b/plugins/search-react/report-alpha.api.md @@ -71,5 +71,12 @@ export interface SearchResultListItemBlueprintParams { predicate?: SearchResultItemExtensionPredicate; } +// Warnings were encountered during analysis: +// +// src/alpha/blueprints/SearchResultListItemBlueprint.d.ts:3:1 - (ae-undocumented) Missing documentation for "SearchResultListItemBlueprintParams". +// src/alpha/blueprints/types.d.ts:5:1 - (ae-undocumented) Missing documentation for "BaseSearchResultListItemProps". +// src/alpha/blueprints/types.d.ts:10:1 - (ae-undocumented) Missing documentation for "SearchResultItemExtensionComponent". +// src/alpha/blueprints/types.d.ts:12:1 - (ae-undocumented) Missing documentation for "SearchResultItemExtensionPredicate". + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/search-react/report.api.md b/plugins/search-react/report.api.md index 46097fe188..e0698da6e2 100644 --- a/plugins/search-react/report.api.md +++ b/plugins/search-react/report.api.md @@ -492,7 +492,8 @@ export const useSearchResultListItemExtensions: ( // src/api.d.ts:18:5 - (ae-undocumented) Missing documentation for "mockedResults". // src/api.d.ts:20:5 - (ae-undocumented) Missing documentation for "query". // src/components/DefaultResultListItem/DefaultResultListItem.d.ts:26:15 - (ae-undocumented) Missing documentation for "HigherOrderDefaultResultListItem". -// src/components/HighlightedSearchResultText/HighlightedSearchResultText.d.ts:15:22 - (ae-undocumented) Missing documentation for "HighlightedSearchResultText". +// src/components/HighlightedSearchResultText/HighlightedSearchResultText.d.ts:3:1 - (ae-undocumented) Missing documentation for "HighlightedSearchResultTextClassKey". +// src/components/HighlightedSearchResultText/HighlightedSearchResultText.d.ts:17:22 - (ae-undocumented) Missing documentation for "HighlightedSearchResultText". // src/components/SearchFilter/SearchFilter.Autocomplete.d.ts:6:1 - (ae-undocumented) Missing documentation for "SearchAutocompleteFilterProps". // src/components/SearchFilter/SearchFilter.Autocomplete.d.ts:14:22 - (ae-undocumented) Missing documentation for "AutocompleteFilter". // src/components/SearchFilter/SearchFilter.d.ts:6:1 - (ae-undocumented) Missing documentation for "SearchFilterComponentProps". diff --git a/plugins/search/report-alpha.api.md b/plugins/search/report-alpha.api.md index 052340c432..1d9bd7a6f6 100644 --- a/plugins/search/report-alpha.api.md +++ b/plugins/search/report-alpha.api.md @@ -196,10 +196,10 @@ export const searchPage: ExtensionDefinition<{ // Warnings were encountered during analysis: // -// src/alpha.d.ts:2:22 - (ae-undocumented) Missing documentation for "searchApi". -// src/alpha.d.ts:4:22 - (ae-undocumented) Missing documentation for "searchPage". -// src/alpha.d.ts:12:22 - (ae-undocumented) Missing documentation for "searchNavItem". -// src/alpha.d.ts:18:15 - (ae-undocumented) Missing documentation for "_default". +// src/alpha.d.ts:3:22 - (ae-undocumented) Missing documentation for "searchApi". +// src/alpha.d.ts:15:22 - (ae-undocumented) Missing documentation for "searchPage". +// src/alpha.d.ts:47:22 - (ae-undocumented) Missing documentation for "searchNavItem". +// src/alpha.d.ts:65:15 - (ae-undocumented) Missing documentation for "_default". // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/search/report.api.md b/plugins/search/report.api.md index 5ff64322e2..7bb1dca05e 100644 --- a/plugins/search/report.api.md +++ b/plugins/search/report.api.md @@ -143,16 +143,16 @@ export function useSearchModal(initialState?: boolean): SearchModalValue; // Warnings were encountered during analysis: // -// src/components/SearchModal/SearchModal.d.ts:5:1 - (ae-undocumented) Missing documentation for "SearchModalChildrenProps". -// src/components/SearchModal/SearchModal.d.ts:14:1 - (ae-undocumented) Missing documentation for "SearchModalProps". -// src/components/SearchModal/SearchModal.d.ts:41:22 - (ae-undocumented) Missing documentation for "SearchModal". +// src/components/SearchModal/SearchModal.d.ts:6:1 - (ae-undocumented) Missing documentation for "SearchModalChildrenProps". +// src/components/SearchModal/SearchModal.d.ts:19:1 - (ae-undocumented) Missing documentation for "SearchModalProps". +// src/components/SearchModal/SearchModal.d.ts:50:22 - (ae-undocumented) Missing documentation for "SearchModal". // src/components/SearchPage/SearchPage.d.ts:6:22 - (ae-undocumented) Missing documentation for "SearchPage". // src/components/SearchType/SearchType.Accordion.d.ts:5:1 - (ae-undocumented) Missing documentation for "SearchTypeAccordionProps". // src/components/SearchType/SearchType.Tabs.d.ts:5:1 - (ae-undocumented) Missing documentation for "SearchTypeTabsProps". // src/components/SearchType/SearchType.d.ts:18:15 - (ae-undocumented) Missing documentation for "SearchType". // src/components/SidebarSearch/SidebarSearch.d.ts:14:22 - (ae-undocumented) Missing documentation for "SidebarSearch". -// src/plugin.d.ts:6:22 - (ae-undocumented) Missing documentation for "searchPlugin". -// src/plugin.d.ts:12:22 - (ae-undocumented) Missing documentation for "SearchPage". -// src/plugin.d.ts:16:22 - (ae-undocumented) Missing documentation for "SidebarSearchModal". -// src/plugin.d.ts:20:22 - (ae-undocumented) Missing documentation for "HomePageSearchBar". +// src/plugin.d.ts:7:22 - (ae-undocumented) Missing documentation for "searchPlugin". +// src/plugin.d.ts:13:22 - (ae-undocumented) Missing documentation for "SearchPage". +// src/plugin.d.ts:17:22 - (ae-undocumented) Missing documentation for "SidebarSearchModal". +// src/plugin.d.ts:21:22 - (ae-undocumented) Missing documentation for "HomePageSearchBar". ``` diff --git a/plugins/signals-backend/report.api.md b/plugins/signals-backend/report.api.md index 5e3069f382..df68dcd62b 100644 --- a/plugins/signals-backend/report.api.md +++ b/plugins/signals-backend/report.api.md @@ -43,16 +43,16 @@ export default signalsPlugin; // Warnings were encountered during analysis: // -// src/service/router.d.ts:8:1 - (ae-undocumented) Missing documentation for "RouterOptions". -// src/service/router.d.ts:9:5 - (ae-undocumented) Missing documentation for "logger". -// src/service/router.d.ts:10:5 - (ae-undocumented) Missing documentation for "events". -// src/service/router.d.ts:11:5 - (ae-undocumented) Missing documentation for "identity". -// src/service/router.d.ts:12:5 - (ae-undocumented) Missing documentation for "discovery". -// src/service/router.d.ts:13:5 - (ae-undocumented) Missing documentation for "config". -// src/service/router.d.ts:14:5 - (ae-undocumented) Missing documentation for "lifecycle". -// src/service/router.d.ts:15:5 - (ae-undocumented) Missing documentation for "auth". -// src/service/router.d.ts:16:5 - (ae-undocumented) Missing documentation for "userInfo". -// src/service/router.d.ts:19:1 - (ae-undocumented) Missing documentation for "createRouter". +// src/deprecated.d.ts:10:1 - (ae-undocumented) Missing documentation for "RouterOptions". +// src/deprecated.d.ts:11:5 - (ae-undocumented) Missing documentation for "logger". +// src/deprecated.d.ts:12:5 - (ae-undocumented) Missing documentation for "events". +// src/deprecated.d.ts:13:5 - (ae-undocumented) Missing documentation for "identity". +// src/deprecated.d.ts:14:5 - (ae-undocumented) Missing documentation for "discovery". +// src/deprecated.d.ts:15:5 - (ae-undocumented) Missing documentation for "config". +// src/deprecated.d.ts:16:5 - (ae-undocumented) Missing documentation for "lifecycle". +// src/deprecated.d.ts:17:5 - (ae-undocumented) Missing documentation for "auth". +// src/deprecated.d.ts:18:5 - (ae-undocumented) Missing documentation for "userInfo". +// src/deprecated.d.ts:24:1 - (ae-undocumented) Missing documentation for "createRouter". // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/signals/report.api.md b/plugins/signals/report.api.md index 27a4a3fea5..049f50b2f2 100644 --- a/plugins/signals/report.api.md +++ b/plugins/signals/report.api.md @@ -44,6 +44,7 @@ export const signalsPlugin: BackstagePlugin<{}, {}>; // src/api/SignalClient.d.ts:16:5 - (ae-undocumented) Missing documentation for "create". // src/api/SignalClient.d.ts:23:5 - (ae-undocumented) Missing documentation for "subscribe". // src/plugin.d.ts:2:22 - (ae-undocumented) Missing documentation for "signalsPlugin". +// src/plugin.d.ts:4:22 - (ae-undocumented) Missing documentation for "SignalsDisplay". // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/techdocs-backend/report.api.md b/plugins/techdocs-backend/report.api.md index 59d21df21c..6b84666e50 100644 --- a/plugins/techdocs-backend/report.api.md +++ b/plugins/techdocs-backend/report.api.md @@ -118,11 +118,11 @@ export * from '@backstage/plugin-techdocs-node'; // src/index.d.ts:16:1 - (ae-undocumented) Missing documentation for "DocsBuildStrategy". // src/index.d.ts:21:1 - (ae-undocumented) Missing documentation for "ShouldBuildParameters". // src/index.d.ts:28:1 - (ae-undocumented) Missing documentation for "TechDocsDocument". -// src/search/DefaultTechDocsCollator.d.ts:31:5 - (ae-undocumented) Missing documentation for "type". -// src/search/DefaultTechDocsCollator.d.ts:32:5 - (ae-undocumented) Missing documentation for "visibilityPermission". -// src/search/DefaultTechDocsCollator.d.ts:34:5 - (ae-undocumented) Missing documentation for "fromConfig". -// src/search/DefaultTechDocsCollator.d.ts:35:5 - (ae-undocumented) Missing documentation for "execute". -// src/search/DefaultTechDocsCollator.d.ts:36:5 - (ae-undocumented) Missing documentation for "applyArgsToFormat". +// src/search/DefaultTechDocsCollator.d.ts:32:5 - (ae-undocumented) Missing documentation for "type". +// src/search/DefaultTechDocsCollator.d.ts:33:5 - (ae-undocumented) Missing documentation for "visibilityPermission". +// src/search/DefaultTechDocsCollator.d.ts:35:5 - (ae-undocumented) Missing documentation for "fromConfig". +// src/search/DefaultTechDocsCollator.d.ts:36:5 - (ae-undocumented) Missing documentation for "execute". +// src/search/DefaultTechDocsCollator.d.ts:37:5 - (ae-undocumented) Missing documentation for "applyArgsToFormat". // src/search/index.d.ts:12:1 - (ae-undocumented) Missing documentation for "TechDocsCollatorFactoryOptions". // src/search/index.d.ts:17:22 - (ae-undocumented) Missing documentation for "DefaultTechDocsCollatorFactory". ``` diff --git a/plugins/techdocs-common/api-report.md b/plugins/techdocs-common/api-report.md deleted file mode 100644 index c7e1829a28..0000000000 --- a/plugins/techdocs-common/api-report.md +++ /dev/null @@ -1,11 +0,0 @@ -## API Report File for "@backstage/plugin-techdocs-common" - -> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). - -```ts -// @public (undocumented) -export const TECHDOCS_ANNOTATION = 'backstage.io/techdocs-ref'; - -// @public (undocumented) -export const TECHDOCS_EXTERNAL_ANNOTATION = 'backstage.io/techdocs-entity'; -``` diff --git a/plugins/techdocs/report-alpha.api.md b/plugins/techdocs/report-alpha.api.md index c2f75be11e..075cb34bfa 100644 --- a/plugins/techdocs/report-alpha.api.md +++ b/plugins/techdocs/report-alpha.api.md @@ -316,8 +316,8 @@ export const techDocsSearchResultListItemExtension: ExtensionDefinition<{ // Warnings were encountered during analysis: // -// src/alpha.d.ts:2:22 - (ae-undocumented) Missing documentation for "techDocsSearchResultListItemExtension". -// src/alpha.d.ts:16:15 - (ae-undocumented) Missing documentation for "_default". +// src/alpha.d.ts:3:22 - (ae-undocumented) Missing documentation for "techDocsSearchResultListItemExtension". +// src/alpha.d.ts:35:15 - (ae-undocumented) Missing documentation for "_default". // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/techdocs/report.api.md b/plugins/techdocs/report.api.md index 3d90d05eca..3ecf2cf7d2 100644 --- a/plugins/techdocs/report.api.md +++ b/plugins/techdocs/report.api.md @@ -537,5 +537,5 @@ export class TechDocsStorageClient implements TechDocsStorageApi_2 { // src/home/components/TechDocsCustomHome.d.ts:29:5 - (ae-undocumented) Missing documentation for "panels". // src/index.d.ts:21:1 - (ae-undocumented) Missing documentation for "DeprecatedTechDocsMetadata". // src/index.d.ts:27:1 - (ae-undocumented) Missing documentation for "DeprecatedTechDocsEntityMetadata". -// src/reader/components/TechDocsReaderPage/TechDocsReaderPage.d.ts:26:1 - (ae-undocumented) Missing documentation for "TechDocsReaderPageProps". +// src/reader/components/TechDocsReaderPage/TechDocsReaderPage.d.ts:27:1 - (ae-undocumented) Missing documentation for "TechDocsReaderPageProps". ``` diff --git a/plugins/user-settings-backend/report.api.md b/plugins/user-settings-backend/report.api.md index ac33b9af5d..04aecca574 100644 --- a/plugins/user-settings-backend/report.api.md +++ b/plugins/user-settings-backend/report.api.md @@ -18,12 +18,5 @@ export type RouterOptions = { signals?: SignalsService; }; -// Warnings were encountered during analysis: -// -// src/service/router.d.ts:9:1 - (ae-undocumented) Missing documentation for "RouterOptions". -// src/service/router.d.ts:10:5 - (ae-undocumented) Missing documentation for "database". -// src/service/router.d.ts:11:5 - (ae-undocumented) Missing documentation for "identity". -// src/service/router.d.ts:12:5 - (ae-undocumented) Missing documentation for "signals". - // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/user-settings/report-alpha.api.md b/plugins/user-settings/report-alpha.api.md index 299bbc3498..d9dad32623 100644 --- a/plugins/user-settings/report-alpha.api.md +++ b/plugins/user-settings/report-alpha.api.md @@ -129,8 +129,8 @@ export const userSettingsTranslationRef: TranslationRef< // Warnings were encountered during analysis: // -// src/alpha.d.ts:3:22 - (ae-undocumented) Missing documentation for "settingsNavItem". -// src/alpha.d.ts:11:15 - (ae-undocumented) Missing documentation for "_default". +// src/alpha.d.ts:4:22 - (ae-undocumented) Missing documentation for "settingsNavItem". +// src/alpha.d.ts:24:15 - (ae-undocumented) Missing documentation for "_default". // src/translation.d.ts:2:22 - (ae-undocumented) Missing documentation for "userSettingsTranslationRef". // (No @packageDocumentation comment for this package) diff --git a/yarn.lock b/yarn.lock index 7a0bff43c9..e3f5be5bd2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7969,8 +7969,8 @@ __metadata: "@backstage/errors": "workspace:^" "@backstage/types": "workspace:^" "@manypkg/get-packages": ^1.1.3 - "@microsoft/api-documenter": ^7.22.33 - "@microsoft/api-extractor": ^7.36.4 + "@microsoft/api-documenter": ^7.25.7 + "@microsoft/api-extractor": ^7.47.2 "@openapitools/openapi-generator-cli": ^2.7.0 "@stoplight/spectral-core": ^1.18.0 "@stoplight/spectral-formatters": ^1.1.0 @@ -10753,53 +10753,54 @@ __metadata: languageName: node linkType: hard -"@microsoft/api-documenter@npm:^7.22.33": - version: 7.22.33 - resolution: "@microsoft/api-documenter@npm:7.22.33" +"@microsoft/api-documenter@npm:^7.25.7": + version: 7.25.14 + resolution: "@microsoft/api-documenter@npm:7.25.14" dependencies: - "@microsoft/api-extractor-model": 7.27.6 - "@microsoft/tsdoc": 0.14.2 - "@rushstack/node-core-library": 3.59.7 - "@rushstack/ts-command-line": 4.15.2 - colors: ~1.2.1 + "@microsoft/api-extractor-model": 7.29.8 + "@microsoft/tsdoc": ~0.15.0 + "@rushstack/node-core-library": 5.9.0 + "@rushstack/terminal": 0.14.2 + "@rushstack/ts-command-line": 4.22.8 js-yaml: ~3.13.1 resolve: ~1.22.1 bin: api-documenter: bin/api-documenter - checksum: b2aa75823c3a5bf65ce87b56bd85dfa276ff155eb2244187e163e4eb8f4a2daf15e39e9b5d1dea13f854309d9562ab845ff6c7c8b4973e409593852c3bc058f0 + checksum: 1b4f5054c93ab77b4de196c07432d29ac40a488dd33881ad230897f4c393859ef05ab3503163ecaa4914ba4043b33070d9887bdde64a496a7d27dbcd94583622 languageName: node linkType: hard -"@microsoft/api-extractor-model@npm:7.27.6": - version: 7.27.6 - resolution: "@microsoft/api-extractor-model@npm:7.27.6" +"@microsoft/api-extractor-model@npm:7.29.8": + version: 7.29.8 + resolution: "@microsoft/api-extractor-model@npm:7.29.8" dependencies: - "@microsoft/tsdoc": 0.14.2 - "@microsoft/tsdoc-config": ~0.16.1 - "@rushstack/node-core-library": 3.59.7 - checksum: 7867feaf3a0e5accfcce3a77681248a319952a266cffc644e4f8f7df1c9e1d55adb5124df901e8cca594bb3e12d361d1fcb2bffbdbb4b20fe3113928f6535975 + "@microsoft/tsdoc": ~0.15.0 + "@microsoft/tsdoc-config": ~0.17.0 + "@rushstack/node-core-library": 5.9.0 + checksum: 95a6b5df089d8bf44555f4565a6f0eda9323917266b2f4730b606aeb2c7f36df7c2cbcae9ca48a9198af7a33442cda8ce2c791e0f4c7c92f3bdaee6c3190b1f5 languageName: node linkType: hard -"@microsoft/api-extractor@npm:^7.36.4": - version: 7.36.4 - resolution: "@microsoft/api-extractor@npm:7.36.4" +"@microsoft/api-extractor@npm:^7.47.2": + version: 7.47.9 + resolution: "@microsoft/api-extractor@npm:7.47.9" dependencies: - "@microsoft/api-extractor-model": 7.27.6 - "@microsoft/tsdoc": 0.14.2 - "@microsoft/tsdoc-config": ~0.16.1 - "@rushstack/node-core-library": 3.59.7 - "@rushstack/rig-package": 0.4.1 - "@rushstack/ts-command-line": 4.15.2 - colors: ~1.2.1 + "@microsoft/api-extractor-model": 7.29.8 + "@microsoft/tsdoc": ~0.15.0 + "@microsoft/tsdoc-config": ~0.17.0 + "@rushstack/node-core-library": 5.9.0 + "@rushstack/rig-package": 0.5.3 + "@rushstack/terminal": 0.14.2 + "@rushstack/ts-command-line": 4.22.8 lodash: ~4.17.15 + minimatch: ~3.0.3 resolve: ~1.22.1 semver: ~7.5.4 source-map: ~0.6.1 - typescript: ~5.0.4 + typescript: 5.4.2 bin: api-extractor: bin/api-extractor - checksum: 92559325cf2407fa27cb9675772956511fa35005f295cdb4dc47abd7ef9c77ba61b0f684c2e952301a76dd2cfa9e398840c8f3d9117d621300e12b0ecfbf8147 + checksum: 5e96654b388359bd9a1fb85ea7698921ca0f9dfa9c57e48fc9d28625107fea54863d57c82f4080686f190ae0d6fcd8b7fa7c070e7b8acb359b5cd62137e2bb23 languageName: node linkType: hard @@ -10817,22 +10818,22 @@ __metadata: languageName: node linkType: hard -"@microsoft/tsdoc-config@npm:~0.16.1": - version: 0.16.2 - resolution: "@microsoft/tsdoc-config@npm:0.16.2" +"@microsoft/tsdoc-config@npm:~0.17.0": + version: 0.17.0 + resolution: "@microsoft/tsdoc-config@npm:0.17.0" dependencies: - "@microsoft/tsdoc": 0.14.2 - ajv: ~6.12.6 + "@microsoft/tsdoc": 0.15.0 + ajv: ~8.12.0 jju: ~1.4.0 - resolve: ~1.19.0 - checksum: 12b0d703154076bcaac75ca42e804e4fc292672396441e54346d7eadd0d6b57f90980eda2b1bab89b224af86da34a2389f9054002e282011e795ca5919a4386f + resolve: ~1.22.2 + checksum: dd2de8247d0fc29608da83edf4ab73a21370f6ce10d089853303e91b135fdb1436ccec3bd1024f235dd3180dfe5dae7342989eadd03af55cf06f0e974e5fc213 languageName: node linkType: hard -"@microsoft/tsdoc@npm:0.14.2": - version: 0.14.2 - resolution: "@microsoft/tsdoc@npm:0.14.2" - checksum: b167c89e916ba73ee20b9c9d5dba6aa3a0de25ed3d50050e8a344dca7cd43cb2e1059bd515c820369b6e708901dd3fda476a42bc643ca74a35671ce77f724a3a +"@microsoft/tsdoc@npm:0.15.0, @microsoft/tsdoc@npm:~0.15.0": + version: 0.15.0 + resolution: "@microsoft/tsdoc@npm:0.15.0" + checksum: 3f693cff07b220b68563e3f86e9f94a9c8d0791a7446f76149c7d62ae5ed5cb4578bb48b9b5f9baa3dd9a9f77be81903c74654a41e0ca4ecf78936654952a8d4 languageName: node linkType: hard @@ -14472,45 +14473,61 @@ __metadata: languageName: node linkType: hard -"@rushstack/node-core-library@npm:3.59.7": - version: 3.59.7 - resolution: "@rushstack/node-core-library@npm:3.59.7" +"@rushstack/node-core-library@npm:5.9.0": + version: 5.9.0 + resolution: "@rushstack/node-core-library@npm:5.9.0" dependencies: - colors: ~1.2.1 + ajv: ~8.13.0 + ajv-draft-04: ~1.0.0 + ajv-formats: ~3.0.1 fs-extra: ~7.0.1 import-lazy: ~4.0.0 jju: ~1.4.0 resolve: ~1.22.1 semver: ~7.5.4 - z-schema: ~5.0.2 peerDependencies: "@types/node": "*" peerDependenciesMeta: "@types/node": optional: true - checksum: 57819d62fd662a6cf3306bf7d39c11204e094a2d5c2210639c2ac5baee58c183c02023203963cd0484a5623fd9f5dea7a223df843fb52b46a18508e6118cdc19 + checksum: beb558f118a796260f7df38b48b6669a94bbdb9711715785e0c5a426bd3a38c14721c03fc05e7a33883ec25a331ef0fb9e36438bb451ace021a7248a4f1fc74b languageName: node linkType: hard -"@rushstack/rig-package@npm:0.4.1": - version: 0.4.1 - resolution: "@rushstack/rig-package@npm:0.4.1" +"@rushstack/rig-package@npm:0.5.3": + version: 0.5.3 + resolution: "@rushstack/rig-package@npm:0.5.3" dependencies: resolve: ~1.22.1 strip-json-comments: ~3.1.1 - checksum: 68c5ec6c446c35939fca0444fa48e5beda736e3a5816e8b44d83df6ba8b9a2caf0ceddbdc866cd8ad3b523e42877cf6ecd467bc7839e3d618a9bb1c4b3e0b5a5 + checksum: bf3eadfc434bff273893efd22b319fe159d0e3b95729cb32ce3ad9f4ab4b6fabe3c4dd7f03ee0ddc7b480f0d989e908349eae6d6dce3500f896728a085af7aab languageName: node linkType: hard -"@rushstack/ts-command-line@npm:4.15.2": - version: 4.15.2 - resolution: "@rushstack/ts-command-line@npm:4.15.2" +"@rushstack/terminal@npm:0.14.2": + version: 0.14.2 + resolution: "@rushstack/terminal@npm:0.14.2" dependencies: + "@rushstack/node-core-library": 5.9.0 + supports-color: ~8.1.1 + peerDependencies: + "@types/node": "*" + peerDependenciesMeta: + "@types/node": + optional: true + checksum: 90d38e6979737dcd97fdfdcebcc378194eed32a994341846235769273b6446b702e53e51e18fc8a373e8ed989c5622216aa6804198b8c7ae0e65cd6b103b90a1 + languageName: node + linkType: hard + +"@rushstack/ts-command-line@npm:4.22.8": + version: 4.22.8 + resolution: "@rushstack/ts-command-line@npm:4.22.8" + dependencies: + "@rushstack/terminal": 0.14.2 "@types/argparse": 1.0.38 argparse: ~1.0.9 - colors: ~1.2.1 string-argv: ~0.3.1 - checksum: c80dcfc99630ee51c6654c58ff41f69a3bd89c38e41d9871692bc73ee3c938ced79f8b75e182e492cafb2f6ddeb0628606856af494a0259ff6fac5b248996bed + checksum: b0108e4b567c364a7c62b30dc3e4d17130b6f8ba16a0457c56b8c898ba84316e72726a4e043ca5183da7bf5d0189aed585ab3ac8bce5991b8e80ac94d333cd6c languageName: node linkType: hard @@ -20122,6 +20139,20 @@ __metadata: languageName: node linkType: hard +"ajv-formats@npm:~3.0.1": + version: 3.0.1 + resolution: "ajv-formats@npm:3.0.1" + dependencies: + ajv: ^8.0.0 + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + checksum: f4e1fe232d67fcafc02eafe373a7a9962351e0439dd0736647ca75c93c3da23b430b6502c255ab4315410ae330d4f3013ac9fe226c40b2524ca93a58e786d086 + languageName: node + linkType: hard + "ajv-i18n@npm:^4.2.0": version: 4.2.0 resolution: "ajv-i18n@npm:4.2.0" @@ -20151,7 +20182,7 @@ __metadata: languageName: node linkType: hard -"ajv@npm:^6.12.2, ajv@npm:^6.12.4, ajv@npm:^6.12.5, ajv@npm:^6.5.5, ajv@npm:~6.12.6": +"ajv@npm:^6.12.2, ajv@npm:^6.12.4, ajv@npm:^6.12.5, ajv@npm:^6.5.5": version: 6.12.6 resolution: "ajv@npm:6.12.6" dependencies: @@ -20175,6 +20206,30 @@ __metadata: languageName: node linkType: hard +"ajv@npm:~8.12.0": + version: 8.12.0 + resolution: "ajv@npm:8.12.0" + dependencies: + fast-deep-equal: ^3.1.1 + json-schema-traverse: ^1.0.0 + require-from-string: ^2.0.2 + uri-js: ^4.2.2 + checksum: 4dc13714e316e67537c8b31bc063f99a1d9d9a497eb4bbd55191ac0dcd5e4985bbb71570352ad6f1e76684fb6d790928f96ba3b2d4fd6e10024be9612fe3f001 + languageName: node + linkType: hard + +"ajv@npm:~8.13.0": + version: 8.13.0 + resolution: "ajv@npm:8.13.0" + dependencies: + fast-deep-equal: ^3.1.3 + json-schema-traverse: ^1.0.0 + require-from-string: ^2.0.2 + uri-js: ^4.4.1 + checksum: 6de82d0b2073e645ca3300561356ddda0234f39b35d2125a8700b650509b296f41c00ab69f53178bbe25ad688bd6ac3747ab44101f2f4bd245952e8fd6ccc3c1 + languageName: node + linkType: hard + "algoliasearch@npm:^4.2.0": version: 4.23.2 resolution: "algoliasearch@npm:4.23.2" @@ -22691,13 +22746,6 @@ __metadata: languageName: node linkType: hard -"colors@npm:~1.2.1": - version: 1.2.5 - resolution: "colors@npm:1.2.5" - checksum: b6e23de735f68b72d5cdf6fd854ca43d1b66d82dcf54bda0b788083b910164a040f2c4edf23c670d36a7a2d8f1b7d6e62e3292703e4642691e6ccaa1c62d8f74 - languageName: node - linkType: hard - "colorspace@npm:1.1.x": version: 1.1.2 resolution: "colorspace@npm:1.1.2" @@ -22780,7 +22828,7 @@ __metadata: languageName: node linkType: hard -"commander@npm:^2.19.0, commander@npm:^2.20.0, commander@npm:^2.7.1": +"commander@npm:^2.19.0, commander@npm:^2.20.0": version: 2.20.3 resolution: "commander@npm:2.20.3" checksum: ab8c07884e42c3a8dbc5dd9592c606176c7eb5c1ca5ff274bcf907039b2c41de3626f684ea75ccf4d361ba004bbaff1f577d5384c155f3871e456bdf27becf9e @@ -29579,7 +29627,7 @@ __metadata: languageName: node linkType: hard -"is-core-module@npm:^2.1.0, is-core-module@npm:^2.13.0, is-core-module@npm:^2.15.1": +"is-core-module@npm:^2.13.0, is-core-module@npm:^2.15.1": version: 2.15.1 resolution: "is-core-module@npm:2.15.1" dependencies: @@ -33742,6 +33790,15 @@ __metadata: languageName: node linkType: hard +"minimatch@npm:~3.0.3": + version: 3.0.8 + resolution: "minimatch@npm:3.0.8" + dependencies: + brace-expansion: ^1.1.7 + checksum: 850cca179cad715133132693e6963b0db64ab0988c4d211415b087fc23a3e46321e2c5376a01bf5623d8782aba8bdf43c571e2e902e51fdce7175c7215c29f8b + languageName: node + linkType: hard + "minimist@npm:^1.2.0, minimist@npm:^1.2.3, minimist@npm:^1.2.5, minimist@npm:^1.2.6, minimist@npm:^1.2.8": version: 1.2.8 resolution: "minimist@npm:1.2.8" @@ -36011,7 +36068,7 @@ __metadata: languageName: node linkType: hard -"path-parse@npm:^1.0.6, path-parse@npm:^1.0.7": +"path-parse@npm:^1.0.7": version: 1.0.7 resolution: "path-parse@npm:1.0.7" checksum: 49abf3d81115642938a8700ec580da6e830dde670be21893c62f4e10bd7dd4c3742ddc603fe24f898cba7eb0c6bc1777f8d9ac14185d34540c6d4d80cd9cae8a @@ -39027,7 +39084,7 @@ __metadata: languageName: node linkType: hard -"resolve@npm:1.22.8, resolve@npm:^1.1.6, resolve@npm:^1.14.2, resolve@npm:^1.17.0, resolve@npm:^1.19.0, resolve@npm:^1.20.0, resolve@npm:^1.22.1, resolve@npm:^1.22.4, resolve@npm:~1.22.1": +"resolve@npm:1.22.8, resolve@npm:^1.1.6, resolve@npm:^1.14.2, resolve@npm:^1.17.0, resolve@npm:^1.19.0, resolve@npm:^1.20.0, resolve@npm:^1.22.1, resolve@npm:^1.22.4, resolve@npm:~1.22.1, resolve@npm:~1.22.2": version: 1.22.8 resolution: "resolve@npm:1.22.8" dependencies: @@ -39053,17 +39110,7 @@ __metadata: languageName: node linkType: hard -"resolve@npm:~1.19.0": - version: 1.19.0 - resolution: "resolve@npm:1.19.0" - dependencies: - is-core-module: ^2.1.0 - path-parse: ^1.0.6 - checksum: a05b356e47b85ad3613d9e2a39a824f3c27f4fcad9c9ff6c7cc71a2e314c5904a90ab37481ad0069d03cab9eaaac6eb68aca1bc3355fdb05f1045cd50e2aacea - languageName: node - linkType: hard - -"resolve@patch:resolve@1.22.8#~builtin, resolve@patch:resolve@^1.1.6#~builtin, resolve@patch:resolve@^1.14.2#~builtin, resolve@patch:resolve@^1.17.0#~builtin, resolve@patch:resolve@^1.19.0#~builtin, resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@^1.22.1#~builtin, resolve@patch:resolve@^1.22.4#~builtin, resolve@patch:resolve@~1.22.1#~builtin": +"resolve@patch:resolve@1.22.8#~builtin, resolve@patch:resolve@^1.1.6#~builtin, resolve@patch:resolve@^1.14.2#~builtin, resolve@patch:resolve@^1.17.0#~builtin, resolve@patch:resolve@^1.19.0#~builtin, resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@^1.22.1#~builtin, resolve@patch:resolve@^1.22.4#~builtin, resolve@patch:resolve@~1.22.1#~builtin, resolve@patch:resolve@~1.22.2#~builtin": version: 1.22.8 resolution: "resolve@patch:resolve@npm%3A1.22.8#~builtin::version=1.22.8&hash=c3c19d" dependencies: @@ -39089,16 +39136,6 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@~1.19.0#~builtin": - version: 1.19.0 - resolution: "resolve@patch:resolve@npm%3A1.19.0#~builtin::version=1.19.0&hash=c3c19d" - dependencies: - is-core-module: ^2.1.0 - path-parse: ^1.0.6 - checksum: 2443b94d347e6946c87c85faf13071f605e609e0b54784829b0ed2b917d050bfc1cbaf4ecc6453f224cfa7d0c5dcd97cbb273454cd210bee68e4af15c1a5abc9 - languageName: node - linkType: hard - "responselike@npm:^1.0.2": version: 1.0.2 resolution: "responselike@npm:1.0.2" @@ -41380,7 +41417,7 @@ __metadata: languageName: node linkType: hard -"supports-color@npm:^8.0.0, supports-color@npm:^8.1.0, supports-color@npm:^8.1.1": +"supports-color@npm:^8.0.0, supports-color@npm:^8.1.0, supports-color@npm:^8.1.1, supports-color@npm:~8.1.1": version: 8.1.1 resolution: "supports-color@npm:8.1.1" dependencies: @@ -42588,13 +42625,13 @@ __metadata: languageName: node linkType: hard -"typescript@npm:~5.0.4": - version: 5.0.4 - resolution: "typescript@npm:5.0.4" +"typescript@npm:5.4.2": + version: 5.4.2 + resolution: "typescript@npm:5.4.2" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 82b94da3f4604a8946da585f7d6c3025fff8410779e5bde2855ab130d05e4fd08938b9e593b6ebed165bda6ad9292b230984f10952cf82f0a0ca07bbeaa08172 + checksum: 96d80fde25a09bcb04d399082fb27a808a9e17c2111e43849d2aafbd642d835e4f4ef0de09b0ba795ec2a700be6c4c2c3f62bf4660c05404c948727b5bbfb32a languageName: node linkType: hard @@ -42618,13 +42655,13 @@ __metadata: languageName: node linkType: hard -"typescript@patch:typescript@~5.0.4#~builtin": - version: 5.0.4 - resolution: "typescript@patch:typescript@npm%3A5.0.4#~builtin::version=5.0.4&hash=b5f058" +"typescript@patch:typescript@5.4.2#~builtin": + version: 5.4.2 + resolution: "typescript@patch:typescript@npm%3A5.4.2#~builtin::version=5.4.2&hash=5adc0c" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: d26b6ba97b6d163c55dbdffd9bbb4c211667ebebc743accfeb2c8c0154aace7afd097b51165a72a5bad2cf65a4612259344ff60f8e642362aa1695c760d303ac + checksum: 797ac213c03a19749181c745647b4cab03d13bf4b6b738b05a3426f46c6b540f908989e839d9b0c89d7a4ee2bdb50493b4d4898d4ef1c897c3e9d0b082e78a67 languageName: node linkType: hard @@ -43413,13 +43450,6 @@ __metadata: languageName: node linkType: hard -"validator@npm:^13.7.0": - version: 13.7.0 - resolution: "validator@npm:13.7.0" - checksum: 2b83283de1222ca549a7ef57f46e8d49c6669213348db78b7045bce36a3b5843ff1e9f709ebf74574e06223461ee1f264f8cc9a26a0060a79a27de079d8286ef - languageName: node - linkType: hard - "value-or-promise@npm:1.0.11": version: 1.0.11 resolution: "value-or-promise@npm:1.0.11" @@ -44631,23 +44661,6 @@ __metadata: languageName: node linkType: hard -"z-schema@npm:~5.0.2": - version: 5.0.2 - resolution: "z-schema@npm:5.0.2" - dependencies: - commander: ^2.7.1 - lodash.get: ^4.4.2 - lodash.isequal: ^4.5.0 - validator: ^13.7.0 - dependenciesMeta: - commander: - optional: true - bin: - z-schema: bin/z-schema - checksum: 084b2f16043ac0a892914ee29cc0b4fafd9338133eec0345cd6ced25e814f647fa67be1090ad5f606759c2c1f2f8c28127960ba187f437f1caf6fb8cd45d7336 - languageName: node - linkType: hard - "zen-observable@npm:^0.10.0": version: 0.10.0 resolution: "zen-observable@npm:0.10.0" From 7a3d6227de4121daf136f20f9c487f4e962e70a9 Mon Sep 17 00:00:00 2001 From: Camila Belo Date: Thu, 19 Sep 2024 13:59:04 +0200 Subject: [PATCH 135/164] feat: create template form route Signed-off-by: Camila Belo --- .changeset/cyan-peaches-lay.md | 5 + plugins/scaffolder/api-report.md | 1 + .../src/components/Router/Router.tsx | 20 ++- .../TemplateEditorPage/TemplateEditorPage.tsx | 75 ++--------- .../TemplateEditorToolbar.tsx | 28 +++- .../TemplateEditorPage/TemplateFormPage.tsx | 76 +++++++++++ .../TemplateFormPreviewer.tsx | 124 +++++++++++------- .../src/next/TemplateEditorPage/index.ts | 1 + plugins/scaffolder/src/plugin.tsx | 2 + plugins/scaffolder/src/routes.ts | 8 +- 10 files changed, 223 insertions(+), 117 deletions(-) create mode 100644 .changeset/cyan-peaches-lay.md create mode 100644 plugins/scaffolder/src/next/TemplateEditorPage/TemplateFormPage.tsx diff --git a/.changeset/cyan-peaches-lay.md b/.changeset/cyan-peaches-lay.md new file mode 100644 index 0000000000..a2b393caf8 --- /dev/null +++ b/.changeset/cyan-peaches-lay.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder': patch +--- + +Create a separate route for the template form editor so we refresh it without being redirected to scaffolder edit page. diff --git a/plugins/scaffolder/api-report.md b/plugins/scaffolder/api-report.md index 81cf0ecced..05255300dd 100644 --- a/plugins/scaffolder/api-report.md +++ b/plugins/scaffolder/api-report.md @@ -614,6 +614,7 @@ export const scaffolderPlugin: BackstagePlugin< edit: SubRouteRef; editor: SubRouteRef; customFields: SubRouteRef; + templateForm: SubRouteRef; }, { registerComponent: ExternalRouteRef; diff --git a/plugins/scaffolder/src/components/Router/Router.tsx b/plugins/scaffolder/src/components/Router/Router.tsx index 27c2eede70..385a5f9fad 100644 --- a/plugins/scaffolder/src/components/Router/Router.tsx +++ b/plugins/scaffolder/src/components/Router/Router.tsx @@ -40,6 +40,7 @@ import { scaffolderListTaskRouteRef, scaffolderTaskRouteRef, selectedTemplateRouteRef, + templateFormRouteRef, } from '../../routes'; import { ErrorPage } from '@backstage/core-components'; @@ -54,6 +55,7 @@ import { TemplateListPage, TemplateWizardPage } from '../../next'; import { OngoingTask } from '../OngoingTask'; import { TemplatePage, + TemplateFormPage, TemplateEditorPage, CustomFieldsPage, } from '../../next/TemplateEditorPage'; @@ -169,11 +171,7 @@ export const Router = (props: PropsWithChildren) => { path={editRouteRef.path} element={ - + } /> @@ -185,6 +183,18 @@ export const Router = (props: PropsWithChildren) => { } /> + + + + } + /> } /> []; - layouts?: LayoutOptions[]; - formProps?: FormProps; -} - -export function TemplateEditorPage(props: TemplateEditorPageProps) { - const [selection, setSelection] = useState(); +export function TemplateEditorPage() { const navigate = useNavigate(); const actionsLink = useRouteRef(actionsRouteRef); const tasksLink = useRouteRef(scaffolderListTaskRouteRef); const createLink = useRouteRef(rootRouteRef); const editorLink = useRouteRef(editorRouteRef); const customFieldsLink = useRouteRef(customFieldsRouteRef); + const templateFormLink = useRouteRef(templateFormRouteRef); const { t } = useTranslationRef(scaffolderTranslationRef); const scaffolderPageContextMenuProps = { @@ -80,19 +50,14 @@ export function TemplateEditorPage(props: TemplateEditorPageProps) { onCreateClicked: () => navigate(createLink()), }; - let content: JSX.Element | null = null; - if (selection?.type === 'form') { - content = ( - setSelection(undefined)} - layouts={props.layouts} - formProps={props.formProps} - /> - ); - } else { - content = ( + return ( + +
+ +
{ @@ -111,25 +76,13 @@ export function TemplateEditorPage(props: TemplateEditorPageProps) { }) .catch(() => {}); } else if (option === 'form') { - setSelection({ type: 'form' }); + navigate(templateFormLink()); } else if (option === 'field-explorer') { navigate(customFieldsLink()); } }} /> - ); - } - - return ( - -
- -
- {content}
); } diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorToolbar.tsx b/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorToolbar.tsx index ef4ac95c3c..1d89616964 100644 --- a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorToolbar.tsx +++ b/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorToolbar.tsx @@ -14,7 +14,7 @@ * limitations under the License. */ -import React, { useState } from 'react'; +import React, { ReactNode, useState } from 'react'; import { makeStyles } from '@material-ui/core/styles'; import AppBar from '@material-ui/core/AppBar'; @@ -49,18 +49,29 @@ const useStyles = makeStyles( }, toolbar: { display: 'grid', - justifyItems: 'flex-end', + gridTemplateColumns: 'auto 1fr', + gridGap: theme.spacing(1), padding: theme.spacing(0, 1), backgroundColor: theme.palette.background.paper, }, + toolbarCustomActions: { + display: 'grid', + alignItems: 'center', + gridAutoFlow: 'Column', + gridGap: theme.spacing(1), + }, + toolbarDefaultActions: { + justifySelf: 'end', + }, }), { name: 'ScaffolderTemplateEditorToolbar' }, ); export function TemplateEditorToolbar(props: { + children?: ReactNode; fieldExtensions?: FieldExtensionOptions[]; }) { - const { fieldExtensions } = props; + const { children, fieldExtensions } = props; const classes = useStyles(); const [showFieldsDrawer, setShowFieldsDrawer] = useState(false); const [showActionsDrawer, setShowActionsDrawer] = useState(false); @@ -69,14 +80,19 @@ export function TemplateEditorToolbar(props: { return ( - +
{children}
+ - - diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateFormPage.tsx b/plugins/scaffolder/src/next/TemplateEditorPage/TemplateFormPage.tsx new file mode 100644 index 0000000000..1781be69fb --- /dev/null +++ b/plugins/scaffolder/src/next/TemplateEditorPage/TemplateFormPage.tsx @@ -0,0 +1,76 @@ +/* + * 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 React, { useCallback } from 'react'; +import { useNavigate } from 'react-router-dom'; + +import { makeStyles } from '@material-ui/core/styles'; + +import { Page, Header, Content } from '@backstage/core-components'; +import { useRouteRef } from '@backstage/core-plugin-api'; +import { useTranslationRef } from '@backstage/core-plugin-api/alpha'; +import { + FormProps, + LayoutOptions, + FieldExtensionOptions, +} from '@backstage/plugin-scaffolder-react'; + +import { editRouteRef } from '../../routes'; +import { scaffolderTranslationRef } from '../../translation'; + +import { TemplateFormPreviewer } from './TemplateFormPreviewer'; + +const useStyles = makeStyles({ + root: { + padding: 0, + }, +}); + +interface TemplateFormPageProps { + layouts?: LayoutOptions[]; + formProps?: FormProps; + fieldExtensions?: FieldExtensionOptions[]; + defaultPreviewTemplate?: string; +} + +export function TemplateFormPage(props: TemplateFormPageProps) { + const classes = useStyles(); + const navigate = useNavigate(); + const editLink = useRouteRef(editRouteRef); + const { t } = useTranslationRef(scaffolderTranslationRef); + + const handleClose = useCallback(() => { + navigate(editLink()); + }, [navigate, editLink]); + + return ( + +
+ + + + + ); +} diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateFormPreviewer.tsx b/plugins/scaffolder/src/next/TemplateEditorPage/TemplateFormPreviewer.tsx index 4f79b7f5c2..e0c40a98be 100644 --- a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateFormPreviewer.tsx +++ b/plugins/scaffolder/src/next/TemplateEditorPage/TemplateFormPreviewer.tsx @@ -13,18 +13,21 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + import { Entity } from '@backstage/catalog-model'; import { alertApiRef, useApi } from '@backstage/core-plugin-api'; import { catalogApiRef, humanizeEntityRef, } from '@backstage/plugin-catalog-react'; -import FormControl from '@material-ui/core/FormControl'; -import IconButton from '@material-ui/core/IconButton'; -import InputLabel from '@material-ui/core/InputLabel'; import LinearProgress from '@material-ui/core/LinearProgress'; -import MenuItem from '@material-ui/core/MenuItem'; +import Paper from '@material-ui/core/Paper'; +import FormControl from '@material-ui/core/FormControl'; +import Input from '@material-ui/core/Input'; import Select from '@material-ui/core/Select'; +import Tooltip from '@material-ui/core/Tooltip'; +import IconButton from '@material-ui/core/IconButton'; +import MenuItem from '@material-ui/core/MenuItem'; import { makeStyles } from '@material-ui/core/styles'; import CloseIcon from '@material-ui/icons/Close'; import React, { useCallback, useState } from 'react'; @@ -35,6 +38,7 @@ import { FieldExtensionOptions, FormProps, } from '@backstage/plugin-scaffolder-react'; +import { TemplateEditorToolbar } from './TemplateEditorToolbar'; import { TemplateEditorForm } from './TemplateEditorForm'; import { TemplateEditorTextArea } from './TemplateEditorTextArea'; import { useTranslationRef } from '@backstage/core-plugin-api/alpha'; @@ -94,27 +98,40 @@ export type ScaffolderTemplateFormPreviewerClassKey = const useStyles = makeStyles( theme => ({ root: { + height: '100%', gridArea: 'pageContent', display: 'grid', gridTemplateAreas: ` - "controls controls" + "toolbar toolbar" "textArea preview" `, gridTemplateRows: 'auto 1fr', gridTemplateColumns: '1fr 1fr', }, - controls: { - gridArea: 'controls', - display: 'flex', - flexFlow: 'row nowrap', - alignItems: 'center', - margin: theme.spacing(1), + toolbar: { + gridArea: 'toolbar', }, textArea: { gridArea: 'textArea', + height: '100%', }, preview: { gridArea: 'preview', + position: 'relative', + borderLeft: `1px solid ${theme.palette.divider}`, + backgroundColor: theme.palette.background.default, + }, + scroll: { + position: 'absolute', + top: 0, + left: 0, + right: 0, + bottom: 0, + padding: theme.spacing(1), + }, + formControl: { + minWidth: 120, + maxWidth: 300, }, }), { name: 'ScaffolderTemplateFormPreviewer' }, @@ -137,8 +154,9 @@ export const TemplateFormPreviewer = ({ const { t } = useTranslationRef(scaffolderTranslationRef); const alertApi = useApi(alertApiRef); const catalogApi = useApi(catalogApiRef); - const [selectedTemplate, setSelectedTemplate] = useState(''); const [errorText, setErrorText] = useState(); + const [selectedTemplate, setSelectedTemplate] = + useState(null); const [templateOptions, setTemplateOptions] = useState([]); const [templateYaml, setTemplateYaml] = useState(defaultPreviewTemplate); @@ -188,29 +206,45 @@ export const TemplateFormPreviewer = ({ return ( <> {loading && } -
-
- - - {t('templateEditorPage.templateFormPreviewer.title')} - - - - - - - + +
+ + + + + + + + } + renderValue={selected => { + if (!selected) { + return t('templateEditorPage.templateFormPreviewer.title'); + } + return (selected as Entity).metadata.title; + }} + inputProps={{ + 'aria-label': t( + 'templateEditorPage.templateFormPreviewer.title', + ), + }} + > + {templateOptions.map((option, index) => ( + + {option.label} + + ))} + + +
- +
+ +
-
+ ); }; diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/index.ts b/plugins/scaffolder/src/next/TemplateEditorPage/index.ts index 45e85f8a83..84ab74da98 100644 --- a/plugins/scaffolder/src/next/TemplateEditorPage/index.ts +++ b/plugins/scaffolder/src/next/TemplateEditorPage/index.ts @@ -15,6 +15,7 @@ */ export { TemplatePage } from './TemplatePage'; +export { TemplateFormPage } from './TemplateFormPage'; export { TemplateEditorPage } from './TemplateEditorPage'; export { CustomFieldsPage } from './CustomFieldsPage'; export type { ScaffolderCustomFieldExplorerClassKey } from './CustomFieldExplorer'; diff --git a/plugins/scaffolder/src/plugin.tsx b/plugins/scaffolder/src/plugin.tsx index bf4d3a41ac..8b24e86069 100644 --- a/plugins/scaffolder/src/plugin.tsx +++ b/plugins/scaffolder/src/plugin.tsx @@ -70,6 +70,7 @@ import { editRouteRef, editorRouteRef, customFieldsRouteRef, + templateFormRouteRef, } from './routes'; import { MyGroupsPicker, @@ -111,6 +112,7 @@ export const scaffolderPlugin = createPlugin({ edit: editRouteRef, editor: editorRouteRef, customFields: customFieldsRouteRef, + templateForm: templateFormRouteRef, }, externalRoutes: { registerComponent: registerComponentRouteRef, diff --git a/plugins/scaffolder/src/routes.ts b/plugins/scaffolder/src/routes.ts index 3bd4435078..55344a8b0a 100644 --- a/plugins/scaffolder/src/routes.ts +++ b/plugins/scaffolder/src/routes.ts @@ -86,7 +86,13 @@ export const editorRouteRef = createSubRouteRef({ }); export const customFieldsRouteRef = createSubRouteRef({ - id: 'scaffolder/edit', + id: 'scaffolder/customFields', parent: rootRouteRef, path: '/custom-fields', }); + +export const templateFormRouteRef = createSubRouteRef({ + id: 'scaffolder/editorForm', + parent: rootRouteRef, + path: '/template-form', +}); From eed4cdcb55b0f1332e12c1e923f9870500cf932d Mon Sep 17 00:00:00 2001 From: secustor Date: Mon, 23 Sep 2024 15:14:15 +0200 Subject: [PATCH 136/164] add missing files Signed-off-by: secustor --- .../catalog-client/report-testUtils.api.md | 88 +++ packages/frontend-defaults/report.api.md | 49 ++ plugins/app/report.api.md | 717 ++++++++++++++++++ .../report.api.md | 30 + .../report.api.md | 38 + plugins/catalog-node/report-testUtils.api.md | 27 + plugins/techdocs-common/report.api.md | 16 + 7 files changed, 965 insertions(+) create mode 100644 packages/catalog-client/report-testUtils.api.md create mode 100644 packages/frontend-defaults/report.api.md create mode 100644 plugins/app/report.api.md create mode 100644 plugins/auth-backend-module-auth0-provider/report.api.md create mode 100644 plugins/auth-backend-module-bitbucket-server-provider/report.api.md create mode 100644 plugins/catalog-node/report-testUtils.api.md create mode 100644 plugins/techdocs-common/report.api.md diff --git a/packages/catalog-client/report-testUtils.api.md b/packages/catalog-client/report-testUtils.api.md new file mode 100644 index 0000000000..9341327554 --- /dev/null +++ b/packages/catalog-client/report-testUtils.api.md @@ -0,0 +1,88 @@ +## API Report File for "@backstage/catalog-client" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts +import { AddLocationRequest } from '@backstage/catalog-client'; +import { AddLocationResponse } from '@backstage/catalog-client'; +import { CatalogApi } from '@backstage/catalog-client'; +import { CompoundEntityRef } from '@backstage/catalog-model'; +import { Entity } from '@backstage/catalog-model'; +import { GetEntitiesByRefsRequest } from '@backstage/catalog-client'; +import { GetEntitiesByRefsResponse } from '@backstage/catalog-client'; +import { GetEntitiesRequest } from '@backstage/catalog-client'; +import { GetEntitiesResponse } from '@backstage/catalog-client'; +import { GetEntityAncestorsRequest } from '@backstage/catalog-client'; +import { GetEntityAncestorsResponse } from '@backstage/catalog-client'; +import { GetEntityFacetsRequest } from '@backstage/catalog-client'; +import { GetEntityFacetsResponse } from '@backstage/catalog-client'; +import { Location as Location_2 } from '@backstage/catalog-client'; +import { QueryEntitiesRequest } from '@backstage/catalog-client'; +import { QueryEntitiesResponse } from '@backstage/catalog-client'; +import { ValidateEntityResponse } from '@backstage/catalog-client'; + +// @public +export class InMemoryCatalogClient implements CatalogApi { + constructor(options?: { entities?: Entity[] }); + // (undocumented) + addLocation(_location: AddLocationRequest): Promise; + // (undocumented) + getEntities(request?: GetEntitiesRequest): Promise; + // (undocumented) + getEntitiesByRefs( + request: GetEntitiesByRefsRequest, + ): Promise; + // (undocumented) + getEntityAncestors( + request: GetEntityAncestorsRequest, + ): Promise; + // (undocumented) + getEntityByRef( + entityRef: string | CompoundEntityRef, + ): Promise; + // (undocumented) + getEntityFacets( + request: GetEntityFacetsRequest, + ): Promise; + // (undocumented) + getLocationByEntity( + _entityRef: string | CompoundEntityRef, + ): Promise; + // (undocumented) + getLocationById(_id: string): Promise; + // (undocumented) + getLocationByRef(_locationRef: string): Promise; + // (undocumented) + queryEntities(request?: QueryEntitiesRequest): Promise; + // (undocumented) + refreshEntity(_entityRef: string): Promise; + // (undocumented) + removeEntityByUid(uid: string): Promise; + // (undocumented) + removeLocationById(_id: string): Promise; + // (undocumented) + validateEntity( + _entity: Entity, + _locationRef: string, + ): Promise; +} + +// Warnings were encountered during analysis: +// +// src/testUtils/InMemoryCatalogClient.d.ts:15:5 - (ae-undocumented) Missing documentation for "getEntities". +// src/testUtils/InMemoryCatalogClient.d.ts:16:5 - (ae-undocumented) Missing documentation for "getEntitiesByRefs". +// src/testUtils/InMemoryCatalogClient.d.ts:17:5 - (ae-undocumented) Missing documentation for "queryEntities". +// src/testUtils/InMemoryCatalogClient.d.ts:18:5 - (ae-undocumented) Missing documentation for "getEntityAncestors". +// src/testUtils/InMemoryCatalogClient.d.ts:19:5 - (ae-undocumented) Missing documentation for "getEntityByRef". +// src/testUtils/InMemoryCatalogClient.d.ts:20:5 - (ae-undocumented) Missing documentation for "removeEntityByUid". +// src/testUtils/InMemoryCatalogClient.d.ts:21:5 - (ae-undocumented) Missing documentation for "refreshEntity". +// src/testUtils/InMemoryCatalogClient.d.ts:22:5 - (ae-undocumented) Missing documentation for "getEntityFacets". +// src/testUtils/InMemoryCatalogClient.d.ts:23:5 - (ae-undocumented) Missing documentation for "getLocationById". +// src/testUtils/InMemoryCatalogClient.d.ts:24:5 - (ae-undocumented) Missing documentation for "getLocationByRef". +// src/testUtils/InMemoryCatalogClient.d.ts:25:5 - (ae-undocumented) Missing documentation for "addLocation". +// src/testUtils/InMemoryCatalogClient.d.ts:26:5 - (ae-undocumented) Missing documentation for "removeLocationById". +// src/testUtils/InMemoryCatalogClient.d.ts:27:5 - (ae-undocumented) Missing documentation for "getLocationByEntity". +// src/testUtils/InMemoryCatalogClient.d.ts:28:5 - (ae-undocumented) Missing documentation for "validateEntity". + +// (No @packageDocumentation comment for this package) +``` diff --git a/packages/frontend-defaults/report.api.md b/packages/frontend-defaults/report.api.md new file mode 100644 index 0000000000..4822312294 --- /dev/null +++ b/packages/frontend-defaults/report.api.md @@ -0,0 +1,49 @@ +## API Report File for "@backstage/frontend-defaults" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts +import { ConfigApi } from '@backstage/frontend-plugin-api'; +import { CreateAppRouteBinder } from '@backstage/frontend-app-api'; +import { FrontendFeature } from '@backstage/frontend-app-api'; +import { JSX as JSX_2 } from 'react'; +import { default as React_2 } from 'react'; +import { ReactNode } from 'react'; + +// @public +export function createApp(options?: CreateAppOptions): { + createRoot(): JSX_2.Element; +}; + +// @public +export interface CreateAppFeatureLoader { + getLoaderName(): string; + load(options: { config: ConfigApi }): Promise<{ + features: FrontendFeature[]; + }>; +} + +// @public +export interface CreateAppOptions { + // (undocumented) + bindRoutes?(context: { bind: CreateAppRouteBinder }): void; + // (undocumented) + configLoader?: () => Promise<{ + config: ConfigApi; + }>; + // (undocumented) + features?: (FrontendFeature | CreateAppFeatureLoader)[]; + loadingComponent?: ReactNode; +} + +// @public +export function createPublicSignInApp(options?: CreateAppOptions): { + createRoot(): React_2.JSX.Element; +}; + +// Warnings were encountered during analysis: +// +// src/createApp.d.ts:29:5 - (ae-undocumented) Missing documentation for "features". +// src/createApp.d.ts:30:5 - (ae-undocumented) Missing documentation for "configLoader". +// src/createApp.d.ts:33:5 - (ae-undocumented) Missing documentation for "bindRoutes". +``` diff --git a/plugins/app/report.api.md b/plugins/app/report.api.md new file mode 100644 index 0000000000..1ff398a346 --- /dev/null +++ b/plugins/app/report.api.md @@ -0,0 +1,717 @@ +## API Report File for "@backstage/plugin-app" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts +/// + +import { AnyApiFactory } from '@backstage/frontend-plugin-api'; +import { AnyExtensionDataRef } from '@backstage/frontend-plugin-api'; +import { AnyRouteRefParams } from '@backstage/frontend-plugin-api'; +import { AppTheme } from '@backstage/frontend-plugin-api'; +import { ComponentRef } from '@backstage/frontend-plugin-api'; +import { ComponentType } from 'react'; +import { ConfigurableExtensionDataRef } from '@backstage/frontend-plugin-api'; +import { ExtensionDefinition } from '@backstage/frontend-plugin-api'; +import { ExtensionInput } from '@backstage/frontend-plugin-api'; +import { FrontendPlugin } from '@backstage/frontend-plugin-api'; +import { IconComponent } from '@backstage/core-plugin-api'; +import { IconComponent as IconComponent_2 } from '@backstage/frontend-plugin-api'; +import { JSX as JSX_2 } from 'react'; +import { ReactNode } from 'react'; +import { RouteRef } from '@backstage/frontend-plugin-api'; +import { SignInPageProps } from '@backstage/core-plugin-api'; +import { TranslationMessages } from '@backstage/frontend-plugin-api'; +import { TranslationResource } from '@backstage/frontend-plugin-api'; + +// @public (undocumented) +const appPlugin: FrontendPlugin< + {}, + {}, + { + app: ExtensionDefinition<{ + config: {}; + configInput: {}; + output: ConfigurableExtensionDataRef< + JSX_2.Element, + 'core.reactElement', + {} + >; + inputs: { + root: ExtensionInput< + ConfigurableExtensionDataRef, + { + singleton: true; + optional: false; + } + >; + }; + params: never; + kind: undefined; + name: undefined; + }>; + 'api:app/app-language': ExtensionDefinition<{ + kind: 'api'; + name: 'app-language'; + config: {}; + configInput: {}; + output: ConfigurableExtensionDataRef< + AnyApiFactory, + 'core.api.factory', + {} + >; + inputs: {}; + params: { + factory: AnyApiFactory; + }; + }>; + 'app/layout': ExtensionDefinition<{ + config: {}; + configInput: {}; + output: ConfigurableExtensionDataRef< + JSX_2.Element, + 'core.reactElement', + {} + >; + inputs: { + nav: ExtensionInput< + ConfigurableExtensionDataRef, + { + singleton: true; + optional: false; + } + >; + content: ExtensionInput< + ConfigurableExtensionDataRef, + { + singleton: true; + optional: false; + } + >; + }; + params: never; + kind: undefined; + name: 'layout'; + }>; + 'app/nav': ExtensionDefinition<{ + config: {}; + configInput: {}; + output: ConfigurableExtensionDataRef< + JSX_2.Element, + 'core.reactElement', + {} + >; + inputs: { + items: ExtensionInput< + ConfigurableExtensionDataRef< + { + title: string; + icon: IconComponent; + routeRef: RouteRef; + }, + 'core.nav-item.target', + {} + >, + { + singleton: false; + optional: false; + } + >; + logos: ExtensionInput< + ConfigurableExtensionDataRef< + { + logoIcon?: JSX.Element | undefined; + logoFull?: JSX.Element | undefined; + }, + 'core.nav-logo.logo-elements', + {} + >, + { + singleton: true; + optional: true; + } + >; + }; + params: never; + kind: undefined; + name: 'nav'; + }>; + 'app/root': ExtensionDefinition<{ + config: {}; + configInput: {}; + output: ConfigurableExtensionDataRef< + JSX_2.Element, + 'core.reactElement', + {} + >; + inputs: { + router: ExtensionInput< + ConfigurableExtensionDataRef< + ComponentType<{ + children?: ReactNode; + }>, + 'app.router.wrapper', + {} + >, + { + singleton: true; + optional: true; + } + >; + signInPage: ExtensionInput< + ConfigurableExtensionDataRef< + ComponentType, + 'core.sign-in-page.component', + {} + >, + { + singleton: true; + optional: true; + } + >; + children: ExtensionInput< + ConfigurableExtensionDataRef, + { + singleton: true; + optional: false; + } + >; + elements: ExtensionInput< + ConfigurableExtensionDataRef, + { + singleton: false; + optional: false; + } + >; + wrappers: ExtensionInput< + ConfigurableExtensionDataRef< + ComponentType<{ + children?: ReactNode; + }>, + 'app.root.wrapper', + {} + >, + { + singleton: false; + optional: false; + } + >; + }; + params: never; + kind: undefined; + name: 'root'; + }>; + 'app/routes': ExtensionDefinition<{ + config: {}; + configInput: {}; + output: ConfigurableExtensionDataRef< + JSX_2.Element, + 'core.reactElement', + {} + >; + inputs: { + routes: ExtensionInput< + | ConfigurableExtensionDataRef + | ConfigurableExtensionDataRef + | ConfigurableExtensionDataRef< + RouteRef, + 'core.routing.ref', + { + optional: true; + } + >, + { + singleton: false; + optional: false; + } + >; + }; + params: never; + kind: undefined; + name: 'routes'; + }>; + 'api:app/app-theme': ExtensionDefinition<{ + config: {}; + configInput: {}; + output: ConfigurableExtensionDataRef< + AnyApiFactory, + 'core.api.factory', + {} + >; + inputs: { + themes: ExtensionInput< + ConfigurableExtensionDataRef, + { + singleton: false; + optional: false; + } + >; + }; + kind: 'api'; + name: 'app-theme'; + params: { + factory: AnyApiFactory; + }; + }>; + 'theme:app/light': ExtensionDefinition<{ + kind: 'theme'; + name: 'light'; + config: {}; + configInput: {}; + output: ConfigurableExtensionDataRef; + inputs: {}; + params: { + theme: AppTheme; + }; + }>; + 'theme:app/dark': ExtensionDefinition<{ + kind: 'theme'; + name: 'dark'; + config: {}; + configInput: {}; + output: ConfigurableExtensionDataRef; + inputs: {}; + params: { + theme: AppTheme; + }; + }>; + 'api:app/components': ExtensionDefinition<{ + config: {}; + configInput: {}; + output: ConfigurableExtensionDataRef< + AnyApiFactory, + 'core.api.factory', + {} + >; + inputs: { + components: ExtensionInput< + ConfigurableExtensionDataRef< + { + ref: ComponentRef; + impl: ComponentType; + }, + 'core.component.component', + {} + >, + { + singleton: false; + optional: false; + } + >; + }; + kind: 'api'; + name: 'components'; + params: { + factory: AnyApiFactory; + }; + }>; + 'api:app/icons': ExtensionDefinition<{ + config: {}; + configInput: {}; + output: ConfigurableExtensionDataRef< + AnyApiFactory, + 'core.api.factory', + {} + >; + inputs: { + icons: ExtensionInput< + ConfigurableExtensionDataRef< + { + [x: string]: IconComponent_2; + }, + 'core.icons', + {} + >, + { + singleton: false; + optional: false; + } + >; + }; + kind: 'api'; + name: 'icons'; + params: { + factory: AnyApiFactory; + }; + }>; + 'api:app/feature-flags': ExtensionDefinition<{ + kind: 'api'; + name: 'feature-flags'; + config: {}; + configInput: {}; + output: ConfigurableExtensionDataRef< + AnyApiFactory, + 'core.api.factory', + {} + >; + inputs: {}; + params: { + factory: AnyApiFactory; + }; + }>; + 'api:app/translations': ExtensionDefinition<{ + config: {}; + configInput: {}; + output: ConfigurableExtensionDataRef< + AnyApiFactory, + 'core.api.factory', + {} + >; + inputs: { + translations: ExtensionInput< + ConfigurableExtensionDataRef< + | TranslationResource + | TranslationMessages< + string, + { + [x: string]: string; + }, + boolean + >, + 'core.translation.translation', + {} + >, + { + singleton: false; + optional: false; + } + >; + }; + kind: 'api'; + name: 'translations'; + params: { + factory: AnyApiFactory; + }; + }>; + 'app-root-element:app/oauth-request-dialog': ExtensionDefinition<{ + kind: 'app-root-element'; + name: 'oauth-request-dialog'; + config: {}; + configInput: {}; + output: ConfigurableExtensionDataRef< + JSX_2.Element, + 'core.reactElement', + {} + >; + inputs: {}; + params: { + element: JSX.Element | (() => JSX.Element); + }; + }>; + 'app-root-element:app/alert-display': ExtensionDefinition<{ + config: { + transientTimeoutMs: number; + anchorOrigin: { + horizontal: 'center' | 'left' | 'right'; + vertical: 'top' | 'bottom'; + }; + }; + configInput: { + anchorOrigin?: + | { + horizontal?: 'center' | 'left' | 'right' | undefined; + vertical?: 'top' | 'bottom' | undefined; + } + | undefined; + transientTimeoutMs?: number | undefined; + }; + output: ConfigurableExtensionDataRef< + JSX_2.Element, + 'core.reactElement', + {} + >; + inputs: { + [x: string]: ExtensionInput< + AnyExtensionDataRef, + { + optional: boolean; + singleton: boolean; + } + >; + }; + kind: 'app-root-element'; + name: 'alert-display'; + params: { + element: JSX.Element | (() => JSX.Element); + }; + }>; + 'api:app/discovery': ExtensionDefinition<{ + kind: 'api'; + name: 'discovery'; + config: {}; + configInput: {}; + output: ConfigurableExtensionDataRef< + AnyApiFactory, + 'core.api.factory', + {} + >; + inputs: {}; + params: { + factory: AnyApiFactory; + }; + }>; + 'api:app/alert': ExtensionDefinition<{ + kind: 'api'; + name: 'alert'; + config: {}; + configInput: {}; + output: ConfigurableExtensionDataRef< + AnyApiFactory, + 'core.api.factory', + {} + >; + inputs: {}; + params: { + factory: AnyApiFactory; + }; + }>; + 'api:app/analytics': ExtensionDefinition<{ + kind: 'api'; + name: 'analytics'; + config: {}; + configInput: {}; + output: ConfigurableExtensionDataRef< + AnyApiFactory, + 'core.api.factory', + {} + >; + inputs: {}; + params: { + factory: AnyApiFactory; + }; + }>; + 'api:app/error': ExtensionDefinition<{ + kind: 'api'; + name: 'error'; + config: {}; + configInput: {}; + output: ConfigurableExtensionDataRef< + AnyApiFactory, + 'core.api.factory', + {} + >; + inputs: {}; + params: { + factory: AnyApiFactory; + }; + }>; + 'api:app/storage': ExtensionDefinition<{ + kind: 'api'; + name: 'storage'; + config: {}; + configInput: {}; + output: ConfigurableExtensionDataRef< + AnyApiFactory, + 'core.api.factory', + {} + >; + inputs: {}; + params: { + factory: AnyApiFactory; + }; + }>; + 'api:app/fetch': ExtensionDefinition<{ + kind: 'api'; + name: 'fetch'; + config: {}; + configInput: {}; + output: ConfigurableExtensionDataRef< + AnyApiFactory, + 'core.api.factory', + {} + >; + inputs: {}; + params: { + factory: AnyApiFactory; + }; + }>; + 'api:app/oauth-request': ExtensionDefinition<{ + kind: 'api'; + name: 'oauth-request'; + config: {}; + configInput: {}; + output: ConfigurableExtensionDataRef< + AnyApiFactory, + 'core.api.factory', + {} + >; + inputs: {}; + params: { + factory: AnyApiFactory; + }; + }>; + 'api:app/google-auth': ExtensionDefinition<{ + kind: 'api'; + name: 'google-auth'; + config: {}; + configInput: {}; + output: ConfigurableExtensionDataRef< + AnyApiFactory, + 'core.api.factory', + {} + >; + inputs: {}; + params: { + factory: AnyApiFactory; + }; + }>; + 'api:app/microsoft-auth': ExtensionDefinition<{ + kind: 'api'; + name: 'microsoft-auth'; + config: {}; + configInput: {}; + output: ConfigurableExtensionDataRef< + AnyApiFactory, + 'core.api.factory', + {} + >; + inputs: {}; + params: { + factory: AnyApiFactory; + }; + }>; + 'api:app/github-auth': ExtensionDefinition<{ + kind: 'api'; + name: 'github-auth'; + config: {}; + configInput: {}; + output: ConfigurableExtensionDataRef< + AnyApiFactory, + 'core.api.factory', + {} + >; + inputs: {}; + params: { + factory: AnyApiFactory; + }; + }>; + 'api:app/okta-auth': ExtensionDefinition<{ + kind: 'api'; + name: 'okta-auth'; + config: {}; + configInput: {}; + output: ConfigurableExtensionDataRef< + AnyApiFactory, + 'core.api.factory', + {} + >; + inputs: {}; + params: { + factory: AnyApiFactory; + }; + }>; + 'api:app/gitlab-auth': ExtensionDefinition<{ + kind: 'api'; + name: 'gitlab-auth'; + config: {}; + configInput: {}; + output: ConfigurableExtensionDataRef< + AnyApiFactory, + 'core.api.factory', + {} + >; + inputs: {}; + params: { + factory: AnyApiFactory; + }; + }>; + 'api:app/onelogin-auth': ExtensionDefinition<{ + kind: 'api'; + name: 'onelogin-auth'; + config: {}; + configInput: {}; + output: ConfigurableExtensionDataRef< + AnyApiFactory, + 'core.api.factory', + {} + >; + inputs: {}; + params: { + factory: AnyApiFactory; + }; + }>; + 'api:app/bitbucket-auth': ExtensionDefinition<{ + kind: 'api'; + name: 'bitbucket-auth'; + config: {}; + configInput: {}; + output: ConfigurableExtensionDataRef< + AnyApiFactory, + 'core.api.factory', + {} + >; + inputs: {}; + params: { + factory: AnyApiFactory; + }; + }>; + 'api:app/bitbucket-server-auth': ExtensionDefinition<{ + kind: 'api'; + name: 'bitbucket-server-auth'; + config: {}; + configInput: {}; + output: ConfigurableExtensionDataRef< + AnyApiFactory, + 'core.api.factory', + {} + >; + inputs: {}; + params: { + factory: AnyApiFactory; + }; + }>; + 'api:app/atlassian-auth': ExtensionDefinition<{ + kind: 'api'; + name: 'atlassian-auth'; + config: {}; + configInput: {}; + output: ConfigurableExtensionDataRef< + AnyApiFactory, + 'core.api.factory', + {} + >; + inputs: {}; + params: { + factory: AnyApiFactory; + }; + }>; + 'api:app/vmware-cloud-auth': ExtensionDefinition<{ + kind: 'api'; + name: 'vmware-cloud-auth'; + config: {}; + configInput: {}; + output: ConfigurableExtensionDataRef< + AnyApiFactory, + 'core.api.factory', + {} + >; + inputs: {}; + params: { + factory: AnyApiFactory; + }; + }>; + 'api:app/permission': ExtensionDefinition<{ + kind: 'api'; + name: 'permission'; + config: {}; + configInput: {}; + output: ConfigurableExtensionDataRef< + AnyApiFactory, + 'core.api.factory', + {} + >; + inputs: {}; + params: { + factory: AnyApiFactory; + }; + }>; + } +>; +export default appPlugin; + +// Warnings were encountered during analysis: +// +// src/plugin.d.ts:3:22 - (ae-undocumented) Missing documentation for "appPlugin". + +// (No @packageDocumentation comment for this package) +``` diff --git a/plugins/auth-backend-module-auth0-provider/report.api.md b/plugins/auth-backend-module-auth0-provider/report.api.md new file mode 100644 index 0000000000..2d1b9074b4 --- /dev/null +++ b/plugins/auth-backend-module-auth0-provider/report.api.md @@ -0,0 +1,30 @@ +## API Report File for "@backstage/plugin-auth-backend-module-auth0-provider" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts +import { BackendFeature } from '@backstage/backend-plugin-api'; +import { OAuthAuthenticator } from '@backstage/plugin-auth-node'; +import { PassportOAuthAuthenticatorHelper } from '@backstage/plugin-auth-node'; +import { PassportProfile } from '@backstage/plugin-auth-node'; + +// @public (undocumented) +export const auth0Authenticator: OAuthAuthenticator< + { + helper: PassportOAuthAuthenticatorHelper; + audience: string | undefined; + connection: string | undefined; + connectionScope: string | undefined; + }, + PassportProfile +>; + +// @public (undocumented) +const authModuleAuth0Provider: BackendFeature; +export default authModuleAuth0Provider; + +// Warnings were encountered during analysis: +// +// src/authenticator.d.ts:3:22 - (ae-undocumented) Missing documentation for "auth0Authenticator". +// src/module.d.ts:2:22 - (ae-undocumented) Missing documentation for "authModuleAuth0Provider". +``` diff --git a/plugins/auth-backend-module-bitbucket-server-provider/report.api.md b/plugins/auth-backend-module-bitbucket-server-provider/report.api.md new file mode 100644 index 0000000000..371873027a --- /dev/null +++ b/plugins/auth-backend-module-bitbucket-server-provider/report.api.md @@ -0,0 +1,38 @@ +## API Report File for "@backstage/plugin-auth-backend-module-bitbucket-server-provider" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts +import { BackendFeature } from '@backstage/backend-plugin-api'; +import { OAuthAuthenticator } from '@backstage/plugin-auth-node'; +import { OAuthAuthenticatorResult } from '@backstage/plugin-auth-node'; +import { PassportOAuthAuthenticatorHelper } from '@backstage/plugin-auth-node'; +import { PassportProfile } from '@backstage/plugin-auth-node'; +import { SignInResolverFactory } from '@backstage/plugin-auth-node'; + +// @public (undocumented) +const authModuleBitbucketServerProvider: BackendFeature; +export default authModuleBitbucketServerProvider; + +// @public (undocumented) +export const bitbucketServerAuthenticator: OAuthAuthenticator< + { + helper: PassportOAuthAuthenticatorHelper; + host: string; + }, + PassportProfile +>; + +// @public +export namespace bitbucketServerSignInResolvers { + const emailMatchingUserEntityProfileEmail: SignInResolverFactory< + OAuthAuthenticatorResult, + unknown + >; +} + +// Warnings were encountered during analysis: +// +// src/authenticator.d.ts:3:22 - (ae-undocumented) Missing documentation for "bitbucketServerAuthenticator". +// src/module.d.ts:2:22 - (ae-undocumented) Missing documentation for "authModuleBitbucketServerProvider". +``` diff --git a/plugins/catalog-node/report-testUtils.api.md b/plugins/catalog-node/report-testUtils.api.md new file mode 100644 index 0000000000..c1dfb0bd7a --- /dev/null +++ b/plugins/catalog-node/report-testUtils.api.md @@ -0,0 +1,27 @@ +## API Report File for "@backstage/plugin-catalog-node" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts +import { CatalogApi } from '@backstage/catalog-client'; +import { Entity } from '@backstage/catalog-model'; +import { ServiceFactory } from '@backstage/backend-plugin-api'; +import { ServiceMock } from '@backstage/backend-test-utils'; + +// @public +export function catalogServiceMock(options?: { + entities?: Entity[]; +}): CatalogApi; + +// @public +export namespace catalogServiceMock { + const factory: (options?: { + entities?: Entity[]; + }) => ServiceFactory; + const mock: ( + partialImpl?: Partial | undefined, + ) => ServiceMock; +} + +// (No @packageDocumentation comment for this package) +``` diff --git a/plugins/techdocs-common/report.api.md b/plugins/techdocs-common/report.api.md new file mode 100644 index 0000000000..1b0ee6797a --- /dev/null +++ b/plugins/techdocs-common/report.api.md @@ -0,0 +1,16 @@ +## API Report File for "@backstage/plugin-techdocs-common" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts +// @public (undocumented) +export const TECHDOCS_ANNOTATION = 'backstage.io/techdocs-ref'; + +// @public (undocumented) +export const TECHDOCS_EXTERNAL_ANNOTATION = 'backstage.io/techdocs-entity'; + +// Warnings were encountered during analysis: +// +// src/constants.d.ts:2:22 - (ae-undocumented) Missing documentation for "TECHDOCS_ANNOTATION". +// src/constants.d.ts:4:22 - (ae-undocumented) Missing documentation for "TECHDOCS_EXTERNAL_ANNOTATION". +``` From ded99df8286e82f20d8368d5faab891a1c3e9e27 Mon Sep 17 00:00:00 2001 From: secustor Date: Mon, 23 Sep 2024 15:28:45 +0200 Subject: [PATCH 137/164] fix docs link Signed-off-by: secustor --- docs/notifications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/notifications/index.md b/docs/notifications/index.md index d4234b494e..ddbb156dac 100644 --- a/docs/notifications/index.md +++ b/docs/notifications/index.md @@ -196,7 +196,7 @@ notificationService.send({ }); ``` -Refer the [API documentation](https://github.com/backstage/backstage/blob/master/plugins/notifications-node/api-report.md) for further details. +Refer the [API documentation](https://github.com/backstage/backstage/blob/master/plugins/notifications-node/report.api.md) for further details. ### Signals From 2d01f6d8087da56d826ff634bcd054548f71fcfa Mon Sep 17 00:00:00 2001 From: Camila Belo Date: Mon, 23 Sep 2024 13:55:42 +0200 Subject: [PATCH 138/164] refactor: apply review suggestions Signed-off-by: Camila Belo --- plugins/scaffolder/api-report-alpha.md | 2 ++ .../src/next/TemplateEditorPage/TemplateFormPage.tsx | 4 ++-- plugins/scaffolder/src/translation.ts | 4 ++++ 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/plugins/scaffolder/api-report-alpha.md b/plugins/scaffolder/api-report-alpha.md index 4e8ded2644..e142ad03d5 100644 --- a/plugins/scaffolder/api-report-alpha.md +++ b/plugins/scaffolder/api-report-alpha.md @@ -229,6 +229,8 @@ export const scaffolderTranslationRef: TranslationRef< readonly 'ongoingTask.showLogsButtonTitle': 'Show Logs'; readonly 'templateEditorForm.stepper.emptyText': 'There are no spec parameters in the template to preview.'; readonly 'templateTypePicker.title': 'Categories'; + readonly 'templateFormPage.title': 'Template Form Playground'; + readonly 'templateFormPage.subtitle': 'Edit, preview, and try out templates and template forms'; readonly 'templateEditorPage.title': 'Template Editor'; readonly 'templateEditorPage.subtitle': 'Edit, preview, and try out templates and template forms'; readonly 'templateEditorPage.dryRunResults.title': 'Dry-run results'; diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateFormPage.tsx b/plugins/scaffolder/src/next/TemplateEditorPage/TemplateFormPage.tsx index 1781be69fb..c79688c8b7 100644 --- a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateFormPage.tsx +++ b/plugins/scaffolder/src/next/TemplateEditorPage/TemplateFormPage.tsx @@ -59,8 +59,8 @@ export function TemplateFormPage(props: TemplateFormPageProps) { return (
Date: Mon, 23 Sep 2024 16:18:15 +0200 Subject: [PATCH 139/164] cli: add placeholders for removed commands Signed-off-by: Patrik Oldsberg --- packages/cli/src/commands/index.ts | 43 ++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/packages/cli/src/commands/index.ts b/packages/cli/src/commands/index.ts index 50ac934897..7cc23300af 100644 --- a/packages/cli/src/commands/index.ts +++ b/packages/cli/src/commands/index.ts @@ -371,6 +371,49 @@ export function registerCommands(program: Command) { .command('info') .description('Show helpful information for debugging and reporting bugs') .action(lazy(() => import('./info').then(m => m.default))); + + // Notifications for removed commands + program + .command('create') + .allowUnknownOption(true) + .action(removed("use 'backstage-cli new' instead")); + program + .command('create-plugin') + .allowUnknownOption(true) + .action(removed("use 'backstage-cli new' instead")); + program + .command('plugin:diff') + .allowUnknownOption(true) + .action(removed("use 'backstage-cli fix' instead")); + program + .command('test') + .allowUnknownOption(true) + .action( + removed( + "use 'backstage-cli repo test' or 'backstage-cli package test' instead", + ), + ); + program + .command('clean') + .allowUnknownOption(true) + .action(removed("use 'backstage-cli package clean' instead")); + program + .command('versions:check') + .allowUnknownOption(true) + .action(removed("use 'yarn dedupe' or 'yarn-deduplicate' instead")); + program.command('install').allowUnknownOption(true).action(removed()); + program.command('onboard').allowUnknownOption(true).action(removed()); +} + +function removed(message?: string) { + return () => { + console.error( + message + ? `This command has been removed, ${message}` + : 'This command has been removed', + ); + process.exit(1); + }; } // Wraps an action function so that it always exits and handles errors From 567e344f3d7d124f94bca2c913c7cea9be2e2f04 Mon Sep 17 00:00:00 2001 From: secustor Date: Mon, 23 Sep 2024 18:04:17 +0200 Subject: [PATCH 140/164] update api reports Signed-off-by: secustor --- plugins/events-node/report.api.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/events-node/report.api.md b/plugins/events-node/report.api.md index ceeb21de53..2c06f50d56 100644 --- a/plugins/events-node/report.api.md +++ b/plugins/events-node/report.api.md @@ -143,8 +143,8 @@ export abstract class SubTopicEventRouter extends EventRouter { // Warnings were encountered during analysis: // // src/api/DefaultEventsService.d.ts:16:5 - (ae-undocumented) Missing documentation for "create". -// src/api/DefaultEventsService.d.ts:26:5 - (ae-undocumented) Missing documentation for "publish". -// src/api/DefaultEventsService.d.ts:27:5 - (ae-undocumented) Missing documentation for "subscribe". +// src/api/DefaultEventsService.d.ts:31:5 - (ae-undocumented) Missing documentation for "publish". +// src/api/DefaultEventsService.d.ts:32:5 - (ae-undocumented) Missing documentation for "subscribe". // src/api/EventParams.d.ts:4:1 - (ae-undocumented) Missing documentation for "EventParams". // src/api/EventPublisher.d.ts:15:5 - (ae-undocumented) Missing documentation for "setEventBroker". // src/api/EventRouter.d.ts:18:5 - (ae-undocumented) Missing documentation for "getSubscriberId". From a8cf07363a136e85d1d5bcdf4a7fe1602597e28a Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Mon, 23 Sep 2024 20:11:40 +0200 Subject: [PATCH 141/164] techdocs-cli: update e2e test scripts Signed-off-by: Patrik Oldsberg --- packages/techdocs-cli/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/techdocs-cli/package.json b/packages/techdocs-cli/package.json index c72c080caf..5c199c9d79 100644 --- a/packages/techdocs-cli/package.json +++ b/packages/techdocs-cli/package.json @@ -35,8 +35,8 @@ "prepack": "./scripts/prepack.sh", "start": "nodemon --", "test": "backstage-cli package test", - "test:e2e": "backstage-cli test --config cli-e2e-test.config.js", - "test:e2e:ci": "backstage-cli test --config cli-e2e-test.config.js --watchAll=false --ci" + "test:e2e": "backstage-cli package test --config cli-e2e-test.config.js", + "test:e2e:ci": "backstage-cli package test --config cli-e2e-test.config.js --watchAll=false --ci" }, "nodemonConfig": { "exec": "bin/techdocs-cli", From 10fb68d8125808ff2c8fff37bd047d48bc52a69b Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Tue, 24 Sep 2024 00:32:36 +0200 Subject: [PATCH 142/164] cli: optimize ts-morph project for workspace build Signed-off-by: Patrik Oldsberg --- packages/cli/src/lib/packager/createDistWorkspace.ts | 5 +++++ packages/cli/src/lib/packager/productionPack.ts | 9 ++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/packages/cli/src/lib/packager/createDistWorkspace.ts b/packages/cli/src/lib/packager/createDistWorkspace.ts index 54ce9c073f..7b7db43889 100644 --- a/packages/cli/src/lib/packager/createDistWorkspace.ts +++ b/packages/cli/src/lib/packager/createDistWorkspace.ts @@ -44,6 +44,7 @@ import { PackageGraphNode, } from '@backstage/cli-node'; import { runParallelWorkers } from '../parallel'; +import { createTypeDistProject } from '../typeDistProject'; // These packages aren't safe to pack in parallel since the CLI depends on them const UNSAFE_PACKAGES = [ @@ -287,6 +288,9 @@ async function moveToDistWorkspace( FAST_PACK_SCRIPTS.includes(pkg.packageJson.scripts?.prepack), ); + const tsMorphProject = + fastPackPackages.length > 0 ? await createTypeDistProject() : undefined; + // New an improved flow where we avoid calling `yarn pack` await Promise.all( fastPackPackages.map(async target => { @@ -297,6 +301,7 @@ async function moveToDistWorkspace( await productionPack({ packageDir: target.dir, targetDir: absoluteOutputPath, + project: tsMorphProject, }); }), ); diff --git a/packages/cli/src/lib/packager/productionPack.ts b/packages/cli/src/lib/packager/productionPack.ts index 8e89be603c..85f50352cc 100644 --- a/packages/cli/src/lib/packager/productionPack.ts +++ b/packages/cli/src/lib/packager/productionPack.ts @@ -23,6 +23,7 @@ import { createTypeDistProject, getEntryPointDefaultFeatureType, } from '../typeDistProject'; +import { Project } from 'ts-morph'; const PKG_PATH = 'package.json'; const PKG_BACKUP_PATH = 'package.json-prepack'; @@ -33,6 +34,10 @@ const SCRIPT_EXTS = ['.js', '.jsx', '.ts', '.tsx']; interface ProductionPackOptions { packageDir: string; targetDir?: string; + /** + * A ts-morph project to share across packages + */ + project?: Project; } export async function productionPack(options: ProductionPackOptions) { @@ -50,6 +55,7 @@ export async function productionPack(options: ProductionPackOptions) { const writeCompatibilityEntryPoints = await prepareExportsEntryPoints( pkg, packageDir, + options.project, ); // TODO(Rugvip): Once exports are rolled out more broadly we should deprecate and remove this behavior @@ -138,6 +144,7 @@ const EXPORT_MAP = { async function prepareExportsEntryPoints( pkg: BackstagePackageJson, packageDir: string, + commonProject?: Project, ) { const distPath = resolvePath(packageDir, 'dist'); if (!(await fs.pathExists(distPath))) { @@ -151,7 +158,7 @@ async function prepareExportsEntryPoints( >(); const entryPoints = readEntryPoints(pkg); - const project = await createTypeDistProject(); + const project = commonProject || (await createTypeDistProject()); for (const entryPoint of entryPoints) { if (!SCRIPT_EXTS.includes(entryPoint.ext)) { From 3beb987515090c009cdc1d5dc4602a755e90e2d7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 24 Sep 2024 05:00:01 +0000 Subject: [PATCH 143/164] fix(deps): update dependency rollup to v4.22.4 [security] Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 134 +++++++++++++++++++++++++++--------------------------- 1 file changed, 67 insertions(+), 67 deletions(-) diff --git a/yarn.lock b/yarn.lock index 1aab23e1bc..41f8b55ef1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -14365,114 +14365,114 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-android-arm-eabi@npm:4.21.3": - version: 4.21.3 - resolution: "@rollup/rollup-android-arm-eabi@npm:4.21.3" +"@rollup/rollup-android-arm-eabi@npm:4.22.4": + version: 4.22.4 + resolution: "@rollup/rollup-android-arm-eabi@npm:4.22.4" conditions: os=android & cpu=arm languageName: node linkType: hard -"@rollup/rollup-android-arm64@npm:4.21.3": - version: 4.21.3 - resolution: "@rollup/rollup-android-arm64@npm:4.21.3" +"@rollup/rollup-android-arm64@npm:4.22.4": + version: 4.22.4 + resolution: "@rollup/rollup-android-arm64@npm:4.22.4" conditions: os=android & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-darwin-arm64@npm:4.21.3": - version: 4.21.3 - resolution: "@rollup/rollup-darwin-arm64@npm:4.21.3" +"@rollup/rollup-darwin-arm64@npm:4.22.4": + version: 4.22.4 + resolution: "@rollup/rollup-darwin-arm64@npm:4.22.4" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-darwin-x64@npm:4.21.3": - version: 4.21.3 - resolution: "@rollup/rollup-darwin-x64@npm:4.21.3" +"@rollup/rollup-darwin-x64@npm:4.22.4": + version: 4.22.4 + resolution: "@rollup/rollup-darwin-x64@npm:4.22.4" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@rollup/rollup-linux-arm-gnueabihf@npm:4.21.3": - version: 4.21.3 - resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.21.3" +"@rollup/rollup-linux-arm-gnueabihf@npm:4.22.4": + version: 4.22.4 + resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.22.4" conditions: os=linux & cpu=arm & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-arm-musleabihf@npm:4.21.3": - version: 4.21.3 - resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.21.3" +"@rollup/rollup-linux-arm-musleabihf@npm:4.22.4": + version: 4.22.4 + resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.22.4" conditions: os=linux & cpu=arm & libc=musl languageName: node linkType: hard -"@rollup/rollup-linux-arm64-gnu@npm:4.21.3": - version: 4.21.3 - resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.21.3" +"@rollup/rollup-linux-arm64-gnu@npm:4.22.4": + version: 4.22.4 + resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.22.4" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-arm64-musl@npm:4.21.3": - version: 4.21.3 - resolution: "@rollup/rollup-linux-arm64-musl@npm:4.21.3" +"@rollup/rollup-linux-arm64-musl@npm:4.22.4": + version: 4.22.4 + resolution: "@rollup/rollup-linux-arm64-musl@npm:4.22.4" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@rollup/rollup-linux-powerpc64le-gnu@npm:4.21.3": - version: 4.21.3 - resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.21.3" +"@rollup/rollup-linux-powerpc64le-gnu@npm:4.22.4": + version: 4.22.4 + resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.22.4" conditions: os=linux & cpu=ppc64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-riscv64-gnu@npm:4.21.3": - version: 4.21.3 - resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.21.3" +"@rollup/rollup-linux-riscv64-gnu@npm:4.22.4": + version: 4.22.4 + resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.22.4" conditions: os=linux & cpu=riscv64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-s390x-gnu@npm:4.21.3": - version: 4.21.3 - resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.21.3" +"@rollup/rollup-linux-s390x-gnu@npm:4.22.4": + version: 4.22.4 + resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.22.4" conditions: os=linux & cpu=s390x & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-x64-gnu@npm:4.21.3": - version: 4.21.3 - resolution: "@rollup/rollup-linux-x64-gnu@npm:4.21.3" +"@rollup/rollup-linux-x64-gnu@npm:4.22.4": + version: 4.22.4 + resolution: "@rollup/rollup-linux-x64-gnu@npm:4.22.4" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-x64-musl@npm:4.21.3": - version: 4.21.3 - resolution: "@rollup/rollup-linux-x64-musl@npm:4.21.3" +"@rollup/rollup-linux-x64-musl@npm:4.22.4": + version: 4.22.4 + resolution: "@rollup/rollup-linux-x64-musl@npm:4.22.4" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@rollup/rollup-win32-arm64-msvc@npm:4.21.3": - version: 4.21.3 - resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.21.3" +"@rollup/rollup-win32-arm64-msvc@npm:4.22.4": + version: 4.22.4 + resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.22.4" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-win32-ia32-msvc@npm:4.21.3": - version: 4.21.3 - resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.21.3" +"@rollup/rollup-win32-ia32-msvc@npm:4.22.4": + version: 4.22.4 + resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.22.4" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@rollup/rollup-win32-x64-msvc@npm:4.21.3": - version: 4.21.3 - resolution: "@rollup/rollup-win32-x64-msvc@npm:4.21.3" +"@rollup/rollup-win32-x64-msvc@npm:4.22.4": + version: 4.22.4 + resolution: "@rollup/rollup-win32-x64-msvc@npm:4.22.4" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -39407,25 +39407,25 @@ __metadata: linkType: hard "rollup@npm:^4.0.0, rollup@npm:^4.20.0": - version: 4.21.3 - resolution: "rollup@npm:4.21.3" + version: 4.22.4 + resolution: "rollup@npm:4.22.4" dependencies: - "@rollup/rollup-android-arm-eabi": 4.21.3 - "@rollup/rollup-android-arm64": 4.21.3 - "@rollup/rollup-darwin-arm64": 4.21.3 - "@rollup/rollup-darwin-x64": 4.21.3 - "@rollup/rollup-linux-arm-gnueabihf": 4.21.3 - "@rollup/rollup-linux-arm-musleabihf": 4.21.3 - "@rollup/rollup-linux-arm64-gnu": 4.21.3 - "@rollup/rollup-linux-arm64-musl": 4.21.3 - "@rollup/rollup-linux-powerpc64le-gnu": 4.21.3 - "@rollup/rollup-linux-riscv64-gnu": 4.21.3 - "@rollup/rollup-linux-s390x-gnu": 4.21.3 - "@rollup/rollup-linux-x64-gnu": 4.21.3 - "@rollup/rollup-linux-x64-musl": 4.21.3 - "@rollup/rollup-win32-arm64-msvc": 4.21.3 - "@rollup/rollup-win32-ia32-msvc": 4.21.3 - "@rollup/rollup-win32-x64-msvc": 4.21.3 + "@rollup/rollup-android-arm-eabi": 4.22.4 + "@rollup/rollup-android-arm64": 4.22.4 + "@rollup/rollup-darwin-arm64": 4.22.4 + "@rollup/rollup-darwin-x64": 4.22.4 + "@rollup/rollup-linux-arm-gnueabihf": 4.22.4 + "@rollup/rollup-linux-arm-musleabihf": 4.22.4 + "@rollup/rollup-linux-arm64-gnu": 4.22.4 + "@rollup/rollup-linux-arm64-musl": 4.22.4 + "@rollup/rollup-linux-powerpc64le-gnu": 4.22.4 + "@rollup/rollup-linux-riscv64-gnu": 4.22.4 + "@rollup/rollup-linux-s390x-gnu": 4.22.4 + "@rollup/rollup-linux-x64-gnu": 4.22.4 + "@rollup/rollup-linux-x64-musl": 4.22.4 + "@rollup/rollup-win32-arm64-msvc": 4.22.4 + "@rollup/rollup-win32-ia32-msvc": 4.22.4 + "@rollup/rollup-win32-x64-msvc": 4.22.4 "@types/estree": 1.0.5 fsevents: ~2.3.2 dependenciesMeta: @@ -39465,7 +39465,7 @@ __metadata: optional: true bin: rollup: dist/bin/rollup - checksum: 19689840d25ced3924124b012d7e0048f2b0844a0765a5dde0804ae9961af1103657c2ec3e90f7a19876ebe40b3fa2c33f53fca071d46639c57bd327b82aba22 + checksum: b093b518deb1fd0c0455eef746abe9efa3a2cd7e2b65a4ace9e8fa5d60b3d6da2406816de2c6c1d553609f22cf730f1c5839a05a1ff60003c504486172238d1a languageName: node linkType: hard From bfd4bec795c62550c1ee207f15a9a39321d796d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Thu, 19 Sep 2024 17:07:38 +0200 Subject: [PATCH 144/164] remove the default font size of icons MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- .changeset/thirty-pets-fry.md | 8 ++ packages/core-plugin-api/report.api.md | 11 +-- .../core-plugin-api/src/icons/types.test.ts | 73 +++++++++++++++++++ packages/core-plugin-api/src/icons/types.ts | 16 +--- packages/frontend-plugin-api/report.api.md | 11 +-- .../src/icons/types.test.ts | 73 +++++++++++++++++++ .../frontend-plugin-api/src/icons/types.ts | 16 +--- 7 files changed, 168 insertions(+), 40 deletions(-) create mode 100644 .changeset/thirty-pets-fry.md create mode 100644 packages/core-plugin-api/src/icons/types.test.ts create mode 100644 packages/frontend-plugin-api/src/icons/types.test.ts diff --git a/.changeset/thirty-pets-fry.md b/.changeset/thirty-pets-fry.md new file mode 100644 index 0000000000..2a588bb161 --- /dev/null +++ b/.changeset/thirty-pets-fry.md @@ -0,0 +1,8 @@ +--- +'@backstage/frontend-plugin-api': minor +'@backstage/core-plugin-api': minor +--- + +**BREAKING PRODUCERS**: The `IconComponent` no longer accepts `fontSize="default"`. This has effectively been removed from Material-UI since its last two major versions, and has not worked properly for them in a long time. + +This change should not have an effect on neither users of MUI4 nor MUI5/6, since the updated interface should still let you send the respective `SvgIcon` types into interfaces where relevant (e.g. as app icons). diff --git a/packages/core-plugin-api/report.api.md b/packages/core-plugin-api/report.api.md index d412f59b2d..06333c1fb4 100644 --- a/packages/core-plugin-api/report.api.md +++ b/packages/core-plugin-api/report.api.md @@ -505,14 +505,9 @@ export const googleAuthApiRef: ApiRef< >; // @public -export type IconComponent = ComponentType< - | { - fontSize?: 'large' | 'small' | 'default' | 'inherit'; - } - | { - fontSize?: 'medium' | 'large' | 'small' | 'inherit'; - } ->; +export type IconComponent = ComponentType<{ + fontSize?: 'medium' | 'large' | 'small' | 'inherit'; +}>; // @public export type IdentityApi = { diff --git a/packages/core-plugin-api/src/icons/types.test.ts b/packages/core-plugin-api/src/icons/types.test.ts new file mode 100644 index 0000000000..fd01e176c9 --- /dev/null +++ b/packages/core-plugin-api/src/icons/types.test.ts @@ -0,0 +1,73 @@ +/* + * 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 * as React from 'react'; +import { type IconComponent } from './types'; + +// Emulate the MUI4 icon type +type Mui4Icon = (props: { + fontSize?: 'default' | 'inherit' | 'large' | 'medium' | 'small'; + otherProp?: string; +}) => JSX.Element; + +// Emulate the MUI5 icon type +type Mui5Icon = (props: { + fontSize?: 'inherit' | 'large' | 'medium' | 'small'; + otherProp?: string; +}) => JSX.Element; + +// Emulate the MUI6 icon type +interface OverridableComponent

{ + ( + props: { + /** + * The component used for the root node. + * Either a string to use a HTML element or a component. + */ + component: RootComponent; + } & { stuff: number }, + ): React.JSX.Element | null; + (props: P): React.JSX.Element | null; +} +type Mui6Icon = OverridableComponent<{ + fontSize?: 'inherit' | 'large' | 'medium' | 'small'; + otherProp?: string; +}>; + +type NotAnIcon1 = (props: { + fontSize?: 'foo'; + otherProp?: string; +}) => JSX.Element; + +type NotAnIcon2 = (props: { + fontSize?: number; + otherProp?: string; +}) => JSX.Element; + +describe('IconComponent', () => { + // eslint-disable-next-line jest/expect-expect + it('should be a component type', () => { + // @ts-ignore + let icon: IconComponent; + icon = {} as Mui4Icon; + icon = {} as Mui5Icon; + icon = {} as Mui6Icon; + // @ts-expect-error + icon = {} as NotAnIcon1; + // @ts-expect-error + icon = {} as NotAnIcon2; + }); +}); diff --git a/packages/core-plugin-api/src/icons/types.ts b/packages/core-plugin-api/src/icons/types.ts index 4d54629de2..2b00e1456f 100644 --- a/packages/core-plugin-api/src/icons/types.ts +++ b/packages/core-plugin-api/src/icons/types.ts @@ -22,7 +22,7 @@ import { ComponentType } from 'react'; * * @remarks * - * The type is based on SvgIcon from Material UI, but both do not what the plugin-api + * The type is based on SvgIcon from Material UI, but we do not want the plugin-api * package to have a dependency on Material UI, nor do we want the props to be as broad * as the SvgIconProps interface. * @@ -32,14 +32,6 @@ import { ComponentType } from 'react'; * * @public */ - -export type IconComponent = ComponentType< - /* Material UI v4 */ - | { - fontSize?: 'large' | 'small' | 'default' | 'inherit'; - } - /* Material UI v5: https://mui.com/material-ui/migration/v5-component-changes/#icon */ - | { - fontSize?: 'medium' | 'large' | 'small' | 'inherit'; - } ->; +export type IconComponent = ComponentType<{ + fontSize?: 'medium' | 'large' | 'small' | 'inherit'; +}>; diff --git a/packages/frontend-plugin-api/report.api.md b/packages/frontend-plugin-api/report.api.md index b575a94837..5bc2a663d7 100644 --- a/packages/frontend-plugin-api/report.api.md +++ b/packages/frontend-plugin-api/report.api.md @@ -1285,14 +1285,9 @@ export const IconBundleBlueprint: ExtensionBlueprint<{ }>; // @public -export type IconComponent = ComponentType< - | { - fontSize?: 'large' | 'small' | 'default' | 'inherit'; - } - | { - fontSize?: 'medium' | 'large' | 'small' | 'inherit'; - } ->; +export type IconComponent = ComponentType<{ + fontSize?: 'medium' | 'large' | 'small' | 'inherit'; +}>; // @public export interface IconsApi { diff --git a/packages/frontend-plugin-api/src/icons/types.test.ts b/packages/frontend-plugin-api/src/icons/types.test.ts new file mode 100644 index 0000000000..fd01e176c9 --- /dev/null +++ b/packages/frontend-plugin-api/src/icons/types.test.ts @@ -0,0 +1,73 @@ +/* + * 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 * as React from 'react'; +import { type IconComponent } from './types'; + +// Emulate the MUI4 icon type +type Mui4Icon = (props: { + fontSize?: 'default' | 'inherit' | 'large' | 'medium' | 'small'; + otherProp?: string; +}) => JSX.Element; + +// Emulate the MUI5 icon type +type Mui5Icon = (props: { + fontSize?: 'inherit' | 'large' | 'medium' | 'small'; + otherProp?: string; +}) => JSX.Element; + +// Emulate the MUI6 icon type +interface OverridableComponent

{ + ( + props: { + /** + * The component used for the root node. + * Either a string to use a HTML element or a component. + */ + component: RootComponent; + } & { stuff: number }, + ): React.JSX.Element | null; + (props: P): React.JSX.Element | null; +} +type Mui6Icon = OverridableComponent<{ + fontSize?: 'inherit' | 'large' | 'medium' | 'small'; + otherProp?: string; +}>; + +type NotAnIcon1 = (props: { + fontSize?: 'foo'; + otherProp?: string; +}) => JSX.Element; + +type NotAnIcon2 = (props: { + fontSize?: number; + otherProp?: string; +}) => JSX.Element; + +describe('IconComponent', () => { + // eslint-disable-next-line jest/expect-expect + it('should be a component type', () => { + // @ts-ignore + let icon: IconComponent; + icon = {} as Mui4Icon; + icon = {} as Mui5Icon; + icon = {} as Mui6Icon; + // @ts-expect-error + icon = {} as NotAnIcon1; + // @ts-expect-error + icon = {} as NotAnIcon2; + }); +}); diff --git a/packages/frontend-plugin-api/src/icons/types.ts b/packages/frontend-plugin-api/src/icons/types.ts index 4d54629de2..2b00e1456f 100644 --- a/packages/frontend-plugin-api/src/icons/types.ts +++ b/packages/frontend-plugin-api/src/icons/types.ts @@ -22,7 +22,7 @@ import { ComponentType } from 'react'; * * @remarks * - * The type is based on SvgIcon from Material UI, but both do not what the plugin-api + * The type is based on SvgIcon from Material UI, but we do not want the plugin-api * package to have a dependency on Material UI, nor do we want the props to be as broad * as the SvgIconProps interface. * @@ -32,14 +32,6 @@ import { ComponentType } from 'react'; * * @public */ - -export type IconComponent = ComponentType< - /* Material UI v4 */ - | { - fontSize?: 'large' | 'small' | 'default' | 'inherit'; - } - /* Material UI v5: https://mui.com/material-ui/migration/v5-component-changes/#icon */ - | { - fontSize?: 'medium' | 'large' | 'small' | 'inherit'; - } ->; +export type IconComponent = ComponentType<{ + fontSize?: 'medium' | 'large' | 'small' | 'inherit'; +}>; From bf6eaf35c8bdfd78c90e258db5ed16f4510b3b25 Mon Sep 17 00:00:00 2001 From: blam Date: Mon, 23 Sep 2024 14:28:52 +0200 Subject: [PATCH 145/164] chore: initial approach for field extensions Signed-off-by: blam --- .changeset/eight-steaks-chew.md | 6 + packages/scaffolder-internal/.eslintrc.js | 5 + packages/scaffolder-internal/README.md | 3 + .../scaffolder-internal/catalog-info.yaml | 9 ++ packages/scaffolder-internal/package.json | 32 ++++ packages/scaffolder-internal/src/index.ts | 17 +++ .../src/wiring/InternalFormField.ts | 33 +++++ .../scaffolder-internal/src/wiring/index.ts | 16 ++ plugins/scaffolder-react/package.json | 1 + plugins/scaffolder-react/report-alpha.api.md | 56 +++++++ plugins/scaffolder-react/report.api.md | 29 +++- plugins/scaffolder-react/src/api/ref.ts | 2 +- plugins/scaffolder-react/src/index.ts | 1 + .../next/blueprints/FormFieldBlueprint.tsx | 56 +++++++ .../src/next/blueprints/index.ts | 18 +++ .../src/next/blueprints/types.ts | 40 +++++ plugins/scaffolder-react/src/next/index.ts | 1 + plugins/scaffolder-react/src/utils.ts | 60 ++++++++ plugins/scaffolder/package.json | 4 +- plugins/scaffolder/report-alpha.api.md | 65 +++++++-- plugins/scaffolder/report.api.md | 23 +-- plugins/scaffolder/src/alpha.tsx | 113 -------------- plugins/scaffolder/src/alpha/api.tsx | 46 ++++++ .../scaffolder/src/alpha/api/FormFieldsApi.ts | 63 ++++++++ plugins/scaffolder/src/alpha/api/index.ts | 18 +++ plugins/scaffolder/src/alpha/api/ref.ts | 22 +++ plugins/scaffolder/src/alpha/api/types.ts | 21 +++ .../CustomFieldExplorer.tsx | 2 +- .../CustomFieldPlaygroud.tsx | 2 +- .../TemplateEditorPage/CustomFieldsPage.tsx | 4 +- .../DirectoryEditorContext.tsx | 2 +- .../TemplateEditorPage/DryRunContext.test.tsx | 0 .../TemplateEditorPage/DryRunContext.tsx | 0 .../DryRunResults/DryRunResults.test.tsx | 0 .../DryRunResults/DryRunResults.tsx | 2 +- .../DryRunResults/DryRunResultsList.test.tsx | 0 .../DryRunResults/DryRunResultsList.tsx | 4 +- .../DryRunResults/DryRunResultsSplitView.tsx | 0 .../DryRunResults/DryRunResultsView.test.tsx | 0 .../DryRunResults/DryRunResultsView.tsx | 4 +- .../DryRunResults/IconLink.tsx | 0 .../DryRunResults/TaskPageLinks.tsx | 0 .../DryRunResults/TaskStatusStepper.tsx | 2 +- .../TemplateEditorPage/DryRunResults/index.ts | 0 .../TemplateEditorPage/TemplateEditor.tsx | 2 +- .../TemplateEditorBrowser.test.tsx | 2 +- .../TemplateEditorBrowser.tsx | 4 +- .../TemplateEditorPage/TemplateEditorForm.tsx | 3 +- .../TemplateEditorIntro.tsx | 4 +- .../TemplateEditorPage/TemplateEditorPage.tsx | 12 +- .../TemplateEditorTextArea.tsx | 2 +- .../TemplateEditorToolbar.tsx | 2 +- .../TemplateEditorPage/TemplateFormPage.tsx | 4 +- .../TemplateFormPreviewer.tsx | 2 +- .../TemplateEditorPage/TemplatePage.tsx | 7 +- .../components}/TemplateEditorPage/index.ts | 0 .../RegisterExistingButton.test.tsx | 0 .../RegisterExistingButton.tsx | 0 .../TemplateListPage.test.tsx | 2 +- .../TemplateListPage/TemplateListPage.tsx | 4 +- .../components}/TemplateListPage/index.ts | 0 .../TemplateWizardPage.test.tsx | 2 +- .../TemplateWizardPage/TemplateWizardPage.tsx | 4 +- .../TemplateWizardPageContextMenu.tsx | 2 +- .../components}/TemplateWizardPage/index.ts | 0 .../src/{next => alpha/components}/index.ts | 0 .../src/{next => alpha/components}/types.ts | 0 plugins/scaffolder/src/alpha/extensions.tsx | 52 +++++++ .../src/alpha/fields/RepoUrlPicker.ts | 28 ++++ plugins/scaffolder/src/alpha/index.ts | 27 ++++ plugins/scaffolder/src/alpha/plugin.tsx | 59 ++++++++ .../src/components/Router/Router.test.tsx | 4 +- .../src/components/Router/Router.tsx | 4 +- .../fields/RepoUrlPicker/RepoUrlPicker.tsx | 6 +- .../components/fields/RepoUrlPicker/schema.ts | 138 +++++++++--------- .../scaffolder/src/components/fields/utils.ts | 17 +-- .../scaffolder/src/overridableComponents.ts | 6 +- yarn.lock | 11 ++ 78 files changed, 924 insertions(+), 268 deletions(-) create mode 100644 .changeset/eight-steaks-chew.md create mode 100644 packages/scaffolder-internal/.eslintrc.js create mode 100644 packages/scaffolder-internal/README.md create mode 100644 packages/scaffolder-internal/catalog-info.yaml create mode 100644 packages/scaffolder-internal/package.json create mode 100644 packages/scaffolder-internal/src/index.ts create mode 100644 packages/scaffolder-internal/src/wiring/InternalFormField.ts create mode 100644 packages/scaffolder-internal/src/wiring/index.ts create mode 100644 plugins/scaffolder-react/src/next/blueprints/FormFieldBlueprint.tsx create mode 100644 plugins/scaffolder-react/src/next/blueprints/index.ts create mode 100644 plugins/scaffolder-react/src/next/blueprints/types.ts create mode 100644 plugins/scaffolder-react/src/utils.ts delete mode 100644 plugins/scaffolder/src/alpha.tsx create mode 100644 plugins/scaffolder/src/alpha/api.tsx create mode 100644 plugins/scaffolder/src/alpha/api/FormFieldsApi.ts create mode 100644 plugins/scaffolder/src/alpha/api/index.ts create mode 100644 plugins/scaffolder/src/alpha/api/ref.ts create mode 100644 plugins/scaffolder/src/alpha/api/types.ts rename plugins/scaffolder/src/{next => alpha/components}/TemplateEditorPage/CustomFieldExplorer.tsx (99%) rename plugins/scaffolder/src/{next => alpha/components}/TemplateEditorPage/CustomFieldPlaygroud.tsx (99%) rename plugins/scaffolder/src/{next => alpha/components}/TemplateEditorPage/CustomFieldsPage.tsx (93%) rename plugins/scaffolder/src/{next => alpha/components}/TemplateEditorPage/DirectoryEditorContext.tsx (99%) rename plugins/scaffolder/src/{next => alpha/components}/TemplateEditorPage/DryRunContext.test.tsx (100%) rename plugins/scaffolder/src/{next => alpha/components}/TemplateEditorPage/DryRunContext.tsx (100%) rename plugins/scaffolder/src/{next => alpha/components}/TemplateEditorPage/DryRunResults/DryRunResults.test.tsx (100%) rename plugins/scaffolder/src/{next => alpha/components}/TemplateEditorPage/DryRunResults/DryRunResults.tsx (97%) rename plugins/scaffolder/src/{next => alpha/components}/TemplateEditorPage/DryRunResults/DryRunResultsList.test.tsx (100%) rename plugins/scaffolder/src/{next => alpha/components}/TemplateEditorPage/DryRunResults/DryRunResultsList.tsx (97%) rename plugins/scaffolder/src/{next => alpha/components}/TemplateEditorPage/DryRunResults/DryRunResultsSplitView.tsx (100%) rename plugins/scaffolder/src/{next => alpha/components}/TemplateEditorPage/DryRunResults/DryRunResultsView.test.tsx (100%) rename plugins/scaffolder/src/{next => alpha/components}/TemplateEditorPage/DryRunResults/DryRunResultsView.tsx (97%) rename plugins/scaffolder/src/{next => alpha/components}/TemplateEditorPage/DryRunResults/IconLink.tsx (100%) rename plugins/scaffolder/src/{next => alpha/components}/TemplateEditorPage/DryRunResults/TaskPageLinks.tsx (100%) rename plugins/scaffolder/src/{next => alpha/components}/TemplateEditorPage/DryRunResults/TaskStatusStepper.tsx (98%) rename plugins/scaffolder/src/{next => alpha/components}/TemplateEditorPage/DryRunResults/index.ts (100%) rename plugins/scaffolder/src/{next => alpha/components}/TemplateEditorPage/TemplateEditor.tsx (98%) rename plugins/scaffolder/src/{next => alpha/components}/TemplateEditorPage/TemplateEditorBrowser.test.tsx (95%) rename plugins/scaffolder/src/{next => alpha/components}/TemplateEditorPage/TemplateEditorBrowser.tsx (96%) rename plugins/scaffolder/src/{next => alpha/components}/TemplateEditorPage/TemplateEditorForm.tsx (99%) rename plugins/scaffolder/src/{next => alpha/components}/TemplateEditorPage/TemplateEditorIntro.tsx (97%) rename plugins/scaffolder/src/{next => alpha/components}/TemplateEditorPage/TemplateEditorPage.tsx (90%) rename plugins/scaffolder/src/{next => alpha/components}/TemplateEditorPage/TemplateEditorTextArea.tsx (98%) rename plugins/scaffolder/src/{next => alpha/components}/TemplateEditorPage/TemplateEditorToolbar.tsx (98%) rename plugins/scaffolder/src/{next => alpha/components}/TemplateEditorPage/TemplateFormPage.tsx (95%) rename plugins/scaffolder/src/{next => alpha/components}/TemplateEditorPage/TemplateFormPreviewer.tsx (99%) rename plugins/scaffolder/src/{next => alpha/components}/TemplateEditorPage/TemplatePage.tsx (94%) rename plugins/scaffolder/src/{next => alpha/components}/TemplateEditorPage/index.ts (100%) rename plugins/scaffolder/src/{next => alpha/components}/TemplateListPage/RegisterExistingButton.test.tsx (100%) rename plugins/scaffolder/src/{next => alpha/components}/TemplateListPage/RegisterExistingButton.tsx (100%) rename plugins/scaffolder/src/{next => alpha/components}/TemplateListPage/TemplateListPage.test.tsx (99%) rename plugins/scaffolder/src/{next => alpha/components}/TemplateListPage/TemplateListPage.tsx (98%) rename plugins/scaffolder/src/{next => alpha/components}/TemplateListPage/index.ts (100%) rename plugins/scaffolder/src/{next => alpha/components}/TemplateWizardPage/TemplateWizardPage.test.tsx (99%) rename plugins/scaffolder/src/{next => alpha/components}/TemplateWizardPage/TemplateWizardPage.tsx (97%) rename plugins/scaffolder/src/{next => alpha/components}/TemplateWizardPage/TemplateWizardPageContextMenu.tsx (97%) rename plugins/scaffolder/src/{next => alpha/components}/TemplateWizardPage/index.ts (100%) rename plugins/scaffolder/src/{next => alpha/components}/index.ts (100%) rename plugins/scaffolder/src/{next => alpha/components}/types.ts (100%) create mode 100644 plugins/scaffolder/src/alpha/extensions.tsx create mode 100644 plugins/scaffolder/src/alpha/fields/RepoUrlPicker.ts create mode 100644 plugins/scaffolder/src/alpha/index.ts create mode 100644 plugins/scaffolder/src/alpha/plugin.tsx diff --git a/.changeset/eight-steaks-chew.md b/.changeset/eight-steaks-chew.md new file mode 100644 index 0000000000..4651d3fb8c --- /dev/null +++ b/.changeset/eight-steaks-chew.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-scaffolder-react': minor +'@backstage/plugin-scaffolder': minor +--- + +Added support for `FormFieldBlueprint` to create field extensions in the Scaffolder plugin diff --git a/packages/scaffolder-internal/.eslintrc.js b/packages/scaffolder-internal/.eslintrc.js new file mode 100644 index 0000000000..e487f765b2 --- /dev/null +++ b/packages/scaffolder-internal/.eslintrc.js @@ -0,0 +1,5 @@ +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname, { + rules: { + '@backstage/no-top-level-material-ui-4-imports': 'error', + }, +}); diff --git a/packages/scaffolder-internal/README.md b/packages/scaffolder-internal/README.md new file mode 100644 index 0000000000..e7e6abeb57 --- /dev/null +++ b/packages/scaffolder-internal/README.md @@ -0,0 +1,3 @@ +# @internal/scaffolder + +This is an internal package used by the other scaffolder packages. It does not get published to NPM, but instead inlined into consuming packages due to the `backstage.inline` flag in `package.json`. diff --git a/packages/scaffolder-internal/catalog-info.yaml b/packages/scaffolder-internal/catalog-info.yaml new file mode 100644 index 0000000000..c2c2c013d3 --- /dev/null +++ b/packages/scaffolder-internal/catalog-info.yaml @@ -0,0 +1,9 @@ +apiVersion: backstage.io/v1alpha1 +kind: Component +metadata: + name: internal-scaffolder + title: '@internal/scaffolder' +spec: + lifecycle: experimental + type: backstage-web-library + owner: maintainers diff --git a/packages/scaffolder-internal/package.json b/packages/scaffolder-internal/package.json new file mode 100644 index 0000000000..a046ddc86b --- /dev/null +++ b/packages/scaffolder-internal/package.json @@ -0,0 +1,32 @@ +{ + "name": "@internal/scaffolder", + "version": "0.0.1", + "backstage": { + "role": "web-library", + "inline": true + }, + "private": true, + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "packages/scaffolder-internal" + }, + "license": "Apache-2.0", + "sideEffects": false, + "main": "src/index.ts", + "types": "src/index.ts", + "files": [ + "dist" + ], + "scripts": { + "lint": "backstage-cli package lint", + "test": "backstage-cli package test" + }, + "dependencies": { + "@backstage/plugin-scaffolder-react": "workspace:^", + "zod": "^3.22.4" + }, + "devDependencies": { + "@backstage/cli": "workspace:^" + } +} diff --git a/packages/scaffolder-internal/src/index.ts b/packages/scaffolder-internal/src/index.ts new file mode 100644 index 0000000000..a5728f2ff6 --- /dev/null +++ b/packages/scaffolder-internal/src/index.ts @@ -0,0 +1,17 @@ +/* + * 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. + */ + +export * from './wiring'; diff --git a/packages/scaffolder-internal/src/wiring/InternalFormField.ts b/packages/scaffolder-internal/src/wiring/InternalFormField.ts new file mode 100644 index 0000000000..5d7bf1ee7d --- /dev/null +++ b/packages/scaffolder-internal/src/wiring/InternalFormField.ts @@ -0,0 +1,33 @@ +/* + * 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 { OpaqueType } from '@internal/opaque'; +import { z } from 'zod'; + +import { FormFieldExtensionData } from '@backstage/plugin-scaffolder-react/alpha'; + +/** @alpha */ +export interface FormField { + readonly $$type: '@backstage/scaffolder/FormField'; +} + +/** @alpha */ +export const OpaqueFormField = OpaqueType.create<{ + public: FormField; + versions: FormFieldExtensionData & { + readonly version: 'v1'; + }; +}>({ type: '@backstage/scaffolder/FormField', versions: ['v1'] }); diff --git a/packages/scaffolder-internal/src/wiring/index.ts b/packages/scaffolder-internal/src/wiring/index.ts new file mode 100644 index 0000000000..c85755bccf --- /dev/null +++ b/packages/scaffolder-internal/src/wiring/index.ts @@ -0,0 +1,16 @@ +/* + * 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. + */ +export { OpaqueFormField, type FormField } from './InternalFormField'; diff --git a/plugins/scaffolder-react/package.json b/plugins/scaffolder-react/package.json index b0906070ff..5da8acead2 100644 --- a/plugins/scaffolder-react/package.json +++ b/plugins/scaffolder-react/package.json @@ -62,6 +62,7 @@ "@backstage/catalog-model": "workspace:^", "@backstage/core-components": "workspace:^", "@backstage/core-plugin-api": "workspace:^", + "@backstage/frontend-plugin-api": "workspace:^", "@backstage/plugin-catalog-react": "workspace:^", "@backstage/plugin-permission-react": "workspace:^", "@backstage/plugin-scaffolder-common": "workspace:^", diff --git a/plugins/scaffolder-react/report-alpha.api.md b/plugins/scaffolder-react/report-alpha.api.md index b9f0569714..75c6d08e32 100644 --- a/plugins/scaffolder-react/report-alpha.api.md +++ b/plugins/scaffolder-react/report-alpha.api.md @@ -7,10 +7,15 @@ import { ApiHolder } from '@backstage/core-plugin-api'; import { ComponentType } from 'react'; +import { ConfigurableExtensionDataRef } from '@backstage/frontend-plugin-api'; import { CustomFieldValidator } from '@backstage/plugin-scaffolder-react'; import { Dispatch } from 'react'; +import { ExtensionBlueprint } from '@backstage/frontend-plugin-api'; +import { FieldExtensionComponentProps } from '@backstage/plugin-scaffolder-react'; import { FieldExtensionOptions } from '@backstage/plugin-scaffolder-react'; +import { FieldSchema } from '@backstage/plugin-scaffolder-react'; import { FieldValidation } from '@rjsf/utils'; +import { FormField } from '@internal/scaffolder'; import { FormProps } from '@backstage/plugin-scaffolder-react'; import { IconComponent } from '@backstage/core-plugin-api'; import { JsonObject } from '@backstage/types'; @@ -34,6 +39,7 @@ import { TemplateParameterSchema } from '@backstage/plugin-scaffolder-react'; import { TemplatePresentationV1beta3 } from '@backstage/plugin-scaffolder-common'; import { UiSchema } from '@rjsf/utils'; import { WidgetProps } from '@rjsf/utils'; +import { z } from 'zod'; // @alpha (undocumented) export type BackstageOverrides = Overrides & { @@ -57,6 +63,12 @@ export const createAsyncValidators: ( // @alpha export const createFieldValidation: () => FieldValidation; +// @alpha +export function createFormField< + TReturnValue extends z.ZodType, + TUiOptions extends z.ZodType, +>(opts: FormFieldExtensionData): FormField; + // @alpha export const DefaultTemplateOutputs: (props: { output?: ScaffolderTaskOutput; @@ -76,6 +88,49 @@ export const Form: ( props: PropsWithChildren, ) => React_2.JSX.Element; +// @alpha +export const FormFieldBlueprint: ExtensionBlueprint<{ + kind: 'scaffolder-form-field'; + name: undefined; + params: { + field: () => Promise; + }; + output: ConfigurableExtensionDataRef< + () => Promise, + 'scaffolder.form-field-loader', + {} + >; + inputs: {}; + config: {}; + configInput: {}; + dataRefs: { + formFieldLoader: ConfigurableExtensionDataRef< + () => Promise, + 'scaffolder.form-field-loader', + {} + >; + }; +}>; + +// @alpha (undocumented) +export type FormFieldExtensionData< + TReturnValue extends z.ZodType = z.ZodType, + TUiOptions extends z.ZodType = z.ZodType, +> = { + name: string; + component: ( + props: FieldExtensionComponentProps< + z.output, + z.output + >, + ) => JSX.Element | null; + validation?: CustomFieldValidator< + z.output, + z.output + >; + schema?: FieldSchema, z.output>; +}; + // @alpha (undocumented) export type FormValidation = { [name: string]: FieldValidation | FormValidation; @@ -320,6 +375,7 @@ export type WorkflowProps = { // Warnings were encountered during analysis: // +// src/next/blueprints/types.d.ts:5:1 - (ae-undocumented) Missing documentation for "FormFieldExtensionData". // src/next/components/ScaffolderField/ScaffolderField.d.ts:7:5 - (ae-undocumented) Missing documentation for "rawDescription". // src/next/components/ScaffolderField/ScaffolderField.d.ts:8:5 - (ae-undocumented) Missing documentation for "errors". // src/next/components/ScaffolderField/ScaffolderField.d.ts:9:5 - (ae-undocumented) Missing documentation for "rawErrors". diff --git a/plugins/scaffolder-react/report.api.md b/plugins/scaffolder-react/report.api.md index 0fcb3fbf04..cf5f08dae8 100644 --- a/plugins/scaffolder-react/report.api.md +++ b/plugins/scaffolder-react/report.api.md @@ -6,7 +6,7 @@ /// import { ApiHolder } from '@backstage/core-plugin-api'; -import { ApiRef } from '@backstage/core-plugin-api'; +import { ApiRef } from '@backstage/frontend-plugin-api'; import { ComponentType } from 'react'; import { CustomValidator } from '@rjsf/utils'; import { ElementType } from 'react'; @@ -44,6 +44,7 @@ import { TemplatesType } from '@rjsf/utils'; import { UIOptionsType } from '@rjsf/utils'; import { UiSchema } from '@rjsf/utils'; import { ValidatorType } from '@rjsf/utils'; +import { z } from 'zod'; // @public export type Action = { @@ -125,6 +126,18 @@ export interface FieldExtensionUiSchema 'ui:options'?: TUiOptions & UIOptionsType; } +// @public +export interface FieldSchema { + // (undocumented) + readonly schema: CustomFieldExtensionSchema; + // (undocumented) + readonly TProps: FieldExtensionComponentProps; + // @deprecated (undocumented) + readonly type: FieldExtensionComponentProps; + // @deprecated (undocumented) + readonly uiOptionsType: TUiOptions; +} + // @public export type FormProps = Pick< FormProps_2, @@ -168,6 +181,15 @@ export type LogEvent = { taskId: string; }; +// @public (undocumented) +export function makeFieldSchema< + TReturnType extends z.ZodType, + TUiOptions extends z.ZodType, +>(options: { + output: (zImpl: typeof z) => TReturnType; + uiOptions?: (zImpl: typeof z) => TUiOptions; +}): FieldSchema, z.output>; + // @public export type ReviewStepProps = { disableButtons: boolean; @@ -566,6 +588,11 @@ export const useTemplateSecrets: () => ScaffolderUseTemplateSecrets; // src/layouts/createScaffolderLayout.d.ts:17:5 - (ae-undocumented) Missing documentation for "component". // src/secrets/SecretsContext.d.ts:14:5 - (ae-undocumented) Missing documentation for "setSecrets". // src/secrets/SecretsContext.d.ts:15:5 - (ae-undocumented) Missing documentation for "secrets". +// src/utils.d.ts:4:1 - (ae-undocumented) Missing documentation for "makeFieldSchema". +// src/utils.d.ts:15:5 - (ae-undocumented) Missing documentation for "type". +// src/utils.d.ts:17:5 - (ae-undocumented) Missing documentation for "uiOptionsType". +// src/utils.d.ts:18:5 - (ae-undocumented) Missing documentation for "schema". +// src/utils.d.ts:19:5 - (ae-undocumented) Missing documentation for "TProps". // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/scaffolder-react/src/api/ref.ts b/plugins/scaffolder-react/src/api/ref.ts index 3dee426b09..4cf50d377b 100644 --- a/plugins/scaffolder-react/src/api/ref.ts +++ b/plugins/scaffolder-react/src/api/ref.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { createApiRef } from '@backstage/core-plugin-api'; +import { createApiRef } from '@backstage/frontend-plugin-api'; import { ScaffolderApi } from './types'; /** @public */ diff --git a/plugins/scaffolder-react/src/index.ts b/plugins/scaffolder-react/src/index.ts index 70560cc694..e73df50fce 100644 --- a/plugins/scaffolder-react/src/index.ts +++ b/plugins/scaffolder-react/src/index.ts @@ -21,3 +21,4 @@ export * from './secrets'; export * from './api'; export * from './hooks'; export * from './layouts'; +export * from './utils'; diff --git a/plugins/scaffolder-react/src/next/blueprints/FormFieldBlueprint.tsx b/plugins/scaffolder-react/src/next/blueprints/FormFieldBlueprint.tsx new file mode 100644 index 0000000000..e99adcba82 --- /dev/null +++ b/plugins/scaffolder-react/src/next/blueprints/FormFieldBlueprint.tsx @@ -0,0 +1,56 @@ +/* + * 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 { + createExtensionBlueprint, + createExtensionDataRef, +} from '@backstage/frontend-plugin-api'; +import { z } from 'zod'; + +import { OpaqueFormField, FormField } from '@internal/scaffolder'; +import { FormFieldExtensionData } from './types'; + +const formFieldExtensionDataRef = createExtensionDataRef< + () => Promise +>().with({ + id: 'scaffolder.form-field-loader', +}); + +/** + * @alpha + * Creates extensions that are Field Extensions for the Scaffolder + * */ +export const FormFieldBlueprint = createExtensionBlueprint({ + kind: 'scaffolder-form-field', + attachTo: { id: 'api:scaffolder/form-fields', input: 'formFields' }, + dataRefs: { + formFieldLoader: formFieldExtensionDataRef, + }, + output: [formFieldExtensionDataRef], + *factory(params: { field: () => Promise }) { + yield formFieldExtensionDataRef(params.field); + }, +}); + +/** + * @alpha + * Used to create a form field binding with typechecking for compliance + */ +export function createFormField< + TReturnValue extends z.ZodType, + TUiOptions extends z.ZodType, +>(opts: FormFieldExtensionData): FormField { + return OpaqueFormField.createInstance('v1', opts); +} diff --git a/plugins/scaffolder-react/src/next/blueprints/index.ts b/plugins/scaffolder-react/src/next/blueprints/index.ts new file mode 100644 index 0000000000..165c583ac8 --- /dev/null +++ b/plugins/scaffolder-react/src/next/blueprints/index.ts @@ -0,0 +1,18 @@ +/* + * 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. + */ + +export * from './FormFieldBlueprint'; +export * from './types'; diff --git a/plugins/scaffolder-react/src/next/blueprints/types.ts b/plugins/scaffolder-react/src/next/blueprints/types.ts new file mode 100644 index 0000000000..eccf7e4606 --- /dev/null +++ b/plugins/scaffolder-react/src/next/blueprints/types.ts @@ -0,0 +1,40 @@ +/* + * 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 { z } from 'zod'; +import { + CustomFieldValidator, + FieldExtensionComponentProps, + FieldSchema, +} from '@backstage/plugin-scaffolder-react'; + +/** @alpha */ +export type FormFieldExtensionData< + TReturnValue extends z.ZodType = z.ZodType, + TUiOptions extends z.ZodType = z.ZodType, +> = { + name: string; + component: ( + props: FieldExtensionComponentProps< + z.output, + z.output + >, + ) => JSX.Element | null; + validation?: CustomFieldValidator< + z.output, + z.output + >; + schema?: FieldSchema, z.output>; +}; diff --git a/plugins/scaffolder-react/src/next/index.ts b/plugins/scaffolder-react/src/next/index.ts index 2c9c1706f0..07f4565166 100644 --- a/plugins/scaffolder-react/src/next/index.ts +++ b/plugins/scaffolder-react/src/next/index.ts @@ -17,3 +17,4 @@ export * from './components'; export * from './lib'; export * from './hooks'; export * from './overridableComponents'; +export * from './blueprints'; diff --git a/plugins/scaffolder-react/src/utils.ts b/plugins/scaffolder-react/src/utils.ts new file mode 100644 index 0000000000..63a62fe3fc --- /dev/null +++ b/plugins/scaffolder-react/src/utils.ts @@ -0,0 +1,60 @@ +/* + * 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 zodToJsonSchema from 'zod-to-json-schema'; +import { JSONSchema7 } from 'json-schema'; +import { z } from 'zod'; +import { + CustomFieldExtensionSchema, + FieldExtensionComponentProps, +} from './extensions'; + +/** @public */ +export function makeFieldSchema< + TReturnType extends z.ZodType, + TUiOptions extends z.ZodType, +>(options: { + output: (zImpl: typeof z) => TReturnType; + uiOptions?: (zImpl: typeof z) => TUiOptions; +}): FieldSchema, z.output> { + const { output, uiOptions } = options; + return { + TProps: undefined as any, + schema: { + returnValue: zodToJsonSchema(output(z)) as JSONSchema7, + uiOptions: uiOptions && (zodToJsonSchema(uiOptions(z)) as JSONSchema7), + }, + + // These will be removed - just here for backwards compat whilst we're moving across + type: undefined as any, + uiOptionsType: undefined as any, + }; +} + +/** + * @public + * FieldSchema encapsulates a JSONSchema7 along with the + * matching FieldExtensionComponentProps type for a field extension. + */ +export interface FieldSchema { + /** @deprecated use TProps instead */ + readonly type: FieldExtensionComponentProps; + /** @deprecated will be removed */ + readonly uiOptionsType: TUiOptions; + + readonly schema: CustomFieldExtensionSchema; + readonly TProps: FieldExtensionComponentProps; +} diff --git a/plugins/scaffolder/package.json b/plugins/scaffolder/package.json index a777f742c4..86fa96ede2 100644 --- a/plugins/scaffolder/package.json +++ b/plugins/scaffolder/package.json @@ -30,7 +30,7 @@ "sideEffects": false, "exports": { ".": "./src/index.ts", - "./alpha": "./src/alpha.tsx", + "./alpha": "./src/alpha/index.ts", "./package.json": "./package.json" }, "main": "src/index.ts", @@ -38,7 +38,7 @@ "typesVersions": { "*": { "alpha": [ - "src/alpha.tsx" + "src/alpha/index.ts" ], "package.json": [ "package.json" diff --git a/plugins/scaffolder/report-alpha.api.md b/plugins/scaffolder/report-alpha.api.md index b71bbb1395..051bfee955 100644 --- a/plugins/scaffolder/report-alpha.api.md +++ b/plugins/scaffolder/report-alpha.api.md @@ -3,16 +3,21 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts +/// + import { AnyApiFactory } from '@backstage/frontend-plugin-api'; import { AnyRouteRefParams } from '@backstage/frontend-plugin-api'; import { ConfigurableExtensionDataRef } from '@backstage/frontend-plugin-api'; import { ExtensionDefinition } from '@backstage/frontend-plugin-api'; +import { ExtensionInput } from '@backstage/frontend-plugin-api'; import { ExternalRouteRef } from '@backstage/frontend-plugin-api'; import { FieldExtensionOptions } from '@backstage/plugin-scaffolder-react'; +import { FormField } from '@internal/scaffolder'; import type { FormProps as FormProps_2 } from '@rjsf/core'; import { FormProps as FormProps_3 } from '@backstage/plugin-scaffolder-react'; import { FrontendPlugin } from '@backstage/frontend-plugin-api'; import { IconComponent } from '@backstage/core-plugin-api'; +import { JSX as JSX_2 } from 'react'; import { LayoutOptions } from '@backstage/plugin-scaffolder-react'; import { PathParams } from '@backstage/core-plugin-api'; import { default as React_2 } from 'react'; @@ -69,11 +74,7 @@ const _default: FrontendPlugin< path?: string | undefined; }; output: - | ConfigurableExtensionDataRef< - React_2.JSX.Element, - 'core.reactElement', - {} - > + | ConfigurableExtensionDataRef | ConfigurableExtensionDataRef | ConfigurableExtensionDataRef< RouteRef, @@ -110,6 +111,48 @@ const _default: FrontendPlugin< routeRef: RouteRef; }; }>; + 'scaffolder-form-field:scaffolder/repo-url-picker': ExtensionDefinition<{ + kind: 'scaffolder-form-field'; + name: 'repo-url-picker'; + config: {}; + configInput: {}; + output: ConfigurableExtensionDataRef< + () => Promise, + 'scaffolder.form-field-loader', + {} + >; + inputs: {}; + params: { + field: () => Promise; + }; + }>; + 'api:scaffolder/form-fields': ExtensionDefinition<{ + config: {}; + configInput: {}; + output: ConfigurableExtensionDataRef< + AnyApiFactory, + 'core.api.factory', + {} + >; + inputs: { + formFields: ExtensionInput< + ConfigurableExtensionDataRef< + () => Promise, + 'scaffolder.form-field-loader', + {} + >, + { + singleton: false; + optional: false; + } + >; + }; + kind: 'api'; + name: 'form-fields'; + params: { + factory: AnyApiFactory; + }; + }>; } >; export default _default; @@ -315,12 +358,12 @@ export type TemplateWizardPageProps = { // Warnings were encountered during analysis: // -// src/alpha.d.ts:5:15 - (ae-undocumented) Missing documentation for "_default". -// src/next/TemplateEditorPage/CustomFieldExplorer.d.ts:4:1 - (ae-undocumented) Missing documentation for "ScaffolderCustomFieldExplorerClassKey". -// src/next/TemplateEditorPage/TemplateEditor.d.ts:6:1 - (ae-undocumented) Missing documentation for "ScaffolderTemplateEditorClassKey". -// src/next/TemplateEditorPage/TemplateFormPreviewer.d.ts:4:1 - (ae-undocumented) Missing documentation for "ScaffolderTemplateFormPreviewerClassKey". -// src/next/TemplateListPage/TemplateListPage.d.ts:7:1 - (ae-undocumented) Missing documentation for "TemplateListPageProps". -// src/next/TemplateWizardPage/TemplateWizardPage.d.ts:6:1 - (ae-undocumented) Missing documentation for "TemplateWizardPageProps". +// src/alpha/components/TemplateEditorPage/CustomFieldExplorer.d.ts:4:1 - (ae-undocumented) Missing documentation for "ScaffolderCustomFieldExplorerClassKey". +// src/alpha/components/TemplateEditorPage/TemplateEditor.d.ts:6:1 - (ae-undocumented) Missing documentation for "ScaffolderTemplateEditorClassKey". +// src/alpha/components/TemplateEditorPage/TemplateFormPreviewer.d.ts:4:1 - (ae-undocumented) Missing documentation for "ScaffolderTemplateFormPreviewerClassKey". +// src/alpha/components/TemplateListPage/TemplateListPage.d.ts:7:1 - (ae-undocumented) Missing documentation for "TemplateListPageProps". +// src/alpha/components/TemplateWizardPage/TemplateWizardPage.d.ts:6:1 - (ae-undocumented) Missing documentation for "TemplateWizardPageProps". +// src/alpha/plugin.d.ts:3:15 - (ae-undocumented) Missing documentation for "_default". // src/translation.d.ts:2:22 - (ae-undocumented) Missing documentation for "scaffolderTranslationRef". // (No @packageDocumentation comment for this package) diff --git a/plugins/scaffolder/report.api.md b/plugins/scaffolder/report.api.md index 8c60eda7f5..1adaa8f167 100644 --- a/plugins/scaffolder/report.api.md +++ b/plugins/scaffolder/report.api.md @@ -19,6 +19,7 @@ import { FetchApi } from '@backstage/core-plugin-api'; import { FieldExtensionComponent as FieldExtensionComponent_2 } from '@backstage/plugin-scaffolder-react'; import { FieldExtensionComponentProps as FieldExtensionComponentProps_2 } from '@backstage/plugin-scaffolder-react'; import { FieldExtensionOptions as FieldExtensionOptions_2 } from '@backstage/plugin-scaffolder-react'; +import { FieldSchema as FieldSchema_2 } from '@backstage/plugin-scaffolder-react'; import { FieldValidation } from '@rjsf/utils'; import { FormProps } from '@backstage/plugin-scaffolder-react'; import { IdentityApi } from '@backstage/core-plugin-api'; @@ -174,15 +175,8 @@ export type FieldExtensionComponentProps< // @public @deprecated (undocumented) export type FieldExtensionOptions = FieldExtensionOptions_2; -// @public -export interface FieldSchema { - // (undocumented) - readonly schema: CustomFieldExtensionSchema_2; - // (undocumented) - readonly type: FieldExtensionComponentProps_2; - // (undocumented) - readonly uiOptionsType: TUiOptions; -} +// @public @deprecated (undocumented) +export interface FieldSchema extends FieldSchema_2 {} // @public @deprecated (undocumented) export type LayoutOptions = LayoutOptions_2; @@ -196,7 +190,7 @@ export type ListActionsResponse = ListActionsResponse_2; // @public @deprecated (undocumented) export type LogEvent = LogEvent_2; -// @public +// @public @deprecated (undocumented) export function makeFieldSchemaFromZod< TReturnSchema extends z.ZodType, TUiOptionsSchema extends z.ZodType = z.ZodType, @@ -443,7 +437,7 @@ export const RepoUrlPickerFieldExtension: FieldExtensionComponent_2< >; // @public (undocumented) -export const RepoUrlPickerFieldSchema: FieldSchema< +export const RepoUrlPickerFieldSchema: FieldSchema_2< string, { allowedHosts?: string[] | undefined; @@ -469,7 +463,7 @@ export const RepoUrlPickerFieldSchema: FieldSchema< } >; -// @public +// @public @deprecated export type RepoUrlPickerUiOptions = typeof RepoUrlPickerFieldSchema.uiOptionsType; @@ -689,9 +683,8 @@ export const useTemplateSecrets: () => ScaffolderUseTemplateSecrets_2; // src/components/fields/OwnedEntityPicker/schema.d.ts:4:22 - (ae-undocumented) Missing documentation for "OwnedEntityPickerFieldSchema". // src/components/fields/OwnerPicker/schema.d.ts:4:22 - (ae-undocumented) Missing documentation for "OwnerPickerFieldSchema". // src/components/fields/RepoUrlPicker/schema.d.ts:4:22 - (ae-undocumented) Missing documentation for "RepoUrlPickerFieldSchema". -// src/components/fields/utils.d.ts:9:5 - (ae-undocumented) Missing documentation for "schema". -// src/components/fields/utils.d.ts:10:5 - (ae-undocumented) Missing documentation for "type". -// src/components/fields/utils.d.ts:11:5 - (ae-undocumented) Missing documentation for "uiOptionsType". +// src/components/fields/utils.d.ts:7:1 - (ae-undocumented) Missing documentation for "FieldSchema". +// src/components/fields/utils.d.ts:15:1 - (ae-undocumented) Missing documentation for "makeFieldSchemaFromZod". // src/deprecated.d.ts:7:22 - (ae-undocumented) Missing documentation for "rootRouteRef". // src/deprecated.d.ts:12:22 - (ae-undocumented) Missing documentation for "createScaffolderFieldExtension". // src/deprecated.d.ts:17:22 - (ae-undocumented) Missing documentation for "ScaffolderFieldExtensions". diff --git a/plugins/scaffolder/src/alpha.tsx b/plugins/scaffolder/src/alpha.tsx deleted file mode 100644 index d7def54d25..0000000000 --- a/plugins/scaffolder/src/alpha.tsx +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright 2023 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 React from 'react'; -import { - createApiFactory, - createFrontendPlugin, - discoveryApiRef, - fetchApiRef, - identityApiRef, - ApiBlueprint, - PageBlueprint, - NavItemBlueprint, -} from '@backstage/frontend-plugin-api'; -import CreateComponentIcon from '@material-ui/icons/AddCircleOutline'; -import { - compatWrapper, - convertLegacyRouteRef, - convertLegacyRouteRefs, -} from '@backstage/core-compat-api'; -import { scmIntegrationsApiRef } from '@backstage/integration-react'; -import { scaffolderApiRef } from '@backstage/plugin-scaffolder-react'; -import { ScaffolderClient } from './api'; -import { - registerComponentRouteRef, - rootRouteRef, - viewTechDocRouteRef, - selectedTemplateRouteRef, - scaffolderTaskRouteRef, - scaffolderListTaskRouteRef, - actionsRouteRef, - editRouteRef, -} from './routes'; - -export { - type FormProps, - type TemplateListPageProps, - type TemplateWizardPageProps, - type ScaffolderCustomFieldExplorerClassKey, - type ScaffolderTemplateEditorClassKey, - type ScaffolderTemplateFormPreviewerClassKey, -} from './next'; - -export { scaffolderTranslationRef } from './translation'; - -const scaffolderApi = ApiBlueprint.make({ - params: { - factory: createApiFactory({ - api: scaffolderApiRef, - deps: { - discoveryApi: discoveryApiRef, - scmIntegrationsApi: scmIntegrationsApiRef, - fetchApi: fetchApiRef, - identityApi: identityApiRef, - }, - factory: ({ discoveryApi, scmIntegrationsApi, fetchApi, identityApi }) => - new ScaffolderClient({ - discoveryApi, - scmIntegrationsApi, - fetchApi, - identityApi, - }), - }), - }, -}); - -const scaffolderPage = PageBlueprint.make({ - params: { - routeRef: convertLegacyRouteRef(rootRouteRef), - defaultPath: '/create', - loader: () => - import('./components/Router').then(m => compatWrapper()), - }, -}); - -const scaffolderNavItem = NavItemBlueprint.make({ - params: { - routeRef: convertLegacyRouteRef(rootRouteRef), - title: 'Create...', - icon: CreateComponentIcon, - }, -}); - -/** @alpha */ -export default createFrontendPlugin({ - id: 'scaffolder', - routes: convertLegacyRouteRefs({ - root: rootRouteRef, - selectedTemplate: selectedTemplateRouteRef, - ongoingTask: scaffolderTaskRouteRef, - actions: actionsRouteRef, - listTasks: scaffolderListTaskRouteRef, - edit: editRouteRef, - }), - externalRoutes: convertLegacyRouteRefs({ - registerComponent: registerComponentRouteRef, - viewTechDoc: viewTechDocRouteRef, - }), - extensions: [scaffolderApi, scaffolderPage, scaffolderNavItem], -}); diff --git a/plugins/scaffolder/src/alpha/api.tsx b/plugins/scaffolder/src/alpha/api.tsx new file mode 100644 index 0000000000..06364cd6e9 --- /dev/null +++ b/plugins/scaffolder/src/alpha/api.tsx @@ -0,0 +1,46 @@ +/* + * 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 { + ApiBlueprint, + createApiFactory, + discoveryApiRef, + fetchApiRef, + identityApiRef, +} from '@backstage/frontend-plugin-api'; +import { scmIntegrationsApiRef } from '@backstage/integration-react'; +import { scaffolderApiRef } from '@backstage/plugin-scaffolder-react'; +import { ScaffolderClient } from '../api'; + +export const scaffolderApi = ApiBlueprint.make({ + params: { + factory: createApiFactory({ + api: scaffolderApiRef, + deps: { + discoveryApi: discoveryApiRef, + scmIntegrationsApi: scmIntegrationsApiRef, + fetchApi: fetchApiRef, + identityApi: identityApiRef, + }, + factory: ({ discoveryApi, scmIntegrationsApi, fetchApi, identityApi }) => + new ScaffolderClient({ + discoveryApi, + scmIntegrationsApi, + fetchApi, + identityApi, + }), + }), + }, +}); diff --git a/plugins/scaffolder/src/alpha/api/FormFieldsApi.ts b/plugins/scaffolder/src/alpha/api/FormFieldsApi.ts new file mode 100644 index 0000000000..35141463d5 --- /dev/null +++ b/plugins/scaffolder/src/alpha/api/FormFieldsApi.ts @@ -0,0 +1,63 @@ +/* + * 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 { + ApiBlueprint, + createApiFactory, + createExtensionInput, +} from '@backstage/frontend-plugin-api'; +import { formFieldsApiRef } from './ref'; +import { ScaffolderFormFieldsApi } from './types'; +import { FormFieldBlueprint } from '@backstage/plugin-scaffolder-react/alpha'; +import { FormField, OpaqueFormField } from '@internal/scaffolder'; + +class DefaultScaffolderFormFieldsApi implements ScaffolderFormFieldsApi { + constructor( + private readonly formFieldLoaders: Array<() => Promise> = [], + ) {} + + async getFormFields() { + const formFields = await Promise.all( + this.formFieldLoaders.map(loader => loader()), + ); + + const internalFormFields = formFields.map(OpaqueFormField.toInternal); + + return internalFormFields; + } +} + +export const formFieldsApi = ApiBlueprint.makeWithOverrides({ + name: 'form-fields', + inputs: { + formFields: createExtensionInput([ + FormFieldBlueprint.dataRefs.formFieldLoader, + ]), + }, + factory(originalFactory, { inputs }) { + const formFieldLoaders = inputs.formFields.map(e => + e.get(FormFieldBlueprint.dataRefs.formFieldLoader), + ); + + return originalFactory({ + factory: createApiFactory({ + api: formFieldsApiRef, + deps: {}, + factory: () => new DefaultScaffolderFormFieldsApi(formFieldLoaders), + }), + }); + }, +}); diff --git a/plugins/scaffolder/src/alpha/api/index.ts b/plugins/scaffolder/src/alpha/api/index.ts new file mode 100644 index 0000000000..bbc30ef50b --- /dev/null +++ b/plugins/scaffolder/src/alpha/api/index.ts @@ -0,0 +1,18 @@ +/* + * 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. + */ + +export { formFieldsApiRef } from './ref'; +export type { ScaffolderFormFieldsApi } from './types'; diff --git a/plugins/scaffolder/src/alpha/api/ref.ts b/plugins/scaffolder/src/alpha/api/ref.ts new file mode 100644 index 0000000000..52bc44e674 --- /dev/null +++ b/plugins/scaffolder/src/alpha/api/ref.ts @@ -0,0 +1,22 @@ +/* + * 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 { createApiRef } from '@backstage/frontend-plugin-api'; +import { ScaffolderFormFieldsApi } from './types'; + +export const formFieldsApiRef = createApiRef({ + id: 'plugin.scaffolder.form-fields', +}); diff --git a/plugins/scaffolder/src/alpha/api/types.ts b/plugins/scaffolder/src/alpha/api/types.ts new file mode 100644 index 0000000000..81f08b18e2 --- /dev/null +++ b/plugins/scaffolder/src/alpha/api/types.ts @@ -0,0 +1,21 @@ +/* + * 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 { FormFieldExtensionData } from '@backstage/plugin-scaffolder-react/alpha'; + +export interface ScaffolderFormFieldsApi { + getFormFields(): Promise; +} diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/CustomFieldExplorer.tsx b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/CustomFieldExplorer.tsx similarity index 99% rename from plugins/scaffolder/src/next/TemplateEditorPage/CustomFieldExplorer.tsx rename to plugins/scaffolder/src/alpha/components/TemplateEditorPage/CustomFieldExplorer.tsx index 4516537f32..daa014078d 100644 --- a/plugins/scaffolder/src/next/TemplateEditorPage/CustomFieldExplorer.tsx +++ b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/CustomFieldExplorer.tsx @@ -34,7 +34,7 @@ import { TemplateEditorForm } from './TemplateEditorForm'; import validator from '@rjsf/validator-ajv8'; import { FieldExtensionOptions } from '@backstage/plugin-scaffolder-react'; import { useTranslationRef } from '@backstage/core-plugin-api/alpha'; -import { scaffolderTranslationRef } from '../../translation'; +import { scaffolderTranslationRef } from '../../../translation'; /** @public */ export type ScaffolderCustomFieldExplorerClassKey = diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/CustomFieldPlaygroud.tsx b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/CustomFieldPlaygroud.tsx similarity index 99% rename from plugins/scaffolder/src/next/TemplateEditorPage/CustomFieldPlaygroud.tsx rename to plugins/scaffolder/src/alpha/components/TemplateEditorPage/CustomFieldPlaygroud.tsx index 6964fe3364..3b6fe53d8e 100644 --- a/plugins/scaffolder/src/next/TemplateEditorPage/CustomFieldPlaygroud.tsx +++ b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/CustomFieldPlaygroud.tsx @@ -37,7 +37,7 @@ import { useTranslationRef } from '@backstage/core-plugin-api/alpha'; import { Form } from '@backstage/plugin-scaffolder-react/alpha'; import { FieldExtensionOptions } from '@backstage/plugin-scaffolder-react'; -import { scaffolderTranslationRef } from '../../translation'; +import { scaffolderTranslationRef } from '../../../translation'; import { TemplateEditorForm } from './TemplateEditorForm'; const useStyles = makeStyles( diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/CustomFieldsPage.tsx b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/CustomFieldsPage.tsx similarity index 93% rename from plugins/scaffolder/src/next/TemplateEditorPage/CustomFieldsPage.tsx rename to plugins/scaffolder/src/alpha/components/TemplateEditorPage/CustomFieldsPage.tsx index f168306d86..2d13847339 100644 --- a/plugins/scaffolder/src/next/TemplateEditorPage/CustomFieldsPage.tsx +++ b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/CustomFieldsPage.tsx @@ -22,8 +22,8 @@ import { useRouteRef } from '@backstage/core-plugin-api'; import { useTranslationRef } from '@backstage/core-plugin-api/alpha'; import { FieldExtensionOptions } from '@backstage/plugin-scaffolder-react'; -import { editRouteRef } from '../../routes'; -import { scaffolderTranslationRef } from '../../translation'; +import { editRouteRef } from '../../../routes'; +import { scaffolderTranslationRef } from '../../../translation'; import { CustomFieldExplorer } from './CustomFieldExplorer'; diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/DirectoryEditorContext.tsx b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/DirectoryEditorContext.tsx similarity index 99% rename from plugins/scaffolder/src/next/TemplateEditorPage/DirectoryEditorContext.tsx rename to plugins/scaffolder/src/alpha/components/TemplateEditorPage/DirectoryEditorContext.tsx index 70c7d43e0b..ebc5ab10ba 100644 --- a/plugins/scaffolder/src/next/TemplateEditorPage/DirectoryEditorContext.tsx +++ b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/DirectoryEditorContext.tsx @@ -20,7 +20,7 @@ import React, { createContext, ReactNode, useContext, useEffect } from 'react'; import { TemplateDirectoryAccess, TemplateFileAccess, -} from '../../lib/filesystem'; +} from '../../../lib/filesystem'; const MAX_SIZE = 1024 * 1024; const MAX_SIZE_MESSAGE = 'This file is too large to be displayed'; diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/DryRunContext.test.tsx b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/DryRunContext.test.tsx similarity index 100% rename from plugins/scaffolder/src/next/TemplateEditorPage/DryRunContext.test.tsx rename to plugins/scaffolder/src/alpha/components/TemplateEditorPage/DryRunContext.test.tsx diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/DryRunContext.tsx b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/DryRunContext.tsx similarity index 100% rename from plugins/scaffolder/src/next/TemplateEditorPage/DryRunContext.tsx rename to plugins/scaffolder/src/alpha/components/TemplateEditorPage/DryRunContext.tsx diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/DryRunResults.test.tsx b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/DryRunResults/DryRunResults.test.tsx similarity index 100% rename from plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/DryRunResults.test.tsx rename to plugins/scaffolder/src/alpha/components/TemplateEditorPage/DryRunResults/DryRunResults.test.tsx diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/DryRunResults.tsx b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/DryRunResults/DryRunResults.tsx similarity index 97% rename from plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/DryRunResults.tsx rename to plugins/scaffolder/src/alpha/components/TemplateEditorPage/DryRunResults/DryRunResults.tsx index 12521e3f3f..070a7aaec8 100644 --- a/plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/DryRunResults.tsx +++ b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/DryRunResults/DryRunResults.tsx @@ -27,7 +27,7 @@ import { useDryRun } from '../DryRunContext'; import { DryRunResultsList } from './DryRunResultsList'; import { DryRunResultsView } from './DryRunResultsView'; import { useTranslationRef } from '@backstage/core-plugin-api/alpha'; -import { scaffolderTranslationRef } from '../../../translation'; +import { scaffolderTranslationRef } from '../../../../translation'; const useStyles = makeStyles(theme => ({ header: { diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/DryRunResultsList.test.tsx b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/DryRunResults/DryRunResultsList.test.tsx similarity index 100% rename from plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/DryRunResultsList.test.tsx rename to plugins/scaffolder/src/alpha/components/TemplateEditorPage/DryRunResults/DryRunResultsList.test.tsx diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/DryRunResultsList.tsx b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/DryRunResults/DryRunResultsList.tsx similarity index 97% rename from plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/DryRunResultsList.tsx rename to plugins/scaffolder/src/alpha/components/TemplateEditorPage/DryRunResults/DryRunResultsList.tsx index 9f44933466..8305577990 100644 --- a/plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/DryRunResultsList.tsx +++ b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/DryRunResults/DryRunResultsList.tsx @@ -27,9 +27,9 @@ import DeleteIcon from '@material-ui/icons/Delete'; import DownloadIcon from '@material-ui/icons/GetApp'; import React from 'react'; import { useDryRun } from '../DryRunContext'; -import { downloadBlob } from '../../../lib/download'; +import { downloadBlob } from '../../../../lib/download'; import { useTranslationRef } from '@backstage/core-plugin-api/alpha'; -import { scaffolderTranslationRef } from '../../../translation'; +import { scaffolderTranslationRef } from '../../../../translation'; const useStyles = makeStyles(theme => ({ root: { diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/DryRunResultsSplitView.tsx b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/DryRunResults/DryRunResultsSplitView.tsx similarity index 100% rename from plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/DryRunResultsSplitView.tsx rename to plugins/scaffolder/src/alpha/components/TemplateEditorPage/DryRunResults/DryRunResultsSplitView.tsx diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/DryRunResultsView.test.tsx b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/DryRunResults/DryRunResultsView.test.tsx similarity index 100% rename from plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/DryRunResultsView.test.tsx rename to plugins/scaffolder/src/alpha/components/TemplateEditorPage/DryRunResults/DryRunResultsView.test.tsx diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/DryRunResultsView.tsx b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/DryRunResults/DryRunResultsView.tsx similarity index 97% rename from plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/DryRunResultsView.tsx rename to plugins/scaffolder/src/alpha/components/TemplateEditorPage/DryRunResults/DryRunResultsView.tsx index 7de248dd56..422cd6faa9 100644 --- a/plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/DryRunResultsView.tsx +++ b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/DryRunResults/DryRunResultsView.tsx @@ -26,11 +26,11 @@ import CodeMirror from '@uiw/react-codemirror'; import React, { useEffect, useMemo, useState } from 'react'; import { useDryRun } from '../DryRunContext'; import { DryRunResultsSplitView } from './DryRunResultsSplitView'; -import { FileBrowser } from '../../../components/FileBrowser'; +import { FileBrowser } from '../../../../components/FileBrowser'; import { TaskPageLinks } from './TaskPageLinks'; import { TaskStatusStepper } from './TaskStatusStepper'; import { useTranslationRef } from '@backstage/core-plugin-api/alpha'; -import { scaffolderTranslationRef } from '../../../translation'; +import { scaffolderTranslationRef } from '../../../../translation'; const useStyles = makeStyles({ root: { diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/IconLink.tsx b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/DryRunResults/IconLink.tsx similarity index 100% rename from plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/IconLink.tsx rename to plugins/scaffolder/src/alpha/components/TemplateEditorPage/DryRunResults/IconLink.tsx diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/TaskPageLinks.tsx b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/DryRunResults/TaskPageLinks.tsx similarity index 100% rename from plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/TaskPageLinks.tsx rename to plugins/scaffolder/src/alpha/components/TemplateEditorPage/DryRunResults/TaskPageLinks.tsx diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/TaskStatusStepper.tsx b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/DryRunResults/TaskStatusStepper.tsx similarity index 98% rename from plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/TaskStatusStepper.tsx rename to plugins/scaffolder/src/alpha/components/TemplateEditorPage/DryRunResults/TaskStatusStepper.tsx index 7696051950..ec7d734ca4 100644 --- a/plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/TaskStatusStepper.tsx +++ b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/DryRunResults/TaskStatusStepper.tsx @@ -32,7 +32,7 @@ import useInterval from 'react-use/esm/useInterval'; import humanizeDuration from 'humanize-duration'; import classNames from 'classnames'; import { useTranslationRef } from '@backstage/core-plugin-api/alpha'; -import { scaffolderTranslationRef } from '../../../translation'; +import { scaffolderTranslationRef } from '../../../../translation'; const useStyles = makeStyles((theme: Theme) => createStyles({ diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/index.ts b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/DryRunResults/index.ts similarity index 100% rename from plugins/scaffolder/src/next/TemplateEditorPage/DryRunResults/index.ts rename to plugins/scaffolder/src/alpha/components/TemplateEditorPage/DryRunResults/index.ts diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditor.tsx b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplateEditor.tsx similarity index 98% rename from plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditor.tsx rename to plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplateEditor.tsx index 573415c36d..48501e6c6f 100644 --- a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditor.tsx +++ b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplateEditor.tsx @@ -21,7 +21,7 @@ import type { LayoutOptions, } from '@backstage/plugin-scaffolder-react'; import { FieldExtensionOptions } from '@backstage/plugin-scaffolder-react'; -import { TemplateDirectoryAccess } from '../../lib/filesystem'; +import { TemplateDirectoryAccess } from '../../../lib/filesystem'; import { DirectoryEditorProvider } from './DirectoryEditorContext'; import { TemplateEditorToolbar } from './TemplateEditorToolbar'; import { TemplateEditorBrowser } from './TemplateEditorBrowser'; diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorBrowser.test.tsx b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplateEditorBrowser.test.tsx similarity index 95% rename from plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorBrowser.test.tsx rename to plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplateEditorBrowser.test.tsx index cec311a5cd..958548a131 100644 --- a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorBrowser.test.tsx +++ b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplateEditorBrowser.test.tsx @@ -17,7 +17,7 @@ import { renderInTestApp } from '@backstage/test-utils'; import { screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import React from 'react'; -import { MockFileSystemAccess } from '../../lib/filesystem/MockFileSystemAccess'; +import { MockFileSystemAccess } from '../../../lib/filesystem/MockFileSystemAccess'; import { DirectoryEditorProvider } from './DirectoryEditorContext'; import { TemplateEditorBrowser } from './TemplateEditorBrowser'; diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorBrowser.tsx b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplateEditorBrowser.tsx similarity index 96% rename from plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorBrowser.tsx rename to plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplateEditorBrowser.tsx index d725c93e65..b478502f6e 100644 --- a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorBrowser.tsx +++ b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplateEditorBrowser.tsx @@ -23,9 +23,9 @@ import RefreshIcon from '@material-ui/icons/Refresh'; import SaveIcon from '@material-ui/icons/Save'; import React from 'react'; import { useDirectoryEditor } from './DirectoryEditorContext'; -import { FileBrowser } from '../../components/FileBrowser'; +import { FileBrowser } from '../../../components/FileBrowser'; import { useTranslationRef } from '@backstage/core-plugin-api/alpha'; -import { scaffolderTranslationRef } from '../../translation'; +import { scaffolderTranslationRef } from '../../../translation'; const useStyles = makeStyles( theme => ({ diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorForm.tsx b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplateEditorForm.tsx similarity index 99% rename from plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorForm.tsx rename to plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplateEditorForm.tsx index 53bda6f286..56ebaabb83 100644 --- a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorForm.tsx +++ b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplateEditorForm.tsx @@ -34,7 +34,8 @@ import { } from '@backstage/plugin-scaffolder-react/alpha'; import { useDryRun } from './DryRunContext'; import { useDirectoryEditor } from './DirectoryEditorContext'; -import { scaffolderTranslationRef } from '../../translation'; + +import { scaffolderTranslationRef } from '../../../translation'; const useStyles = makeStyles({ containerWrapper: { diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorIntro.tsx b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplateEditorIntro.tsx similarity index 97% rename from plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorIntro.tsx rename to plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplateEditorIntro.tsx index 465f780a2f..c65ef569a6 100644 --- a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorIntro.tsx +++ b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplateEditorIntro.tsx @@ -22,9 +22,9 @@ import Tooltip from '@material-ui/core/Tooltip'; import Typography from '@material-ui/core/Typography'; import InfoOutlinedIcon from '@material-ui/icons/InfoOutlined'; import { makeStyles } from '@material-ui/core/styles'; -import { WebFileSystemAccess } from '../../lib/filesystem'; +import { WebFileSystemAccess } from '../../../lib/filesystem'; import { useTranslationRef } from '@backstage/core-plugin-api/alpha'; -import { scaffolderTranslationRef } from '../../translation'; +import { scaffolderTranslationRef } from '../../../translation'; const useStyles = makeStyles(theme => ({ introText: { diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorPage.tsx b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplateEditorPage.tsx similarity index 90% rename from plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorPage.tsx rename to plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplateEditorPage.tsx index 0dddeba370..8d71db2551 100644 --- a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorPage.tsx +++ b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplateEditorPage.tsx @@ -15,7 +15,9 @@ */ import React from 'react'; import { Content, Header, Page } from '@backstage/core-components'; -import { WebFileSystemAccess } from '../../lib/filesystem'; + +import { WebFileSystemAccess } from '../../../lib/filesystem'; + import { TemplateEditorIntro } from './TemplateEditorIntro'; import { ScaffolderPageContextMenu } from '@backstage/plugin-scaffolder-react/alpha'; import { useNavigate } from 'react-router-dom'; @@ -27,11 +29,11 @@ import { rootRouteRef, scaffolderListTaskRouteRef, templateFormRouteRef, -} from '../../routes'; +} from '../../../routes'; import { useTranslationRef } from '@backstage/core-plugin-api/alpha'; -import { scaffolderTranslationRef } from '../../translation'; -import { WebFileSystemStore } from '../../lib/filesystem/WebFileSystemAccess'; -import { createExampleTemplate } from '../../lib/filesystem/createExampleTemplate'; +import { scaffolderTranslationRef } from '../../../translation'; +import { WebFileSystemStore } from '../../../lib/filesystem/WebFileSystemAccess'; +import { createExampleTemplate } from '../../../lib/filesystem/createExampleTemplate'; export function TemplateEditorPage() { const navigate = useNavigate(); diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorTextArea.tsx b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplateEditorTextArea.tsx similarity index 98% rename from plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorTextArea.tsx rename to plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplateEditorTextArea.tsx index 350543a866..34788f6cb1 100644 --- a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorTextArea.tsx +++ b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplateEditorTextArea.tsx @@ -30,7 +30,7 @@ import CodeMirror from '@uiw/react-codemirror'; import React, { useMemo } from 'react'; import { useDirectoryEditor } from './DirectoryEditorContext'; import { useTranslationRef } from '@backstage/core-plugin-api/alpha'; -import { scaffolderTranslationRef } from '../../translation'; +import { scaffolderTranslationRef } from '../../../translation'; const useStyles = makeStyles(theme => ({ container: { diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorToolbar.tsx b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplateEditorToolbar.tsx similarity index 98% rename from plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorToolbar.tsx rename to plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplateEditorToolbar.tsx index 1d89616964..a33915ae01 100644 --- a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorToolbar.tsx +++ b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplateEditorToolbar.tsx @@ -34,7 +34,7 @@ import DescriptionIcon from '@material-ui/icons/Description'; import { Link } from '@backstage/core-components'; import { FieldExtensionOptions } from '@backstage/plugin-scaffolder-react'; -import { ActionPageContent } from '../../components/ActionsPage/ActionsPage'; +import { ActionPageContent } from '../../../components/ActionsPage/ActionsPage'; import { CustomFieldPlaygroud } from './CustomFieldPlaygroud'; const useStyles = makeStyles( diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateFormPage.tsx b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplateFormPage.tsx similarity index 95% rename from plugins/scaffolder/src/next/TemplateEditorPage/TemplateFormPage.tsx rename to plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplateFormPage.tsx index c79688c8b7..b1f98878ad 100644 --- a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateFormPage.tsx +++ b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplateFormPage.tsx @@ -28,8 +28,8 @@ import { FieldExtensionOptions, } from '@backstage/plugin-scaffolder-react'; -import { editRouteRef } from '../../routes'; -import { scaffolderTranslationRef } from '../../translation'; +import { editRouteRef } from '../../../routes'; +import { scaffolderTranslationRef } from '../../../translation'; import { TemplateFormPreviewer } from './TemplateFormPreviewer'; diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateFormPreviewer.tsx b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplateFormPreviewer.tsx similarity index 99% rename from plugins/scaffolder/src/next/TemplateEditorPage/TemplateFormPreviewer.tsx rename to plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplateFormPreviewer.tsx index e0c40a98be..ca4ae8d8d6 100644 --- a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateFormPreviewer.tsx +++ b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplateFormPreviewer.tsx @@ -42,7 +42,7 @@ import { TemplateEditorToolbar } from './TemplateEditorToolbar'; import { TemplateEditorForm } from './TemplateEditorForm'; import { TemplateEditorTextArea } from './TemplateEditorTextArea'; import { useTranslationRef } from '@backstage/core-plugin-api/alpha'; -import { scaffolderTranslationRef } from '../../translation'; +import { scaffolderTranslationRef } from '../../../translation'; const EXAMPLE_TEMPLATE_PARAMS_YAML = `# Edit the template parameters below to see how they will render in the scaffolder form UI parameters: diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/TemplatePage.tsx b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplatePage.tsx similarity index 94% rename from plugins/scaffolder/src/next/TemplateEditorPage/TemplatePage.tsx rename to plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplatePage.tsx index b34f1445f4..b70ceba163 100644 --- a/plugins/scaffolder/src/next/TemplateEditorPage/TemplatePage.tsx +++ b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/TemplatePage.tsx @@ -25,8 +25,11 @@ import { type LayoutOptions, } from '@backstage/plugin-scaffolder-react'; -import { scaffolderTranslationRef } from '../../translation'; -import { WebFileSystemAccess, WebFileSystemStore } from '../../lib/filesystem'; +import { scaffolderTranslationRef } from '../../../translation'; +import { + WebFileSystemAccess, + WebFileSystemStore, +} from '../../../lib/filesystem'; import { TemplateEditor } from './TemplateEditor'; import { makeStyles } from '@material-ui/core/styles'; diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/index.ts b/plugins/scaffolder/src/alpha/components/TemplateEditorPage/index.ts similarity index 100% rename from plugins/scaffolder/src/next/TemplateEditorPage/index.ts rename to plugins/scaffolder/src/alpha/components/TemplateEditorPage/index.ts diff --git a/plugins/scaffolder/src/next/TemplateListPage/RegisterExistingButton.test.tsx b/plugins/scaffolder/src/alpha/components/TemplateListPage/RegisterExistingButton.test.tsx similarity index 100% rename from plugins/scaffolder/src/next/TemplateListPage/RegisterExistingButton.test.tsx rename to plugins/scaffolder/src/alpha/components/TemplateListPage/RegisterExistingButton.test.tsx diff --git a/plugins/scaffolder/src/next/TemplateListPage/RegisterExistingButton.tsx b/plugins/scaffolder/src/alpha/components/TemplateListPage/RegisterExistingButton.tsx similarity index 100% rename from plugins/scaffolder/src/next/TemplateListPage/RegisterExistingButton.tsx rename to plugins/scaffolder/src/alpha/components/TemplateListPage/RegisterExistingButton.tsx diff --git a/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.test.tsx b/plugins/scaffolder/src/alpha/components/TemplateListPage/TemplateListPage.test.tsx similarity index 99% rename from plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.test.tsx rename to plugins/scaffolder/src/alpha/components/TemplateListPage/TemplateListPage.test.tsx index 2ad0752cc8..ba00845577 100644 --- a/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.test.tsx +++ b/plugins/scaffolder/src/alpha/components/TemplateListPage/TemplateListPage.test.tsx @@ -25,7 +25,7 @@ import { TestApiProvider, } from '@backstage/test-utils'; import React from 'react'; -import { rootRouteRef } from '../../routes'; +import { rootRouteRef } from '../../../routes'; import { TemplateListPage } from './TemplateListPage'; describe('TemplateListPage', () => { diff --git a/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.tsx b/plugins/scaffolder/src/alpha/components/TemplateListPage/TemplateListPage.tsx similarity index 98% rename from plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.tsx rename to plugins/scaffolder/src/alpha/components/TemplateListPage/TemplateListPage.tsx index 4c95027af7..8d0c73f0a7 100644 --- a/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.tsx +++ b/plugins/scaffolder/src/alpha/components/TemplateListPage/TemplateListPage.tsx @@ -50,14 +50,14 @@ import { scaffolderListTaskRouteRef, selectedTemplateRouteRef, viewTechDocRouteRef, -} from '../../routes'; +} from '../../../routes'; import { parseEntityRef, stringifyEntityRef } from '@backstage/catalog-model'; import { TemplateGroupFilter } from '@backstage/plugin-scaffolder-react'; import { TranslationFunction, useTranslationRef, } from '@backstage/core-plugin-api/alpha'; -import { scaffolderTranslationRef } from '../../translation'; +import { scaffolderTranslationRef } from '../../../translation'; /** * @alpha diff --git a/plugins/scaffolder/src/next/TemplateListPage/index.ts b/plugins/scaffolder/src/alpha/components/TemplateListPage/index.ts similarity index 100% rename from plugins/scaffolder/src/next/TemplateListPage/index.ts rename to plugins/scaffolder/src/alpha/components/TemplateListPage/index.ts diff --git a/plugins/scaffolder/src/next/TemplateWizardPage/TemplateWizardPage.test.tsx b/plugins/scaffolder/src/alpha/components/TemplateWizardPage/TemplateWizardPage.test.tsx similarity index 99% rename from plugins/scaffolder/src/next/TemplateWizardPage/TemplateWizardPage.test.tsx rename to plugins/scaffolder/src/alpha/components/TemplateWizardPage/TemplateWizardPage.test.tsx index 2639e8149c..689a96b95d 100644 --- a/plugins/scaffolder/src/next/TemplateWizardPage/TemplateWizardPage.test.tsx +++ b/plugins/scaffolder/src/alpha/components/TemplateWizardPage/TemplateWizardPage.test.tsx @@ -28,7 +28,7 @@ import { SecretsContextProvider, } from '@backstage/plugin-scaffolder-react'; import { TemplateWizardPage } from './TemplateWizardPage'; -import { rootRouteRef } from '../../routes'; +import { rootRouteRef } from '../../../routes'; import { ANNOTATION_EDIT_URL } from '@backstage/catalog-model'; import { CatalogApi } from '@backstage/catalog-client'; import { catalogApiRef } from '@backstage/plugin-catalog-react'; diff --git a/plugins/scaffolder/src/next/TemplateWizardPage/TemplateWizardPage.tsx b/plugins/scaffolder/src/alpha/components/TemplateWizardPage/TemplateWizardPage.tsx similarity index 97% rename from plugins/scaffolder/src/next/TemplateWizardPage/TemplateWizardPage.tsx rename to plugins/scaffolder/src/alpha/components/TemplateWizardPage/TemplateWizardPage.tsx index 0524b99f8f..b5e24a7d52 100644 --- a/plugins/scaffolder/src/next/TemplateWizardPage/TemplateWizardPage.tsx +++ b/plugins/scaffolder/src/alpha/components/TemplateWizardPage/TemplateWizardPage.tsx @@ -44,9 +44,9 @@ import { rootRouteRef, scaffolderTaskRouteRef, selectedTemplateRouteRef, -} from '../../routes'; +} from '../../../routes'; import { useTranslationRef } from '@backstage/core-plugin-api/alpha'; -import { scaffolderTranslationRef } from '../../translation'; +import { scaffolderTranslationRef } from '../../../translation'; import { TemplateWizardPageContextMenu } from './TemplateWizardPageContextMenu'; diff --git a/plugins/scaffolder/src/next/TemplateWizardPage/TemplateWizardPageContextMenu.tsx b/plugins/scaffolder/src/alpha/components/TemplateWizardPage/TemplateWizardPageContextMenu.tsx similarity index 97% rename from plugins/scaffolder/src/next/TemplateWizardPage/TemplateWizardPageContextMenu.tsx rename to plugins/scaffolder/src/alpha/components/TemplateWizardPage/TemplateWizardPageContextMenu.tsx index 50e406112a..80274cef55 100644 --- a/plugins/scaffolder/src/next/TemplateWizardPage/TemplateWizardPageContextMenu.tsx +++ b/plugins/scaffolder/src/alpha/components/TemplateWizardPage/TemplateWizardPageContextMenu.tsx @@ -25,7 +25,7 @@ import Edit from '@material-ui/icons/Edit'; import MoreVert from '@material-ui/icons/MoreVert'; import React, { useState } from 'react'; import { useTranslationRef } from '@backstage/core-plugin-api/alpha'; -import { scaffolderTranslationRef } from '../../translation'; +import { scaffolderTranslationRef } from '../../../translation'; const useStyles = makeStyles(theme => ({ button: { diff --git a/plugins/scaffolder/src/next/TemplateWizardPage/index.ts b/plugins/scaffolder/src/alpha/components/TemplateWizardPage/index.ts similarity index 100% rename from plugins/scaffolder/src/next/TemplateWizardPage/index.ts rename to plugins/scaffolder/src/alpha/components/TemplateWizardPage/index.ts diff --git a/plugins/scaffolder/src/next/index.ts b/plugins/scaffolder/src/alpha/components/index.ts similarity index 100% rename from plugins/scaffolder/src/next/index.ts rename to plugins/scaffolder/src/alpha/components/index.ts diff --git a/plugins/scaffolder/src/next/types.ts b/plugins/scaffolder/src/alpha/components/types.ts similarity index 100% rename from plugins/scaffolder/src/next/types.ts rename to plugins/scaffolder/src/alpha/components/types.ts diff --git a/plugins/scaffolder/src/alpha/extensions.tsx b/plugins/scaffolder/src/alpha/extensions.tsx new file mode 100644 index 0000000000..191dcf407c --- /dev/null +++ b/plugins/scaffolder/src/alpha/extensions.tsx @@ -0,0 +1,52 @@ +/* + * Copyright 2023 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 { + compatWrapper, + convertLegacyRouteRef, +} from '@backstage/core-compat-api'; +import { + NavItemBlueprint, + PageBlueprint, +} from '@backstage/frontend-plugin-api'; +import React from 'react'; +import { rootRouteRef } from '../routes'; +import CreateComponentIcon from '@material-ui/icons/AddCircleOutline'; +import { FormFieldBlueprint } from '@backstage/plugin-scaffolder-react/alpha'; + +export const scaffolderPage = PageBlueprint.make({ + params: { + routeRef: convertLegacyRouteRef(rootRouteRef), + defaultPath: '/create', + loader: () => + import('../components/Router').then(m => compatWrapper()), + }, +}); + +export const scaffolderNavItem = NavItemBlueprint.make({ + params: { + routeRef: convertLegacyRouteRef(rootRouteRef), + title: 'Create...', + icon: CreateComponentIcon, + }, +}); + +export const repoUrlPickerFormField = FormFieldBlueprint.make({ + name: 'repo-url-picker', + params: { + field: () => import('./fields/RepoUrlPicker').then(m => m.RepoUrlPicker), + }, +}); diff --git a/plugins/scaffolder/src/alpha/fields/RepoUrlPicker.ts b/plugins/scaffolder/src/alpha/fields/RepoUrlPicker.ts new file mode 100644 index 0000000000..add8408b2d --- /dev/null +++ b/plugins/scaffolder/src/alpha/fields/RepoUrlPicker.ts @@ -0,0 +1,28 @@ +/* + * 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 { createFormField } from '@backstage/plugin-scaffolder-react/alpha'; +import { RepoUrlPicker as Component } from '../../components/fields/RepoUrlPicker/RepoUrlPicker'; +import { + RepoUrlPickerFieldSchema, + repoPickerValidation, +} from '../../components'; + +export const RepoUrlPicker = createFormField({ + component: Component, + name: 'RepoUrlPicker', + validation: repoPickerValidation, + schema: RepoUrlPickerFieldSchema, +}); diff --git a/plugins/scaffolder/src/alpha/index.ts b/plugins/scaffolder/src/alpha/index.ts new file mode 100644 index 0000000000..bd3104a274 --- /dev/null +++ b/plugins/scaffolder/src/alpha/index.ts @@ -0,0 +1,27 @@ +/* + * 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. + */ +export { + type FormProps, + type TemplateListPageProps, + type TemplateWizardPageProps, + type ScaffolderCustomFieldExplorerClassKey, + type ScaffolderTemplateEditorClassKey, + type ScaffolderTemplateFormPreviewerClassKey, +} from './components'; + +export { scaffolderTranslationRef } from '../translation'; + +export { default } from './plugin'; diff --git a/plugins/scaffolder/src/alpha/plugin.tsx b/plugins/scaffolder/src/alpha/plugin.tsx new file mode 100644 index 0000000000..54e375e875 --- /dev/null +++ b/plugins/scaffolder/src/alpha/plugin.tsx @@ -0,0 +1,59 @@ +/* + * 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 { convertLegacyRouteRefs } from '@backstage/core-compat-api'; +import { createFrontendPlugin } from '@backstage/frontend-plugin-api'; +import { + rootRouteRef, + actionsRouteRef, + editRouteRef, + registerComponentRouteRef, + scaffolderListTaskRouteRef, + scaffolderTaskRouteRef, + selectedTemplateRouteRef, + viewTechDocRouteRef, +} from '../routes'; +import { scaffolderApi } from './api'; +import { + repoUrlPickerFormField, + scaffolderNavItem, + scaffolderPage, +} from './extensions'; +import { formFieldsApi } from './api/FormFieldsApi'; + +/** @alpha */ +export default createFrontendPlugin({ + id: 'scaffolder', + routes: convertLegacyRouteRefs({ + root: rootRouteRef, + selectedTemplate: selectedTemplateRouteRef, + ongoingTask: scaffolderTaskRouteRef, + actions: actionsRouteRef, + listTasks: scaffolderListTaskRouteRef, + edit: editRouteRef, + }), + externalRoutes: convertLegacyRouteRefs({ + registerComponent: registerComponentRouteRef, + viewTechDoc: viewTechDocRouteRef, + }), + extensions: [ + scaffolderApi, + scaffolderPage, + scaffolderNavItem, + formFieldsApi, + repoUrlPickerFormField, + ], +}); diff --git a/plugins/scaffolder/src/components/Router/Router.test.tsx b/plugins/scaffolder/src/components/Router/Router.test.tsx index 8c301b55fb..c062c723cf 100644 --- a/plugins/scaffolder/src/components/Router/Router.test.tsx +++ b/plugins/scaffolder/src/components/Router/Router.test.tsx @@ -25,9 +25,9 @@ import { createScaffolderLayout, ScaffolderLayouts, } from '@backstage/plugin-scaffolder-react'; -import { TemplateListPage, TemplateWizardPage } from '../../next'; +import { TemplateListPage, TemplateWizardPage } from '../../alpha/components'; -jest.mock('../../next', () => ({ +jest.mock('../../alpha/components', () => ({ TemplateWizardPage: jest.fn(() => null), TemplateListPage: jest.fn(() => null), })); diff --git a/plugins/scaffolder/src/components/Router/Router.tsx b/plugins/scaffolder/src/components/Router/Router.tsx index 385a5f9fad..e79d930795 100644 --- a/plugins/scaffolder/src/components/Router/Router.tsx +++ b/plugins/scaffolder/src/components/Router/Router.tsx @@ -51,14 +51,14 @@ import { TemplateListPageProps, TemplateWizardPageProps, } from '@backstage/plugin-scaffolder/alpha'; -import { TemplateListPage, TemplateWizardPage } from '../../next'; +import { TemplateListPage, TemplateWizardPage } from '../../alpha/components'; import { OngoingTask } from '../OngoingTask'; import { TemplatePage, TemplateFormPage, TemplateEditorPage, CustomFieldsPage, -} from '../../next/TemplateEditorPage'; +} from '../../alpha/components/TemplateEditorPage'; /** * The Props for the Scaffolder Router diff --git a/plugins/scaffolder/src/components/fields/RepoUrlPicker/RepoUrlPicker.tsx b/plugins/scaffolder/src/components/fields/RepoUrlPicker/RepoUrlPicker.tsx index e653be9178..3c9ca9c2ca 100644 --- a/plugins/scaffolder/src/components/fields/RepoUrlPicker/RepoUrlPicker.tsx +++ b/plugins/scaffolder/src/components/fields/RepoUrlPicker/RepoUrlPicker.tsx @@ -28,7 +28,7 @@ import { GerritRepoPicker } from './GerritRepoPicker'; import { RepoUrlPickerHost } from './RepoUrlPickerHost'; import { RepoUrlPickerRepoName } from './RepoUrlPickerRepoName'; import { parseRepoPickerUrl, serializeRepoPickerUrl } from './utils'; -import { RepoUrlPickerProps } from './schema'; +import { RepoUrlPickerFieldSchema } from './schema'; import { RepoUrlPickerState } from './types'; import useDebounce from 'react-use/esm/useDebounce'; import { useTemplateSecrets } from '@backstage/plugin-scaffolder-react'; @@ -44,7 +44,9 @@ export { RepoUrlPickerSchema } from './schema'; * * @public */ -export const RepoUrlPicker = (props: RepoUrlPickerProps) => { +export const RepoUrlPicker = ( + props: typeof RepoUrlPickerFieldSchema.TProps, +) => { const { uiSchema, onChange, rawErrors, formData, schema } = props; const [state, setState] = useState( parseRepoPickerUrl(formData), diff --git a/plugins/scaffolder/src/components/fields/RepoUrlPicker/schema.ts b/plugins/scaffolder/src/components/fields/RepoUrlPicker/schema.ts index 2ec72bc5a6..ff307f2ffe 100644 --- a/plugins/scaffolder/src/components/fields/RepoUrlPicker/schema.ts +++ b/plugins/scaffolder/src/components/fields/RepoUrlPicker/schema.ts @@ -13,84 +13,86 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { z } from 'zod'; -import { makeFieldSchemaFromZod } from '../utils'; + +import { makeFieldSchema } from '@backstage/plugin-scaffolder-react'; /** * @public */ -export const RepoUrlPickerFieldSchema = makeFieldSchemaFromZod( - z.string(), - z.object({ - allowedHosts: z - .array(z.string()) - .optional() - .describe('List of allowed SCM platform hosts'), - allowedOrganizations: z - .array(z.string()) - .optional() - .describe('List of allowed organizations in the given SCM platform'), - allowedOwners: z - .array(z.string()) - .optional() - .describe('List of allowed owners in the given SCM platform'), - allowedProjects: z - .array(z.string()) - .optional() - .describe('List of allowed projects in the given SCM platform'), - allowedRepos: z - .array(z.string()) - .optional() - .describe('List of allowed repos in the given SCM platform'), - requestUserCredentials: z - .object({ - secretsKey: z - .string() - .describe( - 'Key used within the template secrets context to store the credential', - ), - additionalScopes: z - .object({ - gitea: z - .array(z.string()) - .optional() - .describe('Additional Gitea scopes to request'), - gerrit: z - .array(z.string()) - .optional() - .describe('Additional Gerrit scopes to request'), - github: z - .array(z.string()) - .optional() - .describe('Additional GitHub scopes to request'), - gitlab: z - .array(z.string()) - .optional() - .describe('Additional GitLab scopes to request'), - bitbucket: z - .array(z.string()) - .optional() - .describe('Additional BitBucket scopes to request'), - azure: z - .array(z.string()) - .optional() - .describe('Additional Azure scopes to request'), - }) - .optional() - .describe('Additional permission scopes to request'), - }) - .optional() - .describe( - 'If defined will request user credentials to auth against the given SCM platform', - ), - }), -); +export const RepoUrlPickerFieldSchema = makeFieldSchema({ + output: z => z.string(), + uiOptions: z => + z.object({ + allowedHosts: z + .array(z.string()) + .optional() + .describe('List of allowed SCM platform hosts'), + allowedOrganizations: z + .array(z.string()) + .optional() + .describe('List of allowed organizations in the given SCM platform'), + allowedOwners: z + .array(z.string()) + .optional() + .describe('List of allowed owners in the given SCM platform'), + allowedProjects: z + .array(z.string()) + .optional() + .describe('List of allowed projects in the given SCM platform'), + allowedRepos: z + .array(z.string()) + .optional() + .describe('List of allowed repos in the given SCM platform'), + requestUserCredentials: z + .object({ + secretsKey: z + .string() + .describe( + 'Key used within the template secrets context to store the credential', + ), + additionalScopes: z + .object({ + gitea: z + .array(z.string()) + .optional() + .describe('Additional Gitea scopes to request'), + gerrit: z + .array(z.string()) + .optional() + .describe('Additional Gerrit scopes to request'), + github: z + .array(z.string()) + .optional() + .describe('Additional GitHub scopes to request'), + gitlab: z + .array(z.string()) + .optional() + .describe('Additional GitLab scopes to request'), + bitbucket: z + .array(z.string()) + .optional() + .describe('Additional BitBucket scopes to request'), + azure: z + .array(z.string()) + .optional() + .describe('Additional Azure scopes to request'), + }) + .optional() + .describe('Additional permission scopes to request'), + }) + .optional() + .describe( + 'If defined will request user credentials to auth against the given SCM platform', + ), + }), +}); /** * The input props that can be specified under `ui:options` for the * `RepoUrlPicker` field extension. * * @public + * @deprecated this will be removed as it's no longer used */ export type RepoUrlPickerUiOptions = typeof RepoUrlPickerFieldSchema.uiOptionsType; diff --git a/plugins/scaffolder/src/components/fields/utils.ts b/plugins/scaffolder/src/components/fields/utils.ts index 7b59f1da90..4ec9de2d99 100644 --- a/plugins/scaffolder/src/components/fields/utils.ts +++ b/plugins/scaffolder/src/components/fields/utils.ts @@ -16,27 +16,21 @@ import { JSONSchema7 } from 'json-schema'; import { z } from 'zod'; import zodToJsonSchema from 'zod-to-json-schema'; -import { - CustomFieldExtensionSchema, - FieldExtensionComponentProps, -} from '@backstage/plugin-scaffolder-react'; +import { FieldSchema as FieldSchemaType } from '@backstage/plugin-scaffolder-react'; /** * @public - * FieldSchema encapsulates a JSONSchema7 along with the - * matching FieldExtensionComponentProps type for a field extension. + * @deprecated - import from {@link @backstage/plugin-scaffolder-react#FieldSchema} instead */ -export interface FieldSchema { - readonly schema: CustomFieldExtensionSchema; - readonly type: FieldExtensionComponentProps; - readonly uiOptionsType: TUiOptions; -} +export interface FieldSchema extends FieldSchemaType {} /** * @public + * @deprecated use `makeFieldSchema` instead * Utility function to convert zod return and UI options schemas to a * CustomFieldExtensionSchema with FieldExtensionComponentProps type inference */ + export function makeFieldSchemaFromZod< TReturnSchema extends z.ZodType, TUiOptionsSchema extends z.ZodType = z.ZodType, @@ -58,5 +52,6 @@ export function makeFieldSchemaFromZod< }, type: null as any, uiOptionsType: null as any, + TProps: undefined as any, }; } diff --git a/plugins/scaffolder/src/overridableComponents.ts b/plugins/scaffolder/src/overridableComponents.ts index 99e9556003..3059d4523a 100644 --- a/plugins/scaffolder/src/overridableComponents.ts +++ b/plugins/scaffolder/src/overridableComponents.ts @@ -16,9 +16,9 @@ import { Overrides } from '@material-ui/core/styles/overrides'; import { StyleRules } from '@material-ui/core/styles/withStyles'; -import { ScaffolderTemplateEditorClassKey } from './next/TemplateEditorPage/TemplateEditor'; -import { ScaffolderTemplateFormPreviewerClassKey } from './next/TemplateEditorPage/TemplateFormPreviewer'; -import { ScaffolderCustomFieldExplorerClassKey } from './next/TemplateEditorPage/CustomFieldExplorer'; +import { ScaffolderTemplateEditorClassKey } from './alpha/components/TemplateEditorPage/TemplateEditor'; +import { ScaffolderTemplateFormPreviewerClassKey } from './alpha/components/TemplateEditorPage/TemplateFormPreviewer'; +import { ScaffolderCustomFieldExplorerClassKey } from './alpha/components/TemplateEditorPage/CustomFieldExplorer'; /** @public */ export type ScaffolderReactComponentsNameToClassKey = { diff --git a/yarn.lock b/yarn.lock index 1aab23e1bc..e97917da44 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7200,6 +7200,7 @@ __metadata: "@backstage/core-app-api": "workspace:^" "@backstage/core-components": "workspace:^" "@backstage/core-plugin-api": "workspace:^" + "@backstage/frontend-plugin-api": "workspace:^" "@backstage/plugin-catalog": "workspace:^" "@backstage/plugin-catalog-common": "workspace:^" "@backstage/plugin-catalog-react": "workspace:^" @@ -9947,6 +9948,16 @@ __metadata: languageName: unknown linkType: soft +"@internal/scaffolder@workspace:packages/scaffolder-internal": + version: 0.0.0-use.local + resolution: "@internal/scaffolder@workspace:packages/scaffolder-internal" + dependencies: + "@backstage/cli": "workspace:^" + "@backstage/plugin-scaffolder-react": "workspace:^" + zod: ^3.22.4 + languageName: unknown + linkType: soft + "@ioredis/commands@npm:^1.1.1": version: 1.1.1 resolution: "@ioredis/commands@npm:1.1.1" From 58410465bbd955eac8c8d6592047024741795fc8 Mon Sep 17 00:00:00 2001 From: bnechyporenko Date: Sun, 21 Jul 2024 19:49:02 +0200 Subject: [PATCH 146/164] Adding manual scaffolder retry Signed-off-by: bnechyporenko --- .../src/scaffolder/tasks/DatabaseTaskStore.ts | 35 ++++++++++++++++++- .../src/scaffolder/tasks/StorageTaskBroker.ts | 22 ++++++++++-- .../src/scaffolder/tasks/WorkspaceService.ts | 2 ++ .../src/scaffolder/tasks/types.ts | 3 ++ .../scaffolder-backend/src/service/router.ts | 15 +++++++- plugins/scaffolder-node/src/tasks/types.ts | 3 ++ plugins/scaffolder-react/src/api/types.ts | 8 +++++ .../src/hooks/useEventStream.ts | 28 +++++++++++---- plugins/scaffolder/src/api.ts | 25 +++++++++---- .../components/OngoingTask/ContextMenu.tsx | 14 ++++++++ .../components/OngoingTask/OngoingTask.tsx | 26 ++++++++++++++ 11 files changed, 163 insertions(+), 18 deletions(-) diff --git a/plugins/scaffolder-backend/src/scaffolder/tasks/DatabaseTaskStore.ts b/plugins/scaffolder-backend/src/scaffolder/tasks/DatabaseTaskStore.ts index 20e9672f04..abf8ae7f41 100644 --- a/plugins/scaffolder-backend/src/scaffolder/tasks/DatabaseTaskStore.ts +++ b/plugins/scaffolder-backend/src/scaffolder/tasks/DatabaseTaskStore.ts @@ -484,7 +484,7 @@ export class DatabaseTaskStore implements TaskStore { async listEvents( options: TaskStoreListEventsOptions, ): Promise<{ events: SerializedTaskEvent[] }> { - const { taskId, after } = options; + const { isTaskRecoverable, taskId, after } = options; const rawEvents = await this.db('task_events') .where({ task_id: taskId, @@ -502,6 +502,7 @@ export class DatabaseTaskStore implements TaskStore { const body = JSON.parse(event.body) as JsonObject; return { id: Number(event.id), + isTaskRecoverable, taskId, body, type: event.event_type, @@ -602,6 +603,38 @@ export class DatabaseTaskStore implements TaskStore { }); } + async retryTask?(options: { taskId: string }): Promise { + await this.db.transaction(async tx => { + const result = await tx('tasks') + .where('id', options.taskId) + .update( + { + status: 'open', + last_heartbeat_at: this.db.fn.now(), + }, + ['id', 'spec'], + ); + + for (const { id, spec } of result) { + const taskSpec = JSON.parse(spec as string) as TaskSpec; + + await tx('task_events') + .where('task_id', id) + .andWhere(q => q.whereIn('event_type', ['cancelled', 'completion'])) + .del(); + + await tx('task_events').insert({ + task_id: id, + event_type: 'recovered', + body: JSON.stringify({ + recoverStrategy: + taskSpec.EXPERIMENTAL_recovery?.EXPERIMENTAL_strategy ?? 'none', + }), + }); + } + }); + } + async recoverTasks( options: TaskStoreRecoverTaskOptions, ): Promise<{ ids: string[] }> { diff --git a/plugins/scaffolder-backend/src/scaffolder/tasks/StorageTaskBroker.ts b/plugins/scaffolder-backend/src/scaffolder/tasks/StorageTaskBroker.ts index 3960228529..1da2b4b349 100644 --- a/plugins/scaffolder-backend/src/scaffolder/tasks/StorageTaskBroker.ts +++ b/plugins/scaffolder-backend/src/scaffolder/tasks/StorageTaskBroker.ts @@ -254,7 +254,9 @@ export interface CurrentClaimedTask { * The creator of the task. */ createdBy?: string; - + /** + * The workspace of the task. + */ workspace?: Promise; } @@ -317,7 +319,7 @@ export class StorageTaskBroker implements TaskBroker { shouldUnsubscribe = true; } - if (event.type === 'completion') { + if (event.type === 'completion' && !event.isTaskRecoverable) { shouldUnsubscribe = true; } } @@ -416,8 +418,17 @@ export class StorageTaskBroker implements TaskBroker { let cancelled = false; (async () => { + const task = await this.storage.getTask(taskId); + const isTaskRecoverable = + task.spec.EXPERIMENTAL_recovery?.EXPERIMENTAL_strategy === + 'startOver'; + while (!cancelled) { - const result = await this.storage.listEvents({ taskId, after }); + const result = await this.storage.listEvents({ + isTaskRecoverable, + taskId, + after, + }); const { events } = result; if (events.length) { after = events[events.length - 1].id; @@ -485,4 +496,9 @@ export class StorageTaskBroker implements TaskBroker { }, }); } + + async retry?(taskId: string): Promise { + await this.storage.retryTask?.({ taskId }); + this.signalDispatch(); + } } diff --git a/plugins/scaffolder-backend/src/scaffolder/tasks/WorkspaceService.ts b/plugins/scaffolder-backend/src/scaffolder/tasks/WorkspaceService.ts index ab424806bf..bb3ce448fc 100644 --- a/plugins/scaffolder-backend/src/scaffolder/tasks/WorkspaceService.ts +++ b/plugins/scaffolder-backend/src/scaffolder/tasks/WorkspaceService.ts @@ -19,6 +19,7 @@ import { CurrentClaimedTask } from './StorageTaskBroker'; import { WorkspaceProvider } from '@backstage/plugin-scaffolder-node/alpha'; import { DatabaseWorkspaceProvider } from './DatabaseWorkspaceProvider'; import { TaskStore } from './types'; +import fs from 'fs-extra'; export interface WorkspaceService { serializeWorkspace(options: { path: string }): Promise; @@ -74,6 +75,7 @@ export class DefaultWorkspaceService implements WorkspaceService { targetPath: string; }): Promise { if (this.isWorkspaceSerializationEnabled()) { + await fs.mkdirp(options.targetPath); await this.workspaceProvider.rehydrateWorkspace(options); } } diff --git a/plugins/scaffolder-backend/src/scaffolder/tasks/types.ts b/plugins/scaffolder-backend/src/scaffolder/tasks/types.ts index b87e0c4b9b..874793922f 100644 --- a/plugins/scaffolder-backend/src/scaffolder/tasks/types.ts +++ b/plugins/scaffolder-backend/src/scaffolder/tasks/types.ts @@ -119,6 +119,7 @@ export type TaskStoreEmitOptions = { * @public */ export type TaskStoreListEventsOptions = { + isTaskRecoverable?: boolean; taskId: string; after?: number | undefined; }; @@ -170,6 +171,8 @@ export interface TaskStore { options: TaskStoreCreateTaskOptions, ): Promise; + retryTask?(options: { taskId: string }): Promise; + recoverTasks?( options: TaskStoreRecoverTaskOptions, ): Promise<{ ids: string[] }>; diff --git a/plugins/scaffolder-backend/src/service/router.ts b/plugins/scaffolder-backend/src/service/router.ts index 4584d64257..80406496d2 100644 --- a/plugins/scaffolder-backend/src/service/router.ts +++ b/plugins/scaffolder-backend/src/service/router.ts @@ -652,6 +652,19 @@ export async function createRouter( await taskBroker.cancel?.(taskId); res.status(200).json({ status: 'cancelled' }); }) + .post('/v2/tasks/:taskId/retry', async (req, res) => { + const credentials = await httpAuth.credentials(req); + // Requires both read and cancel permissions + await checkPermission({ + credentials, + permissions: [taskCreatePermission, taskReadPermission], + permissionService: permissions, + }); + + const { taskId } = req.params; + await taskBroker.retry?.(taskId); + res.status(201).json({ id: taskId }); + }) .get('/v2/tasks/:taskId/eventstream', async (req, res) => { const credentials = await httpAuth.credentials(req); await checkPermission({ @@ -687,7 +700,7 @@ export async function createRouter( res.write( `event: ${event.type}\ndata: ${JSON.stringify(event)}\n\n`, ); - if (event.type === 'completion') { + if (event.type === 'completion' && !event.isTaskRecoverable) { shouldUnsubscribe = true; } } diff --git a/plugins/scaffolder-node/src/tasks/types.ts b/plugins/scaffolder-node/src/tasks/types.ts index 27a131c513..b830c0633a 100644 --- a/plugins/scaffolder-node/src/tasks/types.ts +++ b/plugins/scaffolder-node/src/tasks/types.ts @@ -76,6 +76,7 @@ export type TaskEventType = 'completion' | 'log' | 'cancelled' | 'recovered'; */ export type SerializedTaskEvent = { id: number; + isTaskRecoverable?: boolean; taskId: string; body: JsonObject; type: TaskEventType; @@ -163,6 +164,8 @@ export interface TaskContext { export interface TaskBroker { cancel?(taskId: string): Promise; + retry?(taskId: string): Promise; + claim(): Promise; recoverTasks?(): Promise; diff --git a/plugins/scaffolder-react/src/api/types.ts b/plugins/scaffolder-react/src/api/types.ts index eaef54ff1b..3816c4bcbf 100644 --- a/plugins/scaffolder-react/src/api/types.ts +++ b/plugins/scaffolder-react/src/api/types.ts @@ -161,6 +161,7 @@ export interface ScaffolderGetIntegrationsListResponse { * @public */ export interface ScaffolderStreamLogsOptions { + isTaskRecoverable?: boolean; taskId: string; after?: number; } @@ -213,6 +214,13 @@ export interface ScaffolderApi { */ cancelTask(taskId: string): Promise; + /** + * Starts the task again from the point where it failed. + * + * @param taskId - the id of the task + */ + retry?(taskId: string): Promise; + listTasks?(options: { filterByOwnership: 'owned' | 'all'; }): Promise<{ tasks: ScaffolderTask[] }>; diff --git a/plugins/scaffolder-react/src/hooks/useEventStream.ts b/plugins/scaffolder-react/src/hooks/useEventStream.ts index f63f6024e6..7c5ce09ab7 100644 --- a/plugins/scaffolder-react/src/hooks/useEventStream.ts +++ b/plugins/scaffolder-react/src/hooks/useEventStream.ts @@ -143,6 +143,11 @@ function reducer(draft: TaskStream, action: ReducerAction) { } case 'RECOVERED': { + draft.cancelled = false; + draft.completed = false; + draft.output = undefined; + draft.error = undefined; + for (const stepId in draft.steps) { if (draft.steps.hasOwnProperty(stepId)) { draft.steps[stepId].startedAt = undefined; @@ -185,12 +190,16 @@ export const useTaskEventStream = (taskId: string): TaskStream => { let subscription: Subscription | undefined; let logPusher: NodeJS.Timeout | undefined; let retryCount = 1; + let isTaskRecoverable = false; const startStreamLogProcess = () => scaffolderApi.getTask(taskId).then( task => { if (didCancel) { return; } + isTaskRecoverable = + task.spec.EXPERIMENTAL_recovery?.EXPERIMENTAL_strategy === + 'startOver'; dispatch({ type: 'INIT', data: task }); // TODO(blam): Use a normal fetch to fetch the current log for the event stream @@ -199,7 +208,10 @@ export const useTaskEventStream = (taskId: string): TaskStream => { // stream logs. Without this, if you have a lot of logs, it can look like the // task is being rebuilt on load as it progresses through the steps at a slower // rate whilst it builds the status from the event logs - const observable = scaffolderApi.streamLogs({ taskId }); + const observable = scaffolderApi.streamLogs({ + isTaskRecoverable, + taskId, + }); const collectedLogEvents = new Array(); @@ -270,12 +282,14 @@ export const useTaskEventStream = (taskId: string): TaskStream => { ); void startStreamLogProcess(); return () => { - didCancel = true; - if (subscription) { - subscription.unsubscribe(); - } - if (logPusher) { - clearInterval(logPusher); + if (!isTaskRecoverable) { + didCancel = true; + if (subscription) { + subscription.unsubscribe(); + } + if (logPusher) { + clearInterval(logPusher); + } } }; }, [scaffolderApi, dispatch, taskId]); diff --git a/plugins/scaffolder/src/api.ts b/plugins/scaffolder/src/api.ts index 1809ed4c15..93db7386f3 100644 --- a/plugins/scaffolder/src/api.ts +++ b/plugins/scaffolder/src/api.ts @@ -217,12 +217,10 @@ export class ScaffolderClient implements ScaffolderApi { } private streamLogsEventStream({ + isTaskRecoverable, taskId, after, - }: { - taskId: string; - after?: number; - }): Observable { + }: ScaffolderStreamLogsOptions): Observable { return new ObservableImpl(subscriber => { const params = new URLSearchParams(); if (after !== undefined) { @@ -246,14 +244,14 @@ export class ScaffolderClient implements ScaffolderApi { }; const ctrl = new AbortController(); - fetchEventSource(url, { + void fetchEventSource(url, { fetch: this.fetchApi.fetch, signal: ctrl.signal, onmessage(e: EventSourceMessage) { if (e.event === 'log') { processEvent(e); return; - } else if (e.event === 'completion') { + } else if (e.event === 'completion' && !isTaskRecoverable) { processEvent(e); subscriber.complete(); ctrl.abort(); @@ -338,6 +336,21 @@ export class ScaffolderClient implements ScaffolderApi { return await response.json(); } + async retry?(taskId: string): Promise { + const baseUrl = await this.discoveryApi.getBaseUrl('scaffolder'); + const url = `${baseUrl}/v2/tasks/${encodeURIComponent(taskId)}/retry`; + + const response = await this.fetchApi.fetch(url, { + method: 'POST', + }); + + if (!response.ok) { + throw await ResponseError.fromResponse(response); + } + + return await response.json(); + } + async autocomplete({ token, resource, diff --git a/plugins/scaffolder/src/components/OngoingTask/ContextMenu.tsx b/plugins/scaffolder/src/components/OngoingTask/ContextMenu.tsx index e0ab01fc67..c3e9250d2b 100644 --- a/plugins/scaffolder/src/components/OngoingTask/ContextMenu.tsx +++ b/plugins/scaffolder/src/components/OngoingTask/ContextMenu.tsx @@ -41,8 +41,10 @@ import { scaffolderTranslationRef } from '../../translation'; type ContextMenuProps = { cancelEnabled?: boolean; + canRetry: boolean; logsVisible?: boolean; buttonBarVisible?: boolean; + onRetry?: () => void; onStartOver?: () => void; onToggleLogs?: (state: boolean) => void; onToggleButtonBar?: (state: boolean) => void; @@ -58,8 +60,10 @@ const useStyles = makeStyles(() => ({ export const ContextMenu = (props: ContextMenuProps) => { const { cancelEnabled, + canRetry, logsVisible, buttonBarVisible, + onRetry, onStartOver, onToggleLogs, onToggleButtonBar, @@ -151,6 +155,16 @@ export const ContextMenu = (props: ContextMenuProps) => { + + + + + + ({ cancelButton: { marginRight: theme.spacing(1), }, + retryButton: { + marginRight: theme.spacing(1), + }, logsVisibilityButton: { marginRight: theme.spacing(1), }, @@ -130,6 +133,12 @@ export const OngoingTask = (props: { return 0; }, [steps]); + const isRetryableTask = + taskStream.task?.spec.EXPERIMENTAL_recovery?.EXPERIMENTAL_strategy === + 'startOver'; + + const canRetry = canReadTask && canCreateTask && isRetryableTask; + const startOver = useCallback(() => { const { namespace, name } = taskStream.task?.spec.templateInfo?.entity?.metadata ?? {}; @@ -157,6 +166,13 @@ export const OngoingTask = (props: { templateRouteRef, ]); + const [{ status: _ }, { execute: triggerRetry }] = useAsync(async () => { + if (taskId) { + analytics.captureEvent('retried', 'Template has been retried'); + await scaffolderApi.retry?.(taskId); + } + }); + const [{ status: cancelStatus }, { execute: triggerCancel }] = useAsync( async () => { if (taskId) { @@ -190,9 +206,11 @@ export const OngoingTask = (props: { > {t('ongoingTask.cancelButtonTitle')} + - + {isRetryableTask && ( + + )}

diff --git a/plugins/api-docs/src/components/ApisCards/ProvidedApisCard.test.tsx b/plugins/api-docs/src/components/ApisCards/ProvidedApisCard.test.tsx index 3dbc4edd63..8c4f7dd26b 100644 --- a/plugins/api-docs/src/components/ApisCards/ProvidedApisCard.test.tsx +++ b/plugins/api-docs/src/components/ApisCards/ProvidedApisCard.test.tsx @@ -62,7 +62,7 @@ describe('', () => { relations: [], }; - const { getByText } = await renderInTestApp( + const { getByText, getByRole, container } = await renderInTestApp( @@ -77,6 +77,18 @@ describe('', () => { expect(getByText(/Provided APIs/i)).toBeInTheDocument(); expect(getByText(/does not provide any APIs/i)).toBeInTheDocument(); + expect(getByText(/Learn how to change this/)).toBeInTheDocument(); + + // Also render external link icon + const externalLink = getByRole('link'); + expect(externalLink).toHaveAttribute( + 'href', + 'https://backstage.io/docs/features/software-catalog/descriptor-format#specprovidesapis-optional', + ); + const externalLinkIcon: HTMLElement | null = container.querySelector( + 'svg[class*="externalLink"]', + ); + expect(externalLink).toContainElement(externalLinkIcon); }); it('shows consumed APIs', async () => { diff --git a/plugins/api-docs/src/components/ApisCards/ProvidedApisCard.tsx b/plugins/api-docs/src/components/ApisCards/ProvidedApisCard.tsx index 48099df375..2063f23673 100644 --- a/plugins/api-docs/src/components/ApisCards/ProvidedApisCard.tsx +++ b/plugins/api-docs/src/components/ApisCards/ProvidedApisCard.tsx @@ -33,6 +33,16 @@ import { TableOptions, WarningPanel, } from '@backstage/core-components'; +import { useApp } from '@backstage/core-plugin-api'; +import OpenInNew from '@material-ui/icons/OpenInNew'; +import { makeStyles, Theme } from '@material-ui/core/styles'; + +const useStyles = makeStyles((theme: Theme) => ({ + externalLink: { + verticalAlign: 'bottom', + marginLeft: theme.spacing(0.5), + }, +})); /** * @public @@ -53,6 +63,9 @@ export const ProvidedApisCard = (props: { const { entities, loading, error } = useRelatedEntities(entity, { type: RELATION_PROVIDES_API, }); + const app = useApp(); + const ExternalLinkIcon = app.getSystemIcon('externalLink') || OpenInNew; + const classes = useStyles(); if (loading) { return ( @@ -84,11 +97,17 @@ export const ProvidedApisCard = (props: { This {entity.kind.toLocaleLowerCase('en-US')} does not provide any APIs. - - - Learn how to change this. - - + + } + > + Learn how to change this +
} columns={columns} From dca4119a4e5a8b3f4282cf19962ee3e99347ad02 Mon Sep 17 00:00:00 2001 From: Emma Indal Date: Wed, 11 Sep 2024 15:10:49 +0200 Subject: [PATCH 157/164] update RelatedEntitiesCard to use external icon on link Signed-off-by: Emma Indal --- plugins/catalog/src/alpha/translation.ts | 2 +- .../RelatedEntitiesCard.tsx | 25 +++++++++++++++++-- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/plugins/catalog/src/alpha/translation.ts b/plugins/catalog/src/alpha/translation.ts index f38a34be84..e5e6fa18e2 100644 --- a/plugins/catalog/src/alpha/translation.ts +++ b/plugins/catalog/src/alpha/translation.ts @@ -152,7 +152,7 @@ export const catalogTranslationRef = createTranslationRef({ emptyMessage: 'No system is part of this domain', }, relatedEntitiesCard: { - emptyHelpLinkTitle: 'Learn how to change this.', + emptyHelpLinkTitle: 'Learn how to change this', }, systemDiagramCard: { title: 'System Diagram', diff --git a/plugins/catalog/src/components/RelatedEntitiesCard/RelatedEntitiesCard.tsx b/plugins/catalog/src/components/RelatedEntitiesCard/RelatedEntitiesCard.tsx index a2814527cc..730bb86bda 100644 --- a/plugins/catalog/src/components/RelatedEntitiesCard/RelatedEntitiesCard.tsx +++ b/plugins/catalog/src/components/RelatedEntitiesCard/RelatedEntitiesCard.tsx @@ -44,6 +44,9 @@ import { } from './presets'; import { catalogTranslationRef } from '../../alpha/translation'; import { useTranslationRef } from '@backstage/core-plugin-api/alpha'; +import { useApp } from '@backstage/core-plugin-api'; +import OpenInNew from '@material-ui/icons/OpenInNew'; +import { makeStyles, Theme } from '@material-ui/core/styles'; /** @public */ export type RelatedEntitiesCardProps = { @@ -58,6 +61,13 @@ export type RelatedEntitiesCardProps = { tableOptions?: TableOptions; }; +const useStyles = makeStyles((theme: Theme) => ({ + externalLink: { + verticalAlign: 'bottom', + marginLeft: theme.spacing(0.5), + }, +})); + /** * A low level card component that can be used as a building block for more * specific cards. @@ -84,7 +94,9 @@ export const RelatedEntitiesCard = ( asRenderableEntities, tableOptions = {}, } = props; - + const classes = useStyles(); + const app = useApp(); + const ExternalLinkIcon = app.getSystemIcon('externalLink') || OpenInNew; const { t } = useTranslationRef(catalogTranslationRef); const { entity } = useEntity(); const { entities, loading, error } = useRelatedEntities(entity, { @@ -116,7 +128,16 @@ export const RelatedEntitiesCard = (
{emptyMessage} - + + } + > {t('relatedEntitiesCard.emptyHelpLinkTitle')} From 66eb59534d8ce0e983fc735a12fb84a8357e7023 Mon Sep 17 00:00:00 2001 From: Emma Indal Date: Wed, 11 Sep 2024 16:03:23 +0200 Subject: [PATCH 158/164] update api reports Signed-off-by: Emma Indal --- packages/core-components/report.api.md | 1 + plugins/catalog/report-alpha.api.md | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/core-components/report.api.md b/packages/core-components/report.api.md index d71d6a1e9f..4c2727ab1e 100644 --- a/packages/core-components/report.api.md +++ b/packages/core-components/report.api.md @@ -706,6 +706,7 @@ export type LinkProps = Omit & to: string; component?: ElementType; noTrack?: boolean; + externalLinkIcon?: React_2.ReactNode; }; // Warning: (ae-missing-release-tag) "LoginRequestListItemClassKey" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal) diff --git a/plugins/catalog/report-alpha.api.md b/plugins/catalog/report-alpha.api.md index 13ee6d0314..b7fa14d003 100644 --- a/plugins/catalog/report-alpha.api.md +++ b/plugins/catalog/report-alpha.api.md @@ -113,7 +113,7 @@ export const catalogTranslationRef: TranslationRef< readonly 'hasSubdomainsCard.emptyMessage': 'No subdomain is part of this domain'; readonly 'hasSystemsCard.title': 'Has systems'; readonly 'hasSystemsCard.emptyMessage': 'No system is part of this domain'; - readonly 'relatedEntitiesCard.emptyHelpLinkTitle': 'Learn how to change this.'; + readonly 'relatedEntitiesCard.emptyHelpLinkTitle': 'Learn how to change this'; readonly 'systemDiagramCard.title': 'System Diagram'; readonly 'systemDiagramCard.description': 'Use pinch & zoo to move around the diagram.'; readonly 'systemDiagramCard.edgeLabels.dependsOn': 'depends on'; From 46b5a20b281f6ce6d8abfb949bcb06de5079063b Mon Sep 17 00:00:00 2001 From: Emma Indal Date: Wed, 11 Sep 2024 16:08:57 +0200 Subject: [PATCH 159/164] add changesets Signed-off-by: Emma Indal --- .changeset/eleven-pugs-hear.md | 6 ++++++ .changeset/giant-kiwis-retire.md | 5 +++++ .changeset/strange-bees-attack.md | 5 +++++ 3 files changed, 16 insertions(+) create mode 100644 .changeset/eleven-pugs-hear.md create mode 100644 .changeset/giant-kiwis-retire.md create mode 100644 .changeset/strange-bees-attack.md diff --git a/.changeset/eleven-pugs-hear.md b/.changeset/eleven-pugs-hear.md new file mode 100644 index 0000000000..5d65057e0b --- /dev/null +++ b/.changeset/eleven-pugs-hear.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-api-docs': patch +'@backstage/plugin-catalog': patch +--- + +Empty states updated with external link icon for learn more links diff --git a/.changeset/giant-kiwis-retire.md b/.changeset/giant-kiwis-retire.md new file mode 100644 index 0000000000..380e05042f --- /dev/null +++ b/.changeset/giant-kiwis-retire.md @@ -0,0 +1,5 @@ +--- +'@backstage/app-defaults': patch +--- + +Added `externalLink` to icon defaults diff --git a/.changeset/strange-bees-attack.md b/.changeset/strange-bees-attack.md new file mode 100644 index 0000000000..c4e95097f8 --- /dev/null +++ b/.changeset/strange-bees-attack.md @@ -0,0 +1,5 @@ +--- +'@backstage/core-components': patch +--- + +`Link` component now accepts `externalLinkIcon` prop From d68078a6601953ea3a453f831ef2f98e9d1cd635 Mon Sep 17 00:00:00 2001 From: Emma Indal Date: Thu, 19 Sep 2024 15:13:02 +0200 Subject: [PATCH 160/164] move external link icon to Link component Signed-off-by: Emma Indal --- packages/core-components/report.api.md | 2 +- .../src/components/Link/Link.test.tsx | 3 +-- .../src/components/Link/Link.tsx | 21 ++++++++++++---- .../components/ApisCards/ConsumedApisCard.tsx | 20 +--------------- .../components/ApisCards/ProvidedApisCard.tsx | 20 +--------------- .../RelatedEntitiesCard.tsx | 24 +------------------ 6 files changed, 22 insertions(+), 68 deletions(-) diff --git a/packages/core-components/report.api.md b/packages/core-components/report.api.md index 4c2727ab1e..24c835f638 100644 --- a/packages/core-components/report.api.md +++ b/packages/core-components/report.api.md @@ -706,7 +706,7 @@ export type LinkProps = Omit & to: string; component?: ElementType; noTrack?: boolean; - externalLinkIcon?: React_2.ReactNode; + externalLinkIcon?: boolean; }; // Warning: (ae-missing-release-tag) "LoginRequestListItemClassKey" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal) diff --git a/packages/core-components/src/components/Link/Link.test.tsx b/packages/core-components/src/components/Link/Link.test.tsx index 5f171411c1..fe616299c3 100644 --- a/packages/core-components/src/components/Link/Link.test.tsx +++ b/packages/core-components/src/components/Link/Link.test.tsx @@ -25,7 +25,6 @@ import { analyticsApiRef, configApiRef } from '@backstage/core-plugin-api'; import { isExternalUri, Link, useResolvedPath } from './Link'; import { Route, Routes } from 'react-router-dom'; import { ConfigReader } from '@backstage/config'; -import OpenInNew from '@material-ui/icons/OpenInNew'; describe('', () => { it('navigates using react-router', async () => { @@ -59,7 +58,7 @@ describe('', () => { it('renders external link icon if externalLinkIcon prop is passed', async () => { const { container } = await renderInTestApp( - }> + External Link , ); diff --git a/packages/core-components/src/components/Link/Link.tsx b/packages/core-components/src/components/Link/Link.tsx index 86f5ec3c50..0008a9ff2c 100644 --- a/packages/core-components/src/components/Link/Link.tsx +++ b/packages/core-components/src/components/Link/Link.tsx @@ -29,6 +29,8 @@ import { LinkProps as RouterLinkProps, Route, } from 'react-router-dom'; +import OpenInNew from '@material-ui/icons/OpenInNew'; +import { useApp } from '@backstage/core-plugin-api'; export function isReactRouterBeta(): boolean { const [obj] = createRoutesFromChildren(} />); @@ -39,7 +41,7 @@ export function isReactRouterBeta(): boolean { export type LinkClassKey = 'visuallyHidden' | 'externalLink'; const useStyles = makeStyles( - { + theme => ({ visuallyHidden: { clip: 'rect(0 0 0 0)', clipPath: 'inset(50%)', @@ -53,10 +55,21 @@ const useStyles = makeStyles( externalLink: { position: 'relative', }, - }, + externalLinkIcon: { + verticalAlign: 'bottom', + marginLeft: theme.spacing(0.5), + }, + }), { name: 'Link' }, ); +const ExternalLinkIcon = () => { + const app = useApp(); + const Icon = app.getSystemIcon('externalLink') || OpenInNew; + const classes = useStyles(); + return ; +}; + export const isExternalUri = (uri: string) => /^([a-z+.-]+):/.test(uri); // See https://github.com/facebook/react/blob/f0cf832e1d0c8544c36aa8b310960885a11a847c/packages/react-dom-bindings/src/shared/sanitizeURL.js @@ -90,7 +103,7 @@ export type LinkProps = Omit & to: string; component?: ElementType; noTrack?: boolean; - externalLinkIcon?: React.ReactNode; + externalLinkIcon?: boolean; }; /** @@ -202,7 +215,7 @@ export const Link = React.forwardRef( className={classnames(classes.externalLink, props.className)} > {props.children} - {externalLinkIcon && externalLinkIcon} + {externalLinkIcon && } , Opens in a new window diff --git a/plugins/api-docs/src/components/ApisCards/ConsumedApisCard.tsx b/plugins/api-docs/src/components/ApisCards/ConsumedApisCard.tsx index c72da45dd3..0e0518a58f 100644 --- a/plugins/api-docs/src/components/ApisCards/ConsumedApisCard.tsx +++ b/plugins/api-docs/src/components/ApisCards/ConsumedApisCard.tsx @@ -33,16 +33,6 @@ import { TableOptions, WarningPanel, } from '@backstage/core-components'; -import OpenInNew from '@material-ui/icons/OpenInNew'; -import { useApp } from '@backstage/core-plugin-api'; -import { makeStyles, Theme } from '@material-ui/core/styles'; - -const useStyles = makeStyles((theme: Theme) => ({ - externalLink: { - verticalAlign: 'bottom', - marginLeft: theme.spacing(0.5), - }, -})); /** * @public @@ -63,9 +53,6 @@ export const ConsumedApisCard = (props: { const { entities, loading, error } = useRelatedEntities(entity, { type: RELATION_CONSUMES_API, }); - const app = useApp(); - const ExternalLinkIcon = app.getSystemIcon('externalLink') || OpenInNew; - const classes = useStyles(); if (loading) { return ( @@ -100,12 +87,7 @@ export const ConsumedApisCard = (props: { - } + externalLinkIcon > Learn how to change this diff --git a/plugins/api-docs/src/components/ApisCards/ProvidedApisCard.tsx b/plugins/api-docs/src/components/ApisCards/ProvidedApisCard.tsx index 2063f23673..f89f411488 100644 --- a/plugins/api-docs/src/components/ApisCards/ProvidedApisCard.tsx +++ b/plugins/api-docs/src/components/ApisCards/ProvidedApisCard.tsx @@ -33,16 +33,6 @@ import { TableOptions, WarningPanel, } from '@backstage/core-components'; -import { useApp } from '@backstage/core-plugin-api'; -import OpenInNew from '@material-ui/icons/OpenInNew'; -import { makeStyles, Theme } from '@material-ui/core/styles'; - -const useStyles = makeStyles((theme: Theme) => ({ - externalLink: { - verticalAlign: 'bottom', - marginLeft: theme.spacing(0.5), - }, -})); /** * @public @@ -63,9 +53,6 @@ export const ProvidedApisCard = (props: { const { entities, loading, error } = useRelatedEntities(entity, { type: RELATION_PROVIDES_API, }); - const app = useApp(); - const ExternalLinkIcon = app.getSystemIcon('externalLink') || OpenInNew; - const classes = useStyles(); if (loading) { return ( @@ -99,12 +86,7 @@ export const ProvidedApisCard = (props: { - } + externalLinkIcon > Learn how to change this diff --git a/plugins/catalog/src/components/RelatedEntitiesCard/RelatedEntitiesCard.tsx b/plugins/catalog/src/components/RelatedEntitiesCard/RelatedEntitiesCard.tsx index 730bb86bda..5b57cbd80e 100644 --- a/plugins/catalog/src/components/RelatedEntitiesCard/RelatedEntitiesCard.tsx +++ b/plugins/catalog/src/components/RelatedEntitiesCard/RelatedEntitiesCard.tsx @@ -44,9 +44,6 @@ import { } from './presets'; import { catalogTranslationRef } from '../../alpha/translation'; import { useTranslationRef } from '@backstage/core-plugin-api/alpha'; -import { useApp } from '@backstage/core-plugin-api'; -import OpenInNew from '@material-ui/icons/OpenInNew'; -import { makeStyles, Theme } from '@material-ui/core/styles'; /** @public */ export type RelatedEntitiesCardProps = { @@ -61,13 +58,6 @@ export type RelatedEntitiesCardProps = { tableOptions?: TableOptions; }; -const useStyles = makeStyles((theme: Theme) => ({ - externalLink: { - verticalAlign: 'bottom', - marginLeft: theme.spacing(0.5), - }, -})); - /** * A low level card component that can be used as a building block for more * specific cards. @@ -94,9 +84,6 @@ export const RelatedEntitiesCard = ( asRenderableEntities, tableOptions = {}, } = props; - const classes = useStyles(); - const app = useApp(); - const ExternalLinkIcon = app.getSystemIcon('externalLink') || OpenInNew; const { t } = useTranslationRef(catalogTranslationRef); const { entity } = useEntity(); const { entities, loading, error } = useRelatedEntities(entity, { @@ -128,16 +115,7 @@ export const RelatedEntitiesCard = (
{emptyMessage} - - } - > + {t('relatedEntitiesCard.emptyHelpLinkTitle')} From 96864c838691db6be88f70a5b2d7d3957570a6ee Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 24 Sep 2024 09:04:06 +0000 Subject: [PATCH 161/164] Version Packages (next) --- .changeset/pre.json | 42 +- docs/releases/v1.32.0-next.0-changelog.md | 2238 +++++++++++++++++ package.json | 2 +- packages/app-defaults/CHANGELOG.md | 13 + packages/app-defaults/package.json | 2 +- packages/app-next-example-plugin/CHANGELOG.md | 8 + packages/app-next-example-plugin/package.json | 2 +- packages/app-next/CHANGELOG.md | 45 + packages/app-next/package.json | 2 +- packages/app/CHANGELOG.md | 41 + packages/app/package.json | 2 +- packages/backend-app-api/CHANGELOG.md | 19 + packages/backend-app-api/package.json | 2 +- packages/backend-defaults/CHANGELOG.md | 21 + packages/backend-defaults/package.json | 2 +- .../CHANGELOG.md | 27 + .../package.json | 2 +- packages/backend-legacy/CHANGELOG.md | 41 + packages/backend-legacy/package.json | 2 +- packages/backend-openapi-utils/CHANGELOG.md | 8 + packages/backend-openapi-utils/package.json | 2 +- packages/backend-plugin-api/CHANGELOG.md | 12 + packages/backend-plugin-api/package.json | 2 +- packages/backend-test-utils/CHANGELOG.md | 14 + packages/backend-test-utils/package.json | 2 +- packages/backend/CHANGELOG.md | 37 + packages/backend/package.json | 2 +- packages/cli/CHANGELOG.md | 32 + packages/cli/package.json | 2 +- packages/core-app-api/CHANGELOG.md | 10 + packages/core-app-api/package.json | 2 +- packages/core-compat-api/CHANGELOG.md | 10 + packages/core-compat-api/package.json | 2 +- packages/core-components/CHANGELOG.md | 12 + packages/core-components/package.json | 2 +- packages/core-plugin-api/CHANGELOG.md | 16 + packages/core-plugin-api/package.json | 2 +- packages/create-app/CHANGELOG.md | 8 + packages/create-app/package.json | 2 +- packages/dev-utils/CHANGELOG.md | 14 + packages/dev-utils/package.json | 2 +- packages/e2e-test/CHANGELOG.md | 9 + packages/e2e-test/package.json | 2 +- packages/frontend-app-api/CHANGELOG.md | 18 + packages/frontend-app-api/package.json | 2 +- packages/frontend-defaults/CHANGELOG.md | 11 + packages/frontend-defaults/package.json | 2 +- packages/frontend-internal/CHANGELOG.md | 9 + packages/frontend-internal/package.json | 2 +- packages/frontend-plugin-api/CHANGELOG.md | 50 + packages/frontend-plugin-api/package.json | 2 +- packages/frontend-test-utils/CHANGELOG.md | 14 + packages/frontend-test-utils/package.json | 2 +- packages/integration-react/CHANGELOG.md | 9 + packages/integration-react/package.json | 2 +- packages/repo-tools/CHANGELOG.md | 17 + packages/repo-tools/package.json | 2 +- packages/scaffolder-internal/CHANGELOG.md | 8 + packages/scaffolder-internal/package.json | 2 +- .../techdocs-cli-embedded-app/CHANGELOG.md | 19 + .../techdocs-cli-embedded-app/package.json | 2 +- packages/techdocs-cli/CHANGELOG.md | 11 + packages/techdocs-cli/package.json | 2 +- packages/test-utils/CHANGELOG.md | 13 + packages/test-utils/package.json | 2 +- plugins/api-docs/CHANGELOG.md | 16 + plugins/api-docs/package.json | 2 +- plugins/app-backend/CHANGELOG.md | 14 + plugins/app-backend/package.json | 2 +- plugins/app-node/CHANGELOG.md | 8 + plugins/app-node/package.json | 2 +- plugins/app-visualizer/CHANGELOG.md | 9 + plugins/app-visualizer/package.json | 2 +- plugins/app/CHANGELOG.md | 11 + plugins/app/package.json | 2 +- .../CHANGELOG.md | 8 + .../package.json | 2 +- .../CHANGELOG.md | 8 + .../package.json | 2 +- .../CHANGELOG.md | 11 + .../package.json | 2 +- .../CHANGELOG.md | 10 + .../package.json | 2 +- .../CHANGELOG.md | 8 + .../package.json | 2 +- .../CHANGELOG.md | 8 + .../package.json | 2 +- .../CHANGELOG.md | 10 + .../package.json | 2 +- .../CHANGELOG.md | 10 + .../package.json | 2 +- .../CHANGELOG.md | 8 + .../package.json | 2 +- .../CHANGELOG.md | 8 + .../package.json | 2 +- .../CHANGELOG.md | 8 + .../package.json | 2 +- .../CHANGELOG.md | 11 + .../package.json | 2 +- .../CHANGELOG.md | 8 + .../package.json | 2 +- .../CHANGELOG.md | 8 + .../package.json | 2 +- .../CHANGELOG.md | 9 + .../package.json | 2 +- .../CHANGELOG.md | 10 + .../package.json | 2 +- .../CHANGELOG.md | 8 + .../package.json | 2 +- .../CHANGELOG.md | 8 + .../package.json | 2 +- .../CHANGELOG.md | 9 + .../package.json | 2 +- .../CHANGELOG.md | 9 + .../package.json | 2 +- plugins/auth-backend/CHANGELOG.md | 32 + plugins/auth-backend/package.json | 2 +- plugins/auth-node/CHANGELOG.md | 13 + plugins/auth-node/package.json | 2 +- plugins/auth-react/CHANGELOG.md | 9 + plugins/auth-react/package.json | 2 +- .../catalog-backend-module-aws/CHANGELOG.md | 16 + .../catalog-backend-module-aws/package.json | 2 +- .../catalog-backend-module-azure/CHANGELOG.md | 11 + .../catalog-backend-module-azure/package.json | 2 +- .../CHANGELOG.md | 12 + .../package.json | 2 +- .../CHANGELOG.md | 16 + .../package.json | 2 +- .../CHANGELOG.md | 12 + .../package.json | 2 +- .../catalog-backend-module-gcp/CHANGELOG.md | 11 + .../catalog-backend-module-gcp/package.json | 2 +- .../CHANGELOG.md | 11 + .../package.json | 2 +- .../CHANGELOG.md | 11 + .../package.json | 2 +- .../CHANGELOG.md | 16 + .../package.json | 2 +- .../CHANGELOG.md | 11 + .../package.json | 2 +- .../CHANGELOG.md | 14 + .../package.json | 2 +- .../CHANGELOG.md | 15 + .../package.json | 2 +- .../catalog-backend-module-ldap/CHANGELOG.md | 13 + .../catalog-backend-module-ldap/package.json | 2 +- .../catalog-backend-module-logs/CHANGELOG.md | 9 + .../catalog-backend-module-logs/package.json | 2 +- .../CHANGELOG.md | 11 + .../package.json | 2 +- .../CHANGELOG.md | 15 + .../package.json | 2 +- .../CHANGELOG.md | 12 + .../package.json | 2 +- .../CHANGELOG.md | 11 + .../package.json | 2 +- .../CHANGELOG.md | 14 + .../package.json | 2 +- plugins/catalog-backend/CHANGELOG.md | 21 + plugins/catalog-backend/package.json | 2 +- plugins/catalog-graph/CHANGELOG.md | 14 + plugins/catalog-graph/package.json | 2 +- plugins/catalog-import/CHANGELOG.md | 18 + plugins/catalog-import/package.json | 2 +- plugins/catalog-node/CHANGELOG.md | 14 + plugins/catalog-node/package.json | 2 +- plugins/catalog-react/CHANGELOG.md | 19 + plugins/catalog-react/package.json | 2 +- .../catalog-unprocessed-entities/CHANGELOG.md | 10 + .../catalog-unprocessed-entities/package.json | 2 +- plugins/catalog/CHANGELOG.md | 26 + plugins/catalog/package.json | 2 +- plugins/config-schema/CHANGELOG.md | 10 + plugins/config-schema/package.json | 2 +- plugins/devtools-backend/CHANGELOG.md | 16 + plugins/devtools-backend/package.json | 2 +- plugins/devtools/CHANGELOG.md | 13 + plugins/devtools/package.json | 2 +- .../CHANGELOG.md | 11 + .../package.json | 2 +- .../events-backend-module-azure/CHANGELOG.md | 8 + .../events-backend-module-azure/package.json | 2 +- .../CHANGELOG.md | 8 + .../package.json | 2 +- .../events-backend-module-gerrit/CHANGELOG.md | 8 + .../events-backend-module-gerrit/package.json | 2 +- .../events-backend-module-github/CHANGELOG.md | 10 + .../events-backend-module-github/package.json | 2 +- .../events-backend-module-gitlab/CHANGELOG.md | 10 + .../events-backend-module-gitlab/package.json | 2 +- .../events-backend-test-utils/CHANGELOG.md | 7 + .../events-backend-test-utils/package.json | 2 +- plugins/events-backend/CHANGELOG.md | 19 + plugins/events-backend/package.json | 2 +- plugins/events-node/CHANGELOG.md | 12 + plugins/events-node/package.json | 2 +- .../example-todo-list-backend/CHANGELOG.md | 9 + .../example-todo-list-backend/package.json | 2 +- plugins/example-todo-list/CHANGELOG.md | 8 + plugins/example-todo-list/package.json | 2 +- plugins/home-react/CHANGELOG.md | 8 + plugins/home-react/package.json | 2 +- plugins/home/CHANGELOG.md | 17 + plugins/home/package.json | 2 +- plugins/kubernetes-backend/CHANGELOG.md | 20 + plugins/kubernetes-backend/package.json | 2 +- plugins/kubernetes-cluster/CHANGELOG.md | 12 + plugins/kubernetes-cluster/package.json | 2 +- plugins/kubernetes-node/CHANGELOG.md | 11 + plugins/kubernetes-node/package.json | 2 +- plugins/kubernetes-react/CHANGELOG.md | 12 + plugins/kubernetes-react/package.json | 2 +- plugins/kubernetes/CHANGELOG.md | 14 + plugins/kubernetes/package.json | 2 +- .../CHANGELOG.md | 16 + .../package.json | 2 +- plugins/notifications-backend/CHANGELOG.md | 18 + plugins/notifications-backend/package.json | 2 +- plugins/notifications-node/CHANGELOG.md | 12 + plugins/notifications-node/package.json | 2 +- plugins/notifications/CHANGELOG.md | 13 + plugins/notifications/package.json | 2 +- plugins/org-react/CHANGELOG.md | 11 + plugins/org-react/package.json | 2 +- plugins/org/CHANGELOG.md | 13 + plugins/org/package.json | 2 +- .../CHANGELOG.md | 10 + .../package.json | 2 +- plugins/permission-backend/CHANGELOG.md | 13 + plugins/permission-backend/package.json | 2 +- plugins/permission-node/CHANGELOG.md | 12 + plugins/permission-node/package.json | 2 +- plugins/permission-react/CHANGELOG.md | 9 + plugins/permission-react/package.json | 2 +- plugins/proxy-backend/CHANGELOG.md | 10 + plugins/proxy-backend/package.json | 2 +- .../CHANGELOG.md | 11 + .../package.json | 2 +- .../CHANGELOG.md | 12 + .../package.json | 2 +- .../CHANGELOG.md | 11 + .../package.json | 2 +- .../CHANGELOG.md | 13 + .../package.json | 2 +- .../CHANGELOG.md | 12 + .../package.json | 2 +- .../CHANGELOG.md | 14 + .../package.json | 2 +- .../CHANGELOG.md | 11 + .../package.json | 2 +- .../CHANGELOG.md | 11 + .../package.json | 2 +- .../CHANGELOG.md | 11 + .../package.json | 2 +- .../CHANGELOG.md | 14 + .../package.json | 2 +- .../CHANGELOG.md | 13 + .../package.json | 2 +- .../CHANGELOG.md | 11 + .../package.json | 2 +- .../CHANGELOG.md | 13 + .../package.json | 2 +- .../CHANGELOG.md | 10 + .../package.json | 2 +- .../CHANGELOG.md | 11 + .../package.json | 2 +- plugins/scaffolder-backend/CHANGELOG.md | 50 + plugins/scaffolder-backend/package.json | 2 +- .../scaffolder-node-test-utils/CHANGELOG.md | 10 + .../scaffolder-node-test-utils/package.json | 2 +- plugins/scaffolder-node/CHANGELOG.md | 18 + plugins/scaffolder-node/package.json | 2 +- plugins/scaffolder-react/CHANGELOG.md | 22 + plugins/scaffolder-react/package.json | 2 +- plugins/scaffolder/CHANGELOG.md | 34 + plugins/scaffolder/package.json | 2 +- .../CHANGELOG.md | 18 + .../package.json | 2 +- .../CHANGELOG.md | 13 + .../package.json | 2 +- .../CHANGELOG.md | 12 + .../package.json | 2 +- plugins/search-backend-module-pg/CHANGELOG.md | 11 + plugins/search-backend-module-pg/package.json | 2 +- .../CHANGELOG.md | 11 + .../package.json | 2 +- .../CHANGELOG.md | 18 + .../package.json | 2 +- plugins/search-backend-node/CHANGELOG.md | 13 + plugins/search-backend-node/package.json | 2 +- plugins/search-backend/CHANGELOG.md | 17 + plugins/search-backend/package.json | 2 +- plugins/search-react/CHANGELOG.md | 13 + plugins/search-react/package.json | 2 +- plugins/search/CHANGELOG.md | 16 + plugins/search/package.json | 2 +- plugins/signals-backend/CHANGELOG.md | 13 + plugins/signals-backend/package.json | 2 +- plugins/signals-node/CHANGELOG.md | 12 + plugins/signals-node/package.json | 2 +- plugins/signals-react/CHANGELOG.md | 8 + plugins/signals-react/package.json | 2 +- plugins/signals/CHANGELOG.md | 11 + plugins/signals/package.json | 2 +- .../techdocs-addons-test-utils/CHANGELOG.md | 15 + .../techdocs-addons-test-utils/package.json | 2 +- plugins/techdocs-backend/CHANGELOG.md | 19 + plugins/techdocs-backend/package.json | 2 +- .../CHANGELOG.md | 11 + .../package.json | 2 +- plugins/techdocs-node/CHANGELOG.md | 14 + plugins/techdocs-node/package.json | 2 +- plugins/techdocs-react/CHANGELOG.md | 11 + plugins/techdocs-react/package.json | 2 +- plugins/techdocs/CHANGELOG.md | 24 + plugins/techdocs/package.json | 2 +- plugins/user-settings-backend/CHANGELOG.md | 14 + plugins/user-settings-backend/package.json | 2 +- plugins/user-settings/CHANGELOG.md | 17 + plugins/user-settings/package.json | 2 +- yarn.lock | 239 +- 322 files changed, 4898 insertions(+), 172 deletions(-) create mode 100644 docs/releases/v1.32.0-next.0-changelog.md create mode 100644 packages/scaffolder-internal/CHANGELOG.md diff --git a/.changeset/pre.json b/.changeset/pre.json index c71130f35a..706cec0de5 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -191,7 +191,45 @@ "@backstage/plugin-techdocs-react": "1.2.8", "@backstage/plugin-user-settings": "0.8.12", "@backstage/plugin-user-settings-backend": "0.2.24", - "@backstage/plugin-user-settings-common": "0.0.1" + "@backstage/plugin-user-settings-common": "0.0.1", + "@internal/scaffolder": "0.0.1" }, - "changesets": [] + "changesets": [ + "angry-windows-decide", + "big-rules-nail", + "breezy-bulldogs-smell", + "brown-frogs-walk", + "chair-fairs-drive", + "chilled-dolphins-join", + "clever-paws-stare", + "cyan-peaches-lay", + "dry-frogs-drum", + "early-drinks-kneel", + "eight-steaks-chew", + "eleven-pugs-hear", + "fair-chairs-drive", + "fifty-trainers-watch", + "five-gorillas-pay", + "fluffy-pears-cry", + "funny-rocks-train", + "fuzzy-elephants-tease", + "giant-kiwis-retire", + "happy-ligers-think", + "large-plants-rhyme", + "light-rats-travel", + "long-humans-hunt", + "nasty-lamps-greet", + "polite-days-flash", + "rich-deers-attend", + "shy-olives-swim", + "slow-gorillas-thank", + "slow-trees-compare", + "sour-phones-fix", + "stale-roses-serve", + "strange-bees-attack", + "strong-monkeys-melt", + "sweet-chicken-smash", + "thirty-pets-fry", + "tiny-pugs-kick" + ] } diff --git a/docs/releases/v1.32.0-next.0-changelog.md b/docs/releases/v1.32.0-next.0-changelog.md new file mode 100644 index 0000000000..8168a5659a --- /dev/null +++ b/docs/releases/v1.32.0-next.0-changelog.md @@ -0,0 +1,2238 @@ +# Release v1.32.0-next.0 + +Upgrade Helper: [https://backstage.github.io/upgrade-helper/?to=1.32.0-next.0](https://backstage.github.io/upgrade-helper/?to=1.32.0-next.0) + +## @backstage/cli@0.28.0-next.0 + +### Minor Changes + +- 6129076: **BREAKING**: Removed the following deprecated commands: + + - `create`: Use `backstage-cli new` instead + - `create-plugin`: Use `backstage-cli new` instead + - `plugin:diff`: Use `backstage-cli fix` instead + - `test`: Use `backstage-cli repo test` or `backstage-cli package test` instead + - `versions:check`: Use `yarn dedupe` or `yarn-deduplicate` instead + - `clean`: Use `backstage-cli package clean` instead + + In addition, the experimental `install` and `onboard` commands have been removed since they have not received any updates since their introduction and we're expecting usage to be low. If you where relying on these commands, please let us know by opening an issue towards the main Backstage repository. + +### Patch Changes + +- 520a383: Added functionality to the prepack script that will append the default export type for entry points to the `exports` object before publishing. This is to help with identifying the declarative integration points for plugins without needing to fetch or run the plugins first. +- 094eaa3: Remove references to in-repo backend-common +- 79ba5a8: The `LEGACY_BACKEND_START` flag is now deprecated. +- Updated dependencies + - @backstage/catalog-model@1.7.0 + - @backstage/cli-common@0.1.14 + - @backstage/cli-node@0.2.8 + - @backstage/config@1.2.0 + - @backstage/config-loader@1.9.1 + - @backstage/errors@1.2.4 + - @backstage/eslint-plugin@0.1.9 + - @backstage/integration@1.15.0 + - @backstage/release-manifests@0.0.11 + - @backstage/types@1.1.1 + +## @backstage/core-plugin-api@1.10.0-next.0 + +### Minor Changes + +- bfd4bec: **BREAKING PRODUCERS**: The `IconComponent` no longer accepts `fontSize="default"`. This has effectively been removed from Material-UI since its last two major versions, and has not worked properly for them in a long time. + + This change should not have an effect on neither users of MUI4 nor MUI5/6, since the updated interface should still let you send the respective `SvgIcon` types into interfaces where relevant (e.g. as app icons). + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.9 + +## @backstage/frontend-app-api@0.10.0-next.0 + +### Minor Changes + +- 4a5ba19: Removed deprecated `createApp` and `CreateAppFeatureLoader` from `@backstage/frontend-app-api`, use the same `createApp` and `CreateAppFeatureLoader` import from `@backstage/frontend-defaults` instead. + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/frontend-defaults@0.1.1-next.0 + - @backstage/config@1.2.0 + - @backstage/core-app-api@1.15.1-next.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.9 + +## @backstage/frontend-plugin-api@0.9.0-next.0 + +### Minor Changes + +- 4a5ba19: Removed deprecated `namespace` option from `createExtension` and `createExtensionBlueprint`, including `.make` and `.makeWithOverides`, it's no longer necessary and will use the `pluginId` instead. + + Removed deprecated `createExtensionOverrides` this should be replaced with `createFrontendModule` instead. + + Removed deprecated `BackstagePlugin` type, use `FrontendPlugin` type instead from this same package. + +- bfd4bec: **BREAKING PRODUCERS**: The `IconComponent` no longer accepts `fontSize="default"`. This has effectively been removed from Material-UI since its last two major versions, and has not worked properly for them in a long time. + + This change should not have an effect on neither users of MUI4 nor MUI5/6, since the updated interface should still let you send the respective `SvgIcon` types into interfaces where relevant (e.g. as app icons). + +### Patch Changes + +- 873e424: Internal refactor of usage of opaque types. + +- 323aae8: It is now possible to override the blueprint parameters when overriding an extension created from a blueprint: + + ```ts + const myExtension = MyBlueprint.make({ + params: { + myParam: 'myDefault', + }, + }); + + const myOverride = myExtension.override({ + params: { + myParam: 'myOverride', + }, + }); + const myFactoryOverride = myExtension.override({ + factory(origFactory) { + return origFactory({ + params: { + myParam: 'myOverride', + }, + }); + }, + }); + ``` + + The provided parameters will be merged with the original parameters of the extension. + +- Updated dependencies + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.9 + +## @backstage/repo-tools@0.10.0-next.0 + +### Minor Changes + +- 30c2be9: Update @microsoft/api-extractor and use their api report resolution. + Change api report format from `api-report.md` to `report.api.md` + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/cli-common@0.1.14 + - @backstage/cli-node@0.2.8 + - @backstage/config-loader@1.9.1 + - @backstage/errors@1.2.4 + +## @backstage/plugin-catalog@1.24.0-next.0 + +### Minor Changes + +- 71f9f0c: Updated default columns for location entities to remove description and tags from the catalog table view. + +### Patch Changes + +- 46b5a20: Empty states updated with external link icon for learn more links +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-compat-api@0.3.1-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/plugin-search-react@1.8.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/errors@1.2.4 + - @backstage/integration-react@1.1.32-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-permission-react@0.4.27-next.0 + - @backstage/plugin-scaffolder-common@1.5.6 + - @backstage/plugin-search-common@1.2.14 + +## @backstage/plugin-scaffolder@1.26.0-next.0 + +### Minor Changes + +- bf6eaf3: Added support for `FormFieldBlueprint` to create field extensions in the Scaffolder plugin +- cc3f80c: Added ability to create a new local scaffolder template to ease onboarding when creating new templates. +- 5492eb6: Added ability to link to a specific action on the actions page + +### Patch Changes + +- b2b2aa8: Fix extra divider displayed in owner list picker on list tasks page +- 7f1f483: Create a separate route for the Scaffolder template editor and add the ability to refresh the page without closing the directory. Also, when the directory is closed, the user will stay on the editor page and can load a template folder from there. +- 7a3d622: Create a separate route for the template form editor so we refresh it without being redirected to scaffolder edit page. +- 4698646: Change task list created at column to show timestamp +- 4130291: Create a separate route for the custom fields explorer so we refresh it without being redirected to scaffolder edit page. +- 11e0752: Make it possible to manually retry the scaffolder template from the step it failed +- 09fcd95: Update the Scaffolder template editor to quickly access installed custom fields and actions when editing a template. +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/plugin-scaffolder-react@1.13.0-next.0 + - @backstage/core-compat-api@0.3.1-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + - @backstage/integration-react@1.1.32-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-permission-react@0.4.27-next.0 + - @backstage/plugin-scaffolder-common@1.5.6 + +## @backstage/plugin-scaffolder-backend@1.26.0-next.0 + +### Minor Changes + +- 3ec4e6d: Added pagination support for listing of tasks and the ability to filter on several users and task statuses. + +### Patch Changes + +- 734c2d4: Add `fetch:template:file` scaffolder action to download a single file and template the contents. Example usage: + + ```yaml + - id: fetch-file + name: Fetch File + action: fetch:template:file + input: + url: https://github.com/backstage/software-templates/blob/main/scaffolder-templates/create-react-app/skeleton/catalog-info.yaml + targetPath: './target/catalog-info.yaml' + values: + component_id: My Component + owner: Test + ``` + +- 094eaa3: Remove references to in-repo backend-common + +- 11e0752: Make it possible to manually retry the scaffolder template from the step it failed + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/plugin-scaffolder-backend-module-github@0.5.1-next.0 + - @backstage/plugin-scaffolder-backend-module-gitlab@0.5.1-next.0 + - @backstage/backend-defaults@0.5.1-next.0 + - @backstage/plugin-permission-node@0.8.4-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + - @backstage/types@1.1.1 + - @backstage/plugin-bitbucket-cloud-common@0.2.23 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.1-next.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-scaffolder-backend-module-azure@0.2.1-next.0 + - @backstage/plugin-scaffolder-backend-module-bitbucket@0.3.1-next.0 + - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.1-next.0 + - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.1-next.0 + - @backstage/plugin-scaffolder-backend-module-gerrit@0.2.1-next.0 + - @backstage/plugin-scaffolder-backend-module-gitea@0.2.1-next.0 + - @backstage/plugin-scaffolder-common@1.5.6 + +## @backstage/plugin-scaffolder-node@0.5.0-next.0 + +### Minor Changes + +- 3ec4e6d: Added pagination support for listing of tasks and the ability to filter on several users and task statuses. + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- 11e0752: Make it possible to manually retry the scaffolder template from the step it failed +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + - @backstage/types@1.1.1 + - @backstage/plugin-scaffolder-common@1.5.6 + +## @backstage/plugin-scaffolder-react@1.13.0-next.0 + +### Minor Changes + +- bf6eaf3: Added support for `FormFieldBlueprint` to create field extensions in the Scaffolder plugin + +### Patch Changes + +- 11e0752: Make it possible to manually retry the scaffolder template from the step it failed +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/theme@0.5.7 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.9 + - @backstage/plugin-permission-react@0.4.27-next.0 + - @backstage/plugin-scaffolder-common@1.5.6 + +## @backstage/app-defaults@1.5.12-next.0 + +### Patch Changes + +- 46b5a20: Added `externalLink` to icon defaults +- 8c40e55: Updated the `bitbucket-server-auth` default API to set its environment based on the `auth.environment` config option instead of being hardcoded to `development`. +- Updated dependencies + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/core-app-api@1.15.1-next.0 + - @backstage/theme@0.5.7 + - @backstage/plugin-permission-react@0.4.27-next.0 + +## @backstage/backend-app-api@1.0.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common + +- 04af116: The backend will no longer exit immediately if any plugin or modules fails to initialize. Instead, the backend will wait for all plugins and modules to either start up successfully or throw, and then shut down the backend if there were any initialization errors. + + This fixes an issue where backend initialization errors in adjacent plugins during database schema migration could cause the database migrations to be stuck in a locked state. + +- Updated dependencies + - @backstage/plugin-permission-node@0.8.4-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/cli-common@0.1.14 + - @backstage/config@1.2.0 + - @backstage/config-loader@1.9.1 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + +## @backstage/backend-defaults@0.5.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/backend-app-api@1.0.1-next.0 + - @backstage/plugin-permission-node@0.8.4-next.0 + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-dev-utils@0.1.5 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/cli-common@0.1.14 + - @backstage/cli-node@0.2.8 + - @backstage/config@1.2.0 + - @backstage/config-loader@1.9.1 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + - @backstage/integration-aws-node@0.1.12 + - @backstage/types@1.1.1 + +## @backstage/backend-dynamic-feature-service@0.4.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- 2f88f88: Updated backend installation instructions. +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/plugin-search-backend-node@1.3.3-next.0 + - @backstage/backend-defaults@0.5.1-next.0 + - @backstage/backend-app-api@1.0.1-next.0 + - @backstage/plugin-catalog-backend@1.26.1-next.0 + - @backstage/plugin-permission-node@0.8.4-next.0 + - @backstage/plugin-events-backend@0.3.13-next.0 + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/cli-common@0.1.14 + - @backstage/cli-node@0.2.8 + - @backstage/config@1.2.0 + - @backstage/config-loader@1.9.1 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-app-node@0.1.26-next.0 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-search-common@1.2.14 + +## @backstage/backend-openapi-utils@0.1.19-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/errors@1.2.4 + +## @backstage/backend-plugin-api@1.0.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/cli-common@0.1.14 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-permission-common@0.8.1 + +## @backstage/backend-test-utils@1.0.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.5.1-next.0 + - @backstage/backend-app-api@1.0.1-next.0 + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + +## @backstage/core-app-api@1.15.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/config@1.2.0 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.9 + +## @backstage/core-compat-api@0.3.1-next.0 + +### Patch Changes + +- 4a5ba19: Internal update to remove deprecated `BackstagePlugin` type and move to `FrontendPlugin` +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/version-bridge@1.0.9 + +## @backstage/core-components@0.15.1-next.0 + +### Patch Changes + +- 46b5a20: `Link` component now accepts `externalLinkIcon` prop +- Updated dependencies + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/theme@0.5.7 + - @backstage/version-bridge@1.0.9 + +## @backstage/create-app@0.5.21-next.0 + +### Patch Changes + +- a7674d6: Fixed lack of `.yarnrc.yml` in the template. +- Updated dependencies + - @backstage/cli-common@0.1.14 + +## @backstage/dev-utils@1.1.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/app-defaults@1.5.12-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/core-app-api@1.15.1-next.0 + - @backstage/integration-react@1.1.32-next.0 + - @backstage/theme@0.5.7 + +## @backstage/frontend-defaults@0.1.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/frontend-app-api@0.10.0-next.0 + - @backstage/plugin-app@0.1.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + +## @backstage/frontend-test-utils@0.2.1-next.0 + +### Patch Changes + +- 873e424: Internal refactor of usage of opaque types. +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/frontend-app-api@0.10.0-next.0 + - @backstage/plugin-app@0.1.1-next.0 + - @backstage/config@1.2.0 + - @backstage/test-utils@1.6.1-next.0 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.9 + +## @backstage/integration-react@1.1.32-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/config@1.2.0 + - @backstage/integration@1.15.0 + +## @techdocs/cli@1.8.20-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.5.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/cli-common@0.1.14 + - @backstage/config@1.2.0 + - @backstage/plugin-techdocs-node@1.12.12-next.0 + +## @backstage/test-utils@1.6.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/config@1.2.0 + - @backstage/core-app-api@1.15.1-next.0 + - @backstage/theme@0.5.7 + - @backstage/types@1.1.1 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-react@0.4.27-next.0 + +## @backstage/plugin-api-docs@0.11.10-next.0 + +### Patch Changes + +- 46b5a20: Empty states updated with external link icon for learn more links +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/plugin-catalog@1.24.0-next.0 + - @backstage/core-compat-api@0.3.1-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-permission-react@0.4.27-next.0 + +## @backstage/plugin-app@0.1.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/theme@0.5.7 + - @backstage/plugin-permission-react@0.4.27-next.0 + +## @backstage/plugin-app-backend@0.3.75-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/config-loader@1.9.1 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-app-node@0.1.26-next.0 + +## @backstage/plugin-app-node@0.1.26-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config-loader@1.9.1 + +## @backstage/plugin-app-visualizer@0.1.11-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + +## @backstage/plugin-auth-backend@0.23.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-auth-backend-module-aws-alb-provider@0.2.1-next.0 + - @backstage/plugin-auth-backend-module-oidc-provider@0.3.1-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-auth-backend-module-atlassian-provider@0.3.1-next.0 + - @backstage/plugin-auth-backend-module-auth0-provider@0.1.1-next.0 + - @backstage/plugin-auth-backend-module-azure-easyauth-provider@0.2.1-next.0 + - @backstage/plugin-auth-backend-module-bitbucket-provider@0.2.1-next.0 + - @backstage/plugin-auth-backend-module-bitbucket-server-provider@0.1.1-next.0 + - @backstage/plugin-auth-backend-module-cloudflare-access-provider@0.3.1-next.0 + - @backstage/plugin-auth-backend-module-gcp-iap-provider@0.3.1-next.0 + - @backstage/plugin-auth-backend-module-github-provider@0.2.1-next.0 + - @backstage/plugin-auth-backend-module-gitlab-provider@0.2.1-next.0 + - @backstage/plugin-auth-backend-module-google-provider@0.2.1-next.0 + - @backstage/plugin-auth-backend-module-microsoft-provider@0.2.1-next.0 + - @backstage/plugin-auth-backend-module-oauth2-provider@0.3.1-next.0 + - @backstage/plugin-auth-backend-module-oauth2-proxy-provider@0.2.1-next.0 + - @backstage/plugin-auth-backend-module-okta-provider@0.1.1-next.0 + - @backstage/plugin-auth-backend-module-onelogin-provider@0.2.1-next.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + +## @backstage/plugin-auth-backend-module-atlassian-provider@0.3.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + +## @backstage/plugin-auth-backend-module-auth0-provider@0.1.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + +## @backstage/plugin-auth-backend-module-aws-alb-provider@0.2.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-auth-backend@0.23.1-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/errors@1.2.4 + +## @backstage/plugin-auth-backend-module-azure-easyauth-provider@0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/errors@1.2.4 + +## @backstage/plugin-auth-backend-module-bitbucket-provider@0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + +## @backstage/plugin-auth-backend-module-bitbucket-server-provider@0.1.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + +## @backstage/plugin-auth-backend-module-cloudflare-access-provider@0.3.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + +## @backstage/plugin-auth-backend-module-gcp-iap-provider@0.3.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + +## @backstage/plugin-auth-backend-module-github-provider@0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + +## @backstage/plugin-auth-backend-module-gitlab-provider@0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + +## @backstage/plugin-auth-backend-module-google-provider@0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + +## @backstage/plugin-auth-backend-module-guest-provider@0.2.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/errors@1.2.4 + +## @backstage/plugin-auth-backend-module-microsoft-provider@0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + +## @backstage/plugin-auth-backend-module-oauth2-provider@0.3.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + +## @backstage/plugin-auth-backend-module-oauth2-proxy-provider@0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/errors@1.2.4 + +## @backstage/plugin-auth-backend-module-oidc-provider@0.3.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-auth-backend@0.23.1-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + +## @backstage/plugin-auth-backend-module-okta-provider@0.1.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + +## @backstage/plugin-auth-backend-module-onelogin-provider@0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + +## @backstage/plugin-auth-backend-module-pinniped-provider@0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + +## @backstage/plugin-auth-backend-module-vmware-cloud-provider@0.3.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + +## @backstage/plugin-auth-node@0.5.3-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + +## @backstage/plugin-auth-react@0.1.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/errors@1.2.4 + +## @backstage/plugin-catalog-backend@1.26.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-search-backend-module-catalog@0.2.3-next.0 + - @backstage/plugin-permission-node@0.8.4-next.0 + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/backend-openapi-utils@0.1.19-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + - @backstage/plugin-permission-common@0.8.1 + +## @backstage/plugin-catalog-backend-module-aws@0.4.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.5.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + - @backstage/integration-aws-node@0.1.12 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + - @backstage/plugin-kubernetes-common@0.8.3 + +## @backstage/plugin-catalog-backend-module-azure@0.2.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/integration@1.15.0 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + +## @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-openapi-utils@0.1.19-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-catalog-node@1.13.1-next.0 + +## @backstage/plugin-catalog-backend-module-bitbucket-cloud@0.3.3-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/integration@1.15.0 + - @backstage/plugin-bitbucket-cloud-common@0.2.23 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + +## @backstage/plugin-catalog-backend-module-bitbucket-server@0.2.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + +## @backstage/plugin-catalog-backend-module-gcp@0.3.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + - @backstage/plugin-kubernetes-common@0.8.3 + +## @backstage/plugin-catalog-backend-module-gerrit@0.2.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + +## @backstage/plugin-catalog-backend-module-github@0.7.4-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-catalog-backend@1.26.1-next.0 + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/integration@1.15.0 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + +## @backstage/plugin-catalog-backend-module-github-org@0.3.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend-module-github@0.7.4-next.0 + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + +## @backstage/plugin-catalog-backend-module-gitlab@0.4.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.5.1-next.0 + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/integration@1.15.0 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + +## @backstage/plugin-catalog-backend-module-gitlab-org@0.2.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/plugin-catalog-backend-module-gitlab@0.4.3-next.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + +## @backstage/plugin-catalog-backend-module-incremental-ingestion@0.5.4-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-catalog-backend@1.26.1-next.0 + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-catalog-node@1.13.1-next.0 + - @backstage/plugin-permission-common@0.8.1 + +## @backstage/plugin-catalog-backend-module-ldap@0.9.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + +## @backstage/plugin-catalog-backend-module-logs@0.1.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.26.1-next.0 + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + +## @backstage/plugin-catalog-backend-module-msgraph@0.6.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + +## @backstage/plugin-catalog-backend-module-openapi@0.2.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-catalog-backend@1.26.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/integration@1.15.0 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + +## @backstage/plugin-catalog-backend-module-puppetdb@0.2.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-node@1.13.1-next.0 + +## @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + - @backstage/plugin-scaffolder-common@1.5.6 + +## @backstage/plugin-catalog-backend-module-unprocessed@0.5.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-catalog-node@1.13.1-next.0 + - @backstage/plugin-catalog-unprocessed-entities-common@0.0.4 + - @backstage/plugin-permission-common@0.8.1 + +## @backstage/plugin-catalog-graph@0.4.10-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-compat-api@0.3.1-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/types@1.1.1 + +## @backstage/plugin-catalog-import@0.12.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-compat-api@0.3.1-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + - @backstage/integration-react@1.1.32-next.0 + - @backstage/plugin-catalog-common@1.1.0 + +## @backstage/plugin-catalog-node@1.13.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-node@0.8.4-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-permission-common@0.8.1 + +## @backstage/plugin-catalog-react@1.13.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-compat-api@0.3.1-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/errors@1.2.4 + - @backstage/integration-react@1.1.32-next.0 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.9 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-react@0.4.27-next.0 + +## @backstage/plugin-catalog-unprocessed-entities@0.2.9-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/errors@1.2.4 + +## @backstage/plugin-config-schema@0.1.60-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + +## @backstage/plugin-devtools@0.1.19-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-compat-api@0.3.1-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-devtools-common@0.1.12 + - @backstage/plugin-permission-react@0.4.27-next.0 + +## @backstage/plugin-devtools-backend@0.4.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-permission-node@0.8.4-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/cli-common@0.1.14 + - @backstage/config@1.2.0 + - @backstage/config-loader@1.9.1 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-devtools-common@0.1.12 + - @backstage/plugin-permission-common@0.8.1 + +## @backstage/plugin-events-backend@0.3.13-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common + +- 5c728ee: The events backend now has its own built-in event bus for distributing events across multiple backend instances. It exposes a new HTTP API under `/bus/v1/` for publishing and reading events from the bus, as well as its own storage and notification mechanism for events. + + The backing event store for the bus only supports scaled deployment if PostgreSQL is used as the DBMS. If SQLite or MySQL is used, the event bus will fall back to an in-memory store that does not support multiple backend instances. + + The default `EventsService` implementation from `@backstage/plugin-events-node` has also been updated to use the new events bus. + +- Updated dependencies + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/backend-openapi-utils@0.1.19-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + +## @backstage/plugin-events-backend-module-aws-sqs@0.4.3-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/types@1.1.1 + +## @backstage/plugin-events-backend-module-azure@0.2.12-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + +## @backstage/plugin-events-backend-module-bitbucket-cloud@0.2.12-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + +## @backstage/plugin-events-backend-module-gerrit@0.2.12-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + +## @backstage/plugin-events-backend-module-github@0.2.12-next.0 + +### Patch Changes + +- 2f88f88: Updated backend installation instructions. +- Updated dependencies + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + +## @backstage/plugin-events-backend-module-gitlab@0.2.12-next.0 + +### Patch Changes + +- 2f88f88: Updated backend installation instructions. +- Updated dependencies + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + +## @backstage/plugin-events-backend-test-utils@0.1.36-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.1-next.0 + +## @backstage/plugin-events-node@0.4.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- 2f88f88: Updated backend installation instructions. +- a90ce4a: The default implementation of the `EventsService` now uses the new event bus for distributing events across multiple backend instances if the events backend plugin is installed. +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + +## @backstage/plugin-home@0.7.11-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-compat-api@0.3.1-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/core-app-api@1.15.1-next.0 + - @backstage/theme@0.5.7 + - @backstage/plugin-home-react@0.1.18-next.0 + +## @backstage/plugin-home-react@0.1.18-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + +## @backstage/plugin-kubernetes@0.11.15-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-compat-api@0.3.1-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/plugin-kubernetes-common@0.8.3 + - @backstage/plugin-kubernetes-react@0.4.4-next.0 + +## @backstage/plugin-kubernetes-backend@0.18.7-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-kubernetes-node@0.1.20-next.0 + - @backstage/plugin-permission-node@0.8.4-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration-aws-node@0.1.12 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-node@1.13.1-next.0 + - @backstage/plugin-kubernetes-common@0.8.3 + - @backstage/plugin-permission-common@0.8.1 + +## @backstage/plugin-kubernetes-cluster@0.0.16-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/plugin-kubernetes-common@0.8.3 + - @backstage/plugin-kubernetes-react@0.4.4-next.0 + +## @backstage/plugin-kubernetes-node@0.1.20-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/types@1.1.1 + - @backstage/plugin-kubernetes-common@0.8.3 + +## @backstage/plugin-kubernetes-react@0.4.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-kubernetes-common@0.8.3 + +## @backstage/plugin-notifications@0.3.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/errors@1.2.4 + - @backstage/theme@0.5.7 + - @backstage/types@1.1.1 + - @backstage/plugin-notifications-common@0.0.5 + - @backstage/plugin-signals-react@0.0.6-next.0 + +## @backstage/plugin-notifications-backend@0.4.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-notifications-node@0.2.7-next.0 + - @backstage/plugin-signals-node@0.1.12-next.0 + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-catalog-node@1.13.1-next.0 + - @backstage/plugin-notifications-common@0.0.5 + +## @backstage/plugin-notifications-backend-module-email@0.3.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-notifications-node@0.2.7-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/integration-aws-node@0.1.12 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-node@1.13.1-next.0 + - @backstage/plugin-notifications-common@0.0.5 + +## @backstage/plugin-notifications-node@0.2.7-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-signals-node@0.1.12-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/plugin-notifications-common@0.0.5 + +## @backstage/plugin-org@0.6.30-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-compat-api@0.3.1-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/plugin-catalog-common@1.1.0 + +## @backstage/plugin-org-react@0.1.29-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + +## @backstage/plugin-permission-backend@0.5.50-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-permission-node@0.8.4-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-permission-common@0.8.1 + +## @backstage/plugin-permission-backend-module-allow-all-policy@0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-node@0.8.4-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/plugin-permission-common@0.8.1 + +## @backstage/plugin-permission-node@0.8.4-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-permission-common@0.8.1 + +## @backstage/plugin-permission-react@0.4.27-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/config@1.2.0 + - @backstage/plugin-permission-common@0.8.1 + +## @backstage/plugin-proxy-backend@0.5.7-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/types@1.1.1 + +## @backstage/plugin-scaffolder-backend-module-azure@0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + +## @backstage/plugin-scaffolder-backend-module-bitbucket@0.3.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.1-next.0 + - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.1-next.0 + +## @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + - @backstage/plugin-bitbucket-cloud-common@0.2.23 + +## @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + +## @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + +## @backstage/plugin-scaffolder-backend-module-cookiecutter@0.3.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/backend-defaults@0.5.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + - @backstage/types@1.1.1 + +## @backstage/plugin-scaffolder-backend-module-gcp@0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + +## @backstage/plugin-scaffolder-backend-module-gerrit@0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + +## @backstage/plugin-scaffolder-backend-module-gitea@0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + +## @backstage/plugin-scaffolder-backend-module-github@0.5.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + +## @backstage/plugin-scaffolder-backend-module-gitlab@0.5.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- f2f68cf: Updated `gitlab:group:ensureExists` action to instead use oauth client. +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + +## @backstage/plugin-scaffolder-backend-module-notifications@0.1.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/plugin-notifications-node@0.2.7-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/plugin-notifications-common@0.0.5 + +## @backstage/plugin-scaffolder-backend-module-rails@0.5.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + - @backstage/types@1.1.1 + +## @backstage/plugin-scaffolder-backend-module-sentry@0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + +## @backstage/plugin-scaffolder-backend-module-yeoman@0.4.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/plugin-scaffolder-node-test-utils@0.1.13-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/types@1.1.1 + +## @backstage/plugin-scaffolder-node-test-utils@0.1.13-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/backend-test-utils@1.0.1-next.0 + - @backstage/types@1.1.1 + +## @backstage/plugin-search@1.4.17-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-compat-api@0.3.1-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/plugin-search-react@1.8.1-next.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.9 + - @backstage/plugin-search-common@1.2.14 + +## @backstage/plugin-search-backend@1.5.18-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-search-backend-node@1.3.3-next.0 + - @backstage/backend-defaults@0.5.1-next.0 + - @backstage/plugin-permission-node@0.8.4-next.0 + - @backstage/backend-openapi-utils@0.1.19-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-search-common@1.2.14 + +## @backstage/plugin-search-backend-module-catalog@0.2.3-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- 2f88f88: Updated backend installation instructions. +- Updated dependencies + - @backstage/plugin-search-backend-node@1.3.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-search-common@1.2.14 + +## @backstage/plugin-search-backend-module-elasticsearch@1.5.7-next.0 + +### Patch Changes + +- d78b07c: Align the configuration schema with the docs and actual behavior of the code +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-search-backend-node@1.3.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/integration-aws-node@0.1.12 + - @backstage/plugin-search-common@1.2.14 + +## @backstage/plugin-search-backend-module-explore@0.2.3-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- 2f88f88: Updated backend installation instructions. +- Updated dependencies + - @backstage/plugin-search-backend-node@1.3.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/plugin-search-common@1.2.14 + +## @backstage/plugin-search-backend-module-pg@0.5.36-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-search-backend-node@1.3.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/plugin-search-common@1.2.14 + +## @backstage/plugin-search-backend-module-stack-overflow-collator@0.3.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-search-backend-node@1.3.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/plugin-search-common@1.2.14 + +## @backstage/plugin-search-backend-module-techdocs@0.2.3-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- 2f88f88: Updated backend installation instructions. +- Updated dependencies + - @backstage/plugin-search-backend-node@1.3.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-search-common@1.2.14 + - @backstage/plugin-techdocs-node@1.12.12-next.0 + +## @backstage/plugin-search-backend-node@1.3.3-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/backend-defaults@0.5.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-search-common@1.2.14 + +## @backstage/plugin-search-react@1.8.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/theme@0.5.7 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.9 + - @backstage/plugin-search-common@1.2.14 + +## @backstage/plugin-signals@0.0.11-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/theme@0.5.7 + - @backstage/types@1.1.1 + - @backstage/plugin-signals-react@0.0.6-next.0 + +## @backstage/plugin-signals-backend@0.2.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-signals-node@0.1.12-next.0 + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/types@1.1.1 + +## @backstage/plugin-signals-node@0.1.12-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/types@1.1.1 + +## @backstage/plugin-signals-react@0.0.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/types@1.1.1 + +## @backstage/plugin-techdocs@1.10.10-next.0 + +### Patch Changes + +- a77cb40: Make `emptyState` input optional on `entity-content:techdocs` extension so that + the default empty state extension works correctly. +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-compat-api@0.3.1-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/plugin-search-react@1.8.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + - @backstage/integration-react@1.1.32-next.0 + - @backstage/theme@0.5.7 + - @backstage/plugin-auth-react@0.1.7-next.0 + - @backstage/plugin-search-common@1.2.14 + - @backstage/plugin-techdocs-common@0.1.0 + - @backstage/plugin-techdocs-react@1.2.9-next.0 + +## @backstage/plugin-techdocs-addons-test-utils@1.0.39-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog@1.24.0-next.0 + - @backstage/plugin-techdocs@1.10.10-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/plugin-search-react@1.8.1-next.0 + - @backstage/core-app-api@1.15.1-next.0 + - @backstage/integration-react@1.1.32-next.0 + - @backstage/test-utils@1.6.1-next.0 + - @backstage/plugin-techdocs-react@1.2.9-next.0 + +## @backstage/plugin-techdocs-backend@1.10.14-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-search-backend-module-techdocs@0.2.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-techdocs-common@0.1.0 + - @backstage/plugin-techdocs-node@1.12.12-next.0 + +## @backstage/plugin-techdocs-module-addons-contrib@1.1.15-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/integration@1.15.0 + - @backstage/integration-react@1.1.32-next.0 + - @backstage/plugin-techdocs-react@1.2.9-next.0 + +## @backstage/plugin-techdocs-node@1.12.12-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + - @backstage/integration-aws-node@0.1.12 + - @backstage/plugin-search-common@1.2.14 + - @backstage/plugin-techdocs-common@0.1.0 + +## @backstage/plugin-techdocs-react@1.2.9-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/version-bridge@1.0.9 + +## @backstage/plugin-user-settings@0.8.13-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-compat-api@0.3.1-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/core-app-api@1.15.1-next.0 + - @backstage/errors@1.2.4 + - @backstage/theme@0.5.7 + - @backstage/types@1.1.1 + - @backstage/plugin-signals-react@0.0.6-next.0 + - @backstage/plugin-user-settings-common@0.0.1 + +## @backstage/plugin-user-settings-backend@0.2.25-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.5.1-next.0 + - @backstage/plugin-signals-node@0.1.12-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-user-settings-common@0.0.1 + +## example-app@0.2.102-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder@1.26.0-next.0 + - @backstage/plugin-catalog@1.24.0-next.0 + - @backstage/cli@0.28.0-next.0 + - @backstage/plugin-scaffolder-react@1.13.0-next.0 + - @backstage/plugin-api-docs@0.11.10-next.0 + - @backstage/frontend-app-api@0.10.0-next.0 + - @backstage/plugin-techdocs@1.10.10-next.0 + - @backstage/app-defaults@1.5.12-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-graph@0.4.10-next.0 + - @backstage/plugin-catalog-import@0.12.4-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/plugin-devtools@0.1.19-next.0 + - @backstage/plugin-home@0.7.11-next.0 + - @backstage/plugin-kubernetes@0.11.15-next.0 + - @backstage/plugin-org@0.6.30-next.0 + - @backstage/plugin-search@1.4.17-next.0 + - @backstage/plugin-search-react@1.8.1-next.0 + - @backstage/plugin-user-settings@0.8.13-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/core-app-api@1.15.1-next.0 + - @backstage/integration-react@1.1.32-next.0 + - @backstage/theme@0.5.7 + - @backstage/plugin-auth-react@0.1.7-next.0 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-unprocessed-entities@0.2.9-next.0 + - @backstage/plugin-kubernetes-cluster@0.0.16-next.0 + - @backstage/plugin-notifications@0.3.2-next.0 + - @backstage/plugin-permission-react@0.4.27-next.0 + - @backstage/plugin-search-common@1.2.14 + - @backstage/plugin-signals@0.0.11-next.0 + - @backstage/plugin-techdocs-module-addons-contrib@1.1.15-next.0 + - @backstage/plugin-techdocs-react@1.2.9-next.0 + +## example-app-next@0.0.16-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder@1.26.0-next.0 + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/plugin-catalog@1.24.0-next.0 + - @backstage/cli@0.28.0-next.0 + - @backstage/plugin-scaffolder-react@1.13.0-next.0 + - @backstage/plugin-api-docs@0.11.10-next.0 + - @backstage/frontend-app-api@0.10.0-next.0 + - @backstage/plugin-techdocs@1.10.10-next.0 + - @backstage/app-defaults@1.5.12-next.0 + - @backstage/core-compat-api@0.3.1-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/frontend-defaults@0.1.1-next.0 + - @backstage/plugin-app@0.1.1-next.0 + - @backstage/plugin-app-visualizer@0.1.11-next.0 + - @backstage/plugin-catalog-graph@0.4.10-next.0 + - @backstage/plugin-catalog-import@0.12.4-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/plugin-home@0.7.11-next.0 + - @backstage/plugin-kubernetes@0.11.15-next.0 + - @backstage/plugin-org@0.6.30-next.0 + - @backstage/plugin-search@1.4.17-next.0 + - @backstage/plugin-search-react@1.8.1-next.0 + - @backstage/plugin-user-settings@0.8.13-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/core-app-api@1.15.1-next.0 + - @backstage/integration-react@1.1.32-next.0 + - @backstage/theme@0.5.7 + - @backstage/plugin-auth-react@0.1.7-next.0 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-unprocessed-entities@0.2.9-next.0 + - @backstage/plugin-kubernetes-cluster@0.0.16-next.0 + - @backstage/plugin-notifications@0.3.2-next.0 + - @backstage/plugin-permission-react@0.4.27-next.0 + - @backstage/plugin-search-common@1.2.14 + - @backstage/plugin-signals@0.0.11-next.0 + - @backstage/plugin-techdocs-module-addons-contrib@1.1.15-next.0 + - @backstage/plugin-techdocs-react@1.2.9-next.0 + +## app-next-example-plugin@0.0.16-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-components@0.15.1-next.0 + +## example-backend@0.0.31-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.26.0-next.0 + - @backstage/plugin-auth-backend-module-guest-provider@0.2.1-next.0 + - @backstage/plugin-catalog-backend-module-unprocessed@0.5.1-next.0 + - @backstage/plugin-scaffolder-backend-module-github@0.5.1-next.0 + - @backstage/plugin-catalog-backend-module-openapi@0.2.1-next.0 + - @backstage/plugin-search-backend-module-techdocs@0.2.3-next.0 + - @backstage/plugin-search-backend-module-catalog@0.2.3-next.0 + - @backstage/plugin-search-backend-module-explore@0.2.3-next.0 + - @backstage/plugin-notifications-backend@0.4.1-next.0 + - @backstage/plugin-search-backend-node@1.3.3-next.0 + - @backstage/plugin-kubernetes-backend@0.18.7-next.0 + - @backstage/plugin-permission-backend@0.5.50-next.0 + - @backstage/backend-defaults@0.5.1-next.0 + - @backstage/plugin-devtools-backend@0.4.1-next.0 + - @backstage/plugin-techdocs-backend@1.10.14-next.0 + - @backstage/plugin-catalog-backend@1.26.1-next.0 + - @backstage/plugin-permission-node@0.8.4-next.0 + - @backstage/plugin-signals-backend@0.2.1-next.0 + - @backstage/plugin-events-backend@0.3.13-next.0 + - @backstage/plugin-search-backend@1.5.18-next.0 + - @backstage/plugin-proxy-backend@0.5.7-next.0 + - @backstage/plugin-auth-backend@0.23.1-next.0 + - @backstage/plugin-app-backend@0.3.75-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/plugin-auth-backend-module-github-provider@0.2.1-next.0 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.1-next.0 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.1-next.0 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.2.1-next.0 + - @backstage/plugin-permission-common@0.8.1 + +## example-backend-legacy@0.2.103-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-search-backend-module-elasticsearch@1.5.7-next.0 + - @backstage/plugin-scaffolder-backend@1.26.0-next.0 + - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.1-next.0 + - @backstage/plugin-catalog-backend-module-unprocessed@0.5.1-next.0 + - @backstage/plugin-scaffolder-backend-module-gitlab@0.5.1-next.0 + - @backstage/plugin-scaffolder-backend-module-rails@0.5.1-next.0 + - @backstage/plugin-search-backend-module-techdocs@0.2.3-next.0 + - @backstage/plugin-search-backend-module-catalog@0.2.3-next.0 + - @backstage/plugin-search-backend-module-explore@0.2.3-next.0 + - @backstage/plugin-search-backend-module-pg@0.5.36-next.0 + - @backstage/plugin-search-backend-node@1.3.3-next.0 + - @backstage/plugin-kubernetes-backend@0.18.7-next.0 + - @backstage/plugin-permission-backend@0.5.50-next.0 + - @backstage/backend-defaults@0.5.1-next.0 + - @backstage/plugin-devtools-backend@0.4.1-next.0 + - @backstage/plugin-techdocs-backend@1.10.14-next.0 + - @backstage/plugin-catalog-backend@1.26.1-next.0 + - @backstage/plugin-permission-node@0.8.4-next.0 + - @backstage/plugin-signals-backend@0.2.1-next.0 + - @backstage/plugin-events-backend@0.3.13-next.0 + - @backstage/plugin-search-backend@1.5.18-next.0 + - @backstage/plugin-proxy-backend@0.5.7-next.0 + - @backstage/plugin-auth-backend@0.23.1-next.0 + - @backstage/plugin-signals-node@0.1.12-next.0 + - @backstage/plugin-app-backend@0.3.75-next.0 + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/integration@1.15.0 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.1-next.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + - @backstage/plugin-permission-common@0.8.1 + +## e2e-test@0.2.21-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/create-app@0.5.21-next.0 + - @backstage/cli-common@0.1.14 + - @backstage/errors@1.2.4 + +## @internal/frontend@0.0.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.9 + +## @internal/scaffolder@0.0.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-react@1.13.0-next.0 + +## techdocs-cli-embedded-app@0.2.101-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog@1.24.0-next.0 + - @backstage/cli@0.28.0-next.0 + - @backstage/plugin-techdocs@1.10.10-next.0 + - @backstage/app-defaults@1.5.12-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/core-app-api@1.15.1-next.0 + - @backstage/integration-react@1.1.32-next.0 + - @backstage/test-utils@1.6.1-next.0 + - @backstage/theme@0.5.7 + - @backstage/plugin-techdocs-react@1.2.9-next.0 + +## @internal/plugin-todo-list@1.0.32-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + +## @internal/plugin-todo-list-backend@1.0.32-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/errors@1.2.4 diff --git a/package.json b/package.json index 346739959a..72f7113331 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "root", - "version": "1.31.0", + "version": "1.32.0-next.0", "private": true, "repository": { "type": "git", diff --git a/packages/app-defaults/CHANGELOG.md b/packages/app-defaults/CHANGELOG.md index 332e9557e7..70d5261e9a 100644 --- a/packages/app-defaults/CHANGELOG.md +++ b/packages/app-defaults/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/app-defaults +## 1.5.12-next.0 + +### Patch Changes + +- 46b5a20: Added `externalLink` to icon defaults +- 8c40e55: Updated the `bitbucket-server-auth` default API to set its environment based on the `auth.environment` config option instead of being hardcoded to `development`. +- Updated dependencies + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/core-app-api@1.15.1-next.0 + - @backstage/theme@0.5.7 + - @backstage/plugin-permission-react@0.4.27-next.0 + ## 1.5.11 ### Patch Changes diff --git a/packages/app-defaults/package.json b/packages/app-defaults/package.json index 6eb78c5734..dac7cebeaa 100644 --- a/packages/app-defaults/package.json +++ b/packages/app-defaults/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/app-defaults", - "version": "1.5.11", + "version": "1.5.12-next.0", "description": "Provides the default wiring of a Backstage App", "backstage": { "role": "web-library" diff --git a/packages/app-next-example-plugin/CHANGELOG.md b/packages/app-next-example-plugin/CHANGELOG.md index 1e593e642f..e7e0d18b5e 100644 --- a/packages/app-next-example-plugin/CHANGELOG.md +++ b/packages/app-next-example-plugin/CHANGELOG.md @@ -1,5 +1,13 @@ # app-next-example-plugin +## 0.0.16-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-components@0.15.1-next.0 + ## 0.0.15 ### Patch Changes diff --git a/packages/app-next-example-plugin/package.json b/packages/app-next-example-plugin/package.json index 530944ac13..4f3342c100 100644 --- a/packages/app-next-example-plugin/package.json +++ b/packages/app-next-example-plugin/package.json @@ -1,6 +1,6 @@ { "name": "app-next-example-plugin", - "version": "0.0.15", + "version": "0.0.16-next.0", "description": "Backstage internal example plugin", "backstage": { "role": "frontend-plugin", diff --git a/packages/app-next/CHANGELOG.md b/packages/app-next/CHANGELOG.md index 907d6b1e6f..7a02795402 100644 --- a/packages/app-next/CHANGELOG.md +++ b/packages/app-next/CHANGELOG.md @@ -1,5 +1,50 @@ # example-app-next +## 0.0.16-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder@1.26.0-next.0 + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/plugin-catalog@1.24.0-next.0 + - @backstage/cli@0.28.0-next.0 + - @backstage/plugin-scaffolder-react@1.13.0-next.0 + - @backstage/plugin-api-docs@0.11.10-next.0 + - @backstage/frontend-app-api@0.10.0-next.0 + - @backstage/plugin-techdocs@1.10.10-next.0 + - @backstage/app-defaults@1.5.12-next.0 + - @backstage/core-compat-api@0.3.1-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/frontend-defaults@0.1.1-next.0 + - @backstage/plugin-app@0.1.1-next.0 + - @backstage/plugin-app-visualizer@0.1.11-next.0 + - @backstage/plugin-catalog-graph@0.4.10-next.0 + - @backstage/plugin-catalog-import@0.12.4-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/plugin-home@0.7.11-next.0 + - @backstage/plugin-kubernetes@0.11.15-next.0 + - @backstage/plugin-org@0.6.30-next.0 + - @backstage/plugin-search@1.4.17-next.0 + - @backstage/plugin-search-react@1.8.1-next.0 + - @backstage/plugin-user-settings@0.8.13-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/core-app-api@1.15.1-next.0 + - @backstage/integration-react@1.1.32-next.0 + - @backstage/theme@0.5.7 + - @backstage/plugin-auth-react@0.1.7-next.0 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-unprocessed-entities@0.2.9-next.0 + - @backstage/plugin-kubernetes-cluster@0.0.16-next.0 + - @backstage/plugin-notifications@0.3.2-next.0 + - @backstage/plugin-permission-react@0.4.27-next.0 + - @backstage/plugin-search-common@1.2.14 + - @backstage/plugin-signals@0.0.11-next.0 + - @backstage/plugin-techdocs-module-addons-contrib@1.1.15-next.0 + - @backstage/plugin-techdocs-react@1.2.9-next.0 + ## 0.0.15 ### Patch Changes diff --git a/packages/app-next/package.json b/packages/app-next/package.json index 04565a76a3..29f9105031 100644 --- a/packages/app-next/package.json +++ b/packages/app-next/package.json @@ -1,6 +1,6 @@ { "name": "example-app-next", - "version": "0.0.15", + "version": "0.0.16-next.0", "backstage": { "role": "frontend" }, diff --git a/packages/app/CHANGELOG.md b/packages/app/CHANGELOG.md index 490937fd68..bc152199f3 100644 --- a/packages/app/CHANGELOG.md +++ b/packages/app/CHANGELOG.md @@ -1,5 +1,46 @@ # example-app +## 0.2.102-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder@1.26.0-next.0 + - @backstage/plugin-catalog@1.24.0-next.0 + - @backstage/cli@0.28.0-next.0 + - @backstage/plugin-scaffolder-react@1.13.0-next.0 + - @backstage/plugin-api-docs@0.11.10-next.0 + - @backstage/frontend-app-api@0.10.0-next.0 + - @backstage/plugin-techdocs@1.10.10-next.0 + - @backstage/app-defaults@1.5.12-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-graph@0.4.10-next.0 + - @backstage/plugin-catalog-import@0.12.4-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/plugin-devtools@0.1.19-next.0 + - @backstage/plugin-home@0.7.11-next.0 + - @backstage/plugin-kubernetes@0.11.15-next.0 + - @backstage/plugin-org@0.6.30-next.0 + - @backstage/plugin-search@1.4.17-next.0 + - @backstage/plugin-search-react@1.8.1-next.0 + - @backstage/plugin-user-settings@0.8.13-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/core-app-api@1.15.1-next.0 + - @backstage/integration-react@1.1.32-next.0 + - @backstage/theme@0.5.7 + - @backstage/plugin-auth-react@0.1.7-next.0 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-unprocessed-entities@0.2.9-next.0 + - @backstage/plugin-kubernetes-cluster@0.0.16-next.0 + - @backstage/plugin-notifications@0.3.2-next.0 + - @backstage/plugin-permission-react@0.4.27-next.0 + - @backstage/plugin-search-common@1.2.14 + - @backstage/plugin-signals@0.0.11-next.0 + - @backstage/plugin-techdocs-module-addons-contrib@1.1.15-next.0 + - @backstage/plugin-techdocs-react@1.2.9-next.0 + ## 0.2.101 ### Patch Changes diff --git a/packages/app/package.json b/packages/app/package.json index 56a90fcbf0..15cdd85d32 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -1,6 +1,6 @@ { "name": "example-app", - "version": "0.2.101", + "version": "0.2.102-next.0", "backstage": { "role": "frontend" }, diff --git a/packages/backend-app-api/CHANGELOG.md b/packages/backend-app-api/CHANGELOG.md index 2eb1534e7e..20926596c5 100644 --- a/packages/backend-app-api/CHANGELOG.md +++ b/packages/backend-app-api/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/backend-app-api +## 1.0.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- 04af116: The backend will no longer exit immediately if any plugin or modules fails to initialize. Instead, the backend will wait for all plugins and modules to either start up successfully or throw, and then shut down the backend if there were any initialization errors. + + This fixes an issue where backend initialization errors in adjacent plugins during database schema migration could cause the database migrations to be stuck in a locked state. + +- Updated dependencies + - @backstage/plugin-permission-node@0.8.4-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/cli-common@0.1.14 + - @backstage/config@1.2.0 + - @backstage/config-loader@1.9.1 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + ## 1.0.0 ### Major Changes diff --git a/packages/backend-app-api/package.json b/packages/backend-app-api/package.json index 5e9291a884..018eea139f 100644 --- a/packages/backend-app-api/package.json +++ b/packages/backend-app-api/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/backend-app-api", - "version": "1.0.0", + "version": "1.0.1-next.0", "description": "Core API used by Backstage backend apps", "backstage": { "role": "node-library" diff --git a/packages/backend-defaults/CHANGELOG.md b/packages/backend-defaults/CHANGELOG.md index 216d08182a..1fe09ee8f8 100644 --- a/packages/backend-defaults/CHANGELOG.md +++ b/packages/backend-defaults/CHANGELOG.md @@ -1,5 +1,26 @@ # @backstage/backend-defaults +## 0.5.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/backend-app-api@1.0.1-next.0 + - @backstage/plugin-permission-node@0.8.4-next.0 + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-dev-utils@0.1.5 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/cli-common@0.1.14 + - @backstage/cli-node@0.2.8 + - @backstage/config@1.2.0 + - @backstage/config-loader@1.9.1 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + - @backstage/integration-aws-node@0.1.12 + - @backstage/types@1.1.1 + ## 0.5.0 ### Minor Changes diff --git a/packages/backend-defaults/package.json b/packages/backend-defaults/package.json index f096bd573e..4437a4ff1f 100644 --- a/packages/backend-defaults/package.json +++ b/packages/backend-defaults/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/backend-defaults", - "version": "0.5.0", + "version": "0.5.1-next.0", "description": "Backend defaults used by Backstage backend apps", "backstage": { "role": "node-library" diff --git a/packages/backend-dynamic-feature-service/CHANGELOG.md b/packages/backend-dynamic-feature-service/CHANGELOG.md index 937468541e..61501e48c8 100644 --- a/packages/backend-dynamic-feature-service/CHANGELOG.md +++ b/packages/backend-dynamic-feature-service/CHANGELOG.md @@ -1,5 +1,32 @@ # @backstage/backend-dynamic-feature-service +## 0.4.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- 2f88f88: Updated backend installation instructions. +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/plugin-search-backend-node@1.3.3-next.0 + - @backstage/backend-defaults@0.5.1-next.0 + - @backstage/backend-app-api@1.0.1-next.0 + - @backstage/plugin-catalog-backend@1.26.1-next.0 + - @backstage/plugin-permission-node@0.8.4-next.0 + - @backstage/plugin-events-backend@0.3.13-next.0 + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/cli-common@0.1.14 + - @backstage/cli-node@0.2.8 + - @backstage/config@1.2.0 + - @backstage/config-loader@1.9.1 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-app-node@0.1.26-next.0 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-search-common@1.2.14 + ## 0.4.0 ### Minor Changes diff --git a/packages/backend-dynamic-feature-service/package.json b/packages/backend-dynamic-feature-service/package.json index 5a1cfc0e7d..d30395aa67 100644 --- a/packages/backend-dynamic-feature-service/package.json +++ b/packages/backend-dynamic-feature-service/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/backend-dynamic-feature-service", - "version": "0.4.0", + "version": "0.4.1-next.0", "description": "Backstage dynamic feature service", "backstage": { "role": "node-library" diff --git a/packages/backend-legacy/CHANGELOG.md b/packages/backend-legacy/CHANGELOG.md index 160ca1ca02..e19594aa65 100644 --- a/packages/backend-legacy/CHANGELOG.md +++ b/packages/backend-legacy/CHANGELOG.md @@ -1,5 +1,46 @@ # example-backend-legacy +## 0.2.103-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-search-backend-module-elasticsearch@1.5.7-next.0 + - @backstage/plugin-scaffolder-backend@1.26.0-next.0 + - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.1-next.0 + - @backstage/plugin-catalog-backend-module-unprocessed@0.5.1-next.0 + - @backstage/plugin-scaffolder-backend-module-gitlab@0.5.1-next.0 + - @backstage/plugin-scaffolder-backend-module-rails@0.5.1-next.0 + - @backstage/plugin-search-backend-module-techdocs@0.2.3-next.0 + - @backstage/plugin-search-backend-module-catalog@0.2.3-next.0 + - @backstage/plugin-search-backend-module-explore@0.2.3-next.0 + - @backstage/plugin-search-backend-module-pg@0.5.36-next.0 + - @backstage/plugin-search-backend-node@1.3.3-next.0 + - @backstage/plugin-kubernetes-backend@0.18.7-next.0 + - @backstage/plugin-permission-backend@0.5.50-next.0 + - @backstage/backend-defaults@0.5.1-next.0 + - @backstage/plugin-devtools-backend@0.4.1-next.0 + - @backstage/plugin-techdocs-backend@1.10.14-next.0 + - @backstage/plugin-catalog-backend@1.26.1-next.0 + - @backstage/plugin-permission-node@0.8.4-next.0 + - @backstage/plugin-signals-backend@0.2.1-next.0 + - @backstage/plugin-events-backend@0.3.13-next.0 + - @backstage/plugin-search-backend@1.5.18-next.0 + - @backstage/plugin-proxy-backend@0.5.7-next.0 + - @backstage/plugin-auth-backend@0.23.1-next.0 + - @backstage/plugin-signals-node@0.1.12-next.0 + - @backstage/plugin-app-backend@0.3.75-next.0 + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/integration@1.15.0 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.1-next.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + - @backstage/plugin-permission-common@0.8.1 + ## 0.2.102 ### Patch Changes diff --git a/packages/backend-legacy/package.json b/packages/backend-legacy/package.json index b9fa12ef02..12c8570616 100644 --- a/packages/backend-legacy/package.json +++ b/packages/backend-legacy/package.json @@ -1,6 +1,6 @@ { "name": "example-backend-legacy", - "version": "0.2.102", + "version": "0.2.103-next.0", "backstage": { "role": "backend" }, diff --git a/packages/backend-openapi-utils/CHANGELOG.md b/packages/backend-openapi-utils/CHANGELOG.md index b0abef5cc8..9bb33dd55d 100644 --- a/packages/backend-openapi-utils/CHANGELOG.md +++ b/packages/backend-openapi-utils/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/backend-openapi-utils +## 0.1.19-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/errors@1.2.4 + ## 0.1.18 ### Patch Changes diff --git a/packages/backend-openapi-utils/package.json b/packages/backend-openapi-utils/package.json index feaf61883c..8f6fd1b6eb 100644 --- a/packages/backend-openapi-utils/package.json +++ b/packages/backend-openapi-utils/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/backend-openapi-utils", - "version": "0.1.18", + "version": "0.1.19-next.0", "description": "OpenAPI typescript support.", "backstage": { "role": "node-library" diff --git a/packages/backend-plugin-api/CHANGELOG.md b/packages/backend-plugin-api/CHANGELOG.md index 052042c351..252d59ea1c 100644 --- a/packages/backend-plugin-api/CHANGELOG.md +++ b/packages/backend-plugin-api/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/backend-plugin-api +## 1.0.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/cli-common@0.1.14 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-permission-common@0.8.1 + ## 1.0.0 ### Major Changes diff --git a/packages/backend-plugin-api/package.json b/packages/backend-plugin-api/package.json index 08c1ad670c..cc3f4d09c7 100644 --- a/packages/backend-plugin-api/package.json +++ b/packages/backend-plugin-api/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/backend-plugin-api", - "version": "1.0.0", + "version": "1.0.1-next.0", "description": "Core API used by Backstage backend plugins", "backstage": { "role": "node-library" diff --git a/packages/backend-test-utils/CHANGELOG.md b/packages/backend-test-utils/CHANGELOG.md index 17c424adc9..bf8b8bd92d 100644 --- a/packages/backend-test-utils/CHANGELOG.md +++ b/packages/backend-test-utils/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/backend-test-utils +## 1.0.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.5.1-next.0 + - @backstage/backend-app-api@1.0.1-next.0 + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + ## 1.0.0 ### Major Changes diff --git a/packages/backend-test-utils/package.json b/packages/backend-test-utils/package.json index f53d9932d8..aea4e2f94a 100644 --- a/packages/backend-test-utils/package.json +++ b/packages/backend-test-utils/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/backend-test-utils", - "version": "1.0.0", + "version": "1.0.1-next.0", "description": "Test helpers library for Backstage backends", "backstage": { "role": "node-library" diff --git a/packages/backend/CHANGELOG.md b/packages/backend/CHANGELOG.md index 4273e49072..363b814ce8 100644 --- a/packages/backend/CHANGELOG.md +++ b/packages/backend/CHANGELOG.md @@ -1,5 +1,42 @@ # example-backend +## 0.0.31-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.26.0-next.0 + - @backstage/plugin-auth-backend-module-guest-provider@0.2.1-next.0 + - @backstage/plugin-catalog-backend-module-unprocessed@0.5.1-next.0 + - @backstage/plugin-scaffolder-backend-module-github@0.5.1-next.0 + - @backstage/plugin-catalog-backend-module-openapi@0.2.1-next.0 + - @backstage/plugin-search-backend-module-techdocs@0.2.3-next.0 + - @backstage/plugin-search-backend-module-catalog@0.2.3-next.0 + - @backstage/plugin-search-backend-module-explore@0.2.3-next.0 + - @backstage/plugin-notifications-backend@0.4.1-next.0 + - @backstage/plugin-search-backend-node@1.3.3-next.0 + - @backstage/plugin-kubernetes-backend@0.18.7-next.0 + - @backstage/plugin-permission-backend@0.5.50-next.0 + - @backstage/backend-defaults@0.5.1-next.0 + - @backstage/plugin-devtools-backend@0.4.1-next.0 + - @backstage/plugin-techdocs-backend@1.10.14-next.0 + - @backstage/plugin-catalog-backend@1.26.1-next.0 + - @backstage/plugin-permission-node@0.8.4-next.0 + - @backstage/plugin-signals-backend@0.2.1-next.0 + - @backstage/plugin-events-backend@0.3.13-next.0 + - @backstage/plugin-search-backend@1.5.18-next.0 + - @backstage/plugin-proxy-backend@0.5.7-next.0 + - @backstage/plugin-auth-backend@0.23.1-next.0 + - @backstage/plugin-app-backend@0.3.75-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/plugin-auth-backend-module-github-provider@0.2.1-next.0 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.1-next.0 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.1-next.0 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.2.1-next.0 + - @backstage/plugin-permission-common@0.8.1 + ## 0.0.30 ### Patch Changes diff --git a/packages/backend/package.json b/packages/backend/package.json index f5d7f88d1a..13de4407bb 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -1,6 +1,6 @@ { "name": "example-backend", - "version": "0.0.30", + "version": "0.0.31-next.0", "backstage": { "role": "backend" }, diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md index 9e26042601..7c4a46ad5a 100644 --- a/packages/cli/CHANGELOG.md +++ b/packages/cli/CHANGELOG.md @@ -1,5 +1,37 @@ # @backstage/cli +## 0.28.0-next.0 + +### Minor Changes + +- 6129076: **BREAKING**: Removed the following deprecated commands: + + - `create`: Use `backstage-cli new` instead + - `create-plugin`: Use `backstage-cli new` instead + - `plugin:diff`: Use `backstage-cli fix` instead + - `test`: Use `backstage-cli repo test` or `backstage-cli package test` instead + - `versions:check`: Use `yarn dedupe` or `yarn-deduplicate` instead + - `clean`: Use `backstage-cli package clean` instead + + In addition, the experimental `install` and `onboard` commands have been removed since they have not received any updates since their introduction and we're expecting usage to be low. If you where relying on these commands, please let us know by opening an issue towards the main Backstage repository. + +### Patch Changes + +- 520a383: Added functionality to the prepack script that will append the default export type for entry points to the `exports` object before publishing. This is to help with identifying the declarative integration points for plugins without needing to fetch or run the plugins first. +- 094eaa3: Remove references to in-repo backend-common +- 79ba5a8: The `LEGACY_BACKEND_START` flag is now deprecated. +- Updated dependencies + - @backstage/catalog-model@1.7.0 + - @backstage/cli-common@0.1.14 + - @backstage/cli-node@0.2.8 + - @backstage/config@1.2.0 + - @backstage/config-loader@1.9.1 + - @backstage/errors@1.2.4 + - @backstage/eslint-plugin@0.1.9 + - @backstage/integration@1.15.0 + - @backstage/release-manifests@0.0.11 + - @backstage/types@1.1.1 + ## 0.27.1 ### Patch Changes diff --git a/packages/cli/package.json b/packages/cli/package.json index e4bb68c097..74d3d825e6 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/cli", - "version": "0.27.1", + "version": "0.28.0-next.0", "description": "CLI for developing Backstage plugins and apps", "backstage": { "role": "cli" diff --git a/packages/core-app-api/CHANGELOG.md b/packages/core-app-api/CHANGELOG.md index 92a7e6a94e..fd86cbb918 100644 --- a/packages/core-app-api/CHANGELOG.md +++ b/packages/core-app-api/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/core-app-api +## 1.15.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/config@1.2.0 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.9 + ## 1.15.0 ### Minor Changes diff --git a/packages/core-app-api/package.json b/packages/core-app-api/package.json index b9c96c3b5c..a410836f27 100644 --- a/packages/core-app-api/package.json +++ b/packages/core-app-api/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/core-app-api", - "version": "1.15.0", + "version": "1.15.1-next.0", "description": "Core app API used by Backstage apps", "backstage": { "role": "web-library" diff --git a/packages/core-compat-api/CHANGELOG.md b/packages/core-compat-api/CHANGELOG.md index 6d5e73b45e..cd1154dbc8 100644 --- a/packages/core-compat-api/CHANGELOG.md +++ b/packages/core-compat-api/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/core-compat-api +## 0.3.1-next.0 + +### Patch Changes + +- 4a5ba19: Internal update to remove deprecated `BackstagePlugin` type and move to `FrontendPlugin` +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/version-bridge@1.0.9 + ## 0.3.0 ### Minor Changes diff --git a/packages/core-compat-api/package.json b/packages/core-compat-api/package.json index 1f386e46e4..eea6e65717 100644 --- a/packages/core-compat-api/package.json +++ b/packages/core-compat-api/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/core-compat-api", - "version": "0.3.0", + "version": "0.3.1-next.0", "backstage": { "role": "web-library" }, diff --git a/packages/core-components/CHANGELOG.md b/packages/core-components/CHANGELOG.md index 067dfb70b6..935c94a33b 100644 --- a/packages/core-components/CHANGELOG.md +++ b/packages/core-components/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/core-components +## 0.15.1-next.0 + +### Patch Changes + +- 46b5a20: `Link` component now accepts `externalLinkIcon` prop +- Updated dependencies + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/theme@0.5.7 + - @backstage/version-bridge@1.0.9 + ## 0.15.0 ### Minor Changes diff --git a/packages/core-components/package.json b/packages/core-components/package.json index fd3b1898cd..4390c2eaf1 100644 --- a/packages/core-components/package.json +++ b/packages/core-components/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/core-components", - "version": "0.15.0", + "version": "0.15.1-next.0", "description": "Core components used by Backstage plugins and apps", "backstage": { "role": "web-library" diff --git a/packages/core-plugin-api/CHANGELOG.md b/packages/core-plugin-api/CHANGELOG.md index fa2af5806b..e6244245be 100644 --- a/packages/core-plugin-api/CHANGELOG.md +++ b/packages/core-plugin-api/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/core-plugin-api +## 1.10.0-next.0 + +### Minor Changes + +- bfd4bec: **BREAKING PRODUCERS**: The `IconComponent` no longer accepts `fontSize="default"`. This has effectively been removed from Material-UI since its last two major versions, and has not worked properly for them in a long time. + + This change should not have an effect on neither users of MUI4 nor MUI5/6, since the updated interface should still let you send the respective `SvgIcon` types into interfaces where relevant (e.g. as app icons). + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.9 + ## 1.9.4 ### Patch Changes diff --git a/packages/core-plugin-api/package.json b/packages/core-plugin-api/package.json index 4e41feae0f..7d0e2925ae 100644 --- a/packages/core-plugin-api/package.json +++ b/packages/core-plugin-api/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/core-plugin-api", - "version": "1.9.4", + "version": "1.10.0-next.0", "description": "Core API used by Backstage plugins", "backstage": { "role": "web-library" diff --git a/packages/create-app/CHANGELOG.md b/packages/create-app/CHANGELOG.md index f9adf43242..de3a9a4392 100644 --- a/packages/create-app/CHANGELOG.md +++ b/packages/create-app/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/create-app +## 0.5.21-next.0 + +### Patch Changes + +- a7674d6: Fixed lack of `.yarnrc.yml` in the template. +- Updated dependencies + - @backstage/cli-common@0.1.14 + ## 0.5.19 ### Patch Changes diff --git a/packages/create-app/package.json b/packages/create-app/package.json index 75c0dae4ce..68764acc0a 100644 --- a/packages/create-app/package.json +++ b/packages/create-app/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/create-app", - "version": "0.5.19", + "version": "0.5.21-next.0", "description": "A CLI that helps you create your own Backstage app", "backstage": { "role": "cli" diff --git a/packages/dev-utils/CHANGELOG.md b/packages/dev-utils/CHANGELOG.md index 23a75f11db..ada9df8b6e 100644 --- a/packages/dev-utils/CHANGELOG.md +++ b/packages/dev-utils/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/dev-utils +## 1.1.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/app-defaults@1.5.12-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/core-app-api@1.15.1-next.0 + - @backstage/integration-react@1.1.32-next.0 + - @backstage/theme@0.5.7 + ## 1.1.0 ### Minor Changes diff --git a/packages/dev-utils/package.json b/packages/dev-utils/package.json index 70ef33a8ae..fbdbd454f2 100644 --- a/packages/dev-utils/package.json +++ b/packages/dev-utils/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/dev-utils", - "version": "1.1.0", + "version": "1.1.1-next.0", "description": "Utilities for developing Backstage plugins.", "backstage": { "role": "web-library" diff --git a/packages/e2e-test/CHANGELOG.md b/packages/e2e-test/CHANGELOG.md index 0cb30bb7c8..0ed5490a8b 100644 --- a/packages/e2e-test/CHANGELOG.md +++ b/packages/e2e-test/CHANGELOG.md @@ -1,5 +1,14 @@ # e2e-test +## 0.2.21-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/create-app@0.5.21-next.0 + - @backstage/cli-common@0.1.14 + - @backstage/errors@1.2.4 + ## 0.2.20 ### Patch Changes diff --git a/packages/e2e-test/package.json b/packages/e2e-test/package.json index e89d8fb497..606a30e363 100644 --- a/packages/e2e-test/package.json +++ b/packages/e2e-test/package.json @@ -1,6 +1,6 @@ { "name": "e2e-test", - "version": "0.2.20", + "version": "0.2.21-next.0", "description": "E2E test for verifying Backstage packages", "backstage": { "role": "cli" diff --git a/packages/frontend-app-api/CHANGELOG.md b/packages/frontend-app-api/CHANGELOG.md index 09cb2071be..cbc4a2e361 100644 --- a/packages/frontend-app-api/CHANGELOG.md +++ b/packages/frontend-app-api/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/frontend-app-api +## 0.10.0-next.0 + +### Minor Changes + +- 4a5ba19: Removed deprecated `createApp` and `CreateAppFeatureLoader` from `@backstage/frontend-app-api`, use the same `createApp` and `CreateAppFeatureLoader` import from `@backstage/frontend-defaults` instead. + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/frontend-defaults@0.1.1-next.0 + - @backstage/config@1.2.0 + - @backstage/core-app-api@1.15.1-next.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.9 + ## 0.9.0 ### Minor Changes diff --git a/packages/frontend-app-api/package.json b/packages/frontend-app-api/package.json index 48381b6c5a..1a7ac69820 100644 --- a/packages/frontend-app-api/package.json +++ b/packages/frontend-app-api/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/frontend-app-api", - "version": "0.9.0", + "version": "0.10.0-next.0", "backstage": { "role": "web-library" }, diff --git a/packages/frontend-defaults/CHANGELOG.md b/packages/frontend-defaults/CHANGELOG.md index 14d9fefec3..7c85a116f4 100644 --- a/packages/frontend-defaults/CHANGELOG.md +++ b/packages/frontend-defaults/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/frontend-defaults +## 0.1.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/frontend-app-api@0.10.0-next.0 + - @backstage/plugin-app@0.1.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + ## 0.1.0 ### Minor Changes diff --git a/packages/frontend-defaults/package.json b/packages/frontend-defaults/package.json index 9e6c65d54a..7d78dc5410 100644 --- a/packages/frontend-defaults/package.json +++ b/packages/frontend-defaults/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/frontend-defaults", - "version": "0.1.0", + "version": "0.1.1-next.0", "backstage": { "role": "web-library" }, diff --git a/packages/frontend-internal/CHANGELOG.md b/packages/frontend-internal/CHANGELOG.md index 4d42d324bf..44381cf70d 100644 --- a/packages/frontend-internal/CHANGELOG.md +++ b/packages/frontend-internal/CHANGELOG.md @@ -1,5 +1,14 @@ # @internal/frontend +## 0.0.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.9 + ## 0.0.1 ### Patch Changes diff --git a/packages/frontend-internal/package.json b/packages/frontend-internal/package.json index 385c882740..b739f60e39 100644 --- a/packages/frontend-internal/package.json +++ b/packages/frontend-internal/package.json @@ -1,6 +1,6 @@ { "name": "@internal/frontend", - "version": "0.0.1", + "version": "0.0.2-next.0", "backstage": { "role": "web-library", "inline": true diff --git a/packages/frontend-plugin-api/CHANGELOG.md b/packages/frontend-plugin-api/CHANGELOG.md index b5bf0d17f2..d2cef285d5 100644 --- a/packages/frontend-plugin-api/CHANGELOG.md +++ b/packages/frontend-plugin-api/CHANGELOG.md @@ -1,5 +1,55 @@ # @backstage/frontend-plugin-api +## 0.9.0-next.0 + +### Minor Changes + +- 4a5ba19: Removed deprecated `namespace` option from `createExtension` and `createExtensionBlueprint`, including `.make` and `.makeWithOverides`, it's no longer necessary and will use the `pluginId` instead. + + Removed deprecated `createExtensionOverrides` this should be replaced with `createFrontendModule` instead. + + Removed deprecated `BackstagePlugin` type, use `FrontendPlugin` type instead from this same package. + +- bfd4bec: **BREAKING PRODUCERS**: The `IconComponent` no longer accepts `fontSize="default"`. This has effectively been removed from Material-UI since its last two major versions, and has not worked properly for them in a long time. + + This change should not have an effect on neither users of MUI4 nor MUI5/6, since the updated interface should still let you send the respective `SvgIcon` types into interfaces where relevant (e.g. as app icons). + +### Patch Changes + +- 873e424: Internal refactor of usage of opaque types. +- 323aae8: It is now possible to override the blueprint parameters when overriding an extension created from a blueprint: + + ```ts + const myExtension = MyBlueprint.make({ + params: { + myParam: 'myDefault', + }, + }); + + const myOverride = myExtension.override({ + params: { + myParam: 'myOverride', + }, + }); + const myFactoryOverride = myExtension.override({ + factory(origFactory) { + return origFactory({ + params: { + myParam: 'myOverride', + }, + }); + }, + }); + ``` + + The provided parameters will be merged with the original parameters of the extension. + +- Updated dependencies + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.9 + ## 0.8.0 ### Minor Changes diff --git a/packages/frontend-plugin-api/package.json b/packages/frontend-plugin-api/package.json index 35dc1ff31d..9595d6670f 100644 --- a/packages/frontend-plugin-api/package.json +++ b/packages/frontend-plugin-api/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/frontend-plugin-api", - "version": "0.8.0", + "version": "0.9.0-next.0", "backstage": { "role": "web-library" }, diff --git a/packages/frontend-test-utils/CHANGELOG.md b/packages/frontend-test-utils/CHANGELOG.md index 49d89fa70e..72588c9526 100644 --- a/packages/frontend-test-utils/CHANGELOG.md +++ b/packages/frontend-test-utils/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/frontend-test-utils +## 0.2.1-next.0 + +### Patch Changes + +- 873e424: Internal refactor of usage of opaque types. +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/frontend-app-api@0.10.0-next.0 + - @backstage/plugin-app@0.1.1-next.0 + - @backstage/config@1.2.0 + - @backstage/test-utils@1.6.1-next.0 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.9 + ## 0.2.0 ### Minor Changes diff --git a/packages/frontend-test-utils/package.json b/packages/frontend-test-utils/package.json index 46e94f6686..f6ecd28a97 100644 --- a/packages/frontend-test-utils/package.json +++ b/packages/frontend-test-utils/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/frontend-test-utils", - "version": "0.2.0", + "version": "0.2.1-next.0", "backstage": { "role": "web-library" }, diff --git a/packages/integration-react/CHANGELOG.md b/packages/integration-react/CHANGELOG.md index 33d02b443f..efe55d1094 100644 --- a/packages/integration-react/CHANGELOG.md +++ b/packages/integration-react/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/integration-react +## 1.1.32-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/config@1.2.0 + - @backstage/integration@1.15.0 + ## 1.1.31 ### Patch Changes diff --git a/packages/integration-react/package.json b/packages/integration-react/package.json index 3320cd5108..610ce6f02f 100644 --- a/packages/integration-react/package.json +++ b/packages/integration-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/integration-react", - "version": "1.1.31", + "version": "1.1.32-next.0", "description": "Frontend package for managing integrations towards external systems", "backstage": { "role": "web-library" diff --git a/packages/repo-tools/CHANGELOG.md b/packages/repo-tools/CHANGELOG.md index 4157990d6c..7e772a99c0 100644 --- a/packages/repo-tools/CHANGELOG.md +++ b/packages/repo-tools/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/repo-tools +## 0.10.0-next.0 + +### Minor Changes + +- 30c2be9: Update @microsoft/api-extractor and use their api report resolution. + Change api report format from `api-report.md` to `report.api.md` + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/cli-common@0.1.14 + - @backstage/cli-node@0.2.8 + - @backstage/config-loader@1.9.1 + - @backstage/errors@1.2.4 + ## 0.9.7 ### Patch Changes diff --git a/packages/repo-tools/package.json b/packages/repo-tools/package.json index 76fb74cc42..8e9f705671 100644 --- a/packages/repo-tools/package.json +++ b/packages/repo-tools/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/repo-tools", - "version": "0.9.7", + "version": "0.10.0-next.0", "description": "CLI for Backstage repo tooling ", "backstage": { "role": "cli" diff --git a/packages/scaffolder-internal/CHANGELOG.md b/packages/scaffolder-internal/CHANGELOG.md new file mode 100644 index 0000000000..f0f7a9767b --- /dev/null +++ b/packages/scaffolder-internal/CHANGELOG.md @@ -0,0 +1,8 @@ +# @internal/scaffolder + +## 0.0.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-react@1.13.0-next.0 diff --git a/packages/scaffolder-internal/package.json b/packages/scaffolder-internal/package.json index a046ddc86b..3df80f36ec 100644 --- a/packages/scaffolder-internal/package.json +++ b/packages/scaffolder-internal/package.json @@ -1,6 +1,6 @@ { "name": "@internal/scaffolder", - "version": "0.0.1", + "version": "0.0.2-next.0", "backstage": { "role": "web-library", "inline": true diff --git a/packages/techdocs-cli-embedded-app/CHANGELOG.md b/packages/techdocs-cli-embedded-app/CHANGELOG.md index 6ed813c269..82cede0446 100644 --- a/packages/techdocs-cli-embedded-app/CHANGELOG.md +++ b/packages/techdocs-cli-embedded-app/CHANGELOG.md @@ -1,5 +1,24 @@ # techdocs-cli-embedded-app +## 0.2.101-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog@1.24.0-next.0 + - @backstage/cli@0.28.0-next.0 + - @backstage/plugin-techdocs@1.10.10-next.0 + - @backstage/app-defaults@1.5.12-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/core-app-api@1.15.1-next.0 + - @backstage/integration-react@1.1.32-next.0 + - @backstage/test-utils@1.6.1-next.0 + - @backstage/theme@0.5.7 + - @backstage/plugin-techdocs-react@1.2.9-next.0 + ## 0.2.100 ### Patch Changes diff --git a/packages/techdocs-cli-embedded-app/package.json b/packages/techdocs-cli-embedded-app/package.json index 1ea64aa69f..249ec2f062 100644 --- a/packages/techdocs-cli-embedded-app/package.json +++ b/packages/techdocs-cli-embedded-app/package.json @@ -1,6 +1,6 @@ { "name": "techdocs-cli-embedded-app", - "version": "0.2.100", + "version": "0.2.101-next.0", "backstage": { "role": "frontend" }, diff --git a/packages/techdocs-cli/CHANGELOG.md b/packages/techdocs-cli/CHANGELOG.md index 86b76032d3..fefd4d2513 100644 --- a/packages/techdocs-cli/CHANGELOG.md +++ b/packages/techdocs-cli/CHANGELOG.md @@ -1,5 +1,16 @@ # @techdocs/cli +## 1.8.20-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.5.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/cli-common@0.1.14 + - @backstage/config@1.2.0 + - @backstage/plugin-techdocs-node@1.12.12-next.0 + ## 1.8.19 ### Patch Changes diff --git a/packages/techdocs-cli/package.json b/packages/techdocs-cli/package.json index 5c199c9d79..12ae968f2e 100644 --- a/packages/techdocs-cli/package.json +++ b/packages/techdocs-cli/package.json @@ -1,6 +1,6 @@ { "name": "@techdocs/cli", - "version": "1.8.19", + "version": "1.8.20-next.0", "description": "Utility CLI for managing TechDocs sites in Backstage.", "backstage": { "role": "cli" diff --git a/packages/test-utils/CHANGELOG.md b/packages/test-utils/CHANGELOG.md index 8f9721f1ea..b749d728f8 100644 --- a/packages/test-utils/CHANGELOG.md +++ b/packages/test-utils/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/test-utils +## 1.6.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/config@1.2.0 + - @backstage/core-app-api@1.15.1-next.0 + - @backstage/theme@0.5.7 + - @backstage/types@1.1.1 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-react@0.4.27-next.0 + ## 1.6.0 ### Minor Changes diff --git a/packages/test-utils/package.json b/packages/test-utils/package.json index 6ca282d9ec..b504419e76 100644 --- a/packages/test-utils/package.json +++ b/packages/test-utils/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/test-utils", - "version": "1.6.0", + "version": "1.6.1-next.0", "description": "Utilities to test Backstage plugins and apps.", "backstage": { "role": "web-library" diff --git a/plugins/api-docs/CHANGELOG.md b/plugins/api-docs/CHANGELOG.md index 4613c5b04b..4ad212412b 100644 --- a/plugins/api-docs/CHANGELOG.md +++ b/plugins/api-docs/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-api-docs +## 0.11.10-next.0 + +### Patch Changes + +- 46b5a20: Empty states updated with external link icon for learn more links +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/plugin-catalog@1.24.0-next.0 + - @backstage/core-compat-api@0.3.1-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-permission-react@0.4.27-next.0 + ## 0.11.9 ### Patch Changes diff --git a/plugins/api-docs/package.json b/plugins/api-docs/package.json index 2dbfd8c084..9adaf2319d 100644 --- a/plugins/api-docs/package.json +++ b/plugins/api-docs/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-api-docs", - "version": "0.11.9", + "version": "0.11.10-next.0", "description": "A Backstage plugin that helps represent API entities in the frontend", "backstage": { "role": "frontend-plugin", diff --git a/plugins/app-backend/CHANGELOG.md b/plugins/app-backend/CHANGELOG.md index ca9f7378bb..4323aed5af 100644 --- a/plugins/app-backend/CHANGELOG.md +++ b/plugins/app-backend/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-app-backend +## 0.3.75-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/config-loader@1.9.1 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-app-node@0.1.26-next.0 + ## 0.3.74 ### Patch Changes diff --git a/plugins/app-backend/package.json b/plugins/app-backend/package.json index 29803243cd..c7316a9815 100644 --- a/plugins/app-backend/package.json +++ b/plugins/app-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-app-backend", - "version": "0.3.74", + "version": "0.3.75-next.0", "description": "A Backstage backend plugin that serves the Backstage frontend app", "backstage": { "role": "backend-plugin", diff --git a/plugins/app-node/CHANGELOG.md b/plugins/app-node/CHANGELOG.md index fba5878502..c90ba12e47 100644 --- a/plugins/app-node/CHANGELOG.md +++ b/plugins/app-node/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-app-node +## 0.1.26-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config-loader@1.9.1 + ## 0.1.25 ### Patch Changes diff --git a/plugins/app-node/package.json b/plugins/app-node/package.json index 147fb21ba1..7c18c414d3 100644 --- a/plugins/app-node/package.json +++ b/plugins/app-node/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-app-node", - "version": "0.1.25", + "version": "0.1.26-next.0", "description": "Node.js library for the app plugin", "backstage": { "role": "node-library", diff --git a/plugins/app-visualizer/CHANGELOG.md b/plugins/app-visualizer/CHANGELOG.md index 507812098d..239452185e 100644 --- a/plugins/app-visualizer/CHANGELOG.md +++ b/plugins/app-visualizer/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-app-visualizer +## 0.1.11-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + ## 0.1.10 ### Patch Changes diff --git a/plugins/app-visualizer/package.json b/plugins/app-visualizer/package.json index cb373cde4f..b25b27d60c 100644 --- a/plugins/app-visualizer/package.json +++ b/plugins/app-visualizer/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-app-visualizer", - "version": "0.1.10", + "version": "0.1.11-next.0", "description": "Visualizes the Backstage app structure", "backstage": { "role": "frontend-plugin", diff --git a/plugins/app/CHANGELOG.md b/plugins/app/CHANGELOG.md index 2da55bbed8..9d9775af86 100644 --- a/plugins/app/CHANGELOG.md +++ b/plugins/app/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-app +## 0.1.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/theme@0.5.7 + - @backstage/plugin-permission-react@0.4.27-next.0 + ## 0.1.0 ### Minor Changes diff --git a/plugins/app/package.json b/plugins/app/package.json index 5609548942..39459854d0 100644 --- a/plugins/app/package.json +++ b/plugins/app/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-app", - "version": "0.1.0", + "version": "0.1.1-next.0", "backstage": { "role": "frontend-plugin", "pluginId": "app", diff --git a/plugins/auth-backend-module-atlassian-provider/CHANGELOG.md b/plugins/auth-backend-module-atlassian-provider/CHANGELOG.md index 56e401334e..b1230577b7 100644 --- a/plugins/auth-backend-module-atlassian-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-atlassian-provider/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-auth-backend-module-atlassian-provider +## 0.3.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + ## 0.3.0 ### Minor Changes diff --git a/plugins/auth-backend-module-atlassian-provider/package.json b/plugins/auth-backend-module-atlassian-provider/package.json index b5a78be89d..5adb3ab81d 100644 --- a/plugins/auth-backend-module-atlassian-provider/package.json +++ b/plugins/auth-backend-module-atlassian-provider/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend-module-atlassian-provider", - "version": "0.3.0", + "version": "0.3.1-next.0", "description": "The atlassian-provider backend module for the auth plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/auth-backend-module-auth0-provider/CHANGELOG.md b/plugins/auth-backend-module-auth0-provider/CHANGELOG.md index f4bf40485b..f1ea8d2dd9 100644 --- a/plugins/auth-backend-module-auth0-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-auth0-provider/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-auth-backend-module-auth0-provider +## 0.1.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + ## 0.1.0 ### Minor Changes diff --git a/plugins/auth-backend-module-auth0-provider/package.json b/plugins/auth-backend-module-auth0-provider/package.json index fec3fefa68..491337e021 100644 --- a/plugins/auth-backend-module-auth0-provider/package.json +++ b/plugins/auth-backend-module-auth0-provider/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend-module-auth0-provider", - "version": "0.1.0", + "version": "0.1.1-next.0", "description": "The auth0-provider backend module for the auth plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/auth-backend-module-aws-alb-provider/CHANGELOG.md b/plugins/auth-backend-module-aws-alb-provider/CHANGELOG.md index 520946d208..2a25a4df9e 100644 --- a/plugins/auth-backend-module-aws-alb-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-aws-alb-provider/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-auth-backend-module-aws-alb-provider +## 0.2.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-auth-backend@0.23.1-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/errors@1.2.4 + ## 0.2.0 ### Minor Changes diff --git a/plugins/auth-backend-module-aws-alb-provider/package.json b/plugins/auth-backend-module-aws-alb-provider/package.json index b65f1de631..c62da2e29e 100644 --- a/plugins/auth-backend-module-aws-alb-provider/package.json +++ b/plugins/auth-backend-module-aws-alb-provider/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend-module-aws-alb-provider", - "version": "0.2.0", + "version": "0.2.1-next.0", "description": "The aws-alb provider module for the Backstage auth backend.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/auth-backend-module-azure-easyauth-provider/CHANGELOG.md b/plugins/auth-backend-module-azure-easyauth-provider/CHANGELOG.md index 96fcc428c5..fcb9779e22 100644 --- a/plugins/auth-backend-module-azure-easyauth-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-azure-easyauth-provider/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-auth-backend-module-azure-easyauth-provider +## 0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/errors@1.2.4 + ## 0.2.0 ### Minor Changes diff --git a/plugins/auth-backend-module-azure-easyauth-provider/package.json b/plugins/auth-backend-module-azure-easyauth-provider/package.json index 860999bb0c..83245bfa68 100644 --- a/plugins/auth-backend-module-azure-easyauth-provider/package.json +++ b/plugins/auth-backend-module-azure-easyauth-provider/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend-module-azure-easyauth-provider", - "version": "0.2.0", + "version": "0.2.1-next.0", "description": "The azure-easyauth-provider backend module for the auth plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/auth-backend-module-bitbucket-provider/CHANGELOG.md b/plugins/auth-backend-module-bitbucket-provider/CHANGELOG.md index aadf524f47..521f5dfe93 100644 --- a/plugins/auth-backend-module-bitbucket-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-bitbucket-provider/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-auth-backend-module-bitbucket-provider +## 0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + ## 0.2.0 ### Minor Changes diff --git a/plugins/auth-backend-module-bitbucket-provider/package.json b/plugins/auth-backend-module-bitbucket-provider/package.json index f33c7e6819..42dcb65ed9 100644 --- a/plugins/auth-backend-module-bitbucket-provider/package.json +++ b/plugins/auth-backend-module-bitbucket-provider/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend-module-bitbucket-provider", - "version": "0.2.0", + "version": "0.2.1-next.0", "description": "The bitbucket-provider backend module for the auth plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/auth-backend-module-bitbucket-server-provider/CHANGELOG.md b/plugins/auth-backend-module-bitbucket-server-provider/CHANGELOG.md index c9c4f119ba..92daf8bb1c 100644 --- a/plugins/auth-backend-module-bitbucket-server-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-bitbucket-server-provider/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-auth-backend-module-bitbucket-server-provider +## 0.1.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + ## 0.1.0 ### Minor Changes diff --git a/plugins/auth-backend-module-bitbucket-server-provider/package.json b/plugins/auth-backend-module-bitbucket-server-provider/package.json index 8d58fab60c..d18a9b0111 100644 --- a/plugins/auth-backend-module-bitbucket-server-provider/package.json +++ b/plugins/auth-backend-module-bitbucket-server-provider/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend-module-bitbucket-server-provider", - "version": "0.1.0", + "version": "0.1.1-next.0", "description": "The bitbucket-server-provider backend module for the auth plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/auth-backend-module-cloudflare-access-provider/CHANGELOG.md b/plugins/auth-backend-module-cloudflare-access-provider/CHANGELOG.md index 3ee07c8aba..faea9b49c3 100644 --- a/plugins/auth-backend-module-cloudflare-access-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-cloudflare-access-provider/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-auth-backend-module-cloudflare-access-provider +## 0.3.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + ## 0.3.0 ### Minor Changes diff --git a/plugins/auth-backend-module-cloudflare-access-provider/package.json b/plugins/auth-backend-module-cloudflare-access-provider/package.json index b696103e43..7c82ff38f0 100644 --- a/plugins/auth-backend-module-cloudflare-access-provider/package.json +++ b/plugins/auth-backend-module-cloudflare-access-provider/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend-module-cloudflare-access-provider", - "version": "0.3.0", + "version": "0.3.1-next.0", "description": "The cloudflare-access-provider backend module for the auth plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/auth-backend-module-gcp-iap-provider/CHANGELOG.md b/plugins/auth-backend-module-gcp-iap-provider/CHANGELOG.md index b566f8ba6c..842c1b629c 100644 --- a/plugins/auth-backend-module-gcp-iap-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-gcp-iap-provider/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-auth-backend-module-gcp-iap-provider +## 0.3.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + ## 0.3.0 ### Minor Changes diff --git a/plugins/auth-backend-module-gcp-iap-provider/package.json b/plugins/auth-backend-module-gcp-iap-provider/package.json index d3db0f494f..988f012563 100644 --- a/plugins/auth-backend-module-gcp-iap-provider/package.json +++ b/plugins/auth-backend-module-gcp-iap-provider/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend-module-gcp-iap-provider", - "version": "0.3.0", + "version": "0.3.1-next.0", "description": "A GCP IAP auth provider module for the Backstage auth backend", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/auth-backend-module-github-provider/CHANGELOG.md b/plugins/auth-backend-module-github-provider/CHANGELOG.md index 8bf6992879..c2f108ecf3 100644 --- a/plugins/auth-backend-module-github-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-github-provider/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-auth-backend-module-github-provider +## 0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + ## 0.2.0 ### Minor Changes diff --git a/plugins/auth-backend-module-github-provider/package.json b/plugins/auth-backend-module-github-provider/package.json index 28a34d8618..8a70ee82b4 100644 --- a/plugins/auth-backend-module-github-provider/package.json +++ b/plugins/auth-backend-module-github-provider/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend-module-github-provider", - "version": "0.2.0", + "version": "0.2.1-next.0", "description": "The github-provider backend module for the auth plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/auth-backend-module-gitlab-provider/CHANGELOG.md b/plugins/auth-backend-module-gitlab-provider/CHANGELOG.md index 81b3c4903f..cfd0db044f 100644 --- a/plugins/auth-backend-module-gitlab-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-gitlab-provider/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-auth-backend-module-gitlab-provider +## 0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + ## 0.2.0 ### Minor Changes diff --git a/plugins/auth-backend-module-gitlab-provider/package.json b/plugins/auth-backend-module-gitlab-provider/package.json index dcb663b599..68146cbe05 100644 --- a/plugins/auth-backend-module-gitlab-provider/package.json +++ b/plugins/auth-backend-module-gitlab-provider/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend-module-gitlab-provider", - "version": "0.2.0", + "version": "0.2.1-next.0", "description": "The gitlab-provider backend module for the auth plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/auth-backend-module-google-provider/CHANGELOG.md b/plugins/auth-backend-module-google-provider/CHANGELOG.md index b633dbff58..4a20c3d9e4 100644 --- a/plugins/auth-backend-module-google-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-google-provider/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-auth-backend-module-google-provider +## 0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + ## 0.2.0 ### Minor Changes diff --git a/plugins/auth-backend-module-google-provider/package.json b/plugins/auth-backend-module-google-provider/package.json index 8a3c5c0b76..c0ee244873 100644 --- a/plugins/auth-backend-module-google-provider/package.json +++ b/plugins/auth-backend-module-google-provider/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend-module-google-provider", - "version": "0.2.0", + "version": "0.2.1-next.0", "description": "A Google auth provider module for the Backstage auth backend", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/auth-backend-module-guest-provider/CHANGELOG.md b/plugins/auth-backend-module-guest-provider/CHANGELOG.md index d3e948bfec..676f4b82ee 100644 --- a/plugins/auth-backend-module-guest-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-guest-provider/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-auth-backend-module-guest-provider +## 0.2.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/errors@1.2.4 + ## 0.2.0 ### Minor Changes diff --git a/plugins/auth-backend-module-guest-provider/package.json b/plugins/auth-backend-module-guest-provider/package.json index 58134742f8..a82feb2e0f 100644 --- a/plugins/auth-backend-module-guest-provider/package.json +++ b/plugins/auth-backend-module-guest-provider/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend-module-guest-provider", - "version": "0.2.0", + "version": "0.2.1-next.0", "description": "The guest-provider backend module for the auth plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/auth-backend-module-microsoft-provider/CHANGELOG.md b/plugins/auth-backend-module-microsoft-provider/CHANGELOG.md index 24e882705c..3b741f3258 100644 --- a/plugins/auth-backend-module-microsoft-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-microsoft-provider/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-auth-backend-module-microsoft-provider +## 0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + ## 0.2.0 ### Minor Changes diff --git a/plugins/auth-backend-module-microsoft-provider/package.json b/plugins/auth-backend-module-microsoft-provider/package.json index 6c70f2fc9d..5263b76340 100644 --- a/plugins/auth-backend-module-microsoft-provider/package.json +++ b/plugins/auth-backend-module-microsoft-provider/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend-module-microsoft-provider", - "version": "0.2.0", + "version": "0.2.1-next.0", "description": "The microsoft-provider backend module for the auth plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/auth-backend-module-oauth2-provider/CHANGELOG.md b/plugins/auth-backend-module-oauth2-provider/CHANGELOG.md index 8b7a8533f1..d5eb620fa7 100644 --- a/plugins/auth-backend-module-oauth2-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-oauth2-provider/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-auth-backend-module-oauth2-provider +## 0.3.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + ## 0.3.0 ### Minor Changes diff --git a/plugins/auth-backend-module-oauth2-provider/package.json b/plugins/auth-backend-module-oauth2-provider/package.json index 1855892f67..feb21cfe4e 100644 --- a/plugins/auth-backend-module-oauth2-provider/package.json +++ b/plugins/auth-backend-module-oauth2-provider/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend-module-oauth2-provider", - "version": "0.3.0", + "version": "0.3.1-next.0", "description": "The oauth2-provider backend module for the auth plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/auth-backend-module-oauth2-proxy-provider/CHANGELOG.md b/plugins/auth-backend-module-oauth2-proxy-provider/CHANGELOG.md index 7d26f71eb1..052a7a1797 100644 --- a/plugins/auth-backend-module-oauth2-proxy-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-oauth2-proxy-provider/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-auth-backend-module-oauth2-proxy-provider +## 0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/errors@1.2.4 + ## 0.2.0 ### Minor Changes diff --git a/plugins/auth-backend-module-oauth2-proxy-provider/package.json b/plugins/auth-backend-module-oauth2-proxy-provider/package.json index 18eabf5596..79c2a4a178 100644 --- a/plugins/auth-backend-module-oauth2-proxy-provider/package.json +++ b/plugins/auth-backend-module-oauth2-proxy-provider/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend-module-oauth2-proxy-provider", - "version": "0.2.0", + "version": "0.2.1-next.0", "description": "The oauth2-proxy-provider backend module for the auth plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/auth-backend-module-oidc-provider/CHANGELOG.md b/plugins/auth-backend-module-oidc-provider/CHANGELOG.md index b772e88218..7aba336457 100644 --- a/plugins/auth-backend-module-oidc-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-oidc-provider/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-auth-backend-module-oidc-provider +## 0.3.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-auth-backend@0.23.1-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + ## 0.3.0 ### Minor Changes diff --git a/plugins/auth-backend-module-oidc-provider/package.json b/plugins/auth-backend-module-oidc-provider/package.json index d4c6fc3530..12a6daf332 100644 --- a/plugins/auth-backend-module-oidc-provider/package.json +++ b/plugins/auth-backend-module-oidc-provider/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend-module-oidc-provider", - "version": "0.3.0", + "version": "0.3.1-next.0", "description": "The oidc-provider backend module for the auth plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/auth-backend-module-okta-provider/CHANGELOG.md b/plugins/auth-backend-module-okta-provider/CHANGELOG.md index 3148206c01..8931c4a2bf 100644 --- a/plugins/auth-backend-module-okta-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-okta-provider/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-auth-backend-module-okta-provider +## 0.1.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + ## 0.1.0 ### Minor Changes diff --git a/plugins/auth-backend-module-okta-provider/package.json b/plugins/auth-backend-module-okta-provider/package.json index 6ec9cfab6c..1b5b46ecc8 100644 --- a/plugins/auth-backend-module-okta-provider/package.json +++ b/plugins/auth-backend-module-okta-provider/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend-module-okta-provider", - "version": "0.1.0", + "version": "0.1.1-next.0", "description": "The okta-provider backend module for the auth plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/auth-backend-module-onelogin-provider/CHANGELOG.md b/plugins/auth-backend-module-onelogin-provider/CHANGELOG.md index 30be5a0a93..4d344c4d72 100644 --- a/plugins/auth-backend-module-onelogin-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-onelogin-provider/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-auth-backend-module-onelogin-provider +## 0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + ## 0.2.0 ### Minor Changes diff --git a/plugins/auth-backend-module-onelogin-provider/package.json b/plugins/auth-backend-module-onelogin-provider/package.json index 53140fb79d..4dae5a8805 100644 --- a/plugins/auth-backend-module-onelogin-provider/package.json +++ b/plugins/auth-backend-module-onelogin-provider/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend-module-onelogin-provider", - "version": "0.2.0", + "version": "0.2.1-next.0", "description": "The onelogin-provider backend module for the auth plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/auth-backend-module-pinniped-provider/CHANGELOG.md b/plugins/auth-backend-module-pinniped-provider/CHANGELOG.md index ea2dfe0abb..0707122785 100644 --- a/plugins/auth-backend-module-pinniped-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-pinniped-provider/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-auth-backend-module-pinniped-provider +## 0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + ## 0.2.0 ### Minor Changes diff --git a/plugins/auth-backend-module-pinniped-provider/package.json b/plugins/auth-backend-module-pinniped-provider/package.json index e7f33572a1..7ae787e202 100644 --- a/plugins/auth-backend-module-pinniped-provider/package.json +++ b/plugins/auth-backend-module-pinniped-provider/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend-module-pinniped-provider", - "version": "0.2.0", + "version": "0.2.1-next.0", "description": "The pinniped-provider backend module for the auth plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/auth-backend-module-vmware-cloud-provider/CHANGELOG.md b/plugins/auth-backend-module-vmware-cloud-provider/CHANGELOG.md index 701e0bc321..8d1bf64acb 100644 --- a/plugins/auth-backend-module-vmware-cloud-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-vmware-cloud-provider/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-auth-backend-module-vmware-cloud-provider +## 0.3.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + ## 0.3.0 ### Minor Changes diff --git a/plugins/auth-backend-module-vmware-cloud-provider/package.json b/plugins/auth-backend-module-vmware-cloud-provider/package.json index 5b5b86d126..c4dce89eb8 100644 --- a/plugins/auth-backend-module-vmware-cloud-provider/package.json +++ b/plugins/auth-backend-module-vmware-cloud-provider/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend-module-vmware-cloud-provider", - "version": "0.3.0", + "version": "0.3.1-next.0", "description": "The vmware-cloud-provider backend module for the auth plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/auth-backend/CHANGELOG.md b/plugins/auth-backend/CHANGELOG.md index a4b014b744..7b86e02de0 100644 --- a/plugins/auth-backend/CHANGELOG.md +++ b/plugins/auth-backend/CHANGELOG.md @@ -1,5 +1,37 @@ # @backstage/plugin-auth-backend +## 0.23.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-auth-backend-module-aws-alb-provider@0.2.1-next.0 + - @backstage/plugin-auth-backend-module-oidc-provider@0.3.1-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-auth-backend-module-atlassian-provider@0.3.1-next.0 + - @backstage/plugin-auth-backend-module-auth0-provider@0.1.1-next.0 + - @backstage/plugin-auth-backend-module-azure-easyauth-provider@0.2.1-next.0 + - @backstage/plugin-auth-backend-module-bitbucket-provider@0.2.1-next.0 + - @backstage/plugin-auth-backend-module-bitbucket-server-provider@0.1.1-next.0 + - @backstage/plugin-auth-backend-module-cloudflare-access-provider@0.3.1-next.0 + - @backstage/plugin-auth-backend-module-gcp-iap-provider@0.3.1-next.0 + - @backstage/plugin-auth-backend-module-github-provider@0.2.1-next.0 + - @backstage/plugin-auth-backend-module-gitlab-provider@0.2.1-next.0 + - @backstage/plugin-auth-backend-module-google-provider@0.2.1-next.0 + - @backstage/plugin-auth-backend-module-microsoft-provider@0.2.1-next.0 + - @backstage/plugin-auth-backend-module-oauth2-provider@0.3.1-next.0 + - @backstage/plugin-auth-backend-module-oauth2-proxy-provider@0.2.1-next.0 + - @backstage/plugin-auth-backend-module-okta-provider@0.1.1-next.0 + - @backstage/plugin-auth-backend-module-onelogin-provider@0.2.1-next.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + ## 0.23.0 ### Minor Changes diff --git a/plugins/auth-backend/package.json b/plugins/auth-backend/package.json index d725eb4816..3dcabee5eb 100644 --- a/plugins/auth-backend/package.json +++ b/plugins/auth-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend", - "version": "0.23.0", + "version": "0.23.1-next.0", "description": "A Backstage backend plugin that handles authentication", "backstage": { "role": "backend-plugin", diff --git a/plugins/auth-node/CHANGELOG.md b/plugins/auth-node/CHANGELOG.md index db1c60642a..bcede6f788 100644 --- a/plugins/auth-node/CHANGELOG.md +++ b/plugins/auth-node/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-auth-node +## 0.5.3-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + ## 0.5.2 ### Patch Changes diff --git a/plugins/auth-node/package.json b/plugins/auth-node/package.json index 3149536bf6..6925fc82b6 100644 --- a/plugins/auth-node/package.json +++ b/plugins/auth-node/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-node", - "version": "0.5.2", + "version": "0.5.3-next.0", "backstage": { "role": "node-library", "pluginId": "auth", diff --git a/plugins/auth-react/CHANGELOG.md b/plugins/auth-react/CHANGELOG.md index dd77e5b3af..f64b8fb26c 100644 --- a/plugins/auth-react/CHANGELOG.md +++ b/plugins/auth-react/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-auth-react +## 0.1.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/errors@1.2.4 + ## 0.1.6 ### Patch Changes diff --git a/plugins/auth-react/package.json b/plugins/auth-react/package.json index 8c4ec251de..0fc89df74c 100644 --- a/plugins/auth-react/package.json +++ b/plugins/auth-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-react", - "version": "0.1.6", + "version": "0.1.7-next.0", "description": "Web library for the auth plugin", "backstage": { "role": "web-library", diff --git a/plugins/catalog-backend-module-aws/CHANGELOG.md b/plugins/catalog-backend-module-aws/CHANGELOG.md index abaa55e7ab..6a6ca89a9c 100644 --- a/plugins/catalog-backend-module-aws/CHANGELOG.md +++ b/plugins/catalog-backend-module-aws/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-catalog-backend-module-aws +## 0.4.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.5.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + - @backstage/integration-aws-node@0.1.12 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + - @backstage/plugin-kubernetes-common@0.8.3 + ## 0.4.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-aws/package.json b/plugins/catalog-backend-module-aws/package.json index 28e61af808..79257f9acd 100644 --- a/plugins/catalog-backend-module-aws/package.json +++ b/plugins/catalog-backend-module-aws/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-aws", - "version": "0.4.2", + "version": "0.4.3-next.0", "description": "A Backstage catalog backend module that helps integrate towards AWS", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/catalog-backend-module-azure/CHANGELOG.md b/plugins/catalog-backend-module-azure/CHANGELOG.md index 6a3f52794b..215c06eab2 100644 --- a/plugins/catalog-backend-module-azure/CHANGELOG.md +++ b/plugins/catalog-backend-module-azure/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-catalog-backend-module-azure +## 0.2.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/integration@1.15.0 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + ## 0.2.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-azure/package.json b/plugins/catalog-backend-module-azure/package.json index b60f6fcff0..6a28c8ae81 100644 --- a/plugins/catalog-backend-module-azure/package.json +++ b/plugins/catalog-backend-module-azure/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-azure", - "version": "0.2.2", + "version": "0.2.3-next.0", "description": "A Backstage catalog backend module that helps integrate towards Azure", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/catalog-backend-module-backstage-openapi/CHANGELOG.md b/plugins/catalog-backend-module-backstage-openapi/CHANGELOG.md index caccf4b596..b2eb03c321 100644 --- a/plugins/catalog-backend-module-backstage-openapi/CHANGELOG.md +++ b/plugins/catalog-backend-module-backstage-openapi/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-catalog-backend-module-backstage-openapi +## 0.4.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-openapi-utils@0.1.19-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-catalog-node@1.13.1-next.0 + ## 0.4.0 ### Minor Changes diff --git a/plugins/catalog-backend-module-backstage-openapi/package.json b/plugins/catalog-backend-module-backstage-openapi/package.json index de6a137af1..e72a9eb9de 100644 --- a/plugins/catalog-backend-module-backstage-openapi/package.json +++ b/plugins/catalog-backend-module-backstage-openapi/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-backstage-openapi", - "version": "0.4.0", + "version": "0.4.1-next.0", "backstage": { "role": "backend-plugin-module", "pluginId": "catalog", diff --git a/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md b/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md index 04b208efa6..344fda6c2a 100644 --- a/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md +++ b/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-catalog-backend-module-bitbucket-cloud +## 0.3.3-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/integration@1.15.0 + - @backstage/plugin-bitbucket-cloud-common@0.2.23 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + ## 0.3.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-bitbucket-cloud/package.json b/plugins/catalog-backend-module-bitbucket-cloud/package.json index 76daa74ba9..9abd0703dc 100644 --- a/plugins/catalog-backend-module-bitbucket-cloud/package.json +++ b/plugins/catalog-backend-module-bitbucket-cloud/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-bitbucket-cloud", - "version": "0.3.2", + "version": "0.3.3-next.0", "description": "A Backstage catalog backend module that helps integrate towards Bitbucket Cloud", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md b/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md index a167c8c0de..dd4c51cf86 100644 --- a/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md +++ b/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-catalog-backend-module-bitbucket-server +## 0.2.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + ## 0.2.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-bitbucket-server/package.json b/plugins/catalog-backend-module-bitbucket-server/package.json index ab33b095f2..bf4d7954a7 100644 --- a/plugins/catalog-backend-module-bitbucket-server/package.json +++ b/plugins/catalog-backend-module-bitbucket-server/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-bitbucket-server", - "version": "0.2.2", + "version": "0.2.3-next.0", "backstage": { "role": "backend-plugin-module", "pluginId": "catalog", diff --git a/plugins/catalog-backend-module-gcp/CHANGELOG.md b/plugins/catalog-backend-module-gcp/CHANGELOG.md index 3e3c4621f8..0401ef7124 100644 --- a/plugins/catalog-backend-module-gcp/CHANGELOG.md +++ b/plugins/catalog-backend-module-gcp/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-catalog-backend-module-gcp +## 0.3.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + - @backstage/plugin-kubernetes-common@0.8.3 + ## 0.3.0 ### Minor Changes diff --git a/plugins/catalog-backend-module-gcp/package.json b/plugins/catalog-backend-module-gcp/package.json index 2805118f78..f8e7986831 100644 --- a/plugins/catalog-backend-module-gcp/package.json +++ b/plugins/catalog-backend-module-gcp/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-gcp", - "version": "0.3.0", + "version": "0.3.1-next.0", "description": "A Backstage catalog backend module that helps integrate towards GCP", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/catalog-backend-module-gerrit/CHANGELOG.md b/plugins/catalog-backend-module-gerrit/CHANGELOG.md index fa62124c19..dd3555a6ee 100644 --- a/plugins/catalog-backend-module-gerrit/CHANGELOG.md +++ b/plugins/catalog-backend-module-gerrit/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-catalog-backend-module-gerrit +## 0.2.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + ## 0.2.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-gerrit/package.json b/plugins/catalog-backend-module-gerrit/package.json index 0a18e4bded..723e7f9836 100644 --- a/plugins/catalog-backend-module-gerrit/package.json +++ b/plugins/catalog-backend-module-gerrit/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-gerrit", - "version": "0.2.2", + "version": "0.2.3-next.0", "backstage": { "role": "backend-plugin-module", "pluginId": "catalog", diff --git a/plugins/catalog-backend-module-github-org/CHANGELOG.md b/plugins/catalog-backend-module-github-org/CHANGELOG.md index ed3b42a1e7..c39c744677 100644 --- a/plugins/catalog-backend-module-github-org/CHANGELOG.md +++ b/plugins/catalog-backend-module-github-org/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-catalog-backend-module-github-org +## 0.3.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend-module-github@0.7.4-next.0 + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + ## 0.3.0 ### Minor Changes diff --git a/plugins/catalog-backend-module-github-org/package.json b/plugins/catalog-backend-module-github-org/package.json index 32625be7e5..6ee5584748 100644 --- a/plugins/catalog-backend-module-github-org/package.json +++ b/plugins/catalog-backend-module-github-org/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-github-org", - "version": "0.3.0", + "version": "0.3.1-next.0", "description": "The github-org backend module for the catalog plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/catalog-backend-module-github/CHANGELOG.md b/plugins/catalog-backend-module-github/CHANGELOG.md index d7ea344fcf..b2c7d359a6 100644 --- a/plugins/catalog-backend-module-github/CHANGELOG.md +++ b/plugins/catalog-backend-module-github/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-catalog-backend-module-github +## 0.7.4-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-catalog-backend@1.26.1-next.0 + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/integration@1.15.0 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + ## 0.7.3 ### Patch Changes diff --git a/plugins/catalog-backend-module-github/package.json b/plugins/catalog-backend-module-github/package.json index cdd91ee0ef..876deb2db8 100644 --- a/plugins/catalog-backend-module-github/package.json +++ b/plugins/catalog-backend-module-github/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-github", - "version": "0.7.3", + "version": "0.7.4-next.0", "description": "A Backstage catalog backend module that helps integrate towards GitHub", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/catalog-backend-module-gitlab-org/CHANGELOG.md b/plugins/catalog-backend-module-gitlab-org/CHANGELOG.md index 1b2575bfa1..873043659b 100644 --- a/plugins/catalog-backend-module-gitlab-org/CHANGELOG.md +++ b/plugins/catalog-backend-module-gitlab-org/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-catalog-backend-module-gitlab-org +## 0.2.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/plugin-catalog-backend-module-gitlab@0.4.3-next.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + ## 0.2.0 ### Minor Changes diff --git a/plugins/catalog-backend-module-gitlab-org/package.json b/plugins/catalog-backend-module-gitlab-org/package.json index fcf680e2a2..ac03c3f267 100644 --- a/plugins/catalog-backend-module-gitlab-org/package.json +++ b/plugins/catalog-backend-module-gitlab-org/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-gitlab-org", - "version": "0.2.0", + "version": "0.2.1-next.0", "description": "The gitlab-org backend module for the catalog plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/catalog-backend-module-gitlab/CHANGELOG.md b/plugins/catalog-backend-module-gitlab/CHANGELOG.md index 3aa3f73ae3..97d8126847 100644 --- a/plugins/catalog-backend-module-gitlab/CHANGELOG.md +++ b/plugins/catalog-backend-module-gitlab/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-catalog-backend-module-gitlab +## 0.4.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.5.1-next.0 + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/integration@1.15.0 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + ## 0.4.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-gitlab/package.json b/plugins/catalog-backend-module-gitlab/package.json index 0e2763b5cd..ddad638848 100644 --- a/plugins/catalog-backend-module-gitlab/package.json +++ b/plugins/catalog-backend-module-gitlab/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-gitlab", - "version": "0.4.2", + "version": "0.4.3-next.0", "description": "A Backstage catalog backend module that helps integrate towards GitLab", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md b/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md index a4e3c12c23..755ec20fa2 100644 --- a/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md +++ b/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-catalog-backend-module-incremental-ingestion +## 0.5.4-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-catalog-backend@1.26.1-next.0 + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-catalog-node@1.13.1-next.0 + - @backstage/plugin-permission-common@0.8.1 + ## 0.5.3 ### Patch Changes diff --git a/plugins/catalog-backend-module-incremental-ingestion/package.json b/plugins/catalog-backend-module-incremental-ingestion/package.json index e10ec5479e..971f76cfef 100644 --- a/plugins/catalog-backend-module-incremental-ingestion/package.json +++ b/plugins/catalog-backend-module-incremental-ingestion/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-incremental-ingestion", - "version": "0.5.3", + "version": "0.5.4-next.0", "description": "An entity provider for streaming large asset sources into the catalog", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/catalog-backend-module-ldap/CHANGELOG.md b/plugins/catalog-backend-module-ldap/CHANGELOG.md index 9bc6f0cd94..7b7c97d4e9 100644 --- a/plugins/catalog-backend-module-ldap/CHANGELOG.md +++ b/plugins/catalog-backend-module-ldap/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-catalog-backend-module-ldap +## 0.9.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + ## 0.9.0 ### Minor Changes diff --git a/plugins/catalog-backend-module-ldap/package.json b/plugins/catalog-backend-module-ldap/package.json index 8b5c8d0136..c8487244ba 100644 --- a/plugins/catalog-backend-module-ldap/package.json +++ b/plugins/catalog-backend-module-ldap/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-ldap", - "version": "0.9.0", + "version": "0.9.1-next.0", "description": "A Backstage catalog backend module that helps integrate towards LDAP", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/catalog-backend-module-logs/CHANGELOG.md b/plugins/catalog-backend-module-logs/CHANGELOG.md index d069d1b029..e546bea60f 100644 --- a/plugins/catalog-backend-module-logs/CHANGELOG.md +++ b/plugins/catalog-backend-module-logs/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-catalog-backend-module-logs +## 0.1.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.26.1-next.0 + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + ## 0.1.0 ### Minor Changes diff --git a/plugins/catalog-backend-module-logs/package.json b/plugins/catalog-backend-module-logs/package.json index 7bec54a38b..af90a57ad6 100644 --- a/plugins/catalog-backend-module-logs/package.json +++ b/plugins/catalog-backend-module-logs/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-logs", - "version": "0.1.0", + "version": "0.1.1-next.0", "description": "A module that subscribes to catalog releated events and logs them.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/catalog-backend-module-msgraph/CHANGELOG.md b/plugins/catalog-backend-module-msgraph/CHANGELOG.md index 78a6366d5b..dc1fc0b714 100644 --- a/plugins/catalog-backend-module-msgraph/CHANGELOG.md +++ b/plugins/catalog-backend-module-msgraph/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-catalog-backend-module-msgraph +## 0.6.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + ## 0.6.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-msgraph/package.json b/plugins/catalog-backend-module-msgraph/package.json index 33442969a4..7d0c96874d 100644 --- a/plugins/catalog-backend-module-msgraph/package.json +++ b/plugins/catalog-backend-module-msgraph/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-msgraph", - "version": "0.6.2", + "version": "0.6.3-next.0", "description": "A Backstage catalog backend module that helps integrate towards Microsoft Graph", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/catalog-backend-module-openapi/CHANGELOG.md b/plugins/catalog-backend-module-openapi/CHANGELOG.md index 7004736f0d..42e9d911ad 100644 --- a/plugins/catalog-backend-module-openapi/CHANGELOG.md +++ b/plugins/catalog-backend-module-openapi/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-catalog-backend-module-openapi +## 0.2.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-catalog-backend@1.26.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/integration@1.15.0 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + ## 0.2.0 ### Minor Changes diff --git a/plugins/catalog-backend-module-openapi/package.json b/plugins/catalog-backend-module-openapi/package.json index 79079ef637..132496ad60 100644 --- a/plugins/catalog-backend-module-openapi/package.json +++ b/plugins/catalog-backend-module-openapi/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-openapi", - "version": "0.2.0", + "version": "0.2.1-next.0", "description": "A Backstage catalog backend module that helps with OpenAPI specifications", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/catalog-backend-module-puppetdb/CHANGELOG.md b/plugins/catalog-backend-module-puppetdb/CHANGELOG.md index 3b0c5f6747..eb133b2b2c 100644 --- a/plugins/catalog-backend-module-puppetdb/CHANGELOG.md +++ b/plugins/catalog-backend-module-puppetdb/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-catalog-backend-module-puppetdb +## 0.2.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-node@1.13.1-next.0 + ## 0.2.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-puppetdb/package.json b/plugins/catalog-backend-module-puppetdb/package.json index f3fe141d81..e900e2a98a 100644 --- a/plugins/catalog-backend-module-puppetdb/package.json +++ b/plugins/catalog-backend-module-puppetdb/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-puppetdb", - "version": "0.2.2", + "version": "0.2.3-next.0", "description": "A Backstage catalog backend module that helps integrate towards PuppetDB", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/catalog-backend-module-scaffolder-entity-model/CHANGELOG.md b/plugins/catalog-backend-module-scaffolder-entity-model/CHANGELOG.md index 96c5fe1ba3..5072903466 100644 --- a/plugins/catalog-backend-module-scaffolder-entity-model/CHANGELOG.md +++ b/plugins/catalog-backend-module-scaffolder-entity-model/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-catalog-backend-module-scaffolder-entity-model +## 0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + - @backstage/plugin-scaffolder-common@1.5.6 + ## 0.2.0 ### Minor Changes diff --git a/plugins/catalog-backend-module-scaffolder-entity-model/package.json b/plugins/catalog-backend-module-scaffolder-entity-model/package.json index d3166b7d7e..d1474909ab 100644 --- a/plugins/catalog-backend-module-scaffolder-entity-model/package.json +++ b/plugins/catalog-backend-module-scaffolder-entity-model/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-scaffolder-entity-model", - "version": "0.2.0", + "version": "0.2.1-next.0", "description": "Adds support for the scaffolder specific entity model (e.g. the Template kind) to the catalog backend plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/catalog-backend-module-unprocessed/CHANGELOG.md b/plugins/catalog-backend-module-unprocessed/CHANGELOG.md index f0d3b702d7..4f4b6220b8 100644 --- a/plugins/catalog-backend-module-unprocessed/CHANGELOG.md +++ b/plugins/catalog-backend-module-unprocessed/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-catalog-backend-module-unprocessed +## 0.5.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-catalog-node@1.13.1-next.0 + - @backstage/plugin-catalog-unprocessed-entities-common@0.0.4 + - @backstage/plugin-permission-common@0.8.1 + ## 0.5.0 ### Minor Changes diff --git a/plugins/catalog-backend-module-unprocessed/package.json b/plugins/catalog-backend-module-unprocessed/package.json index 4ebe703500..16364bcba6 100644 --- a/plugins/catalog-backend-module-unprocessed/package.json +++ b/plugins/catalog-backend-module-unprocessed/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-unprocessed", - "version": "0.5.0", + "version": "0.5.1-next.0", "description": "Backstage Catalog module to view unprocessed entities", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/catalog-backend/CHANGELOG.md b/plugins/catalog-backend/CHANGELOG.md index f8d2a3186d..050b972d07 100644 --- a/plugins/catalog-backend/CHANGELOG.md +++ b/plugins/catalog-backend/CHANGELOG.md @@ -1,5 +1,26 @@ # @backstage/plugin-catalog-backend +## 1.26.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-search-backend-module-catalog@0.2.3-next.0 + - @backstage/plugin-permission-node@0.8.4-next.0 + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/backend-openapi-utils@0.1.19-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + - @backstage/plugin-permission-common@0.8.1 + ## 1.26.0 ### Minor Changes diff --git a/plugins/catalog-backend/package.json b/plugins/catalog-backend/package.json index c46cd1c2cc..1a18bfdebc 100644 --- a/plugins/catalog-backend/package.json +++ b/plugins/catalog-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend", - "version": "1.26.0", + "version": "1.26.1-next.0", "description": "The Backstage backend plugin that provides the Backstage catalog", "backstage": { "role": "backend-plugin", diff --git a/plugins/catalog-graph/CHANGELOG.md b/plugins/catalog-graph/CHANGELOG.md index db1008893c..893e899b5f 100644 --- a/plugins/catalog-graph/CHANGELOG.md +++ b/plugins/catalog-graph/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-catalog-graph +## 0.4.10-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-compat-api@0.3.1-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/types@1.1.1 + ## 0.4.9 ### Patch Changes diff --git a/plugins/catalog-graph/package.json b/plugins/catalog-graph/package.json index 1ad32fd55d..d9c0198853 100644 --- a/plugins/catalog-graph/package.json +++ b/plugins/catalog-graph/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-graph", - "version": "0.4.9", + "version": "0.4.10-next.0", "backstage": { "role": "frontend-plugin", "pluginId": "catalog-graph", diff --git a/plugins/catalog-import/CHANGELOG.md b/plugins/catalog-import/CHANGELOG.md index 3b735c622a..94779c3090 100644 --- a/plugins/catalog-import/CHANGELOG.md +++ b/plugins/catalog-import/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-catalog-import +## 0.12.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-compat-api@0.3.1-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + - @backstage/integration-react@1.1.32-next.0 + - @backstage/plugin-catalog-common@1.1.0 + ## 0.12.3 ### Patch Changes diff --git a/plugins/catalog-import/package.json b/plugins/catalog-import/package.json index 8dbf810bb3..aeddafc06f 100644 --- a/plugins/catalog-import/package.json +++ b/plugins/catalog-import/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-import", - "version": "0.12.3", + "version": "0.12.4-next.0", "description": "A Backstage plugin the helps you import entities into your catalog", "backstage": { "role": "frontend-plugin", diff --git a/plugins/catalog-node/CHANGELOG.md b/plugins/catalog-node/CHANGELOG.md index 48e160abf2..6adb452cbd 100644 --- a/plugins/catalog-node/CHANGELOG.md +++ b/plugins/catalog-node/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-catalog-node +## 1.13.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-node@0.8.4-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-permission-common@0.8.1 + ## 1.13.0 ### Minor Changes diff --git a/plugins/catalog-node/package.json b/plugins/catalog-node/package.json index b9138a1f12..3c7052b78b 100644 --- a/plugins/catalog-node/package.json +++ b/plugins/catalog-node/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-node", - "version": "1.13.0", + "version": "1.13.1-next.0", "description": "The plugin-catalog-node module for @backstage/plugin-catalog-backend", "backstage": { "role": "node-library", diff --git a/plugins/catalog-react/CHANGELOG.md b/plugins/catalog-react/CHANGELOG.md index 22e64d61cd..0a8a508060 100644 --- a/plugins/catalog-react/CHANGELOG.md +++ b/plugins/catalog-react/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/plugin-catalog-react +## 1.13.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-compat-api@0.3.1-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/errors@1.2.4 + - @backstage/integration-react@1.1.32-next.0 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.9 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-react@0.4.27-next.0 + ## 1.13.0 ### Minor Changes diff --git a/plugins/catalog-react/package.json b/plugins/catalog-react/package.json index 5520486d74..974a6e1817 100644 --- a/plugins/catalog-react/package.json +++ b/plugins/catalog-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-react", - "version": "1.13.0", + "version": "1.13.1-next.0", "description": "A frontend library that helps other Backstage plugins interact with the catalog", "backstage": { "role": "web-library", diff --git a/plugins/catalog-unprocessed-entities/CHANGELOG.md b/plugins/catalog-unprocessed-entities/CHANGELOG.md index 90a68b4a80..b55177a209 100644 --- a/plugins/catalog-unprocessed-entities/CHANGELOG.md +++ b/plugins/catalog-unprocessed-entities/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-catalog-unprocessed-entities +## 0.2.9-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/errors@1.2.4 + ## 0.2.8 ### Patch Changes diff --git a/plugins/catalog-unprocessed-entities/package.json b/plugins/catalog-unprocessed-entities/package.json index 9dc5e6e51e..038cee37fc 100644 --- a/plugins/catalog-unprocessed-entities/package.json +++ b/plugins/catalog-unprocessed-entities/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-unprocessed-entities", - "version": "0.2.8", + "version": "0.2.9-next.0", "backstage": { "role": "frontend-plugin", "pluginId": "catalog-unprocessed-entities", diff --git a/plugins/catalog/CHANGELOG.md b/plugins/catalog/CHANGELOG.md index 9396a70cfa..8279dc3879 100644 --- a/plugins/catalog/CHANGELOG.md +++ b/plugins/catalog/CHANGELOG.md @@ -1,5 +1,31 @@ # @backstage/plugin-catalog +## 1.24.0-next.0 + +### Minor Changes + +- 71f9f0c: Updated default columns for location entities to remove description and tags from the catalog table view. + +### Patch Changes + +- 46b5a20: Empty states updated with external link icon for learn more links +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-compat-api@0.3.1-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/plugin-search-react@1.8.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/errors@1.2.4 + - @backstage/integration-react@1.1.32-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-permission-react@0.4.27-next.0 + - @backstage/plugin-scaffolder-common@1.5.6 + - @backstage/plugin-search-common@1.2.14 + ## 1.23.0 ### Minor Changes diff --git a/plugins/catalog/package.json b/plugins/catalog/package.json index 98c8c4aeb2..e6cfb9ca47 100644 --- a/plugins/catalog/package.json +++ b/plugins/catalog/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog", - "version": "1.23.0", + "version": "1.24.0-next.0", "description": "The Backstage plugin for browsing the Backstage catalog", "backstage": { "role": "frontend-plugin", diff --git a/plugins/config-schema/CHANGELOG.md b/plugins/config-schema/CHANGELOG.md index 31878e26b6..a201962de3 100644 --- a/plugins/config-schema/CHANGELOG.md +++ b/plugins/config-schema/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-config-schema +## 0.1.60-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + ## 0.1.59 ### Patch Changes diff --git a/plugins/config-schema/package.json b/plugins/config-schema/package.json index 66dfa77417..5739b187b7 100644 --- a/plugins/config-schema/package.json +++ b/plugins/config-schema/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-config-schema", - "version": "0.1.59", + "version": "0.1.60-next.0", "description": "A Backstage plugin that lets you browse the configuration schema of your app", "backstage": { "role": "frontend-plugin", diff --git a/plugins/devtools-backend/CHANGELOG.md b/plugins/devtools-backend/CHANGELOG.md index 37b3ccff1b..e007e1102b 100644 --- a/plugins/devtools-backend/CHANGELOG.md +++ b/plugins/devtools-backend/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-devtools-backend +## 0.4.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-permission-node@0.8.4-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/cli-common@0.1.14 + - @backstage/config@1.2.0 + - @backstage/config-loader@1.9.1 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-devtools-common@0.1.12 + - @backstage/plugin-permission-common@0.8.1 + ## 0.4.0 ### Minor Changes diff --git a/plugins/devtools-backend/package.json b/plugins/devtools-backend/package.json index 4b7044d2d8..83a42fb4d5 100644 --- a/plugins/devtools-backend/package.json +++ b/plugins/devtools-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-devtools-backend", - "version": "0.4.0", + "version": "0.4.1-next.0", "backstage": { "role": "backend-plugin", "pluginId": "devtools", diff --git a/plugins/devtools/CHANGELOG.md b/plugins/devtools/CHANGELOG.md index 0c7198065c..85011bebbb 100644 --- a/plugins/devtools/CHANGELOG.md +++ b/plugins/devtools/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-devtools +## 0.1.19-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-compat-api@0.3.1-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-devtools-common@0.1.12 + - @backstage/plugin-permission-react@0.4.27-next.0 + ## 0.1.18 ### Patch Changes diff --git a/plugins/devtools/package.json b/plugins/devtools/package.json index 781faebd66..3bcb6d5c64 100644 --- a/plugins/devtools/package.json +++ b/plugins/devtools/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-devtools", - "version": "0.1.18", + "version": "0.1.19-next.0", "backstage": { "role": "frontend-plugin", "pluginId": "devtools", diff --git a/plugins/events-backend-module-aws-sqs/CHANGELOG.md b/plugins/events-backend-module-aws-sqs/CHANGELOG.md index 4ed917a974..176df94002 100644 --- a/plugins/events-backend-module-aws-sqs/CHANGELOG.md +++ b/plugins/events-backend-module-aws-sqs/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-events-backend-module-aws-sqs +## 0.4.3-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/types@1.1.1 + ## 0.4.2 ### Patch Changes diff --git a/plugins/events-backend-module-aws-sqs/package.json b/plugins/events-backend-module-aws-sqs/package.json index 8c90791520..b131be935b 100644 --- a/plugins/events-backend-module-aws-sqs/package.json +++ b/plugins/events-backend-module-aws-sqs/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-aws-sqs", - "version": "0.4.2", + "version": "0.4.3-next.0", "backstage": { "role": "backend-plugin-module", "pluginId": "events", diff --git a/plugins/events-backend-module-azure/CHANGELOG.md b/plugins/events-backend-module-azure/CHANGELOG.md index 1dad6248f6..336a8a6d94 100644 --- a/plugins/events-backend-module-azure/CHANGELOG.md +++ b/plugins/events-backend-module-azure/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-events-backend-module-azure +## 0.2.12-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + ## 0.2.11 ### Patch Changes diff --git a/plugins/events-backend-module-azure/package.json b/plugins/events-backend-module-azure/package.json index aa77766734..51ac31dc08 100644 --- a/plugins/events-backend-module-azure/package.json +++ b/plugins/events-backend-module-azure/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-azure", - "version": "0.2.11", + "version": "0.2.12-next.0", "backstage": { "role": "backend-plugin-module", "pluginId": "events", diff --git a/plugins/events-backend-module-bitbucket-cloud/CHANGELOG.md b/plugins/events-backend-module-bitbucket-cloud/CHANGELOG.md index f7743ab341..362e7ebd90 100644 --- a/plugins/events-backend-module-bitbucket-cloud/CHANGELOG.md +++ b/plugins/events-backend-module-bitbucket-cloud/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-events-backend-module-bitbucket-cloud +## 0.2.12-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + ## 0.2.11 ### Patch Changes diff --git a/plugins/events-backend-module-bitbucket-cloud/package.json b/plugins/events-backend-module-bitbucket-cloud/package.json index 321ce6b4e5..08ceeeff33 100644 --- a/plugins/events-backend-module-bitbucket-cloud/package.json +++ b/plugins/events-backend-module-bitbucket-cloud/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-bitbucket-cloud", - "version": "0.2.11", + "version": "0.2.12-next.0", "backstage": { "role": "backend-plugin-module", "pluginId": "events", diff --git a/plugins/events-backend-module-gerrit/CHANGELOG.md b/plugins/events-backend-module-gerrit/CHANGELOG.md index 144ed1d525..7bcc732795 100644 --- a/plugins/events-backend-module-gerrit/CHANGELOG.md +++ b/plugins/events-backend-module-gerrit/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-events-backend-module-gerrit +## 0.2.12-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + ## 0.2.11 ### Patch Changes diff --git a/plugins/events-backend-module-gerrit/package.json b/plugins/events-backend-module-gerrit/package.json index 7024f58546..8052734395 100644 --- a/plugins/events-backend-module-gerrit/package.json +++ b/plugins/events-backend-module-gerrit/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-gerrit", - "version": "0.2.11", + "version": "0.2.12-next.0", "backstage": { "role": "backend-plugin-module", "pluginId": "events", diff --git a/plugins/events-backend-module-github/CHANGELOG.md b/plugins/events-backend-module-github/CHANGELOG.md index cd683927d6..f80dbcc120 100644 --- a/plugins/events-backend-module-github/CHANGELOG.md +++ b/plugins/events-backend-module-github/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-events-backend-module-github +## 0.2.12-next.0 + +### Patch Changes + +- 2f88f88: Updated backend installation instructions. +- Updated dependencies + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + ## 0.2.11 ### Patch Changes diff --git a/plugins/events-backend-module-github/package.json b/plugins/events-backend-module-github/package.json index 534af9fa58..89eb9b2439 100644 --- a/plugins/events-backend-module-github/package.json +++ b/plugins/events-backend-module-github/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-github", - "version": "0.2.11", + "version": "0.2.12-next.0", "backstage": { "role": "backend-plugin-module", "pluginId": "events", diff --git a/plugins/events-backend-module-gitlab/CHANGELOG.md b/plugins/events-backend-module-gitlab/CHANGELOG.md index 84893760b1..8388606685 100644 --- a/plugins/events-backend-module-gitlab/CHANGELOG.md +++ b/plugins/events-backend-module-gitlab/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-events-backend-module-gitlab +## 0.2.12-next.0 + +### Patch Changes + +- 2f88f88: Updated backend installation instructions. +- Updated dependencies + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + ## 0.2.11 ### Patch Changes diff --git a/plugins/events-backend-module-gitlab/package.json b/plugins/events-backend-module-gitlab/package.json index 12f2a8045d..42bb8e5f44 100644 --- a/plugins/events-backend-module-gitlab/package.json +++ b/plugins/events-backend-module-gitlab/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-gitlab", - "version": "0.2.11", + "version": "0.2.12-next.0", "backstage": { "role": "backend-plugin-module", "pluginId": "events", diff --git a/plugins/events-backend-test-utils/CHANGELOG.md b/plugins/events-backend-test-utils/CHANGELOG.md index 19cbf132b4..c5bc0b1fd8 100644 --- a/plugins/events-backend-test-utils/CHANGELOG.md +++ b/plugins/events-backend-test-utils/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-events-backend-test-utils +## 0.1.36-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.1-next.0 + ## 0.1.35 ### Patch Changes diff --git a/plugins/events-backend-test-utils/package.json b/plugins/events-backend-test-utils/package.json index e5f068d3da..2cd57ed302 100644 --- a/plugins/events-backend-test-utils/package.json +++ b/plugins/events-backend-test-utils/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-test-utils", - "version": "0.1.35", + "version": "0.1.36-next.0", "description": "The plugin-events-backend-test-utils for @backstage/plugin-events-node", "backstage": { "role": "node-library", diff --git a/plugins/events-backend/CHANGELOG.md b/plugins/events-backend/CHANGELOG.md index 041bf852f0..645cd6af10 100644 --- a/plugins/events-backend/CHANGELOG.md +++ b/plugins/events-backend/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/plugin-events-backend +## 0.3.13-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- 5c728ee: The events backend now has its own built-in event bus for distributing events across multiple backend instances. It exposes a new HTTP API under `/bus/v1/` for publishing and reading events from the bus, as well as its own storage and notification mechanism for events. + + The backing event store for the bus only supports scaled deployment if PostgreSQL is used as the DBMS. If SQLite or MySQL is used, the event bus will fall back to an in-memory store that does not support multiple backend instances. + + The default `EventsService` implementation from `@backstage/plugin-events-node` has also been updated to use the new events bus. + +- Updated dependencies + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/backend-openapi-utils@0.1.19-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + ## 0.3.12 ### Patch Changes diff --git a/plugins/events-backend/package.json b/plugins/events-backend/package.json index 06addb0546..0f035e3539 100644 --- a/plugins/events-backend/package.json +++ b/plugins/events-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend", - "version": "0.3.12", + "version": "0.3.13-next.0", "backstage": { "role": "backend-plugin", "pluginId": "events", diff --git a/plugins/events-node/CHANGELOG.md b/plugins/events-node/CHANGELOG.md index 87ad15d23f..2485fbb71d 100644 --- a/plugins/events-node/CHANGELOG.md +++ b/plugins/events-node/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-events-node +## 0.4.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- 2f88f88: Updated backend installation instructions. +- a90ce4a: The default implementation of the `EventsService` now uses the new event bus for distributing events across multiple backend instances if the events backend plugin is installed. +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + ## 0.4.0 ### Minor Changes diff --git a/plugins/events-node/package.json b/plugins/events-node/package.json index 2ac1a6922b..d02945d633 100644 --- a/plugins/events-node/package.json +++ b/plugins/events-node/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-node", - "version": "0.4.0", + "version": "0.4.1-next.0", "description": "The plugin-events-node module for @backstage/plugin-events-backend", "backstage": { "role": "node-library", diff --git a/plugins/example-todo-list-backend/CHANGELOG.md b/plugins/example-todo-list-backend/CHANGELOG.md index bfd56d043c..defe793b6d 100644 --- a/plugins/example-todo-list-backend/CHANGELOG.md +++ b/plugins/example-todo-list-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @internal/plugin-todo-list-backend +## 1.0.32-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/errors@1.2.4 + ## 1.0.31 ### Patch Changes diff --git a/plugins/example-todo-list-backend/package.json b/plugins/example-todo-list-backend/package.json index 189bb4b192..4bd2ffff09 100644 --- a/plugins/example-todo-list-backend/package.json +++ b/plugins/example-todo-list-backend/package.json @@ -1,6 +1,6 @@ { "name": "@internal/plugin-todo-list-backend", - "version": "1.0.31", + "version": "1.0.32-next.0", "backstage": { "role": "backend-plugin", "pluginId": "todo-list", diff --git a/plugins/example-todo-list/CHANGELOG.md b/plugins/example-todo-list/CHANGELOG.md index ed60f8fbe2..401fb64dc3 100644 --- a/plugins/example-todo-list/CHANGELOG.md +++ b/plugins/example-todo-list/CHANGELOG.md @@ -1,5 +1,13 @@ # @internal/plugin-todo-list +## 1.0.32-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + ## 1.0.31 ### Patch Changes diff --git a/plugins/example-todo-list/package.json b/plugins/example-todo-list/package.json index c336d7073a..bcf4ee435e 100644 --- a/plugins/example-todo-list/package.json +++ b/plugins/example-todo-list/package.json @@ -1,6 +1,6 @@ { "name": "@internal/plugin-todo-list", - "version": "1.0.31", + "version": "1.0.32-next.0", "backstage": { "role": "frontend-plugin", "pluginId": "todo-list", diff --git a/plugins/home-react/CHANGELOG.md b/plugins/home-react/CHANGELOG.md index c12b9dff80..0599b80264 100644 --- a/plugins/home-react/CHANGELOG.md +++ b/plugins/home-react/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-home-react +## 0.1.18-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + ## 0.1.17 ### Patch Changes diff --git a/plugins/home-react/package.json b/plugins/home-react/package.json index f60cf9a728..db5a59467c 100644 --- a/plugins/home-react/package.json +++ b/plugins/home-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-home-react", - "version": "0.1.17", + "version": "0.1.18-next.0", "description": "A Backstage plugin that contains react components helps you build a home page", "backstage": { "role": "web-library", diff --git a/plugins/home/CHANGELOG.md b/plugins/home/CHANGELOG.md index 64fcb5f789..f53548001d 100644 --- a/plugins/home/CHANGELOG.md +++ b/plugins/home/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-home +## 0.7.11-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-compat-api@0.3.1-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/core-app-api@1.15.1-next.0 + - @backstage/theme@0.5.7 + - @backstage/plugin-home-react@0.1.18-next.0 + ## 0.7.10 ### Patch Changes diff --git a/plugins/home/package.json b/plugins/home/package.json index 668abf68a8..e135e53892 100644 --- a/plugins/home/package.json +++ b/plugins/home/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-home", - "version": "0.7.10", + "version": "0.7.11-next.0", "description": "A Backstage plugin that helps you build a home page", "backstage": { "role": "frontend-plugin", diff --git a/plugins/kubernetes-backend/CHANGELOG.md b/plugins/kubernetes-backend/CHANGELOG.md index f4c911debc..cdf9c02a99 100644 --- a/plugins/kubernetes-backend/CHANGELOG.md +++ b/plugins/kubernetes-backend/CHANGELOG.md @@ -1,5 +1,25 @@ # @backstage/plugin-kubernetes-backend +## 0.18.7-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-kubernetes-node@0.1.20-next.0 + - @backstage/plugin-permission-node@0.8.4-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration-aws-node@0.1.12 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-node@1.13.1-next.0 + - @backstage/plugin-kubernetes-common@0.8.3 + - @backstage/plugin-permission-common@0.8.1 + ## 0.18.6 ### Patch Changes diff --git a/plugins/kubernetes-backend/package.json b/plugins/kubernetes-backend/package.json index 68abc77498..98eb59a4f8 100644 --- a/plugins/kubernetes-backend/package.json +++ b/plugins/kubernetes-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-kubernetes-backend", - "version": "0.18.6", + "version": "0.18.7-next.0", "description": "A Backstage backend plugin that integrates towards Kubernetes", "backstage": { "role": "backend-plugin", diff --git a/plugins/kubernetes-cluster/CHANGELOG.md b/plugins/kubernetes-cluster/CHANGELOG.md index 5ee963e040..61ca156c8d 100644 --- a/plugins/kubernetes-cluster/CHANGELOG.md +++ b/plugins/kubernetes-cluster/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-kubernetes-cluster +## 0.0.16-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/plugin-kubernetes-common@0.8.3 + - @backstage/plugin-kubernetes-react@0.4.4-next.0 + ## 0.0.15 ### Patch Changes diff --git a/plugins/kubernetes-cluster/package.json b/plugins/kubernetes-cluster/package.json index 654036ea82..9134d428af 100644 --- a/plugins/kubernetes-cluster/package.json +++ b/plugins/kubernetes-cluster/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-kubernetes-cluster", - "version": "0.0.15", + "version": "0.0.16-next.0", "description": "A Backstage plugin that shows details of Kubernetes clusters", "backstage": { "role": "frontend-plugin", diff --git a/plugins/kubernetes-node/CHANGELOG.md b/plugins/kubernetes-node/CHANGELOG.md index 0b3cdc8a98..f6c7d44738 100644 --- a/plugins/kubernetes-node/CHANGELOG.md +++ b/plugins/kubernetes-node/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-kubernetes-node +## 0.1.20-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/types@1.1.1 + - @backstage/plugin-kubernetes-common@0.8.3 + ## 0.1.19 ### Patch Changes diff --git a/plugins/kubernetes-node/package.json b/plugins/kubernetes-node/package.json index 01413cf777..57e26a57f0 100644 --- a/plugins/kubernetes-node/package.json +++ b/plugins/kubernetes-node/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-kubernetes-node", - "version": "0.1.19", + "version": "0.1.20-next.0", "description": "Node.js library for the kubernetes plugin", "backstage": { "role": "node-library", diff --git a/plugins/kubernetes-react/CHANGELOG.md b/plugins/kubernetes-react/CHANGELOG.md index 58652a9e4b..bd812ce393 100644 --- a/plugins/kubernetes-react/CHANGELOG.md +++ b/plugins/kubernetes-react/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-kubernetes-react +## 0.4.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-kubernetes-common@0.8.3 + ## 0.4.3 ### Patch Changes diff --git a/plugins/kubernetes-react/package.json b/plugins/kubernetes-react/package.json index eac51e8bdc..68ccce1b88 100644 --- a/plugins/kubernetes-react/package.json +++ b/plugins/kubernetes-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-kubernetes-react", - "version": "0.4.3", + "version": "0.4.4-next.0", "description": "Web library for the kubernetes-react plugin", "backstage": { "role": "web-library", diff --git a/plugins/kubernetes/CHANGELOG.md b/plugins/kubernetes/CHANGELOG.md index 87d9e99904..3d19fd1cb4 100644 --- a/plugins/kubernetes/CHANGELOG.md +++ b/plugins/kubernetes/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-kubernetes +## 0.11.15-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-compat-api@0.3.1-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/plugin-kubernetes-common@0.8.3 + - @backstage/plugin-kubernetes-react@0.4.4-next.0 + ## 0.11.14 ### Patch Changes diff --git a/plugins/kubernetes/package.json b/plugins/kubernetes/package.json index ddcd090bb4..775a8dd82e 100644 --- a/plugins/kubernetes/package.json +++ b/plugins/kubernetes/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-kubernetes", - "version": "0.11.14", + "version": "0.11.15-next.0", "description": "A Backstage plugin that integrates towards Kubernetes", "backstage": { "role": "frontend-plugin", diff --git a/plugins/notifications-backend-module-email/CHANGELOG.md b/plugins/notifications-backend-module-email/CHANGELOG.md index ca0b80f39f..74d452e9d6 100644 --- a/plugins/notifications-backend-module-email/CHANGELOG.md +++ b/plugins/notifications-backend-module-email/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-notifications-backend-module-email +## 0.3.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-notifications-node@0.2.7-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/integration-aws-node@0.1.12 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-node@1.13.1-next.0 + - @backstage/plugin-notifications-common@0.0.5 + ## 0.3.0 ### Minor Changes diff --git a/plugins/notifications-backend-module-email/package.json b/plugins/notifications-backend-module-email/package.json index 6e80dc5e0b..af4160ea52 100644 --- a/plugins/notifications-backend-module-email/package.json +++ b/plugins/notifications-backend-module-email/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-notifications-backend-module-email", - "version": "0.3.0", + "version": "0.3.1-next.0", "description": "The email backend module for the notifications plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/notifications-backend/CHANGELOG.md b/plugins/notifications-backend/CHANGELOG.md index fd814cad01..84b0bc716f 100644 --- a/plugins/notifications-backend/CHANGELOG.md +++ b/plugins/notifications-backend/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-notifications-backend +## 0.4.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-notifications-node@0.2.7-next.0 + - @backstage/plugin-signals-node@0.1.12-next.0 + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-catalog-node@1.13.1-next.0 + - @backstage/plugin-notifications-common@0.0.5 + ## 0.4.0 ### Minor Changes diff --git a/plugins/notifications-backend/package.json b/plugins/notifications-backend/package.json index 434cc01ae6..9c441f237b 100644 --- a/plugins/notifications-backend/package.json +++ b/plugins/notifications-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-notifications-backend", - "version": "0.4.0", + "version": "0.4.1-next.0", "backstage": { "role": "backend-plugin", "pluginId": "notifications", diff --git a/plugins/notifications-node/CHANGELOG.md b/plugins/notifications-node/CHANGELOG.md index a0b75a977e..da05f50026 100644 --- a/plugins/notifications-node/CHANGELOG.md +++ b/plugins/notifications-node/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-notifications-node +## 0.2.7-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-signals-node@0.1.12-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/plugin-notifications-common@0.0.5 + ## 0.2.6 ### Patch Changes diff --git a/plugins/notifications-node/package.json b/plugins/notifications-node/package.json index bc762515bf..3c221654bb 100644 --- a/plugins/notifications-node/package.json +++ b/plugins/notifications-node/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-notifications-node", - "version": "0.2.6", + "version": "0.2.7-next.0", "description": "Node.js library for the notifications plugin", "backstage": { "role": "node-library", diff --git a/plugins/notifications/CHANGELOG.md b/plugins/notifications/CHANGELOG.md index d353b7a51f..5c70937ec8 100644 --- a/plugins/notifications/CHANGELOG.md +++ b/plugins/notifications/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-notifications +## 0.3.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/errors@1.2.4 + - @backstage/theme@0.5.7 + - @backstage/types@1.1.1 + - @backstage/plugin-notifications-common@0.0.5 + - @backstage/plugin-signals-react@0.0.6-next.0 + ## 0.3.1 ### Patch Changes diff --git a/plugins/notifications/package.json b/plugins/notifications/package.json index 7026275e97..4307e48756 100644 --- a/plugins/notifications/package.json +++ b/plugins/notifications/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-notifications", - "version": "0.3.1", + "version": "0.3.2-next.0", "backstage": { "role": "frontend-plugin", "pluginId": "notifications", diff --git a/plugins/org-react/CHANGELOG.md b/plugins/org-react/CHANGELOG.md index 9f5b468c92..7e718f77b1 100644 --- a/plugins/org-react/CHANGELOG.md +++ b/plugins/org-react/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-org-react +## 0.1.29-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + ## 0.1.28 ### Patch Changes diff --git a/plugins/org-react/package.json b/plugins/org-react/package.json index 3c62dc95b1..f6d700cce3 100644 --- a/plugins/org-react/package.json +++ b/plugins/org-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-org-react", - "version": "0.1.28", + "version": "0.1.29-next.0", "backstage": { "role": "web-library", "pluginId": "org", diff --git a/plugins/org/CHANGELOG.md b/plugins/org/CHANGELOG.md index e89cf71442..cfb24ea351 100644 --- a/plugins/org/CHANGELOG.md +++ b/plugins/org/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-org +## 0.6.30-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-compat-api@0.3.1-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/plugin-catalog-common@1.1.0 + ## 0.6.29 ### Patch Changes diff --git a/plugins/org/package.json b/plugins/org/package.json index 953680a6cc..e35d4bdfa2 100644 --- a/plugins/org/package.json +++ b/plugins/org/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-org", - "version": "0.6.29", + "version": "0.6.30-next.0", "description": "A Backstage plugin that helps you create entity pages for your organization", "backstage": { "role": "frontend-plugin", diff --git a/plugins/permission-backend-module-policy-allow-all/CHANGELOG.md b/plugins/permission-backend-module-policy-allow-all/CHANGELOG.md index 8eeb7a3928..c34d0f0345 100644 --- a/plugins/permission-backend-module-policy-allow-all/CHANGELOG.md +++ b/plugins/permission-backend-module-policy-allow-all/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-permission-backend-module-allow-all-policy +## 0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-node@0.8.4-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/plugin-permission-common@0.8.1 + ## 0.2.0 ### Minor Changes diff --git a/plugins/permission-backend-module-policy-allow-all/package.json b/plugins/permission-backend-module-policy-allow-all/package.json index 064fdd250c..0d09c2d027 100644 --- a/plugins/permission-backend-module-policy-allow-all/package.json +++ b/plugins/permission-backend-module-policy-allow-all/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-permission-backend-module-allow-all-policy", - "version": "0.2.0", + "version": "0.2.1-next.0", "description": "Allow all policy backend module for the permission plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/permission-backend/CHANGELOG.md b/plugins/permission-backend/CHANGELOG.md index 06ccf6fba1..db03bb0bc4 100644 --- a/plugins/permission-backend/CHANGELOG.md +++ b/plugins/permission-backend/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-permission-backend +## 0.5.50-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-permission-node@0.8.4-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-permission-common@0.8.1 + ## 0.5.49 ### Patch Changes diff --git a/plugins/permission-backend/package.json b/plugins/permission-backend/package.json index 2fb7fa06e9..02afa36abf 100644 --- a/plugins/permission-backend/package.json +++ b/plugins/permission-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-permission-backend", - "version": "0.5.49", + "version": "0.5.50-next.0", "backstage": { "role": "backend-plugin", "pluginId": "permission", diff --git a/plugins/permission-node/CHANGELOG.md b/plugins/permission-node/CHANGELOG.md index 12327470b4..a1daff9267 100644 --- a/plugins/permission-node/CHANGELOG.md +++ b/plugins/permission-node/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-permission-node +## 0.8.4-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-permission-common@0.8.1 + ## 0.8.3 ### Patch Changes diff --git a/plugins/permission-node/package.json b/plugins/permission-node/package.json index 74a1ca062e..b38647f983 100644 --- a/plugins/permission-node/package.json +++ b/plugins/permission-node/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-permission-node", - "version": "0.8.3", + "version": "0.8.4-next.0", "description": "Common permission and authorization utilities for backend plugins", "backstage": { "role": "node-library", diff --git a/plugins/permission-react/CHANGELOG.md b/plugins/permission-react/CHANGELOG.md index 2f07d389b0..19d993863b 100644 --- a/plugins/permission-react/CHANGELOG.md +++ b/plugins/permission-react/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-permission-react +## 0.4.27-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/config@1.2.0 + - @backstage/plugin-permission-common@0.8.1 + ## 0.4.26 ### Patch Changes diff --git a/plugins/permission-react/package.json b/plugins/permission-react/package.json index 4891de2d7b..fc60a9fc1f 100644 --- a/plugins/permission-react/package.json +++ b/plugins/permission-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-permission-react", - "version": "0.4.26", + "version": "0.4.27-next.0", "backstage": { "role": "web-library", "pluginId": "permission", diff --git a/plugins/proxy-backend/CHANGELOG.md b/plugins/proxy-backend/CHANGELOG.md index 181ef77367..e5cafdaecf 100644 --- a/plugins/proxy-backend/CHANGELOG.md +++ b/plugins/proxy-backend/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-proxy-backend +## 0.5.7-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/types@1.1.1 + ## 0.5.6 ### Patch Changes diff --git a/plugins/proxy-backend/package.json b/plugins/proxy-backend/package.json index 7dc5701ba6..f8838dec87 100644 --- a/plugins/proxy-backend/package.json +++ b/plugins/proxy-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-proxy-backend", - "version": "0.5.6", + "version": "0.5.7-next.0", "description": "A Backstage backend plugin that helps you set up proxy endpoints in the backend", "backstage": { "role": "backend-plugin", diff --git a/plugins/scaffolder-backend-module-azure/CHANGELOG.md b/plugins/scaffolder-backend-module-azure/CHANGELOG.md index 076dc42d93..e52f6fa57b 100644 --- a/plugins/scaffolder-backend-module-azure/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-azure/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-scaffolder-backend-module-azure +## 0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + ## 0.2.0 ### Minor Changes diff --git a/plugins/scaffolder-backend-module-azure/package.json b/plugins/scaffolder-backend-module-azure/package.json index fba65e02ff..4490a28fe9 100644 --- a/plugins/scaffolder-backend-module-azure/package.json +++ b/plugins/scaffolder-backend-module-azure/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-azure", - "version": "0.2.0", + "version": "0.2.1-next.0", "description": "The azure module for @backstage/plugin-scaffolder-backend", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/scaffolder-backend-module-bitbucket-cloud/CHANGELOG.md b/plugins/scaffolder-backend-module-bitbucket-cloud/CHANGELOG.md index 88dab87778..dc19b0d486 100644 --- a/plugins/scaffolder-backend-module-bitbucket-cloud/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-bitbucket-cloud/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-scaffolder-backend-module-bitbucket-cloud +## 0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + - @backstage/plugin-bitbucket-cloud-common@0.2.23 + ## 0.2.0 ### Minor Changes diff --git a/plugins/scaffolder-backend-module-bitbucket-cloud/package.json b/plugins/scaffolder-backend-module-bitbucket-cloud/package.json index e120a17eb5..a75dedfdac 100644 --- a/plugins/scaffolder-backend-module-bitbucket-cloud/package.json +++ b/plugins/scaffolder-backend-module-bitbucket-cloud/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-bitbucket-cloud", - "version": "0.2.0", + "version": "0.2.1-next.0", "description": "The Bitbucket Cloud module for @backstage/plugin-scaffolder-backend", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/scaffolder-backend-module-bitbucket-server/CHANGELOG.md b/plugins/scaffolder-backend-module-bitbucket-server/CHANGELOG.md index 4a75e537b7..7c5811f46f 100644 --- a/plugins/scaffolder-backend-module-bitbucket-server/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-bitbucket-server/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-scaffolder-backend-module-bitbucket-server +## 0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + ## 0.2.0 ### Minor Changes diff --git a/plugins/scaffolder-backend-module-bitbucket-server/package.json b/plugins/scaffolder-backend-module-bitbucket-server/package.json index 496d4b1838..0773caee07 100644 --- a/plugins/scaffolder-backend-module-bitbucket-server/package.json +++ b/plugins/scaffolder-backend-module-bitbucket-server/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-bitbucket-server", - "version": "0.2.0", + "version": "0.2.1-next.0", "description": "The Bitbucket Server module for @backstage/plugin-scaffolder-backend", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/scaffolder-backend-module-bitbucket/CHANGELOG.md b/plugins/scaffolder-backend-module-bitbucket/CHANGELOG.md index df89ac8c99..6aa69d3d2f 100644 --- a/plugins/scaffolder-backend-module-bitbucket/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-bitbucket/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-scaffolder-backend-module-bitbucket +## 0.3.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.1-next.0 + - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.1-next.0 + ## 0.3.0 ### Minor Changes diff --git a/plugins/scaffolder-backend-module-bitbucket/package.json b/plugins/scaffolder-backend-module-bitbucket/package.json index ad74d77800..a901ca6b43 100644 --- a/plugins/scaffolder-backend-module-bitbucket/package.json +++ b/plugins/scaffolder-backend-module-bitbucket/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-bitbucket", - "version": "0.3.0", + "version": "0.3.1-next.0", "description": "The bitbucket module for @backstage/plugin-scaffolder-backend", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/scaffolder-backend-module-confluence-to-markdown/CHANGELOG.md b/plugins/scaffolder-backend-module-confluence-to-markdown/CHANGELOG.md index bc7bab5571..5a13196f53 100644 --- a/plugins/scaffolder-backend-module-confluence-to-markdown/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-confluence-to-markdown/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-scaffolder-backend-module-confluence-to-markdown +## 0.3.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + ## 0.3.0 ### Minor Changes diff --git a/plugins/scaffolder-backend-module-confluence-to-markdown/package.json b/plugins/scaffolder-backend-module-confluence-to-markdown/package.json index 4c537ab275..17a4b22d70 100644 --- a/plugins/scaffolder-backend-module-confluence-to-markdown/package.json +++ b/plugins/scaffolder-backend-module-confluence-to-markdown/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-confluence-to-markdown", - "version": "0.3.0", + "version": "0.3.1-next.0", "description": "The confluence-to-markdown module for @backstage/plugin-scaffolder-backend", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md b/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md index 917898b85f..d17094098b 100644 --- a/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-scaffolder-backend-module-cookiecutter +## 0.3.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/backend-defaults@0.5.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + - @backstage/types@1.1.1 + ## 0.3.0 ### Minor Changes diff --git a/plugins/scaffolder-backend-module-cookiecutter/package.json b/plugins/scaffolder-backend-module-cookiecutter/package.json index 848f9b29dc..d29f2c5816 100644 --- a/plugins/scaffolder-backend-module-cookiecutter/package.json +++ b/plugins/scaffolder-backend-module-cookiecutter/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-cookiecutter", - "version": "0.3.0", + "version": "0.3.1-next.0", "description": "A module for the scaffolder backend that lets you template projects using cookiecutter", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/scaffolder-backend-module-gcp/CHANGELOG.md b/plugins/scaffolder-backend-module-gcp/CHANGELOG.md index b8a1f12e37..eb55df680c 100644 --- a/plugins/scaffolder-backend-module-gcp/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-gcp/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-scaffolder-backend-module-gcp +## 0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + ## 0.2.0 ### Minor Changes diff --git a/plugins/scaffolder-backend-module-gcp/package.json b/plugins/scaffolder-backend-module-gcp/package.json index 6c444c5f6f..fa14277842 100644 --- a/plugins/scaffolder-backend-module-gcp/package.json +++ b/plugins/scaffolder-backend-module-gcp/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-gcp", - "version": "0.2.0", + "version": "0.2.1-next.0", "description": "The GCP Bucket module for @backstage/plugin-scaffolder-backend", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/scaffolder-backend-module-gerrit/CHANGELOG.md b/plugins/scaffolder-backend-module-gerrit/CHANGELOG.md index 95efcd0a97..ec7c952034 100644 --- a/plugins/scaffolder-backend-module-gerrit/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-gerrit/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-scaffolder-backend-module-gerrit +## 0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + ## 0.2.0 ### Minor Changes diff --git a/plugins/scaffolder-backend-module-gerrit/package.json b/plugins/scaffolder-backend-module-gerrit/package.json index 3416c9bde4..d11693405c 100644 --- a/plugins/scaffolder-backend-module-gerrit/package.json +++ b/plugins/scaffolder-backend-module-gerrit/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-gerrit", - "version": "0.2.0", + "version": "0.2.1-next.0", "description": "The gerrit module for @backstage/plugin-scaffolder-backend", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/scaffolder-backend-module-gitea/CHANGELOG.md b/plugins/scaffolder-backend-module-gitea/CHANGELOG.md index ed7401c42e..c6bfad9a7d 100644 --- a/plugins/scaffolder-backend-module-gitea/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-gitea/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-scaffolder-backend-module-gitea +## 0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + ## 0.2.0 ### Minor Changes diff --git a/plugins/scaffolder-backend-module-gitea/package.json b/plugins/scaffolder-backend-module-gitea/package.json index 45839957f0..f9592cea31 100644 --- a/plugins/scaffolder-backend-module-gitea/package.json +++ b/plugins/scaffolder-backend-module-gitea/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-gitea", - "version": "0.2.0", + "version": "0.2.1-next.0", "description": "The gitea module for @backstage/plugin-scaffolder-backend", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/scaffolder-backend-module-github/CHANGELOG.md b/plugins/scaffolder-backend-module-github/CHANGELOG.md index 0baf331688..e2c84aa901 100644 --- a/plugins/scaffolder-backend-module-github/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-github/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-scaffolder-backend-module-github +## 0.5.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + ## 0.5.0 ### Minor Changes diff --git a/plugins/scaffolder-backend-module-github/package.json b/plugins/scaffolder-backend-module-github/package.json index 52eb430f2d..1fd5adc05e 100644 --- a/plugins/scaffolder-backend-module-github/package.json +++ b/plugins/scaffolder-backend-module-github/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-github", - "version": "0.5.0", + "version": "0.5.1-next.0", "description": "The github module for @backstage/plugin-scaffolder-backend", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/scaffolder-backend-module-gitlab/CHANGELOG.md b/plugins/scaffolder-backend-module-gitlab/CHANGELOG.md index 8d81728911..c806280e50 100644 --- a/plugins/scaffolder-backend-module-gitlab/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-gitlab/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-scaffolder-backend-module-gitlab +## 0.5.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- f2f68cf: Updated `gitlab:group:ensureExists` action to instead use oauth client. +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + ## 0.5.0 ### Minor Changes diff --git a/plugins/scaffolder-backend-module-gitlab/package.json b/plugins/scaffolder-backend-module-gitlab/package.json index e5f1364675..6c904c9c22 100644 --- a/plugins/scaffolder-backend-module-gitlab/package.json +++ b/plugins/scaffolder-backend-module-gitlab/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-gitlab", - "version": "0.5.0", + "version": "0.5.1-next.0", "backstage": { "role": "backend-plugin-module", "pluginId": "scaffolder", diff --git a/plugins/scaffolder-backend-module-notifications/CHANGELOG.md b/plugins/scaffolder-backend-module-notifications/CHANGELOG.md index 511daca72d..321e730e00 100644 --- a/plugins/scaffolder-backend-module-notifications/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-notifications/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-scaffolder-backend-module-notifications +## 0.1.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/plugin-notifications-node@0.2.7-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/plugin-notifications-common@0.0.5 + ## 0.1.0 ### Minor Changes diff --git a/plugins/scaffolder-backend-module-notifications/package.json b/plugins/scaffolder-backend-module-notifications/package.json index 3adcff6701..fcc270c08d 100644 --- a/plugins/scaffolder-backend-module-notifications/package.json +++ b/plugins/scaffolder-backend-module-notifications/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-notifications", - "version": "0.1.0", + "version": "0.1.1-next.0", "description": "The notifications backend module for the scaffolder plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/scaffolder-backend-module-rails/CHANGELOG.md b/plugins/scaffolder-backend-module-rails/CHANGELOG.md index 39bdcd9fcd..5cb11291bc 100644 --- a/plugins/scaffolder-backend-module-rails/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-rails/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-scaffolder-backend-module-rails +## 0.5.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + - @backstage/types@1.1.1 + ## 0.5.0 ### Minor Changes diff --git a/plugins/scaffolder-backend-module-rails/package.json b/plugins/scaffolder-backend-module-rails/package.json index 65879c4407..972214ddaf 100644 --- a/plugins/scaffolder-backend-module-rails/package.json +++ b/plugins/scaffolder-backend-module-rails/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-rails", - "version": "0.5.0", + "version": "0.5.1-next.0", "description": "A module for the scaffolder backend that lets you template projects using Rails", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/scaffolder-backend-module-sentry/CHANGELOG.md b/plugins/scaffolder-backend-module-sentry/CHANGELOG.md index 0cc13a7dae..67b8e75c31 100644 --- a/plugins/scaffolder-backend-module-sentry/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-sentry/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-scaffolder-backend-module-sentry +## 0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + ## 0.2.0 ### Minor Changes diff --git a/plugins/scaffolder-backend-module-sentry/package.json b/plugins/scaffolder-backend-module-sentry/package.json index efbe35b51a..85c01039ea 100644 --- a/plugins/scaffolder-backend-module-sentry/package.json +++ b/plugins/scaffolder-backend-module-sentry/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-sentry", - "version": "0.2.0", + "version": "0.2.1-next.0", "backstage": { "role": "backend-plugin-module", "pluginId": "scaffolder", diff --git a/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md b/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md index 29b75e4bb9..59fe0c8ea2 100644 --- a/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-scaffolder-backend-module-yeoman +## 0.4.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/plugin-scaffolder-node-test-utils@0.1.13-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/types@1.1.1 + ## 0.4.0 ### Minor Changes diff --git a/plugins/scaffolder-backend-module-yeoman/package.json b/plugins/scaffolder-backend-module-yeoman/package.json index 254a472243..2b9a787dee 100644 --- a/plugins/scaffolder-backend-module-yeoman/package.json +++ b/plugins/scaffolder-backend-module-yeoman/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-yeoman", - "version": "0.4.0", + "version": "0.4.1-next.0", "backstage": { "role": "backend-plugin-module", "pluginId": "scaffolder", diff --git a/plugins/scaffolder-backend/CHANGELOG.md b/plugins/scaffolder-backend/CHANGELOG.md index d75bdaa0f7..ddf1bb1a8e 100644 --- a/plugins/scaffolder-backend/CHANGELOG.md +++ b/plugins/scaffolder-backend/CHANGELOG.md @@ -1,5 +1,55 @@ # @backstage/plugin-scaffolder-backend +## 1.26.0-next.0 + +### Minor Changes + +- 3ec4e6d: Added pagination support for listing of tasks and the ability to filter on several users and task statuses. + +### Patch Changes + +- 734c2d4: Add `fetch:template:file` scaffolder action to download a single file and template the contents. Example usage: + + ```yaml + - id: fetch-file + name: Fetch File + action: fetch:template:file + input: + url: https://github.com/backstage/software-templates/blob/main/scaffolder-templates/create-react-app/skeleton/catalog-info.yaml + targetPath: './target/catalog-info.yaml' + values: + component_id: My Component + owner: Test + ``` + +- 094eaa3: Remove references to in-repo backend-common +- 11e0752: Make it possible to manually retry the scaffolder template from the step it failed +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/plugin-scaffolder-backend-module-github@0.5.1-next.0 + - @backstage/plugin-scaffolder-backend-module-gitlab@0.5.1-next.0 + - @backstage/backend-defaults@0.5.1-next.0 + - @backstage/plugin-permission-node@0.8.4-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + - @backstage/types@1.1.1 + - @backstage/plugin-bitbucket-cloud-common@0.2.23 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.1-next.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-scaffolder-backend-module-azure@0.2.1-next.0 + - @backstage/plugin-scaffolder-backend-module-bitbucket@0.3.1-next.0 + - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.1-next.0 + - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.1-next.0 + - @backstage/plugin-scaffolder-backend-module-gerrit@0.2.1-next.0 + - @backstage/plugin-scaffolder-backend-module-gitea@0.2.1-next.0 + - @backstage/plugin-scaffolder-common@1.5.6 + ## 1.25.0 ### Minor Changes diff --git a/plugins/scaffolder-backend/package.json b/plugins/scaffolder-backend/package.json index 61e08340d9..cc748e4e5b 100644 --- a/plugins/scaffolder-backend/package.json +++ b/plugins/scaffolder-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend", - "version": "1.25.0", + "version": "1.26.0-next.0", "description": "The Backstage backend plugin that helps you create new things", "backstage": { "role": "backend-plugin", diff --git a/plugins/scaffolder-node-test-utils/CHANGELOG.md b/plugins/scaffolder-node-test-utils/CHANGELOG.md index 749cc17741..18d10de230 100644 --- a/plugins/scaffolder-node-test-utils/CHANGELOG.md +++ b/plugins/scaffolder-node-test-utils/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-scaffolder-node-test-utils +## 0.1.13-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.5.0-next.0 + - @backstage/backend-test-utils@1.0.1-next.0 + - @backstage/types@1.1.1 + ## 0.1.12 ### Patch Changes diff --git a/plugins/scaffolder-node-test-utils/package.json b/plugins/scaffolder-node-test-utils/package.json index 5339803ea4..0fc95260a7 100644 --- a/plugins/scaffolder-node-test-utils/package.json +++ b/plugins/scaffolder-node-test-utils/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-node-test-utils", - "version": "0.1.12", + "version": "0.1.13-next.0", "backstage": { "role": "node-library", "pluginId": "scaffolder", diff --git a/plugins/scaffolder-node/CHANGELOG.md b/plugins/scaffolder-node/CHANGELOG.md index bee15083dd..7a2ef1ab8e 100644 --- a/plugins/scaffolder-node/CHANGELOG.md +++ b/plugins/scaffolder-node/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-scaffolder-node +## 0.5.0-next.0 + +### Minor Changes + +- 3ec4e6d: Added pagination support for listing of tasks and the ability to filter on several users and task statuses. + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- 11e0752: Make it possible to manually retry the scaffolder template from the step it failed +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + - @backstage/types@1.1.1 + - @backstage/plugin-scaffolder-common@1.5.6 + ## 0.4.11 ### Patch Changes diff --git a/plugins/scaffolder-node/package.json b/plugins/scaffolder-node/package.json index 164da18a7a..590d178beb 100644 --- a/plugins/scaffolder-node/package.json +++ b/plugins/scaffolder-node/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-node", - "version": "0.4.11", + "version": "0.5.0-next.0", "description": "The plugin-scaffolder-node module for @backstage/plugin-scaffolder-backend", "backstage": { "role": "node-library", diff --git a/plugins/scaffolder-react/CHANGELOG.md b/plugins/scaffolder-react/CHANGELOG.md index dc10389984..a18a9ae471 100644 --- a/plugins/scaffolder-react/CHANGELOG.md +++ b/plugins/scaffolder-react/CHANGELOG.md @@ -1,5 +1,27 @@ # @backstage/plugin-scaffolder-react +## 1.13.0-next.0 + +### Minor Changes + +- bf6eaf3: Added support for `FormFieldBlueprint` to create field extensions in the Scaffolder plugin + +### Patch Changes + +- 11e0752: Make it possible to manually retry the scaffolder template from the step it failed +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/theme@0.5.7 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.9 + - @backstage/plugin-permission-react@0.4.27-next.0 + - @backstage/plugin-scaffolder-common@1.5.6 + ## 1.12.0 ### Minor Changes diff --git a/plugins/scaffolder-react/package.json b/plugins/scaffolder-react/package.json index 5da8acead2..99dd7cf949 100644 --- a/plugins/scaffolder-react/package.json +++ b/plugins/scaffolder-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-react", - "version": "1.12.0", + "version": "1.13.0-next.0", "description": "A frontend library that helps other Backstage plugins interact with the Scaffolder", "backstage": { "role": "web-library", diff --git a/plugins/scaffolder/CHANGELOG.md b/plugins/scaffolder/CHANGELOG.md index e9ae626c3e..2ba6b7e94a 100644 --- a/plugins/scaffolder/CHANGELOG.md +++ b/plugins/scaffolder/CHANGELOG.md @@ -1,5 +1,39 @@ # @backstage/plugin-scaffolder +## 1.26.0-next.0 + +### Minor Changes + +- bf6eaf3: Added support for `FormFieldBlueprint` to create field extensions in the Scaffolder plugin +- cc3f80c: Added ability to create a new local scaffolder template to ease onboarding when creating new templates. +- 5492eb6: Added ability to link to a specific action on the actions page + +### Patch Changes + +- b2b2aa8: Fix extra divider displayed in owner list picker on list tasks page +- 7f1f483: Create a separate route for the Scaffolder template editor and add the ability to refresh the page without closing the directory. Also, when the directory is closed, the user will stay on the editor page and can load a template folder from there. +- 7a3d622: Create a separate route for the template form editor so we refresh it without being redirected to scaffolder edit page. +- 4698646: Change task list created at column to show timestamp +- 4130291: Create a separate route for the custom fields explorer so we refresh it without being redirected to scaffolder edit page. +- 11e0752: Make it possible to manually retry the scaffolder template from the step it failed +- 09fcd95: Update the Scaffolder template editor to quickly access installed custom fields and actions when editing a template. +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/plugin-scaffolder-react@1.13.0-next.0 + - @backstage/core-compat-api@0.3.1-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + - @backstage/integration-react@1.1.32-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-permission-react@0.4.27-next.0 + - @backstage/plugin-scaffolder-common@1.5.6 + ## 1.25.0 ### Minor Changes diff --git a/plugins/scaffolder/package.json b/plugins/scaffolder/package.json index 86fa96ede2..f73082cd22 100644 --- a/plugins/scaffolder/package.json +++ b/plugins/scaffolder/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder", - "version": "1.25.0", + "version": "1.26.0-next.0", "description": "The Backstage plugin that helps you create new things", "backstage": { "role": "frontend-plugin", diff --git a/plugins/search-backend-module-catalog/CHANGELOG.md b/plugins/search-backend-module-catalog/CHANGELOG.md index 032b62c413..d00e1d9335 100644 --- a/plugins/search-backend-module-catalog/CHANGELOG.md +++ b/plugins/search-backend-module-catalog/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-search-backend-module-catalog +## 0.2.3-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- 2f88f88: Updated backend installation instructions. +- Updated dependencies + - @backstage/plugin-search-backend-node@1.3.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-search-common@1.2.14 + ## 0.2.2 ### Patch Changes diff --git a/plugins/search-backend-module-catalog/package.json b/plugins/search-backend-module-catalog/package.json index c648136262..ff6fed6987 100644 --- a/plugins/search-backend-module-catalog/package.json +++ b/plugins/search-backend-module-catalog/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-search-backend-module-catalog", - "version": "0.2.2", + "version": "0.2.3-next.0", "description": "A module for the search backend that exports catalog modules", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/search-backend-module-elasticsearch/CHANGELOG.md b/plugins/search-backend-module-elasticsearch/CHANGELOG.md index 5be92f58a1..5c360d54d3 100644 --- a/plugins/search-backend-module-elasticsearch/CHANGELOG.md +++ b/plugins/search-backend-module-elasticsearch/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-search-backend-module-elasticsearch +## 1.5.7-next.0 + +### Patch Changes + +- d78b07c: Align the configuration schema with the docs and actual behavior of the code +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-search-backend-node@1.3.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/integration-aws-node@0.1.12 + - @backstage/plugin-search-common@1.2.14 + ## 1.5.6 ### Patch Changes diff --git a/plugins/search-backend-module-elasticsearch/package.json b/plugins/search-backend-module-elasticsearch/package.json index c0efa43628..a54779d766 100644 --- a/plugins/search-backend-module-elasticsearch/package.json +++ b/plugins/search-backend-module-elasticsearch/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-search-backend-module-elasticsearch", - "version": "1.5.6", + "version": "1.5.7-next.0", "description": "A module for the search backend that implements search using ElasticSearch", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/search-backend-module-explore/CHANGELOG.md b/plugins/search-backend-module-explore/CHANGELOG.md index 43690645cb..5abe14369a 100644 --- a/plugins/search-backend-module-explore/CHANGELOG.md +++ b/plugins/search-backend-module-explore/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-search-backend-module-explore +## 0.2.3-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- 2f88f88: Updated backend installation instructions. +- Updated dependencies + - @backstage/plugin-search-backend-node@1.3.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/plugin-search-common@1.2.14 + ## 0.2.2 ### Patch Changes diff --git a/plugins/search-backend-module-explore/package.json b/plugins/search-backend-module-explore/package.json index a31ff60e4d..695d86a688 100644 --- a/plugins/search-backend-module-explore/package.json +++ b/plugins/search-backend-module-explore/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-search-backend-module-explore", - "version": "0.2.2", + "version": "0.2.3-next.0", "description": "A module for the search backend that exports explore modules", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/search-backend-module-pg/CHANGELOG.md b/plugins/search-backend-module-pg/CHANGELOG.md index 2364e55fad..25f1cd1430 100644 --- a/plugins/search-backend-module-pg/CHANGELOG.md +++ b/plugins/search-backend-module-pg/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-search-backend-module-pg +## 0.5.36-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-search-backend-node@1.3.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/plugin-search-common@1.2.14 + ## 0.5.35 ### Patch Changes diff --git a/plugins/search-backend-module-pg/package.json b/plugins/search-backend-module-pg/package.json index 6b1f94779a..4665bda3d4 100644 --- a/plugins/search-backend-module-pg/package.json +++ b/plugins/search-backend-module-pg/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-search-backend-module-pg", - "version": "0.5.35", + "version": "0.5.36-next.0", "description": "A module for the search backend that implements search using PostgreSQL", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/search-backend-module-stack-overflow-collator/CHANGELOG.md b/plugins/search-backend-module-stack-overflow-collator/CHANGELOG.md index 171f2b997b..781292337b 100644 --- a/plugins/search-backend-module-stack-overflow-collator/CHANGELOG.md +++ b/plugins/search-backend-module-stack-overflow-collator/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-search-backend-module-stack-overflow-collator +## 0.3.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-search-backend-node@1.3.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/plugin-search-common@1.2.14 + ## 0.3.0 ### Minor Changes diff --git a/plugins/search-backend-module-stack-overflow-collator/package.json b/plugins/search-backend-module-stack-overflow-collator/package.json index 1321930001..f164f9f391 100644 --- a/plugins/search-backend-module-stack-overflow-collator/package.json +++ b/plugins/search-backend-module-stack-overflow-collator/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-search-backend-module-stack-overflow-collator", - "version": "0.3.0", + "version": "0.3.1-next.0", "description": "A module for the search backend that exports stack overflow modules", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/search-backend-module-techdocs/CHANGELOG.md b/plugins/search-backend-module-techdocs/CHANGELOG.md index d5a3558b53..3ceae39057 100644 --- a/plugins/search-backend-module-techdocs/CHANGELOG.md +++ b/plugins/search-backend-module-techdocs/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-search-backend-module-techdocs +## 0.2.3-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- 2f88f88: Updated backend installation instructions. +- Updated dependencies + - @backstage/plugin-search-backend-node@1.3.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-search-common@1.2.14 + - @backstage/plugin-techdocs-node@1.12.12-next.0 + ## 0.2.2 ### Patch Changes diff --git a/plugins/search-backend-module-techdocs/package.json b/plugins/search-backend-module-techdocs/package.json index bf64d8eb0f..078ab1e11f 100644 --- a/plugins/search-backend-module-techdocs/package.json +++ b/plugins/search-backend-module-techdocs/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-search-backend-module-techdocs", - "version": "0.2.2", + "version": "0.2.3-next.0", "description": "A module for the search backend that exports techdocs modules", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/search-backend-node/CHANGELOG.md b/plugins/search-backend-node/CHANGELOG.md index 84b2a1ba37..a27e703815 100644 --- a/plugins/search-backend-node/CHANGELOG.md +++ b/plugins/search-backend-node/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-search-backend-node +## 1.3.3-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/backend-defaults@0.5.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-search-common@1.2.14 + ## 1.3.2 ### Patch Changes diff --git a/plugins/search-backend-node/package.json b/plugins/search-backend-node/package.json index 748d004377..e6ecdf1f4e 100644 --- a/plugins/search-backend-node/package.json +++ b/plugins/search-backend-node/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-search-backend-node", - "version": "1.3.2", + "version": "1.3.3-next.0", "description": "A library for Backstage backend plugins that want to interact with the search backend plugin", "backstage": { "role": "node-library", diff --git a/plugins/search-backend/CHANGELOG.md b/plugins/search-backend/CHANGELOG.md index 2c1773be83..deb3409a23 100644 --- a/plugins/search-backend/CHANGELOG.md +++ b/plugins/search-backend/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-search-backend +## 1.5.18-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-search-backend-node@1.3.3-next.0 + - @backstage/backend-defaults@0.5.1-next.0 + - @backstage/plugin-permission-node@0.8.4-next.0 + - @backstage/backend-openapi-utils@0.1.19-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-search-common@1.2.14 + ## 1.5.17 ### Patch Changes diff --git a/plugins/search-backend/package.json b/plugins/search-backend/package.json index e4e01e90c5..d4c2e51da6 100644 --- a/plugins/search-backend/package.json +++ b/plugins/search-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-search-backend", - "version": "1.5.17", + "version": "1.5.18-next.0", "description": "The Backstage backend plugin that provides your backstage app with search", "backstage": { "role": "backend-plugin", diff --git a/plugins/search-react/CHANGELOG.md b/plugins/search-react/CHANGELOG.md index 00ea8e3f89..76e2c40e8f 100644 --- a/plugins/search-react/CHANGELOG.md +++ b/plugins/search-react/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-search-react +## 1.8.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/theme@0.5.7 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.9 + - @backstage/plugin-search-common@1.2.14 + ## 1.8.0 ### Minor Changes diff --git a/plugins/search-react/package.json b/plugins/search-react/package.json index 6ea2891a63..2b4f5de145 100644 --- a/plugins/search-react/package.json +++ b/plugins/search-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-search-react", - "version": "1.8.0", + "version": "1.8.1-next.0", "backstage": { "role": "web-library", "pluginId": "search", diff --git a/plugins/search/CHANGELOG.md b/plugins/search/CHANGELOG.md index e34ca37efe..b0e9c1f9d6 100644 --- a/plugins/search/CHANGELOG.md +++ b/plugins/search/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-search +## 1.4.17-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-compat-api@0.3.1-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/plugin-search-react@1.8.1-next.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.9 + - @backstage/plugin-search-common@1.2.14 + ## 1.4.16 ### Patch Changes diff --git a/plugins/search/package.json b/plugins/search/package.json index 9dd1e9e08d..cc9e8df9b7 100644 --- a/plugins/search/package.json +++ b/plugins/search/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-search", - "version": "1.4.16", + "version": "1.4.17-next.0", "description": "The Backstage plugin that provides your backstage app with search", "backstage": { "role": "frontend-plugin", diff --git a/plugins/signals-backend/CHANGELOG.md b/plugins/signals-backend/CHANGELOG.md index 5e0e525f01..3f8ebc1d9f 100644 --- a/plugins/signals-backend/CHANGELOG.md +++ b/plugins/signals-backend/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-signals-backend +## 0.2.1-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-signals-node@0.1.12-next.0 + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/types@1.1.1 + ## 0.2.0 ### Minor Changes diff --git a/plugins/signals-backend/package.json b/plugins/signals-backend/package.json index e9f4b1cc7c..b883dbbfaa 100644 --- a/plugins/signals-backend/package.json +++ b/plugins/signals-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-signals-backend", - "version": "0.2.0", + "version": "0.2.1-next.0", "backstage": { "role": "backend-plugin", "pluginId": "signals", diff --git a/plugins/signals-node/CHANGELOG.md b/plugins/signals-node/CHANGELOG.md index b034bd75c8..ef4a078f9a 100644 --- a/plugins/signals-node/CHANGELOG.md +++ b/plugins/signals-node/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-signals-node +## 0.1.12-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-events-node@0.4.1-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/types@1.1.1 + ## 0.1.11 ### Patch Changes diff --git a/plugins/signals-node/package.json b/plugins/signals-node/package.json index 67c728f96c..cd00595972 100644 --- a/plugins/signals-node/package.json +++ b/plugins/signals-node/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-signals-node", - "version": "0.1.11", + "version": "0.1.12-next.0", "description": "Node.js library for the signals plugin", "backstage": { "role": "node-library", diff --git a/plugins/signals-react/CHANGELOG.md b/plugins/signals-react/CHANGELOG.md index 686bce17dd..3cb505e301 100644 --- a/plugins/signals-react/CHANGELOG.md +++ b/plugins/signals-react/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-signals-react +## 0.0.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/types@1.1.1 + ## 0.0.5 ### Patch Changes diff --git a/plugins/signals-react/package.json b/plugins/signals-react/package.json index 3423db0a31..96a54b3fed 100644 --- a/plugins/signals-react/package.json +++ b/plugins/signals-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-signals-react", - "version": "0.0.5", + "version": "0.0.6-next.0", "description": "Web library for the signals plugin", "backstage": { "role": "web-library", diff --git a/plugins/signals/CHANGELOG.md b/plugins/signals/CHANGELOG.md index 99c87b25c3..1e7578288d 100644 --- a/plugins/signals/CHANGELOG.md +++ b/plugins/signals/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-signals +## 0.0.11-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/theme@0.5.7 + - @backstage/types@1.1.1 + - @backstage/plugin-signals-react@0.0.6-next.0 + ## 0.0.10 ### Patch Changes diff --git a/plugins/signals/package.json b/plugins/signals/package.json index 4a5cca13cd..471aecc4eb 100644 --- a/plugins/signals/package.json +++ b/plugins/signals/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-signals", - "version": "0.0.10", + "version": "0.0.11-next.0", "backstage": { "role": "frontend-plugin", "pluginId": "signals", diff --git a/plugins/techdocs-addons-test-utils/CHANGELOG.md b/plugins/techdocs-addons-test-utils/CHANGELOG.md index e2aecc8618..94323cea16 100644 --- a/plugins/techdocs-addons-test-utils/CHANGELOG.md +++ b/plugins/techdocs-addons-test-utils/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-techdocs-addons-test-utils +## 1.0.39-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog@1.24.0-next.0 + - @backstage/plugin-techdocs@1.10.10-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/plugin-search-react@1.8.1-next.0 + - @backstage/core-app-api@1.15.1-next.0 + - @backstage/integration-react@1.1.32-next.0 + - @backstage/test-utils@1.6.1-next.0 + - @backstage/plugin-techdocs-react@1.2.9-next.0 + ## 1.0.38 ### Patch Changes diff --git a/plugins/techdocs-addons-test-utils/package.json b/plugins/techdocs-addons-test-utils/package.json index 344981a776..ea61f6d6d4 100644 --- a/plugins/techdocs-addons-test-utils/package.json +++ b/plugins/techdocs-addons-test-utils/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-techdocs-addons-test-utils", - "version": "1.0.38", + "version": "1.0.39-next.0", "backstage": { "role": "web-library", "pluginId": "techdocs-addons", diff --git a/plugins/techdocs-backend/CHANGELOG.md b/plugins/techdocs-backend/CHANGELOG.md index 24ea8160fa..53b4e27a5e 100644 --- a/plugins/techdocs-backend/CHANGELOG.md +++ b/plugins/techdocs-backend/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/plugin-techdocs-backend +## 1.10.14-next.0 + +### Patch Changes + +- 094eaa3: Remove references to in-repo backend-common +- Updated dependencies + - @backstage/plugin-search-backend-module-techdocs@0.2.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-client@1.7.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.13.1-next.0 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-techdocs-common@0.1.0 + - @backstage/plugin-techdocs-node@1.12.12-next.0 + ## 1.10.13 ### Patch Changes diff --git a/plugins/techdocs-backend/package.json b/plugins/techdocs-backend/package.json index f3c8dbb139..d941f84e2d 100644 --- a/plugins/techdocs-backend/package.json +++ b/plugins/techdocs-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-techdocs-backend", - "version": "1.10.13", + "version": "1.10.14-next.0", "description": "The Backstage backend plugin that renders technical documentation for your components", "backstage": { "role": "backend-plugin", diff --git a/plugins/techdocs-module-addons-contrib/CHANGELOG.md b/plugins/techdocs-module-addons-contrib/CHANGELOG.md index 7daf3c900b..603a91278e 100644 --- a/plugins/techdocs-module-addons-contrib/CHANGELOG.md +++ b/plugins/techdocs-module-addons-contrib/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-techdocs-module-addons-contrib +## 1.1.15-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/integration@1.15.0 + - @backstage/integration-react@1.1.32-next.0 + - @backstage/plugin-techdocs-react@1.2.9-next.0 + ## 1.1.14 ### Patch Changes diff --git a/plugins/techdocs-module-addons-contrib/package.json b/plugins/techdocs-module-addons-contrib/package.json index b3ab958b72..a4a58184d5 100644 --- a/plugins/techdocs-module-addons-contrib/package.json +++ b/plugins/techdocs-module-addons-contrib/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-techdocs-module-addons-contrib", - "version": "1.1.14", + "version": "1.1.15-next.0", "description": "Plugin module for contributed TechDocs Addons", "backstage": { "role": "frontend-plugin-module", diff --git a/plugins/techdocs-node/CHANGELOG.md b/plugins/techdocs-node/CHANGELOG.md index 5b99def1b9..4f68e735f8 100644 --- a/plugins/techdocs-node/CHANGELOG.md +++ b/plugins/techdocs-node/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-techdocs-node +## 1.12.12-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + - @backstage/integration-aws-node@0.1.12 + - @backstage/plugin-search-common@1.2.14 + - @backstage/plugin-techdocs-common@0.1.0 + ## 1.12.11 ### Patch Changes diff --git a/plugins/techdocs-node/package.json b/plugins/techdocs-node/package.json index fd07d3d75b..e807b7abb0 100644 --- a/plugins/techdocs-node/package.json +++ b/plugins/techdocs-node/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-techdocs-node", - "version": "1.12.11", + "version": "1.12.12-next.0", "description": "Common node.js functionalities for TechDocs, to be shared between techdocs-backend plugin and techdocs-cli", "backstage": { "role": "node-library", diff --git a/plugins/techdocs-react/CHANGELOG.md b/plugins/techdocs-react/CHANGELOG.md index a8789bafc2..88e73fd070 100644 --- a/plugins/techdocs-react/CHANGELOG.md +++ b/plugins/techdocs-react/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-techdocs-react +## 1.2.9-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/version-bridge@1.0.9 + ## 1.2.8 ### Patch Changes diff --git a/plugins/techdocs-react/package.json b/plugins/techdocs-react/package.json index 071e61bb82..0c196707f0 100644 --- a/plugins/techdocs-react/package.json +++ b/plugins/techdocs-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-techdocs-react", - "version": "1.2.8", + "version": "1.2.9-next.0", "description": "Shared frontend utilities for TechDocs and Addons", "backstage": { "role": "web-library", diff --git a/plugins/techdocs/CHANGELOG.md b/plugins/techdocs/CHANGELOG.md index b0df10f00b..044ede047d 100644 --- a/plugins/techdocs/CHANGELOG.md +++ b/plugins/techdocs/CHANGELOG.md @@ -1,5 +1,29 @@ # @backstage/plugin-techdocs +## 1.10.10-next.0 + +### Patch Changes + +- a77cb40: Make `emptyState` input optional on `entity-content:techdocs` extension so that + the default empty state extension works correctly. +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-compat-api@0.3.1-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/plugin-search-react@1.8.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.0 + - @backstage/integration-react@1.1.32-next.0 + - @backstage/theme@0.5.7 + - @backstage/plugin-auth-react@0.1.7-next.0 + - @backstage/plugin-search-common@1.2.14 + - @backstage/plugin-techdocs-common@0.1.0 + - @backstage/plugin-techdocs-react@1.2.9-next.0 + ## 1.10.9 ### Patch Changes diff --git a/plugins/techdocs/package.json b/plugins/techdocs/package.json index f109912bc8..a6e6179c87 100644 --- a/plugins/techdocs/package.json +++ b/plugins/techdocs/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-techdocs", - "version": "1.10.9", + "version": "1.10.10-next.0", "description": "The Backstage plugin that renders technical documentation for your components", "backstage": { "role": "frontend-plugin", diff --git a/plugins/user-settings-backend/CHANGELOG.md b/plugins/user-settings-backend/CHANGELOG.md index e9c687a3cc..813b94a21a 100644 --- a/plugins/user-settings-backend/CHANGELOG.md +++ b/plugins/user-settings-backend/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-user-settings-backend +## 0.2.25-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.5.1-next.0 + - @backstage/plugin-signals-node@0.1.12-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-user-settings-common@0.0.1 + ## 0.2.24 ### Patch Changes diff --git a/plugins/user-settings-backend/package.json b/plugins/user-settings-backend/package.json index fc32e77be8..88c7533b11 100644 --- a/plugins/user-settings-backend/package.json +++ b/plugins/user-settings-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-user-settings-backend", - "version": "0.2.24", + "version": "0.2.25-next.0", "description": "The Backstage backend plugin to manage user settings", "backstage": { "role": "backend-plugin", diff --git a/plugins/user-settings/CHANGELOG.md b/plugins/user-settings/CHANGELOG.md index dd5d04378f..de1d1b4210 100644 --- a/plugins/user-settings/CHANGELOG.md +++ b/plugins/user-settings/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-user-settings +## 0.8.13-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.0-next.0 + - @backstage/core-compat-api@0.3.1-next.0 + - @backstage/core-components@0.15.1-next.0 + - @backstage/core-plugin-api@1.10.0-next.0 + - @backstage/plugin-catalog-react@1.13.1-next.0 + - @backstage/core-app-api@1.15.1-next.0 + - @backstage/errors@1.2.4 + - @backstage/theme@0.5.7 + - @backstage/types@1.1.1 + - @backstage/plugin-signals-react@0.0.6-next.0 + - @backstage/plugin-user-settings-common@0.0.1 + ## 0.8.12 ### Patch Changes diff --git a/plugins/user-settings/package.json b/plugins/user-settings/package.json index 0495173bed..4c20c2f0f3 100644 --- a/plugins/user-settings/package.json +++ b/plugins/user-settings/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-user-settings", - "version": "0.8.12", + "version": "0.8.13-next.0", "description": "A Backstage plugin that provides a settings page", "backstage": { "role": "frontend-plugin", diff --git a/yarn.lock b/yarn.lock index e97917da44..57d2d1539c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3747,7 +3747,26 @@ __metadata: languageName: unknown linkType: soft -"@backstage/backend-plugin-api@^1.0.0, @backstage/backend-plugin-api@workspace:^, @backstage/backend-plugin-api@workspace:packages/backend-plugin-api": +"@backstage/backend-plugin-api@npm:^1.0.0": + version: 1.0.0 + resolution: "@backstage/backend-plugin-api@npm:1.0.0" + dependencies: + "@backstage/cli-common": ^0.1.14 + "@backstage/config": ^1.2.0 + "@backstage/errors": ^1.2.4 + "@backstage/plugin-auth-node": ^0.5.2 + "@backstage/plugin-permission-common": ^0.8.1 + "@backstage/types": ^1.1.1 + "@types/express": ^4.17.6 + "@types/luxon": ^3.0.0 + express: ^4.17.1 + knex: ^3.0.0 + luxon: ^3.0.0 + checksum: b18b93fb631a81826ef9049567c5a151285d643aea820954f03e3a293d75f00ae679b2d3054fab2cf9dff476a65fad5b8841ca608b2f182f394b22dca026664a + languageName: node + linkType: hard + +"@backstage/backend-plugin-api@workspace:^, @backstage/backend-plugin-api@workspace:packages/backend-plugin-api": version: 0.0.0-use.local resolution: "@backstage/backend-plugin-api@workspace:packages/backend-plugin-api" dependencies: @@ -3807,7 +3826,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/catalog-client@workspace:^, @backstage/catalog-client@workspace:packages/catalog-client": +"@backstage/catalog-client@^1.7.0, @backstage/catalog-client@workspace:^, @backstage/catalog-client@workspace:packages/catalog-client": version: 0.0.0-use.local resolution: "@backstage/catalog-client@workspace:packages/catalog-client" dependencies: @@ -3820,7 +3839,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/catalog-model@^1.4.3, @backstage/catalog-model@^1.6.0, @backstage/catalog-model@workspace:^, @backstage/catalog-model@workspace:packages/catalog-model": +"@backstage/catalog-model@^1.4.3, @backstage/catalog-model@^1.6.0, @backstage/catalog-model@^1.7.0, @backstage/catalog-model@workspace:^, @backstage/catalog-model@workspace:packages/catalog-model": version: 0.0.0-use.local resolution: "@backstage/catalog-model@workspace:packages/catalog-model" dependencies: @@ -4123,6 +4142,22 @@ __metadata: languageName: unknown linkType: soft +"@backstage/core-compat-api@npm:^0.3.0": + version: 0.3.0 + resolution: "@backstage/core-compat-api@npm:0.3.0" + dependencies: + "@backstage/core-plugin-api": ^1.9.4 + "@backstage/frontend-plugin-api": ^0.8.0 + "@backstage/version-bridge": ^1.0.9 + "@types/react": ^16.13.1 || ^17.0.0 + lodash: ^4.17.21 + peerDependencies: + react: ^16.13.1 || ^17.0.0 || ^18.0.0 + react-router-dom: 6.0.0-beta.0 || ^6.3.0 + checksum: ff9f662a007c07dc1353e376ef2c40abac84123c1442f8d4307e0f98c050d8f9b4fab4f043538014d740c2d18ef7c682df12cc4f26d0c58aca0f42413e86a001 + languageName: node + linkType: hard + "@backstage/core-compat-api@workspace:^, @backstage/core-compat-api@workspace:packages/core-compat-api": version: 0.0.0-use.local resolution: "@backstage/core-compat-api@workspace:packages/core-compat-api" @@ -4251,6 +4286,55 @@ __metadata: languageName: node linkType: hard +"@backstage/core-components@npm:^0.15.0": + version: 0.15.0 + resolution: "@backstage/core-components@npm:0.15.0" + dependencies: + "@backstage/config": ^1.2.0 + "@backstage/core-plugin-api": ^1.9.4 + "@backstage/errors": ^1.2.4 + "@backstage/theme": ^0.5.7 + "@backstage/version-bridge": ^1.0.9 + "@date-io/core": ^1.3.13 + "@material-table/core": ^3.1.0 + "@material-ui/core": ^4.12.2 + "@material-ui/icons": ^4.9.1 + "@material-ui/lab": 4.0.0-alpha.61 + "@react-hookz/web": ^24.0.0 + "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 + "@types/react-sparklines": ^1.7.0 + ansi-regex: ^6.0.1 + classnames: ^2.2.6 + d3-selection: ^3.0.0 + d3-shape: ^3.0.0 + d3-zoom: ^3.0.0 + dagre: ^0.8.5 + linkify-react: 4.1.3 + linkifyjs: 4.1.3 + lodash: ^4.17.21 + pluralize: ^8.0.0 + qs: ^6.9.4 + rc-progress: 3.5.1 + react-helmet: 6.1.0 + react-hook-form: ^7.12.2 + react-idle-timer: 5.7.2 + react-markdown: ^8.0.0 + react-sparklines: ^1.7.0 + react-syntax-highlighter: ^15.4.5 + react-use: ^17.3.2 + react-virtualized-auto-sizer: ^1.0.11 + react-window: ^1.8.6 + remark-gfm: ^3.0.1 + zen-observable: ^0.10.0 + zod: ^3.22.4 + peerDependencies: + react: ^16.13.1 || ^17.0.0 || ^18.0.0 + react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 + react-router-dom: 6.0.0-beta.0 || ^6.3.0 + checksum: 98887230c4475ab29795aced0ac156be828517553a61a6fc59ec058928cfc3c63e9410523f4c49cbf893268469a9c28b1bdce3311b888f06263e069987255d25 + languageName: node + linkType: hard + "@backstage/core-components@workspace:^, @backstage/core-components@workspace:packages/core-components": version: 0.0.0-use.local resolution: "@backstage/core-components@workspace:packages/core-components" @@ -4322,7 +4406,25 @@ __metadata: languageName: unknown linkType: soft -"@backstage/core-plugin-api@^1.8.2, @backstage/core-plugin-api@^1.9.3, @backstage/core-plugin-api@workspace:^, @backstage/core-plugin-api@workspace:packages/core-plugin-api": +"@backstage/core-plugin-api@npm:^1.8.2, @backstage/core-plugin-api@npm:^1.9.3, @backstage/core-plugin-api@npm:^1.9.4": + version: 1.9.4 + resolution: "@backstage/core-plugin-api@npm:1.9.4" + dependencies: + "@backstage/config": ^1.2.0 + "@backstage/errors": ^1.2.4 + "@backstage/types": ^1.1.1 + "@backstage/version-bridge": ^1.0.9 + "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 + history: ^5.0.0 + peerDependencies: + react: ^16.13.1 || ^17.0.0 || ^18.0.0 + react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 + react-router-dom: 6.0.0-beta.0 || ^6.3.0 + checksum: 921b1185a2b68363f2cfe66f5cfa003c2f56abb252f75b0d37d49eb586d5e1347d34e846eb72bab71df5f478f106de1fe7e0e05876e559e2c28b23d849994910 + languageName: node + linkType: hard + +"@backstage/core-plugin-api@workspace:^, @backstage/core-plugin-api@workspace:packages/core-plugin-api": version: 0.0.0-use.local resolution: "@backstage/core-plugin-api@workspace:packages/core-plugin-api" dependencies: @@ -4489,6 +4591,26 @@ __metadata: languageName: unknown linkType: soft +"@backstage/frontend-plugin-api@npm:^0.8.0": + version: 0.8.0 + resolution: "@backstage/frontend-plugin-api@npm:0.8.0" + dependencies: + "@backstage/core-components": ^0.15.0 + "@backstage/core-plugin-api": ^1.9.4 + "@backstage/types": ^1.1.1 + "@backstage/version-bridge": ^1.0.9 + "@material-ui/core": ^4.12.4 + "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 + lodash: ^4.17.21 + zod: ^3.22.4 + zod-to-json-schema: ^3.21.4 + peerDependencies: + react: ^16.13.1 || ^17.0.0 || ^18.0.0 + react-router-dom: 6.0.0-beta.0 || ^6.3.0 + checksum: 2880ba13514c4620cad030e9a98d98076636e89e9cbb2aec2c44605d1b14774a9388eb43bde52f51c32070d5137134fcb5a059c1080194154dad9673ef11cf5f + languageName: node + linkType: hard + "@backstage/frontend-plugin-api@workspace:^, @backstage/frontend-plugin-api@workspace:packages/frontend-plugin-api": version: 0.0.0-use.local resolution: "@backstage/frontend-plugin-api@workspace:packages/frontend-plugin-api" @@ -4556,6 +4678,24 @@ __metadata: languageName: unknown linkType: soft +"@backstage/integration-react@npm:^1.1.31": + version: 1.1.31 + resolution: "@backstage/integration-react@npm:1.1.31" + dependencies: + "@backstage/config": ^1.2.0 + "@backstage/core-plugin-api": ^1.9.4 + "@backstage/integration": ^1.15.0 + "@material-ui/core": ^4.12.2 + "@material-ui/icons": ^4.9.1 + "@types/react": ^16.13.1 || ^17.0.0 + peerDependencies: + react: ^16.13.1 || ^17.0.0 || ^18.0.0 + react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 + react-router-dom: 6.0.0-beta.0 || ^6.3.0 + checksum: a31313bc3cd2189535eee6150ad49963f3172fa33d1c1f1c7f93e46b891c67ead9e0ea810bcfcbd6dc5ceabebb2036b0d562ec2088b0559d48c22e8b65e09bd1 + languageName: node + linkType: hard + "@backstage/integration-react@workspace:^, @backstage/integration-react@workspace:packages/integration-react": version: 0.0.0-use.local resolution: "@backstage/integration-react@workspace:packages/integration-react" @@ -5191,7 +5331,32 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-auth-node@^0.5.2, @backstage/plugin-auth-node@workspace:^, @backstage/plugin-auth-node@workspace:plugins/auth-node": +"@backstage/plugin-auth-node@npm:^0.5.2": + version: 0.5.2 + resolution: "@backstage/plugin-auth-node@npm:0.5.2" + dependencies: + "@backstage/backend-common": ^0.25.0 + "@backstage/backend-plugin-api": ^1.0.0 + "@backstage/catalog-client": ^1.7.0 + "@backstage/catalog-model": ^1.7.0 + "@backstage/config": ^1.2.0 + "@backstage/errors": ^1.2.4 + "@backstage/types": ^1.1.1 + "@types/express": "*" + "@types/passport": ^1.0.3 + express: ^4.17.1 + jose: ^5.0.0 + lodash: ^4.17.21 + node-fetch: ^2.7.0 + passport: ^0.7.0 + winston: ^3.2.1 + zod: ^3.22.4 + zod-to-json-schema: ^3.21.4 + checksum: 4a461ac73368f673bbe4d11a8f74807429f58e5295809e80d63365df57238735f0df8c9a7b33b096b371ddddbc79f02b879c7b42600dc1a22fe85f166095ccea + languageName: node + linkType: hard + +"@backstage/plugin-auth-node@workspace:^, @backstage/plugin-auth-node@workspace:plugins/auth-node": version: 0.0.0-use.local resolution: "@backstage/plugin-auth-node@workspace:plugins/auth-node" dependencies: @@ -5707,7 +5872,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-catalog-common@^1.0.20, @backstage/plugin-catalog-common@workspace:^, @backstage/plugin-catalog-common@workspace:plugins/catalog-common": +"@backstage/plugin-catalog-common@^1.0.20, @backstage/plugin-catalog-common@^1.1.0, @backstage/plugin-catalog-common@workspace:^, @backstage/plugin-catalog-common@workspace:plugins/catalog-common": version: 0.0.0-use.local resolution: "@backstage/plugin-catalog-common@workspace:plugins/catalog-common" dependencies: @@ -5816,7 +5981,44 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-catalog-react@^1.12.3, @backstage/plugin-catalog-react@^1.9.3, @backstage/plugin-catalog-react@workspace:^, @backstage/plugin-catalog-react@workspace:plugins/catalog-react": +"@backstage/plugin-catalog-react@npm:^1.12.3, @backstage/plugin-catalog-react@npm:^1.9.3": + version: 1.13.0 + resolution: "@backstage/plugin-catalog-react@npm:1.13.0" + dependencies: + "@backstage/catalog-client": ^1.7.0 + "@backstage/catalog-model": ^1.7.0 + "@backstage/core-compat-api": ^0.3.0 + "@backstage/core-components": ^0.15.0 + "@backstage/core-plugin-api": ^1.9.4 + "@backstage/errors": ^1.2.4 + "@backstage/frontend-plugin-api": ^0.8.0 + "@backstage/integration-react": ^1.1.31 + "@backstage/plugin-catalog-common": ^1.1.0 + "@backstage/plugin-permission-common": ^0.8.1 + "@backstage/plugin-permission-react": ^0.4.26 + "@backstage/types": ^1.1.1 + "@backstage/version-bridge": ^1.0.9 + "@material-ui/core": ^4.12.2 + "@material-ui/icons": ^4.9.1 + "@material-ui/lab": 4.0.0-alpha.61 + "@react-hookz/web": ^24.0.0 + "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 + classnames: ^2.2.6 + lodash: ^4.17.21 + material-ui-popup-state: ^1.9.3 + qs: ^6.9.4 + react-use: ^17.2.4 + yaml: ^2.0.0 + zen-observable: ^0.10.0 + peerDependencies: + react: ^16.13.1 || ^17.0.0 || ^18.0.0 + react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 + react-router-dom: 6.0.0-beta.0 || ^6.3.0 + checksum: e86fdfdab9f2b0fcbc68b0521acbc3c2ba95ab4206aabb09f307021960776f0aca6335cdb47b27c506b4a32f88768716839fe1e09e156d8970414da94992f0b9 + languageName: node + linkType: hard + +"@backstage/plugin-catalog-react@workspace:^, @backstage/plugin-catalog-react@workspace:plugins/catalog-react": version: 0.0.0-use.local resolution: "@backstage/plugin-catalog-react@workspace:plugins/catalog-react" dependencies: @@ -6679,7 +6881,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-permission-common@workspace:^, @backstage/plugin-permission-common@workspace:plugins/permission-common": +"@backstage/plugin-permission-common@^0.8.1, @backstage/plugin-permission-common@workspace:^, @backstage/plugin-permission-common@workspace:plugins/permission-common": version: 0.0.0-use.local resolution: "@backstage/plugin-permission-common@workspace:plugins/permission-common" dependencies: @@ -6718,6 +6920,23 @@ __metadata: languageName: unknown linkType: soft +"@backstage/plugin-permission-react@npm:^0.4.26": + version: 0.4.26 + resolution: "@backstage/plugin-permission-react@npm:0.4.26" + dependencies: + "@backstage/config": ^1.2.0 + "@backstage/core-plugin-api": ^1.9.4 + "@backstage/plugin-permission-common": ^0.8.1 + "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 + swr: ^2.0.0 + peerDependencies: + react: ^16.13.1 || ^17.0.0 || ^18.0.0 + react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 + react-router-dom: 6.0.0-beta.0 || ^6.3.0 + checksum: ad7901bfbe10e637be017ecef55b1e2db9d9e83bde7e81b742f44e2bd71a0f24c7b27e651653b6654938a5c13729b5a89183cd9518f447c445688c052f3698d9 + languageName: node + linkType: hard + "@backstage/plugin-permission-react@workspace:^, @backstage/plugin-permission-react@workspace:plugins/permission-react": version: 0.0.0-use.local resolution: "@backstage/plugin-permission-react@workspace:plugins/permission-react" @@ -8052,7 +8271,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/theme@^0.5.0, @backstage/theme@^0.5.6, @backstage/theme@workspace:^, @backstage/theme@workspace:packages/theme": +"@backstage/theme@^0.5.0, @backstage/theme@^0.5.6, @backstage/theme@^0.5.7, @backstage/theme@workspace:^, @backstage/theme@workspace:packages/theme": version: 0.0.0-use.local resolution: "@backstage/theme@workspace:packages/theme" dependencies: @@ -8083,7 +8302,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/version-bridge@^1.0.7, @backstage/version-bridge@^1.0.8, @backstage/version-bridge@workspace:^, @backstage/version-bridge@workspace:packages/version-bridge": +"@backstage/version-bridge@^1.0.7, @backstage/version-bridge@^1.0.8, @backstage/version-bridge@^1.0.9, @backstage/version-bridge@workspace:^, @backstage/version-bridge@workspace:packages/version-bridge": version: 0.0.0-use.local resolution: "@backstage/version-bridge@workspace:packages/version-bridge" dependencies: From 5a0afae161942133b0f2e7a44481517ceb038226 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Tue, 24 Sep 2024 11:17:37 +0200 Subject: [PATCH 162/164] fix some spelling problems MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- .github/vale/config/vocabularies/Backstage/accept.txt | 4 ++++ beps/0002-dynamic-frontend-plugins/README.md | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/vale/config/vocabularies/Backstage/accept.txt b/.github/vale/config/vocabularies/Backstage/accept.txt index 4914ed796c..2cbcc484f7 100644 --- a/.github/vale/config/vocabularies/Backstage/accept.txt +++ b/.github/vale/config/vocabularies/Backstage/accept.txt @@ -39,6 +39,8 @@ Brex broadcasted bugfixes builtins +bundler +bundlers callout CDNs Chai @@ -112,6 +114,7 @@ DOMPurify don'ts dynatrace Dynatrace +dyno ecco elasticsearch Entra @@ -200,6 +203,7 @@ Knex knip Koyeb KPIs +kroki Kuang kubectl kubernetes diff --git a/beps/0002-dynamic-frontend-plugins/README.md b/beps/0002-dynamic-frontend-plugins/README.md index db223c959d..1007732eec 100644 --- a/beps/0002-dynamic-frontend-plugins/README.md +++ b/beps/0002-dynamic-frontend-plugins/README.md @@ -595,7 +595,7 @@ Singleton "might have to" list: > NOTE: Can leverage [Generate module sharing map](#generate-module-sharing-map). -Component libraries are usually large (thousands of svg icons in @mui/icons) and it is inefficient to share them as a whole. **Tree shaking is disabled for shared modules**. That means sharing large packages in multiple versions will result in a bloated JS in browsers. +Component libraries are usually large (thousands of SVG icons in `@mui/icons`) and it is inefficient to share them as a whole. **Tree shaking is disabled for shared modules**. That means sharing large packages in multiple versions will result in a bloated JS in browsers. Sharing components like these can be done on module level. Instead of sharing the entire package, share its individual components: @@ -625,7 +625,7 @@ There is also a conflict with the chunk splitting currently used in the Backstag #### Webpack chunk optimization -Custom webpack chunk splitting configuration can be problematic, especially when modifying runtime and vendor chunks. Module federation creates its own chunks. Shared modules that are not set up to be eagerly loaded (using the `eager` configuration) **cannot be included inside the entry script**. With a custom chunk splitting setup, they can potentially be forced into the entry script, causing runtime errors. On the other hand, some critical runtime code that has to be in the entry script, cna be forced out of it. This is particularly problematic for the "shell" application. +Custom webpack chunk splitting configuration can be problematic, especially when modifying runtime and vendor chunks. Module federation creates its own chunks. Shared modules that are not set up to be eagerly loaded (using the `eager` configuration) **cannot be included inside the entry script**. With a custom chunk splitting setup, they can potentially be forced into the entry script, causing runtime errors. On the other hand, some critical runtime code that has to be in the entry script, can be forced out of it. This is particularly problematic for the "shell" application. Chunk optimization should be disabled for the initial implementation. From 3f76d0e8fdcc313d42c29c5aeec2715ec059f5aa Mon Sep 17 00:00:00 2001 From: Thomas Cardonne Date: Tue, 24 Sep 2024 23:55:58 +0200 Subject: [PATCH 163/164] fix(core-components): correct size and color of FavoriteToggle Signed-off-by: Thomas Cardonne --- .changeset/angry-mayflies-collect.md | 5 +++++ .../components/FavoriteToggle/FavoriteToggle.stories.tsx | 6 +++++- .../src/components/FavoriteToggle/FavoriteToggle.tsx | 7 +++++-- 3 files changed, 15 insertions(+), 3 deletions(-) create mode 100644 .changeset/angry-mayflies-collect.md diff --git a/.changeset/angry-mayflies-collect.md b/.changeset/angry-mayflies-collect.md new file mode 100644 index 0000000000..df49f98b33 --- /dev/null +++ b/.changeset/angry-mayflies-collect.md @@ -0,0 +1,5 @@ +--- +'@backstage/core-components': patch +--- + +Correct size of FavoriteToggle and inherit non-starred color from parent diff --git a/packages/core-components/src/components/FavoriteToggle/FavoriteToggle.stories.tsx b/packages/core-components/src/components/FavoriteToggle/FavoriteToggle.stories.tsx index cfe44b8728..e531e9b254 100644 --- a/packages/core-components/src/components/FavoriteToggle/FavoriteToggle.stories.tsx +++ b/packages/core-components/src/components/FavoriteToggle/FavoriteToggle.stories.tsx @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import React from 'react'; +import React, { ComponentType, PropsWithChildren } from 'react'; import { FavoriteToggle } from './FavoriteToggle'; import { UnifiedThemeProvider, @@ -21,10 +21,14 @@ import { createUnifiedTheme, palettes, } from '@backstage/theme'; +import { wrapInTestApp } from '@backstage/test-utils'; export default { title: 'Core/FavoriteToggle', component: FavoriteToggle, + decorators: [ + (Story: ComponentType>) => wrapInTestApp(), + ], }; export const Default = () => { diff --git a/packages/core-components/src/components/FavoriteToggle/FavoriteToggle.tsx b/packages/core-components/src/components/FavoriteToggle/FavoriteToggle.tsx index 8a517d27ea..ba7b4edb99 100644 --- a/packages/core-components/src/components/FavoriteToggle/FavoriteToggle.tsx +++ b/packages/core-components/src/components/FavoriteToggle/FavoriteToggle.tsx @@ -21,14 +21,16 @@ import { Theme, makeStyles } from '@material-ui/core/styles'; import { StarIcon, UnstarredIcon } from '../../icons'; const useStyles = makeStyles( - theme => ({ + () => ({ icon: { color: '#f3ba37', cursor: 'pointer', + display: 'inline-flex', }, iconBorder: { - color: theme.palette.text.primary, + color: 'inherit', cursor: 'pointer', + display: 'inline-flex', }, }), { name: 'BackstageFavoriteToggleIcon' }, @@ -89,6 +91,7 @@ export function FavoriteToggle( aria-label={title} id={id} onClick={() => onChange(!value)} + color="inherit" {...iconButtonProps} > From 5b1e195a699f04d8aa9abab4bb1428ba75ae9d2b Mon Sep 17 00:00:00 2001 From: 0126cloud <58761160+0126cloud@users.noreply.github.com> Date: Wed, 25 Sep 2024 16:57:30 +0800 Subject: [PATCH 164/164] Update curly-foxes-brake.md Remove diff bit Signed-off-by: 0126cloud <58761160+0126cloud@users.noreply.github.com> --- .changeset/curly-foxes-brake.md | 9 --------- 1 file changed, 9 deletions(-) diff --git a/.changeset/curly-foxes-brake.md b/.changeset/curly-foxes-brake.md index 31b74f2ac2..6946f30371 100644 --- a/.changeset/curly-foxes-brake.md +++ b/.changeset/curly-foxes-brake.md @@ -3,12 +3,3 @@ --- Apply `defaultValue` props in `MultiEntityPicker` - -```diff -