fumadocs-openapi 9.7.1 → 9.7.2
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/playground/client.d.ts.map +1 -1
- package/dist/playground/client.js +9 -9
- package/dist/playground/fetcher.d.ts.map +1 -1
- package/dist/playground/fetcher.js +2 -1
- package/dist/playground/inputs.d.ts.map +1 -1
- package/dist/playground/inputs.js +4 -3
- package/dist/playground/schema.d.ts.map +1 -1
- package/dist/playground/schema.js +2 -3
- package/dist/render/operation/get-request-data.d.ts.map +1 -1
- package/dist/render/operation/get-request-data.js +19 -12
- package/dist/render/operation/index.d.ts.map +1 -1
- package/dist/render/operation/index.js +2 -1
- package/dist/requests/generators/csharp.d.ts.map +1 -1
- package/dist/requests/generators/csharp.js +4 -2
- package/dist/requests/generators/go.d.ts.map +1 -1
- package/dist/requests/generators/go.js +4 -2
- package/dist/requests/generators/java.d.ts.map +1 -1
- package/dist/requests/generators/java.js +4 -3
- package/dist/requests/generators/javascript.d.ts.map +1 -1
- package/dist/requests/generators/javascript.js +4 -2
- package/dist/requests/generators/python.d.ts.map +1 -1
- package/dist/requests/generators/python.js +4 -2
- package/dist/requests/media/adapter.d.ts +1 -1
- package/dist/requests/media/adapter.d.ts.map +1 -1
- package/dist/requests/media/adapter.js +1 -0
- package/dist/requests/media/encode.d.ts.map +1 -1
- package/dist/requests/media/encode.js +4 -2
- package/dist/requests/media/resolve-adapter.d.ts +19 -0
- package/dist/requests/media/resolve-adapter.d.ts.map +1 -0
- package/dist/requests/media/resolve-adapter.js +33 -0
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/playground/client.tsx"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,EAAE,EAEP,KAAK,cAAc,EAEnB,KAAK,YAAY,EAKlB,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EACV,oBAAoB,EACpB,qBAAqB,EACrB,SAAS,EACT,kBAAkB,EACnB,MAAM,iBAAiB,CAAC;AAUzB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EACb,aAAa,EACd,MAAM,oBAAoB,CAAC;AAuC5B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,IAAI,EAAE,OAAO,CAAC;IAEd,QAAQ,CAAC,EAAE,WAAW,CAAC;CACxB;AAED,MAAM,WAAW,WAAW,CAAC,KAAK,SAAS,SAAS,CAAC,UAAU,CAAC,EAAE,IAAI;IACpE,MAAM,EAAE,CAAC,KAAK,EAAE;QACd;;WAEG;QACH,IAAI,EAAE,IAAI,CAAC;QACX,KAAK,EAAE,qBAAqB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAChD,UAAU,EAAE,oBAAoB,CAAC;QACjC,SAAS,EAAE,kBAAkB,CAAC,UAAU,CAAC,CAAC;KAC3C,KAAK,YAAY,CAAC;CACpB;AAED,MAAM,WAAW,WAAY,SAAQ,cAAc,CAAC,eAAe,CAAC;IAClE,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,cAAc,EAAE,CAAC;IAC9B,UAAU,EAAE,aAAa,EAAE,EAAE,CAAC;IAC9B,IAAI,CAAC,EAAE;QACL,MAAM,EAAE,aAAa,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE;QACP,SAAS,CAAC,EAAE,WAAW,CACrB,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,MAAM,EAAE,EACnC,cAAc,CACf,CAAC;QACF,IAAI,CAAC,EAAE,WAAW,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC,CAAC;QACzD,IAAI,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;KAC3C,CAAC;IAEF,UAAU,CAAC,EAAE,OAAO,CAAC;QACnB,aAAa,EAAE,EAAE,CAAC;YAAE,IAAI,EAAE,WAAW,CAAA;SAAE,CAAC,CAAC;KAC1C,CAAC,CAAC;CACJ;AAgBD,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,EAC7B,KAAK,EACL,MAAc,EACd,UAAU,EACV,UAAe,EACf,IAAI,EACJ,MAAM,EACN,UAAU,EACV,QAAQ,EACR,UAAU,EAAE,EAAE,aAAoC,EAAO,EACzD,cAAmB,EACnB,GAAG,IAAI,EACR,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/playground/client.tsx"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,EAAE,EAEP,KAAK,cAAc,EAEnB,KAAK,YAAY,EAKlB,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EACV,oBAAoB,EACpB,qBAAqB,EACrB,SAAS,EACT,kBAAkB,EACnB,MAAM,iBAAiB,CAAC;AAUzB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EACb,aAAa,EACd,MAAM,oBAAoB,CAAC;AAuC5B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,IAAI,EAAE,OAAO,CAAC;IAEd,QAAQ,CAAC,EAAE,WAAW,CAAC;CACxB;AAED,MAAM,WAAW,WAAW,CAAC,KAAK,SAAS,SAAS,CAAC,UAAU,CAAC,EAAE,IAAI;IACpE,MAAM,EAAE,CAAC,KAAK,EAAE;QACd;;WAEG;QACH,IAAI,EAAE,IAAI,CAAC;QACX,KAAK,EAAE,qBAAqB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAChD,UAAU,EAAE,oBAAoB,CAAC;QACjC,SAAS,EAAE,kBAAkB,CAAC,UAAU,CAAC,CAAC;KAC3C,KAAK,YAAY,CAAC;CACpB;AAED,MAAM,WAAW,WAAY,SAAQ,cAAc,CAAC,eAAe,CAAC;IAClE,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,cAAc,EAAE,CAAC;IAC9B,UAAU,EAAE,aAAa,EAAE,EAAE,CAAC;IAC9B,IAAI,CAAC,EAAE;QACL,MAAM,EAAE,aAAa,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE;QACP,SAAS,CAAC,EAAE,WAAW,CACrB,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,MAAM,EAAE,EACnC,cAAc,CACf,CAAC;QACF,IAAI,CAAC,EAAE,WAAW,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC,CAAC;QACzD,IAAI,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;KAC3C,CAAC;IAEF,UAAU,CAAC,EAAE,OAAO,CAAC;QACnB,aAAa,EAAE,EAAE,CAAC;YAAE,IAAI,EAAE,WAAW,CAAA;SAAE,CAAC,CAAC;KAC1C,CAAC,CAAC;CACJ;AAgBD,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,EAC7B,KAAK,EACL,MAAc,EACd,UAAU,EACV,UAAe,EACf,IAAI,EACJ,MAAM,EACN,UAAU,EACV,QAAQ,EACR,UAAU,EAAE,EAAE,aAAoC,EAAO,EACzD,cAAmB,EACnB,GAAG,IAAI,EACR,EAAE,WAAW,2CAyKb"}
|
|
@@ -53,10 +53,6 @@ export default function Client({ route, method = 'GET', securities, parameters =
|
|
|
53
53
|
...input._encoded,
|
|
54
54
|
});
|
|
55
55
|
});
|
|
56
|
-
const onUpdateDefaults = useEffectEvent(() => {
|
|
57
|
-
fieldInfoMap.clear();
|
|
58
|
-
form.reset(initAuthValues(defaultValues, inputs));
|
|
59
|
-
});
|
|
60
56
|
const onUpdateDebounced = useEffectEvent((values) => {
|
|
61
57
|
for (const item of inputs) {
|
|
62
58
|
const value = get(values, item.fieldName);
|
|
@@ -72,9 +68,6 @@ export default function Client({ route, method = 'GET', securities, parameters =
|
|
|
72
68
|
values._encoded ?? (values._encoded = encodeRequestData(data, mediaAdapters, parameters));
|
|
73
69
|
updater.setData(data, values._encoded);
|
|
74
70
|
});
|
|
75
|
-
useEffect(() => {
|
|
76
|
-
onUpdateDefaults();
|
|
77
|
-
}, [requestDataKey]);
|
|
78
71
|
useEffect(() => {
|
|
79
72
|
let timer = null;
|
|
80
73
|
const subscription = form.subscribe({
|
|
@@ -104,6 +97,13 @@ export default function Client({ route, method = 'GET', securities, parameters =
|
|
|
104
97
|
};
|
|
105
98
|
// eslint-disable-next-line react-hooks/exhaustive-deps -- mounted once only
|
|
106
99
|
}, [inputs]);
|
|
100
|
+
useEffect(() => {
|
|
101
|
+
return () => {
|
|
102
|
+
fieldInfoMap.clear();
|
|
103
|
+
form.reset(initAuthValues(defaultValues, inputs));
|
|
104
|
+
};
|
|
105
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps -- for on change
|
|
106
|
+
}, [requestDataKey]);
|
|
107
107
|
const onSubmit = form.handleSubmit((value) => {
|
|
108
108
|
testQuery.start(mapInputs(value));
|
|
109
109
|
});
|
|
@@ -292,11 +292,11 @@ function Route({ route, ...props }) {
|
|
|
292
292
|
function DefaultResultDisplay({ data }) {
|
|
293
293
|
const statusInfo = useMemo(() => getStatusInfo(data.status), [data.status]);
|
|
294
294
|
const { shikiOptions } = useApiContext();
|
|
295
|
-
return (_jsxs("div", { className: "flex flex-col gap-3 p-3", children: [_jsxs("div", { className: "inline-flex items-center gap-1.5 text-sm font-medium text-fd-foreground", children: [_jsx(statusInfo.icon, { className: cn('size-4', statusInfo.color) }), statusInfo.description] }), _jsx("p", { className: "text-sm text-fd-muted-foreground", children: data.status }), data.data
|
|
295
|
+
return (_jsxs("div", { className: "flex flex-col gap-3 p-3", children: [_jsxs("div", { className: "inline-flex items-center gap-1.5 text-sm font-medium text-fd-foreground", children: [_jsx(statusInfo.icon, { className: cn('size-4', statusInfo.color) }), statusInfo.description] }), _jsx("p", { className: "text-sm text-fd-muted-foreground", children: data.status }), data.data !== undefined && (_jsx(DynamicCodeBlock, { lang: typeof data.data === 'string' && data.data.length > 50000
|
|
296
296
|
? 'text'
|
|
297
297
|
: data.type, code: typeof data.data === 'string'
|
|
298
298
|
? data.data
|
|
299
|
-
: JSON.stringify(data.data, null, 2), options: shikiOptions }))
|
|
299
|
+
: JSON.stringify(data.data, null, 2), options: shikiOptions }))] }));
|
|
300
300
|
}
|
|
301
301
|
function CollapsiblePanel({ title, children, ...props }) {
|
|
302
302
|
return (_jsxs(Collapsible, { ...props, className: "border-b last:border-b-0", children: [_jsxs(CollapsibleTrigger, { className: "group w-full flex items-center gap-2 p-3 text-sm font-medium", children: [title, _jsx(ChevronDown, { className: "ms-auto size-3.5 text-fd-muted-foreground group-data-[state=open]:rotate-180" })] }), _jsx(CollapsibleContent, { children: _jsx("div", { className: "flex flex-col gap-3 p-3 pt-1", children: children }) })] }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetcher.d.ts","sourceRoot":"","sources":["../../src/playground/fetcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"fetcher.d.ts","sourceRoot":"","sources":["../../src/playground/fetcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAG7D,MAAM,WAAW,YAAa,SAAQ,WAAW;IAC/C,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IAC/B,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,OAAO;IACtB;;;;OAIG;IACH,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;CACrE;AAED,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,EACtC,cAAc,EAAE,MAAM,GACrB,OAAO,CAwFT"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { resolveMediaAdapter } from '../requests/media/adapter.js';
|
|
1
2
|
export function createBrowserFetcher(adapters, requestTimeout) {
|
|
2
3
|
return {
|
|
3
4
|
async fetch(url, options) {
|
|
@@ -23,7 +24,7 @@ export function createBrowserFetcher(adapters, requestTimeout) {
|
|
|
23
24
|
}
|
|
24
25
|
let body = undefined;
|
|
25
26
|
if (options.bodyMediaType && options.body) {
|
|
26
|
-
const adapter =
|
|
27
|
+
const adapter = resolveMediaAdapter(options.bodyMediaType, adapters);
|
|
27
28
|
if (!adapter)
|
|
28
29
|
return {
|
|
29
30
|
status: 400,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inputs.d.ts","sourceRoot":"","sources":["../../src/playground/inputs.tsx"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,SAAS,EAGf,MAAM,OAAO,CAAC;AAef,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAkDxD,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EAAE,MAAM,EACb,SAAS,EACT,GAAG,KAAK,EACT,EAAE;IACD,KAAK,EAAE,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IACvC,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,cAAc,CAAC,KAAK,CAAC,uDAwCxB;AAED,wBAAgB,SAAS,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,2CA8B7D;AA6FD,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,SAAS,EACT,UAAU,EACV,GAAG,KAAK,EACT,EAAE,cAAc,CAAC,WAAW,CAAC,GAAG;IAC/B,KAAK,EAAE,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IACvC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB,
|
|
1
|
+
{"version":3,"file":"inputs.d.ts","sourceRoot":"","sources":["../../src/playground/inputs.tsx"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,SAAS,EAGf,MAAM,OAAO,CAAC;AAef,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAkDxD,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EAAE,MAAM,EACb,SAAS,EACT,GAAG,KAAK,EACT,EAAE;IACD,KAAK,EAAE,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IACvC,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,cAAc,CAAC,KAAK,CAAC,uDAwCxB;AAED,wBAAgB,SAAS,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,2CA8B7D;AA6FD,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,SAAS,EACT,UAAU,EACV,GAAG,KAAK,EACT,EAAE,cAAc,CAAC,WAAW,CAAC,GAAG;IAC/B,KAAK,EAAE,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IACvC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB,uDAoGA;AAED,wBAAgB,QAAQ,CAAC,EACvB,KAAK,EAAE,MAAM,EACb,SAAS,EACT,OAAO,EACP,IAAI,EACJ,UAAU,EACV,KAAS,EACT,QAAQ,EACR,WAAkB,EAClB,GAAG,KAAK,EACT,EAAE,cAAc,CAAC,WAAW,CAAC,GAAG;IAC/B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,aAAa,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,kDA4KA"}
|
|
@@ -93,9 +93,9 @@ function DynamicProperties({ fieldName, filterKey = () => true, getType = () =>
|
|
|
93
93
|
} }), _jsx("button", { type: "button", className: cn(buttonVariants({ color: 'secondary', size: 'sm' }), 'px-4'), onClick: onAppend, children: "New" })] })] }));
|
|
94
94
|
}
|
|
95
95
|
export function FieldInput({ field, fieldName, isRequired, ...props }) {
|
|
96
|
-
const
|
|
96
|
+
const form = useFormContext();
|
|
97
97
|
const { field: { value, onChange, ...restField }, } = useController({
|
|
98
|
-
control,
|
|
98
|
+
control: form.control,
|
|
99
99
|
name: fieldName,
|
|
100
100
|
});
|
|
101
101
|
if (field.type === 'string' && field.format === 'binary') {
|
|
@@ -114,7 +114,8 @@ export function FieldInput({ field, fieldName, isRequired, ...props }) {
|
|
|
114
114
|
if (field.type === 'null')
|
|
115
115
|
return;
|
|
116
116
|
return (_jsxs("div", { ...props, className: cn('flex flex-row gap-2', props.className), children: [_jsx(Input, { id: fieldName, placeholder: "Enter value", type: field.type === 'string' ? 'text' : 'number', step: field.type === 'number' ? 'any' : undefined, value: value ?? '', onChange: onChange, ...restField }), !isRequired && value !== undefined && (_jsx("button", { type: "button", onClick: () => {
|
|
117
|
-
reset(
|
|
117
|
+
// TODO: react-hook-form `reset()` cannot clear default values
|
|
118
|
+
form.reset((values) => {
|
|
118
119
|
set(values, fieldName, undefined);
|
|
119
120
|
return values;
|
|
120
121
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/playground/schema.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAiB,SAAS,EAAiC,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/playground/schema.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAiB,SAAS,EAAiC,MAAM,OAAO,CAAC;AAKhF,UAAU,iBAAiB;IACzB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC1C,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACrC,GAAG,EAAE,OAAO,CAAC;CACd;AAED,KAAK,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;AAE9C,MAAM,WAAW,SAAS;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAGD,eAAO,MAAM,SAAS;;;;CAIG,CAAC;AAE1B,wBAAgB,cAAc,CAAC,EAC7B,UAAU,EACV,YAAY,EACZ,QAAQ,GACT,EAAE,IAAI,CAAC,iBAAiB,EAAE,KAAK,CAAC,GAAG;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,2CAsB1D;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,EACvC,KAAK,EAAE,MAAM,GACZ;IACD,IAAI,EAAE,SAAS,CAAC;IAChB,UAAU,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC;CACjD,CAqEA;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,CAQjC;AAED,wBAAgB,WAAW,CACzB,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,CAEjC"}
|
|
@@ -2,7 +2,6 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
2
2
|
import { Ajv2020 } from 'ajv/dist/2020';
|
|
3
3
|
import { createContext, useContext, useMemo, useState } from 'react';
|
|
4
4
|
import { useFormContext } from 'react-hook-form';
|
|
5
|
-
import { useEffectEvent } from 'fumadocs-core/utils/use-effect-event';
|
|
6
5
|
import { getDefaultValue } from '../playground/get-default-values.js';
|
|
7
6
|
const SchemaContext = createContext(undefined);
|
|
8
7
|
export const anyFields = {
|
|
@@ -63,7 +62,7 @@ export function useFieldInfo(fieldName, schema, depth) {
|
|
|
63
62
|
fieldInfoMap.set(keyName, info);
|
|
64
63
|
return {
|
|
65
64
|
info,
|
|
66
|
-
updateInfo:
|
|
65
|
+
updateInfo: (value) => {
|
|
67
66
|
const updated = {
|
|
68
67
|
...info,
|
|
69
68
|
...value,
|
|
@@ -80,7 +79,7 @@ export function useFieldInfo(fieldName, schema, depth) {
|
|
|
80
79
|
valueSchema = { ...schema, type: updated.selectedType };
|
|
81
80
|
}
|
|
82
81
|
form.setValue(fieldName, getDefaultValue(valueSchema));
|
|
83
|
-
}
|
|
82
|
+
},
|
|
84
83
|
};
|
|
85
84
|
}
|
|
86
85
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-request-data.d.ts","sourceRoot":"","sources":["../../../src/render/operation/get-request-data.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAIhE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,iBAAiB,EACzB,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,IAAI,EAAE,aAAa,GAClB,cAAc,
|
|
1
|
+
{"version":3,"file":"get-request-data.d.ts","sourceRoot":"","sources":["../../../src/render/operation/get-request-data.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAIhE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,iBAAiB,EACzB,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,IAAI,EAAE,aAAa,GAClB,cAAc,CAwEhB"}
|
|
@@ -14,25 +14,32 @@ export function getRequestData(path, method, sampleKey, _ctx) {
|
|
|
14
14
|
if (!schema && param.content) {
|
|
15
15
|
const type = getPreferredType(param.content);
|
|
16
16
|
const content = type ? param.content[type] : undefined;
|
|
17
|
-
if (!content)
|
|
17
|
+
if (!content || !content.schema)
|
|
18
18
|
throw new Error(`Cannot find parameter schema for ${param.name} in ${path} ${method.method}`);
|
|
19
19
|
schema = content.schema;
|
|
20
|
-
value = content.example ?? param.example
|
|
20
|
+
value = content.example ?? param.example;
|
|
21
21
|
}
|
|
22
22
|
else {
|
|
23
|
-
value = param.example
|
|
23
|
+
value = param.example;
|
|
24
24
|
}
|
|
25
|
-
if (param.
|
|
26
|
-
|
|
25
|
+
if (param.required) {
|
|
26
|
+
value ?? (value = sample(schema));
|
|
27
27
|
}
|
|
28
|
-
else if (
|
|
29
|
-
|
|
28
|
+
else if (value === undefined) {
|
|
29
|
+
continue;
|
|
30
30
|
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
31
|
+
switch (param.in) {
|
|
32
|
+
case 'cookie':
|
|
33
|
+
result.cookie[param.name] = value;
|
|
34
|
+
break;
|
|
35
|
+
case 'header':
|
|
36
|
+
result.header[param.name] = value;
|
|
37
|
+
break;
|
|
38
|
+
case 'query':
|
|
39
|
+
result.query[param.name] = value;
|
|
40
|
+
break;
|
|
41
|
+
default:
|
|
42
|
+
result.path[param.name] = value;
|
|
36
43
|
}
|
|
37
44
|
}
|
|
38
45
|
if (method.requestBody) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/render/operation/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,YAAY,EAAkB,MAAM,OAAO,CAAC;AACpE,OAAO,KAAK,EAEV,iBAAiB,EACjB,aAAa,EAEd,MAAM,SAAS,CAAC;AAiBjB,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/render/operation/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,YAAY,EAAkB,MAAM,OAAO,CAAC;AACpE,OAAO,KAAK,EAEV,iBAAiB,EACjB,aAAa,EAEd,MAAM,SAAS,CAAC;AAiBjB,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAaxD,MAAM,WAAW,UAAU,CAAC,CAAC,GAAG,OAAO;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;IAE7C;;OAEG;IACH,aAAa,CAAC,EAAE,CAAC,CAAC;CACnB;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,CAiNf"}
|
|
@@ -11,6 +11,7 @@ import { getTypescriptSchema } from '../../utils/get-typescript-schema.js';
|
|
|
11
11
|
import { CopyResponseTypeScript } from '../../ui/client.js';
|
|
12
12
|
import { SelectTab, SelectTabs, SelectTabTrigger } from '../../ui/select-tabs.js';
|
|
13
13
|
import { AccordionContent, AccordionHeader, AccordionItem, Accordions, AccordionTrigger, } from '../../ui/components/accordion.js';
|
|
14
|
+
import { isMediaTypeSupported } from '../../requests/media/adapter.js';
|
|
14
15
|
const ParamTypes = {
|
|
15
16
|
path: 'Path Parameters',
|
|
16
17
|
query: 'Query Parameters',
|
|
@@ -34,7 +35,7 @@ export function Operation({ type = 'operation', path, method, ctx, hasHead, head
|
|
|
34
35
|
const contentTypes = body ? Object.entries(body.content) : null;
|
|
35
36
|
if (body && contentTypes && contentTypes.length > 0) {
|
|
36
37
|
bodyNode = (_jsxs(SelectTabs, { defaultValue: contentTypes[0][0], children: [_jsxs("div", { className: "flex gap-2 items-end justify-between", children: [heading(headingLevel, 'Request Body', ctx), _jsx(SelectTabTrigger, { items: contentTypes.map((v) => v[0]), className: "mb-4" })] }), body.description && _jsx(Markdown, { text: body.description }), contentTypes.map(([type, content]) => {
|
|
37
|
-
if (!(type
|
|
38
|
+
if (!isMediaTypeSupported(type, ctx.mediaAdapters)) {
|
|
38
39
|
throw new Error(`Media type ${type} is not supported (in ${path})`);
|
|
39
40
|
}
|
|
40
41
|
return (_jsx(SelectTab, { value: type, children: _jsx(Schema, { name: "body", as: "body", root: (content.schema ?? {}), required: body.required, readOnly: method.method === 'GET', writeOnly: method.method !== 'GET', ctx: ctx }) }, type));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"csharp.d.ts","sourceRoot":"","sources":["../../../src/requests/generators/csharp.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"csharp.d.ts","sourceRoot":"","sources":["../../../src/requests/generators/csharp.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGxD,eAAO,MAAM,SAAS,EAAE,eAgEvB,CAAC"}
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
'use client';
|
|
2
|
+
import { resolveMediaAdapter } from '../../requests/media/adapter.js';
|
|
2
3
|
export const generator = (url, data, { mediaAdapters }) => {
|
|
3
4
|
const s = [];
|
|
4
5
|
const imports = new Set(['System', 'System.Net.Http', 'System.Text']);
|
|
5
6
|
const headers = { ...data.header };
|
|
6
7
|
// Handle request body
|
|
7
8
|
let body;
|
|
8
|
-
if (data.body && data.bodyMediaType
|
|
9
|
-
|
|
9
|
+
if (data.body && data.bodyMediaType) {
|
|
10
|
+
const adapter = resolveMediaAdapter(data.bodyMediaType, mediaAdapters);
|
|
11
|
+
body = adapter?.generateExample(data, {
|
|
10
12
|
lang: 'csharp',
|
|
11
13
|
addImport(from) {
|
|
12
14
|
imports.add(from);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"go.d.ts","sourceRoot":"","sources":["../../../src/requests/generators/go.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"go.d.ts","sourceRoot":"","sources":["../../../src/requests/generators/go.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGxD,eAAO,MAAM,SAAS,EAAE,eAyDvB,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { ident } from '../../requests/string-utils.js';
|
|
3
|
+
import { resolveMediaAdapter } from '../../requests/media/adapter.js';
|
|
3
4
|
export const generator = (url, data, { mediaAdapters }) => {
|
|
4
5
|
const imports = ['fmt', 'net/http', 'io/ioutil'];
|
|
5
6
|
const headers = new Map();
|
|
@@ -13,9 +14,10 @@ export const generator = (url, data, { mediaAdapters }) => {
|
|
|
13
14
|
headers.set('Cookie', JSON.stringify(cookies.map(([k, param]) => `${k}=${param.value}`).join('; ')));
|
|
14
15
|
}
|
|
15
16
|
let body;
|
|
16
|
-
if (data.body && data.bodyMediaType
|
|
17
|
+
if (data.body && data.bodyMediaType) {
|
|
18
|
+
const adapter = resolveMediaAdapter(data.bodyMediaType, mediaAdapters);
|
|
17
19
|
headers.set('Content-Type', `"${data.bodyMediaType}"`);
|
|
18
|
-
body =
|
|
20
|
+
body = adapter?.generateExample(data, {
|
|
19
21
|
lang: 'go',
|
|
20
22
|
addImport(from) {
|
|
21
23
|
imports.push(from);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"java.d.ts","sourceRoot":"","sources":["../../../src/requests/generators/java.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"java.d.ts","sourceRoot":"","sources":["../../../src/requests/generators/java.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGxD,eAAO,MAAM,SAAS,EAAE,eAoFvB,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { ident } from '../../requests/string-utils.js';
|
|
3
|
+
import { resolveMediaAdapter } from '../../requests/media/adapter.js';
|
|
3
4
|
export const generator = (url, data, { mediaAdapters }) => {
|
|
4
5
|
const s = [];
|
|
5
6
|
const headers = { ...data.header };
|
|
@@ -13,9 +14,9 @@ export const generator = (url, data, { mediaAdapters }) => {
|
|
|
13
14
|
]);
|
|
14
15
|
// Handle body if present
|
|
15
16
|
let body;
|
|
16
|
-
if (data.body && data.bodyMediaType
|
|
17
|
-
const adapter =
|
|
18
|
-
body = adapter
|
|
17
|
+
if (data.body && data.bodyMediaType) {
|
|
18
|
+
const adapter = resolveMediaAdapter(data.bodyMediaType, mediaAdapters);
|
|
19
|
+
body = adapter?.generateExample(data, {
|
|
19
20
|
lang: 'java',
|
|
20
21
|
addImport(specifier) {
|
|
21
22
|
imports.add(specifier);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"javascript.d.ts","sourceRoot":"","sources":["../../../src/requests/generators/javascript.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"javascript.d.ts","sourceRoot":"","sources":["../../../src/requests/generators/javascript.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGxD,eAAO,MAAM,SAAS,EAAE,eAqDvB,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { ident } from '../../requests/string-utils.js';
|
|
3
|
+
import { resolveMediaAdapter } from '../../requests/media/adapter.js';
|
|
3
4
|
export const generator = (url, data, { mediaAdapters }) => {
|
|
4
5
|
const s = [];
|
|
5
6
|
const options = new Map();
|
|
@@ -21,8 +22,9 @@ export const generator = (url, data, { mediaAdapters }) => {
|
|
|
21
22
|
options.set('headers', JSON.stringify(headers, null, 2));
|
|
22
23
|
}
|
|
23
24
|
let body;
|
|
24
|
-
if (data.body && data.bodyMediaType
|
|
25
|
-
|
|
25
|
+
if (data.body && data.bodyMediaType) {
|
|
26
|
+
const adapter = resolveMediaAdapter(data.bodyMediaType, mediaAdapters);
|
|
27
|
+
body = adapter?.generateExample(data, {
|
|
26
28
|
lang: 'js',
|
|
27
29
|
addImport(from, name) {
|
|
28
30
|
s.unshift(`import { ${name} } from "${from}"`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"python.d.ts","sourceRoot":"","sources":["../../../src/requests/generators/python.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"python.d.ts","sourceRoot":"","sources":["../../../src/requests/generators/python.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAIxD,eAAO,MAAM,SAAS,EAAE,eAiDvB,CAAC"}
|
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { generatePythonObject } from '../../requests/to-python-object.js';
|
|
3
|
+
import { resolveMediaAdapter } from '../../requests/media/adapter.js';
|
|
3
4
|
export const generator = (url, data, { mediaAdapters }) => {
|
|
4
5
|
const headers = {};
|
|
5
6
|
const imports = new Set();
|
|
6
7
|
const params = [`"${data.method}"`, 'url'];
|
|
7
8
|
let body;
|
|
8
9
|
imports.add('requests');
|
|
9
|
-
if (data.body && data.bodyMediaType
|
|
10
|
+
if (data.body && data.bodyMediaType) {
|
|
11
|
+
const adapter = resolveMediaAdapter(data.bodyMediaType, mediaAdapters);
|
|
10
12
|
headers['Content-Type'] = data.bodyMediaType;
|
|
11
|
-
body =
|
|
13
|
+
body = adapter?.generateExample(data, {
|
|
12
14
|
lang: 'python',
|
|
13
15
|
});
|
|
14
16
|
if (body) {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export { resolveMediaAdapter, isMediaTypeSupported } from './resolve-adapter.js';
|
|
1
2
|
interface BaseContext {
|
|
2
3
|
/**
|
|
3
4
|
* Passed by your custom example generator, for your custom media adapter to receive.
|
|
@@ -99,5 +100,4 @@ export declare const defaultAdapters: {
|
|
|
99
100
|
generateExample(): undefined;
|
|
100
101
|
};
|
|
101
102
|
};
|
|
102
|
-
export {};
|
|
103
103
|
//# sourceMappingURL=adapter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../src/requests/media/adapter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../src/requests/media/adapter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAI9E,UAAU,WAAW;IACnB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED,UAAU,SAAU,SAAQ,WAAW;IACrC,IAAI,EAAE,IAAI,CAAC;IACX,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC;AAED,UAAU,iBAAkB,SAAQ,WAAW;IAC7C,IAAI,EAAE,IAAI,CAAC;IACX,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAChD;AAED,UAAU,WAAY,SAAQ,WAAW;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC;AAED,UAAU,aAAc,SAAQ,WAAW;IACzC,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC;AAED,MAAM,MAAM,YAAY,GACpB,WAAW,GACX,SAAS,GACT,iBAAiB,GACjB,aAAa,GACb,CAAC,WAAW,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAErC,MAAM,WAAW,YAAY;IAC3B;;;;OAIG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC;IAEtB;;;;OAIG;IACH,MAAM,EAAE,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,OAAO,CAAA;KAAE,KAAK,QAAQ,CAAC;IAE9C;;;;;;;;OAQG;IACH,eAAe,EAAE,CACf,IAAI,EAAE;QAAE,IAAI,EAAE,OAAO,CAAA;KAAE,EACvB,GAAG,EAAE,YAAY,KACd,MAAM,GAAG,SAAS,CAAC;CACzB;AAED,eAAO,MAAM,eAAe;;;kBAjBH,OAAO;;;kBAYd,OAAO;;;;;kBAZA,OAAO;;;kBAYd,OAAO;;;;;kBAZA,OAAO;;;kBAYd,OAAO;;;;;kBAZA,OAAO;;;kBAYd,OAAO;;;;;kBAZA,OAAO;;;kBAYd,OAAO;;;;;kBAZA,OAAO;YAgLN,QAAQ;;;CAOM,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encode.d.ts","sourceRoot":"","sources":["../../../src/requests/media/encode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"encode.d.ts","sourceRoot":"","sources":["../../../src/requests/media/encode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAE7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CACnC;AAYD,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,cAAc,EACpB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,EACtC,UAAU,EAAE,WAAW,CAAC,eAAe,CAAC,EAAE,GACzC,WAAW,CA+Fb"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { resolveMediaAdapter } from '../../requests/media/adapter.js';
|
|
1
2
|
const FormDelimiter = {
|
|
2
3
|
spaceDelimited: ' ',
|
|
3
4
|
pipeDelimited: '|',
|
|
@@ -89,8 +90,9 @@ function getMediaEncoder(field, adapters) {
|
|
|
89
90
|
if (!field.content)
|
|
90
91
|
return;
|
|
91
92
|
for (const k in field.content) {
|
|
92
|
-
|
|
93
|
-
|
|
93
|
+
const adapter = resolveMediaAdapter(k, adapters);
|
|
94
|
+
if (adapter) {
|
|
95
|
+
return (v) => String(adapter.encode({ body: v }));
|
|
94
96
|
}
|
|
95
97
|
}
|
|
96
98
|
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { MediaAdapter } from './adapter.js';
|
|
2
|
+
/**
|
|
3
|
+
* Resolve a media adapter for a given media type.
|
|
4
|
+
* Supports exact matches and pattern matching (e.g., +json suffix).
|
|
5
|
+
*
|
|
6
|
+
* @param mediaType - The media type to resolve (e.g., "application/json", "application/json-patch+json")
|
|
7
|
+
* @param adapters - Record of media adapters
|
|
8
|
+
* @returns The resolved adapter or undefined if not found
|
|
9
|
+
*/
|
|
10
|
+
export declare function resolveMediaAdapter(mediaType: string, adapters: Record<string, MediaAdapter>): MediaAdapter | undefined;
|
|
11
|
+
/**
|
|
12
|
+
* Check if a media type is supported by the given adapters.
|
|
13
|
+
*
|
|
14
|
+
* @param mediaType - The media type to check
|
|
15
|
+
* @param adapters - Record of media adapters
|
|
16
|
+
* @returns true if the media type is supported
|
|
17
|
+
*/
|
|
18
|
+
export declare function isMediaTypeSupported(mediaType: string, adapters: Record<string, MediaAdapter>): boolean;
|
|
19
|
+
//# sourceMappingURL=resolve-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-adapter.d.ts","sourceRoot":"","sources":["../../../src/requests/media/resolve-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAK9C;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GACrC,YAAY,GAAG,SAAS,CAgB1B;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GACrC,OAAO,CAET"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
const VariantMediaTypeRegex = /^(?<dir>[a-zA-Z0-9._-]+)\/(?<content>[a-zA-Z0-9._-]+)\+(?<variant>[a-zA-Z0-9._-]+)$/;
|
|
2
|
+
/**
|
|
3
|
+
* Resolve a media adapter for a given media type.
|
|
4
|
+
* Supports exact matches and pattern matching (e.g., +json suffix).
|
|
5
|
+
*
|
|
6
|
+
* @param mediaType - The media type to resolve (e.g., "application/json", "application/json-patch+json")
|
|
7
|
+
* @param adapters - Record of media adapters
|
|
8
|
+
* @returns The resolved adapter or undefined if not found
|
|
9
|
+
*/
|
|
10
|
+
export function resolveMediaAdapter(mediaType, adapters) {
|
|
11
|
+
// Normalize media type (remove parameters like charset)
|
|
12
|
+
const normalized = mediaType.split(';', 2)[0].trim().toLowerCase();
|
|
13
|
+
if (normalized in adapters) {
|
|
14
|
+
return adapters[normalized];
|
|
15
|
+
}
|
|
16
|
+
const match = VariantMediaTypeRegex.exec(normalized);
|
|
17
|
+
if (match?.groups) {
|
|
18
|
+
const baseType = `${match.groups.dir}/${match.groups.variant}`;
|
|
19
|
+
if (baseType in adapters) {
|
|
20
|
+
return adapters[baseType];
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Check if a media type is supported by the given adapters.
|
|
26
|
+
*
|
|
27
|
+
* @param mediaType - The media type to check
|
|
28
|
+
* @param adapters - Record of media adapters
|
|
29
|
+
* @returns true if the media type is supported
|
|
30
|
+
*/
|
|
31
|
+
export function isMediaTypeSupported(mediaType, adapters) {
|
|
32
|
+
return resolveMediaAdapter(mediaType, adapters) !== undefined;
|
|
33
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fumadocs-openapi",
|
|
3
|
-
"version": "9.7.
|
|
3
|
+
"version": "9.7.2",
|
|
4
4
|
"description": "Generate MDX docs for your OpenAPI spec",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"NextJs",
|
|
@@ -65,13 +65,13 @@
|
|
|
65
65
|
"remark-rehype": "^11.1.2",
|
|
66
66
|
"tinyglobby": "^0.2.15",
|
|
67
67
|
"xml-js": "^1.6.11",
|
|
68
|
-
"fumadocs-core": "16.0.
|
|
69
|
-
"fumadocs-ui": "16.0.
|
|
68
|
+
"fumadocs-core": "16.0.6",
|
|
69
|
+
"fumadocs-ui": "16.0.6"
|
|
70
70
|
},
|
|
71
71
|
"devDependencies": {
|
|
72
72
|
"@scalar/api-client-react": "^1.3.46",
|
|
73
73
|
"@types/js-yaml": "^4.0.9",
|
|
74
|
-
"@types/node": "24.9.
|
|
74
|
+
"@types/node": "24.9.2",
|
|
75
75
|
"@types/openapi-sampler": "^1.0.3",
|
|
76
76
|
"@types/react": "^19.2.2",
|
|
77
77
|
"json-schema-typed": "^8.0.1",
|