@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,297 +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 interface Oas3_1Schema extends Oas3Schema {
157
- examples?: any[];
158
- }
159
-
160
- export interface Oas3_1Definition extends Oas3Definition {
161
- webhooks?: Oas3_1Webhooks;
162
- }
163
-
164
- export interface Oas3_1Webhooks {
165
- [webhook: string]: Referenced<Oas3PathItem>;
166
- }
167
-
168
- export interface Oas3Discriminator {
169
- propertyName: string;
170
- mapping?: { [name: string]: string };
171
- 'x-explicitMappingOnly'?: boolean;
172
- }
173
-
174
- export interface Oas3MediaType {
175
- schema?: Referenced<Oas3Schema>;
176
- example?: any;
177
- examples?: { [name: string]: Referenced<Oas3Example> };
178
- encoding?: { [field: string]: Oas3Encoding };
179
- }
180
-
181
- export interface Oas3Encoding {
182
- contentType: string;
183
- headers?: { [name: string]: Referenced<Oas3Header> };
184
- style: Oas3ParameterStyle;
185
- explode: boolean;
186
- allowReserved: boolean;
187
- }
188
-
189
- export type Oas3ParameterLocation = 'query' | 'header' | 'path' | 'cookie';
190
- export type Oas3ParameterStyle =
191
- | 'matrix'
192
- | 'label'
193
- | 'form'
194
- | 'simple'
195
- | 'spaceDelimited'
196
- | 'pipeDelimited'
197
- | 'deepObject';
198
-
199
- export interface Oas3RequestBody {
200
- description?: string;
201
- required?: boolean;
202
- content: { [mime: string]: Oas3MediaType };
203
- }
204
-
205
- export interface Oas3Responses {
206
- [code: string]: Oas3Response;
207
- }
208
-
209
- export interface Oas3Response {
210
- description?: string;
211
- headers?: { [name: string]: Referenced<Oas3Header> };
212
- content?: { [mime: string]: Oas3MediaType };
213
- links?: { [name: string]: Referenced<Oas3Link> };
214
- }
215
-
216
- export interface Oas3Link {
217
- $ref?: string;
218
- }
219
-
220
- export type Oas3Header = Omit<Oas3Parameter, 'in' | 'name'>;
221
-
222
- export interface Oas3Callback {
223
- [name: string]: Oas3PathItem;
224
- }
225
-
226
- export interface Oas3Components {
227
- schemas?: { [name: string]: Referenced<Oas3Schema> };
228
- responses?: { [name: string]: Referenced<Oas3Response> };
229
- parameters?: { [name: string]: Referenced<Oas3Parameter> };
230
- examples?: { [name: string]: Referenced<Oas3Example> };
231
- requestBodies?: { [name: string]: Referenced<Oas3RequestBody> };
232
- headers?: { [name: string]: Referenced<Oas3Header> };
233
- securitySchemes?: { [name: string]: Referenced<Oas3SecurityScheme> };
234
- links?: { [name: string]: Referenced<Oas3Link> };
235
- callbacks?: { [name: string]: Referenced<Oas3Callback> };
236
- }
237
-
238
- export type Oas3ComponentName = keyof Oas3Components;
239
-
240
- export interface Oas3SecurityRequirement {
241
- [name: string]: string[];
242
- }
243
-
244
- export interface Oas3SecurityScheme {
245
- type: 'apiKey' | 'http' | 'oauth2' | 'openIdConnect';
246
- description?: string;
247
- name?: string;
248
- in?: 'query' | 'header' | 'cookie';
249
- scheme?: string;
250
- bearerFormat: string;
251
- flows: {
252
- implicit?: {
253
- refreshUrl?: string;
254
- scopes: Record<string, string>;
255
- authorizationUrl: string;
256
- };
257
- password?: {
258
- refreshUrl?: string;
259
- scopes: Record<string, string>;
260
- tokenUrl: string;
261
- };
262
- clientCredentials?: {
263
- refreshUrl?: string;
264
- scopes: Record<string, string>;
265
- tokenUrl: string;
266
- };
267
- authorizationCode?: {
268
- refreshUrl?: string;
269
- scopes: Record<string, string>;
270
- tokenUrl: string;
271
- };
272
- };
273
- openIdConnectUrl?: string;
274
- }
275
-
276
- export interface Oas3Tag {
277
- name: string;
278
- description?: string;
279
- externalDocs?: Oas3ExternalDocs;
280
- 'x-displayName'?: string;
281
- }
282
-
283
- export interface Oas3ExternalDocs {
284
- description?: string;
285
- url: string;
286
- }
287
-
288
- export interface Oas3Contact {
289
- name?: string;
290
- url?: string;
291
- email?: string;
292
- }
293
-
294
- export interface Oas3License {
295
- name: string;
296
- url?: string;
297
- }
@@ -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,190 +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
- }