fumadocs-openapi 10.6.3 → 10.6.5

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 (228) hide show
  1. package/css/generated/shared.css +8 -17
  2. package/dist/_openapi/types.d.ts +1 -2
  3. package/dist/generate-file.d.ts +3 -4
  4. package/dist/generate-file.js +0 -2
  5. package/dist/i18n.d.ts +1 -2
  6. package/dist/i18n.js +0 -2
  7. package/dist/playground/client.d.ts +12 -22
  8. package/dist/playground/client.js +37 -18
  9. package/dist/playground/components/inputs.js +0 -2
  10. package/dist/playground/components/oauth-dialog.js +0 -2
  11. package/dist/playground/components/server-select.js +0 -2
  12. package/dist/playground/fetcher.d.ts +1 -2
  13. package/dist/playground/fetcher.js +0 -2
  14. package/dist/playground/schema.d.ts +1 -2
  15. package/dist/playground/schema.js +25 -37
  16. package/dist/playground/status-info.js +0 -2
  17. package/dist/requests/generators/all.d.ts +1 -2
  18. package/dist/requests/generators/all.js +0 -2
  19. package/dist/requests/generators/csharp.d.ts +1 -2
  20. package/dist/requests/generators/csharp.js +0 -2
  21. package/dist/requests/generators/curl.d.ts +1 -2
  22. package/dist/requests/generators/curl.js +0 -2
  23. package/dist/requests/generators/go.d.ts +1 -2
  24. package/dist/requests/generators/go.js +0 -2
  25. package/dist/requests/generators/index.d.ts +1 -2
  26. package/dist/requests/generators/index.js +0 -2
  27. package/dist/requests/generators/java.d.ts +1 -2
  28. package/dist/requests/generators/java.js +0 -2
  29. package/dist/requests/generators/javascript.d.ts +1 -2
  30. package/dist/requests/generators/javascript.js +0 -2
  31. package/dist/requests/generators/python.d.ts +1 -2
  32. package/dist/requests/generators/python.js +0 -2
  33. package/dist/requests/media/adapter.d.ts +1 -2
  34. package/dist/requests/media/adapter.js +0 -2
  35. package/dist/requests/media/encode.d.ts +1 -2
  36. package/dist/requests/media/encode.js +0 -2
  37. package/dist/requests/media/resolve-adapter.js +0 -2
  38. package/dist/requests/string-utils.js +0 -2
  39. package/dist/requests/types.d.ts +1 -2
  40. package/dist/scalar/client.js +0 -2
  41. package/dist/scalar/index.d.ts +1 -2
  42. package/dist/scalar/index.js +0 -2
  43. package/dist/server/create.d.ts +2 -3
  44. package/dist/server/create.js +1 -3
  45. package/dist/server/proxy.d.ts +1 -2
  46. package/dist/server/proxy.js +0 -2
  47. package/dist/server/source-api.d.ts +3 -4
  48. package/dist/server/source-api.js +0 -2
  49. package/dist/types.d.ts +5 -6
  50. package/dist/ui/api-page.d.ts +1 -2
  51. package/dist/ui/api-page.js +0 -2
  52. package/dist/ui/base.d.ts +10 -10
  53. package/dist/ui/base.js +22 -2
  54. package/dist/ui/client/boundary.d.ts +1 -2
  55. package/dist/ui/client/boundary.js +0 -2
  56. package/dist/ui/client/boundary.lazy.js +0 -2
  57. package/dist/ui/client/full.js +0 -2
  58. package/dist/ui/client/i18n.js +0 -2
  59. package/dist/ui/client/index.d.ts +1 -2
  60. package/dist/ui/client/index.js +0 -2
  61. package/dist/ui/client/storage-key.js +0 -2
  62. package/dist/ui/components/accordion.js +0 -2
  63. package/dist/ui/components/codeblock.d.ts +1 -2
  64. package/dist/ui/components/codeblock.js +0 -2
  65. package/dist/ui/components/dialog.js +0 -2
  66. package/dist/ui/components/input.js +0 -2
  67. package/dist/ui/components/method-label.js +0 -2
  68. package/dist/ui/components/select-tab.js +0 -2
  69. package/dist/ui/components/select.js +0 -2
  70. package/dist/ui/contexts/api.d.ts +1 -2
  71. package/dist/ui/contexts/api.js +0 -2
  72. package/dist/ui/create-client.d.ts +1 -2
  73. package/dist/ui/create-client.js +18 -15
  74. package/dist/ui/index.d.ts +1 -2
  75. package/dist/ui/index.js +0 -2
  76. package/dist/ui/operation/client.js +0 -2
  77. package/dist/ui/operation/get-example-requests.d.ts +1 -2
  78. package/dist/ui/operation/get-example-requests.js +2 -4
  79. package/dist/ui/operation/index.js +5 -8
  80. package/dist/ui/operation/request-tabs.js +0 -2
  81. package/dist/ui/operation/response-tabs.d.ts +2 -3
  82. package/dist/ui/operation/response-tabs.js +0 -2
  83. package/dist/ui/operation/usage-tabs/client.d.ts +1 -2
  84. package/dist/ui/operation/usage-tabs/client.js +0 -2
  85. package/dist/ui/operation/usage-tabs/index.js +0 -2
  86. package/dist/ui/schema/client.d.ts +1 -2
  87. package/dist/ui/schema/client.js +0 -2
  88. package/dist/ui/schema/index.d.ts +3 -4
  89. package/dist/ui/schema/index.js +1 -3
  90. package/dist/utils/deep-equal.js +8 -6
  91. package/dist/utils/document/dereference.d.ts +17 -0
  92. package/dist/utils/document/dereference.js +19 -0
  93. package/dist/utils/document/process.d.ts +6 -0
  94. package/dist/utils/{process-document.js → document/process.js} +4 -19
  95. package/dist/utils/id-to-title.js +0 -2
  96. package/dist/utils/is-plain-object.js +8 -0
  97. package/dist/utils/pages/builder.d.ts +5 -6
  98. package/dist/utils/pages/builder.js +0 -2
  99. package/dist/utils/pages/preset-auto.d.ts +3 -4
  100. package/dist/utils/pages/preset-auto.js +0 -2
  101. package/dist/utils/pages/to-static-data.js +0 -2
  102. package/dist/utils/pages/to-text.d.ts +1 -2
  103. package/dist/utils/pages/to-text.js +0 -2
  104. package/dist/utils/remove-undefined.js +10 -10
  105. package/dist/utils/schema/dereference.js +22 -14
  106. package/dist/utils/schema/index.d.ts +7 -7
  107. package/dist/utils/schema/index.js +21 -4
  108. package/dist/utils/{merge-schema.js → schema/merge.js} +2 -4
  109. package/dist/utils/schema/pick.js +44 -0
  110. package/dist/utils/schema/ref.js +35 -0
  111. package/dist/utils/schema/resolve-ref.js +4 -14
  112. package/dist/utils/schema/to-string.js +4 -7
  113. package/dist/utils/url.js +0 -2
  114. package/dist/utils/use-query.js +0 -2
  115. package/package.json +3 -4
  116. package/dist/_openapi/types.d.ts.map +0 -1
  117. package/dist/generate-file.d.ts.map +0 -1
  118. package/dist/generate-file.js.map +0 -1
  119. package/dist/i18n.d.ts.map +0 -1
  120. package/dist/i18n.js.map +0 -1
  121. package/dist/playground/client.d.ts.map +0 -1
  122. package/dist/playground/client.js.map +0 -1
  123. package/dist/playground/components/inputs.js.map +0 -1
  124. package/dist/playground/components/oauth-dialog.js.map +0 -1
  125. package/dist/playground/components/server-select.js.map +0 -1
  126. package/dist/playground/fetcher.d.ts.map +0 -1
  127. package/dist/playground/fetcher.js.map +0 -1
  128. package/dist/playground/index.d.ts +0 -22
  129. package/dist/playground/index.d.ts.map +0 -1
  130. package/dist/playground/index.js +0 -118
  131. package/dist/playground/index.js.map +0 -1
  132. package/dist/playground/schema.d.ts.map +0 -1
  133. package/dist/playground/schema.js.map +0 -1
  134. package/dist/playground/status-info.js.map +0 -1
  135. package/dist/requests/generators/all.d.ts.map +0 -1
  136. package/dist/requests/generators/all.js.map +0 -1
  137. package/dist/requests/generators/csharp.d.ts.map +0 -1
  138. package/dist/requests/generators/csharp.js.map +0 -1
  139. package/dist/requests/generators/curl.d.ts.map +0 -1
  140. package/dist/requests/generators/curl.js.map +0 -1
  141. package/dist/requests/generators/go.d.ts.map +0 -1
  142. package/dist/requests/generators/go.js.map +0 -1
  143. package/dist/requests/generators/index.d.ts.map +0 -1
  144. package/dist/requests/generators/index.js.map +0 -1
  145. package/dist/requests/generators/java.d.ts.map +0 -1
  146. package/dist/requests/generators/java.js.map +0 -1
  147. package/dist/requests/generators/javascript.d.ts.map +0 -1
  148. package/dist/requests/generators/javascript.js.map +0 -1
  149. package/dist/requests/generators/python.d.ts.map +0 -1
  150. package/dist/requests/generators/python.js.map +0 -1
  151. package/dist/requests/media/adapter.d.ts.map +0 -1
  152. package/dist/requests/media/adapter.js.map +0 -1
  153. package/dist/requests/media/encode.d.ts.map +0 -1
  154. package/dist/requests/media/encode.js.map +0 -1
  155. package/dist/requests/media/resolve-adapter.js.map +0 -1
  156. package/dist/requests/string-utils.js.map +0 -1
  157. package/dist/requests/types.d.ts.map +0 -1
  158. package/dist/scalar/client.js.map +0 -1
  159. package/dist/scalar/index.d.ts.map +0 -1
  160. package/dist/scalar/index.js.map +0 -1
  161. package/dist/server/create.d.ts.map +0 -1
  162. package/dist/server/create.js.map +0 -1
  163. package/dist/server/proxy.d.ts.map +0 -1
  164. package/dist/server/proxy.js.map +0 -1
  165. package/dist/server/source-api.d.ts.map +0 -1
  166. package/dist/server/source-api.js.map +0 -1
  167. package/dist/types.d.ts.map +0 -1
  168. package/dist/ui/api-page.d.ts.map +0 -1
  169. package/dist/ui/api-page.js.map +0 -1
  170. package/dist/ui/base.d.ts.map +0 -1
  171. package/dist/ui/base.js.map +0 -1
  172. package/dist/ui/client/boundary.d.ts.map +0 -1
  173. package/dist/ui/client/boundary.js.map +0 -1
  174. package/dist/ui/client/boundary.lazy.js.map +0 -1
  175. package/dist/ui/client/full.js.map +0 -1
  176. package/dist/ui/client/i18n.js.map +0 -1
  177. package/dist/ui/client/index.d.ts.map +0 -1
  178. package/dist/ui/client/index.js.map +0 -1
  179. package/dist/ui/client/storage-key.js.map +0 -1
  180. package/dist/ui/components/accordion.js.map +0 -1
  181. package/dist/ui/components/codeblock.d.ts.map +0 -1
  182. package/dist/ui/components/codeblock.js.map +0 -1
  183. package/dist/ui/components/dialog.js.map +0 -1
  184. package/dist/ui/components/input.js.map +0 -1
  185. package/dist/ui/components/method-label.js.map +0 -1
  186. package/dist/ui/components/select-tab.js.map +0 -1
  187. package/dist/ui/components/select.js.map +0 -1
  188. package/dist/ui/contexts/api.d.ts.map +0 -1
  189. package/dist/ui/contexts/api.js.map +0 -1
  190. package/dist/ui/create-client.d.ts.map +0 -1
  191. package/dist/ui/create-client.js.map +0 -1
  192. package/dist/ui/index.d.ts.map +0 -1
  193. package/dist/ui/index.js.map +0 -1
  194. package/dist/ui/operation/client.js.map +0 -1
  195. package/dist/ui/operation/get-example-requests.d.ts.map +0 -1
  196. package/dist/ui/operation/get-example-requests.js.map +0 -1
  197. package/dist/ui/operation/index.js.map +0 -1
  198. package/dist/ui/operation/request-tabs.js.map +0 -1
  199. package/dist/ui/operation/response-tabs.d.ts.map +0 -1
  200. package/dist/ui/operation/response-tabs.js.map +0 -1
  201. package/dist/ui/operation/usage-tabs/client.d.ts.map +0 -1
  202. package/dist/ui/operation/usage-tabs/client.js.map +0 -1
  203. package/dist/ui/operation/usage-tabs/index.js.map +0 -1
  204. package/dist/ui/schema/client.d.ts.map +0 -1
  205. package/dist/ui/schema/client.js.map +0 -1
  206. package/dist/ui/schema/index.d.ts.map +0 -1
  207. package/dist/ui/schema/index.js.map +0 -1
  208. package/dist/utils/deep-equal.js.map +0 -1
  209. package/dist/utils/id-to-title.js.map +0 -1
  210. package/dist/utils/merge-schema.js.map +0 -1
  211. package/dist/utils/pages/builder.d.ts.map +0 -1
  212. package/dist/utils/pages/builder.js.map +0 -1
  213. package/dist/utils/pages/preset-auto.d.ts.map +0 -1
  214. package/dist/utils/pages/preset-auto.js.map +0 -1
  215. package/dist/utils/pages/to-static-data.js.map +0 -1
  216. package/dist/utils/pages/to-text.d.ts.map +0 -1
  217. package/dist/utils/pages/to-text.js.map +0 -1
  218. package/dist/utils/process-document.d.ts +0 -18
  219. package/dist/utils/process-document.d.ts.map +0 -1
  220. package/dist/utils/process-document.js.map +0 -1
  221. package/dist/utils/remove-undefined.js.map +0 -1
  222. package/dist/utils/schema/dereference.js.map +0 -1
  223. package/dist/utils/schema/index.d.ts.map +0 -1
  224. package/dist/utils/schema/index.js.map +0 -1
  225. package/dist/utils/schema/resolve-ref.js.map +0 -1
  226. package/dist/utils/schema/to-string.js.map +0 -1
  227. package/dist/utils/url.js.map +0 -1
  228. package/dist/utils/use-query.js.map +0 -1
@@ -1,5 +1,5 @@
1
- import { NoReference } from "../../utils/schema/index.js";
2
1
  import { ResponseObject } from "../../types.js";
2
+ import { NoReference } from "../../utils/schema/index.js";
3
3
  import { ReactNode } from "react";
4
4
 
5
5
  //#region src/ui/operation/response-tabs.d.ts
@@ -27,5 +27,4 @@ interface ResponseExample {
27
27
  description?: string;
28
28
  }
29
29
  //#endregion
30
- export { ResponseTab };
31
- //# sourceMappingURL=response-tabs.d.ts.map
30
+ export { ResponseTab };
@@ -75,5 +75,3 @@ function renderResponseTabsDefault(tabs, ctx) {
75
75
  }
76
76
  //#endregion
77
77
  export { ResponseTabs };
78
-
79
- //# sourceMappingURL=response-tabs.js.map
@@ -11,5 +11,4 @@ declare function UsageTab({
11
11
  id: string;
12
12
  }): _$react_jsx_runtime0.JSX.Element | null;
13
13
  //#endregion
14
- export { UsageTab, UsageTabsSelector };
15
- //# sourceMappingURL=client.d.ts.map
14
+ export { UsageTab, UsageTabsSelector };
@@ -86,5 +86,3 @@ function UsageTab({ id, lang, _client }) {
86
86
  }
87
87
  //#endregion
88
88
  export { UsageTab, UsageTabsSelector };
89
-
90
- //# sourceMappingURL=client.js.map
@@ -58,5 +58,3 @@ function UsageTabs({ method, ctx }) {
58
58
  }
59
59
  //#endregion
60
60
  export { UsageTabs };
61
-
62
- //# sourceMappingURL=index.js.map
@@ -15,5 +15,4 @@ declare function SchemaUI({
15
15
  generated
16
16
  }: SchemaUIProps): _$react_jsx_runtime0.JSX.Element;
17
17
  //#endregion
18
- export { SchemaUI, SchemaUIProps };
19
- //# sourceMappingURL=client.d.ts.map
18
+ export { SchemaUI, SchemaUIProps };
@@ -357,5 +357,3 @@ function isExpandable(data) {
357
357
  }
358
358
  //#endregion
359
359
  export { SchemaUI };
360
-
361
- //# sourceMappingURL=client.js.map
@@ -1,5 +1,5 @@
1
- import { ResolvedSchema } from "../../utils/schema/index.js";
2
1
  import { SchemaUIProps } from "./client.js";
2
+ import { ParsedSchema } from "../../utils/schema/index.js";
3
3
  import { ReactNode } from "react";
4
4
  //#region src/ui/schema/index.d.ts
5
5
  interface FieldBase {
@@ -42,7 +42,7 @@ type SchemaData = FieldBase & ({
42
42
  }[];
43
43
  });
44
44
  interface SchemaUIOptions {
45
- root: ResolvedSchema;
45
+ root: ParsedSchema;
46
46
  client: Omit<SchemaUIProps, 'generated'>;
47
47
  /**
48
48
  * include read only props
@@ -58,5 +58,4 @@ interface SchemaUIGeneratedData {
58
58
  refs: Record<string, SchemaData>;
59
59
  }
60
60
  //#endregion
61
- export { SchemaUIGeneratedData, SchemaUIOptions };
62
- //# sourceMappingURL=index.d.ts.map
61
+ export { SchemaUIGeneratedData, SchemaUIOptions };
@@ -1,4 +1,4 @@
1
- import { mergeAllOf } from "../../utils/merge-schema.js";
1
+ import { mergeAllOf } from "../../utils/schema/merge.js";
2
2
  import { FormatFlags, schemaToString } from "../../utils/schema/to-string.js";
3
3
  import { I18nLabel } from "../client/i18n.js";
4
4
  import { useMemo } from "react";
@@ -254,5 +254,3 @@ function formatRange(value, min, exclusiveMin, max, exclusiveMax) {
254
254
  }
255
255
  //#endregion
256
256
  export { Schema };
257
-
258
- //# sourceMappingURL=index.js.map
@@ -1,3 +1,4 @@
1
+ import { isPlainObject } from "./is-plain-object.js";
1
2
  //#region src/utils/deep-equal.ts
2
3
  function deepEqual(a, b) {
3
4
  if (a === b) return true;
@@ -8,12 +9,13 @@ function deepEqual(a, b) {
8
9
  return a.every((item, index) => deepEqual(item, b[index]));
9
10
  }
10
11
  if (Array.isArray(a) || Array.isArray(b)) return false;
11
- const keysA = Object.keys(a);
12
- const keysB = Object.keys(b);
13
- if (keysA.length !== keysB.length) return false;
14
- return keysA.every((key) => Object.prototype.hasOwnProperty.call(b, key) && deepEqual(a[key], b[key]));
12
+ if (isPlainObject(a) && isPlainObject(b)) {
13
+ const keysA = Object.keys(a);
14
+ const keysB = Object.keys(b);
15
+ if (keysA.length !== keysB.length) return false;
16
+ return keysA.every((key) => key in b && deepEqual(a[key], b[key]));
17
+ }
18
+ return false;
15
19
  }
16
20
  //#endregion
17
21
  export { deepEqual };
18
-
19
- //# sourceMappingURL=deep-equal.js.map
@@ -0,0 +1,17 @@
1
+ import { Document } from "../../types.js";
2
+ import { NoReference } from "../schema/index.js";
3
+
4
+ //#region src/utils/document/dereference.d.ts
5
+ interface DereferencedDocument {
6
+ /**
7
+ * dereferenced document
8
+ */
9
+ dereferenced: NoReference<Document>;
10
+ /**
11
+ * Get raw $ref from dereferenced object
12
+ */
13
+ getRawRef: (obj: object) => string | undefined;
14
+ bundled: Document;
15
+ }
16
+ //#endregion
17
+ export { DereferencedDocument };
@@ -0,0 +1,19 @@
1
+ import { dereferenceSync } from "../schema/dereference.js";
2
+ //#region src/utils/document/dereference.ts
3
+ function dereferenceDocument(bundled) {
4
+ /**
5
+ * Dereferenced value and its original `$ref` value
6
+ */
7
+ const dereferenceMap = /* @__PURE__ */ new Map();
8
+ return {
9
+ bundled,
10
+ dereferenced: dereferenceSync(bundled, (schema, ref) => {
11
+ dereferenceMap.set(schema, ref);
12
+ }),
13
+ getRawRef(obj) {
14
+ return dereferenceMap.get(obj);
15
+ }
16
+ };
17
+ }
18
+ //#endregion
19
+ export { dereferenceDocument };
@@ -0,0 +1,6 @@
1
+ import { DereferencedDocument } from "./dereference.js";
2
+
3
+ //#region src/utils/document/process.d.ts
4
+ type ProcessedDocument = DereferencedDocument;
5
+ //#endregion
6
+ export { ProcessedDocument };
@@ -1,13 +1,13 @@
1
- import { dereferenceSync } from "./schema/dereference.js";
1
+ import { dereferenceDocument } from "./dereference.js";
2
2
  import { bundle } from "@scalar/json-magic/bundle";
3
3
  import { upgrade } from "@scalar/openapi-upgrader";
4
4
  import { fetchUrls, readFiles } from "@scalar/json-magic/bundle/plugins/node";
5
- //#region src/utils/process-document.ts
5
+ //#region src/utils/document/process.ts
6
6
  /**
7
7
  * process & reference input document to a Fumadocs OpenAPI compatible format
8
8
  */
9
9
  async function processDocument(input) {
10
- const bundled = await bundle(input, {
10
+ return dereferenceDocument(await bundle(input, {
11
11
  plugins: [fetchUrls(), readFiles()],
12
12
  treeShake: true,
13
13
  hooks: { onResolveError(node) {
@@ -15,22 +15,7 @@ async function processDocument(input) {
15
15
  } }
16
16
  }).then((v) => upgrade(v, "3.2")).catch((e) => {
17
17
  throw new Error(`[OpenAPI] Failed to resolve input: ${input}`, { cause: e });
18
- });
19
- /**
20
- * Dereferenced value and its original `$ref` value
21
- */
22
- const dereferenceMap = /* @__PURE__ */ new Map();
23
- return {
24
- dereferenced: dereferenceSync(bundled, (schema, ref) => {
25
- dereferenceMap.set(schema, ref);
26
- }),
27
- getRawRef(obj) {
28
- return dereferenceMap.get(obj);
29
- },
30
- bundled
31
- };
18
+ }));
32
19
  }
33
20
  //#endregion
34
21
  export { processDocument };
35
-
36
- //# sourceMappingURL=process-document.js.map
@@ -10,5 +10,3 @@ function idToTitle(id) {
10
10
  }
11
11
  //#endregion
12
12
  export { idToTitle };
13
-
14
- //# sourceMappingURL=id-to-title.js.map
@@ -0,0 +1,8 @@
1
+ //#region src/utils/is-plain-object.ts
2
+ function isPlainObject(value) {
3
+ if (typeof value !== "object" || value === null) return false;
4
+ const prototype = Object.getPrototypeOf(value);
5
+ return prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null;
6
+ }
7
+ //#endregion
8
+ export { isPlainObject };
@@ -1,8 +1,8 @@
1
- import { NoReference } from "../schema/index.js";
2
1
  import { OpenAPIServer } from "../../server/create.js";
3
2
  import { OperationItem, WebhookItem } from "../../ui/api-page.js";
4
3
  import { OperationObject, PathItemObject, TagObject } from "../../types.js";
5
- import { ProcessedDocument } from "../process-document.js";
4
+ import { NoReference } from "../schema/index.js";
5
+ import { DereferencedDocument } from "../document/dereference.js";
6
6
 
7
7
  //#region src/utils/pages/builder.d.ts
8
8
  interface BaseEntry {
@@ -43,7 +43,7 @@ interface PagesBuilder {
43
43
  * the input ID in OpenAPI server
44
44
  */
45
45
  id: string;
46
- document: ProcessedDocument;
46
+ document: DereferencedDocument;
47
47
  /**
48
48
  * add output entry.
49
49
  */
@@ -83,7 +83,6 @@ interface ExtractedInfo {
83
83
  })[];
84
84
  }
85
85
  declare function fromServer(server: OpenAPIServer, config: PagesBuilderConfig): Promise<Record<string, OutputEntry[]>>;
86
- declare function fromSchema(schemaId: string, processed: ProcessedDocument, config: PagesBuilderConfig): OutputEntry[];
86
+ declare function fromSchema(schemaId: string, processed: DereferencedDocument, config: PagesBuilderConfig): OutputEntry[];
87
87
  //#endregion
88
- export { OperationOutput, OutputEntry, OutputGroup, PageOutput, PagesBuilder, PagesBuilderConfig, WebhookOutput, fromSchema, fromServer };
89
- //# sourceMappingURL=builder.d.ts.map
88
+ export { OperationOutput, OutputEntry, OutputGroup, PageOutput, PagesBuilder, PagesBuilderConfig, WebhookOutput, fromSchema, fromServer };
@@ -99,5 +99,3 @@ function fromSchema(schemaId, processed, config) {
99
99
  }
100
100
  //#endregion
101
101
  export { fromSchema, fromServer };
102
-
103
- //# sourceMappingURL=builder.js.map
@@ -1,6 +1,6 @@
1
1
  import { OperationOutput, PageOutput, PagesBuilder, PagesBuilderConfig, WebhookOutput } from "./builder.js";
2
2
  import { DistributiveOmit } from "../../types.js";
3
- import { ProcessedDocument } from "../process-document.js";
3
+ import { DereferencedDocument } from "../document/dereference.js";
4
4
 
5
5
  //#region src/utils/pages/preset-auto.d.ts
6
6
  interface OperationConfig extends BaseConfig {
@@ -46,7 +46,7 @@ interface SchemaConfig extends BaseConfig {
46
46
  type SchemaToPagesOptions = SchemaConfig | TagConfig | OperationConfig | ({
47
47
  per: 'custom';
48
48
  } & PagesBuilderConfig);
49
- type NameFn<Entry extends OperationOutput | WebhookOutput | PageOutput = OperationOutput | WebhookOutput | PageOutput> = (this: PagesBuilder, output: DistributiveOmit<Entry, 'path'>, document: ProcessedDocument['dereferenced']) => string;
49
+ type NameFn<Entry extends OperationOutput | WebhookOutput | PageOutput = OperationOutput | WebhookOutput | PageOutput> = (this: PagesBuilder, output: DistributiveOmit<Entry, 'path'>, document: DereferencedDocument['dereferenced']) => string;
50
50
  interface NameFnOptions {
51
51
  /**
52
52
  * The version of algorithm used to generate file paths.
@@ -68,5 +68,4 @@ interface BaseConfig {
68
68
  }
69
69
  declare function createAutoPreset(options: SchemaToPagesOptions): PagesBuilderConfig;
70
70
  //#endregion
71
- export { SchemaToPagesOptions, createAutoPreset };
72
- //# sourceMappingURL=preset-auto.d.ts.map
71
+ export { SchemaToPagesOptions, createAutoPreset };
@@ -182,5 +182,3 @@ function createAutoPreset(options) {
182
182
  }
183
183
  //#endregion
184
184
  export { createAutoPreset };
185
-
186
- //# sourceMappingURL=preset-auto.js.map
@@ -44,5 +44,3 @@ function toStaticData(page, dereferenced) {
44
44
  }
45
45
  //#endregion
46
46
  export { toStaticData };
47
-
48
- //# sourceMappingURL=to-static-data.js.map
@@ -41,5 +41,4 @@ type DocumentContext = {
41
41
  type: 'file';
42
42
  };
43
43
  //#endregion
44
- export { PagesToTextOptions };
45
- //# sourceMappingURL=to-text.d.ts.map
44
+ export { PagesToTextOptions };
@@ -85,5 +85,3 @@ function pageContent({ showTitle, showDescription, document, webhooks, operation
85
85
  }
86
86
  //#endregion
87
87
  export { generateDocument, toText };
88
-
89
- //# sourceMappingURL=to-text.js.map
@@ -1,19 +1,19 @@
1
+ import { isPlainObject } from "./is-plain-object.js";
1
2
  //#region src/utils/remove-undefined.ts
2
3
  function removeUndefined(value, deep = false) {
3
- const obj = value;
4
- for (const key in obj) {
5
- if (obj[key] === void 0) delete obj[key];
6
- if (!deep) continue;
7
- const entry = obj[key];
8
- if (typeof entry === "object" && entry !== null) {
9
- removeUndefined(entry, deep);
4
+ if (!isPlainObject(value)) return value;
5
+ for (const key in value) {
6
+ const prop = value[key];
7
+ if (prop === void 0) {
8
+ delete value[key];
10
9
  continue;
11
10
  }
12
- if (Array.isArray(entry)) for (const item of entry) removeUndefined(item, deep);
11
+ if (deep) {
12
+ if (Array.isArray(prop)) for (const item of prop) removeUndefined(item, deep);
13
+ if (isPlainObject(prop)) removeUndefined(prop, deep);
14
+ }
13
15
  }
14
16
  return value;
15
17
  }
16
18
  //#endregion
17
19
  export { removeUndefined };
18
-
19
- //# sourceMappingURL=remove-undefined.js.map
@@ -1,3 +1,4 @@
1
+ import { isPlainObject } from "../is-plain-object.js";
1
2
  import { resolveRefSync } from "./resolve-ref.js";
2
3
  //#region src/utils/schema/dereference.ts
3
4
  /**
@@ -8,30 +9,37 @@ function dereferenceSync(schema, setOriginalRef) {
8
9
  const visitedNodes = /* @__PURE__ */ new Set();
9
10
  const cloned = structuredClone(schema);
10
11
  function resolve(current) {
11
- if (typeof current === "object" && current !== null) {
12
- if (visitedNodes.has(current)) return current;
13
- visitedNodes.add(current);
14
- if (Array.isArray(current)) {
15
- for (let index = 0; index < current.length; index++) current[index] = resolve(current[index]);
16
- return current;
17
- }
18
- const obj = current;
19
- if ("$ref" in current && typeof current["$ref"] === "string") {
12
+ if (visitedNodes.has(current)) return current;
13
+ visitedNodes.add(current);
14
+ if (Array.isArray(current)) for (let index = 0; index < current.length; index++) current[index] = resolve(current[index]);
15
+ else if (isPlainObject(current)) {
16
+ if (typeof current.$ref === "string") {
20
17
  const ref = current["$ref"];
21
18
  delete current["$ref"];
22
19
  const resolved = resolve(resolveRefSync(ref, cloned));
23
20
  setOriginalRef(resolved, ref);
24
21
  setOriginalRef(current, ref);
25
22
  if (typeof resolved === "boolean") throw new Error("invalid schema");
26
- for (const k in resolved) if (!(k in current)) obj[k] = resolved[k];
23
+ for (const k in resolved) if (!(k in current)) current[k] = resolved[k];
27
24
  }
28
- for (const key in current) obj[key] = resolve(obj[key]);
25
+ for (const key in current) current[key] = resolve(current[key]);
29
26
  }
30
27
  return current;
31
28
  }
32
29
  return resolve(cloned);
33
30
  }
31
+ function dereferenceSwallow(schema, full) {
32
+ if (isPlainObject(schema)) {
33
+ if (typeof schema.$ref !== "string") return schema;
34
+ const { $ref, ...rest } = schema;
35
+ const resolved = dereferenceSwallow(resolveRefSync($ref, full), full);
36
+ if (typeof resolved !== "object") throw new Error(`invalid schema referenced via "${$ref}"`);
37
+ return {
38
+ ...resolved,
39
+ ...rest
40
+ };
41
+ }
42
+ return schema;
43
+ }
34
44
  //#endregion
35
- export { dereferenceSync };
36
-
37
- //# sourceMappingURL=dereference.js.map
45
+ export { dereferenceSwallow, dereferenceSync };
@@ -1,15 +1,15 @@
1
- import { ReferenceObject } from "../../types.js";
1
+ import { ReferenceObject, SecuritySchemeObject } from "../../types.js";
2
2
  import { JSONSchema } from "json-schema-typed/draft-2020-12";
3
3
 
4
4
  //#region src/utils/schema/index.d.ts
5
5
  type NoReference<T> = T extends (infer I)[] ? NoReference<I>[] : T extends ReferenceObject ? Exclude<T, ReferenceObject> : T extends object ? { [K in keyof T]: NoReference<T[K]> } : T;
6
- type NoReferenceJSONSchema<T> = T extends (infer I)[] ? NoReference<I>[] : T extends {
7
- $ref?: string;
8
- } ? Omit<T, '$ref'> : T;
9
6
  type ParsedSchema = (JSONSchema & {
10
7
  'x-playground-lazy'?: boolean;
11
8
  }) | boolean;
12
- type ResolvedSchema = NoReferenceJSONSchema<ParsedSchema>;
9
+ /** parsed security scheme objects */
10
+ type SecurityEntry = SecuritySchemeObject & {
11
+ scopes: string[];
12
+ id: string;
13
+ };
13
14
  //#endregion
14
- export { NoReference, ParsedSchema, ResolvedSchema };
15
- //# sourceMappingURL=index.d.ts.map
15
+ export { NoReference, ParsedSchema, SecurityEntry };
@@ -27,7 +27,7 @@ function createMethod(method, path, operation) {
27
27
  ...operation,
28
28
  servers: operation.servers ?? path.servers,
29
29
  parameters: [...operation.parameters ?? [], ...path.parameters ?? []],
30
- method: method.toUpperCase()
30
+ method
31
31
  };
32
32
  }
33
33
  function pickExample(value) {
@@ -45,7 +45,24 @@ function pickExample(value) {
45
45
  if (examples.length > 0) return examples[0].value;
46
46
  }
47
47
  }
48
+ function parseSecurities(method, dereferenced) {
49
+ const result = [];
50
+ const security = method.security ?? dereferenced.security ?? [];
51
+ if (security.length === 0) return result;
52
+ for (const map of security) {
53
+ const list = [];
54
+ for (const [key, scopes] of Object.entries(map)) {
55
+ const scheme = dereferenced.components?.securitySchemes?.[key];
56
+ if (!scheme) continue;
57
+ list.push({
58
+ ...scheme,
59
+ scopes,
60
+ id: key
61
+ });
62
+ }
63
+ if (list.length > 0) result.push(list);
64
+ }
65
+ return result;
66
+ }
48
67
  //#endregion
49
- export { createMethod, getPreferredType, getTagDisplayName, methodKeys, pickExample };
50
-
51
- //# sourceMappingURL=index.js.map
68
+ export { createMethod, getPreferredType, getTagDisplayName, methodKeys, parseSecurities, pickExample };
@@ -1,5 +1,5 @@
1
- import { deepEqual } from "./deep-equal.js";
2
- //#region src/utils/merge-schema.ts
1
+ import { deepEqual } from "../deep-equal.js";
2
+ //#region src/utils/schema/merge.ts
3
3
  /**
4
4
  * Merge `allOf` object schema
5
5
  */
@@ -154,5 +154,3 @@ function intersectArray(a, b) {
154
154
  }
155
155
  //#endregion
156
156
  export { mergeAllOf };
157
-
158
- //# sourceMappingURL=merge-schema.js.map
@@ -0,0 +1,44 @@
1
+ import { isPlainObject } from "../is-plain-object.js";
2
+ import { decodeInternalRef } from "./ref.js";
3
+ import { resolveRefSync } from "./resolve-ref.js";
4
+ //#region src/utils/schema/pick.ts
5
+ /**
6
+ * return a filtered object that only contains the given `$ref` & its referenced fields.
7
+ */
8
+ function pickSchema(root, $ref) {
9
+ const out = {};
10
+ const scanned = /* @__PURE__ */ new Set();
11
+ function scan(next) {
12
+ if (isPlainObject(next)) {
13
+ if (typeof next.$ref === "string") {
14
+ if (scanned.has(next.$ref)) return;
15
+ const resolved = resolveRefSync(next.$ref, root);
16
+ scanned.add(next.$ref);
17
+ scan(resolved);
18
+ setField(out, decodeInternalRef(next.$ref), resolved);
19
+ }
20
+ for (const k in next) scan(next[k]);
21
+ return;
22
+ }
23
+ if (Array.isArray(next)) for (const item of next) scan(item);
24
+ }
25
+ scan({ $ref });
26
+ return out;
27
+ }
28
+ function setField(obj, field, value) {
29
+ if (field.length === 0) return value;
30
+ const out = isPlainObject(obj) ? obj : {};
31
+ let current = out;
32
+ for (let i = 0; i < field.length; i++) {
33
+ const k = field[i];
34
+ if (i === field.length - 1) current[k] = value;
35
+ else {
36
+ const v = current[k];
37
+ if (isPlainObject(v)) current = v;
38
+ else current = current[k] = {};
39
+ }
40
+ }
41
+ return out;
42
+ }
43
+ //#endregion
44
+ export { pickSchema };
@@ -0,0 +1,35 @@
1
+ //#region src/utils/schema/ref.ts
2
+ /**
3
+ * RFC 6901 reference-token encoding for JSON Pointer fragments used in in-document `$ref` (`#/…`).
4
+ *
5
+ * @see https://datatracker.ietf.org/doc/html/rfc6901
6
+ */
7
+ function encodeSegment(segment) {
8
+ return segment.replace(/~/g, "~0").replace(/\//g, "~1");
9
+ }
10
+ function decodeSegment(segment) {
11
+ return segment.replace(/~1/g, "/").replace(/~0/g, "~");
12
+ }
13
+ /**
14
+ * Build an in-document `$ref` string from logical path segments (e.g. `['components','schemas','Pet']` → `#/components/schemas/Pet`).
15
+ */
16
+ function encodeInternalRef(segments) {
17
+ if (segments.length === 0) return "#/";
18
+ return `#/${segments.map(encodeSegment).join("/")}`;
19
+ }
20
+ /**
21
+ * Parse an in-document `$ref` (`#/…`) into decoded path segments for walking the root document.
22
+ */
23
+ function decodeInternalRef(ref) {
24
+ if (!ref.startsWith("#")) throw new Error("expected in-document $ref starting with `#`");
25
+ const raw = ref.slice(1);
26
+ const out = [];
27
+ if (raw.length === 0) return out;
28
+ for (const token of raw.split("/")) {
29
+ if (token.length === 0) continue;
30
+ out.push(decodeSegment(token));
31
+ }
32
+ return out;
33
+ }
34
+ //#endregion
35
+ export { decodeInternalRef, encodeInternalRef };
@@ -1,21 +1,11 @@
1
+ import { isPlainObject } from "../is-plain-object.js";
2
+ import { decodeInternalRef } from "./ref.js";
1
3
  //#region src/utils/schema/resolve-ref.ts
2
4
  function resolveRefSync(ref, schema) {
3
- if (!ref.startsWith("#")) return;
4
- const segments = ref.slice(1).split("/");
5
5
  let current = schema;
6
- for (const seg of segments) {
7
- if (seg.length === 0) continue;
8
- if (isPlainObject(current)) current = current[seg];
9
- else return;
10
- }
6
+ for (const seg of decodeInternalRef(ref)) if (isPlainObject(current)) current = current[seg];
7
+ else return;
11
8
  return current;
12
9
  }
13
- function isPlainObject(value) {
14
- if (typeof value !== "object" || value === null) return false;
15
- const prototype = Object.getPrototypeOf(value);
16
- return prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null;
17
- }
18
10
  //#endregion
19
11
  export { resolveRefSync };
20
-
21
- //# sourceMappingURL=resolve-ref.js.map
@@ -23,15 +23,14 @@ function schemaToString(value, _resolver, flags = FormatFlags.None) {
23
23
  const result = Array.from(members).join(sep);
24
24
  return nullable ? `${result} | null` : result;
25
25
  }
26
- function run(schema, flags) {
27
- const resolved = resolver(schema);
28
- schema = resolved.dereferenced;
26
+ function run(input, flags) {
27
+ const { dereferenced: schema, raw } = resolver(input);
29
28
  if (schema === true) return "any";
30
29
  else if (schema === false) return "never";
31
30
  if ((flags & FormatFlags.UseAlias) === FormatFlags.UseAlias) {
32
31
  if (schema.title) return schema.title;
33
- if (typeof resolved.raw === "object" && resolved.raw.$ref) {
34
- const ref = resolved.raw.$ref.split("/");
32
+ if (typeof raw === "object" && raw.$ref) {
33
+ const ref = raw.$ref.split("/");
35
34
  if (ref.length > 0) return ref[ref.length - 1];
36
35
  }
37
36
  }
@@ -54,5 +53,3 @@ function schemaToString(value, _resolver, flags = FormatFlags.None) {
54
53
  }
55
54
  //#endregion
56
55
  export { FormatFlags, schemaToString };
57
-
58
- //# sourceMappingURL=to-string.js.map
package/dist/utils/url.js CHANGED
@@ -37,5 +37,3 @@ function resolveRequestData(pathname, { path, query }) {
37
37
  }
38
38
  //#endregion
39
39
  export { isUrl, joinURL, resolveRequestData, resolveServerUrl, withBase };
40
-
41
- //# sourceMappingURL=url.js.map
@@ -35,5 +35,3 @@ function useQuery(fn) {
35
35
  }
36
36
  //#endregion
37
37
  export { useQuery };
38
-
39
- //# sourceMappingURL=use-query.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fumadocs-openapi",
3
- "version": "10.6.3",
3
+ "version": "10.6.5",
4
4
  "description": "Generate MDX docs for your OpenAPI spec",
5
5
  "keywords": [
6
6
  "Docs",
@@ -21,7 +21,6 @@
21
21
  "exports": {
22
22
  ".": "./dist/index.js",
23
23
  "./i18n": "./dist/i18n.js",
24
- "./playground": "./dist/playground/index.js",
25
24
  "./playground/client": "./dist/playground/client.js",
26
25
  "./requests/generators": "./dist/requests/generators/index.js",
27
26
  "./requests/generators/all": "./dist/requests/generators/all.js",
@@ -79,8 +78,8 @@
79
78
  "tailwindcss": "^4.2.2",
80
79
  "tsdown": "0.21.6",
81
80
  "@fumadocs/tailwind": "0.0.3",
82
- "fumadocs-core": "16.7.9",
83
- "fumadocs-ui": "16.7.9",
81
+ "fumadocs-core": "16.7.10",
82
+ "fumadocs-ui": "16.7.10",
84
83
  "tsconfig": "0.0.0"
85
84
  },
86
85
  "peerDependencies": {