UNPKG

@alauda/doom

Version:

Doctor Doom making docs.

62 lines (61 loc) 2.64 kB
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;