fumadocs-openapi 10.6.4 → 10.6.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (228) hide show
  1. package/css/generated/shared.css +2 -2
  2. package/dist/_openapi/types.d.ts +1 -2
  3. package/dist/generate-file.d.ts +1 -2
  4. package/dist/generate-file.js +0 -2
  5. package/dist/i18n.d.ts +1 -2
  6. package/dist/i18n.js +0 -2
  7. package/dist/playground/client.d.ts +3 -9
  8. package/dist/playground/client.js +27 -20
  9. package/dist/playground/components/inputs.js +0 -2
  10. package/dist/playground/components/oauth-dialog.js +0 -2
  11. package/dist/playground/components/server-select.js +0 -2
  12. package/dist/playground/fetcher.d.ts +1 -2
  13. package/dist/playground/fetcher.js +0 -2
  14. package/dist/playground/schema.d.ts +1 -2
  15. package/dist/playground/schema.js +24 -15
  16. package/dist/playground/status-info.js +0 -2
  17. package/dist/requests/generators/all.d.ts +1 -2
  18. package/dist/requests/generators/all.js +0 -2
  19. package/dist/requests/generators/csharp.d.ts +1 -2
  20. package/dist/requests/generators/csharp.js +0 -2
  21. package/dist/requests/generators/curl.d.ts +1 -2
  22. package/dist/requests/generators/curl.js +0 -2
  23. package/dist/requests/generators/go.d.ts +1 -2
  24. package/dist/requests/generators/go.js +0 -2
  25. package/dist/requests/generators/index.d.ts +1 -2
  26. package/dist/requests/generators/index.js +0 -2
  27. package/dist/requests/generators/java.d.ts +1 -2
  28. package/dist/requests/generators/java.js +0 -2
  29. package/dist/requests/generators/javascript.d.ts +1 -2
  30. package/dist/requests/generators/javascript.js +0 -2
  31. package/dist/requests/generators/python.d.ts +1 -2
  32. package/dist/requests/generators/python.js +0 -2
  33. package/dist/requests/media/adapter.d.ts +1 -2
  34. package/dist/requests/media/adapter.js +0 -2
  35. package/dist/requests/media/encode.d.ts +1 -2
  36. package/dist/requests/media/encode.js +0 -2
  37. package/dist/requests/media/resolve-adapter.js +0 -2
  38. package/dist/requests/string-utils.js +0 -2
  39. package/dist/requests/types.d.ts +1 -2
  40. package/dist/scalar/client.js +0 -2
  41. package/dist/scalar/index.d.ts +1 -2
  42. package/dist/scalar/index.js +0 -2
  43. package/dist/server/create.d.ts +2 -3
  44. package/dist/server/create.js +0 -2
  45. package/dist/server/proxy.d.ts +1 -2
  46. package/dist/server/proxy.js +0 -2
  47. package/dist/server/source-api.d.ts +1 -2
  48. package/dist/server/source-api.js +0 -2
  49. package/dist/types.d.ts +1 -2
  50. package/dist/ui/api-page.d.ts +1 -2
  51. package/dist/ui/api-page.js +0 -2
  52. package/dist/ui/base.d.ts +1 -2
  53. package/dist/ui/base.js +3 -5
  54. package/dist/ui/client/boundary.d.ts +1 -2
  55. package/dist/ui/client/boundary.js +0 -2
  56. package/dist/ui/client/boundary.lazy.js +0 -2
  57. package/dist/ui/client/full.js +0 -2
  58. package/dist/ui/client/i18n.js +0 -2
  59. package/dist/ui/client/index.d.ts +1 -2
  60. package/dist/ui/client/index.js +0 -2
  61. package/dist/ui/client/storage-key.js +0 -2
  62. package/dist/ui/components/accordion.js +0 -2
  63. package/dist/ui/components/codeblock.d.ts +1 -2
  64. package/dist/ui/components/codeblock.js +0 -2
  65. package/dist/ui/components/dialog.js +0 -2
  66. package/dist/ui/components/input.js +0 -2
  67. package/dist/ui/components/method-label.js +0 -2
  68. package/dist/ui/components/select-tab.js +0 -2
  69. package/dist/ui/components/select.js +0 -2
  70. package/dist/ui/contexts/api.d.ts +1 -2
  71. package/dist/ui/contexts/api.js +0 -2
  72. package/dist/ui/create-client.d.ts +1 -2
  73. package/dist/ui/create-client.js +1 -3
  74. package/dist/ui/index.d.ts +1 -2
  75. package/dist/ui/index.js +0 -2
  76. package/dist/ui/operation/client.js +0 -2
  77. package/dist/ui/operation/get-example-requests.d.ts +1 -2
  78. package/dist/ui/operation/get-example-requests.js +0 -2
  79. package/dist/ui/operation/index.js +0 -2
  80. package/dist/ui/operation/request-tabs.js +0 -2
  81. package/dist/ui/operation/response-tabs.d.ts +1 -2
  82. package/dist/ui/operation/response-tabs.js +0 -2
  83. package/dist/ui/operation/usage-tabs/client.d.ts +1 -2
  84. package/dist/ui/operation/usage-tabs/client.js +0 -2
  85. package/dist/ui/operation/usage-tabs/index.js +0 -2
  86. package/dist/ui/schema/client.d.ts +1 -2
  87. package/dist/ui/schema/client.js +0 -2
  88. package/dist/ui/schema/index.d.ts +3 -4
  89. package/dist/ui/schema/index.js +1 -3
  90. package/dist/utils/deep-equal.js +0 -2
  91. package/dist/utils/document/dereference.d.ts +1 -2
  92. package/dist/utils/document/dereference.js +0 -2
  93. package/dist/utils/document/process.d.ts +1 -2
  94. package/dist/utils/document/process.js +0 -2
  95. package/dist/utils/id-to-title.js +0 -2
  96. package/dist/utils/is-plain-object.js +0 -2
  97. package/dist/utils/pages/builder.d.ts +1 -2
  98. package/dist/utils/pages/builder.js +0 -2
  99. package/dist/utils/pages/preset-auto.d.ts +1 -2
  100. package/dist/utils/pages/preset-auto.js +0 -2
  101. package/dist/utils/pages/to-static-data.js +0 -2
  102. package/dist/utils/pages/to-text.d.ts +1 -2
  103. package/dist/utils/pages/to-text.js +0 -2
  104. package/dist/utils/remove-undefined.js +0 -2
  105. package/dist/utils/schema/dereference.js +22 -14
  106. package/dist/utils/schema/index.d.ts +1 -6
  107. package/dist/utils/schema/index.js +0 -2
  108. package/dist/utils/{merge-schema.js → schema/merge.js} +2 -4
  109. package/dist/utils/schema/pick.js +0 -2
  110. package/dist/utils/schema/ref.js +0 -2
  111. package/dist/utils/schema/resolve-ref.js +0 -2
  112. package/dist/utils/schema/to-string.js +4 -7
  113. package/dist/utils/url.js +0 -2
  114. package/dist/utils/use-query.js +0 -2
  115. package/package.json +1 -1
  116. package/dist/_openapi/types.d.ts.map +0 -1
  117. package/dist/generate-file.d.ts.map +0 -1
  118. package/dist/generate-file.js.map +0 -1
  119. package/dist/i18n.d.ts.map +0 -1
  120. package/dist/i18n.js.map +0 -1
  121. package/dist/playground/client.d.ts.map +0 -1
  122. package/dist/playground/client.js.map +0 -1
  123. package/dist/playground/components/inputs.js.map +0 -1
  124. package/dist/playground/components/oauth-dialog.js.map +0 -1
  125. package/dist/playground/components/server-select.js.map +0 -1
  126. package/dist/playground/fetcher.d.ts.map +0 -1
  127. package/dist/playground/fetcher.js.map +0 -1
  128. package/dist/playground/schema.d.ts.map +0 -1
  129. package/dist/playground/schema.js.map +0 -1
  130. package/dist/playground/status-info.js.map +0 -1
  131. package/dist/requests/generators/all.d.ts.map +0 -1
  132. package/dist/requests/generators/all.js.map +0 -1
  133. package/dist/requests/generators/csharp.d.ts.map +0 -1
  134. package/dist/requests/generators/csharp.js.map +0 -1
  135. package/dist/requests/generators/curl.d.ts.map +0 -1
  136. package/dist/requests/generators/curl.js.map +0 -1
  137. package/dist/requests/generators/go.d.ts.map +0 -1
  138. package/dist/requests/generators/go.js.map +0 -1
  139. package/dist/requests/generators/index.d.ts.map +0 -1
  140. package/dist/requests/generators/index.js.map +0 -1
  141. package/dist/requests/generators/java.d.ts.map +0 -1
  142. package/dist/requests/generators/java.js.map +0 -1
  143. package/dist/requests/generators/javascript.d.ts.map +0 -1
  144. package/dist/requests/generators/javascript.js.map +0 -1
  145. package/dist/requests/generators/python.d.ts.map +0 -1
  146. package/dist/requests/generators/python.js.map +0 -1
  147. package/dist/requests/media/adapter.d.ts.map +0 -1
  148. package/dist/requests/media/adapter.js.map +0 -1
  149. package/dist/requests/media/encode.d.ts.map +0 -1
  150. package/dist/requests/media/encode.js.map +0 -1
  151. package/dist/requests/media/resolve-adapter.js.map +0 -1
  152. package/dist/requests/string-utils.js.map +0 -1
  153. package/dist/requests/types.d.ts.map +0 -1
  154. package/dist/scalar/client.js.map +0 -1
  155. package/dist/scalar/index.d.ts.map +0 -1
  156. package/dist/scalar/index.js.map +0 -1
  157. package/dist/server/create.d.ts.map +0 -1
  158. package/dist/server/create.js.map +0 -1
  159. package/dist/server/proxy.d.ts.map +0 -1
  160. package/dist/server/proxy.js.map +0 -1
  161. package/dist/server/source-api.d.ts.map +0 -1
  162. package/dist/server/source-api.js.map +0 -1
  163. package/dist/types.d.ts.map +0 -1
  164. package/dist/ui/api-page.d.ts.map +0 -1
  165. package/dist/ui/api-page.js.map +0 -1
  166. package/dist/ui/base.d.ts.map +0 -1
  167. package/dist/ui/base.js.map +0 -1
  168. package/dist/ui/client/boundary.d.ts.map +0 -1
  169. package/dist/ui/client/boundary.js.map +0 -1
  170. package/dist/ui/client/boundary.lazy.js.map +0 -1
  171. package/dist/ui/client/full.js.map +0 -1
  172. package/dist/ui/client/i18n.js.map +0 -1
  173. package/dist/ui/client/index.d.ts.map +0 -1
  174. package/dist/ui/client/index.js.map +0 -1
  175. package/dist/ui/client/storage-key.js.map +0 -1
  176. package/dist/ui/components/accordion.js.map +0 -1
  177. package/dist/ui/components/codeblock.d.ts.map +0 -1
  178. package/dist/ui/components/codeblock.js.map +0 -1
  179. package/dist/ui/components/dialog.js.map +0 -1
  180. package/dist/ui/components/input.js.map +0 -1
  181. package/dist/ui/components/method-label.js.map +0 -1
  182. package/dist/ui/components/select-tab.js.map +0 -1
  183. package/dist/ui/components/select.js.map +0 -1
  184. package/dist/ui/contexts/api.d.ts.map +0 -1
  185. package/dist/ui/contexts/api.js.map +0 -1
  186. package/dist/ui/create-client.d.ts.map +0 -1
  187. package/dist/ui/create-client.js.map +0 -1
  188. package/dist/ui/index.d.ts.map +0 -1
  189. package/dist/ui/index.js.map +0 -1
  190. package/dist/ui/operation/client.js.map +0 -1
  191. package/dist/ui/operation/get-example-requests.d.ts.map +0 -1
  192. package/dist/ui/operation/get-example-requests.js.map +0 -1
  193. package/dist/ui/operation/index.js.map +0 -1
  194. package/dist/ui/operation/request-tabs.js.map +0 -1
  195. package/dist/ui/operation/response-tabs.d.ts.map +0 -1
  196. package/dist/ui/operation/response-tabs.js.map +0 -1
  197. package/dist/ui/operation/usage-tabs/client.d.ts.map +0 -1
  198. package/dist/ui/operation/usage-tabs/client.js.map +0 -1
  199. package/dist/ui/operation/usage-tabs/index.js.map +0 -1
  200. package/dist/ui/schema/client.d.ts.map +0 -1
  201. package/dist/ui/schema/client.js.map +0 -1
  202. package/dist/ui/schema/index.d.ts.map +0 -1
  203. package/dist/ui/schema/index.js.map +0 -1
  204. package/dist/utils/deep-equal.js.map +0 -1
  205. package/dist/utils/document/dereference.d.ts.map +0 -1
  206. package/dist/utils/document/dereference.js.map +0 -1
  207. package/dist/utils/document/process.d.ts.map +0 -1
  208. package/dist/utils/document/process.js.map +0 -1
  209. package/dist/utils/id-to-title.js.map +0 -1
  210. package/dist/utils/is-plain-object.js.map +0 -1
  211. package/dist/utils/merge-schema.js.map +0 -1
  212. package/dist/utils/pages/builder.d.ts.map +0 -1
  213. package/dist/utils/pages/builder.js.map +0 -1
  214. package/dist/utils/pages/preset-auto.d.ts.map +0 -1
  215. package/dist/utils/pages/preset-auto.js.map +0 -1
  216. package/dist/utils/pages/to-static-data.js.map +0 -1
  217. package/dist/utils/pages/to-text.d.ts.map +0 -1
  218. package/dist/utils/pages/to-text.js.map +0 -1
  219. package/dist/utils/remove-undefined.js.map +0 -1
  220. package/dist/utils/schema/dereference.js.map +0 -1
  221. package/dist/utils/schema/index.d.ts.map +0 -1
  222. package/dist/utils/schema/index.js.map +0 -1
  223. package/dist/utils/schema/pick.js.map +0 -1
  224. package/dist/utils/schema/ref.js.map +0 -1
  225. package/dist/utils/schema/resolve-ref.js.map +0 -1
  226. package/dist/utils/schema/to-string.js.map +0 -1
  227. package/dist/utils/url.js.map +0 -1
  228. package/dist/utils/use-query.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","names":["OpenAPI","T","OpenAPIV2","Document","OpenAPIV3","OpenAPIV3_1","OpenAPIV3_2","OperationObject","ResponseObject","HeaderObject","ReferenceObject","ParameterObject","Parameter","ExampleObject","SchemaObject","HttpMethods","Operation","Request","body","headers","params","query","Parameters","HttpMethod","R","P","Omit","PathsObject","PathItemObject","Record","ComponentsObject","ServerObject","TagObject","PathsWebhooksComponents","Pick","Partial","Modify","RequestBodyObject","ResponsesObject","CallbackObject","ParameterStyle","ParameterLocation","MediaTypeObject","NonArraySchemaObjectType","ArraySchemaObjectType","ArraySchemaObject","NonArraySchemaObject","MixedSchemaObject","BaseSchemaObject","DiscriminatorObject","XMLObject","XMLNodeType","EncodingObject","LinkObject","SecuritySchemeObject","HttpSecurityScheme","ApiKeySecurityScheme","OAuth2SecurityScheme","OpenIdSecurityScheme","OAuthFlows","OAuthFlowBase","OAuthFlowTokenUrlTrait","paths","webhooks","components","openapi","swagger","servers","$self","tags","name","method","additionalOperations","parameters","requestBody","responses","callbacks","style","in","schema","examples","media","content","type","items","discriminator","xml","defaultMapping","nodeType","dataValue","serializedValue","encoding","itemSchema","itemEncoding","prefixEncoding","header","links","link","summary","server","schemas","requestBodies","securitySchemes","pathItems","mediaTypes","deprecated","deviceAuthorization","deviceAuthorizationUrl","flows","parent","kind","InfoObject","LicenseObject","ContactObject","ServerVariableObject","ExternalDocumentationObject","ParameterBaseObject","SecurityRequirementObject","info","jsonSchemaDialect","license","identifier","url","description","variables","enum","exclusiveMinimum","exclusiveMaximum","contentMediaType","$schema","additionalProperties","properties","patternProperties","allOf","oneOf","anyOf","not","externalDocs","const","OAuthFlowAuthorizationUrlTrait","security","title","termsOfService","contact","version","email","variable","default","pattern","$ref","operationId","callback","required","allowEmptyValue","explode","allowReserved","example","format","multipleOf","maximum","minimum","maxLength","minLength","maxItems","minItems","uniqueItems","maxProperties","minProperties","nullable","readOnly","writeOnly","propertyName","mapping","value","namespace","prefix","attribute","wrapped","externalValue","contentType","code","operationRef","parameter","key","scheme","bearerFormat","scopes","scope","refreshUrl","authorizationUrl","tokenUrl","implicit","password","clientCredentials","authorizationCode","openIdConnectUrl","MimeTypes","DefinitionsObject","ParametersDefinitionsObject","ResponsesDefinitionsObject","SecurityDefinitionsObject","SecuritySchemeObjectBase","SecuritySchemeOauth2Implicit","SecuritySchemeOauth2AccessCode","SecuritySchemeOauth2Password","SecuritySchemeOauth2Application","ScopesObject","SecuritySchemeOauth2Base","SecuritySchemeBasic","SecuritySchemeApiKey","SecuritySchemeOauth2","Schema","HeadersObject","ItemsObject","Response","InBodyParameterObject","GeneralParameterObject","IJsonSchema","basePath","consumes","definitions","host","produces","schemes","securityDefinitions","index","flow","collectionFormat","id","additionalItems","dependencies"],"sources":["../../src/_openapi/types.d.ts"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"generate-file.d.ts","names":[],"sources":["../src/generate-file.ts"],"mappings":";;;;;;;;UAUiB,UAAA;EACf,IAAA;EACA,OAAA;AAAA;AAAA,UAGQ,WAAA;EACR,KAAA,EAAO,SAAA,OAAgB,GAAA,EAAK,kBAAA,KAAuB,SAAA;EALnD;;AAED;EAQC,GAAA,IACM,QAAA;IAEA,OAAA;IARC;;;IAYD,UAAA;EAAA;AAAA;AAAA,UAIE,SAAA;EAhBoB;EAkB5B,IAAA;EACA,KAAA;EACA,WAAA;EAdM;;;;;EAqBN,IAAA;AAAA;AAAA,UAGQ,mBAAA,SAA4B,kBAAA;EAdnB;;;EAkBjB,KAAA,EAAO,aAAA;EAPP;;;EAYA,MAAA;EAT4B;;;EAc5B,KAAA,GAAQ,WAAA;EAOS;;;;;EAAjB,IAAA,aAAiB,WAAA;EArBqC;;;EA0BtD,WAAA,IAAe,IAAA,EAAM,kBAAA,EAAoB,KAAA,EAAO,UAAA,cAAwB,OAAA;AAAA;AAAA,UAGhE,WAAA;EACR,UAAA;AAAA;AAAA,KAGU,MAAA,GAAS,oBAAA,GACnB,mBAAA;EARA;;;;;EAcE,KAAA;AAAA;AAAA,UAGM,kBAAA;EAAA,SACC,SAAA,EAAW,MAAA,SAAe,UAAA;EAAA,SAC1B,gBAAA,EAAkB,MAAA,SAAe,WAAA;EAAA,SACjC,SAAA,EAAW,MAAA,SAAe,oBAAA;AAAA;AAAA,iBAGf,aAAA,CAAc,OAAA,EAAS,MAAA,GAAS,OAAA;AAAA,iBA2BhC,iBAAA,CACpB,OAAA,EAAS,gBAAA,CAAiB,MAAA,cACzB,OAAA,CAAQ,UAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"generate-file.js","names":["path"],"sources":["../src/generate-file.ts"],"sourcesContent":["import { mkdir, writeFile } from 'node:fs/promises';\nimport * as path from 'node:path';\nimport { generateDocument, type PagesToTextOptions, toText } from './utils/pages/to-text';\nimport type { DereferencedDocument } from '@/utils/document/dereference';\nimport type { OpenAPIServer } from '@/server';\nimport { createGetUrl, getSlugs, PathUtils } from 'fumadocs-core/source';\nimport { createAutoPreset, type SchemaToPagesOptions } from '@/utils/pages/preset-auto';\nimport { fromSchema, type OutputGroup, type OutputEntry } from '@/utils/pages/builder';\nimport type { DistributiveOmit } from './types';\n\nexport interface OutputFile {\n path: string;\n content: string;\n}\n\ninterface IndexConfig {\n items: IndexItem[] | ((ctx: BeforeWriteContext) => IndexItem[]);\n\n /**\n * Generate URLs for cards\n */\n url:\n | ((filePath: string) => string)\n | {\n baseUrl: string;\n /**\n * Base content directory\n */\n contentDir: string;\n };\n}\n\ninterface IndexItem {\n /** output path of index page */\n path: string;\n title?: string;\n description?: string;\n\n /**\n * Specify linked pages:\n * - items in `inputs` to include all generated pages of a specific schema.\n * - file paths (using forward slash).\n */\n only?: string[];\n}\n\ninterface GenerateFilesConfig extends PagesToTextOptions {\n /**\n * the OpenAPI server object\n */\n input: OpenAPIServer;\n\n /**\n * Output directory\n */\n output: string;\n\n /**\n * Generate index files with cards linking to generated pages.\n */\n index?: IndexConfig;\n\n /**\n * Generate `meta.json` files.\n *\n * Note: for flexibility, it's recommended to define them on your own.\n */\n meta?: boolean | MetaOptions;\n\n /**\n * Can add/change/remove output files before writing to file system\n **/\n beforeWrite?: (this: BeforeWriteContext, files: OutputFile[]) => void | Promise<void>;\n}\n\ninterface MetaOptions {\n groupStyle?: 'folder' | 'separator';\n}\n\nexport type Config = SchemaToPagesOptions &\n GenerateFilesConfig & {\n /**\n * Re-generate when **schema files are changed**, ignores custom input functions & URLs.\n *\n * Note: it is recommended to configure & use `chokidar` on your own, this is only for simple cases.\n */\n watch?: boolean;\n };\n\ninterface BeforeWriteContext {\n readonly generated: Record<string, OutputFile[]>;\n readonly generatedEntries: Record<string, OutputEntry[]>;\n readonly documents: Record<string, DereferencedDocument>;\n}\n\nexport async function generateFiles(options: Config): Promise<void> {\n if (options.watch) {\n const { watch } = await import('chokidar');\n const subOptions: Config = { ...options, watch: false };\n\n await generateFiles(subOptions);\n const targets = options.input._getWatchPaths();\n console.log(`[Fumadocs OpenAPI] watching ${targets.join(', ')}`);\n watch(targets, {\n ignoreInitial: true,\n }).on('all', () => generateFiles(subOptions));\n return;\n }\n\n const files = await generateFilesOnly(options);\n\n await Promise.all(\n files.map(async (file) => {\n const filePath = path.join(options.output, file.path);\n\n await mkdir(path.dirname(filePath), { recursive: true });\n await writeFile(filePath, file.content);\n console.log(`Generated: ${filePath}`);\n }),\n );\n}\n\nexport async function generateFilesOnly(\n options: DistributiveOmit<Config, 'output'>,\n): Promise<OutputFile[]> {\n const schemas = await options.input.getSchemas();\n\n const files: OutputFile[] = [];\n const generated: Record<string, OutputFile[]> = {};\n const generatedEntries: Record<string, OutputEntry[]> = {};\n\n const entries = Object.entries(schemas);\n if (entries.length === 0) {\n throw new Error('No input files found.');\n }\n const preset = createAutoPreset(options);\n for (const [id, schema] of entries) {\n const entries = fromSchema(id, schema, preset);\n const schemaFiles: OutputFile[] = [];\n\n generatedEntries[id] = entries;\n function scan(entry: OutputEntry) {\n if (entry.type === 'group') {\n for (const child of entry.entries) scan(child);\n return;\n }\n\n schemaFiles.push({\n path: entry.path,\n content: toText(entry, schema, options),\n });\n }\n\n for (const entry of entries) scan(entry);\n generated[id] = schemaFiles;\n files.push(...schemaFiles);\n }\n\n const context: BeforeWriteContext = {\n generated,\n generatedEntries,\n documents: schemas,\n };\n\n if (options.index) {\n files.push(...writeIndexFiles(context, options));\n }\n\n if (options.meta) {\n files.push(...generateMeta(context, options.meta === true ? {} : options.meta));\n }\n\n await options.beforeWrite?.call(context, files);\n return files;\n}\n\nfunction generateMeta(context: BeforeWriteContext, options: MetaOptions): OutputFile[] {\n const files: OutputFile[] = [];\n const { groupStyle = 'folder' } = options;\n\n function scan(entries: OutputEntry[], parent?: OutputGroup) {\n const pages: string[] = [];\n\n for (const entry of entries) {\n const relativePath = PathUtils.slash(\n parent ? path.relative(parent.path, entry.path) : entry.path,\n );\n\n if (entry.type === 'group') {\n scan(entry.entries, entry);\n\n if (groupStyle === 'folder') {\n pages.push(relativePath);\n } else {\n pages.push(`---${entry.info.title}---`, `...${relativePath}`);\n }\n } else {\n pages.push(relativePath.slice(0, -path.extname(entry.path).length));\n }\n }\n\n if (pages.length === 0) return;\n files.push({\n path: parent ? path.join(parent.path, 'meta.json') : 'meta.json',\n content: JSON.stringify(\n {\n title: parent?.info.title,\n description: parent?.info.description,\n pages,\n },\n null,\n 2,\n ),\n });\n }\n\n for (const entries of Object.values(context.generatedEntries)) {\n scan(entries);\n }\n\n return files;\n}\n\nfunction writeIndexFiles(\n context: BeforeWriteContext,\n options: SchemaToPagesOptions & Omit<GenerateFilesConfig, 'output'>,\n): OutputFile[] {\n const files: OutputFile[] = [];\n const { generatedEntries } = context;\n const pathToEntry = new Map<string, OutputEntry>();\n const { items, url } = options.index!;\n\n function indexEntry(entry: OutputEntry) {\n pathToEntry.set(PathUtils.slash(entry.path), entry);\n if (entry.type === 'group') {\n for (const child of entry.entries) {\n indexEntry(child);\n }\n }\n }\n\n let urlFn: (path: string) => string;\n if (typeof url === 'object') {\n const getUrl = createGetUrl(url.baseUrl);\n\n urlFn = (file) => getUrl(getSlugs(path.relative(url.contentDir, file)));\n } else {\n urlFn = url;\n }\n\n function fileContent(index: IndexItem): string {\n const content: string[] = [];\n content.push('<Cards>');\n const outputEntries: OutputEntry[] = [];\n const only = index.only ?? Object.keys(context.generated);\n\n for (const item of only) {\n if (generatedEntries[item]) {\n for (const entry of generatedEntries[item]) {\n outputEntries.push(entry);\n }\n } else {\n const match = pathToEntry.get(item);\n if (!match) {\n throw new Error(\n `${item} does not exist on \"input\", available: ${Object.keys(generatedEntries).join(', ')}.`,\n );\n }\n\n outputEntries.push(match);\n }\n }\n\n for (const entry of outputEntries) {\n // cannot link to groups\n if (entry.type === 'group') continue;\n const descriptionAttr = entry.info.description\n ? `description=${JSON.stringify(entry.info.description)} `\n : '';\n content.push(\n `<Card href=\"${urlFn(entry.path)}\" title=${JSON.stringify(entry.info.title)} ${descriptionAttr}/>`,\n );\n }\n\n content.push('</Cards>');\n return generateDocument(\n {\n title: index.title ?? 'Overview',\n description: index.description,\n },\n content.join('\\n'),\n options,\n );\n }\n\n for (const list of Object.values(context.generatedEntries)) {\n for (const item of list) indexEntry(item);\n }\n\n for (const item of typeof items === 'function' ? items(context) : items) {\n files.push({\n path: path.extname(item.path).length === 0 ? `${item.path}.mdx` : item.path,\n content: fileContent(item),\n });\n }\n\n return files;\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"i18n.d.ts","names":[],"sources":["../src/i18n.ts"],"mappings":";;;cAIa,mBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAuHD,YAAA,UAAsB,mBAAA;AAAA,iBAElB,iBAAA,0BAAA,CACd,MAAA,EAAQ,YAAA,CAAa,SAAA,GACrB,YAAA,EAAc,OAAA,CAAQ,MAAA,CAAO,OAAA,CAAQ,SAAA,GAAY,OAAA,CAAQ,YAAA,MACxD,YAAA,CAAa,SAAA"}
package/dist/i18n.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"i18n.js","names":[],"sources":["../src/i18n.ts"],"sourcesContent":["import type { I18nUIConfig } from 'fumadocs-ui/i18n';\nimport { deepmerge } from '@fastify/deepmerge';\nimport type { TranslationsOption } from 'fumadocs-ui/contexts/i18n';\n\nexport const defaultTranslations = {\n // General\n loading: 'loading...',\n empty: 'Empty',\n copy: 'Copy',\n send: 'Send',\n authorization: 'Authorization',\n cookies: 'Cookies',\n query: 'Query',\n path: 'Path',\n header: 'Header',\n body: 'Body',\n deprecated: 'Deprecated',\n submit: 'Submit',\n unsupported: 'Unsupported',\n close: 'Close',\n inputPlaceholder: 'Enter value',\n\n // Request tabs\n titleRequestTabs: 'Example Requests',\n requestTabNameDefault: 'Default',\n queryParameters: 'Query Parameters',\n pathParameters: 'Path Parameters',\n headerParameters: 'Header Parameters',\n cookieParameters: 'Cookie Parameters',\n\n // Operation sections\n titleRequestBody: 'Request Body',\n titleResponseBody: 'Response Body',\n titleCallbacks: 'Callbacks',\n\n // Auth scheme\n authBasicTokenExample: 'Basic <token>',\n authBearerTokenExample: 'Bearer <token>',\n openIdConnect: 'OpenID Connect',\n authTokenIn: 'In',\n authScope: 'Scope',\n\n // TypeScript panel\n typeScriptDefinitions: 'TypeScript Definitions',\n useTypeInTypeScript: 'Use the {name} type in TypeScript.',\n\n // Schema info tags\n schemaDefault: 'Default',\n schemaMatch: 'Match',\n schemaFormat: 'Format',\n schemaMultipleOf: 'Multiple Of',\n schemaRange: 'Range',\n schemaLength: 'Length',\n schemaProperties: 'Properties',\n schemaItems: 'Items',\n schemaValueIn: 'Value in',\n schemaExample: 'Example',\n\n // Response tabs\n responseTabName: 'Example {key}',\n responseTabNameDefault: 'Example',\n\n // Playground\n closeJsonEditor: 'Close JSON Editor',\n openJsonEditor: 'Open JSON Editor',\n accessToken: 'Access Token',\n authorize: 'Authorize',\n openIdUnsupported:\n 'OpenID Connect is not supported at the moment, you can still set an access token here.',\n\n // Status info\n statusBadRequest: 'Bad Request',\n statusUnauthorized: 'Unauthorized',\n statusForbidden: 'Forbidden',\n statusNotFound: 'Not Found',\n statusInternalServerError: 'Internal Server Error',\n statusSuccessful: 'Successful',\n statusError: 'Error',\n statusNoDescription: 'No Description',\n\n // OAuth dialog\n obtainAccessToken: 'Obtain the access token for API.',\n resourceOwnerPassword: 'Resource Owner Password Flow',\n resourceOwnerPasswordDesc: 'Authenticate using username and password.',\n clientCredentials: 'Client Credentials',\n clientCredentialsDesc: 'Intended for the server-to-server authentication.',\n authorizationCode: 'Authorization code',\n authorizationCodeDesc: 'Authenticate with 3rd party services',\n implicit: 'Implicit',\n implicitDesc: 'Retrieve the access token directly.',\n deviceAuthorization: 'Device Authorization',\n deviceAuthorizationDesc: 'Authenticate with device.',\n clientId: 'Client ID',\n clientIdHint: 'The client ID of your OAuth application.',\n clientSecret: 'Client Secret',\n clientSecretHint: 'The client secret of your OAuth application.',\n usernameField: 'Username',\n passwordField: 'Password',\n fetchingToken: 'Fetching token...',\n\n // Server select\n serverUrl: 'Server URL',\n serverUrlDescription: 'The base URL of your API endpoint.',\n serverUrlFieldPlaceholder: 'Enter Value',\n\n // Schema UI\n schemaShowArray: 'Array Item',\n schemaHideArray: 'Array Item',\n schemaFilterPropertiesPlaceholder: 'Filter Properties',\n schemaFilterPropertiesEmpty: 'No property matching',\n\n // Inputs (playground)\n playgroundShowProperty: 'Show Property',\n playgroundPropertyPlaceholder: 'Enter Property Name',\n playgroundNewProperty: 'New',\n playgroundNewItem: 'New Item',\n playgroundRemoveItem: 'Remove Item',\n playgroundSelectPlaceholder: 'Select',\n playgroundSelected: 'Selected',\n playgroundInputUpload: 'Upload',\n playgroundInputUnset: 'Unset',\n};\n\nexport type Translations = typeof defaultTranslations;\n\nexport function defineI18nOpenAPI<Languages extends string>(\n config: I18nUIConfig<Languages>,\n translations: Partial<Record<NoInfer<Languages>, Partial<Translations>>>,\n): I18nUIConfig<Languages> {\n const dm = deepmerge();\n return {\n ...config,\n provider(locale = config.defaultLanguage) {\n const out = config.provider(locale);\n const data = translations[locale as Languages];\n if (data) {\n out.translations ??= {};\n out.translations.openapi = dm(defaultTranslations, data) as TranslationsOption;\n }\n return out;\n },\n };\n}\n"],"mappings":";;AAIA,MAAa,sBAAsB;CAEjC,SAAS;CACT,OAAO;CACP,MAAM;CACN,MAAM;CACN,eAAe;CACf,SAAS;CACT,OAAO;CACP,MAAM;CACN,QAAQ;CACR,MAAM;CACN,YAAY;CACZ,QAAQ;CACR,aAAa;CACb,OAAO;CACP,kBAAkB;CAGlB,kBAAkB;CAClB,uBAAuB;CACvB,iBAAiB;CACjB,gBAAgB;CAChB,kBAAkB;CAClB,kBAAkB;CAGlB,kBAAkB;CAClB,mBAAmB;CACnB,gBAAgB;CAGhB,uBAAuB;CACvB,wBAAwB;CACxB,eAAe;CACf,aAAa;CACb,WAAW;CAGX,uBAAuB;CACvB,qBAAqB;CAGrB,eAAe;CACf,aAAa;CACb,cAAc;CACd,kBAAkB;CAClB,aAAa;CACb,cAAc;CACd,kBAAkB;CAClB,aAAa;CACb,eAAe;CACf,eAAe;CAGf,iBAAiB;CACjB,wBAAwB;CAGxB,iBAAiB;CACjB,gBAAgB;CAChB,aAAa;CACb,WAAW;CACX,mBACE;CAGF,kBAAkB;CAClB,oBAAoB;CACpB,iBAAiB;CACjB,gBAAgB;CAChB,2BAA2B;CAC3B,kBAAkB;CAClB,aAAa;CACb,qBAAqB;CAGrB,mBAAmB;CACnB,uBAAuB;CACvB,2BAA2B;CAC3B,mBAAmB;CACnB,uBAAuB;CACvB,mBAAmB;CACnB,uBAAuB;CACvB,UAAU;CACV,cAAc;CACd,qBAAqB;CACrB,yBAAyB;CACzB,UAAU;CACV,cAAc;CACd,cAAc;CACd,kBAAkB;CAClB,eAAe;CACf,eAAe;CACf,eAAe;CAGf,WAAW;CACX,sBAAsB;CACtB,2BAA2B;CAG3B,iBAAiB;CACjB,iBAAiB;CACjB,mCAAmC;CACnC,6BAA6B;CAG7B,wBAAwB;CACxB,+BAA+B;CAC/B,uBAAuB;CACvB,mBAAmB;CACnB,sBAAsB;CACtB,6BAA6B;CAC7B,oBAAoB;CACpB,uBAAuB;CACvB,sBAAsB;CACvB;AAID,SAAgB,kBACd,QACA,cACyB;CACzB,MAAM,KAAK,WAAW;AACtB,QAAO;EACL,GAAG;EACH,SAAS,SAAS,OAAO,iBAAiB;GACxC,MAAM,MAAM,OAAO,SAAS,OAAO;GACnC,MAAM,OAAO,aAAa;AAC1B,OAAI,MAAM;AACR,QAAI,iBAAiB,EAAE;AACvB,QAAI,aAAa,UAAU,GAAG,qBAAqB,KAAK;;AAE1D,UAAO;;EAEV"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.d.ts","names":[],"sources":["../../src/playground/client.tsx"],"mappings":";;;;;;;;;;;UA8DiB,UAAA,SAAmB,MAAA;EAClC,IAAA,EAAM,MAAA;EACN,KAAA,EAAO,MAAA;EACP,MAAA,EAAQ,MAAA;EACR,MAAA,EAAQ,MAAA;EACR,IAAA;AAAA;AAAA,UAGe,qBAAA,SAA8B,cAAA,UAAwB,WAAA;EACrE,KAAA;EACA,MAAA,EAAQ,WAAA;EACR,UAAA,EAAY,aAAA;EAX4B;EAaxC,GAAA;IAEM,OAAA,EAAS,QAAA;EAAA;IAGT,SAAA,EAAW,iBAAA;EAAA;EAEjB,QAAA;AAAA;AAAA,UAGe,kBAAA,SAA2B,cAAA;EAC1C,IAAA,EAAM,WAAA;EACN,KAAA;AAAA;AAAA,UAGe,qBAAA,SAA8B,IAAA,CAAK,cAAA,QAAsB,WAAA;EACxE,WAAA,6BAAwC,SAAA;EACxC,KAAA,EAAO,SAAA;AAAA;AAAA,UAGQ,uBAAA;EAvBP;;;EA2BR,mBAAA,IAAuB,MAAA,EAAQ,SAAA,OAAgB,SAAA;EAE/C,YAAA,GAAe,qBAAA;EA/BsD;;;;EAqCrE,cAAA;EAEA,UAAA;IACE,aAAA,GAAgB,EAAA,CAAG,kBAAA;IACnB,gBAAA,GAAmB,EAAA,CAAG,qBAAA;EAAA;EAtCZ;;;;;;;;EAiDZ,oBAAA,IAAwB,SAAA,EAAW,QAAA,EAAU,KAAA,EAAO,eAAA,KAAoB,SAAA;EArCzD;;;;;EA4Cf,eAAA,IAAmB,SAAA,UAAmB,IAAA,EAAM,eAAA,KAAoB,SAAA;AAAA;AAAA,UAGxD,eAAA;EACR,MAAA,EAAQ,YAAA;EACR,SAAA;AAAA;AAAA,iBAgBsB,gBAAA,CAAA;EACtB,KAAA;EACA,MAAA;EACA,UAAA;EACA,GAAA;EACA,QAAA;EACA,SAAA;EACA,QAAA;EAAA,GACG;AAAA,GACF,qBAAA,GAAqB,oBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,cA8PlB,UAAA;AAAA,KACD,SAAA,WAAoB,UAAA;AAAA,UAwGR,SAAA;EACf,SAAA,EAAW,QAAA;EACX,YAAA;EAEA,QAAA,GAAW,aAAA;EACX,QAAA,EAAU,SAAA;EAEV,SAAA,IAAa,MAAA;AAAA;AAAA,iBA8MC,oBAAA,CAAA;EAAuB,IAAA;EAAM,KAAA;EAAA,GAAU;AAAA,GAAQ,kBAAA,GAAkB,oBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAoCjE,uBAAA,CAAA;EAA0B,KAAA;EAAO,QAAA;EAAA,GAAa;AAAA,GAAS,qBAAA,GAAqB,oBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,cAc/E,MAAA;2BAEE,QAAA,EAAQ,OAAA;IAEjB,YAAA;EAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.js","names":[],"sources":["../../src/playground/client.tsx"],"sourcesContent":["'use client';\nimport {\n type FC,\n Fragment,\n type ReactNode,\n useEffect,\n useMemo,\n useState,\n type ComponentProps,\n useRef,\n} from 'react';\nimport { useApiContext, useServerContext } from '@/ui/contexts/api';\nimport type { BrowserFetcherOptions, FetchResult } from '@/playground/fetcher';\nimport { getStatusInfo } from './status-info';\nimport { joinURL, resolveRequestData, resolveServerUrl, withBase } from '@/utils/url';\nimport { MethodLabel } from '@/ui/components/method-label';\nimport { useQuery } from '@/utils/use-query';\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from 'fumadocs-ui/components/ui/collapsible';\nimport { ChevronDown, LoaderCircle } from 'lucide-react';\nimport { encodeRequestData } from '@/requests/media/encode';\nimport { buttonVariants } from 'fumadocs-ui/components/ui/button';\nimport { cn } from '@/utils/cn';\nimport { anyFields, SchemaProvider, SchemaScope, useResolvedSchema } from '@/playground/schema';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/ui/components/select';\nimport { labelVariants } from '@/ui/components/input';\nimport {\n getPreferredType,\n type SecurityEntry,\n type NoReference,\n type ParsedSchema,\n} from '@/utils/schema';\nimport ServerSelect from './components/server-select';\nimport { useStorageKey } from '@/ui/client/storage-key';\nimport {\n FieldKey,\n Stf,\n StfProvider,\n useDataEngine,\n useFieldValue,\n useListener,\n useStf,\n} from '@fumari/stf';\nimport { objectGet, objectSet, stringifyFieldKey } from '@fumari/stf/lib/utils';\nimport { FieldInput, FieldSet, JsonInput, ObjectInput } from './components/inputs';\nimport type { Document, HttpMethods, OperationObject, ParameterObject } from '@/types';\nimport { ClientCodeBlock } from '@/ui/components/codeblock';\nimport { useTranslations } from '@/ui/client/i18n';\nimport { useOperationContext } from '@/ui/operation/client';\nimport { OauthDialog, OauthDialogTrigger } from './components/oauth-dialog';\nimport { dereferenceDocument } from '@/utils/document/dereference';\nimport type { ProcessedDocument } from '@/utils/document/process';\n\nexport interface FormValues extends Record<string, unknown> {\n path: Record<string, unknown>;\n query: Record<string, unknown>;\n header: Record<string, unknown>;\n cookie: Record<string, unknown>;\n body: unknown;\n}\n\nexport interface PlaygroundClientProps extends ComponentProps<'form'>, SchemaScope {\n route: string;\n method: HttpMethods;\n securities: SecurityEntry[][];\n /** the OpenAPI document */\n doc:\n | {\n bundled: Document;\n }\n | {\n processed: ProcessedDocument;\n };\n proxyUrl?: string;\n}\n\nexport interface ResultDisplayProps extends ComponentProps<'div'> {\n data: FetchResult;\n reset: () => void;\n}\n\nexport interface CollapsiblePanelProps extends Omit<ComponentProps<typeof Collapsible>, 'title'> {\n 'data-type': 'authorization' | 'body' | ParamType;\n title: ReactNode;\n}\n\nexport interface PlaygroundClientOptions {\n /**\n * transform fields for auth-specific parameters (e.g. header)\n */\n transformAuthInputs?: (fields: AuthField[]) => AuthField[];\n\n fetchOptions?: BrowserFetcherOptions;\n\n /**\n * Request timeout in seconds (default: 10s)\n * @deprecated use `fetchOptions.requestTimeout` instead.\n */\n requestTimeout?: number;\n\n components?: {\n ResultDisplay?: FC<ResultDisplayProps>;\n CollapsiblePanel?: FC<CollapsiblePanelProps>;\n };\n\n /**\n * render the parameter inputs of API endpoint.\n *\n * for updating values, use:\n * - the `Custom.useController()` from `fumadocs-openapi/playground/client`.\n *\n * Recommended types packages: `json-schema-typed`, `openapi-types`.\n */\n renderParameterField?: (fieldName: FieldKey, param: ParameterObject) => ReactNode;\n\n /**\n * render the input for API endpoint body.\n *\n * @see renderParameterField for customisation tips\n */\n renderBodyField?: (fieldName: 'body', info: RequestBodyInfo) => ReactNode;\n}\n\ninterface RequestBodyInfo {\n schema: ParsedSchema;\n mediaType: string;\n}\n\nfunction getBodyInfo(operation: NoReference<OperationObject>): RequestBodyInfo | undefined {\n const content = operation.requestBody?.content;\n if (!content) return;\n const mediaType = getPreferredType(content);\n\n if (mediaType) {\n return {\n mediaType,\n schema: content[mediaType].schema ?? true,\n };\n }\n}\n\nexport default function PlaygroundClient({\n route,\n method,\n securities,\n doc,\n proxyUrl,\n writeOnly,\n readOnly,\n ...rest\n}: PlaygroundClientProps) {\n const t = useTranslations();\n const schema =\n 'processed' in doc\n ? doc.processed\n : // oxlint-disable-next-line eslint-plugin-react-hooks/rules-of-hooks -- assume unchanged\n useMemo(() => dereferenceDocument(doc.bundled), [doc.bundled]);\n const operation: NoReference<OperationObject> = schema.dereferenced.paths![route]![method]!;\n const body = getBodyInfo(operation);\n\n const { example: exampleId, examples, setExampleData } = useOperationContext();\n const { server } = useServerContext();\n const storageKeys = useStorageKey();\n const {\n mediaAdapters,\n client: {\n playground: {\n components: {\n ResultDisplay = DefaultResultDisplay,\n CollapsiblePanel = DefaultCollapsiblePanel,\n } = {},\n requestTimeout,\n fetchOptions = { requestTimeout },\n transformAuthInputs,\n renderBodyField,\n } = {},\n },\n } = useApiContext();\n const [securityId, setSecurityId] = useState(() => {\n const idx = securities.findIndex((s) => s.every((entry) => !entry.deprecated));\n return idx === -1 ? 0 : idx;\n });\n const { inputs, mapInputs, initAuthValues } = useAuthInputs(\n securities[securityId],\n transformAuthInputs,\n );\n\n const defaultValues: FormValues = useMemo(() => {\n const requestData = examples.find((example) => example.id === exampleId)?.data;\n\n return {\n path: requestData?.path ?? {},\n query: requestData?.query ?? {},\n header: requestData?.header ?? {},\n body: requestData?.body ?? {},\n cookie: requestData?.cookie ?? {},\n };\n }, [examples, exampleId]);\n\n const stf = useStf({\n // it is fine to modify `defaultValues` in place\n // because we already try to persist the form values via `setExampleData`.\n defaultValues,\n });\n\n const testQuery = useQuery(async (input: FormValues) => {\n const fetcher = await import('./fetcher').then((mod) =>\n mod.createBrowserFetcher(mediaAdapters, { proxyUrl, ...fetchOptions }),\n );\n\n const encoded = encodeRequestData(\n { ...mapInputs(input), method, bodyMediaType: body?.mediaType },\n mediaAdapters,\n operation.parameters,\n );\n return fetcher.fetch(\n joinURL(\n withBase(\n server ? resolveServerUrl(server.url, server.variables) : '/',\n window.location.origin,\n ),\n resolveRequestData(route, encoded),\n ),\n encoded,\n );\n });\n\n const timerRef = useRef<number | null>(null);\n useListener({\n stf,\n onUpdate() {\n if (timerRef.current) window.clearTimeout(timerRef.current);\n timerRef.current = window.setTimeout(\n () => {\n const values = stf.dataEngine.getData() as FormValues;\n for (const item of inputs) {\n const value = stf.dataEngine.get(item.fieldName);\n\n if (value) {\n localStorage.setItem(storageKeys.AuthField(item), JSON.stringify(value));\n }\n }\n\n const data = {\n ...mapInputs(values),\n method,\n bodyMediaType: body?.mediaType,\n };\n setExampleData(data, encodeRequestData(data, mediaAdapters, operation.parameters));\n },\n timerRef.current ? 400 : 0,\n );\n },\n });\n\n useEffect(() => {\n // same object reference = unchanged\n if (stf.dataEngine.getData() === defaultValues) return;\n\n stf.dataEngine.reset(defaultValues);\n // eslint-disable-next-line react-hooks/exhaustive-deps -- ignore other parts\n }, [defaultValues]);\n\n useEffect(() => {\n return initAuthValues(stf);\n // eslint-disable-next-line react-hooks/exhaustive-deps -- ignore other parts\n }, [defaultValues, inputs]);\n\n return (\n <StfProvider value={stf}>\n <SchemaProvider schema={schema} writeOnly={writeOnly} readOnly={readOnly}>\n <form\n {...rest}\n className={cn(\n 'not-prose flex flex-col rounded-xl border shadow-md overflow-hidden bg-fd-card text-fd-card-foreground',\n rest.className,\n )}\n onSubmit={(e) => {\n testQuery.start(mapInputs(stf.dataEngine.getData() as FormValues));\n e.preventDefault();\n }}\n >\n <ServerSelect className=\"border-b\" />\n <div className=\"flex flex-row items-center gap-2 text-sm p-3 not-last:pb-0\">\n <MethodLabel>{method}</MethodLabel>\n <Route route={route} className=\"flex-1\" />\n <button\n type=\"submit\"\n className={cn(buttonVariants({ color: 'primary', size: 'sm' }), 'w-14 py-1.5')}\n disabled={testQuery.isLoading}\n >\n {testQuery.isLoading ? <LoaderCircle className=\"size-4 animate-spin\" /> : t.send}\n </button>\n </div>\n {testQuery.data ? <ResultDisplay data={testQuery.data} reset={testQuery.reset} /> : null}\n\n {securities.length > 0 && (\n <SecurityTabs\n securities={securities}\n securityId={securityId}\n setSecurityId={setSecurityId}\n >\n {inputs.map((input) => (\n <Fragment key={stringifyFieldKey(input.fieldName)}>{input.children}</Fragment>\n ))}\n </SecurityTabs>\n )}\n <ParametersForm parameters={operation.parameters} />\n {body && (\n <CollapsiblePanel data-type=\"body\" title={t.body}>\n {renderBodyField ? renderBodyField('body', body) : <BodyInput field={body.schema} />}\n </CollapsiblePanel>\n )}\n </form>\n </SchemaProvider>\n </StfProvider>\n );\n}\n\nfunction SecurityTabsSelectItem({ security }: { security: SecurityEntry[] }) {\n return (\n <div className=\"flex flex-col gap-2 max-w-[600px]\">\n {security.map((item) => (\n <div key={item.id}>\n <p\n className={cn(\n 'font-mono font-medium',\n item.deprecated && 'text-fd-muted-foreground line-through',\n )}\n >\n {item.id}\n </p>\n <p className=\"text-fd-muted-foreground whitespace-pre-wrap\">{item.description}</p>\n </div>\n ))}\n </div>\n );\n}\n\nfunction SecurityTabs({\n securities,\n setSecurityId,\n securityId,\n children,\n}: {\n securities: SecurityEntry[][];\n securityId: number;\n setSecurityId: (value: number) => void;\n children: ReactNode;\n}) {\n const [open, setOpen] = useState(false);\n const engine = useDataEngine();\n const t = useTranslations();\n const { CollapsiblePanel = DefaultCollapsiblePanel } =\n useApiContext().client.playground?.components ?? {};\n\n const result = (\n <CollapsiblePanel title={t.authorization} data-type=\"authorization\">\n <Select value={securityId.toString()} onValueChange={(v) => setSecurityId(Number(v))}>\n <SelectTrigger>\n <SelectValue>\n <SecurityTabsSelectItem security={securities[securityId]} />\n </SelectValue>\n </SelectTrigger>\n <SelectContent>\n {securities.map((security, i) => (\n <SelectItem key={i} value={i.toString()}>\n <SecurityTabsSelectItem security={security} />\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n {children}\n </CollapsiblePanel>\n );\n\n for (let i = 0; i < securities.length; i++) {\n const security = securities[i];\n\n for (const item of security) {\n if (item.type === 'oauth2') {\n return (\n <OauthDialog\n scheme={item}\n scopes={item.scopes}\n open={open}\n setOpen={(v) => {\n setOpen(v);\n if (v) {\n setSecurityId(i);\n }\n }}\n setToken={(token) => engine.update(['header', 'Authorization'], token)}\n >\n {result}\n </OauthDialog>\n );\n }\n }\n }\n\n return result;\n}\n\nconst ParamTypes = ['path', 'header', 'cookie', 'query'] as const;\ntype ParamType = (typeof ParamTypes)[number];\n\nfunction ParameterItem({ type, parameters }: { type: ParamType; parameters: ParameterObject[] }) {\n const { renderParameterField } = useApiContext().client.playground ?? {};\n\n return parameters.map((field) => {\n const fieldName: FieldKey = [type, field.name!];\n if (renderParameterField) {\n return renderParameterField(fieldName, field);\n }\n\n const contentTypes = field.content && Object.keys(field.content);\n const schema =\n field.content && contentTypes && contentTypes.length > 0\n ? field.content[contentTypes[0]].schema\n : field.schema;\n\n return (\n <FieldSet\n key={stringifyFieldKey(fieldName)}\n name={field.name}\n fieldName={fieldName}\n field={(schema ?? anyFields) as ParsedSchema}\n isRequired={field.required}\n />\n );\n });\n}\n\nfunction ParametersForm({ parameters = [] }: { parameters?: ParameterObject[] }) {\n const { components: { CollapsiblePanel = DefaultCollapsiblePanel } = {} } =\n useApiContext().client.playground ?? {};\n const t = useTranslations();\n const displayNames = {\n header: t.header,\n cookie: t.cookies,\n query: t.query,\n path: t.path,\n };\n\n return ParamTypes.map((type) => {\n const items = parameters.filter((v) => v.in === type);\n if (items.length === 0) return;\n\n return (\n <CollapsiblePanel key={type} data-type={type} title={displayNames[type]}>\n <ParameterItem parameters={items} type={type} />\n </CollapsiblePanel>\n );\n });\n}\n\nfunction BodyInput({ field: _field }: { field: ParsedSchema }) {\n const field = useResolvedSchema(_field);\n const [isJson, setIsJson] = useState(false);\n const t = useTranslations();\n\n if (field.format === 'binary') return <FieldSet field={field} fieldName={['body']} isRequired />;\n\n if (isJson)\n return (\n <>\n <button\n className={cn(\n buttonVariants({\n color: 'secondary',\n size: 'sm',\n className: 'w-fit font-mono p-2',\n }),\n )}\n onClick={() => setIsJson(false)}\n type=\"button\"\n >\n {t.closeJsonEditor}\n </button>\n <JsonInput fieldName={['body']} />\n </>\n );\n\n return (\n <FieldSet\n field={field}\n fieldName={['body']}\n collapsible={false}\n isRequired\n name={\n <button\n type=\"button\"\n className={cn(\n buttonVariants({\n color: 'secondary',\n size: 'sm',\n className: 'p-2',\n }),\n )}\n onClick={() => setIsJson(true)}\n >\n {t.openJsonEditor}\n </button>\n }\n />\n );\n}\n\nexport interface AuthField {\n fieldName: FieldKey;\n defaultValue: unknown;\n\n original?: SecurityEntry;\n children: ReactNode;\n\n mapOutput?: (values: unknown) => unknown;\n}\n\nfunction useAuthInputs(\n securities?: SecurityEntry[],\n transform?: (fields: AuthField[]) => AuthField[],\n) {\n const storageKeys = useStorageKey();\n const t = useTranslations();\n const inputs = useMemo(() => {\n const result: AuthField[] = [];\n if (!securities) return result;\n\n for (const security of securities) {\n if (security.type === 'http' && security.scheme === 'basic') {\n const fieldName: FieldKey = ['header', 'Authorization'];\n\n result.push({\n fieldName,\n original: security,\n defaultValue: {\n username: '',\n password: '',\n },\n mapOutput(out) {\n if (out && typeof out === 'object') {\n const obj = out as Record<string, unknown>;\n return `Basic ${btoa(`${obj.username ?? ''}:${obj.password ?? ''}`)}`;\n }\n\n return out;\n },\n children: (\n <ObjectInput\n field={{\n type: 'object',\n properties: {\n username: {\n type: 'string',\n },\n password: {\n type: 'string',\n },\n },\n }}\n fieldName={fieldName}\n />\n ),\n });\n } else if (security.type === 'oauth2') {\n const fieldName: FieldKey = ['header', 'Authorization'];\n\n result.push({\n fieldName,\n original: security,\n defaultValue: 'Bearer ',\n children: (\n <fieldset className=\"flex flex-col gap-2\">\n <label htmlFor={stringifyFieldKey(fieldName)} className={cn(labelVariants())}>\n {t.accessToken}\n </label>\n <div className=\"flex gap-2\">\n <FieldInput\n fieldName={fieldName}\n field={{\n type: 'string',\n }}\n className=\"flex-1\"\n />\n\n <OauthDialogTrigger\n type=\"button\"\n className={cn(\n buttonVariants({\n size: 'sm',\n color: 'secondary',\n }),\n )}\n >\n {t.authorize}\n </OauthDialogTrigger>\n </div>\n </fieldset>\n ),\n });\n } else if (security.type === 'http') {\n const fieldName: FieldKey = ['header', 'Authorization'];\n\n result.push({\n fieldName,\n original: security,\n defaultValue: 'Bearer ',\n children: (\n <FieldSet\n name={`${t.authorization} (${t.header})`}\n fieldName={fieldName}\n field={{\n type: 'string',\n }}\n />\n ),\n });\n } else if (security.type === 'apiKey') {\n const fieldName: FieldKey = [security.in!, security.name!];\n\n result.push({\n fieldName,\n defaultValue: '',\n original: security,\n children: (\n <FieldSet\n fieldName={fieldName}\n name={`${security.name} (${security.in})`}\n field={{\n type: 'string',\n }}\n />\n ),\n });\n } else {\n const fieldName: FieldKey = ['header', 'Authorization'];\n\n result.push({\n fieldName,\n defaultValue: '',\n original: security,\n children: (\n <>\n <FieldSet\n name={`${t.authorization} (${t.header})`}\n fieldName={fieldName}\n field={{\n type: 'string',\n }}\n />\n <p className=\"text-fd-muted-foreground text-xs\">{t.openIdUnsupported}</p>\n </>\n ),\n });\n }\n }\n\n return transform ? transform(result) : result;\n }, [securities, transform, t]);\n\n const mapInputs = (values: FormValues) => {\n const cloned = structuredClone(values);\n\n for (const item of inputs) {\n if (!item.mapOutput) continue;\n objectSet(cloned, item.fieldName, item.mapOutput(objectGet(cloned, item.fieldName)));\n }\n\n return cloned;\n };\n\n const initAuthValues = (stf: Stf) => {\n const { dataEngine } = stf;\n for (const item of inputs) {\n const stored = localStorage.getItem(storageKeys.AuthField(item));\n\n if (stored) {\n const parsed = JSON.parse(stored);\n if (typeof parsed === typeof item.defaultValue) {\n dataEngine.init(item.fieldName, parsed);\n continue;\n }\n }\n\n dataEngine.init(item.fieldName, item.defaultValue);\n }\n\n // reset\n return () => {\n for (const item of inputs) {\n stf.dataEngine.delete(item.fieldName);\n }\n };\n };\n\n return { inputs, mapInputs, initAuthValues };\n}\n\nfunction Route({ route, ...props }: ComponentProps<'div'> & { route: string }) {\n return (\n <div\n {...props}\n className={cn(\n 'flex flex-row items-center gap-0.5 overflow-auto text-nowrap',\n props.className,\n )}\n >\n {route.split('/').map((part, index) => (\n <Fragment key={index}>\n {index > 0 && <span className=\"text-fd-muted-foreground\">/</span>}\n {part.startsWith('{') && part.endsWith('}') ? (\n <code className=\"bg-fd-primary/10 text-fd-primary\">{part}</code>\n ) : (\n <code className=\"text-fd-foreground\">{part}</code>\n )}\n </Fragment>\n ))}\n </div>\n );\n}\n\nexport function DefaultResultDisplay({ data, reset, ...rest }: ResultDisplayProps) {\n const t = useTranslations();\n const statusInfo = useMemo(() => getStatusInfo(data.status, t), [data.status, t]);\n\n return (\n <div\n {...rest}\n className={cn(\n 'flex flex-col gap-3 mt-2 px-3 py-2 border-y bg-fd-secondary text-fd-secondary-foreground',\n rest.className,\n )}\n >\n <div className=\"flex justify-between items-center\">\n <div className=\"inline-flex items-center gap-1.5 text-sm font-medium\">\n <statusInfo.icon className={cn('size-4', statusInfo.color)} />\n {statusInfo.description}\n </div>\n <button\n type=\"button\"\n className={cn(buttonVariants({ size: 'sm', variant: 'outline' }))}\n onClick={() => reset()}\n >\n {t.close}\n </button>\n </div>\n <p className=\"text-sm text-fd-muted-foreground\">{data.status}</p>\n {data.data !== undefined && (\n <ClientCodeBlock\n lang={typeof data.data === 'string' && data.data.length > 50000 ? 'text' : data.type}\n code={typeof data.data === 'string' ? data.data : JSON.stringify(data.data, null, 2)}\n />\n )}\n </div>\n );\n}\n\nexport function DefaultCollapsiblePanel({ title, children, ...props }: CollapsiblePanelProps) {\n return (\n <Collapsible {...props} className={cn('border-b last:border-b-0', props.className)}>\n <CollapsibleTrigger className=\"group w-full flex items-center gap-2 p-3 text-sm font-medium\">\n {title}\n <ChevronDown className=\"ms-auto size-3.5 text-fd-muted-foreground group-data-[state=open]:rotate-180\" />\n </CollapsibleTrigger>\n <CollapsibleContent>\n <div className=\"flex flex-col gap-3 p-3 pt-1\">{children}</div>\n </CollapsibleContent>\n </Collapsible>\n );\n}\n\nexport const Custom = {\n useController(\n fieldName: FieldKey,\n options?: {\n defaultValue?: unknown;\n },\n ) {\n const [value, setValue] = useFieldValue(fieldName, options);\n return {\n value,\n setValue,\n };\n },\n};\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"inputs.js","names":[],"sources":["../../../src/playground/components/inputs.tsx"],"sourcesContent":["'use client';\nimport { type ComponentProps, type HTMLAttributes, type ReactNode, useState } from 'react';\nimport { ChevronRight, Plus, Trash2, X } from 'lucide-react';\nimport { FieldKey, useArray, useDataEngine, useFieldValue, useObject } from '@fumari/stf';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/ui/components/select';\nimport { Input, labelVariants } from '@/ui/components/input';\nimport { cn } from '@/utils/cn';\nimport { buttonVariants } from 'fumadocs-ui/components/ui/button';\nimport { FormatFlags } from '@/utils/schema/to-string';\nimport {\n anyFields,\n useFieldInfo,\n useSchemaUtils,\n useSchemaScope,\n useResolvedSchema,\n} from '@/playground/schema';\nimport type { ParsedSchema } from '@/utils/schema';\nimport { stringifyFieldKey } from '@fumari/stf/lib/utils';\nimport { cva } from 'class-variance-authority';\nimport { useTranslations } from '@/ui/client/i18n';\n\nconst fieldLabelVariants = cva('w-full inline-flex items-center gap-0.5');\n\nfunction FieldLabelType(props: ComponentProps<'code'>) {\n return (\n <code {...props} className={cn('text-xs text-fd-muted-foreground', props.className)}>\n {props.children}\n </code>\n );\n}\n\nexport function ObjectInput({\n field: _field,\n fieldName,\n ...props\n}: {\n field: Exclude<ParsedSchema, boolean>;\n fieldName: FieldKey;\n} & ComponentProps<'div'>) {\n const { generateDefault } = useSchemaUtils();\n const field = useResolvedSchema(_field);\n const schemaPropKeys = field.properties ? Object.keys(field.properties) : [];\n const {\n patternProperties = {},\n additionalProperties,\n 'x-playground-lazy': isLazy = schemaPropKeys.length > 100,\n } = field;\n const isDynamic = Object.keys(patternProperties).length > 0 || additionalProperties;\n\n const [nextName, setNextName] = useState('');\n const { properties, onAppend, onDelete, _objectKeys } = useObject(fieldName, {\n lazy: isLazy,\n defaultValue: () => generateDefault(field) as object,\n properties: field.properties ?? {},\n fallback: additionalProperties,\n patternProperties: patternProperties,\n });\n\n const hiddenProperties = isLazy ? schemaPropKeys.filter((key) => !_objectKeys.includes(key)) : [];\n const t = useTranslations();\n\n return (\n <div\n {...props}\n className={cn(\n 'grid grid-cols-1 gap-4 @md:grid-cols-2 *:data-[collapsible=true]:order-last',\n props.className,\n )}\n >\n {isLazy && hiddenProperties.length > 0 && (\n <Select value=\"\" onValueChange={onAppend}>\n <SelectTrigger className=\"col-span-full\">\n <SelectValue placeholder={t.playgroundShowProperty} />\n </SelectTrigger>\n <SelectContent>\n {hiddenProperties.map((key) => (\n <SelectItem key={key} value={key}>\n {key}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n )}\n\n {properties.map((child) => {\n let toolbar: ReactNode = null;\n if (child.kind === 'pattern' || child.kind === 'fallback') {\n toolbar = (\n <button\n type=\"button\"\n aria-label={t.playgroundRemoveItem}\n className={cn(\n buttonVariants({\n color: 'outline',\n size: 'icon-xs',\n }),\n )}\n onClick={() => {\n onDelete(child.key);\n }}\n >\n <Trash2 />\n </button>\n );\n }\n\n return (\n <FieldSet\n key={child.key}\n name={child.key}\n field={child.info}\n fieldName={child.field}\n isRequired={field.required?.includes(child.key)}\n toolbar={toolbar}\n />\n );\n })}\n {isDynamic && (\n <div className=\"flex gap-2 order-last col-span-full\">\n <Input\n value={nextName}\n placeholder={t.playgroundPropertyPlaceholder}\n onChange={(e) => setNextName(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n setNextName('');\n onAppend(nextName);\n e.preventDefault();\n }\n }}\n />\n <button\n type=\"button\"\n className={cn(buttonVariants({ color: 'secondary', size: 'sm' }), 'px-4')}\n onClick={() => {\n onAppend(nextName);\n setNextName('');\n }}\n >\n {t.playgroundNewProperty}\n </button>\n </div>\n )}\n </div>\n );\n}\n\nexport function JsonInput({ fieldName }: { fieldName: FieldKey }) {\n const engine = useDataEngine();\n const [error, setError] = useState<string | null>(null);\n const [value, setValue] = useState(() => JSON.stringify(engine.init(fieldName, {}), null, 2));\n\n return (\n <div className=\"flex flex-col bg-fd-secondary text-fd-secondary-foreground overflow-hidden border rounded-lg\">\n <textarea\n value={value}\n className=\"p-2 h-[240px] text-sm font-mono resize-none focus-visible:outline-none\"\n onChange={(v) => {\n setValue(v.target.value);\n try {\n engine.update(fieldName, JSON.parse(v.target.value));\n setError(null);\n } catch (e) {\n if (e instanceof Error) setError(e.message);\n }\n }}\n />\n <p className=\"p-2 text-xs font-mono border-t text-red-400 empty:hidden\">{error}</p>\n </div>\n );\n}\n\nexport function FieldInput({\n field,\n fieldName,\n isRequired,\n ...props\n}: HTMLAttributes<HTMLElement> & {\n field: Exclude<ParsedSchema, boolean>;\n isRequired?: boolean;\n fieldName: FieldKey;\n}) {\n const [value, setValue] = useFieldValue(fieldName);\n const id = stringifyFieldKey(fieldName);\n const t = useTranslations();\n if (field.type === 'null') return;\n\n if (field.type === 'string' && field.format === 'binary') {\n return (\n <>\n <label\n htmlFor={id}\n className={cn(\n buttonVariants({\n color: 'secondary',\n className: 'w-full h-9 gap-2 truncate',\n }),\n )}\n >\n {value instanceof File ? (\n <>\n <span className=\"text-fd-muted-foreground text-xs\">{t.playgroundSelected}</span>\n <span className=\"truncate w-0 flex-1 text-end\">{value.name}</span>\n </>\n ) : (\n <span className=\"text-fd-muted-foreground\">{t.playgroundInputUpload}</span>\n )}\n </label>\n <input\n id={id}\n type=\"file\"\n multiple={false}\n onChange={(e) => {\n if (!e.target.files || e.target.files.length === 0) return;\n setValue(e.target.files.item(0));\n }}\n hidden\n />\n </>\n );\n }\n\n if (field.enum && field.enum.length > 0) {\n const idx = field.enum.indexOf(value);\n\n return (\n <Select\n value={idx === -1 && isRequired ? '' : String(idx)}\n onValueChange={(v) => setValue(field.enum![Number(v)])}\n >\n <SelectTrigger id={id} {...props}>\n <SelectValue placeholder={t.playgroundSelectPlaceholder} />\n </SelectTrigger>\n <SelectContent>\n {field.enum.map((item, i) => (\n <SelectItem key={i} value={String(i)}>\n {typeof item === 'string' ? item : JSON.stringify(item, null, 2)}\n </SelectItem>\n ))}\n {!isRequired && <SelectItem value=\"-1\">{t.playgroundInputUnset}</SelectItem>}\n </SelectContent>\n </Select>\n );\n }\n\n if (field.type === 'boolean') {\n return (\n <Select\n value={String(value)}\n onValueChange={(value) => setValue(value === 'undefined' ? undefined : value === 'true')}\n >\n <SelectTrigger id={id} {...props}>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"true\">True</SelectItem>\n <SelectItem value=\"false\">False</SelectItem>\n {!isRequired && <SelectItem value=\"undefined\">{t.playgroundInputUnset}</SelectItem>}\n </SelectContent>\n </Select>\n );\n }\n\n const isNumber = field.type === 'integer' || field.type === 'number';\n return (\n <Input\n id={id}\n placeholder={t.inputPlaceholder}\n type={isNumber ? 'number' : 'text'}\n step={field.type === 'integer' ? 1 : undefined}\n value={String(value ?? '')}\n onChange={(e) => {\n if (isNumber) {\n setValue(Number.isNaN(e.target.valueAsNumber) ? undefined : e.target.valueAsNumber);\n } else if (!isNumber) {\n setValue(e.target.value);\n }\n }}\n />\n );\n}\n\nexport function FieldSet({\n field: _field,\n fieldName,\n toolbar,\n name,\n isRequired,\n depth = 0,\n slotType,\n collapsible = true,\n ...props\n}: HTMLAttributes<HTMLElement> & {\n isRequired?: boolean;\n name?: ReactNode;\n field: ParsedSchema;\n fieldName: FieldKey;\n depth?: number;\n\n slotType?: ReactNode;\n toolbar?: ReactNode;\n collapsible?: boolean;\n}) {\n const { readOnly, writeOnly } = useSchemaScope();\n const { generateDefault, schemaToString } = useSchemaUtils();\n const field = useResolvedSchema(_field);\n const [show, setShow] = useState(!collapsible);\n const { info, updateInfo } = useFieldInfo(fieldName, field, depth);\n const id = stringifyFieldKey(fieldName);\n const dataEngine = useDataEngine();\n const [isDefined] = useFieldValue(fieldName, {\n compute(currentValue) {\n return currentValue !== undefined;\n },\n });\n\n if (_field === false) return;\n if (field.readOnly && !readOnly) return;\n if (field.writeOnly && !writeOnly) return;\n\n if (collapsible && !isDefined && show) setShow(false);\n\n function renderLabelTrigger(schema = field) {\n if (!collapsible) return renderLabelName();\n\n return (\n <button\n type=\"button\"\n className={cn(labelVariants(), 'inline-flex items-center gap-1 font-mono me-auto')}\n onClick={() => {\n dataEngine.init(fieldName, generateDefault(schema));\n setShow((prev) => !prev);\n }}\n >\n <ChevronRight className={cn('size-3.5 text-fd-muted-foreground', show && 'rotate-90')} />\n {name}\n {isRequired && <span className=\"text-red-400/80\">*</span>}\n </button>\n );\n }\n\n function renderLabelName() {\n return (\n <span className={cn(labelVariants(), 'font-mono me-auto')}>\n {name}\n {isRequired && <span className=\"text-red-400/80 mx-1\">*</span>}\n </span>\n );\n }\n\n function renderUnsetButton() {\n return (\n <button\n type=\"button\"\n onClick={() => dataEngine.delete(fieldName)}\n className=\"text-fd-muted-foreground hover:text-fd-accent-foreground\"\n >\n <X className=\"size-3.5\" />\n </button>\n );\n }\n\n if (info.unionField && field[info.unionField] && field[info.unionField]!.length > 0) {\n const union = field[info.unionField]!;\n const showSelect = union.length > 1;\n\n return (\n <FieldSet\n {...props}\n name={name}\n fieldName={fieldName}\n isRequired={isRequired}\n field={union[info.oneOf]}\n depth={depth + 1}\n slotType={showSelect ? false : slotType}\n collapsible={collapsible}\n toolbar={\n <>\n {showSelect && (\n <select\n className=\"text-xs font-mono\"\n value={info.oneOf}\n onChange={(e) => {\n updateInfo({\n oneOf: Number(e.target.value),\n });\n }}\n >\n {union.map((item, i) => (\n <option key={i} value={i} className=\"bg-fd-popover text-fd-popover-foreground\">\n {schemaToString(item, FormatFlags.UseAlias)}\n </option>\n ))}\n </select>\n )}\n {toolbar}\n </>\n }\n />\n );\n }\n\n if (Array.isArray(field.type)) {\n const showSelect = field.type.length > 1;\n\n return (\n <FieldSet\n {...props}\n name={name}\n fieldName={fieldName}\n isRequired={isRequired}\n field={{\n ...field,\n type: info.selectedType,\n }}\n collapsible={collapsible}\n depth={depth + 1}\n slotType={showSelect ? false : slotType}\n toolbar={\n <>\n {showSelect && (\n <select\n className=\"text-xs font-mono\"\n value={info.selectedType}\n onChange={(e) => {\n updateInfo({\n selectedType: e.target.value,\n });\n }}\n >\n {field.type.map((item) => (\n <option\n key={item}\n value={item}\n className=\"bg-fd-popover text-fd-popover-foreground\"\n >\n {item}\n </option>\n ))}\n </select>\n )}\n {toolbar}\n </>\n }\n />\n );\n }\n\n if (field.type === 'object') {\n return (\n <fieldset\n {...props}\n data-collapsible={collapsible}\n className={cn('flex flex-col gap-1.5 col-span-full @container', props.className)}\n >\n <div className={fieldLabelVariants()}>\n {renderLabelTrigger(field)}\n {slotType ?? <FieldLabelType>{schemaToString(field)}</FieldLabelType>}\n {toolbar}\n {!isRequired && isDefined && renderUnsetButton()}\n </div>\n {show && (\n <ObjectInput\n field={field}\n fieldName={fieldName}\n className=\"rounded-lg border border-fd-primary/20 bg-fd-background/50 p-2 shadow-sm\"\n />\n )}\n </fieldset>\n );\n }\n\n if (field.type === 'array') {\n return (\n <fieldset\n {...props}\n data-collapsible={collapsible}\n className={cn('flex flex-col gap-1.5 col-span-full', props.className)}\n >\n <div className={fieldLabelVariants()}>\n {renderLabelTrigger()}\n {slotType ?? <FieldLabelType>{schemaToString(field)}</FieldLabelType>}\n {toolbar}\n {!isRequired && isDefined && renderUnsetButton()}\n </div>\n {show && (\n <ArrayInput\n fieldName={fieldName}\n items={field.items ?? anyFields}\n className=\"rounded-lg border border-fd-primary/20 bg-fd-background/50 p-2 shadow-sm\"\n />\n )}\n </fieldset>\n );\n }\n\n return (\n <fieldset {...props} className={cn('flex flex-col gap-1.5', props.className)}>\n <label className={fieldLabelVariants()} htmlFor={id}>\n {renderLabelName()}\n {slotType ?? <FieldLabelType>{schemaToString(field)}</FieldLabelType>}\n {toolbar}\n {!isRequired && isDefined && renderUnsetButton()}\n </label>\n <FieldInput field={field} fieldName={fieldName} isRequired={isRequired} />\n </fieldset>\n );\n}\n\nfunction ArrayInput({\n fieldName,\n items: itemSchema,\n ...props\n}: {\n fieldName: FieldKey;\n items: ParsedSchema;\n} & ComponentProps<'div'>) {\n const name = fieldName.at(-1) ?? '';\n const { generateDefault } = useSchemaUtils();\n const { items, insertItem, removeItem } = useArray(fieldName);\n const t = useTranslations();\n\n return (\n <div {...props} className={cn('flex flex-col gap-2', props.className)}>\n {items.map((item) => (\n <FieldSet\n key={item.index}\n name={\n <span className=\"text-fd-muted-foreground\">\n {name}[{item.index}]\n </span>\n }\n field={itemSchema}\n isRequired\n fieldName={item.field}\n toolbar={\n <button\n type=\"button\"\n aria-label={t.playgroundRemoveItem}\n className={cn(\n buttonVariants({\n color: 'outline',\n size: 'icon-xs',\n }),\n )}\n onClick={() => removeItem(item.index)}\n >\n <Trash2 />\n </button>\n }\n />\n ))}\n <button\n type=\"button\"\n className={cn(\n buttonVariants({\n color: 'secondary',\n className: 'gap-1.5 py-2',\n size: 'sm',\n }),\n )}\n onClick={() => {\n insertItem(generateDefault(itemSchema));\n }}\n >\n <Plus className=\"size-4\" />\n {t.playgroundNewItem}\n </button>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"oauth-dialog.js","names":[],"sources":["../../../src/playground/components/oauth-dialog.tsx"],"sourcesContent":["import {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from '@/ui/components/dialog';\nimport { useForm } from 'react-hook-form';\nimport { Input, labelVariants } from '@/ui/components/input';\nimport { useQuery } from '@/utils/use-query';\nimport { type ReactNode, useEffect, useMemo, useState } from 'react';\nimport { cn } from '@/utils/cn';\nimport { buttonVariants } from 'fumadocs-ui/components/ui/button';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/ui/components/select';\nimport type { OAuth2SecurityScheme } from '@/types';\nimport { useTranslations } from '@/ui/client/i18n';\n\ntype FlowType = keyof NonNullable<OAuth2SecurityScheme['flows']>;\n\nexport interface AuthDialogProps {\n scheme: OAuth2SecurityScheme;\n scopes: string[];\n\n open: boolean;\n setOpen: (v: boolean) => void;\n setToken: (token: string) => void;\n children: ReactNode;\n}\n\ninterface FormValues {\n clientId: string;\n clientSecret: string;\n username: string;\n password: string;\n}\n\ninterface AuthCodeState {\n redirect_uri: string;\n client_id: string;\n client_secret: string;\n}\n\ninterface ImplicitState {\n redirect_uri: string;\n client_id: string;\n}\n\ninterface FlowInfo {\n name: ReactNode;\n description: ReactNode;\n supported: boolean;\n}\n\nexport function OauthDialog({\n scheme,\n scopes,\n setToken,\n children,\n open,\n setOpen,\n}: AuthDialogProps) {\n const [type, setType] = useState(() => {\n return Object.keys(scheme.flows!)[0] as FlowType;\n });\n const t = useTranslations();\n const allFlows: Record<FlowType, FlowInfo> = useMemo(\n () => ({\n password: {\n name: t.resourceOwnerPassword,\n description: t.resourceOwnerPasswordDesc,\n supported: true,\n },\n clientCredentials: {\n name: t.clientCredentials,\n description: t.clientCredentialsDesc,\n supported: true,\n },\n authorizationCode: {\n name: t.authorizationCode,\n description: t.authorizationCodeDesc,\n supported: true,\n },\n implicit: {\n name: t.implicit,\n description: t.implicitDesc,\n supported: true,\n },\n deviceAuthorization: {\n name: t.deviceAuthorization,\n description: t.deviceAuthorizationDesc,\n supported: false,\n },\n }),\n [t],\n );\n\n const form = useForm<FormValues>({\n defaultValues: {\n clientId: '',\n clientSecret: '',\n username: '',\n password: '',\n },\n });\n\n const authCodeCallback = useQuery(async (code: string, state: AuthCodeState) => {\n const value = scheme.flows!.authorizationCode!;\n\n const res = await fetch(value.tokenUrl!, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n body: new URLSearchParams({\n grant_type: 'authorization_code',\n code,\n // note: `state` could be invalid, but server will check it\n redirect_uri: state.redirect_uri,\n client_id: state.client_id,\n client_secret: state.client_secret,\n }),\n });\n\n if (!res.ok) throw new Error(await res.text());\n const { access_token, token_type = 'Bearer' } = (await res.json()) as {\n access_token: string;\n token_type?: string;\n };\n\n setToken(`${token_type} ${access_token}`);\n setOpen(false);\n });\n\n useEffect(() => {\n if (scheme.flows!.authorizationCode) {\n const params = new URLSearchParams(window.location.search);\n const state = params.get('state');\n const code = params.get('code');\n\n if (state && code) {\n const parsedState = JSON.parse(state) as AuthCodeState;\n setOpen(true);\n\n form.setValue('clientId', parsedState.client_id);\n form.setValue('clientSecret', parsedState.client_secret);\n authCodeCallback.start(code, parsedState);\n window.history.replaceState(null, '', window.location.pathname);\n return;\n }\n }\n\n if (scheme.flows!.implicit && window.location.hash.length > 1) {\n const params = new URLSearchParams(window.location.hash.slice(1));\n const state = params.get('state');\n const token = params.get('access_token');\n const type = params.get('token_type') ?? 'Bearer';\n\n if (state && token) {\n const parsedState = JSON.parse(state) as ImplicitState;\n\n form.setValue('clientId', parsedState.client_id);\n setToken(`${type} ${token}`);\n window.history.replaceState(null, '', window.location.pathname);\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps -- first page load only\n }, []);\n\n const authorize = useQuery(async (values: FormValues) => {\n if (type === 'implicit') {\n const value = scheme.flows![type]!;\n\n const params = new URLSearchParams();\n params.set('response_type', 'token');\n params.set('client_id', values.clientId);\n params.set('redirect_uri', window.location.href);\n params.set('scope', scopes.join('+'));\n params.set(\n 'state',\n JSON.stringify({\n client_id: values.clientId,\n redirect_uri: window.location.href,\n } satisfies ImplicitState),\n );\n\n window.location.replace(`${value.authorizationUrl}?${params.toString()}`);\n return;\n }\n if (type === 'authorizationCode') {\n const value = scheme.flows![type]!;\n\n const params = new URLSearchParams();\n params.set('response_type', 'code');\n params.set('client_id', values.clientId);\n params.set('redirect_uri', window.location.href);\n params.set('scope', scopes.join('+'));\n params.set(\n 'state',\n JSON.stringify({\n client_id: values.clientId,\n client_secret: values.clientSecret,\n redirect_uri: window.location.href,\n } satisfies AuthCodeState),\n );\n\n window.location.replace(`${value.authorizationUrl}?${params.toString()}`);\n return;\n }\n\n let res;\n if (type === 'password') {\n const value = scheme.flows![type]!;\n\n res = await fetch(value.tokenUrl!, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n body: new URLSearchParams({\n grant_type: 'password',\n username: values.username,\n password: values.password,\n scope: scopes.join('+'),\n }),\n });\n }\n\n if (type === 'clientCredentials') {\n const value = scheme.flows![type]!;\n\n res = await fetch(value.tokenUrl!, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n body: new URLSearchParams({\n grant_type: 'client_credentials',\n client_id: values.clientId,\n client_secret: values.clientSecret,\n scope: scopes.join('+'),\n }),\n });\n }\n\n if (res) {\n if (!res.ok) throw new Error(await res.text());\n\n const { access_token, token_type = 'Bearer' } = (await res.json()) as {\n access_token: string;\n token_type?: string;\n };\n\n setToken(`${token_type} ${access_token}`);\n setOpen(false);\n }\n });\n\n const onSubmit = form.handleSubmit((values) => {\n return authorize.start(values);\n });\n\n const isLoading = authorize.isLoading || authCodeCallback.isLoading;\n const error = authCodeCallback.error ?? authorize.error;\n\n return (\n <Dialog open={open} onOpenChange={setOpen}>\n {children}\n <DialogContent>\n <DialogHeader>\n <DialogTitle>{t.authorization}</DialogTitle>\n <DialogDescription>{t.obtainAccessToken}</DialogDescription>\n </DialogHeader>\n <form\n className=\"flex flex-col gap-6\"\n onSubmit={(e) => {\n void onSubmit(e);\n e.stopPropagation();\n }}\n >\n <Select value={type} onValueChange={setType as (s: string) => void}>\n <SelectTrigger>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {Object.keys(scheme.flows!).map((key) => {\n const { name, description } = allFlows[key as FlowType];\n\n return (\n <SelectItem key={key} value={key}>\n <p className=\"font-medium\">{name}</p>\n <p className=\"text-fd-muted-foreground\">{description}</p>\n </SelectItem>\n );\n })}\n </SelectContent>\n </Select>\n\n {(type === 'authorizationCode' ||\n type === 'clientCredentials' ||\n type === 'implicit') && (\n <fieldset className=\"flex flex-col gap-1.5\">\n <label htmlFor=\"client_id\" className={cn(labelVariants())}>\n {t.clientId}\n </label>\n <p className=\"text-fd-muted-foreground text-sm\">{t.clientIdHint}</p>\n <Input\n id=\"client_id\"\n placeholder={t.inputPlaceholder}\n type=\"text\"\n autoComplete=\"off\"\n disabled={isLoading}\n {...form.register('clientId', { required: true })}\n />\n </fieldset>\n )}\n {(type === 'authorizationCode' || type === 'clientCredentials') && (\n <fieldset className=\"flex flex-col gap-1.5\">\n <label htmlFor=\"client_secret\" className={cn(labelVariants())}>\n {t.clientSecret}\n </label>\n <p className=\"text-fd-muted-foreground text-sm\">{t.clientSecretHint}</p>\n <Input\n id=\"client_secret\"\n placeholder={t.inputPlaceholder}\n type=\"password\"\n autoComplete=\"off\"\n disabled={isLoading}\n {...form.register('clientSecret', { required: true })}\n />\n </fieldset>\n )}\n {type === 'password' && (\n <>\n <fieldset className=\"flex flex-col gap-1.5\">\n <label htmlFor=\"username\" className={cn(labelVariants())}>\n {t.usernameField}\n </label>\n <Input\n id=\"username\"\n placeholder={t.inputPlaceholder}\n type=\"text\"\n disabled={isLoading}\n autoComplete=\"off\"\n {...form.register('username', { required: true })}\n />\n </fieldset>\n <fieldset className=\"flex flex-col gap-1.5\">\n <label htmlFor=\"password\" className={cn(labelVariants())}>\n {t.clientSecret}\n </label>\n <Input\n id=\"password\"\n placeholder={t.inputPlaceholder}\n type=\"password\"\n autoComplete=\"off\"\n disabled={isLoading}\n {...form.register('password', { required: true })}\n />\n </fieldset>\n </>\n )}\n {allFlows[type].supported ? (\n <>\n {error ? <p className=\"text-red-400 font-medium text-sm\">{String(error)}</p> : null}\n <button\n type=\"submit\"\n disabled={isLoading}\n className={cn(\n buttonVariants({\n color: 'primary',\n }),\n )}\n >\n {authCodeCallback.isLoading ? t.fetchingToken : t.submit}\n </button>\n </>\n ) : (\n <p className=\"text-fd-muted-foreground bg-fd-muted p-2 rounded-lg border\">\n {t.unsupported}\n </p>\n )}\n </form>\n </DialogContent>\n </Dialog>\n );\n}\n\nexport const OauthDialogTrigger = DialogTrigger;\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"server-select.js","names":[],"sources":["../../../src/playground/components/server-select.tsx"],"sourcesContent":["'use client';\nimport { useServerContext } from '@/ui/contexts/api';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/ui/components/select';\nimport { Input, labelVariants } from '@/ui/components/input';\nimport { useEffect, useState, useRef, type ComponentProps } from 'react';\nimport { cn } from '@/utils/cn';\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from '@/ui/components/dialog';\nimport { resolveServerUrl, withBase } from '@/utils/url';\nimport type { ServerVariableObject } from '@/types';\nimport type { NoReference } from '@/utils/schema';\nimport { StfProvider, useFieldValue, useListener, useStf } from '@fumari/stf';\nimport { EditIcon } from 'lucide-react';\nimport { useTranslations } from '@/ui/client/i18n';\n\nexport default function ServerSelect(props: ComponentProps<typeof DialogTrigger>) {\n const { servers, server, setServer, setServerVariables } = useServerContext();\n const [open, setOpen] = useState(false);\n const [isMounted, setIsMounted] = useState(false);\n const t = useTranslations();\n\n useEffect(() => {\n setIsMounted(true);\n }, []);\n\n if (!servers || servers.length <= 0) return;\n const serverSchema = server ? servers.find((obj) => obj.url === server.url) : null;\n\n return (\n <Dialog open={open} onOpenChange={setOpen}>\n <DialogTrigger\n {...props}\n className={cn(\n 'flex items-center gap-2 text-sm text-start px-3 py-2 bg-fd-muted text-fd-muted-foreground transition-colors hover:bg-fd-accent hover:text-fd-accent-foreground',\n props.className,\n )}\n >\n <span className=\"px-2 py-0.5 -ms-2 font-medium rounded-lg border bg-fd-secondary text-fd-secondary-foreground shadow-sm\">\n {server?.name ?? t.serverUrl}\n </span>\n <code className=\"truncate min-w-0 flex-1\">\n {isMounted\n ? withBase(\n server ? resolveServerUrl(server.url, server.variables) : '/',\n window.location.origin,\n )\n : t.loading}\n </code>\n <EditIcon className=\"size-4\" />\n </DialogTrigger>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>{t.serverUrl}</DialogTitle>\n <DialogDescription>{t.serverUrlDescription}</DialogDescription>\n </DialogHeader>\n <Select value={server?.url} onValueChange={setServer}>\n <SelectTrigger>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {servers.map((item) => (\n <SelectItem key={item.url} value={item.url!}>\n <code className=\"text-[0.8125rem]\">{item.url}</code>\n <p className=\"text-fd-muted-foreground\">{item.description}</p>\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n {server?.variables && serverSchema?.variables && (\n <ServerSelectContent\n key={server.url}\n defaultValues={server.variables}\n schema={serverSchema.variables}\n onChange={setServerVariables}\n />\n )}\n </DialogContent>\n </Dialog>\n );\n}\n\nfunction ServerSelectContent({\n defaultValues,\n onChange,\n schema,\n}: {\n defaultValues: Record<string, string>;\n onChange: (values: Record<string, string>) => void;\n schema: Record<string, NoReference<ServerVariableObject>>;\n}) {\n const stf = useStf({\n defaultValues: () => structuredClone(defaultValues),\n });\n const timerRef = useRef<number | null>(null);\n useListener({\n stf,\n onUpdate() {\n if (timerRef.current !== null) window.clearTimeout(timerRef.current);\n\n timerRef.current = window.setTimeout(\n () => onChange(stf.dataEngine.getData() as Record<string, string>),\n 500,\n );\n },\n });\n\n return (\n <StfProvider value={stf}>\n <div className=\"flex flex-col gap-4\">\n {Object.entries(schema).map(([key, variable]) => {\n return (\n <fieldset key={key} className=\"flex flex-col gap-1\">\n <label className={cn(labelVariants())} htmlFor={key}>\n {key}\n </label>\n <p className=\"text-xs text-fd-muted-foreground empty:hidden\">\n {variable.description}\n </p>\n <Field fieldName={key} variable={variable} />\n </fieldset>\n );\n })}\n </div>\n </StfProvider>\n );\n}\n\nfunction Field({\n fieldName,\n variable,\n}: {\n variable: NoReference<ServerVariableObject>;\n fieldName: string;\n}) {\n const t = useTranslations();\n const [value, setValue] = useFieldValue([fieldName], {\n compute(currentValue) {\n return typeof currentValue === 'string' ? currentValue : undefined;\n },\n });\n\n if (variable.enum) {\n return (\n <Select value={value} onValueChange={setValue}>\n <SelectTrigger id={fieldName}>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {variable.enum.map((value) => (\n <SelectItem key={value} value={String(value)}>\n {value}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n );\n }\n\n return (\n <Input\n id={fieldName}\n value={value}\n onChange={(e) => setValue(e.target.value)}\n placeholder={t.serverUrlFieldPlaceholder}\n />\n );\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"fetcher.d.ts","names":[],"sources":["../../src/playground/fetcher.ts"],"mappings":";;;UAKiB,WAAA;EACf,MAAA;EACA,IAAA;EACA,IAAA;AAAA;AAAA,UAYe,qBAAA;EAiByC;;;EAbxD,cAAA;EAEA,QAAA;EAAA;;;;;EAMA,kBAAA;EAKwD;;;EAAxD,aAAA,IAAiB,WAAA,EAAa,WAAA,KAAgB,SAAA,CAAU,WAAA;AAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"fetcher.js","names":[],"sources":["../../src/playground/fetcher.ts"],"sourcesContent":["import type { RequestData } from '@/requests/types';\nimport type { MediaAdapter } from '@/requests/media/adapter';\nimport { resolveMediaAdapter } from '@/requests/media/adapter';\nimport type { Awaitable } from '@/types';\n\nexport interface FetchResult {\n status: number;\n type: 'json' | 'html' | 'text';\n data: unknown;\n}\n\nexport interface Fetcher {\n /**\n * This method will not apply the path & search parameters from `options` to given `url`.\n *\n * @param url - The full URL of request.\n */\n fetch: (url: string, data: RequestData) => Promise<FetchResult>;\n}\n\nexport interface BrowserFetcherOptions {\n /**\n * Request timeout in seconds (default: 10s)\n */\n requestTimeout?: number | false;\n\n proxyUrl?: string;\n /**\n * Forward cookies via search parameters when API proxy is configured.\n *\n * @default true\n */\n proxyForwardCookie?: boolean;\n\n /**\n * transform the request options before sending.\n */\n onRequestInit?: (requestInit: RequestInit) => Awaitable<RequestInit>;\n}\n\nexport function createBrowserFetcher(\n adapters: Record<string, MediaAdapter>,\n {\n proxyUrl,\n proxyForwardCookie = true,\n requestTimeout = 10,\n onRequestInit,\n }: BrowserFetcherOptions = {},\n): Fetcher {\n return {\n async fetch(url, data) {\n let requestUrl = new URL(url, document.baseURI);\n let requestInit: RequestInit = {\n method: data.method,\n cache: 'no-cache',\n signal:\n typeof requestTimeout === 'number'\n ? AbortSignal.timeout(requestTimeout * 1000)\n : undefined,\n };\n\n const headers = (requestInit.headers = new Headers());\n\n for (const key in data.header) {\n const param = data.header[key];\n headers.append(key, param.value);\n }\n\n if (proxyUrl) {\n requestUrl = new URL(proxyUrl, document.baseURI);\n requestUrl.searchParams.append('url', url);\n }\n\n if (data.bodyMediaType && data.body) {\n const adapter = resolveMediaAdapter(data.bodyMediaType, adapters);\n if (!adapter)\n return {\n status: 400,\n type: 'text',\n data: `[Fumadocs] No adapter for ${data.bodyMediaType}, you need to specify one from 'createOpenAPI()'.`,\n };\n\n if (data.bodyMediaType !== 'multipart/form-data') {\n headers.append('Content-Type', data.bodyMediaType);\n }\n\n requestInit.body = adapter.encode(data as { body: unknown });\n }\n\n // cookies\n if (proxyUrl && proxyForwardCookie) {\n const encoded = Object.entries(data.cookie)\n .map(([k, v]) => `${k}=${encodeURIComponent(v.value)}`)\n .join('; ');\n requestUrl.searchParams.set('cookie', encoded);\n requestInit.credentials = 'omit';\n } else {\n for (const key in data.cookie) {\n const param = data.cookie[key];\n const segs: string[] = [`${key}=${encodeURIComponent(param.value)}`];\n\n if (proxyUrl && requestUrl.origin !== window.location.origin)\n segs.push(`domain=${requestUrl.host}`);\n segs.push('path=/', 'max-age=30');\n\n document.cookie = segs.join('; ');\n }\n }\n\n if (onRequestInit) requestInit = await onRequestInit(requestInit);\n\n return fetch(requestUrl, requestInit)\n .then(async (res) => {\n const contentType = res.headers.get('Content-Type') ?? '';\n let type: FetchResult['type'];\n let data: unknown;\n\n if (contentType.startsWith('application/json')) {\n type = 'json';\n data = await res.json();\n } else {\n type = contentType.startsWith('text/html') ? 'html' : 'text';\n data = await res.text();\n }\n\n return { status: res.status, type, data };\n })\n .catch((e) => {\n const message = e instanceof Error ? `[${e.name}] ${e.message}` : e.toString();\n\n return {\n status: 400,\n type: 'text',\n data: `Client side error: ${message}`,\n };\n });\n },\n };\n}\n"],"mappings":";;;AAwCA,SAAgB,qBACd,UACA,EACE,UACA,qBAAqB,MACrB,iBAAiB,IACjB,kBACyB,EAAE,EACpB;AACT,QAAO,EACL,MAAM,MAAM,KAAK,MAAM;EACrB,IAAI,aAAa,IAAI,IAAI,KAAK,SAAS,QAAQ;EAC/C,IAAI,cAA2B;GAC7B,QAAQ,KAAK;GACb,OAAO;GACP,QACE,OAAO,mBAAmB,WACtB,YAAY,QAAQ,iBAAiB,IAAK,GAC1C,KAAA;GACP;EAED,MAAM,UAAW,YAAY,UAAU,IAAI,SAAS;AAEpD,OAAK,MAAM,OAAO,KAAK,QAAQ;GAC7B,MAAM,QAAQ,KAAK,OAAO;AAC1B,WAAQ,OAAO,KAAK,MAAM,MAAM;;AAGlC,MAAI,UAAU;AACZ,gBAAa,IAAI,IAAI,UAAU,SAAS,QAAQ;AAChD,cAAW,aAAa,OAAO,OAAO,IAAI;;AAG5C,MAAI,KAAK,iBAAiB,KAAK,MAAM;GACnC,MAAM,UAAU,oBAAoB,KAAK,eAAe,SAAS;AACjE,OAAI,CAAC,QACH,QAAO;IACL,QAAQ;IACR,MAAM;IACN,MAAM,6BAA6B,KAAK,cAAc;IACvD;AAEH,OAAI,KAAK,kBAAkB,sBACzB,SAAQ,OAAO,gBAAgB,KAAK,cAAc;AAGpD,eAAY,OAAO,QAAQ,OAAO,KAA0B;;AAI9D,MAAI,YAAY,oBAAoB;GAClC,MAAM,UAAU,OAAO,QAAQ,KAAK,OAAO,CACxC,KAAK,CAAC,GAAG,OAAO,GAAG,EAAE,GAAG,mBAAmB,EAAE,MAAM,GAAG,CACtD,KAAK,KAAK;AACb,cAAW,aAAa,IAAI,UAAU,QAAQ;AAC9C,eAAY,cAAc;QAE1B,MAAK,MAAM,OAAO,KAAK,QAAQ;GAC7B,MAAM,QAAQ,KAAK,OAAO;GAC1B,MAAM,OAAiB,CAAC,GAAG,IAAI,GAAG,mBAAmB,MAAM,MAAM,GAAG;AAEpE,OAAI,YAAY,WAAW,WAAW,OAAO,SAAS,OACpD,MAAK,KAAK,UAAU,WAAW,OAAO;AACxC,QAAK,KAAK,UAAU,aAAa;AAEjC,YAAS,SAAS,KAAK,KAAK,KAAK;;AAIrC,MAAI,cAAe,eAAc,MAAM,cAAc,YAAY;AAEjE,SAAO,MAAM,YAAY,YAAY,CAClC,KAAK,OAAO,QAAQ;GACnB,MAAM,cAAc,IAAI,QAAQ,IAAI,eAAe,IAAI;GACvD,IAAI;GACJ,IAAI;AAEJ,OAAI,YAAY,WAAW,mBAAmB,EAAE;AAC9C,WAAO;AACP,WAAO,MAAM,IAAI,MAAM;UAClB;AACL,WAAO,YAAY,WAAW,YAAY,GAAG,SAAS;AACtD,WAAO,MAAM,IAAI,MAAM;;AAGzB,UAAO;IAAE,QAAQ,IAAI;IAAQ;IAAM;IAAM;IACzC,CACD,OAAO,MAAM;AAGZ,UAAO;IACL,QAAQ;IACR,MAAM;IACN,MAAM,sBALQ,aAAa,QAAQ,IAAI,EAAE,KAAK,IAAI,EAAE,YAAY,EAAE,UAAU;IAM7E;IACD;IAEP"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema.d.ts","names":[],"sources":["../../src/playground/schema.tsx"],"mappings":";;;;;UAeiB,WAAA;;;;EAIf,SAAA;;;;EAKA,QAAA;AAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema.js","names":[],"sources":["../../src/playground/schema.tsx"],"sourcesContent":["import { Ajv2020 } from 'ajv/dist/2020';\nimport { createContext, ReactNode, use, useMemo } from 'react';\nimport type { ParsedSchema, ResolvedSchema } from '@/utils/schema';\nimport { mergeAllOf } from '@/utils/merge-schema';\nimport { FieldKey, useDataEngine, useFieldValue, useNamespace } from '@fumari/stf';\nimport { stringifyFieldKey } from '@fumari/stf/lib/utils';\nimport { sample } from 'openapi-sampler';\nimport { FormatFlags, schemaToString } from '@/utils/schema/to-string';\nimport { DereferencedDocument } from '@/utils/document/dereference';\n\ninterface SchemaContextType extends SchemaScope {\n schema: DereferencedDocument;\n ajv: Ajv2020;\n}\n\nexport interface SchemaScope {\n /**\n * show write only fields\n */\n writeOnly: boolean;\n\n /**\n * show read only fields\n */\n readOnly: boolean;\n}\n\ntype UnionField = 'anyOf' | 'oneOf';\n\nexport interface FieldInfo {\n selectedType?: string;\n oneOf: number;\n\n /**\n * The actual field that represents union members.\n */\n unionField?: UnionField;\n}\n\nconst SchemaContext = createContext<SchemaContextType | undefined>(undefined);\nexport const anyFields = {\n type: ['string', 'number', 'boolean', 'array', 'object'],\n items: true,\n additionalProperties: true,\n} satisfies ParsedSchema;\n\nexport function SchemaProvider({\n schema,\n readOnly,\n writeOnly,\n children,\n}: Omit<SchemaContextType, 'ajv'> & { children: ReactNode }) {\n const ajv = useMemo(\n () =>\n new Ajv2020({\n strict: false,\n validateSchema: false,\n validateFormats: false,\n }),\n [],\n );\n\n return (\n <SchemaContext.Provider\n value={useMemo(\n () => ({ schema, ajv, readOnly, writeOnly }),\n [schema, ajv, readOnly, writeOnly],\n )}\n >\n {children}\n </SchemaContext.Provider>\n );\n}\n\nexport function useSchemaScope(): SchemaScope {\n return use(SchemaContext)!;\n}\n\n/**\n * A hook to store dynamic info of a field, such as selected schema of `oneOf`.\n *\n * @param fieldName - field name of form.\n * @param schema - The **resolved** JSON Schema to generate initial values.\n * @param depth - The depth to avoid duplicated field name with same schema (e.g. nested `oneOf`).\n */\nexport function useFieldInfo(\n fieldName: FieldKey,\n schema: Exclude<ParsedSchema, boolean>,\n depth = 0,\n): {\n info: FieldInfo;\n schema: Exclude<ParsedSchema, boolean>;\n updateInfo: (value: Partial<FieldInfo>) => void;\n} {\n const { ajv } = use(SchemaContext)!;\n const engine = useDataEngine();\n const { generateDefault } = useSchemaUtils();\n const fieldData = useNamespace({\n namespace: `field-info:${depth}:${stringifyFieldKey(fieldName)}`,\n initial(): FieldInfo {\n const value = engine.get(fieldName);\n const out: FieldInfo = {\n oneOf: -1,\n };\n const union = getUnion(schema);\n if (union) {\n const [members, field] = union;\n\n out.oneOf = members.findIndex((item) => ajv.validate(item, value));\n if (out.oneOf === -1) out.oneOf = 0;\n out.unionField = field;\n }\n\n if (Array.isArray(schema.type)) {\n const types = schema.type;\n\n out.selectedType =\n types.find((type) => {\n return ajv.validate({ ...schema, type }, value);\n }) ?? types[0];\n }\n\n return out;\n },\n });\n const [info, setInfo] = useFieldValue<FieldInfo>([], {\n stf: fieldData,\n });\n\n return {\n info,\n schema,\n updateInfo(value) {\n const updated = {\n ...info,\n ...value,\n };\n\n if (updated.oneOf === info.oneOf && updated.selectedType === info.selectedType) return;\n\n setInfo(updated);\n\n let valueSchema: ParsedSchema = schema;\n if (updated.unionField) {\n valueSchema = schema[updated.unionField]![updated.oneOf];\n } else if (updated.selectedType) {\n // must remove to `examples` to avoid invalid default values\n valueSchema = { ...schema, type: updated.selectedType, examples: undefined };\n }\n\n engine.update(fieldName, generateDefault(valueSchema));\n },\n };\n}\n\nexport function useSchemaUtils() {\n const { schema, readOnly } = use(SchemaContext)!;\n\n return {\n generateDefault(schema: ParsedSchema): unknown {\n return sample(schema as never, {\n skipNonRequired: true,\n skipReadOnly: !readOnly,\n quiet: true,\n });\n },\n schemaToString(value: ResolvedSchema, flags?: FormatFlags) {\n return schemaToString(value, schema, flags);\n },\n };\n}\n\n/**\n * merge `allOf`.\n */\nexport function useResolvedSchema(raw: ParsedSchema): Exclude<ParsedSchema, boolean> {\n return useMemo(() => {\n let out = raw;\n\n if (typeof out === 'object' && out.allOf) {\n out = mergeAllOf(out);\n }\n\n return typeof out === 'boolean' ? anyFields : out;\n }, [raw]);\n}\n\nfunction getUnion(\n schema: Exclude<ParsedSchema, boolean>,\n): [readonly ParsedSchema[], UnionField] | undefined {\n if (schema.anyOf) {\n return [schema.anyOf, 'anyOf'];\n }\n\n if (schema.oneOf) return [schema.oneOf, 'oneOf'];\n}\n"],"mappings":";;;;;;;;;AAuCA,MAAM,gBAAgB,cAA6C,KAAA,EAAU;AAC7E,MAAa,YAAY;CACvB,MAAM;EAAC;EAAU;EAAU;EAAW;EAAS;EAAS;CACxD,OAAO;CACP,sBAAsB;CACvB;AAED,SAAgB,eAAe,EAC7B,QACA,UACA,WACA,YAC2D;CAC3D,MAAM,MAAM,cAER,IAAI,QAAQ;EACV,QAAQ;EACR,gBAAgB;EAChB,iBAAiB;EAClB,CAAC,EACJ,EAAE,CACH;AAED,QACE,oBAAC,cAAc,UAAf;EACE,OAAO,eACE;GAAE;GAAQ;GAAK;GAAU;GAAW,GAC3C;GAAC;GAAQ;GAAK;GAAU;GAAU,CACnC;EAEA;EACsB,CAAA;;AAI7B,SAAgB,iBAA8B;AAC5C,QAAO,IAAI,cAAc;;;;;;;;;AAU3B,SAAgB,aACd,WACA,QACA,QAAQ,GAKR;CACA,MAAM,EAAE,QAAQ,IAAI,cAAc;CAClC,MAAM,SAAS,eAAe;CAC9B,MAAM,EAAE,oBAAoB,gBAAgB;CA6B5C,MAAM,CAAC,MAAM,WAAW,cAAyB,EAAE,EAAE,EACnD,KA7BgB,aAAa;EAC7B,WAAW,cAAc,MAAM,GAAG,kBAAkB,UAAU;EAC9D,UAAqB;GACnB,MAAM,QAAQ,OAAO,IAAI,UAAU;GACnC,MAAM,MAAiB,EACrB,OAAO,IACR;GACD,MAAM,QAAQ,SAAS,OAAO;AAC9B,OAAI,OAAO;IACT,MAAM,CAAC,SAAS,SAAS;AAEzB,QAAI,QAAQ,QAAQ,WAAW,SAAS,IAAI,SAAS,MAAM,MAAM,CAAC;AAClE,QAAI,IAAI,UAAU,GAAI,KAAI,QAAQ;AAClC,QAAI,aAAa;;AAGnB,OAAI,MAAM,QAAQ,OAAO,KAAK,EAAE;IAC9B,MAAM,QAAQ,OAAO;AAErB,QAAI,eACF,MAAM,MAAM,SAAS;AACnB,YAAO,IAAI,SAAS;MAAE,GAAG;MAAQ;MAAM,EAAE,MAAM;MAC/C,IAAI,MAAM;;AAGhB,UAAO;;EAEV,CAAC,EAGD,CAAC;AAEF,QAAO;EACL;EACA;EACA,WAAW,OAAO;GAChB,MAAM,UAAU;IACd,GAAG;IACH,GAAG;IACJ;AAED,OAAI,QAAQ,UAAU,KAAK,SAAS,QAAQ,iBAAiB,KAAK,aAAc;AAEhF,WAAQ,QAAQ;GAEhB,IAAI,cAA4B;AAChC,OAAI,QAAQ,WACV,eAAc,OAAO,QAAQ,YAAa,QAAQ;YACzC,QAAQ,aAEjB,eAAc;IAAE,GAAG;IAAQ,MAAM,QAAQ;IAAc,UAAU,KAAA;IAAW;AAG9E,UAAO,OAAO,WAAW,gBAAgB,YAAY,CAAC;;EAEzD;;AAGH,SAAgB,iBAAiB;CAC/B,MAAM,EAAE,QAAQ,aAAa,IAAI,cAAc;AAE/C,QAAO;EACL,gBAAgB,QAA+B;AAC7C,UAAO,OAAO,QAAiB;IAC7B,iBAAiB;IACjB,cAAc,CAAC;IACf,OAAO;IACR,CAAC;;EAEJ,eAAe,OAAuB,OAAqB;AACzD,UAAO,eAAe,OAAO,QAAQ,MAAM;;EAE9C;;;;;AAMH,SAAgB,kBAAkB,KAAmD;AACnF,QAAO,cAAc;EACnB,IAAI,MAAM;AAEV,MAAI,OAAO,QAAQ,YAAY,IAAI,MACjC,OAAM,WAAW,IAAI;AAGvB,SAAO,OAAO,QAAQ,YAAY,YAAY;IAC7C,CAAC,IAAI,CAAC;;AAGX,SAAS,SACP,QACmD;AACnD,KAAI,OAAO,MACT,QAAO,CAAC,OAAO,OAAO,QAAQ;AAGhC,KAAI,OAAO,MAAO,QAAO,CAAC,OAAO,OAAO,QAAQ"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"status-info.js","names":[],"sources":["../../src/playground/status-info.tsx"],"sourcesContent":["import { CircleCheck, CircleX } from 'lucide-react';\nimport type { Translations } from '@/i18n';\n\ninterface StatusInfo {\n description: string;\n color: string;\n icon: React.ElementType;\n}\n\nconst statusKeys: Record<\n number,\n { key: keyof Translations; color: string; icon: React.ElementType }\n> = {\n 400: { key: 'statusBadRequest', color: 'text-red-500', icon: CircleX },\n 401: { key: 'statusUnauthorized', color: 'text-red-500', icon: CircleX },\n 403: { key: 'statusForbidden', color: 'text-red-500', icon: CircleX },\n 404: { key: 'statusNotFound', color: 'text-fd-muted-foreground', icon: CircleX },\n 500: { key: 'statusInternalServerError', color: 'text-red-500', icon: CircleX },\n};\n\nexport function getStatusInfo(status: number, t: Translations): StatusInfo {\n if (status in statusKeys) {\n const { key, color, icon } = statusKeys[status];\n return { description: t[key], color, icon };\n }\n\n if (status >= 200 && status < 300) {\n return {\n description: t.statusSuccessful,\n color: 'text-green-500',\n icon: CircleCheck,\n };\n }\n\n if (status >= 400) {\n return { description: t.statusError, color: 'text-red-500', icon: CircleX };\n }\n\n return {\n description: t.statusNoDescription,\n color: 'text-fd-muted-foreground',\n icon: CircleX,\n };\n}\n"],"mappings":";;AASA,MAAM,aAGF;CACF,KAAK;EAAE,KAAK;EAAoB,OAAO;EAAgB,MAAM;EAAS;CACtE,KAAK;EAAE,KAAK;EAAsB,OAAO;EAAgB,MAAM;EAAS;CACxE,KAAK;EAAE,KAAK;EAAmB,OAAO;EAAgB,MAAM;EAAS;CACrE,KAAK;EAAE,KAAK;EAAkB,OAAO;EAA4B,MAAM;EAAS;CAChF,KAAK;EAAE,KAAK;EAA6B,OAAO;EAAgB,MAAM;EAAS;CAChF;AAED,SAAgB,cAAc,QAAgB,GAA6B;AACzE,KAAI,UAAU,YAAY;EACxB,MAAM,EAAE,KAAK,OAAO,SAAS,WAAW;AACxC,SAAO;GAAE,aAAa,EAAE;GAAM;GAAO;GAAM;;AAG7C,KAAI,UAAU,OAAO,SAAS,IAC5B,QAAO;EACL,aAAa,EAAE;EACf,OAAO;EACP,MAAM;EACP;AAGH,KAAI,UAAU,IACZ,QAAO;EAAE,aAAa,EAAE;EAAa,OAAO;EAAgB,MAAM;EAAS;AAG7E,QAAO;EACL,aAAa,EAAE;EACf,OAAO;EACP,MAAM;EACP"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"all.d.ts","names":[],"sources":["../../../src/requests/generators/all.ts"],"mappings":";;;iBAQgB,eAAA,CAAgB,QAAA,EAAU,0BAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"all.js","names":[],"sources":["../../../src/requests/generators/all.ts"],"sourcesContent":["import type { CodeUsageGeneratorRegistry } from '.';\nimport { csharp } from './csharp';\nimport { curl } from './curl';\nimport { go } from './go';\nimport { java } from './java';\nimport { javascript } from './javascript';\nimport { python } from './python';\n\nexport function registerDefault(registry: CodeUsageGeneratorRegistry) {\n registry.add('curl', curl);\n registry.add('js', javascript);\n registry.add('go', go);\n registry.add('python', python);\n registry.add('java', java);\n registry.add('csharp', csharp);\n}\n"],"mappings":";;;;;;;AAQA,SAAgB,gBAAgB,UAAsC;AACpE,UAAS,IAAI,QAAQ,KAAK;AAC1B,UAAS,IAAI,MAAM,WAAW;AAC9B,UAAS,IAAI,MAAM,GAAG;AACtB,UAAS,IAAI,UAAU,OAAO;AAC9B,UAAS,IAAI,QAAQ,KAAK;AAC1B,UAAS,IAAI,UAAU,OAAO"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"csharp.d.ts","names":[],"sources":["../../../src/requests/generators/csharp.ts"],"mappings":";;;cAGa,MAAA,EAAQ,kBAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"csharp.js","names":[],"sources":["../../../src/requests/generators/csharp.ts"],"sourcesContent":["import type { CodeUsageGenerator } from '@/requests/generators';\nimport { resolveMediaAdapter } from '@/requests/media/adapter';\n\nexport const csharp: CodeUsageGenerator = {\n label: 'C#',\n lang: 'csharp',\n generate(url, data, { mediaAdapters }) {\n const s: string[] = [];\n const imports = new Set<string>(['System', 'System.Net.Http', 'System.Text']);\n const headers = { ...data.header };\n\n // Handle request body\n let body: string | undefined;\n if (data.body && data.bodyMediaType) {\n const adapter = resolveMediaAdapter(data.bodyMediaType, mediaAdapters);\n body = adapter?.generateExample(data as { body: unknown }, {\n lang: 'csharp',\n addImport(from) {\n imports.add(from);\n },\n });\n }\n\n for (const specifier of imports) {\n s.push(`using ${specifier};`);\n }\n\n s.push('');\n\n if (body) {\n s.push(body, '');\n }\n\n s.push('var client = new HttpClient();');\n const headerLines: string[] = [];\n\n function addHeader(key: string, value: string) {\n headerLines.push(`client.DefaultRequestHeaders.Add(\"${key}\", ${JSON.stringify(value)});`);\n }\n for (const k in headers) {\n addHeader(k, headers[k].value);\n }\n\n // Add cookie header if cookies are present\n if (Object.keys(data.cookie).length > 0) {\n const cookie = Object.entries(data.cookie)\n .map(([key, param]) => `${key}=${param.value}`)\n .join('; ');\n\n addHeader('cookie', cookie);\n }\n\n s.push(...headerLines);\n\n // Build the request\n const method = data.method[0].toUpperCase() + data.method.slice(1).toLowerCase() + 'Async';\n\n if (body) {\n s.push(`var response = await client.${method}(\"${url}\", body);`);\n } else {\n s.push(`var response = await client.${method}(\"${url}\");`);\n }\n\n // Add response handling\n s.push('var responseBody = await response.Content.ReadAsStringAsync();');\n\n return s.join('\\n');\n },\n};\n"],"mappings":";;;AAGA,MAAa,SAA6B;CACxC,OAAO;CACP,MAAM;CACN,SAAS,KAAK,MAAM,EAAE,iBAAiB;EACrC,MAAM,IAAc,EAAE;EACtB,MAAM,UAAU,IAAI,IAAY;GAAC;GAAU;GAAmB;GAAc,CAAC;EAC7E,MAAM,UAAU,EAAE,GAAG,KAAK,QAAQ;EAGlC,IAAI;AACJ,MAAI,KAAK,QAAQ,KAAK,cAEpB,QADgB,oBAAoB,KAAK,eAAe,cAAc,EACtD,gBAAgB,MAA2B;GACzD,MAAM;GACN,UAAU,MAAM;AACd,YAAQ,IAAI,KAAK;;GAEpB,CAAC;AAGJ,OAAK,MAAM,aAAa,QACtB,GAAE,KAAK,SAAS,UAAU,GAAG;AAG/B,IAAE,KAAK,GAAG;AAEV,MAAI,KACF,GAAE,KAAK,MAAM,GAAG;AAGlB,IAAE,KAAK,iCAAiC;EACxC,MAAM,cAAwB,EAAE;EAEhC,SAAS,UAAU,KAAa,OAAe;AAC7C,eAAY,KAAK,qCAAqC,IAAI,KAAK,KAAK,UAAU,MAAM,CAAC,IAAI;;AAE3F,OAAK,MAAM,KAAK,QACd,WAAU,GAAG,QAAQ,GAAG,MAAM;AAIhC,MAAI,OAAO,KAAK,KAAK,OAAO,CAAC,SAAS,EAKpC,WAAU,UAJK,OAAO,QAAQ,KAAK,OAAO,CACvC,KAAK,CAAC,KAAK,WAAW,GAAG,IAAI,GAAG,MAAM,QAAQ,CAC9C,KAAK,KAAK,CAEc;AAG7B,IAAE,KAAK,GAAG,YAAY;EAGtB,MAAM,SAAS,KAAK,OAAO,GAAG,aAAa,GAAG,KAAK,OAAO,MAAM,EAAE,CAAC,aAAa,GAAG;AAEnF,MAAI,KACF,GAAE,KAAK,+BAA+B,OAAO,IAAI,IAAI,WAAW;MAEhE,GAAE,KAAK,+BAA+B,OAAO,IAAI,IAAI,KAAK;AAI5D,IAAE,KAAK,iEAAiE;AAExE,SAAO,EAAE,KAAK,KAAK;;CAEtB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"curl.d.ts","names":[],"sources":["../../../src/requests/generators/curl.ts"],"mappings":";;;cAGa,IAAA,EAAM,kBAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"curl.js","names":[],"sources":["../../../src/requests/generators/curl.ts"],"sourcesContent":["import { escapeString, indent, inputToString } from '@/requests/string-utils';\nimport type { CodeUsageGenerator } from '@/requests/generators';\n\nexport const curl: CodeUsageGenerator = {\n label: 'cURL',\n lang: 'bash',\n generate(url, data) {\n const s: string[] = [];\n s.push(`curl -X ${data.method} \"${url}\"`);\n\n for (const header in data.header) {\n const value = `${header}: ${data.header[header].value}`;\n\n s.push(`-H \"${value}\"`);\n }\n\n for (const k in data.cookie) {\n const param = data.cookie[k];\n\n s.push(`--cookie ${JSON.stringify(`${k}=${param.value}`)}`);\n }\n\n if (data.body && data.bodyMediaType === 'multipart/form-data') {\n if (typeof data.body !== 'object') throw new Error('[CURL] request body must be an object.');\n\n for (const [key, value] of Object.entries(data.body)) {\n s.push(`-F ${key}=${JSON.stringify(inputToString(value))}`);\n }\n } else if (data.body && data.bodyMediaType) {\n const escaped = escapeString(\n inputToString(\n data.body,\n // @ts-expect-error -- assume the body media type is supported\n data.bodyMediaType,\n ),\n \"'\",\n );\n\n s.push(`-H \"Content-Type: ${data.bodyMediaType}\"`);\n s.push(`-d ${escaped}`);\n }\n\n return s.flatMap((v, i) => indent(v, i > 0 ? 1 : 0)).join(' \\\\\\n');\n },\n};\n"],"mappings":";;AAGA,MAAa,OAA2B;CACtC,OAAO;CACP,MAAM;CACN,SAAS,KAAK,MAAM;EAClB,MAAM,IAAc,EAAE;AACtB,IAAE,KAAK,WAAW,KAAK,OAAO,IAAI,IAAI,GAAG;AAEzC,OAAK,MAAM,UAAU,KAAK,QAAQ;GAChC,MAAM,QAAQ,GAAG,OAAO,IAAI,KAAK,OAAO,QAAQ;AAEhD,KAAE,KAAK,OAAO,MAAM,GAAG;;AAGzB,OAAK,MAAM,KAAK,KAAK,QAAQ;GAC3B,MAAM,QAAQ,KAAK,OAAO;AAE1B,KAAE,KAAK,YAAY,KAAK,UAAU,GAAG,EAAE,GAAG,MAAM,QAAQ,GAAG;;AAG7D,MAAI,KAAK,QAAQ,KAAK,kBAAkB,uBAAuB;AAC7D,OAAI,OAAO,KAAK,SAAS,SAAU,OAAM,IAAI,MAAM,yCAAyC;AAE5F,QAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,KAAK,KAAK,CAClD,GAAE,KAAK,MAAM,IAAI,GAAG,KAAK,UAAU,cAAc,MAAM,CAAC,GAAG;aAEpD,KAAK,QAAQ,KAAK,eAAe;GAC1C,MAAM,UAAU,aACd,cACE,KAAK,MAEL,KAAK,cACN,EACD,IACD;AAED,KAAE,KAAK,qBAAqB,KAAK,cAAc,GAAG;AAClD,KAAE,KAAK,MAAM,UAAU;;AAGzB,SAAO,EAAE,SAAS,GAAG,MAAM,OAAO,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,KAAK,QAAQ;;CAErE"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"go.d.ts","names":[],"sources":["../../../src/requests/generators/go.ts"],"mappings":";;;cAIa,EAAA,EAAI,kBAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"go.js","names":[],"sources":["../../../src/requests/generators/go.ts"],"sourcesContent":["import { indent } from '@/requests/string-utils';\nimport type { CodeUsageGenerator } from '@/requests/generators';\nimport { resolveMediaAdapter } from '@/requests/media/adapter';\n\nexport const go: CodeUsageGenerator = {\n label: 'Go',\n lang: 'go',\n generate(url, data, { mediaAdapters }) {\n const imports = ['fmt', 'net/http', 'io/ioutil'];\n const headers = new Map<string, string>();\n const variables = new Map<string, string>();\n variables.set('url', JSON.stringify(url));\n\n for (const header in data.header) {\n headers.set(header, JSON.stringify(data.header[header].value));\n }\n\n const cookies = Object.entries(data.cookie);\n if (cookies.length > 0) {\n headers.set(\n 'Cookie',\n JSON.stringify(cookies.map(([k, param]) => `${k}=${param.value}`).join('; ')),\n );\n }\n\n let body: string | undefined;\n\n if (data.body && data.bodyMediaType) {\n const adapter = resolveMediaAdapter(data.bodyMediaType, mediaAdapters);\n headers.set('Content-Type', `\"${data.bodyMediaType}\"`);\n body = adapter?.generateExample(data as { body: unknown }, {\n lang: 'go',\n addImport(from) {\n imports.push(from);\n },\n });\n }\n\n return `package main\n\nimport (\n${indent(imports.map((v) => `\"${v}\"`).join('\\n'))}\n)\n\nfunc main() {\n${Array.from(variables.entries())\n .map(([k, v]) => indent(`${k} := ${v}`))\n .join('\\n')}\n${body ? indent(body) : ''}\n req, _ := http.NewRequest(\"${data.method}\", url, ${body ? 'body' : 'nil'})\n${indent(\n Array.from(headers.entries())\n .map(([key, value]) => `req.Header.Add(\"${key}\", ${value})`)\n .join('\\n'),\n)}\n res, _ := http.DefaultClient.Do(req)\n defer res.Body.Close()\n body, _ := ioutil.ReadAll(res.Body)\n\n fmt.Println(res)\n fmt.Println(string(body))\n}`;\n },\n};\n"],"mappings":";;;;AAIA,MAAa,KAAyB;CACpC,OAAO;CACP,MAAM;CACN,SAAS,KAAK,MAAM,EAAE,iBAAiB;EACrC,MAAM,UAAU;GAAC;GAAO;GAAY;GAAY;EAChD,MAAM,0BAAU,IAAI,KAAqB;EACzC,MAAM,4BAAY,IAAI,KAAqB;AAC3C,YAAU,IAAI,OAAO,KAAK,UAAU,IAAI,CAAC;AAEzC,OAAK,MAAM,UAAU,KAAK,OACxB,SAAQ,IAAI,QAAQ,KAAK,UAAU,KAAK,OAAO,QAAQ,MAAM,CAAC;EAGhE,MAAM,UAAU,OAAO,QAAQ,KAAK,OAAO;AAC3C,MAAI,QAAQ,SAAS,EACnB,SAAQ,IACN,UACA,KAAK,UAAU,QAAQ,KAAK,CAAC,GAAG,WAAW,GAAG,EAAE,GAAG,MAAM,QAAQ,CAAC,KAAK,KAAK,CAAC,CAC9E;EAGH,IAAI;AAEJ,MAAI,KAAK,QAAQ,KAAK,eAAe;GACnC,MAAM,UAAU,oBAAoB,KAAK,eAAe,cAAc;AACtE,WAAQ,IAAI,gBAAgB,IAAI,KAAK,cAAc,GAAG;AACtD,UAAO,SAAS,gBAAgB,MAA2B;IACzD,MAAM;IACN,UAAU,MAAM;AACd,aAAQ,KAAK,KAAK;;IAErB,CAAC;;AAGJ,SAAO;;;EAGT,OAAO,QAAQ,KAAK,MAAM,IAAI,EAAE,GAAG,CAAC,KAAK,KAAK,CAAC,CAAC;;;;EAIhD,MAAM,KAAK,UAAU,SAAS,CAAC,CAC9B,KAAK,CAAC,GAAG,OAAO,OAAO,GAAG,EAAE,MAAM,IAAI,CAAC,CACvC,KAAK,KAAK,CAAC;EACZ,OAAO,OAAO,KAAK,GAAG,GAAG;+BACI,KAAK,OAAO,UAAU,OAAO,SAAS,MAAM;EACzE,OACA,MAAM,KAAK,QAAQ,SAAS,CAAC,CAC1B,KAAK,CAAC,KAAK,WAAW,mBAAmB,IAAI,KAAK,MAAM,GAAG,CAC3D,KAAK,KAAK,CACd,CAAC;;;;;;;;;CASD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/requests/generators/index.ts"],"mappings":";;;;UAGiB,0BAAA;EACf,GAAA,GAAM,EAAA,UAAY,SAAA,EAAW,kBAAA;EAC7B,GAAA,GAAM,EAAA,aAAe,kBAAA;EACrB,SAAA,GAAY,SAAA,EAAW,wBAAA;;;;EAIvB,MAAA,GAAS,EAAA;EACT,GAAA,QAAW,GAAA,SAAY,kBAAA;AAAA;;;;UAMR,kBAAA;EACf,QAAA,EAAU,oBAAA;EACV,IAAA;EACA,KAAA;EAfM;;;EAoBN,OAAA;IACE,QAAA,WAAmB,oBAAA;IACnB,aAAA;EAAA;AAAA;;;;UAOa,wBAAA;EACf,EAAA;EACA,IAAA;EACA,KAAA;EAXyC;;;;;;EAkBzC,MAAA,YAAkB,oBAAA,CAAqB,CAAA;EAlBlB;;;EAuBrB,aAAA,GAAgB,CAAA;AAAA;AAAA,iBAGF,gCAAA,CACd,OAAA,GAAU,0BAAA,GACT,0BAAA;AAAA,KAuCS,oBAAA,6BACV,GAAA,UACA,IAAA,EAAM,WAAA,EACN,OAAA;EACE,aAAA,EAAe,MAAA,SAAe,YAAA;EAC9B,MAAA,EAAQ,aAAA;AAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/requests/generators/index.ts"],"sourcesContent":["import type { MediaAdapter } from '../media/adapter';\nimport type { RequestData } from '../types';\n\nexport interface CodeUsageGeneratorRegistry {\n add: (id: string, generator: CodeUsageGenerator) => void;\n get: (id: string) => CodeUsageGenerator | undefined;\n addInline: (generator: InlineCodeUsageGenerator) => void;\n /**\n * @returns if the generator is removed\n */\n remove: (id: string) => boolean;\n map: () => Map<string, CodeUsageGenerator>;\n}\n\n/**\n * Generate code example for given programming language\n */\nexport interface CodeUsageGenerator {\n generate: CodeUsageGeneratorFn;\n lang: string;\n label?: string;\n\n /**\n * for inline generators passed from server, this stores info available for client (e.g. forwarded from \"use client\").\n */\n _client?: {\n generate: string | CodeUsageGeneratorFn;\n serverContext?: unknown;\n };\n}\n\n/**\n * Generate code example for given programming language\n */\nexport interface InlineCodeUsageGenerator<T = unknown> {\n id?: string;\n lang: string;\n label?: string;\n /**\n * either:\n * - code\n * - a function imported from a file with \"use client\" directive\n * - false (disabled)\n */\n source?: string | CodeUsageGeneratorFn<T> | false;\n\n /**\n * Pass extra context to client-side source generator\n */\n serverContext?: T;\n}\n\nexport function createCodeUsageGeneratorRegistry(\n inherit?: CodeUsageGeneratorRegistry,\n): CodeUsageGeneratorRegistry {\n const registry = new Map<string, CodeUsageGenerator>(inherit?.map());\n\n return {\n add(id, generator) {\n registry.set(id, generator);\n },\n get(id) {\n return registry.get(id);\n },\n addInline(generator) {\n const source = generator.source;\n const id = generator.id ?? generator.lang;\n if (!source) {\n this.remove(id);\n return;\n }\n\n registry.set(id, {\n lang: generator.lang,\n label: generator.label,\n generate() {\n return typeof source === 'string' ? source : '';\n },\n _client: {\n generate: source,\n serverContext: generator.serverContext,\n },\n });\n },\n remove(id) {\n return registry.delete(id);\n },\n map() {\n return registry;\n },\n };\n}\n\nexport type CodeUsageGeneratorFn<ServerContext = unknown> = (\n url: string,\n data: RequestData,\n context: {\n mediaAdapters: Record<string, MediaAdapter>;\n server: ServerContext;\n },\n) => string;\n"],"mappings":";AAoDA,SAAgB,iCACd,SAC4B;CAC5B,MAAM,WAAW,IAAI,IAAgC,SAAS,KAAK,CAAC;AAEpE,QAAO;EACL,IAAI,IAAI,WAAW;AACjB,YAAS,IAAI,IAAI,UAAU;;EAE7B,IAAI,IAAI;AACN,UAAO,SAAS,IAAI,GAAG;;EAEzB,UAAU,WAAW;GACnB,MAAM,SAAS,UAAU;GACzB,MAAM,KAAK,UAAU,MAAM,UAAU;AACrC,OAAI,CAAC,QAAQ;AACX,SAAK,OAAO,GAAG;AACf;;AAGF,YAAS,IAAI,IAAI;IACf,MAAM,UAAU;IAChB,OAAO,UAAU;IACjB,WAAW;AACT,YAAO,OAAO,WAAW,WAAW,SAAS;;IAE/C,SAAS;KACP,UAAU;KACV,eAAe,UAAU;KAC1B;IACF,CAAC;;EAEJ,OAAO,IAAI;AACT,UAAO,SAAS,OAAO,GAAG;;EAE5B,MAAM;AACJ,UAAO;;EAEV"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"java.d.ts","names":[],"sources":["../../../src/requests/generators/java.ts"],"mappings":";;;cAIa,IAAA,EAAM,kBAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"java.js","names":[],"sources":["../../../src/requests/generators/java.ts"],"sourcesContent":["import { indent } from '@/requests/string-utils';\nimport type { CodeUsageGenerator } from '@/requests/generators';\nimport { resolveMediaAdapter } from '@/requests/media/adapter';\n\nexport const java: CodeUsageGenerator = {\n label: 'Java',\n lang: 'java',\n generate(url, data, { mediaAdapters }) {\n const s: string[] = [];\n const headers = { ...data.header };\n const imports = new Set<string>([\n 'java.net.URI',\n 'java.net.http.HttpClient',\n 'java.net.http.HttpRequest',\n 'java.net.http.HttpResponse',\n 'java.net.http.HttpResponse.BodyHandlers',\n 'java.time.Duration',\n ]);\n\n // Handle body if present\n let body: string | undefined;\n if (data.body && data.bodyMediaType) {\n const adapter = resolveMediaAdapter(data.bodyMediaType, mediaAdapters);\n body = adapter?.generateExample(data as { body: unknown }, {\n lang: 'java',\n addImport(specifier) {\n imports.add(specifier);\n },\n });\n }\n\n for (const value of imports.values()) {\n s.push(`import ${value};`);\n }\n s.push('');\n\n if (body) {\n s.push(body);\n }\n\n // Create HttpClient\n s.push('HttpClient client = HttpClient.newBuilder()');\n s.push(indent('.connectTimeout(Duration.ofSeconds(10))'));\n s.push(indent('.build();'));\n s.push('');\n\n // Build request\n s.push('HttpRequest.Builder requestBuilder = HttpRequest.newBuilder()');\n s.push(indent(`.uri(URI.create(${JSON.stringify(url)}))`));\n\n // Add headers\n for (const [key, param] of Object.entries(headers)) {\n s.push(indent(`.header(${JSON.stringify(key)}, ${JSON.stringify(param.value)})`));\n }\n\n if (data.bodyMediaType) {\n s.push(indent(`.header(\"Content-Type\", \"${data.bodyMediaType}\")`));\n }\n\n // Add cookies if present\n const cookies = Object.entries(data.cookie);\n\n if (cookies.length > 0) {\n const cookieString = cookies.map(([key, param]) => `${key}=${param.value}`).join('; ');\n\n s.push(indent(`.header(\"Cookie\", ${JSON.stringify(cookieString)})`));\n }\n\n const arg = body ? 'body' : '';\n s.push(indent(`.${data.method.toUpperCase()}(${arg})`));\n s.push(indent('.build();'));\n s.push('');\n\n // Add response handling\n s.push('try {');\n s.push(\n indent(\n 'HttpResponse<String> response = client.send(requestBuilder.build(), BodyHandlers.ofString());',\n ),\n );\n s.push(indent('System.out.println(\"Status code: \" + response.statusCode());'));\n s.push(indent('System.out.println(\"Response body: \" + response.body());'));\n s.push('} catch (Exception e) {');\n s.push(indent('e.printStackTrace();'));\n s.push('}');\n\n return s.join('\\n');\n },\n};\n"],"mappings":";;;;AAIA,MAAa,OAA2B;CACtC,OAAO;CACP,MAAM;CACN,SAAS,KAAK,MAAM,EAAE,iBAAiB;EACrC,MAAM,IAAc,EAAE;EACtB,MAAM,UAAU,EAAE,GAAG,KAAK,QAAQ;EAClC,MAAM,UAAU,IAAI,IAAY;GAC9B;GACA;GACA;GACA;GACA;GACA;GACD,CAAC;EAGF,IAAI;AACJ,MAAI,KAAK,QAAQ,KAAK,cAEpB,QADgB,oBAAoB,KAAK,eAAe,cAAc,EACtD,gBAAgB,MAA2B;GACzD,MAAM;GACN,UAAU,WAAW;AACnB,YAAQ,IAAI,UAAU;;GAEzB,CAAC;AAGJ,OAAK,MAAM,SAAS,QAAQ,QAAQ,CAClC,GAAE,KAAK,UAAU,MAAM,GAAG;AAE5B,IAAE,KAAK,GAAG;AAEV,MAAI,KACF,GAAE,KAAK,KAAK;AAId,IAAE,KAAK,8CAA8C;AACrD,IAAE,KAAK,OAAO,0CAA0C,CAAC;AACzD,IAAE,KAAK,OAAO,YAAY,CAAC;AAC3B,IAAE,KAAK,GAAG;AAGV,IAAE,KAAK,gEAAgE;AACvE,IAAE,KAAK,OAAO,mBAAmB,KAAK,UAAU,IAAI,CAAC,IAAI,CAAC;AAG1D,OAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,QAAQ,CAChD,GAAE,KAAK,OAAO,WAAW,KAAK,UAAU,IAAI,CAAC,IAAI,KAAK,UAAU,MAAM,MAAM,CAAC,GAAG,CAAC;AAGnF,MAAI,KAAK,cACP,GAAE,KAAK,OAAO,4BAA4B,KAAK,cAAc,IAAI,CAAC;EAIpE,MAAM,UAAU,OAAO,QAAQ,KAAK,OAAO;AAE3C,MAAI,QAAQ,SAAS,GAAG;GACtB,MAAM,eAAe,QAAQ,KAAK,CAAC,KAAK,WAAW,GAAG,IAAI,GAAG,MAAM,QAAQ,CAAC,KAAK,KAAK;AAEtF,KAAE,KAAK,OAAO,qBAAqB,KAAK,UAAU,aAAa,CAAC,GAAG,CAAC;;EAGtE,MAAM,MAAM,OAAO,SAAS;AAC5B,IAAE,KAAK,OAAO,IAAI,KAAK,OAAO,aAAa,CAAC,GAAG,IAAI,GAAG,CAAC;AACvD,IAAE,KAAK,OAAO,YAAY,CAAC;AAC3B,IAAE,KAAK,GAAG;AAGV,IAAE,KAAK,QAAQ;AACf,IAAE,KACA,OACE,gGACD,CACF;AACD,IAAE,KAAK,OAAO,iEAA+D,CAAC;AAC9E,IAAE,KAAK,OAAO,6DAA2D,CAAC;AAC1E,IAAE,KAAK,0BAA0B;AACjC,IAAE,KAAK,OAAO,uBAAuB,CAAC;AACtC,IAAE,KAAK,IAAI;AAEX,SAAO,EAAE,KAAK,KAAK;;CAEtB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"javascript.d.ts","names":[],"sources":["../../../src/requests/generators/javascript.ts"],"mappings":";;;cAIa,UAAA,EAAY,kBAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"javascript.js","names":[],"sources":["../../../src/requests/generators/javascript.ts"],"sourcesContent":["import { indent } from '@/requests/string-utils';\nimport type { CodeUsageGenerator } from '@/requests/generators';\nimport { resolveMediaAdapter } from '@/requests/media/adapter';\n\nexport const javascript: CodeUsageGenerator = {\n label: 'JavaScript',\n lang: 'js',\n generate(url, data, { mediaAdapters }) {\n const s: string[] = [];\n const options = new Map<string, string>();\n const headers: Record<string, string> = {};\n\n options.set('method', JSON.stringify(data.method));\n if (data.bodyMediaType) {\n headers['Content-Type'] = data.bodyMediaType;\n }\n\n for (const [k, v] of Object.entries(data.header)) {\n headers[k] = v.value;\n }\n\n const cookies = Object.entries(data.cookie);\n if (cookies.length > 0) {\n headers['cookie'] = cookies.map(([key, param]) => `${key}=${param.value}`).join('; ');\n }\n\n if (Object.keys(headers).length > 0) {\n options.set('headers', JSON.stringify(headers, null, 2));\n }\n\n let body: string | undefined;\n if (data.body && data.bodyMediaType) {\n const adapter = resolveMediaAdapter(data.bodyMediaType, mediaAdapters);\n body = adapter?.generateExample(data as { body: unknown }, {\n lang: 'js',\n addImport(from, name) {\n s.unshift(`import { ${name} } from \"${from}\"`);\n },\n });\n }\n\n if (body) {\n s.push(body);\n options.set('body', 'body');\n }\n\n const params = [JSON.stringify(url)];\n if (options.size > 0) {\n const str = Array.from(options.entries())\n .map(([k, v]) => indent(k === v ? k : `${k}: ${v}`))\n .join(',\\n');\n\n params.push(`{\\n${str}\\n}`);\n }\n\n s.push(`fetch(${params.join(', ')})`);\n\n return s.join('\\n\\n');\n },\n};\n"],"mappings":";;;;AAIA,MAAa,aAAiC;CAC5C,OAAO;CACP,MAAM;CACN,SAAS,KAAK,MAAM,EAAE,iBAAiB;EACrC,MAAM,IAAc,EAAE;EACtB,MAAM,0BAAU,IAAI,KAAqB;EACzC,MAAM,UAAkC,EAAE;AAE1C,UAAQ,IAAI,UAAU,KAAK,UAAU,KAAK,OAAO,CAAC;AAClD,MAAI,KAAK,cACP,SAAQ,kBAAkB,KAAK;AAGjC,OAAK,MAAM,CAAC,GAAG,MAAM,OAAO,QAAQ,KAAK,OAAO,CAC9C,SAAQ,KAAK,EAAE;EAGjB,MAAM,UAAU,OAAO,QAAQ,KAAK,OAAO;AAC3C,MAAI,QAAQ,SAAS,EACnB,SAAQ,YAAY,QAAQ,KAAK,CAAC,KAAK,WAAW,GAAG,IAAI,GAAG,MAAM,QAAQ,CAAC,KAAK,KAAK;AAGvF,MAAI,OAAO,KAAK,QAAQ,CAAC,SAAS,EAChC,SAAQ,IAAI,WAAW,KAAK,UAAU,SAAS,MAAM,EAAE,CAAC;EAG1D,IAAI;AACJ,MAAI,KAAK,QAAQ,KAAK,cAEpB,QADgB,oBAAoB,KAAK,eAAe,cAAc,EACtD,gBAAgB,MAA2B;GACzD,MAAM;GACN,UAAU,MAAM,MAAM;AACpB,MAAE,QAAQ,YAAY,KAAK,WAAW,KAAK,GAAG;;GAEjD,CAAC;AAGJ,MAAI,MAAM;AACR,KAAE,KAAK,KAAK;AACZ,WAAQ,IAAI,QAAQ,OAAO;;EAG7B,MAAM,SAAS,CAAC,KAAK,UAAU,IAAI,CAAC;AACpC,MAAI,QAAQ,OAAO,GAAG;GACpB,MAAM,MAAM,MAAM,KAAK,QAAQ,SAAS,CAAC,CACtC,KAAK,CAAC,GAAG,OAAO,OAAO,MAAM,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,CAAC,CACnD,KAAK,MAAM;AAEd,UAAO,KAAK,MAAM,IAAI,KAAK;;AAG7B,IAAE,KAAK,SAAS,OAAO,KAAK,KAAK,CAAC,GAAG;AAErC,SAAO,EAAE,KAAK,OAAO;;CAExB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"python.d.ts","names":[],"sources":["../../../src/requests/generators/python.ts"],"mappings":";;;cAGa,MAAA,EAAQ,kBAAA;AAAA,iBAuDL,oBAAA,CAAqB,CAAA,WAAY,OAAA,EAAS,GAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"python.js","names":[],"sources":["../../../src/requests/generators/python.ts"],"sourcesContent":["import type { CodeUsageGenerator } from '@/requests/generators';\nimport { resolveMediaAdapter } from '@/requests/media/adapter';\n\nexport const python: CodeUsageGenerator = {\n label: 'Python',\n lang: 'python',\n generate(url, data, { mediaAdapters }) {\n const headers: Record<string, string> = {};\n const imports = new Set<string>();\n const params = [`\"${data.method}\"`, 'url'];\n let body: string | undefined;\n\n imports.add('requests');\n\n if (data.body && data.bodyMediaType) {\n const adapter = resolveMediaAdapter(data.bodyMediaType, mediaAdapters);\n headers['Content-Type'] = data.bodyMediaType;\n\n body = adapter?.generateExample(data as { body: unknown }, {\n lang: 'python',\n });\n\n if (body) {\n params.push('data = body');\n }\n }\n\n for (const [k, v] of Object.entries(data.header)) {\n headers[k] = v.value;\n }\n\n if (Object.keys(headers).length > 0) {\n params.push(`headers = ${generatePythonObject(headers, imports)}`);\n }\n\n const inputCookies = Object.entries(data.cookie);\n if (inputCookies.length > 0) {\n const cookies: Record<string, string> = {};\n\n for (const [k, v] of inputCookies) {\n cookies[k] = v.value;\n }\n\n params.push(`cookies = ${generatePythonObject(cookies, imports)}`);\n }\n\n return `${Array.from(imports)\n .map((name) => 'import ' + name)\n .join('\\n')}\n\nurl = ${JSON.stringify(url)}\n${body ?? ''}\nresponse = requests.request(${params.join(', ')})\n\nprint(response.text)`;\n },\n};\n\nexport function generatePythonObject(v: unknown, imports: Set<string>): string {\n if (v === null) {\n return 'None';\n } else if (typeof v === 'boolean') {\n return v ? 'True' : 'False';\n } else if (typeof v === 'string') {\n return JSON.stringify(v);\n } else if (typeof v === 'number') {\n return v.toString();\n } else if (Array.isArray(v)) {\n const items = v.map((item) => generatePythonObject(item, imports));\n return `[${items.join(', ')}]`;\n } else if (v instanceof Date) {\n imports.add('datetime');\n return `datetime.datetime(${v.getFullYear()}, ${v.getMonth() + 1}, ${v.getDate()}, ${v.getHours()}, ${v.getMinutes()}, ${v.getSeconds()}, ${v.getMilliseconds()})`;\n } else if (typeof v === 'object') {\n const entries = Object.entries(v).map(\n ([key, value]) => ` ${JSON.stringify(key)}: ${generatePythonObject(value, imports)}`,\n );\n return `{\\n${entries.join(', \\n')}\\n}`;\n } else {\n throw new Error(`Unsupported type: ${typeof v}`);\n }\n}\n"],"mappings":";;;AAGA,MAAa,SAA6B;CACxC,OAAO;CACP,MAAM;CACN,SAAS,KAAK,MAAM,EAAE,iBAAiB;EACrC,MAAM,UAAkC,EAAE;EAC1C,MAAM,0BAAU,IAAI,KAAa;EACjC,MAAM,SAAS,CAAC,IAAI,KAAK,OAAO,IAAI,MAAM;EAC1C,IAAI;AAEJ,UAAQ,IAAI,WAAW;AAEvB,MAAI,KAAK,QAAQ,KAAK,eAAe;GACnC,MAAM,UAAU,oBAAoB,KAAK,eAAe,cAAc;AACtE,WAAQ,kBAAkB,KAAK;AAE/B,UAAO,SAAS,gBAAgB,MAA2B,EACzD,MAAM,UACP,CAAC;AAEF,OAAI,KACF,QAAO,KAAK,cAAc;;AAI9B,OAAK,MAAM,CAAC,GAAG,MAAM,OAAO,QAAQ,KAAK,OAAO,CAC9C,SAAQ,KAAK,EAAE;AAGjB,MAAI,OAAO,KAAK,QAAQ,CAAC,SAAS,EAChC,QAAO,KAAK,aAAa,qBAAqB,SAAS,QAAQ,GAAG;EAGpE,MAAM,eAAe,OAAO,QAAQ,KAAK,OAAO;AAChD,MAAI,aAAa,SAAS,GAAG;GAC3B,MAAM,UAAkC,EAAE;AAE1C,QAAK,MAAM,CAAC,GAAG,MAAM,aACnB,SAAQ,KAAK,EAAE;AAGjB,UAAO,KAAK,aAAa,qBAAqB,SAAS,QAAQ,GAAG;;AAGpE,SAAO,GAAG,MAAM,KAAK,QAAQ,CAC1B,KAAK,SAAS,YAAY,KAAK,CAC/B,KAAK,KAAK,CAAC;;QAEV,KAAK,UAAU,IAAI,CAAC;EAC1B,QAAQ,GAAG;8BACiB,OAAO,KAAK,KAAK,CAAC;;;;CAI/C;AAED,SAAgB,qBAAqB,GAAY,SAA8B;AAC7E,KAAI,MAAM,KACR,QAAO;UACE,OAAO,MAAM,UACtB,QAAO,IAAI,SAAS;UACX,OAAO,MAAM,SACtB,QAAO,KAAK,UAAU,EAAE;UACf,OAAO,MAAM,SACtB,QAAO,EAAE,UAAU;UACV,MAAM,QAAQ,EAAE,CAEzB,QAAO,IADO,EAAE,KAAK,SAAS,qBAAqB,MAAM,QAAQ,CAAC,CACjD,KAAK,KAAK,CAAC;UACnB,aAAa,MAAM;AAC5B,UAAQ,IAAI,WAAW;AACvB,SAAO,qBAAqB,EAAE,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,EAAE,iBAAiB,CAAC;YACvJ,OAAO,MAAM,SAItB,QAAO,MAHS,OAAO,QAAQ,EAAE,CAAC,KAC/B,CAAC,KAAK,WAAW,KAAK,KAAK,UAAU,IAAI,CAAC,IAAI,qBAAqB,OAAO,QAAQ,GACpF,CACoB,KAAK,OAAO,CAAC;KAElC,OAAM,IAAI,MAAM,qBAAqB,OAAO,IAAI"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"adapter.d.ts","names":[],"sources":["../../../src/requests/media/adapter.ts"],"mappings":";UAKU,WAAA;EAAW;;;EAInB,UAAA,GAAa,MAAA;AAAA;AAAA,UAGL,SAAA,SAAkB,WAAA;EAC1B,IAAA;EACA,SAAA,GAAY,IAAA;AAAA;AAAA,UAGJ,iBAAA,SAA0B,WAAA;EAClC,IAAA;EACA,SAAA,GAAY,GAAA,UAAa,IAAA;AAAA;AAAA,UAGjB,WAAA,SAAoB,WAAA;EAC5B,IAAA;EACA,SAAA,GAAY,SAAA;AAAA;AAAA,UAGJ,aAAA,SAAsB,WAAA;EAC9B,IAAA;EACA,SAAA,GAAY,SAAA;AAAA;AAAA,KAGF,YAAA,GACR,WAAA,GACA,SAAA,GACA,iBAAA,GACA,aAAA,IACC,WAAA;EAAgB,IAAA;AAAA;AAAA,UAEJ,YAAA;EAjBP;;;;;EAuBR,MAAA,GAAS,IAAA;IAAQ,IAAA;EAAA,MAAoB,QAAA;EArBR;;AAAA;;;;;;;EAgC7B,eAAA,GAAkB,IAAA;IAAQ,IAAA;EAAA,GAAiB,GAAA,EAAK,YAAA;AAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"adapter.js","names":[],"sources":["../../../src/requests/media/adapter.ts"],"sourcesContent":["import { escapeString, inputToString } from '@/requests/string-utils';\nexport { resolveMediaAdapter, isMediaTypeSupported } from './resolve-adapter';\n// @ts-expect-error -- untyped\nimport js2xml from 'xml-js/lib/js2xml';\n\ninterface BaseContext {\n /**\n * Passed by your custom example generator, for your custom media adapter to receive.\n */\n customData?: Record<string, unknown>;\n}\n\ninterface GoContext extends BaseContext {\n lang: 'go';\n addImport: (name: string) => void;\n}\n\ninterface JavaScriptContext extends BaseContext {\n lang: 'js';\n addImport: (pkg: string, name: string) => void;\n}\n\ninterface JavaContext extends BaseContext {\n lang: 'java';\n addImport: (specifier: string) => void;\n}\n\ninterface CSharpContext extends BaseContext {\n lang: 'csharp';\n addImport: (specifier: string) => void;\n}\n\nexport type MediaContext =\n | JavaContext\n | GoContext\n | JavaScriptContext\n | CSharpContext\n | (BaseContext & { lang: string });\n\nexport interface MediaAdapter {\n /**\n * encode data into specified media type for `fetch()`.\n *\n * Return the encoded form of `data.body` property.\n */\n encode: (data: { body: unknown }) => BodyInit;\n\n /**\n * generate code example for creating the body in a given programming language.\n *\n * @param data - request data.\n * @param lang - name of programming language.\n * @param ctx - context passed from the generator of programming language.\n *\n * @returns code that inits a `body` variable, or undefined if not supported (skip example for that language).\n */\n generateExample: (data: { body: unknown }, ctx: MediaContext) => string | undefined;\n}\n\nexport const defaultAdapters = {\n 'application/json': {\n encode(data) {\n return JSON.stringify(data.body);\n },\n generateExample(data, ctx) {\n return str(data.body, 'application/json', ctx);\n },\n },\n 'application/xml': {\n encode(data) {\n return js2xml(data.body as Record<string, unknown>, {\n compact: true,\n spaces: 2,\n });\n },\n generateExample(data, ctx) {\n return str(data.body, 'application/xml', ctx);\n },\n },\n 'application/x-ndjson': {\n encode(data) {\n if (Array.isArray(data.body)) {\n return data.body.map((v) => JSON.stringify(v)).join('\\n');\n }\n\n return JSON.stringify(data.body);\n },\n generateExample(data, ctx) {\n return str(data.body, 'application/x-ndjson', ctx);\n },\n },\n 'application/x-www-form-urlencoded': {\n encode(data) {\n if (typeof data.body !== 'object')\n throw new Error(`Input value must be object, received: ${typeof data.body}`);\n\n const params = new URLSearchParams();\n for (const key in data.body) {\n params.set(key, String(data.body[key as keyof object]));\n }\n\n return params;\n },\n generateExample(data, ctx) {\n if (ctx.lang === 'js') {\n return `const body = new URLSearchParams(${JSON.stringify(data.body, null, 2)})`;\n }\n\n return str(data.body, 'application/x-www-form-urlencoded', ctx);\n },\n },\n 'multipart/form-data': {\n encode(data) {\n const formData = new FormData();\n const body = data.body as Record<string, unknown>;\n\n if (typeof body !== 'object' || !body) {\n throw new Error(`Unsupported body type: ${typeof body}, expected: object`);\n }\n\n for (const key in body) {\n const prop = body[key];\n\n if (prop === null || prop === undefined || Number.isNaN(prop)) continue;\n\n // Arrays (multi-value field)\n if (Array.isArray(prop)) {\n for (const item of prop) {\n if (item === null || item === undefined) continue;\n if (item instanceof File) {\n formData.append(key, item, item.name);\n } else if (item instanceof Blob) {\n formData.append(key, item, 'blob');\n } else if (typeof item === 'object') {\n formData.append(key, JSON.stringify(item));\n } else {\n formData.append(key, String(item));\n }\n }\n }\n\n // Single File\n else if (prop instanceof File) {\n formData.set(key, prop, prop.name);\n }\n\n // Single Blob\n else if (prop instanceof Blob) {\n formData.set(key, prop, 'blob');\n }\n\n // Any other object (stringify)\n else if (typeof prop === 'object') {\n formData.set(key, JSON.stringify(prop));\n }\n\n // Primitive types\n else {\n formData.set(key, String(prop));\n }\n }\n\n return formData;\n },\n generateExample(data, ctx) {\n if (ctx.lang === 'python') {\n return `body = ${JSON.stringify(data.body, null, 2)}`;\n }\n\n const s: string[] = [];\n if (ctx.lang === 'js') {\n s.push(`const body = new FormData();`);\n\n for (const [key, value] of Object.entries(data.body as object)) {\n s.push(`body.set(${key}, ${JSON.stringify(inputToString(value))})`);\n }\n }\n\n if (ctx.lang === 'go') {\n const { addImport } = ctx as GoContext;\n addImport('mime/multipart');\n addImport('bytes');\n\n s.push('body := new(bytes.Buffer)');\n s.push('mp := multipart.NewWriter(payload)');\n\n for (const [key, value] of Object.entries(data.body as object)) {\n if (!value) continue;\n\n const escaped = escapeString(inputToString(value, 'application/json'), '`');\n\n s.push(`mp.WriteField(\"${key}\", ${escaped})`);\n }\n }\n\n if (ctx.lang === 'java') {\n const { addImport } = ctx as JavaContext;\n addImport('java.net.http.HttpRequest.BodyPublishers');\n\n s.push(`var body = BodyPublishers.ofByteArray(new byte[] { ... });`);\n }\n\n if (ctx.lang === 'csharp') {\n s.push(`var body = new MultipartFormDataContent();`);\n }\n\n if (s.length > 0) return s.join('\\n');\n },\n },\n 'application/octet-stream': {\n encode(data) {\n return data.body as BodyInit;\n },\n generateExample() {\n // not supported\n return undefined;\n },\n },\n} satisfies Record<string, MediaAdapter>;\n\nfunction str(\n init: unknown,\n mediaType:\n | 'application/x-www-form-urlencoded'\n | 'application/x-ndjson'\n | 'application/json'\n | 'application/xml',\n ctx: MediaContext,\n) {\n if (ctx.lang === 'js') {\n if (mediaType === 'application/json') {\n return `const body = JSON.stringify(${JSON.stringify(init, null, 2)})`;\n }\n return `const body = ${escapeString(inputToString(init, mediaType), '`')}`;\n }\n\n if (ctx.lang === 'python') {\n return `body = ${escapeString(inputToString(init, mediaType), '\"\"\"')}`;\n }\n\n if (ctx.lang === 'go') {\n const { addImport } = ctx as GoContext;\n addImport('strings');\n return `body := strings.NewReader(${escapeString(inputToString(init, mediaType), '`')})`;\n }\n\n if (ctx.lang === 'java') {\n const { addImport } = ctx as JavaContext;\n addImport('java.net.http.HttpRequest.BodyPublishers');\n return `var body = BodyPublishers.ofString(${escapeString(inputToString(init, mediaType), '\"\"\"')});`;\n }\n\n if (ctx.lang === 'csharp') {\n const input = `\\n${inputToString(init, mediaType)}\\n`;\n\n return `var body = new StringContent(${escapeString(input, '\"\"\"')}, Encoding.UTF8, \"${mediaType}\");`;\n }\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"encode.d.ts","names":[],"sources":["../../../src/requests/media/encode.ts"],"mappings":";UAKiB,gBAAA;EAAA,SACN,KAAA;AAAA;AAAA,UAGM,wBAAA;EAAA,SACN,MAAA;AAAA"}