refactor: extend default type and remove per-type guards

Signed-off-by: benjdlambert <ben@blam.sh>
This commit is contained in:
benjdlambert
2026-05-19 12:09:21 +02:00
parent 9c7cb8f232
commit e5671e44c0
4 changed files with 8 additions and 104 deletions
+4 -20
View File
@@ -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<boolean>;
};
// @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';
-2
View File
@@ -38,8 +38,6 @@ export {
skillAiResourceEntityV1alpha1Validator,
ruleAiResourceEntityV1alpha1Validator,
isAiResourceEntity,
isSkillAiResourceEntity,
isRuleAiResourceEntity,
aiResourceEntityModel,
} from './kinds/AiResourceEntityV1alpha1';
export * from './model';
@@ -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);
});
});
@@ -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' },