diff --git a/packages/cli/src/lib/role/index.ts b/packages/cli/src/lib/role/index.ts index 45ddbc8823..5a1f836036 100644 --- a/packages/cli/src/lib/role/index.ts +++ b/packages/cli/src/lib/role/index.ts @@ -19,4 +19,8 @@ export type { PackagePlatform, PackageRoleName, } from './types'; -export { detectPackageRole, readPackageRole } from './packageRoles'; +export { + getRoleInfo, + detectPackageRole, + readPackageRole, +} from './packageRoles'; diff --git a/packages/cli/src/lib/role/packageRoles.test.ts b/packages/cli/src/lib/role/packageRoles.test.ts index 555dc9ce9c..d41cd08488 100644 --- a/packages/cli/src/lib/role/packageRoles.test.ts +++ b/packages/cli/src/lib/role/packageRoles.test.ts @@ -14,7 +14,29 @@ * limitations under the License. */ -import { readPackageRole, detectPackageRole } from './packageRoles'; +import { + getRoleInfo, + readPackageRole, + detectPackageRole, +} from './packageRoles'; + +describe('getRoleInfo', () => { + it('provides role info by role', () => { + expect(getRoleInfo('web-library')).toEqual({ + role: 'web-library', + platform: 'web', + }); + + expect(getRoleInfo('app')).toEqual({ + role: 'app', + platform: 'web', + }); + + expect(() => getRoleInfo('invalid')).toThrow( + `Unknown package role 'invalid'`, + ); + }); +}); describe('readPackageRole', () => { it('reads explicit package roles', () => { @@ -52,7 +74,7 @@ describe('readPackageRole', () => { name: 'test', backstage: { role: 'invalid' }, }), - ).toThrow(`Unknown role 'invalid' in package test`); + ).toThrow(`Unknown package role 'invalid'`); }); }); diff --git a/packages/cli/src/lib/role/packageRoles.ts b/packages/cli/src/lib/role/packageRoles.ts index 76467d990e..9d0ec501c6 100644 --- a/packages/cli/src/lib/role/packageRoles.ts +++ b/packages/cli/src/lib/role/packageRoles.ts @@ -31,6 +31,14 @@ const packageRoles: PackageRoleInfo[] = [ ]; const roleMap = Object.fromEntries(packageRoles.map(i => [i.role, i])); +export function getRoleInfo(role: string): PackageRoleInfo { + const roleInfo = packageRoles.find(r => r.role === role); + if (!roleInfo) { + throw new Error(`Unknown package role '${role}'`); + } + return roleInfo; +} + const readSchema = z.object({ name: z.string().optional(), backstage: z @@ -52,11 +60,7 @@ export function readPackageRole(pkgJson: unknown): PackageRoleInfo | undefined { ); } - const roleInfo = packageRoles.find(r => r.role === role); - if (!roleInfo) { - throw new Error(`Unknown role '${role}' in package ${pkg.name}`); - } - return roleInfo; + return getRoleInfo(role); } return undefined;