Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/shaggy-bees-sort.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@alauda/doom": patch
---

fix: $ref compatibility
5 changes: 5 additions & 0 deletions docs/zh/apis/advanced-apis/workload/daemonset.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,8 @@
path="/apis/apps/v1/daemonsets"
pathPrefix="/kubernetes/{cluster}"
/>

<OpenAPIPath
path="/apis/apps/v1/namespaces/{namespace}/daemonsets/{name}"
pathPrefix="/kubernetes/{cluster}"
/>
3 changes: 3 additions & 0 deletions docs/zh/apis/references/DaemonSet.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# DaemonSet

<OpenAPIRef schema="io.k8s.api.apps.v1.DaemonSet" />
3 changes: 3 additions & 0 deletions docs/zh/apis/references/Deployment.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Deployment

<OpenAPIRef schema="io.k8s.api.apps.v1.Deployment" />
11 changes: 10 additions & 1 deletion doom.config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,16 @@ api:
openapis:
- docs/shared/openapis/*.json
references:
v1alpha1.CodeQualityBranch: /apis/references/CodeQualityBranch#CodeQualityBranch
v1alpha1.CodeQualityBranch: /apis/references/CodeQualityBranch#v1alpha1.CodeQualityBranch
io.k8s.api.apps.v1.DaemonSet: /apis/references/DaemonSet#io.k8s.api.apps.v1.DaemonSet
io.k8s.api.apps.v1.Deployment: /apis/references/Deployment#io.k8s.api.apps.v1.Deployment
io.k8s.api.core.v1.ObjectFieldSelector: https://kubernetes.io/docs/reference/kubernetes-api/common-definitions/object-field-selector/
io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions: https://kubernetes.io/docs/reference/kubernetes-api/common-definitions/delete-options/
io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector: https://kubernetes.io/docs/reference/kubernetes-api/common-definitions/label-selector/
io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta: https://kubernetes.io/docs/reference/kubernetes-api/common-definitions/list-meta/
io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta: https://kubernetes.io/docs/reference/kubernetes-api/common-definitions/object-meta/
io.k8s.apimachinery.pkg.apis.meta.v1.Patch: https://kubernetes.io/docs/reference/kubernetes-api/common-definitions/patch/
io.k8s.apimachinery.pkg.apis.meta.v1.Status: https://kubernetes.io/docs/reference/kubernetes-api/common-definitions/status/
permission:
functionresources:
- docs/shared/functionresources/*.yaml
Expand Down
84 changes: 60 additions & 24 deletions packages/doom/src/runtime/components/OpenAPIRef.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,21 @@ export interface OpenAPIRefProps {
collectRefs?: boolean
}

export const get$Ref = (
obj: OpenAPIV3_1.ReferenceObject | OpenAPIV3_1.SchemaObject,
) => {
if ('$ref' in obj && obj.$ref) {
return obj.$ref
}
if ('allOf' in obj && Array.isArray(obj.allOf)) {
for (const item of obj.allOf) {
if ('$ref' in item && item.$ref) {
return item.$ref
}
}
}
}

export const OpenAPIProperty = ({
name,
property,
Expand All @@ -43,53 +58,74 @@ export const OpenAPIProperty = ({
property: OpenAPIV3_1.ReferenceObject | OpenAPIV3_1.SchemaObject
openapi: OpenAPIV3_1.Document
}) => {
const propObj =
'$ref' in property ? resolveRef(openapi, property.$ref) : property
const prop$Ref = get$Ref(property)

const propObj = prop$Ref
? resolveRef(openapi, prop$Ref)
: (property as OpenAPIV3_1.SchemaObject)

const type = propObj.type

let typeNode: ReactNode
let extraNode: ReactNode

if (type === 'array') {
const { items } = propObj
const itemsObj = '$ref' in items ? resolveRef(openapi, items.$ref) : items
const items$Ref = get$Ref(items)
const itemsObj = items$Ref
? resolveRef(openapi, items$Ref)
: (items as OpenAPIV3_1.SchemaObject)
const itemsType = itemsObj.type
typeNode = (
<code>
[]
{'$ref' in items ? <RefLink $ref={items.$ref} /> : itemsType}
{items$Ref ? <RefLink $ref={items$Ref} /> : itemsType}
</code>
)
} else if (type === 'object') {
if ('properties' in property && property.properties) {
extraNode = (
<div className="my-4">
<em>Properties:</em>
<OpenAPIProperties
properties={property.properties}
openapi={openapi}
/>
</div>
)
if (prop$Ref) {
typeNode = <RefLink $ref={prop$Ref} />
}

if (typeof propObj.additionalProperties === 'object') {
const props = propObj.additionalProperties
const propsObj = '$ref' in props ? resolveRef(openapi, props.$ref) : props
const props$Ref = get$Ref(props)
const propsObj = props$Ref
? resolveRef(openapi, props$Ref)
: (props as OpenAPIV3_1.SchemaObject)
const propsType = propsObj.type
typeNode = (
<code>
map[string]
{typeof propsType === 'string'
? propsType
: '$ref' in props && <RefLink $ref={props.$ref} />}
</code>
<>
{typeNode}
<code>
map[string]
{typeof propsType === 'string'
? propsType
: props$Ref && <RefLink $ref={props$Ref} />}
</code>
</>
)
} else {

if ('properties' in property && property.properties) {
extraNode = (
<div className="my-4">
<em>Properties:</em>
<OpenAPIProperties
properties={property.properties}
openapi={openapi}
/>
</div>
)
}
} else if (!prop$Ref) {
typeNode = <code>{type}</code>
}
} else if (typeof type === 'string') {
typeNode = <code>{type}</code>
} else if ('$ref' in property) {
typeNode = <RefLink $ref={property.$ref} />
} else if (prop$Ref) {
typeNode = <RefLink $ref={prop$Ref} />
}

return (
<>
{name && (
Expand Down
7 changes: 4 additions & 3 deletions packages/doom/src/runtime/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,12 @@ export const resolveRef = <
}

const DEFAULT_COMMON_REFS = {
'v1alpha1.ListMeta': 'common-definitions/list-meta/#ListMeta',
'v1.ObjectMeta': 'common-definitions/object-meta/#ObjectMeta',
'v1alpha1.ListMeta': 'list-meta/',
'v1.ObjectMeta': 'object-meta/',
}

const K8S_DOC_PREFIX = 'https://kubernetes.io/docs/reference/kubernetes-api/'
const K8S_DOC_PREFIX =
'https://kubernetes.io/docs/reference/kubernetes-api/common-definitions/'

export const COMMON_REFS = {
...Object.fromEntries(
Expand Down
Loading