From 62ba5f404436e72591864ee17d95a290cd96608f Mon Sep 17 00:00:00 2001 From: David Festal Date: Mon, 22 Jan 2024 15:37:36 +0100 Subject: [PATCH] Fix review comments: more information in `schemaLocator` Signed-off-by: David Festal --- .../api-report.md | 2 +- .../src/scanner/plugin-scanner.ts | 12 ++++++----- .../src/scanner/schemas.ts | 20 ++++++++----------- 3 files changed, 16 insertions(+), 18 deletions(-) diff --git a/packages/backend-dynamic-feature-service/api-report.md b/packages/backend-dynamic-feature-service/api-report.md index 55a710dbe0..5a9e93f50b 100644 --- a/packages/backend-dynamic-feature-service/api-report.md +++ b/packages/backend-dynamic-feature-service/api-report.md @@ -118,7 +118,7 @@ export const dynamicPluginsFeatureDiscoveryServiceFactory: () => ServiceFactory< // @public (undocumented) export interface DynamicPluginsSchemaDiscoveryOptions { - schemaLocator?: (platform: PackagePlatform) => string; + schemaLocator?: (pluginPackage: ScannedPluginPackage) => string; } // @public (undocumented) diff --git a/packages/backend-dynamic-feature-service/src/scanner/plugin-scanner.ts b/packages/backend-dynamic-feature-service/src/scanner/plugin-scanner.ts index 7f8996503c..0c6ad90e52 100644 --- a/packages/backend-dynamic-feature-service/src/scanner/plugin-scanner.ts +++ b/packages/backend-dynamic-feature-service/src/scanner/plugin-scanner.ts @@ -329,13 +329,15 @@ export class PluginScanner { */ export interface DynamicPluginsSchemaDiscoveryOptions { /** - * Function that returns the plugin-relative path to the Json schema file for a given platform. - * Default behavior is to look for the `configSchema.json` file in the package `dist` sub-directory. + * Function that returns the path to the Json schema file for a given scanned plugin package. + * The path is either absolute, or relative to the plugin package root directory. * - * @param platform - The platform of the plugin. - * @returns the plugin-relative path to the Json schema file. + * Default behavior is to look for the `dist/configSchema.json` relative path. + * + * @param pluginPackage - The scanned plugin package. + * @returns the absolute or plugin-relative path to the Json schema file. */ - schemaLocator?: (platform: PackagePlatform) => string; + schemaLocator?: (pluginPackage: ScannedPluginPackage) => string; } /** diff --git a/packages/backend-dynamic-feature-service/src/scanner/schemas.ts b/packages/backend-dynamic-feature-service/src/scanner/schemas.ts index b6d55181a9..ebb456e63b 100644 --- a/packages/backend-dynamic-feature-service/src/scanner/schemas.ts +++ b/packages/backend-dynamic-feature-service/src/scanner/schemas.ts @@ -21,29 +21,25 @@ import * as path from 'path'; import * as url from 'url'; import { isEmpty } from 'lodash'; import { LoggerService } from '@backstage/backend-plugin-api'; -import { PackagePlatform, PackageRoles } from '@backstage/cli-node'; export async function gatherDynamicPluginsSchemas( packages: ScannedPluginPackage[], logger: LoggerService, - schemaLocator: (platform: PackagePlatform) => string = () => + schemaLocator: (pluginPackage: ScannedPluginPackage) => string = () => path.join('dist', 'configSchema.json'), ): Promise { const allSchemas: { value: any; path: string }[] = []; for (const pluginPackage of packages) { - const platform = PackageRoles.getRoleInfo( - pluginPackage.manifest.backstage.role, - ).platform; + let schemaLocation = schemaLocator(pluginPackage); - let pluginLocation = url.fileURLToPath(pluginPackage.location); - if (path.basename(pluginLocation) === 'alpha') { - pluginLocation = path.dirname(pluginLocation); + if (!path.isAbsolute(schemaLocation)) { + let pluginLocation = url.fileURLToPath(pluginPackage.location); + if (path.basename(pluginLocation) === 'alpha') { + pluginLocation = path.dirname(pluginLocation); + } + schemaLocation = path.resolve(pluginLocation, schemaLocation); } - const schemaLocation: string = path.resolve( - pluginLocation, - schemaLocator(platform), - ); if (!(await fs.pathExists(schemaLocation))) { continue;