@redocly/openapi-core 1.0.0-beta.100

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 (459) hide show
  1. package/README.md +25 -0
  2. package/__tests__/utils.ts +86 -0
  3. package/lib/benchmark/benches/lint-with-many-rules.bench.d.ts +3 -0
  4. package/lib/benchmark/benches/lint-with-many-rules.bench.js +34 -0
  5. package/lib/benchmark/benches/lint-with-nested-rule.bench.d.ts +3 -0
  6. package/lib/benchmark/benches/lint-with-nested-rule.bench.js +40 -0
  7. package/lib/benchmark/benches/lint-with-no-rules.bench.d.ts +3 -0
  8. package/lib/benchmark/benches/lint-with-no-rules.bench.js +21 -0
  9. package/lib/benchmark/benches/lint-with-top-level-rule-report.bench.d.ts +3 -0
  10. package/lib/benchmark/benches/lint-with-top-level-rule-report.bench.js +34 -0
  11. package/lib/benchmark/benches/lint-with-top-level-rule.bench.d.ts +3 -0
  12. package/lib/benchmark/benches/lint-with-top-level-rule.bench.js +32 -0
  13. package/lib/benchmark/benches/recommended-oas3.bench.d.ts +3 -0
  14. package/lib/benchmark/benches/recommended-oas3.bench.js +21 -0
  15. package/lib/benchmark/benches/resolve-with-no-external.bench.d.ts +3 -0
  16. package/lib/benchmark/benches/resolve-with-no-external.bench.js +22 -0
  17. package/lib/benchmark/utils.d.ts +6 -0
  18. package/lib/benchmark/utils.js +31 -0
  19. package/lib/bundle.d.ts +47 -0
  20. package/lib/bundle.js +291 -0
  21. package/lib/config/all.d.ts +3 -0
  22. package/lib/config/all.js +65 -0
  23. package/lib/config/builtIn.d.ts +3 -0
  24. package/lib/config/builtIn.js +36 -0
  25. package/lib/config/config-resolvers.d.ts +16 -0
  26. package/lib/config/config-resolvers.js +242 -0
  27. package/lib/config/config.d.ts +64 -0
  28. package/lib/config/config.js +244 -0
  29. package/lib/config/index.d.ts +7 -0
  30. package/lib/config/index.js +19 -0
  31. package/lib/config/load.d.ts +6 -0
  32. package/lib/config/load.js +93 -0
  33. package/lib/config/minimal.d.ts +3 -0
  34. package/lib/config/minimal.js +58 -0
  35. package/lib/config/recommended.d.ts +3 -0
  36. package/lib/config/recommended.js +58 -0
  37. package/lib/config/rules.d.ts +7 -0
  38. package/lib/config/rules.js +34 -0
  39. package/lib/config/types.d.ts +113 -0
  40. package/lib/config/types.js +2 -0
  41. package/lib/config/utils.d.ts +13 -0
  42. package/lib/config/utils.js +160 -0
  43. package/lib/decorators/common/info-description-override.d.ts +2 -0
  44. package/lib/decorators/common/info-description-override.js +24 -0
  45. package/lib/decorators/common/operation-description-override.d.ts +2 -0
  46. package/lib/decorators/common/operation-description-override.js +29 -0
  47. package/lib/decorators/common/registry-dependencies.d.ts +2 -0
  48. package/lib/decorators/common/registry-dependencies.js +24 -0
  49. package/lib/decorators/common/remove-x-internal.d.ts +2 -0
  50. package/lib/decorators/common/remove-x-internal.js +58 -0
  51. package/lib/decorators/common/tag-description-override.d.ts +2 -0
  52. package/lib/decorators/common/tag-description-override.js +25 -0
  53. package/lib/decorators/oas2/index.d.ts +8 -0
  54. package/lib/decorators/oas2/index.js +15 -0
  55. package/lib/decorators/oas3/index.d.ts +8 -0
  56. package/lib/decorators/oas3/index.js +15 -0
  57. package/lib/format/codeframes.d.ts +22 -0
  58. package/lib/format/codeframes.js +177 -0
  59. package/lib/format/format.d.ts +20 -0
  60. package/lib/format/format.js +236 -0
  61. package/lib/index.d.ts +22 -0
  62. package/lib/index.js +69 -0
  63. package/lib/js-yaml/index.d.ts +3 -0
  64. package/lib/js-yaml/index.js +19 -0
  65. package/lib/lint.d.ts +23 -0
  66. package/lib/lint.js +99 -0
  67. package/lib/oas-types.d.ts +19 -0
  68. package/lib/oas-types.js +45 -0
  69. package/lib/redocly/index.d.ts +30 -0
  70. package/lib/redocly/index.js +153 -0
  71. package/lib/redocly/redocly-client-types.d.ts +8 -0
  72. package/lib/redocly/redocly-client-types.js +2 -0
  73. package/lib/redocly/registry-api-types.d.ts +29 -0
  74. package/lib/redocly/registry-api-types.js +2 -0
  75. package/lib/redocly/registry-api.d.ts +17 -0
  76. package/lib/redocly/registry-api.js +106 -0
  77. package/lib/ref-utils.d.ts +25 -0
  78. package/lib/ref-utils.js +75 -0
  79. package/lib/resolve.d.ts +66 -0
  80. package/lib/resolve.js +311 -0
  81. package/lib/rules/ajv.d.ts +10 -0
  82. package/lib/rules/ajv.js +80 -0
  83. package/lib/rules/common/assertions/asserts.d.ts +5 -0
  84. package/lib/rules/common/assertions/asserts.js +143 -0
  85. package/lib/rules/common/assertions/index.d.ts +2 -0
  86. package/lib/rules/common/assertions/index.js +52 -0
  87. package/lib/rules/common/assertions/utils.d.ts +20 -0
  88. package/lib/rules/common/assertions/utils.js +127 -0
  89. package/lib/rules/common/info-contact.d.ts +2 -0
  90. package/lib/rules/common/info-contact.js +17 -0
  91. package/lib/rules/common/info-description.d.ts +2 -0
  92. package/lib/rules/common/info-description.js +12 -0
  93. package/lib/rules/common/info-license-url.d.ts +2 -0
  94. package/lib/rules/common/info-license-url.js +17 -0
  95. package/lib/rules/common/license-url.d.ts +2 -0
  96. package/lib/rules/common/license-url.js +12 -0
  97. package/lib/rules/common/no-ambiguous-paths.d.ts +2 -0
  98. package/lib/rules/common/no-ambiguous-paths.js +45 -0
  99. package/lib/rules/common/no-enum-type-mismatch.d.ts +2 -0
  100. package/lib/rules/common/no-enum-type-mismatch.js +43 -0
  101. package/lib/rules/common/no-http-verbs-in-paths.d.ts +2 -0
  102. package/lib/rules/common/no-http-verbs-in-paths.js +33 -0
  103. package/lib/rules/common/no-identical-paths.d.ts +2 -0
  104. package/lib/rules/common/no-identical-paths.js +24 -0
  105. package/lib/rules/common/no-invalid-parameter-examples.d.ts +1 -0
  106. package/lib/rules/common/no-invalid-parameter-examples.js +25 -0
  107. package/lib/rules/common/no-invalid-schema-examples.d.ts +1 -0
  108. package/lib/rules/common/no-invalid-schema-examples.js +23 -0
  109. package/lib/rules/common/no-path-trailing-slash.d.ts +2 -0
  110. package/lib/rules/common/no-path-trailing-slash.js +16 -0
  111. package/lib/rules/common/operation-2xx-response.d.ts +2 -0
  112. package/lib/rules/common/operation-2xx-response.js +17 -0
  113. package/lib/rules/common/operation-4xx-response.d.ts +2 -0
  114. package/lib/rules/common/operation-4xx-response.js +17 -0
  115. package/lib/rules/common/operation-description.d.ts +2 -0
  116. package/lib/rules/common/operation-description.js +12 -0
  117. package/lib/rules/common/operation-operationId-unique.d.ts +2 -0
  118. package/lib/rules/common/operation-operationId-unique.js +20 -0
  119. package/lib/rules/common/operation-operationId-url-safe.d.ts +2 -0
  120. package/lib/rules/common/operation-operationId-url-safe.js +17 -0
  121. package/lib/rules/common/operation-operationId.d.ts +2 -0
  122. package/lib/rules/common/operation-operationId.js +16 -0
  123. package/lib/rules/common/operation-parameters-unique.d.ts +2 -0
  124. package/lib/rules/common/operation-parameters-unique.js +40 -0
  125. package/lib/rules/common/operation-security-defined.d.ts +2 -0
  126. package/lib/rules/common/operation-security-defined.js +38 -0
  127. package/lib/rules/common/operation-singular-tag.d.ts +2 -0
  128. package/lib/rules/common/operation-singular-tag.js +16 -0
  129. package/lib/rules/common/operation-summary.d.ts +2 -0
  130. package/lib/rules/common/operation-summary.js +12 -0
  131. package/lib/rules/common/operation-tag-defined.d.ts +2 -0
  132. package/lib/rules/common/operation-tag-defined.js +25 -0
  133. package/lib/rules/common/parameter-description.d.ts +2 -0
  134. package/lib/rules/common/parameter-description.js +22 -0
  135. package/lib/rules/common/path-declaration-must-exist.d.ts +2 -0
  136. package/lib/rules/common/path-declaration-must-exist.js +16 -0
  137. package/lib/rules/common/path-excludes-patterns.d.ts +2 -0
  138. package/lib/rules/common/path-excludes-patterns.js +22 -0
  139. package/lib/rules/common/path-http-verbs-order.d.ts +2 -0
  140. package/lib/rules/common/path-http-verbs-order.js +26 -0
  141. package/lib/rules/common/path-not-include-query.d.ts +2 -0
  142. package/lib/rules/common/path-not-include-query.js +18 -0
  143. package/lib/rules/common/path-params-defined.d.ts +2 -0
  144. package/lib/rules/common/path-params-defined.js +53 -0
  145. package/lib/rules/common/path-segment-plural.d.ts +2 -0
  146. package/lib/rules/common/path-segment-plural.js +32 -0
  147. package/lib/rules/common/paths-kebab-case.d.ts +2 -0
  148. package/lib/rules/common/paths-kebab-case.js +17 -0
  149. package/lib/rules/common/response-contains-header.d.ts +2 -0
  150. package/lib/rules/common/response-contains-header.js +29 -0
  151. package/lib/rules/common/scalar-property-missing-example.d.ts +2 -0
  152. package/lib/rules/common/scalar-property-missing-example.js +42 -0
  153. package/lib/rules/common/spec.d.ts +2 -0
  154. package/lib/rules/common/spec.js +136 -0
  155. package/lib/rules/common/tag-description.d.ts +2 -0
  156. package/lib/rules/common/tag-description.js +12 -0
  157. package/lib/rules/common/tags-alphabetical.d.ts +2 -0
  158. package/lib/rules/common/tags-alphabetical.js +20 -0
  159. package/lib/rules/no-unresolved-refs.d.ts +5 -0
  160. package/lib/rules/no-unresolved-refs.js +47 -0
  161. package/lib/rules/oas2/boolean-parameter-prefixes.d.ts +5 -0
  162. package/lib/rules/oas2/boolean-parameter-prefixes.js +22 -0
  163. package/lib/rules/oas2/index.d.ts +46 -0
  164. package/lib/rules/oas2/index.js +89 -0
  165. package/lib/rules/oas2/remove-unused-components.d.ts +2 -0
  166. package/lib/rules/oas2/remove-unused-components.js +73 -0
  167. package/lib/rules/oas2/request-mime-type.d.ts +2 -0
  168. package/lib/rules/oas2/request-mime-type.js +17 -0
  169. package/lib/rules/oas2/response-contains-property.d.ts +2 -0
  170. package/lib/rules/oas2/response-contains-property.js +38 -0
  171. package/lib/rules/oas2/response-mime-type.d.ts +2 -0
  172. package/lib/rules/oas2/response-mime-type.js +17 -0
  173. package/lib/rules/oas3/boolean-parameter-prefixes.d.ts +5 -0
  174. package/lib/rules/oas3/boolean-parameter-prefixes.js +24 -0
  175. package/lib/rules/oas3/index.d.ts +3 -0
  176. package/lib/rules/oas3/index.js +105 -0
  177. package/lib/rules/oas3/no-empty-servers.d.ts +2 -0
  178. package/lib/rules/oas3/no-empty-servers.js +23 -0
  179. package/lib/rules/oas3/no-example-value-and-externalValue.d.ts +2 -0
  180. package/lib/rules/oas3/no-example-value-and-externalValue.js +16 -0
  181. package/lib/rules/oas3/no-invalid-media-type-examples.d.ts +2 -0
  182. package/lib/rules/oas3/no-invalid-media-type-examples.js +37 -0
  183. package/lib/rules/oas3/no-server-example.com.d.ts +2 -0
  184. package/lib/rules/oas3/no-server-example.com.js +16 -0
  185. package/lib/rules/oas3/no-server-trailing-slash.d.ts +2 -0
  186. package/lib/rules/oas3/no-server-trailing-slash.js +18 -0
  187. package/lib/rules/oas3/no-servers-empty-enum.d.ts +2 -0
  188. package/lib/rules/oas3/no-servers-empty-enum.js +67 -0
  189. package/lib/rules/oas3/no-undefined-server-variable.d.ts +2 -0
  190. package/lib/rules/oas3/no-undefined-server-variable.js +32 -0
  191. package/lib/rules/oas3/no-unused-components.d.ts +2 -0
  192. package/lib/rules/oas3/no-unused-components.js +74 -0
  193. package/lib/rules/oas3/remove-unused-components.d.ts +2 -0
  194. package/lib/rules/oas3/remove-unused-components.js +83 -0
  195. package/lib/rules/oas3/request-mime-type.d.ts +2 -0
  196. package/lib/rules/oas3/request-mime-type.js +31 -0
  197. package/lib/rules/oas3/response-contains-property.d.ts +2 -0
  198. package/lib/rules/oas3/response-contains-property.js +40 -0
  199. package/lib/rules/oas3/response-mime-type.d.ts +2 -0
  200. package/lib/rules/oas3/response-mime-type.js +31 -0
  201. package/lib/rules/other/stats.d.ts +41 -0
  202. package/lib/rules/other/stats.js +44 -0
  203. package/lib/rules/utils.d.ts +17 -0
  204. package/lib/rules/utils.js +107 -0
  205. package/lib/types/index.d.ts +56 -0
  206. package/lib/types/index.js +77 -0
  207. package/lib/types/oas2.d.ts +2 -0
  208. package/lib/types/oas2.js +380 -0
  209. package/lib/types/oas3.d.ts +2 -0
  210. package/lib/types/oas3.js +479 -0
  211. package/lib/types/oas3_1.d.ts +2 -0
  212. package/lib/types/oas3_1.js +247 -0
  213. package/lib/types/redocly-yaml.d.ts +2 -0
  214. package/lib/types/redocly-yaml.js +533 -0
  215. package/lib/typings/common.d.ts +8 -0
  216. package/lib/typings/common.js +2 -0
  217. package/lib/typings/openapi.d.ts +299 -0
  218. package/lib/typings/openapi.js +2 -0
  219. package/lib/typings/swagger.d.ts +217 -0
  220. package/lib/typings/swagger.js +2 -0
  221. package/lib/utils.d.ts +41 -0
  222. package/lib/utils.js +177 -0
  223. package/lib/visitors.d.ts +175 -0
  224. package/lib/visitors.js +140 -0
  225. package/lib/walk.d.ts +87 -0
  226. package/lib/walk.js +253 -0
  227. package/package.json +56 -0
  228. package/src/__tests__/__snapshots__/bundle.test.ts.snap +255 -0
  229. package/src/__tests__/bundle.test.ts +156 -0
  230. package/src/__tests__/codeframes.test.ts +531 -0
  231. package/src/__tests__/fixtures/extension.js +24 -0
  232. package/src/__tests__/fixtures/refs/definitions.yaml +3 -0
  233. package/src/__tests__/fixtures/refs/examples.yaml +8 -0
  234. package/src/__tests__/fixtures/refs/external-request-body.yaml +13 -0
  235. package/src/__tests__/fixtures/refs/externalref.yaml +35 -0
  236. package/src/__tests__/fixtures/refs/hosted.yaml +35 -0
  237. package/src/__tests__/fixtures/refs/openapi-with-external-refs-conflicting-names.yaml +21 -0
  238. package/src/__tests__/fixtures/refs/openapi-with-external-refs.yaml +33 -0
  239. package/src/__tests__/fixtures/refs/openapi-with-url-refs.yaml +18 -0
  240. package/src/__tests__/fixtures/refs/param-b.yaml +1 -0
  241. package/src/__tests__/fixtures/refs/param-c.yaml +1 -0
  242. package/src/__tests__/fixtures/refs/rename.yaml +1 -0
  243. package/src/__tests__/fixtures/refs/requestBody.yaml +9 -0
  244. package/src/__tests__/fixtures/refs/schema-a.yaml +1 -0
  245. package/src/__tests__/fixtures/refs/simple.yaml +1 -0
  246. package/src/__tests__/fixtures/refs/vendor.schema.yaml +20 -0
  247. package/src/__tests__/fixtures/resolve/External.yaml +10 -0
  248. package/src/__tests__/fixtures/resolve/External2.yaml +4 -0
  249. package/src/__tests__/fixtures/resolve/description.md +3 -0
  250. package/src/__tests__/fixtures/resolve/externalInfo.yaml +4 -0
  251. package/src/__tests__/fixtures/resolve/externalLicense.yaml +1 -0
  252. package/src/__tests__/fixtures/resolve/openapi-with-back.yaml +13 -0
  253. package/src/__tests__/fixtures/resolve/openapi-with-md-description.yaml +5 -0
  254. package/src/__tests__/fixtures/resolve/openapi.yaml +28 -0
  255. package/src/__tests__/fixtures/resolve/schemas/type-a.yaml +10 -0
  256. package/src/__tests__/fixtures/resolve/schemas/type-b.yaml +6 -0
  257. package/src/__tests__/fixtures/resolve/transitive/a.yaml +1 -0
  258. package/src/__tests__/fixtures/resolve/transitive/components.yaml +5 -0
  259. package/src/__tests__/fixtures/resolve/transitive/schemas.yaml +3 -0
  260. package/src/__tests__/js-yaml.test.ts +71 -0
  261. package/src/__tests__/lint.test.ts +232 -0
  262. package/src/__tests__/login.test.ts +17 -0
  263. package/src/__tests__/normalizeVisitors.test.ts +151 -0
  264. package/src/__tests__/ref-utils.test.ts +120 -0
  265. package/src/__tests__/resolve-http.test.ts +77 -0
  266. package/src/__tests__/resolve.test.ts +405 -0
  267. package/src/__tests__/utils.test.ts +85 -0
  268. package/src/__tests__/walk.test.ts +1485 -0
  269. package/src/benchmark/benches/lint-with-many-rules.bench.ts +35 -0
  270. package/src/benchmark/benches/lint-with-nested-rule.bench.ts +39 -0
  271. package/src/benchmark/benches/lint-with-no-rules.bench.ts +20 -0
  272. package/src/benchmark/benches/lint-with-top-level-rule-report.bench.ts +36 -0
  273. package/src/benchmark/benches/lint-with-top-level-rule.bench.ts +32 -0
  274. package/src/benchmark/benches/rebilly.yaml +32267 -0
  275. package/src/benchmark/benches/recommended-oas3.bench.ts +22 -0
  276. package/src/benchmark/benches/resolve-with-no-external.bench.ts +23 -0
  277. package/src/benchmark/benchmark.js +307 -0
  278. package/src/benchmark/colors.js +29 -0
  279. package/src/benchmark/fork.js +83 -0
  280. package/src/benchmark/utils.ts +36 -0
  281. package/src/bundle.ts +386 -0
  282. package/src/config/__tests__/__snapshots__/config-resolvers.test.ts.snap +157 -0
  283. package/src/config/__tests__/config-resolvers.test.ts +429 -0
  284. package/src/config/__tests__/config.test.ts +244 -0
  285. package/src/config/__tests__/fixtures/plugin-config.yaml +3 -0
  286. package/src/config/__tests__/fixtures/plugin.js +56 -0
  287. package/src/config/__tests__/fixtures/resolve-config/api/nested-config.yaml +12 -0
  288. package/src/config/__tests__/fixtures/resolve-config/api/plugin.js +67 -0
  289. package/src/config/__tests__/fixtures/resolve-config/local-config-with-circular.yaml +8 -0
  290. package/src/config/__tests__/fixtures/resolve-config/local-config-with-file.yaml +19 -0
  291. package/src/config/__tests__/fixtures/resolve-config/local-config.yaml +10 -0
  292. package/src/config/__tests__/fixtures/resolve-config/plugin.js +66 -0
  293. package/src/config/__tests__/fixtures/resolve-remote-configs/nested-remote-config.yaml +4 -0
  294. package/src/config/__tests__/fixtures/resolve-remote-configs/remote-config.yaml +5 -0
  295. package/src/config/__tests__/load.test.ts +83 -0
  296. package/src/config/__tests__/resolve-plugins.test.ts +27 -0
  297. package/src/config/all.ts +66 -0
  298. package/src/config/builtIn.ts +37 -0
  299. package/src/config/config-resolvers.ts +359 -0
  300. package/src/config/config.ts +312 -0
  301. package/src/config/index.ts +7 -0
  302. package/src/config/load.ts +84 -0
  303. package/src/config/minimal.ts +58 -0
  304. package/src/config/recommended.ts +58 -0
  305. package/src/config/rules.ts +46 -0
  306. package/src/config/types.ts +168 -0
  307. package/src/config/utils.ts +208 -0
  308. package/src/decorators/__tests__/remove-x-internal.test.ts +316 -0
  309. package/src/decorators/common/info-description-override.ts +24 -0
  310. package/src/decorators/common/operation-description-override.ts +30 -0
  311. package/src/decorators/common/registry-dependencies.ts +25 -0
  312. package/src/decorators/common/remove-x-internal.ts +59 -0
  313. package/src/decorators/common/tag-description-override.ts +25 -0
  314. package/src/decorators/oas2/index.ts +14 -0
  315. package/src/decorators/oas3/index.ts +14 -0
  316. package/src/format/codeframes.ts +210 -0
  317. package/src/format/format.ts +339 -0
  318. package/src/index.ts +68 -0
  319. package/src/js-yaml/index.ts +18 -0
  320. package/src/lint.ts +125 -0
  321. package/src/oas-types.ts +62 -0
  322. package/src/redocly/__tests__/redocly-client.test.ts +140 -0
  323. package/src/redocly/index.ts +182 -0
  324. package/src/redocly/redocly-client-types.ts +10 -0
  325. package/src/redocly/registry-api-types.ts +32 -0
  326. package/src/redocly/registry-api.ts +134 -0
  327. package/src/ref-utils.ts +80 -0
  328. package/src/resolve.ts +378 -0
  329. package/src/rules/__tests__/fixtures/invalid-yaml.yaml +1 -0
  330. package/src/rules/__tests__/fixtures/ref.yaml +1 -0
  331. package/src/rules/__tests__/no-unresolved-refs.test.ts +168 -0
  332. package/src/rules/ajv.ts +103 -0
  333. package/src/rules/common/__tests__/info-description.test.ts +102 -0
  334. package/src/rules/common/__tests__/info-license.test.ts +62 -0
  335. package/src/rules/common/__tests__/license-url.test.ts +63 -0
  336. package/src/rules/common/__tests__/no-ambiguous-paths.test.ts +96 -0
  337. package/src/rules/common/__tests__/no-enum-type-mismatch.test.ts +209 -0
  338. package/src/rules/common/__tests__/no-identical-paths.test.ts +58 -0
  339. package/src/rules/common/__tests__/no-path-trailing-slash.test.ts +85 -0
  340. package/src/rules/common/__tests__/operation-2xx-response.test.ts +91 -0
  341. package/src/rules/common/__tests__/operation-4xx-response.test.ts +107 -0
  342. package/src/rules/common/__tests__/operation-operationId-unique.test.ts +76 -0
  343. package/src/rules/common/__tests__/operation-operationId-url-safe.test.ts +45 -0
  344. package/src/rules/common/__tests__/operation-parameters-unique.test.ts +167 -0
  345. package/src/rules/common/__tests__/operation-security-defined.test.ts +69 -0
  346. package/src/rules/common/__tests__/operation-singular-tag.test.ts +72 -0
  347. package/src/rules/common/__tests__/path-http-verbs-order.test.ts +95 -0
  348. package/src/rules/common/__tests__/path-not-include-query.test.ts +64 -0
  349. package/src/rules/common/__tests__/path-params-defined.test.ts +133 -0
  350. package/src/rules/common/__tests__/paths-kebab-case.test.ts +108 -0
  351. package/src/rules/common/__tests__/scalar-property-missing-example.test.ts +264 -0
  352. package/src/rules/common/__tests__/spec.test.ts +62 -0
  353. package/src/rules/common/__tests__/tag-description.test.ts +65 -0
  354. package/src/rules/common/__tests__/tags-alphabetical.test.ts +64 -0
  355. package/src/rules/common/assertions/__tests__/asserts.test.ts +231 -0
  356. package/src/rules/common/assertions/__tests__/index.test.ts +65 -0
  357. package/src/rules/common/assertions/__tests__/utils.test.ts +89 -0
  358. package/src/rules/common/assertions/asserts.ts +137 -0
  359. package/src/rules/common/assertions/index.ts +75 -0
  360. package/src/rules/common/assertions/utils.ts +167 -0
  361. package/src/rules/common/info-contact.ts +15 -0
  362. package/src/rules/common/info-description.ts +10 -0
  363. package/src/rules/common/info-license-url.ts +15 -0
  364. package/src/rules/common/license-url.ts +10 -0
  365. package/src/rules/common/no-ambiguous-paths.ts +50 -0
  366. package/src/rules/common/no-enum-type-mismatch.ts +49 -0
  367. package/src/rules/common/no-http-verbs-in-paths.ts +36 -0
  368. package/src/rules/common/no-identical-paths.ts +24 -0
  369. package/src/rules/common/no-invalid-parameter-examples.ts +36 -0
  370. package/src/rules/common/no-invalid-schema-examples.ts +27 -0
  371. package/src/rules/common/no-path-trailing-slash.ts +15 -0
  372. package/src/rules/common/operation-2xx-response.ts +16 -0
  373. package/src/rules/common/operation-4xx-response.ts +17 -0
  374. package/src/rules/common/operation-description.ts +13 -0
  375. package/src/rules/common/operation-operationId-unique.ts +21 -0
  376. package/src/rules/common/operation-operationId-url-safe.ts +19 -0
  377. package/src/rules/common/operation-operationId.ts +17 -0
  378. package/src/rules/common/operation-parameters-unique.ts +48 -0
  379. package/src/rules/common/operation-security-defined.ts +45 -0
  380. package/src/rules/common/operation-singular-tag.ts +17 -0
  381. package/src/rules/common/operation-summary.ts +13 -0
  382. package/src/rules/common/operation-tag-defined.ts +26 -0
  383. package/src/rules/common/parameter-description.ts +22 -0
  384. package/src/rules/common/path-declaration-must-exist.ts +15 -0
  385. package/src/rules/common/path-excludes-patterns.ts +23 -0
  386. package/src/rules/common/path-http-verbs-order.ts +30 -0
  387. package/src/rules/common/path-not-include-query.ts +17 -0
  388. package/src/rules/common/path-params-defined.ts +58 -0
  389. package/src/rules/common/path-segment-plural.ts +31 -0
  390. package/src/rules/common/paths-kebab-case.ts +16 -0
  391. package/src/rules/common/response-contains-header.ts +30 -0
  392. package/src/rules/common/scalar-property-missing-example.ts +58 -0
  393. package/src/rules/common/spec.ts +143 -0
  394. package/src/rules/common/tag-description.ts +10 -0
  395. package/src/rules/common/tags-alphabetical.ts +20 -0
  396. package/src/rules/no-unresolved-refs.ts +51 -0
  397. package/src/rules/oas2/__tests__/boolean-parameter-prefixes.test.ts +110 -0
  398. package/src/rules/oas2/__tests__/response-contains-header.test.ts +174 -0
  399. package/src/rules/oas2/__tests__/response-contains-property.test.ts +155 -0
  400. package/src/rules/oas2/__tests__/spec/fixtures/description.md +1 -0
  401. package/src/rules/oas2/__tests__/spec/info.test.ts +355 -0
  402. package/src/rules/oas2/__tests__/spec/operation.test.ts +123 -0
  403. package/src/rules/oas2/__tests__/spec/paths.test.ts +245 -0
  404. package/src/rules/oas2/__tests__/spec/referenceableScalars.test.ts +31 -0
  405. package/src/rules/oas2/__tests__/spec/utils.ts +32 -0
  406. package/src/rules/oas2/boolean-parameter-prefixes.ts +26 -0
  407. package/src/rules/oas2/index.ts +89 -0
  408. package/src/rules/oas2/remove-unused-components.ts +76 -0
  409. package/src/rules/oas2/request-mime-type.ts +17 -0
  410. package/src/rules/oas2/response-contains-property.ts +36 -0
  411. package/src/rules/oas2/response-mime-type.ts +17 -0
  412. package/src/rules/oas3/__tests__/boolean-parameter-prefixes.test.ts +111 -0
  413. package/src/rules/oas3/__tests__/fixtures/common.yaml +11 -0
  414. package/src/rules/oas3/__tests__/no-empty-enum-servers.com.test.ts +205 -0
  415. package/src/rules/oas3/__tests__/no-example-value-and-externalValue.test.ts +65 -0
  416. package/src/rules/oas3/__tests__/no-invalid-media-type-examples.test.ts +392 -0
  417. package/src/rules/oas3/__tests__/no-server-example.com.test.ts +60 -0
  418. package/src/rules/oas3/__tests__/no-server-trailing-slash.test.ts +79 -0
  419. package/src/rules/oas3/__tests__/no-unused-components.test.ts +131 -0
  420. package/src/rules/oas3/__tests__/response-contains-header.test.ts +273 -0
  421. package/src/rules/oas3/__tests__/response-contains-property.test.ts +403 -0
  422. package/src/rules/oas3/__tests__/spec/callbacks.test.ts +41 -0
  423. package/src/rules/oas3/__tests__/spec/fixtures/description.md +1 -0
  424. package/src/rules/oas3/__tests__/spec/info.test.ts +391 -0
  425. package/src/rules/oas3/__tests__/spec/operation.test.ts +253 -0
  426. package/src/rules/oas3/__tests__/spec/paths.test.ts +284 -0
  427. package/src/rules/oas3/__tests__/spec/referenceableScalars.test.ts +77 -0
  428. package/src/rules/oas3/__tests__/spec/servers.test.ts +499 -0
  429. package/src/rules/oas3/__tests__/spec/spec.test.ts +288 -0
  430. package/src/rules/oas3/__tests__/spec/utils.ts +32 -0
  431. package/src/rules/oas3/boolean-parameter-prefixes.ts +28 -0
  432. package/src/rules/oas3/index.ts +105 -0
  433. package/src/rules/oas3/no-empty-servers.ts +22 -0
  434. package/src/rules/oas3/no-example-value-and-externalValue.ts +14 -0
  435. package/src/rules/oas3/no-invalid-media-type-examples.ts +41 -0
  436. package/src/rules/oas3/no-server-example.com.ts +14 -0
  437. package/src/rules/oas3/no-server-trailing-slash.ts +15 -0
  438. package/src/rules/oas3/no-servers-empty-enum.ts +67 -0
  439. package/src/rules/oas3/no-undefined-server-variable.ts +30 -0
  440. package/src/rules/oas3/no-unused-components.ts +75 -0
  441. package/src/rules/oas3/remove-unused-components.ts +84 -0
  442. package/src/rules/oas3/request-mime-type.ts +31 -0
  443. package/src/rules/oas3/response-contains-property.ts +38 -0
  444. package/src/rules/oas3/response-mime-type.ts +31 -0
  445. package/src/rules/other/stats.ts +44 -0
  446. package/src/rules/utils.ts +123 -0
  447. package/src/types/index.ts +138 -0
  448. package/src/types/oas2.ts +397 -0
  449. package/src/types/oas3.ts +510 -0
  450. package/src/types/oas3_1.ts +253 -0
  451. package/src/types/redocly-yaml.ts +647 -0
  452. package/src/typings/common.ts +9 -0
  453. package/src/typings/openapi.ts +298 -0
  454. package/src/typings/swagger.ts +236 -0
  455. package/src/utils.ts +193 -0
  456. package/src/visitors.ts +448 -0
  457. package/src/walk.ts +416 -0
  458. package/tsconfig.json +8 -0
  459. package/tsconfig.tsbuildinfo +1 -0
package/src/bundle.ts ADDED
@@ -0,0 +1,386 @@
1
+ import isEqual = require('lodash.isequal');
2
+ import { BaseResolver, resolveDocument, Document, ResolvedRefMap, makeRefId } from './resolve';
3
+ import { Oas3Rule, normalizeVisitors, Oas3Visitor, Oas2Visitor } from './visitors';
4
+ import { Oas3Types } from './types/oas3';
5
+ import { Oas2Types } from './types/oas2';
6
+ import { Oas3_1Types } from './types/oas3_1';
7
+ import { NormalizedNodeType, normalizeTypes, NodeType } from './types';
8
+ import { WalkContext, walkDocument, UserContext, ResolveResult } from './walk';
9
+ import { detectOpenAPI, openAPIMajor, OasMajorVersion } from './oas-types';
10
+ import {isAbsoluteUrl, isRef, Location, refBaseName} from './ref-utils';
11
+ import { initRules } from './config/rules';
12
+ import { reportUnresolvedRef } from './rules/no-unresolved-refs';
13
+ import { isPlainObject } from './utils';
14
+ import { OasRef } from './typings/openapi';
15
+ import { isRedoclyRegistryURL } from './redocly';
16
+ import { RemoveUnusedComponents as RemoveUnusedComponentsOas2 } from './rules/oas2/remove-unused-components';
17
+ import { RemoveUnusedComponents as RemoveUnusedComponentsOas3 } from './rules/oas3/remove-unused-components';
18
+
19
+ import type { Config, LintConfig } from './config';
20
+
21
+ export type Oas3RuleSet = Record<string, Oas3Rule>;
22
+
23
+ export enum OasVersion {
24
+ Version2 = 'oas2',
25
+ Version3_0 = 'oas3_0',
26
+ Version3_1 = 'oas3_1',
27
+ }
28
+
29
+ export async function bundle(opts: {
30
+ ref?: string;
31
+ doc?: Document;
32
+ externalRefResolver?: BaseResolver;
33
+ config: Config;
34
+ dereference?: boolean;
35
+ base?: string;
36
+ skipRedoclyRegistryRefs?: boolean;
37
+ removeUnusedComponents?: boolean;
38
+ keepUrlRefs?: boolean;
39
+ }) {
40
+ const {
41
+ ref,
42
+ doc,
43
+ externalRefResolver = new BaseResolver(opts.config.resolve),
44
+ base = null,
45
+ } = opts;
46
+ if (!(ref || doc)) {
47
+ throw new Error('Document or reference is required.\n');
48
+ }
49
+
50
+ const document =
51
+ doc !== undefined ? doc : await externalRefResolver.resolveDocument(base, ref!, true);
52
+
53
+ if (document instanceof Error) {
54
+ throw document;
55
+ }
56
+
57
+ return bundleDocument({
58
+ document,
59
+ ...opts,
60
+ config: opts.config.lint,
61
+ externalRefResolver,
62
+ });
63
+ }
64
+
65
+ type BundleContext = WalkContext;
66
+
67
+ export async function bundleDocument(opts: {
68
+ document: Document;
69
+ config: LintConfig;
70
+ customTypes?: Record<string, NodeType>;
71
+ externalRefResolver: BaseResolver;
72
+ dereference?: boolean;
73
+ skipRedoclyRegistryRefs?: boolean;
74
+ removeUnusedComponents?: boolean;
75
+ keepUrlRefs?: boolean;
76
+ }) {
77
+ const {
78
+ document,
79
+ config,
80
+ customTypes,
81
+ externalRefResolver,
82
+ dereference = false,
83
+ skipRedoclyRegistryRefs = false,
84
+ removeUnusedComponents = false,
85
+ keepUrlRefs = false,
86
+ } = opts;
87
+ const oasVersion = detectOpenAPI(document.parsed);
88
+ const oasMajorVersion = openAPIMajor(oasVersion);
89
+ const rules = config.getRulesForOasVersion(oasMajorVersion);
90
+ const types = normalizeTypes(
91
+ config.extendTypes(
92
+ customTypes ?? oasMajorVersion === OasMajorVersion.Version3
93
+ ? oasVersion === OasVersion.Version3_1
94
+ ? Oas3_1Types
95
+ : Oas3Types
96
+ : Oas2Types,
97
+ oasVersion,
98
+ ),
99
+ config,
100
+ );
101
+
102
+ const preprocessors = initRules(rules as any, config, 'preprocessors', oasVersion);
103
+ const decorators = initRules(rules as any, config, 'decorators', oasVersion);
104
+
105
+ const ctx: BundleContext = {
106
+ problems: [],
107
+ oasVersion: oasVersion,
108
+ refTypes: new Map<string, NormalizedNodeType>(),
109
+ visitorsData: {},
110
+ };
111
+
112
+ if (removeUnusedComponents) {
113
+ decorators.push({
114
+ severity: 'error',
115
+ ruleId: 'remove-unused-components',
116
+ visitor: oasMajorVersion === OasMajorVersion.Version2
117
+ ? RemoveUnusedComponentsOas2({})
118
+ : RemoveUnusedComponentsOas3({})
119
+ })
120
+ }
121
+
122
+ const resolvedRefMap = await resolveDocument({
123
+ rootDocument: document,
124
+ rootType: types.DefinitionRoot,
125
+ externalRefResolver,
126
+ });
127
+
128
+ const bundleVisitor = normalizeVisitors(
129
+ [
130
+ ...preprocessors,
131
+ {
132
+ severity: 'error',
133
+ ruleId: 'bundler',
134
+ visitor: makeBundleVisitor(
135
+ oasMajorVersion,
136
+ dereference,
137
+ skipRedoclyRegistryRefs,
138
+ document,
139
+ resolvedRefMap,
140
+ keepUrlRefs,
141
+ ),
142
+ },
143
+ ...decorators,
144
+ ] as any,
145
+ types,
146
+ );
147
+
148
+ walkDocument({
149
+ document,
150
+ rootType: types.DefinitionRoot as NormalizedNodeType,
151
+ normalizedVisitors: bundleVisitor,
152
+ resolvedRefMap,
153
+ ctx,
154
+ });
155
+
156
+ return {
157
+ bundle: document,
158
+ problems: ctx.problems.map((problem) => config.addProblemToIgnore(problem)),
159
+ fileDependencies: externalRefResolver.getFiles(),
160
+ rootType: types.DefinitionRoot,
161
+ refTypes: ctx.refTypes,
162
+ visitorsData: ctx.visitorsData,
163
+ };
164
+ }
165
+
166
+ export function mapTypeToComponent(typeName: string, version: OasMajorVersion) {
167
+ switch (version) {
168
+ case OasMajorVersion.Version3:
169
+ switch (typeName) {
170
+ case 'Schema':
171
+ return 'schemas';
172
+ case 'Parameter':
173
+ return 'parameters';
174
+ case 'Response':
175
+ return 'responses';
176
+ case 'Example':
177
+ return 'examples';
178
+ case 'RequestBody':
179
+ return 'requestBodies';
180
+ case 'Header':
181
+ return 'headers';
182
+ case 'SecuritySchema':
183
+ return 'securitySchemes';
184
+ case 'Link':
185
+ return 'links';
186
+ case 'Callback':
187
+ return 'callbacks';
188
+ default:
189
+ return null;
190
+ }
191
+ case OasMajorVersion.Version2:
192
+ switch (typeName) {
193
+ case 'Schema':
194
+ return 'definitions';
195
+ case 'Parameter':
196
+ return 'parameters';
197
+ case 'Response':
198
+ return 'responses';
199
+ default:
200
+ return null;
201
+ }
202
+ }
203
+ }
204
+
205
+ // function oas3Move
206
+
207
+ function makeBundleVisitor(
208
+ version: OasMajorVersion,
209
+ dereference: boolean,
210
+ skipRedoclyRegistryRefs: boolean,
211
+ rootDocument: Document,
212
+ resolvedRefMap: ResolvedRefMap,
213
+ keepUrlRefs: boolean,
214
+ ) {
215
+ let components: Record<string, Record<string, any>>;
216
+
217
+ const visitor: Oas3Visitor | Oas2Visitor = {
218
+ ref: {
219
+ leave(node, ctx, resolved) {
220
+ if (!resolved.location || resolved.node === undefined) {
221
+ reportUnresolvedRef(resolved, ctx.report, ctx.location);
222
+ return;
223
+ }
224
+ if (
225
+ resolved.location.source === rootDocument.source &&
226
+ resolved.location.source === ctx.location.source &&
227
+ ctx.type.name !== 'scalar' &&
228
+ !dereference
229
+ ) {
230
+ return;
231
+ }
232
+
233
+ // do not bundle registry URL before push, otherwise we can't record dependencies
234
+ if (skipRedoclyRegistryRefs && isRedoclyRegistryURL(node.$ref)) {
235
+ return;
236
+ }
237
+
238
+ if (keepUrlRefs && isAbsoluteUrl(node.$ref)) {
239
+ return;
240
+ }
241
+
242
+ const componentType = mapTypeToComponent(ctx.type.name, version);
243
+ if (!componentType) {
244
+ replaceRef(node, resolved, ctx);
245
+ } else {
246
+ if (dereference) {
247
+ saveComponent(componentType, resolved, ctx);
248
+ replaceRef(node, resolved, ctx);
249
+ } else {
250
+ node.$ref = saveComponent(componentType, resolved, ctx);
251
+ resolveBundledComponent(node, resolved, ctx);
252
+ }
253
+ }
254
+ },
255
+ },
256
+ DefinitionRoot: {
257
+ enter(root: any) {
258
+ if (version === OasMajorVersion.Version3) {
259
+ components = root.components = root.components || {};
260
+ } else if (version === OasMajorVersion.Version2) {
261
+ components = root;
262
+ }
263
+ },
264
+ },
265
+ };
266
+
267
+ if (version === OasMajorVersion.Version3) {
268
+ visitor.DiscriminatorMapping = {
269
+ leave(mapping: Record<string, string>, ctx: any) {
270
+ for (const name of Object.keys(mapping)) {
271
+ const $ref = mapping[name];
272
+ const resolved = ctx.resolve({ $ref });
273
+ if (!resolved.location || resolved.node === undefined) {
274
+ reportUnresolvedRef(resolved, ctx.report, ctx.location.child(name));
275
+ return;
276
+ }
277
+
278
+ const componentType = mapTypeToComponent('Schema', version)!;
279
+ if (dereference) {
280
+ saveComponent(componentType, resolved, ctx);
281
+ } else {
282
+ mapping[name] = saveComponent(componentType, resolved, ctx);
283
+ }
284
+ }
285
+ },
286
+ };
287
+ }
288
+
289
+ function resolveBundledComponent(node: OasRef, resolved: ResolveResult<any>, ctx: UserContext) {
290
+ const newRefId = makeRefId(ctx.location.source.absoluteRef, node.$ref)
291
+ resolvedRefMap.set(newRefId, {
292
+ document: rootDocument,
293
+ isRemote: false,
294
+ node: resolved.node,
295
+ nodePointer: node.$ref,
296
+ resolved: true,
297
+ });
298
+ }
299
+
300
+ function replaceRef(ref: OasRef, resolved: ResolveResult<any>, ctx: UserContext) {
301
+ if (!isPlainObject(resolved.node)) {
302
+ ctx.parent[ctx.key] = resolved.node;
303
+ } else {
304
+ // @ts-ignore
305
+ delete ref.$ref;
306
+ Object.assign(ref, resolved.node);
307
+ }
308
+ }
309
+
310
+ function saveComponent(
311
+ componentType: string,
312
+ target: { node: any; location: Location },
313
+ ctx: UserContext,
314
+ ) {
315
+ components[componentType] = components[componentType] || {};
316
+ const name = getComponentName(target, componentType, ctx);
317
+ components[componentType][name] = target.node;
318
+ if (version === OasMajorVersion.Version3) {
319
+ return `#/components/${componentType}/${name}`;
320
+ } else {
321
+ return `#/${componentType}/${name}`;
322
+ }
323
+ }
324
+
325
+ function isEqualOrEqualRef(
326
+ node: any,
327
+ target: { node: any; location: Location },
328
+ ctx: UserContext,
329
+ ) {
330
+ if (
331
+ isRef(node) &&
332
+ ctx.resolve(node).location?.absolutePointer === target.location.absolutePointer
333
+ ) {
334
+ return true;
335
+ }
336
+
337
+ return isEqual(node, target.node);
338
+ }
339
+
340
+ function getComponentName(
341
+ target: { node: any; location: Location },
342
+ componentType: string,
343
+ ctx: UserContext,
344
+ ) {
345
+ const [fileRef, pointer] = [target.location.source.absoluteRef, target.location.pointer];
346
+ const componentsGroup = components[componentType];
347
+
348
+ let name = '';
349
+
350
+ const refParts = pointer.slice(2).split('/').filter(Boolean); // slice(2) removes "#/"
351
+ while (refParts.length > 0) {
352
+ name = refParts.pop() + (name ? `-${name}` : '');
353
+ if (
354
+ !componentsGroup ||
355
+ !componentsGroup[name] ||
356
+ isEqualOrEqualRef(componentsGroup[name], target, ctx)
357
+ ) {
358
+ return name;
359
+ }
360
+ }
361
+
362
+ name = refBaseName(fileRef) + (name ? `_${name}` : '');
363
+ if (!componentsGroup[name] || isEqualOrEqualRef(componentsGroup[name], target, ctx)) {
364
+ return name;
365
+ }
366
+
367
+ const prevName = name;
368
+ let serialId = 2;
369
+ while (componentsGroup[name] && !isEqualOrEqualRef(componentsGroup[name], target, ctx)) {
370
+ name = `${prevName}-${serialId}`;
371
+ serialId++;
372
+ }
373
+
374
+ if (!componentsGroup[name]) {
375
+ ctx.report({
376
+ message: `Two schemas are referenced with the same name but different content. Renamed ${prevName} to ${name}.`,
377
+ location: ctx.location,
378
+ forceSeverity: 'warn',
379
+ });
380
+ }
381
+
382
+ return name;
383
+ }
384
+
385
+ return visitor;
386
+ }
@@ -0,0 +1,157 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`resolveConfig should ignore minimal from the root and read local file 1`] = `
4
+ Object {
5
+ "decorators": Object {},
6
+ "doNotResolveExamples": undefined,
7
+ "oas2Decorators": Object {},
8
+ "oas2Preprocessors": Object {},
9
+ "oas2Rules": Object {},
10
+ "oas3_0Decorators": Object {},
11
+ "oas3_0Preprocessors": Object {},
12
+ "oas3_0Rules": Object {
13
+ "no-empty-servers": "error",
14
+ "no-example-value-and-externalValue": "error",
15
+ "no-invalid-media-type-examples": "error",
16
+ "no-server-example.com": "warn",
17
+ "no-server-trailing-slash": "error",
18
+ "no-servers-empty-enum": "error",
19
+ "no-undefined-server-variable": "error",
20
+ "no-unused-components": "warn",
21
+ },
22
+ "oas3_1Decorators": Object {},
23
+ "oas3_1Preprocessors": Object {},
24
+ "oas3_1Rules": Object {
25
+ "no-empty-servers": "error",
26
+ "no-example-value-and-externalValue": "error",
27
+ "no-server-example.com": "warn",
28
+ "no-server-trailing-slash": "error",
29
+ "no-servers-empty-enum": "error",
30
+ "no-undefined-server-variable": "error",
31
+ "no-unused-components": "warn",
32
+ },
33
+ "preprocessors": Object {},
34
+ "recommendedFallback": false,
35
+ "rules": Object {
36
+ "assertions": "warn",
37
+ "boolean-parameter-prefixes": "error",
38
+ "info-contact": "off",
39
+ "info-description": "warn",
40
+ "info-license": "warn",
41
+ "info-license-url": "warn",
42
+ "local/operation-id-not-test": "error",
43
+ "no-ambiguous-paths": "warn",
44
+ "no-enum-type-mismatch": "error",
45
+ "no-identical-paths": "error",
46
+ "no-invalid-media-type-examples": "error",
47
+ "no-path-trailing-slash": "error",
48
+ "no-unresolved-refs": "error",
49
+ "operation-2xx-response": "warn",
50
+ "operation-4xx-response": "error",
51
+ "operation-description": "error",
52
+ "operation-operationId": "warn",
53
+ "operation-operationId-unique": "error",
54
+ "operation-operationId-url-safe": "error",
55
+ "operation-parameters-unique": "error",
56
+ "operation-security-defined": "error",
57
+ "operation-singular-tag": "off",
58
+ "operation-summary": "error",
59
+ "operation-tag-defined": "off",
60
+ "parameter-description": "off",
61
+ "path-declaration-must-exist": "error",
62
+ "path-http-verbs-order": "error",
63
+ "path-not-include-query": "error",
64
+ "path-parameters-defined": "error",
65
+ "paths-kebab-case": "off",
66
+ "spec": "error",
67
+ "tag-description": "warn",
68
+ "tags-alphabetical": "off",
69
+ },
70
+ }
71
+ `;
72
+
73
+ exports[`resolveLint should resolve extends with local file config witch contains path to nested config 1`] = `
74
+ Object {
75
+ "decorators": Object {},
76
+ "doNotResolveExamples": undefined,
77
+ "oas2Decorators": Object {},
78
+ "oas2Preprocessors": Object {},
79
+ "oas2Rules": Object {},
80
+ "oas3_0Decorators": Object {},
81
+ "oas3_0Preprocessors": Object {},
82
+ "oas3_0Rules": Object {
83
+ "no-empty-servers": "error",
84
+ "no-example-value-and-externalValue": "error",
85
+ "no-invalid-media-type-examples": "warn",
86
+ "no-server-example.com": "warn",
87
+ "no-server-trailing-slash": "error",
88
+ "no-servers-empty-enum": "error",
89
+ "no-undefined-server-variable": "error",
90
+ "no-unused-components": "warn",
91
+ },
92
+ "oas3_1Decorators": Object {},
93
+ "oas3_1Preprocessors": Object {},
94
+ "oas3_1Rules": Object {
95
+ "no-empty-servers": "error",
96
+ "no-example-value-and-externalValue": "error",
97
+ "no-server-example.com": "warn",
98
+ "no-server-trailing-slash": "error",
99
+ "no-servers-empty-enum": "error",
100
+ "no-undefined-server-variable": "error",
101
+ "no-unused-components": "warn",
102
+ },
103
+ "preprocessors": Object {},
104
+ "recommendedFallback": undefined,
105
+ "rules": Object {
106
+ "assertions": Array [
107
+ Object {
108
+ "assertionId": "path-item-get-defined",
109
+ "defined": true,
110
+ "message": "Every path item must have a GET operation.",
111
+ "property": "get",
112
+ "subject": "PathItem",
113
+ },
114
+ Object {
115
+ "assertionId": "tag-description",
116
+ "message": "Tag description must be at least 13 characters and end with a full stop.",
117
+ "minLength": 13,
118
+ "pattern": "/\\\\.$/",
119
+ "property": "description",
120
+ "severity": "error",
121
+ "subject": "Tag",
122
+ },
123
+ ],
124
+ "boolean-parameter-prefixes": "error",
125
+ "info-contact": "off",
126
+ "info-description": "warn",
127
+ "info-license": "warn",
128
+ "info-license-url": "warn",
129
+ "local/operation-id-not-test": "error",
130
+ "no-ambiguous-paths": "warn",
131
+ "no-enum-type-mismatch": "error",
132
+ "no-identical-paths": "error",
133
+ "no-invalid-media-type-examples": "warn",
134
+ "no-path-trailing-slash": "error",
135
+ "no-unresolved-refs": "error",
136
+ "operation-2xx-response": "error",
137
+ "operation-4xx-response": "off",
138
+ "operation-description": "off",
139
+ "operation-operationId": "warn",
140
+ "operation-operationId-unique": "error",
141
+ "operation-operationId-url-safe": "error",
142
+ "operation-parameters-unique": "error",
143
+ "operation-security-defined": "error",
144
+ "operation-singular-tag": "off",
145
+ "operation-summary": "error",
146
+ "operation-tag-defined": "off",
147
+ "parameter-description": "off",
148
+ "path-declaration-must-exist": "error",
149
+ "path-not-include-query": "error",
150
+ "path-parameters-defined": "error",
151
+ "paths-kebab-case": "off",
152
+ "spec": "error",
153
+ "tag-description": "warn",
154
+ "tags-alphabetical": "off",
155
+ },
156
+ }
157
+ `;