@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,714 +0,0 @@
1
- import { describe, expect, it } from 'bun:test';
2
- import { type CodeSampleInput, codeSampleGenerators, parseHostAndPath } from './code-samples';
3
-
4
- it('should parse host and path on url strings properly', () => {
5
- const testUrls = [
6
- '//example.com/path',
7
- '//sub.example.com',
8
- '//example:8080/v1/test',
9
- 'ftp://domain.com',
10
- '//example.com/com.example',
11
- 'https://example.com/path.com/another.com',
12
- 'example.com/firstPath/secondPath',
13
- ];
14
-
15
- expect(testUrls.map(parseHostAndPath)).toEqual([
16
- {
17
- host: 'example.com',
18
- path: '/path',
19
- },
20
-
21
- {
22
- host: 'sub.example.com',
23
- path: '/',
24
- },
25
-
26
- {
27
- host: 'example:8080',
28
- path: '/v1/test',
29
- },
30
-
31
- {
32
- host: 'domain.com',
33
- path: '/',
34
- },
35
-
36
- {
37
- host: 'example.com',
38
- path: '/com.example',
39
- },
40
-
41
- {
42
- host: 'example.com',
43
- path: '/path.com/another.com',
44
- },
45
-
46
- {
47
- host: 'example.com',
48
- path: '/firstPath/secondPath',
49
- },
50
- ]);
51
- });
52
-
53
- describe('curL code sample generator', () => {
54
- const generator = codeSampleGenerators.find((g) => g.id === 'curl');
55
-
56
- expect(generator).toBeDefined();
57
-
58
- it('should format application/x-www-form-urlencoded body properly', () => {
59
- const input: CodeSampleInput = {
60
- method: 'GET',
61
- url: 'https://example.com/path',
62
- headers: {
63
- 'Content-Type': 'application/x-www-form-urlencoded',
64
- },
65
- body: {
66
- key: 'value',
67
- },
68
- };
69
-
70
- const output = generator?.generate(input);
71
-
72
- expect(output).toBe(
73
- "curl -L \\\n --url 'https://example.com/path' \\\n --header 'Content-Type: application/x-www-form-urlencoded' \\\n --data 'key=value'"
74
- );
75
- });
76
-
77
- it('should format application/json body properly', () => {
78
- const input: CodeSampleInput = {
79
- method: 'GET',
80
- url: 'https://example.com/path',
81
- headers: {
82
- 'Content-Type': 'application/json',
83
- },
84
- body: {
85
- key: 'value',
86
- },
87
- };
88
-
89
- const output = generator?.generate(input);
90
-
91
- expect(output).toBe(
92
- "curl -L \\\n --url 'https://example.com/path' \\\n --header 'Content-Type: application/json' \\\n --data '{\n \"key\": \"value\"\n }'"
93
- );
94
- });
95
-
96
- it('should format application/xml body properly', () => {
97
- const input: CodeSampleInput = {
98
- method: 'GET',
99
- url: 'https://example.com/path',
100
- headers: {
101
- 'Content-Type': 'application/xml',
102
- },
103
- body: '<key>value</key>',
104
- };
105
-
106
- const output = generator?.generate(input);
107
-
108
- expect(output).toBe(
109
- "curl -L \\\n --url 'https://example.com/path' \\\n --header 'Content-Type: application/xml' \\\n --data-binary $'<key>value</key>'"
110
- );
111
- });
112
-
113
- it('should convert json to xml body properly', () => {
114
- const input: CodeSampleInput = {
115
- method: 'GET',
116
- url: 'https://example.com/path',
117
- headers: {
118
- 'Content-Type': 'application/xml',
119
- },
120
- body: '{ "key": "value" }',
121
- };
122
-
123
- const output = generator?.generate(input);
124
-
125
- expect(output).toBe(
126
- "curl -L \\\n --url 'https://example.com/path' \\\n --header 'Content-Type: application/xml' \\\n --data-binary $'<?xml version=1.0?>\n <key>value</key>\n '"
127
- );
128
- });
129
-
130
- it('should format application/graphql body properly', () => {
131
- const input: CodeSampleInput = {
132
- method: 'GET',
133
- url: 'https://example.com/path',
134
- headers: {
135
- 'Content-Type': 'application/graphql',
136
- },
137
- body: '{ key }',
138
- };
139
-
140
- const output = generator?.generate(input);
141
-
142
- expect(output).toBe(
143
- "curl -L \\\n --url 'https://example.com/path' \\\n --header 'Content-Type: application/json' \\\n --data '\"{ key }\"'"
144
- );
145
- });
146
-
147
- it('should format text/csv body properly', () => {
148
- const input: CodeSampleInput = {
149
- method: 'GET',
150
- url: 'https://example.com/path',
151
- headers: {
152
- 'Content-Type': 'text/csv',
153
- },
154
- body: 'key,value',
155
- };
156
-
157
- const output = generator?.generate(input);
158
-
159
- expect(output).toBe(
160
- "curl -L \\\n --url 'https://example.com/path' \\\n --header 'Content-Type: text/csv' \\\n --data-binary $'key,value'"
161
- );
162
- });
163
-
164
- it('should format application/pdf body properly', () => {
165
- const input: CodeSampleInput = {
166
- method: 'GET',
167
- url: 'https://example.com/path',
168
- headers: {
169
- 'Content-Type': 'application/pdf',
170
- },
171
- body: 'file',
172
- };
173
-
174
- const output = generator?.generate(input);
175
-
176
- expect(output).toBe(
177
- "curl -L \\\n --url 'https://example.com/path' \\\n --header 'Content-Type: application/pdf' \\\n --data-binary '@file'"
178
- );
179
- });
180
-
181
- it('should format text/plain body properly', () => {
182
- const input: CodeSampleInput = {
183
- method: 'GET',
184
- url: 'https://example.com/path',
185
- headers: {
186
- 'Content-Type': 'text/plain',
187
- },
188
- body: 'value',
189
- };
190
-
191
- const output = generator?.generate(input);
192
-
193
- expect(output).toBe(
194
- "curl -L \\\n --url 'https://example.com/path' \\\n --header 'Content-Type: text/plain' \\\n --data 'value'"
195
- );
196
- });
197
-
198
- it('should format multipart/form-data body properly', () => {
199
- const input: CodeSampleInput = {
200
- method: 'GET',
201
- url: 'https://example.com/path',
202
- headers: {
203
- 'Content-Type': 'multipart/form-data',
204
- },
205
- body: {
206
- key: 'value',
207
- },
208
- };
209
-
210
- const output = generator?.generate(input);
211
-
212
- expect(output).toBe(
213
- "curl -L \\\n --url 'https://example.com/path' \\\n --header 'Content-Type: multipart/form-data' \\\n --form 'key=value'"
214
- );
215
- });
216
- });
217
-
218
- describe('javascript code sample generator', () => {
219
- const generator = codeSampleGenerators.find((g) => g.id === 'javascript');
220
-
221
- expect(generator).toBeDefined();
222
-
223
- it('should format application/x-www-form-urlencoded body properly', () => {
224
- const input: CodeSampleInput = {
225
- method: 'GET',
226
- url: 'https://example.com/path',
227
- headers: {
228
- 'Content-Type': 'application/x-www-form-urlencoded',
229
- },
230
- body: {
231
- key: 'value',
232
- },
233
- };
234
-
235
- const output = generator?.generate(input);
236
-
237
- expect(output).toBe(
238
- 'const params = new URLSearchParams();\n\nparams.append("key", "value");\n\nconst response = await fetch(\'https://example.com/path\', {\n method: \'GET\',\n headers: {\n "Content-Type": "application/x-www-form-urlencoded"\n },\n body: params.toString()\n});\n\nconst data = await response.json();'
239
- );
240
- });
241
-
242
- it('should format application/json body properly', () => {
243
- const input: CodeSampleInput = {
244
- method: 'GET',
245
- url: 'https://example.com/path',
246
- headers: {
247
- 'Content-Type': 'application/json',
248
- },
249
- body: {
250
- key: 'value',
251
- },
252
- };
253
-
254
- const output = generator?.generate(input);
255
-
256
- expect(output).toBe(
257
- 'const response = await fetch(\'https://example.com/path\', {\n method: \'GET\',\n headers: {\n "Content-Type": "application/json"\n },\n body: JSON.stringify({\n "key": "value"\n })\n});\n\nconst data = await response.json();'
258
- );
259
- });
260
-
261
- it('should format application/xml body properly', () => {
262
- const input: CodeSampleInput = {
263
- method: 'GET',
264
- url: 'https://example.com/path',
265
- headers: {
266
- 'Content-Type': 'application/xml',
267
- },
268
- body: '<key>value</key>',
269
- };
270
-
271
- const output = generator?.generate(input);
272
-
273
- expect(output).toBe(
274
- 'const xml = `\n <key>value</key>`;\n\nconst response = await fetch(\'https://example.com/path\', {\n method: \'GET\',\n headers: {\n "Content-Type": "application/xml"\n },\n body: xml\n});\n\nconst data = await response.json();'
275
- );
276
- });
277
-
278
- it('should convert json to xml body properly', () => {
279
- const input: CodeSampleInput = {
280
- method: 'GET',
281
- url: 'https://example.com/path',
282
- headers: {
283
- 'Content-Type': 'application/xml',
284
- },
285
- body: '{ "key": "value" }',
286
- };
287
-
288
- const output = generator?.generate(input);
289
-
290
- expect(output).toBe(
291
- 'const xml = `\n <?xml version=1.0?>\n <key>value</key>\n`;\n\nconst response = await fetch(\'https://example.com/path\', {\n method: \'GET\',\n headers: {\n "Content-Type": "application/xml"\n },\n body: xml\n});\n\nconst data = await response.json();'
292
- );
293
- });
294
-
295
- it('should format application/graphql body properly', () => {
296
- const input: CodeSampleInput = {
297
- method: 'GET',
298
- url: 'https://example.com/path',
299
- headers: {
300
- 'Content-Type': 'application/graphql',
301
- },
302
- body: '{ key }',
303
- };
304
-
305
- const output = generator?.generate(input);
306
-
307
- expect(output).toBe(
308
- 'const query = `\n { key }`;\n\nconst response = await fetch(\'https://example.com/path\', {\n method: \'GET\',\n headers: {\n "Content-Type": "application/graphql"\n },\n body: JSON.stringify(query)\n});\n\nconst data = await response.json();'
309
- );
310
- });
311
-
312
- it('should format text/csv body properly', () => {
313
- const input: CodeSampleInput = {
314
- method: 'GET',
315
- url: 'https://example.com/path',
316
- headers: {
317
- 'Content-Type': 'text/csv',
318
- },
319
- body: 'key,value',
320
- };
321
-
322
- const output = generator?.generate(input);
323
-
324
- expect(output).toBe(
325
- 'const csv = `\n key,value`;\n\nconst response = await fetch(\'https://example.com/path\', {\n method: \'GET\',\n headers: {\n "Content-Type": "text/csv"\n },\n body: csv\n});\n\nconst data = await response.json();'
326
- );
327
- });
328
-
329
- it('should format application/pdf body properly', () => {
330
- const input: CodeSampleInput = {
331
- method: 'GET',
332
- url: 'https://example.com/path',
333
- headers: {
334
- 'Content-Type': 'application/pdf',
335
- },
336
- body: 'file',
337
- };
338
-
339
- const output = generator?.generate(input);
340
-
341
- expect(output).toBe(
342
- 'const formData = new FormData();\n\nformData.append("file", "file");\n\nconst response = await fetch(\'https://example.com/path\', {\n method: \'GET\',\n headers: {\n "Content-Type": "application/pdf"\n },\n body: formData\n});\n\nconst data = await response.json();'
343
- );
344
- });
345
-
346
- it('should format text/plain body properly', () => {
347
- const input: CodeSampleInput = {
348
- method: 'GET',
349
- url: 'https://example.com/path',
350
- headers: {
351
- 'Content-Type': 'text/plain',
352
- },
353
- body: 'value',
354
- };
355
-
356
- const output = generator?.generate(input);
357
-
358
- expect(output).toBe(
359
- 'const response = await fetch(\'https://example.com/path\', {\n method: \'GET\',\n headers: {\n "Content-Type": "text/plain"\n },\n body: "value"\n});\n\nconst data = await response.json();'
360
- );
361
- });
362
-
363
- it('should format multipart/form-data body properly', () => {
364
- const input: CodeSampleInput = {
365
- method: 'GET',
366
- url: 'https://example.com/path',
367
- headers: {
368
- 'Content-Type': 'multipart/form-data',
369
- },
370
- body: {
371
- key: 'value',
372
- },
373
- };
374
-
375
- const output = generator?.generate(input);
376
-
377
- expect(output).toBe(
378
- 'const formData = new FormData();\n\nformData.append("key", "value");\n\nconst response = await fetch(\'https://example.com/path\', {\n method: \'GET\',\n headers: {\n "Content-Type": "multipart/form-data"\n },\n body: formData\n});\n\nconst data = await response.json();'
379
- );
380
- });
381
- });
382
-
383
- describe('python code sample generator', () => {
384
- const generator = codeSampleGenerators.find((g) => g.id === 'python');
385
-
386
- expect(generator).toBeDefined();
387
-
388
- it('should format application/x-www-form-urlencoded body properly', () => {
389
- const input: CodeSampleInput = {
390
- method: 'GET',
391
- url: 'https://example.com/path',
392
- headers: {
393
- 'Content-Type': 'application/x-www-form-urlencoded',
394
- },
395
- body: {
396
- key: 'value',
397
- },
398
- };
399
-
400
- const output = generator?.generate(input);
401
-
402
- expect(output).toBe(
403
- 'import requests\n\nresponse = requests.get(\n "https://example.com/path",\n headers={"Content-Type":"application/x-www-form-urlencoded"},\n data={\n "key": "value"\n }\n)\n\ndata = response.json()'
404
- );
405
- });
406
-
407
- it('should format application/json body properly', () => {
408
- const input: CodeSampleInput = {
409
- method: 'POST',
410
- url: 'https://example.com/path',
411
- headers: {
412
- 'Content-Type': 'application/json',
413
- },
414
- body: {
415
- key: 'value',
416
- truethy: true,
417
- falsey: false,
418
- nullish: null,
419
- },
420
- };
421
-
422
- const output = generator?.generate(input);
423
-
424
- expect(output).toBe(
425
- 'import json\nimport requests\n\nresponse = requests.post(\n "https://example.com/path",\n headers={"Content-Type":"application/json"},\n data=json.dumps({\n "key": "value",\n "truethy": True,\n "falsey": False,\n "nullish": None\n })\n)\n\ndata = response.json()'
426
- );
427
- });
428
-
429
- it('should format application/xml body properly', () => {
430
- const input: CodeSampleInput = {
431
- method: 'GET',
432
- url: 'https://example.com/path',
433
- headers: {
434
- 'Content-Type': 'application/xml',
435
- },
436
- body: '<key>value</key>',
437
- };
438
-
439
- const output = generator?.generate(input);
440
-
441
- expect(output).toBe(
442
- 'import requests\n\nresponse = requests.get(\n "https://example.com/path",\n headers={"Content-Type":"application/xml"},\n data="<key>value</key>"\n)\n\ndata = response.json()'
443
- );
444
- });
445
-
446
- it('should convert json to xml body properly', () => {
447
- const input: CodeSampleInput = {
448
- method: 'GET',
449
- url: 'https://example.com/path',
450
- headers: {
451
- 'Content-Type': 'application/xml',
452
- },
453
- body: '{ "key": "value" }',
454
- };
455
-
456
- const output = generator?.generate(input);
457
-
458
- expect(output).toBe(
459
- 'import requests\n\nresponse = requests.get(\n "https://example.com/path",\n headers={"Content-Type":"application/xml"},\n data="<?xml version=1.0?>\\n<key>value</key>\\n"\n)\n\ndata = response.json()'
460
- );
461
- });
462
-
463
- it('should format application/graphql body properly', () => {
464
- const input: CodeSampleInput = {
465
- method: 'GET',
466
- url: 'https://example.com/path',
467
- headers: {
468
- 'Content-Type': 'application/graphql',
469
- },
470
- body: '{ key }',
471
- };
472
-
473
- const output = generator?.generate(input);
474
-
475
- expect(output).toBe(
476
- 'import requests\n\nresponse = requests.get(\n "https://example.com/path",\n headers={"Content-Type":"application/graphql"},\n data="{ key }"\n)\n\ndata = response.json()'
477
- );
478
- });
479
-
480
- it('should format text/csv body properly', () => {
481
- const input: CodeSampleInput = {
482
- method: 'GET',
483
- url: 'https://example.com/path',
484
- headers: {
485
- 'Content-Type': 'text/csv',
486
- },
487
- body: 'key,value',
488
- };
489
-
490
- const output = generator?.generate(input);
491
-
492
- expect(output).toBe(
493
- 'import requests\n\nresponse = requests.get(\n "https://example.com/path",\n headers={"Content-Type":"text/csv"},\n data="key,value"\n)\n\ndata = response.json()'
494
- );
495
- });
496
-
497
- it('should format application/pdf body properly', () => {
498
- const input: CodeSampleInput = {
499
- method: 'GET',
500
- url: 'https://example.com/path',
501
- headers: {
502
- 'Content-Type': 'application/pdf',
503
- },
504
- body: 'file',
505
- };
506
-
507
- const output = generator?.generate(input);
508
-
509
- expect(output).toBe(
510
- 'import requests\n\nfiles = {\n "file": "file",\n}\n\nresponse = requests.get(\n "https://example.com/path",\n headers={"Content-Type":"application/pdf"},\n files=files\n)\n\ndata = response.json()'
511
- );
512
- });
513
-
514
- it('should format text/plain body properly', () => {
515
- const input: CodeSampleInput = {
516
- method: 'GET',
517
- url: 'https://example.com/path',
518
- headers: {
519
- 'Content-Type': 'text/plain',
520
- },
521
- body: 'value',
522
- };
523
-
524
- const output = generator?.generate(input);
525
-
526
- expect(output).toBe(
527
- 'import requests\n\nresponse = requests.get(\n "https://example.com/path",\n headers={"Content-Type":"text/plain"},\n data="value"\n)\n\ndata = response.json()'
528
- );
529
- });
530
-
531
- it('should format multipart/form-data body properly', () => {
532
- const input: CodeSampleInput = {
533
- method: 'GET',
534
- url: 'https://example.com/path',
535
- headers: {
536
- 'Content-Type': 'multipart/form-data',
537
- },
538
- body: {
539
- key: 'value',
540
- },
541
- };
542
-
543
- const output = generator?.generate(input);
544
-
545
- expect(output).toBe(
546
- 'import requests\n\nfiles = {\n "key": "value",\n}\n\nresponse = requests.get(\n "https://example.com/path",\n headers={"Content-Type":"multipart/form-data"},\n files=files\n)\n\ndata = response.json()'
547
- );
548
- });
549
- });
550
-
551
- describe('http code sample generator', () => {
552
- const generator = codeSampleGenerators.find((g) => g.id === 'http');
553
-
554
- expect(generator).toBeDefined();
555
-
556
- it('should format application/x-www-form-urlencoded body properly', () => {
557
- const input: CodeSampleInput = {
558
- method: 'GET',
559
- url: 'https://example.com/path',
560
- headers: {
561
- 'Content-Type': 'application/x-www-form-urlencoded',
562
- },
563
- body: {
564
- key: 'value',
565
- },
566
- };
567
-
568
- const output = generator?.generate(input);
569
-
570
- expect(output).toBe(
571
- 'GET /path HTTP/1.1\nHost: example.com\nContent-Type: application/x-www-form-urlencoded\nContent-Length: 15\nAccept: */*\n\n"key=\'value\'"'
572
- );
573
- });
574
-
575
- it('should format application/json body properly', () => {
576
- const input: CodeSampleInput = {
577
- method: 'GET',
578
- url: 'https://example.com/path',
579
- headers: {
580
- 'Content-Type': 'application/json',
581
- },
582
- body: {
583
- key: 'value',
584
- },
585
- };
586
-
587
- const output = generator?.generate(input);
588
-
589
- expect(output).toBe(
590
- 'GET /path HTTP/1.1\nHost: example.com\nContent-Type: application/json\nContent-Length: 15\nAccept: */*\n\n{\n "key": "value"\n}'
591
- );
592
- });
593
-
594
- it('should format application/xml body properly', () => {
595
- const input: CodeSampleInput = {
596
- method: 'GET',
597
- url: 'https://example.com/path',
598
- headers: {
599
- 'Content-Type': 'application/xml',
600
- },
601
- body: '<key>value</key>',
602
- };
603
-
604
- const output = generator?.generate(input);
605
-
606
- expect(output).toBe(
607
- 'GET /path HTTP/1.1\nHost: example.com\nContent-Type: application/xml\nContent-Length: 18\nAccept: */*\n\n"<key>value</key>"'
608
- );
609
- });
610
-
611
- it('should convert json to xml body properly', () => {
612
- const input: CodeSampleInput = {
613
- method: 'GET',
614
- url: 'https://example.com/path',
615
- headers: {
616
- 'Content-Type': 'application/xml',
617
- },
618
- body: '{ "key": "value" }',
619
- };
620
-
621
- const output = generator?.generate(input);
622
-
623
- expect(output).toBe(
624
- 'GET /path HTTP/1.1\nHost: example.com\nContent-Type: application/xml\nContent-Length: 24\nAccept: */*\n\n"<?xml version=1.0?>\n<key>value</key>\n"'
625
- );
626
- });
627
-
628
- it('should format application/graphql body properly', () => {
629
- const input: CodeSampleInput = {
630
- method: 'GET',
631
- url: 'https://example.com/path',
632
- headers: {
633
- 'Content-Type': 'application/graphql',
634
- },
635
- body: '{ key }',
636
- };
637
-
638
- const output = generator?.generate(input);
639
-
640
- expect(output).toBe(
641
- 'GET /path HTTP/1.1\nHost: example.com\nContent-Type: application/graphql\nContent-Length: 9\nAccept: */*\n\n"{ key }"'
642
- );
643
- });
644
-
645
- it('should format text/csv body properly', () => {
646
- const input: CodeSampleInput = {
647
- method: 'GET',
648
- url: 'https://example.com/path',
649
- headers: {
650
- 'Content-Type': 'text/csv',
651
- },
652
- body: 'key,value',
653
- };
654
-
655
- const output = generator?.generate(input);
656
-
657
- expect(output).toBe(
658
- 'GET /path HTTP/1.1\nHost: example.com\nContent-Type: text/csv\nContent-Length: 11\nAccept: */*\n\n"key,value"'
659
- );
660
- });
661
-
662
- it('should format application/pdf body properly', () => {
663
- const input: CodeSampleInput = {
664
- method: 'GET',
665
- url: 'https://example.com/path',
666
- headers: {
667
- 'Content-Type': 'application/pdf',
668
- },
669
- body: 'file',
670
- };
671
-
672
- const output = generator?.generate(input);
673
-
674
- expect(output).toBe(
675
- 'GET /path HTTP/1.1\nHost: example.com\nContent-Type: application/pdf\nContent-Length: 6\nAccept: */*\n\n"file"'
676
- );
677
- });
678
-
679
- it('should format text/plain body properly', () => {
680
- const input: CodeSampleInput = {
681
- method: 'GET',
682
- url: 'https://example.com/path',
683
- headers: {
684
- 'Content-Type': 'text/plain',
685
- },
686
- body: 'value',
687
- };
688
-
689
- const output = generator?.generate(input);
690
-
691
- expect(output).toBe(
692
- 'GET /path HTTP/1.1\nHost: example.com\nContent-Type: text/plain\nContent-Length: 7\nAccept: */*\n\n"value"'
693
- );
694
- });
695
-
696
- it('should format multipart/form-data body properly', () => {
697
- const input: CodeSampleInput = {
698
- method: 'GET',
699
- url: 'https://example.com/path',
700
- headers: {
701
- 'Content-Type': 'multipart/form-data',
702
- },
703
- body: {
704
- key: 'value',
705
- },
706
- };
707
-
708
- const output = generator?.generate(input);
709
-
710
- expect(output).toBe(
711
- 'GET /path HTTP/1.1\nHost: example.com\nContent-Type: multipart/form-data\nContent-Length: 15\nAccept: */*\n\n{\n "key": "value"\n}'
712
- );
713
- });
714
- });