fumadocs-openapi 9.0.5 → 9.0.7

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.
Files changed (40) hide show
  1. package/dist/playground/client.d.ts.map +1 -1
  2. package/dist/playground/client.js +4 -6
  3. package/dist/playground/fetcher.d.ts +6 -1
  4. package/dist/playground/fetcher.d.ts.map +1 -1
  5. package/dist/playground/fetcher.js +2 -4
  6. package/dist/playground/index.js +0 -5
  7. package/dist/render/api-page.d.ts.map +1 -1
  8. package/dist/render/api-page.js +2 -10
  9. package/dist/requests/_shared.d.ts +0 -1
  10. package/dist/requests/_shared.d.ts.map +1 -1
  11. package/dist/requests/_shared.js +0 -4
  12. package/dist/requests/curl.d.ts.map +1 -1
  13. package/dist/requests/curl.js +3 -2
  14. package/dist/requests/go.d.ts.map +1 -1
  15. package/dist/requests/go.js +3 -2
  16. package/dist/requests/javascript.d.ts.map +1 -1
  17. package/dist/requests/javascript.js +3 -2
  18. package/dist/requests/python.d.ts.map +1 -1
  19. package/dist/requests/python.js +2 -2
  20. package/dist/types.d.ts +0 -1
  21. package/dist/types.d.ts.map +1 -1
  22. package/dist/ui/contexts/api.js +1 -1
  23. package/dist/ui/contexts/code-example.d.ts.map +1 -1
  24. package/dist/ui/contexts/code-example.js +4 -2
  25. package/dist/ui/index.d.ts.map +1 -1
  26. package/dist/ui/index.js +1 -1
  27. package/dist/ui/server-select.d.ts.map +1 -1
  28. package/dist/ui/server-select.js +2 -4
  29. package/dist/utils/get-typescript-schema.d.ts.map +1 -1
  30. package/dist/utils/get-typescript-schema.js +3 -7
  31. package/dist/utils/url.d.ts +10 -0
  32. package/dist/utils/url.d.ts.map +1 -0
  33. package/dist/utils/url.js +51 -0
  34. package/package.json +3 -3
  35. package/dist/utils/get-pathname-from-input.d.ts +0 -2
  36. package/dist/utils/get-pathname-from-input.d.ts.map +0 -1
  37. package/dist/utils/get-pathname-from-input.js +0 -27
  38. package/dist/utils/server-url.d.ts +0 -2
  39. package/dist/utils/server-url.d.ts.map +0 -1
  40. package/dist/utils/server-url.js +0 -7
@@ -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;AAmC5B,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,IAAI,EAAE,OAAO,CAAC;CACf;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;AAgCD,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,EAC7B,KAAK,EACL,MAAc,EACd,UAAU,EACV,UAAU,EACV,IAAI,EACJ,MAAM,EACN,UAAU,EACV,QAAQ,EACR,UAAU,EAAE,EAAE,aAAoC,EAAO,EACzD,GAAG,IAAI,EACR,EAAE,WAAW,2CAqKb"}
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;AAwC5B,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,IAAI,EAAE,OAAO,CAAC;CACf;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;AAgCD,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,EAC7B,KAAK,EACL,MAAc,EACd,UAAU,EACV,UAAU,EACV,IAAI,EACJ,MAAM,EACN,UAAU,EACV,QAAQ,EACR,UAAU,EAAE,EAAE,aAAoC,EAAO,EACzD,GAAG,IAAI,EACR,EAAE,WAAW,2CA2Kb"}
@@ -5,7 +5,7 @@ import { Controller, FormProvider, useForm, useFormContext, } from 'react-hook-f
5
5
  import { useApiContext, useServerSelectContext } from '../ui/contexts/api.js';
6
6
  import { FieldInput, FieldSet, JsonInput, ObjectInput } from './inputs.js';
7
7
  import { getStatusInfo } from './status-info.js';
8
- import { getUrl } from '../utils/server-url.js';
8
+ import { joinURL, resolveRequestData, resolveServerUrl, withBase, } from '../utils/url.js';
9
9
  import { DynamicCodeBlock } from 'fumadocs-ui/components/dynamic-codeblock';
10
10
  import { MethodLabel } from '../ui/components/method-label.js';
11
11
  import { useQuery } from '../utils/use-query.js';
@@ -58,12 +58,10 @@ export default function Client({ route, method = 'GET', securities, parameters,
58
58
  });
59
59
  const testQuery = useQuery(async (input) => {
60
60
  const fetcher = await import('./fetcher.js').then((mod) => mod.createBrowserFetcher(mediaAdapters));
61
- const serverUrl = server
62
- ? getUrl(server.url, server.variables)
63
- : window.location.origin;
64
- return fetcher.fetch(`${serverUrl}${route}`, {
61
+ const data = toRequestData(method, body?.mediaType, input);
62
+ return fetcher.fetch(joinURL(withBase(server ? resolveServerUrl(server.url, server.variables) : '/', window.location.origin), resolveRequestData(route, data)), {
65
63
  proxyUrl,
66
- ...toRequestData(method, body?.mediaType, input),
64
+ ...data,
67
65
  });
68
66
  });
69
67
  function initAuthValues(values, inputs) {
@@ -9,7 +9,12 @@ export interface FetchResult {
9
9
  data: unknown;
10
10
  }
11
11
  export interface Fetcher {
12
- fetch: (route: string, options: FetchOptions) => Promise<FetchResult>;
12
+ /**
13
+ * This method will not apply the path & search parameters from `options` to given `url`.
14
+ *
15
+ * @param url - The full URL of request.
16
+ */
17
+ fetch: (url: string, options: FetchOptions) => Promise<FetchResult>;
13
18
  }
14
19
  export declare function createBrowserFetcher(adapters: Record<string, MediaAdapter>): Fetcher;
15
20
  //# sourceMappingURL=fetcher.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fetcher.d.ts","sourceRoot":"","sources":["../../src/playground/fetcher.ts"],"names":[],"mappings":"AACA,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,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;CACvE;AAED,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GACrC,OAAO,CAkGT"}
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,CAgGT"}
@@ -1,7 +1,6 @@
1
- import { getPathnameFromInput } from '../utils/get-pathname-from-input.js';
2
1
  export function createBrowserFetcher(adapters) {
3
2
  return {
4
- async fetch(route, options) {
3
+ async fetch(url, options) {
5
4
  const headers = new Headers();
6
5
  if (options.bodyMediaType)
7
6
  headers.append('Content-Type', options.bodyMediaType);
@@ -11,9 +10,8 @@ export function createBrowserFetcher(adapters) {
11
10
  headers.append(key, paramValue.toString());
12
11
  }
13
12
  const proxyUrl = options.proxyUrl
14
- ? new URL(options.proxyUrl, window.location.origin)
13
+ ? new URL(options.proxyUrl, document.baseURI)
15
14
  : null;
16
- let url = getPathnameFromInput(route, options.path, options.query);
17
15
  if (proxyUrl) {
18
16
  proxyUrl.searchParams.append('url', url);
19
17
  url = proxyUrl.toString();
@@ -68,11 +68,6 @@ function writeReferences(schema, ctx, stack = new WeakMap()) {
68
68
  for (const key in output[name]) {
69
69
  output[name][key] = writeReferences(output[name][key], ctx, stack);
70
70
  }
71
- continue;
72
- default:
73
- if (typeof output[name] === 'object' && !Array.isArray(output[name])) {
74
- output[name] = { ...output[name] };
75
- }
76
71
  }
77
72
  }
78
73
  return output;
@@ -1 +1 @@
1
- {"version":3,"file":"api-page.d.ts","sourceRoot":"","sources":["../../src/render/api-page.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C,OAAO,EAAiB,KAAK,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EACL,KAAK,aAAa,EAElB,KAAK,iBAAiB,EACvB,MAAM,0BAA0B,CAAC;AAIlC,KAAK,mBAAmB,GAAG,IAAI,CAC7B,OAAO,CAAC,aAAa,CAAC,EACpB,cAAc,GACd,0BAA0B,GAC1B,qBAAqB,GACrB,UAAU,GACV,oBAAoB,GACpB,mBAAmB,GACnB,eAAe,CAClB,CAAC;AAEF,MAAM,WAAW,YAAa,SAAQ,mBAAmB;IACvD,QAAQ,EAAE,aAAa,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;IAEjB,QAAQ,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAE7B;;OAEG;IACH,UAAU,CAAC,EAAE,aAAa,EAAE,CAAC;IAE7B,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;IAEzB;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,CAAC,WAAW,CAAC;CACjC;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,CAAC,WAAW,CAAC;CACjC;AAED,wBAAsB,OAAO,CAAC,KAAK,EAAE,YAAY,oDAqEhD;AAED,wBAAsB,UAAU,CAC9B,MAAM,EAAE,iBAAiB,EACzB,OAAO,GAAE,mBAAmB,GAAG;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;CACzB,GACL,OAAO,CAAC,aAAa,CAAC,CA0CxB"}
1
+ {"version":3,"file":"api-page.d.ts","sourceRoot":"","sources":["../../src/render/api-page.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C,OAAO,EAAiB,KAAK,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EACL,KAAK,aAAa,EAElB,KAAK,iBAAiB,EACvB,MAAM,0BAA0B,CAAC;AAGlC,KAAK,mBAAmB,GAAG,IAAI,CAC7B,OAAO,CAAC,aAAa,CAAC,EACpB,cAAc,GACd,0BAA0B,GAC1B,qBAAqB,GACrB,UAAU,GACV,oBAAoB,GACpB,mBAAmB,GACnB,eAAe,CAClB,CAAC;AAEF,MAAM,WAAW,YAAa,SAAQ,mBAAmB;IACvD,QAAQ,EAAE,aAAa,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;IAEjB,QAAQ,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAE7B;;OAEG;IACH,UAAU,CAAC,EAAE,aAAa,EAAE,CAAC;IAE7B,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;IAEzB;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,CAAC,WAAW,CAAC;CACjC;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,CAAC,WAAW,CAAC;CACjC;AAED,wBAAsB,OAAO,CAAC,KAAK,EAAE,YAAY,oDAkEhD;AAED,wBAAsB,UAAU,CAC9B,MAAM,EAAE,iBAAiB,EACzB,OAAO,GAAE,mBAAmB,GAAG;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;CACzB,GACL,OAAO,CAAC,aAAa,CAAC,CAiCxB"}
@@ -4,7 +4,6 @@ import { Operation } from '../render/operation/index.js';
4
4
  import { createMethod } from '../server/create-method.js';
5
5
  import { createRenders } from '../render/renderer.js';
6
6
  import { processDocument, } from '../utils/process-document.js';
7
- import { getUrl } from '../utils/server-url.js';
8
7
  export async function APIPage(props) {
9
8
  const { operations, hasHead = true, webhooks, disableCache = process.env.NODE_ENV === 'development', } = props;
10
9
  const processed = await processDocument(props.document, disableCache);
@@ -27,18 +26,14 @@ export async function APIPage(props) {
27
26
  if (!hook)
28
27
  throw new Error(`[Fumadocs OpenAPI] Method ${item.method} not found in webhook: ${item.name}`);
29
28
  const method = createMethod(item.method, webhook, hook);
30
- return (_jsx(Operation, { type: "webhook", method: method, ctx: {
31
- ...ctx,
32
- baseUrl: 'http://localhost:8080',
33
- }, path: `/${item.name}`, hasHead: hasHead }, `${item.name}:${item.method}`));
29
+ return (_jsx(Operation, { type: "webhook", method: method, ctx: ctx, path: `/${item.name}`, hasHead: hasHead }, `${item.name}:${item.method}`));
34
30
  })] }));
35
31
  }
36
32
  export async function getContext(schema, options = {}) {
37
33
  const document = schema.document;
38
34
  const servers = document.servers && document.servers.length > 0
39
35
  ? document.servers
40
- : [{ url: 'https://example.com' }];
41
- const server = servers[0];
36
+ : [{ url: '/' }];
42
37
  return {
43
38
  schema,
44
39
  proxyUrl: options.proxyUrl,
@@ -51,9 +46,6 @@ export async function getContext(schema, options = {}) {
51
46
  shikiOptions: options.shikiOptions,
52
47
  generateTypeScriptSchema: options.generateTypeScriptSchema,
53
48
  generateCodeSamples: options.generateCodeSamples,
54
- baseUrl: getUrl(server.url, server.variables
55
- ? Object.fromEntries(Object.entries(server.variables).map(([k, v]) => [k, v.default]))
56
- : {}),
57
49
  servers,
58
50
  mediaAdapters: {
59
51
  ...{
@@ -11,6 +11,5 @@ export interface RequestData {
11
11
  body?: unknown;
12
12
  bodyMediaType?: string;
13
13
  }
14
- export declare function getUrl(url: string, data: RequestData): string;
15
14
  export declare function ident(code: string, tab?: number): string;
16
15
  //# sourceMappingURL=_shared.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"_shared.d.ts","sourceRoot":"","sources":["../../src/requests/_shared.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD,MAAM,MAAM,eAAe,GAAG,CAC5B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE;IACP,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CAC7C,KACE,MAAM,CAAC;AAEZ,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IAEf,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,MAAM,CAE7D;AAED,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,GAAE,MAAU,UAKlD"}
1
+ {"version":3,"file":"_shared.d.ts","sourceRoot":"","sources":["../../src/requests/_shared.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD,MAAM,MAAM,eAAe,GAAG,CAC5B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE;IACP,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CAC7C,KACE,MAAM,CAAC;AAEZ,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IAEf,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,GAAE,MAAU,UAKlD"}
@@ -1,7 +1,3 @@
1
- import { getPathnameFromInput } from '../utils/get-pathname-from-input.js';
2
- export function getUrl(url, data) {
3
- return getPathnameFromInput(url, data.path, data.query);
4
- }
5
1
  export function ident(code, tab = 1) {
6
2
  return code
7
3
  .split('\n')
@@ -1 +1 @@
1
- {"version":3,"file":"curl.d.ts","sourceRoot":"","sources":["../../src/requests/curl.ts"],"names":[],"mappings":"AAEA,OAAO,EAAiB,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAQzE,eAAO,MAAM,SAAS,EAAE,eA0CvB,CAAC"}
1
+ {"version":3,"file":"curl.d.ts","sourceRoot":"","sources":["../../src/requests/curl.ts"],"names":[],"mappings":"AAEA,OAAO,EAAS,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AASjE,eAAO,MAAM,SAAS,EAAE,eA0CvB,CAAC"}
@@ -1,6 +1,7 @@
1
1
  'use client';
2
2
  import { inputToString } from '../utils/input-to-string.js';
3
- import { getUrl, ident } from '../requests/_shared.js';
3
+ import { ident } from '../requests/_shared.js';
4
+ import { resolveRequestData } from '../utils/url.js';
4
5
  const MediaTypeFormatMap = {
5
6
  'application/json': 'json',
6
7
  'application/xml': 'xml',
@@ -8,7 +9,7 @@ const MediaTypeFormatMap = {
8
9
  };
9
10
  export const generator = (url, data) => {
10
11
  const s = [];
11
- s.push(`curl -X ${data.method} "${getUrl(url, data)}"`);
12
+ s.push(`curl -X ${data.method} "${resolveRequestData(url, data)}"`);
12
13
  for (const header in data.header) {
13
14
  const value = `${header}: ${data.header[header]}`;
14
15
  s.push(`-H "${value}"`);
@@ -1 +1 @@
1
- {"version":3,"file":"go.d.ts","sourceRoot":"","sources":["../../src/requests/go.ts"],"names":[],"mappings":"AACA,OAAO,EAAiB,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAEpE,eAAO,MAAM,SAAS,EAAE,eAqDvB,CAAC"}
1
+ {"version":3,"file":"go.d.ts","sourceRoot":"","sources":["../../src/requests/go.ts"],"names":[],"mappings":"AACA,OAAO,EAAS,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAG5D,eAAO,MAAM,SAAS,EAAE,eAqDvB,CAAC"}
@@ -1,10 +1,11 @@
1
1
  'use client';
2
- import { getUrl, ident } from '../requests/_shared.js';
2
+ import { ident } from '../requests/_shared.js';
3
+ import { resolveRequestData } from '../utils/url.js';
3
4
  export const generator = (url, data, { mediaAdapters }) => {
4
5
  const imports = ['fmt', 'net/http', 'io/ioutil'];
5
6
  const headers = new Map();
6
7
  const variables = new Map();
7
- variables.set('url', JSON.stringify(getUrl(url, data)));
8
+ variables.set('url', JSON.stringify(resolveRequestData(url, data)));
8
9
  for (const header in data.header) {
9
10
  headers.set(header, JSON.stringify(data.header[header]));
10
11
  }
@@ -1 +1 @@
1
- {"version":3,"file":"javascript.d.ts","sourceRoot":"","sources":["../../src/requests/javascript.ts"],"names":[],"mappings":"AACA,OAAO,EAAiB,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAEzE,eAAO,MAAM,SAAS,EAAE,eA0CvB,CAAC"}
1
+ {"version":3,"file":"javascript.d.ts","sourceRoot":"","sources":["../../src/requests/javascript.ts"],"names":[],"mappings":"AACA,OAAO,EAAS,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGjE,eAAO,MAAM,SAAS,EAAE,eA0CvB,CAAC"}
@@ -1,5 +1,6 @@
1
1
  'use client';
2
- import { getUrl, ident } from '../requests/_shared.js';
2
+ import { ident } from '../requests/_shared.js';
3
+ import { resolveRequestData } from '../utils/url.js';
3
4
  export const generator = (url, data, { mediaAdapters }) => {
4
5
  const s = [];
5
6
  const options = new Map();
@@ -25,7 +26,7 @@ export const generator = (url, data, { mediaAdapters }) => {
25
26
  s.push(body);
26
27
  options.set('body', 'body');
27
28
  }
28
- const params = [JSON.stringify(getUrl(url, data))];
29
+ const params = [JSON.stringify(resolveRequestData(url, data))];
29
30
  if (options.size > 0) {
30
31
  const str = Array.from(options.entries())
31
32
  .map(([k, v]) => ident(k === v ? k : `${k}: ${v}`))
@@ -1 +1 @@
1
- {"version":3,"file":"python.d.ts","sourceRoot":"","sources":["../../src/requests/python.ts"],"names":[],"mappings":"AACA,OAAO,EAAU,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAElE,eAAO,MAAM,SAAS,EAAE,eAkCvB,CAAC"}
1
+ {"version":3,"file":"python.d.ts","sourceRoot":"","sources":["../../src/requests/python.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAG1D,eAAO,MAAM,SAAS,EAAE,eAkCvB,CAAC"}
@@ -1,5 +1,5 @@
1
1
  'use client';
2
- import { getUrl } from '../requests/_shared.js';
2
+ import { resolveRequestData } from '../utils/url.js';
3
3
  export const generator = (url, data, { mediaAdapters }) => {
4
4
  const headers = { ...data.header };
5
5
  const params = [`"${data.method}"`, 'url'];
@@ -24,7 +24,7 @@ export const generator = (url, data, { mediaAdapters }) => {
24
24
  }
25
25
  return `import requests
26
26
 
27
- url = ${JSON.stringify(getUrl(url, data))}
27
+ url = ${JSON.stringify(resolveRequestData(url, data))}
28
28
  ${body ?? ''}
29
29
  response = requests.request(${params.join(', ')})
30
30
 
package/dist/types.d.ts CHANGED
@@ -34,7 +34,6 @@ export interface RenderContext {
34
34
  * Disable API Playground
35
35
  */
36
36
  disablePlayground?: boolean;
37
- baseUrl: string;
38
37
  servers: ServerObject[];
39
38
  slugger: Slugger;
40
39
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,IAAI,IAAI,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,KAAK,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EACV,YAAY,EACZ,iBAAiB,EACjB,uBAAuB,EACxB,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD,MAAM,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AACrC,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;AACnD,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;AACnD,MAAM,MAAM,yBAAyB,GAAG,IAAI,CAAC,yBAAyB,CAAC;AACvE,MAAM,MAAM,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAC;AAC7D,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;AACnD,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;AACjD,MAAM,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;AACvC,MAAM,MAAM,YAAY,GAAG,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAC1D,MAAM,MAAM,cAAc,GAAG,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AAE9D,MAAM,MAAM,iBAAiB,GAAG,WAAW,CAAC,eAAe,CAAC,GAAG;IAC7D,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,KAAK,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAEnC;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AAElD,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,QAAQ,EAAE,QAAQ,CAAC;IAEnB;;OAEG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAE5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,YAAY,EAAE,CAAC;IAExB,OAAO,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,MAAM,EAAE,iBAAiB,CAAC;IAE1B;;;;;;;OAOG;IACH,wBAAwB,CAAC,EACrB,CAAC,CACC,MAAM,EAAE,WAAW,CAAC,iBAAiB,CAAC,EACtC,UAAU,EAAE,MAAM,KACf,SAAS,CAAC,MAAM,CAAC,CAAC,GACvB,KAAK,CAAC;IAEV;;OAEG;IACH,mBAAmB,CAAC,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC;IAE7E,YAAY,CAAC,EAAE,IAAI,CAAC,uBAAuB,EAAE,MAAM,CAAC,GAClD,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAElC;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC,CAAC;CACpD"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,IAAI,IAAI,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,KAAK,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EACV,YAAY,EACZ,iBAAiB,EACjB,uBAAuB,EACxB,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD,MAAM,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AACrC,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;AACnD,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;AACnD,MAAM,MAAM,yBAAyB,GAAG,IAAI,CAAC,yBAAyB,CAAC;AACvE,MAAM,MAAM,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAC;AAC7D,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;AACnD,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;AACjD,MAAM,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;AACvC,MAAM,MAAM,YAAY,GAAG,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAC1D,MAAM,MAAM,cAAc,GAAG,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AAE9D,MAAM,MAAM,iBAAiB,GAAG,WAAW,CAAC,eAAe,CAAC,GAAG;IAC7D,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,KAAK,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAEnC;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AAElD,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,QAAQ,EAAE,QAAQ,CAAC;IAEnB;;OAEG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAE5B,OAAO,EAAE,YAAY,EAAE,CAAC;IAExB,OAAO,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,MAAM,EAAE,iBAAiB,CAAC;IAE1B;;;;;;;OAOG;IACH,wBAAwB,CAAC,EACrB,CAAC,CACC,MAAM,EAAE,WAAW,CAAC,iBAAiB,CAAC,EACtC,UAAU,EAAE,MAAM,KACf,SAAS,CAAC,MAAM,CAAC,CAAC,GACvB,KAAK,CAAC;IAEV;;OAEG;IACH,mBAAmB,CAAC,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC;IAE7E,YAAY,CAAC,EAAE,IAAI,CAAC,uBAAuB,EAAE,MAAM,CAAC,GAClD,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAElC;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC,CAAC;CACpD"}
@@ -20,7 +20,7 @@ export function ApiProvider({ defaultBaseUrl, children, servers, mediaAdapters,
20
20
  const [server, setServer] = useState(() => {
21
21
  const defaultItem = defaultBaseUrl
22
22
  ? servers.find((item) => item.url === defaultBaseUrl)
23
- : null;
23
+ : servers.at(0);
24
24
  return defaultItem
25
25
  ? {
26
26
  url: defaultItem.url,
@@ -1 +1 @@
1
- {"version":3,"file":"code-example.d.ts","sourceRoot":"","sources":["../../../src/ui/contexts/code-example.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAUtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAqBtD,wBAAgB,mBAAmB,CAAC,EAClC,KAAK,EACL,QAAQ,EACR,UAAU,EACV,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE;QACR,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,WAAW,CAAC;KACnB,EAAE,CAAC;IACJ,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,2CAwDA;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,UAAU,kDAwC5C;AAED,wBAAgB,mBAAmB,CAAC,EAAE,KAAK,EAAE,EAAE,YAAY,2CAoB1D;AAgBD,wBAAgB,qBAAqB,gBAOpC;AAED,wBAAgB,qBAAqB;oBApKnB,WAAW,KAAK,IAAI;EAuKrC"}
1
+ {"version":3,"file":"code-example.d.ts","sourceRoot":"","sources":["../../../src/ui/contexts/code-example.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAUtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAqBtD,wBAAgB,mBAAmB,CAAC,EAClC,KAAK,EACL,QAAQ,EACR,UAAU,EACV,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE;QACR,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,WAAW,CAAC;KACnB,EAAE,CAAC;IACJ,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,2CAwDA;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,UAAU,kDAgD5C;AAED,wBAAgB,mBAAmB,CAAC,EAAE,KAAK,EAAE,EAAE,YAAY,2CAoB1D;AAgBD,wBAAgB,qBAAqB,gBAOpC;AAED,wBAAgB,qBAAqB;oBA5KnB,WAAW,KAAK,IAAI;EA+KrC"}
@@ -5,7 +5,7 @@ import { useApiContext, useServerSelectContext } from '../../ui/contexts/api.js'
5
5
  import { DynamicCodeBlock } from 'fumadocs-ui/components/dynamic-codeblock';
6
6
  import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '../../ui/components/select.js';
7
7
  import { useEffectEvent } from 'fumadocs-core/utils/use-effect-event';
8
- import { getUrl } from '../../utils/server-url.js';
8
+ import { joinURL, resolveServerUrl, withBase } from '../../utils/url.js';
9
9
  import { defaultSamples } from '../../requests/index.js';
10
10
  const CodeExampleContext = createContext(null);
11
11
  export function CodeExampleProvider({ route, examples, initialKey, children, }) {
@@ -72,7 +72,9 @@ export function CodeExample(props) {
72
72
  return;
73
73
  if (typeof sample.source === 'string')
74
74
  return sample.source;
75
- return sample.source(`${server ? getUrl(server.url, server.variables) : '/'}${route}`, data, {
75
+ return sample.source(joinURL(withBase(server ? resolveServerUrl(server.url, server.variables) : '/', typeof window !== 'undefined'
76
+ ? window.location.origin
77
+ : 'https://loading'), route), data, {
76
78
  mediaAdapters,
77
79
  });
78
80
  }, [mediaAdapters, sample, server, route, data]);
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ui/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAE5D,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAYlE,wBAAgB,IAAI,CAAC,EACnB,QAAQ,EACR,SAAS,EACT,GAAG,EACH,GAAG,KAAK,EACT,EAAE,SAAS,GAAG,cAAc,CAAC,cAAc,CAAC,2CAmB5C;AAED,wBAAgB,OAAO,CAAC,EACtB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,cAAc,CAAC,cAAc,CAAC,2CAMhC;AAED,wBAAgB,GAAG,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,cAAc,CAAC,cAAc,CAAC,2CAmBzE;AAED,wBAAgB,QAAQ,CAAC,EACvB,IAAI,EACJ,IAAI,EACJ,QAAQ,EACR,UAAU,EACV,MAAM,EACN,GAAG,KAAK,EACT,EAAE,aAAa,2CA+Bf;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,cAAc,CAAC,cAAc,CAAC,2CAY/D;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,SAAS,CAAC;CACrB,2CAiBA;AAED,OAAO,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ui/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAE5D,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAYlE,wBAAgB,IAAI,CAAC,EACnB,QAAQ,EACR,SAAS,EACT,GAAG,EACH,GAAG,KAAK,EACT,EAAE,SAAS,GAAG,cAAc,CAAC,cAAc,CAAC,2CAkB5C;AAED,wBAAgB,OAAO,CAAC,EACtB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,cAAc,CAAC,cAAc,CAAC,2CAMhC;AAED,wBAAgB,GAAG,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,cAAc,CAAC,cAAc,CAAC,2CAmBzE;AAED,wBAAgB,QAAQ,CAAC,EACvB,IAAI,EACJ,IAAI,EACJ,QAAQ,EACR,UAAU,EACV,MAAM,EACN,GAAG,KAAK,EACT,EAAE,aAAa,2CA+Bf;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,cAAc,CAAC,cAAc,CAAC,2CAY/D;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,SAAS,CAAC;CACrB,2CAiBA;AAED,OAAO,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC"}
package/dist/ui/index.js CHANGED
@@ -6,7 +6,7 @@ import { ApiProvider } from '../ui/lazy.js';
6
6
  import { cn } from 'fumadocs-ui/utils/cn';
7
7
  import { buttonVariants } from 'fumadocs-ui/components/ui/button';
8
8
  export function Root({ children, className, ctx, ...props }) {
9
- return (_jsx("div", { className: cn('flex flex-col gap-24 text-sm', className), ...props, children: _jsx(ApiProvider, { mediaAdapters: Object.fromEntries(Object.entries(ctx.mediaAdapters).filter(([_, v]) => typeof v !== 'boolean')), servers: ctx.servers, shikiOptions: ctx.shikiOptions, defaultBaseUrl: ctx.baseUrl, children: children }) }));
9
+ return (_jsx("div", { className: cn('flex flex-col gap-24 text-sm', className), ...props, children: _jsx(ApiProvider, { mediaAdapters: Object.fromEntries(Object.entries(ctx.mediaAdapters).filter(([_, v]) => typeof v !== 'boolean')), servers: ctx.servers, shikiOptions: ctx.shikiOptions, children: children }) }));
10
10
  }
11
11
  export function APIInfo({ className, ...props }) {
12
12
  return (_jsx("div", { className: cn('min-w-0 flex-1', className), ...props, children: props.children }));
@@ -1 +1 @@
1
- {"version":3,"file":"server-select.d.ts","sourceRoot":"","sources":["../../src/ui/server-select.tsx"],"names":[],"mappings":"AAcA,OAAO,EAAE,KAAK,cAAc,EAAuB,MAAM,OAAO,CAAC;AAejE,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,KAAK,EAAE,cAAc,CAAC,cAAc,CAAC,uDA+CzE"}
1
+ {"version":3,"file":"server-select.d.ts","sourceRoot":"","sources":["../../src/ui/server-select.tsx"],"names":[],"mappings":"AAcA,OAAO,EAAE,KAAK,cAAc,EAAuB,MAAM,OAAO,CAAC;AAejE,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,KAAK,EAAE,cAAc,CAAC,cAAc,CAAC,uDAgDzE"}
@@ -6,7 +6,7 @@ import { Input, labelVariants } from '../ui/components/input.js';
6
6
  import { useEffect, useState } from 'react';
7
7
  import { cn } from 'fumadocs-ui/utils/cn';
8
8
  import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, DialogTrigger, } from '../ui/components/dialog.js';
9
- import { getUrl } from '../utils/server-url.js';
9
+ import { resolveServerUrl, withBase } from '../utils/url.js';
10
10
  import { FormProvider, useController, useForm } from 'react-hook-form';
11
11
  import { useEffectEvent } from 'fumadocs-core/utils/use-effect-event';
12
12
  export default function ServerSelect(props) {
@@ -20,9 +20,7 @@ export default function ServerSelect(props) {
20
20
  if (servers.length <= 0)
21
21
  return;
22
22
  return (_jsxs(Dialog, { open: open, onOpenChange: setOpen, children: [_jsx(DialogTrigger, { className: "text-xs p-3 py-2 bg-fd-muted text-fd-muted-foreground transition-colors truncate hover:bg-fd-accent hover:text-fd-accent-foreground focus-visible:outline-none", children: isMounted
23
- ? server
24
- ? getUrl(server.url, server.variables)
25
- : window.location.origin
23
+ ? withBase(server ? resolveServerUrl(server.url, server.variables) : '/', window.location.origin)
26
24
  : 'loading...' }), _jsxs(DialogContent, { ...props, children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: "Server URL" }), _jsx(DialogDescription, { children: "The base URL of your API endpoint." })] }), _jsxs(Select, { value: server?.url, onValueChange: setServer, children: [_jsx(SelectTrigger, { children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { children: servers.map((item) => (_jsxs(SelectItem, { value: item.url, children: [_jsx("code", { className: "text-[13px]", children: item.url }), _jsx("p", { className: "text-fd-muted-foreground", children: item.description })] }, item.url))) })] }), server && server.variables && (_jsx(ServerSelectContent, { server: server }, server.url))] })] }));
27
25
  }
28
26
  function ServerSelectContent({ server }) {
@@ -1 +1 @@
1
- {"version":3,"file":"get-typescript-schema.d.ts","sourceRoot":"","sources":["../../src/utils/get-typescript-schema.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,cAAc,GAC7B,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAgB7B"}
1
+ {"version":3,"file":"get-typescript-schema.d.ts","sourceRoot":"","sources":["../../src/utils/get-typescript-schema.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,cAAc,GAC7B,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAS7B"}
@@ -1,15 +1,11 @@
1
1
  import { compile } from '@fumari/json-schema-to-typescript';
2
2
  export async function getTypescriptSchema(schema, dereferenceMap) {
3
- return compile(
4
- // re-running on the same schema results in error
5
- // because it uses `defineProperty` to define internal references
6
- // we clone the schema to fix this problem
7
- schema, 'Response', {
3
+ const cloned = structuredClone({ schema, dereferenceMap });
4
+ return compile(cloned.schema, 'Response', {
8
5
  $refOptions: false,
9
- schemaToId: dereferenceMap,
6
+ schemaToId: cloned.dereferenceMap,
10
7
  bannerComment: '',
11
8
  additionalProperties: false,
12
- format: true,
13
9
  enableConstEnums: false,
14
10
  });
15
11
  }
@@ -0,0 +1,10 @@
1
+ import type { RequestData } from '../requests/_shared.js';
2
+ export declare function joinURL(base: string, pathname: string): string;
3
+ /**
4
+ * @param url - URL (can be relative)
5
+ * @param base - the base URL (must be absolute)
6
+ */
7
+ export declare function withBase(url: string, base: string): string;
8
+ export declare function resolveServerUrl(template: string, variables: Record<string, string>): string;
9
+ export declare function resolveRequestData(pathname: string, { path, query }: RequestData): string;
10
+ //# sourceMappingURL=url.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../../src/utils/url.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAQ9D;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAM1D;AAED,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC,MAAM,CAMR;AAED,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,WAAW,GAC3B,MAAM,CAyBR"}
@@ -0,0 +1,51 @@
1
+ export function joinURL(base, pathname) {
2
+ pathname = pathname
3
+ .split('/')
4
+ .filter((v) => v.length > 0)
5
+ .join('/');
6
+ if (!base.endsWith('/') && pathname.length > 0)
7
+ base += '/';
8
+ return base + pathname;
9
+ }
10
+ /**
11
+ * @param url - URL (can be relative)
12
+ * @param base - the base URL (must be absolute)
13
+ */
14
+ export function withBase(url, base) {
15
+ if (!url.startsWith('https://') && !url.startsWith('http://')) {
16
+ return joinURL(base, url);
17
+ }
18
+ return url;
19
+ }
20
+ export function resolveServerUrl(template, variables) {
21
+ for (const [key, value] of Object.entries(variables)) {
22
+ template = template.replaceAll(`{${key}}`, value);
23
+ }
24
+ return template;
25
+ }
26
+ export function resolveRequestData(pathname, { path, query }) {
27
+ for (const key in path) {
28
+ if (path[key] === '')
29
+ continue;
30
+ if (Array.isArray(path[key])) {
31
+ pathname = pathname.replace(`{${key}}`, path[key].join('/'));
32
+ }
33
+ else {
34
+ pathname = pathname.replace(`{${key}}`, String(path[key]));
35
+ }
36
+ }
37
+ const searchParams = new URLSearchParams();
38
+ for (const key in query) {
39
+ if (Array.isArray(query[key])) {
40
+ for (const value of query[key]) {
41
+ if (!query[key])
42
+ continue;
43
+ searchParams.append(key, String(value));
44
+ }
45
+ }
46
+ else if (query[key] && query[key] !== '') {
47
+ searchParams.set(key, String(query[key]));
48
+ }
49
+ }
50
+ return searchParams.size > 0 ? `${pathname}?${searchParams}` : pathname;
51
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fumadocs-openapi",
3
- "version": "9.0.5",
3
+ "version": "9.0.7",
4
4
  "description": "Generate MDX docs for your OpenAPI spec",
5
5
  "keywords": [
6
6
  "NextJs",
@@ -64,8 +64,8 @@
64
64
  "shiki": "^3.4.2",
65
65
  "tinyglobby": "^0.2.14",
66
66
  "xml-js": "^1.6.11",
67
- "fumadocs-core": "15.5.0",
68
- "fumadocs-ui": "15.5.0"
67
+ "fumadocs-ui": "15.5.1",
68
+ "fumadocs-core": "15.5.1"
69
69
  },
70
70
  "devDependencies": {
71
71
  "@scalar/api-client-react": "^1.3.5",
@@ -1,2 +0,0 @@
1
- export declare function getPathnameFromInput(url: string, path: Record<string, unknown>, query: Record<string, unknown>): string;
2
- //# sourceMappingURL=get-pathname-from-input.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get-pathname-from-input.d.ts","sourceRoot":"","sources":["../../src/utils/get-pathname-from-input.ts"],"names":[],"mappings":"AAAA,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,MAAM,CA0BR"}
@@ -1,27 +0,0 @@
1
- export function getPathnameFromInput(url, path, query) {
2
- let pathname = url;
3
- for (const key in path) {
4
- if (path[key] === '')
5
- continue;
6
- if (Array.isArray(path[key])) {
7
- pathname = pathname.replace(`{${key}}`, path[key].join('/'));
8
- }
9
- else {
10
- pathname = pathname.replace(`{${key}}`, String(path[key]));
11
- }
12
- }
13
- const searchParams = new URLSearchParams();
14
- for (const key in query) {
15
- if (query[key] === '')
16
- continue;
17
- if (Array.isArray(query[key])) {
18
- for (const value of query[key]) {
19
- searchParams.append(key, String(value));
20
- }
21
- }
22
- else {
23
- searchParams.set(key, String(query[key]));
24
- }
25
- }
26
- return searchParams.size > 0 ? `${pathname}?${searchParams}` : pathname;
27
- }
@@ -1,2 +0,0 @@
1
- export declare function getUrl(url: string, variables: Record<string, string>): string;
2
- //# sourceMappingURL=server-url.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"server-url.d.ts","sourceRoot":"","sources":["../../src/utils/server-url.ts"],"names":[],"mappings":"AAAA,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAQ7E"}
@@ -1,7 +0,0 @@
1
- export function getUrl(url, variables) {
2
- let out = url;
3
- for (const [key, value] of Object.entries(variables)) {
4
- out = out.replaceAll(`{${key}}`, value);
5
- }
6
- return out;
7
- }