cli: add util to get role info by name

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
This commit is contained in:
Patrik Oldsberg
2022-01-22 16:06:56 +01:00
parent 2926010044
commit 17a9f90efc
3 changed files with 38 additions and 8 deletions
+5 -1
View File
@@ -19,4 +19,8 @@ export type {
PackagePlatform,
PackageRoleName,
} from './types';
export { detectPackageRole, readPackageRole } from './packageRoles';
export {
getRoleInfo,
detectPackageRole,
readPackageRole,
} from './packageRoles';
+24 -2
View File
@@ -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'`);
});
});
+9 -5
View File
@@ -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;