@redocly/openapi-core 1.19.0 → 1.20.0
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 +12 -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 +66 -24
- 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 +77 -19
- 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,17 @@
|
|
|
1
1
|
# @redocly/openapi-core
|
|
2
2
|
|
|
3
|
+
## 1.20.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 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`.
|
|
8
|
+
- 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.
|
|
9
|
+
- 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.
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- Updated @redocly/config to v0.9.0.
|
|
14
|
+
|
|
3
15
|
## 1.19.0
|
|
4
16
|
|
|
5
17
|
### 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,25 +59,43 @@ 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
101
|
if (e instanceof SyntaxError) {
|
|
@@ -86,16 +107,37 @@ function resolvePlugins(plugins, configPath = '') {
|
|
|
86
107
|
return plugin;
|
|
87
108
|
};
|
|
88
109
|
const seenPluginIds = new Map();
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
110
|
+
/**
|
|
111
|
+
* Include the default plugin automatically if it's not in configuration
|
|
112
|
+
*/
|
|
113
|
+
const defaultPluginPath = getDefaultPluginPath(configPath);
|
|
114
|
+
if (defaultPluginPath) {
|
|
115
|
+
plugins.push(defaultPluginPath);
|
|
116
|
+
}
|
|
117
|
+
const resolvedPlugins = new Set();
|
|
118
|
+
const instances = await Promise.all(plugins.map(async (p) => {
|
|
119
|
+
if ((0, utils_1.isString)(p)) {
|
|
120
|
+
if ((0, ref_utils_1.isAbsoluteUrl)(p)) {
|
|
121
|
+
throw new Error(logger_1.colorize.red(`We don't support remote plugins yet.`));
|
|
122
|
+
}
|
|
123
|
+
if (resolvedPlugins.has(p)) {
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
resolvedPlugins.add(p);
|
|
93
127
|
}
|
|
94
|
-
|
|
95
|
-
const
|
|
128
|
+
const requiredPlugin = await requireFunc(p);
|
|
129
|
+
const pluginCreatorOptions = { contentDir: path.dirname(configPath) };
|
|
130
|
+
const pluginModule = (0, utils_2.isDeprecatedPluginFormat)(requiredPlugin)
|
|
131
|
+
? requiredPlugin
|
|
132
|
+
: (0, utils_2.isCommonJsPlugin)(requiredPlugin)
|
|
133
|
+
? await requiredPlugin(pluginCreatorOptions)
|
|
134
|
+
: await requiredPlugin?.default?.(pluginCreatorOptions);
|
|
96
135
|
if (!pluginModule) {
|
|
97
136
|
return;
|
|
98
137
|
}
|
|
138
|
+
if ((0, utils_1.isString)(p) && pluginModule.id && (0, utils_2.isDeprecatedPluginFormat)(requiredPlugin)) {
|
|
139
|
+
logger_1.logger.info(`Deprecated plugin format detected: ${pluginModule.id}\n`);
|
|
140
|
+
}
|
|
99
141
|
const id = pluginModule.id;
|
|
100
142
|
if (typeof id !== 'string') {
|
|
101
143
|
throw new Error(logger_1.colorize.red(`Plugin must define \`id\` property in ${logger_1.colorize.blue(p.toString())}.`));
|
|
@@ -185,14 +227,14 @@ function resolvePlugins(plugins, configPath = '') {
|
|
|
185
227
|
plugin.assertions = pluginModule.assertions;
|
|
186
228
|
}
|
|
187
229
|
return plugin;
|
|
188
|
-
})
|
|
189
|
-
|
|
230
|
+
}));
|
|
231
|
+
return instances.filter(utils_1.isDefined);
|
|
190
232
|
}
|
|
191
233
|
async function resolveApis({ rawConfig, configPath = '', resolver, }) {
|
|
192
234
|
const { apis = {}, styleguide: styleguideConfig = {} } = rawConfig;
|
|
193
235
|
const resolvedApis = {};
|
|
194
236
|
for (const [apiName, apiContent] of Object.entries(apis || {})) {
|
|
195
|
-
if (apiContent.styleguide?.extends?.some(
|
|
237
|
+
if (apiContent.styleguide?.extends?.some(utils_1.isNotString)) {
|
|
196
238
|
throw new Error(`Error configuration format not detected in extends value must contain strings`);
|
|
197
239
|
}
|
|
198
240
|
const rawStyleguideConfig = getMergedRawStyleguideConfig(styleguideConfig, apiContent.styleguide);
|
|
@@ -209,9 +251,9 @@ async function resolveAndMergeNestedStyleguideConfig({ styleguideConfig, configP
|
|
|
209
251
|
if (parentConfigPaths.includes(configPath)) {
|
|
210
252
|
throw new Error(`Circular dependency in config file: "${configPath}"`);
|
|
211
253
|
}
|
|
212
|
-
const plugins = (0, utils_2.getUniquePlugins)(resolvePlugins([...(styleguideConfig?.plugins || []), builtIn_1.defaultPlugin], configPath));
|
|
254
|
+
const plugins = (0, utils_2.getUniquePlugins)(await resolvePlugins([...(styleguideConfig?.plugins || []), builtIn_1.defaultPlugin], configPath));
|
|
213
255
|
const pluginPaths = styleguideConfig?.plugins
|
|
214
|
-
?.filter(
|
|
256
|
+
?.filter(utils_1.isString)
|
|
215
257
|
.map((p) => path.resolve(path.dirname(configPath), p));
|
|
216
258
|
const resolvedConfigPath = (0, ref_utils_1.isAbsoluteUrl)(configPath)
|
|
217
259
|
? configPath
|
|
@@ -367,7 +409,7 @@ function groupStyleguideAssertionRules({ rules, plugins, }) {
|
|
|
367
409
|
return transformedRules;
|
|
368
410
|
}
|
|
369
411
|
function registerCustomAssertions(plugins, assertion) {
|
|
370
|
-
for (const field of (0,
|
|
412
|
+
for (const field of (0, utils_1.keysOf)(assertion.assertions)) {
|
|
371
413
|
const [pluginId, fn] = field.split('/');
|
|
372
414
|
if (!pluginId || !fn)
|
|
373
415
|
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;
|