@alauda/doom
Version:
Doctor Doom making docs.
62 lines (61 loc) • 2.64 kB
JavaScript
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
import crdsMap from 'doom-@api-crdsMap';
import openapisMap from 'doom-@api-openapisMap';
import { useMemo } from 'react';
import { resolveRef } from '../utils.js';
import { K8sAPIEndpoints } from './_K8sAPIEndpoints.js';
import { K8sAPISchema } from './_K8sAPISchema.js';
export const K8sAPI = ({ name, namespaced, pathPrefix, filepath, apiGroup, apiVersion, apiKind, }) => {
const [, openapi] = useMemo(() => Object.entries(openapisMap).find(([pathname, openapi]) => {
if (filepath && pathname !== filepath) {
return;
}
return resolveRef(openapi, name);
}) || [], [filepath, name]);
const [, crd] = useMemo(() => Object.entries(crdsMap).find(([pathname, crd]) => {
if (filepath && pathname !== filepath) {
return;
}
return crd.metadata.name === name;
}) || [], [filepath, name]);
const schema = useMemo(() => {
if (openapi) {
return resolveRef(openapi, name);
}
if (!crd) {
return;
}
const { versions } = crd.spec;
const v = apiVersion ?? versions[0]?.name;
const versionDef = versions.find((ver) => ver.name === v);
if (!versionDef) {
console.error(`CRD ${name} does not have version ${v}, available versions: ${versions
.map((ver) => ver.name)
.join(', ')}`);
return;
}
return versionDef.schema.openAPIV3Schema;
}, [apiVersion, crd, name, openapi]);
const k8sApiDef = useMemo(() => {
if (!schema) {
return;
}
if ('x-kubernetes-group-version-kind' in schema) {
const def = schema['x-kubernetes-group-version-kind'];
return Array.isArray(def) ? def[0] : def;
}
if (crd) {
return {
group: crd.spec.group,
version: crd.spec.versions[0].name,
kind: crd.spec.names.kind,
};
}
}, [crd, schema]);
if (!openapi && !crd) {
console.error(`No OpenAPI nor CustomResourceDefinition schema found for ${name}`);
return null;
}
return schema ? (_jsxs(_Fragment, { children: [_jsx(K8sAPISchema, { schema: schema, fullSchema: openapi }), _jsx(K8sAPIEndpoints, { hasStatus: !!schema.properties?.status, group: apiGroup ?? k8sApiDef?.group, version: apiVersion ?? k8sApiDef?.version ?? '', kind: apiKind ?? k8sApiDef?.kind ?? '', pathPrefix: pathPrefix, namespaced: namespaced })] })) : null;
};
export default K8sAPI;