@redocly/openapi-core 1.0.0-beta.98 → 1.0.0-rc.1

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 (380) 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 +12 -15
  8. package/lib/bundle.js +38 -15
  9. package/lib/config/all.d.ts +2 -2
  10. package/lib/config/all.js +17 -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 +8 -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.d.ts +2 -0
  94. package/lib/rules/common/response-contains-header.js +29 -0
  95. package/lib/rules/common/scalar-property-missing-example.d.ts +2 -0
  96. package/lib/rules/common/scalar-property-missing-example.js +42 -0
  97. package/lib/rules/common/security-defined.d.ts +2 -0
  98. package/lib/rules/common/{operation-security-defined.js → security-defined.js} +25 -6
  99. package/lib/rules/common/spec-strict-refs.d.ts +2 -0
  100. package/lib/rules/common/spec-strict-refs.js +30 -0
  101. package/lib/rules/common/spec.js +41 -18
  102. package/lib/rules/common/tags-alphabetical.js +1 -1
  103. package/lib/rules/oas2/index.d.ts +6 -2
  104. package/lib/rules/oas2/index.js +16 -8
  105. package/lib/rules/oas2/remove-unused-components.js +6 -6
  106. package/lib/rules/oas2/request-mime-type.d.ts +1 -1
  107. package/lib/rules/oas2/request-mime-type.js +1 -1
  108. package/lib/rules/oas2/response-contains-property.d.ts +2 -0
  109. package/lib/rules/oas2/response-contains-property.js +38 -0
  110. package/lib/rules/oas2/response-mime-type.d.ts +1 -1
  111. package/lib/rules/oas2/response-mime-type.js +1 -1
  112. package/lib/rules/oas3/component-name-unique.d.ts +2 -0
  113. package/lib/rules/oas3/component-name-unique.js +124 -0
  114. package/lib/rules/oas3/index.js +24 -10
  115. package/lib/rules/oas3/no-empty-servers.js +2 -2
  116. package/lib/rules/oas3/no-invalid-media-type-examples.js +2 -2
  117. package/lib/rules/oas3/no-server-variables-empty-enum.d.ts +2 -0
  118. package/lib/rules/oas3/{no-servers-empty-enum.js → no-server-variables-empty-enum.js} +5 -5
  119. package/lib/rules/oas3/no-unused-components.js +2 -2
  120. package/lib/rules/oas3/operation-4xx-problem-details-rfc7807.d.ts +5 -0
  121. package/lib/rules/oas3/operation-4xx-problem-details-rfc7807.js +36 -0
  122. package/lib/rules/oas3/remove-unused-components.js +6 -6
  123. package/lib/rules/oas3/request-mime-type.d.ts +1 -1
  124. package/lib/rules/oas3/request-mime-type.js +1 -1
  125. package/lib/rules/oas3/response-contains-property.d.ts +2 -0
  126. package/lib/rules/oas3/response-contains-property.js +40 -0
  127. package/lib/rules/oas3/response-mime-type.d.ts +1 -1
  128. package/lib/rules/oas3/response-mime-type.js +1 -1
  129. package/lib/rules/oas3/spec-components-invalid-map-name.d.ts +2 -0
  130. package/lib/rules/oas3/spec-components-invalid-map-name.js +62 -0
  131. package/lib/rules/other/stats.d.ts +2 -2
  132. package/lib/rules/other/stats.js +45 -16
  133. package/lib/rules/utils.d.ts +5 -2
  134. package/lib/rules/utils.js +54 -6
  135. package/lib/types/config-external-schemas.d.ts +2193 -0
  136. package/lib/types/config-external-schemas.js +805 -0
  137. package/lib/types/index.d.ts +3 -2
  138. package/lib/types/index.js +9 -1
  139. package/lib/types/oas2.js +91 -15
  140. package/lib/types/oas3.js +139 -49
  141. package/lib/types/oas3_1.js +32 -26
  142. package/lib/types/redocly-yaml.js +414 -58
  143. package/lib/typings/openapi.d.ts +3 -2
  144. package/lib/utils.d.ts +15 -3
  145. package/lib/utils.js +73 -7
  146. package/lib/visitors.d.ts +20 -16
  147. package/lib/visitors.js +28 -3
  148. package/lib/walk.d.ts +11 -19
  149. package/lib/walk.js +74 -53
  150. package/package.json +5 -6
  151. package/__tests__/__snapshots__/bundle.test.ts.snap +0 -229
  152. package/__tests__/bundle.test.ts +0 -132
  153. package/__tests__/codeframes.test.ts +0 -531
  154. package/__tests__/fixtures/extension.js +0 -24
  155. package/__tests__/fixtures/refs/definitions.yaml +0 -3
  156. package/__tests__/fixtures/refs/examples.yaml +0 -8
  157. package/__tests__/fixtures/refs/external-request-body.yaml +0 -13
  158. package/__tests__/fixtures/refs/externalref.yaml +0 -35
  159. package/__tests__/fixtures/refs/hosted.yaml +0 -35
  160. package/__tests__/fixtures/refs/openapi-with-external-refs-conflicting-names.yaml +0 -21
  161. package/__tests__/fixtures/refs/openapi-with-external-refs.yaml +0 -33
  162. package/__tests__/fixtures/refs/param-b.yaml +0 -1
  163. package/__tests__/fixtures/refs/param-c.yaml +0 -1
  164. package/__tests__/fixtures/refs/rename.yaml +0 -1
  165. package/__tests__/fixtures/refs/requestBody.yaml +0 -9
  166. package/__tests__/fixtures/refs/schema-a.yaml +0 -1
  167. package/__tests__/fixtures/refs/simple.yaml +0 -1
  168. package/__tests__/fixtures/refs/vendor.schema.yaml +0 -20
  169. package/__tests__/fixtures/resolve/External.yaml +0 -10
  170. package/__tests__/fixtures/resolve/External2.yaml +0 -4
  171. package/__tests__/fixtures/resolve/description.md +0 -3
  172. package/__tests__/fixtures/resolve/externalInfo.yaml +0 -4
  173. package/__tests__/fixtures/resolve/externalLicense.yaml +0 -1
  174. package/__tests__/fixtures/resolve/openapi-with-back.yaml +0 -13
  175. package/__tests__/fixtures/resolve/openapi-with-md-description.yaml +0 -5
  176. package/__tests__/fixtures/resolve/openapi.yaml +0 -28
  177. package/__tests__/fixtures/resolve/schemas/type-a.yaml +0 -10
  178. package/__tests__/fixtures/resolve/schemas/type-b.yaml +0 -6
  179. package/__tests__/fixtures/resolve/transitive/a.yaml +0 -1
  180. package/__tests__/fixtures/resolve/transitive/components.yaml +0 -5
  181. package/__tests__/fixtures/resolve/transitive/schemas.yaml +0 -3
  182. package/__tests__/lint.test.ts +0 -17
  183. package/__tests__/login.test.ts +0 -17
  184. package/__tests__/normalizeVisitors.test.ts +0 -151
  185. package/__tests__/ref-utils.test.ts +0 -120
  186. package/__tests__/resolve-http.test.ts +0 -77
  187. package/__tests__/resolve.test.ts +0 -405
  188. package/__tests__/utils.ts +0 -86
  189. package/__tests__/walk.test.ts +0 -1485
  190. package/lib/rules/common/info-description.d.ts +0 -2
  191. package/lib/rules/common/info-description.js +0 -12
  192. package/lib/rules/common/license-url.d.ts +0 -2
  193. package/lib/rules/common/license-url.js +0 -12
  194. package/lib/rules/common/operation-security-defined.d.ts +0 -2
  195. package/lib/rules/oas3/no-servers-empty-enum.d.ts +0 -2
  196. package/src/__tests__/js-yaml.test.ts +0 -71
  197. package/src/__tests__/lint.test.ts +0 -182
  198. package/src/__tests__/utils.test.ts +0 -74
  199. package/src/benchmark/benches/lint-with-many-rules.bench.ts +0 -35
  200. package/src/benchmark/benches/lint-with-nested-rule.bench.ts +0 -39
  201. package/src/benchmark/benches/lint-with-no-rules.bench.ts +0 -20
  202. package/src/benchmark/benches/lint-with-top-level-rule-report.bench.ts +0 -36
  203. package/src/benchmark/benches/lint-with-top-level-rule.bench.ts +0 -32
  204. package/src/benchmark/benches/rebilly.yaml +0 -32267
  205. package/src/benchmark/benches/recommended-oas3.bench.ts +0 -22
  206. package/src/benchmark/benches/resolve-with-no-external.bench.ts +0 -23
  207. package/src/benchmark/benchmark.js +0 -307
  208. package/src/benchmark/colors.js +0 -29
  209. package/src/benchmark/fork.js +0 -83
  210. package/src/benchmark/utils.ts +0 -36
  211. package/src/bundle.ts +0 -371
  212. package/src/config/__tests__/__snapshots__/config-resolvers.test.ts.snap +0 -157
  213. package/src/config/__tests__/config-resolvers.test.ts +0 -429
  214. package/src/config/__tests__/config.test.ts +0 -244
  215. package/src/config/__tests__/fixtures/plugin-config.yaml +0 -3
  216. package/src/config/__tests__/fixtures/plugin.js +0 -56
  217. package/src/config/__tests__/fixtures/resolve-config/api/nested-config.yaml +0 -12
  218. package/src/config/__tests__/fixtures/resolve-config/api/plugin.js +0 -67
  219. package/src/config/__tests__/fixtures/resolve-config/local-config-with-circular.yaml +0 -8
  220. package/src/config/__tests__/fixtures/resolve-config/local-config-with-file.yaml +0 -19
  221. package/src/config/__tests__/fixtures/resolve-config/local-config.yaml +0 -10
  222. package/src/config/__tests__/fixtures/resolve-config/plugin.js +0 -66
  223. package/src/config/__tests__/fixtures/resolve-remote-configs/nested-remote-config.yaml +0 -4
  224. package/src/config/__tests__/fixtures/resolve-remote-configs/remote-config.yaml +0 -5
  225. package/src/config/__tests__/load.test.ts +0 -83
  226. package/src/config/__tests__/resolve-plugins.test.ts +0 -27
  227. package/src/config/all.ts +0 -65
  228. package/src/config/builtIn.ts +0 -37
  229. package/src/config/config-resolvers.ts +0 -359
  230. package/src/config/config.ts +0 -312
  231. package/src/config/index.ts +0 -7
  232. package/src/config/load.ts +0 -84
  233. package/src/config/minimal.ts +0 -58
  234. package/src/config/recommended.ts +0 -58
  235. package/src/config/rules.ts +0 -46
  236. package/src/config/types.ts +0 -168
  237. package/src/config/utils.ts +0 -208
  238. package/src/decorators/__tests__/remove-x-internal.test.ts +0 -316
  239. package/src/decorators/common/info-description-override.ts +0 -24
  240. package/src/decorators/common/operation-description-override.ts +0 -30
  241. package/src/decorators/common/registry-dependencies.ts +0 -25
  242. package/src/decorators/common/remove-x-internal.ts +0 -59
  243. package/src/decorators/common/tag-description-override.ts +0 -25
  244. package/src/decorators/oas2/index.ts +0 -14
  245. package/src/decorators/oas3/index.ts +0 -14
  246. package/src/format/codeframes.ts +0 -210
  247. package/src/format/format.ts +0 -339
  248. package/src/index.ts +0 -68
  249. package/src/js-yaml/index.ts +0 -18
  250. package/src/lint.ts +0 -125
  251. package/src/oas-types.ts +0 -62
  252. package/src/redocly/__tests__/redocly-client.test.ts +0 -140
  253. package/src/redocly/index.ts +0 -182
  254. package/src/redocly/redocly-client-types.ts +0 -10
  255. package/src/redocly/registry-api-types.ts +0 -32
  256. package/src/redocly/registry-api.ts +0 -134
  257. package/src/ref-utils.ts +0 -79
  258. package/src/resolve.ts +0 -378
  259. package/src/rules/__tests__/fixtures/invalid-yaml.yaml +0 -1
  260. package/src/rules/__tests__/fixtures/ref.yaml +0 -1
  261. package/src/rules/__tests__/no-unresolved-refs.test.ts +0 -168
  262. package/src/rules/ajv.ts +0 -103
  263. package/src/rules/common/__tests__/info-description.test.ts +0 -102
  264. package/src/rules/common/__tests__/info-license.test.ts +0 -62
  265. package/src/rules/common/__tests__/license-url.test.ts +0 -63
  266. package/src/rules/common/__tests__/no-ambiguous-paths.test.ts +0 -96
  267. package/src/rules/common/__tests__/no-enum-type-mismatch.test.ts +0 -209
  268. package/src/rules/common/__tests__/no-identical-paths.test.ts +0 -58
  269. package/src/rules/common/__tests__/no-path-trailing-slash.test.ts +0 -85
  270. package/src/rules/common/__tests__/operation-2xx-response.test.ts +0 -91
  271. package/src/rules/common/__tests__/operation-4xx-response.test.ts +0 -107
  272. package/src/rules/common/__tests__/operation-operationId-unique.test.ts +0 -76
  273. package/src/rules/common/__tests__/operation-operationId-url-safe.test.ts +0 -45
  274. package/src/rules/common/__tests__/operation-parameters-unique.test.ts +0 -167
  275. package/src/rules/common/__tests__/operation-security-defined.test.ts +0 -69
  276. package/src/rules/common/__tests__/operation-singular-tag.test.ts +0 -72
  277. package/src/rules/common/__tests__/path-http-verbs-order.test.ts +0 -95
  278. package/src/rules/common/__tests__/path-not-include-query.test.ts +0 -64
  279. package/src/rules/common/__tests__/path-params-defined.test.ts +0 -133
  280. package/src/rules/common/__tests__/paths-kebab-case.test.ts +0 -108
  281. package/src/rules/common/__tests__/spec.test.ts +0 -62
  282. package/src/rules/common/__tests__/tag-description.test.ts +0 -65
  283. package/src/rules/common/__tests__/tags-alphabetical.test.ts +0 -64
  284. package/src/rules/common/assertions/__tests__/asserts.test.ts +0 -231
  285. package/src/rules/common/assertions/__tests__/index.test.ts +0 -65
  286. package/src/rules/common/assertions/__tests__/utils.test.ts +0 -89
  287. package/src/rules/common/assertions/asserts.ts +0 -137
  288. package/src/rules/common/assertions/index.ts +0 -75
  289. package/src/rules/common/assertions/utils.ts +0 -167
  290. package/src/rules/common/info-contact.ts +0 -15
  291. package/src/rules/common/info-description.ts +0 -10
  292. package/src/rules/common/info-license-url.ts +0 -15
  293. package/src/rules/common/license-url.ts +0 -10
  294. package/src/rules/common/no-ambiguous-paths.ts +0 -50
  295. package/src/rules/common/no-enum-type-mismatch.ts +0 -49
  296. package/src/rules/common/no-http-verbs-in-paths.ts +0 -36
  297. package/src/rules/common/no-identical-paths.ts +0 -24
  298. package/src/rules/common/no-invalid-parameter-examples.ts +0 -36
  299. package/src/rules/common/no-invalid-schema-examples.ts +0 -27
  300. package/src/rules/common/no-path-trailing-slash.ts +0 -15
  301. package/src/rules/common/operation-2xx-response.ts +0 -16
  302. package/src/rules/common/operation-4xx-response.ts +0 -17
  303. package/src/rules/common/operation-description.ts +0 -13
  304. package/src/rules/common/operation-operationId-unique.ts +0 -21
  305. package/src/rules/common/operation-operationId-url-safe.ts +0 -19
  306. package/src/rules/common/operation-operationId.ts +0 -17
  307. package/src/rules/common/operation-parameters-unique.ts +0 -48
  308. package/src/rules/common/operation-security-defined.ts +0 -45
  309. package/src/rules/common/operation-singular-tag.ts +0 -17
  310. package/src/rules/common/operation-summary.ts +0 -13
  311. package/src/rules/common/operation-tag-defined.ts +0 -26
  312. package/src/rules/common/parameter-description.ts +0 -22
  313. package/src/rules/common/path-declaration-must-exist.ts +0 -15
  314. package/src/rules/common/path-excludes-patterns.ts +0 -23
  315. package/src/rules/common/path-http-verbs-order.ts +0 -30
  316. package/src/rules/common/path-not-include-query.ts +0 -17
  317. package/src/rules/common/path-params-defined.ts +0 -58
  318. package/src/rules/common/path-segment-plural.ts +0 -31
  319. package/src/rules/common/paths-kebab-case.ts +0 -16
  320. package/src/rules/common/spec.ts +0 -143
  321. package/src/rules/common/tag-description.ts +0 -10
  322. package/src/rules/common/tags-alphabetical.ts +0 -20
  323. package/src/rules/no-unresolved-refs.ts +0 -51
  324. package/src/rules/oas2/__tests__/boolean-parameter-prefixes.test.ts +0 -110
  325. package/src/rules/oas2/__tests__/spec/fixtures/description.md +0 -1
  326. package/src/rules/oas2/__tests__/spec/info.test.ts +0 -355
  327. package/src/rules/oas2/__tests__/spec/operation.test.ts +0 -123
  328. package/src/rules/oas2/__tests__/spec/paths.test.ts +0 -245
  329. package/src/rules/oas2/__tests__/spec/referenceableScalars.test.ts +0 -31
  330. package/src/rules/oas2/__tests__/spec/utils.ts +0 -32
  331. package/src/rules/oas2/boolean-parameter-prefixes.ts +0 -26
  332. package/src/rules/oas2/index.ts +0 -83
  333. package/src/rules/oas2/remove-unused-components.ts +0 -76
  334. package/src/rules/oas2/request-mime-type.ts +0 -17
  335. package/src/rules/oas2/response-mime-type.ts +0 -17
  336. package/src/rules/oas3/__tests__/boolean-parameter-prefixes.test.ts +0 -111
  337. package/src/rules/oas3/__tests__/fixtures/common.yaml +0 -11
  338. package/src/rules/oas3/__tests__/no-empty-enum-servers.com.test.ts +0 -205
  339. package/src/rules/oas3/__tests__/no-example-value-and-externalValue.test.ts +0 -65
  340. package/src/rules/oas3/__tests__/no-invalid-media-type-examples.test.ts +0 -392
  341. package/src/rules/oas3/__tests__/no-server-example.com.test.ts +0 -60
  342. package/src/rules/oas3/__tests__/no-server-trailing-slash.test.ts +0 -79
  343. package/src/rules/oas3/__tests__/no-unused-components.test.ts +0 -131
  344. package/src/rules/oas3/__tests__/spec/callbacks.test.ts +0 -41
  345. package/src/rules/oas3/__tests__/spec/fixtures/description.md +0 -1
  346. package/src/rules/oas3/__tests__/spec/info.test.ts +0 -391
  347. package/src/rules/oas3/__tests__/spec/operation.test.ts +0 -253
  348. package/src/rules/oas3/__tests__/spec/paths.test.ts +0 -284
  349. package/src/rules/oas3/__tests__/spec/referenceableScalars.test.ts +0 -77
  350. package/src/rules/oas3/__tests__/spec/servers.test.ts +0 -499
  351. package/src/rules/oas3/__tests__/spec/spec.test.ts +0 -288
  352. package/src/rules/oas3/__tests__/spec/utils.ts +0 -32
  353. package/src/rules/oas3/boolean-parameter-prefixes.ts +0 -28
  354. package/src/rules/oas3/index.ts +0 -99
  355. package/src/rules/oas3/no-empty-servers.ts +0 -22
  356. package/src/rules/oas3/no-example-value-and-externalValue.ts +0 -14
  357. package/src/rules/oas3/no-invalid-media-type-examples.ts +0 -41
  358. package/src/rules/oas3/no-server-example.com.ts +0 -14
  359. package/src/rules/oas3/no-server-trailing-slash.ts +0 -15
  360. package/src/rules/oas3/no-servers-empty-enum.ts +0 -67
  361. package/src/rules/oas3/no-undefined-server-variable.ts +0 -30
  362. package/src/rules/oas3/no-unused-components.ts +0 -75
  363. package/src/rules/oas3/remove-unused-components.ts +0 -84
  364. package/src/rules/oas3/request-mime-type.ts +0 -31
  365. package/src/rules/oas3/response-mime-type.ts +0 -31
  366. package/src/rules/other/stats.ts +0 -44
  367. package/src/rules/utils.ts +0 -123
  368. package/src/types/index.ts +0 -138
  369. package/src/types/oas2.ts +0 -397
  370. package/src/types/oas3.ts +0 -506
  371. package/src/types/oas3_1.ts +0 -251
  372. package/src/types/redocly-yaml.ts +0 -637
  373. package/src/typings/common.ts +0 -9
  374. package/src/typings/openapi.ts +0 -297
  375. package/src/typings/swagger.ts +0 -236
  376. package/src/utils.ts +0 -190
  377. package/src/visitors.ts +0 -448
  378. package/src/walk.ts +0 -416
  379. package/tsconfig.json +0 -8
  380. 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';