@redocly/openapi-core 1.0.0-beta.99 → 1.0.0-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (382) hide show
  1. package/README.md +6 -6
  2. package/lib/benchmark/benches/lint-with-top-level-rule-report.bench.js +0 -1
  3. package/lib/benchmark/benches/recommended-oas3.bench.js +1 -1
  4. package/lib/benchmark/benches/resolve-with-no-external.bench.js +1 -1
  5. package/lib/benchmark/utils.d.ts +2 -2
  6. package/lib/benchmark/utils.js +2 -2
  7. package/lib/bundle.d.ts +10 -15
  8. package/lib/bundle.js +32 -12
  9. package/lib/config/all.d.ts +2 -2
  10. package/lib/config/all.js +16 -6
  11. package/lib/config/builtIn.d.ts +2 -2
  12. package/lib/config/builtIn.js +2 -2
  13. package/lib/config/config-resolvers.d.ts +5 -5
  14. package/lib/config/config-resolvers.js +121 -66
  15. package/lib/config/config.d.ts +12 -18
  16. package/lib/config/config.js +42 -26
  17. package/lib/config/load.d.ts +16 -3
  18. package/lib/config/load.js +36 -14
  19. package/lib/config/minimal.d.ts +2 -2
  20. package/lib/config/minimal.js +10 -6
  21. package/lib/config/recommended.d.ts +2 -2
  22. package/lib/config/recommended.js +10 -6
  23. package/lib/config/rules.d.ts +7 -4
  24. package/lib/config/rules.js +5 -4
  25. package/lib/config/types.d.ts +72 -23
  26. package/lib/config/types.js +13 -0
  27. package/lib/config/utils.d.ts +6 -5
  28. package/lib/config/utils.js +110 -32
  29. package/lib/decorators/common/filters/filter-helper.d.ts +3 -0
  30. package/lib/decorators/common/filters/filter-helper.js +67 -0
  31. package/lib/decorators/common/filters/filter-in.d.ts +2 -0
  32. package/lib/decorators/common/filters/filter-in.js +17 -0
  33. package/lib/decorators/common/filters/filter-out.d.ts +2 -0
  34. package/lib/decorators/common/filters/filter-out.js +17 -0
  35. package/lib/decorators/common/info-override.d.ts +2 -0
  36. package/lib/decorators/common/info-override.js +28 -0
  37. package/lib/decorators/common/media-type-examples-override.d.ts +2 -0
  38. package/lib/decorators/common/media-type-examples-override.js +53 -0
  39. package/lib/decorators/common/registry-dependencies.js +2 -2
  40. package/lib/decorators/common/remove-x-internal.js +2 -2
  41. package/lib/decorators/oas2/index.d.ts +3 -0
  42. package/lib/decorators/oas2/index.js +7 -1
  43. package/lib/decorators/oas3/index.d.ts +4 -0
  44. package/lib/decorators/oas3/index.js +9 -1
  45. package/lib/env.d.ts +3 -0
  46. package/lib/env.js +8 -0
  47. package/lib/format/codeframes.js +16 -10
  48. package/lib/format/format.d.ts +1 -1
  49. package/lib/format/format.js +64 -32
  50. package/lib/index.d.ts +6 -6
  51. package/lib/index.js +7 -2
  52. package/lib/js-yaml/index.js +2 -6
  53. package/lib/lint.d.ts +4 -2
  54. package/lib/lint.js +36 -11
  55. package/lib/logger.d.ts +10 -0
  56. package/lib/logger.js +31 -0
  57. package/lib/output.d.ts +3 -0
  58. package/lib/output.js +9 -0
  59. package/lib/redocly/index.js +10 -9
  60. package/lib/redocly/registry-api-types.d.ts +28 -28
  61. package/lib/redocly/registry-api.d.ts +3 -3
  62. package/lib/redocly/registry-api.js +10 -2
  63. package/lib/ref-utils.d.ts +1 -0
  64. package/lib/ref-utils.js +7 -2
  65. package/lib/resolve.d.ts +1 -1
  66. package/lib/resolve.js +33 -3
  67. package/lib/rules/ajv.d.ts +2 -2
  68. package/lib/rules/ajv.js +12 -12
  69. package/lib/rules/common/assertions/asserts.d.ts +29 -4
  70. package/lib/rules/common/assertions/asserts.js +227 -97
  71. package/lib/rules/common/assertions/index.d.ts +27 -2
  72. package/lib/rules/common/assertions/index.js +9 -37
  73. package/lib/rules/common/assertions/utils.d.ts +16 -8
  74. package/lib/rules/common/assertions/utils.js +160 -76
  75. package/lib/rules/common/info-license-url.d.ts +1 -1
  76. package/lib/rules/common/info-license-url.js +5 -10
  77. package/lib/rules/common/info-license.d.ts +2 -0
  78. package/lib/rules/common/info-license.js +17 -0
  79. package/lib/rules/common/no-ambiguous-paths.js +1 -1
  80. package/lib/rules/common/no-enum-type-mismatch.js +1 -3
  81. package/lib/rules/common/no-identical-paths.js +4 -4
  82. package/lib/rules/common/no-invalid-parameter-examples.js +3 -3
  83. package/lib/rules/common/no-invalid-schema-examples.js +3 -3
  84. package/lib/rules/common/operation-2xx-response.js +15 -9
  85. package/lib/rules/common/operation-4xx-response.js +15 -9
  86. package/lib/rules/common/operation-operationId.js +2 -2
  87. package/lib/rules/common/operation-tag-defined.js +1 -1
  88. package/lib/rules/common/path-not-include-query.js +2 -2
  89. package/lib/rules/common/path-params-defined.js +7 -2
  90. package/lib/rules/common/paths-kebab-case.js +4 -1
  91. package/lib/rules/common/required-string-property-missing-min-length.d.ts +2 -0
  92. package/lib/rules/common/required-string-property-missing-min-length.js +37 -0
  93. package/lib/rules/common/response-contains-header.js +2 -2
  94. package/lib/rules/common/scalar-property-missing-example.js +2 -1
  95. package/lib/rules/common/security-defined.d.ts +2 -0
  96. package/lib/rules/common/{operation-security-defined.js → security-defined.js} +25 -6
  97. package/lib/rules/common/spec-strict-refs.d.ts +2 -0
  98. package/lib/rules/common/spec-strict-refs.js +30 -0
  99. package/lib/rules/common/spec.js +41 -18
  100. package/lib/rules/common/tags-alphabetical.js +1 -1
  101. package/lib/rules/oas2/index.d.ts +3 -2
  102. package/lib/rules/oas2/index.js +10 -8
  103. package/lib/rules/oas2/remove-unused-components.js +6 -6
  104. package/lib/rules/oas2/request-mime-type.d.ts +1 -1
  105. package/lib/rules/oas2/request-mime-type.js +1 -1
  106. package/lib/rules/oas2/response-mime-type.d.ts +1 -1
  107. package/lib/rules/oas2/response-mime-type.js +1 -1
  108. package/lib/rules/oas3/component-name-unique.d.ts +2 -0
  109. package/lib/rules/oas3/component-name-unique.js +124 -0
  110. package/lib/rules/oas3/index.js +18 -10
  111. package/lib/rules/oas3/no-empty-servers.js +2 -2
  112. package/lib/rules/oas3/no-invalid-media-type-examples.js +2 -2
  113. package/lib/rules/oas3/no-server-variables-empty-enum.d.ts +2 -0
  114. package/lib/rules/oas3/{no-servers-empty-enum.js → no-server-variables-empty-enum.js} +5 -5
  115. package/lib/rules/oas3/no-unused-components.js +2 -2
  116. package/lib/rules/oas3/operation-4xx-problem-details-rfc7807.d.ts +5 -0
  117. package/lib/rules/oas3/operation-4xx-problem-details-rfc7807.js +36 -0
  118. package/lib/rules/oas3/remove-unused-components.js +6 -6
  119. package/lib/rules/oas3/request-mime-type.d.ts +1 -1
  120. package/lib/rules/oas3/request-mime-type.js +1 -1
  121. package/lib/rules/oas3/response-mime-type.d.ts +1 -1
  122. package/lib/rules/oas3/response-mime-type.js +1 -1
  123. package/lib/rules/oas3/spec-components-invalid-map-name.d.ts +2 -0
  124. package/lib/rules/oas3/spec-components-invalid-map-name.js +62 -0
  125. package/lib/rules/other/stats.d.ts +2 -2
  126. package/lib/rules/other/stats.js +45 -16
  127. package/lib/rules/utils.d.ts +5 -2
  128. package/lib/rules/utils.js +54 -6
  129. package/lib/types/config-external-schemas.d.ts +2193 -0
  130. package/lib/types/config-external-schemas.js +805 -0
  131. package/lib/types/index.d.ts +3 -2
  132. package/lib/types/index.js +9 -1
  133. package/lib/types/oas2.js +91 -15
  134. package/lib/types/oas3.js +125 -46
  135. package/lib/types/oas3_1.js +23 -19
  136. package/lib/types/redocly-yaml.js +406 -60
  137. package/lib/utils.d.ts +15 -4
  138. package/lib/utils.js +72 -8
  139. package/lib/visitors.d.ts +20 -16
  140. package/lib/visitors.js +28 -3
  141. package/lib/walk.d.ts +11 -19
  142. package/lib/walk.js +74 -53
  143. package/package.json +5 -6
  144. package/__tests__/utils.ts +0 -86
  145. package/lib/rules/common/info-description.d.ts +0 -2
  146. package/lib/rules/common/info-description.js +0 -12
  147. package/lib/rules/common/license-url.d.ts +0 -2
  148. package/lib/rules/common/license-url.js +0 -12
  149. package/lib/rules/common/operation-security-defined.d.ts +0 -2
  150. package/lib/rules/oas3/no-servers-empty-enum.d.ts +0 -2
  151. package/src/__tests__/__snapshots__/bundle.test.ts.snap +0 -255
  152. package/src/__tests__/bundle.test.ts +0 -156
  153. package/src/__tests__/codeframes.test.ts +0 -531
  154. package/src/__tests__/fixtures/extension.js +0 -24
  155. package/src/__tests__/fixtures/refs/definitions.yaml +0 -3
  156. package/src/__tests__/fixtures/refs/examples.yaml +0 -8
  157. package/src/__tests__/fixtures/refs/external-request-body.yaml +0 -13
  158. package/src/__tests__/fixtures/refs/externalref.yaml +0 -35
  159. package/src/__tests__/fixtures/refs/hosted.yaml +0 -35
  160. package/src/__tests__/fixtures/refs/openapi-with-external-refs-conflicting-names.yaml +0 -21
  161. package/src/__tests__/fixtures/refs/openapi-with-external-refs.yaml +0 -33
  162. package/src/__tests__/fixtures/refs/openapi-with-url-refs.yaml +0 -18
  163. package/src/__tests__/fixtures/refs/param-b.yaml +0 -1
  164. package/src/__tests__/fixtures/refs/param-c.yaml +0 -1
  165. package/src/__tests__/fixtures/refs/rename.yaml +0 -1
  166. package/src/__tests__/fixtures/refs/requestBody.yaml +0 -9
  167. package/src/__tests__/fixtures/refs/schema-a.yaml +0 -1
  168. package/src/__tests__/fixtures/refs/simple.yaml +0 -1
  169. package/src/__tests__/fixtures/refs/vendor.schema.yaml +0 -20
  170. package/src/__tests__/fixtures/resolve/External.yaml +0 -10
  171. package/src/__tests__/fixtures/resolve/External2.yaml +0 -4
  172. package/src/__tests__/fixtures/resolve/description.md +0 -3
  173. package/src/__tests__/fixtures/resolve/externalInfo.yaml +0 -4
  174. package/src/__tests__/fixtures/resolve/externalLicense.yaml +0 -1
  175. package/src/__tests__/fixtures/resolve/openapi-with-back.yaml +0 -13
  176. package/src/__tests__/fixtures/resolve/openapi-with-md-description.yaml +0 -5
  177. package/src/__tests__/fixtures/resolve/openapi.yaml +0 -28
  178. package/src/__tests__/fixtures/resolve/schemas/type-a.yaml +0 -10
  179. package/src/__tests__/fixtures/resolve/schemas/type-b.yaml +0 -6
  180. package/src/__tests__/fixtures/resolve/transitive/a.yaml +0 -1
  181. package/src/__tests__/fixtures/resolve/transitive/components.yaml +0 -5
  182. package/src/__tests__/fixtures/resolve/transitive/schemas.yaml +0 -3
  183. package/src/__tests__/js-yaml.test.ts +0 -71
  184. package/src/__tests__/lint.test.ts +0 -195
  185. package/src/__tests__/login.test.ts +0 -17
  186. package/src/__tests__/normalizeVisitors.test.ts +0 -151
  187. package/src/__tests__/ref-utils.test.ts +0 -120
  188. package/src/__tests__/resolve-http.test.ts +0 -77
  189. package/src/__tests__/resolve.test.ts +0 -405
  190. package/src/__tests__/utils.test.ts +0 -85
  191. package/src/__tests__/walk.test.ts +0 -1485
  192. package/src/benchmark/benches/lint-with-many-rules.bench.ts +0 -35
  193. package/src/benchmark/benches/lint-with-nested-rule.bench.ts +0 -39
  194. package/src/benchmark/benches/lint-with-no-rules.bench.ts +0 -20
  195. package/src/benchmark/benches/lint-with-top-level-rule-report.bench.ts +0 -36
  196. package/src/benchmark/benches/lint-with-top-level-rule.bench.ts +0 -32
  197. package/src/benchmark/benches/rebilly.yaml +0 -32267
  198. package/src/benchmark/benches/recommended-oas3.bench.ts +0 -22
  199. package/src/benchmark/benches/resolve-with-no-external.bench.ts +0 -23
  200. package/src/benchmark/benchmark.js +0 -307
  201. package/src/benchmark/colors.js +0 -29
  202. package/src/benchmark/fork.js +0 -83
  203. package/src/benchmark/utils.ts +0 -36
  204. package/src/bundle.ts +0 -386
  205. package/src/config/__tests__/__snapshots__/config-resolvers.test.ts.snap +0 -157
  206. package/src/config/__tests__/config-resolvers.test.ts +0 -429
  207. package/src/config/__tests__/config.test.ts +0 -244
  208. package/src/config/__tests__/fixtures/plugin-config.yaml +0 -3
  209. package/src/config/__tests__/fixtures/plugin.js +0 -56
  210. package/src/config/__tests__/fixtures/resolve-config/api/nested-config.yaml +0 -12
  211. package/src/config/__tests__/fixtures/resolve-config/api/plugin.js +0 -67
  212. package/src/config/__tests__/fixtures/resolve-config/local-config-with-circular.yaml +0 -8
  213. package/src/config/__tests__/fixtures/resolve-config/local-config-with-file.yaml +0 -19
  214. package/src/config/__tests__/fixtures/resolve-config/local-config.yaml +0 -10
  215. package/src/config/__tests__/fixtures/resolve-config/plugin.js +0 -66
  216. package/src/config/__tests__/fixtures/resolve-remote-configs/nested-remote-config.yaml +0 -4
  217. package/src/config/__tests__/fixtures/resolve-remote-configs/remote-config.yaml +0 -5
  218. package/src/config/__tests__/load.test.ts +0 -83
  219. package/src/config/__tests__/resolve-plugins.test.ts +0 -27
  220. package/src/config/all.ts +0 -66
  221. package/src/config/builtIn.ts +0 -37
  222. package/src/config/config-resolvers.ts +0 -359
  223. package/src/config/config.ts +0 -312
  224. package/src/config/index.ts +0 -7
  225. package/src/config/load.ts +0 -84
  226. package/src/config/minimal.ts +0 -58
  227. package/src/config/recommended.ts +0 -58
  228. package/src/config/rules.ts +0 -46
  229. package/src/config/types.ts +0 -168
  230. package/src/config/utils.ts +0 -208
  231. package/src/decorators/__tests__/remove-x-internal.test.ts +0 -316
  232. package/src/decorators/common/info-description-override.ts +0 -24
  233. package/src/decorators/common/operation-description-override.ts +0 -30
  234. package/src/decorators/common/registry-dependencies.ts +0 -25
  235. package/src/decorators/common/remove-x-internal.ts +0 -59
  236. package/src/decorators/common/tag-description-override.ts +0 -25
  237. package/src/decorators/oas2/index.ts +0 -14
  238. package/src/decorators/oas3/index.ts +0 -14
  239. package/src/format/codeframes.ts +0 -210
  240. package/src/format/format.ts +0 -339
  241. package/src/index.ts +0 -68
  242. package/src/js-yaml/index.ts +0 -18
  243. package/src/lint.ts +0 -125
  244. package/src/oas-types.ts +0 -62
  245. package/src/redocly/__tests__/redocly-client.test.ts +0 -140
  246. package/src/redocly/index.ts +0 -182
  247. package/src/redocly/redocly-client-types.ts +0 -10
  248. package/src/redocly/registry-api-types.ts +0 -32
  249. package/src/redocly/registry-api.ts +0 -134
  250. package/src/ref-utils.ts +0 -80
  251. package/src/resolve.ts +0 -378
  252. package/src/rules/__tests__/fixtures/invalid-yaml.yaml +0 -1
  253. package/src/rules/__tests__/fixtures/ref.yaml +0 -1
  254. package/src/rules/__tests__/no-unresolved-refs.test.ts +0 -168
  255. package/src/rules/ajv.ts +0 -103
  256. package/src/rules/common/__tests__/info-description.test.ts +0 -102
  257. package/src/rules/common/__tests__/info-license.test.ts +0 -62
  258. package/src/rules/common/__tests__/license-url.test.ts +0 -63
  259. package/src/rules/common/__tests__/no-ambiguous-paths.test.ts +0 -96
  260. package/src/rules/common/__tests__/no-enum-type-mismatch.test.ts +0 -209
  261. package/src/rules/common/__tests__/no-identical-paths.test.ts +0 -58
  262. package/src/rules/common/__tests__/no-path-trailing-slash.test.ts +0 -85
  263. package/src/rules/common/__tests__/operation-2xx-response.test.ts +0 -91
  264. package/src/rules/common/__tests__/operation-4xx-response.test.ts +0 -107
  265. package/src/rules/common/__tests__/operation-operationId-unique.test.ts +0 -76
  266. package/src/rules/common/__tests__/operation-operationId-url-safe.test.ts +0 -45
  267. package/src/rules/common/__tests__/operation-parameters-unique.test.ts +0 -167
  268. package/src/rules/common/__tests__/operation-security-defined.test.ts +0 -69
  269. package/src/rules/common/__tests__/operation-singular-tag.test.ts +0 -72
  270. package/src/rules/common/__tests__/path-http-verbs-order.test.ts +0 -95
  271. package/src/rules/common/__tests__/path-not-include-query.test.ts +0 -64
  272. package/src/rules/common/__tests__/path-params-defined.test.ts +0 -133
  273. package/src/rules/common/__tests__/paths-kebab-case.test.ts +0 -108
  274. package/src/rules/common/__tests__/scalar-property-missing-example.test.ts +0 -207
  275. package/src/rules/common/__tests__/spec.test.ts +0 -62
  276. package/src/rules/common/__tests__/tag-description.test.ts +0 -65
  277. package/src/rules/common/__tests__/tags-alphabetical.test.ts +0 -64
  278. package/src/rules/common/assertions/__tests__/asserts.test.ts +0 -231
  279. package/src/rules/common/assertions/__tests__/index.test.ts +0 -65
  280. package/src/rules/common/assertions/__tests__/utils.test.ts +0 -89
  281. package/src/rules/common/assertions/asserts.ts +0 -137
  282. package/src/rules/common/assertions/index.ts +0 -75
  283. package/src/rules/common/assertions/utils.ts +0 -167
  284. package/src/rules/common/info-contact.ts +0 -15
  285. package/src/rules/common/info-description.ts +0 -10
  286. package/src/rules/common/info-license-url.ts +0 -15
  287. package/src/rules/common/license-url.ts +0 -10
  288. package/src/rules/common/no-ambiguous-paths.ts +0 -50
  289. package/src/rules/common/no-enum-type-mismatch.ts +0 -49
  290. package/src/rules/common/no-http-verbs-in-paths.ts +0 -36
  291. package/src/rules/common/no-identical-paths.ts +0 -24
  292. package/src/rules/common/no-invalid-parameter-examples.ts +0 -36
  293. package/src/rules/common/no-invalid-schema-examples.ts +0 -27
  294. package/src/rules/common/no-path-trailing-slash.ts +0 -15
  295. package/src/rules/common/operation-2xx-response.ts +0 -16
  296. package/src/rules/common/operation-4xx-response.ts +0 -17
  297. package/src/rules/common/operation-description.ts +0 -13
  298. package/src/rules/common/operation-operationId-unique.ts +0 -21
  299. package/src/rules/common/operation-operationId-url-safe.ts +0 -19
  300. package/src/rules/common/operation-operationId.ts +0 -17
  301. package/src/rules/common/operation-parameters-unique.ts +0 -48
  302. package/src/rules/common/operation-security-defined.ts +0 -45
  303. package/src/rules/common/operation-singular-tag.ts +0 -17
  304. package/src/rules/common/operation-summary.ts +0 -13
  305. package/src/rules/common/operation-tag-defined.ts +0 -26
  306. package/src/rules/common/parameter-description.ts +0 -22
  307. package/src/rules/common/path-declaration-must-exist.ts +0 -15
  308. package/src/rules/common/path-excludes-patterns.ts +0 -23
  309. package/src/rules/common/path-http-verbs-order.ts +0 -30
  310. package/src/rules/common/path-not-include-query.ts +0 -17
  311. package/src/rules/common/path-params-defined.ts +0 -58
  312. package/src/rules/common/path-segment-plural.ts +0 -31
  313. package/src/rules/common/paths-kebab-case.ts +0 -16
  314. package/src/rules/common/response-contains-header.ts +0 -30
  315. package/src/rules/common/scalar-property-missing-example.ts +0 -55
  316. package/src/rules/common/spec.ts +0 -143
  317. package/src/rules/common/tag-description.ts +0 -10
  318. package/src/rules/common/tags-alphabetical.ts +0 -20
  319. package/src/rules/no-unresolved-refs.ts +0 -51
  320. package/src/rules/oas2/__tests__/boolean-parameter-prefixes.test.ts +0 -110
  321. package/src/rules/oas2/__tests__/response-contains-header.test.ts +0 -174
  322. package/src/rules/oas2/__tests__/response-contains-property.test.ts +0 -155
  323. package/src/rules/oas2/__tests__/spec/fixtures/description.md +0 -1
  324. package/src/rules/oas2/__tests__/spec/info.test.ts +0 -355
  325. package/src/rules/oas2/__tests__/spec/operation.test.ts +0 -123
  326. package/src/rules/oas2/__tests__/spec/paths.test.ts +0 -245
  327. package/src/rules/oas2/__tests__/spec/referenceableScalars.test.ts +0 -31
  328. package/src/rules/oas2/__tests__/spec/utils.ts +0 -32
  329. package/src/rules/oas2/boolean-parameter-prefixes.ts +0 -26
  330. package/src/rules/oas2/index.ts +0 -89
  331. package/src/rules/oas2/remove-unused-components.ts +0 -76
  332. package/src/rules/oas2/request-mime-type.ts +0 -17
  333. package/src/rules/oas2/response-contains-property.ts +0 -36
  334. package/src/rules/oas2/response-mime-type.ts +0 -17
  335. package/src/rules/oas3/__tests__/boolean-parameter-prefixes.test.ts +0 -111
  336. package/src/rules/oas3/__tests__/fixtures/common.yaml +0 -11
  337. package/src/rules/oas3/__tests__/no-empty-enum-servers.com.test.ts +0 -205
  338. package/src/rules/oas3/__tests__/no-example-value-and-externalValue.test.ts +0 -65
  339. package/src/rules/oas3/__tests__/no-invalid-media-type-examples.test.ts +0 -392
  340. package/src/rules/oas3/__tests__/no-server-example.com.test.ts +0 -60
  341. package/src/rules/oas3/__tests__/no-server-trailing-slash.test.ts +0 -79
  342. package/src/rules/oas3/__tests__/no-unused-components.test.ts +0 -131
  343. package/src/rules/oas3/__tests__/response-contains-header.test.ts +0 -273
  344. package/src/rules/oas3/__tests__/response-contains-property.test.ts +0 -403
  345. package/src/rules/oas3/__tests__/spec/callbacks.test.ts +0 -41
  346. package/src/rules/oas3/__tests__/spec/fixtures/description.md +0 -1
  347. package/src/rules/oas3/__tests__/spec/info.test.ts +0 -391
  348. package/src/rules/oas3/__tests__/spec/operation.test.ts +0 -253
  349. package/src/rules/oas3/__tests__/spec/paths.test.ts +0 -284
  350. package/src/rules/oas3/__tests__/spec/referenceableScalars.test.ts +0 -77
  351. package/src/rules/oas3/__tests__/spec/servers.test.ts +0 -499
  352. package/src/rules/oas3/__tests__/spec/spec.test.ts +0 -288
  353. package/src/rules/oas3/__tests__/spec/utils.ts +0 -32
  354. package/src/rules/oas3/boolean-parameter-prefixes.ts +0 -28
  355. package/src/rules/oas3/index.ts +0 -105
  356. package/src/rules/oas3/no-empty-servers.ts +0 -22
  357. package/src/rules/oas3/no-example-value-and-externalValue.ts +0 -14
  358. package/src/rules/oas3/no-invalid-media-type-examples.ts +0 -41
  359. package/src/rules/oas3/no-server-example.com.ts +0 -14
  360. package/src/rules/oas3/no-server-trailing-slash.ts +0 -15
  361. package/src/rules/oas3/no-servers-empty-enum.ts +0 -67
  362. package/src/rules/oas3/no-undefined-server-variable.ts +0 -30
  363. package/src/rules/oas3/no-unused-components.ts +0 -75
  364. package/src/rules/oas3/remove-unused-components.ts +0 -84
  365. package/src/rules/oas3/request-mime-type.ts +0 -31
  366. package/src/rules/oas3/response-contains-property.ts +0 -38
  367. package/src/rules/oas3/response-mime-type.ts +0 -31
  368. package/src/rules/other/stats.ts +0 -44
  369. package/src/rules/utils.ts +0 -123
  370. package/src/types/index.ts +0 -138
  371. package/src/types/oas2.ts +0 -397
  372. package/src/types/oas3.ts +0 -515
  373. package/src/types/oas3_1.ts +0 -253
  374. package/src/types/redocly-yaml.ts +0 -647
  375. package/src/typings/common.ts +0 -9
  376. package/src/typings/openapi.ts +0 -298
  377. package/src/typings/swagger.ts +0 -236
  378. package/src/utils.ts +0 -193
  379. package/src/visitors.ts +0 -448
  380. package/src/walk.ts +0 -416
  381. package/tsconfig.json +0 -8
  382. package/tsconfig.tsbuildinfo +0 -1
@@ -1,359 +0,0 @@
1
- import * as path from 'path';
2
- import { blue, red } from 'colorette';
3
- import { isAbsoluteUrl } from '../ref-utils';
4
- import { BaseResolver } from '../resolve';
5
- import { defaultPlugin } from './builtIn';
6
- import {
7
- getResolveConfig,
8
- getUniquePlugins,
9
- mergeExtends,
10
- parsePresetName,
11
- prefixRules,
12
- transformConfig,
13
- } from './utils';
14
- import type {
15
- LintRawConfig,
16
- Plugin,
17
- RawConfig,
18
- ResolvedApi,
19
- ResolvedLintConfig,
20
- RuleConfig,
21
- } from './types';
22
- import { isNotString, isString, notUndefined, parseYaml } from '../utils';
23
- import { Config } from './config';
24
-
25
- export async function resolveConfig(rawConfig: RawConfig, configPath?: string) {
26
- if (rawConfig.lint?.extends?.some(isNotString)) {
27
- throw new Error(
28
- `Error configuration format not detected in extends value must contain strings`,
29
- );
30
- }
31
-
32
- const resolver = new BaseResolver(getResolveConfig(rawConfig.resolve));
33
- const configExtends = rawConfig?.lint?.extends ?? ['recommended'];
34
- const recommendedFallback = !rawConfig?.lint?.extends;
35
- const lintConfig = {
36
- ...rawConfig?.lint,
37
- extends: configExtends,
38
- recommendedFallback,
39
- };
40
-
41
- const apis = await resolveApis({
42
- rawConfig: {
43
- ...rawConfig,
44
- lint: lintConfig,
45
- },
46
- configPath,
47
- resolver,
48
- });
49
-
50
- const lint = await resolveLint({
51
- lintConfig,
52
- configPath,
53
- resolver,
54
- });
55
-
56
- return new Config(
57
- {
58
- ...rawConfig,
59
- apis,
60
- lint,
61
- },
62
- configPath,
63
- );
64
- }
65
-
66
- export function resolvePlugins(
67
- plugins: (string | Plugin)[] | null,
68
- configPath: string = '',
69
- ): Plugin[] {
70
- if (!plugins) return [];
71
-
72
- // @ts-ignore
73
- const requireFunc = typeof __webpack_require__ === 'function' ? __non_webpack_require__ : require;
74
-
75
- const seenPluginIds = new Map<string, string>();
76
-
77
- return plugins
78
- .map((p) => {
79
- if (isString(p) && isAbsoluteUrl(p)) {
80
- throw new Error(red(`We don't support remote plugins yet.`));
81
- }
82
-
83
- // TODO: resolve npm packages similar to eslint
84
- const pluginModule = isString(p)
85
- ? (requireFunc(path.resolve(path.dirname(configPath), p)) as Plugin)
86
- : p;
87
-
88
- const id = pluginModule.id;
89
- if (typeof id !== 'string') {
90
- throw new Error(red(`Plugin must define \`id\` property in ${blue(p.toString())}.`));
91
- }
92
-
93
- if (seenPluginIds.has(id)) {
94
- const pluginPath = seenPluginIds.get(id)!;
95
- throw new Error(
96
- red(
97
- `Plugin "id" must be unique. Plugin ${blue(p.toString())} uses id "${blue(
98
- id,
99
- )}" already seen in ${blue(pluginPath)}`,
100
- ),
101
- );
102
- }
103
-
104
- seenPluginIds.set(id, p.toString());
105
-
106
- const plugin: Plugin = {
107
- id,
108
- ...(pluginModule.configs ? { configs: pluginModule.configs } : {}),
109
- ...(pluginModule.typeExtension ? { typeExtension: pluginModule.typeExtension } : {}),
110
- };
111
-
112
- if (pluginModule.rules) {
113
- if (!pluginModule.rules.oas3 && !pluginModule.rules.oas2) {
114
- throw new Error(`Plugin rules must have \`oas3\` or \`oas2\` rules "${p}.`);
115
- }
116
- plugin.rules = {};
117
- if (pluginModule.rules.oas3) {
118
- plugin.rules.oas3 = prefixRules(pluginModule.rules.oas3, id);
119
- }
120
- if (pluginModule.rules.oas2) {
121
- plugin.rules.oas2 = prefixRules(pluginModule.rules.oas2, id);
122
- }
123
- }
124
- if (pluginModule.preprocessors) {
125
- if (!pluginModule.preprocessors.oas3 && !pluginModule.preprocessors.oas2) {
126
- throw new Error(
127
- `Plugin \`preprocessors\` must have \`oas3\` or \`oas2\` preprocessors "${p}.`,
128
- );
129
- }
130
- plugin.preprocessors = {};
131
- if (pluginModule.preprocessors.oas3) {
132
- plugin.preprocessors.oas3 = prefixRules(pluginModule.preprocessors.oas3, id);
133
- }
134
- if (pluginModule.preprocessors.oas2) {
135
- plugin.preprocessors.oas2 = prefixRules(pluginModule.preprocessors.oas2, id);
136
- }
137
- }
138
-
139
- if (pluginModule.decorators) {
140
- if (!pluginModule.decorators.oas3 && !pluginModule.decorators.oas2) {
141
- throw new Error(`Plugin \`decorators\` must have \`oas3\` or \`oas2\` decorators "${p}.`);
142
- }
143
- plugin.decorators = {};
144
- if (pluginModule.decorators.oas3) {
145
- plugin.decorators.oas3 = prefixRules(pluginModule.decorators.oas3, id);
146
- }
147
- if (pluginModule.decorators.oas2) {
148
- plugin.decorators.oas2 = prefixRules(pluginModule.decorators.oas2, id);
149
- }
150
- }
151
-
152
- return plugin;
153
- })
154
- .filter(notUndefined);
155
- }
156
-
157
- export async function resolveApis({
158
- rawConfig,
159
- configPath = '',
160
- resolver,
161
- }: {
162
- rawConfig: RawConfig;
163
- configPath?: string;
164
- resolver?: BaseResolver;
165
- }): Promise<Record<string, ResolvedApi>> {
166
- const { apis = {}, lint: lintConfig = {} } = rawConfig;
167
- let resolvedApis: Record<string, ResolvedApi> = {};
168
- for (const [apiName, apiContent] of Object.entries(apis || {})) {
169
- if (apiContent.lint?.extends?.some(isNotString)) {
170
- throw new Error(
171
- `Error configuration format not detected in extends value must contain strings`,
172
- );
173
- }
174
- const rawLintConfig = getMergedLintRawConfig(lintConfig, apiContent.lint);
175
- const apiLint = await resolveLint({
176
- lintConfig: rawLintConfig,
177
- configPath,
178
- resolver,
179
- });
180
- resolvedApis[apiName] = { ...apiContent, lint: apiLint };
181
- }
182
- return resolvedApis;
183
- }
184
-
185
- async function resolveAndMergeNestedLint(
186
- {
187
- lintConfig,
188
- configPath = '',
189
- resolver = new BaseResolver(),
190
- }: {
191
- lintConfig?: LintRawConfig;
192
- configPath?: string;
193
- resolver?: BaseResolver;
194
- },
195
- parentConfigPaths: string[] = [],
196
- extendPaths: string[] = [],
197
- ): Promise<ResolvedLintConfig> {
198
- if (parentConfigPaths.includes(configPath)) {
199
- throw new Error(`Circular dependency in config file: "${configPath}"`);
200
- }
201
- const plugins = getUniquePlugins(
202
- resolvePlugins([...(lintConfig?.plugins || []), defaultPlugin], configPath),
203
- );
204
- const pluginPaths = lintConfig?.plugins
205
- ?.filter(isString)
206
- .map((p) => path.resolve(path.dirname(configPath), p));
207
-
208
- const resolvedConfigPath = isAbsoluteUrl(configPath)
209
- ? configPath
210
- : configPath && path.resolve(configPath);
211
-
212
- const extendConfigs: ResolvedLintConfig[] = await Promise.all(
213
- lintConfig?.extends?.map(async (presetItem) => {
214
- if (!isAbsoluteUrl(presetItem) && !path.extname(presetItem)) {
215
- return resolvePreset(presetItem, plugins);
216
- }
217
- const pathItem = isAbsoluteUrl(presetItem)
218
- ? presetItem
219
- : isAbsoluteUrl(configPath)
220
- ? new URL(presetItem, configPath).href
221
- : path.resolve(path.dirname(configPath), presetItem);
222
- const extendedLintConfig = await loadExtendLintConfig(pathItem, resolver);
223
- return await resolveAndMergeNestedLint(
224
- {
225
- lintConfig: extendedLintConfig,
226
- configPath: pathItem,
227
- resolver: resolver,
228
- },
229
- [...parentConfigPaths, resolvedConfigPath],
230
- extendPaths,
231
- );
232
- }) || [],
233
- );
234
-
235
- const { plugins: mergedPlugins = [], ...lint } = mergeExtends([
236
- ...extendConfigs,
237
- {
238
- ...lintConfig,
239
- plugins,
240
- extends: undefined,
241
- extendPaths: [...parentConfigPaths, resolvedConfigPath],
242
- pluginPaths,
243
- },
244
- ]);
245
-
246
- return {
247
- ...lint,
248
- extendPaths: lint.extendPaths?.filter((path) => path && !isAbsoluteUrl(path)),
249
- plugins: getUniquePlugins(mergedPlugins),
250
- recommendedFallback: lintConfig?.recommendedFallback,
251
- doNotResolveExamples: lintConfig?.doNotResolveExamples,
252
- };
253
- }
254
-
255
- export async function resolveLint(
256
- lintOpts: {
257
- lintConfig?: LintRawConfig;
258
- configPath?: string;
259
- resolver?: BaseResolver;
260
- },
261
- parentConfigPaths: string[] = [],
262
- extendPaths: string[] = [],
263
- ): Promise<ResolvedLintConfig> {
264
- const resolvedLint = await resolveAndMergeNestedLint(lintOpts, parentConfigPaths, extendPaths);
265
-
266
- return {
267
- ...resolvedLint,
268
- rules: resolvedLint.rules && groupLintAssertionRules(resolvedLint.rules),
269
- };
270
- }
271
-
272
- export function resolvePreset(presetName: string, plugins: Plugin[]): ResolvedLintConfig {
273
- const { pluginId, configName } = parsePresetName(presetName);
274
- const plugin = plugins.find((p) => p.id === pluginId);
275
- if (!plugin) {
276
- throw new Error(`Invalid config ${red(presetName)}: plugin ${pluginId} is not included.`);
277
- }
278
-
279
- const preset = plugin.configs?.[configName]! as ResolvedLintConfig;
280
- if (!preset) {
281
- throw new Error(
282
- pluginId
283
- ? `Invalid config ${red(
284
- presetName,
285
- )}: plugin ${pluginId} doesn't export config with name ${configName}.`
286
- : `Invalid config ${red(presetName)}: there is no such built-in config.`,
287
- );
288
- }
289
- return preset;
290
- }
291
-
292
- async function loadExtendLintConfig(
293
- filePath: string,
294
- resolver: BaseResolver,
295
- ): Promise<LintRawConfig> {
296
- try {
297
- const fileSource = await resolver.loadExternalRef(filePath);
298
- const rawConfig = transformConfig(parseYaml(fileSource.body) as RawConfig);
299
- if (!rawConfig.lint) {
300
- throw new Error(`Lint configuration format not detected: "${filePath}"`);
301
- }
302
-
303
- return rawConfig.lint;
304
- } catch (error) {
305
- throw new Error(`Failed to load "${filePath}": ${error.message}`);
306
- }
307
- }
308
-
309
- function getMergedLintRawConfig(configLint: LintRawConfig, apiLint?: LintRawConfig) {
310
- const resultLint = {
311
- ...configLint,
312
- ...apiLint,
313
- rules: { ...configLint?.rules, ...apiLint?.rules },
314
- oas2Rules: { ...configLint?.oas2Rules, ...apiLint?.oas2Rules },
315
- oas3_0Rules: { ...configLint?.oas3_0Rules, ...apiLint?.oas3_0Rules },
316
- oas3_1Rules: { ...configLint?.oas3_1Rules, ...apiLint?.oas3_1Rules },
317
- preprocessors: { ...configLint?.preprocessors, ...apiLint?.preprocessors },
318
- oas2Preprocessors: { ...configLint?.oas2Preprocessors, ...apiLint?.oas2Preprocessors },
319
- oas3_0Preprocessors: { ...configLint?.oas3_0Preprocessors, ...apiLint?.oas3_0Preprocessors },
320
- oas3_1Preprocessors: { ...configLint?.oas3_1Preprocessors, ...apiLint?.oas3_1Preprocessors },
321
- decorators: { ...configLint?.decorators, ...apiLint?.decorators },
322
- oas2Decorators: { ...configLint?.oas2Decorators, ...apiLint?.oas2Decorators },
323
- oas3_0Decorators: { ...configLint?.oas3_0Decorators, ...apiLint?.oas3_0Decorators },
324
- oas3_1Decorators: { ...configLint?.oas3_1Decorators, ...apiLint?.oas3_1Decorators },
325
- recommendedFallback: apiLint?.extends ? false : configLint.recommendedFallback,
326
- };
327
- return resultLint;
328
- }
329
-
330
- function groupLintAssertionRules(
331
- rules: Record<string, RuleConfig> | undefined,
332
- ): Record<string, RuleConfig> | undefined {
333
- if (!rules) {
334
- return rules;
335
- }
336
-
337
- // Create a new record to avoid mutating original
338
- const transformedRules: Record<string, RuleConfig> = {};
339
-
340
- // Collect assertion rules
341
- const assertions = [];
342
- for (const [ruleKey, rule] of Object.entries(rules)) {
343
- if (ruleKey.startsWith('assert/') && typeof rule === 'object' && rule !== null) {
344
- const assertion = rule;
345
- assertions.push({
346
- ...assertion,
347
- assertionId: ruleKey.replace('assert/', ''),
348
- });
349
- } else {
350
- // If it's not an assertion, keep it as is
351
- transformedRules[ruleKey] = rule;
352
- }
353
- }
354
- if (assertions.length > 0) {
355
- transformedRules.assertions = assertions;
356
- }
357
-
358
- return transformedRules;
359
- }
@@ -1,312 +0,0 @@
1
- import * as fs from 'fs';
2
- import * as path from 'path';
3
- import { parseYaml, stringifyYaml } from '../js-yaml';
4
- import { slash } from '../utils';
5
- import { NormalizedProblem } from '../walk';
6
- import { OasVersion, OasMajorVersion, Oas2RuleSet, Oas3RuleSet } from '../oas-types';
7
-
8
- import type { NodeType } from '../types';
9
- import type {
10
- DecoratorConfig,
11
- Plugin,
12
- PreprocessorConfig,
13
- Region,
14
- ResolveConfig,
15
- ResolvedApi,
16
- ResolvedConfig,
17
- ResolvedLintConfig,
18
- RuleConfig,
19
- } from './types';
20
- import { getResolveConfig } from './utils';
21
-
22
- // Alias environment here so this file can work in browser environments too.
23
- export const env = typeof process !== 'undefined' ? process.env || {} : {};
24
-
25
- export const IGNORE_FILE = '.redocly.lint-ignore.yaml';
26
- const IGNORE_BANNER =
27
- `# This file instructs Redocly's linter to ignore the rules contained for specific parts of your API.\n` +
28
- `# See https://redoc.ly/docs/cli/ for more information.\n`;
29
-
30
- export const DEFAULT_REGION = 'us';
31
-
32
- function getDomains() {
33
- const domains: { [region in Region]: string } = {
34
- us: 'redocly.com',
35
- eu: 'eu.redocly.com',
36
- };
37
-
38
- // FIXME: temporary fix for our lab environments
39
- const domain = env.REDOCLY_DOMAIN;
40
- if (domain?.endsWith('.redocly.host')) {
41
- domains[domain.split('.')[0] as Region] = domain;
42
- }
43
- if (domain === 'redoc.online') {
44
- domains[domain as Region] = domain;
45
- }
46
- return domains;
47
- }
48
-
49
- export const DOMAINS = getDomains();
50
- export const AVAILABLE_REGIONS = Object.keys(DOMAINS) as Region[];
51
-
52
- export class LintConfig {
53
- plugins: Plugin[];
54
- ignore: Record<string, Record<string, Set<string>>> = {};
55
- doNotResolveExamples: boolean;
56
- rules: Record<OasVersion, Record<string, RuleConfig>>;
57
- preprocessors: Record<OasVersion, Record<string, PreprocessorConfig>>;
58
- decorators: Record<OasVersion, Record<string, DecoratorConfig>>;
59
-
60
- private _usedRules: Set<string> = new Set();
61
- private _usedVersions: Set<OasVersion> = new Set();
62
-
63
- recommendedFallback: boolean;
64
-
65
- extendPaths: string[];
66
- pluginPaths: string[];
67
-
68
- constructor(public rawConfig: ResolvedLintConfig, public configFile?: string) {
69
- this.plugins = rawConfig.plugins || [];
70
- this.doNotResolveExamples = !!rawConfig.doNotResolveExamples;
71
-
72
- this.recommendedFallback = rawConfig.recommendedFallback || false
73
-
74
- this.rules = {
75
- [OasVersion.Version2]: { ...rawConfig.rules, ...rawConfig.oas2Rules },
76
- [OasVersion.Version3_0]: { ...rawConfig.rules, ...rawConfig.oas3_0Rules },
77
- [OasVersion.Version3_1]: { ...rawConfig.rules, ...rawConfig.oas3_1Rules },
78
- };
79
-
80
- this.preprocessors = {
81
- [OasVersion.Version2]: { ...rawConfig.preprocessors, ...rawConfig.oas2Preprocessors },
82
- [OasVersion.Version3_0]: { ...rawConfig.preprocessors, ...rawConfig.oas3_0Preprocessors },
83
- [OasVersion.Version3_1]: { ...rawConfig.preprocessors, ...rawConfig.oas3_1Preprocessors },
84
- };
85
-
86
- this.decorators = {
87
- [OasVersion.Version2]: { ...rawConfig.decorators, ...rawConfig.oas2Decorators },
88
- [OasVersion.Version3_0]: { ...rawConfig.decorators, ...rawConfig.oas3_0Decorators },
89
- [OasVersion.Version3_1]: { ...rawConfig.decorators, ...rawConfig.oas3_1Decorators },
90
- };
91
-
92
- this.extendPaths = rawConfig.extendPaths || [];
93
- this.pluginPaths = rawConfig.pluginPaths || [];
94
-
95
- const dir = this.configFile
96
- ? path.dirname(this.configFile)
97
- : (typeof process !== 'undefined' && process.cwd()) || '';
98
- const ignoreFile = path.join(dir, IGNORE_FILE);
99
-
100
- /* no crash when using it on the client */
101
- if (fs.hasOwnProperty('existsSync') && fs.existsSync(ignoreFile)) {
102
- // TODO: parse errors
103
- this.ignore =
104
- (parseYaml(fs.readFileSync(ignoreFile, 'utf-8')) as Record<
105
- string,
106
- Record<string, Set<string>>
107
- >) || {};
108
-
109
- // resolve ignore paths
110
- for (const fileName of Object.keys(this.ignore)) {
111
- this.ignore[path.resolve(path.dirname(ignoreFile), fileName)] = this.ignore[fileName];
112
- for (const ruleId of Object.keys(this.ignore[fileName])) {
113
- this.ignore[fileName][ruleId] = new Set(this.ignore[fileName][ruleId]);
114
- }
115
- delete this.ignore[fileName];
116
- }
117
- }
118
- }
119
-
120
- saveIgnore() {
121
- const dir = this.configFile ? path.dirname(this.configFile) : process.cwd();
122
- const ignoreFile = path.join(dir, IGNORE_FILE);
123
- const mapped: Record<string, any> = {};
124
- for (const absFileName of Object.keys(this.ignore)) {
125
- const ignoredRules = (mapped[slash(path.relative(dir, absFileName))] =
126
- this.ignore[absFileName]);
127
- for (const ruleId of Object.keys(ignoredRules)) {
128
- ignoredRules[ruleId] = Array.from(ignoredRules[ruleId]) as any;
129
- }
130
- }
131
- fs.writeFileSync(ignoreFile, IGNORE_BANNER + stringifyYaml(mapped));
132
- }
133
-
134
- addIgnore(problem: NormalizedProblem) {
135
- const ignore = this.ignore;
136
- const loc = problem.location[0];
137
- if (loc.pointer === undefined) return;
138
-
139
- const fileIgnore = (ignore[loc.source.absoluteRef] = ignore[loc.source.absoluteRef] || {});
140
- const ruleIgnore = (fileIgnore[problem.ruleId] = fileIgnore[problem.ruleId] || new Set());
141
-
142
- ruleIgnore.add(loc.pointer);
143
- }
144
-
145
- addProblemToIgnore(problem: NormalizedProblem) {
146
- const loc = problem.location[0];
147
- if (loc.pointer === undefined) return problem;
148
-
149
- const fileIgnore = this.ignore[loc.source.absoluteRef] || {};
150
- const ruleIgnore = fileIgnore[problem.ruleId];
151
- const ignored = ruleIgnore && ruleIgnore.has(loc.pointer);
152
- return ignored
153
- ? {
154
- ...problem,
155
- ignored,
156
- }
157
- : problem;
158
- }
159
-
160
- extendTypes(types: Record<string, NodeType>, version: OasVersion) {
161
- let extendedTypes = types;
162
- for (const plugin of this.plugins) {
163
- if (plugin.typeExtension !== undefined) {
164
- switch (version) {
165
- case OasVersion.Version3_0:
166
- case OasVersion.Version3_1:
167
- if (!plugin.typeExtension.oas3) continue;
168
- extendedTypes = plugin.typeExtension.oas3(extendedTypes, version);
169
- case OasVersion.Version2:
170
- if (!plugin.typeExtension.oas2) continue;
171
- extendedTypes = plugin.typeExtension.oas2(extendedTypes, version);
172
- default:
173
- throw new Error('Not implemented');
174
- }
175
- }
176
- }
177
- return extendedTypes;
178
- }
179
-
180
- getRuleSettings(ruleId: string, oasVersion: OasVersion) {
181
- this._usedRules.add(ruleId);
182
- this._usedVersions.add(oasVersion);
183
- const settings = this.rules[oasVersion][ruleId] || 'off';
184
- if (typeof settings === 'string') {
185
- return {
186
- severity: settings,
187
- };
188
- } else {
189
- return { severity: 'error' as 'error', ...settings };
190
- }
191
- }
192
-
193
- getPreprocessorSettings(ruleId: string, oasVersion: OasVersion) {
194
- this._usedRules.add(ruleId);
195
- this._usedVersions.add(oasVersion);
196
-
197
- const settings = this.preprocessors[oasVersion][ruleId] || 'off';
198
- if (typeof settings === 'string') {
199
- return {
200
- severity: settings === 'on' ? ('error' as 'error') : settings,
201
- };
202
- } else {
203
- return { severity: 'error' as 'error', ...settings };
204
- }
205
- }
206
-
207
- getDecoratorSettings(ruleId: string, oasVersion: OasVersion) {
208
- this._usedRules.add(ruleId);
209
- this._usedVersions.add(oasVersion);
210
- const settings = this.decorators[oasVersion][ruleId] || 'off';
211
- if (typeof settings === 'string') {
212
- return {
213
- severity: settings === 'on' ? ('error' as 'error') : settings,
214
- };
215
- } else {
216
- return { severity: 'error' as 'error', ...settings };
217
- }
218
- }
219
-
220
- getUnusedRules() {
221
- const rules = [];
222
- const decorators = [];
223
- const preprocessors = [];
224
-
225
- for (const usedVersion of Array.from(this._usedVersions)) {
226
- rules.push(
227
- ...Object.keys(this.rules[usedVersion]).filter((name) => !this._usedRules.has(name)),
228
- );
229
- decorators.push(
230
- ...Object.keys(this.decorators[usedVersion]).filter((name) => !this._usedRules.has(name)),
231
- );
232
- preprocessors.push(
233
- ...Object.keys(this.preprocessors[usedVersion]).filter(
234
- (name) => !this._usedRules.has(name),
235
- ),
236
- );
237
- }
238
-
239
- return {
240
- rules,
241
- preprocessors,
242
- decorators,
243
- };
244
- }
245
-
246
- getRulesForOasVersion(version: OasMajorVersion) {
247
- switch (version) {
248
- case OasMajorVersion.Version3:
249
- const oas3Rules: Oas3RuleSet[] = []; // default ruleset
250
- this.plugins.forEach((p) => p.preprocessors?.oas3 && oas3Rules.push(p.preprocessors.oas3));
251
- this.plugins.forEach((p) => p.rules?.oas3 && oas3Rules.push(p.rules.oas3));
252
- this.plugins.forEach((p) => p.decorators?.oas3 && oas3Rules.push(p.decorators.oas3));
253
- return oas3Rules;
254
- case OasMajorVersion.Version2:
255
- const oas2Rules: Oas2RuleSet[] = []; // default ruleset
256
- this.plugins.forEach((p) => p.preprocessors?.oas2 && oas2Rules.push(p.preprocessors.oas2));
257
- this.plugins.forEach((p) => p.rules?.oas2 && oas2Rules.push(p.rules.oas2));
258
- this.plugins.forEach((p) => p.decorators?.oas2 && oas2Rules.push(p.decorators.oas2));
259
- return oas2Rules;
260
- }
261
- }
262
-
263
- skipRules(rules?: string[]) {
264
- for (const ruleId of rules || []) {
265
- for (const version of Object.values(OasVersion)) {
266
- if (this.rules[version][ruleId]) {
267
- this.rules[version][ruleId] = 'off';
268
- }
269
- }
270
- }
271
- }
272
-
273
- skipPreprocessors(preprocessors?: string[]) {
274
- for (const preprocessorId of preprocessors || []) {
275
- for (const version of Object.values(OasVersion)) {
276
- if (this.preprocessors[version][preprocessorId]) {
277
- this.preprocessors[version][preprocessorId] = 'off';
278
- }
279
- }
280
- }
281
- }
282
-
283
- skipDecorators(decorators?: string[]) {
284
- for (const decoratorId of decorators || []) {
285
- for (const version of Object.values(OasVersion)) {
286
- if (this.decorators[version][decoratorId]) {
287
- this.decorators[version][decoratorId] = 'off';
288
- }
289
- }
290
- }
291
- }
292
- }
293
-
294
- export class Config {
295
- apis: Record<string, ResolvedApi>;
296
- lint: LintConfig;
297
- resolve: ResolveConfig;
298
- licenseKey?: string;
299
- region?: Region;
300
- 'features.openapi': Record<string, any>;
301
- 'features.mockServer'?: Record<string, any>;
302
- organization?: string;
303
- constructor(public rawConfig: ResolvedConfig, public configFile?: string) {
304
- this.apis = rawConfig.apis || {};
305
- this.lint = new LintConfig(rawConfig.lint || {}, configFile);
306
- this['features.openapi'] = rawConfig['features.openapi'] || {};
307
- this['features.mockServer'] = rawConfig['features.mockServer'] || {};
308
- this.resolve = getResolveConfig(rawConfig?.resolve);
309
- this.region = rawConfig.region;
310
- this.organization = rawConfig.organization;
311
- }
312
- }
@@ -1,7 +0,0 @@
1
- export * from './config';
2
- export * from './types';
3
- export * from './rules';
4
- export * from './builtIn';
5
- export * from './load';
6
- export * from './utils';
7
- export * from './config-resolvers';