fumadocs-openapi 6.0.7 → 6.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/render/operation.d.ts.map +1 -1
- package/dist/render/operation.js +24 -29
- package/dist/render/schema.js +10 -4
- package/dist/requests/python.js +1 -1
- package/dist/ui/index.js +2 -2
- package/dist/utils/generate-sample.d.ts +6 -7
- package/dist/utils/generate-sample.d.ts.map +1 -1
- package/dist/utils/generate-sample.js +20 -28
- package/dist/utils/input-to-string.d.ts +1 -1
- package/dist/utils/input-to-string.d.ts.map +1 -1
- package/dist/utils/input-to-string.js +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operation.d.ts","sourceRoot":"","sources":["../../src/render/operation.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,YAAY,EAAkB,MAAM,OAAO,CAAC;AACpE,OAAO,EAAkB,KAAK,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9E,OAAO,KAAK,EAEV,iBAAiB,EAEjB,aAAa,EAEd,MAAM,SAAS,CAAC;AAYjB,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EACF,MAAM,GACN,CAAC,CAAC,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC,GACtE,KAAK,CAAC;CACX;
|
|
1
|
+
{"version":3,"file":"operation.d.ts","sourceRoot":"","sources":["../../src/render/operation.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,YAAY,EAAkB,MAAM,OAAO,CAAC;AACpE,OAAO,EAAkB,KAAK,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9E,OAAO,KAAK,EAEV,iBAAiB,EAEjB,aAAa,EAEd,MAAM,SAAS,CAAC;AAYjB,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EACF,MAAM,GACN,CAAC,CAAC,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC,GACtE,KAAK,CAAC;CACX;AASD,wBAAgB,SAAS,CAAC,EACxB,IAAkB,EAClB,IAAI,EACJ,MAAM,EACN,GAAG,EACH,OAAO,EACP,YAAgB,GACjB,EAAE;IACD,IAAI,CAAC,EAAE,SAAS,GAAG,WAAW,CAAC;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,iBAAiB,CAAC;IAC1B,GAAG,EAAE,aAAa,CAAC;IAEnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GAAG,YAAY,CAkLf"}
|
package/dist/render/operation.js
CHANGED
|
@@ -11,6 +11,12 @@ import { createMethod } from '../server/create-method.js';
|
|
|
11
11
|
import { methodKeys } from '../build-routes.js';
|
|
12
12
|
import { APIExample } from '../render/operation/api-example.js';
|
|
13
13
|
import { MethodLabel } from '../ui/components/method-label.js';
|
|
14
|
+
const ParamTypes = {
|
|
15
|
+
path: 'Path Parameters',
|
|
16
|
+
query: 'Query Parameters',
|
|
17
|
+
header: 'Header Parameters',
|
|
18
|
+
cookie: 'Cookie Parameters',
|
|
19
|
+
};
|
|
14
20
|
export function Operation({ type = 'operation', path, method, ctx, hasHead, headingLevel = 2, }) {
|
|
15
21
|
const body = method.requestBody;
|
|
16
22
|
const security = method.security ?? ctx.schema.document.security;
|
|
@@ -54,39 +60,28 @@ export function Operation({ type = 'operation', path, method, ctx, hasHead, head
|
|
|
54
60
|
} })] }, status));
|
|
55
61
|
})] }));
|
|
56
62
|
}
|
|
57
|
-
const parameterGroups = new Map();
|
|
58
63
|
const endpoint = generateSample(path, method, ctx);
|
|
59
|
-
|
|
60
|
-
const
|
|
61
|
-
if (
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
parseObject: false,
|
|
77
|
-
readOnly: method.method === 'GET',
|
|
78
|
-
writeOnly: method.method !== 'GET',
|
|
79
|
-
required: param.required ?? false,
|
|
80
|
-
render: ctx,
|
|
81
|
-
} }, param.name));
|
|
82
|
-
parameterGroups.set(groupName, group);
|
|
83
|
-
}
|
|
64
|
+
const parameterNode = Object.entries(ParamTypes).map(([type, title]) => {
|
|
65
|
+
const params = endpoint.parameters.filter((param) => param.in === type && !param.isAuthOnly);
|
|
66
|
+
if (params.length === 0)
|
|
67
|
+
return;
|
|
68
|
+
return (_jsxs(Fragment, { children: [heading(headingLevel, title, ctx), _jsx("div", { className: "flex flex-col gap-4", children: params.map((param) => (_jsx(Schema, { name: param.name, schema: {
|
|
69
|
+
...param.schema,
|
|
70
|
+
description: param.description ?? param.schema?.description,
|
|
71
|
+
deprecated: (param.deprecated ?? false) ||
|
|
72
|
+
(param.schema?.deprecated ?? false),
|
|
73
|
+
}, ctx: {
|
|
74
|
+
parseObject: false,
|
|
75
|
+
readOnly: method.method === 'GET',
|
|
76
|
+
writeOnly: method.method !== 'GET',
|
|
77
|
+
required: param.required ?? false,
|
|
78
|
+
render: ctx,
|
|
79
|
+
} }, param.name))) })] }, type));
|
|
80
|
+
});
|
|
84
81
|
if (method.callbacks) {
|
|
85
82
|
callbacksNode = (_jsxs(_Fragment, { children: [heading(headingLevel, 'Webhooks', ctx), Object.entries(method.callbacks).map(([name, callback]) => (_jsx(WebhookCallback, { callback: callback, ctx: ctx, headingLevel: headingLevel }, name)))] }));
|
|
86
83
|
}
|
|
87
|
-
const info = (_jsxs(ctx.renderer.APIInfo, { head: headNode, method: method.method, route: path, children: [type === 'operation' ? (ctx.disablePlayground ? (_jsxs("div", { className: "flex flex-row items-center gap-2.5 p-3 rounded-xl border bg-fd-card text-fd-card-foreground not-prose", children: [_jsx(MethodLabel, { className: "text-xs", children: method.method }), _jsx("code", { className: "flex-1 overflow-auto text-nowrap text-[13px] text-fd-muted-foreground", children: path })] })) : (_jsx(ctx.renderer.APIPlayground, { path: path, method: method, ctx: ctx }))) : null, security && Object.keys(security).length > 0 ? (_jsxs(_Fragment, { children: [heading(headingLevel, 'Authorization', ctx), _jsx(AuthSection, { requirements: security, ctx: ctx })] })) : null, bodyNode,
|
|
88
|
-
return (_jsxs(Fragment, { children: [heading(headingLevel, group, ctx), params] }, group));
|
|
89
|
-
}), responseNode, callbacksNode] }));
|
|
84
|
+
const info = (_jsxs(ctx.renderer.APIInfo, { head: headNode, method: method.method, route: path, children: [type === 'operation' ? (ctx.disablePlayground ? (_jsxs("div", { className: "flex flex-row items-center gap-2.5 p-3 rounded-xl border bg-fd-card text-fd-card-foreground not-prose", children: [_jsx(MethodLabel, { className: "text-xs", children: method.method }), _jsx("code", { className: "flex-1 overflow-auto text-nowrap text-[13px] text-fd-muted-foreground", children: path })] })) : (_jsx(ctx.renderer.APIPlayground, { path: path, method: method, ctx: ctx }))) : null, security && Object.keys(security).length > 0 ? (_jsxs(_Fragment, { children: [heading(headingLevel, 'Authorization', ctx), _jsx(AuthSection, { requirements: security, ctx: ctx })] })) : null, bodyNode, parameterNode, responseNode, callbacksNode] }));
|
|
90
85
|
if (type === 'operation') {
|
|
91
86
|
return (_jsxs(ctx.renderer.API, { children: [info, _jsx(APIExample, { method: method, endpoint: endpoint, ctx: ctx })] }));
|
|
92
87
|
}
|
package/dist/render/schema.js
CHANGED
|
@@ -54,7 +54,7 @@ export function Schema({ name, schema, ctx, }) {
|
|
|
54
54
|
if (schema.allOf && parseObject) {
|
|
55
55
|
return (_jsx(Schema, { name: name, schema: combineSchema(schema.allOf), ctx: ctx }));
|
|
56
56
|
}
|
|
57
|
-
let footer
|
|
57
|
+
let footer;
|
|
58
58
|
const fields = [];
|
|
59
59
|
for (const [key, value] of Object.entries(keys)) {
|
|
60
60
|
if (key in schema) {
|
|
@@ -130,10 +130,16 @@ function getSchemaType(schema, ctx, isRoot = true) {
|
|
|
130
130
|
if (schema.not)
|
|
131
131
|
return `not ${getSchemaType(schema.not, ctx, false)}`;
|
|
132
132
|
if (schema.anyOf) {
|
|
133
|
-
|
|
133
|
+
const properties = schema.anyOf
|
|
134
134
|
.map((one) => getSchemaType(one, ctx, false))
|
|
135
|
-
.filter((v) => v !== 'unknown')
|
|
136
|
-
|
|
135
|
+
.filter((v) => v !== 'unknown');
|
|
136
|
+
if (properties.length > 1) {
|
|
137
|
+
return `Any properties in ${properties.join(',')}`;
|
|
138
|
+
}
|
|
139
|
+
else if (properties.length === 1) {
|
|
140
|
+
return properties[0];
|
|
141
|
+
}
|
|
142
|
+
// otherwise unknown
|
|
137
143
|
}
|
|
138
144
|
if (schema.type === 'string' && schema.format === 'binary' && ctx.allowFile)
|
|
139
145
|
return 'file';
|
package/dist/requests/python.js
CHANGED
|
@@ -20,7 +20,7 @@ export function getSampleRequest(endpoint, sampleKey) {
|
|
|
20
20
|
break;
|
|
21
21
|
default:
|
|
22
22
|
headers.set('Content-Type', endpoint.body.mediaType);
|
|
23
|
-
variables.set('data', inputToString(endpoint.body.samples[sampleKey]?.value ?? '', endpoint.body.mediaType, '
|
|
23
|
+
variables.set('data', inputToString(endpoint.body.samples[sampleKey]?.value ?? '', endpoint.body.mediaType, 'python'));
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
26
|
if (headers.size > 0) {
|
package/dist/ui/index.js
CHANGED
|
@@ -17,10 +17,10 @@ export function API({ children, ...props }) {
|
|
|
17
17
|
}, children: children }));
|
|
18
18
|
}
|
|
19
19
|
export function Property({ name, type, required, deprecated, children, }) {
|
|
20
|
-
return (_jsxs("div", { className: "rounded-xl border bg-fd-card p-3 prose-no-margin", children: [_jsxs("div", { className: "flex flex-row flex-wrap items-center gap-4", children: [_jsx("code", { children: name }), required ? (_jsx(Badge, { color: "red", className: "text-xs", children: "Required" })) : null, deprecated ? (_jsx(Badge, { color: "yellow", className: "text-xs", children: "Deprecated" })) : null, _jsx("span", { className: "ms-auto text-xs font-mono text-fd-muted-foreground", children: type })] }), children] }));
|
|
20
|
+
return (_jsxs("div", { className: "rounded-xl border bg-fd-card p-3 prose-no-margin", children: [_jsxs("div", { className: "flex flex-row flex-wrap items-center gap-4 mb-2", children: [_jsx("code", { children: name }), required ? (_jsx(Badge, { color: "red", className: "text-xs", children: "Required" })) : null, deprecated ? (_jsx(Badge, { color: "yellow", className: "text-xs", children: "Deprecated" })) : null, _jsx("span", { className: "ms-auto text-xs font-mono text-fd-muted-foreground", children: type })] }), children] }));
|
|
21
21
|
}
|
|
22
22
|
export function APIExample(props) {
|
|
23
|
-
return (_jsx("div", { ...props, className: cn('prose-no-margin md:sticky md:top-
|
|
23
|
+
return (_jsx("div", { ...props, className: cn('prose-no-margin md:sticky md:top-(--fd-api-info-top) xl:w-[400px]', props.className), children: props.children }));
|
|
24
24
|
}
|
|
25
25
|
export function ObjectCollapsible(props) {
|
|
26
26
|
return (_jsxs(Collapsible, { ...props, children: [_jsxs(CollapsibleTrigger, { className: cn(buttonVariants({ color: 'outline', size: 'sm' }), 'group rounded-full px-2 py-1.5 text-fd-muted-foreground'), children: [props.name, _jsx(ChevronDown, { className: "size-4 group-data-[state=open]:rotate-180" })] }), _jsx(CollapsibleContent, { className: "-mx-2", children: _jsx("div", { className: "flex flex-col gap-2 p-2", children: props.children }) })] }));
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { MethodInformation, RenderContext } from '../types.js';
|
|
2
|
-
import { type ParsedSchema } from '../utils/schema.js';
|
|
3
|
-
|
|
2
|
+
import { type ParsedSchema, type NoReference } from '../utils/schema.js';
|
|
3
|
+
import type { OpenAPIV3_1 } from 'openapi-types';
|
|
4
|
+
export interface Samples {
|
|
4
5
|
[key: string]: {
|
|
5
6
|
value?: unknown;
|
|
6
7
|
description?: string;
|
|
@@ -20,7 +21,7 @@ export interface EndpointSample {
|
|
|
20
21
|
body?: {
|
|
21
22
|
schema: ParsedSchema;
|
|
22
23
|
mediaType: string;
|
|
23
|
-
samples:
|
|
24
|
+
samples: Samples;
|
|
24
25
|
};
|
|
25
26
|
responses: Record<string, ResponseSample>;
|
|
26
27
|
parameters: ParameterSample[];
|
|
@@ -30,11 +31,9 @@ interface ResponseSample {
|
|
|
30
31
|
sample: unknown;
|
|
31
32
|
schema: ParsedSchema;
|
|
32
33
|
}
|
|
33
|
-
interface ParameterSample {
|
|
34
|
-
name: string;
|
|
35
|
-
in: string;
|
|
36
|
-
schema: ParsedSchema;
|
|
34
|
+
interface ParameterSample extends NoReference<OpenAPIV3_1.ParameterObject> {
|
|
37
35
|
sample: unknown;
|
|
36
|
+
isAuthOnly: boolean;
|
|
38
37
|
}
|
|
39
38
|
export declare function generateSample(path: string, method: MethodInformation, { baseUrl, schema: { document } }: RenderContext): EndpointSample;
|
|
40
39
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-sample.d.ts","sourceRoot":"","sources":["../../src/utils/generate-sample.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAEL,KAAK,YAAY,
|
|
1
|
+
{"version":3,"file":"generate-sample.d.ts","sourceRoot":"","sources":["../../src/utils/generate-sample.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,WAAW,EACjB,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,MAAM,WAAW,OAAO;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG;QACb,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;CACH;AACD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE;QACL,MAAM,EAAE,YAAY,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,OAAO,CAAC;KAClB,CAAC;IACF,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC1C,UAAU,EAAE,eAAe,EAAE,CAAC;CAC/B;AAED,UAAU,cAAc;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,YAAY,CAAC;CACtB;AAED,UAAU,eAAgB,SAAQ,WAAW,CAAC,WAAW,CAAC,eAAe,CAAC;IACxE,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,iBAAiB,EACzB,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,aAAa,GAC/C,cAAc,CAsHhB"}
|
|
@@ -5,31 +5,27 @@ export function generateSample(path, method, { baseUrl, schema: { document } })
|
|
|
5
5
|
const params = [];
|
|
6
6
|
const responses = {};
|
|
7
7
|
for (const param of method.parameters ?? []) {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
if (param.schema.type && param.schema.type === value) {
|
|
11
|
-
// if no example is defined make sure its visible that there is still a placeholder, equal to auth <token>
|
|
12
|
-
value = `<${value}>`;
|
|
13
|
-
}
|
|
14
|
-
params.push({
|
|
15
|
-
name: param.name,
|
|
16
|
-
in: param.in,
|
|
17
|
-
schema: param.schema,
|
|
18
|
-
sample: value,
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
else if (param.content) {
|
|
8
|
+
let schema = param.schema, value;
|
|
9
|
+
if (!schema && param.content) {
|
|
22
10
|
const key = getPreferredType(param.content);
|
|
23
11
|
const content = key ? param.content[key] : undefined;
|
|
24
|
-
if (!
|
|
12
|
+
if (!content)
|
|
25
13
|
throw new Error(`Cannot find parameter schema for ${param.name} in ${path} ${method.method}`);
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
});
|
|
14
|
+
schema = content.schema;
|
|
15
|
+
value = content.example ?? param.example ?? sample(schema);
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
value = param.example ?? sample(schema);
|
|
32
19
|
}
|
|
20
|
+
if (schema?.type && param.schema?.type === value) {
|
|
21
|
+
// if no example is defined make sure its visible that there is still a placeholder, equal to auth <token>
|
|
22
|
+
value = `<${value}>`;
|
|
23
|
+
}
|
|
24
|
+
params.push({
|
|
25
|
+
...param,
|
|
26
|
+
sample: value,
|
|
27
|
+
isAuthOnly: false,
|
|
28
|
+
});
|
|
33
29
|
}
|
|
34
30
|
const requirements = method.security ?? document.security;
|
|
35
31
|
if (requirements && requirements.length > 0) {
|
|
@@ -42,6 +38,7 @@ export function generateSample(path, method, { baseUrl, schema: { document } })
|
|
|
42
38
|
},
|
|
43
39
|
sample: prefix ? `${prefix} <token>` : '<token>',
|
|
44
40
|
in: 'header',
|
|
41
|
+
isAuthOnly: true,
|
|
45
42
|
});
|
|
46
43
|
}
|
|
47
44
|
}
|
|
@@ -84,15 +81,10 @@ export function generateSample(path, method, { baseUrl, schema: { document } })
|
|
|
84
81
|
let pathWithParameters = path;
|
|
85
82
|
const queryParams = new URLSearchParams();
|
|
86
83
|
for (const param of params) {
|
|
87
|
-
let value = generateBody(method.method, param.schema);
|
|
88
|
-
if (param.schema.type && param.schema.type === value) {
|
|
89
|
-
// if no example is defined make sure its visible that there is still a placeholder, equal to auth <token>
|
|
90
|
-
value = `<${value}>`;
|
|
91
|
-
}
|
|
92
84
|
if (param.in === 'query')
|
|
93
|
-
queryParams.append(param.name, String(
|
|
85
|
+
queryParams.append(param.name, String(param.sample));
|
|
94
86
|
if (param.in === 'path')
|
|
95
|
-
pathWithParameters = pathWithParameters.replace(`{${param.name}}`, String(
|
|
87
|
+
pathWithParameters = pathWithParameters.replace(`{${param.name}}`, String(param.sample));
|
|
96
88
|
}
|
|
97
89
|
if (queryParams.size > 0)
|
|
98
90
|
pathWithParameters = `${pathWithParameters}?${queryParams.toString()}`;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Convert input value to hardcoded string (with quotes)
|
|
3
3
|
*/
|
|
4
|
-
export declare function inputToString(value: unknown, mediaType?: string, multiLine?: 'single-quote' | 'backtick' | 'none'): string;
|
|
4
|
+
export declare function inputToString(value: unknown, mediaType?: string, multiLine?: 'single-quote' | 'backtick' | 'python' | 'none'): string;
|
|
5
5
|
//# sourceMappingURL=input-to-string.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input-to-string.d.ts","sourceRoot":"","sources":["../../src/utils/input-to-string.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,OAAO,EACd,SAAS,SAAqB,EAC9B,SAAS,GAAE,cAAc,GAAG,UAAU,GAAG,MAAe,
|
|
1
|
+
{"version":3,"file":"input-to-string.d.ts","sourceRoot":"","sources":["../../src/utils/input-to-string.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,OAAO,EACd,SAAS,SAAqB,EAC9B,SAAS,GAAE,cAAc,GAAG,UAAU,GAAG,QAAQ,GAAG,MAAe,GAClE,MAAM,CAwBR"}
|
|
@@ -6,7 +6,7 @@ export function inputToString(value, mediaType = 'application/json', multiLine =
|
|
|
6
6
|
const getStr = (v) => {
|
|
7
7
|
if (multiLine === 'none')
|
|
8
8
|
return JSON.stringify(v);
|
|
9
|
-
const delimit =
|
|
9
|
+
const delimit = { backtick: `\``, 'single-quote': `'`, python: `"""` }[multiLine];
|
|
10
10
|
return `${delimit}${v.replaceAll(delimit, `\\${delimit}`)}${delimit}`;
|
|
11
11
|
};
|
|
12
12
|
if (typeof value === 'string')
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fumadocs-openapi",
|
|
3
|
-
"version": "6.0.
|
|
3
|
+
"version": "6.0.9",
|
|
4
4
|
"description": "Generate MDX docs for your OpenAPI spec",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"NextJs",
|
|
@@ -57,8 +57,8 @@
|
|
|
57
57
|
"remark-rehype": "^11.1.1",
|
|
58
58
|
"shiki": "^2.3.2",
|
|
59
59
|
"xml-js": "^1.6.11",
|
|
60
|
-
"fumadocs-core": "15.0.
|
|
61
|
-
"fumadocs-ui": "15.0.
|
|
60
|
+
"fumadocs-core": "15.0.8",
|
|
61
|
+
"fumadocs-ui": "15.0.8"
|
|
62
62
|
},
|
|
63
63
|
"devDependencies": {
|
|
64
64
|
"@scalar/api-client-react": "^1.1.25",
|