mirror of
https://github.com/GitbookIO/gitbook.git
synced 2026-09-16 23:55:20 +00:00
85ec1884e6
* Start methods to resolve refs * bun * Start package * Add code to resolve ref * Continue * Deref * Start monorepo * Continue * Fix ref resolver * Style a bit more * Start toggling section * Continue * Start displaying query/path/headers params * Hide respo se if empty * Fix recursive refs * Simplify interactive and styling * Display enums * Format * Improve type name being displayed * Improve naming * Render oneOf/anyOf/allOf * Handle circular references * Start variable in server url * Use client component for the spec part * Improve CSS sizing * Display open api blocks in aside * Make aside an overlay * Improve stickiness of openapi * Align document on the left when api page * Improve general layout * Better align * Fix padding in aside * Use syntax highlighting * Show sample of response * Improve code generation * Improve code generated * Format * Format * Rename to OpenAPI * Skip deprecated properties and handle additionalProperties * Use discriminator for naming * Better name enum * Make entire header toggeable * Format and lint * Add curl example * Improve curl * style pass * Start securities * Bun * Fix TS * Improve label * Start markdown * Improve code samples * Test * Use custom skeleton for api block * Format * Add support for redocly code samples * Fix api blocks in aside * Use typography for markdown * Format * Fix spacing in markdown * Render headers * Format * Format --------- Co-authored-by: Sebastian Graz <graz@live.se>
66 lines
1.9 KiB
TypeScript
66 lines
1.9 KiB
TypeScript
import { OpenAPIV3 } from 'openapi-types';
|
|
import { OpenAPIServerURLVariable } from './OpenAPIServerURLVariable';
|
|
|
|
/**
|
|
* Show the url of the server with variables replaced by their default values.
|
|
*/
|
|
export function OpenAPIServerURL(props: { servers: OpenAPIV3.ServerObject[] }) {
|
|
const { servers } = props;
|
|
const server = servers[0];
|
|
|
|
const parts = parseServerURL(server?.url ?? '');
|
|
|
|
return (
|
|
<span>
|
|
{parts.map((part, i) => {
|
|
if (part.kind === 'text') {
|
|
return <span key={i}>{part.text}</span>;
|
|
} else {
|
|
if (!server.variables?.[part.name]) {
|
|
return <span key={i}>{`{${part.name}}`}</span>;
|
|
}
|
|
|
|
return (
|
|
<OpenAPIServerURLVariable
|
|
key={i}
|
|
name={part.name}
|
|
variable={server.variables[part.name]}
|
|
/>
|
|
);
|
|
}
|
|
})}
|
|
</span>
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Get the default URL for the server.
|
|
*/
|
|
export function getServersURL(servers: OpenAPIV3.ServerObject[]): string {
|
|
const server = servers[0];
|
|
const parts = parseServerURL(server?.url ?? '');
|
|
|
|
return parts
|
|
.map((part) => {
|
|
if (part.kind === 'text') {
|
|
return part.text;
|
|
} else {
|
|
return server.variables?.[part.name]?.default ?? `{${part.name}}`;
|
|
}
|
|
})
|
|
.join('');
|
|
}
|
|
|
|
function parseServerURL(url: string) {
|
|
const parts = url.split(/{([^}]+)}/g);
|
|
const result: Array<{ kind: 'variable'; name: string } | { kind: 'text'; text: string }> = [];
|
|
for (let i = 0; i < parts.length; i++) {
|
|
if (i % 2 === 0) {
|
|
result.push({ kind: 'text', text: parts[i] });
|
|
} else {
|
|
result.push({ kind: 'variable', name: parts[i] });
|
|
}
|
|
}
|
|
return result;
|
|
}
|