diff --git a/packages/docs-site/src/availability.test.ts b/packages/docs-site/src/availability.test.ts new file mode 100644 index 000000000..00c743810 --- /dev/null +++ b/packages/docs-site/src/availability.test.ts @@ -0,0 +1,16 @@ +import assert from 'node:assert/strict'; +import { test } from 'node:test'; +import { availabilityLabel } from './availability.ts'; + +test('labels every Fern endpoint availability status', () => { + assert.equal(availabilityLabel('alpha'), 'Alpha'); + assert.equal(availabilityLabel('beta'), 'Beta'); + assert.equal(availabilityLabel('preview'), 'Preview'); + assert.equal(availabilityLabel('generally-available'), 'Generally Available'); + assert.equal(availabilityLabel('deprecated'), 'Deprecated'); + assert.equal(availabilityLabel('legacy'), 'Legacy'); +}); + +test('keeps unknown statuses readable', () => { + assert.equal(availabilityLabel('custom-channel'), 'custom channel'); +}); diff --git a/packages/docs-site/src/availability.ts b/packages/docs-site/src/availability.ts new file mode 100644 index 000000000..d76963795 --- /dev/null +++ b/packages/docs-site/src/availability.ts @@ -0,0 +1,14 @@ +/** Display labels for Fern endpoint availability statuses. */ +const AVAILABILITY_LABELS: Record = { + alpha: 'Alpha', + beta: 'Beta', + preview: 'Preview', + 'generally-available': 'Generally Available', + deprecated: 'Deprecated', + legacy: 'Legacy', +}; + +/** Human label for an availability status. Unknown statuses keep their words. */ +export function availabilityLabel(status: string): string { + return AVAILABILITY_LABELS[status] ?? status.replaceAll('-', ' '); +} diff --git a/packages/docs-site/src/components/Operation.astro b/packages/docs-site/src/components/Operation.astro index 8694c3625..f6109f557 100644 --- a/packages/docs-site/src/components/Operation.astro +++ b/packages/docs-site/src/components/Operation.astro @@ -3,6 +3,7 @@ import AnchorHeading from '@astrojs/starlight/components/AnchorHeading.astro'; import { Aside } from '@astrojs/starlight/components'; import type { FernPageSchema } from 'astro-fern'; import { DEFER_THRESHOLD, nodeCount, operationView, responseSummary, topLevelNodes } from '../operation-sections.ts'; +import { availabilityLabel } from '../availability.ts'; import CodeSample from './CodeSample.astro'; import SchemaSectionIsland from './SchemaSectionIsland.astro'; import SchemaTree from './SchemaTree.astro'; @@ -36,7 +37,7 @@ const availabilityMessage = !op.deprecated ? op.availability?.message : undefine } { availabilityMessage ? ( -