@redocly/openapi-core 1.0.0-beta.126 → 1.0.0-beta.127

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/lib/bundle.js +5 -2
  2. package/lib/rules/common/spec.js +1 -0
  3. package/lib/rules/oas2/request-mime-type.d.ts +1 -1
  4. package/lib/rules/oas2/response-mime-type.d.ts +1 -1
  5. package/lib/rules/oas3/operation-4xx-problem-details-rfc7807.d.ts +2 -2
  6. package/lib/rules/oas3/operation-4xx-problem-details-rfc7807.js +3 -3
  7. package/lib/rules/oas3/request-mime-type.d.ts +1 -1
  8. package/lib/rules/oas3/response-mime-type.d.ts +1 -1
  9. package/lib/walk.d.ts +6 -5
  10. package/lib/walk.js +23 -27
  11. package/package.json +1 -1
  12. package/__tests__/utils.ts +0 -88
  13. package/src/__tests__/__snapshots__/bundle.test.ts.snap +0 -437
  14. package/src/__tests__/bundle.test.ts +0 -236
  15. package/src/__tests__/codeframes.test.ts +0 -530
  16. package/src/__tests__/fixtures/.redocly.lint-ignore.yaml +0 -5
  17. package/src/__tests__/fixtures/extension.js +0 -24
  18. package/src/__tests__/fixtures/refs/definitions.yaml +0 -3
  19. package/src/__tests__/fixtures/refs/examples.yaml +0 -8
  20. package/src/__tests__/fixtures/refs/external-request-body.yaml +0 -13
  21. package/src/__tests__/fixtures/refs/externalref.yaml +0 -35
  22. package/src/__tests__/fixtures/refs/hosted.yaml +0 -35
  23. package/src/__tests__/fixtures/refs/openapi-with-external-refs-conflicting-names.yaml +0 -21
  24. package/src/__tests__/fixtures/refs/openapi-with-external-refs.yaml +0 -33
  25. package/src/__tests__/fixtures/refs/openapi-with-url-refs.yaml +0 -18
  26. package/src/__tests__/fixtures/refs/param-b.yaml +0 -1
  27. package/src/__tests__/fixtures/refs/param-c.yaml +0 -1
  28. package/src/__tests__/fixtures/refs/rename.yaml +0 -1
  29. package/src/__tests__/fixtures/refs/requestBody.yaml +0 -9
  30. package/src/__tests__/fixtures/refs/schema-a.yaml +0 -1
  31. package/src/__tests__/fixtures/refs/simple.yaml +0 -1
  32. package/src/__tests__/fixtures/refs/vendor.schema.yaml +0 -20
  33. package/src/__tests__/fixtures/resolve/External.yaml +0 -10
  34. package/src/__tests__/fixtures/resolve/External2.yaml +0 -4
  35. package/src/__tests__/fixtures/resolve/description.md +0 -3
  36. package/src/__tests__/fixtures/resolve/externalInfo.yaml +0 -4
  37. package/src/__tests__/fixtures/resolve/externalLicense.yaml +0 -1
  38. package/src/__tests__/fixtures/resolve/openapi-with-back.yaml +0 -13
  39. package/src/__tests__/fixtures/resolve/openapi-with-md-description.yaml +0 -5
  40. package/src/__tests__/fixtures/resolve/openapi.yaml +0 -28
  41. package/src/__tests__/fixtures/resolve/schemas/type-a.yaml +0 -10
  42. package/src/__tests__/fixtures/resolve/schemas/type-b.yaml +0 -6
  43. package/src/__tests__/fixtures/resolve/transitive/a.yaml +0 -1
  44. package/src/__tests__/fixtures/resolve/transitive/components.yaml +0 -5
  45. package/src/__tests__/fixtures/resolve/transitive/schemas.yaml +0 -3
  46. package/src/__tests__/format.test.ts +0 -76
  47. package/src/__tests__/js-yaml.test.ts +0 -73
  48. package/src/__tests__/lint.test.ts +0 -388
  49. package/src/__tests__/logger-browser.test.ts +0 -53
  50. package/src/__tests__/logger.test.ts +0 -47
  51. package/src/__tests__/login.test.ts +0 -17
  52. package/src/__tests__/normalizeVisitors.test.ts +0 -151
  53. package/src/__tests__/output-browser.test.ts +0 -18
  54. package/src/__tests__/output.test.ts +0 -15
  55. package/src/__tests__/ref-utils.test.ts +0 -120
  56. package/src/__tests__/resolve-http.test.ts +0 -77
  57. package/src/__tests__/resolve.test.ts +0 -430
  58. package/src/__tests__/utils-browser.test.ts +0 -11
  59. package/src/__tests__/utils.test.ts +0 -144
  60. package/src/__tests__/walk.test.ts +0 -1545
  61. package/src/benchmark/benches/lint-with-many-rules.bench.ts +0 -35
  62. package/src/benchmark/benches/lint-with-nested-rule.bench.ts +0 -39
  63. package/src/benchmark/benches/lint-with-no-rules.bench.ts +0 -20
  64. package/src/benchmark/benches/lint-with-top-level-rule-report.bench.ts +0 -35
  65. package/src/benchmark/benches/lint-with-top-level-rule.bench.ts +0 -32
  66. package/src/benchmark/benches/rebilly.yaml +0 -32275
  67. package/src/benchmark/benches/recommended-oas3.bench.ts +0 -22
  68. package/src/benchmark/benches/resolve-with-no-external.bench.ts +0 -23
  69. package/src/benchmark/benchmark.js +0 -311
  70. package/src/benchmark/colors.js +0 -29
  71. package/src/benchmark/fork.js +0 -83
  72. package/src/benchmark/utils.ts +0 -36
  73. package/src/bundle.ts +0 -399
  74. package/src/config/__tests__/__snapshots__/config-resolvers.test.ts.snap +0 -161
  75. package/src/config/__tests__/__snapshots__/config.test.ts.snap +0 -144
  76. package/src/config/__tests__/config-resolvers.test.ts +0 -491
  77. package/src/config/__tests__/config.test.ts +0 -307
  78. package/src/config/__tests__/fixtures/ingore-file.ts +0 -8
  79. package/src/config/__tests__/fixtures/load-redocly.yaml +0 -2
  80. package/src/config/__tests__/fixtures/plugin-config.yaml +0 -2
  81. package/src/config/__tests__/fixtures/plugin.js +0 -56
  82. package/src/config/__tests__/fixtures/resolve-config/api/nested-config.yaml +0 -11
  83. package/src/config/__tests__/fixtures/resolve-config/api/plugin.js +0 -69
  84. package/src/config/__tests__/fixtures/resolve-config/local-config-with-circular.yaml +0 -7
  85. package/src/config/__tests__/fixtures/resolve-config/local-config-with-custom-function.yaml +0 -17
  86. package/src/config/__tests__/fixtures/resolve-config/local-config-with-file.yaml +0 -18
  87. package/src/config/__tests__/fixtures/resolve-config/local-config-with-wrong-custom-function.yaml +0 -15
  88. package/src/config/__tests__/fixtures/resolve-config/local-config.yaml +0 -9
  89. package/src/config/__tests__/fixtures/resolve-config/plugin.js +0 -80
  90. package/src/config/__tests__/fixtures/resolve-remote-configs/nested-remote-config.yaml +0 -3
  91. package/src/config/__tests__/fixtures/resolve-remote-configs/remote-config.yaml +0 -4
  92. package/src/config/__tests__/load.test.ts +0 -167
  93. package/src/config/__tests__/resolve-plugins.test.ts +0 -27
  94. package/src/config/__tests__/utils.test.ts +0 -204
  95. package/src/config/all.ts +0 -73
  96. package/src/config/builtIn.ts +0 -37
  97. package/src/config/config-resolvers.ts +0 -465
  98. package/src/config/config.ts +0 -330
  99. package/src/config/index.ts +0 -7
  100. package/src/config/load.ts +0 -144
  101. package/src/config/minimal.ts +0 -60
  102. package/src/config/recommended.ts +0 -60
  103. package/src/config/rules.ts +0 -54
  104. package/src/config/types.ts +0 -216
  105. package/src/config/utils.ts +0 -333
  106. package/src/decorators/__tests__/filter-in.test.ts +0 -310
  107. package/src/decorators/__tests__/filter-out.test.ts +0 -335
  108. package/src/decorators/__tests__/media-type-examples-override.test.ts +0 -665
  109. package/src/decorators/__tests__/remove-x-internal.test.ts +0 -316
  110. package/src/decorators/__tests__/resources/request.yaml +0 -3
  111. package/src/decorators/__tests__/resources/response.yaml +0 -3
  112. package/src/decorators/common/filters/filter-helper.ts +0 -72
  113. package/src/decorators/common/filters/filter-in.ts +0 -18
  114. package/src/decorators/common/filters/filter-out.ts +0 -18
  115. package/src/decorators/common/info-description-override.ts +0 -24
  116. package/src/decorators/common/info-override.ts +0 -15
  117. package/src/decorators/common/media-type-examples-override.ts +0 -79
  118. package/src/decorators/common/operation-description-override.ts +0 -30
  119. package/src/decorators/common/registry-dependencies.ts +0 -25
  120. package/src/decorators/common/remove-x-internal.ts +0 -59
  121. package/src/decorators/common/tag-description-override.ts +0 -25
  122. package/src/decorators/oas2/index.ts +0 -20
  123. package/src/decorators/oas3/index.ts +0 -22
  124. package/src/env.ts +0 -5
  125. package/src/format/codeframes.ts +0 -216
  126. package/src/format/format.ts +0 -375
  127. package/src/index.ts +0 -71
  128. package/src/js-yaml/index.ts +0 -14
  129. package/src/lint.ts +0 -130
  130. package/src/logger.ts +0 -34
  131. package/src/oas-types.ts +0 -57
  132. package/src/output.ts +0 -7
  133. package/src/redocly/__tests__/redocly-client.test.ts +0 -146
  134. package/src/redocly/index.ts +0 -187
  135. package/src/redocly/redocly-client-types.ts +0 -10
  136. package/src/redocly/registry-api-types.ts +0 -32
  137. package/src/redocly/registry-api.ts +0 -149
  138. package/src/ref-utils.ts +0 -85
  139. package/src/resolve.ts +0 -417
  140. package/src/rules/__tests__/fixtures/code-sample.php +0 -9
  141. package/src/rules/__tests__/fixtures/invalid-yaml.yaml +0 -1
  142. package/src/rules/__tests__/fixtures/ref.yaml +0 -1
  143. package/src/rules/__tests__/no-unresolved-refs.test.ts +0 -257
  144. package/src/rules/__tests__/utils.test.ts +0 -160
  145. package/src/rules/ajv.ts +0 -102
  146. package/src/rules/common/__tests__/info-license.test.ts +0 -62
  147. package/src/rules/common/__tests__/license-url.test.ts +0 -63
  148. package/src/rules/common/__tests__/no-ambiguous-paths.test.ts +0 -96
  149. package/src/rules/common/__tests__/no-enum-type-mismatch.test.ts +0 -210
  150. package/src/rules/common/__tests__/no-identical-paths.test.ts +0 -58
  151. package/src/rules/common/__tests__/no-path-trailing-slash.test.ts +0 -85
  152. package/src/rules/common/__tests__/operation-2xx-response.test.ts +0 -192
  153. package/src/rules/common/__tests__/operation-4xx-response.test.ts +0 -231
  154. package/src/rules/common/__tests__/operation-operationId-unique.test.ts +0 -76
  155. package/src/rules/common/__tests__/operation-operationId-url-safe.test.ts +0 -45
  156. package/src/rules/common/__tests__/operation-parameters-unique.test.ts +0 -167
  157. package/src/rules/common/__tests__/operation-singular-tag.test.ts +0 -72
  158. package/src/rules/common/__tests__/path-http-verbs-order.test.ts +0 -95
  159. package/src/rules/common/__tests__/path-not-include-query.test.ts +0 -64
  160. package/src/rules/common/__tests__/path-params-defined.test.ts +0 -202
  161. package/src/rules/common/__tests__/paths-kebab-case.test.ts +0 -108
  162. package/src/rules/common/__tests__/scalar-property-missing-example.test.ts +0 -264
  163. package/src/rules/common/__tests__/security-defined.test.ts +0 -175
  164. package/src/rules/common/__tests__/spec.test.ts +0 -555
  165. package/src/rules/common/__tests__/tag-description.test.ts +0 -65
  166. package/src/rules/common/__tests__/tags-alphabetical.test.ts +0 -64
  167. package/src/rules/common/assertions/__tests__/asserts.test.ts +0 -869
  168. package/src/rules/common/assertions/__tests__/index.test.ts +0 -100
  169. package/src/rules/common/assertions/__tests__/utils.test.ts +0 -236
  170. package/src/rules/common/assertions/asserts.ts +0 -357
  171. package/src/rules/common/assertions/index.ts +0 -56
  172. package/src/rules/common/assertions/utils.ts +0 -331
  173. package/src/rules/common/info-contact.ts +0 -15
  174. package/src/rules/common/info-license-url.ts +0 -10
  175. package/src/rules/common/info-license.ts +0 -15
  176. package/src/rules/common/no-ambiguous-paths.ts +0 -50
  177. package/src/rules/common/no-enum-type-mismatch.ts +0 -52
  178. package/src/rules/common/no-http-verbs-in-paths.ts +0 -36
  179. package/src/rules/common/no-identical-paths.ts +0 -24
  180. package/src/rules/common/no-invalid-parameter-examples.ts +0 -36
  181. package/src/rules/common/no-invalid-schema-examples.ts +0 -27
  182. package/src/rules/common/no-path-trailing-slash.ts +0 -15
  183. package/src/rules/common/operation-2xx-response.ts +0 -24
  184. package/src/rules/common/operation-4xx-response.ts +0 -24
  185. package/src/rules/common/operation-description.ts +0 -13
  186. package/src/rules/common/operation-operationId-unique.ts +0 -21
  187. package/src/rules/common/operation-operationId-url-safe.ts +0 -19
  188. package/src/rules/common/operation-operationId.ts +0 -17
  189. package/src/rules/common/operation-parameters-unique.ts +0 -48
  190. package/src/rules/common/operation-singular-tag.ts +0 -17
  191. package/src/rules/common/operation-summary.ts +0 -13
  192. package/src/rules/common/operation-tag-defined.ts +0 -26
  193. package/src/rules/common/parameter-description.ts +0 -22
  194. package/src/rules/common/path-declaration-must-exist.ts +0 -15
  195. package/src/rules/common/path-excludes-patterns.ts +0 -23
  196. package/src/rules/common/path-http-verbs-order.ts +0 -30
  197. package/src/rules/common/path-not-include-query.ts +0 -17
  198. package/src/rules/common/path-params-defined.ts +0 -65
  199. package/src/rules/common/path-segment-plural.ts +0 -31
  200. package/src/rules/common/paths-kebab-case.ts +0 -19
  201. package/src/rules/common/required-string-property-missing-min-length.ts +0 -44
  202. package/src/rules/common/response-contains-header.ts +0 -35
  203. package/src/rules/common/scalar-property-missing-example.ts +0 -58
  204. package/src/rules/common/security-defined.ts +0 -65
  205. package/src/rules/common/spec.ts +0 -174
  206. package/src/rules/common/tag-description.ts +0 -10
  207. package/src/rules/common/tags-alphabetical.ts +0 -20
  208. package/src/rules/no-unresolved-refs.ts +0 -51
  209. package/src/rules/oas2/__tests__/boolean-parameter-prefixes.test.ts +0 -110
  210. package/src/rules/oas2/__tests__/response-contains-header.test.ts +0 -174
  211. package/src/rules/oas2/__tests__/response-contains-property.test.ts +0 -155
  212. package/src/rules/oas2/__tests__/spec/fixtures/description.md +0 -1
  213. package/src/rules/oas2/__tests__/spec/info.test.ts +0 -355
  214. package/src/rules/oas2/__tests__/spec/operation.test.ts +0 -123
  215. package/src/rules/oas2/__tests__/spec/paths.test.ts +0 -245
  216. package/src/rules/oas2/__tests__/spec/referenceableScalars.test.ts +0 -35
  217. package/src/rules/oas2/__tests__/spec/utils.ts +0 -32
  218. package/src/rules/oas2/boolean-parameter-prefixes.ts +0 -26
  219. package/src/rules/oas2/index.ts +0 -89
  220. package/src/rules/oas2/remove-unused-components.ts +0 -81
  221. package/src/rules/oas2/request-mime-type.ts +0 -17
  222. package/src/rules/oas2/response-contains-property.ts +0 -36
  223. package/src/rules/oas2/response-mime-type.ts +0 -17
  224. package/src/rules/oas3/__tests__/boolean-parameter-prefixes.test.ts +0 -111
  225. package/src/rules/oas3/__tests__/fixtures/common.yaml +0 -11
  226. package/src/rules/oas3/__tests__/no-empty-enum-servers.com.test.ts +0 -205
  227. package/src/rules/oas3/__tests__/no-example-value-and-externalValue.test.ts +0 -65
  228. package/src/rules/oas3/__tests__/no-invalid-media-type-examples.test.ts +0 -473
  229. package/src/rules/oas3/__tests__/no-server-example.com.test.ts +0 -60
  230. package/src/rules/oas3/__tests__/no-server-trailing-slash.test.ts +0 -79
  231. package/src/rules/oas3/__tests__/no-unused-components.test.ts +0 -131
  232. package/src/rules/oas3/__tests__/operation-4xx-problem-details-rfc7807.test.ts +0 -145
  233. package/src/rules/oas3/__tests__/response-contains-header.test.ts +0 -389
  234. package/src/rules/oas3/__tests__/response-contains-property.test.ts +0 -403
  235. package/src/rules/oas3/__tests__/spec/callbacks.test.ts +0 -41
  236. package/src/rules/oas3/__tests__/spec/fixtures/description.md +0 -1
  237. package/src/rules/oas3/__tests__/spec/info.test.ts +0 -391
  238. package/src/rules/oas3/__tests__/spec/operation.test.ts +0 -253
  239. package/src/rules/oas3/__tests__/spec/paths.test.ts +0 -284
  240. package/src/rules/oas3/__tests__/spec/referenceableScalars.test.ts +0 -77
  241. package/src/rules/oas3/__tests__/spec/servers.test.ts +0 -505
  242. package/src/rules/oas3/__tests__/spec/spec.test.ts +0 -298
  243. package/src/rules/oas3/__tests__/spec/utils.ts +0 -32
  244. package/src/rules/oas3/__tests__/spec-components-invalid-map-name.test.ts +0 -305
  245. package/src/rules/oas3/boolean-parameter-prefixes.ts +0 -28
  246. package/src/rules/oas3/index.ts +0 -109
  247. package/src/rules/oas3/no-empty-servers.ts +0 -22
  248. package/src/rules/oas3/no-example-value-and-externalValue.ts +0 -14
  249. package/src/rules/oas3/no-invalid-media-type-examples.ts +0 -49
  250. package/src/rules/oas3/no-server-example.com.ts +0 -14
  251. package/src/rules/oas3/no-server-trailing-slash.ts +0 -15
  252. package/src/rules/oas3/no-server-variables-empty-enum.ts +0 -66
  253. package/src/rules/oas3/no-undefined-server-variable.ts +0 -30
  254. package/src/rules/oas3/no-unused-components.ts +0 -75
  255. package/src/rules/oas3/operation-4xx-problem-details-rfc7807.ts +0 -36
  256. package/src/rules/oas3/remove-unused-components.ts +0 -95
  257. package/src/rules/oas3/request-mime-type.ts +0 -31
  258. package/src/rules/oas3/response-contains-property.ts +0 -38
  259. package/src/rules/oas3/response-mime-type.ts +0 -31
  260. package/src/rules/oas3/spec-components-invalid-map-name.ts +0 -74
  261. package/src/rules/other/stats.ts +0 -73
  262. package/src/rules/utils.ts +0 -191
  263. package/src/types/index.ts +0 -149
  264. package/src/types/oas2.ts +0 -478
  265. package/src/types/oas3.ts +0 -597
  266. package/src/types/oas3_1.ts +0 -258
  267. package/src/types/redocly-yaml.ts +0 -1010
  268. package/src/typings/common.ts +0 -17
  269. package/src/typings/openapi.ts +0 -298
  270. package/src/typings/swagger.ts +0 -236
  271. package/src/utils.ts +0 -276
  272. package/src/visitors.ts +0 -491
  273. package/src/walk.ts +0 -453
  274. package/tsconfig.json +0 -8
  275. package/tsconfig.tsbuildinfo +0 -1
@@ -1,257 +0,0 @@
1
- import path = require('path');
2
- import { outdent } from 'outdent';
3
- import { lintDocument } from '../../lint';
4
- import { BaseResolver } from '../../resolve';
5
- import { parseYamlToDocument, replaceSourceWithRef, makeConfig } from '../../../__tests__/utils';
6
-
7
- describe('oas3 boolean-parameter-prefixes', () => {
8
- it('should report on unresolved $ref', async () => {
9
- const document = parseYamlToDocument(
10
- outdent`
11
- openapi: 3.0.0
12
- paths:
13
- '/test':
14
- put:
15
- requestBody:
16
- $ref: 'invalid.yaml'
17
- `,
18
- path.join(__dirname, 'foobar.yaml')
19
- );
20
-
21
- const results = await lintDocument({
22
- externalRefResolver: new BaseResolver(),
23
- document,
24
- config: await makeConfig({
25
- 'no-unresolved-refs': 'error',
26
- }),
27
- });
28
-
29
- expect(replaceSourceWithRef(results, __dirname)).toMatchInlineSnapshot(`
30
- Array [
31
- Object {
32
- "location": Array [
33
- Object {
34
- "pointer": "#/paths/~1test/put/requestBody",
35
- "reportOnKey": false,
36
- "source": "foobar.yaml",
37
- },
38
- ],
39
- "message": "Can't resolve $ref: ENOENT: no such file or directory 'invalid.yaml'",
40
- "ruleId": "no-unresolved-refs",
41
- "severity": "error",
42
- "suggest": Array [],
43
- },
44
- ]
45
- `);
46
- });
47
-
48
- it('should report on unresolved $ref yaml error', async () => {
49
- const document = parseYamlToDocument(
50
- outdent`
51
- openapi: 3.0.0
52
- paths:
53
- '/test':
54
- put:
55
- requestBody:
56
- $ref: 'fixtures/invalid-yaml.yaml'
57
- `,
58
- path.join(__dirname, 'foobar.yaml')
59
- );
60
-
61
- const results = await lintDocument({
62
- externalRefResolver: new BaseResolver(),
63
- document,
64
- config: await makeConfig({
65
- 'no-unresolved-refs': 'error',
66
- }),
67
- });
68
-
69
- expect(replaceSourceWithRef(results, __dirname)).toMatchInlineSnapshot(`
70
- Array [
71
- Object {
72
- "location": Array [
73
- Object {
74
- "pointer": undefined,
75
- "reportOnKey": false,
76
- "source": "fixtures/invalid-yaml.yaml",
77
- "start": Object {
78
- "col": 1,
79
- "line": 2,
80
- },
81
- },
82
- ],
83
- "message": "Failed to parse: unexpected end of the stream within a single quoted scalar in \\"fixtures/invalid-yaml.yaml\\" (2:1)",
84
- "ruleId": "no-unresolved-refs",
85
- "severity": "error",
86
- "suggest": Array [],
87
- },
88
- Object {
89
- "location": Array [
90
- Object {
91
- "pointer": "#/paths/~1test/put/requestBody",
92
- "reportOnKey": false,
93
- "source": "foobar.yaml",
94
- },
95
- ],
96
- "message": "Can't resolve $ref: unexpected end of the stream within a single quoted scalar in \\"fixtures/invalid-yaml.yaml\\" (2:1)",
97
- "ruleId": "no-unresolved-refs",
98
- "severity": "error",
99
- "suggest": Array [],
100
- },
101
- ]
102
- `);
103
- });
104
-
105
- it('should report on unresolved $ref yaml error', async () => {
106
- const document = parseYamlToDocument(
107
- outdent`
108
- openapi: 3.0.0
109
- paths:
110
- '/test':
111
- put:
112
- requestBody:
113
- $ref: 'fixtures/ref.yaml'
114
- `,
115
- path.join(__dirname, 'foobar.yaml')
116
- );
117
-
118
- const results = await lintDocument({
119
- externalRefResolver: new BaseResolver(),
120
- document,
121
- config: await makeConfig({
122
- 'no-unresolved-refs': 'error',
123
- }),
124
- });
125
-
126
- expect(replaceSourceWithRef(results, __dirname)).toMatchInlineSnapshot(`Array []`);
127
- });
128
-
129
- it('should report on unresolved localr ref', async () => {
130
- const document = parseYamlToDocument(
131
- outdent`
132
- openapi: 3.0.0
133
- paths:
134
- '/test':
135
- put:
136
- requestBody:
137
- $ref: '#/components/requestBodies/a'
138
- `,
139
- path.join(__dirname, 'foobar.yaml')
140
- );
141
-
142
- const results = await lintDocument({
143
- externalRefResolver: new BaseResolver(),
144
- document,
145
- config: await makeConfig({
146
- 'no-unresolved-refs': 'error',
147
- }),
148
- });
149
-
150
- expect(replaceSourceWithRef(results, __dirname)).toMatchInlineSnapshot(`
151
- Array [
152
- Object {
153
- "location": Array [
154
- Object {
155
- "pointer": "#/paths/~1test/put/requestBody",
156
- "reportOnKey": false,
157
- "source": "foobar.yaml",
158
- },
159
- ],
160
- "message": "Can't resolve $ref",
161
- "ruleId": "no-unresolved-refs",
162
- "severity": "error",
163
- "suggest": Array [],
164
- },
165
- ]
166
- `);
167
- });
168
-
169
- it('should not report on refs inside specification extensions', async () => {
170
- const document = parseYamlToDocument(
171
- outdent`
172
- openapi: 3.0.0
173
- components:
174
- requestBodies:
175
- a:
176
- content:
177
- application/json:
178
- schema:
179
- type: object
180
- x-webhooks:
181
- test:
182
- put:
183
- requestBody:
184
- $ref: '#/components/requestBodies/a'
185
- `,
186
- path.join(__dirname, 'foobar.yaml')
187
- );
188
-
189
- const results = await lintDocument({
190
- externalRefResolver: new BaseResolver(),
191
- document,
192
- config: await makeConfig({
193
- 'no-unresolved-refs': 'error',
194
- }),
195
- });
196
-
197
- expect(replaceSourceWithRef(results, __dirname)).toMatchInlineSnapshot(`Array []`);
198
- });
199
-
200
- it('should not report on nested refs inside specification extensions', async () => {
201
- const document = parseYamlToDocument(
202
- outdent`
203
- openapi: 3.0.0
204
- x-test:
205
- prop:
206
- $ref: 'fixtures/ref.yaml'
207
- paths:
208
- '/test':
209
- get:
210
- x-codeSamples:
211
- - lang: PHP
212
- source:
213
- $ref: 'fixtures/code-sample.php'
214
- `,
215
- path.join(__dirname, 'foobar.yaml')
216
- );
217
-
218
- const results = await lintDocument({
219
- externalRefResolver: new BaseResolver(),
220
- document,
221
- config: await makeConfig({
222
- 'no-unresolved-refs': 'error',
223
- }),
224
- });
225
-
226
- expect(replaceSourceWithRef(results, __dirname)).toMatchInlineSnapshot(`Array []`);
227
- });
228
-
229
- it('should not report on nested refs inside specification extensions for 3.1', async () => {
230
- const document = parseYamlToDocument(
231
- outdent`
232
- openapi: 3.1.0
233
- x-test:
234
- prop:
235
- $ref: 'fixtures/ref.yaml'
236
- paths:
237
- '/test':
238
- get:
239
- x-codeSamples:
240
- - lang: PHP
241
- source:
242
- $ref: 'fixtures/code-sample.php'
243
- `,
244
- path.join(__dirname, 'foobar.yaml')
245
- );
246
-
247
- const results = await lintDocument({
248
- externalRefResolver: new BaseResolver(),
249
- document,
250
- config: await makeConfig({
251
- 'no-unresolved-refs': 'error',
252
- }),
253
- });
254
-
255
- expect(replaceSourceWithRef(results, __dirname)).toMatchInlineSnapshot(`Array []`);
256
- });
257
- });
@@ -1,160 +0,0 @@
1
- import {
2
- fieldNonEmpty,
3
- matchesJsonSchemaType,
4
- missingRequiredField,
5
- oasTypeOf,
6
- getAdditionalPropertiesOption,
7
- } from '../utils';
8
-
9
- describe('field-non-empty', () => {
10
- it('should match expected message', () => {
11
- const message = fieldNonEmpty('Car', 'color');
12
- expect(message).toBe('Car object `color` must be non-empty string.');
13
- });
14
- });
15
-
16
- describe('matches-json-schema-type', () => {
17
- it('should report true on a null value with nullable type', () => {
18
- const results = matchesJsonSchemaType(null, 'string', true);
19
- expect(results).toBe(true);
20
- });
21
-
22
- it('should report true on a value and type integer', () => {
23
- const results = matchesJsonSchemaType(123, 'integer', false);
24
- expect(results).toBe(true);
25
- });
26
-
27
- it('should report false when the value is not integer and type is integer', () => {
28
- const results = matchesJsonSchemaType(3.14, 'integer', false);
29
- expect(results).toBe(false);
30
- });
31
-
32
- it('should report true when the value is a number and type is number', () => {
33
- const results = matchesJsonSchemaType(3.14, 'number', false);
34
- expect(results).toBe(true);
35
- });
36
-
37
- it('should report true when the value is an integer and type is number', () => {
38
- const results = matchesJsonSchemaType(3, 'number', false);
39
- expect(results).toBe(true);
40
- });
41
-
42
- it('should report true when the value is true and type is boolean', () => {
43
- const results = matchesJsonSchemaType(true, 'boolean', false);
44
- expect(results).toBe(true);
45
- });
46
-
47
- it('should report true when the value is false and type is boolean', () => {
48
- const results = matchesJsonSchemaType(false, 'boolean', false);
49
- expect(results).toBe(true);
50
- });
51
-
52
- it('should report true when the value is a string and type is boolean', () => {
53
- const results = matchesJsonSchemaType('test', 'boolean', false);
54
- expect(results).toBe(false);
55
- });
56
-
57
- it('should report true on an array value with array type', () => {
58
- const results = matchesJsonSchemaType(['foo', 'bar'], 'array', false);
59
- expect(results).toBe(true);
60
- });
61
-
62
- it('should report false on an array value with object type', () => {
63
- const results = matchesJsonSchemaType(['foo', 'bar'], 'object', false);
64
- expect(results).toBe(false);
65
- });
66
-
67
- it('should report true on an object value with object type', () => {
68
- const car = { type: 'Fiat', model: '500', color: 'white' };
69
- const results = matchesJsonSchemaType(car, 'object', true);
70
- expect(results).toBe(true);
71
- });
72
-
73
- it('should report false on an object value with array type', () => {
74
- const car = { type: 'Fiat', model: '500', color: 'white' };
75
- const results = matchesJsonSchemaType(car, 'array', true);
76
- expect(results).toBe(false);
77
- });
78
- });
79
-
80
- describe('missing-required-field', () => {
81
- it('should match expected message for missing required field', () => {
82
- const message = missingRequiredField('Car', 'color');
83
- expect(message).toBe('Car object should contain `color` field.');
84
- });
85
- });
86
-
87
- describe('oas-type-of', () => {
88
- it('should report the correct oas type for a string', () => {
89
- const results = oasTypeOf('word');
90
- expect(results).toBe('string');
91
- });
92
-
93
- it('should report the correct oas type for an integer', () => {
94
- const results = oasTypeOf(123);
95
- expect(results).toBe('integer');
96
- });
97
-
98
- it('should report the correct oas type for a number', () => {
99
- const results = oasTypeOf(3.14);
100
- expect(results).toBe('number');
101
- });
102
-
103
- it('should report the correct oas type for a null value', () => {
104
- const results = oasTypeOf(null);
105
- expect(results).toBe('null');
106
- });
107
-
108
- it('should report the correct oas type for a true boolean', () => {
109
- const results = oasTypeOf(true);
110
- expect(results).toBe('boolean');
111
- });
112
-
113
- it('should report the correct oas type for a false boolean', () => {
114
- const results = oasTypeOf(false);
115
- expect(results).toBe('boolean');
116
- });
117
-
118
- it('should report the correct oas type for an array', () => {
119
- const results = oasTypeOf(['foo', 'bar']);
120
- expect(results).toBe('array');
121
- });
122
-
123
- it('should report the correct oas type for an object', () => {
124
- const car = { type: 'Fiat', model: '500', color: 'white' };
125
- const results = oasTypeOf(car);
126
- expect(results).toBe('object');
127
- });
128
- });
129
-
130
- describe('get-additional-properties-option', () => {
131
- it('should return actual option', () => {
132
- const options = {
133
- allowAdditionalProperties: true,
134
- };
135
- expect(getAdditionalPropertiesOption(options)).toBeTruthy();
136
- });
137
-
138
- it('should reverse option', () => {
139
- const options = {
140
- disallowAdditionalProperties: true,
141
- };
142
- expect(getAdditionalPropertiesOption(options)).toBeFalsy();
143
- });
144
-
145
- it('should throw error with message', () => {
146
- const options = {
147
- allowAdditionalProperties: true,
148
- disallowAdditionalProperties: false,
149
- };
150
-
151
- try {
152
- getAdditionalPropertiesOption(options);
153
- } catch (error) {
154
- expect(error).toBeInstanceOf(Error);
155
- expect(error.message).toEqual(
156
- "Do not use 'disallowAdditionalProperties' field. Use 'allowAdditionalProperties' instead. \n"
157
- );
158
- }
159
- });
160
- });
package/src/rules/ajv.ts DELETED
@@ -1,102 +0,0 @@
1
- import Ajv, { ValidateFunction, ErrorObject } from '@redocly/ajv/dist/2020';
2
- import { Location, escapePointer } from '../ref-utils';
3
- import { ResolveFn } from '../walk';
4
-
5
- let ajvInstance: Ajv | null = null;
6
-
7
- export function releaseAjvInstance() {
8
- ajvInstance = null;
9
- }
10
-
11
- function getAjv(resolve: ResolveFn, allowAdditionalProperties: boolean) {
12
- if (!ajvInstance) {
13
- ajvInstance = new Ajv({
14
- schemaId: '$id',
15
- meta: true,
16
- allErrors: true,
17
- strictSchema: false,
18
- inlineRefs: false,
19
- validateSchema: false,
20
- discriminator: true,
21
- allowUnionTypes: true,
22
- validateFormats: false, // TODO: fix it
23
- defaultUnevaluatedProperties: allowAdditionalProperties,
24
- loadSchemaSync(base: string, $ref: string) {
25
- const resolvedRef = resolve({ $ref }, base.split('#')[0]);
26
- if (!resolvedRef || !resolvedRef.location) return false;
27
- return { $id: resolvedRef.location.absolutePointer, ...resolvedRef.node };
28
- },
29
- logger: false,
30
- });
31
- }
32
- return ajvInstance;
33
- }
34
-
35
- function getAjvValidator(
36
- schema: any,
37
- loc: Location,
38
- resolve: ResolveFn,
39
- allowAdditionalProperties: boolean
40
- ): ValidateFunction | undefined {
41
- const ajv = getAjv(resolve, allowAdditionalProperties);
42
-
43
- if (!ajv.getSchema(loc.absolutePointer)) {
44
- ajv.addSchema({ $id: loc.absolutePointer, ...schema }, loc.absolutePointer);
45
- }
46
-
47
- return ajv.getSchema(loc.absolutePointer);
48
- }
49
-
50
- export function validateJsonSchema(
51
- data: any,
52
- schema: any,
53
- schemaLoc: Location,
54
- instancePath: string,
55
- resolve: ResolveFn,
56
- allowAdditionalProperties: boolean
57
- ): { valid: boolean; errors: (ErrorObject & { suggest?: string[] })[] } {
58
- const validate = getAjvValidator(schema, schemaLoc, resolve, allowAdditionalProperties);
59
- if (!validate) return { valid: true, errors: [] }; // unresolved refs are reported
60
-
61
- const valid = validate(data, {
62
- instancePath,
63
- parentData: { fake: {} },
64
- parentDataProperty: 'fake',
65
- rootData: {},
66
- dynamicAnchors: {},
67
- });
68
-
69
- return {
70
- valid: !!valid,
71
- errors: (validate.errors || []).map(beatifyErrorMessage),
72
- };
73
-
74
- function beatifyErrorMessage(error: ErrorObject) {
75
- let message = error.message;
76
- const suggest = error.keyword === 'enum' ? error.params.allowedValues : undefined;
77
- if (suggest) {
78
- message += ` ${suggest.map((e: any) => `"${e}"`).join(', ')}`;
79
- }
80
-
81
- if (error.keyword === 'type') {
82
- message = `type ${message}`;
83
- }
84
-
85
- const relativePath = error.instancePath.substring(instancePath.length + 1);
86
- const propName = relativePath.substring(relativePath.lastIndexOf('/') + 1);
87
- if (propName) {
88
- message = `\`${propName}\` property ${message}`;
89
- }
90
- if (error.keyword === 'additionalProperties' || error.keyword === 'unevaluatedProperties') {
91
- const property = error.params.additionalProperty || error.params.unevaluatedProperty;
92
- message = `${message} \`${property}\``;
93
- error.instancePath += '/' + escapePointer(property);
94
- }
95
-
96
- return {
97
- ...error,
98
- message,
99
- suggest,
100
- };
101
- }
102
- }
@@ -1,62 +0,0 @@
1
- import { outdent } from 'outdent';
2
- import { lintDocument } from '../../../lint';
3
- import { parseYamlToDocument, replaceSourceWithRef, makeConfig } from '../../../../__tests__/utils';
4
- import { BaseResolver } from '../../../resolve';
5
-
6
- describe('Oas3 info-license', () => {
7
- it('should report on info with no license', async () => {
8
- const document = parseYamlToDocument(
9
- outdent`
10
- openapi: 3.0.0
11
- info:
12
- version: '1.0'
13
- `,
14
- 'foobar.yaml'
15
- );
16
-
17
- const results = await lintDocument({
18
- externalRefResolver: new BaseResolver(),
19
- document,
20
- config: await makeConfig({ 'info-license': 'error' }),
21
- });
22
-
23
- expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
24
- Array [
25
- Object {
26
- "location": Array [
27
- Object {
28
- "pointer": "#/info",
29
- "reportOnKey": true,
30
- "source": "foobar.yaml",
31
- },
32
- ],
33
- "message": "Info object should contain \`license\` field.",
34
- "ruleId": "info-license",
35
- "severity": "error",
36
- "suggest": Array [],
37
- },
38
- ]
39
- `);
40
- });
41
-
42
- it('should not report on info with license', async () => {
43
- const document = parseYamlToDocument(
44
- outdent`
45
- openapi: 3.0.0
46
- info:
47
- license:
48
- name: MIT
49
- url: google.com
50
- `,
51
- 'foobar.yaml'
52
- );
53
-
54
- const results = await lintDocument({
55
- externalRefResolver: new BaseResolver(),
56
- document,
57
- config: await makeConfig({ 'info-license': 'error' }),
58
- });
59
-
60
- expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`Array []`);
61
- });
62
- });
@@ -1,63 +0,0 @@
1
- import { outdent } from 'outdent';
2
- import { lintDocument } from '../../../lint';
3
- import { parseYamlToDocument, replaceSourceWithRef, makeConfig } from '../../../../__tests__/utils';
4
- import { BaseResolver } from '../../../resolve';
5
-
6
- describe('Oas3 license-url', () => {
7
- it('should report on info.license with no url', async () => {
8
- const document = parseYamlToDocument(
9
- outdent`
10
- openapi: 3.0.0
11
- info:
12
- license:
13
- name: MIT
14
- `,
15
- 'foobar.yaml'
16
- );
17
-
18
- const results = await lintDocument({
19
- externalRefResolver: new BaseResolver(),
20
- document,
21
- config: await makeConfig({ 'info-license-url': 'error' }),
22
- });
23
-
24
- expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
25
- Array [
26
- Object {
27
- "location": Array [
28
- Object {
29
- "pointer": "#/info/license/url",
30
- "reportOnKey": true,
31
- "source": "foobar.yaml",
32
- },
33
- ],
34
- "message": "License object should contain \`url\` field.",
35
- "ruleId": "info-license-url",
36
- "severity": "error",
37
- "suggest": Array [],
38
- },
39
- ]
40
- `);
41
- });
42
-
43
- it('should not report on info.license with url', async () => {
44
- const document = parseYamlToDocument(
45
- outdent`
46
- openapi: 3.0.0
47
- info:
48
- license:
49
- name: MIT
50
- url: google.com
51
- `,
52
- 'foobar.yaml'
53
- );
54
-
55
- const results = await lintDocument({
56
- externalRefResolver: new BaseResolver(),
57
- document,
58
- config: await makeConfig({ 'info-license-url': 'error' }),
59
- });
60
-
61
- expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`Array []`);
62
- });
63
- });