@openshift-console/dynamic-plugin-sdk
Version:
Provides core APIs, types and utilities used by dynamic plugins at runtime.
86 lines (85 loc) • 4.17 kB
JavaScript
/**
* @deprecated - This will become obsolete when we move away from K8sResourceKindReference to K8sGroupVersionKind
* Provides a reference string that uniquely identifies the group, version, and kind of a k8s resource.
* @param K8sGroupVersionKind Pass K8sGroupVersionKind which will have group, version, and kind of a k8s resource.
* @param K8sGroupVersionKind.group Pass group of k8s resource or model.
* @param K8sGroupVersionKind.version Pass version of k8s resource or model.
* @param K8sGroupVersionKind.kind Pass kind of k8s resource or model.
* @returns The reference for any k8s resource i.e `group~version~kind`.
* If the group will not be present then "core" will be returned as part of the group in reference.
*/
export const getReference = ({ group, version, kind, }) => [group || 'core', version, kind].join('~');
/**
* @deprecated - This will become obsolete when we move away from K8sResourceKindReference to K8sGroupVersionKind
* @see getGroupVersionKindForModel
* Provides a reference string that uniquely identifies the group, version, and kind of a k8s model.
* @param model k8s model
* @returns The reference for model i.e `group~version~kind`.
*/
export const getReferenceForModel = (model) => getReference({ group: model.apiGroup, version: model.apiVersion, kind: model.kind });
/**
* Provides `apiVersion` for a Kubernetes model.
* @param model Kubernetes model
* @returns The apiVersion for the model i.e `group/version`.
* */
export const getAPIVersionForModel = (model) => !model?.apiGroup ? model.apiVersion : `${model.apiGroup}/${model.apiVersion}`;
/**
* Provides a group, version, and kind for a resource.
* @param resource Kubernetes resource
* @returns The group, version, kind for the provided resource.
* If the resource does not have an API group, the group `core` is returned.
* If the resource has an invalid apiVersion then it'll throw Error.
* */
export const getGroupVersionKindForResource = (resource) => {
const apiVersion = resource?.apiVersion;
const kind = resource?.kind;
const apiVersionSplit = apiVersion?.split('/');
const apiVersionSplitLen = apiVersionSplit?.length;
if (apiVersionSplitLen > 2)
throw new Error('Provided resource has invalid apiVersion.');
return !apiVersion || !kind
? undefined
: {
...(apiVersionSplitLen === 2 && {
group: apiVersionSplit[0],
}),
version: apiVersionSplitLen === 2 ? apiVersionSplit[1] : resource?.apiVersion,
kind,
};
};
/**
* Provides a group, version, and kind for a k8s model.
* @param model Kubernetes model
* @returns The group, version, kind for the provided model.
* If the model does not have an apiGroup, group `core` will be returned.
* */
export const getGroupVersionKindForModel = ({ apiGroup, apiVersion: version, kind, }) => ({
...(apiGroup && { group: apiGroup }),
version,
kind,
});
/**
* @deprecated - This will become obsolete when we move away from K8sResourceKindReference to K8sGroupVersionKind
* Provides a group, version, and kind for a reference.
* @param reference reference for group, version, kind i.e `group~version~kind`.
* @returns The group, version, kind for the provided reference.
* If the group's value is "core" it denotes resource does not have an API group.
* */
export const getGroupVersionKindForReference = (reference) => {
const referenceSplit = reference.split('~');
if (referenceSplit.length > 3)
throw new Error('Provided reference is invalid.');
const [group, version, kind] = referenceSplit;
return {
group,
version,
kind,
};
};
/**
* @deprecated - This will become obsolete when we move away from K8sResourceKindReference to K8sGroupVersionKind
* Provides a reference string that uniquely identifies the group, version, and kind of K8sGroupVersionKind.
* @param kind kind can be of type K8sResourceKindReference or K8sGroupVersionKind
* @returns The reference i.e `group~version~kind`.
*/
export const transformGroupVersionKindToReference = (kind) => kind && typeof kind !== 'string' ? getReference(kind) : kind;