mirror of
https://github.com/hanzo-docs/docs.git
synced 2026-10-25 04:20:02 +00:00
OpenAPI: Support to customise/disable TypeScript Response generation
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'fumadocs-openapi': minor
|
||||
---
|
||||
|
||||
Support to customise/disable TypeScript Response generation
|
||||
@@ -1,14 +1,17 @@
|
||||
import Parser from '@apidevtools/json-schema-ref-parser';
|
||||
import type { OpenAPIV3 as OpenAPI } from 'openapi-types';
|
||||
import { buildRoutes } from '@/build-routes';
|
||||
import type { Endpoint } from '@/endpoint';
|
||||
import { generateDocument } from '@/utils/generate-document';
|
||||
import { idToTitle } from '@/utils/id-to-title';
|
||||
import type { RenderContext } from './types';
|
||||
import { defaultRenderer, type Renderer } from './render/renderer';
|
||||
import { type CodeSample, renderOperation } from './render/operation';
|
||||
import { renderOperation } from './render/operation';
|
||||
|
||||
export interface GenerateOptions {
|
||||
export interface GenerateOptions
|
||||
extends Pick<
|
||||
RenderContext,
|
||||
'generateCodeSamples' | 'generateTypeScriptSchema'
|
||||
> {
|
||||
/**
|
||||
* The imports of your MDX components.
|
||||
*
|
||||
@@ -29,11 +32,6 @@ export interface GenerateOptions {
|
||||
description: string | undefined,
|
||||
) => Record<string, unknown>;
|
||||
|
||||
/**
|
||||
* Generate code samples for endpoint
|
||||
*/
|
||||
generateCodeSamples?: (endpoint: Endpoint) => CodeSample[];
|
||||
|
||||
renderer?: Partial<Renderer>;
|
||||
}
|
||||
|
||||
@@ -146,6 +144,8 @@ function getContext(
|
||||
...defaultRenderer,
|
||||
...options.renderer,
|
||||
},
|
||||
generateTypeScriptSchema: options.generateTypeScriptSchema,
|
||||
generateCodeSamples: options.generateCodeSamples,
|
||||
baseUrl: document.servers?.[0].url ?? 'https://example.com',
|
||||
};
|
||||
}
|
||||
|
||||
@@ -125,7 +125,7 @@ export async function renderOperation(
|
||||
source: JS.getSampleRequest(endpoint),
|
||||
lang: 'js',
|
||||
},
|
||||
...(ctx.generateCodeSamples?.(endpoint) ?? []),
|
||||
...(ctx.generateCodeSamples ? await ctx.generateCodeSamples(endpoint) : []),
|
||||
...((method as CustomProperty)['x-codeSamples'] ?? []),
|
||||
]);
|
||||
|
||||
@@ -255,21 +255,27 @@ function getResponseTable(operation: OpenAPI.OperationObject): string {
|
||||
async function getResponseTabs(
|
||||
endpoint: Endpoint,
|
||||
operation: OpenAPI.OperationObject,
|
||||
{ renderer }: RenderContext,
|
||||
{ renderer, generateTypeScriptSchema }: RenderContext,
|
||||
): Promise<string> {
|
||||
const items: string[] = [];
|
||||
const child: string[] = [];
|
||||
|
||||
for (const code of Object.keys(operation.responses)) {
|
||||
const example = getExampleResponse(endpoint, code);
|
||||
const ts = await getTypescriptSchema(endpoint, code);
|
||||
let ts: string | undefined;
|
||||
|
||||
if (generateTypeScriptSchema) {
|
||||
ts = await generateTypeScriptSchema(endpoint, code);
|
||||
} else if (generateTypeScriptSchema === undefined) {
|
||||
ts = await getTypescriptSchema(endpoint, code);
|
||||
}
|
||||
|
||||
const description =
|
||||
code in endpoint.responses
|
||||
? endpoint.responses[code].schema.description
|
||||
: undefined;
|
||||
|
||||
if (example && ts) {
|
||||
if (example) {
|
||||
items.push(code);
|
||||
|
||||
child.push(
|
||||
@@ -277,7 +283,7 @@ async function getResponseTabs(
|
||||
p(description),
|
||||
renderer.ResponseTypes([
|
||||
renderer.ExampleResponse(example),
|
||||
renderer.TypeScriptResponse(ts),
|
||||
...(ts ? [renderer.TypeScriptResponse(ts)] : []),
|
||||
]),
|
||||
]),
|
||||
);
|
||||
|
||||
@@ -15,9 +15,27 @@ export interface MethodInformation extends OpenAPI.OperationObject {
|
||||
method: string;
|
||||
}
|
||||
|
||||
type Awaitable<T> = T | Promise<T>;
|
||||
|
||||
export interface RenderContext {
|
||||
renderer: Renderer;
|
||||
document: OpenAPI.Document;
|
||||
baseUrl: string;
|
||||
generateCodeSamples?: (endpoint: Endpoint) => CodeSample[];
|
||||
|
||||
/**
|
||||
* Generate TypeScript definitions from response schema.
|
||||
*
|
||||
* Pass `false` to disable it.
|
||||
*
|
||||
* @param endpoint - the API endpoint
|
||||
* @param code - status code
|
||||
*/
|
||||
generateTypeScriptSchema?:
|
||||
| ((endpoint: Endpoint, code: string) => Awaitable<string>)
|
||||
| false;
|
||||
|
||||
/**
|
||||
* Generate code samples for endpoint.
|
||||
*/
|
||||
generateCodeSamples?: (endpoint: Endpoint) => Awaitable<CodeSample[]>;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user