@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
|
@@ -53,7 +53,7 @@ describe('walk order', () => {
|
|
|
53
53
|
await lintDocument({
|
|
54
54
|
externalRefResolver: new BaseResolver(),
|
|
55
55
|
document,
|
|
56
|
-
config: makeConfigForRuleset(testRuleSet),
|
|
56
|
+
config: await makeConfigForRuleset(testRuleSet),
|
|
57
57
|
});
|
|
58
58
|
|
|
59
59
|
expect(testRuleSet.test).toBeCalledTimes(1);
|
|
@@ -100,12 +100,12 @@ describe('walk order', () => {
|
|
|
100
100
|
const document = parseYamlToDocument(
|
|
101
101
|
outdent`
|
|
102
102
|
openapi: 3.0.0
|
|
103
|
-
servers:
|
|
103
|
+
servers:
|
|
104
104
|
- url: http://{test}.url
|
|
105
105
|
variables:
|
|
106
106
|
test: test
|
|
107
|
-
paths:
|
|
108
|
-
/test-path:
|
|
107
|
+
paths:
|
|
108
|
+
/test-path:
|
|
109
109
|
get:
|
|
110
110
|
responses:
|
|
111
111
|
200:
|
|
@@ -121,7 +121,7 @@ describe('walk order', () => {
|
|
|
121
121
|
await lintDocument({
|
|
122
122
|
externalRefResolver: new BaseResolver(),
|
|
123
123
|
document,
|
|
124
|
-
config: makeConfigForRuleset(testRuleSet),
|
|
124
|
+
config: await makeConfigForRuleset(testRuleSet),
|
|
125
125
|
});
|
|
126
126
|
|
|
127
127
|
expect(testRuleSet.test).toBeCalledTimes(1);
|
|
@@ -184,7 +184,7 @@ describe('walk order', () => {
|
|
|
184
184
|
await lintDocument({
|
|
185
185
|
externalRefResolver: new BaseResolver(),
|
|
186
186
|
document,
|
|
187
|
-
config: makeConfigForRuleset(testRuleSet),
|
|
187
|
+
config: await makeConfigForRuleset(testRuleSet),
|
|
188
188
|
});
|
|
189
189
|
|
|
190
190
|
expect(calls).toMatchInlineSnapshot(`
|
|
@@ -264,7 +264,7 @@ describe('walk order', () => {
|
|
|
264
264
|
await lintDocument({
|
|
265
265
|
externalRefResolver: new BaseResolver(),
|
|
266
266
|
document,
|
|
267
|
-
config: makeConfigForRuleset(testRuleSet, undefined, 'oas2'),
|
|
267
|
+
config: await makeConfigForRuleset(testRuleSet, undefined, 'oas2'),
|
|
268
268
|
});
|
|
269
269
|
|
|
270
270
|
expect(calls).toMatchInlineSnapshot(`
|
|
@@ -345,7 +345,7 @@ describe('walk order', () => {
|
|
|
345
345
|
await lintDocument({
|
|
346
346
|
externalRefResolver: new BaseResolver(),
|
|
347
347
|
document,
|
|
348
|
-
config: makeConfigForRuleset(testRuleSet),
|
|
348
|
+
config: await makeConfigForRuleset(testRuleSet),
|
|
349
349
|
});
|
|
350
350
|
|
|
351
351
|
expect(calls).toMatchInlineSnapshot(`
|
|
@@ -417,7 +417,7 @@ describe('walk order', () => {
|
|
|
417
417
|
await lintDocument({
|
|
418
418
|
externalRefResolver: new BaseResolver(),
|
|
419
419
|
document,
|
|
420
|
-
config: makeConfigForRuleset(testRuleSet),
|
|
420
|
+
config: await makeConfigForRuleset(testRuleSet),
|
|
421
421
|
});
|
|
422
422
|
|
|
423
423
|
expect(calls).toMatchInlineSnapshot(`
|
|
@@ -489,7 +489,7 @@ describe('walk order', () => {
|
|
|
489
489
|
await lintDocument({
|
|
490
490
|
externalRefResolver: new BaseResolver(),
|
|
491
491
|
document,
|
|
492
|
-
config: makeConfigForRuleset(testRuleSet),
|
|
492
|
+
config: await makeConfigForRuleset(testRuleSet),
|
|
493
493
|
});
|
|
494
494
|
|
|
495
495
|
expect(calls).toMatchInlineSnapshot(`
|
|
@@ -556,7 +556,7 @@ describe('walk order', () => {
|
|
|
556
556
|
await lintDocument({
|
|
557
557
|
externalRefResolver: new BaseResolver(),
|
|
558
558
|
document,
|
|
559
|
-
config: makeConfigForRuleset(testRuleSet),
|
|
559
|
+
config: await makeConfigForRuleset(testRuleSet),
|
|
560
560
|
});
|
|
561
561
|
|
|
562
562
|
expect(calls).toMatchInlineSnapshot(`
|
|
@@ -610,7 +610,7 @@ describe('walk order', () => {
|
|
|
610
610
|
await lintDocument({
|
|
611
611
|
externalRefResolver: new BaseResolver(),
|
|
612
612
|
document,
|
|
613
|
-
config: makeConfigForRuleset(testRuleSet),
|
|
613
|
+
config: await makeConfigForRuleset(testRuleSet),
|
|
614
614
|
});
|
|
615
615
|
|
|
616
616
|
expect(calls).toMatchInlineSnapshot(`
|
|
@@ -666,7 +666,7 @@ describe('walk order', () => {
|
|
|
666
666
|
await lintDocument({
|
|
667
667
|
externalRefResolver: new BaseResolver(),
|
|
668
668
|
document,
|
|
669
|
-
config: makeConfigForRuleset(testRuleSet),
|
|
669
|
+
config: await makeConfigForRuleset(testRuleSet),
|
|
670
670
|
});
|
|
671
671
|
|
|
672
672
|
expect(calls).toMatchInlineSnapshot(`
|
|
@@ -708,7 +708,7 @@ describe('walk order', () => {
|
|
|
708
708
|
await lintDocument({
|
|
709
709
|
externalRefResolver: new BaseResolver(),
|
|
710
710
|
document,
|
|
711
|
-
config: makeConfigForRuleset(testRuleSet),
|
|
711
|
+
config: await makeConfigForRuleset(testRuleSet),
|
|
712
712
|
});
|
|
713
713
|
|
|
714
714
|
expect(calls).toMatchInlineSnapshot(`
|
|
@@ -763,7 +763,7 @@ describe('walk order', () => {
|
|
|
763
763
|
await lintDocument({
|
|
764
764
|
externalRefResolver: new BaseResolver(),
|
|
765
765
|
document,
|
|
766
|
-
config: makeConfigForRuleset(testRuleSet),
|
|
766
|
+
config: await makeConfigForRuleset(testRuleSet),
|
|
767
767
|
});
|
|
768
768
|
|
|
769
769
|
expect(calls).toMatchInlineSnapshot(`
|
|
@@ -849,7 +849,7 @@ describe('walk order', () => {
|
|
|
849
849
|
await lintDocument({
|
|
850
850
|
externalRefResolver: new BaseResolver(),
|
|
851
851
|
document,
|
|
852
|
-
config: makeConfigForRuleset(testRuleSet),
|
|
852
|
+
config: await makeConfigForRuleset(testRuleSet),
|
|
853
853
|
});
|
|
854
854
|
|
|
855
855
|
expect(calls).toMatchInlineSnapshot(`
|
|
@@ -928,7 +928,7 @@ describe('walk order', () => {
|
|
|
928
928
|
await lintDocument({
|
|
929
929
|
externalRefResolver: new BaseResolver(),
|
|
930
930
|
document,
|
|
931
|
-
config: makeConfigForRuleset(testRuleSet),
|
|
931
|
+
config: await makeConfigForRuleset(testRuleSet),
|
|
932
932
|
});
|
|
933
933
|
|
|
934
934
|
expect(calls).toMatchInlineSnapshot(`
|
|
@@ -1000,7 +1000,7 @@ describe('walk order', () => {
|
|
|
1000
1000
|
await lintDocument({
|
|
1001
1001
|
externalRefResolver: new BaseResolver(),
|
|
1002
1002
|
document,
|
|
1003
|
-
config: makeConfigForRuleset(testRuleSet),
|
|
1003
|
+
config: await makeConfigForRuleset(testRuleSet),
|
|
1004
1004
|
});
|
|
1005
1005
|
|
|
1006
1006
|
expect(calls).toMatchInlineSnapshot(`
|
|
@@ -1044,7 +1044,7 @@ describe('walk order', () => {
|
|
|
1044
1044
|
await lintDocument({
|
|
1045
1045
|
externalRefResolver: new BaseResolver(),
|
|
1046
1046
|
document,
|
|
1047
|
-
config: makeConfigForRuleset(testRuleSet),
|
|
1047
|
+
config: await makeConfigForRuleset(testRuleSet),
|
|
1048
1048
|
});
|
|
1049
1049
|
|
|
1050
1050
|
expect(calls).toMatchInlineSnapshot(`
|
|
@@ -1109,7 +1109,7 @@ describe('walk order', () => {
|
|
|
1109
1109
|
await lintDocument({
|
|
1110
1110
|
externalRefResolver: new BaseResolver(),
|
|
1111
1111
|
document,
|
|
1112
|
-
config: makeConfigForRuleset(testRuleSet),
|
|
1112
|
+
config: await makeConfigForRuleset(testRuleSet),
|
|
1113
1113
|
});
|
|
1114
1114
|
|
|
1115
1115
|
expect(calls).toMatchInlineSnapshot(`
|
|
@@ -1197,7 +1197,7 @@ describe('context.report', () => {
|
|
|
1197
1197
|
const results = await lintDocument({
|
|
1198
1198
|
externalRefResolver: new BaseResolver(),
|
|
1199
1199
|
document,
|
|
1200
|
-
config: makeConfigForRuleset(testRuleSet),
|
|
1200
|
+
config: await makeConfigForRuleset(testRuleSet),
|
|
1201
1201
|
});
|
|
1202
1202
|
|
|
1203
1203
|
expect(results).toHaveLength(3);
|
|
@@ -1277,7 +1277,7 @@ describe('context.report', () => {
|
|
|
1277
1277
|
const results = await lintDocument({
|
|
1278
1278
|
externalRefResolver: new BaseResolver(),
|
|
1279
1279
|
document,
|
|
1280
|
-
config: makeConfigForRuleset(testRuleSet),
|
|
1280
|
+
config: await makeConfigForRuleset(testRuleSet),
|
|
1281
1281
|
});
|
|
1282
1282
|
|
|
1283
1283
|
expect(results).toHaveLength(4);
|
|
@@ -1385,7 +1385,7 @@ describe('context.resolve', () => {
|
|
|
1385
1385
|
await lintDocument({
|
|
1386
1386
|
externalRefResolver: new BaseResolver(),
|
|
1387
1387
|
document,
|
|
1388
|
-
config: makeConfigForRuleset(testRuleSet),
|
|
1388
|
+
config: await makeConfigForRuleset(testRuleSet),
|
|
1389
1389
|
});
|
|
1390
1390
|
});
|
|
1391
1391
|
});
|
|
@@ -1434,7 +1434,7 @@ describe('type extensions', () => {
|
|
|
1434
1434
|
await lintDocument({
|
|
1435
1435
|
externalRefResolver: new BaseResolver(),
|
|
1436
1436
|
document,
|
|
1437
|
-
config: makeConfigForRuleset(testRuleSet, {
|
|
1437
|
+
config: await makeConfigForRuleset(testRuleSet, {
|
|
1438
1438
|
typeExtension: {
|
|
1439
1439
|
oas3(types, version) {
|
|
1440
1440
|
expect(version).toEqual(oas);
|
|
@@ -1528,7 +1528,7 @@ describe('ignoreNextRules', () => {
|
|
|
1528
1528
|
await lintDocument({
|
|
1529
1529
|
externalRefResolver: new BaseResolver(),
|
|
1530
1530
|
document,
|
|
1531
|
-
config: makeConfigForRuleset(testRuleSet),
|
|
1531
|
+
config: await makeConfigForRuleset(testRuleSet),
|
|
1532
1532
|
});
|
|
1533
1533
|
|
|
1534
1534
|
expect(calls).toMatchInlineSnapshot(`
|
|
@@ -4,6 +4,8 @@ import { lintDocument } from '../../lint';
|
|
|
4
4
|
import { BaseResolver } from '../../resolve';
|
|
5
5
|
import { parseYamlToDocument, makeConfigForRuleset } from '../utils';
|
|
6
6
|
|
|
7
|
+
import type { StyleguideConfig } from '../../config';
|
|
8
|
+
|
|
7
9
|
export const name = 'Validate with 50 top-level rules';
|
|
8
10
|
export const count = 10;
|
|
9
11
|
const rebillyDefinitionRef = pathResolve(pathJoin(__dirname, 'rebilly.yaml'));
|
|
@@ -25,7 +27,11 @@ for (let i = 0; i < 50; i++) {
|
|
|
25
27
|
};
|
|
26
28
|
}
|
|
27
29
|
|
|
28
|
-
|
|
30
|
+
let config: StyleguideConfig;
|
|
31
|
+
export async function setupAsync() {
|
|
32
|
+
config = await makeConfigForRuleset(ruleset);
|
|
33
|
+
}
|
|
34
|
+
|
|
29
35
|
export function measureAsync() {
|
|
30
36
|
return lintDocument({
|
|
31
37
|
externalRefResolver: new BaseResolver(),
|
|
@@ -4,6 +4,8 @@ import { lintDocument } from '../../lint';
|
|
|
4
4
|
import { BaseResolver } from '../../resolve';
|
|
5
5
|
import { parseYamlToDocument, makeConfigForRuleset } from '../utils';
|
|
6
6
|
|
|
7
|
+
import type { StyleguideConfig } from '../../config';
|
|
8
|
+
|
|
7
9
|
export const name = 'Validate with single nested rule';
|
|
8
10
|
export const count = 10;
|
|
9
11
|
const rebillyDefinitionRef = pathResolve(pathJoin(__dirname, 'rebilly.yaml'));
|
|
@@ -29,7 +31,11 @@ const visitor = {
|
|
|
29
31
|
};
|
|
30
32
|
},
|
|
31
33
|
};
|
|
32
|
-
|
|
34
|
+
let config: StyleguideConfig;
|
|
35
|
+
export async function setupAsync() {
|
|
36
|
+
config = await makeConfigForRuleset(visitor);
|
|
37
|
+
}
|
|
38
|
+
|
|
33
39
|
export function measureAsync() {
|
|
34
40
|
return lintDocument({
|
|
35
41
|
externalRefResolver: new BaseResolver(),
|
|
@@ -3,6 +3,9 @@ import { join as pathJoin, resolve as pathResolve } from 'path';
|
|
|
3
3
|
import { lintDocument } from '../../lint';
|
|
4
4
|
import { BaseResolver } from '../../resolve';
|
|
5
5
|
import { parseYamlToDocument, makeConfigForRuleset } from '../utils';
|
|
6
|
+
|
|
7
|
+
import type { StyleguideConfig } from '../../config';
|
|
8
|
+
|
|
6
9
|
export const name = 'Validate with no rules';
|
|
7
10
|
export const count = 10;
|
|
8
11
|
const rebillyDefinitionRef = pathResolve(pathJoin(__dirname, 'rebilly.yaml'));
|
|
@@ -10,7 +13,11 @@ const rebillyDocument = parseYamlToDocument(
|
|
|
10
13
|
readFileSync(rebillyDefinitionRef, 'utf-8'),
|
|
11
14
|
rebillyDefinitionRef
|
|
12
15
|
);
|
|
13
|
-
|
|
16
|
+
|
|
17
|
+
let config: StyleguideConfig;
|
|
18
|
+
export async function setupAsync() {
|
|
19
|
+
config = await makeConfigForRuleset({});
|
|
20
|
+
}
|
|
14
21
|
export function measureAsync() {
|
|
15
22
|
return lintDocument({
|
|
16
23
|
externalRefResolver: new BaseResolver(),
|
|
@@ -4,6 +4,8 @@ import { lintDocument } from '../../lint';
|
|
|
4
4
|
import { BaseResolver } from '../../resolve';
|
|
5
5
|
import { parseYamlToDocument, makeConfigForRuleset } from '../utils';
|
|
6
6
|
|
|
7
|
+
import type { StyleguideConfig } from '../../config';
|
|
8
|
+
|
|
7
9
|
export const name = 'Validate with single top-level rule and report';
|
|
8
10
|
export const count = 10;
|
|
9
11
|
const rebillyDefinitionRef = pathResolve(pathJoin(__dirname, 'rebilly.yaml'));
|
|
@@ -12,19 +14,22 @@ const rebillyDocument = parseYamlToDocument(
|
|
|
12
14
|
rebillyDefinitionRef
|
|
13
15
|
);
|
|
14
16
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
}
|
|
17
|
+
let config: StyleguideConfig;
|
|
18
|
+
export async function setupAsync() {
|
|
19
|
+
config = await makeConfigForRuleset({
|
|
20
|
+
test: () => {
|
|
21
|
+
return {
|
|
22
|
+
Schema(schema, ctx) {
|
|
23
|
+
if (schema.type === 'number') {
|
|
24
|
+
ctx.report({
|
|
25
|
+
message: 'type number is not allowed',
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
}
|
|
28
33
|
|
|
29
34
|
export function measureAsync() {
|
|
30
35
|
return lintDocument({
|
|
@@ -3,6 +3,9 @@ import { join as pathJoin, resolve as pathResolve } from 'path';
|
|
|
3
3
|
import { lintDocument } from '../../lint';
|
|
4
4
|
import { BaseResolver } from '../../resolve';
|
|
5
5
|
import { parseYamlToDocument, makeConfigForRuleset } from '../utils';
|
|
6
|
+
|
|
7
|
+
import type { StyleguideConfig } from '../../config';
|
|
8
|
+
|
|
6
9
|
export const name = 'Validate with single top-level rule';
|
|
7
10
|
export const count = 10;
|
|
8
11
|
const rebillyDefinitionRef = pathResolve(pathJoin(__dirname, 'rebilly.yaml'));
|
|
@@ -11,17 +14,20 @@ const rebillyDocument = parseYamlToDocument(
|
|
|
11
14
|
rebillyDefinitionRef
|
|
12
15
|
);
|
|
13
16
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
}
|
|
17
|
+
let config: StyleguideConfig;
|
|
18
|
+
export async function setupAsync() {
|
|
19
|
+
config = await makeConfigForRuleset({
|
|
20
|
+
test: () => {
|
|
21
|
+
let count = 0;
|
|
22
|
+
return {
|
|
23
|
+
Schema() {
|
|
24
|
+
count++;
|
|
25
|
+
if (count === -1) throw new Error('Disable optimization');
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
}
|
|
25
31
|
|
|
26
32
|
export function measureAsync() {
|
|
27
33
|
return lintDocument({
|
package/src/benchmark/fork.js
CHANGED
|
@@ -26,6 +26,10 @@ if (require.main === module) {
|
|
|
26
26
|
assert(process.send);
|
|
27
27
|
const module = require(modulePath);
|
|
28
28
|
|
|
29
|
+
if (module.setupAsync) {
|
|
30
|
+
await module.setupAsync();
|
|
31
|
+
}
|
|
32
|
+
|
|
29
33
|
if (module.measureAsync) {
|
|
30
34
|
async function run() {
|
|
31
35
|
await clockAsync(7, module.measureAsync); // warm up
|
package/src/benchmark/utils.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { parseYaml } from '../js-yaml';
|
|
2
|
-
import {
|
|
3
|
-
import { Oas3RuleSet } from '../oas-types';
|
|
2
|
+
import { Source } from '../resolve';
|
|
4
3
|
import { StyleguideConfig, mergeExtends, resolvePlugins } from '../config';
|
|
5
4
|
|
|
5
|
+
import type { Document } from '../resolve';
|
|
6
|
+
import type { Oas3RuleSet } from '../oas-types';
|
|
6
7
|
import type { RuleConfig, Plugin, ResolvedStyleguideConfig } from '../config/types';
|
|
7
8
|
|
|
8
9
|
export function parseYamlToDocument(body: string, absoluteRef: string = ''): Document {
|
|
@@ -12,20 +13,20 @@ export function parseYamlToDocument(body: string, absoluteRef: string = ''): Doc
|
|
|
12
13
|
};
|
|
13
14
|
}
|
|
14
15
|
|
|
15
|
-
export function makeConfigForRuleset(rules: Oas3RuleSet, plugin?: Partial<Plugin>) {
|
|
16
|
+
export async function makeConfigForRuleset(rules: Oas3RuleSet, plugin?: Partial<Plugin>) {
|
|
16
17
|
const rulesConf: Record<string, RuleConfig> = {};
|
|
17
18
|
const ruleId = 'test';
|
|
18
19
|
Object.keys(rules).forEach((name) => {
|
|
19
20
|
rulesConf[`${ruleId}/${name}`] = 'error';
|
|
20
21
|
});
|
|
21
22
|
const extendConfigs = [
|
|
22
|
-
resolvePlugins([
|
|
23
|
+
(await resolvePlugins([
|
|
23
24
|
{
|
|
24
25
|
...plugin,
|
|
25
26
|
id: ruleId,
|
|
26
27
|
rules: { oas3: rules },
|
|
27
28
|
},
|
|
28
|
-
]) as ResolvedStyleguideConfig,
|
|
29
|
+
])) as ResolvedStyleguideConfig,
|
|
29
30
|
];
|
|
30
31
|
if (rules) {
|
|
31
32
|
extendConfigs.push({ rules });
|
package/src/bundle.ts
CHANGED
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
SpecMajorVersion,
|
|
10
10
|
SpecVersion,
|
|
11
11
|
} from './oas-types';
|
|
12
|
-
import { isAbsoluteUrl, isRef,
|
|
12
|
+
import { isAbsoluteUrl, isRef, refBaseName } from './ref-utils';
|
|
13
13
|
import { initRules } from './config/rules';
|
|
14
14
|
import { reportUnresolvedRef } from './rules/no-unresolved-refs';
|
|
15
15
|
import { dequal, isPlainObject, isTruthy } from './utils';
|
|
@@ -18,6 +18,7 @@ import { RemoveUnusedComponents as RemoveUnusedComponentsOas2 } from './decorato
|
|
|
18
18
|
import { RemoveUnusedComponents as RemoveUnusedComponentsOas3 } from './decorators/oas3/remove-unused-components';
|
|
19
19
|
import { ConfigTypes } from './types/redocly-yaml';
|
|
20
20
|
|
|
21
|
+
import type { Location } from './ref-utils';
|
|
21
22
|
import type { Oas3Visitor, Oas2Visitor } from './visitors';
|
|
22
23
|
import type { NormalizedNodeType, NodeType } from './types';
|
|
23
24
|
import type { WalkContext, UserContext, ResolveResult, NormalizedProblem } from './walk';
|
|
@@ -5,6 +5,7 @@ exports[`resolveConfig should ignore minimal from the root and read local file 1
|
|
|
5
5
|
"arazzoDecorators": {},
|
|
6
6
|
"arazzoPreprocessors": {},
|
|
7
7
|
"arazzoRules": {
|
|
8
|
+
"parameters-no-body-inside-in": "off",
|
|
8
9
|
"spec": "error",
|
|
9
10
|
},
|
|
10
11
|
"async2Decorators": {},
|
|
@@ -12,6 +13,7 @@ exports[`resolveConfig should ignore minimal from the root and read local file 1
|
|
|
12
13
|
"async2Rules": {
|
|
13
14
|
"channels-kebab-case": "off",
|
|
14
15
|
"info-contact": "off",
|
|
16
|
+
"info-license-strict": "warn",
|
|
15
17
|
"no-channel-trailing-slash": "off",
|
|
16
18
|
"operation-operationId": "warn",
|
|
17
19
|
"spec": "error",
|
|
@@ -23,6 +25,7 @@ exports[`resolveConfig should ignore minimal from the root and read local file 1
|
|
|
23
25
|
"async3Rules": {
|
|
24
26
|
"channels-kebab-case": "off",
|
|
25
27
|
"info-contact": "off",
|
|
28
|
+
"info-license-strict": "warn",
|
|
26
29
|
"no-channel-trailing-slash": "off",
|
|
27
30
|
"operation-operationId": "warn",
|
|
28
31
|
"spec": "error",
|
|
@@ -85,7 +88,8 @@ exports[`resolveConfig should ignore minimal from the root and read local file 1
|
|
|
85
88
|
"boolean-parameter-prefixes": "error",
|
|
86
89
|
"info-contact": "off",
|
|
87
90
|
"info-license": "warn",
|
|
88
|
-
"info-license-
|
|
91
|
+
"info-license-strict": "warn",
|
|
92
|
+
"info-license-url": "off",
|
|
89
93
|
"local/operation-id-not-test": "error",
|
|
90
94
|
"no-ambiguous-paths": "warn",
|
|
91
95
|
"no-enum-type-mismatch": "error",
|
|
@@ -133,6 +137,7 @@ exports[`resolveStyleguideConfig should resolve extends with local file config w
|
|
|
133
137
|
"arazzoDecorators": {},
|
|
134
138
|
"arazzoPreprocessors": {},
|
|
135
139
|
"arazzoRules": {
|
|
140
|
+
"parameters-no-body-inside-in": "off",
|
|
136
141
|
"spec": "error",
|
|
137
142
|
},
|
|
138
143
|
"async2Decorators": {},
|
|
@@ -140,6 +145,7 @@ exports[`resolveStyleguideConfig should resolve extends with local file config w
|
|
|
140
145
|
"async2Rules": {
|
|
141
146
|
"channels-kebab-case": "off",
|
|
142
147
|
"info-contact": "off",
|
|
148
|
+
"info-license-strict": "warn",
|
|
143
149
|
"no-channel-trailing-slash": "off",
|
|
144
150
|
"operation-operationId": "warn",
|
|
145
151
|
"spec": "error",
|
|
@@ -151,6 +157,7 @@ exports[`resolveStyleguideConfig should resolve extends with local file config w
|
|
|
151
157
|
"async3Rules": {
|
|
152
158
|
"channels-kebab-case": "off",
|
|
153
159
|
"info-contact": "off",
|
|
160
|
+
"info-license-strict": "warn",
|
|
154
161
|
"no-channel-trailing-slash": "off",
|
|
155
162
|
"operation-operationId": "warn",
|
|
156
163
|
"spec": "error",
|
|
@@ -231,7 +238,8 @@ exports[`resolveStyleguideConfig should resolve extends with local file config w
|
|
|
231
238
|
"boolean-parameter-prefixes": "error",
|
|
232
239
|
"info-contact": "off",
|
|
233
240
|
"info-license": "warn",
|
|
234
|
-
"info-license-
|
|
241
|
+
"info-license-strict": "warn",
|
|
242
|
+
"info-license-url": "off",
|
|
235
243
|
"local/operation-id-not-test": "error",
|
|
236
244
|
"no-ambiguous-paths": "warn",
|
|
237
245
|
"no-enum-type-mismatch": "error",
|
|
@@ -91,6 +91,88 @@ describe('resolveStyleguideConfig', () => {
|
|
|
91
91
|
});
|
|
92
92
|
});
|
|
93
93
|
|
|
94
|
+
it('should resolve local file config with esm plugin', async () => {
|
|
95
|
+
const config = {
|
|
96
|
+
...baseStyleguideConfig,
|
|
97
|
+
extends: ['local-config-with-esm.yaml'],
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
const { plugins, ...styleguide } = await resolveStyleguideConfig({
|
|
101
|
+
styleguideConfig: config,
|
|
102
|
+
configPath,
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
expect(styleguide?.rules?.['operation-2xx-response']).toEqual('warn');
|
|
106
|
+
expect(plugins).toBeDefined();
|
|
107
|
+
expect(plugins?.length).toBe(2);
|
|
108
|
+
|
|
109
|
+
const localPlugin = plugins?.find((p) => p.id === 'test-plugin');
|
|
110
|
+
expect(localPlugin).toBeDefined();
|
|
111
|
+
|
|
112
|
+
expect(localPlugin).toMatchObject({
|
|
113
|
+
id: 'test-plugin',
|
|
114
|
+
rules: {
|
|
115
|
+
oas3: {
|
|
116
|
+
'test-plugin/oas3-rule-name': 'oas3-rule-stub',
|
|
117
|
+
},
|
|
118
|
+
},
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
expect(styleguide.extendPaths!.map(removeAbsolutePath)).toEqual([
|
|
122
|
+
'resolve-config/redocly.yaml',
|
|
123
|
+
'resolve-config/local-config-with-esm.yaml',
|
|
124
|
+
'resolve-config/redocly.yaml',
|
|
125
|
+
]);
|
|
126
|
+
expect(styleguide.pluginPaths!.map(removeAbsolutePath)).toEqual([
|
|
127
|
+
'resolve-config/plugin-esm.mjs',
|
|
128
|
+
]);
|
|
129
|
+
|
|
130
|
+
expect(styleguide.rules).toEqual({
|
|
131
|
+
'operation-2xx-response': 'warn',
|
|
132
|
+
});
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
it('should resolve local file config with commonjs plugin with a default export function', async () => {
|
|
136
|
+
const config = {
|
|
137
|
+
...baseStyleguideConfig,
|
|
138
|
+
extends: ['local-config-with-commonjs-export-function.yaml'],
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
const { plugins, ...styleguide } = await resolveStyleguideConfig({
|
|
142
|
+
styleguideConfig: config,
|
|
143
|
+
configPath,
|
|
144
|
+
});
|
|
145
|
+
|
|
146
|
+
expect(styleguide?.rules?.['operation-2xx-response']).toEqual('warn');
|
|
147
|
+
expect(plugins).toBeDefined();
|
|
148
|
+
expect(plugins?.length).toBe(2);
|
|
149
|
+
|
|
150
|
+
const localPlugin = plugins?.find((p) => p.id === 'test-plugin');
|
|
151
|
+
expect(localPlugin).toBeDefined();
|
|
152
|
+
|
|
153
|
+
expect(localPlugin).toMatchObject({
|
|
154
|
+
id: 'test-plugin',
|
|
155
|
+
rules: {
|
|
156
|
+
oas3: {
|
|
157
|
+
'test-plugin/oas3-rule-name': 'oas3-rule-stub',
|
|
158
|
+
},
|
|
159
|
+
},
|
|
160
|
+
});
|
|
161
|
+
|
|
162
|
+
expect(styleguide.extendPaths!.map(removeAbsolutePath)).toEqual([
|
|
163
|
+
'resolve-config/redocly.yaml',
|
|
164
|
+
'resolve-config/local-config-with-commonjs-export-function.yaml',
|
|
165
|
+
'resolve-config/redocly.yaml',
|
|
166
|
+
]);
|
|
167
|
+
expect(styleguide.pluginPaths!.map(removeAbsolutePath)).toEqual([
|
|
168
|
+
'resolve-config/plugin-with-export-function.cjs',
|
|
169
|
+
]);
|
|
170
|
+
|
|
171
|
+
expect(styleguide.rules).toEqual({
|
|
172
|
+
'operation-2xx-response': 'warn',
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
|
|
94
176
|
// TODO: fix circular test
|
|
95
177
|
it.skip('should throw circular error', () => {
|
|
96
178
|
const config = {
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import * as path from 'path';
|
|
2
2
|
import { loadConfig } from '../load';
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
// FIXME: skipping due to the 'Test environment has been torn down' Jest error.
|
|
5
|
+
// Covered the below in the `miscellaneous/resolve-plugins` e2e tests.
|
|
6
|
+
// Unskip when Jest gets this fixed.
|
|
7
|
+
describe.skip('resolving a plugin', () => {
|
|
5
8
|
const configPath = path.join(__dirname, 'fixtures/plugin-config.yaml');
|
|
6
9
|
|
|
7
10
|
it('should prefix rule names with the plugin id', async () => {
|
package/src/config/all.ts
CHANGED
|
@@ -5,6 +5,7 @@ const all: PluginStyleguideConfig<'built-in'> = {
|
|
|
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: PluginStyleguideConfig<'built-in'> = {
|
|
|
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,13 +119,14 @@ const all: PluginStyleguideConfig<'built-in'> = {
|
|
|
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
|
|
|
129
132
|
export default all;
|