@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,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 { RequiredStringPropertyMissingMinLength } 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': RequiredStringPropertyMissingMinLength,
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
- });