Provisioning: Refactor createOnCacheEntryAdded (#105228)

* Provisioning: Refactor createOnCacheEntryAdded

* Use custom list resource type

* add generated types and transformers

* Switch to type guards

* Do not create new array
This commit is contained in:
Alex Khomenko
2025-05-19 13:23:23 +03:00
committed by GitHub
parent c58ac15031
commit 15c903fa5c
4 changed files with 52 additions and 30 deletions

View File

@ -0,0 +1,26 @@
import { Resource, ResourceList, GeneratedResource, GeneratedResourceList } from './types';
/**
* Type guard to check if a GeneratedResource has all required fields to be a Resource
*/
export function isResource<T = object, S = object, K = string>(
generated: GeneratedResource<T, S, K>
): generated is Resource<T, S, K> {
return (
!!generated.apiVersion &&
!!generated.kind &&
!!generated.metadata?.name &&
!!generated.metadata?.resourceVersion &&
!!generated.metadata?.creationTimestamp &&
!!generated.spec
);
}
/**
* Type guard to check if a GeneratedResourceList has all required fields to be a ResourceList
*/
export function isResourceList<T = object, S = object, K = string>(
generatedList: GeneratedResourceList<T, S, K>
): generatedList is ResourceList<T, S, K> {
return !!generatedList.metadata?.resourceVersion && Array.isArray(generatedList.items);
}

View File

@ -257,3 +257,18 @@ export interface K8sAPIGroupList {
kind: 'APIGroupList';
groups: K8sAPIGroup[];
}
/**
* Generic types to match the generated k8s API types in the RTK query clients
*/
export interface GeneratedObjectMeta extends Partial<ObjectMeta> {}
export interface GeneratedResource<T = object, S = object, K = string> extends Partial<TypeMeta<K>> {
metadata?: GeneratedObjectMeta;
spec?: T;
status?: S;
}
export interface GeneratedResourceList<Spec, Status, K = string> {
metadata?: Partial<ListMeta>;
items?: Array<GeneratedResource<Spec, Status, K>>;
}