@redocly/openapi-core 1.19.0 → 1.20.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.
- package/CHANGELOG.md +14 -0
- package/__tests__/utils.ts +14 -7
- package/lib/benchmark/benches/lint-with-many-rules.bench.d.ts +1 -0
- package/lib/benchmark/benches/lint-with-many-rules.bench.js +5 -1
- package/lib/benchmark/benches/lint-with-nested-rule.bench.d.ts +1 -0
- package/lib/benchmark/benches/lint-with-nested-rule.bench.js +5 -1
- package/lib/benchmark/benches/lint-with-no-rules.bench.d.ts +1 -0
- package/lib/benchmark/benches/lint-with-no-rules.bench.js +5 -1
- package/lib/benchmark/benches/lint-with-top-level-rule-report.bench.d.ts +1 -0
- package/lib/benchmark/benches/lint-with-top-level-rule-report.bench.js +17 -13
- package/lib/benchmark/benches/lint-with-top-level-rule.bench.d.ts +1 -0
- package/lib/benchmark/benches/lint-with-top-level-rule.bench.js +16 -12
- package/lib/benchmark/utils.d.ts +3 -3
- package/lib/benchmark/utils.js +3 -3
- package/lib/config/all.js +4 -1
- package/lib/config/builtIn.js +15 -20
- package/lib/config/config-resolvers.d.ts +1 -1
- package/lib/config/config-resolvers.js +67 -28
- package/lib/config/config.d.ts +3 -2
- package/lib/config/load.d.ts +1 -1
- package/lib/config/minimal.js +4 -0
- package/lib/config/recommended-strict.js +5 -1
- package/lib/config/recommended.js +5 -1
- package/lib/config/types.d.ts +9 -2
- package/lib/config/utils.d.ts +3 -1
- package/lib/config/utils.js +8 -0
- package/lib/decorators/common/filters/filter-helper.d.ts +1 -1
- package/lib/decorators/common/filters/filter-in.d.ts +1 -1
- package/lib/decorators/common/filters/filter-out.d.ts +1 -1
- package/lib/decorators/common/info-description-override.d.ts +1 -1
- package/lib/decorators/common/info-override.d.ts +1 -1
- package/lib/decorators/common/media-type-examples-override.d.ts +1 -1
- package/lib/decorators/common/operation-description-override.d.ts +1 -1
- package/lib/decorators/common/registry-dependencies.d.ts +1 -1
- package/lib/decorators/common/remove-x-internal.d.ts +1 -1
- package/lib/decorators/common/tag-description-override.d.ts +1 -1
- package/lib/decorators/oas2/index.d.ts +1 -1
- package/lib/decorators/oas3/index.d.ts +1 -1
- package/lib/format/codeframes.d.ts +1 -1
- package/lib/format/format.d.ts +1 -1
- package/lib/format/format.js +1 -1
- package/lib/js-yaml/index.d.ts +1 -1
- package/lib/lint.d.ts +1 -1
- package/lib/logger.js +2 -2
- package/lib/oas-types.d.ts +2 -2
- package/lib/redocly/domains.d.ts +1 -1
- package/lib/redocly/index.d.ts +1 -1
- package/lib/ref-utils.d.ts +2 -2
- package/lib/ref-utils.js +1 -0
- package/lib/resolve.d.ts +2 -2
- package/lib/rules/ajv.d.ts +1 -1
- package/lib/rules/arazzo/index.js +2 -0
- package/lib/rules/async2/channels-kebab-case.d.ts +1 -1
- package/lib/rules/async2/index.js +2 -0
- package/lib/rules/async2/no-channel-trailing-slash.d.ts +1 -1
- package/lib/rules/async3/channels-kebab-case.d.ts +1 -1
- package/lib/rules/async3/index.js +2 -0
- package/lib/rules/async3/no-channel-trailing-slash.d.ts +1 -1
- package/lib/rules/common/assertions/asserts.d.ts +2 -2
- package/lib/rules/common/assertions/index.d.ts +1 -2
- package/lib/rules/common/assertions/utils.d.ts +1 -1
- package/lib/rules/common/info-contact.d.ts +1 -1
- package/lib/rules/common/info-license-strict.d.ts +2 -0
- package/lib/rules/common/info-license-strict.js +26 -0
- package/lib/rules/common/info-license-url.d.ts +1 -1
- package/lib/rules/common/info-license.d.ts +1 -1
- package/lib/rules/common/no-ambiguous-paths.d.ts +1 -1
- package/lib/rules/common/no-enum-type-mismatch.d.ts +1 -1
- package/lib/rules/common/no-http-verbs-in-paths.d.ts +1 -1
- package/lib/rules/common/no-identical-paths.d.ts +1 -1
- package/lib/rules/common/no-path-trailing-slash.d.ts +1 -1
- package/lib/rules/common/no-required-schema-properties-undefined.d.ts +1 -1
- package/lib/rules/common/operation-2xx-response.d.ts +1 -1
- package/lib/rules/common/operation-4xx-response.d.ts +1 -1
- package/lib/rules/common/operation-description.d.ts +1 -1
- package/lib/rules/common/operation-operationId-unique.d.ts +1 -1
- package/lib/rules/common/operation-operationId-url-safe.d.ts +1 -1
- package/lib/rules/common/operation-operationId-url-safe.js +1 -0
- package/lib/rules/common/operation-operationId.d.ts +1 -1
- package/lib/rules/common/operation-parameters-unique.d.ts +1 -1
- package/lib/rules/common/operation-singular-tag.d.ts +1 -1
- package/lib/rules/common/operation-summary.d.ts +1 -1
- package/lib/rules/common/operation-tag-defined.d.ts +1 -1
- package/lib/rules/common/parameter-description.d.ts +1 -1
- package/lib/rules/common/path-declaration-must-exist.d.ts +1 -1
- package/lib/rules/common/path-excludes-patterns.d.ts +1 -1
- package/lib/rules/common/path-http-verbs-order.d.ts +1 -1
- package/lib/rules/common/path-not-include-query.d.ts +1 -1
- package/lib/rules/common/path-params-defined.d.ts +1 -1
- package/lib/rules/common/path-segment-plural.d.ts +1 -1
- package/lib/rules/common/paths-kebab-case.d.ts +1 -1
- package/lib/rules/common/required-string-property-missing-min-length.d.ts +1 -1
- package/lib/rules/common/response-contains-header.d.ts +1 -1
- package/lib/rules/common/security-defined.d.ts +1 -1
- package/lib/rules/common/spec-strict-refs.d.ts +1 -1
- package/lib/rules/common/tag-description.d.ts +1 -1
- package/lib/rules/common/tags-alphabetical.d.ts +1 -1
- package/lib/rules/no-unresolved-refs.d.ts +3 -3
- package/lib/rules/oas2/boolean-parameter-prefixes.d.ts +1 -1
- package/lib/rules/oas2/index.d.ts +1 -1
- package/lib/rules/oas2/index.js +2 -0
- package/lib/rules/oas2/response-contains-property.d.ts +1 -1
- package/lib/rules/oas3/array-parameter-serialization.d.ts +1 -1
- package/lib/rules/oas3/boolean-parameter-prefixes.d.ts +1 -1
- package/lib/rules/oas3/component-name-unique.d.ts +1 -1
- package/lib/rules/oas3/index.d.ts +1 -1
- package/lib/rules/oas3/index.js +2 -0
- package/lib/rules/oas3/no-empty-servers.d.ts +1 -1
- package/lib/rules/oas3/no-example-value-and-externalValue.d.ts +1 -1
- package/lib/rules/oas3/no-invalid-media-type-examples.d.ts +1 -1
- package/lib/rules/oas3/no-server-example.com.d.ts +1 -1
- package/lib/rules/oas3/no-server-example.com.js +1 -0
- package/lib/rules/oas3/no-server-trailing-slash.d.ts +1 -1
- package/lib/rules/oas3/no-server-variables-empty-enum.d.ts +1 -1
- package/lib/rules/oas3/no-undefined-server-variable.d.ts +1 -1
- package/lib/rules/oas3/no-unused-components.d.ts +1 -1
- package/lib/rules/oas3/response-contains-property.d.ts +1 -1
- package/lib/rules/oas3/spec-components-invalid-map-name.d.ts +1 -1
- package/lib/rules/other/stats.d.ts +3 -3
- package/lib/rules/other/stats.js +5 -3
- package/lib/rules/spot/parameters-no-body-inside-in.d.ts +2 -0
- package/lib/rules/spot/parameters-no-body-inside-in.js +18 -0
- package/lib/rules/utils.d.ts +4 -2
- package/lib/rules/utils.js +27 -1
- package/lib/types/arazzo.d.ts +1 -2275
- package/lib/types/arazzo.js +246 -309
- package/lib/types/asyncapi2.d.ts +1 -1
- package/lib/types/asyncapi2.js +3 -1
- package/lib/types/asyncapi3.d.ts +1 -1
- package/lib/types/json-schema-adapter.d.ts +1 -1
- package/lib/types/oas3.d.ts +4 -0
- package/lib/types/oas3.js +9 -9
- package/lib/types/oas3_1.d.ts +3 -0
- package/lib/types/oas3_1.js +8 -8
- package/lib/types/redocly-yaml.d.ts +6 -6
- package/lib/types/redocly-yaml.js +4 -1
- package/lib/typings/arazzo.d.ts +145 -27
- package/lib/typings/common.d.ts +1 -1
- package/lib/typings/swagger.d.ts +2 -2
- package/lib/visitors.d.ts +18 -1
- package/lib/walk.d.ts +3 -3
- package/package.json +2 -2
- package/src/__tests__/bundle.test.ts +4 -4
- package/src/__tests__/lint.test.ts +29 -21
- package/src/__tests__/walk.test.ts +25 -25
- package/src/benchmark/benches/lint-with-many-rules.bench.ts +7 -1
- package/src/benchmark/benches/lint-with-nested-rule.bench.ts +7 -1
- package/src/benchmark/benches/lint-with-no-rules.bench.ts +8 -1
- package/src/benchmark/benches/lint-with-top-level-rule-report.bench.ts +18 -13
- package/src/benchmark/benches/lint-with-top-level-rule.bench.ts +17 -11
- package/src/benchmark/fork.js +4 -0
- package/src/benchmark/utils.ts +6 -5
- package/src/bundle.ts +2 -1
- package/src/config/__tests__/__snapshots__/config-resolvers.test.ts.snap +10 -2
- package/src/config/__tests__/config-resolvers.test.ts +82 -0
- package/src/config/__tests__/fixtures/resolve-config/local-config-with-commonjs-export-function.yaml +2 -0
- package/src/config/__tests__/fixtures/resolve-config/local-config-with-esm.yaml +2 -0
- package/src/config/__tests__/fixtures/resolve-config/plugin-esm.mjs +10 -0
- package/src/config/__tests__/fixtures/resolve-config/plugin-with-export-function.cjs +10 -0
- package/src/config/__tests__/resolve-plugins.test.ts +4 -1
- package/src/config/all.ts +4 -1
- package/src/config/builtIn.ts +5 -10
- package/src/config/config-resolvers.ts +78 -23
- package/src/config/config.ts +7 -8
- package/src/config/load.ts +2 -2
- package/src/config/minimal.ts +4 -0
- package/src/config/recommended-strict.ts +5 -1
- package/src/config/recommended.ts +5 -1
- package/src/config/types.ts +19 -3
- package/src/config/utils.ts +13 -2
- package/src/decorators/__tests__/filter-in.test.ts +29 -26
- package/src/decorators/__tests__/filter-out.test.ts +32 -23
- package/src/decorators/__tests__/media-type-examples-override.test.ts +45 -45
- package/src/decorators/__tests__/remove-x-internal.test.ts +8 -5
- package/src/decorators/common/filters/filter-helper.ts +2 -1
- package/src/decorators/common/filters/filter-in.ts +2 -1
- package/src/decorators/common/filters/filter-out.ts +2 -1
- package/src/decorators/common/info-description-override.ts +3 -2
- package/src/decorators/common/info-override.ts +1 -1
- package/src/decorators/common/media-type-examples-override.ts +4 -3
- package/src/decorators/common/operation-description-override.ts +5 -4
- package/src/decorators/common/registry-dependencies.ts +2 -2
- package/src/decorators/common/remove-x-internal.ts +3 -2
- package/src/decorators/common/tag-description-override.ts +3 -2
- package/src/decorators/oas2/__tests__/remove-unused-components.test.ts +3 -3
- package/src/decorators/oas2/index.ts +2 -1
- package/src/decorators/oas2/remove-unused-components.ts +1 -1
- package/src/decorators/oas3/__tests__/remove-unused-components.test.ts +4 -4
- package/src/decorators/oas3/index.ts +2 -1
- package/src/decorators/oas3/remove-unused-components.ts +1 -1
- package/src/format/codeframes.ts +2 -1
- package/src/format/format.ts +9 -4
- package/src/js-yaml/index.ts +3 -1
- package/src/lint.ts +2 -1
- package/src/logger.ts +2 -2
- package/src/oas-types.ts +14 -13
- package/src/redocly/domains.ts +1 -1
- package/src/redocly/index.ts +3 -3
- package/src/redocly/registry-api.ts +5 -3
- package/src/ref-utils.ts +4 -2
- package/src/resolve.ts +6 -4
- package/src/rules/__tests__/no-unresolved-refs.test.ts +21 -7
- package/src/rules/ajv.ts +2 -1
- package/src/rules/arazzo/__tests__/parameters-no-body-inside-in.test.ts +76 -0
- package/src/rules/arazzo/index.ts +5 -2
- package/src/rules/async2/__tests__/channels-kebab-case.test.ts +9 -5
- package/src/rules/async2/__tests__/no-channel-trailing-slash.test.ts +3 -3
- package/src/rules/async2/channels-kebab-case.ts +2 -2
- package/src/rules/async2/index.ts +4 -1
- package/src/rules/async2/no-channel-trailing-slash.ts +2 -2
- package/src/rules/async3/__tests__/channels-kebab-case.test.ts +9 -5
- package/src/rules/async3/__tests__/no-channel-trailing-slash.test.ts +3 -3
- package/src/rules/async3/channels-kebab-case.ts +3 -3
- package/src/rules/async3/index.ts +4 -1
- package/src/rules/async3/no-channel-trailing-slash.ts +3 -3
- package/src/rules/common/__tests__/info-license-strict.test.ts +141 -0
- package/src/rules/common/__tests__/info-license.test.ts +2 -2
- package/src/rules/common/__tests__/license-url.test.ts +2 -2
- package/src/rules/common/__tests__/no-ambiguous-paths.test.ts +1 -1
- package/src/rules/common/__tests__/no-enum-type-mismatch.test.ts +5 -5
- package/src/rules/common/__tests__/no-identical-paths.test.ts +1 -1
- package/src/rules/common/__tests__/no-invalid-parameter-examples.test.ts +1 -1
- package/src/rules/common/__tests__/no-invalid-schema-examples.test.ts +1 -1
- package/src/rules/common/__tests__/no-path-trailing-slash.test.ts +4 -4
- package/src/rules/common/__tests__/no-required-schema-properties-undefined.test.ts +11 -11
- package/src/rules/common/__tests__/operation-2xx-response.test.ts +8 -6
- package/src/rules/common/__tests__/operation-4xx-response.test.ts +9 -7
- package/src/rules/common/__tests__/operation-operationId-unique.test.ts +2 -2
- package/src/rules/common/__tests__/operation-operationId-url-safe.test.ts +1 -1
- package/src/rules/common/__tests__/operation-parameters-unique.test.ts +4 -4
- package/src/rules/common/__tests__/operation-singular-tag.test.ts +2 -2
- package/src/rules/common/__tests__/path-http-verbs-order.test.ts +2 -2
- package/src/rules/common/__tests__/path-not-include-query.test.ts +2 -2
- package/src/rules/common/__tests__/path-params-defined.test.ts +5 -5
- package/src/rules/common/__tests__/paths-kebab-case.test.ts +6 -4
- package/src/rules/common/__tests__/scalar-property-missing-example.test.ts +8 -8
- package/src/rules/common/__tests__/security-defined.test.ts +14 -8
- package/src/rules/common/__tests__/spec-strict-refs.test.ts +1 -1
- package/src/rules/common/__tests__/spec.test.ts +10 -10
- package/src/rules/common/__tests__/tag-description.test.ts +2 -2
- package/src/rules/common/__tests__/tags-alphabetical.test.ts +6 -4
- package/src/rules/common/assertions/asserts.ts +5 -9
- package/src/rules/common/assertions/index.ts +1 -2
- package/src/rules/common/assertions/utils.ts +4 -2
- package/src/rules/common/info-contact.ts +2 -1
- package/src/rules/common/info-license-strict.ts +24 -0
- package/src/rules/common/info-license-url.ts +2 -1
- package/src/rules/common/info-license.ts +2 -1
- package/src/rules/common/no-ambiguous-paths.ts +4 -4
- package/src/rules/common/no-enum-type-mismatch.ts +5 -4
- package/src/rules/common/no-http-verbs-in-paths.ts +5 -4
- package/src/rules/common/no-identical-paths.ts +4 -4
- package/src/rules/common/no-invalid-parameter-examples.ts +3 -2
- package/src/rules/common/no-path-trailing-slash.ts +2 -2
- package/src/rules/common/no-required-schema-properties-undefined.ts +5 -4
- package/src/rules/common/operation-2xx-response.ts +3 -2
- package/src/rules/common/operation-4xx-response.ts +3 -2
- package/src/rules/common/operation-description.ts +5 -4
- package/src/rules/common/operation-operationId-unique.ts +4 -4
- package/src/rules/common/operation-operationId-url-safe.ts +5 -4
- package/src/rules/common/operation-operationId.ts +5 -4
- package/src/rules/common/operation-parameters-unique.ts +4 -4
- package/src/rules/common/operation-singular-tag.ts +4 -4
- package/src/rules/common/operation-summary.ts +5 -4
- package/src/rules/common/operation-tag-defined.ts +4 -4
- package/src/rules/common/parameter-description.ts +4 -4
- package/src/rules/common/path-declaration-must-exist.ts +2 -2
- package/src/rules/common/path-excludes-patterns.ts +4 -4
- package/src/rules/common/path-http-verbs-order.ts +4 -4
- package/src/rules/common/path-not-include-query.ts +2 -2
- package/src/rules/common/path-params-defined.ts +4 -4
- package/src/rules/common/path-segment-plural.ts +3 -2
- package/src/rules/common/paths-kebab-case.ts +2 -2
- package/src/rules/common/required-string-property-missing-min-length.ts +4 -4
- package/src/rules/common/response-contains-header.ts +5 -4
- package/src/rules/common/scalar-property-missing-example.ts +2 -1
- package/src/rules/common/security-defined.ts +5 -5
- package/src/rules/common/spec-strict-refs.ts +2 -1
- package/src/rules/common/spec.ts +3 -2
- package/src/rules/common/tag-description.ts +2 -1
- package/src/rules/common/tags-alphabetical.ts +4 -4
- package/src/rules/no-unresolved-refs.ts +4 -3
- package/src/rules/oas2/__tests__/boolean-parameter-prefixes.test.ts +7 -5
- package/src/rules/oas2/__tests__/response-contains-header.test.ts +14 -8
- package/src/rules/oas2/__tests__/response-contains-property.test.ts +14 -8
- package/src/rules/oas2/__tests__/spec/referenceableScalars.test.ts +3 -1
- package/src/rules/oas2/boolean-parameter-prefixes.ts +1 -1
- package/src/rules/oas2/index.ts +4 -2
- package/src/rules/oas2/request-mime-type.ts +2 -1
- package/src/rules/oas2/response-contains-property.ts +3 -2
- package/src/rules/oas2/response-mime-type.ts +2 -1
- package/src/rules/oas3/__tests__/array-parameter-serialization.test.ts +18 -6
- package/src/rules/oas3/__tests__/boolean-parameter-prefixes.test.ts +7 -5
- package/src/rules/oas3/__tests__/no-empty-enum-servers.com.test.ts +6 -6
- package/src/rules/oas3/__tests__/no-example-value-and-externalValue.test.ts +2 -2
- package/src/rules/oas3/__tests__/no-invalid-media-type-examples.test.ts +34 -24
- package/src/rules/oas3/__tests__/no-server-example.com.test.ts +3 -3
- package/src/rules/oas3/__tests__/no-server-trailing-slash.test.ts +3 -3
- package/src/rules/oas3/__tests__/no-unused-components.test.ts +1 -1
- package/src/rules/oas3/__tests__/operation-4xx-problem-details-rfc7807.test.ts +3 -3
- package/src/rules/oas3/__tests__/response-contains-header.test.ts +34 -22
- package/src/rules/oas3/__tests__/response-contains-property.test.ts +34 -20
- package/src/rules/oas3/__tests__/spec/spec.test.ts +12 -3
- package/src/rules/oas3/__tests__/spec-components-invalid-map-name.test.ts +9 -3
- package/src/rules/oas3/__tests__/utils/lint-document-for-test.ts +1 -1
- package/src/rules/oas3/array-parameter-serialization.ts +3 -2
- package/src/rules/oas3/boolean-parameter-prefixes.ts +1 -1
- package/src/rules/oas3/component-name-unique.ts +3 -3
- package/src/rules/oas3/index.ts +3 -1
- package/src/rules/oas3/no-empty-servers.ts +1 -1
- package/src/rules/oas3/no-example-value-and-externalValue.ts +1 -1
- package/src/rules/oas3/no-invalid-media-type-examples.ts +6 -4
- package/src/rules/oas3/no-server-example.com.ts +2 -1
- package/src/rules/oas3/no-server-trailing-slash.ts +1 -1
- package/src/rules/oas3/no-server-variables-empty-enum.ts +2 -2
- package/src/rules/oas3/no-undefined-server-variable.ts +1 -1
- package/src/rules/oas3/no-unused-components.ts +2 -2
- package/src/rules/oas3/operation-4xx-problem-details-rfc7807.ts +2 -1
- package/src/rules/oas3/request-mime-type.ts +2 -1
- package/src/rules/oas3/response-contains-property.ts +3 -2
- package/src/rules/oas3/response-mime-type.ts +2 -1
- package/src/rules/oas3/spec-components-invalid-map-name.ts +3 -3
- package/src/rules/other/stats.ts +8 -6
- package/src/rules/spot/parameters-no-body-inside-in.ts +17 -0
- package/src/rules/utils.ts +41 -4
- package/src/types/arazzo.ts +257 -334
- package/src/types/asyncapi2.ts +4 -1
- package/src/types/asyncapi3.ts +3 -1
- package/src/types/json-schema-adapter.ts +2 -2
- package/src/types/oas3.ts +4 -4
- package/src/types/oas3_1.ts +3 -3
- package/src/types/redocly-yaml.ts +7 -4
- package/src/typings/arazzo.ts +169 -41
- package/src/typings/common.ts +1 -0
- package/src/typings/swagger.ts +2 -2
- package/src/visitors.ts +40 -1
- package/src/walk.ts +3 -3
- package/tsconfig.tsbuildinfo +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# @redocly/openapi-core
|
|
2
2
|
|
|
3
|
+
## 1.20.1
|
|
4
|
+
|
|
5
|
+
## 1.20.0
|
|
6
|
+
|
|
7
|
+
### Minor Changes
|
|
8
|
+
|
|
9
|
+
- Added support for ESM plugins and importing of plugins directly from npm package: `@vendor/package/plugin.js` instead of `./node_modules/@vendor/package/plugin.js`.
|
|
10
|
+
- Added `info-license-strict` rule as a replacement of the `info-license-url` to support the OpenAPI 3.1 changes to allow identifier or URL license details.
|
|
11
|
+
- Changed plugins format to export a function instead of an object for compatibility with other Redocly products. The backwards compatibility with an old format of plugins is maintained.
|
|
12
|
+
|
|
13
|
+
### Patch Changes
|
|
14
|
+
|
|
15
|
+
- Updated @redocly/config to v0.9.0.
|
|
16
|
+
|
|
3
17
|
## 1.19.0
|
|
4
18
|
|
|
5
19
|
### Minor Changes
|
package/__tests__/utils.ts
CHANGED
|
@@ -45,7 +45,7 @@ export const yamlSerializer = {
|
|
|
45
45
|
},
|
|
46
46
|
};
|
|
47
47
|
|
|
48
|
-
export function makeConfigForRuleset(
|
|
48
|
+
export async function makeConfigForRuleset(
|
|
49
49
|
rules: Oas3RuleSet,
|
|
50
50
|
plugin?: Partial<Plugin>,
|
|
51
51
|
version: string = 'oas3'
|
|
@@ -55,7 +55,7 @@ export function makeConfigForRuleset(
|
|
|
55
55
|
Object.keys(rules).forEach((name) => {
|
|
56
56
|
rulesConf[`${ruleId}/${name}`] = 'error';
|
|
57
57
|
});
|
|
58
|
-
const plugins = resolvePlugins([
|
|
58
|
+
const plugins = await resolvePlugins([
|
|
59
59
|
{
|
|
60
60
|
...plugin,
|
|
61
61
|
id: ruleId,
|
|
@@ -69,17 +69,24 @@ export function makeConfigForRuleset(
|
|
|
69
69
|
});
|
|
70
70
|
}
|
|
71
71
|
|
|
72
|
-
export async function makeConfig(
|
|
73
|
-
rules
|
|
74
|
-
decorators
|
|
75
|
-
configPath
|
|
76
|
-
|
|
72
|
+
export async function makeConfig({
|
|
73
|
+
rules,
|
|
74
|
+
decorators,
|
|
75
|
+
configPath,
|
|
76
|
+
arazzoRules,
|
|
77
|
+
}: {
|
|
78
|
+
rules: Record<string, RuleConfig>;
|
|
79
|
+
decorators?: Record<string, DecoratorConfig>;
|
|
80
|
+
configPath?: string;
|
|
81
|
+
arazzoRules?: Record<string, RuleConfig>;
|
|
82
|
+
}) {
|
|
77
83
|
return new StyleguideConfig(
|
|
78
84
|
await resolveStyleguideConfig({
|
|
79
85
|
styleguideConfig: {
|
|
80
86
|
plugins: [],
|
|
81
87
|
extends: [],
|
|
82
88
|
rules,
|
|
89
|
+
arazzoRules,
|
|
83
90
|
decorators,
|
|
84
91
|
},
|
|
85
92
|
}),
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.count = exports.name = void 0;
|
|
4
|
+
exports.setupAsync = setupAsync;
|
|
4
5
|
exports.measureAsync = measureAsync;
|
|
5
6
|
const fs_1 = require("fs");
|
|
6
7
|
const path_1 = require("path");
|
|
@@ -24,7 +25,10 @@ for (let i = 0; i < 50; i++) {
|
|
|
24
25
|
};
|
|
25
26
|
};
|
|
26
27
|
}
|
|
27
|
-
|
|
28
|
+
let config;
|
|
29
|
+
async function setupAsync() {
|
|
30
|
+
config = await (0, utils_1.makeConfigForRuleset)(ruleset);
|
|
31
|
+
}
|
|
28
32
|
function measureAsync() {
|
|
29
33
|
return (0, lint_1.lintDocument)({
|
|
30
34
|
externalRefResolver: new resolve_1.BaseResolver(),
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.count = exports.name = void 0;
|
|
4
|
+
exports.setupAsync = setupAsync;
|
|
4
5
|
exports.measureAsync = measureAsync;
|
|
5
6
|
const fs_1 = require("fs");
|
|
6
7
|
const path_1 = require("path");
|
|
@@ -30,7 +31,10 @@ const visitor = {
|
|
|
30
31
|
};
|
|
31
32
|
},
|
|
32
33
|
};
|
|
33
|
-
|
|
34
|
+
let config;
|
|
35
|
+
async function setupAsync() {
|
|
36
|
+
config = await (0, utils_1.makeConfigForRuleset)(visitor);
|
|
37
|
+
}
|
|
34
38
|
function measureAsync() {
|
|
35
39
|
return (0, lint_1.lintDocument)({
|
|
36
40
|
externalRefResolver: new resolve_1.BaseResolver(),
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.count = exports.name = void 0;
|
|
4
|
+
exports.setupAsync = setupAsync;
|
|
4
5
|
exports.measureAsync = measureAsync;
|
|
5
6
|
const fs_1 = require("fs");
|
|
6
7
|
const path_1 = require("path");
|
|
@@ -11,7 +12,10 @@ exports.name = 'Validate with no rules';
|
|
|
11
12
|
exports.count = 10;
|
|
12
13
|
const rebillyDefinitionRef = (0, path_1.resolve)((0, path_1.join)(__dirname, 'rebilly.yaml'));
|
|
13
14
|
const rebillyDocument = (0, utils_1.parseYamlToDocument)((0, fs_1.readFileSync)(rebillyDefinitionRef, 'utf-8'), rebillyDefinitionRef);
|
|
14
|
-
|
|
15
|
+
let config;
|
|
16
|
+
async function setupAsync() {
|
|
17
|
+
config = await (0, utils_1.makeConfigForRuleset)({});
|
|
18
|
+
}
|
|
15
19
|
function measureAsync() {
|
|
16
20
|
return (0, lint_1.lintDocument)({
|
|
17
21
|
externalRefResolver: new resolve_1.BaseResolver(),
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.count = exports.name = void 0;
|
|
4
|
+
exports.setupAsync = setupAsync;
|
|
4
5
|
exports.measureAsync = measureAsync;
|
|
5
6
|
const fs_1 = require("fs");
|
|
6
7
|
const path_1 = require("path");
|
|
@@ -11,19 +12,22 @@ exports.name = 'Validate with single top-level rule and report';
|
|
|
11
12
|
exports.count = 10;
|
|
12
13
|
const rebillyDefinitionRef = (0, path_1.resolve)((0, path_1.join)(__dirname, 'rebilly.yaml'));
|
|
13
14
|
const rebillyDocument = (0, utils_1.parseYamlToDocument)((0, fs_1.readFileSync)(rebillyDefinitionRef, 'utf-8'), rebillyDefinitionRef);
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
}
|
|
15
|
+
let config;
|
|
16
|
+
async function setupAsync() {
|
|
17
|
+
config = await (0, utils_1.makeConfigForRuleset)({
|
|
18
|
+
test: () => {
|
|
19
|
+
return {
|
|
20
|
+
Schema(schema, ctx) {
|
|
21
|
+
if (schema.type === 'number') {
|
|
22
|
+
ctx.report({
|
|
23
|
+
message: 'type number is not allowed',
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
}
|
|
27
31
|
function measureAsync() {
|
|
28
32
|
return (0, lint_1.lintDocument)({
|
|
29
33
|
externalRefResolver: new resolve_1.BaseResolver(),
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.count = exports.name = void 0;
|
|
4
|
+
exports.setupAsync = setupAsync;
|
|
4
5
|
exports.measureAsync = measureAsync;
|
|
5
6
|
const fs_1 = require("fs");
|
|
6
7
|
const path_1 = require("path");
|
|
@@ -11,18 +12,21 @@ exports.name = 'Validate with single top-level rule';
|
|
|
11
12
|
exports.count = 10;
|
|
12
13
|
const rebillyDefinitionRef = (0, path_1.resolve)((0, path_1.join)(__dirname, 'rebilly.yaml'));
|
|
13
14
|
const rebillyDocument = (0, utils_1.parseYamlToDocument)((0, fs_1.readFileSync)(rebillyDefinitionRef, 'utf-8'), rebillyDefinitionRef);
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
}
|
|
15
|
+
let config;
|
|
16
|
+
async function setupAsync() {
|
|
17
|
+
config = await (0, utils_1.makeConfigForRuleset)({
|
|
18
|
+
test: () => {
|
|
19
|
+
let count = 0;
|
|
20
|
+
return {
|
|
21
|
+
Schema() {
|
|
22
|
+
count++;
|
|
23
|
+
if (count === -1)
|
|
24
|
+
throw new Error('Disable optimization');
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
},
|
|
28
|
+
});
|
|
29
|
+
}
|
|
26
30
|
function measureAsync() {
|
|
27
31
|
return (0, lint_1.lintDocument)({
|
|
28
32
|
externalRefResolver: new resolve_1.BaseResolver(),
|
package/lib/benchmark/utils.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Document } from '../resolve';
|
|
2
|
-
import { Oas3RuleSet } from '../oas-types';
|
|
3
1
|
import { StyleguideConfig } from '../config';
|
|
2
|
+
import type { Document } from '../resolve';
|
|
3
|
+
import type { Oas3RuleSet } from '../oas-types';
|
|
4
4
|
import type { Plugin } from '../config/types';
|
|
5
5
|
export declare function parseYamlToDocument(body: string, absoluteRef?: string): Document;
|
|
6
|
-
export declare function makeConfigForRuleset(rules: Oas3RuleSet, plugin?: Partial<Plugin>): StyleguideConfig
|
|
6
|
+
export declare function makeConfigForRuleset(rules: Oas3RuleSet, plugin?: Partial<Plugin>): Promise<StyleguideConfig>;
|
package/lib/benchmark/utils.js
CHANGED
|
@@ -11,20 +11,20 @@ function parseYamlToDocument(body, absoluteRef = '') {
|
|
|
11
11
|
parsed: (0, js_yaml_1.parseYaml)(body, { filename: absoluteRef }),
|
|
12
12
|
};
|
|
13
13
|
}
|
|
14
|
-
function makeConfigForRuleset(rules, plugin) {
|
|
14
|
+
async function makeConfigForRuleset(rules, plugin) {
|
|
15
15
|
const rulesConf = {};
|
|
16
16
|
const ruleId = 'test';
|
|
17
17
|
Object.keys(rules).forEach((name) => {
|
|
18
18
|
rulesConf[`${ruleId}/${name}`] = 'error';
|
|
19
19
|
});
|
|
20
20
|
const extendConfigs = [
|
|
21
|
-
(0, config_1.resolvePlugins)([
|
|
21
|
+
(await (0, config_1.resolvePlugins)([
|
|
22
22
|
{
|
|
23
23
|
...plugin,
|
|
24
24
|
id: ruleId,
|
|
25
25
|
rules: { oas3: rules },
|
|
26
26
|
},
|
|
27
|
-
]),
|
|
27
|
+
])),
|
|
28
28
|
];
|
|
29
29
|
if (rules) {
|
|
30
30
|
extendConfigs.push({ rules });
|
package/lib/config/all.js
CHANGED
|
@@ -5,6 +5,7 @@ const all = {
|
|
|
5
5
|
'info-contact': 'error',
|
|
6
6
|
'info-license': 'error',
|
|
7
7
|
'info-license-url': 'error',
|
|
8
|
+
'info-license-strict': 'error',
|
|
8
9
|
'tag-description': 'error',
|
|
9
10
|
'tags-alphabetical': 'error',
|
|
10
11
|
'parameter-description': 'error',
|
|
@@ -108,6 +109,7 @@ const all = {
|
|
|
108
109
|
async2Rules: {
|
|
109
110
|
spec: 'error',
|
|
110
111
|
'info-contact': 'error',
|
|
112
|
+
'info-license-strict': 'error',
|
|
111
113
|
'operation-operationId': 'error',
|
|
112
114
|
'tag-description': 'error',
|
|
113
115
|
'tags-alphabetical': 'error',
|
|
@@ -117,12 +119,13 @@ const all = {
|
|
|
117
119
|
async3Rules: {
|
|
118
120
|
spec: 'error',
|
|
119
121
|
'info-contact': 'error',
|
|
122
|
+
'info-license-strict': 'error',
|
|
120
123
|
'operation-operationId': 'error',
|
|
121
124
|
'tag-description': 'error',
|
|
122
125
|
'tags-alphabetical': 'error',
|
|
123
126
|
'channels-kebab-case': 'error',
|
|
124
127
|
'no-channel-trailing-slash': 'error',
|
|
125
128
|
},
|
|
126
|
-
arazzoRules: { spec: 'error' },
|
|
129
|
+
arazzoRules: { spec: 'error', 'parameters-no-body-inside-in': 'off' },
|
|
127
130
|
};
|
|
128
131
|
exports.default = all;
|
package/lib/config/builtIn.js
CHANGED
|
@@ -10,16 +10,11 @@ const oas2_1 = require("../rules/oas2");
|
|
|
10
10
|
const async2_1 = require("../rules/async2");
|
|
11
11
|
const async3_1 = require("../rules/async3");
|
|
12
12
|
const arazzo_1 = require("../rules/arazzo");
|
|
13
|
-
const oas3_2 = require("../
|
|
14
|
-
const oas2_2 = require("../
|
|
15
|
-
const async2_2 = require("../
|
|
16
|
-
const async3_2 = require("../
|
|
17
|
-
const arazzo_2 = require("../
|
|
18
|
-
const oas3_3 = require("../decorators/oas3");
|
|
19
|
-
const oas2_3 = require("../decorators/oas2");
|
|
20
|
-
const async2_3 = require("../decorators/async2");
|
|
21
|
-
const async3_3 = require("../decorators/async3");
|
|
22
|
-
const arazzo_3 = require("../decorators/arazzo");
|
|
13
|
+
const oas3_2 = require("../decorators/oas3");
|
|
14
|
+
const oas2_2 = require("../decorators/oas2");
|
|
15
|
+
const async2_2 = require("../decorators/async2");
|
|
16
|
+
const async3_2 = require("../decorators/async3");
|
|
17
|
+
const arazzo_2 = require("../decorators/arazzo");
|
|
23
18
|
exports.builtInConfigs = {
|
|
24
19
|
recommended: recommended_1.default,
|
|
25
20
|
'recommended-strict': recommended_strict_1.default,
|
|
@@ -39,18 +34,18 @@ exports.defaultPlugin = {
|
|
|
39
34
|
arazzo: arazzo_1.rules,
|
|
40
35
|
},
|
|
41
36
|
preprocessors: {
|
|
42
|
-
oas3:
|
|
43
|
-
oas2:
|
|
44
|
-
async2:
|
|
45
|
-
async3:
|
|
46
|
-
arazzo:
|
|
37
|
+
oas3: oas3_1.preprocessors,
|
|
38
|
+
oas2: oas2_1.preprocessors,
|
|
39
|
+
async2: async2_1.preprocessors,
|
|
40
|
+
async3: async3_1.preprocessors,
|
|
41
|
+
arazzo: arazzo_1.preprocessors,
|
|
47
42
|
},
|
|
48
43
|
decorators: {
|
|
49
|
-
oas3:
|
|
50
|
-
oas2:
|
|
51
|
-
async2:
|
|
52
|
-
async3:
|
|
53
|
-
arazzo:
|
|
44
|
+
oas3: oas3_2.decorators,
|
|
45
|
+
oas2: oas2_2.decorators,
|
|
46
|
+
async2: async2_2.decorators,
|
|
47
|
+
async3: async3_2.decorators,
|
|
48
|
+
arazzo: arazzo_2.decorators,
|
|
54
49
|
},
|
|
55
50
|
configs: exports.builtInConfigs,
|
|
56
51
|
};
|
|
@@ -14,7 +14,7 @@ export declare function resolveConfig({ rawConfig, configPath, externalRefResolv
|
|
|
14
14
|
configPath?: string;
|
|
15
15
|
externalRefResolver?: BaseResolver;
|
|
16
16
|
}): Promise<Config>;
|
|
17
|
-
export declare function resolvePlugins(plugins: (string | Plugin)[] | null, configPath?: string): Plugin[]
|
|
17
|
+
export declare function resolvePlugins(plugins: (string | Plugin)[] | null, configPath?: string): Promise<Plugin[]>;
|
|
18
18
|
export declare function resolveApis({ rawConfig, configPath, resolver, }: {
|
|
19
19
|
rawConfig: RawConfig;
|
|
20
20
|
configPath?: string;
|
|
@@ -7,18 +7,21 @@ exports.resolveApis = resolveApis;
|
|
|
7
7
|
exports.resolveStyleguideConfig = resolveStyleguideConfig;
|
|
8
8
|
exports.resolvePreset = resolvePreset;
|
|
9
9
|
const path = require("path");
|
|
10
|
+
const fs_1 = require("fs");
|
|
10
11
|
const ref_utils_1 = require("../ref-utils");
|
|
11
12
|
const utils_1 = require("../utils");
|
|
12
13
|
const resolve_1 = require("../resolve");
|
|
13
14
|
const builtIn_1 = require("./builtIn");
|
|
14
15
|
const utils_2 = require("./utils");
|
|
15
16
|
const env_1 = require("../env");
|
|
16
|
-
const utils_3 = require("../utils");
|
|
17
17
|
const config_1 = require("./config");
|
|
18
18
|
const logger_1 = require("../logger");
|
|
19
19
|
const asserts_1 = require("../rules/common/assertions/asserts");
|
|
20
20
|
const types_1 = require("../types");
|
|
21
21
|
const redocly_yaml_1 = require("../types/redocly-yaml");
|
|
22
|
+
const DEFAULT_PROJECT_PLUGIN_PATHS = ['@theme/plugin.js', '@theme/plugin.cjs', '@theme/plugin.mjs'];
|
|
23
|
+
// Workaround for dynamic imports being transpiled to require by Typescript: https://github.com/microsoft/TypeScript/issues/43329#issuecomment-811606238
|
|
24
|
+
const _importDynamic = new Function('modulePath', 'return import(modulePath)');
|
|
22
25
|
async function resolveConfigFileAndRefs({ configPath, externalRefResolver = new resolve_1.BaseResolver(), base = null, }) {
|
|
23
26
|
if (!configPath) {
|
|
24
27
|
throw new Error('Reference to a config is required.\n');
|
|
@@ -36,7 +39,7 @@ async function resolveConfigFileAndRefs({ configPath, externalRefResolver = new
|
|
|
36
39
|
return { document, resolvedRefMap };
|
|
37
40
|
}
|
|
38
41
|
async function resolveConfig({ rawConfig, configPath, externalRefResolver, }) {
|
|
39
|
-
if (rawConfig.styleguide?.extends?.some(
|
|
42
|
+
if (rawConfig.styleguide?.extends?.some(utils_1.isNotString)) {
|
|
40
43
|
throw new Error(`Error configuration format not detected in extends value must contain strings`);
|
|
41
44
|
}
|
|
42
45
|
const resolver = externalRefResolver ?? new resolve_1.BaseResolver((0, utils_2.getResolveConfig)(rawConfig.resolve));
|
|
@@ -56,46 +59,82 @@ async function resolveConfig({ rawConfig, configPath, externalRefResolver, }) {
|
|
|
56
59
|
styleguide,
|
|
57
60
|
}, configPath);
|
|
58
61
|
}
|
|
59
|
-
function
|
|
62
|
+
function getDefaultPluginPath(configPath) {
|
|
63
|
+
for (const pluginPath of DEFAULT_PROJECT_PLUGIN_PATHS) {
|
|
64
|
+
const absolutePluginPath = path.resolve(path.dirname(configPath), pluginPath);
|
|
65
|
+
if ((0, fs_1.existsSync)(absolutePluginPath)) {
|
|
66
|
+
return pluginPath;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return undefined;
|
|
70
|
+
}
|
|
71
|
+
async function resolvePlugins(plugins, configPath = '') {
|
|
60
72
|
if (!plugins)
|
|
61
73
|
return [];
|
|
62
74
|
// TODO: implement or reuse Resolver approach so it will work in node and browser envs
|
|
63
|
-
const requireFunc = (plugin) => {
|
|
64
|
-
if (env_1.isBrowser && (0,
|
|
75
|
+
const requireFunc = async (plugin) => {
|
|
76
|
+
if (env_1.isBrowser && (0, utils_1.isString)(plugin)) {
|
|
65
77
|
logger_1.logger.error(`Cannot load ${plugin}. Plugins aren't supported in browser yet.`);
|
|
66
78
|
return undefined;
|
|
67
79
|
}
|
|
68
|
-
if ((0,
|
|
80
|
+
if ((0, utils_1.isString)(plugin)) {
|
|
69
81
|
try {
|
|
70
|
-
const
|
|
82
|
+
const maybeAbsolutePluginPath = path.resolve(path.dirname(configPath), plugin);
|
|
83
|
+
const absolutePluginPath = (0, fs_1.existsSync)(maybeAbsolutePluginPath)
|
|
84
|
+
? maybeAbsolutePluginPath
|
|
85
|
+
: // For plugins imported from packages specifically
|
|
86
|
+
require.resolve(plugin);
|
|
71
87
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
72
88
|
// @ts-ignore
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
89
|
+
if (typeof __webpack_require__ === 'function') {
|
|
90
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
91
|
+
// @ts-ignore
|
|
92
|
+
return __non_webpack_require__(absolutePluginPath);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
// you can import both cjs and mjs
|
|
96
|
+
const mod = await _importDynamic(absolutePluginPath);
|
|
97
|
+
return mod.default || mod;
|
|
98
|
+
}
|
|
78
99
|
}
|
|
79
100
|
catch (e) {
|
|
80
|
-
|
|
81
|
-
throw e;
|
|
82
|
-
}
|
|
83
|
-
throw new Error(`Failed to load plugin "${plugin}". Please provide a valid path`);
|
|
101
|
+
throw new Error(`Failed to load plugin "${plugin}": ${e.message}\n\n${e.stack}`);
|
|
84
102
|
}
|
|
85
103
|
}
|
|
86
104
|
return plugin;
|
|
87
105
|
};
|
|
88
106
|
const seenPluginIds = new Map();
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
107
|
+
/**
|
|
108
|
+
* Include the default plugin automatically if it's not in configuration
|
|
109
|
+
*/
|
|
110
|
+
const defaultPluginPath = getDefaultPluginPath(configPath);
|
|
111
|
+
if (defaultPluginPath) {
|
|
112
|
+
plugins.push(defaultPluginPath);
|
|
113
|
+
}
|
|
114
|
+
const resolvedPlugins = new Set();
|
|
115
|
+
const instances = await Promise.all(plugins.map(async (p) => {
|
|
116
|
+
if ((0, utils_1.isString)(p)) {
|
|
117
|
+
if ((0, ref_utils_1.isAbsoluteUrl)(p)) {
|
|
118
|
+
throw new Error(logger_1.colorize.red(`We don't support remote plugins yet.`));
|
|
119
|
+
}
|
|
120
|
+
if (resolvedPlugins.has(p)) {
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
resolvedPlugins.add(p);
|
|
93
124
|
}
|
|
94
|
-
|
|
95
|
-
const
|
|
125
|
+
const requiredPlugin = await requireFunc(p);
|
|
126
|
+
const pluginCreatorOptions = { contentDir: path.dirname(configPath) };
|
|
127
|
+
const pluginModule = (0, utils_2.isDeprecatedPluginFormat)(requiredPlugin)
|
|
128
|
+
? requiredPlugin
|
|
129
|
+
: (0, utils_2.isCommonJsPlugin)(requiredPlugin)
|
|
130
|
+
? await requiredPlugin(pluginCreatorOptions)
|
|
131
|
+
: await requiredPlugin?.default?.(pluginCreatorOptions);
|
|
96
132
|
if (!pluginModule) {
|
|
97
133
|
return;
|
|
98
134
|
}
|
|
135
|
+
if ((0, utils_1.isString)(p) && pluginModule.id && (0, utils_2.isDeprecatedPluginFormat)(requiredPlugin)) {
|
|
136
|
+
logger_1.logger.info(`Deprecated plugin format detected: ${pluginModule.id}\n`);
|
|
137
|
+
}
|
|
99
138
|
const id = pluginModule.id;
|
|
100
139
|
if (typeof id !== 'string') {
|
|
101
140
|
throw new Error(logger_1.colorize.red(`Plugin must define \`id\` property in ${logger_1.colorize.blue(p.toString())}.`));
|
|
@@ -185,14 +224,14 @@ function resolvePlugins(plugins, configPath = '') {
|
|
|
185
224
|
plugin.assertions = pluginModule.assertions;
|
|
186
225
|
}
|
|
187
226
|
return plugin;
|
|
188
|
-
})
|
|
189
|
-
|
|
227
|
+
}));
|
|
228
|
+
return instances.filter(utils_1.isDefined);
|
|
190
229
|
}
|
|
191
230
|
async function resolveApis({ rawConfig, configPath = '', resolver, }) {
|
|
192
231
|
const { apis = {}, styleguide: styleguideConfig = {} } = rawConfig;
|
|
193
232
|
const resolvedApis = {};
|
|
194
233
|
for (const [apiName, apiContent] of Object.entries(apis || {})) {
|
|
195
|
-
if (apiContent.styleguide?.extends?.some(
|
|
234
|
+
if (apiContent.styleguide?.extends?.some(utils_1.isNotString)) {
|
|
196
235
|
throw new Error(`Error configuration format not detected in extends value must contain strings`);
|
|
197
236
|
}
|
|
198
237
|
const rawStyleguideConfig = getMergedRawStyleguideConfig(styleguideConfig, apiContent.styleguide);
|
|
@@ -209,9 +248,9 @@ async function resolveAndMergeNestedStyleguideConfig({ styleguideConfig, configP
|
|
|
209
248
|
if (parentConfigPaths.includes(configPath)) {
|
|
210
249
|
throw new Error(`Circular dependency in config file: "${configPath}"`);
|
|
211
250
|
}
|
|
212
|
-
const plugins = (0, utils_2.getUniquePlugins)(resolvePlugins([...(styleguideConfig?.plugins || []), builtIn_1.defaultPlugin], configPath));
|
|
251
|
+
const plugins = (0, utils_2.getUniquePlugins)(await resolvePlugins([...(styleguideConfig?.plugins || []), builtIn_1.defaultPlugin], configPath));
|
|
213
252
|
const pluginPaths = styleguideConfig?.plugins
|
|
214
|
-
?.filter(
|
|
253
|
+
?.filter(utils_1.isString)
|
|
215
254
|
.map((p) => path.resolve(path.dirname(configPath), p));
|
|
216
255
|
const resolvedConfigPath = (0, ref_utils_1.isAbsoluteUrl)(configPath)
|
|
217
256
|
? configPath
|
|
@@ -367,7 +406,7 @@ function groupStyleguideAssertionRules({ rules, plugins, }) {
|
|
|
367
406
|
return transformedRules;
|
|
368
407
|
}
|
|
369
408
|
function registerCustomAssertions(plugins, assertion) {
|
|
370
|
-
for (const field of (0,
|
|
409
|
+
for (const field of (0, utils_1.keysOf)(assertion.assertions)) {
|
|
371
410
|
const [pluginId, fn] = field.split('/');
|
|
372
411
|
if (!pluginId || !fn)
|
|
373
412
|
continue;
|
package/lib/config/config.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { SpecVersion, SpecMajorVersion } from '../oas-types';
|
|
2
|
+
import type { NormalizedProblem } from '../walk';
|
|
3
|
+
import type { Oas2RuleSet, Oas3RuleSet, Async3RuleSet, ArazzoRuleSet } from '../oas-types';
|
|
3
4
|
import type { NodeType } from '../types';
|
|
4
5
|
import type { DecoratorConfig, Plugin, PreprocessorConfig, Region, ResolveConfig, ResolvedApi, ResolvedConfig, ResolvedStyleguideConfig, RuleConfig, RuleSettings, Telemetry, ThemeRawConfig } from './types';
|
|
5
6
|
export declare const IGNORE_FILE = ".redocly.lint-ignore.yaml";
|
package/lib/config/load.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Config } from './config';
|
|
2
1
|
import { BaseResolver } from '../resolve';
|
|
2
|
+
import type { Config } from './config';
|
|
3
3
|
import type { Document, ResolvedRefMap } from '../resolve';
|
|
4
4
|
import type { RegionalTokenWithValidity } from '../redocly/redocly-client-types';
|
|
5
5
|
import type { RawConfig, RawUniversalConfig, Region } from './types';
|
package/lib/config/minimal.js
CHANGED
|
@@ -5,6 +5,7 @@ const minimal = {
|
|
|
5
5
|
'info-contact': 'off',
|
|
6
6
|
'info-license': 'off',
|
|
7
7
|
'info-license-url': 'off',
|
|
8
|
+
'info-license-strict': 'off',
|
|
8
9
|
'tag-description': 'warn',
|
|
9
10
|
'tags-alphabetical': 'off',
|
|
10
11
|
'parameter-description': 'off',
|
|
@@ -90,6 +91,7 @@ const minimal = {
|
|
|
90
91
|
async2Rules: {
|
|
91
92
|
spec: 'error',
|
|
92
93
|
'info-contact': 'off',
|
|
94
|
+
'info-license-strict': 'off',
|
|
93
95
|
'operation-operationId': 'warn',
|
|
94
96
|
'tag-description': 'warn',
|
|
95
97
|
'tags-alphabetical': 'off',
|
|
@@ -99,6 +101,7 @@ const minimal = {
|
|
|
99
101
|
async3Rules: {
|
|
100
102
|
spec: 'error',
|
|
101
103
|
'info-contact': 'off',
|
|
104
|
+
'info-license-strict': 'off',
|
|
102
105
|
'operation-operationId': 'warn',
|
|
103
106
|
'tag-description': 'warn',
|
|
104
107
|
'tags-alphabetical': 'off',
|
|
@@ -107,6 +110,7 @@ const minimal = {
|
|
|
107
110
|
},
|
|
108
111
|
arazzoRules: {
|
|
109
112
|
spec: 'error',
|
|
113
|
+
'parameters-no-body-inside-in': 'off',
|
|
110
114
|
},
|
|
111
115
|
};
|
|
112
116
|
exports.default = minimal;
|
|
@@ -4,7 +4,8 @@ const recommendedStrict = {
|
|
|
4
4
|
rules: {
|
|
5
5
|
'info-contact': 'off',
|
|
6
6
|
'info-license': 'error',
|
|
7
|
-
'info-license-url': '
|
|
7
|
+
'info-license-url': 'off',
|
|
8
|
+
'info-license-strict': 'error',
|
|
8
9
|
'tag-description': 'error',
|
|
9
10
|
'tags-alphabetical': 'off',
|
|
10
11
|
'parameter-description': 'off',
|
|
@@ -90,6 +91,7 @@ const recommendedStrict = {
|
|
|
90
91
|
async2Rules: {
|
|
91
92
|
spec: 'error',
|
|
92
93
|
'info-contact': 'off',
|
|
94
|
+
'info-license-strict': 'error',
|
|
93
95
|
'operation-operationId': 'error',
|
|
94
96
|
'tag-description': 'error',
|
|
95
97
|
'tags-alphabetical': 'off',
|
|
@@ -99,6 +101,7 @@ const recommendedStrict = {
|
|
|
99
101
|
async3Rules: {
|
|
100
102
|
spec: 'error',
|
|
101
103
|
'info-contact': 'off',
|
|
104
|
+
'info-license-strict': 'error',
|
|
102
105
|
'operation-operationId': 'error',
|
|
103
106
|
'tag-description': 'error',
|
|
104
107
|
'tags-alphabetical': 'off',
|
|
@@ -107,6 +110,7 @@ const recommendedStrict = {
|
|
|
107
110
|
},
|
|
108
111
|
arazzoRules: {
|
|
109
112
|
spec: 'error',
|
|
113
|
+
'parameters-no-body-inside-in': 'off',
|
|
110
114
|
},
|
|
111
115
|
};
|
|
112
116
|
exports.default = recommendedStrict;
|