From eaba7ba1bdcfddbb258dd83a88914d52103ba10d Mon Sep 17 00:00:00 2001 From: Jack Palmer Date: Wed, 30 Aug 2023 11:31:00 +0100 Subject: [PATCH 01/10] fix: backend-plugin-module role Signed-off-by: Jack Palmer --- .../src/alpha/featureDiscoveryServiceFactory.test.ts | 2 +- .../backend-app-api/src/alpha/featureDiscoveryServiceFactory.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/backend-app-api/src/alpha/featureDiscoveryServiceFactory.test.ts b/packages/backend-app-api/src/alpha/featureDiscoveryServiceFactory.test.ts index 5d4b1fc551..cb64491a6e 100644 --- a/packages/backend-app-api/src/alpha/featureDiscoveryServiceFactory.test.ts +++ b/packages/backend-app-api/src/alpha/featureDiscoveryServiceFactory.test.ts @@ -65,7 +65,7 @@ describe('featureDiscoveryServiceFactory', () => { name: 'detected-module', main: 'index.js', backstage: { - role: 'backend-module', + role: 'backend-plugin-module', }, }), 'index.js': ` diff --git a/packages/backend-app-api/src/alpha/featureDiscoveryServiceFactory.ts b/packages/backend-app-api/src/alpha/featureDiscoveryServiceFactory.ts index f9ee7edc5f..b0d2b7938f 100644 --- a/packages/backend-app-api/src/alpha/featureDiscoveryServiceFactory.ts +++ b/packages/backend-app-api/src/alpha/featureDiscoveryServiceFactory.ts @@ -28,7 +28,7 @@ import { resolve as resolvePath, dirname } from 'path'; import fs from 'fs-extra'; import { BackstagePackageJson } from '@backstage/cli-node'; -const LOADED_PACKAGE_ROLES = ['backend-plugin', 'backend-module']; +const LOADED_PACKAGE_ROLES = ['backend-plugin', 'backend-plugin-module']; /** @internal */ async function findClosestPackageDir( From 032622bdcb2c5662cf59cd5b1e9b95be83e01ab2 Mon Sep 17 00:00:00 2001 From: Jack Palmer Date: Wed, 30 Aug 2023 13:07:32 +0100 Subject: [PATCH 02/10] feat: Add include and exclude to backend.packages discovery Signed-off-by: Jack Palmer --- .../featureDiscoveryServiceFactory.test.ts | 212 +++++++++++++++++- .../alpha/featureDiscoveryServiceFactory.ts | 35 ++- 2 files changed, 240 insertions(+), 7 deletions(-) diff --git a/packages/backend-app-api/src/alpha/featureDiscoveryServiceFactory.test.ts b/packages/backend-app-api/src/alpha/featureDiscoveryServiceFactory.test.ts index cb64491a6e..d1159aec50 100644 --- a/packages/backend-app-api/src/alpha/featureDiscoveryServiceFactory.test.ts +++ b/packages/backend-app-api/src/alpha/featureDiscoveryServiceFactory.test.ts @@ -34,6 +34,7 @@ describe('featureDiscoveryServiceFactory', () => { dependencies: { 'detected-plugin': '0.0.0', 'detected-module': '0.0.0', + 'another-detected-plugin': '0.0.0', }, }), }, @@ -84,6 +85,29 @@ describe('featureDiscoveryServiceFactory', () => { }); `, }, + [resolvePath(rootDir, 'node_modules/another-detected-plugin')]: { + 'package.json': JSON.stringify({ + name: 'another-detected-plugin', + main: 'index.js', + backstage: { + role: 'backend-plugin', + }, + }), + 'index.js': ` + const { createBackendPlugin, coreServices } = require('@backstage/backend-plugin-api'); + exports.detectedPlugin = createBackendPlugin({ + pluginId: 'another-detected', + register(env) { + env.registerInit({ + deps: { identity: coreServices.identity }, + async init({ identity }) { + identity.getIdentity('another-detected-plugin'); + }, + }); + }, + }); + `, + }, }); }); @@ -91,7 +115,7 @@ describe('featureDiscoveryServiceFactory', () => { mockFs.restore(); }); - it('should detect plugin and module packages', async () => { + it('should detect plugin and module packages when "all" is specified', async () => { const fn = jest.fn().mockResolvedValue({}); await startTestBackend({ @@ -110,5 +134,191 @@ describe('featureDiscoveryServiceFactory', () => { expect(fn).toHaveBeenCalledWith('detected-plugin'); expect(fn).toHaveBeenCalledWith('detected-module'); + expect(fn).toHaveBeenCalledWith('another-detected-plugin'); + }); + + it('detects only the packages that are listed as included', async () => { + const fn = jest.fn().mockResolvedValue({}); + + await startTestBackend({ + features: [ + createServiceFactory({ + service: coreServices.identity, + deps: {}, + factory: () => ({ getIdentity: fn }), + }), + featureDiscoveryServiceFactory(), + mockServices.rootConfig.factory({ + data: { + backend: { + packages: { + include: ['detected-plugin', 'another-detected-plugin'], + }, + }, + }, + }), + ], + }); + + expect(fn).toHaveBeenCalledWith('detected-plugin'); + expect(fn).toHaveBeenCalledWith('another-detected-plugin'); + expect(fn).not.toHaveBeenCalledWith('detected-module'); + }); + + it('does not detect packages when included is an empty list', async () => { + const fn = jest.fn().mockResolvedValue({}); + + await startTestBackend({ + features: [ + createServiceFactory({ + service: coreServices.identity, + deps: {}, + factory: () => ({ getIdentity: fn }), + }), + featureDiscoveryServiceFactory(), + mockServices.rootConfig.factory({ + data: { + backend: { + packages: { + include: [], + }, + }, + }, + }), + ], + }); + + expect(fn).not.toHaveBeenCalledWith('detected-plugin'); + expect(fn).not.toHaveBeenCalledWith('another-detected-plugin'); + expect(fn).not.toHaveBeenCalledWith('detected-module'); + }); + + it('does not detect an excluded packages', async () => { + const fn = jest.fn().mockResolvedValue({}); + + await startTestBackend({ + features: [ + createServiceFactory({ + service: coreServices.identity, + deps: {}, + factory: () => ({ getIdentity: fn }), + }), + featureDiscoveryServiceFactory(), + mockServices.rootConfig.factory({ + data: { + backend: { + packages: { + exclude: ['detected-plugin', 'detected-module'], + }, + }, + }, + }), + ], + }); + + expect(fn).not.toHaveBeenCalledWith('detected-plugin'); + expect(fn).not.toHaveBeenCalledWith('detected-module'); + expect(fn).toHaveBeenCalledWith('another-detected-plugin'); + }); + + it('does not excluded packages when it is an empty list', async () => { + const fn = jest.fn().mockResolvedValue({}); + + await startTestBackend({ + features: [ + createServiceFactory({ + service: coreServices.identity, + deps: {}, + factory: () => ({ getIdentity: fn }), + }), + featureDiscoveryServiceFactory(), + mockServices.rootConfig.factory({ + data: { + backend: { + packages: { + exclude: [], + }, + }, + }, + }), + ], + }); + + expect(fn).toHaveBeenCalledWith('detected-plugin'); + expect(fn).toHaveBeenCalledWith('detected-module'); + expect(fn).toHaveBeenCalledWith('another-detected-plugin'); + }); + + it('does not detect packages that are included and excluded', async () => { + const fn = jest.fn().mockResolvedValue({}); + + await startTestBackend({ + features: [ + createServiceFactory({ + service: coreServices.identity, + deps: {}, + factory: () => ({ getIdentity: fn }), + }), + featureDiscoveryServiceFactory(), + mockServices.rootConfig.factory({ + data: { + backend: { + packages: { + include: [ + 'detected-plugin', + 'detected-module', + 'another-detected-plugin', + ], + exclude: ['detected-plugin'], + }, + }, + }, + }), + ], + }); + + expect(fn).not.toHaveBeenCalledWith('detected-plugin'); + expect(fn).toHaveBeenCalledWith('detected-module'); + expect(fn).toHaveBeenCalledWith('another-detected-plugin'); + }); + + it('does not detect any packages when "packages" is empty', async () => { + const fn = jest.fn().mockResolvedValue({}); + + await startTestBackend({ + features: [ + createServiceFactory({ + service: coreServices.identity, + deps: {}, + factory: () => ({ getIdentity: fn }), + }), + featureDiscoveryServiceFactory(), + mockServices.rootConfig.factory({ + data: { backend: { packages: {} } }, + }), + ], + }); + + expect(fn).not.toHaveBeenCalled(); + }); + + it('does not detect any packages when "packages" is not present', async () => { + const fn = jest.fn().mockResolvedValue({}); + + await startTestBackend({ + features: [ + createServiceFactory({ + service: coreServices.identity, + deps: {}, + factory: () => ({ getIdentity: fn }), + }), + featureDiscoveryServiceFactory(), + mockServices.rootConfig.factory({ + data: { backend: {} }, + }), + ], + }); + + expect(fn).not.toHaveBeenCalled(); }); }); diff --git a/packages/backend-app-api/src/alpha/featureDiscoveryServiceFactory.ts b/packages/backend-app-api/src/alpha/featureDiscoveryServiceFactory.ts index b0d2b7938f..5f12f9c8f5 100644 --- a/packages/backend-app-api/src/alpha/featureDiscoveryServiceFactory.ts +++ b/packages/backend-app-api/src/alpha/featureDiscoveryServiceFactory.ts @@ -60,8 +60,33 @@ async function findClosestPackageDir( class PackageDiscoveryService implements FeatureDiscoveryService { constructor(private readonly config: RootConfigService) {} + getDependencyNames(path: string) { + const { dependencies } = require(path) as BackstagePackageJson; + const packagesConfig = this.config.getOptional('backend.packages'); + + const dependencyNames = Object.keys(dependencies || {}); + + if (packagesConfig === 'all') { + return dependencyNames; + } + + const includedPackagesConfig = this.config.getOptionalStringArray( + 'backend.packages.include', + ); + + const includedPackages = includedPackagesConfig + ? new Set(includedPackagesConfig) + : dependencyNames; + const excludedPackagesSet = new Set( + this.config.getOptionalStringArray('backend.packages.exclude'), + ); + + return [...includedPackages].filter(name => !excludedPackagesSet.has(name)); + } + async getBackendFeatures(): Promise<{ features: Array }> { - if (this.config.getOptionalString('backend.packages') !== 'all') { + const packagesConfig = this.config.getOptional('backend.packages'); + if (!packagesConfig || Object.keys(packagesConfig).length === 0) { return { features: [] }; } @@ -69,11 +94,9 @@ class PackageDiscoveryService implements FeatureDiscoveryService { if (!packageDir) { throw new Error('Package discovery failed to find package.json'); } - const { dependencies } = require(resolvePath( - packageDir, - 'package.json', - )) as BackstagePackageJson; - const dependencyNames = Object.keys(dependencies || {}); + const dependencyNames = this.getDependencyNames( + resolvePath(packageDir, 'package.json'), + ); const features: BackendFeature[] = []; From 68c4031069ccb6d735e2558106fb0d301c07b276 Mon Sep 17 00:00:00 2001 From: Jack Palmer Date: Wed, 30 Aug 2023 14:08:25 +0100 Subject: [PATCH 03/10] feat: Discovery alpha exports Signed-off-by: Jack Palmer --- .../featureDiscoveryServiceFactory.test.ts | 40 ++++++++++++------- .../alpha/featureDiscoveryServiceFactory.ts | 33 +++++++++++---- 2 files changed, 51 insertions(+), 22 deletions(-) diff --git a/packages/backend-app-api/src/alpha/featureDiscoveryServiceFactory.test.ts b/packages/backend-app-api/src/alpha/featureDiscoveryServiceFactory.test.ts index d1159aec50..f054c1a365 100644 --- a/packages/backend-app-api/src/alpha/featureDiscoveryServiceFactory.test.ts +++ b/packages/backend-app-api/src/alpha/featureDiscoveryServiceFactory.test.ts @@ -34,7 +34,7 @@ describe('featureDiscoveryServiceFactory', () => { dependencies: { 'detected-plugin': '0.0.0', 'detected-module': '0.0.0', - 'another-detected-plugin': '0.0.0', + 'detected-plugin-with-alpha': '0.0.0', }, }), }, @@ -85,23 +85,33 @@ describe('featureDiscoveryServiceFactory', () => { }); `, }, - [resolvePath(rootDir, 'node_modules/another-detected-plugin')]: { + [resolvePath(rootDir, 'node_modules/detected-plugin-with-alpha')]: { 'package.json': JSON.stringify({ - name: 'another-detected-plugin', + name: 'detected-plugin-with-alpha', main: 'index.js', + exports: { + '.': { + default: 'index.js', + }, + './alpha': { + default: 'alpha.js', + }, + './package.json': './package.json', + }, backstage: { role: 'backend-plugin', }, }), - 'index.js': ` + 'index.js': `exports.detectedPlugin = undefined;`, + 'alpha.js': ` const { createBackendPlugin, coreServices } = require('@backstage/backend-plugin-api'); - exports.detectedPlugin = createBackendPlugin({ - pluginId: 'another-detected', + exports.detectedPluginAlpha = createBackendPlugin({ + pluginId: 'detected-alpha', register(env) { env.registerInit({ deps: { identity: coreServices.identity }, async init({ identity }) { - identity.getIdentity('another-detected-plugin'); + identity.getIdentity('detected-plugin-with-alpha'); }, }); }, @@ -134,7 +144,7 @@ describe('featureDiscoveryServiceFactory', () => { expect(fn).toHaveBeenCalledWith('detected-plugin'); expect(fn).toHaveBeenCalledWith('detected-module'); - expect(fn).toHaveBeenCalledWith('another-detected-plugin'); + expect(fn).toHaveBeenCalledWith('detected-plugin-with-alpha'); }); it('detects only the packages that are listed as included', async () => { @@ -152,7 +162,7 @@ describe('featureDiscoveryServiceFactory', () => { data: { backend: { packages: { - include: ['detected-plugin', 'another-detected-plugin'], + include: ['detected-plugin', 'detected-plugin-with-alpha'], }, }, }, @@ -161,7 +171,7 @@ describe('featureDiscoveryServiceFactory', () => { }); expect(fn).toHaveBeenCalledWith('detected-plugin'); - expect(fn).toHaveBeenCalledWith('another-detected-plugin'); + expect(fn).toHaveBeenCalledWith('detected-plugin-with-alpha'); expect(fn).not.toHaveBeenCalledWith('detected-module'); }); @@ -189,7 +199,7 @@ describe('featureDiscoveryServiceFactory', () => { }); expect(fn).not.toHaveBeenCalledWith('detected-plugin'); - expect(fn).not.toHaveBeenCalledWith('another-detected-plugin'); + expect(fn).not.toHaveBeenCalledWith('detected-plugin-with-alpha'); expect(fn).not.toHaveBeenCalledWith('detected-module'); }); @@ -218,7 +228,7 @@ describe('featureDiscoveryServiceFactory', () => { expect(fn).not.toHaveBeenCalledWith('detected-plugin'); expect(fn).not.toHaveBeenCalledWith('detected-module'); - expect(fn).toHaveBeenCalledWith('another-detected-plugin'); + expect(fn).toHaveBeenCalledWith('detected-plugin-with-alpha'); }); it('does not excluded packages when it is an empty list', async () => { @@ -246,7 +256,7 @@ describe('featureDiscoveryServiceFactory', () => { expect(fn).toHaveBeenCalledWith('detected-plugin'); expect(fn).toHaveBeenCalledWith('detected-module'); - expect(fn).toHaveBeenCalledWith('another-detected-plugin'); + expect(fn).toHaveBeenCalledWith('detected-plugin-with-alpha'); }); it('does not detect packages that are included and excluded', async () => { @@ -267,7 +277,7 @@ describe('featureDiscoveryServiceFactory', () => { include: [ 'detected-plugin', 'detected-module', - 'another-detected-plugin', + 'detected-plugin-with-alpha', ], exclude: ['detected-plugin'], }, @@ -279,7 +289,7 @@ describe('featureDiscoveryServiceFactory', () => { expect(fn).not.toHaveBeenCalledWith('detected-plugin'); expect(fn).toHaveBeenCalledWith('detected-module'); - expect(fn).toHaveBeenCalledWith('another-detected-plugin'); + expect(fn).toHaveBeenCalledWith('detected-plugin-with-alpha'); }); it('does not detect any packages when "packages" is empty', async () => { diff --git a/packages/backend-app-api/src/alpha/featureDiscoveryServiceFactory.ts b/packages/backend-app-api/src/alpha/featureDiscoveryServiceFactory.ts index 5f12f9c8f5..2e216c287a 100644 --- a/packages/backend-app-api/src/alpha/featureDiscoveryServiceFactory.ts +++ b/packages/backend-app-api/src/alpha/featureDiscoveryServiceFactory.ts @@ -27,6 +27,7 @@ import { import { resolve as resolvePath, dirname } from 'path'; import fs from 'fs-extra'; import { BackstagePackageJson } from '@backstage/cli-node'; +import { JsonObject, JsonValue } from '@backstage/types'; const LOADED_PACKAGE_ROLES = ['backend-plugin', 'backend-plugin-module']; @@ -107,13 +108,31 @@ class PackageDiscoveryService implements FeatureDiscoveryService { if (!LOADED_PACKAGE_ROLES.includes(depPkg?.backstage?.role ?? '')) { continue; } - const depModule = require(require.resolve(name, { paths: [packageDir] })); - for (const exportValue of Object.values(depModule)) { - if (isBackendFeature(exportValue)) { - features.push(exportValue); - } - if (isBackendFeatureFactory(exportValue)) { - features.push(exportValue()); + + const exportedModulePaths = [ + require.resolve(name, { + paths: [packageDir], + }), + ]; + + // Find modules exported as alpha + try { + exportedModulePaths.push( + require.resolve(`${name}/alpha`, { paths: [packageDir] }), + ); + } catch (e) { + /* No alpha exports so ignore */ + } + + for (const modulePath of exportedModulePaths) { + const module = require(modulePath); + for (const exportValue of Object.values(module)) { + if (isBackendFeature(exportValue)) { + features.push(exportValue); + } + if (isBackendFeatureFactory(exportValue)) { + features.push(exportValue()); + } } } } From 855cf4082f008f9c583c2131276d106bd2f09dc6 Mon Sep 17 00:00:00 2001 From: Jack Palmer Date: Wed, 30 Aug 2023 14:13:24 +0100 Subject: [PATCH 04/10] fix: linting Signed-off-by: Jack Palmer --- .../backend-app-api/src/alpha/featureDiscoveryServiceFactory.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/backend-app-api/src/alpha/featureDiscoveryServiceFactory.ts b/packages/backend-app-api/src/alpha/featureDiscoveryServiceFactory.ts index 2e216c287a..e70c0622f0 100644 --- a/packages/backend-app-api/src/alpha/featureDiscoveryServiceFactory.ts +++ b/packages/backend-app-api/src/alpha/featureDiscoveryServiceFactory.ts @@ -27,7 +27,6 @@ import { import { resolve as resolvePath, dirname } from 'path'; import fs from 'fs-extra'; import { BackstagePackageJson } from '@backstage/cli-node'; -import { JsonObject, JsonValue } from '@backstage/types'; const LOADED_PACKAGE_ROLES = ['backend-plugin', 'backend-plugin-module']; From 37a20c7f14aa7ebc42ccc3e11034fece532c3459 Mon Sep 17 00:00:00 2001 From: Jack Palmer Date: Wed, 30 Aug 2023 15:39:14 +0100 Subject: [PATCH 05/10] chore: Add changeset Signed-off-by: Jack Palmer --- .changeset/funny-ligers-matter.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .changeset/funny-ligers-matter.md diff --git a/.changeset/funny-ligers-matter.md b/.changeset/funny-ligers-matter.md new file mode 100644 index 0000000000..e7553b3ba0 --- /dev/null +++ b/.changeset/funny-ligers-matter.md @@ -0,0 +1,6 @@ +--- +'@backstage/backend-app-api': patch +--- + +Adds include and exclude configuration to feature discovery of backend packages +Adds alpha exports to feature discovery From 5f9205767b0b122a500b32d88a384fd7f89302e2 Mon Sep 17 00:00:00 2001 From: Jack Palmer Date: Wed, 30 Aug 2023 16:16:45 +0100 Subject: [PATCH 06/10] chore: Add logging to discovery Signed-off-by: Jack Palmer --- .../src/alpha/featureDiscoveryServiceFactory.ts | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/packages/backend-app-api/src/alpha/featureDiscoveryServiceFactory.ts b/packages/backend-app-api/src/alpha/featureDiscoveryServiceFactory.ts index e70c0622f0..0b8f61686a 100644 --- a/packages/backend-app-api/src/alpha/featureDiscoveryServiceFactory.ts +++ b/packages/backend-app-api/src/alpha/featureDiscoveryServiceFactory.ts @@ -17,6 +17,7 @@ import { BackendFeature, RootConfigService, + RootLoggerService, coreServices, createServiceFactory, } from '@backstage/backend-plugin-api'; @@ -58,7 +59,10 @@ async function findClosestPackageDir( /** @internal */ class PackageDiscoveryService implements FeatureDiscoveryService { - constructor(private readonly config: RootConfigService) {} + constructor( + private readonly config: RootConfigService, + private readonly logger: RootLoggerService, + ) {} getDependencyNames(path: string) { const { dependencies } = require(path) as BackstagePackageJson; @@ -125,11 +129,13 @@ class PackageDiscoveryService implements FeatureDiscoveryService { for (const modulePath of exportedModulePaths) { const module = require(modulePath); - for (const exportValue of Object.values(module)) { + for (const [exportName, exportValue] of Object.entries(module)) { if (isBackendFeature(exportValue)) { + this.logger.info(`Detected: ${name}#${exportName}`); features.push(exportValue); } if (isBackendFeatureFactory(exportValue)) { + this.logger.info(`Detected Factory: ${name}#${exportName}`); features.push(exportValue()); } } @@ -145,9 +151,10 @@ export const featureDiscoveryServiceFactory = createServiceFactory({ service: featureDiscoveryServiceRef, deps: { config: coreServices.rootConfig, + logger: coreServices.rootLogger, }, - factory({ config }) { - return new PackageDiscoveryService(config); + factory({ config, logger }) { + return new PackageDiscoveryService(config, logger); }, }); From ee7566fc4fee62e953016e38a7857dc357664c0b Mon Sep 17 00:00:00 2001 From: Jack Palmer Date: Wed, 30 Aug 2023 16:23:06 +0100 Subject: [PATCH 07/10] chore: Address pr feedback Signed-off-by: Jack Palmer --- .../backend-app-api/src/alpha/featureDiscoveryServiceFactory.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/backend-app-api/src/alpha/featureDiscoveryServiceFactory.ts b/packages/backend-app-api/src/alpha/featureDiscoveryServiceFactory.ts index 0b8f61686a..9067808722 100644 --- a/packages/backend-app-api/src/alpha/featureDiscoveryServiceFactory.ts +++ b/packages/backend-app-api/src/alpha/featureDiscoveryServiceFactory.ts @@ -124,7 +124,7 @@ class PackageDiscoveryService implements FeatureDiscoveryService { require.resolve(`${name}/alpha`, { paths: [packageDir] }), ); } catch (e) { - /* No alpha exports so ignore */ + /* ignore */ } for (const modulePath of exportedModulePaths) { From 866185e5168cd9ad07a0965328e3c6efd8b1969c Mon Sep 17 00:00:00 2001 From: Jack Palmer Date: Wed, 30 Aug 2023 16:24:30 +0100 Subject: [PATCH 08/10] chore: Change wording of logging Signed-off-by: Jack Palmer --- .../backend-app-api/src/alpha/featureDiscoveryServiceFactory.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/backend-app-api/src/alpha/featureDiscoveryServiceFactory.ts b/packages/backend-app-api/src/alpha/featureDiscoveryServiceFactory.ts index 9067808722..1ef7170766 100644 --- a/packages/backend-app-api/src/alpha/featureDiscoveryServiceFactory.ts +++ b/packages/backend-app-api/src/alpha/featureDiscoveryServiceFactory.ts @@ -135,7 +135,7 @@ class PackageDiscoveryService implements FeatureDiscoveryService { features.push(exportValue); } if (isBackendFeatureFactory(exportValue)) { - this.logger.info(`Detected Factory: ${name}#${exportName}`); + this.logger.info(`Detected: ${name}#${exportName}`); features.push(exportValue()); } } From 0b99b64b6c51660f9214845665202e4e8a201e62 Mon Sep 17 00:00:00 2001 From: Jack Palmer Date: Wed, 30 Aug 2023 16:27:44 +0100 Subject: [PATCH 09/10] chore: Remove unused exception param Signed-off-by: Jack Palmer --- .../backend-app-api/src/alpha/featureDiscoveryServiceFactory.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/backend-app-api/src/alpha/featureDiscoveryServiceFactory.ts b/packages/backend-app-api/src/alpha/featureDiscoveryServiceFactory.ts index 1ef7170766..07d5c4627d 100644 --- a/packages/backend-app-api/src/alpha/featureDiscoveryServiceFactory.ts +++ b/packages/backend-app-api/src/alpha/featureDiscoveryServiceFactory.ts @@ -123,7 +123,7 @@ class PackageDiscoveryService implements FeatureDiscoveryService { exportedModulePaths.push( require.resolve(`${name}/alpha`, { paths: [packageDir] }), ); - } catch (e) { + } catch { /* ignore */ } From 444295b070e43b926e9e8db3f670e2feaec8da76 Mon Sep 17 00:00:00 2001 From: Jack Palmer Date: Wed, 30 Aug 2023 16:31:10 +0100 Subject: [PATCH 10/10] chore: Update changeset Signed-off-by: Jack Palmer --- .changeset/funny-ligers-matter.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/funny-ligers-matter.md b/.changeset/funny-ligers-matter.md index e7553b3ba0..0cec3eb333 100644 --- a/.changeset/funny-ligers-matter.md +++ b/.changeset/funny-ligers-matter.md @@ -3,4 +3,4 @@ --- Adds include and exclude configuration to feature discovery of backend packages -Adds alpha exports to feature discovery +Adds alpha modules to feature discovery