@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,125 +0,0 @@
1
- 'use client';
2
-
3
- import clsx from 'clsx';
4
- import type { Key } from 'react-aria';
5
- import { OpenAPISelect, OpenAPISelectItem, useSelectState } from './OpenAPISelect';
6
- import { StaticSection } from './StaticSection';
7
- import { createStateKey, getStatusCodeClassName } from './utils';
8
-
9
- type OpenAPIResponseExampleItem = OpenAPISelectItem & {
10
- statusCode: string;
11
- body: React.ReactNode;
12
- };
13
-
14
- /**
15
- * Get the state of the response examples select.
16
- */
17
- export function useResponseExamplesState(
18
- blockKey: string | undefined,
19
- initialKey: Key = 'default'
20
- ) {
21
- return useSelectState(getResponseExampleStateKey(blockKey), initialKey);
22
- }
23
-
24
- export function OpenAPIResponseExampleContent(props: {
25
- items: OpenAPIResponseExampleItem[];
26
- blockKey?: string;
27
- selectIcon?: React.ReactNode;
28
- }) {
29
- const { blockKey, items, selectIcon } = props;
30
-
31
- return (
32
- <StaticSection
33
- header={
34
- <OpenAPIResponseExampleHeader
35
- selectIcon={selectIcon}
36
- blockKey={blockKey}
37
- items={items}
38
- />
39
- }
40
- className="openapi-response-examples"
41
- >
42
- <OpenAPIResponseExampleBody blockKey={blockKey} items={items} />
43
- </StaticSection>
44
- );
45
- }
46
-
47
- function OpenAPIResponseExampleHeader(props: {
48
- items: OpenAPIResponseExampleItem[];
49
- blockKey?: string;
50
- selectIcon?: React.ReactNode;
51
- }) {
52
- const { items, blockKey, selectIcon } = props;
53
-
54
- if (items.length === 1) {
55
- const item = items[0];
56
-
57
- if (!item) {
58
- return null;
59
- }
60
-
61
- return (
62
- <span className="openapi-response-examples-statuscode-title">
63
- <OpenAPIResponseExampleItem item={item} />
64
- </span>
65
- );
66
- }
67
-
68
- return (
69
- <OpenAPISelect
70
- items={items}
71
- icon={selectIcon}
72
- stateKey={getResponseExampleStateKey(blockKey)}
73
- placement="bottom start"
74
- >
75
- {items.map((item) => (
76
- <OpenAPISelectItem key={item.key} id={item.key} value={item}>
77
- <OpenAPIResponseExampleItem item={item} />
78
- </OpenAPISelectItem>
79
- ))}
80
- </OpenAPISelect>
81
- );
82
- }
83
-
84
- function OpenAPIResponseExampleItem(props: {
85
- item: OpenAPIResponseExampleItem;
86
- }) {
87
- const { item } = props;
88
- return (
89
- <>
90
- <span
91
- className={clsx(
92
- 'openapi-statuscode',
93
- `openapi-statuscode-${getStatusCodeClassName(item.statusCode)}`,
94
- 'openapi-response-examples-statuscode'
95
- )}
96
- >
97
- {item.statusCode}
98
- </span>
99
- <span className="openapi-response-examples-statuscode-label">{item.label}</span>
100
- </>
101
- );
102
- }
103
-
104
- function OpenAPIResponseExampleBody(props: {
105
- items: OpenAPIResponseExampleItem[];
106
- blockKey?: string;
107
- }) {
108
- const { blockKey, items } = props;
109
- const state = useResponseExamplesState(blockKey, items[0]?.key);
110
-
111
- const selectedItem = items.find((item) => item.key === state.key) ?? items[0];
112
-
113
- if (!selectedItem) {
114
- return null;
115
- }
116
-
117
- return <div className="openapi-response-examples-panel">{selectedItem.body}</div>;
118
- }
119
-
120
- /**
121
- * Return the state key for the response examples.
122
- */
123
- function getResponseExampleStateKey(blockKey: string | undefined) {
124
- return createStateKey('openapi-responses', blockKey);
125
- }
@@ -1,125 +0,0 @@
1
- 'use client';
2
-
3
- import type { OpenAPIV3, OpenAPIV3_1 } from '@gitbook/openapi-parser';
4
- import clsx from 'clsx';
5
- import { Markdown } from './Markdown';
6
- import { OpenAPIDisclosureGroup } from './OpenAPIDisclosureGroup';
7
- import { OpenAPIResponse } from './OpenAPIResponse';
8
- import { useResponseExamplesState } from './OpenAPIResponseExampleContent';
9
- import { StaticSection } from './StaticSection';
10
- import type { OpenAPIClientContext } from './context';
11
- import { t } from './translate';
12
- import {
13
- createStateKey,
14
- getStatusCodeClassName,
15
- getStatusCodeDefaultLabel,
16
- resolveDescription,
17
- } from './utils';
18
-
19
- /**
20
- * Display an interactive response body.
21
- */
22
- export function OpenAPIResponses(props: {
23
- responses: OpenAPIV3.ResponsesObject | OpenAPIV3_1.ResponsesObject;
24
- context: OpenAPIClientContext;
25
- }) {
26
- const { responses, context } = props;
27
-
28
- const groups = Object.entries(responses)
29
- .filter(([_, response]) => response && typeof response === 'object')
30
- .map(([statusCode, response]: [string, OpenAPIV3.ResponseObject]) => {
31
- const tabs = (() => {
32
- // If there is no content, but there are headers, we need to show the headers
33
- if (
34
- (!response.content || !Object.keys(response.content).length) &&
35
- response.headers &&
36
- Object.keys(response.headers).length
37
- ) {
38
- return [
39
- {
40
- key: 'default',
41
- label: '',
42
- body: (
43
- <OpenAPIResponse
44
- response={response}
45
- mediaType={{}}
46
- context={context}
47
- />
48
- ),
49
- },
50
- ];
51
- }
52
-
53
- if (!response.content) {
54
- return [
55
- {
56
- key: 'default',
57
- label: '',
58
- body: (
59
- <pre className="openapi-example-empty">
60
- <p>{t(context.translation, 'no_content')}</p>
61
- </pre>
62
- ),
63
- },
64
- ];
65
- }
66
-
67
- return Object.entries(response.content ?? {}).map(([contentType, mediaType]) => ({
68
- key: contentType,
69
- label: contentType,
70
- body: (
71
- <OpenAPIResponse
72
- response={response}
73
- mediaType={mediaType}
74
- context={context}
75
- />
76
- ),
77
- }));
78
- })();
79
-
80
- const description = resolveDescription(response);
81
-
82
- return {
83
- key: statusCode,
84
- label: (
85
- <div className="openapi-response-tab-content">
86
- <span
87
- className={clsx(
88
- 'openapi-statuscode',
89
- `openapi-statuscode-${getStatusCodeClassName(statusCode)}`
90
- )}
91
- >
92
- {statusCode}
93
- </span>
94
- {description ? (
95
- <Markdown
96
- source={description}
97
- className="openapi-response-description"
98
- />
99
- ) : (
100
- getStatusCodeDefaultLabel(statusCode, context)
101
- )}
102
- </div>
103
- ),
104
- tabs,
105
- };
106
- });
107
-
108
- const state = useResponseExamplesState(context.blockKey, groups[0]?.key);
109
-
110
- return (
111
- <StaticSection header={t(context.translation, 'responses')} className="openapi-responses">
112
- <OpenAPIDisclosureGroup
113
- icon={context.icons.chevronRight}
114
- expandedKeys={state.key ? new Set([state.key]) : new Set()}
115
- onExpandedChange={(keys) => {
116
- const key = keys.values().next().value ?? null;
117
- state.setKey(key);
118
- }}
119
- groups={groups}
120
- selectIcon={context.icons.chevronDown}
121
- selectStateKey={createStateKey('response-media-types', context.blockKey)}
122
- />
123
- </StaticSection>
124
- );
125
- }
@@ -1,172 +0,0 @@
1
- import { describe, expect, it } from 'bun:test';
2
- import type { OpenAPIV3 } from '@gitbook/openapi-parser';
3
- import { getSchemaAlternatives } from './OpenAPISchema';
4
-
5
- describe('getSchemaAlternatives', () => {
6
- it('should flatten oneOf', () => {
7
- expect(
8
- getSchemaAlternatives({
9
- oneOf: [
10
- {
11
- oneOf: [
12
- {
13
- type: 'number',
14
- },
15
- {
16
- type: 'boolean',
17
- },
18
- ],
19
- },
20
- {
21
- type: 'string',
22
- },
23
- ],
24
- })
25
- ).toEqual([
26
- {
27
- type: 'number',
28
- },
29
- {
30
- type: 'boolean',
31
- },
32
- {
33
- type: 'string',
34
- },
35
- ]);
36
- });
37
-
38
- it('merges string enum', () => {
39
- expect(
40
- getSchemaAlternatives({
41
- oneOf: [
42
- {
43
- oneOf: [
44
- {
45
- type: 'string',
46
- enum: ['a', 'b'],
47
- },
48
- {
49
- type: 'string',
50
- enum: ['c', 'd'],
51
- nullable: true,
52
- },
53
- ],
54
- },
55
- ],
56
- })
57
- ).toEqual([
58
- {
59
- type: 'string',
60
- enum: ['a', 'b', 'c', 'd'],
61
- nullable: true,
62
- },
63
- ]);
64
- });
65
-
66
- it('merges objects with allOf', () => {
67
- expect(
68
- getSchemaAlternatives({
69
- allOf: [
70
- {
71
- type: 'object',
72
- properties: {
73
- name: {
74
- type: 'string',
75
- },
76
- map: {
77
- type: 'string',
78
- },
79
- description: {
80
- type: 'string',
81
- },
82
- },
83
- required: ['name'],
84
- },
85
- {
86
- type: 'object',
87
- properties: {
88
- externalId: {
89
- type: 'string',
90
- },
91
- },
92
- required: ['map', 'externalId'],
93
- },
94
- ],
95
- })
96
- ).toEqual([
97
- {
98
- type: 'object',
99
- properties: {
100
- name: {
101
- type: 'string',
102
- },
103
- map: {
104
- type: 'string',
105
- },
106
- description: {
107
- type: 'string',
108
- },
109
- externalId: {
110
- type: 'string',
111
- },
112
- },
113
- required: ['name', 'map', 'externalId'],
114
- },
115
- ]);
116
- });
117
-
118
- it('should not flatten oneOf and allOf', () => {
119
- expect(
120
- getSchemaAlternatives({
121
- oneOf: [
122
- {
123
- allOf: [
124
- {
125
- type: 'number',
126
- },
127
- {
128
- type: 'boolean',
129
- },
130
- ],
131
- },
132
- {
133
- type: 'string',
134
- },
135
- ],
136
- })
137
- ).toEqual([
138
- {
139
- allOf: [
140
- {
141
- type: 'number',
142
- },
143
- {
144
- type: 'boolean',
145
- },
146
- ],
147
- },
148
- {
149
- type: 'string',
150
- },
151
- ]);
152
- });
153
-
154
- it('should stop at circular references', () => {
155
- const a: OpenAPIV3.SchemaObject = {
156
- anyOf: [
157
- {
158
- type: 'string',
159
- },
160
- ],
161
- };
162
-
163
- a.anyOf?.push(a);
164
-
165
- expect(getSchemaAlternatives(a)).toEqual([
166
- {
167
- type: 'string',
168
- },
169
- a,
170
- ]);
171
- });
172
- });