@sanity/tsdoc
Version:
Generate API reference docs from TypeScript projects and store in a Sanity-friendly JSON format. Render a static frontend, or as React components.
57 lines (46 loc) • 1.21 kB
text/typescript
import {
APIClass,
APIEnum,
APIInterface,
APIMember,
APINamespace,
SanityArrayItem,
} from '@sanity/tsdoc'
import {APIMemberWithInheritance} from './_types'
export function _getMembers(data: APIMember): SanityArrayItem<APIMemberWithInheritance>[] {
if (!('members' in data)) {
return []
}
let mems: SanityArrayItem<
| APIClass['members'][0]
| APIEnum['members'][0]
| APIInterface['members'][0]
| APINamespace['members'][0]
>[] = data.members
if ('extends' in data) {
for (const ext of data.extends) {
for (const tok of ext.type) {
const member = tok.member
if (member && 'members' in member) {
mems = mems.concat(
member.members.map((mem) => {
const m: SanityArrayItem<APIMemberWithInheritance> = {
...mem,
inheritedFrom: {name: member.name, slug: member.name},
}
return m
}),
)
}
}
}
}
mems.sort((a, b) => {
const aName = 'name' in a ? a.name : ''
const bName = 'name' in b ? b.name : ''
if (aName < bName) return -1
if (aName > bName) return 1
return 0
})
return mems
}