From e5671e44c095b61ffe633808e708ec7a7e29d6cb Mon Sep 17 00:00:00 2001 From: benjdlambert Date: Tue, 19 May 2026 12:09:21 +0200 Subject: [PATCH] refactor: extend default type and remove per-type guards Signed-off-by: benjdlambert --- packages/catalog-model/report-alpha.api.md | 24 ++------ packages/catalog-model/src/alpha.ts | 2 - .../kinds/AiResourceEntityV1alpha1.test.ts | 56 ------------------- .../src/kinds/AiResourceEntityV1alpha1.ts | 30 ++-------- 4 files changed, 8 insertions(+), 104 deletions(-) diff --git a/packages/catalog-model/report-alpha.api.md b/packages/catalog-model/report-alpha.api.md index dfd6882004..4d264e6793 100644 --- a/packages/catalog-model/report-alpha.api.md +++ b/packages/catalog-model/report-alpha.api.md @@ -485,27 +485,14 @@ export const isAiResourceEntity: ( entity: Entity, ) => entity is AiResourceEntityV1alpha1; -// @alpha -export const isRuleAiResourceEntity: ( - entity: Entity, -) => entity is RuleAiResourceEntityV1alpha1; - -// @alpha -export const isSkillAiResourceEntity: ( - entity: Entity, -) => entity is SkillAiResourceEntityV1alpha1; - // @public export type KindValidator = { check(entity: Entity): Promise; }; // @alpha -export interface RuleAiResourceEntityV1alpha1 extends Entity { - // (undocumented) - apiVersion: 'backstage.io/v1alpha1'; - // (undocumented) - kind: 'AiResource'; +export interface RuleAiResourceEntityV1alpha1 + extends AiResourceEntityV1alpha1Default { // (undocumented) spec: { type: 'rule'; @@ -522,11 +509,8 @@ export interface RuleAiResourceEntityV1alpha1 extends Entity { export const ruleAiResourceEntityV1alpha1Validator: KindValidator; // @alpha -export interface SkillAiResourceEntityV1alpha1 extends Entity { - // (undocumented) - apiVersion: 'backstage.io/v1alpha1'; - // (undocumented) - kind: 'AiResource'; +export interface SkillAiResourceEntityV1alpha1 + extends AiResourceEntityV1alpha1Default { // (undocumented) spec: { type: 'skill'; diff --git a/packages/catalog-model/src/alpha.ts b/packages/catalog-model/src/alpha.ts index 219513f167..1d8f1c01af 100644 --- a/packages/catalog-model/src/alpha.ts +++ b/packages/catalog-model/src/alpha.ts @@ -38,8 +38,6 @@ export { skillAiResourceEntityV1alpha1Validator, ruleAiResourceEntityV1alpha1Validator, isAiResourceEntity, - isSkillAiResourceEntity, - isRuleAiResourceEntity, aiResourceEntityModel, } from './kinds/AiResourceEntityV1alpha1'; export * from './model'; diff --git a/packages/catalog-model/src/kinds/AiResourceEntityV1alpha1.test.ts b/packages/catalog-model/src/kinds/AiResourceEntityV1alpha1.test.ts index e3fa82754a..688f25f5c6 100644 --- a/packages/catalog-model/src/kinds/AiResourceEntityV1alpha1.test.ts +++ b/packages/catalog-model/src/kinds/AiResourceEntityV1alpha1.test.ts @@ -23,8 +23,6 @@ import { skillAiResourceEntityV1alpha1Validator as skillValidator, ruleAiResourceEntityV1alpha1Validator as ruleValidator, isAiResourceEntity, - isSkillAiResourceEntity, - isRuleAiResourceEntity, } from './AiResourceEntityV1alpha1'; describe('AiResourceV1alpha1 default validator', () => { @@ -275,28 +273,6 @@ describe('AiResourceV1alpha1 rule validator', () => { }); }); -describe('isRuleAiResourceEntity', () => { - it('returns true for a rule AiResource', () => { - const entity: Entity = { - apiVersion: 'backstage.io/v1alpha1', - kind: 'AiResource', - metadata: { name: 'test' }, - spec: { type: 'rule' }, - }; - expect(isRuleAiResourceEntity(entity)).toBe(true); - }); - - it('returns false for a non-rule AiResource', () => { - const entity: Entity = { - apiVersion: 'backstage.io/v1alpha1', - kind: 'AiResource', - metadata: { name: 'test' }, - spec: { type: 'skill' }, - }; - expect(isRuleAiResourceEntity(entity)).toBe(false); - }); -}); - describe('isAiResourceEntity', () => { it('returns true when apiVersion and kind match', () => { const entity: Entity = { @@ -325,35 +301,3 @@ describe('isAiResourceEntity', () => { expect(isAiResourceEntity(entity)).toBe(false); }); }); - -describe('isSkillAiResourceEntity', () => { - it('returns true for a skill AiResource', () => { - const entity: Entity = { - apiVersion: 'backstage.io/v1alpha1', - kind: 'AiResource', - metadata: { name: 'test' }, - spec: { type: 'skill' }, - }; - expect(isSkillAiResourceEntity(entity)).toBe(true); - }); - - it('returns false for a non-skill AiResource', () => { - const entity: Entity = { - apiVersion: 'backstage.io/v1alpha1', - kind: 'AiResource', - metadata: { name: 'test' }, - spec: { type: 'rule' }, - }; - expect(isSkillAiResourceEntity(entity)).toBe(false); - }); - - it('returns false for a different kind', () => { - const entity: Entity = { - apiVersion: 'backstage.io/v1alpha1', - kind: 'Component', - metadata: { name: 'test' }, - spec: { type: 'skill' }, - }; - expect(isSkillAiResourceEntity(entity)).toBe(false); - }); -}); diff --git a/packages/catalog-model/src/kinds/AiResourceEntityV1alpha1.ts b/packages/catalog-model/src/kinds/AiResourceEntityV1alpha1.ts index 1655e0fdbc..109712c5ec 100644 --- a/packages/catalog-model/src/kinds/AiResourceEntityV1alpha1.ts +++ b/packages/catalog-model/src/kinds/AiResourceEntityV1alpha1.ts @@ -45,9 +45,8 @@ export interface AiResourceEntityV1alpha1Default extends Entity { * * @alpha */ -export interface SkillAiResourceEntityV1alpha1 extends Entity { - apiVersion: 'backstage.io/v1alpha1'; - kind: 'AiResource'; +export interface SkillAiResourceEntityV1alpha1 + extends AiResourceEntityV1alpha1Default { spec: { type: 'skill'; lifecycle: string; @@ -66,9 +65,8 @@ export interface SkillAiResourceEntityV1alpha1 extends Entity { * * @alpha */ -export interface RuleAiResourceEntityV1alpha1 extends Entity { - apiVersion: 'backstage.io/v1alpha1'; - kind: 'AiResource'; +export interface RuleAiResourceEntityV1alpha1 + extends AiResourceEntityV1alpha1Default { spec: { type: 'rule'; lifecycle: string; @@ -127,16 +125,6 @@ export const isAiResourceEntity = ( ): entity is AiResourceEntityV1alpha1 => entity.apiVersion === 'backstage.io/v1alpha1' && entity.kind === 'AiResource'; -/** - * Type guard for {@link SkillAiResourceEntityV1alpha1}. - * - * @alpha - */ -export const isSkillAiResourceEntity = ( - entity: Entity, -): entity is SkillAiResourceEntityV1alpha1 => - isAiResourceEntity(entity) && entity.spec?.type === 'skill'; - const ruleValidator = entityKindSchemaValidator(ruleJsonSchema); /** @@ -150,16 +138,6 @@ export const ruleAiResourceEntityV1alpha1Validator: KindValidator = { }, }; -/** - * Type guard for {@link RuleAiResourceEntityV1alpha1}. - * - * @alpha - */ -export const isRuleAiResourceEntity = ( - entity: Entity, -): entity is RuleAiResourceEntityV1alpha1 => - isAiResourceEntity(entity) && entity.spec?.type === 'rule'; - const baseRelationFields = [ { selector: { path: 'spec.owner' },