fumadocs-openapi 10.2.2 → 10.2.4

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 (278) hide show
  1. package/dist/generate-file.d.ts +53 -49
  2. package/dist/generate-file.d.ts.map +1 -1
  3. package/dist/generate-file.js +88 -102
  4. package/dist/generate-file.js.map +1 -0
  5. package/dist/index.d.ts +6 -6
  6. package/dist/index.js +3 -1
  7. package/dist/playground/client.d.ts +88 -72
  8. package/dist/playground/client.d.ts.map +1 -1
  9. package/dist/playground/client.js +446 -296
  10. package/dist/playground/client.js.map +1 -0
  11. package/dist/playground/components/inputs.js +395 -172
  12. package/dist/playground/components/inputs.js.map +1 -0
  13. package/dist/playground/components/oauth-dialog.js +270 -174
  14. package/dist/playground/components/oauth-dialog.js.map +1 -0
  15. package/dist/playground/components/server-select.js +115 -55
  16. package/dist/playground/components/server-select.js.map +1 -0
  17. package/dist/playground/fetcher.d.ts +10 -18
  18. package/dist/playground/fetcher.d.ts.map +1 -1
  19. package/dist/playground/fetcher.js +67 -75
  20. package/dist/playground/fetcher.js.map +1 -0
  21. package/dist/playground/get-default-values.js +23 -26
  22. package/dist/playground/get-default-values.js.map +1 -0
  23. package/dist/playground/index.d.ts +23 -13
  24. package/dist/playground/index.d.ts.map +1 -1
  25. package/dist/playground/index.js +87 -91
  26. package/dist/playground/index.js.map +1 -0
  27. package/dist/playground/lazy.js +9 -2
  28. package/dist/playground/lazy.js.map +1 -0
  29. package/dist/playground/schema.d.ts +18 -55
  30. package/dist/playground/schema.d.ts.map +1 -1
  31. package/dist/playground/schema.js +117 -106
  32. package/dist/playground/schema.js.map +1 -0
  33. package/dist/playground/status-info.js +49 -37
  34. package/dist/playground/status-info.js.map +1 -0
  35. package/dist/requests/generators/csharp.js +40 -50
  36. package/dist/requests/generators/csharp.js.map +1 -0
  37. package/dist/requests/generators/curl.js +28 -27
  38. package/dist/requests/generators/curl.js.map +1 -0
  39. package/dist/requests/generators/go.js +39 -35
  40. package/dist/requests/generators/go.js.map +1 -0
  41. package/dist/requests/generators/index.js +49 -43
  42. package/dist/requests/generators/index.js.map +1 -0
  43. package/dist/requests/generators/java.js +56 -67
  44. package/dist/requests/generators/java.js.map +1 -0
  45. package/dist/requests/generators/javascript.js +38 -45
  46. package/dist/requests/generators/javascript.js.map +1 -0
  47. package/dist/requests/generators/python.js +33 -37
  48. package/dist/requests/generators/python.js.map +1 -0
  49. package/dist/requests/media/adapter.d.ts +38 -84
  50. package/dist/requests/media/adapter.d.ts.map +1 -1
  51. package/dist/requests/media/adapter.js +122 -169
  52. package/dist/requests/media/adapter.js.map +1 -0
  53. package/dist/requests/media/encode.d.ts +12 -7
  54. package/dist/requests/media/encode.d.ts.map +1 -1
  55. package/dist/requests/media/encode.js +131 -109
  56. package/dist/requests/media/encode.js.map +1 -0
  57. package/dist/requests/media/resolve-adapter.js +28 -28
  58. package/dist/requests/media/resolve-adapter.js.map +1 -0
  59. package/dist/requests/string-utils.js +28 -35
  60. package/dist/requests/string-utils.js.map +1 -0
  61. package/dist/requests/to-python-object.js +16 -28
  62. package/dist/requests/to-python-object.js.map +1 -0
  63. package/dist/requests/types.d.ts +25 -21
  64. package/dist/requests/types.d.ts.map +1 -1
  65. package/dist/scalar/client.js +57 -20
  66. package/dist/scalar/client.js.map +1 -0
  67. package/dist/scalar/index.d.ts +8 -2
  68. package/dist/scalar/index.d.ts.map +1 -1
  69. package/dist/scalar/index.js +29 -19
  70. package/dist/scalar/index.js.map +1 -0
  71. package/dist/server/create.d.ts +29 -25
  72. package/dist/server/create.d.ts.map +1 -1
  73. package/dist/server/create.js +42 -39
  74. package/dist/server/create.js.map +1 -0
  75. package/dist/server/index.d.ts +3 -3
  76. package/dist/server/index.js +4 -2
  77. package/dist/server/proxy.d.ts +28 -28
  78. package/dist/server/proxy.d.ts.map +1 -1
  79. package/dist/server/proxy.js +58 -75
  80. package/dist/server/proxy.js.map +1 -0
  81. package/dist/server/source-api.d.ts +32 -29
  82. package/dist/server/source-api.d.ts.map +1 -1
  83. package/dist/server/source-api.js +82 -75
  84. package/dist/server/source-api.js.map +1 -0
  85. package/dist/types.d.ts +41 -36
  86. package/dist/types.d.ts.map +1 -1
  87. package/dist/ui/api-page.d.ts +140 -136
  88. package/dist/ui/api-page.d.ts.map +1 -1
  89. package/dist/ui/api-page.js +134 -118
  90. package/dist/ui/api-page.js.map +1 -0
  91. package/dist/ui/client/index.d.ts +30 -26
  92. package/dist/ui/client/index.d.ts.map +1 -1
  93. package/dist/ui/client/index.js +8 -2
  94. package/dist/ui/client/index.js.map +1 -0
  95. package/dist/ui/client/storage-key.js +16 -10
  96. package/dist/ui/client/storage-key.js.map +1 -0
  97. package/dist/ui/components/accordion.js +40 -14
  98. package/dist/ui/components/accordion.js.map +1 -0
  99. package/dist/ui/components/dialog.js +51 -15
  100. package/dist/ui/components/dialog.js.map +1 -0
  101. package/dist/ui/components/input.js +18 -8
  102. package/dist/ui/components/input.js.map +1 -0
  103. package/dist/ui/components/method-label.js +38 -33
  104. package/dist/ui/components/method-label.js.map +1 -0
  105. package/dist/ui/components/select.js +66 -15
  106. package/dist/ui/components/select.js.map +1 -0
  107. package/dist/ui/contexts/api.js +96 -85
  108. package/dist/ui/contexts/api.js.map +1 -0
  109. package/dist/ui/contexts/api.lazy.js +9 -2
  110. package/dist/ui/contexts/api.lazy.js.map +1 -0
  111. package/dist/ui/index.d.ts +2 -2
  112. package/dist/ui/index.js +3 -1
  113. package/dist/ui/operation/client.js +65 -27
  114. package/dist/ui/operation/client.js.map +1 -0
  115. package/dist/ui/operation/index.js +403 -186
  116. package/dist/ui/operation/index.js.map +1 -0
  117. package/dist/ui/operation/request-tabs.d.ts +15 -16
  118. package/dist/ui/operation/request-tabs.d.ts.map +1 -1
  119. package/dist/ui/operation/request-tabs.js +151 -131
  120. package/dist/ui/operation/request-tabs.js.map +1 -0
  121. package/dist/ui/operation/response-tabs.d.ts +27 -28
  122. package/dist/ui/operation/response-tabs.d.ts.map +1 -1
  123. package/dist/ui/operation/response-tabs.js +73 -56
  124. package/dist/ui/operation/response-tabs.js.map +1 -0
  125. package/dist/ui/operation/usage-tabs/client.js +117 -88
  126. package/dist/ui/operation/usage-tabs/client.js.map +1 -0
  127. package/dist/ui/operation/usage-tabs/index.d.ts +22 -21
  128. package/dist/ui/operation/usage-tabs/index.d.ts.map +1 -1
  129. package/dist/ui/operation/usage-tabs/index.js +63 -48
  130. package/dist/ui/operation/usage-tabs/index.js.map +1 -0
  131. package/dist/ui/operation/usage-tabs/lazy.js +11 -4
  132. package/dist/ui/operation/usage-tabs/lazy.js.map +1 -0
  133. package/dist/ui/schema/client.d.ts +11 -7
  134. package/dist/ui/schema/client.d.ts.map +1 -1
  135. package/dist/ui/schema/client.js +213 -127
  136. package/dist/ui/schema/client.js.map +1 -0
  137. package/dist/ui/schema/index.d.ts +51 -50
  138. package/dist/ui/schema/index.d.ts.map +1 -1
  139. package/dist/ui/schema/index.js +225 -248
  140. package/dist/ui/schema/index.js.map +1 -0
  141. package/dist/ui/schema/lazy.js +9 -2
  142. package/dist/ui/schema/lazy.js.map +1 -0
  143. package/dist/utils/cn.js +3 -1
  144. package/dist/utils/deep-equal.js +18 -26
  145. package/dist/utils/deep-equal.js.map +1 -0
  146. package/dist/utils/get-typescript-schema.js +21 -19
  147. package/dist/utils/get-typescript-schema.js.map +1 -0
  148. package/dist/utils/id-to-title.js +13 -16
  149. package/dist/utils/id-to-title.js.map +1 -0
  150. package/dist/utils/lazy.js +13 -11
  151. package/dist/utils/lazy.js.map +1 -0
  152. package/dist/utils/merge-schema.js +130 -174
  153. package/dist/utils/merge-schema.js.map +1 -0
  154. package/dist/utils/pages/builder.d.ts +80 -76
  155. package/dist/utils/pages/builder.d.ts.map +1 -1
  156. package/dist/utils/pages/builder.js +101 -118
  157. package/dist/utils/pages/builder.js.map +1 -0
  158. package/dist/utils/pages/preset-auto.d.ts +58 -55
  159. package/dist/utils/pages/preset-auto.d.ts.map +1 -1
  160. package/dist/utils/pages/preset-auto.js +124 -137
  161. package/dist/utils/pages/preset-auto.js.map +1 -0
  162. package/dist/utils/pages/to-body.js +21 -18
  163. package/dist/utils/pages/to-body.js.map +1 -0
  164. package/dist/utils/pages/to-static-data.js +48 -40
  165. package/dist/utils/pages/to-static-data.js.map +1 -0
  166. package/dist/utils/pages/to-text.d.ts +43 -41
  167. package/dist/utils/pages/to-text.d.ts.map +1 -1
  168. package/dist/utils/pages/to-text.js +93 -126
  169. package/dist/utils/pages/to-text.js.map +1 -0
  170. package/dist/utils/process-document.d.ts +18 -19
  171. package/dist/utils/process-document.d.ts.map +1 -1
  172. package/dist/utils/process-document.js +43 -54
  173. package/dist/utils/process-document.js.map +1 -0
  174. package/dist/utils/remove-undefined.js +18 -18
  175. package/dist/utils/remove-undefined.js.map +1 -0
  176. package/dist/utils/schema-to-string.js +46 -64
  177. package/dist/utils/schema-to-string.js.map +1 -0
  178. package/dist/utils/schema.d.ts +11 -27
  179. package/dist/utils/schema.d.ts.map +1 -1
  180. package/dist/utils/schema.js +43 -44
  181. package/dist/utils/schema.js.map +1 -0
  182. package/dist/utils/url.js +35 -56
  183. package/dist/utils/url.js.map +1 -0
  184. package/dist/utils/use-query.js +39 -33
  185. package/dist/utils/use-query.js.map +1 -0
  186. package/package.json +34 -33
  187. package/dist/index.d.ts.map +0 -1
  188. package/dist/playground/components/inputs.d.ts +0 -25
  189. package/dist/playground/components/inputs.d.ts.map +0 -1
  190. package/dist/playground/components/oauth-dialog.d.ts +0 -13
  191. package/dist/playground/components/oauth-dialog.d.ts.map +0 -1
  192. package/dist/playground/components/server-select.d.ts +0 -3
  193. package/dist/playground/components/server-select.d.ts.map +0 -1
  194. package/dist/playground/get-default-values.d.ts +0 -3
  195. package/dist/playground/get-default-values.d.ts.map +0 -1
  196. package/dist/playground/lazy.d.ts +0 -2
  197. package/dist/playground/lazy.d.ts.map +0 -1
  198. package/dist/playground/status-info.d.ts +0 -8
  199. package/dist/playground/status-info.d.ts.map +0 -1
  200. package/dist/requests/generators/csharp.d.ts +0 -3
  201. package/dist/requests/generators/csharp.d.ts.map +0 -1
  202. package/dist/requests/generators/curl.d.ts +0 -3
  203. package/dist/requests/generators/curl.d.ts.map +0 -1
  204. package/dist/requests/generators/go.d.ts +0 -3
  205. package/dist/requests/generators/go.d.ts.map +0 -1
  206. package/dist/requests/generators/index.d.ts +0 -3
  207. package/dist/requests/generators/index.d.ts.map +0 -1
  208. package/dist/requests/generators/java.d.ts +0 -3
  209. package/dist/requests/generators/java.d.ts.map +0 -1
  210. package/dist/requests/generators/javascript.d.ts +0 -3
  211. package/dist/requests/generators/javascript.d.ts.map +0 -1
  212. package/dist/requests/generators/python.d.ts +0 -3
  213. package/dist/requests/generators/python.d.ts.map +0 -1
  214. package/dist/requests/media/resolve-adapter.d.ts +0 -19
  215. package/dist/requests/media/resolve-adapter.d.ts.map +0 -1
  216. package/dist/requests/string-utils.d.ts +0 -7
  217. package/dist/requests/string-utils.d.ts.map +0 -1
  218. package/dist/requests/to-python-object.d.ts +0 -2
  219. package/dist/requests/to-python-object.d.ts.map +0 -1
  220. package/dist/requests/types.js +0 -1
  221. package/dist/scalar/client.d.ts +0 -7
  222. package/dist/scalar/client.d.ts.map +0 -1
  223. package/dist/server/index.d.ts.map +0 -1
  224. package/dist/types.js +0 -1
  225. package/dist/ui/client/storage-key.d.ts +0 -9
  226. package/dist/ui/client/storage-key.d.ts.map +0 -1
  227. package/dist/ui/components/accordion.d.ts +0 -8
  228. package/dist/ui/components/accordion.d.ts.map +0 -1
  229. package/dist/ui/components/dialog.d.ts +0 -20
  230. package/dist/ui/components/dialog.d.ts.map +0 -1
  231. package/dist/ui/components/input.d.ts +0 -6
  232. package/dist/ui/components/input.d.ts.map +0 -1
  233. package/dist/ui/components/method-label.d.ts +0 -10
  234. package/dist/ui/components/method-label.d.ts.map +0 -1
  235. package/dist/ui/components/select.d.ts +0 -14
  236. package/dist/ui/components/select.d.ts.map +0 -1
  237. package/dist/ui/contexts/api.d.ts +0 -33
  238. package/dist/ui/contexts/api.d.ts.map +0 -1
  239. package/dist/ui/contexts/api.lazy.d.ts +0 -2
  240. package/dist/ui/contexts/api.lazy.d.ts.map +0 -1
  241. package/dist/ui/icons.d.ts +0 -49
  242. package/dist/ui/icons.d.ts.map +0 -1
  243. package/dist/ui/icons.js +0 -281
  244. package/dist/ui/index.d.ts.map +0 -1
  245. package/dist/ui/operation/client.d.ts +0 -19
  246. package/dist/ui/operation/client.d.ts.map +0 -1
  247. package/dist/ui/operation/index.d.ts +0 -12
  248. package/dist/ui/operation/index.d.ts.map +0 -1
  249. package/dist/ui/operation/usage-tabs/client.d.ts +0 -23
  250. package/dist/ui/operation/usage-tabs/client.d.ts.map +0 -1
  251. package/dist/ui/operation/usage-tabs/lazy.d.ts +0 -4
  252. package/dist/ui/operation/usage-tabs/lazy.d.ts.map +0 -1
  253. package/dist/ui/schema/lazy.d.ts +0 -2
  254. package/dist/ui/schema/lazy.d.ts.map +0 -1
  255. package/dist/utils/cn.d.ts +0 -2
  256. package/dist/utils/cn.d.ts.map +0 -1
  257. package/dist/utils/deep-equal.d.ts +0 -2
  258. package/dist/utils/deep-equal.d.ts.map +0 -1
  259. package/dist/utils/get-typescript-schema.d.ts +0 -4
  260. package/dist/utils/get-typescript-schema.d.ts.map +0 -1
  261. package/dist/utils/id-to-title.d.ts +0 -2
  262. package/dist/utils/id-to-title.d.ts.map +0 -1
  263. package/dist/utils/lazy.d.ts +0 -5
  264. package/dist/utils/lazy.d.ts.map +0 -1
  265. package/dist/utils/merge-schema.d.ts +0 -7
  266. package/dist/utils/merge-schema.d.ts.map +0 -1
  267. package/dist/utils/pages/to-body.d.ts +0 -4
  268. package/dist/utils/pages/to-body.d.ts.map +0 -1
  269. package/dist/utils/pages/to-static-data.d.ts +0 -10
  270. package/dist/utils/pages/to-static-data.d.ts.map +0 -1
  271. package/dist/utils/remove-undefined.d.ts +0 -2
  272. package/dist/utils/remove-undefined.d.ts.map +0 -1
  273. package/dist/utils/schema-to-string.d.ts +0 -8
  274. package/dist/utils/schema-to-string.d.ts.map +0 -1
  275. package/dist/utils/url.d.ts +0 -11
  276. package/dist/utils/url.d.ts.map +0 -1
  277. package/dist/utils/use-query.d.ts +0 -8
  278. package/dist/utils/use-query.d.ts.map +0 -1
@@ -1,131 +1,98 @@
1
- import { dump } from 'js-yaml';
2
- import { removeUndefined } from '../../utils/remove-undefined.js';
3
- import { toStaticData } from '../../utils/pages/to-static-data.js';
4
- export function toText(entry, processed, options = {}) {
5
- switch (entry.type) {
6
- case 'operation':
7
- return generatePage(entry.schemaId, processed, {
8
- operations: [entry.item],
9
- }, {
10
- ...options,
11
- ...entry.info,
12
- }, {
13
- type: 'operation',
14
- });
15
- case 'group':
16
- return generatePage(entry.schemaId, processed, {
17
- operations: entry.operations,
18
- webhooks: entry.webhooks,
19
- showTitle: true,
20
- }, {
21
- ...options,
22
- ...entry.info,
23
- }, {
24
- type: 'file',
25
- });
26
- case 'tag':
27
- return generatePage(entry.schemaId, processed, {
28
- operations: entry.operations,
29
- webhooks: entry.webhooks,
30
- showTitle: true,
31
- }, {
32
- ...options,
33
- ...entry.info,
34
- }, {
35
- type: 'tag',
36
- tag: entry.rawTag,
37
- });
38
- case 'webhook':
39
- return generatePage(entry.schemaId, processed, {
40
- webhooks: [entry.item],
41
- }, {
42
- ...options,
43
- ...entry.info,
44
- }, {
45
- type: 'operation',
46
- });
47
- }
1
+ import { removeUndefined } from "../remove-undefined.js";
2
+ import { toStaticData } from "./to-static-data.js";
3
+ import { dump } from "js-yaml";
4
+
5
+ //#region src/utils/pages/to-text.ts
6
+ function toText(entry, processed, options = {}) {
7
+ switch (entry.type) {
8
+ case "operation": return generatePage(entry.schemaId, processed, { operations: [entry.item] }, {
9
+ ...options,
10
+ ...entry.info
11
+ }, { type: "operation" });
12
+ case "group": return generatePage(entry.schemaId, processed, {
13
+ operations: entry.operations,
14
+ webhooks: entry.webhooks,
15
+ showTitle: true
16
+ }, {
17
+ ...options,
18
+ ...entry.info
19
+ }, { type: "file" });
20
+ case "tag": return generatePage(entry.schemaId, processed, {
21
+ operations: entry.operations,
22
+ webhooks: entry.webhooks,
23
+ showTitle: true
24
+ }, {
25
+ ...options,
26
+ ...entry.info
27
+ }, {
28
+ type: "tag",
29
+ tag: entry.rawTag
30
+ });
31
+ case "webhook": return generatePage(entry.schemaId, processed, { webhooks: [entry.item] }, {
32
+ ...options,
33
+ ...entry.info
34
+ }, { type: "operation" });
35
+ }
48
36
  }
49
- export function generateDocument(frontmatter, content, options) {
50
- const { addGeneratedComment = true, imports } = options;
51
- const out = [];
52
- const banner = dump(removeUndefined(frontmatter)).trimEnd();
53
- if (banner.length > 0)
54
- out.push(`---\n${banner}\n---`);
55
- if (addGeneratedComment) {
56
- let commentContent = 'This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again.';
57
- if (typeof addGeneratedComment === 'string') {
58
- commentContent = addGeneratedComment;
59
- }
60
- commentContent = commentContent.replaceAll('/', '\\/');
61
- out.push(`{/* ${commentContent} */}`);
62
- }
63
- if (imports) {
64
- out.push(...imports
65
- .map((item) => `import { ${item.names.join(', ')} } from ${JSON.stringify(item.from)};`)
66
- .join('\n'));
67
- }
68
- out.push(content);
69
- return out.join('\n\n');
37
+ function generateDocument(frontmatter, content, options) {
38
+ const { addGeneratedComment = true, imports } = options;
39
+ const out = [];
40
+ const banner = dump(removeUndefined(frontmatter)).trimEnd();
41
+ if (banner.length > 0) out.push(`---\n${banner}\n---`);
42
+ if (addGeneratedComment) {
43
+ let commentContent = "This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again.";
44
+ if (typeof addGeneratedComment === "string") commentContent = addGeneratedComment;
45
+ commentContent = commentContent.replaceAll("/", "\\/");
46
+ out.push(`{/* ${commentContent} */}`);
47
+ }
48
+ if (imports) out.push(...imports.map((item) => `import { ${item.names.join(", ")} } from ${JSON.stringify(item.from)};`).join("\n"));
49
+ out.push(content);
50
+ return out.join("\n\n");
70
51
  }
71
52
  function generatePage(schemaId, processed, pageProps, options, context) {
72
- const { frontmatter, includeDescription = false } = options;
73
- const extend = frontmatter?.(options.title, options.description, context);
74
- const page = {
75
- ...pageProps,
76
- document: schemaId,
77
- };
78
- let meta;
79
- if (page.operations?.length === 1) {
80
- const operation = page.operations[0];
81
- meta = {
82
- method: operation.method.toUpperCase(),
83
- };
84
- }
85
- else if (page.webhooks?.length === 1) {
86
- const webhook = page.webhooks[0];
87
- meta = {
88
- method: webhook.method.toUpperCase(),
89
- webhook: true,
90
- };
91
- }
92
- const data = toStaticData(page, processed.dereferenced);
93
- const content = [];
94
- if (options.description && includeDescription)
95
- content.push(options.description);
96
- content.push(pageContent(page));
97
- return generateDocument({
98
- title: options.title,
99
- description: !includeDescription ? options.description : undefined,
100
- full: true,
101
- ...extend,
102
- _openapi: {
103
- ...meta,
104
- ...data,
105
- ...extend?._openapi,
106
- },
107
- }, content.join('\n\n'), options);
53
+ const { frontmatter, includeDescription = false } = options;
54
+ const extend = frontmatter?.(options.title, options.description, context);
55
+ const page = {
56
+ ...pageProps,
57
+ document: schemaId
58
+ };
59
+ let meta;
60
+ if (page.operations?.length === 1) meta = { method: page.operations[0].method.toUpperCase() };
61
+ else if (page.webhooks?.length === 1) meta = {
62
+ method: page.webhooks[0].method.toUpperCase(),
63
+ webhook: true
64
+ };
65
+ const data = toStaticData(page, processed.dereferenced);
66
+ const content = [];
67
+ if (options.description && includeDescription) content.push(options.description);
68
+ content.push(pageContent(page));
69
+ return generateDocument({
70
+ title: options.title,
71
+ description: !includeDescription ? options.description : void 0,
72
+ full: true,
73
+ ...extend,
74
+ _openapi: {
75
+ ...meta,
76
+ ...data,
77
+ ...extend?._openapi
78
+ }
79
+ }, content.join("\n\n"), options);
108
80
  }
109
- function pageContent({ showTitle, showDescription, document, webhooks, operations, }) {
110
- const propStrs = [`document={${JSON.stringify(document)}}`];
111
- // filter extra properties in props
112
- if (webhooks) {
113
- propStrs.push(`webhooks={${JSON.stringify(webhooks.map((item) => ({
114
- name: item.name,
115
- method: item.method,
116
- })))}}`);
117
- }
118
- if (operations) {
119
- propStrs.push(`operations={${JSON.stringify(operations.map((item) => ({
120
- path: item.path,
121
- method: item.method,
122
- })))}}`);
123
- }
124
- if (showTitle) {
125
- propStrs.push(`showTitle={${JSON.stringify(showTitle)}}`);
126
- }
127
- if (showDescription) {
128
- propStrs.push(`showDescription={${JSON.stringify(showDescription)}}`);
129
- }
130
- return `<APIPage ${propStrs.join(' ')} />`;
81
+ function pageContent({ showTitle, showDescription, document, webhooks, operations }) {
82
+ const propStrs = [`document={${JSON.stringify(document)}}`];
83
+ if (webhooks) propStrs.push(`webhooks={${JSON.stringify(webhooks.map((item) => ({
84
+ name: item.name,
85
+ method: item.method
86
+ })))}}`);
87
+ if (operations) propStrs.push(`operations={${JSON.stringify(operations.map((item) => ({
88
+ path: item.path,
89
+ method: item.method
90
+ })))}}`);
91
+ if (showTitle) propStrs.push(`showTitle={${JSON.stringify(showTitle)}}`);
92
+ if (showDescription) propStrs.push(`showDescription={${JSON.stringify(showDescription)}}`);
93
+ return `<APIPage ${propStrs.join(" ")} />`;
131
94
  }
95
+
96
+ //#endregion
97
+ export { generateDocument, toText };
98
+ //# sourceMappingURL=to-text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"to-text.js","names":["out: string[]","page: ApiPageProps","meta: InternalOpenAPIMeta | undefined","content: string[]","propStrs: string[]"],"sources":["../../../src/utils/pages/to-text.ts"],"sourcesContent":["import type { ApiPageProps, OperationItem, WebhookItem } from '@/ui/api-page';\nimport type { ProcessedDocument } from '@/utils/process-document';\nimport type { TagObject } from '@/types';\nimport { dump } from 'js-yaml';\nimport { removeUndefined } from '@/utils/remove-undefined';\nimport type { OutputEntry } from '@/utils/pages/builder';\nimport type { InternalOpenAPIMeta } from '@/server/source-api';\nimport { toStaticData } from '@/utils/pages/to-static-data';\n\nexport interface PagesToTextOptions {\n /**\n * Additional imports of your MDX components.\n */\n imports?: {\n names: string[];\n from: string;\n }[];\n\n /**\n * Customise frontmatter.\n *\n * A `full: true` property will be added by default.\n */\n frontmatter?: (\n title: string,\n description: string | undefined,\n context: DocumentContext,\n ) => Record<string, unknown>;\n\n /**\n * Add description to document body.\n *\n * We recommend but don't enable it by default because some OpenAPI schemas have invalid description that breaks MDX syntax.\n *\n * @defaultValue false\n */\n includeDescription?: boolean;\n\n /**\n * Add a comment to the top of generated files indicating they are auto-generated.\n * - `true`: Adds a standardized comment\n * - `false`: No comment is added\n * - `string`: Adds the provided custom comment\n *\n * @defaultValue true\n */\n addGeneratedComment?: boolean | string;\n}\n\nexport function toText(\n entry: OutputEntry,\n processed: ProcessedDocument,\n options: PagesToTextOptions = {},\n) {\n switch (entry.type) {\n case 'operation':\n return generatePage(\n entry.schemaId,\n processed,\n {\n operations: [entry.item],\n },\n {\n ...options,\n ...entry.info,\n },\n {\n type: 'operation',\n },\n );\n case 'group':\n return generatePage(\n entry.schemaId,\n processed,\n {\n operations: entry.operations,\n webhooks: entry.webhooks,\n showTitle: true,\n },\n {\n ...options,\n ...entry.info,\n },\n {\n type: 'file',\n },\n );\n case 'tag':\n return generatePage(\n entry.schemaId,\n processed,\n {\n operations: entry.operations,\n webhooks: entry.webhooks,\n showTitle: true,\n },\n {\n ...options,\n ...entry.info,\n },\n {\n type: 'tag',\n tag: entry.rawTag,\n },\n );\n case 'webhook':\n return generatePage(\n entry.schemaId,\n processed,\n {\n webhooks: [entry.item],\n },\n {\n ...options,\n ...entry.info,\n },\n {\n type: 'operation',\n },\n );\n }\n}\n\nexport function generateDocument(\n frontmatter: unknown,\n content: string,\n options: PagesToTextOptions,\n): string {\n const { addGeneratedComment = true, imports } = options;\n const out: string[] = [];\n const banner = dump(removeUndefined(frontmatter as object)).trimEnd();\n if (banner.length > 0) out.push(`---\\n${banner}\\n---`);\n\n if (addGeneratedComment) {\n let commentContent =\n 'This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again.';\n\n if (typeof addGeneratedComment === 'string') {\n commentContent = addGeneratedComment;\n }\n\n commentContent = commentContent.replaceAll('/', '\\\\/');\n out.push(`{/* ${commentContent} */}`);\n }\n\n if (imports) {\n out.push(\n ...imports\n .map((item) => `import { ${item.names.join(', ')} } from ${JSON.stringify(item.from)};`)\n .join('\\n'),\n );\n }\n\n out.push(content);\n return out.join('\\n\\n');\n}\n\nexport type DocumentContext =\n | {\n type: 'tag';\n tag: TagObject | undefined;\n }\n | {\n type: 'operation';\n }\n | {\n type: 'file';\n };\n\nfunction generatePage(\n schemaId: string,\n processed: ProcessedDocument,\n pageProps: Omit<ApiPageProps, 'document'>,\n options: PagesToTextOptions & {\n title: string;\n description?: string;\n },\n context: DocumentContext,\n): string {\n const { frontmatter, includeDescription = false } = options;\n const extend = frontmatter?.(options.title, options.description, context);\n const page: ApiPageProps = {\n ...pageProps,\n document: schemaId,\n };\n\n let meta: InternalOpenAPIMeta | undefined;\n if (page.operations?.length === 1) {\n const operation = page.operations[0];\n\n meta = {\n method: operation.method.toUpperCase(),\n };\n } else if (page.webhooks?.length === 1) {\n const webhook = page.webhooks[0];\n\n meta = {\n method: webhook.method.toUpperCase(),\n webhook: true,\n };\n }\n\n const data = toStaticData(page, processed.dereferenced);\n const content: string[] = [];\n\n if (options.description && includeDescription) content.push(options.description);\n content.push(pageContent(page));\n\n return generateDocument(\n {\n title: options.title,\n description: !includeDescription ? options.description : undefined,\n full: true,\n ...extend,\n _openapi: {\n ...meta,\n ...data,\n ...(extend?._openapi as object | undefined),\n },\n },\n content.join('\\n\\n'),\n options,\n );\n}\n\nfunction pageContent({\n showTitle,\n showDescription,\n document,\n webhooks,\n operations,\n}: ApiPageProps): string {\n const propStrs: string[] = [`document={${JSON.stringify(document)}}`];\n\n // filter extra properties in props\n if (webhooks) {\n propStrs.push(\n `webhooks={${JSON.stringify(\n webhooks.map(\n (item) =>\n ({\n name: item.name,\n method: item.method,\n }) satisfies WebhookItem,\n ),\n )}}`,\n );\n }\n if (operations) {\n propStrs.push(\n `operations={${JSON.stringify(\n operations.map(\n (item) =>\n ({\n path: item.path,\n method: item.method,\n }) satisfies OperationItem,\n ),\n )}}`,\n );\n }\n if (showTitle) {\n propStrs.push(`showTitle={${JSON.stringify(showTitle)}}`);\n }\n if (showDescription) {\n propStrs.push(`showDescription={${JSON.stringify(showDescription)}}`);\n }\n\n return `<APIPage ${propStrs.join(' ')} />`;\n}\n"],"mappings":"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"}
@@ -1,21 +1,20 @@
1
- import type { Document } from '../types.js';
2
- import type { NoReference } from '../utils/schema.js';
3
- import type { OpenAPIV3, OpenAPIV3_1 } from 'openapi-types';
4
- export type ProcessedDocument = {
5
- /**
6
- * dereferenced document
7
- */
8
- dereferenced: NoReference<Document>;
9
- _internal_idToSchema: () => Map<string, object>;
10
- /**
11
- * Get raw object from dereferenced object
12
- */
13
- getRawRef: (obj: object) => string | undefined;
14
- bundled: Document;
1
+ import { NoReference } from "./schema.js";
2
+ import { Document } from "../types.js";
3
+ import { OpenAPIV3, OpenAPIV3_1 } from "openapi-types";
4
+
5
+ //#region src/utils/process-document.d.ts
6
+ type ProcessedDocument = {
7
+ /**
8
+ * dereferenced document
9
+ */
10
+ dereferenced: NoReference<Document>;
11
+ _internal_idToSchema: () => Map<string, object>;
12
+ /**
13
+ * Get raw object from dereferenced object
14
+ */
15
+ getRawRef: (obj: object) => string | undefined;
16
+ bundled: Document;
15
17
  };
16
- export declare function processDocumentCached(input: string | OpenAPIV3_1.Document | OpenAPIV3.Document): Promise<ProcessedDocument>;
17
- /**
18
- * process & reference input document to a Fumadocs OpenAPI compatible format
19
- */
20
- export declare function processDocument(input: string | OpenAPIV3_1.Document | OpenAPIV3.Document): Promise<ProcessedDocument>;
18
+ //#endregion
19
+ export { ProcessedDocument };
21
20
  //# sourceMappingURL=process-document.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"process-document.d.ts","sourceRoot":"","sources":["../../src/utils/process-document.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAK5D,MAAM,MAAM,iBAAiB,GAAG;IAC9B;;OAEG;IACH,YAAY,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;IAEpC,oBAAoB,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEhD;;OAEG;IACH,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IAE/C,OAAO,EAAE,QAAQ,CAAC;CACnB,CAAC;AAIF,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,MAAM,GAAG,WAAW,CAAC,QAAQ,GAAG,SAAS,CAAC,QAAQ,GACxD,OAAO,CAAC,iBAAiB,CAAC,CAS5B;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE,MAAM,GAAG,WAAW,CAAC,QAAQ,GAAG,SAAS,CAAC,QAAQ,GACxD,OAAO,CAAC,iBAAiB,CAAC,CAyC5B"}
1
+ {"version":3,"file":"process-document.d.ts","names":[],"sources":["../../src/utils/process-document.ts"],"sourcesContent":[],"mappings":";;;;;KAOY,iBAAA;;AAAZ;;EAIgB,YAAA,EAAA,WAAA,CAAY,QAAZ,CAAA;EAEc,oBAAA,EAAA,GAAA,GAAA,GAAA,CAAA,MAAA,EAAA,MAAA,CAAA;EAOnB;;;;WAAA"}
@@ -1,56 +1,45 @@
1
- import { dereference, upgrade } from '@scalar/openapi-parser';
2
- import { bundle } from '@scalar/json-magic/bundle';
3
- import { fetchUrls, readFiles } from '@scalar/json-magic/bundle/plugins/node';
4
- const cache = new Map();
5
- export async function processDocumentCached(input) {
6
- if (typeof input !== 'string')
7
- return processDocument(input);
8
- const cached = cache.get(input);
9
- if (cached)
10
- return cached;
11
- const processed = await processDocument(input);
12
- cache.set(input, processed);
13
- return processed;
14
- }
1
+ import { dereference, upgrade } from "@scalar/openapi-parser";
2
+ import { bundle } from "@scalar/json-magic/bundle";
3
+ import { fetchUrls, readFiles } from "@scalar/json-magic/bundle/plugins/node";
4
+
5
+ //#region src/utils/process-document.ts
15
6
  /**
16
- * process & reference input document to a Fumadocs OpenAPI compatible format
17
- */
18
- export async function processDocument(input) {
19
- const document = await bundle(input, {
20
- plugins: [fetchUrls(), readFiles()],
21
- treeShake: true,
22
- urlMap: true,
23
- hooks: {
24
- onResolveError(node) {
25
- throw new Error(`Failed to resolve ${node.$ref}`);
26
- },
27
- },
28
- })
29
- .then((v) => upgrade(v).specification)
30
- .catch((e) => {
31
- throw new Error(`[OpenAPI] Failed to resolve input: ${input}`, {
32
- cause: e,
33
- });
34
- });
35
- /**
36
- * Dereferenced value and its original `$ref` value
37
- */
38
- const dereferenceMap = new WeakMap();
39
- const serializable = new Map();
40
- return {
41
- dereferenced: dereference(document, {
42
- throwOnError: true,
43
- onDereference({ schema, ref }) {
44
- serializable.set(ref, schema);
45
- dereferenceMap.set(schema, ref);
46
- },
47
- }).schema,
48
- getRawRef(obj) {
49
- return dereferenceMap.get(obj);
50
- },
51
- _internal_idToSchema() {
52
- return serializable;
53
- },
54
- bundled: document,
55
- };
7
+ * process & reference input document to a Fumadocs OpenAPI compatible format
8
+ */
9
+ async function processDocument(input) {
10
+ const document = await bundle(input, {
11
+ plugins: [fetchUrls(), readFiles()],
12
+ treeShake: true,
13
+ urlMap: true,
14
+ hooks: { onResolveError(node) {
15
+ throw new Error(`Failed to resolve ${node.$ref}`);
16
+ } }
17
+ }).then((v) => upgrade(v).specification).catch((e) => {
18
+ throw new Error(`[OpenAPI] Failed to resolve input: ${input}`, { cause: e });
19
+ });
20
+ /**
21
+ * Dereferenced value and its original `$ref` value
22
+ */
23
+ const dereferenceMap = /* @__PURE__ */ new WeakMap();
24
+ const serializable = /* @__PURE__ */ new Map();
25
+ return {
26
+ dereferenced: dereference(document, {
27
+ throwOnError: true,
28
+ onDereference({ schema, ref }) {
29
+ serializable.set(ref, schema);
30
+ dereferenceMap.set(schema, ref);
31
+ }
32
+ }).schema,
33
+ getRawRef(obj) {
34
+ return dereferenceMap.get(obj);
35
+ },
36
+ _internal_idToSchema() {
37
+ return serializable;
38
+ },
39
+ bundled: document
40
+ };
56
41
  }
42
+
43
+ //#endregion
44
+ export { processDocument };
45
+ //# sourceMappingURL=process-document.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-document.js","names":[],"sources":["../../src/utils/process-document.ts"],"sourcesContent":["import type { Document } from '@/types';\nimport type { NoReference } from '@/utils/schema';\nimport type { OpenAPIV3, OpenAPIV3_1 } from 'openapi-types';\nimport { dereference, upgrade } from '@scalar/openapi-parser';\nimport { bundle } from '@scalar/json-magic/bundle';\nimport { fetchUrls, readFiles } from '@scalar/json-magic/bundle/plugins/node';\n\nexport type ProcessedDocument = {\n /**\n * dereferenced document\n */\n dereferenced: NoReference<Document>;\n\n _internal_idToSchema: () => Map<string, object>;\n\n /**\n * Get raw object from dereferenced object\n */\n getRawRef: (obj: object) => string | undefined;\n\n bundled: Document;\n};\n\nconst cache = new Map<string, ProcessedDocument>();\n\nexport async function processDocumentCached(\n input: string | OpenAPIV3_1.Document | OpenAPIV3.Document,\n): Promise<ProcessedDocument> {\n if (typeof input !== 'string') return processDocument(input);\n\n const cached = cache.get(input);\n if (cached) return cached;\n const processed = await processDocument(input);\n\n cache.set(input, processed);\n return processed;\n}\n\n/**\n * process & reference input document to a Fumadocs OpenAPI compatible format\n */\nexport async function processDocument(\n input: string | OpenAPIV3_1.Document | OpenAPIV3.Document,\n): Promise<ProcessedDocument> {\n const document = await bundle(input as string, {\n plugins: [fetchUrls(), readFiles()],\n treeShake: true,\n urlMap: true,\n hooks: {\n onResolveError(node) {\n throw new Error(`Failed to resolve ${node.$ref}`);\n },\n },\n })\n .then((v) => upgrade(v).specification)\n .catch((e) => {\n throw new Error(`[OpenAPI] Failed to resolve input: ${input}`, {\n cause: e,\n });\n });\n\n /**\n * Dereferenced value and its original `$ref` value\n */\n const dereferenceMap = new WeakMap<object, string>();\n const serializable = new Map<string, object>();\n\n return {\n dereferenced: dereference(document, {\n throwOnError: true,\n onDereference({ schema, ref }) {\n serializable.set(ref, schema);\n dereferenceMap.set(schema, ref);\n },\n }).schema as NoReference<Document>,\n getRawRef(obj) {\n return dereferenceMap.get(obj);\n },\n\n _internal_idToSchema() {\n return serializable;\n },\n bundled: document as Document,\n };\n}\n"],"mappings":";;;;;;;;AAyCA,eAAsB,gBACpB,OAC4B;CAC5B,MAAM,WAAW,MAAM,OAAO,OAAiB;EAC7C,SAAS,CAAC,WAAW,EAAE,WAAW,CAAC;EACnC,WAAW;EACX,QAAQ;EACR,OAAO,EACL,eAAe,MAAM;AACnB,SAAM,IAAI,MAAM,qBAAqB,KAAK,OAAO;KAEpD;EACF,CAAC,CACC,MAAM,MAAM,QAAQ,EAAE,CAAC,cAAc,CACrC,OAAO,MAAM;AACZ,QAAM,IAAI,MAAM,sCAAsC,SAAS,EAC7D,OAAO,GACR,CAAC;GACF;;;;CAKJ,MAAM,iCAAiB,IAAI,SAAyB;CACpD,MAAM,+BAAe,IAAI,KAAqB;AAE9C,QAAO;EACL,cAAc,YAAY,UAAU;GAClC,cAAc;GACd,cAAc,EAAE,QAAQ,OAAO;AAC7B,iBAAa,IAAI,KAAK,OAAO;AAC7B,mBAAe,IAAI,QAAQ,IAAI;;GAElC,CAAC,CAAC;EACH,UAAU,KAAK;AACb,UAAO,eAAe,IAAI,IAAI;;EAGhC,uBAAuB;AACrB,UAAO;;EAET,SAAS;EACV"}
@@ -1,19 +1,19 @@
1
- export function removeUndefined(value, deep = false) {
2
- const obj = value;
3
- for (const key in obj) {
4
- if (obj[key] === undefined)
5
- delete obj[key];
6
- if (!deep)
7
- continue;
8
- const entry = obj[key];
9
- if (typeof entry === 'object' && entry !== null) {
10
- removeUndefined(entry, deep);
11
- continue;
12
- }
13
- if (Array.isArray(entry)) {
14
- for (const item of entry)
15
- removeUndefined(item, deep);
16
- }
17
- }
18
- return value;
1
+ //#region src/utils/remove-undefined.ts
2
+ 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);
10
+ continue;
11
+ }
12
+ if (Array.isArray(entry)) for (const item of entry) removeUndefined(item, deep);
13
+ }
14
+ return value;
19
15
  }
16
+
17
+ //#endregion
18
+ export { removeUndefined };
19
+ //# sourceMappingURL=remove-undefined.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove-undefined.js","names":[],"sources":["../../src/utils/remove-undefined.ts"],"sourcesContent":["export function removeUndefined<T extends object>(value: T, deep = false): T {\n const obj = value as Record<string, unknown>;\n\n for (const key in obj) {\n if (obj[key] === undefined) delete obj[key];\n if (!deep) continue;\n\n const entry = obj[key];\n\n if (typeof entry === 'object' && entry !== null) {\n removeUndefined(entry, deep);\n continue;\n }\n\n if (Array.isArray(entry)) {\n for (const item of entry) removeUndefined(item, deep);\n }\n }\n\n return value;\n}\n"],"mappings":";AAAA,SAAgB,gBAAkC,OAAU,OAAO,OAAU;CAC3E,MAAM,MAAM;AAEZ,MAAK,MAAM,OAAO,KAAK;AACrB,MAAI,IAAI,SAAS,OAAW,QAAO,IAAI;AACvC,MAAI,CAAC,KAAM;EAEX,MAAM,QAAQ,IAAI;AAElB,MAAI,OAAO,UAAU,YAAY,UAAU,MAAM;AAC/C,mBAAgB,OAAO,KAAK;AAC5B;;AAGF,MAAI,MAAM,QAAQ,MAAM,CACtB,MAAK,MAAM,QAAQ,MAAO,iBAAgB,MAAM,KAAK;;AAIzD,QAAO"}
@@ -1,65 +1,47 @@
1
- export var FormatFlags;
2
- (function (FormatFlags) {
3
- FormatFlags[FormatFlags["None"] = 0] = "None";
4
- FormatFlags[FormatFlags["UseAlias"] = 1] = "UseAlias";
5
- })(FormatFlags || (FormatFlags = {}));
6
- export function schemaToString(value, ctx, flags = FormatFlags.None) {
7
- function union(union, sep, flags) {
8
- const members = new Set();
9
- let nullable = false;
10
- for (const item of union) {
11
- const result = run(item, flags | FormatFlags.UseAlias);
12
- if (result === 'null') {
13
- nullable = true;
14
- }
15
- else if (result !== 'unknown') {
16
- members.add(result);
17
- }
18
- }
19
- const result = Array.from(members).join(sep);
20
- return nullable ? `${result} | null` : result;
21
- }
22
- function run(schema, flags) {
23
- if (schema === true)
24
- return 'any';
25
- else if (schema === false)
26
- return 'never';
27
- if ((flags & FormatFlags.UseAlias) === FormatFlags.UseAlias) {
28
- if (schema.title)
29
- return schema.title;
30
- const ref = ctx?.getRawRef(schema)?.split('/');
31
- if (ref && ref.length > 0)
32
- return ref[ref.length - 1];
33
- }
34
- if (Array.isArray(schema.type)) {
35
- return union(schema.type.map((type) => ({
36
- ...schema,
37
- type,
38
- })), ' | ', flags);
39
- }
40
- if (schema.type === 'array')
41
- return `array<${schema.items ? run(schema.items, flags | FormatFlags.UseAlias) : 'unknown'}>`;
42
- const or = schema.oneOf ?? schema.anyOf;
43
- if (schema.oneOf && schema.anyOf) {
44
- return `(${union(schema.oneOf, ' | ', flags)}) & (${union(schema.anyOf, ' | ', flags)})`;
45
- }
46
- else if (or) {
47
- return union(or, ' | ', flags);
48
- }
49
- if (schema.allOf) {
50
- return union(schema.allOf, ' & ', flags);
51
- }
52
- if (schema.not)
53
- return `not ${run(schema.not, flags)}`;
54
- if (schema.type === 'string' && schema.format === 'binary')
55
- return 'file';
56
- if (schema.type && Array.isArray(schema.type)) {
57
- return schema.type.filter((v) => v !== 'null').join(' | ');
58
- }
59
- if (schema.type) {
60
- return schema.type;
61
- }
62
- return 'unknown';
63
- }
64
- return run(value, flags);
1
+ //#region src/utils/schema-to-string.ts
2
+ let FormatFlags = /* @__PURE__ */ function(FormatFlags$1) {
3
+ FormatFlags$1[FormatFlags$1["None"] = 0] = "None";
4
+ FormatFlags$1[FormatFlags$1["UseAlias"] = 1] = "UseAlias";
5
+ return FormatFlags$1;
6
+ }({});
7
+ function schemaToString(value, ctx, flags = FormatFlags.None) {
8
+ function union(union$1, sep, flags$1) {
9
+ const members = /* @__PURE__ */ new Set();
10
+ let nullable = false;
11
+ for (const item of union$1) {
12
+ const result$1 = run(item, flags$1 | FormatFlags.UseAlias);
13
+ if (result$1 === "null") nullable = true;
14
+ else if (result$1 !== "unknown") members.add(result$1);
15
+ }
16
+ const result = Array.from(members).join(sep);
17
+ return nullable ? `${result} | null` : result;
18
+ }
19
+ function run(schema, flags$1) {
20
+ if (schema === true) return "any";
21
+ else if (schema === false) return "never";
22
+ if ((flags$1 & FormatFlags.UseAlias) === FormatFlags.UseAlias) {
23
+ if (schema.title) return schema.title;
24
+ const ref = ctx?.getRawRef(schema)?.split("/");
25
+ if (ref && ref.length > 0) return ref[ref.length - 1];
26
+ }
27
+ if (Array.isArray(schema.type)) return union(schema.type.map((type) => ({
28
+ ...schema,
29
+ type
30
+ })), " | ", flags$1);
31
+ if (schema.type === "array") return `array<${schema.items ? run(schema.items, flags$1 | FormatFlags.UseAlias) : "unknown"}>`;
32
+ const or = schema.oneOf ?? schema.anyOf;
33
+ if (schema.oneOf && schema.anyOf) return `(${union(schema.oneOf, " | ", flags$1)}) & (${union(schema.anyOf, " | ", flags$1)})`;
34
+ else if (or) return union(or, " | ", flags$1);
35
+ if (schema.allOf) return union(schema.allOf, " & ", flags$1);
36
+ if (schema.not) return `not ${run(schema.not, flags$1)}`;
37
+ if (schema.type === "string" && schema.format === "binary") return "file";
38
+ if (schema.type && Array.isArray(schema.type)) return schema.type.filter((v) => v !== "null").join(" | ");
39
+ if (schema.type) return schema.type;
40
+ return "unknown";
41
+ }
42
+ return run(value, flags);
65
43
  }
44
+
45
+ //#endregion
46
+ export { FormatFlags, schemaToString };
47
+ //# sourceMappingURL=schema-to-string.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-to-string.js","names":["union","result","flags"],"sources":["../../src/utils/schema-to-string.ts"],"sourcesContent":["import { type ResolvedSchema } from '@/utils/schema';\nimport type { ProcessedDocument } from '@/utils/process-document';\n\nexport enum FormatFlags {\n None = 0,\n UseAlias = 1 << 0,\n}\n\nexport function schemaToString(\n value: ResolvedSchema,\n ctx?: ProcessedDocument,\n flags: FormatFlags = FormatFlags.None,\n): string {\n function union(union: readonly ResolvedSchema[], sep: string, flags: FormatFlags) {\n const members = new Set();\n let nullable = false;\n\n for (const item of union) {\n const result = run(item, flags | FormatFlags.UseAlias);\n\n if (result === 'null') {\n nullable = true;\n } else if (result !== 'unknown') {\n members.add(result);\n }\n }\n\n const result = Array.from(members).join(sep);\n return nullable ? `${result} | null` : result;\n }\n\n function run(schema: ResolvedSchema, flags: FormatFlags): string {\n if (schema === true) return 'any';\n else if (schema === false) return 'never';\n\n if ((flags & FormatFlags.UseAlias) === FormatFlags.UseAlias) {\n if (schema.title) return schema.title;\n\n const ref = ctx?.getRawRef(schema)?.split('/');\n if (ref && ref.length > 0) return ref[ref.length - 1];\n }\n\n if (Array.isArray(schema.type)) {\n return union(\n schema.type.map((type) => ({\n ...schema,\n type,\n })),\n ' | ',\n flags,\n );\n }\n\n if (schema.type === 'array')\n return `array<${schema.items ? run(schema.items, flags | FormatFlags.UseAlias) : 'unknown'}>`;\n\n const or = schema.oneOf ?? schema.anyOf;\n if (schema.oneOf && schema.anyOf) {\n return `(${union(schema.oneOf, ' | ', flags)}) & (${union(schema.anyOf, ' | ', flags)})`;\n } else if (or) {\n return union(or, ' | ', flags);\n }\n\n if (schema.allOf) {\n return union(schema.allOf, ' & ', flags);\n }\n\n if (schema.not) return `not ${run(schema.not, flags)}`;\n if (schema.type === 'string' && schema.format === 'binary') return 'file';\n\n if (schema.type && Array.isArray(schema.type)) {\n return schema.type.filter((v) => v !== 'null').join(' | ');\n }\n\n if (schema.type) {\n return schema.type as string;\n }\n\n return 'unknown';\n }\n\n return run(value, flags);\n}\n"],"mappings":";AAGA,IAAY,sDAAL;AACL;AACA;;;AAGF,SAAgB,eACd,OACA,KACA,QAAqB,YAAY,MACzB;CACR,SAAS,MAAM,SAAkC,KAAa,SAAoB;EAChF,MAAM,0BAAU,IAAI,KAAK;EACzB,IAAI,WAAW;AAEf,OAAK,MAAM,QAAQA,SAAO;GACxB,MAAMC,WAAS,IAAI,MAAMC,UAAQ,YAAY,SAAS;AAEtD,OAAID,aAAW,OACb,YAAW;YACFA,aAAW,UACpB,SAAQ,IAAIA,SAAO;;EAIvB,MAAM,SAAS,MAAM,KAAK,QAAQ,CAAC,KAAK,IAAI;AAC5C,SAAO,WAAW,GAAG,OAAO,WAAW;;CAGzC,SAAS,IAAI,QAAwB,SAA4B;AAC/D,MAAI,WAAW,KAAM,QAAO;WACnB,WAAW,MAAO,QAAO;AAElC,OAAKC,UAAQ,YAAY,cAAc,YAAY,UAAU;AAC3D,OAAI,OAAO,MAAO,QAAO,OAAO;GAEhC,MAAM,MAAM,KAAK,UAAU,OAAO,EAAE,MAAM,IAAI;AAC9C,OAAI,OAAO,IAAI,SAAS,EAAG,QAAO,IAAI,IAAI,SAAS;;AAGrD,MAAI,MAAM,QAAQ,OAAO,KAAK,CAC5B,QAAO,MACL,OAAO,KAAK,KAAK,UAAU;GACzB,GAAG;GACH;GACD,EAAE,EACH,OACAA,QACD;AAGH,MAAI,OAAO,SAAS,QAClB,QAAO,SAAS,OAAO,QAAQ,IAAI,OAAO,OAAOA,UAAQ,YAAY,SAAS,GAAG,UAAU;EAE7F,MAAM,KAAK,OAAO,SAAS,OAAO;AAClC,MAAI,OAAO,SAAS,OAAO,MACzB,QAAO,IAAI,MAAM,OAAO,OAAO,OAAOA,QAAM,CAAC,OAAO,MAAM,OAAO,OAAO,OAAOA,QAAM,CAAC;WAC7E,GACT,QAAO,MAAM,IAAI,OAAOA,QAAM;AAGhC,MAAI,OAAO,MACT,QAAO,MAAM,OAAO,OAAO,OAAOA,QAAM;AAG1C,MAAI,OAAO,IAAK,QAAO,OAAO,IAAI,OAAO,KAAKA,QAAM;AACpD,MAAI,OAAO,SAAS,YAAY,OAAO,WAAW,SAAU,QAAO;AAEnE,MAAI,OAAO,QAAQ,MAAM,QAAQ,OAAO,KAAK,CAC3C,QAAO,OAAO,KAAK,QAAQ,MAAM,MAAM,OAAO,CAAC,KAAK,MAAM;AAG5D,MAAI,OAAO,KACT,QAAO,OAAO;AAGhB,SAAO;;AAGT,QAAO,IAAI,OAAO,MAAM"}
@@ -1,30 +1,14 @@
1
- import type { JSONSchema } from 'json-schema-typed/draft-2020-12';
2
- import type { MethodInformation, OperationObject, PathItemObject, ReferenceObject, TagObject } from '../types.js';
3
- import { OpenAPIV3_1 } from 'openapi-types';
4
- export declare const methodKeys: readonly ["get", "post", "patch", "delete", "head", "put"];
5
- export type NoReference<T> = T extends (infer I)[] ? NoReference<I>[] : T extends ReferenceObject ? Exclude<T, ReferenceObject> : T extends object ? {
6
- [K in keyof T]: NoReference<T[K]>;
7
- } : T;
1
+ import { ReferenceObject } from "../types.js";
2
+ import { OpenAPIV3_1 } from "openapi-types";
3
+ import { JSONSchema } from "json-schema-typed/draft-2020-12";
4
+
5
+ //#region src/utils/schema.d.ts
6
+ 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;
8
7
  type NoReferenceJSONSchema<T> = T extends (infer I)[] ? NoReference<I>[] : T extends {
9
- $ref?: string;
8
+ $ref?: string;
10
9
  } ? Omit<T, '$ref'> : T;
11
- export type ParsedSchema = JSONSchema;
12
- export type ResolvedSchema = NoReferenceJSONSchema<ParsedSchema>;
13
- export declare function getPreferredType(body: Record<string, unknown>): string | undefined;
14
- export declare function getTagDisplayName(tag: TagObject): string;
15
- /**
16
- * Summarize method endpoint information
17
- */
18
- export declare function createMethod(method: string, path: NoReference<PathItemObject>, operation: NoReference<OperationObject>): MethodInformation;
19
- interface ExampleLike {
20
- example?: unknown;
21
- examples?: {
22
- [media: string]: OpenAPIV3_1.ExampleObject;
23
- };
24
- content?: {
25
- [media: string]: OpenAPIV3_1.MediaTypeObject;
26
- };
27
- }
28
- export declare function pickExample(value: ExampleLike): unknown | undefined;
29
- export {};
10
+ type ParsedSchema = JSONSchema;
11
+ type ResolvedSchema = NoReferenceJSONSchema<ParsedSchema>;
12
+ //#endregion
13
+ export { NoReference, ParsedSchema, ResolvedSchema };
30
14
  //# sourceMappingURL=schema.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/utils/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,KAAK,EACV,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,eAAe,EACf,SAAS,EACV,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,eAAO,MAAM,UAAU,4DAOb,CAAC;AAEX,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,GAC9C,WAAW,CAAC,CAAC,CAAC,EAAE,GAChB,CAAC,SAAS,eAAe,GACvB,OAAO,CAAC,CAAC,EAAE,eAAe,CAAC,GAC3B,CAAC,SAAS,MAAM,GACd;KACG,CAAC,IAAI,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAClC,GACD,CAAC,CAAC;AAEV,KAAK,qBAAqB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,GACjD,WAAW,CAAC,CAAC,CAAC,EAAE,GAChB,CAAC,SAAS;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GACzB,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,GACf,CAAC,CAAC;AAER,MAAM,MAAM,YAAY,GAAG,UAAU,CAAC;AACtC,MAAM,MAAM,cAAc,GAAG,qBAAqB,CAAC,YAAY,CAAC,CAAC;AAEjE,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,MAAM,GAAG,SAAS,CAIpB;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM,CAIxD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,WAAW,CAAC,cAAc,CAAC,EACjC,SAAS,EAAE,WAAW,CAAC,eAAe,CAAC,GACtC,iBAAiB,CAQnB;AAED,UAAU,WAAW;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE;QACT,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAAC,aAAa,CAAC;KAC5C,CAAC;IACF,OAAO,CAAC,EAAE;QACR,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAAC,eAAe,CAAC;KAC9C,CAAC;CACH;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,GAAG,SAAS,CAmBnE"}
1
+ {"version":3,"file":"schema.d.ts","names":[],"sources":["../../src/utils/schema.ts"],"sourcesContent":[],"mappings":";;;;;KAaY,iBAAiB,wBACzB,YAAY,OACZ,UAAU,kBACR,QAAQ,GAAG,mBACX,2BAJM,MAMU,CANV,GAMc,WANH,CAMe,CANf,CAMiB,CANjB,CAAA,CAAA,EAAM,GAQrB,CARqB;KAUxB,qBATW,CAAA,CAAA,CAAA,GASgB,CAThB,SAAA,CAAA,KAAA,EAAA,CAAA,EAAA,GAUZ,WAVY,CAUA,CAVA,CAAA,EAAA,GAWZ,CAXY,SAAA;EAAZ,IAAA,CAAA,EAAA,MAAA;CACA,GAWE,IAXF,CAWO,CAXP,EAAA,MAAA,CAAA,GAYE,CAZF;AAAU,KAcF,YAAA,GAAe,UAdb;AACA,KAcF,cAAA,GAAiB,qBAdf,CAcqC,YAdrC,CAAA"}