@redocly/openapi-core 1.0.0 → 1.0.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 (275) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/__tests__/utils.ts +88 -0
  3. package/lib/config/all.js +0 -1
  4. package/lib/config/minimal.js +0 -1
  5. package/lib/config/recommended.js +0 -1
  6. package/package.json +1 -1
  7. package/src/__tests__/__snapshots__/bundle.test.ts.snap +437 -0
  8. package/src/__tests__/bundle.test.ts +236 -0
  9. package/src/__tests__/codeframes.test.ts +530 -0
  10. package/src/__tests__/fixtures/.redocly.lint-ignore.yaml +5 -0
  11. package/src/__tests__/fixtures/extension.js +24 -0
  12. package/src/__tests__/fixtures/refs/definitions.yaml +3 -0
  13. package/src/__tests__/fixtures/refs/examples.yaml +8 -0
  14. package/src/__tests__/fixtures/refs/external-request-body.yaml +13 -0
  15. package/src/__tests__/fixtures/refs/externalref.yaml +35 -0
  16. package/src/__tests__/fixtures/refs/hosted.yaml +35 -0
  17. package/src/__tests__/fixtures/refs/openapi-with-external-refs-conflicting-names.yaml +21 -0
  18. package/src/__tests__/fixtures/refs/openapi-with-external-refs.yaml +33 -0
  19. package/src/__tests__/fixtures/refs/openapi-with-url-refs.yaml +18 -0
  20. package/src/__tests__/fixtures/refs/param-b.yaml +1 -0
  21. package/src/__tests__/fixtures/refs/param-c.yaml +1 -0
  22. package/src/__tests__/fixtures/refs/rename.yaml +1 -0
  23. package/src/__tests__/fixtures/refs/requestBody.yaml +9 -0
  24. package/src/__tests__/fixtures/refs/schema-a.yaml +1 -0
  25. package/src/__tests__/fixtures/refs/simple.yaml +1 -0
  26. package/src/__tests__/fixtures/refs/vendor.schema.yaml +20 -0
  27. package/src/__tests__/fixtures/resolve/External.yaml +10 -0
  28. package/src/__tests__/fixtures/resolve/External2.yaml +4 -0
  29. package/src/__tests__/fixtures/resolve/description.md +3 -0
  30. package/src/__tests__/fixtures/resolve/externalInfo.yaml +4 -0
  31. package/src/__tests__/fixtures/resolve/externalLicense.yaml +1 -0
  32. package/src/__tests__/fixtures/resolve/openapi-with-back.yaml +13 -0
  33. package/src/__tests__/fixtures/resolve/openapi-with-md-description.yaml +5 -0
  34. package/src/__tests__/fixtures/resolve/openapi.yaml +28 -0
  35. package/src/__tests__/fixtures/resolve/schemas/type-a.yaml +10 -0
  36. package/src/__tests__/fixtures/resolve/schemas/type-b.yaml +6 -0
  37. package/src/__tests__/fixtures/resolve/transitive/a.yaml +1 -0
  38. package/src/__tests__/fixtures/resolve/transitive/components.yaml +5 -0
  39. package/src/__tests__/fixtures/resolve/transitive/schemas.yaml +3 -0
  40. package/src/__tests__/format.test.ts +76 -0
  41. package/src/__tests__/js-yaml.test.ts +73 -0
  42. package/src/__tests__/lint.test.ts +392 -0
  43. package/src/__tests__/logger-browser.test.ts +53 -0
  44. package/src/__tests__/logger.test.ts +47 -0
  45. package/src/__tests__/login.test.ts +17 -0
  46. package/src/__tests__/normalizeVisitors.test.ts +151 -0
  47. package/src/__tests__/output-browser.test.ts +18 -0
  48. package/src/__tests__/output.test.ts +15 -0
  49. package/src/__tests__/ref-utils.test.ts +120 -0
  50. package/src/__tests__/resolve-http.test.ts +77 -0
  51. package/src/__tests__/resolve.test.ts +431 -0
  52. package/src/__tests__/utils-browser.test.ts +11 -0
  53. package/src/__tests__/utils.test.ts +144 -0
  54. package/src/__tests__/walk.test.ts +1545 -0
  55. package/src/benchmark/benches/lint-with-many-rules.bench.ts +35 -0
  56. package/src/benchmark/benches/lint-with-nested-rule.bench.ts +39 -0
  57. package/src/benchmark/benches/lint-with-no-rules.bench.ts +20 -0
  58. package/src/benchmark/benches/lint-with-top-level-rule-report.bench.ts +35 -0
  59. package/src/benchmark/benches/lint-with-top-level-rule.bench.ts +32 -0
  60. package/src/benchmark/benches/rebilly.yaml +32275 -0
  61. package/src/benchmark/benches/recommended-oas3.bench.ts +22 -0
  62. package/src/benchmark/benches/resolve-with-no-external.bench.ts +23 -0
  63. package/src/benchmark/benchmark.js +311 -0
  64. package/src/benchmark/colors.js +29 -0
  65. package/src/benchmark/fork.js +83 -0
  66. package/src/benchmark/utils.ts +36 -0
  67. package/src/bundle.ts +417 -0
  68. package/src/config/__tests__/__snapshots__/config-resolvers.test.ts.snap +164 -0
  69. package/src/config/__tests__/__snapshots__/config.test.ts.snap +144 -0
  70. package/src/config/__tests__/config-resolvers.test.ts +491 -0
  71. package/src/config/__tests__/config.test.ts +312 -0
  72. package/src/config/__tests__/fixtures/ingore-file.ts +8 -0
  73. package/src/config/__tests__/fixtures/load-redocly.yaml +2 -0
  74. package/src/config/__tests__/fixtures/plugin-config.yaml +2 -0
  75. package/src/config/__tests__/fixtures/plugin.js +56 -0
  76. package/src/config/__tests__/fixtures/resolve-config/api/nested-config.yaml +11 -0
  77. package/src/config/__tests__/fixtures/resolve-config/api/plugin.js +69 -0
  78. package/src/config/__tests__/fixtures/resolve-config/local-config-with-circular.yaml +7 -0
  79. package/src/config/__tests__/fixtures/resolve-config/local-config-with-custom-function.yaml +17 -0
  80. package/src/config/__tests__/fixtures/resolve-config/local-config-with-file.yaml +18 -0
  81. package/src/config/__tests__/fixtures/resolve-config/local-config-with-wrong-custom-function.yaml +15 -0
  82. package/src/config/__tests__/fixtures/resolve-config/local-config.yaml +9 -0
  83. package/src/config/__tests__/fixtures/resolve-config/plugin.js +80 -0
  84. package/src/config/__tests__/fixtures/resolve-remote-configs/nested-remote-config.yaml +3 -0
  85. package/src/config/__tests__/fixtures/resolve-remote-configs/remote-config.yaml +4 -0
  86. package/src/config/__tests__/load.test.ts +167 -0
  87. package/src/config/__tests__/resolve-plugins.test.ts +27 -0
  88. package/src/config/__tests__/utils.test.ts +204 -0
  89. package/src/config/all.ts +74 -0
  90. package/src/config/builtIn.ts +37 -0
  91. package/src/config/config-resolvers.ts +474 -0
  92. package/src/config/config.ts +332 -0
  93. package/src/config/index.ts +7 -0
  94. package/src/config/load.ts +144 -0
  95. package/src/config/minimal.ts +61 -0
  96. package/src/config/recommended.ts +61 -0
  97. package/src/config/rules.ts +54 -0
  98. package/src/config/types.ts +231 -0
  99. package/src/config/utils.ts +349 -0
  100. package/src/decorators/__tests__/filter-in.test.ts +310 -0
  101. package/src/decorators/__tests__/filter-out.test.ts +335 -0
  102. package/src/decorators/__tests__/media-type-examples-override.test.ts +665 -0
  103. package/src/decorators/__tests__/remove-x-internal.test.ts +316 -0
  104. package/src/decorators/__tests__/resources/request.yaml +3 -0
  105. package/src/decorators/__tests__/resources/response.yaml +3 -0
  106. package/src/decorators/common/filters/filter-helper.ts +72 -0
  107. package/src/decorators/common/filters/filter-in.ts +18 -0
  108. package/src/decorators/common/filters/filter-out.ts +18 -0
  109. package/src/decorators/common/info-description-override.ts +24 -0
  110. package/src/decorators/common/info-override.ts +15 -0
  111. package/src/decorators/common/media-type-examples-override.ts +79 -0
  112. package/src/decorators/common/operation-description-override.ts +30 -0
  113. package/src/decorators/common/registry-dependencies.ts +25 -0
  114. package/src/decorators/common/remove-x-internal.ts +59 -0
  115. package/src/decorators/common/tag-description-override.ts +25 -0
  116. package/src/decorators/oas2/index.ts +20 -0
  117. package/src/decorators/oas3/index.ts +22 -0
  118. package/src/env.ts +5 -0
  119. package/src/format/codeframes.ts +216 -0
  120. package/src/format/format.ts +375 -0
  121. package/src/index.ts +71 -0
  122. package/src/js-yaml/index.ts +14 -0
  123. package/src/lint.ts +148 -0
  124. package/src/logger.ts +34 -0
  125. package/src/oas-types.ts +57 -0
  126. package/src/output.ts +7 -0
  127. package/src/redocly/__tests__/redocly-client.test.ts +146 -0
  128. package/src/redocly/index.ts +187 -0
  129. package/src/redocly/redocly-client-types.ts +10 -0
  130. package/src/redocly/registry-api-types.ts +32 -0
  131. package/src/redocly/registry-api.ts +150 -0
  132. package/src/ref-utils.ts +85 -0
  133. package/src/resolve.ts +417 -0
  134. package/src/rules/__tests__/fixtures/code-sample.php +9 -0
  135. package/src/rules/__tests__/fixtures/invalid-yaml.yaml +1 -0
  136. package/src/rules/__tests__/fixtures/ref.yaml +1 -0
  137. package/src/rules/__tests__/no-unresolved-refs.test.ts +257 -0
  138. package/src/rules/__tests__/utils.test.ts +160 -0
  139. package/src/rules/ajv.ts +102 -0
  140. package/src/rules/common/__tests__/info-license.test.ts +62 -0
  141. package/src/rules/common/__tests__/license-url.test.ts +63 -0
  142. package/src/rules/common/__tests__/no-ambiguous-paths.test.ts +96 -0
  143. package/src/rules/common/__tests__/no-enum-type-mismatch.test.ts +210 -0
  144. package/src/rules/common/__tests__/no-identical-paths.test.ts +58 -0
  145. package/src/rules/common/__tests__/no-path-trailing-slash.test.ts +85 -0
  146. package/src/rules/common/__tests__/operation-2xx-response.test.ts +192 -0
  147. package/src/rules/common/__tests__/operation-4xx-response.test.ts +231 -0
  148. package/src/rules/common/__tests__/operation-operationId-unique.test.ts +76 -0
  149. package/src/rules/common/__tests__/operation-operationId-url-safe.test.ts +45 -0
  150. package/src/rules/common/__tests__/operation-parameters-unique.test.ts +167 -0
  151. package/src/rules/common/__tests__/operation-singular-tag.test.ts +72 -0
  152. package/src/rules/common/__tests__/path-http-verbs-order.test.ts +95 -0
  153. package/src/rules/common/__tests__/path-not-include-query.test.ts +64 -0
  154. package/src/rules/common/__tests__/path-params-defined.test.ts +202 -0
  155. package/src/rules/common/__tests__/paths-kebab-case.test.ts +108 -0
  156. package/src/rules/common/__tests__/scalar-property-missing-example.test.ts +264 -0
  157. package/src/rules/common/__tests__/security-defined.test.ts +175 -0
  158. package/src/rules/common/__tests__/spec-strict-refs.test.ts +69 -0
  159. package/src/rules/common/__tests__/spec.test.ts +610 -0
  160. package/src/rules/common/__tests__/tag-description.test.ts +65 -0
  161. package/src/rules/common/__tests__/tags-alphabetical.test.ts +64 -0
  162. package/src/rules/common/assertions/__tests__/asserts.test.ts +869 -0
  163. package/src/rules/common/assertions/__tests__/index.test.ts +100 -0
  164. package/src/rules/common/assertions/__tests__/utils.test.ts +236 -0
  165. package/src/rules/common/assertions/asserts.ts +357 -0
  166. package/src/rules/common/assertions/index.ts +53 -0
  167. package/src/rules/common/assertions/utils.ts +331 -0
  168. package/src/rules/common/info-contact.ts +15 -0
  169. package/src/rules/common/info-license-url.ts +10 -0
  170. package/src/rules/common/info-license.ts +15 -0
  171. package/src/rules/common/no-ambiguous-paths.ts +50 -0
  172. package/src/rules/common/no-enum-type-mismatch.ts +52 -0
  173. package/src/rules/common/no-http-verbs-in-paths.ts +36 -0
  174. package/src/rules/common/no-identical-paths.ts +24 -0
  175. package/src/rules/common/no-invalid-parameter-examples.ts +36 -0
  176. package/src/rules/common/no-invalid-schema-examples.ts +27 -0
  177. package/src/rules/common/no-path-trailing-slash.ts +15 -0
  178. package/src/rules/common/operation-2xx-response.ts +24 -0
  179. package/src/rules/common/operation-4xx-response.ts +24 -0
  180. package/src/rules/common/operation-description.ts +13 -0
  181. package/src/rules/common/operation-operationId-unique.ts +21 -0
  182. package/src/rules/common/operation-operationId-url-safe.ts +19 -0
  183. package/src/rules/common/operation-operationId.ts +17 -0
  184. package/src/rules/common/operation-parameters-unique.ts +48 -0
  185. package/src/rules/common/operation-singular-tag.ts +17 -0
  186. package/src/rules/common/operation-summary.ts +13 -0
  187. package/src/rules/common/operation-tag-defined.ts +26 -0
  188. package/src/rules/common/parameter-description.ts +22 -0
  189. package/src/rules/common/path-declaration-must-exist.ts +15 -0
  190. package/src/rules/common/path-excludes-patterns.ts +23 -0
  191. package/src/rules/common/path-http-verbs-order.ts +30 -0
  192. package/src/rules/common/path-not-include-query.ts +17 -0
  193. package/src/rules/common/path-params-defined.ts +65 -0
  194. package/src/rules/common/path-segment-plural.ts +31 -0
  195. package/src/rules/common/paths-kebab-case.ts +19 -0
  196. package/src/rules/common/required-string-property-missing-min-length.ts +44 -0
  197. package/src/rules/common/response-contains-header.ts +35 -0
  198. package/src/rules/common/scalar-property-missing-example.ts +58 -0
  199. package/src/rules/common/security-defined.ts +65 -0
  200. package/src/rules/common/spec-strict-refs.ts +30 -0
  201. package/src/rules/common/spec.ts +175 -0
  202. package/src/rules/common/tag-description.ts +10 -0
  203. package/src/rules/common/tags-alphabetical.ts +20 -0
  204. package/src/rules/no-unresolved-refs.ts +51 -0
  205. package/src/rules/oas2/__tests__/boolean-parameter-prefixes.test.ts +110 -0
  206. package/src/rules/oas2/__tests__/response-contains-header.test.ts +174 -0
  207. package/src/rules/oas2/__tests__/response-contains-property.test.ts +155 -0
  208. package/src/rules/oas2/__tests__/spec/fixtures/description.md +1 -0
  209. package/src/rules/oas2/__tests__/spec/info.test.ts +355 -0
  210. package/src/rules/oas2/__tests__/spec/operation.test.ts +123 -0
  211. package/src/rules/oas2/__tests__/spec/paths.test.ts +245 -0
  212. package/src/rules/oas2/__tests__/spec/referenceableScalars.test.ts +35 -0
  213. package/src/rules/oas2/__tests__/spec/utils.ts +32 -0
  214. package/src/rules/oas2/boolean-parameter-prefixes.ts +26 -0
  215. package/src/rules/oas2/index.ts +91 -0
  216. package/src/rules/oas2/remove-unused-components.ts +81 -0
  217. package/src/rules/oas2/request-mime-type.ts +16 -0
  218. package/src/rules/oas2/response-contains-property.ts +36 -0
  219. package/src/rules/oas2/response-mime-type.ts +16 -0
  220. package/src/rules/oas3/__tests__/boolean-parameter-prefixes.test.ts +111 -0
  221. package/src/rules/oas3/__tests__/component-name-unique.test.ts +823 -0
  222. package/src/rules/oas3/__tests__/fixtures/common.yaml +11 -0
  223. package/src/rules/oas3/__tests__/no-empty-enum-servers.com.test.ts +205 -0
  224. package/src/rules/oas3/__tests__/no-example-value-and-externalValue.test.ts +65 -0
  225. package/src/rules/oas3/__tests__/no-invalid-media-type-examples.test.ts +473 -0
  226. package/src/rules/oas3/__tests__/no-server-example.com.test.ts +60 -0
  227. package/src/rules/oas3/__tests__/no-server-trailing-slash.test.ts +79 -0
  228. package/src/rules/oas3/__tests__/no-unused-components.test.ts +131 -0
  229. package/src/rules/oas3/__tests__/operation-4xx-problem-details-rfc7807.test.ts +145 -0
  230. package/src/rules/oas3/__tests__/response-contains-header.test.ts +389 -0
  231. package/src/rules/oas3/__tests__/response-contains-property.test.ts +403 -0
  232. package/src/rules/oas3/__tests__/spec/callbacks.test.ts +41 -0
  233. package/src/rules/oas3/__tests__/spec/fixtures/description.md +1 -0
  234. package/src/rules/oas3/__tests__/spec/info.test.ts +391 -0
  235. package/src/rules/oas3/__tests__/spec/operation.test.ts +253 -0
  236. package/src/rules/oas3/__tests__/spec/paths.test.ts +284 -0
  237. package/src/rules/oas3/__tests__/spec/referenceableScalars.test.ts +77 -0
  238. package/src/rules/oas3/__tests__/spec/servers.test.ts +505 -0
  239. package/src/rules/oas3/__tests__/spec/spec.test.ts +298 -0
  240. package/src/rules/oas3/__tests__/spec/utils.ts +32 -0
  241. package/src/rules/oas3/__tests__/spec-components-invalid-map-name.test.ts +276 -0
  242. package/src/rules/oas3/__tests__/utils/lint-document-for-test.ts +23 -0
  243. package/src/rules/oas3/boolean-parameter-prefixes.ts +28 -0
  244. package/src/rules/oas3/component-name-unique.ts +158 -0
  245. package/src/rules/oas3/index.ts +113 -0
  246. package/src/rules/oas3/no-empty-servers.ts +22 -0
  247. package/src/rules/oas3/no-example-value-and-externalValue.ts +14 -0
  248. package/src/rules/oas3/no-invalid-media-type-examples.ts +49 -0
  249. package/src/rules/oas3/no-server-example.com.ts +14 -0
  250. package/src/rules/oas3/no-server-trailing-slash.ts +15 -0
  251. package/src/rules/oas3/no-server-variables-empty-enum.ts +66 -0
  252. package/src/rules/oas3/no-undefined-server-variable.ts +30 -0
  253. package/src/rules/oas3/no-unused-components.ts +75 -0
  254. package/src/rules/oas3/operation-4xx-problem-details-rfc7807.ts +35 -0
  255. package/src/rules/oas3/remove-unused-components.ts +95 -0
  256. package/src/rules/oas3/request-mime-type.ts +30 -0
  257. package/src/rules/oas3/response-contains-property.ts +38 -0
  258. package/src/rules/oas3/response-mime-type.ts +30 -0
  259. package/src/rules/oas3/spec-components-invalid-map-name.ts +69 -0
  260. package/src/rules/other/stats.ts +73 -0
  261. package/src/rules/utils.ts +193 -0
  262. package/src/types/config-external-schemas.ts +917 -0
  263. package/src/types/index.ts +149 -0
  264. package/src/types/oas2.ts +478 -0
  265. package/src/types/oas3.ts +597 -0
  266. package/src/types/oas3_1.ts +258 -0
  267. package/src/types/redocly-yaml.ts +1040 -0
  268. package/src/typings/common.ts +17 -0
  269. package/src/typings/openapi.ts +298 -0
  270. package/src/typings/swagger.ts +236 -0
  271. package/src/utils.ts +276 -0
  272. package/src/visitors.ts +491 -0
  273. package/src/walk.ts +439 -0
  274. package/tsconfig.json +8 -0
  275. package/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1,665 @@
1
+ import { makeConfig, parseYamlToDocument, yamlSerializer } from '../../../__tests__/utils';
2
+ import { outdent } from 'outdent';
3
+ import { bundleDocument } from '../../bundle';
4
+ import { BaseResolver } from '../../resolve';
5
+
6
+ describe('oas3 media-type-examples-override', () => {
7
+ expect.addSnapshotSerializer(yamlSerializer);
8
+ it('should override response example', async () => {
9
+ const testDocument = parseYamlToDocument(
10
+ outdent`
11
+ openapi: 3.0.0
12
+ paths:
13
+ /pet:
14
+ get:
15
+ operationId: getUserById
16
+ responses:
17
+ 200:
18
+ description: json
19
+ content:
20
+ application/json:
21
+ examples:
22
+ def:
23
+ value:
24
+ a: test
25
+
26
+ `
27
+ );
28
+ const { bundle: res } = await bundleDocument({
29
+ document: testDocument,
30
+ externalRefResolver: new BaseResolver(),
31
+ config: await makeConfig(
32
+ {},
33
+ {
34
+ 'media-type-examples-override': {
35
+ operationIds: {
36
+ getUserById: {
37
+ responses: {
38
+ '200': {
39
+ 'application/json':
40
+ 'packages/core/src/decorators/__tests__/resources/request.yaml',
41
+ },
42
+ },
43
+ },
44
+ },
45
+ },
46
+ }
47
+ ),
48
+ });
49
+
50
+ expect(res.parsed).toMatchInlineSnapshot(`
51
+ openapi: 3.0.0
52
+ paths:
53
+ /pet:
54
+ get:
55
+ operationId: getUserById
56
+ responses:
57
+ '200':
58
+ description: json
59
+ content:
60
+ application/json:
61
+ examples:
62
+ def:
63
+ value:
64
+ b: from external file
65
+ components: {}
66
+
67
+ `);
68
+ });
69
+
70
+ it('should override requestBody examples', async () => {
71
+ const testDocument = parseYamlToDocument(
72
+ outdent`
73
+ openapi: 3.0.0
74
+ paths:
75
+ /pet:
76
+ get:
77
+ operationId: getUserById
78
+ requestBody:
79
+ content:
80
+ application/json:
81
+ examples:
82
+ def:
83
+ value:
84
+ a: test123
85
+
86
+ `
87
+ );
88
+ const { bundle: res } = await bundleDocument({
89
+ document: testDocument,
90
+ externalRefResolver: new BaseResolver(),
91
+ config: await makeConfig(
92
+ {},
93
+ {
94
+ 'media-type-examples-override': {
95
+ operationIds: {
96
+ getUserById: {
97
+ request: {
98
+ 'application/json':
99
+ 'packages/core/src/decorators/__tests__/resources/response.yaml',
100
+ },
101
+ },
102
+ },
103
+ },
104
+ }
105
+ ),
106
+ });
107
+
108
+ expect(res.parsed).toMatchInlineSnapshot(`
109
+ openapi: 3.0.0
110
+ paths:
111
+ /pet:
112
+ get:
113
+ operationId: getUserById
114
+ requestBody:
115
+ content:
116
+ application/json:
117
+ examples:
118
+ def:
119
+ value:
120
+ name: test response name
121
+ components: {}
122
+
123
+ `);
124
+ });
125
+
126
+ it('should override requestBody examples and 200 response', async () => {
127
+ const testDocument = parseYamlToDocument(
128
+ outdent`
129
+ openapi: 3.0.0
130
+ paths:
131
+ /pet:
132
+ get:
133
+ operationId: getUserById
134
+ responses:
135
+ '200':
136
+ description: json
137
+ content:
138
+ application/json:
139
+ examples:
140
+ def:
141
+ value:
142
+ message: test
143
+ requestBody:
144
+ content:
145
+ application/json:
146
+ examples:
147
+ def:
148
+ value:
149
+ a: test123
150
+
151
+ `
152
+ );
153
+ const { bundle: res } = await bundleDocument({
154
+ document: testDocument,
155
+ externalRefResolver: new BaseResolver(),
156
+ config: await makeConfig(
157
+ {},
158
+ {
159
+ 'media-type-examples-override': {
160
+ operationIds: {
161
+ getUserById: {
162
+ request: {
163
+ 'application/json':
164
+ 'packages/core/src/decorators/__tests__/resources/request.yaml',
165
+ },
166
+ responses: {
167
+ '200': {
168
+ 'application/json':
169
+ 'packages/core/src/decorators/__tests__/resources/response.yaml',
170
+ },
171
+ '201': {
172
+ 'application/json':
173
+ 'packages/core/src/decorators/__tests__/resources/response.yaml',
174
+ },
175
+ },
176
+ },
177
+ },
178
+ },
179
+ }
180
+ ),
181
+ });
182
+
183
+ expect(res.parsed).toMatchInlineSnapshot(`
184
+ openapi: 3.0.0
185
+ paths:
186
+ /pet:
187
+ get:
188
+ operationId: getUserById
189
+ responses:
190
+ '200':
191
+ description: json
192
+ content:
193
+ application/json:
194
+ examples:
195
+ def:
196
+ value:
197
+ name: test response name
198
+ requestBody:
199
+ content:
200
+ application/json:
201
+ examples:
202
+ def:
203
+ value:
204
+ b: from external file
205
+ components: {}
206
+
207
+ `);
208
+ });
209
+
210
+ it('should override response and request examples with refs', async () => {
211
+ const testDocument = parseYamlToDocument(
212
+ outdent`
213
+ openapi: 3.0.0
214
+ paths:
215
+ /pet:
216
+ get:
217
+ operationId: getUserById
218
+ responses:
219
+ '200':
220
+ $ref: '#/components/responses/okay200'
221
+ requestBody:
222
+ $ref: '#/components/requestBodies/testRequest'
223
+ components:
224
+ requestBodies:
225
+ testRequest:
226
+ content:
227
+ application/json:
228
+ examples:
229
+ def:
230
+ value:
231
+ a: test123
232
+ responses:
233
+ okay200:
234
+ description: json
235
+ content:
236
+ application/json:
237
+ examples:
238
+ def:
239
+ value:
240
+ a: t
241
+ b: 3
242
+ `
243
+ );
244
+
245
+ const { bundle: res } = await bundleDocument({
246
+ document: testDocument,
247
+ externalRefResolver: new BaseResolver(),
248
+ config: await makeConfig(
249
+ {},
250
+ {
251
+ 'media-type-examples-override': {
252
+ operationIds: {
253
+ getUserById: {
254
+ request: {
255
+ 'application/json':
256
+ 'packages/core/src/decorators/__tests__/resources/request.yaml',
257
+ },
258
+ responses: {
259
+ '200': {
260
+ 'application/json':
261
+ 'packages/core/src/decorators/__tests__/resources/response.yaml',
262
+ },
263
+ },
264
+ },
265
+ },
266
+ },
267
+ }
268
+ ),
269
+ });
270
+
271
+ expect(res.parsed).toMatchInlineSnapshot(`
272
+ openapi: 3.0.0
273
+ paths:
274
+ /pet:
275
+ get:
276
+ operationId: getUserById
277
+ responses:
278
+ '200':
279
+ description: json
280
+ content:
281
+ application/json:
282
+ examples:
283
+ def:
284
+ value:
285
+ name: test response name
286
+ requestBody:
287
+ content:
288
+ application/json:
289
+ examples:
290
+ def:
291
+ value:
292
+ b: from external file
293
+ components:
294
+ requestBodies:
295
+ testRequest:
296
+ content:
297
+ application/json:
298
+ examples:
299
+ def:
300
+ value:
301
+ a: test123
302
+ responses:
303
+ okay200:
304
+ description: json
305
+ content:
306
+ application/json:
307
+ examples:
308
+ def:
309
+ value:
310
+ a: t
311
+ b: 3
312
+
313
+ `);
314
+ });
315
+
316
+ it('should override examples with ref', async () => {
317
+ const testDocument = parseYamlToDocument(
318
+ outdent`
319
+ openapi: 3.0.0
320
+ paths:
321
+ /pet:
322
+ get:
323
+ operationId: getUserById
324
+ responses:
325
+ '400':
326
+ description: bad request
327
+ content:
328
+ application/json:
329
+ examples:
330
+ $ref: '#/components/examples/testExample'
331
+ requestBody:
332
+ content:
333
+ application/json:
334
+ examples:
335
+ obj:
336
+ $ref: '#/components/examples/testExample'
337
+ components:
338
+ examples:
339
+ testExample:
340
+ value:
341
+ test: 1
342
+ `
343
+ );
344
+
345
+ const { bundle: res } = await bundleDocument({
346
+ document: testDocument,
347
+ externalRefResolver: new BaseResolver(),
348
+ config: await makeConfig(
349
+ {},
350
+ {
351
+ 'media-type-examples-override': {
352
+ operationIds: {
353
+ getUserById: {
354
+ request: {
355
+ 'application/json':
356
+ 'packages/core/src/decorators/__tests__/resources/request.yaml',
357
+ },
358
+ responses: {
359
+ '400': {
360
+ 'application/json':
361
+ 'packages/core/src/decorators/__tests__/resources/response.yaml',
362
+ },
363
+ },
364
+ },
365
+ },
366
+ },
367
+ }
368
+ ),
369
+ });
370
+
371
+ expect(res.parsed).toMatchInlineSnapshot(`
372
+ openapi: 3.0.0
373
+ paths:
374
+ /pet:
375
+ get:
376
+ operationId: getUserById
377
+ responses:
378
+ '400':
379
+ description: bad request
380
+ content:
381
+ application/json:
382
+ examples:
383
+ def:
384
+ value:
385
+ name: test response name
386
+ requestBody:
387
+ content:
388
+ application/json:
389
+ examples:
390
+ def:
391
+ value:
392
+ b: from external file
393
+ components:
394
+ examples:
395
+ testExample:
396
+ value:
397
+ test: 1
398
+
399
+ `);
400
+ });
401
+
402
+ it('should add the examples to response and request', async () => {
403
+ const testDocument = parseYamlToDocument(
404
+ outdent`
405
+ openapi: 3.0.0
406
+ paths:
407
+ /pet:
408
+ get:
409
+ operationId: getUserById
410
+ requestBody:
411
+ description: empty body
412
+ responses:
413
+ '200':
414
+ description: json
415
+ `
416
+ );
417
+ const { bundle: res } = await bundleDocument({
418
+ document: testDocument,
419
+ externalRefResolver: new BaseResolver(),
420
+ config: await makeConfig(
421
+ {},
422
+ {
423
+ 'media-type-examples-override': {
424
+ operationIds: {
425
+ getUserById: {
426
+ request: {
427
+ 'application/json':
428
+ 'packages/core/src/decorators/__tests__/resources/request.yaml',
429
+ },
430
+ responses: {
431
+ '200': {
432
+ 'application/json':
433
+ 'packages/core/src/decorators/__tests__/resources/response.yaml',
434
+ },
435
+ },
436
+ },
437
+ },
438
+ },
439
+ }
440
+ ),
441
+ });
442
+
443
+ expect(res.parsed).toMatchInlineSnapshot(`
444
+ openapi: 3.0.0
445
+ paths:
446
+ /pet:
447
+ get:
448
+ operationId: getUserById
449
+ requestBody:
450
+ description: empty body
451
+ content:
452
+ application/json:
453
+ examples:
454
+ def:
455
+ value:
456
+ b: from external file
457
+ responses:
458
+ '200':
459
+ description: json
460
+ content:
461
+ application/json:
462
+ examples:
463
+ def:
464
+ value:
465
+ name: test response name
466
+ components: {}
467
+
468
+ `);
469
+ });
470
+
471
+ it('should add examples to response', async () => {
472
+ const testDocument = parseYamlToDocument(
473
+ outdent`
474
+ openapi: 3.0.0
475
+ paths:
476
+ /pet:
477
+ get:
478
+ operationId: getUserById
479
+ responses:
480
+ '200':
481
+ description: json
482
+ content:
483
+ application/json:
484
+ schema:
485
+ $ref: "#/components/schemas/Pet"
486
+ ,
487
+ `
488
+ );
489
+ const { bundle: res } = await bundleDocument({
490
+ document: testDocument,
491
+ externalRefResolver: new BaseResolver(),
492
+ config: await makeConfig(
493
+ {},
494
+ {
495
+ 'media-type-examples-override': {
496
+ operationIds: {
497
+ getUserById: {
498
+ responses: {
499
+ '200': {
500
+ 'application/json':
501
+ 'packages/core/src/decorators/__tests__/resources/response.yaml',
502
+ },
503
+ },
504
+ },
505
+ },
506
+ },
507
+ }
508
+ ),
509
+ });
510
+
511
+ expect(res.parsed).toMatchInlineSnapshot(`
512
+ openapi: 3.0.0
513
+ paths:
514
+ /pet:
515
+ get:
516
+ operationId: getUserById
517
+ responses:
518
+ '200':
519
+ description: json
520
+ content:
521
+ application/json:
522
+ schema:
523
+ $ref: '#/components/schemas/Pet'
524
+ examples:
525
+ def:
526
+ value:
527
+ name: test response name
528
+ components: {}
529
+
530
+ `);
531
+ });
532
+
533
+ it('should add examples to requestBody', async () => {
534
+ const testDocument = parseYamlToDocument(
535
+ outdent`
536
+ openapi: 3.0.0
537
+ paths:
538
+ /pet:
539
+ get:
540
+ operationId: getUserById
541
+ requestBody:
542
+ content:
543
+ application/json:
544
+ schema:
545
+ $ref: "#/components/schemas/Pet"
546
+
547
+ ,
548
+ `
549
+ );
550
+ const { bundle: res } = await bundleDocument({
551
+ document: testDocument,
552
+ externalRefResolver: new BaseResolver(),
553
+ config: await makeConfig(
554
+ {},
555
+ {
556
+ 'media-type-examples-override': {
557
+ operationIds: {
558
+ getUserById: {
559
+ request: {
560
+ 'application/json':
561
+ 'packages/core/src/decorators/__tests__/resources/response.yaml',
562
+ 'application/xml':
563
+ 'packages/core/src/decorators/__tests__/resources/response.yaml',
564
+ },
565
+ },
566
+ },
567
+ },
568
+ }
569
+ ),
570
+ });
571
+
572
+ expect(res.parsed).toMatchInlineSnapshot(`
573
+ openapi: 3.0.0
574
+ paths:
575
+ /pet:
576
+ get:
577
+ operationId: getUserById
578
+ requestBody:
579
+ content:
580
+ application/json:
581
+ schema:
582
+ $ref: '#/components/schemas/Pet'
583
+ examples:
584
+ def:
585
+ value:
586
+ name: test response name
587
+ application/xml:
588
+ examples:
589
+ def:
590
+ value:
591
+ name: test response name
592
+ components: {}
593
+
594
+ `);
595
+ });
596
+
597
+ it('should add new examples with new content type to response', async () => {
598
+ const testDocument = parseYamlToDocument(
599
+ outdent`
600
+ openapi: 3.0.0
601
+ paths:
602
+ /pet:
603
+ get:
604
+ operationId: getUserById
605
+ requestBody:
606
+ description: empty body
607
+ responses:
608
+ '200':
609
+ description: json
610
+ content:
611
+ examples:
612
+ application/json:
613
+ value:
614
+ name: json type
615
+ `
616
+ );
617
+
618
+ const { bundle: res } = await bundleDocument({
619
+ document: testDocument,
620
+ externalRefResolver: new BaseResolver(),
621
+ config: await makeConfig(
622
+ {},
623
+ {
624
+ 'media-type-examples-override': {
625
+ operationIds: {
626
+ getUserById: {
627
+ responses: {
628
+ '200': {
629
+ 'application/xml':
630
+ 'packages/core/src/decorators/__tests__/resources/response.yaml',
631
+ },
632
+ },
633
+ },
634
+ },
635
+ },
636
+ }
637
+ ),
638
+ });
639
+
640
+ expect(res.parsed).toMatchInlineSnapshot(`
641
+ openapi: 3.0.0
642
+ paths:
643
+ /pet:
644
+ get:
645
+ operationId: getUserById
646
+ requestBody:
647
+ description: empty body
648
+ responses:
649
+ '200':
650
+ description: json
651
+ content:
652
+ examples:
653
+ application/json:
654
+ value:
655
+ name: json type
656
+ application/xml:
657
+ examples:
658
+ def:
659
+ value:
660
+ name: test response name
661
+ components: {}
662
+
663
+ `);
664
+ });
665
+ });