UNPKG

@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.

55 lines (45 loc) 1.68 kB
import {ApiEnum, ApiEnumMember, ApiItem} from '@microsoft/api-extractor-model' import {SanityArrayItem} from '../_lib/sanity' import {APIEnumMember, SerializedAPIEnum} from '../types' import {RELEASE_TAGS} from './constants' import {_hash, _slugify} from './helpers' import {_transformDocComment} from './transformDocComment' import {TransformContext} from './types' /** * @internal */ export function _transformEnum(ctx: TransformContext, node: ApiEnum): SerializedAPIEnum { if (!ctx.export) { throw new Error('transformEnum: missing `export` document') } if (!ctx.package) { throw new Error('transformEnum: missing `package` document') } if (!ctx.release) { throw new Error('transformEnum: missing `release` document') } const docComment = node.tsdocComment return { _type: 'api.enum', comment: docComment ? _transformDocComment(docComment) : undefined, export: {_type: 'reference', _ref: ctx.export._id}, members: node.members.map((m) => _transformEnumMember(ctx, m)), name: node.name, package: {_type: 'reference', _ref: ctx.package._id}, release: {_type: 'reference', _ref: ctx.release._id}, releaseTag: RELEASE_TAGS[node.releaseTag], slug: {_type: 'slug', current: _slugify(node.name)}, } } function _transformEnumMember(_ctx: TransformContext, m: ApiItem): SanityArrayItem<APIEnumMember> { if (m.kind === 'EnumMember') { const node = m as ApiEnumMember return { _type: 'api.enumMember', _key: _hash(node.canonicalReference.toString()), name: node.name, releaseTag: RELEASE_TAGS[node.releaseTag], } } throw new Error(`Unknown enum member kind: ${m.kind}`) }