@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/src/lint.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { rootRedoclyConfigSchema } from '@redocly/config';
|
|
|
2
2
|
import { BaseResolver, resolveDocument, makeDocumentFromString } from './resolve';
|
|
3
3
|
import { normalizeVisitors } from './visitors';
|
|
4
4
|
import { walkDocument } from './walk';
|
|
5
|
-
import {
|
|
5
|
+
import { initRules } from './config';
|
|
6
6
|
import { normalizeTypes } from './types';
|
|
7
7
|
import { releaseAjvInstance } from './rules/ajv';
|
|
8
8
|
import { SpecVersion, getMajorSpecVersion, detectSpec, getTypes } from './oas-types';
|
|
@@ -10,6 +10,7 @@ import { createConfigTypes } from './types/redocly-yaml';
|
|
|
10
10
|
import { Spec } from './rules/common/spec';
|
|
11
11
|
import { NoUnresolvedRefs } from './rules/no-unresolved-refs';
|
|
12
12
|
|
|
13
|
+
import type { StyleguideConfig, Config } from './config';
|
|
13
14
|
import type { Document, ResolvedRefMap } from './resolve';
|
|
14
15
|
import type { ProblemSeverity, WalkContext } from './walk';
|
|
15
16
|
import type { NodeType } from './types';
|
package/src/logger.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import * as colorette from 'colorette';
|
|
2
|
-
export { options as colorOptions } from 'colorette';
|
|
3
|
-
|
|
4
2
|
import { isBrowser } from './env';
|
|
5
3
|
import { identity } from './utils';
|
|
6
4
|
|
|
5
|
+
export { options as colorOptions } from 'colorette';
|
|
6
|
+
|
|
7
7
|
export const colorize = new Proxy(colorette, {
|
|
8
8
|
get(target: typeof colorette, prop: string): typeof identity {
|
|
9
9
|
if (isBrowser) {
|
package/src/oas-types.ts
CHANGED
|
@@ -1,21 +1,11 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
Oas3Rule,
|
|
3
|
-
Oas3Preprocessor,
|
|
4
|
-
Oas2Rule,
|
|
5
|
-
Oas2Preprocessor,
|
|
6
|
-
Async2Preprocessor,
|
|
7
|
-
Async2Rule,
|
|
8
|
-
Async3Preprocessor,
|
|
9
|
-
Async3Rule,
|
|
10
|
-
ArazzoPreprocessor,
|
|
11
|
-
ArazzoRule,
|
|
12
|
-
} from './visitors';
|
|
13
1
|
import { Oas2Types } from './types/oas2';
|
|
14
2
|
import { Oas3Types } from './types/oas3';
|
|
15
3
|
import { Oas3_1Types } from './types/oas3_1';
|
|
16
4
|
import { AsyncApi2Types } from './types/asyncapi2';
|
|
17
5
|
import { AsyncApi3Types } from './types/asyncapi3';
|
|
18
6
|
import { ArazzoTypes } from './types/arazzo';
|
|
7
|
+
import { isPlainObject } from './utils';
|
|
8
|
+
|
|
19
9
|
import type {
|
|
20
10
|
BuiltInAsync2RuleId,
|
|
21
11
|
BuiltInAsync3RuleId,
|
|
@@ -24,7 +14,18 @@ import type {
|
|
|
24
14
|
BuiltInOAS2RuleId,
|
|
25
15
|
BuiltInOAS3RuleId,
|
|
26
16
|
} from './types/redocly-yaml';
|
|
27
|
-
import {
|
|
17
|
+
import type {
|
|
18
|
+
Oas3Rule,
|
|
19
|
+
Oas3Preprocessor,
|
|
20
|
+
Oas2Rule,
|
|
21
|
+
Oas2Preprocessor,
|
|
22
|
+
Async2Preprocessor,
|
|
23
|
+
Async2Rule,
|
|
24
|
+
Async3Preprocessor,
|
|
25
|
+
Async3Rule,
|
|
26
|
+
ArazzoPreprocessor,
|
|
27
|
+
ArazzoRule,
|
|
28
|
+
} from './visitors';
|
|
28
29
|
|
|
29
30
|
export enum SpecVersion {
|
|
30
31
|
OAS2 = 'oas2',
|
package/src/redocly/domains.ts
CHANGED
package/src/redocly/index.ts
CHANGED
|
@@ -3,11 +3,8 @@ import { resolve } from 'path';
|
|
|
3
3
|
import { homedir } from 'os';
|
|
4
4
|
import { RegistryApi } from './registry-api';
|
|
5
5
|
import { env } from '../env';
|
|
6
|
-
import { RegionalToken, RegionalTokenWithValidity } from './redocly-client-types';
|
|
7
6
|
import { isNotEmptyObject } from '../utils';
|
|
8
7
|
import { colorize } from '../logger';
|
|
9
|
-
|
|
10
|
-
import type { AccessTokens, Region } from '../config/types';
|
|
11
8
|
import {
|
|
12
9
|
AVAILABLE_REGIONS,
|
|
13
10
|
DEFAULT_REGION,
|
|
@@ -16,6 +13,9 @@ import {
|
|
|
16
13
|
setRedoclyDomain,
|
|
17
14
|
} from './domains';
|
|
18
15
|
|
|
16
|
+
import type { RegionalToken, RegionalTokenWithValidity } from './redocly-client-types';
|
|
17
|
+
import type { AccessTokens, Region } from '../config/types';
|
|
18
|
+
|
|
19
19
|
export const TOKEN_FILENAME = '.redocly-config.json';
|
|
20
20
|
|
|
21
21
|
export class RedoclyClient {
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
import fetch
|
|
1
|
+
import fetch from 'node-fetch';
|
|
2
|
+
import { getProxyAgent, isNotEmptyObject } from '../utils';
|
|
3
|
+
import { getRedoclyDomain } from './domains';
|
|
4
|
+
|
|
5
|
+
import type { RequestInit, HeadersInit } from 'node-fetch';
|
|
2
6
|
import type {
|
|
3
7
|
NotFoundProblemResponse,
|
|
4
8
|
PrepareFileuploadOKResponse,
|
|
@@ -6,8 +10,6 @@ import type {
|
|
|
6
10
|
PushApiParams,
|
|
7
11
|
} from './registry-api-types';
|
|
8
12
|
import type { AccessTokens, Region } from '../config/types';
|
|
9
|
-
import { getProxyAgent, isNotEmptyObject } from '../utils';
|
|
10
|
-
import { getRedoclyDomain } from './domains';
|
|
11
13
|
|
|
12
14
|
const version = require('../../package.json').version;
|
|
13
15
|
|
package/src/ref-utils.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { Source } from './resolve';
|
|
2
|
-
import { OasRef } from './typings/openapi';
|
|
3
1
|
import { isTruthy } from './utils';
|
|
4
2
|
|
|
3
|
+
import type { Source } from './resolve';
|
|
4
|
+
import type { OasRef } from './typings/openapi';
|
|
5
|
+
|
|
5
6
|
export function joinPointer(base: string, key: string | number) {
|
|
6
7
|
if (base === '') base = '#/';
|
|
7
8
|
return base[base.length - 1] === '/' ? base + key : base + '/' + key;
|
|
@@ -60,6 +61,7 @@ export function pointerBaseName(pointer: string) {
|
|
|
60
61
|
}
|
|
61
62
|
|
|
62
63
|
export function refBaseName(ref: string) {
|
|
64
|
+
// eslint-disable-next-line no-useless-escape
|
|
63
65
|
const parts = ref.split(/[\/\\]/); // split by '\' and '/'
|
|
64
66
|
return parts[parts.length - 1].replace(/\.[^.]+$/, ''); // replace extension with empty string
|
|
65
67
|
}
|
package/src/resolve.ts
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import * as fs from 'fs';
|
|
2
2
|
import * as path from 'path';
|
|
3
|
-
import { OasRef } from './typings/openapi';
|
|
4
3
|
import { isRef, joinPointer, escapePointer, parseRef, isAbsoluteUrl, isAnchor } from './ref-utils';
|
|
5
|
-
import
|
|
6
|
-
import { NormalizedNodeType, isNamedType, SpecExtension } from './types';
|
|
4
|
+
import { isNamedType, SpecExtension } from './types';
|
|
7
5
|
import { readFileFromUrl, parseYaml, nextTick } from './utils';
|
|
8
|
-
|
|
6
|
+
|
|
7
|
+
import type { YAMLNode, LoadOptions } from 'yaml-ast-parser';
|
|
8
|
+
import type { NormalizedNodeType } from './types';
|
|
9
|
+
import type { ResolveConfig } from './config/types';
|
|
10
|
+
import type { OasRef } from './typings/openapi';
|
|
9
11
|
|
|
10
12
|
export type CollectedRefs = Map<string /* absoluteFilePath */, Document>;
|
|
11
13
|
|
|
@@ -22,7 +22,9 @@ describe('oas3 boolean-parameter-prefixes', () => {
|
|
|
22
22
|
externalRefResolver: new BaseResolver(),
|
|
23
23
|
document,
|
|
24
24
|
config: await makeConfig({
|
|
25
|
-
|
|
25
|
+
rules: {
|
|
26
|
+
'no-unresolved-refs': 'error',
|
|
27
|
+
},
|
|
26
28
|
}),
|
|
27
29
|
});
|
|
28
30
|
|
|
@@ -62,7 +64,9 @@ describe('oas3 boolean-parameter-prefixes', () => {
|
|
|
62
64
|
externalRefResolver: new BaseResolver(),
|
|
63
65
|
document,
|
|
64
66
|
config: await makeConfig({
|
|
65
|
-
|
|
67
|
+
rules: {
|
|
68
|
+
'no-unresolved-refs': 'error',
|
|
69
|
+
},
|
|
66
70
|
}),
|
|
67
71
|
});
|
|
68
72
|
|
|
@@ -119,7 +123,9 @@ describe('oas3 boolean-parameter-prefixes', () => {
|
|
|
119
123
|
externalRefResolver: new BaseResolver(),
|
|
120
124
|
document,
|
|
121
125
|
config: await makeConfig({
|
|
122
|
-
|
|
126
|
+
rules: {
|
|
127
|
+
'no-unresolved-refs': 'error',
|
|
128
|
+
},
|
|
123
129
|
}),
|
|
124
130
|
});
|
|
125
131
|
|
|
@@ -143,7 +149,9 @@ describe('oas3 boolean-parameter-prefixes', () => {
|
|
|
143
149
|
externalRefResolver: new BaseResolver(),
|
|
144
150
|
document,
|
|
145
151
|
config: await makeConfig({
|
|
146
|
-
|
|
152
|
+
rules: {
|
|
153
|
+
'no-unresolved-refs': 'error',
|
|
154
|
+
},
|
|
147
155
|
}),
|
|
148
156
|
});
|
|
149
157
|
|
|
@@ -190,7 +198,9 @@ describe('oas3 boolean-parameter-prefixes', () => {
|
|
|
190
198
|
externalRefResolver: new BaseResolver(),
|
|
191
199
|
document,
|
|
192
200
|
config: await makeConfig({
|
|
193
|
-
|
|
201
|
+
rules: {
|
|
202
|
+
'no-unresolved-refs': 'error',
|
|
203
|
+
},
|
|
194
204
|
}),
|
|
195
205
|
});
|
|
196
206
|
|
|
@@ -219,7 +229,9 @@ describe('oas3 boolean-parameter-prefixes', () => {
|
|
|
219
229
|
externalRefResolver: new BaseResolver(),
|
|
220
230
|
document,
|
|
221
231
|
config: await makeConfig({
|
|
222
|
-
|
|
232
|
+
rules: {
|
|
233
|
+
'no-unresolved-refs': 'error',
|
|
234
|
+
},
|
|
223
235
|
}),
|
|
224
236
|
});
|
|
225
237
|
|
|
@@ -248,7 +260,9 @@ describe('oas3 boolean-parameter-prefixes', () => {
|
|
|
248
260
|
externalRefResolver: new BaseResolver(),
|
|
249
261
|
document,
|
|
250
262
|
config: await makeConfig({
|
|
251
|
-
|
|
263
|
+
rules: {
|
|
264
|
+
'no-unresolved-refs': 'error',
|
|
265
|
+
},
|
|
252
266
|
}),
|
|
253
267
|
});
|
|
254
268
|
|
package/src/rules/ajv.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import Ajv from '@redocly/ajv/dist/2020';
|
|
2
|
-
import {
|
|
2
|
+
import { escapePointer } from '../ref-utils';
|
|
3
3
|
|
|
4
|
+
import type { Location } from '../ref-utils';
|
|
4
5
|
import type { ValidateFunction, ErrorObject } from '@redocly/ajv/dist/2020';
|
|
5
6
|
import type { ResolveFn } from '../walk';
|
|
6
7
|
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { outdent } from 'outdent';
|
|
2
|
+
import { lintDocument } from '../../../lint';
|
|
3
|
+
import { parseYamlToDocument, replaceSourceWithRef, makeConfig } from '../../../../__tests__/utils';
|
|
4
|
+
import { BaseResolver } from '../../../resolve';
|
|
5
|
+
import { StyleguideConfig } from '../../../config';
|
|
6
|
+
import { ArazzoRule } from '../../../visitors';
|
|
7
|
+
|
|
8
|
+
describe('Arazzo parameters-no-body-inside-in', () => {
|
|
9
|
+
const document = parseYamlToDocument(
|
|
10
|
+
outdent`
|
|
11
|
+
arazzo: '1.0.0'
|
|
12
|
+
info:
|
|
13
|
+
title: Cool API
|
|
14
|
+
version: 1.0.0
|
|
15
|
+
description: A cool API
|
|
16
|
+
sourceDescriptions:
|
|
17
|
+
- name: museum-api
|
|
18
|
+
type: openapi
|
|
19
|
+
url: openapi.yaml
|
|
20
|
+
workflows:
|
|
21
|
+
- workflowId: get-museum-hours
|
|
22
|
+
description: This workflow demonstrates how to get the museum opening hours and buy tickets.
|
|
23
|
+
parameters:
|
|
24
|
+
- in: body
|
|
25
|
+
name: Authorization
|
|
26
|
+
value: Basic Og==
|
|
27
|
+
steps:
|
|
28
|
+
- stepId: get-museum-hours
|
|
29
|
+
description: >-
|
|
30
|
+
Get museum hours by resolving request details with getMuseumHours operationId from openapi.yaml description.
|
|
31
|
+
operationId: museum-api.getMuseumHours
|
|
32
|
+
successCriteria:
|
|
33
|
+
- condition: $statusCode == 200
|
|
34
|
+
`,
|
|
35
|
+
'arazzo.yaml'
|
|
36
|
+
);
|
|
37
|
+
|
|
38
|
+
it('should not report on `body` inside parameter `in` field', async () => {
|
|
39
|
+
const results = await lintDocument({
|
|
40
|
+
externalRefResolver: new BaseResolver(),
|
|
41
|
+
document,
|
|
42
|
+
config: await makeConfig({ rules: {} }),
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`[]`);
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
it('should report on `body` inside parameter `in` field', async () => {
|
|
49
|
+
const results = await lintDocument({
|
|
50
|
+
externalRefResolver: new BaseResolver(),
|
|
51
|
+
document,
|
|
52
|
+
config: await makeConfig({
|
|
53
|
+
rules: {},
|
|
54
|
+
arazzoRules: { 'parameters-no-body-inside-in': 'error' },
|
|
55
|
+
}),
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
|
|
59
|
+
[
|
|
60
|
+
{
|
|
61
|
+
"location": [
|
|
62
|
+
{
|
|
63
|
+
"pointer": "#/workflows/0/parameters/0/in",
|
|
64
|
+
"reportOnKey": false,
|
|
65
|
+
"source": "arazzo.yaml",
|
|
66
|
+
},
|
|
67
|
+
],
|
|
68
|
+
"message": "The \`body\` value of the \`in\` property is not supported by Spot.",
|
|
69
|
+
"ruleId": "parameters-no-body-inside-in",
|
|
70
|
+
"severity": "error",
|
|
71
|
+
"suggest": [],
|
|
72
|
+
},
|
|
73
|
+
]
|
|
74
|
+
`);
|
|
75
|
+
});
|
|
76
|
+
});
|
|
@@ -1,11 +1,14 @@
|
|
|
1
|
-
import { ArazzoRule } from '../../visitors';
|
|
2
1
|
import { Spec } from '../common/spec';
|
|
3
|
-
import type { ArazzoRuleSet } from '../../oas-types';
|
|
4
2
|
import { Assertions } from '../common/assertions';
|
|
3
|
+
import { ParametersNoBodyInsideIn } from '../spot/parameters-no-body-inside-in';
|
|
4
|
+
|
|
5
|
+
import type { ArazzoRule } from '../../visitors';
|
|
6
|
+
import type { ArazzoRuleSet } from '../../oas-types';
|
|
5
7
|
|
|
6
8
|
export const rules: ArazzoRuleSet<'built-in'> = {
|
|
7
9
|
spec: Spec as ArazzoRule,
|
|
8
10
|
assertions: Assertions as ArazzoRule,
|
|
11
|
+
'parameters-no-body-inside-in': ParametersNoBodyInsideIn as ArazzoRule,
|
|
9
12
|
};
|
|
10
13
|
|
|
11
14
|
export const preprocessors = {};
|
|
@@ -23,7 +23,7 @@ describe('Async2 channels-kebab-case', () => {
|
|
|
23
23
|
const results = await lintDocument({
|
|
24
24
|
externalRefResolver: new BaseResolver(),
|
|
25
25
|
document,
|
|
26
|
-
config: await makeConfig({ 'channels-kebab-case': 'error' }),
|
|
26
|
+
config: await makeConfig({ rules: { 'channels-kebab-case': 'error' } }),
|
|
27
27
|
});
|
|
28
28
|
|
|
29
29
|
expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
|
|
@@ -64,7 +64,7 @@ describe('Async2 channels-kebab-case', () => {
|
|
|
64
64
|
const results = await lintDocument({
|
|
65
65
|
externalRefResolver: new BaseResolver(),
|
|
66
66
|
document,
|
|
67
|
-
config: await makeConfig({ 'channels-kebab-case': 'error' }),
|
|
67
|
+
config: await makeConfig({ rules: { 'channels-kebab-case': 'error' } }),
|
|
68
68
|
});
|
|
69
69
|
|
|
70
70
|
expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
|
|
@@ -106,8 +106,10 @@ describe('Async2 channels-kebab-case', () => {
|
|
|
106
106
|
externalRefResolver: new BaseResolver(),
|
|
107
107
|
document,
|
|
108
108
|
config: await makeConfig({
|
|
109
|
-
|
|
110
|
-
|
|
109
|
+
rules: {
|
|
110
|
+
'paths-kebab-case': 'error',
|
|
111
|
+
'no-path-trailing-slash': 'off',
|
|
112
|
+
},
|
|
111
113
|
}),
|
|
112
114
|
});
|
|
113
115
|
expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`[]`);
|
|
@@ -133,7 +135,9 @@ describe('Async2 channels-kebab-case', () => {
|
|
|
133
135
|
externalRefResolver: new BaseResolver(),
|
|
134
136
|
document,
|
|
135
137
|
config: await makeConfig({
|
|
136
|
-
|
|
138
|
+
rules: {
|
|
139
|
+
'paths-kebab-case': 'error',
|
|
140
|
+
},
|
|
137
141
|
}),
|
|
138
142
|
});
|
|
139
143
|
expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`[]`);
|
|
@@ -23,7 +23,7 @@ describe('no-channel-trailing-slash', () => {
|
|
|
23
23
|
const results = await lintDocument({
|
|
24
24
|
externalRefResolver: new BaseResolver(),
|
|
25
25
|
document,
|
|
26
|
-
config: await makeConfig({ 'no-channel-trailing-slash': 'error' }),
|
|
26
|
+
config: await makeConfig({ rules: { 'no-channel-trailing-slash': 'error' } }),
|
|
27
27
|
});
|
|
28
28
|
|
|
29
29
|
expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
|
|
@@ -64,7 +64,7 @@ describe('no-channel-trailing-slash', () => {
|
|
|
64
64
|
const results = await lintDocument({
|
|
65
65
|
externalRefResolver: new BaseResolver(),
|
|
66
66
|
document,
|
|
67
|
-
config: await makeConfig({ 'no-channel-trailing-slash': 'error' }),
|
|
67
|
+
config: await makeConfig({ rules: { 'no-channel-trailing-slash': 'error' } }),
|
|
68
68
|
});
|
|
69
69
|
|
|
70
70
|
expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`[]`);
|
|
@@ -89,7 +89,7 @@ describe('no-channel-trailing-slash', () => {
|
|
|
89
89
|
const results = await lintDocument({
|
|
90
90
|
externalRefResolver: new BaseResolver(),
|
|
91
91
|
document,
|
|
92
|
-
config: await makeConfig({ 'no-channel-trailing-slash': 'error' }),
|
|
92
|
+
config: await makeConfig({ rules: { 'no-channel-trailing-slash': 'error' } }),
|
|
93
93
|
});
|
|
94
94
|
|
|
95
95
|
expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`[]`);
|
|
@@ -1,18 +1,21 @@
|
|
|
1
|
-
import { Async2Rule } from '../../visitors';
|
|
2
1
|
import { Assertions } from '../common/assertions';
|
|
3
2
|
import { Spec } from '../common/spec';
|
|
4
3
|
import { InfoContact } from '../common/info-contact';
|
|
4
|
+
import { InfoLicenseStrict } from '../common/info-license-strict';
|
|
5
5
|
import { OperationOperationId } from '../common/operation-operationId';
|
|
6
6
|
import { TagDescription } from '../common/tag-description';
|
|
7
7
|
import { TagsAlphabetical } from '../common/tags-alphabetical';
|
|
8
8
|
import { ChannelsKebabCase } from './channels-kebab-case';
|
|
9
9
|
import { NoChannelTrailingSlash } from './no-channel-trailing-slash';
|
|
10
|
+
|
|
11
|
+
import type { Async2Rule } from '../../visitors';
|
|
10
12
|
import type { Async2RuleSet } from '../../oas-types';
|
|
11
13
|
|
|
12
14
|
export const rules: Async2RuleSet<'built-in'> = {
|
|
13
15
|
spec: Spec as Async2Rule,
|
|
14
16
|
assertions: Assertions as Async2Rule,
|
|
15
17
|
'info-contact': InfoContact as Async2Rule,
|
|
18
|
+
'info-license-strict': InfoLicenseStrict as Async2Rule,
|
|
16
19
|
'operation-operationId': OperationOperationId as Async2Rule,
|
|
17
20
|
'channels-kebab-case': ChannelsKebabCase,
|
|
18
21
|
'no-channel-trailing-slash': NoChannelTrailingSlash,
|
|
@@ -23,7 +23,7 @@ describe('Async2 channels-kebab-case', () => {
|
|
|
23
23
|
const results = await lintDocument({
|
|
24
24
|
externalRefResolver: new BaseResolver(),
|
|
25
25
|
document,
|
|
26
|
-
config: await makeConfig({ 'channels-kebab-case': 'error' }),
|
|
26
|
+
config: await makeConfig({ rules: { 'channels-kebab-case': 'error' } }),
|
|
27
27
|
});
|
|
28
28
|
|
|
29
29
|
expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
|
|
@@ -64,7 +64,7 @@ describe('Async2 channels-kebab-case', () => {
|
|
|
64
64
|
const results = await lintDocument({
|
|
65
65
|
externalRefResolver: new BaseResolver(),
|
|
66
66
|
document,
|
|
67
|
-
config: await makeConfig({ 'channels-kebab-case': 'error' }),
|
|
67
|
+
config: await makeConfig({ rules: { 'channels-kebab-case': 'error' } }),
|
|
68
68
|
});
|
|
69
69
|
|
|
70
70
|
expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
|
|
@@ -106,8 +106,10 @@ describe('Async2 channels-kebab-case', () => {
|
|
|
106
106
|
externalRefResolver: new BaseResolver(),
|
|
107
107
|
document,
|
|
108
108
|
config: await makeConfig({
|
|
109
|
-
|
|
110
|
-
|
|
109
|
+
rules: {
|
|
110
|
+
'paths-kebab-case': 'error',
|
|
111
|
+
'no-path-trailing-slash': 'off',
|
|
112
|
+
},
|
|
111
113
|
}),
|
|
112
114
|
});
|
|
113
115
|
expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`[]`);
|
|
@@ -133,7 +135,9 @@ describe('Async2 channels-kebab-case', () => {
|
|
|
133
135
|
externalRefResolver: new BaseResolver(),
|
|
134
136
|
document,
|
|
135
137
|
config: await makeConfig({
|
|
136
|
-
|
|
138
|
+
rules: {
|
|
139
|
+
'paths-kebab-case': 'error',
|
|
140
|
+
},
|
|
137
141
|
}),
|
|
138
142
|
});
|
|
139
143
|
expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`[]`);
|
|
@@ -23,7 +23,7 @@ describe('no-channel-trailing-slash', () => {
|
|
|
23
23
|
const results = await lintDocument({
|
|
24
24
|
externalRefResolver: new BaseResolver(),
|
|
25
25
|
document,
|
|
26
|
-
config: await makeConfig({ 'no-channel-trailing-slash': 'error' }),
|
|
26
|
+
config: await makeConfig({ rules: { 'no-channel-trailing-slash': 'error' } }),
|
|
27
27
|
});
|
|
28
28
|
expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
|
|
29
29
|
[
|
|
@@ -63,7 +63,7 @@ describe('no-channel-trailing-slash', () => {
|
|
|
63
63
|
const results = await lintDocument({
|
|
64
64
|
externalRefResolver: new BaseResolver(),
|
|
65
65
|
document,
|
|
66
|
-
config: await makeConfig({ 'no-channel-trailing-slash': 'error' }),
|
|
66
|
+
config: await makeConfig({ rules: { 'no-channel-trailing-slash': 'error' } }),
|
|
67
67
|
});
|
|
68
68
|
|
|
69
69
|
expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`[]`);
|
|
@@ -88,7 +88,7 @@ describe('no-channel-trailing-slash', () => {
|
|
|
88
88
|
const results = await lintDocument({
|
|
89
89
|
externalRefResolver: new BaseResolver(),
|
|
90
90
|
document,
|
|
91
|
-
config: await makeConfig({ 'no-channel-trailing-slash': 'error' }),
|
|
91
|
+
config: await makeConfig({ rules: { 'no-channel-trailing-slash': 'error' } }),
|
|
92
92
|
});
|
|
93
93
|
|
|
94
94
|
expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`[]`);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Channel } from '../../typings/asyncapi3';
|
|
2
|
-
import { Async3Rule } from '../../visitors';
|
|
3
|
-
import { UserContext } from '../../walk';
|
|
1
|
+
import type { Channel } from '../../typings/asyncapi3';
|
|
2
|
+
import type { Async3Rule } from '../../visitors';
|
|
3
|
+
import type { UserContext } from '../../walk';
|
|
4
4
|
|
|
5
5
|
export const ChannelsKebabCase: Async3Rule = () => {
|
|
6
6
|
return {
|
|
@@ -1,18 +1,21 @@
|
|
|
1
|
-
import { Async3Rule } from '../../visitors';
|
|
2
1
|
import { Assertions } from '../common/assertions';
|
|
3
2
|
import { Spec } from '../common/spec';
|
|
4
3
|
import { InfoContact } from '../common/info-contact';
|
|
4
|
+
import { InfoLicenseStrict } from '../common/info-license-strict';
|
|
5
5
|
import { OperationOperationId } from '../common/operation-operationId';
|
|
6
6
|
import { TagDescription } from '../common/tag-description';
|
|
7
7
|
import { TagsAlphabetical } from '../common/tags-alphabetical';
|
|
8
8
|
import { ChannelsKebabCase } from './channels-kebab-case';
|
|
9
9
|
import { NoChannelTrailingSlash } from './no-channel-trailing-slash';
|
|
10
|
+
|
|
11
|
+
import type { Async3Rule } from '../../visitors';
|
|
10
12
|
import type { Async3RuleSet } from '../../oas-types';
|
|
11
13
|
|
|
12
14
|
export const rules: Async3RuleSet<'built-in'> = {
|
|
13
15
|
spec: Spec as Async3Rule,
|
|
14
16
|
assertions: Assertions as Async3Rule,
|
|
15
17
|
'info-contact': InfoContact as Async3Rule,
|
|
18
|
+
'info-license-strict': InfoLicenseStrict as Async3Rule,
|
|
16
19
|
'operation-operationId': OperationOperationId as Async3Rule,
|
|
17
20
|
'channels-kebab-case': ChannelsKebabCase,
|
|
18
21
|
'no-channel-trailing-slash': NoChannelTrailingSlash,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Async3Rule } from '../../visitors';
|
|
2
|
-
import { UserContext } from '../../walk';
|
|
3
|
-
import { Channel } from '../../typings/asyncapi3';
|
|
1
|
+
import type { Async3Rule } from '../../visitors';
|
|
2
|
+
import type { UserContext } from '../../walk';
|
|
3
|
+
import type { Channel } from '../../typings/asyncapi3';
|
|
4
4
|
|
|
5
5
|
export const NoChannelTrailingSlash: Async3Rule = () => {
|
|
6
6
|
return {
|