@gitbook/react-openapi 1.4.3 → 1.5.2

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 (263) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/dist/InteractiveSection.js +59 -0
  3. package/dist/Markdown.js +10 -0
  4. package/dist/OpenAPICodeSample.js +219 -0
  5. package/dist/OpenAPICodeSampleInteractive.js +66 -0
  6. package/dist/OpenAPICodeSampleSelector.js +45 -0
  7. package/dist/OpenAPICopyButton.js +39 -0
  8. package/dist/OpenAPIDisclosure.js +30 -0
  9. package/dist/OpenAPIDisclosureGroup.js +75 -0
  10. package/dist/OpenAPIExample.js +41 -0
  11. package/dist/OpenAPIMediaType.js +58 -0
  12. package/dist/OpenAPIOperation.d.ts +12 -7
  13. package/dist/OpenAPIOperation.js +30 -0
  14. package/dist/OpenAPIOperationContext.d.ts +10 -6
  15. package/dist/OpenAPIOperationContext.js +30 -0
  16. package/dist/OpenAPIPath.js +51 -0
  17. package/dist/OpenAPIPrefillContextProvider.d.ts +11 -7
  18. package/dist/OpenAPIPrefillContextProvider.js +25 -0
  19. package/dist/OpenAPIRequestBody.js +28 -0
  20. package/dist/OpenAPIRequestBodyHeaderType.js +23 -0
  21. package/dist/OpenAPIResponse.js +39 -0
  22. package/dist/OpenAPIResponseExample.js +75 -0
  23. package/dist/OpenAPIResponseExampleContent.js +61 -0
  24. package/dist/OpenAPIResponses.js +61 -0
  25. package/dist/OpenAPISchema.js +373 -0
  26. package/dist/OpenAPISchemaName.js +45 -0
  27. package/dist/OpenAPISchemaServer.js +13 -0
  28. package/dist/OpenAPISecurities.js +124 -0
  29. package/dist/OpenAPISelect.js +45 -0
  30. package/dist/OpenAPISpec.js +73 -0
  31. package/dist/OpenAPIWebhook.d.ts +12 -7
  32. package/dist/OpenAPIWebhook.js +28 -0
  33. package/dist/OpenAPIWebhookExample.js +40 -0
  34. package/dist/ScalarApiButton.js +87 -0
  35. package/dist/StaticSection.js +37 -0
  36. package/dist/code-samples.js +267 -419
  37. package/dist/common/OpenAPIColumnSpec.js +23 -0
  38. package/dist/common/OpenAPIOperationDescription.js +18 -0
  39. package/dist/common/OpenAPIStability.js +17 -0
  40. package/dist/common/OpenAPISummary.js +27 -0
  41. package/dist/contentTypeChecks.js +24 -20
  42. package/dist/context.d.ts +68 -72
  43. package/dist/context.js +25 -39
  44. package/dist/decycle.js +39 -68
  45. package/dist/dereference.js +20 -64
  46. package/dist/generateSchemaExample.js +188 -332
  47. package/dist/getDisclosureLabel.js +15 -16
  48. package/dist/getOrCreateStoreByKey.js +20 -17
  49. package/dist/index.d.ts +12 -10
  50. package/dist/index.js +11 -8
  51. package/dist/json2xml.js +10 -5
  52. package/dist/resolveOpenAPIOperation.d.ts +11 -7
  53. package/dist/resolveOpenAPIOperation.js +88 -159
  54. package/dist/resolveOpenAPIWebhook.d.ts +11 -7
  55. package/dist/resolveOpenAPIWebhook.js +41 -116
  56. package/dist/schemas/OpenAPISchemaItem.js +26 -0
  57. package/dist/schemas/OpenAPISchemas.d.ts +16 -11
  58. package/dist/schemas/OpenAPISchemas.js +57 -0
  59. package/dist/schemas/resolveOpenAPISchemas.d.ts +9 -4
  60. package/dist/schemas/resolveOpenAPISchemas.js +15 -59
  61. package/dist/stringifyOpenAPI.js +12 -13
  62. package/dist/translate.js +43 -0
  63. package/dist/translations/de.js +47 -42
  64. package/dist/translations/en.d.ts +46 -42
  65. package/dist/translations/en.js +47 -42
  66. package/dist/translations/es.js +47 -42
  67. package/dist/translations/fr.js +47 -42
  68. package/dist/translations/index.d.ts +404 -391
  69. package/dist/translations/index.js +28 -24
  70. package/dist/translations/ja.js +47 -42
  71. package/dist/translations/nl.js +47 -42
  72. package/dist/translations/no.js +47 -42
  73. package/dist/translations/pt-br.js +47 -42
  74. package/dist/translations/types.d.ts +7 -5
  75. package/dist/translations/zh.js +47 -42
  76. package/dist/types.d.ts +30 -24
  77. package/dist/util/example.js +84 -0
  78. package/dist/util/server.js +32 -38
  79. package/dist/util/tryit-prefill.js +135 -121
  80. package/dist/utils.js +135 -196
  81. package/package.json +18 -11
  82. package/dist/InteractiveSection.d.ts +0 -33
  83. package/dist/InteractiveSection.jsx +0 -61
  84. package/dist/Markdown.d.ts +0 -4
  85. package/dist/Markdown.jsx +0 -5
  86. package/dist/OpenAPICodeSample.d.ts +0 -19
  87. package/dist/OpenAPICodeSample.jsx +0 -230
  88. package/dist/OpenAPICodeSampleInteractive.d.ts +0 -14
  89. package/dist/OpenAPICodeSampleInteractive.jsx +0 -73
  90. package/dist/OpenAPICodeSampleSelector.d.ts +0 -14
  91. package/dist/OpenAPICodeSampleSelector.jsx +0 -44
  92. package/dist/OpenAPICopyButton.d.ts +0 -13
  93. package/dist/OpenAPICopyButton.jsx +0 -35
  94. package/dist/OpenAPIDisclosure.d.ts +0 -11
  95. package/dist/OpenAPIDisclosure.jsx +0 -30
  96. package/dist/OpenAPIDisclosureGroup.d.ts +0 -23
  97. package/dist/OpenAPIDisclosureGroup.jsx +0 -83
  98. package/dist/OpenAPIExample.d.ts +0 -16
  99. package/dist/OpenAPIExample.jsx +0 -36
  100. package/dist/OpenAPIMediaType.d.ts +0 -21
  101. package/dist/OpenAPIMediaType.jsx +0 -61
  102. package/dist/OpenAPIOperation.jsx +0 -25
  103. package/dist/OpenAPIOperationContext.jsx +0 -26
  104. package/dist/OpenAPIOperationDescription.d.ts +0 -9
  105. package/dist/OpenAPIOperationDescription.jsx +0 -22
  106. package/dist/OpenAPIOperationStability.d.ts +0 -9
  107. package/dist/OpenAPIOperationStability.jsx +0 -27
  108. package/dist/OpenAPIPath.d.ts +0 -18
  109. package/dist/OpenAPIPath.jsx +0 -55
  110. package/dist/OpenAPIPrefillContextProvider.jsx +0 -19
  111. package/dist/OpenAPIRequestBody.d.ts +0 -11
  112. package/dist/OpenAPIRequestBody.jsx +0 -28
  113. package/dist/OpenAPIRequestBodyHeaderType.d.ts +0 -8
  114. package/dist/OpenAPIRequestBodyHeaderType.jsx +0 -25
  115. package/dist/OpenAPIResponse.d.ts +0 -10
  116. package/dist/OpenAPIResponse.jsx +0 -57
  117. package/dist/OpenAPIResponseExample.d.ts +0 -9
  118. package/dist/OpenAPIResponseExample.jsx +0 -105
  119. package/dist/OpenAPIResponseExampleContent.d.ts +0 -22
  120. package/dist/OpenAPIResponseExampleContent.jsx +0 -60
  121. package/dist/OpenAPIResponses.d.ts +0 -9
  122. package/dist/OpenAPIResponses.jsx +0 -77
  123. package/dist/OpenAPISchema.d.ts +0 -27
  124. package/dist/OpenAPISchema.jsx +0 -400
  125. package/dist/OpenAPISchemaName.d.ts +0 -16
  126. package/dist/OpenAPISchemaName.jsx +0 -43
  127. package/dist/OpenAPISchemaServer.d.ts +0 -12
  128. package/dist/OpenAPISchemaServer.jsx +0 -8
  129. package/dist/OpenAPISecurities.d.ts +0 -9
  130. package/dist/OpenAPISecurities.jsx +0 -114
  131. package/dist/OpenAPISelect.d.ts +0 -22
  132. package/dist/OpenAPISelect.jsx +0 -44
  133. package/dist/OpenAPISpec.d.ts +0 -6
  134. package/dist/OpenAPISpec.jsx +0 -80
  135. package/dist/OpenAPITabs.d.ts +0 -26
  136. package/dist/OpenAPITabs.jsx +0 -109
  137. package/dist/OpenAPIWebhook.jsx +0 -23
  138. package/dist/OpenAPIWebhookExample.d.ts +0 -6
  139. package/dist/OpenAPIWebhookExample.jsx +0 -41
  140. package/dist/ScalarApiButton.d.ts +0 -14
  141. package/dist/ScalarApiButton.jsx +0 -81
  142. package/dist/StaticSection.d.ts +0 -13
  143. package/dist/StaticSection.jsx +0 -32
  144. package/dist/code-samples.d.ts +0 -17
  145. package/dist/common/OpenAPIColumnSpec.d.ts +0 -6
  146. package/dist/common/OpenAPIColumnSpec.jsx +0 -20
  147. package/dist/common/OpenAPIOperationDescription.d.ts +0 -6
  148. package/dist/common/OpenAPIOperationDescription.jsx +0 -19
  149. package/dist/common/OpenAPIStability.d.ts +0 -4
  150. package/dist/common/OpenAPIStability.jsx +0 -15
  151. package/dist/common/OpenAPISummary.d.ts +0 -6
  152. package/dist/common/OpenAPISummary.jsx +0 -30
  153. package/dist/contentTypeChecks.d.ts +0 -10
  154. package/dist/decycle.d.ts +0 -2
  155. package/dist/dereference.d.ts +0 -5
  156. package/dist/generateSchemaExample.d.ts +0 -45
  157. package/dist/getDisclosureLabel.d.ts +0 -7
  158. package/dist/getOrCreateStoreByKey.d.ts +0 -10
  159. package/dist/json2xml.d.ts +0 -4
  160. package/dist/schemas/OpenAPISchemaItem.d.ts +0 -7
  161. package/dist/schemas/OpenAPISchemaItem.jsx +0 -16
  162. package/dist/schemas/OpenAPISchemas.jsx +0 -59
  163. package/dist/schemas/index.d.ts +0 -2
  164. package/dist/schemas/index.js +0 -2
  165. package/dist/stringifyOpenAPI.d.ts +0 -4
  166. package/dist/translate.d.ts +0 -10
  167. package/dist/translate.jsx +0 -75
  168. package/dist/translations/de.d.ts +0 -43
  169. package/dist/translations/es.d.ts +0 -43
  170. package/dist/translations/fr.d.ts +0 -43
  171. package/dist/translations/ja.d.ts +0 -43
  172. package/dist/translations/nl.d.ts +0 -43
  173. package/dist/translations/no.d.ts +0 -43
  174. package/dist/translations/pt-br.d.ts +0 -43
  175. package/dist/translations/types.js +0 -1
  176. package/dist/translations/zh.d.ts +0 -43
  177. package/dist/tsconfig.build.tsbuildinfo +0 -1
  178. package/dist/types.js +0 -1
  179. package/dist/util/example.d.ts +0 -35
  180. package/dist/util/example.jsx +0 -103
  181. package/dist/util/server.d.ts +0 -9
  182. package/dist/util/tryit-prefill.d.ts +0 -20
  183. package/dist/utils.d.ts +0 -50
  184. package/src/InteractiveSection.tsx +0 -147
  185. package/src/Markdown.tsx +0 -12
  186. package/src/OpenAPICodeSample.tsx +0 -330
  187. package/src/OpenAPICodeSampleInteractive.tsx +0 -136
  188. package/src/OpenAPICodeSampleSelector.tsx +0 -94
  189. package/src/OpenAPICopyButton.tsx +0 -72
  190. package/src/OpenAPIDisclosure.tsx +0 -46
  191. package/src/OpenAPIDisclosureGroup.tsx +0 -158
  192. package/src/OpenAPIExample.tsx +0 -55
  193. package/src/OpenAPIMediaType.tsx +0 -139
  194. package/src/OpenAPIOperation.tsx +0 -35
  195. package/src/OpenAPIOperationContext.tsx +0 -45
  196. package/src/OpenAPIOperationDescription.tsx +0 -34
  197. package/src/OpenAPIOperationStability.tsx +0 -39
  198. package/src/OpenAPIPath.tsx +0 -90
  199. package/src/OpenAPIPrefillContextProvider.tsx +0 -40
  200. package/src/OpenAPIRequestBody.tsx +0 -54
  201. package/src/OpenAPIRequestBodyHeaderType.tsx +0 -36
  202. package/src/OpenAPIResponse.tsx +0 -82
  203. package/src/OpenAPIResponseExample.tsx +0 -151
  204. package/src/OpenAPIResponseExampleContent.tsx +0 -125
  205. package/src/OpenAPIResponses.tsx +0 -125
  206. package/src/OpenAPISchema.test.ts +0 -172
  207. package/src/OpenAPISchema.tsx +0 -654
  208. package/src/OpenAPISchemaName.tsx +0 -80
  209. package/src/OpenAPISchemaServer.tsx +0 -34
  210. package/src/OpenAPISecurities.tsx +0 -231
  211. package/src/OpenAPISelect.tsx +0 -96
  212. package/src/OpenAPISpec.tsx +0 -138
  213. package/src/OpenAPITabs.tsx +0 -147
  214. package/src/OpenAPIWebhook.tsx +0 -33
  215. package/src/OpenAPIWebhookExample.tsx +0 -60
  216. package/src/ScalarApiButton.tsx +0 -132
  217. package/src/StaticSection.tsx +0 -91
  218. package/src/__snapshots__/json2xml.test.ts.snap +0 -18
  219. package/src/code-samples.test.ts +0 -714
  220. package/src/code-samples.ts +0 -448
  221. package/src/common/OpenAPIColumnSpec.tsx +0 -31
  222. package/src/common/OpenAPIOperationDescription.tsx +0 -31
  223. package/src/common/OpenAPIStability.tsx +0 -23
  224. package/src/common/OpenAPISummary.tsx +0 -45
  225. package/src/contentTypeChecks.ts +0 -39
  226. package/src/context.ts +0 -99
  227. package/src/decycle.ts +0 -68
  228. package/src/dereference.ts +0 -29
  229. package/src/generateSchemaExample.test.ts +0 -1040
  230. package/src/generateSchemaExample.ts +0 -530
  231. package/src/getDisclosureLabel.ts +0 -25
  232. package/src/getOrCreateStoreByKey.ts +0 -33
  233. package/src/index.ts +0 -10
  234. package/src/json2xml.test.ts +0 -46
  235. package/src/json2xml.ts +0 -8
  236. package/src/resolveOpenAPIOperation.test.ts +0 -177
  237. package/src/resolveOpenAPIOperation.ts +0 -151
  238. package/src/resolveOpenAPIWebhook.ts +0 -99
  239. package/src/schemas/OpenAPISchemaItem.tsx +0 -34
  240. package/src/schemas/OpenAPISchemas.tsx +0 -98
  241. package/src/schemas/index.ts +0 -2
  242. package/src/schemas/resolveOpenAPISchemas.test.ts +0 -174
  243. package/src/schemas/resolveOpenAPISchemas.ts +0 -28
  244. package/src/stringifyOpenAPI.ts +0 -25
  245. package/src/translate.tsx +0 -80
  246. package/src/translations/de.ts +0 -43
  247. package/src/translations/en.ts +0 -43
  248. package/src/translations/es.ts +0 -43
  249. package/src/translations/fr.ts +0 -43
  250. package/src/translations/index.ts +0 -33
  251. package/src/translations/ja.ts +0 -43
  252. package/src/translations/nl.ts +0 -43
  253. package/src/translations/no.ts +0 -43
  254. package/src/translations/pt-br.ts +0 -43
  255. package/src/translations/types.ts +0 -7
  256. package/src/translations/zh.ts +0 -43
  257. package/src/types.ts +0 -46
  258. package/src/util/example.tsx +0 -129
  259. package/src/util/server.test.ts +0 -58
  260. package/src/util/server.ts +0 -47
  261. package/src/util/tryit-prefill.test.ts +0 -311
  262. package/src/util/tryit-prefill.ts +0 -160
  263. package/src/utils.ts +0 -255
@@ -1,427 +1,275 @@
1
- var __assign = (this && this.__assign) || function () {
2
- __assign = Object.assign || function(t) {
3
- for (var s, i = 1, n = arguments.length; i < n; i++) {
4
- s = arguments[i];
5
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
- t[p] = s[p];
7
- }
8
- return t;
9
- };
10
- return __assign.apply(this, arguments);
11
- };
12
- import yaml from 'js-yaml';
13
- import { isCSV, isFormData, isFormUrlEncoded, isGraphQL, isJSON, isPDF, isPlainObject, isText, isXML, isYAML, } from './contentTypeChecks';
14
- import { json2xml } from './json2xml';
15
- import { stringifyOpenAPI } from './stringifyOpenAPI';
16
- export var codeSampleGenerators = [
17
- {
18
- id: 'http',
19
- label: 'HTTP',
20
- syntax: 'http',
21
- generate: function (_a) {
22
- var method = _a.method, url = _a.url, _b = _a.headers, headers = _b === void 0 ? {} : _b, body = _a.body;
23
- var _c = parseHostAndPath(url), host = _c.host, path = _c.path;
24
- if (body) {
25
- // if we had a body add a content length header
26
- var bodyContent = body ? stringifyOpenAPI(body) : '';
27
- // handle unicode chars with a text encoder
28
- var encoder = new TextEncoder();
29
- var bodyString_1 = BodyGenerators.getHTTPBody(body, headers);
30
- if (bodyString_1) {
31
- body = bodyString_1;
32
- }
33
- headers = __assign(__assign({}, headers), { 'Content-Length': encoder.encode(bodyContent).length.toString() });
34
- }
35
- if (!headers.hasOwnProperty('Accept')) {
36
- headers.Accept = '*/*';
37
- }
38
- var headerString = headers
39
- ? "".concat(Object.entries(headers)
40
- .map(function (_a) {
41
- var key = _a[0], value = _a[1];
42
- return key.toLowerCase() !== 'host' ? "".concat(key, ": ").concat(value) : '';
43
- })
44
- .join('\n'), "\n")
45
- : '';
46
- var bodyString = body ? "\n".concat(body) : '';
47
- var httpRequest = "".concat(method.toUpperCase(), " ").concat(decodeURI(path), " HTTP/1.1\nHost: ").concat(host, "\n").concat(headerString).concat(bodyString);
48
- return httpRequest;
49
- },
50
- },
51
- {
52
- id: 'curl',
53
- label: 'cURL',
54
- syntax: 'bash',
55
- generate: function (_a) {
56
- var method = _a.method, url = _a.url, headers = _a.headers, body = _a.body;
57
- var separator = ' \\\n';
58
- var lines = ['curl -L'];
59
- if (method.toUpperCase() !== 'GET') {
60
- lines.push("--request ".concat(method.toUpperCase()));
61
- }
62
- lines.push("--url '".concat(url, "'"));
63
- if (body) {
64
- var bodyContent = BodyGenerators.getCurlBody(body, headers);
65
- if (bodyContent) {
66
- body = bodyContent.body;
67
- headers = bodyContent.headers;
68
- }
69
- }
70
- if (headers && Object.keys(headers).length > 0) {
71
- Object.entries(headers).forEach(function (_a) {
72
- var key = _a[0], value = _a[1];
73
- lines.push("--header '".concat(key, ": ").concat(value, "'"));
74
- });
75
- }
76
- if (body) {
77
- if (Array.isArray(body)) {
78
- lines.push.apply(lines, body);
79
- }
80
- else {
81
- lines.push(body);
82
- }
83
- }
84
- return lines.map(function (line, index) { return (index > 0 ? indent(line, 2) : line); }).join(separator);
85
- },
86
- },
87
- {
88
- id: 'javascript',
89
- label: 'JavaScript',
90
- syntax: 'javascript',
91
- generate: function (_a) {
92
- var method = _a.method, url = _a.url, headers = _a.headers, body = _a.body;
93
- var code = '';
94
- if (body) {
95
- var lines = BodyGenerators.getJavaScriptBody(body, headers);
96
- if (lines) {
97
- // add the generated code to the top
98
- code += lines.code;
99
- body = lines.body;
100
- headers = lines.headers;
101
- }
102
- }
103
- code += "const response = await fetch('".concat(url, "', {\n method: '").concat(method.toUpperCase(), "',\n");
104
- if (headers && Object.keys(headers).length > 0) {
105
- code += indent("headers: ".concat(stringifyOpenAPI(headers, null, 2), ",\n"), 4);
106
- }
107
- if (body) {
108
- code += indent("body: ".concat(body, "\n"), 4);
109
- }
110
- code += '});\n\n';
111
- code += 'const data = await response.json();';
112
- return code;
113
- },
114
- },
115
- {
116
- id: 'python',
117
- label: 'Python',
118
- syntax: 'python',
119
- generate: function (_a) {
120
- var method = _a.method, url = _a.url, headers = _a.headers, body = _a.body;
121
- var contentType = headers === null || headers === void 0 ? void 0 : headers['Content-Type'];
122
- var code = "".concat(isJSON(contentType) ? 'import json\n' : '', "import requests\n\n");
123
- if (body) {
124
- var lines = BodyGenerators.getPythonBody(body, headers);
125
- // add the generated code to the top
126
- if (lines) {
127
- code += lines.code;
128
- body = lines.body;
129
- headers = lines.headers;
130
- }
131
- }
132
- code += "response = requests.".concat(method.toLowerCase(), "(\n");
133
- code += indent("\"".concat(url, "\",\n"), 4);
134
- if (headers && Object.keys(headers).length > 0) {
135
- code += indent("headers=".concat(stringifyOpenAPI(headers), ",\n"), 4);
136
- }
137
- if (body) {
138
- if (body === 'files') {
139
- code += indent("files=".concat(body, "\n"), 4);
140
- }
141
- else if (isJSON(contentType)) {
142
- code += indent("data=json.dumps(".concat(body, ")\n"), 4);
143
- }
144
- else {
145
- code += indent("data=".concat(body, "\n"), 4);
146
- }
147
- }
148
- code += ')\n\n';
149
- code += 'data = response.json()';
150
- return code;
151
- },
152
- },
1
+ import { json2xml } from "./json2xml.js";
2
+ import { stringifyOpenAPI } from "./stringifyOpenAPI.js";
3
+ import { isCSV, isFormData, isFormUrlEncoded, isGraphQL, isJSON, isPDF, isPlainObject, isText, isXML, isYAML } from "./contentTypeChecks.js";
4
+ import yaml from "js-yaml";
5
+
6
+ //#region src/code-samples.ts
7
+ const codeSampleGenerators = [
8
+ {
9
+ id: "http",
10
+ label: "HTTP",
11
+ syntax: "http",
12
+ generate: ({ method, url: { origin, path }, headers = {}, body }) => {
13
+ if (body) {
14
+ const bodyContent = body ? stringifyOpenAPI(body) : "";
15
+ const encoder = new TextEncoder();
16
+ const bodyString$1 = BodyGenerators.getHTTPBody(body, headers);
17
+ if (bodyString$1) body = bodyString$1;
18
+ headers = {
19
+ ...headers,
20
+ "Content-Length": encoder.encode(bodyContent).length.toString()
21
+ };
22
+ }
23
+ if (!headers.hasOwnProperty("Accept")) headers.Accept = "*/*";
24
+ const headerString = headers ? `${Object.entries(headers).map(([key, value]) => key.toLowerCase() !== "host" ? `${key}: ${value}` : "").join("\n")}\n` : "";
25
+ const bodyString = body ? `\n${body}` : "";
26
+ return `${method.toUpperCase()} ${decodeURI(path)} HTTP/1.1
27
+ Host: ${origin.replaceAll(/https*:\/\//g, "")}
28
+ ${headerString}${bodyString}`;
29
+ }
30
+ },
31
+ {
32
+ id: "curl",
33
+ label: "cURL",
34
+ syntax: "bash",
35
+ generate: ({ method, url: { origin, path }, headers, body }) => {
36
+ const separator = " \\\n";
37
+ const lines = ["curl -L"];
38
+ if (method.toUpperCase() !== "GET") lines.push(`--request ${method.toUpperCase()}`);
39
+ lines.push(`--url '${origin}${path}'`);
40
+ if (body) {
41
+ const bodyContent = BodyGenerators.getCurlBody(body, headers);
42
+ if (bodyContent) {
43
+ body = bodyContent.body;
44
+ headers = bodyContent.headers;
45
+ }
46
+ }
47
+ if (headers && Object.keys(headers).length > 0) Object.entries(headers).forEach(([key, value]) => {
48
+ lines.push(`--header '${key}: ${value}'`);
49
+ });
50
+ if (body) if (Array.isArray(body)) lines.push(...body);
51
+ else lines.push(body);
52
+ return lines.map((line, index) => index > 0 ? indent(line, 2) : line).join(separator);
53
+ }
54
+ },
55
+ {
56
+ id: "javascript",
57
+ label: "JavaScript",
58
+ syntax: "javascript",
59
+ generate: ({ method, url: { origin, path }, headers, body }) => {
60
+ let code = "";
61
+ if (body) {
62
+ const lines = BodyGenerators.getJavaScriptBody(body, headers);
63
+ if (lines) {
64
+ code += lines.code;
65
+ body = lines.body;
66
+ headers = lines.headers;
67
+ }
68
+ }
69
+ code += `const response = await fetch('${origin}${path}', {
70
+ method: '${method.toUpperCase()}',\n`;
71
+ if (headers && Object.keys(headers).length > 0) code += indent(`headers: ${stringifyOpenAPI(headers, null, 2)},\n`, 4);
72
+ if (body) code += indent(`body: ${body}\n`, 4);
73
+ code += "});\n\n";
74
+ code += "const data = await response.json();";
75
+ return code;
76
+ }
77
+ },
78
+ {
79
+ id: "python",
80
+ label: "Python",
81
+ syntax: "python",
82
+ generate: ({ method, url: { origin, path }, headers, body }) => {
83
+ const contentType = headers?.["Content-Type"];
84
+ let code = `${isJSON(contentType) ? "import json\n" : ""}import requests\n\n`;
85
+ if (body) {
86
+ const lines = BodyGenerators.getPythonBody(body, headers);
87
+ if (lines) {
88
+ code += lines.code;
89
+ body = lines.body;
90
+ headers = lines.headers;
91
+ }
92
+ }
93
+ code += `response = requests.${method.toLowerCase()}(\n`;
94
+ code += indent(`"${origin}${path}",\n`, 4);
95
+ if (headers && Object.keys(headers).length > 0) code += indent(`headers=${stringifyOpenAPI(headers)},\n`, 4);
96
+ if (body) if (body === "files") code += indent(`files=${body}\n`, 4);
97
+ else if (isJSON(contentType)) code += indent(`data=json.dumps(${body})\n`, 4);
98
+ else code += indent(`data=${body}\n`, 4);
99
+ code += ")\n\n";
100
+ code += "data = response.json()";
101
+ return code;
102
+ }
103
+ }
153
104
  ];
154
105
  function indent(code, spaces) {
155
- var indent = ' '.repeat(spaces);
156
- return code
157
- .split('\n')
158
- .map(function (line) { return (line ? indent + line : ''); })
159
- .join('\n');
106
+ const indent$1 = " ".repeat(spaces);
107
+ return code.split("\n").map((line) => line ? indent$1 + line : "").join("\n");
160
108
  }
161
- export function parseHostAndPath(url) {
162
- try {
163
- var urlObj = new URL(url);
164
- var path = urlObj.pathname || '/';
165
- return { host: urlObj.host, path: path };
166
- }
167
- catch (_e) {
168
- // If the URL was invalid do our best to parse the URL.
169
- // Check for the protocol part and pull it off to grab the host
170
- var splitted = url.split('//');
171
- var fullUrl = splitted[1] ? splitted[1] : url;
172
- // separate paths from the first element (host)
173
- var parts = fullUrl.split('/');
174
- // pull off the host (mutates)
175
- var host = parts.shift();
176
- // add a leading slash and join the paths again
177
- var path = "/".concat(parts.join('/'));
178
- return { host: host, path: path };
179
- }
109
+ function parseHostAndPath(url) {
110
+ try {
111
+ const urlObj = new URL(url);
112
+ const path = urlObj.pathname || "/";
113
+ return {
114
+ host: urlObj.host,
115
+ path
116
+ };
117
+ } catch (_e) {
118
+ const splitted = url.split("//");
119
+ const parts = (splitted[1] ? splitted[1] : url).split("/");
120
+ return {
121
+ host: parts.shift(),
122
+ path: `/${parts.join("/")}`
123
+ };
124
+ }
180
125
  }
181
- // Body Generators
182
- var BodyGenerators = {
183
- getCurlBody: function (body, headers) {
184
- if (!body || !headers)
185
- return undefined;
186
- // Copy headers to avoid mutating the original object
187
- var headersCopy = __assign({}, headers);
188
- var contentType = headersCopy['Content-Type'] || '';
189
- if (isFormData(contentType)) {
190
- body = isPlainObject(body)
191
- ? Object.entries(body).map(function (_a) {
192
- var key = _a[0], value = _a[1];
193
- return "--form '".concat(key, "=").concat(String(value), "'");
194
- })
195
- : "--form 'file=@".concat(body, "'");
196
- }
197
- else if (isFormUrlEncoded(contentType)) {
198
- body = isPlainObject(body)
199
- ? "--data '".concat(Object.entries(body)
200
- .map(function (_a) {
201
- var key = _a[0], value = _a[1];
202
- return "".concat(key, "=").concat(String(value));
203
- })
204
- .join('&'), "'")
205
- : String(body);
206
- }
207
- else if (isText(contentType)) {
208
- body = "--data '".concat(String(body).replace(/"/g, ''), "'");
209
- }
210
- else if (isXML(contentType)) {
211
- // Convert to XML and ensure proper formatting
212
- body = "--data-binary $'".concat(convertBodyToXML(body), "'");
213
- }
214
- else if (isCSV(contentType)) {
215
- // We use --data-binary to avoid cURL converting newlines to \r\n
216
- body = "--data-binary $'".concat(stringifyOpenAPI(body).replace(/"/g, '').replace(/\\n/g, '\n'), "'");
217
- }
218
- else if (isGraphQL(contentType)) {
219
- body = "--data '".concat(stringifyOpenAPI(body), "'");
220
- // Set Content-Type to application/json for GraphQL, recommended by GraphQL spec
221
- headersCopy['Content-Type'] = 'application/json';
222
- }
223
- else if (isPDF(contentType)) {
224
- // We use --data-binary to avoid cURL converting newlines to \r\n
225
- body = "--data-binary '@".concat(String(body), "'");
226
- }
227
- else if (isYAML(contentType)) {
228
- body = "--data-binary $'".concat(yaml.dump(body).replace(/'/g, '').replace(/\\n/g, '\n'), "'");
229
- }
230
- else {
231
- body = "--data '".concat(stringifyOpenAPI(body, null, 2).replace(/\\n/g, '\n'), "'");
232
- }
233
- return {
234
- body: body,
235
- headers: headersCopy,
236
- };
237
- },
238
- getJavaScriptBody: function (body, headers) {
239
- if (!body || !headers)
240
- return;
241
- var code = '';
242
- // Copy headers to avoid mutating the original object
243
- var headersCopy = __assign({}, headers);
244
- var contentType = headersCopy['Content-Type'] || '';
245
- // Use FormData for file uploads
246
- if (isFormData(contentType)) {
247
- code += 'const formData = new FormData();\n\n';
248
- if (isPlainObject(body)) {
249
- Object.entries(body).forEach(function (_a) {
250
- var key = _a[0], value = _a[1];
251
- code += "formData.append(\"".concat(key, "\", \"").concat(String(value), "\");\n");
252
- });
253
- }
254
- else if (typeof body === 'string') {
255
- code += "formData.append(\"file\", \"".concat(body, "\");\n");
256
- }
257
- code += '\n';
258
- body = 'formData';
259
- }
260
- else if (isFormUrlEncoded(contentType)) {
261
- // Use URLSearchParams for form-urlencoded data
262
- code += 'const params = new URLSearchParams();\n\n';
263
- if (isPlainObject(body)) {
264
- Object.entries(body).forEach(function (_a) {
265
- var key = _a[0], value = _a[1];
266
- code += "params.append(\"".concat(key, "\", \"").concat(String(value), "\");\n");
267
- });
268
- }
269
- code += '\n';
270
- body = 'params.toString()';
271
- }
272
- else if (isGraphQL(contentType)) {
273
- if (isPlainObject(body)) {
274
- Object.entries(body).forEach(function (_a) {
275
- var key = _a[0], value = _a[1];
276
- code += "const ".concat(key, " = `\n").concat(indent(String(value), 4), "`;\n\n");
277
- });
278
- body = "JSON.stringify({ ".concat(Object.keys(body).join(', '), " })");
279
- // Set Content-Type to application/json for GraphQL, recommended by GraphQL spec
280
- headersCopy['Content-Type'] = 'application/json';
281
- }
282
- else {
283
- code += "const query = `\n".concat(indent(String(body), 4), "`;\n\n");
284
- body = 'JSON.stringify(query)';
285
- }
286
- }
287
- else if (isCSV(contentType)) {
288
- code += 'const csv = `\n';
289
- code += indent(String(body), 4);
290
- code += '`;\n\n';
291
- body = 'csv';
292
- }
293
- else if (isPDF(contentType)) {
294
- // Use FormData to upload PDF files
295
- code += 'const formData = new FormData();\n\n';
296
- code += "formData.append(\"file\", \"".concat(body, "\");\n\n");
297
- body = 'formData';
298
- }
299
- else if (isXML(contentType)) {
300
- code += 'const xml = `\n';
301
- // Convert JSON to XML if needed
302
- code += indent(convertBodyToXML(body), 4);
303
- code += '`;\n\n';
304
- body = 'xml';
305
- }
306
- else if (isYAML(contentType)) {
307
- code += "const yamlBody = `\n".concat(indent(yaml.dump(body), 4), "`;\n\n");
308
- body = 'yamlBody';
309
- }
310
- else if (isText(contentType)) {
311
- body = stringifyOpenAPI(body, null, 2);
312
- }
313
- else {
314
- body = "JSON.stringify(".concat(stringifyOpenAPI(body, null, 2), ")");
315
- }
316
- return { body: body, code: code, headers: headersCopy };
317
- },
318
- getPythonBody: function (body, headers) {
319
- if (!body || !headers)
320
- return;
321
- var code = '';
322
- var contentType = headers['Content-Type'] || '';
323
- if (isFormData(contentType)) {
324
- code += 'files = {\n';
325
- if (isPlainObject(body)) {
326
- Object.entries(body).forEach(function (_a) {
327
- var key = _a[0], value = _a[1];
328
- code += "".concat(indent("\"".concat(key, "\": \"").concat(String(value), "\","), 4), "\n");
329
- });
330
- }
331
- code += '}\n\n';
332
- body = 'files';
333
- }
334
- else if (isPDF(contentType)) {
335
- code += 'files = {\n';
336
- code += "".concat(indent("\"file\": \"".concat(body, "\","), 4), "\n");
337
- code += '}\n\n';
338
- body = 'files';
339
- }
340
- else if (isXML(contentType)) {
341
- // Convert JSON to XML if needed
342
- body = JSON.stringify(convertBodyToXML(body));
343
- }
344
- else if (isYAML(contentType)) {
345
- code += "yamlBody = \"\"\"\n".concat(indent(yaml.dump(body), 4), "\"\"\"\n\n");
346
- body = 'yamlBody';
347
- }
348
- else {
349
- body = stringifyOpenAPI(body, function (_key, value) {
350
- switch (value) {
351
- case true:
352
- return '$$__TRUE__$$';
353
- case false:
354
- return '$$__FALSE__$$';
355
- case null:
356
- return '$$__NULL__$$';
357
- default:
358
- return value;
359
- }
360
- }, 2)
361
- .replaceAll('"$$__TRUE__$$"', 'True')
362
- .replaceAll('"$$__FALSE__$$"', 'False')
363
- .replaceAll('"$$__NULL__$$"', 'None');
364
- }
365
- return { body: body, code: code, headers: headers };
366
- },
367
- getHTTPBody: function (body, headers) {
368
- if (!body || !headers)
369
- return undefined;
370
- var contentType = headers['Content-Type'] || '';
371
- var typeHandlers = {
372
- pdf: function () { return "".concat(stringifyOpenAPI(body, null, 2)); },
373
- formUrlEncoded: function () {
374
- var encoded = isPlainObject(body)
375
- ? Object.entries(body)
376
- .map(function (_a) {
377
- var key = _a[0], value = _a[1];
378
- return "".concat(key, "=").concat(stringifyOpenAPI(value));
379
- })
380
- .join('&')
381
- : stringifyOpenAPI(body);
382
- return "\"".concat(encoded.replace(/"/g, "'"), "\"");
383
- },
384
- text: function () { return "\"".concat(String(body), "\""); },
385
- xml: function () {
386
- // Convert JSON to XML if needed
387
- return "\"".concat(convertBodyToXML(body), "\"");
388
- },
389
- yaml: function () { return "\"".concat(yaml.dump(body).replace(/"/g, '\\"'), "\""); },
390
- csv: function () { return "\"".concat(stringifyOpenAPI(body).replace(/"/g, ''), "\""); },
391
- default: function () { return "".concat(stringifyOpenAPI(body, null, 2)); },
392
- };
393
- if (isPDF(contentType))
394
- return typeHandlers.pdf();
395
- if (isFormUrlEncoded(contentType))
396
- return typeHandlers.formUrlEncoded();
397
- if (isText(contentType))
398
- return typeHandlers.text();
399
- if (isXML(contentType))
400
- return typeHandlers.xml();
401
- if (isYAML(contentType))
402
- return typeHandlers.yaml();
403
- if (isCSV(contentType))
404
- return typeHandlers.csv();
405
- return typeHandlers.default();
406
- },
126
+ const BodyGenerators = {
127
+ getCurlBody(body, headers) {
128
+ if (!body || !headers) return void 0;
129
+ const headersCopy = { ...headers };
130
+ const contentType = headersCopy["Content-Type"] || "";
131
+ if (isFormData(contentType)) body = isPlainObject(body) ? Object.entries(body).map(([key, value]) => `--form '${key}=${String(value)}'`) : `--form 'file=@${body}'`;
132
+ else if (isFormUrlEncoded(contentType)) body = isPlainObject(body) ? `--data '${Object.entries(body).map(([key, value]) => `${key}=${String(value)}`).join("&")}'` : String(body);
133
+ else if (isText(contentType)) body = `--data '${String(body).replace(/"/g, "")}'`;
134
+ else if (isXML(contentType)) body = `--data-binary $'${convertBodyToXML(body)}'`;
135
+ else if (isCSV(contentType)) body = `--data-binary $'${stringifyOpenAPI(body).replace(/"/g, "").replace(/\\n/g, "\n")}'`;
136
+ else if (isGraphQL(contentType)) {
137
+ body = `--data '${stringifyOpenAPI(body)}'`;
138
+ headersCopy["Content-Type"] = "application/json";
139
+ } else if (isPDF(contentType)) body = `--data-binary '@${String(body)}'`;
140
+ else if (isYAML(contentType)) body = `--data-binary $'${yaml.dump(body).replace(/'/g, "").replace(/\\n/g, "\n")}'`;
141
+ else body = `--data '${stringifyOpenAPI(body, null, 2).replace(/\\n/g, "\n")}'`;
142
+ return {
143
+ body,
144
+ headers: headersCopy
145
+ };
146
+ },
147
+ getJavaScriptBody: (body, headers) => {
148
+ if (!body || !headers) return;
149
+ let code = "";
150
+ const headersCopy = { ...headers };
151
+ const contentType = headersCopy["Content-Type"] || "";
152
+ if (isFormData(contentType)) {
153
+ code += "const formData = new FormData();\n\n";
154
+ if (isPlainObject(body)) Object.entries(body).forEach(([key, value]) => {
155
+ code += `formData.append("${key}", "${String(value)}");\n`;
156
+ });
157
+ else if (typeof body === "string") code += `formData.append("file", "${body}");\n`;
158
+ code += "\n";
159
+ body = "formData";
160
+ } else if (isFormUrlEncoded(contentType)) {
161
+ code += "const params = new URLSearchParams();\n\n";
162
+ if (isPlainObject(body)) Object.entries(body).forEach(([key, value]) => {
163
+ code += `params.append("${key}", "${String(value)}");\n`;
164
+ });
165
+ code += "\n";
166
+ body = "params.toString()";
167
+ } else if (isGraphQL(contentType)) if (isPlainObject(body)) {
168
+ Object.entries(body).forEach(([key, value]) => {
169
+ code += `const ${key} = \`\n${indent(String(value), 4)}\`;\n\n`;
170
+ });
171
+ body = `JSON.stringify({ ${Object.keys(body).join(", ")} })`;
172
+ headersCopy["Content-Type"] = "application/json";
173
+ } else {
174
+ code += `const query = \`\n${indent(String(body), 4)}\`;\n\n`;
175
+ body = "JSON.stringify(query)";
176
+ }
177
+ else if (isCSV(contentType)) {
178
+ code += "const csv = `\n";
179
+ code += indent(String(body), 4);
180
+ code += "`;\n\n";
181
+ body = "csv";
182
+ } else if (isPDF(contentType)) {
183
+ code += "const formData = new FormData();\n\n";
184
+ code += `formData.append("file", "${body}");\n\n`;
185
+ body = "formData";
186
+ } else if (isXML(contentType)) {
187
+ code += "const xml = `\n";
188
+ code += indent(convertBodyToXML(body), 4);
189
+ code += "`;\n\n";
190
+ body = "xml";
191
+ } else if (isYAML(contentType)) {
192
+ code += `const yamlBody = \`\n${indent(yaml.dump(body), 4)}\`;\n\n`;
193
+ body = "yamlBody";
194
+ } else if (isText(contentType)) body = stringifyOpenAPI(body, null, 2);
195
+ else body = `JSON.stringify(${stringifyOpenAPI(body, null, 2)})`;
196
+ return {
197
+ body,
198
+ code,
199
+ headers: headersCopy
200
+ };
201
+ },
202
+ getPythonBody: (body, headers) => {
203
+ if (!body || !headers) return;
204
+ let code = "";
205
+ const contentType = headers["Content-Type"] || "";
206
+ if (isFormData(contentType)) {
207
+ code += "files = {\n";
208
+ if (isPlainObject(body)) Object.entries(body).forEach(([key, value]) => {
209
+ code += `${indent(`"${key}": "${String(value)}",`, 4)}\n`;
210
+ });
211
+ code += "}\n\n";
212
+ body = "files";
213
+ } else if (isPDF(contentType)) {
214
+ code += "files = {\n";
215
+ code += `${indent(`"file": "${body}",`, 4)}\n`;
216
+ code += "}\n\n";
217
+ body = "files";
218
+ } else if (isXML(contentType)) body = JSON.stringify(convertBodyToXML(body));
219
+ else if (isYAML(contentType)) {
220
+ code += `yamlBody = \"\"\"\n${indent(yaml.dump(body), 4)}\"\"\"\n\n`;
221
+ body = "yamlBody";
222
+ } else body = stringifyOpenAPI(body, (_key, value) => {
223
+ switch (value) {
224
+ case true: return "$$__TRUE__$$";
225
+ case false: return "$$__FALSE__$$";
226
+ case null: return "$$__NULL__$$";
227
+ default: return value;
228
+ }
229
+ }, 2).replaceAll("\"$$__TRUE__$$\"", "True").replaceAll("\"$$__FALSE__$$\"", "False").replaceAll("\"$$__NULL__$$\"", "None");
230
+ return {
231
+ body,
232
+ code,
233
+ headers
234
+ };
235
+ },
236
+ getHTTPBody: (body, headers) => {
237
+ if (!body || !headers) return void 0;
238
+ const contentType = headers["Content-Type"] || "";
239
+ const typeHandlers = {
240
+ pdf: () => `${stringifyOpenAPI(body, null, 2)}`,
241
+ formUrlEncoded: () => {
242
+ return `"${(isPlainObject(body) ? Object.entries(body).map(([key, value]) => `${key}=${stringifyOpenAPI(value)}`).join("&") : stringifyOpenAPI(body)).replace(/"/g, "'")}"`;
243
+ },
244
+ text: () => `"${String(body)}"`,
245
+ xml: () => {
246
+ return `"${convertBodyToXML(body)}"`;
247
+ },
248
+ yaml: () => `"${yaml.dump(body).replace(/"/g, "\\\"")}"`,
249
+ csv: () => `"${stringifyOpenAPI(body).replace(/"/g, "")}"`,
250
+ default: () => `${stringifyOpenAPI(body, null, 2)}`
251
+ };
252
+ if (isPDF(contentType)) return typeHandlers.pdf();
253
+ if (isFormUrlEncoded(contentType)) return typeHandlers.formUrlEncoded();
254
+ if (isText(contentType)) return typeHandlers.text();
255
+ if (isXML(contentType)) return typeHandlers.xml();
256
+ if (isYAML(contentType)) return typeHandlers.yaml();
257
+ if (isCSV(contentType)) return typeHandlers.csv();
258
+ return typeHandlers.default();
259
+ }
407
260
  };
408
261
  /**
409
- * Converts a body to XML format
410
- */
262
+ * Converts a body to XML format
263
+ */
411
264
  function convertBodyToXML(body) {
412
- // If body is already a string and looks like XML, return it as is
413
- if (typeof body === 'string' && body.trim().startsWith('<')) {
414
- return body;
415
- }
416
- // If body is not an object, try to parse it as JSON
417
- if (typeof body !== 'object' || body === null) {
418
- try {
419
- body = JSON.parse(body);
420
- }
421
- catch (_a) {
422
- // If parsing fails, return the original body
423
- return body;
424
- }
425
- }
426
- return json2xml(body).replace(/"/g, '').replace(/\\n/g, '\n').replace(/\\t/g, '\t');
265
+ if (typeof body === "string" && body.trim().startsWith("<")) return body;
266
+ if (typeof body !== "object" || body === null) try {
267
+ body = JSON.parse(body);
268
+ } catch {
269
+ return body;
270
+ }
271
+ return json2xml(body).replace(/"/g, "").replace(/\\n/g, "\n").replace(/\\t/g, " ");
427
272
  }
273
+
274
+ //#endregion
275
+ export { codeSampleGenerators, parseHostAndPath };