@redocly/openapi-core 1.0.0-beta.99 → 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 (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,298 +0,0 @@
1
- export interface Oas3Definition {
2
- openapi: string;
3
- info?: Oas3Info;
4
- servers?: Oas3Server[];
5
- paths?: Oas3Paths;
6
- components?: Oas3Components;
7
- security?: Oas3SecurityRequirement[];
8
- tags?: Oas3Tag[];
9
- externalDocs?: Oas3ExternalDocs;
10
- 'x-webhooks'?: Oas3_1Webhooks;
11
- }
12
-
13
- export interface Oas3Info {
14
- title: string;
15
- version: string;
16
-
17
- description?: string;
18
- termsOfService?: string;
19
- contact?: Oas3Contact;
20
- license?: Oas3License;
21
- }
22
-
23
- export interface Oas3Server {
24
- url: string;
25
- description?: string;
26
- variables?: { [name: string]: Oas3ServerVariable };
27
- }
28
-
29
- export interface Oas3ServerVariable {
30
- enum?: string[];
31
- default: string;
32
- description?: string;
33
- }
34
-
35
- export interface Oas3Paths {
36
- [path: string]: Referenced<Oas3PathItem>;
37
- }
38
- export interface OasRef {
39
- $ref: string;
40
- }
41
-
42
- export type Referenced<T> = OasRef | T;
43
-
44
- export interface Oas3PathItem {
45
- summary?: string;
46
- description?: string;
47
- get?: Oas3Operation;
48
- put?: Oas3Operation;
49
- post?: Oas3Operation;
50
- delete?: Oas3Operation;
51
- options?: Oas3Operation;
52
- head?: Oas3Operation;
53
- patch?: Oas3Operation;
54
- trace?: Oas3Operation;
55
- servers?: Oas3Server[];
56
- parameters?: Array<Referenced<Oas3Parameter>>;
57
- }
58
-
59
- export interface Oas3XCodeSample {
60
- lang: string;
61
- label?: string;
62
- source: string;
63
- }
64
-
65
- export interface Oas3Operation {
66
- tags?: string[];
67
- summary?: string;
68
- description?: string;
69
- externalDocs?: Oas3ExternalDocs;
70
- operationId?: string;
71
- parameters?: Array<Referenced<Oas3Parameter>>;
72
- requestBody?: Referenced<Oas3RequestBody>;
73
- responses: Oas3Responses;
74
- callbacks?: { [name: string]: Referenced<Oas3Callback> };
75
- deprecated?: boolean;
76
- security?: Oas3SecurityRequirement[];
77
- servers?: Oas3Server[];
78
- 'x-codeSamples'?: Oas3XCodeSample[];
79
- 'x-code-samples'?: Oas3XCodeSample[]; // deprecated
80
- 'x-hideTryItPanel'?: boolean;
81
- }
82
-
83
- export interface Oas3Parameter {
84
- name: string;
85
- in?: Oas3ParameterLocation;
86
- description?: string;
87
- required?: boolean;
88
- deprecated?: boolean;
89
- allowEmptyValue?: boolean;
90
- style?: Oas3ParameterStyle;
91
- explode?: boolean;
92
- allowReserved?: boolean;
93
- schema?: Referenced<Oas3Schema>;
94
- example?: any;
95
- examples?: { [media: string]: Referenced<Oas3Example> };
96
- content?: { [media: string]: Oas3MediaType };
97
- }
98
-
99
- export interface Oas3Example {
100
- value: any;
101
- summary?: string;
102
- description?: string;
103
- externalValue?: string;
104
- }
105
-
106
- export interface Oas3Xml {
107
- name?: string;
108
- namespace?: string;
109
- prefix?: string;
110
- attribute?: string;
111
- wrapped?: string;
112
- }
113
-
114
- export interface Oas3Schema {
115
- $ref?: string;
116
- type?: string;
117
- properties?: { [name: string]: Oas3Schema };
118
- additionalProperties?: boolean | Oas3Schema;
119
- description?: string;
120
- default?: any;
121
- items?: Oas3Schema;
122
- required?: string[];
123
- readOnly?: boolean;
124
- writeOnly?: boolean;
125
- deprecated?: boolean;
126
- format?: string;
127
- externalDocs?: Oas3ExternalDocs;
128
- discriminator?: Oas3Discriminator;
129
- nullable?: boolean;
130
- oneOf?: Oas3Schema[];
131
- anyOf?: Oas3Schema[];
132
- allOf?: Oas3Schema[];
133
- not?: Oas3Schema;
134
-
135
- title?: string;
136
- multipleOf?: number;
137
- maximum?: number;
138
- exclusiveMaximum?: boolean;
139
- minimum?: number;
140
- exclusiveMinimum?: boolean;
141
- maxLength?: number;
142
- minLength?: number;
143
- pattern?: string;
144
- maxItems?: number;
145
- minItems?: number;
146
- uniqueItems?: boolean;
147
- maxProperties?: number;
148
- minProperties?: number;
149
- enum?: any[];
150
- example?: any;
151
-
152
- xml?: Oas3Xml;
153
- 'x-tags'?: string[];
154
- }
155
-
156
- export type Oas3_1Schema = Oas3Schema & {
157
- type?: string | string[];
158
- examples?: any[];
159
- }
160
-
161
- export interface Oas3_1Definition extends Oas3Definition {
162
- webhooks?: Oas3_1Webhooks;
163
- }
164
-
165
- export interface Oas3_1Webhooks {
166
- [webhook: string]: Referenced<Oas3PathItem>;
167
- }
168
-
169
- export interface Oas3Discriminator {
170
- propertyName: string;
171
- mapping?: { [name: string]: string };
172
- 'x-explicitMappingOnly'?: boolean;
173
- }
174
-
175
- export interface Oas3MediaType {
176
- schema?: Referenced<Oas3Schema>;
177
- example?: any;
178
- examples?: { [name: string]: Referenced<Oas3Example> };
179
- encoding?: { [field: string]: Oas3Encoding };
180
- }
181
-
182
- export interface Oas3Encoding {
183
- contentType: string;
184
- headers?: { [name: string]: Referenced<Oas3Header> };
185
- style: Oas3ParameterStyle;
186
- explode: boolean;
187
- allowReserved: boolean;
188
- }
189
-
190
- export type Oas3ParameterLocation = 'query' | 'header' | 'path' | 'cookie';
191
- export type Oas3ParameterStyle =
192
- | 'matrix'
193
- | 'label'
194
- | 'form'
195
- | 'simple'
196
- | 'spaceDelimited'
197
- | 'pipeDelimited'
198
- | 'deepObject';
199
-
200
- export interface Oas3RequestBody {
201
- description?: string;
202
- required?: boolean;
203
- content: { [mime: string]: Oas3MediaType };
204
- }
205
-
206
- export interface Oas3Responses {
207
- [code: string]: Oas3Response;
208
- }
209
-
210
- export interface Oas3Response {
211
- description?: string;
212
- headers?: { [name: string]: Referenced<Oas3Header> };
213
- content?: { [mime: string]: Oas3MediaType };
214
- links?: { [name: string]: Referenced<Oas3Link> };
215
- }
216
-
217
- export interface Oas3Link {
218
- $ref?: string;
219
- }
220
-
221
- export type Oas3Header = Omit<Oas3Parameter, 'in' | 'name'>;
222
-
223
- export interface Oas3Callback {
224
- [name: string]: Oas3PathItem;
225
- }
226
-
227
- export interface Oas3Components {
228
- schemas?: { [name: string]: Referenced<Oas3Schema> };
229
- responses?: { [name: string]: Referenced<Oas3Response> };
230
- parameters?: { [name: string]: Referenced<Oas3Parameter> };
231
- examples?: { [name: string]: Referenced<Oas3Example> };
232
- requestBodies?: { [name: string]: Referenced<Oas3RequestBody> };
233
- headers?: { [name: string]: Referenced<Oas3Header> };
234
- securitySchemes?: { [name: string]: Referenced<Oas3SecurityScheme> };
235
- links?: { [name: string]: Referenced<Oas3Link> };
236
- callbacks?: { [name: string]: Referenced<Oas3Callback> };
237
- }
238
-
239
- export type Oas3ComponentName = keyof Oas3Components;
240
-
241
- export interface Oas3SecurityRequirement {
242
- [name: string]: string[];
243
- }
244
-
245
- export interface Oas3SecurityScheme {
246
- type: 'apiKey' | 'http' | 'oauth2' | 'openIdConnect';
247
- description?: string;
248
- name?: string;
249
- in?: 'query' | 'header' | 'cookie';
250
- scheme?: string;
251
- bearerFormat: string;
252
- flows: {
253
- implicit?: {
254
- refreshUrl?: string;
255
- scopes: Record<string, string>;
256
- authorizationUrl: string;
257
- };
258
- password?: {
259
- refreshUrl?: string;
260
- scopes: Record<string, string>;
261
- tokenUrl: string;
262
- };
263
- clientCredentials?: {
264
- refreshUrl?: string;
265
- scopes: Record<string, string>;
266
- tokenUrl: string;
267
- };
268
- authorizationCode?: {
269
- refreshUrl?: string;
270
- scopes: Record<string, string>;
271
- tokenUrl: string;
272
- };
273
- };
274
- openIdConnectUrl?: string;
275
- }
276
-
277
- export interface Oas3Tag {
278
- name: string;
279
- description?: string;
280
- externalDocs?: Oas3ExternalDocs;
281
- 'x-displayName'?: string;
282
- }
283
-
284
- export interface Oas3ExternalDocs {
285
- description?: string;
286
- url: string;
287
- }
288
-
289
- export interface Oas3Contact {
290
- name?: string;
291
- url?: string;
292
- email?: string;
293
- }
294
-
295
- export interface Oas3License {
296
- name: string;
297
- url?: string;
298
- }
@@ -1,236 +0,0 @@
1
- import { Referenced } from './openapi';
2
- import { Schema } from 'js-yaml';
3
-
4
- export interface Oas2Definition {
5
- swagger: '2.0';
6
- info?: Oas2Info;
7
- paths?: Oas2Paths;
8
-
9
- basePath?: string;
10
- schemes?: string[];
11
- consumes?: string[];
12
- produces?: string[];
13
-
14
- definitions?: Record<string, Oas2Schema>;
15
- responses?: Record<string, Oas2Response>;
16
- parameters?: Record<string, Oas2Parameter>;
17
- securityDefinitions?: Record<string, Oas2SecurityScheme>;
18
- security?: Oas2SecurityRequirement[];
19
- tags?: Oas2Tag[];
20
- externalDocs?: Oas2ExternalDocs;
21
- }
22
-
23
- export interface Oas2Components {
24
- definitions?: { [name: string]: Record<string, Oas2Schema> };
25
- securityDefinitions?: { [name: string]: Record<string, Oas2SecurityScheme> };
26
- responses?: { [name: string]: Record<string, Oas2Response> };
27
- parameters?: { [name: string]: Record<string, Oas2Parameter> };
28
- }
29
-
30
- export interface Oas2Info {
31
- title: string;
32
- version: string;
33
-
34
- description?: string;
35
- termsOfService?: string;
36
- contact?: Oas2Contact;
37
- license?: Oas2License;
38
- }
39
-
40
- export interface Oas2Paths {
41
- [path: string]: Oas2PathItem;
42
- }
43
-
44
- export interface Oas2PathItem {
45
- get?: Oas2Operation;
46
- put?: Oas2Operation;
47
- post?: Oas2Operation;
48
- delete?: Oas2Operation;
49
- options?: Oas2Operation;
50
- head?: Oas2Operation;
51
- patch?: Oas2Operation;
52
- parameters?: Array<Referenced<Oas2Parameter>>;
53
- }
54
-
55
- export interface Oas2XCodeSample {
56
- lang: string;
57
- label?: string;
58
- source: string;
59
- }
60
-
61
- export interface Oas2Operation {
62
- tags?: string[];
63
- consumes?: string[];
64
- produces?: string[];
65
- schemes?: string[];
66
- summary?: string;
67
- description?: string;
68
- externalDocs?: Oas2ExternalDocs;
69
- operationId?: string;
70
- parameters?: Array<Referenced<Oas2Parameter>>;
71
- responses: Oas2Responses;
72
- deprecated?: boolean;
73
- security?: Oas2SecurityRequirement[];
74
- 'x-codeSamples'?: Oas2XCodeSample[];
75
- 'x-code-samples'?: Oas2XCodeSample[]; // deprecated
76
- 'x-hideTryItPanel'?: boolean;
77
- }
78
-
79
- export type Oas2Parameter = Oas2BodyParameter | Oas2SimpleParameter;
80
-
81
- export interface Oas2BodyParameter {
82
- name: string;
83
- in: 'body';
84
- schema: Oas2Schema;
85
-
86
- description?: string;
87
- required?: boolean;
88
- }
89
-
90
- export interface Oas2SimpleParameter {
91
- name: string;
92
- in: Oas2ParameterLocation;
93
- description?: string;
94
- required?: boolean;
95
- type: 'string' | 'number' | 'integer' | 'boolean' | 'array' | 'file';
96
-
97
- format?: string;
98
- allowEmptyValue?: boolean;
99
- items?: Oas2Items;
100
- collectionFormat?: 'csv' | 'ssv' | 'tsv' | 'pipes' | 'multi';
101
- default?: any;
102
- maximum?: number;
103
- exclusiveMaximum?: boolean;
104
- minimum?: number;
105
- exclusiveMinimum?: boolean;
106
- maxLength?: number;
107
- minLength?: number;
108
- pattern?: string;
109
- maxItems?: number;
110
- minItems?: number;
111
- uniqueItems?: boolean;
112
- enum?: any[];
113
- multipleOf?: number;
114
- }
115
-
116
- export interface Oas2Items {
117
- type: 'string' | 'number' | 'integer' | 'boolean' | 'array';
118
-
119
- format?: string;
120
- allowEmptyValue?: boolean;
121
- items?: Oas2Items;
122
- collectionFormat?: 'csv' | 'ssv' | 'tsv' | 'pipes' | 'multi';
123
- default?: any;
124
- maximum?: number;
125
- exclusiveMaximum?: boolean;
126
- minimum?: number;
127
- exclusiveMinimum?: boolean;
128
- maxLength?: number;
129
- minLength?: number;
130
- pattern?: string;
131
- maxItems?: number;
132
- minItems?: number;
133
- uniqueItems?: boolean;
134
- enum?: any[];
135
- multipleOf?: number;
136
- }
137
-
138
- export interface Oas2Xml {
139
- name?: string;
140
- namespace?: string;
141
- prefix?: string;
142
- attribute?: string;
143
- wrapped?: string;
144
- }
145
-
146
- export interface Oas2Schema {
147
- $ref?: string;
148
- type?: string;
149
- properties?: { [name: string]: Oas2Schema };
150
- additionalProperties?: boolean | Oas2Schema;
151
- description?: string;
152
- default?: any;
153
- items?: Oas2Schema;
154
- required?: string[];
155
- readOnly?: boolean;
156
- deprecated?: boolean;
157
- format?: string;
158
- externalDocs?: Oas2ExternalDocs;
159
- discriminator?: string;
160
- nullable?: boolean;
161
- allOf?: Oas2Schema[];
162
-
163
- title?: string;
164
- multipleOf?: number;
165
- maximum?: number;
166
- exclusiveMaximum?: boolean;
167
- minimum?: number;
168
- exclusiveMinimum?: boolean;
169
- maxLength?: number;
170
- minLength?: number;
171
- pattern?: string;
172
- maxItems?: number;
173
- minItems?: number;
174
- uniqueItems?: boolean;
175
- maxProperties?: number;
176
- minProperties?: number;
177
- enum?: any[];
178
- example?: any;
179
-
180
- xml?: Oas2Xml;
181
- 'x-tags'?: string[];
182
- }
183
-
184
- export type Oas2ParameterLocation = 'query' | 'header' | 'path' | 'formData';
185
-
186
- export interface Oas2Responses {
187
- [code: string]: Oas2Response;
188
- }
189
-
190
- export type Oas2Header = Oas2Items & { description?: 'string' };
191
-
192
- export interface Oas2Response {
193
- description?: string;
194
- schema: Referenced<Schema>;
195
- examples?: Record<string, any>;
196
- headers?: Record<string, Oas2Header>;
197
- }
198
-
199
- export interface Oas2SecurityRequirement {
200
- [name: string]: string[];
201
- }
202
-
203
- export interface Oas2SecurityScheme {
204
- type: 'basic' | 'apiKey' | 'oauth2';
205
- description?: string;
206
- name?: string;
207
- in?: 'query' | 'header' | 'cookie';
208
- scheme?: string;
209
- flow: 'implicit' | 'password' | 'application' | 'accessCode';
210
- authorizationUrl?: string;
211
- tokenUrl?: string;
212
- scopes?: Record<string, string>;
213
- }
214
-
215
- export interface Oas2Tag {
216
- name: string;
217
- description?: string;
218
- externalDocs?: Oas2ExternalDocs;
219
- 'x-displayName'?: string;
220
- }
221
-
222
- export interface Oas2ExternalDocs {
223
- description?: string;
224
- url: string;
225
- }
226
-
227
- export interface Oas2Contact {
228
- name?: string;
229
- url?: string;
230
- email?: string;
231
- }
232
-
233
- export interface Oas2License {
234
- name: string;
235
- url?: string;
236
- }
package/src/utils.ts DELETED
@@ -1,193 +0,0 @@
1
- import * as fs from 'fs';
2
- import * as minimatch from 'minimatch';
3
- import fetch from 'node-fetch';
4
- import * as pluralize from 'pluralize';
5
- import { parseYaml } from './js-yaml';
6
- import { UserContext } from './walk';
7
- import type { HttpResolveConfig } from './config';
8
- import { env } from "./config";
9
-
10
- export { parseYaml, stringifyYaml } from './js-yaml';
11
-
12
- export type StackFrame<T> = {
13
- prev: StackFrame<T> | null;
14
- value: T;
15
- };
16
-
17
- export type Stack<T> = StackFrame<T> | null;
18
- export type StackNonEmpty<T> = StackFrame<T>;
19
- export function pushStack<T, P extends Stack<T> = Stack<T>>(head: P, value: T) {
20
- return { prev: head, value };
21
- }
22
-
23
- export function popStack<T, P extends Stack<T>>(head: P) {
24
- return head?.prev ?? null;
25
- }
26
-
27
- export type BundleOutputFormat = 'json' | 'yml' | 'yaml';
28
-
29
- export async function loadYaml(filename: string) {
30
- const contents = await fs.promises.readFile(filename, 'utf-8');
31
- return parseYaml(contents);
32
- }
33
-
34
- export function notUndefined<T>(x: T | undefined): x is T {
35
- return x !== undefined;
36
- }
37
-
38
- export function isPlainObject(value: any): value is object {
39
- return value !== null && typeof value === 'object' && !Array.isArray(value);
40
- }
41
-
42
- export function isEmptyObject(value: any): value is object {
43
- return isPlainObject(value) && Object.keys(value).length === 0;
44
- }
45
-
46
- export function isEmptyArray(value: any) {
47
- return Array.isArray(value) && value.length === 0;
48
- }
49
-
50
- export async function readFileFromUrl(url: string, config: HttpResolveConfig) {
51
- const headers: Record<string, string> = {};
52
- for (const header of config.headers) {
53
- if (match(url, header.matches)) {
54
- headers[header.name] =
55
- header.envVariable !== undefined ? env[header.envVariable] || '' : header.value;
56
- }
57
- }
58
-
59
- const req = await (config.customFetch || fetch)(url, {
60
- headers: headers,
61
- });
62
-
63
- if (!req.ok) {
64
- throw new Error(`Failed to load ${url}: ${req.status} ${req.statusText}`);
65
- }
66
-
67
- return { body: await req.text(), mimeType: req.headers.get('content-type') };
68
- }
69
-
70
- function match(url: string, pattern: string) {
71
- if (!pattern.match(/^https?:\/\//)) {
72
- // if pattern doesn't specify protocol directly, do not match against it
73
- url = url.replace(/^https?:\/\//, '');
74
- }
75
- return minimatch(url, pattern);
76
- }
77
-
78
- export function pickObjectProps<T extends Record<string, unknown>>(
79
- object: T,
80
- keys: Array<string>,
81
- ): T {
82
- return Object.fromEntries(
83
- keys.filter((key: string) => key in object).map((key: string) => [key, object[key]]),
84
- ) as T;
85
- }
86
-
87
- export function omitObjectProps<T extends Record<string, unknown>>(
88
- object: T,
89
- keys: Array<string>,
90
- ): T {
91
- return Object.fromEntries(Object.entries(object).filter(([key]) => !keys.includes(key))) as T;
92
- }
93
-
94
- export function splitCamelCaseIntoWords(str: string) {
95
- const camel = str
96
- .split(/(?:[-._])|([A-Z][a-z]+)/)
97
- .filter(Boolean)
98
- .map((item) => item.toLocaleLowerCase());
99
- const caps = str
100
- .split(/([A-Z]{2,})/)
101
- .filter((e: string) => e && e === e.toUpperCase())
102
- .map((item) => item.toLocaleLowerCase());
103
- return new Set([...camel, ...caps]);
104
- }
105
-
106
- export function validateMimeType(
107
- { type, value }: any,
108
- { report, location }: UserContext,
109
- allowedValues: string[],
110
- ) {
111
- const ruleType = type === 'consumes' ? 'request' : 'response';
112
- if (!allowedValues)
113
- throw new Error(`Parameter "allowedValues" is not provided for "${ruleType}-mime-type" rule`);
114
- if (!value[type]) return;
115
-
116
- for (const mime of value[type]) {
117
- if (!allowedValues.includes(mime)) {
118
- report({
119
- message: `Mime type "${mime}" is not allowed`,
120
- location: location.child(value[type].indexOf(mime)).key(),
121
- });
122
- }
123
- }
124
- }
125
-
126
- export function validateMimeTypeOAS3(
127
- { type, value }: any,
128
- { report, location }: UserContext,
129
- allowedValues: string[],
130
- ) {
131
- const ruleType = type === 'consumes' ? 'request' : 'response';
132
- if (!allowedValues)
133
- throw new Error(`Parameter "allowedValues" is not provided for "${ruleType}-mime-type" rule`);
134
- if (!value.content) return;
135
-
136
- for (const mime of Object.keys(value.content)) {
137
- if (!allowedValues.includes(mime)) {
138
- report({
139
- message: `Mime type "${mime}" is not allowed`,
140
- location: location.child('content').child(mime).key(),
141
- });
142
- }
143
- }
144
- }
145
-
146
- export function isSingular(path: string) {
147
- return pluralize.isSingular(path);
148
- }
149
-
150
- export function readFileAsStringSync(filePath: string) {
151
- return fs.readFileSync(filePath, 'utf-8');
152
- }
153
-
154
- export function isPathParameter(pathSegment: string) {
155
- return pathSegment.startsWith('{') && pathSegment.endsWith('}');
156
- }
157
-
158
-
159
- /**
160
- * Convert Windows backslash paths to slash paths: foo\\bar ➔ foo/bar
161
- */
162
- export function slash(path: string): string {
163
- const isExtendedLengthPath = /^\\\\\?\\/.test(path)
164
- if (isExtendedLengthPath) {
165
- return path
166
- }
167
-
168
- return path.replace(/\\/g, '/');
169
- }
170
-
171
- export function isNotEmptyObject(obj: any) {
172
- return !!obj && Object.keys(obj).length > 0;
173
- }
174
-
175
- // TODO: use it everywhere
176
- export function isString(value: unknown): value is string {
177
- return typeof value === 'string';
178
- }
179
-
180
- export function isNotString<T>(value: string | T): value is T {
181
- return !isString(value);
182
- }
183
-
184
- export function assignExisting<T>(target: Record<string, T>, obj: Record<string, T>) {
185
- for (let k of Object.keys(obj)) {
186
- if (target.hasOwnProperty(k)) {
187
- target[k] = obj[k];
188
- }
189
- }
190
- }
191
-
192
- export const getMatchingStatusCodeRange = (code: number | string): string =>
193
- `${code}`.replace(/^(\d)\d\d$/, (_, firstDigit) => `${firstDigit}XX`);