@redocly/openapi-core 1.0.0-beta.125 → 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 (281) hide show
  1. package/lib/bundle.js +5 -2
  2. package/lib/config/all.js +8 -1
  3. package/lib/resolve.js +5 -1
  4. package/lib/rules/common/required-string-property-missing-min-length.d.ts +1 -1
  5. package/lib/rules/common/required-string-property-missing-min-length.js +3 -3
  6. package/lib/rules/common/spec.js +1 -0
  7. package/lib/rules/oas2/index.js +1 -1
  8. package/lib/rules/oas2/request-mime-type.d.ts +1 -1
  9. package/lib/rules/oas2/response-mime-type.d.ts +1 -1
  10. package/lib/rules/oas3/index.js +1 -1
  11. package/lib/rules/oas3/operation-4xx-problem-details-rfc7807.d.ts +2 -2
  12. package/lib/rules/oas3/operation-4xx-problem-details-rfc7807.js +3 -3
  13. package/lib/rules/oas3/request-mime-type.d.ts +1 -1
  14. package/lib/rules/oas3/response-mime-type.d.ts +1 -1
  15. package/lib/walk.d.ts +6 -5
  16. package/lib/walk.js +23 -27
  17. package/package.json +1 -1
  18. package/__tests__/utils.ts +0 -88
  19. package/src/__tests__/__snapshots__/bundle.test.ts.snap +0 -437
  20. package/src/__tests__/bundle.test.ts +0 -236
  21. package/src/__tests__/codeframes.test.ts +0 -530
  22. package/src/__tests__/fixtures/.redocly.lint-ignore.yaml +0 -5
  23. package/src/__tests__/fixtures/extension.js +0 -24
  24. package/src/__tests__/fixtures/refs/definitions.yaml +0 -3
  25. package/src/__tests__/fixtures/refs/examples.yaml +0 -8
  26. package/src/__tests__/fixtures/refs/external-request-body.yaml +0 -13
  27. package/src/__tests__/fixtures/refs/externalref.yaml +0 -35
  28. package/src/__tests__/fixtures/refs/hosted.yaml +0 -35
  29. package/src/__tests__/fixtures/refs/openapi-with-external-refs-conflicting-names.yaml +0 -21
  30. package/src/__tests__/fixtures/refs/openapi-with-external-refs.yaml +0 -33
  31. package/src/__tests__/fixtures/refs/openapi-with-url-refs.yaml +0 -18
  32. package/src/__tests__/fixtures/refs/param-b.yaml +0 -1
  33. package/src/__tests__/fixtures/refs/param-c.yaml +0 -1
  34. package/src/__tests__/fixtures/refs/rename.yaml +0 -1
  35. package/src/__tests__/fixtures/refs/requestBody.yaml +0 -9
  36. package/src/__tests__/fixtures/refs/schema-a.yaml +0 -1
  37. package/src/__tests__/fixtures/refs/simple.yaml +0 -1
  38. package/src/__tests__/fixtures/refs/vendor.schema.yaml +0 -20
  39. package/src/__tests__/fixtures/resolve/External.yaml +0 -10
  40. package/src/__tests__/fixtures/resolve/External2.yaml +0 -4
  41. package/src/__tests__/fixtures/resolve/description.md +0 -3
  42. package/src/__tests__/fixtures/resolve/externalInfo.yaml +0 -4
  43. package/src/__tests__/fixtures/resolve/externalLicense.yaml +0 -1
  44. package/src/__tests__/fixtures/resolve/openapi-with-back.yaml +0 -13
  45. package/src/__tests__/fixtures/resolve/openapi-with-md-description.yaml +0 -5
  46. package/src/__tests__/fixtures/resolve/openapi.yaml +0 -28
  47. package/src/__tests__/fixtures/resolve/schemas/type-a.yaml +0 -10
  48. package/src/__tests__/fixtures/resolve/schemas/type-b.yaml +0 -6
  49. package/src/__tests__/fixtures/resolve/transitive/a.yaml +0 -1
  50. package/src/__tests__/fixtures/resolve/transitive/components.yaml +0 -5
  51. package/src/__tests__/fixtures/resolve/transitive/schemas.yaml +0 -3
  52. package/src/__tests__/format.test.ts +0 -76
  53. package/src/__tests__/js-yaml.test.ts +0 -73
  54. package/src/__tests__/lint.test.ts +0 -388
  55. package/src/__tests__/logger-browser.test.ts +0 -53
  56. package/src/__tests__/logger.test.ts +0 -47
  57. package/src/__tests__/login.test.ts +0 -17
  58. package/src/__tests__/normalizeVisitors.test.ts +0 -151
  59. package/src/__tests__/output-browser.test.ts +0 -18
  60. package/src/__tests__/output.test.ts +0 -15
  61. package/src/__tests__/ref-utils.test.ts +0 -120
  62. package/src/__tests__/resolve-http.test.ts +0 -77
  63. package/src/__tests__/resolve.test.ts +0 -408
  64. package/src/__tests__/utils-browser.test.ts +0 -11
  65. package/src/__tests__/utils.test.ts +0 -144
  66. package/src/__tests__/walk.test.ts +0 -1545
  67. package/src/benchmark/benches/lint-with-many-rules.bench.ts +0 -35
  68. package/src/benchmark/benches/lint-with-nested-rule.bench.ts +0 -39
  69. package/src/benchmark/benches/lint-with-no-rules.bench.ts +0 -20
  70. package/src/benchmark/benches/lint-with-top-level-rule-report.bench.ts +0 -35
  71. package/src/benchmark/benches/lint-with-top-level-rule.bench.ts +0 -32
  72. package/src/benchmark/benches/rebilly.yaml +0 -32275
  73. package/src/benchmark/benches/recommended-oas3.bench.ts +0 -22
  74. package/src/benchmark/benches/resolve-with-no-external.bench.ts +0 -23
  75. package/src/benchmark/benchmark.js +0 -311
  76. package/src/benchmark/colors.js +0 -29
  77. package/src/benchmark/fork.js +0 -83
  78. package/src/benchmark/utils.ts +0 -36
  79. package/src/bundle.ts +0 -399
  80. package/src/config/__tests__/__snapshots__/config-resolvers.test.ts.snap +0 -161
  81. package/src/config/__tests__/__snapshots__/config.test.ts.snap +0 -144
  82. package/src/config/__tests__/config-resolvers.test.ts +0 -491
  83. package/src/config/__tests__/config.test.ts +0 -307
  84. package/src/config/__tests__/fixtures/ingore-file.ts +0 -8
  85. package/src/config/__tests__/fixtures/load-redocly.yaml +0 -2
  86. package/src/config/__tests__/fixtures/plugin-config.yaml +0 -2
  87. package/src/config/__tests__/fixtures/plugin.js +0 -56
  88. package/src/config/__tests__/fixtures/resolve-config/api/nested-config.yaml +0 -11
  89. package/src/config/__tests__/fixtures/resolve-config/api/plugin.js +0 -69
  90. package/src/config/__tests__/fixtures/resolve-config/local-config-with-circular.yaml +0 -7
  91. package/src/config/__tests__/fixtures/resolve-config/local-config-with-custom-function.yaml +0 -17
  92. package/src/config/__tests__/fixtures/resolve-config/local-config-with-file.yaml +0 -18
  93. package/src/config/__tests__/fixtures/resolve-config/local-config-with-wrong-custom-function.yaml +0 -15
  94. package/src/config/__tests__/fixtures/resolve-config/local-config.yaml +0 -9
  95. package/src/config/__tests__/fixtures/resolve-config/plugin.js +0 -80
  96. package/src/config/__tests__/fixtures/resolve-remote-configs/nested-remote-config.yaml +0 -3
  97. package/src/config/__tests__/fixtures/resolve-remote-configs/remote-config.yaml +0 -4
  98. package/src/config/__tests__/load.test.ts +0 -167
  99. package/src/config/__tests__/resolve-plugins.test.ts +0 -27
  100. package/src/config/__tests__/utils.test.ts +0 -204
  101. package/src/config/all.ts +0 -66
  102. package/src/config/builtIn.ts +0 -37
  103. package/src/config/config-resolvers.ts +0 -465
  104. package/src/config/config.ts +0 -330
  105. package/src/config/index.ts +0 -7
  106. package/src/config/load.ts +0 -144
  107. package/src/config/minimal.ts +0 -60
  108. package/src/config/recommended.ts +0 -60
  109. package/src/config/rules.ts +0 -54
  110. package/src/config/types.ts +0 -216
  111. package/src/config/utils.ts +0 -333
  112. package/src/decorators/__tests__/filter-in.test.ts +0 -310
  113. package/src/decorators/__tests__/filter-out.test.ts +0 -335
  114. package/src/decorators/__tests__/media-type-examples-override.test.ts +0 -665
  115. package/src/decorators/__tests__/remove-x-internal.test.ts +0 -316
  116. package/src/decorators/__tests__/resources/request.yaml +0 -3
  117. package/src/decorators/__tests__/resources/response.yaml +0 -3
  118. package/src/decorators/common/filters/filter-helper.ts +0 -72
  119. package/src/decorators/common/filters/filter-in.ts +0 -18
  120. package/src/decorators/common/filters/filter-out.ts +0 -18
  121. package/src/decorators/common/info-description-override.ts +0 -24
  122. package/src/decorators/common/info-override.ts +0 -15
  123. package/src/decorators/common/media-type-examples-override.ts +0 -79
  124. package/src/decorators/common/operation-description-override.ts +0 -30
  125. package/src/decorators/common/registry-dependencies.ts +0 -25
  126. package/src/decorators/common/remove-x-internal.ts +0 -59
  127. package/src/decorators/common/tag-description-override.ts +0 -25
  128. package/src/decorators/oas2/index.ts +0 -20
  129. package/src/decorators/oas3/index.ts +0 -22
  130. package/src/env.ts +0 -5
  131. package/src/format/codeframes.ts +0 -216
  132. package/src/format/format.ts +0 -375
  133. package/src/index.ts +0 -71
  134. package/src/js-yaml/index.ts +0 -14
  135. package/src/lint.ts +0 -130
  136. package/src/logger.ts +0 -34
  137. package/src/oas-types.ts +0 -57
  138. package/src/output.ts +0 -7
  139. package/src/redocly/__tests__/redocly-client.test.ts +0 -146
  140. package/src/redocly/index.ts +0 -187
  141. package/src/redocly/redocly-client-types.ts +0 -10
  142. package/src/redocly/registry-api-types.ts +0 -32
  143. package/src/redocly/registry-api.ts +0 -149
  144. package/src/ref-utils.ts +0 -85
  145. package/src/resolve.ts +0 -412
  146. package/src/rules/__tests__/fixtures/code-sample.php +0 -9
  147. package/src/rules/__tests__/fixtures/invalid-yaml.yaml +0 -1
  148. package/src/rules/__tests__/fixtures/ref.yaml +0 -1
  149. package/src/rules/__tests__/no-unresolved-refs.test.ts +0 -257
  150. package/src/rules/__tests__/utils.test.ts +0 -160
  151. package/src/rules/ajv.ts +0 -102
  152. package/src/rules/common/__tests__/info-license.test.ts +0 -62
  153. package/src/rules/common/__tests__/license-url.test.ts +0 -63
  154. package/src/rules/common/__tests__/no-ambiguous-paths.test.ts +0 -96
  155. package/src/rules/common/__tests__/no-enum-type-mismatch.test.ts +0 -210
  156. package/src/rules/common/__tests__/no-identical-paths.test.ts +0 -58
  157. package/src/rules/common/__tests__/no-path-trailing-slash.test.ts +0 -85
  158. package/src/rules/common/__tests__/operation-2xx-response.test.ts +0 -192
  159. package/src/rules/common/__tests__/operation-4xx-response.test.ts +0 -231
  160. package/src/rules/common/__tests__/operation-operationId-unique.test.ts +0 -76
  161. package/src/rules/common/__tests__/operation-operationId-url-safe.test.ts +0 -45
  162. package/src/rules/common/__tests__/operation-parameters-unique.test.ts +0 -167
  163. package/src/rules/common/__tests__/operation-singular-tag.test.ts +0 -72
  164. package/src/rules/common/__tests__/path-http-verbs-order.test.ts +0 -95
  165. package/src/rules/common/__tests__/path-not-include-query.test.ts +0 -64
  166. package/src/rules/common/__tests__/path-params-defined.test.ts +0 -202
  167. package/src/rules/common/__tests__/paths-kebab-case.test.ts +0 -108
  168. package/src/rules/common/__tests__/scalar-property-missing-example.test.ts +0 -264
  169. package/src/rules/common/__tests__/security-defined.test.ts +0 -175
  170. package/src/rules/common/__tests__/spec.test.ts +0 -555
  171. package/src/rules/common/__tests__/tag-description.test.ts +0 -65
  172. package/src/rules/common/__tests__/tags-alphabetical.test.ts +0 -64
  173. package/src/rules/common/assertions/__tests__/asserts.test.ts +0 -869
  174. package/src/rules/common/assertions/__tests__/index.test.ts +0 -100
  175. package/src/rules/common/assertions/__tests__/utils.test.ts +0 -236
  176. package/src/rules/common/assertions/asserts.ts +0 -357
  177. package/src/rules/common/assertions/index.ts +0 -56
  178. package/src/rules/common/assertions/utils.ts +0 -331
  179. package/src/rules/common/info-contact.ts +0 -15
  180. package/src/rules/common/info-license-url.ts +0 -10
  181. package/src/rules/common/info-license.ts +0 -15
  182. package/src/rules/common/no-ambiguous-paths.ts +0 -50
  183. package/src/rules/common/no-enum-type-mismatch.ts +0 -52
  184. package/src/rules/common/no-http-verbs-in-paths.ts +0 -36
  185. package/src/rules/common/no-identical-paths.ts +0 -24
  186. package/src/rules/common/no-invalid-parameter-examples.ts +0 -36
  187. package/src/rules/common/no-invalid-schema-examples.ts +0 -27
  188. package/src/rules/common/no-path-trailing-slash.ts +0 -15
  189. package/src/rules/common/operation-2xx-response.ts +0 -24
  190. package/src/rules/common/operation-4xx-response.ts +0 -24
  191. package/src/rules/common/operation-description.ts +0 -13
  192. package/src/rules/common/operation-operationId-unique.ts +0 -21
  193. package/src/rules/common/operation-operationId-url-safe.ts +0 -19
  194. package/src/rules/common/operation-operationId.ts +0 -17
  195. package/src/rules/common/operation-parameters-unique.ts +0 -48
  196. package/src/rules/common/operation-singular-tag.ts +0 -17
  197. package/src/rules/common/operation-summary.ts +0 -13
  198. package/src/rules/common/operation-tag-defined.ts +0 -26
  199. package/src/rules/common/parameter-description.ts +0 -22
  200. package/src/rules/common/path-declaration-must-exist.ts +0 -15
  201. package/src/rules/common/path-excludes-patterns.ts +0 -23
  202. package/src/rules/common/path-http-verbs-order.ts +0 -30
  203. package/src/rules/common/path-not-include-query.ts +0 -17
  204. package/src/rules/common/path-params-defined.ts +0 -65
  205. package/src/rules/common/path-segment-plural.ts +0 -31
  206. package/src/rules/common/paths-kebab-case.ts +0 -19
  207. package/src/rules/common/required-string-property-missing-min-length.ts +0 -44
  208. package/src/rules/common/response-contains-header.ts +0 -35
  209. package/src/rules/common/scalar-property-missing-example.ts +0 -58
  210. package/src/rules/common/security-defined.ts +0 -65
  211. package/src/rules/common/spec.ts +0 -174
  212. package/src/rules/common/tag-description.ts +0 -10
  213. package/src/rules/common/tags-alphabetical.ts +0 -20
  214. package/src/rules/no-unresolved-refs.ts +0 -51
  215. package/src/rules/oas2/__tests__/boolean-parameter-prefixes.test.ts +0 -110
  216. package/src/rules/oas2/__tests__/response-contains-header.test.ts +0 -174
  217. package/src/rules/oas2/__tests__/response-contains-property.test.ts +0 -155
  218. package/src/rules/oas2/__tests__/spec/fixtures/description.md +0 -1
  219. package/src/rules/oas2/__tests__/spec/info.test.ts +0 -355
  220. package/src/rules/oas2/__tests__/spec/operation.test.ts +0 -123
  221. package/src/rules/oas2/__tests__/spec/paths.test.ts +0 -245
  222. package/src/rules/oas2/__tests__/spec/referenceableScalars.test.ts +0 -35
  223. package/src/rules/oas2/__tests__/spec/utils.ts +0 -32
  224. package/src/rules/oas2/boolean-parameter-prefixes.ts +0 -26
  225. package/src/rules/oas2/index.ts +0 -89
  226. package/src/rules/oas2/remove-unused-components.ts +0 -81
  227. package/src/rules/oas2/request-mime-type.ts +0 -17
  228. package/src/rules/oas2/response-contains-property.ts +0 -36
  229. package/src/rules/oas2/response-mime-type.ts +0 -17
  230. package/src/rules/oas3/__tests__/boolean-parameter-prefixes.test.ts +0 -111
  231. package/src/rules/oas3/__tests__/fixtures/common.yaml +0 -11
  232. package/src/rules/oas3/__tests__/no-empty-enum-servers.com.test.ts +0 -205
  233. package/src/rules/oas3/__tests__/no-example-value-and-externalValue.test.ts +0 -65
  234. package/src/rules/oas3/__tests__/no-invalid-media-type-examples.test.ts +0 -473
  235. package/src/rules/oas3/__tests__/no-server-example.com.test.ts +0 -60
  236. package/src/rules/oas3/__tests__/no-server-trailing-slash.test.ts +0 -79
  237. package/src/rules/oas3/__tests__/no-unused-components.test.ts +0 -131
  238. package/src/rules/oas3/__tests__/operation-4xx-problem-details-rfc7807.test.ts +0 -145
  239. package/src/rules/oas3/__tests__/response-contains-header.test.ts +0 -389
  240. package/src/rules/oas3/__tests__/response-contains-property.test.ts +0 -403
  241. package/src/rules/oas3/__tests__/spec/callbacks.test.ts +0 -41
  242. package/src/rules/oas3/__tests__/spec/fixtures/description.md +0 -1
  243. package/src/rules/oas3/__tests__/spec/info.test.ts +0 -391
  244. package/src/rules/oas3/__tests__/spec/operation.test.ts +0 -253
  245. package/src/rules/oas3/__tests__/spec/paths.test.ts +0 -284
  246. package/src/rules/oas3/__tests__/spec/referenceableScalars.test.ts +0 -77
  247. package/src/rules/oas3/__tests__/spec/servers.test.ts +0 -505
  248. package/src/rules/oas3/__tests__/spec/spec.test.ts +0 -298
  249. package/src/rules/oas3/__tests__/spec/utils.ts +0 -32
  250. package/src/rules/oas3/__tests__/spec-components-invalid-map-name.test.ts +0 -305
  251. package/src/rules/oas3/boolean-parameter-prefixes.ts +0 -28
  252. package/src/rules/oas3/index.ts +0 -109
  253. package/src/rules/oas3/no-empty-servers.ts +0 -22
  254. package/src/rules/oas3/no-example-value-and-externalValue.ts +0 -14
  255. package/src/rules/oas3/no-invalid-media-type-examples.ts +0 -49
  256. package/src/rules/oas3/no-server-example.com.ts +0 -14
  257. package/src/rules/oas3/no-server-trailing-slash.ts +0 -15
  258. package/src/rules/oas3/no-server-variables-empty-enum.ts +0 -66
  259. package/src/rules/oas3/no-undefined-server-variable.ts +0 -30
  260. package/src/rules/oas3/no-unused-components.ts +0 -75
  261. package/src/rules/oas3/operation-4xx-problem-details-rfc7807.ts +0 -36
  262. package/src/rules/oas3/remove-unused-components.ts +0 -95
  263. package/src/rules/oas3/request-mime-type.ts +0 -31
  264. package/src/rules/oas3/response-contains-property.ts +0 -38
  265. package/src/rules/oas3/response-mime-type.ts +0 -31
  266. package/src/rules/oas3/spec-components-invalid-map-name.ts +0 -74
  267. package/src/rules/other/stats.ts +0 -73
  268. package/src/rules/utils.ts +0 -191
  269. package/src/types/index.ts +0 -149
  270. package/src/types/oas2.ts +0 -478
  271. package/src/types/oas3.ts +0 -597
  272. package/src/types/oas3_1.ts +0 -258
  273. package/src/types/redocly-yaml.ts +0 -1010
  274. package/src/typings/common.ts +0 -17
  275. package/src/typings/openapi.ts +0 -298
  276. package/src/typings/swagger.ts +0 -236
  277. package/src/utils.ts +0 -276
  278. package/src/visitors.ts +0 -491
  279. package/src/walk.ts +0 -453
  280. package/tsconfig.json +0 -8
  281. package/tsconfig.tsbuildinfo +0 -1
@@ -1,35 +0,0 @@
1
- import { outdent } from 'outdent';
2
- import {
3
- parseYamlToDocument,
4
- replaceSourceWithRef,
5
- makeConfig,
6
- } from '../../../../../__tests__/utils';
7
- import { lintDocument } from '../../../../lint';
8
- import { BaseResolver } from '../../../../resolve';
9
-
10
- describe('Referenceable scalars', () => {
11
- it('should not report $ref description', async () => {
12
- const document = parseYamlToDocument(
13
- outdent`
14
- swagger: '2.0'
15
- info:
16
- title: Test
17
- version: '1.0'
18
- description:
19
- $ref: fixtures/description.md
20
- paths: {}
21
- `,
22
- __dirname + '/foobar.yaml'
23
- );
24
-
25
- const results = await lintDocument({
26
- externalRefResolver: new BaseResolver(),
27
- document,
28
- config: await makeConfig({
29
- spec: 'error',
30
- }),
31
- });
32
-
33
- expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`Array []`);
34
- });
35
- });
@@ -1,32 +0,0 @@
1
- import { StyleguideConfig, RuleConfig, resolveStyleguideConfig } from '../../../../config';
2
- import { parseYamlToDocument } from '../../../../../__tests__/utils';
3
- import { lintDocument } from '../../../../lint';
4
- import { BaseResolver } from '../../../../resolve';
5
-
6
- export async function lintDoc(
7
- source: string,
8
- rules: Record<string, RuleConfig> = { spec: 'error' }
9
- ) {
10
- const document = parseYamlToDocument(source, 'foobar.yaml');
11
-
12
- const results = await lintDocument({
13
- externalRefResolver: new BaseResolver(),
14
- document,
15
- config: new StyleguideConfig(
16
- await resolveStyleguideConfig({
17
- styleguideConfig: {
18
- plugins: [],
19
- extends: [],
20
- rules,
21
- },
22
- })
23
- ),
24
- });
25
-
26
- return results.map((res) => {
27
- return {
28
- message: res.message,
29
- location: res.location[0].pointer || '',
30
- };
31
- });
32
- }
@@ -1,26 +0,0 @@
1
- import { Oas2Rule } from '../../visitors';
2
-
3
- export type BooleanParameterPrefixesOptions = {
4
- prefixes?: string[];
5
- };
6
-
7
- export const BooleanParameterPrefixes: Oas2Rule = (options: BooleanParameterPrefixesOptions) => {
8
- const prefixes = options.prefixes || ['is', 'has'];
9
- const regexp = new RegExp(`^(${prefixes.join('|')})[A-Z-_]`);
10
- const wrappedPrefixes = prefixes.map((p) => `\`${p}\``);
11
- const prefixesString =
12
- wrappedPrefixes.length === 1
13
- ? wrappedPrefixes[0]
14
- : wrappedPrefixes.slice(0, -1).join(', ') + ' or ' + wrappedPrefixes[prefixes.length - 1];
15
-
16
- return {
17
- Parameter(param, { report, location }) {
18
- if (param.type === 'boolean' && !regexp.test(param.name)) {
19
- report({
20
- message: `Boolean parameter \`${param.name}\` should have ${prefixesString} prefix.`,
21
- location: location.child('name'),
22
- });
23
- }
24
- },
25
- };
26
- };
@@ -1,89 +0,0 @@
1
- import { Oas2Rule } from '../../visitors';
2
- import { OasSpec } from '../common/spec';
3
- import { NoInvalidSchemaExamples } from '../common/no-invalid-schema-examples';
4
- import { NoInvalidParameterExamples } from '../common/no-invalid-parameter-examples';
5
- import { InfoContact } from '../common/info-contact';
6
- import { InfoLicense } from '../common/info-license';
7
- import { InfoLicenseUrl } from '../common/info-license-url';
8
- import { BooleanParameterPrefixes } from './boolean-parameter-prefixes';
9
- import { TagDescription } from '../common/tag-description';
10
- import { TagsAlphabetical } from '../common/tags-alphabetical';
11
- import { PathsKebabCase } from '../common/paths-kebab-case';
12
- import { NoEnumTypeMismatch } from '../common/no-enum-type-mismatch';
13
- import { NoPathTrailingSlash } from '../common/no-path-trailing-slash';
14
- import { Operation2xxResponse } from '../common/operation-2xx-response';
15
- import { Operation4xxResponse } from '../common/operation-4xx-response';
16
- import { Assertions } from '../common/assertions';
17
- import { OperationIdUnique } from '../common/operation-operationId-unique';
18
- import { OperationParametersUnique } from '../common/operation-parameters-unique';
19
- import { PathParamsDefined } from '../common/path-params-defined';
20
- import { OperationTagDefined } from '../common/operation-tag-defined';
21
- import { PathDeclarationMustExist } from '../common/path-declaration-must-exist';
22
- import { OperationIdUrlSafe } from '../common/operation-operationId-url-safe';
23
- import { OperationDescription } from '../common/operation-description';
24
- import { PathNotIncludeQuery } from '../common/path-not-include-query';
25
- import { ParameterDescription } from '../common/parameter-description';
26
- import { OperationSingularTag } from '../common/operation-singular-tag';
27
- import { SecurityDefined } from '../common/security-defined';
28
- import { NoUnresolvedRefs } from '../no-unresolved-refs';
29
- import { PathHttpVerbsOrder } from '../common/path-http-verbs-order';
30
- import { NoIdenticalPaths } from '../common/no-identical-paths';
31
- import { OperationOperationId } from '../common/operation-operationId';
32
- import { OperationSummary } from '../common/operation-summary';
33
- import { NoAmbiguousPaths } from '../common/no-ambiguous-paths';
34
- import { NoHttpVerbsInPaths } from '../common/no-http-verbs-in-paths';
35
- import { PathExcludesPatterns } from '../common/path-excludes-patterns';
36
- import { RequestMimeType } from './request-mime-type';
37
- import { ResponseMimeType } from './response-mime-type';
38
- import { PathSegmentPlural } from '../common/path-segment-plural';
39
- import { ResponseContainsHeader } from '../common/response-contains-header';
40
- import { ResponseContainsProperty } from './response-contains-property';
41
- import { ScalarPropertyMissingExample } from '../common/scalar-property-missing-example';
42
- import { RequiredStringPropertyMissingMunLength } from '../common/required-string-property-missing-min-length';
43
-
44
- export const rules = {
45
- spec: OasSpec as Oas2Rule,
46
- 'no-invalid-schema-examples': NoInvalidSchemaExamples,
47
- 'no-invalid-parameter-examples': NoInvalidParameterExamples,
48
- 'info-contact': InfoContact as Oas2Rule,
49
- 'info-license': InfoLicense as Oas2Rule,
50
- 'info-license-url': InfoLicenseUrl as Oas2Rule,
51
- 'tag-description': TagDescription as Oas2Rule,
52
- 'tags-alphabetical': TagsAlphabetical as Oas2Rule,
53
- 'paths-kebab-case': PathsKebabCase as Oas2Rule,
54
- 'no-enum-type-mismatch': NoEnumTypeMismatch as Oas2Rule,
55
- 'boolean-parameter-prefixes': BooleanParameterPrefixes as Oas2Rule,
56
- 'no-path-trailing-slash': NoPathTrailingSlash as Oas2Rule,
57
- 'operation-2xx-response': Operation2xxResponse as Oas2Rule,
58
- 'operation-4xx-response': Operation4xxResponse as Oas2Rule,
59
- assertions: Assertions as Oas2Rule,
60
- 'operation-operationId-unique': OperationIdUnique as Oas2Rule,
61
- 'operation-parameters-unique': OperationParametersUnique as Oas2Rule,
62
- 'path-parameters-defined': PathParamsDefined as Oas2Rule,
63
- 'operation-tag-defined': OperationTagDefined as Oas2Rule,
64
- 'path-declaration-must-exist': PathDeclarationMustExist as Oas2Rule,
65
- 'operation-operationId-url-safe': OperationIdUrlSafe as Oas2Rule,
66
- 'operation-operationId': OperationOperationId as Oas2Rule,
67
- 'operation-summary': OperationSummary as Oas2Rule,
68
- 'operation-description': OperationDescription as Oas2Rule,
69
- 'path-not-include-query': PathNotIncludeQuery as Oas2Rule,
70
- 'path-params-defined': PathParamsDefined as Oas2Rule,
71
- 'parameter-description': ParameterDescription as Oas2Rule,
72
- 'operation-singular-tag': OperationSingularTag as Oas2Rule,
73
- 'security-defined': SecurityDefined as Oas2Rule,
74
- 'no-unresolved-refs': NoUnresolvedRefs as Oas2Rule,
75
- 'no-identical-paths': NoIdenticalPaths as Oas2Rule,
76
- 'no-ambiguous-paths': NoAmbiguousPaths as Oas2Rule,
77
- 'path-http-verbs-order': PathHttpVerbsOrder as Oas2Rule,
78
- 'no-http-verbs-in-paths': NoHttpVerbsInPaths as Oas2Rule,
79
- 'path-excludes-patterns': PathExcludesPatterns as Oas2Rule,
80
- 'request-mime-type': RequestMimeType as Oas2Rule,
81
- 'response-mime-type': ResponseMimeType as Oas2Rule,
82
- 'path-segment-plural': PathSegmentPlural as Oas2Rule,
83
- 'response-contains-header': ResponseContainsHeader as Oas2Rule,
84
- 'response-contains-property': ResponseContainsProperty as Oas2Rule,
85
- 'scalar-property-missing-example': ScalarPropertyMissingExample,
86
- 'required-string-property-missing-min-length': RequiredStringPropertyMissingMunLength,
87
- };
88
-
89
- export const preprocessors = {};
@@ -1,81 +0,0 @@
1
- import { Oas2Rule } from '../../visitors';
2
- import { Location } from '../../ref-utils';
3
- import { Oas2Components } from '../../typings/swagger';
4
- import { isEmptyObject } from '../../utils';
5
-
6
- export const RemoveUnusedComponents: Oas2Rule = () => {
7
- const components = new Map<
8
- string,
9
- { used: boolean; componentType?: keyof Oas2Components; name: string }
10
- >();
11
-
12
- function registerComponent(
13
- location: Location,
14
- componentType: keyof Oas2Components,
15
- name: string
16
- ): void {
17
- components.set(location.absolutePointer, {
18
- used: components.get(location.absolutePointer)?.used || false,
19
- componentType,
20
- name,
21
- });
22
- }
23
-
24
- return {
25
- ref: {
26
- leave(ref, { type, resolve, key }) {
27
- if (['Schema', 'Parameter', 'Response', 'SecurityScheme'].includes(type.name)) {
28
- const resolvedRef = resolve(ref);
29
- if (!resolvedRef.location) return;
30
- components.set(resolvedRef.location.absolutePointer, {
31
- used: true,
32
- name: key.toString(),
33
- });
34
- }
35
- },
36
- },
37
- Root: {
38
- leave(root, ctx) {
39
- const data = ctx.getVisitorData() as { removedCount: number };
40
- data.removedCount = 0;
41
-
42
- const rootComponents = new Set<keyof Oas2Components>();
43
- components.forEach((usageInfo) => {
44
- const { used, name, componentType } = usageInfo;
45
- if (!used && componentType) {
46
- rootComponents.add(componentType);
47
- delete root[componentType]![name];
48
- data.removedCount++;
49
- }
50
- });
51
- for (const component of rootComponents) {
52
- if (isEmptyObject(root[component])) {
53
- delete root[component];
54
- }
55
- }
56
- },
57
- },
58
- NamedSchemas: {
59
- Schema(schema, { location, key }) {
60
- if (!schema.allOf) {
61
- registerComponent(location, 'definitions', key.toString());
62
- }
63
- },
64
- },
65
- NamedParameters: {
66
- Parameter(_parameter, { location, key }) {
67
- registerComponent(location, 'parameters', key.toString());
68
- },
69
- },
70
- NamedResponses: {
71
- Response(_response, { location, key }) {
72
- registerComponent(location, 'responses', key.toString());
73
- },
74
- },
75
- NamedSecuritySchemes: {
76
- SecurityScheme(_securityScheme, { location, key }) {
77
- registerComponent(location, 'securityDefinitions', key.toString());
78
- },
79
- },
80
- };
81
- };
@@ -1,17 +0,0 @@
1
- import { Oas2Rule } from '../../visitors';
2
- import { UserContext } from '../../walk';
3
- import { Oas2Definition, Oas2Operation } from '../../typings/swagger';
4
- import { validateMimeType } from '../../utils';
5
-
6
- export const RequestMimeType: Oas2Rule = ({ allowedValues }) => {
7
- return {
8
- Root(root: Oas2Definition, ctx: UserContext) {
9
- validateMimeType({ type: 'consumes', value: root }, ctx, allowedValues);
10
- },
11
- Operation: {
12
- leave(operation: Oas2Operation, ctx: UserContext) {
13
- validateMimeType({ type: 'consumes', value: operation }, ctx, allowedValues);
14
- },
15
- },
16
- };
17
- };
@@ -1,36 +0,0 @@
1
- import { Oas2Rule } from '../../visitors';
2
- import { UserContext } from '../../walk';
3
- import { getMatchingStatusCodeRange } from '../../utils';
4
-
5
- export const ResponseContainsProperty: Oas2Rule = (options) => {
6
- const names: Record<string, string[]> = options.names || {};
7
- let key: string | number;
8
- return {
9
- Operation: {
10
- Response: {
11
- skip: (_response, key) => {
12
- return `${key}` === '204';
13
- },
14
- enter: (_response, ctx: UserContext) => {
15
- key = ctx.key;
16
- },
17
- Schema(schema, { report, location }) {
18
- if (schema.type !== 'object') return;
19
- const expectedProperties =
20
- names[key] ||
21
- names[getMatchingStatusCodeRange(key)] ||
22
- names[getMatchingStatusCodeRange(key).toLowerCase()] ||
23
- [];
24
- for (const expectedProperty of expectedProperties) {
25
- if (!schema.properties?.[expectedProperty]) {
26
- report({
27
- message: `Response object must contain a top-level "${expectedProperty}" property.`,
28
- location: location.child('properties').key(),
29
- });
30
- }
31
- }
32
- },
33
- },
34
- },
35
- };
36
- };
@@ -1,17 +0,0 @@
1
- import { Oas2Rule } from '../../visitors';
2
- import { UserContext } from '../../walk';
3
- import { Oas2Definition, Oas2Operation } from '../../typings/swagger';
4
- import { validateMimeType } from '../../utils';
5
-
6
- export const ResponseMimeType: Oas2Rule = ({ allowedValues }) => {
7
- return {
8
- Root(root: Oas2Definition, ctx: UserContext) {
9
- validateMimeType({ type: 'produces', value: root }, ctx, allowedValues);
10
- },
11
- Operation: {
12
- leave(operation: Oas2Operation, ctx: UserContext) {
13
- validateMimeType({ type: 'produces', value: operation }, ctx, allowedValues);
14
- },
15
- },
16
- };
17
- };
@@ -1,111 +0,0 @@
1
- import { outdent } from 'outdent';
2
- import { parseYamlToDocument, replaceSourceWithRef, makeConfig } from '../../../../__tests__/utils';
3
- import { lintDocument } from '../../../lint';
4
- import { BaseResolver } from '../../../resolve';
5
-
6
- describe('oas3 boolean-parameter-prefixes', () => {
7
- it('should report on boolean param without prefix', async () => {
8
- const document = parseYamlToDocument(
9
- outdent`
10
- openapi: 3.0.0
11
- paths:
12
- '/test':
13
- parameters:
14
- - name: a
15
- in: path
16
- schema:
17
- type: boolean
18
- `,
19
- 'foobar.yaml'
20
- );
21
-
22
- const results = await lintDocument({
23
- externalRefResolver: new BaseResolver(),
24
- document,
25
- config: await makeConfig({ 'boolean-parameter-prefixes': 'error' }),
26
- });
27
-
28
- expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
29
- Array [
30
- Object {
31
- "location": Array [
32
- Object {
33
- "pointer": "#/paths/~1test/parameters/0/name",
34
- "reportOnKey": false,
35
- "source": "foobar.yaml",
36
- },
37
- ],
38
- "message": "Boolean parameter \`a\` should have \`is\` or \`has\` prefix.",
39
- "ruleId": "boolean-parameter-prefixes",
40
- "severity": "error",
41
- "suggest": Array [],
42
- },
43
- ]
44
- `);
45
- });
46
-
47
- it('should not report on boolean param with prefix', async () => {
48
- const document = parseYamlToDocument(
49
- outdent`
50
- openapi: 3.0.0
51
- paths:
52
- '/test':
53
- parameters:
54
- - name: hasA
55
- in: path
56
- schema:
57
- type: boolean
58
- - name: isA
59
- in: path
60
- schema:
61
- type: boolean
62
- - name: has_a
63
- in: path
64
- schema:
65
- type: boolean
66
- - name: is-a
67
- in: path
68
- schema:
69
- type: boolean
70
- `,
71
- 'foobar.yaml'
72
- );
73
-
74
- const results = await lintDocument({
75
- externalRefResolver: new BaseResolver(),
76
- document,
77
- config: await makeConfig({ 'boolean-parameter-prefixes': 'error' }),
78
- });
79
-
80
- expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`Array []`);
81
- });
82
-
83
- it('should not report on boolean param with custom prefix', async () => {
84
- const document = parseYamlToDocument(
85
- outdent`
86
- openapi: 3.0.0
87
- paths:
88
- '/test':
89
- parameters:
90
- - name: should-a
91
- in: query
92
- schema:
93
- type: boolean
94
- `,
95
- 'foobar.yaml'
96
- );
97
-
98
- const results = await lintDocument({
99
- externalRefResolver: new BaseResolver(),
100
- document,
101
- config: await makeConfig({
102
- 'boolean-parameter-prefixes': {
103
- severity: 'error',
104
- prefixes: ['should'],
105
- },
106
- }),
107
- });
108
-
109
- expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`Array []`);
110
- });
111
- });
@@ -1,11 +0,0 @@
1
- components:
2
- schemas:
3
- A:
4
- type: object
5
- properties:
6
- a:
7
- type: string
8
- b:
9
- $ref: '#/components/schemas/B'
10
- B:
11
- type: string
@@ -1,205 +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 as3-no-server-variables-empty-enum', () => {
7
- it('oas3-no-server-variables-empty-enum: should report on server object with empty enum and unknown enum value', async () => {
8
- const document = parseYamlToDocument(
9
- outdent`
10
- openapi: 3.0.0
11
- info:
12
- title: API
13
- version: 1.0.0
14
- servers:
15
- - url: https://example.com/{var}
16
- variables:
17
- var:
18
- enum: []
19
- default: a
20
- components: {}
21
- `
22
- );
23
-
24
- const results = await lintDocument({
25
- externalRefResolver: new BaseResolver(),
26
- document,
27
- config: await makeConfig({ 'no-server-variables-empty-enum': 'error' }),
28
- });
29
-
30
- expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
31
- Array [
32
- Object {
33
- "location": Array [
34
- Object {
35
- "pointer": "#/servers",
36
- "reportOnKey": true,
37
- "source": "",
38
- },
39
- ],
40
- "message": "Server variable with \`enum\` must be a non-empty array.",
41
- "ruleId": "no-server-variables-empty-enum",
42
- "severity": "error",
43
- "suggest": Array [],
44
- },
45
- Object {
46
- "location": Array [
47
- Object {
48
- "pointer": "#/servers",
49
- "reportOnKey": true,
50
- "source": "",
51
- },
52
- ],
53
- "message": "Server variable define \`enum\` and \`default\`. \`enum\` must include default value",
54
- "ruleId": "no-server-variables-empty-enum",
55
- "severity": "error",
56
- "suggest": Array [],
57
- },
58
- ]
59
- `);
60
- });
61
-
62
- it('oas3-no-server-variables-empty-enum: should report on server object with empty enum', async () => {
63
- const document = parseYamlToDocument(
64
- outdent`
65
- openapi: 3.0.0
66
- info:
67
- title: API
68
- version: 1.0.0
69
- servers:
70
- - url: https://example.com/{var}
71
- variables:
72
- var:
73
- enum: []
74
- components: {}
75
- `
76
- );
77
-
78
- const results = await lintDocument({
79
- externalRefResolver: new BaseResolver(),
80
- document,
81
- config: await makeConfig({ 'no-server-variables-empty-enum': 'error' }),
82
- });
83
-
84
- expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
85
- Array [
86
- Object {
87
- "location": Array [
88
- Object {
89
- "pointer": "#/servers",
90
- "reportOnKey": true,
91
- "source": "",
92
- },
93
- ],
94
- "message": "Server variable with \`enum\` must be a non-empty array.",
95
- "ruleId": "no-server-variables-empty-enum",
96
- "severity": "error",
97
- "suggest": Array [],
98
- },
99
- ]
100
- `);
101
- });
102
-
103
- it('oas3-no-server-variables-empty-enum: should be success because variables is empty object', async () => {
104
- const document = parseYamlToDocument(
105
- outdent`
106
- openapi: 3.0.0
107
- info:
108
- title: API
109
- version: 1.0.0
110
- servers:
111
- - url: https://example.com/{var}
112
- variables: {}
113
- components: {}
114
- `
115
- );
116
-
117
- const results = await lintDocument({
118
- externalRefResolver: new BaseResolver(),
119
- document,
120
- config: await makeConfig({ 'no-server-variables-empty-enum': 'error' }),
121
- });
122
-
123
- expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`Array []`);
124
- });
125
-
126
- it('oas3-no-server-variables-empty-enum: should be success because variable is empty object', async () => {
127
- const document = parseYamlToDocument(
128
- outdent`
129
- openapi: 3.0.0
130
- info:
131
- title: API
132
- version: 1.0.0
133
- servers:
134
- - url: https://example.com/{var}
135
- variables:
136
- var: {}
137
- components: {}
138
- `
139
- );
140
-
141
- const results = await lintDocument({
142
- externalRefResolver: new BaseResolver(),
143
- document,
144
- config: await makeConfig({ 'no-server-variables-empty-enum': 'error' }),
145
- });
146
-
147
- expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`Array []`);
148
- });
149
-
150
- it('oas3-no-server-variables-empty-enum: should be success because enum contains default value', async () => {
151
- const document = parseYamlToDocument(
152
- outdent`
153
- openapi: 3.0.0
154
- info:
155
- title: API
156
- version: 1.0.0
157
- servers:
158
- - url: https://example.com/{var}
159
- variables:
160
- var:
161
- enum:
162
- - a
163
- default: a
164
- components: {}
165
- `
166
- );
167
-
168
- const results = await lintDocument({
169
- externalRefResolver: new BaseResolver(),
170
- document,
171
- config: await makeConfig({ 'no-server-variables-empty-enum': 'error' }),
172
- });
173
-
174
- expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`Array []`);
175
- });
176
-
177
- it('oas3-no-server-variables-empty-enum: should be success because enum contains default value', async () => {
178
- const document = parseYamlToDocument(
179
- outdent`
180
- openapi: 3.0.0
181
- info:
182
- title: API
183
- version: 1.0.0
184
- servers:
185
- - url: https://example.com/{var}
186
- variables:
187
- var:
188
- type: ['string', 'null']
189
- enum:
190
- - 'some string'
191
- - null
192
- default: 'some string'
193
- components: {}
194
- `
195
- );
196
-
197
- const results = await lintDocument({
198
- externalRefResolver: new BaseResolver(),
199
- document,
200
- config: await makeConfig({ 'no-server-variables-empty-enum': 'error' }),
201
- });
202
-
203
- expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`Array []`);
204
- });
205
- });