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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["headNode: ReactNode","bodyNode: ReactNode","authNode: ReactNode","responseNode: ReactNode","callbacksNode: ReactNode","type","selectorNode: ReactNode","ts: string | undefined"],"sources":["../../../src/ui/operation/index.tsx"],"sourcesContent":["import { type ComponentProps, Fragment, type ReactNode } from 'react';\nimport type {\n CallbackObject,\n MethodInformation,\n RenderContext,\n SecuritySchemeObject,\n} from '@/types';\nimport { createMethod, methodKeys, type NoReference, type ResolvedSchema } from '@/utils/schema';\nimport { idToTitle } from '@/utils/id-to-title';\nimport { Schema } from '../schema';\nimport { UsageTabs } from '@/ui/operation/usage-tabs';\nimport { MethodLabel } from '@/ui/components/method-label';\nimport { getTypescriptSchema } from '@/utils/get-typescript-schema';\nimport { CopyResponseTypeScript, SelectTab, SelectTabs, SelectTabTrigger } from './client';\nimport {\n AccordionContent,\n AccordionHeader,\n AccordionItem,\n Accordions,\n AccordionTrigger,\n} from '@/ui/components/accordion';\nimport { isMediaTypeSupported } from '@/requests/media/adapter';\nimport { cn } from '@/utils/cn';\nimport { APIPlayground } from '@/playground';\nimport { getExampleRequests, RequestTabs } from './request-tabs';\nimport { UsageTabsProviderLazy } from './usage-tabs/lazy';\n\nconst ParamTypes = {\n path: 'Path Parameters',\n query: 'Query Parameters',\n header: 'Header Parameters',\n cookie: 'Cookie Parameters',\n};\n\nexport async function Operation({\n type = 'operation',\n path,\n method,\n ctx,\n showTitle,\n showDescription,\n headingLevel = 2,\n}: {\n type?: 'webhook' | 'operation';\n path: string;\n method: MethodInformation;\n ctx: RenderContext;\n\n showTitle?: boolean;\n showDescription?: boolean;\n headingLevel?: number;\n}) {\n const {\n schema: { dereferenced },\n } = ctx;\n const body = method.requestBody;\n let headNode: ReactNode = null;\n const descriptionNode =\n showDescription && method.description && ctx.renderMarkdown(method.description);\n let bodyNode: ReactNode = null;\n let authNode: ReactNode = null;\n let responseNode: ReactNode = null;\n let callbacksNode: ReactNode = null;\n\n if (showTitle) {\n const title = method.summary || (method.operationId ? idToTitle(method.operationId) : path);\n\n headNode = ctx.renderHeading(headingLevel, title);\n headingLevel++;\n }\n\n const contentTypes = body ? Object.entries(body.content) : null;\n\n if (body && contentTypes && contentTypes.length > 0) {\n const items = contentTypes.map(([key]) => ({\n label: <code className=\"text-xs\">{key}</code>,\n value: key,\n }));\n\n bodyNode = (\n <SelectTabs defaultValue={items[0].value}>\n <div className=\"flex gap-2 items-center justify-between mt-10\">\n {ctx.renderHeading(headingLevel, 'Request Body', {\n className: 'my-0!',\n })}\n {contentTypes.length > 1 ? (\n <SelectTabTrigger items={items} className=\"font-medium\" />\n ) : (\n <p className=\"text-fd-muted-foreground not-prose\">{items[0].label}</p>\n )}\n </div>\n {body.description && ctx.renderMarkdown(body.description)}\n {contentTypes.map(([type, content]) => {\n if (!isMediaTypeSupported(type, ctx.mediaAdapters)) {\n throw new Error(`Media type ${type} is not supported (in ${path})`);\n }\n\n return (\n <SelectTab key={type} value={type}>\n <Schema\n client={{\n name: 'body',\n as: 'body',\n required: body.required,\n }}\n root={(content.schema ?? {}) as ResolvedSchema}\n readOnly={method.method === 'GET'}\n writeOnly={method.method !== 'GET'}\n ctx={ctx}\n />\n </SelectTab>\n );\n })}\n </SelectTabs>\n );\n }\n\n if (method.responses && ctx.showResponseSchema !== false) {\n const statuses = Object.keys(method.responses);\n\n responseNode = (\n <>\n {ctx.renderHeading(headingLevel, 'Response Body')}\n\n <Accordions type=\"multiple\">\n {statuses.map((status) => (\n <ResponseAccordion key={status} status={status} operation={method} ctx={ctx} />\n ))}\n </Accordions>\n </>\n );\n }\n\n const parameterNode = Object.entries(ParamTypes).map(([type, title]) => {\n const params = method.parameters?.filter((param) => param.in === type);\n if (!params || params.length === 0) return;\n\n return (\n <Fragment key={type}>\n {ctx.renderHeading(headingLevel, title)}\n <div className=\"flex flex-col\">\n {params.map((param) => (\n <Schema\n key={param.name}\n client={{\n name: param.name,\n required: param.required,\n }}\n root={\n {\n ...param.schema,\n description: param.description ?? param.schema?.description,\n deprecated: (param.deprecated ?? false) || (param.schema?.deprecated ?? false),\n } as ResolvedSchema\n }\n readOnly={method.method === 'GET'}\n writeOnly={method.method !== 'GET'}\n ctx={ctx}\n />\n ))}\n </div>\n </Fragment>\n );\n });\n\n const securities = (method.security ?? dereferenced.security ?? []).filter(\n (v) => Object.keys(v).length > 0,\n );\n\n if (type === 'operation' && securities.length > 0) {\n const securitySchemes = dereferenced.components?.securitySchemes;\n const items = securities.map((security, i) => {\n return {\n value: String(i),\n label: (\n <div className=\"flex flex-col text-xs min-w-0\">\n {Object.entries(security).map(([key, scopes]) => (\n <code key={key} className=\"truncate\">\n <span className=\"font-medium\">{key}</span>{' '}\n {scopes.length > 0 && (\n <span className=\"text-fd-muted-foreground\">{scopes.join(', ')}</span>\n )}\n </code>\n ))}\n </div>\n ),\n };\n });\n\n authNode = (\n <SelectTabs defaultValue={items[0].value}>\n <div className=\"flex items-start justify-between gap-2 mt-10\">\n {ctx.renderHeading(headingLevel, 'Authorization', {\n className: 'my-0!',\n })}\n {items.length > 1 ? (\n <SelectTabTrigger items={items} />\n ) : (\n <div className=\"not-prose\">{items[0].label}</div>\n )}\n </div>\n {securities.map((security, i) => (\n <SelectTab key={i} value={items[i].value}>\n {Object.entries(security).map(([key, scopes]) => {\n const scheme = securitySchemes?.[key];\n if (!scheme) return;\n\n return <AuthScheme key={key} scheme={scheme} scopes={scopes} ctx={ctx} />;\n })}\n </SelectTab>\n ))}\n </SelectTabs>\n );\n }\n\n const callbacks = method.callbacks ? Object.entries(method.callbacks) : null;\n if (callbacks && callbacks.length > 0) {\n const items = callbacks.map(([key]) => ({\n label: <code className=\"text-xs\">{key}</code>,\n value: key,\n }));\n\n callbacksNode = (\n <SelectTabs defaultValue={items[0].value}>\n <div className=\"flex justify-between gap-2 items-end mt-10\">\n {ctx.renderHeading(headingLevel, 'Callbacks', {\n className: 'my-0!',\n })}\n {callbacks.length > 1 ? (\n <SelectTabTrigger items={items} className=\"font-medium\" />\n ) : (\n <p className=\"text-fd-muted-foreground not-prose\">{items[0].label}</p>\n )}\n </div>\n {callbacks.map(([name, callback]) => (\n <SelectTab key={name} value={name}>\n <WebhookCallback callback={callback} ctx={ctx} headingLevel={headingLevel} />\n </SelectTab>\n ))}\n </SelectTabs>\n );\n }\n\n let { renderOperationLayout, renderWebhookLayout } = ctx.content ?? {};\n if (type === 'operation') {\n renderOperationLayout ??= (slots) => {\n return (\n <div className=\"flex flex-col gap-x-6 gap-y-4 @4xl:flex-row @4xl:items-start\">\n <div className=\"min-w-0 flex-1\">\n {slots.header}\n {slots.apiPlayground}\n {slots.description}\n {slots.authSchemes}\n {slots.paremeters}\n {slots.body}\n {slots.responses}\n {slots.callbacks}\n </div>\n <div className=\"@4xl:sticky @4xl:top-[calc(var(--fd-docs-row-1,2rem)+1rem)] @4xl:w-[400px]\">\n {slots.apiExample}\n </div>\n </div>\n );\n };\n\n const playgroundEnabled = ctx.playground?.enabled ?? true;\n const content = await renderOperationLayout(\n {\n header: headNode,\n description: descriptionNode,\n authSchemes: authNode,\n body: bodyNode,\n callbacks: callbacksNode,\n paremeters: parameterNode,\n responses: responseNode,\n apiPlayground: playgroundEnabled ? (\n <APIPlayground path={path} method={method} ctx={ctx} />\n ) : (\n <div className=\"flex flex-row items-center gap-2.5 p-3 rounded-xl border bg-fd-card text-fd-card-foreground not-prose\">\n <MethodLabel className=\"text-xs\">{method.method}</MethodLabel>\n <code className=\"flex-1 overflow-auto text-nowrap text-[0.8125rem] text-fd-muted-foreground\">\n {path}\n </code>\n </div>\n ),\n apiExample: <UsageTabs method={method} ctx={ctx} />,\n },\n ctx,\n method,\n );\n\n return (\n <UsageTabsProviderLazy\n defaultExampleId={method['x-exclusiveCodeSample'] ?? method['x-selectedCodeSample']}\n route={path}\n examples={getExampleRequests(path, method, ctx)}\n >\n {content}\n </UsageTabsProviderLazy>\n );\n } else {\n renderWebhookLayout ??= (slots) => (\n <div className=\"flex flex-col-reverse gap-x-6 gap-y-4 @4xl:flex-row @4xl:items-start\">\n <div className=\"min-w-0 flex-1\">\n {slots.header}\n {slots.description}\n {slots.authSchemes}\n {slots.paremeters}\n {slots.body}\n {slots.responses}\n {slots.callbacks}\n </div>\n <div className=\"@4xl:sticky @4xl:top-[calc(var(--fd-docs-row-1,2rem)+1rem)] @4xl:w-[400px]\">\n {slots.requests}\n </div>\n </div>\n );\n return renderWebhookLayout({\n header: headNode,\n description: descriptionNode,\n authSchemes: authNode,\n body: bodyNode,\n callbacks: callbacksNode,\n paremeters: parameterNode,\n responses: responseNode,\n requests: <RequestTabs path={path} operation={method} ctx={ctx} />,\n });\n }\n}\n\nasync function ResponseAccordion({\n status,\n operation,\n ctx,\n}: {\n status: string;\n operation: MethodInformation;\n ctx: RenderContext;\n}) {\n const response = operation.responses![status];\n const { generateTypeScriptSchema } = ctx;\n const contentTypes = response.content ? Object.entries(response.content) : [];\n let wrapper = (children: ReactNode) => children;\n let selectorNode: ReactNode = null;\n\n if (contentTypes.length > 0) {\n const items = contentTypes.map(([key]) => ({\n label: <code className=\"text-xs\">{key}</code>,\n value: key,\n }));\n\n selectorNode =\n items.length === 1 ? (\n <p className=\"text-fd-muted-foreground not-prose\">{items[0].label}</p>\n ) : (\n <SelectTabTrigger items={items} />\n );\n wrapper = (children) => <SelectTabs defaultValue={items[0].value}>{children}</SelectTabs>;\n }\n\n return wrapper(\n <AccordionItem value={status}>\n <AccordionHeader>\n <AccordionTrigger className=\"font-mono\">{status}</AccordionTrigger>\n {selectorNode}\n </AccordionHeader>\n <AccordionContent className=\"ps-4.5\">\n {response.description && (\n <div className=\"prose-no-margin mb-2\">{ctx.renderMarkdown(response.description)}</div>\n )}\n {contentTypes.map(async ([type, resType]) => {\n const schema = resType.schema;\n let ts: string | undefined;\n\n if (generateTypeScriptSchema) {\n ts = await generateTypeScriptSchema(operation, status);\n } else if (generateTypeScriptSchema === undefined && schema) {\n ts = await getTypescriptSchema(schema, ctx);\n }\n\n return (\n <SelectTab key={type} value={type} className=\"mb-2\">\n {ts && <CopyResponseTypeScript code={ts} />}\n {schema && (\n <div className=\"border px-3 py-2 rounded-lg\">\n <Schema\n client={{\n name: 'response',\n as: 'body',\n }}\n root={schema as ResolvedSchema}\n readOnly\n ctx={ctx}\n />\n </div>\n )}\n </SelectTab>\n );\n })}\n </AccordionContent>\n </AccordionItem>,\n );\n}\n\nfunction WebhookCallback({\n callback,\n ctx,\n headingLevel,\n}: {\n callback: NoReference<CallbackObject>;\n ctx: RenderContext;\n headingLevel: number;\n}) {\n const pathItems = Object.entries(callback);\n\n return (\n <Accordions type=\"single\" collapsible>\n {pathItems.map(([path, pathItem]) => {\n const pathNodes = methodKeys.map((method) => {\n const operation = pathItem[method];\n if (!operation) return null;\n\n return (\n <div key={method} className=\"border p-3 my-2 @container prose-no-margin rounded-lg\">\n <Operation\n type=\"webhook\"\n path={path}\n headingLevel={headingLevel + 1}\n method={createMethod(method, pathItem, operation)}\n ctx={ctx}\n />\n </div>\n );\n });\n\n return (\n <AccordionItem key={path} value={path}>\n <AccordionHeader>\n <AccordionTrigger className=\"font-mono\">{path}</AccordionTrigger>\n </AccordionHeader>\n <AccordionContent>{pathNodes}</AccordionContent>\n </AccordionItem>\n );\n })}\n </Accordions>\n );\n}\n\nfunction AuthScheme({\n scheme: schema,\n scopes,\n ctx,\n}: {\n scheme: SecuritySchemeObject;\n scopes: string[];\n ctx: RenderContext;\n}) {\n if (schema.type === 'http' || schema.type === 'oauth2') {\n return (\n <AuthProperty\n name=\"Authorization\"\n type={\n schema.type === 'http' && schema.scheme === 'basic' ? `Basic <token>` : 'Bearer <token>'\n }\n scopes={scopes}\n >\n {schema.description && ctx.renderMarkdown(schema.description)}\n <p>\n In: <code>header</code>\n </p>\n </AuthProperty>\n );\n }\n\n if (schema.type === 'apiKey') {\n return (\n <AuthProperty name={schema.name} type=\"<token>\" scopes={scopes}>\n {schema.description && ctx.renderMarkdown(schema.description)}\n <p>\n In: <code>{schema.in}</code>\n </p>\n </AuthProperty>\n );\n }\n\n if (schema.type === 'openIdConnect') {\n return (\n <AuthProperty name=\"OpenID Connect\" type=\"<token>\" scopes={scopes}>\n {schema.description && ctx.renderMarkdown(schema.description)}\n </AuthProperty>\n );\n }\n}\n\nfunction AuthProperty({\n name,\n type,\n scopes = [],\n className,\n ...props\n}: ComponentProps<'div'> & {\n name: string;\n type: string;\n scopes?: string[];\n}) {\n return (\n <div className={cn('text-sm border-t my-4 first:border-t-0', className)}>\n <div className=\"flex flex-wrap items-center gap-3 not-prose\">\n <span className=\"font-medium font-mono text-fd-primary\">{name}</span>\n <span className=\"text-sm font-mono text-fd-muted-foreground\">{type}</span>\n </div>\n <div className=\"prose-no-margin pt-2.5 empty:hidden\">\n {props.children}\n {scopes.length > 0 && (\n <p>\n Scope: <code>{scopes.join(', ')}</code>\n </p>\n )}\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1,18 +1,17 @@
1
- import type { MethodInformation, RenderContext } from '../../types.js';
2
- import { type NoReference } from '../../utils/schema.js';
3
- import type { ReactNode } from 'react';
4
- import type { RawRequestData, RequestData } from '../../requests/types.js';
5
- export interface ExampleRequestItem {
6
- id: string;
7
- name: string;
8
- description?: string;
9
- data: RawRequestData;
10
- encoded: RequestData;
1
+ import "../../utils/schema.js";
2
+ import { RawRequestData, RequestData } from "../../requests/types.js";
3
+ import "../../types.js";
4
+ import { ReactNode } from "react";
5
+ import "react/jsx-runtime";
6
+
7
+ //#region src/ui/operation/request-tabs.d.ts
8
+ interface ExampleRequestItem {
9
+ id: string;
10
+ name: string;
11
+ description?: string;
12
+ data: RawRequestData;
13
+ encoded: RequestData;
11
14
  }
12
- export declare function getExampleRequests(path: string, operation: NoReference<MethodInformation>, ctx: RenderContext): ExampleRequestItem[];
13
- export declare function RequestTabs({ path, operation, ctx, }: {
14
- path: string;
15
- operation: NoReference<MethodInformation>;
16
- ctx: RenderContext;
17
- }): Promise<string | number | bigint | boolean | import("react/jsx-runtime").JSX.Element | Iterable<ReactNode> | null | undefined>;
15
+ //#endregion
16
+ export { ExampleRequestItem };
18
17
  //# sourceMappingURL=request-tabs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"request-tabs.d.ts","sourceRoot":"","sources":["../../../src/ui/operation/request-tabs.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAEL,KAAK,WAAW,EAEjB,MAAM,gBAAgB,CAAC;AASxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAWpE,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,cAAc,CAAC;IACrB,OAAO,EAAE,WAAW,CAAC;CACtB;AAED,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,WAAW,CAAC,iBAAiB,CAAC,EACzC,GAAG,EAAE,aAAa,GACjB,kBAAkB,EAAE,CA0CtB;AA2ED,wBAAsB,WAAW,CAAC,EAChC,IAAI,EACJ,SAAS,EACT,GAAG,GACJ,EAAE;IACD,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,WAAW,CAAC,iBAAiB,CAAC,CAAC;IAC1C,GAAG,EAAE,aAAa,CAAC;CACpB,kIASA"}
1
+ {"version":3,"file":"request-tabs.d.ts","names":[],"sources":["../../../src/ui/operation/request-tabs.tsx"],"sourcesContent":[],"mappings":";;;;;;;UAiBiB,kBAAA;;;EAAA,WAAA,CAAA,EAAA,MAAA;QAIT;WACG"}
@@ -1,137 +1,157 @@
1
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { getPreferredType, pickExample, } from '../../utils/schema.js';
3
- import { AccordionContent, AccordionHeader, AccordionItem, Accordions, AccordionTrigger, } from '../../ui/components/accordion.js';
4
- import { sample } from 'openapi-sampler';
5
- import { encodeRequestData } from '../../requests/media/encode.js';
6
- import { Tabs, TabsContent, TabsList, TabsTrigger, } from 'fumadocs-ui/components/tabs';
7
- import { resolveRequestData } from '../../utils/url.js';
8
- import { MethodLabel } from '../components/method-label.js';
9
- export function getExampleRequests(path, operation, ctx) {
10
- const media = operation.requestBody
11
- ? getPreferredType(operation.requestBody.content)
12
- : null;
13
- const bodyOfType = media ? operation.requestBody?.content[media] : null;
14
- if (bodyOfType?.examples) {
15
- const result = [];
16
- for (const [key, value] of Object.entries(bodyOfType.examples)) {
17
- const data = getRequestData(path, operation, key, ctx);
18
- result.push({
19
- id: key,
20
- name: value.summary || key,
21
- description: value.description,
22
- data,
23
- encoded: encodeRequestData(data, ctx.mediaAdapters, operation.parameters ?? []),
24
- });
25
- }
26
- if (result.length > 0)
27
- return result;
28
- }
29
- const data = getRequestData(path, operation, null, ctx);
30
- return [
31
- {
32
- id: '_default',
33
- name: 'Default',
34
- description: bodyOfType?.schema?.description,
35
- data,
36
- encoded: encodeRequestData(data, ctx.mediaAdapters, operation.parameters ?? []),
37
- },
38
- ];
1
+ import { resolveRequestData } from "../../utils/url.js";
2
+ import { getPreferredType, pickExample } from "../../utils/schema.js";
3
+ import { MethodLabel } from "../components/method-label.js";
4
+ import { encodeRequestData } from "../../requests/media/encode.js";
5
+ import { AccordionContent, AccordionHeader, AccordionItem, AccordionTrigger, Accordions } from "../components/accordion.js";
6
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
7
+ import { Tabs, TabsContent, TabsList, TabsTrigger } from "fumadocs-ui/components/tabs";
8
+ import { sample } from "openapi-sampler";
9
+
10
+ //#region src/ui/operation/request-tabs.tsx
11
+ function getExampleRequests(path, operation, ctx) {
12
+ const media = operation.requestBody ? getPreferredType(operation.requestBody.content) : null;
13
+ const bodyOfType = media ? operation.requestBody?.content[media] : null;
14
+ if (bodyOfType?.examples) {
15
+ const result = [];
16
+ for (const [key, value] of Object.entries(bodyOfType.examples)) {
17
+ const data$1 = getRequestData(path, operation, key, ctx);
18
+ result.push({
19
+ id: key,
20
+ name: value.summary || key,
21
+ description: value.description,
22
+ data: data$1,
23
+ encoded: encodeRequestData(data$1, ctx.mediaAdapters, operation.parameters ?? [])
24
+ });
25
+ }
26
+ if (result.length > 0) return result;
27
+ }
28
+ const data = getRequestData(path, operation, null, ctx);
29
+ return [{
30
+ id: "_default",
31
+ name: "Default",
32
+ description: bodyOfType?.schema?.description,
33
+ data,
34
+ encoded: encodeRequestData(data, ctx.mediaAdapters, operation.parameters ?? [])
35
+ }];
39
36
  }
40
37
  function getRequestData(path, method, sampleKey, _ctx) {
41
- const result = {
42
- path: {},
43
- cookie: {},
44
- header: {},
45
- query: {},
46
- method: method.method,
47
- };
48
- for (const param of method.parameters ?? []) {
49
- let value = pickExample(param);
50
- if (value === undefined && param.required) {
51
- if (param.schema) {
52
- value = sample(param.schema);
53
- }
54
- else if (param.content) {
55
- const type = getPreferredType(param.content);
56
- const content = type ? param.content[type] : undefined;
57
- if (!content || !content.schema)
58
- throw new Error(`Cannot find "${param.name}" parameter info for media type "${type}" in ${path} ${method.method}`);
59
- value = sample(content.schema);
60
- }
61
- }
62
- switch (param.in) {
63
- case 'cookie':
64
- result.cookie[param.name] = value;
65
- break;
66
- case 'header':
67
- result.header[param.name] = value;
68
- break;
69
- case 'query':
70
- result.query[param.name] = value;
71
- break;
72
- default:
73
- result.path[param.name] = value;
74
- }
75
- }
76
- if (method.requestBody) {
77
- const body = method.requestBody.content;
78
- const type = getPreferredType(body);
79
- if (!type)
80
- throw new Error(`Cannot find body schema for ${path} ${method.method}: missing media type`);
81
- result.bodyMediaType = type;
82
- const bodyOfType = body[type];
83
- if (bodyOfType.examples && sampleKey) {
84
- result.body = bodyOfType.examples[sampleKey].value;
85
- }
86
- else if (bodyOfType.example) {
87
- result.body = bodyOfType.example;
88
- }
89
- else {
90
- result.body = sample((bodyOfType?.schema ?? {}), {
91
- skipReadOnly: method.method !== 'GET',
92
- skipWriteOnly: method.method === 'GET',
93
- skipNonRequired: true,
94
- });
95
- }
96
- }
97
- return result;
38
+ const result = {
39
+ path: {},
40
+ cookie: {},
41
+ header: {},
42
+ query: {},
43
+ method: method.method
44
+ };
45
+ for (const param of method.parameters ?? []) {
46
+ let value = pickExample(param);
47
+ if (value === void 0 && param.required) {
48
+ if (param.schema) value = sample(param.schema);
49
+ else if (param.content) {
50
+ const type = getPreferredType(param.content);
51
+ const content = type ? param.content[type] : void 0;
52
+ if (!content || !content.schema) throw new Error(`Cannot find "${param.name}" parameter info for media type "${type}" in ${path} ${method.method}`);
53
+ value = sample(content.schema);
54
+ }
55
+ }
56
+ switch (param.in) {
57
+ case "cookie":
58
+ result.cookie[param.name] = value;
59
+ break;
60
+ case "header":
61
+ result.header[param.name] = value;
62
+ break;
63
+ case "query":
64
+ result.query[param.name] = value;
65
+ break;
66
+ default: result.path[param.name] = value;
67
+ }
68
+ }
69
+ if (method.requestBody) {
70
+ const body = method.requestBody.content;
71
+ const type = getPreferredType(body);
72
+ if (!type) throw new Error(`Cannot find body schema for ${path} ${method.method}: missing media type`);
73
+ result.bodyMediaType = type;
74
+ const bodyOfType = body[type];
75
+ if (bodyOfType.examples && sampleKey) result.body = bodyOfType.examples[sampleKey].value;
76
+ else if (bodyOfType.example) result.body = bodyOfType.example;
77
+ else result.body = sample(bodyOfType?.schema ?? {}, {
78
+ skipReadOnly: method.method !== "GET",
79
+ skipWriteOnly: method.method === "GET",
80
+ skipNonRequired: true
81
+ });
82
+ }
83
+ return result;
98
84
  }
99
- export async function RequestTabs({ path, operation, ctx, }) {
100
- if (!operation.requestBody)
101
- return null;
102
- const { renderRequestTabs = renderRequestTabsDefault } = ctx.content ?? {};
103
- return renderRequestTabs(getExampleRequests(path, operation, ctx), {
104
- ...ctx,
105
- route: path,
106
- operation,
107
- });
85
+ async function RequestTabs({ path, operation, ctx }) {
86
+ if (!operation.requestBody) return null;
87
+ const { renderRequestTabs = renderRequestTabsDefault } = ctx.content ?? {};
88
+ return renderRequestTabs(getExampleRequests(path, operation, ctx), {
89
+ ...ctx,
90
+ route: path,
91
+ operation
92
+ });
108
93
  }
109
94
  function renderRequestTabsDefault(items, ctx) {
110
- function renderItem(item) {
111
- const requestData = item.data;
112
- const displayNames = {
113
- body: (_jsxs(_Fragment, { children: ["Body", _jsx("code", { className: "text-xs text-fd-muted-foreground ms-auto", children: requestData.bodyMediaType })] })),
114
- cookie: 'Cookie',
115
- header: 'Header',
116
- query: 'Query Parameters',
117
- path: 'Path Parameters',
118
- };
119
- return (_jsxs(_Fragment, { children: [item.description && ctx.renderMarkdown(item.description), _jsxs("div", { className: "flex flex-row gap-2 items-center justify-between", children: [_jsx(MethodLabel, { children: requestData.method }), _jsx("code", { children: resolveRequestData(ctx.route, item.encoded) })] }), _jsx(Accordions, { type: "multiple", className: "mt-2", children: Object.entries(displayNames).map(([k, v]) => {
120
- const data = requestData[k];
121
- if (!data || Object.keys(data).length === 0)
122
- return;
123
- return (_jsxs(AccordionItem, { value: k, children: [_jsx(AccordionHeader, { children: _jsx(AccordionTrigger, { children: v }) }), _jsx(AccordionContent, { className: "prose-no-margin", children: ctx.renderCodeBlock('json', JSON.stringify(data, null, 2)) })] }, k));
124
- }) })] }));
125
- }
126
- let children;
127
- if (items.length > 1) {
128
- children = (_jsxs(Tabs, { defaultValue: items[0].id, children: [_jsx(TabsList, { children: items.map((item) => (_jsx(TabsTrigger, { value: item.id, children: item.name }, item.id))) }), items.map((item) => (_jsx(TabsContent, { value: item.id, children: renderItem(item) }, item.id)))] }));
129
- }
130
- else if (items.length === 1) {
131
- children = renderItem(items[0]);
132
- }
133
- else {
134
- children = _jsx("p", { className: "text-fd-muted-foreground text-xs", children: "Empty" });
135
- }
136
- return (_jsxs("div", { className: "p-3 rounded-xl border prose-no-margin bg-fd-card text-fd-card-foreground shadow-md", children: [_jsx("p", { className: "font-semibold border-b pb-2", children: "Example Requests" }), children] }));
95
+ function renderItem(item) {
96
+ const requestData = item.data;
97
+ const displayNames = {
98
+ body: /* @__PURE__ */ jsxs(Fragment, { children: ["Body", /* @__PURE__ */ jsx("code", {
99
+ className: "text-xs text-fd-muted-foreground ms-auto",
100
+ children: requestData.bodyMediaType
101
+ })] }),
102
+ cookie: "Cookie",
103
+ header: "Header",
104
+ query: "Query Parameters",
105
+ path: "Path Parameters"
106
+ };
107
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
108
+ item.description && ctx.renderMarkdown(item.description),
109
+ /* @__PURE__ */ jsxs("div", {
110
+ className: "flex flex-row gap-2 items-center justify-between",
111
+ children: [/* @__PURE__ */ jsx(MethodLabel, { children: requestData.method }), /* @__PURE__ */ jsx("code", { children: resolveRequestData(ctx.route, item.encoded) })]
112
+ }),
113
+ /* @__PURE__ */ jsx(Accordions, {
114
+ type: "multiple",
115
+ className: "mt-2",
116
+ children: Object.entries(displayNames).map(([k, v]) => {
117
+ const data = requestData[k];
118
+ if (!data || Object.keys(data).length === 0) return;
119
+ return /* @__PURE__ */ jsxs(AccordionItem, {
120
+ value: k,
121
+ children: [/* @__PURE__ */ jsx(AccordionHeader, { children: /* @__PURE__ */ jsx(AccordionTrigger, { children: v }) }), /* @__PURE__ */ jsx(AccordionContent, {
122
+ className: "prose-no-margin",
123
+ children: ctx.renderCodeBlock("json", JSON.stringify(data, null, 2))
124
+ })]
125
+ }, k);
126
+ })
127
+ })
128
+ ] });
129
+ }
130
+ let children;
131
+ if (items.length > 1) children = /* @__PURE__ */ jsxs(Tabs, {
132
+ defaultValue: items[0].id,
133
+ children: [/* @__PURE__ */ jsx(TabsList, { children: items.map((item) => /* @__PURE__ */ jsx(TabsTrigger, {
134
+ value: item.id,
135
+ children: item.name
136
+ }, item.id)) }), items.map((item) => /* @__PURE__ */ jsx(TabsContent, {
137
+ value: item.id,
138
+ children: renderItem(item)
139
+ }, item.id))]
140
+ });
141
+ else if (items.length === 1) children = renderItem(items[0]);
142
+ else children = /* @__PURE__ */ jsx("p", {
143
+ className: "text-fd-muted-foreground text-xs",
144
+ children: "Empty"
145
+ });
146
+ return /* @__PURE__ */ jsxs("div", {
147
+ className: "p-3 rounded-xl border prose-no-margin bg-fd-card text-fd-card-foreground shadow-md",
148
+ children: [/* @__PURE__ */ jsx("p", {
149
+ className: "font-semibold border-b pb-2",
150
+ children: "Example Requests"
151
+ }), children]
152
+ });
137
153
  }
154
+
155
+ //#endregion
156
+ export { RequestTabs, getExampleRequests };
157
+ //# sourceMappingURL=request-tabs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-tabs.js","names":["result: ExampleRequestItem[]","data","result: RawRequestData","displayNames: Partial<Record<keyof RawRequestData, ReactNode>>","children: ReactNode"],"sources":["../../../src/ui/operation/request-tabs.tsx"],"sourcesContent":["import type { MethodInformation, RenderContext } from '@/types';\nimport { getPreferredType, type NoReference, pickExample } from '@/utils/schema';\nimport {\n AccordionContent,\n AccordionHeader,\n AccordionItem,\n Accordions,\n AccordionTrigger,\n} from '@/ui/components/accordion';\nimport { sample } from 'openapi-sampler';\nimport type { ReactNode } from 'react';\nimport type { RawRequestData, RequestData } from '@/requests/types';\nimport { encodeRequestData } from '@/requests/media/encode';\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from 'fumadocs-ui/components/tabs';\nimport { resolveRequestData } from '@/utils/url';\nimport { MethodLabel } from '../components/method-label';\n\nexport interface ExampleRequestItem {\n id: string;\n name: string;\n description?: string;\n data: RawRequestData;\n encoded: RequestData;\n}\n\nexport function getExampleRequests(\n path: string,\n operation: NoReference<MethodInformation>,\n ctx: RenderContext,\n): ExampleRequestItem[] {\n const media = operation.requestBody ? getPreferredType(operation.requestBody.content) : null;\n const bodyOfType = media ? operation.requestBody?.content[media] : null;\n\n if (bodyOfType?.examples) {\n const result: ExampleRequestItem[] = [];\n\n for (const [key, value] of Object.entries(bodyOfType.examples)) {\n const data = getRequestData(path, operation, key, ctx);\n\n result.push({\n id: key,\n name: value.summary || key,\n description: value.description,\n data,\n encoded: encodeRequestData(data, ctx.mediaAdapters, operation.parameters ?? []),\n });\n }\n\n if (result.length > 0) return result;\n }\n\n const data = getRequestData(path, operation, null, ctx);\n return [\n {\n id: '_default',\n name: 'Default',\n description: bodyOfType?.schema?.description,\n data,\n encoded: encodeRequestData(data, ctx.mediaAdapters, operation.parameters ?? []),\n },\n ];\n}\n\nfunction getRequestData(\n path: string,\n method: NoReference<MethodInformation>,\n sampleKey: string | null,\n _ctx: RenderContext,\n): RawRequestData {\n const result: RawRequestData = {\n path: {},\n cookie: {},\n header: {},\n query: {},\n method: method.method,\n };\n\n for (const param of method.parameters ?? []) {\n let value = pickExample(param);\n\n if (value === undefined && param.required) {\n if (param.schema) {\n value = sample(param.schema as object);\n } else if (param.content) {\n const type = getPreferredType(param.content);\n const content = type ? param.content[type] : undefined;\n if (!content || !content.schema)\n throw new Error(\n `Cannot find \"${param.name}\" parameter info for media type \"${type}\" in ${path} ${method.method}`,\n );\n\n value = sample(content.schema as object);\n }\n }\n\n switch (param.in) {\n case 'cookie':\n result.cookie[param.name] = value;\n break;\n case 'header':\n result.header[param.name] = value;\n break;\n case 'query':\n result.query[param.name] = value;\n break;\n default:\n result.path[param.name] = value;\n }\n }\n\n if (method.requestBody) {\n const body = method.requestBody.content;\n const type = getPreferredType(body);\n if (!type)\n throw new Error(`Cannot find body schema for ${path} ${method.method}: missing media type`);\n result.bodyMediaType = type as RawRequestData['bodyMediaType'];\n const bodyOfType = body[type];\n\n if (bodyOfType.examples && sampleKey) {\n result.body = bodyOfType.examples[sampleKey].value;\n } else if (bodyOfType.example) {\n result.body = bodyOfType.example;\n } else {\n result.body = sample((bodyOfType?.schema ?? {}) as object, {\n skipReadOnly: method.method !== 'GET',\n skipWriteOnly: method.method === 'GET',\n skipNonRequired: true,\n });\n }\n }\n\n return result;\n}\n\nexport async function RequestTabs({\n path,\n operation,\n ctx,\n}: {\n path: string;\n operation: NoReference<MethodInformation>;\n ctx: RenderContext;\n}) {\n if (!operation.requestBody) return null;\n const { renderRequestTabs = renderRequestTabsDefault } = ctx.content ?? {};\n\n return renderRequestTabs(getExampleRequests(path, operation, ctx), {\n ...ctx,\n route: path,\n operation,\n });\n}\n\nfunction renderRequestTabsDefault(\n items: ExampleRequestItem[],\n ctx: RenderContext & {\n route: string;\n operation: NoReference<MethodInformation>;\n },\n) {\n function renderItem(item: ExampleRequestItem) {\n const requestData = item.data;\n const displayNames: Partial<Record<keyof RawRequestData, ReactNode>> = {\n body: (\n <>\n Body\n <code className=\"text-xs text-fd-muted-foreground ms-auto\">\n {requestData.bodyMediaType}\n </code>\n </>\n ),\n cookie: 'Cookie',\n header: 'Header',\n query: 'Query Parameters',\n path: 'Path Parameters',\n };\n\n return (\n <>\n {item.description && ctx.renderMarkdown(item.description)}\n <div className=\"flex flex-row gap-2 items-center justify-between\">\n <MethodLabel>{requestData.method}</MethodLabel>\n <code>{resolveRequestData(ctx.route, item.encoded)}</code>\n </div>\n\n <Accordions type=\"multiple\" className=\"mt-2\">\n {Object.entries(displayNames).map(([k, v]) => {\n const data = requestData[k as keyof RawRequestData];\n if (!data || Object.keys(data).length === 0) return;\n\n return (\n <AccordionItem key={k} value={k}>\n <AccordionHeader>\n <AccordionTrigger>{v}</AccordionTrigger>\n </AccordionHeader>\n <AccordionContent className=\"prose-no-margin\">\n {ctx.renderCodeBlock('json', JSON.stringify(data, null, 2))}\n </AccordionContent>\n </AccordionItem>\n );\n })}\n </Accordions>\n </>\n );\n }\n\n let children: ReactNode;\n if (items.length > 1) {\n children = (\n <Tabs defaultValue={items[0].id}>\n <TabsList>\n {items.map((item) => (\n <TabsTrigger key={item.id} value={item.id}>\n {item.name}\n </TabsTrigger>\n ))}\n </TabsList>\n {items.map((item) => (\n <TabsContent key={item.id} value={item.id}>\n {renderItem(item)}\n </TabsContent>\n ))}\n </Tabs>\n );\n } else if (items.length === 1) {\n children = renderItem(items[0]);\n } else {\n children = <p className=\"text-fd-muted-foreground text-xs\">Empty</p>;\n }\n\n return (\n <div className=\"p-3 rounded-xl border prose-no-margin bg-fd-card text-fd-card-foreground shadow-md\">\n <p className=\"font-semibold border-b pb-2\">Example Requests</p>\n {children}\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1,32 +1,31 @@
1
- import type { MethodInformation, RenderContext, ResponseObject } from '../../types.js';
2
- import { type NoReference } from '../../utils/schema.js';
3
- import type { ReactNode } from 'react';
4
- export interface ResponseTab {
5
- /**
6
- * HTTP response code
7
- */
8
- code: string;
9
- response: NoReference<ResponseObject>;
10
- /**
11
- * media type of response
12
- */
13
- mediaType: string | null;
14
- examples?: ResponseExample[];
1
+ import { NoReference } from "../../utils/schema.js";
2
+ import { ResponseObject } from "../../types.js";
3
+ import { ReactNode } from "react";
4
+
5
+ //#region src/ui/operation/response-tabs.d.ts
6
+ interface ResponseTab {
7
+ /**
8
+ * HTTP response code
9
+ */
10
+ code: string;
11
+ response: NoReference<ResponseObject>;
12
+ /**
13
+ * media type of response
14
+ */
15
+ mediaType: string | null;
16
+ examples?: ResponseExample[];
15
17
  }
16
18
  interface ResponseExample {
17
- /**
18
- * generated/defined example data
19
- */
20
- sample: unknown;
21
- label: string;
22
- /**
23
- * description (in Markdown)
24
- */
25
- description?: string;
19
+ /**
20
+ * generated/defined example data
21
+ */
22
+ sample: unknown;
23
+ label: string;
24
+ /**
25
+ * description (in Markdown)
26
+ */
27
+ description?: string;
26
28
  }
27
- export declare function ResponseTabs({ operation, ctx, }: {
28
- operation: NoReference<MethodInformation>;
29
- ctx: RenderContext;
30
- }): ReactNode | Promise<ReactNode>;
31
- export {};
29
+ //#endregion
30
+ export { ResponseTab };
32
31
  //# sourceMappingURL=response-tabs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"response-tabs.d.ts","sourceRoot":"","sources":["../../../src/ui/operation/response-tabs.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAChF,OAAO,EAAoB,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAUpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb,QAAQ,EAAE,WAAW,CAAC,cAAc,CAAC,CAAC;IACtC;;OAEG;IACH,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAEzB,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAC;CAC9B;AAED,UAAU,eAAe;IACvB;;OAEG;IACH,MAAM,EAAE,OAAO,CAAC;IAEhB,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,YAAY,CAAC,EAC3B,SAAS,EACT,GAAG,GACJ,EAAE;IACD,SAAS,EAAE,WAAW,CAAC,iBAAiB,CAAC,CAAC;IAC1C,GAAG,EAAE,aAAa,CAAC;CACpB,kCAwCA"}
1
+ {"version":3,"file":"response-tabs.d.ts","names":[],"sources":["../../../src/ui/operation/response-tabs.tsx"],"sourcesContent":[],"mappings":";;;;;UAaiB,WAAA;;AAAjB;;EAMY,IAAA,EAAA,MAAA;EAMC,QAAA,EAND,WAMC,CANW,cAMX,CAAA;EAAe;AAC3B;;;aADY;;UAGH,eAAA"}
@@ -1,59 +1,76 @@
1
- import { Fragment as _Fragment, jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
- import { getPreferredType } from '../../utils/schema.js';
3
- import { AccordionContent, AccordionHeader, AccordionItem, Accordions, AccordionTrigger, } from '../../ui/components/accordion.js';
4
- import { Tab, Tabs } from 'fumadocs-ui/components/tabs';
5
- import { sample } from 'openapi-sampler';
6
- export function ResponseTabs({ operation, ctx, }) {
7
- if (!operation.responses)
8
- return null;
9
- const tabs = [];
10
- for (const [code, response] of Object.entries(operation.responses)) {
11
- const media = response.content ? getPreferredType(response.content) : null;
12
- const responseOfType = media ? response.content?.[media] : null;
13
- const tab = {
14
- code,
15
- response,
16
- mediaType: media,
17
- };
18
- if (responseOfType?.examples) {
19
- tab.examples ?? (tab.examples = []);
20
- for (const [key, sample] of Object.entries(responseOfType.examples)) {
21
- const title = sample?.summary || `Example ${key}`;
22
- tab.examples.push({
23
- label: title,
24
- sample: sample.value,
25
- description: sample?.description,
26
- });
27
- }
28
- }
29
- else if (responseOfType?.example || responseOfType?.schema) {
30
- tab.examples ?? (tab.examples = []);
31
- tab.examples.push({
32
- label: 'Example',
33
- sample: responseOfType.example ?? sample(responseOfType.schema),
34
- });
35
- }
36
- tabs.push(tab);
37
- }
38
- const { renderResponseTabs = renderResponseTabsDefault } = ctx.content ?? {};
39
- return renderResponseTabs(tabs, ctx);
1
+ import { getPreferredType } from "../../utils/schema.js";
2
+ import { AccordionContent, AccordionHeader, AccordionItem, AccordionTrigger, Accordions } from "../components/accordion.js";
3
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
4
+ import { Tab, Tabs } from "fumadocs-ui/components/tabs";
5
+ import { sample } from "openapi-sampler";
6
+
7
+ //#region src/ui/operation/response-tabs.tsx
8
+ function ResponseTabs({ operation, ctx }) {
9
+ if (!operation.responses) return null;
10
+ const tabs = [];
11
+ for (const [code, response] of Object.entries(operation.responses)) {
12
+ const media = response.content ? getPreferredType(response.content) : null;
13
+ const responseOfType = media ? response.content?.[media] : null;
14
+ const tab = {
15
+ code,
16
+ response,
17
+ mediaType: media
18
+ };
19
+ if (responseOfType?.examples) {
20
+ tab.examples ??= [];
21
+ for (const [key, sample$1] of Object.entries(responseOfType.examples)) {
22
+ const title = sample$1?.summary || `Example ${key}`;
23
+ tab.examples.push({
24
+ label: title,
25
+ sample: sample$1.value,
26
+ description: sample$1?.description
27
+ });
28
+ }
29
+ } else if (responseOfType?.example || responseOfType?.schema) {
30
+ tab.examples ??= [];
31
+ tab.examples.push({
32
+ label: "Example",
33
+ sample: responseOfType.example ?? sample(responseOfType.schema)
34
+ });
35
+ }
36
+ tabs.push(tab);
37
+ }
38
+ const { renderResponseTabs = renderResponseTabsDefault } = ctx.content ?? {};
39
+ return renderResponseTabs(tabs, ctx);
40
40
  }
41
41
  function renderResponseTabsDefault(tabs, ctx) {
42
- function renderExampleContent(example) {
43
- return (_jsxs(_Fragment, { children: [example.description && ctx.renderMarkdown(example.description), ctx.renderCodeBlock('json', JSON.stringify(example.sample, null, 2))] }));
44
- }
45
- async function renderResponse(tab) {
46
- const { examples = [] } = tab;
47
- let slot = 'Empty';
48
- if (examples.length > 1) {
49
- slot = (_jsx(Accordions, { type: "single", className: "pt-2", defaultValue: examples[0].label, children: examples.map((example, i) => (_jsxs(AccordionItem, { value: example.label, children: [_jsx(AccordionHeader, { children: _jsx(AccordionTrigger, { children: example.label }) }), _jsx(AccordionContent, { className: "prose-no-margin", children: renderExampleContent(example) })] }, i))) }));
50
- }
51
- else if (examples.length === 1) {
52
- slot = renderExampleContent(examples[0]);
53
- }
54
- return _jsx(Tab, { value: tab.code, children: slot });
55
- }
56
- if (tabs.length === 0)
57
- return null;
58
- return (_jsx(Tabs, { groupId: "fumadocs_openapi_responses", items: tabs.map((tab) => tab.code), children: tabs.map(renderResponse) }));
42
+ function renderExampleContent(example) {
43
+ return /* @__PURE__ */ jsxs(Fragment, { children: [example.description && ctx.renderMarkdown(example.description), ctx.renderCodeBlock("json", JSON.stringify(example.sample, null, 2))] });
44
+ }
45
+ async function renderResponse(tab) {
46
+ const { examples = [] } = tab;
47
+ let slot = "Empty";
48
+ if (examples.length > 1) slot = /* @__PURE__ */ jsx(Accordions, {
49
+ type: "single",
50
+ className: "pt-2",
51
+ defaultValue: examples[0].label,
52
+ children: examples.map((example, i) => /* @__PURE__ */ jsxs(AccordionItem, {
53
+ value: example.label,
54
+ children: [/* @__PURE__ */ jsx(AccordionHeader, { children: /* @__PURE__ */ jsx(AccordionTrigger, { children: example.label }) }), /* @__PURE__ */ jsx(AccordionContent, {
55
+ className: "prose-no-margin",
56
+ children: renderExampleContent(example)
57
+ })]
58
+ }, i))
59
+ });
60
+ else if (examples.length === 1) slot = renderExampleContent(examples[0]);
61
+ return /* @__PURE__ */ jsx(Tab, {
62
+ value: tab.code,
63
+ children: slot
64
+ });
65
+ }
66
+ if (tabs.length === 0) return null;
67
+ return /* @__PURE__ */ jsx(Tabs, {
68
+ groupId: "fumadocs_openapi_responses",
69
+ items: tabs.map((tab) => tab.code),
70
+ children: tabs.map(renderResponse)
71
+ });
59
72
  }
73
+
74
+ //#endregion
75
+ export { ResponseTabs };
76
+ //# sourceMappingURL=response-tabs.js.map