@redocly/openapi-core 1.0.0-beta.126 → 1.0.0-beta.128

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 (289) hide show
  1. package/lib/bundle.js +21 -4
  2. package/lib/config/all.js +1 -0
  3. package/lib/config/config-resolvers.js +8 -2
  4. package/lib/config/minimal.js +1 -0
  5. package/lib/config/recommended.js +1 -0
  6. package/lib/config/types.d.ts +1 -1
  7. package/lib/config/utils.js +15 -1
  8. package/lib/lint.js +17 -2
  9. package/lib/rules/common/spec-strict-refs.d.ts +2 -0
  10. package/lib/rules/common/spec-strict-refs.js +30 -0
  11. package/lib/rules/common/spec.js +1 -0
  12. package/lib/rules/oas2/index.d.ts +1 -0
  13. package/lib/rules/oas2/index.js +2 -0
  14. package/lib/rules/oas2/request-mime-type.d.ts +1 -1
  15. package/lib/rules/oas2/response-mime-type.d.ts +1 -1
  16. package/lib/rules/oas3/index.js +2 -0
  17. package/lib/rules/oas3/operation-4xx-problem-details-rfc7807.d.ts +2 -2
  18. package/lib/rules/oas3/operation-4xx-problem-details-rfc7807.js +3 -3
  19. package/lib/rules/oas3/request-mime-type.d.ts +1 -1
  20. package/lib/rules/oas3/response-mime-type.d.ts +1 -1
  21. package/lib/rules/oas3/spec-components-invalid-map-name.js +0 -5
  22. package/lib/types/redocly-yaml.js +6 -1
  23. package/lib/walk.d.ts +6 -5
  24. package/lib/walk.js +26 -31
  25. package/package.json +1 -1
  26. package/__tests__/utils.ts +0 -88
  27. package/src/__tests__/__snapshots__/bundle.test.ts.snap +0 -437
  28. package/src/__tests__/bundle.test.ts +0 -236
  29. package/src/__tests__/codeframes.test.ts +0 -530
  30. package/src/__tests__/fixtures/.redocly.lint-ignore.yaml +0 -5
  31. package/src/__tests__/fixtures/extension.js +0 -24
  32. package/src/__tests__/fixtures/refs/definitions.yaml +0 -3
  33. package/src/__tests__/fixtures/refs/examples.yaml +0 -8
  34. package/src/__tests__/fixtures/refs/external-request-body.yaml +0 -13
  35. package/src/__tests__/fixtures/refs/externalref.yaml +0 -35
  36. package/src/__tests__/fixtures/refs/hosted.yaml +0 -35
  37. package/src/__tests__/fixtures/refs/openapi-with-external-refs-conflicting-names.yaml +0 -21
  38. package/src/__tests__/fixtures/refs/openapi-with-external-refs.yaml +0 -33
  39. package/src/__tests__/fixtures/refs/openapi-with-url-refs.yaml +0 -18
  40. package/src/__tests__/fixtures/refs/param-b.yaml +0 -1
  41. package/src/__tests__/fixtures/refs/param-c.yaml +0 -1
  42. package/src/__tests__/fixtures/refs/rename.yaml +0 -1
  43. package/src/__tests__/fixtures/refs/requestBody.yaml +0 -9
  44. package/src/__tests__/fixtures/refs/schema-a.yaml +0 -1
  45. package/src/__tests__/fixtures/refs/simple.yaml +0 -1
  46. package/src/__tests__/fixtures/refs/vendor.schema.yaml +0 -20
  47. package/src/__tests__/fixtures/resolve/External.yaml +0 -10
  48. package/src/__tests__/fixtures/resolve/External2.yaml +0 -4
  49. package/src/__tests__/fixtures/resolve/description.md +0 -3
  50. package/src/__tests__/fixtures/resolve/externalInfo.yaml +0 -4
  51. package/src/__tests__/fixtures/resolve/externalLicense.yaml +0 -1
  52. package/src/__tests__/fixtures/resolve/openapi-with-back.yaml +0 -13
  53. package/src/__tests__/fixtures/resolve/openapi-with-md-description.yaml +0 -5
  54. package/src/__tests__/fixtures/resolve/openapi.yaml +0 -28
  55. package/src/__tests__/fixtures/resolve/schemas/type-a.yaml +0 -10
  56. package/src/__tests__/fixtures/resolve/schemas/type-b.yaml +0 -6
  57. package/src/__tests__/fixtures/resolve/transitive/a.yaml +0 -1
  58. package/src/__tests__/fixtures/resolve/transitive/components.yaml +0 -5
  59. package/src/__tests__/fixtures/resolve/transitive/schemas.yaml +0 -3
  60. package/src/__tests__/format.test.ts +0 -76
  61. package/src/__tests__/js-yaml.test.ts +0 -73
  62. package/src/__tests__/lint.test.ts +0 -388
  63. package/src/__tests__/logger-browser.test.ts +0 -53
  64. package/src/__tests__/logger.test.ts +0 -47
  65. package/src/__tests__/login.test.ts +0 -17
  66. package/src/__tests__/normalizeVisitors.test.ts +0 -151
  67. package/src/__tests__/output-browser.test.ts +0 -18
  68. package/src/__tests__/output.test.ts +0 -15
  69. package/src/__tests__/ref-utils.test.ts +0 -120
  70. package/src/__tests__/resolve-http.test.ts +0 -77
  71. package/src/__tests__/resolve.test.ts +0 -430
  72. package/src/__tests__/utils-browser.test.ts +0 -11
  73. package/src/__tests__/utils.test.ts +0 -144
  74. package/src/__tests__/walk.test.ts +0 -1545
  75. package/src/benchmark/benches/lint-with-many-rules.bench.ts +0 -35
  76. package/src/benchmark/benches/lint-with-nested-rule.bench.ts +0 -39
  77. package/src/benchmark/benches/lint-with-no-rules.bench.ts +0 -20
  78. package/src/benchmark/benches/lint-with-top-level-rule-report.bench.ts +0 -35
  79. package/src/benchmark/benches/lint-with-top-level-rule.bench.ts +0 -32
  80. package/src/benchmark/benches/rebilly.yaml +0 -32275
  81. package/src/benchmark/benches/recommended-oas3.bench.ts +0 -22
  82. package/src/benchmark/benches/resolve-with-no-external.bench.ts +0 -23
  83. package/src/benchmark/benchmark.js +0 -311
  84. package/src/benchmark/colors.js +0 -29
  85. package/src/benchmark/fork.js +0 -83
  86. package/src/benchmark/utils.ts +0 -36
  87. package/src/bundle.ts +0 -399
  88. package/src/config/__tests__/__snapshots__/config-resolvers.test.ts.snap +0 -161
  89. package/src/config/__tests__/__snapshots__/config.test.ts.snap +0 -144
  90. package/src/config/__tests__/config-resolvers.test.ts +0 -491
  91. package/src/config/__tests__/config.test.ts +0 -307
  92. package/src/config/__tests__/fixtures/ingore-file.ts +0 -8
  93. package/src/config/__tests__/fixtures/load-redocly.yaml +0 -2
  94. package/src/config/__tests__/fixtures/plugin-config.yaml +0 -2
  95. package/src/config/__tests__/fixtures/plugin.js +0 -56
  96. package/src/config/__tests__/fixtures/resolve-config/api/nested-config.yaml +0 -11
  97. package/src/config/__tests__/fixtures/resolve-config/api/plugin.js +0 -69
  98. package/src/config/__tests__/fixtures/resolve-config/local-config-with-circular.yaml +0 -7
  99. package/src/config/__tests__/fixtures/resolve-config/local-config-with-custom-function.yaml +0 -17
  100. package/src/config/__tests__/fixtures/resolve-config/local-config-with-file.yaml +0 -18
  101. package/src/config/__tests__/fixtures/resolve-config/local-config-with-wrong-custom-function.yaml +0 -15
  102. package/src/config/__tests__/fixtures/resolve-config/local-config.yaml +0 -9
  103. package/src/config/__tests__/fixtures/resolve-config/plugin.js +0 -80
  104. package/src/config/__tests__/fixtures/resolve-remote-configs/nested-remote-config.yaml +0 -3
  105. package/src/config/__tests__/fixtures/resolve-remote-configs/remote-config.yaml +0 -4
  106. package/src/config/__tests__/load.test.ts +0 -167
  107. package/src/config/__tests__/resolve-plugins.test.ts +0 -27
  108. package/src/config/__tests__/utils.test.ts +0 -204
  109. package/src/config/all.ts +0 -73
  110. package/src/config/builtIn.ts +0 -37
  111. package/src/config/config-resolvers.ts +0 -465
  112. package/src/config/config.ts +0 -330
  113. package/src/config/index.ts +0 -7
  114. package/src/config/load.ts +0 -144
  115. package/src/config/minimal.ts +0 -60
  116. package/src/config/recommended.ts +0 -60
  117. package/src/config/rules.ts +0 -54
  118. package/src/config/types.ts +0 -216
  119. package/src/config/utils.ts +0 -333
  120. package/src/decorators/__tests__/filter-in.test.ts +0 -310
  121. package/src/decorators/__tests__/filter-out.test.ts +0 -335
  122. package/src/decorators/__tests__/media-type-examples-override.test.ts +0 -665
  123. package/src/decorators/__tests__/remove-x-internal.test.ts +0 -316
  124. package/src/decorators/__tests__/resources/request.yaml +0 -3
  125. package/src/decorators/__tests__/resources/response.yaml +0 -3
  126. package/src/decorators/common/filters/filter-helper.ts +0 -72
  127. package/src/decorators/common/filters/filter-in.ts +0 -18
  128. package/src/decorators/common/filters/filter-out.ts +0 -18
  129. package/src/decorators/common/info-description-override.ts +0 -24
  130. package/src/decorators/common/info-override.ts +0 -15
  131. package/src/decorators/common/media-type-examples-override.ts +0 -79
  132. package/src/decorators/common/operation-description-override.ts +0 -30
  133. package/src/decorators/common/registry-dependencies.ts +0 -25
  134. package/src/decorators/common/remove-x-internal.ts +0 -59
  135. package/src/decorators/common/tag-description-override.ts +0 -25
  136. package/src/decorators/oas2/index.ts +0 -20
  137. package/src/decorators/oas3/index.ts +0 -22
  138. package/src/env.ts +0 -5
  139. package/src/format/codeframes.ts +0 -216
  140. package/src/format/format.ts +0 -375
  141. package/src/index.ts +0 -71
  142. package/src/js-yaml/index.ts +0 -14
  143. package/src/lint.ts +0 -130
  144. package/src/logger.ts +0 -34
  145. package/src/oas-types.ts +0 -57
  146. package/src/output.ts +0 -7
  147. package/src/redocly/__tests__/redocly-client.test.ts +0 -146
  148. package/src/redocly/index.ts +0 -187
  149. package/src/redocly/redocly-client-types.ts +0 -10
  150. package/src/redocly/registry-api-types.ts +0 -32
  151. package/src/redocly/registry-api.ts +0 -149
  152. package/src/ref-utils.ts +0 -85
  153. package/src/resolve.ts +0 -417
  154. package/src/rules/__tests__/fixtures/code-sample.php +0 -9
  155. package/src/rules/__tests__/fixtures/invalid-yaml.yaml +0 -1
  156. package/src/rules/__tests__/fixtures/ref.yaml +0 -1
  157. package/src/rules/__tests__/no-unresolved-refs.test.ts +0 -257
  158. package/src/rules/__tests__/utils.test.ts +0 -160
  159. package/src/rules/ajv.ts +0 -102
  160. package/src/rules/common/__tests__/info-license.test.ts +0 -62
  161. package/src/rules/common/__tests__/license-url.test.ts +0 -63
  162. package/src/rules/common/__tests__/no-ambiguous-paths.test.ts +0 -96
  163. package/src/rules/common/__tests__/no-enum-type-mismatch.test.ts +0 -210
  164. package/src/rules/common/__tests__/no-identical-paths.test.ts +0 -58
  165. package/src/rules/common/__tests__/no-path-trailing-slash.test.ts +0 -85
  166. package/src/rules/common/__tests__/operation-2xx-response.test.ts +0 -192
  167. package/src/rules/common/__tests__/operation-4xx-response.test.ts +0 -231
  168. package/src/rules/common/__tests__/operation-operationId-unique.test.ts +0 -76
  169. package/src/rules/common/__tests__/operation-operationId-url-safe.test.ts +0 -45
  170. package/src/rules/common/__tests__/operation-parameters-unique.test.ts +0 -167
  171. package/src/rules/common/__tests__/operation-singular-tag.test.ts +0 -72
  172. package/src/rules/common/__tests__/path-http-verbs-order.test.ts +0 -95
  173. package/src/rules/common/__tests__/path-not-include-query.test.ts +0 -64
  174. package/src/rules/common/__tests__/path-params-defined.test.ts +0 -202
  175. package/src/rules/common/__tests__/paths-kebab-case.test.ts +0 -108
  176. package/src/rules/common/__tests__/scalar-property-missing-example.test.ts +0 -264
  177. package/src/rules/common/__tests__/security-defined.test.ts +0 -175
  178. package/src/rules/common/__tests__/spec.test.ts +0 -555
  179. package/src/rules/common/__tests__/tag-description.test.ts +0 -65
  180. package/src/rules/common/__tests__/tags-alphabetical.test.ts +0 -64
  181. package/src/rules/common/assertions/__tests__/asserts.test.ts +0 -869
  182. package/src/rules/common/assertions/__tests__/index.test.ts +0 -100
  183. package/src/rules/common/assertions/__tests__/utils.test.ts +0 -236
  184. package/src/rules/common/assertions/asserts.ts +0 -357
  185. package/src/rules/common/assertions/index.ts +0 -56
  186. package/src/rules/common/assertions/utils.ts +0 -331
  187. package/src/rules/common/info-contact.ts +0 -15
  188. package/src/rules/common/info-license-url.ts +0 -10
  189. package/src/rules/common/info-license.ts +0 -15
  190. package/src/rules/common/no-ambiguous-paths.ts +0 -50
  191. package/src/rules/common/no-enum-type-mismatch.ts +0 -52
  192. package/src/rules/common/no-http-verbs-in-paths.ts +0 -36
  193. package/src/rules/common/no-identical-paths.ts +0 -24
  194. package/src/rules/common/no-invalid-parameter-examples.ts +0 -36
  195. package/src/rules/common/no-invalid-schema-examples.ts +0 -27
  196. package/src/rules/common/no-path-trailing-slash.ts +0 -15
  197. package/src/rules/common/operation-2xx-response.ts +0 -24
  198. package/src/rules/common/operation-4xx-response.ts +0 -24
  199. package/src/rules/common/operation-description.ts +0 -13
  200. package/src/rules/common/operation-operationId-unique.ts +0 -21
  201. package/src/rules/common/operation-operationId-url-safe.ts +0 -19
  202. package/src/rules/common/operation-operationId.ts +0 -17
  203. package/src/rules/common/operation-parameters-unique.ts +0 -48
  204. package/src/rules/common/operation-singular-tag.ts +0 -17
  205. package/src/rules/common/operation-summary.ts +0 -13
  206. package/src/rules/common/operation-tag-defined.ts +0 -26
  207. package/src/rules/common/parameter-description.ts +0 -22
  208. package/src/rules/common/path-declaration-must-exist.ts +0 -15
  209. package/src/rules/common/path-excludes-patterns.ts +0 -23
  210. package/src/rules/common/path-http-verbs-order.ts +0 -30
  211. package/src/rules/common/path-not-include-query.ts +0 -17
  212. package/src/rules/common/path-params-defined.ts +0 -65
  213. package/src/rules/common/path-segment-plural.ts +0 -31
  214. package/src/rules/common/paths-kebab-case.ts +0 -19
  215. package/src/rules/common/required-string-property-missing-min-length.ts +0 -44
  216. package/src/rules/common/response-contains-header.ts +0 -35
  217. package/src/rules/common/scalar-property-missing-example.ts +0 -58
  218. package/src/rules/common/security-defined.ts +0 -65
  219. package/src/rules/common/spec.ts +0 -174
  220. package/src/rules/common/tag-description.ts +0 -10
  221. package/src/rules/common/tags-alphabetical.ts +0 -20
  222. package/src/rules/no-unresolved-refs.ts +0 -51
  223. package/src/rules/oas2/__tests__/boolean-parameter-prefixes.test.ts +0 -110
  224. package/src/rules/oas2/__tests__/response-contains-header.test.ts +0 -174
  225. package/src/rules/oas2/__tests__/response-contains-property.test.ts +0 -155
  226. package/src/rules/oas2/__tests__/spec/fixtures/description.md +0 -1
  227. package/src/rules/oas2/__tests__/spec/info.test.ts +0 -355
  228. package/src/rules/oas2/__tests__/spec/operation.test.ts +0 -123
  229. package/src/rules/oas2/__tests__/spec/paths.test.ts +0 -245
  230. package/src/rules/oas2/__tests__/spec/referenceableScalars.test.ts +0 -35
  231. package/src/rules/oas2/__tests__/spec/utils.ts +0 -32
  232. package/src/rules/oas2/boolean-parameter-prefixes.ts +0 -26
  233. package/src/rules/oas2/index.ts +0 -89
  234. package/src/rules/oas2/remove-unused-components.ts +0 -81
  235. package/src/rules/oas2/request-mime-type.ts +0 -17
  236. package/src/rules/oas2/response-contains-property.ts +0 -36
  237. package/src/rules/oas2/response-mime-type.ts +0 -17
  238. package/src/rules/oas3/__tests__/boolean-parameter-prefixes.test.ts +0 -111
  239. package/src/rules/oas3/__tests__/fixtures/common.yaml +0 -11
  240. package/src/rules/oas3/__tests__/no-empty-enum-servers.com.test.ts +0 -205
  241. package/src/rules/oas3/__tests__/no-example-value-and-externalValue.test.ts +0 -65
  242. package/src/rules/oas3/__tests__/no-invalid-media-type-examples.test.ts +0 -473
  243. package/src/rules/oas3/__tests__/no-server-example.com.test.ts +0 -60
  244. package/src/rules/oas3/__tests__/no-server-trailing-slash.test.ts +0 -79
  245. package/src/rules/oas3/__tests__/no-unused-components.test.ts +0 -131
  246. package/src/rules/oas3/__tests__/operation-4xx-problem-details-rfc7807.test.ts +0 -145
  247. package/src/rules/oas3/__tests__/response-contains-header.test.ts +0 -389
  248. package/src/rules/oas3/__tests__/response-contains-property.test.ts +0 -403
  249. package/src/rules/oas3/__tests__/spec/callbacks.test.ts +0 -41
  250. package/src/rules/oas3/__tests__/spec/fixtures/description.md +0 -1
  251. package/src/rules/oas3/__tests__/spec/info.test.ts +0 -391
  252. package/src/rules/oas3/__tests__/spec/operation.test.ts +0 -253
  253. package/src/rules/oas3/__tests__/spec/paths.test.ts +0 -284
  254. package/src/rules/oas3/__tests__/spec/referenceableScalars.test.ts +0 -77
  255. package/src/rules/oas3/__tests__/spec/servers.test.ts +0 -505
  256. package/src/rules/oas3/__tests__/spec/spec.test.ts +0 -298
  257. package/src/rules/oas3/__tests__/spec/utils.ts +0 -32
  258. package/src/rules/oas3/__tests__/spec-components-invalid-map-name.test.ts +0 -305
  259. package/src/rules/oas3/boolean-parameter-prefixes.ts +0 -28
  260. package/src/rules/oas3/index.ts +0 -109
  261. package/src/rules/oas3/no-empty-servers.ts +0 -22
  262. package/src/rules/oas3/no-example-value-and-externalValue.ts +0 -14
  263. package/src/rules/oas3/no-invalid-media-type-examples.ts +0 -49
  264. package/src/rules/oas3/no-server-example.com.ts +0 -14
  265. package/src/rules/oas3/no-server-trailing-slash.ts +0 -15
  266. package/src/rules/oas3/no-server-variables-empty-enum.ts +0 -66
  267. package/src/rules/oas3/no-undefined-server-variable.ts +0 -30
  268. package/src/rules/oas3/no-unused-components.ts +0 -75
  269. package/src/rules/oas3/operation-4xx-problem-details-rfc7807.ts +0 -36
  270. package/src/rules/oas3/remove-unused-components.ts +0 -95
  271. package/src/rules/oas3/request-mime-type.ts +0 -31
  272. package/src/rules/oas3/response-contains-property.ts +0 -38
  273. package/src/rules/oas3/response-mime-type.ts +0 -31
  274. package/src/rules/oas3/spec-components-invalid-map-name.ts +0 -74
  275. package/src/rules/other/stats.ts +0 -73
  276. package/src/rules/utils.ts +0 -191
  277. package/src/types/index.ts +0 -149
  278. package/src/types/oas2.ts +0 -478
  279. package/src/types/oas3.ts +0 -597
  280. package/src/types/oas3_1.ts +0 -258
  281. package/src/types/redocly-yaml.ts +0 -1010
  282. package/src/typings/common.ts +0 -17
  283. package/src/typings/openapi.ts +0 -298
  284. package/src/typings/swagger.ts +0 -236
  285. package/src/utils.ts +0 -276
  286. package/src/visitors.ts +0 -491
  287. package/src/walk.ts +0 -453
  288. package/tsconfig.json +0 -8
  289. package/tsconfig.tsbuildinfo +0 -1
package/lib/bundle.js CHANGED
@@ -74,13 +74,27 @@ function bundleDocument(opts) {
74
74
  : remove_unused_components_2.RemoveUnusedComponents({}),
75
75
  });
76
76
  }
77
- const resolvedRefMap = yield resolve_1.resolveDocument({
77
+ let resolvedRefMap = yield resolve_1.resolveDocument({
78
78
  rootDocument: document,
79
79
  rootType: types.Root,
80
80
  externalRefResolver,
81
81
  });
82
+ if (preprocessors.length > 0) {
83
+ // Make additional pass to resolve refs defined in preprocessors.
84
+ walk_1.walkDocument({
85
+ document,
86
+ rootType: types.Root,
87
+ normalizedVisitors: visitors_1.normalizeVisitors(preprocessors, types),
88
+ resolvedRefMap,
89
+ ctx,
90
+ });
91
+ resolvedRefMap = yield resolve_1.resolveDocument({
92
+ rootDocument: document,
93
+ rootType: types.Root,
94
+ externalRefResolver,
95
+ });
96
+ }
82
97
  const bundleVisitor = visitors_1.normalizeVisitors([
83
- ...preprocessors,
84
98
  {
85
99
  severity: 'error',
86
100
  ruleId: 'bundler',
@@ -148,6 +162,7 @@ exports.mapTypeToComponent = mapTypeToComponent;
148
162
  // function oas3Move
149
163
  function makeBundleVisitor(version, dereference, skipRedoclyRegistryRefs, rootDocument, resolvedRefMap, keepUrlRefs) {
150
164
  let components;
165
+ let rootLocation;
151
166
  const visitor = {
152
167
  ref: {
153
168
  leave(node, ctx, resolved) {
@@ -185,7 +200,8 @@ function makeBundleVisitor(version, dereference, skipRedoclyRegistryRefs, rootDo
185
200
  },
186
201
  },
187
202
  Root: {
188
- enter(root) {
203
+ enter(root, ctx) {
204
+ rootLocation = ctx.location;
189
205
  if (version === oas_types_1.OasMajorVersion.Version3) {
190
206
  components = root.components = root.components || {};
191
207
  }
@@ -253,7 +269,8 @@ function makeBundleVisitor(version, dereference, skipRedoclyRegistryRefs, rootDo
253
269
  function isEqualOrEqualRef(node, target, ctx) {
254
270
  var _a;
255
271
  if (ref_utils_1.isRef(node) &&
256
- ((_a = ctx.resolve(node).location) === null || _a === void 0 ? void 0 : _a.absolutePointer) === target.location.absolutePointer) {
272
+ ((_a = ctx.resolve(node, rootLocation.absolutePointer).location) === null || _a === void 0 ? void 0 : _a.absolutePointer) ===
273
+ target.location.absolutePointer) {
257
274
  return true;
258
275
  }
259
276
  return isEqual(node, target.node);
package/lib/config/all.js CHANGED
@@ -48,6 +48,7 @@ exports.default = {
48
48
  'no-invalid-schema-examples': 'error',
49
49
  'no-invalid-parameter-examples': 'error',
50
50
  'scalar-property-missing-example': 'error',
51
+ 'spec-strict-refs': 'error',
51
52
  },
52
53
  oas3_0Rules: {
53
54
  'no-invalid-media-type-examples': 'error',
@@ -75,6 +75,9 @@ function resolvePlugins(plugins, configPath = '') {
75
75
  : require(absoltePluginPath);
76
76
  }
77
77
  catch (e) {
78
+ if (e instanceof SyntaxError) {
79
+ throw e;
80
+ }
78
81
  throw new Error(`Failed to load plugin "${plugin}". Please provide a valid path`);
79
82
  }
80
83
  }
@@ -253,7 +256,10 @@ function groupStyleguideAssertionRules({ rules, plugins, }) {
253
256
  // Collect assertion rules
254
257
  const assertions = [];
255
258
  for (const [ruleKey, rule] of Object.entries(rules)) {
256
- if (ruleKey.startsWith('assert/') && typeof rule === 'object' && rule !== null) {
259
+ // keep the old assert/ syntax as an alias
260
+ if ((ruleKey.startsWith('rule/') || ruleKey.startsWith('assert/')) &&
261
+ typeof rule === 'object' &&
262
+ rule !== null) {
257
263
  const assertion = rule;
258
264
  if (plugins) {
259
265
  registerCustomAssertions(plugins, assertion);
@@ -262,7 +268,7 @@ function groupStyleguideAssertionRules({ rules, plugins, }) {
262
268
  registerCustomAssertions(plugins, context);
263
269
  }
264
270
  }
265
- assertions.push(Object.assign(Object.assign({}, assertion), { assertionId: ruleKey.replace('assert/', '') }));
271
+ assertions.push(Object.assign(Object.assign({}, assertion), { assertionId: ruleKey.replace(/rule\/|assert\//, '') }));
266
272
  }
267
273
  else {
268
274
  // If it's not an assertion, keep it as is
@@ -31,6 +31,7 @@ exports.default = {
31
31
  'boolean-parameter-prefixes': 'off',
32
32
  'paths-kebab-case': 'off',
33
33
  spec: 'error',
34
+ 'spec-strict-refs': 'off',
34
35
  },
35
36
  oas3_0Rules: {
36
37
  'no-invalid-media-type-examples': {
@@ -31,6 +31,7 @@ exports.default = {
31
31
  'boolean-parameter-prefixes': 'off',
32
32
  'paths-kebab-case': 'off',
33
33
  spec: 'error',
34
+ 'spec-strict-refs': 'off',
34
35
  },
35
36
  oas3_0Rules: {
36
37
  'no-invalid-media-type-examples': {
@@ -2,7 +2,7 @@ import type { ProblemSeverity, UserContext } from '../walk';
2
2
  import type { Oas3PreprocessorsSet, OasMajorVersion, Oas3DecoratorsSet, Oas2RuleSet, Oas2PreprocessorsSet, Oas2DecoratorsSet, Oas3RuleSet, OasVersion } from '../oas-types';
3
3
  import type { NodeType } from '../types';
4
4
  import { Location } from '../ref-utils';
5
- import { SkipFunctionContext } from '../visitors';
5
+ import type { SkipFunctionContext } from '../visitors';
6
6
  export declare type RuleSeverity = ProblemSeverity | 'off';
7
7
  export declare type RuleSettings = {
8
8
  severity: RuleSeverity;
@@ -191,12 +191,26 @@ function transformConfig(rawConfig) {
191
191
  }
192
192
  const { apis, apiDefinitions, referenceDocs, lint } = rawConfig, rest = __rest(rawConfig, ["apis", "apiDefinitions", "referenceDocs", "lint"]);
193
193
  const { styleguideConfig, rawConfigRest } = extractFlatConfig(rest);
194
- return Object.assign({ theme: {
194
+ const transformedConfig = Object.assign({ theme: {
195
195
  openapi: Object.assign(Object.assign(Object.assign({}, referenceDocs), rawConfig['features.openapi']), (_a = rawConfig.theme) === null || _a === void 0 ? void 0 : _a.openapi),
196
196
  mockServer: Object.assign(Object.assign({}, rawConfig['features.mockServer']), (_b = rawConfig.theme) === null || _b === void 0 ? void 0 : _b.mockServer),
197
197
  }, apis: transformApis(apis) || transformApiDefinitionsToApis(apiDefinitions), styleguide: styleguideConfig || lint }, rawConfigRest);
198
+ showDeprecationMessages(transformedConfig);
199
+ return transformedConfig;
198
200
  }
199
201
  exports.transformConfig = transformConfig;
202
+ function showDeprecationMessages(config) {
203
+ var _a, _b;
204
+ let allRules = Object.assign({}, (_a = config.styleguide) === null || _a === void 0 ? void 0 : _a.rules);
205
+ for (const api of Object.values(config.apis || {})) {
206
+ allRules = Object.assign(Object.assign({}, allRules), (_b = api === null || api === void 0 ? void 0 : api.styleguide) === null || _b === void 0 ? void 0 : _b.rules);
207
+ }
208
+ for (const ruleKey of Object.keys(allRules)) {
209
+ if (ruleKey.startsWith('assert/')) {
210
+ logger_1.logger.warn(`\nThe 'assert/' syntax in ${ruleKey} is deprecated. Update your configuration to use 'rule/' instead. Examples and more information: https://redocly.com/docs/cli/rules/configurable-rules/\n`);
211
+ }
212
+ }
213
+ }
200
214
  function getResolveConfig(resolve) {
201
215
  var _a, _b;
202
216
  return {
package/lib/lint.js CHANGED
@@ -57,12 +57,27 @@ function lintDocument(opts) {
57
57
  };
58
58
  const preprocessors = config_1.initRules(rules, config, 'preprocessors', oasVersion);
59
59
  const regularRules = config_1.initRules(rules, config, 'rules', oasVersion);
60
- const normalizedVisitors = visitors_1.normalizeVisitors([...preprocessors, ...regularRules], types);
61
- const resolvedRefMap = yield resolve_1.resolveDocument({
60
+ let resolvedRefMap = yield resolve_1.resolveDocument({
62
61
  rootDocument: document,
63
62
  rootType: types.Root,
64
63
  externalRefResolver,
65
64
  });
65
+ if (preprocessors.length > 0) {
66
+ // Make additional pass to resolve refs defined in preprocessors.
67
+ walk_1.walkDocument({
68
+ document,
69
+ rootType: types.Root,
70
+ normalizedVisitors: visitors_1.normalizeVisitors(preprocessors, types),
71
+ resolvedRefMap,
72
+ ctx,
73
+ });
74
+ resolvedRefMap = yield resolve_1.resolveDocument({
75
+ rootDocument: document,
76
+ rootType: types.Root,
77
+ externalRefResolver,
78
+ });
79
+ }
80
+ const normalizedVisitors = visitors_1.normalizeVisitors(regularRules, types);
66
81
  walk_1.walkDocument({
67
82
  document,
68
83
  rootType: types.Root,
@@ -0,0 +1,2 @@
1
+ import { Oas2Rule, Oas3Rule } from '../../visitors';
2
+ export declare const SpecStrictRefs: Oas3Rule | Oas2Rule;
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SpecStrictRefs = void 0;
4
+ const ref_utils_1 = require("../../ref-utils");
5
+ const SpecStrictRefs = () => {
6
+ const nodesToSkip = [
7
+ 'Schema',
8
+ 'Response',
9
+ 'Parameter',
10
+ 'RequestBody',
11
+ 'Example',
12
+ 'Header',
13
+ 'SecurityScheme',
14
+ 'Link',
15
+ 'Callback',
16
+ 'PathItem',
17
+ ];
18
+ return {
19
+ any(_node, { report, rawNode, rawLocation, type }) {
20
+ const shouldCheck = !nodesToSkip.includes(type.name);
21
+ if (shouldCheck && ref_utils_1.isRef(rawNode)) {
22
+ report({
23
+ message: 'Field $ref is not expected here.',
24
+ location: rawLocation.child('$ref').key(),
25
+ });
26
+ }
27
+ },
28
+ };
29
+ };
30
+ exports.SpecStrictRefs = SpecStrictRefs;
@@ -122,6 +122,7 @@ const OasSpec = () => {
122
122
  from: refLocation,
123
123
  location: propLocation,
124
124
  });
125
+ ignoreNextVisitorsOnNode();
125
126
  }
126
127
  else if (propValueType === 'array' && ((_e = propSchema.items) === null || _e === void 0 ? void 0 : _e.type)) {
127
128
  const itemsType = (_f = propSchema.items) === null || _f === void 0 ? void 0 : _f.type;
@@ -42,5 +42,6 @@ export declare const rules: {
42
42
  'response-contains-property': Oas2Rule;
43
43
  'scalar-property-missing-example': import("../../visitors").Oas3Rule | Oas2Rule;
44
44
  'required-string-property-missing-min-length': import("../../visitors").Oas3Rule;
45
+ 'spec-strict-refs': import("../../visitors").Oas3Rule | Oas2Rule;
45
46
  };
46
47
  export declare const preprocessors: {};
@@ -42,6 +42,7 @@ const response_contains_header_1 = require("../common/response-contains-header")
42
42
  const response_contains_property_1 = require("./response-contains-property");
43
43
  const scalar_property_missing_example_1 = require("../common/scalar-property-missing-example");
44
44
  const required_string_property_missing_min_length_1 = require("../common/required-string-property-missing-min-length");
45
+ const spec_strict_refs_1 = require("../common/spec-strict-refs");
45
46
  exports.rules = {
46
47
  spec: spec_1.OasSpec,
47
48
  'no-invalid-schema-examples': no_invalid_schema_examples_1.NoInvalidSchemaExamples,
@@ -85,5 +86,6 @@ exports.rules = {
85
86
  'response-contains-property': response_contains_property_1.ResponseContainsProperty,
86
87
  'scalar-property-missing-example': scalar_property_missing_example_1.ScalarPropertyMissingExample,
87
88
  'required-string-property-missing-min-length': required_string_property_missing_min_length_1.RequiredStringPropertyMissingMinLength,
89
+ 'spec-strict-refs': spec_strict_refs_1.SpecStrictRefs,
88
90
  };
89
91
  exports.preprocessors = {};
@@ -1,2 +1,2 @@
1
- import { Oas2Rule } from '../../visitors';
1
+ import type { Oas2Rule } from '../../visitors';
2
2
  export declare const RequestMimeType: Oas2Rule;
@@ -1,2 +1,2 @@
1
- import { Oas2Rule } from '../../visitors';
1
+ import type { Oas2Rule } from '../../visitors';
2
2
  export declare const ResponseMimeType: Oas2Rule;
@@ -52,6 +52,7 @@ const scalar_property_missing_example_1 = require("../common/scalar-property-mis
52
52
  const spec_components_invalid_map_name_1 = require("./spec-components-invalid-map-name");
53
53
  const operation_4xx_problem_details_rfc7807_1 = require("./operation-4xx-problem-details-rfc7807");
54
54
  const required_string_property_missing_min_length_1 = require("../common/required-string-property-missing-min-length");
55
+ const spec_strict_refs_1 = require("../common/spec-strict-refs");
55
56
  exports.rules = {
56
57
  spec: spec_1.OasSpec,
57
58
  'info-contact': info_contact_1.InfoContact,
@@ -105,5 +106,6 @@ exports.rules = {
105
106
  'scalar-property-missing-example': scalar_property_missing_example_1.ScalarPropertyMissingExample,
106
107
  'spec-components-invalid-map-name': spec_components_invalid_map_name_1.SpecComponentsInvalidMapName,
107
108
  'required-string-property-missing-min-length': required_string_property_missing_min_length_1.RequiredStringPropertyMissingMinLength,
109
+ 'spec-strict-refs': spec_strict_refs_1.SpecStrictRefs,
108
110
  };
109
111
  exports.preprocessors = {};
@@ -1,5 +1,5 @@
1
- import { Oas3Rule } from '../../visitors';
1
+ import type { Oas3Rule } from '../../visitors';
2
2
  /**
3
- * Validation according rfc7807 - https://datatracker.ietf.org/doc/html/rfc7807
3
+ * Validation according to rfc7807 - https://datatracker.ietf.org/doc/html/rfc7807
4
4
  */
5
5
  export declare const Operation4xxProblemDetailsRfc7807: Oas3Rule;
@@ -3,12 +3,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Operation4xxProblemDetailsRfc7807 = void 0;
4
4
  const utils_1 = require("../utils");
5
5
  /**
6
- * Validation according rfc7807 - https://datatracker.ietf.org/doc/html/rfc7807
6
+ * Validation according to rfc7807 - https://datatracker.ietf.org/doc/html/rfc7807
7
7
  */
8
8
  const Operation4xxProblemDetailsRfc7807 = () => {
9
9
  return {
10
10
  Response: {
11
- skip(_response, key) {
11
+ skip(_, key) {
12
12
  return !/4[Xx0-9]{2}/.test(`${key}`);
13
13
  },
14
14
  enter(response, { report, location }) {
@@ -19,7 +19,7 @@ const Operation4xxProblemDetailsRfc7807 = () => {
19
19
  });
20
20
  },
21
21
  MediaType: {
22
- skip(_response, key) {
22
+ skip(_, key) {
23
23
  return key !== 'application/problem+json';
24
24
  },
25
25
  enter(media, ctx) {
@@ -1,2 +1,2 @@
1
- import { Oas3Rule } from '../../visitors';
1
+ import type { Oas3Rule } from '../../visitors';
2
2
  export declare const RequestMimeType: Oas3Rule;
@@ -1,2 +1,2 @@
1
- import { Oas3Rule } from '../../visitors';
1
+ import type { Oas3Rule } from '../../visitors';
2
2
  export declare const ResponseMimeType: Oas3Rule;
@@ -57,11 +57,6 @@ const SpecComponentsInvalidMapName = () => {
57
57
  validateKey(key, report, location, 'callbacks');
58
58
  },
59
59
  },
60
- ExampleMap: {
61
- Example(_node, { key, report, location }) {
62
- validateKey(key, report, location, 'examples');
63
- },
64
- },
65
60
  };
66
61
  };
67
62
  exports.SpecComponentsInvalidMapName = SpecComponentsInvalidMapName;
@@ -56,6 +56,7 @@ const builtInRulesList = [
56
56
  'scalar-property-missing-example',
57
57
  'spec-components-invalid-map-name',
58
58
  'required-string-property-missing-min-length',
59
+ 'spec-strict-refs',
59
60
  ];
60
61
  const nodeTypesList = [
61
62
  'any',
@@ -196,7 +197,11 @@ const ConfigRootTheme = {
196
197
  const Rules = {
197
198
  properties: {},
198
199
  additionalProperties: (value, key) => {
199
- if (key.startsWith('assert/')) {
200
+ if (key.startsWith('rule/')) {
201
+ return 'Assert';
202
+ }
203
+ else if (key.startsWith('assert/')) {
204
+ // keep the old assert/ prefix as an alias
200
205
  return 'Assert';
201
206
  }
202
207
  else if (builtInRulesList.includes(key) || utils_1.isCustomRuleId(key)) {
package/lib/walk.d.ts CHANGED
@@ -1,10 +1,11 @@
1
- import { Referenced } from './typings/openapi';
1
+ import type { Referenced } from './typings/openapi';
2
+ import type { NormalizedOasVisitors } from './visitors';
3
+ import type { ResolvedRefMap, Document } from './resolve';
4
+ import type { NormalizedNodeType } from './types';
5
+ import type { RuleSeverity } from './config';
2
6
  import { Location } from './ref-utils';
3
- import { NormalizedOasVisitors } from './visitors';
4
- import { ResolvedRefMap, Document, ResolveError, YamlParseError, Source } from './resolve';
7
+ import { ResolveError, YamlParseError, Source } from './resolve';
5
8
  import { OasVersion } from './oas-types';
6
- import { NormalizedNodeType } from './types';
7
- import type { RuleSeverity } from './config';
8
9
  declare type NonUndefined = string | number | boolean | symbol | bigint | object | Record<string, any>;
9
10
  export declare type ResolveResult<T extends NonUndefined> = {
10
11
  node: T;
package/lib/walk.js CHANGED
@@ -2,8 +2,8 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.walkDocument = void 0;
4
4
  const ref_utils_1 = require("./ref-utils");
5
- const resolve_1 = require("./resolve");
6
5
  const utils_1 = require("./utils");
6
+ const resolve_1 = require("./resolve");
7
7
  const types_1 = require("./types");
8
8
  function collectParents(ctx) {
9
9
  var _a;
@@ -28,7 +28,7 @@ function collectParentsLocations(ctx) {
28
28
  function walkDocument(opts) {
29
29
  const { document, rootType, normalizedVisitors, resolvedRefMap, ctx } = opts;
30
30
  const seenNodesPerType = {};
31
- const seenRefs = new Set();
31
+ const ignoredNodes = new Set();
32
32
  walkNode(document.parsed, rootType, new ref_utils_1.Location(document.source, '#/'), undefined, '');
33
33
  function walkNode(node, type, location, parent, key) {
34
34
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
@@ -58,25 +58,23 @@ function walkDocument(opts) {
58
58
  if (ref_utils_1.isRef(node)) {
59
59
  const refEnterVisitors = normalizedVisitors.ref.enter;
60
60
  for (const { visit: visitor, ruleId, severity, context } of refEnterVisitors) {
61
- if (!seenRefs.has(node)) {
62
- enteredContexts.add(context);
63
- const report = reportFn.bind(undefined, ruleId, severity);
64
- visitor(node, {
65
- report,
66
- resolve,
67
- rawNode: node,
68
- rawLocation,
69
- location,
70
- type,
71
- parent,
72
- key,
73
- parentLocations: {},
74
- oasVersion: ctx.oasVersion,
75
- getVisitorData: getVisitorDataFn.bind(undefined, ruleId),
76
- }, { node: resolvedNode, location: resolvedLocation, error });
77
- if ((resolvedLocation === null || resolvedLocation === void 0 ? void 0 : resolvedLocation.source.absoluteRef) && ctx.refTypes) {
78
- ctx.refTypes.set(resolvedLocation === null || resolvedLocation === void 0 ? void 0 : resolvedLocation.source.absoluteRef, type);
79
- }
61
+ enteredContexts.add(context);
62
+ const report = reportFn.bind(undefined, ruleId, severity);
63
+ visitor(node, {
64
+ report,
65
+ resolve,
66
+ rawNode: node,
67
+ rawLocation,
68
+ location,
69
+ type,
70
+ parent,
71
+ key,
72
+ parentLocations: {},
73
+ oasVersion: ctx.oasVersion,
74
+ getVisitorData: getVisitorDataFn.bind(undefined, ruleId),
75
+ }, { node: resolvedNode, location: resolvedLocation, error });
76
+ if ((resolvedLocation === null || resolvedLocation === void 0 ? void 0 : resolvedLocation.source.absoluteRef) && ctx.refTypes) {
77
+ ctx.refTypes.set(resolvedLocation === null || resolvedLocation === void 0 ? void 0 : resolvedLocation.source.absoluteRef, type);
80
78
  }
81
79
  }
82
80
  }
@@ -88,6 +86,8 @@ function walkDocument(opts) {
88
86
  const currentEnterVisitors = anyEnterVisitors.concat(((_c = normalizedVisitors[type.name]) === null || _c === void 0 ? void 0 : _c.enter) || []);
89
87
  const activatedContexts = [];
90
88
  for (const { context, visit, skip, ruleId, severity } of currentEnterVisitors) {
89
+ if (ignoredNodes.has(currentLocation.pointer))
90
+ break;
91
91
  if (context.isSkippedLevel) {
92
92
  if (context.parent.activatedOn &&
93
93
  !context.parent.activatedOn.value.nextLevelTypeActivated &&
@@ -129,9 +129,7 @@ function walkDocument(opts) {
129
129
  if (!activatedOn.skipped) {
130
130
  visitedBySome = true;
131
131
  enteredContexts.add(context);
132
- const { ignoreNextVisitorsOnNode } = visitWithContext(visit, resolvedNode, node, context, ruleId, severity);
133
- if (ignoreNextVisitorsOnNode)
134
- break;
132
+ visitWithContext(visit, resolvedNode, node, context, ruleId, severity);
135
133
  }
136
134
  }
137
135
  }
@@ -238,7 +236,6 @@ function walkDocument(opts) {
238
236
  // returns true ignores all the next visitors on the specific node
239
237
  function visitWithContext(visit, resolvedNode, node, context, ruleId, severity) {
240
238
  const report = reportFn.bind(undefined, ruleId, severity);
241
- let ignoreNextVisitorsOnNode = false;
242
239
  visit(resolvedNode, {
243
240
  report,
244
241
  resolve,
@@ -251,23 +248,21 @@ function walkDocument(opts) {
251
248
  parentLocations: collectParentsLocations(context),
252
249
  oasVersion: ctx.oasVersion,
253
250
  ignoreNextVisitorsOnNode: () => {
254
- ignoreNextVisitorsOnNode = true;
251
+ ignoredNodes.add(currentLocation.pointer);
255
252
  },
256
253
  getVisitorData: getVisitorDataFn.bind(undefined, ruleId),
257
254
  }, collectParents(context), context);
258
- return { ignoreNextVisitorsOnNode };
259
255
  }
260
256
  function reportFn(ruleId, severity, opts) {
261
- const loc = opts.location
257
+ const normalizedLocation = opts.location
262
258
  ? Array.isArray(opts.location)
263
259
  ? opts.location
264
260
  : [opts.location]
265
261
  : [Object.assign(Object.assign({}, currentLocation), { reportOnKey: false })];
262
+ const location = normalizedLocation.map((l) => (Object.assign(Object.assign(Object.assign({}, currentLocation), { reportOnKey: false }), l)));
266
263
  const ruleSeverity = opts.forceSeverity || severity;
267
264
  if (ruleSeverity !== 'off') {
268
- ctx.problems.push(Object.assign(Object.assign({ ruleId: opts.ruleId || ruleId, severity: ruleSeverity }, opts), { suggest: opts.suggest || [], location: loc.map((loc) => {
269
- return Object.assign(Object.assign(Object.assign({}, currentLocation), { reportOnKey: false }), loc);
270
- }) }));
265
+ ctx.problems.push(Object.assign(Object.assign({ ruleId: opts.ruleId || ruleId, severity: ruleSeverity }, opts), { suggest: opts.suggest || [], location }));
271
266
  }
272
267
  }
273
268
  function getVisitorDataFn(ruleId) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@redocly/openapi-core",
3
- "version": "1.0.0-beta.126",
3
+ "version": "1.0.0-beta.128",
4
4
  "description": "",
5
5
  "main": "lib/index.js",
6
6
  "engines": {
@@ -1,88 +0,0 @@
1
- import * as path from 'path';
2
-
3
- import { Document, Source, NormalizedProblem, parseYaml, stringifyYaml } from '../src';
4
- import { StyleguideConfig, resolveStyleguideConfig, resolvePlugins } from '../src/config';
5
- import { Oas3RuleSet } from '../src/oas-types';
6
-
7
- import type { RuleConfig, Plugin, DecoratorConfig } from '../src/config';
8
-
9
- export function parseYamlToDocument(body: string, absoluteRef: string = ''): Document {
10
- return {
11
- source: new Source(absoluteRef, body),
12
- parsed: parseYaml(body, { filename: absoluteRef }),
13
- };
14
- }
15
-
16
- export function replaceSourceWithRef(results: NormalizedProblem[], cwd?: string) {
17
- const cwdRegexp = cwd ? new RegExp(cwd + path.sep, 'g') : /$^/;
18
- return results.map((r) => {
19
- const mapped = {
20
- ...r,
21
- message: r.message.replace(cwdRegexp, ''),
22
- location: r.location.map((l) => ({
23
- ...l,
24
- source: cwd ? path.relative(cwd, l.source.absoluteRef) : l.source.absoluteRef,
25
- })),
26
- };
27
- if (mapped.from) {
28
- mapped.from = {
29
- ...mapped.from,
30
- source: cwd
31
- ? path.relative(cwd, mapped.from.source.absoluteRef)
32
- : (mapped.from.source.absoluteRef as any),
33
- };
34
- }
35
- return mapped;
36
- });
37
- }
38
-
39
- export const yamlSerializer = {
40
- test: () => {
41
- return true;
42
- },
43
- print: (val: any) => {
44
- return stringifyYaml(val);
45
- },
46
- };
47
-
48
- export function makeConfigForRuleset(
49
- rules: Oas3RuleSet,
50
- plugin?: Partial<Plugin>,
51
- version: string = 'oas3'
52
- ) {
53
- const rulesConf: Record<string, RuleConfig> = {};
54
- const ruleId = 'test';
55
- Object.keys(rules).forEach((name) => {
56
- rulesConf[`${ruleId}/${name}`] = 'error';
57
- });
58
- const plugins = resolvePlugins([
59
- {
60
- ...plugin,
61
- id: ruleId,
62
- rules: { [version]: rules },
63
- },
64
- ]);
65
-
66
- return new StyleguideConfig({
67
- plugins,
68
- rules: rulesConf,
69
- });
70
- }
71
-
72
- export async function makeConfig(
73
- rules: Record<string, RuleConfig>,
74
- decorators?: Record<string, DecoratorConfig>,
75
- configPath?: string
76
- ) {
77
- return new StyleguideConfig(
78
- await resolveStyleguideConfig({
79
- styleguideConfig: {
80
- plugins: [],
81
- extends: [],
82
- rules,
83
- decorators,
84
- },
85
- }),
86
- configPath
87
- );
88
- }