fumadocs-openapi 9.3.12 → 9.4.0

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.
@@ -36,6 +36,10 @@ export interface ClientProps extends HTMLAttributes<HTMLFormElement> {
36
36
  */
37
37
  references: Record<string, RequestSchema>;
38
38
  proxyUrl?: string;
39
+ /**
40
+ * Request timeout in seconds (default: 10s)
41
+ */
42
+ requestTimeout?: number;
39
43
  fields?: {
40
44
  parameter?: CustomField<`${ParameterField['in']}.${string}`, ParameterField>;
41
45
  auth?: CustomField<FieldPath<FormValues>, RequestSchema>;
@@ -47,6 +51,6 @@ export interface ClientProps extends HTMLAttributes<HTMLFormElement> {
47
51
  }>;
48
52
  }>;
49
53
  }
50
- export default function Client({ route, method, securities, parameters, body, fields, references, proxyUrl, components: { ResultDisplay }, ...rest }: ClientProps): import("react/jsx-runtime").JSX.Element;
54
+ export default function Client({ route, method, securities, parameters, body, fields, references, proxyUrl, components: { ResultDisplay }, requestTimeout, ...rest }: ClientProps): import("react/jsx-runtime").JSX.Element;
51
55
  export {};
52
56
  //# sourceMappingURL=client.d.ts.map
@@ -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;AAQzB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EACb,aAAa,EACd,MAAM,oBAAoB,CAAC;AAiB5B,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAwBzE,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,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,GAAG,IAAI,EACR,EAAE,WAAW,2CAyLb"}
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;AAQzB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EACb,aAAa,EACd,MAAM,oBAAoB,CAAC;AAiB5B,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAwBzE,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,2CAyLb"}
@@ -28,7 +28,7 @@ const OauthDialog = lazy(() => import('./auth/oauth-dialog.js').then((mod) => ({
28
28
  const OauthDialogTrigger = lazy(() => import('./auth/oauth-dialog.js').then((mod) => ({
29
29
  default: mod.OauthDialogTrigger,
30
30
  })));
31
- export default function Client({ route, method = 'GET', securities, parameters = [], body, fields, references, proxyUrl, components: { ResultDisplay = DefaultResultDisplay } = {}, ...rest }) {
31
+ export default function Client({ route, method = 'GET', securities, parameters = [], body, fields, references, proxyUrl, components: { ResultDisplay = DefaultResultDisplay } = {}, requestTimeout = 10, ...rest }) {
32
32
  const { server } = useServerSelectContext();
33
33
  const requestData = useRequestInitialData();
34
34
  const updater = useRequestDataUpdater();
@@ -47,7 +47,7 @@ export default function Client({ route, method = 'GET', securities, parameters =
47
47
  defaultValues,
48
48
  });
49
49
  const testQuery = useQuery(async (input) => {
50
- const fetcher = await import('./fetcher.js').then((mod) => mod.createBrowserFetcher(mediaAdapters));
50
+ const fetcher = await import('./fetcher.js').then((mod) => mod.createBrowserFetcher(mediaAdapters, requestTimeout));
51
51
  input._encoded ?? (input._encoded = encodeRequestData({ ...mapInputs(input), method, bodyMediaType: body?.mediaType }, mediaAdapters, parameters));
52
52
  return fetcher.fetch(joinURL(withBase(server ? resolveServerUrl(server.url, server.variables) : '/', window.location.origin), resolveRequestData(route, input._encoded)), {
53
53
  proxyUrl,
@@ -16,5 +16,5 @@ export interface Fetcher {
16
16
  */
17
17
  fetch: (url: string, options: FetchOptions) => Promise<FetchResult>;
18
18
  }
19
- export declare function createBrowserFetcher(adapters: Record<string, MediaAdapter>): Fetcher;
19
+ export declare function createBrowserFetcher(adapters: Record<string, MediaAdapter>, requestTimeout: number): Fetcher;
20
20
  //# sourceMappingURL=fetcher.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fetcher.d.ts","sourceRoot":"","sources":["../../src/playground/fetcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD,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,GACrC,OAAO,CAwFT"}
1
+ {"version":3,"file":"fetcher.d.ts","sourceRoot":"","sources":["../../src/playground/fetcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD,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,4 +1,4 @@
1
- export function createBrowserFetcher(adapters) {
1
+ export function createBrowserFetcher(adapters, requestTimeout) {
2
2
  return {
3
3
  async fetch(url, options) {
4
4
  const headers = new Headers();
@@ -46,7 +46,7 @@ export function createBrowserFetcher(adapters) {
46
46
  cache: 'no-cache',
47
47
  headers,
48
48
  body,
49
- signal: AbortSignal.timeout(10 * 1000),
49
+ signal: AbortSignal.timeout(requestTimeout * 1000),
50
50
  })
51
51
  .then(async (res) => {
52
52
  const contentType = res.headers.get('Content-Type') ?? '';
@@ -1,10 +1,17 @@
1
- import type { PageTree } from 'fumadocs-core/server';
2
- import type { PageFile, PageTreeTransformer } from 'fumadocs-core/source';
1
+ import type * as PageTree from 'fumadocs-core/page-tree';
2
+ import type { LoaderPlugin, PageFile, PageTreeTransformer } from 'fumadocs-core/source';
3
3
  /**
4
- * Source API Integration
4
+ * Fumadocs Source API integration, pass this to `plugins` array in `loader()`.
5
+ */
6
+ export declare function openapiPlugin(): LoaderPlugin;
7
+ /**
8
+ * Source API Integration, add this to page tree builder options.
5
9
  *
6
- * Add this to page tree builder options
10
+ * @deprecated use `openapiPlugin()`
7
11
  */
8
12
  export declare const attachFile: (node: PageTree.Item, file: PageFile | undefined) => PageTree.Item;
13
+ /**
14
+ * @deprecated use `openapiPlugin()`
15
+ */
9
16
  export declare function transformerOpenAPI(): PageTreeTransformer;
10
17
  //# sourceMappingURL=source-api.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"source-api.d.ts","sourceRoot":"","sources":["../../src/server/source-api.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE1E;;;;GAIG;AACH,eAAO,MAAM,UAAU,GACrB,MAAM,QAAQ,CAAC,IAAI,EACnB,MAAM,QAAQ,GAAG,SAAS,KACzB,QAAQ,CAAC,IA4BX,CAAC;AAEF,wBAAgB,kBAAkB,IAAI,mBAAmB,CASxD"}
1
+ {"version":3,"file":"source-api.d.ts","sourceRoot":"","sources":["../../src/server/source-api.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,QAAQ,MAAM,yBAAyB,CAAC;AACzD,OAAO,KAAK,EACV,YAAY,EACZ,QAAQ,EACR,mBAAmB,EACpB,MAAM,sBAAsB,CAAC;AAE9B;;GAEG;AACH,wBAAgB,aAAa,IAAI,YAAY,CAkC5C;AAED;;;;GAIG;AACH,eAAO,MAAM,UAAU,GACrB,MAAM,QAAQ,CAAC,IAAI,EACnB,MAAM,QAAQ,GAAG,SAAS,KACzB,QAAQ,CAAC,IA4BX,CAAC;AAEF;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,mBAAmB,CAExD"}
@@ -1,9 +1,35 @@
1
1
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { MethodLabel } from '../ui/components/method-label.js';
3
3
  /**
4
- * Source API Integration
4
+ * Fumadocs Source API integration, pass this to `plugins` array in `loader()`.
5
+ */
6
+ export function openapiPlugin() {
7
+ return {
8
+ transformPageTree: {
9
+ file(node, filePath) {
10
+ if (!filePath)
11
+ return node;
12
+ const file = this.storage.read(filePath);
13
+ if (!file || file.format !== 'page')
14
+ return node;
15
+ const data = file.data;
16
+ let method;
17
+ if ('_openapi' in data && typeof data._openapi === 'object') {
18
+ const meta = data._openapi;
19
+ method = meta.method;
20
+ }
21
+ if (method) {
22
+ node.name = (_jsxs(_Fragment, { children: [node.name, ' ', _jsx(MethodLabel, { className: "ms-auto text-xs text-nowrap", children: method })] }));
23
+ }
24
+ return node;
25
+ },
26
+ },
27
+ };
28
+ }
29
+ /**
30
+ * Source API Integration, add this to page tree builder options.
5
31
  *
6
- * Add this to page tree builder options
32
+ * @deprecated use `openapiPlugin()`
7
33
  */
8
34
  export const attachFile = (node, file) => {
9
35
  if (!file)
@@ -22,13 +48,9 @@ export const attachFile = (node, file) => {
22
48
  }
23
49
  return node;
24
50
  };
51
+ /**
52
+ * @deprecated use `openapiPlugin()`
53
+ */
25
54
  export function transformerOpenAPI() {
26
- return {
27
- file(node, file) {
28
- if (!file)
29
- return node;
30
- const content = this.storage.read(file);
31
- return attachFile(node, content?.format === 'page' ? content : undefined);
32
- },
33
- };
55
+ return openapiPlugin().transformPageTree;
34
56
  }
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "fumadocs-openapi",
3
- "version": "9.3.12",
3
+ "version": "9.4.0",
4
4
  "description": "Generate MDX docs for your OpenAPI spec",
5
5
  "keywords": [
6
6
  "NextJs",
7
7
  "Docs"
8
8
  ],
9
- "homepage": "https://fumadocs.vercel.app",
9
+ "homepage": "https://fumadocs.dev",
10
10
  "repository": "github:fuma-nama/fumadocs",
11
11
  "license": "MIT",
12
12
  "author": "Fuma Nama",
@@ -50,8 +50,8 @@
50
50
  "@radix-ui/react-dialog": "^1.1.15",
51
51
  "@radix-ui/react-select": "^2.2.6",
52
52
  "@radix-ui/react-slot": "^1.2.3",
53
- "@scalar/json-magic": "^0.5.1",
54
- "@scalar/openapi-parser": "0.21.1",
53
+ "@scalar/json-magic": "^0.5.2",
54
+ "@scalar/openapi-parser": "0.21.2",
55
55
  "ajv": "^8.17.1",
56
56
  "class-variance-authority": "^0.7.1",
57
57
  "github-slugger": "^2.0.0",
@@ -65,21 +65,21 @@
65
65
  "remark-rehype": "^11.1.2",
66
66
  "tinyglobby": "^0.2.15",
67
67
  "xml-js": "^1.6.11",
68
- "fumadocs-core": "15.8.0",
69
- "fumadocs-ui": "15.8.0"
68
+ "fumadocs-core": "15.8.2",
69
+ "fumadocs-ui": "15.8.2"
70
70
  },
71
71
  "devDependencies": {
72
- "@scalar/api-client-react": "^1.3.40",
72
+ "@scalar/api-client-react": "^1.3.41",
73
73
  "@types/js-yaml": "^4.0.9",
74
74
  "@types/node": "24.5.2",
75
75
  "@types/openapi-sampler": "^1.0.3",
76
- "@types/react": "^19.1.13",
76
+ "@types/react": "^19.1.14",
77
77
  "json-schema-typed": "^8.0.1",
78
78
  "openapi-types": "^12.1.3",
79
79
  "tailwindcss": "^4.1.13",
80
80
  "tsc-alias": "^1.8.16",
81
- "eslint-config-custom": "0.0.0",
82
- "tsconfig": "0.0.0"
81
+ "tsconfig": "0.0.0",
82
+ "eslint-config-custom": "0.0.0"
83
83
  },
84
84
  "peerDependencies": {
85
85
  "@scalar/api-client-react": "*",