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.
@@ -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;AAED,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,CA6Lf"}
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"}
@@ -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
- for (const param of method.parameters ?? []) {
60
- const pInfo = endpoint.parameters.find((item) => item.name === param.name && item.in === param.in);
61
- if (!pInfo)
62
- continue;
63
- const schema = pInfo.schema;
64
- const groupName = {
65
- path: 'Path Parameters',
66
- query: 'Query Parameters',
67
- header: 'Header Parameters',
68
- cookie: 'Cookie Parameters',
69
- }[param.in] ?? 'Other Parameters';
70
- const group = parameterGroups.get(groupName) ?? [];
71
- group.push(_jsx(Schema, { name: param.name, schema: {
72
- ...schema,
73
- description: param.description ?? schema.description,
74
- deprecated: (param.deprecated ?? false) || (schema.deprecated ?? false),
75
- }, ctx: {
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, Array.from(parameterGroups.entries()).map(([group, params]) => {
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
  }
@@ -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 = null;
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
- return `Any properties in ${schema.anyOf
133
+ const properties = schema.anyOf
134
134
  .map((one) => getSchemaType(one, ctx, false))
135
- .filter((v) => v !== 'unknown')
136
- .join(', ')}`;
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';
@@ -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, 'backtick'));
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-[var(--fd-api-info-top)] xl:w-[400px]', props.className), children: props.children }));
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
- export interface EndpointSamples {
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: EndpointSamples;
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,EAElB,MAAM,gBAAgB,CAAC;AAExB,MAAM,WAAW,eAAe;IAC9B,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,eAAe,CAAC;KAC1B,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,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;CACjB;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,CA0HhB"}
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
- if (param.schema) {
9
- let value = param.example ?? sample(param.schema);
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 (!key || !content)
12
+ if (!content)
25
13
  throw new Error(`Cannot find parameter schema for ${param.name} in ${path} ${method.method}`);
26
- params.push({
27
- name: param.name,
28
- in: param.in,
29
- schema: content.schema ?? {},
30
- sample: content.example ?? param.example ?? sample(content.schema),
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(value));
85
+ queryParams.append(param.name, String(param.sample));
94
86
  if (param.in === 'path')
95
- pathWithParameters = pathWithParameters.replace(`{${param.name}}`, String(value));
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,GACvD,MAAM,CAqBR"}
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 = multiLine === 'backtick' ? `\`` : `'`;
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.7",
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.6",
61
- "fumadocs-ui": "15.0.6"
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",