@redocly/openapi-core 1.18.1 → 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 +22 -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 +7 -3
- package/lib/benchmark/benches/lint-with-nested-rule.bench.d.ts +1 -0
- package/lib/benchmark/benches/lint-with-nested-rule.bench.js +7 -3
- package/lib/benchmark/benches/lint-with-no-rules.bench.d.ts +1 -0
- package/lib/benchmark/benches/lint-with-no-rules.bench.js +7 -3
- 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 +19 -15
- 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 +18 -14
- package/lib/benchmark/benches/recommended-oas3.bench.js +2 -2
- package/lib/benchmark/benches/resolve-with-no-external.bench.js +2 -2
- package/lib/benchmark/utils.d.ts +3 -3
- package/lib/benchmark/utils.js +10 -7
- package/lib/bundle.d.ts +2 -2
- package/lib/bundle.js +127 -120
- package/lib/config/all.js +13 -1
- package/lib/config/builtIn.js +18 -17
- package/lib/config/config-resolvers.d.ts +1 -1
- package/lib/config/config-resolvers.js +241 -158
- package/lib/config/config.d.ts +4 -3
- package/lib/config/config.js +53 -34
- package/lib/config/load.d.ts +1 -1
- package/lib/config/load.js +105 -117
- package/lib/config/minimal.js +13 -0
- package/lib/config/recommended-strict.js +14 -1
- package/lib/config/recommended.js +14 -1
- package/lib/config/rules.d.ts +3 -3
- package/lib/config/rules.js +1 -2
- package/lib/config/types.d.ts +17 -4
- package/lib/config/utils.d.ts +3 -1
- package/lib/config/utils.js +78 -49
- package/lib/decorators/async3/index.d.ts +1 -0
- package/lib/decorators/async3/index.js +4 -0
- package/lib/decorators/common/filters/filter-helper.d.ts +1 -1
- package/lib/decorators/common/filters/filter-helper.js +2 -3
- package/lib/decorators/common/filters/filter-in.d.ts +1 -1
- package/lib/decorators/common/filters/filter-in.js +1 -1
- package/lib/decorators/common/filters/filter-out.d.ts +1 -1
- package/lib/decorators/common/filters/filter-out.js +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/info-override.js +1 -12
- package/lib/decorators/common/media-type-examples-override.d.ts +1 -1
- package/lib/decorators/common/media-type-examples-override.js +8 -2
- 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/remove-x-internal.js +4 -5
- package/lib/decorators/common/tag-description-override.d.ts +1 -1
- package/lib/decorators/oas2/index.d.ts +1 -1
- package/lib/decorators/oas2/remove-unused-components.js +1 -2
- package/lib/decorators/oas3/index.d.ts +1 -1
- package/lib/decorators/oas3/remove-unused-components.js +1 -2
- package/lib/env.d.ts +0 -1
- package/lib/env.js +1 -1
- package/lib/format/codeframes.d.ts +1 -1
- package/lib/format/codeframes.js +10 -8
- package/lib/format/format.d.ts +1 -1
- package/lib/format/format.js +24 -16
- package/lib/index.d.ts +2 -1
- package/lib/index.js +6 -4
- package/lib/js-yaml/index.d.ts +1 -1
- package/lib/js-yaml/index.js +1 -1
- package/lib/lint.d.ts +3 -1
- package/lib/lint.js +92 -99
- package/lib/logger.js +2 -2
- package/lib/oas-types.d.ts +9 -5
- package/lib/oas-types.js +22 -12
- package/lib/redocly/domains.d.ts +1 -1
- package/lib/redocly/domains.js +6 -6
- package/lib/redocly/index.d.ts +1 -1
- package/lib/redocly/index.js +60 -73
- package/lib/redocly/registry-api.js +64 -82
- package/lib/ref-utils.d.ts +2 -2
- package/lib/ref-utils.js +14 -13
- package/lib/resolve.d.ts +2 -2
- package/lib/resolve.js +186 -205
- package/lib/rules/ajv.d.ts +1 -1
- package/lib/rules/ajv.js +10 -8
- 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 +2 -0
- package/lib/rules/async3/channels-kebab-case.js +19 -0
- package/lib/rules/async3/index.d.ts +3 -0
- package/lib/rules/async3/index.js +24 -0
- package/lib/rules/async3/no-channel-trailing-slash.d.ts +2 -0
- package/lib/rules/async3/no-channel-trailing-slash.js +16 -0
- package/lib/rules/common/assertions/asserts.d.ts +2 -2
- package/lib/rules/common/assertions/asserts.js +5 -5
- package/lib/rules/common/assertions/index.d.ts +4 -4
- package/lib/rules/common/assertions/utils.d.ts +1 -1
- package/lib/rules/common/assertions/utils.js +43 -28
- 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-invalid-parameter-examples.js +1 -2
- package/lib/rules/common/no-invalid-schema-examples.js +1 -2
- 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/no-required-schema-properties-undefined.js +1 -2
- 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/operation-tag-defined.js +1 -2
- 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-http-verbs-order.js +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/required-string-property-missing-min-length.js +2 -2
- package/lib/rules/common/response-contains-header.d.ts +1 -1
- package/lib/rules/common/response-contains-header.js +2 -2
- package/lib/rules/common/security-defined.d.ts +1 -1
- package/lib/rules/common/security-defined.js +3 -7
- package/lib/rules/common/spec-strict-refs.d.ts +1 -1
- package/lib/rules/common/spec.d.ts +2 -2
- package/lib/rules/common/spec.js +6 -7
- 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/no-unresolved-refs.js +3 -4
- 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/oas2/response-contains-property.js +1 -2
- package/lib/rules/oas3/array-parameter-serialization.d.ts +1 -1
- package/lib/rules/oas3/array-parameter-serialization.js +1 -2
- 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/component-name-unique.js +2 -4
- 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-invalid-media-type-examples.js +1 -2
- 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-server-variables-empty-enum.js +1 -2
- package/lib/rules/oas3/no-undefined-server-variable.d.ts +1 -1
- package/lib/rules/oas3/no-undefined-server-variable.js +2 -3
- package/lib/rules/oas3/no-unused-components.d.ts +1 -1
- package/lib/rules/oas3/no-unused-components.js +1 -2
- package/lib/rules/oas3/response-contains-property.d.ts +1 -1
- package/lib/rules/oas3/response-contains-property.js +1 -2
- 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 +41 -13
- package/lib/types/arazzo.d.ts +1 -2275
- package/lib/types/arazzo.js +246 -309
- package/lib/types/asyncapi2.d.ts +17 -0
- package/lib/types/{asyncapi.js → asyncapi2.js} +59 -53
- package/lib/types/asyncapi3.d.ts +2 -0
- package/lib/types/asyncapi3.js +347 -0
- package/lib/types/index.js +19 -10
- package/lib/types/json-schema-adapter.d.ts +1 -1
- package/lib/types/json-schema-adapter.js +4 -18
- package/lib/types/oas2.js +6 -6
- package/lib/types/oas3.d.ts +4 -0
- package/lib/types/oas3.js +19 -19
- package/lib/types/oas3_1.d.ts +3 -0
- package/lib/types/oas3_1.js +20 -14
- package/lib/types/redocly-yaml.d.ts +8 -6
- package/lib/types/redocly-yaml.js +135 -36
- package/lib/typings/arazzo.d.ts +145 -27
- package/lib/typings/asyncapi3.d.ts +53 -0
- package/lib/typings/asyncapi3.js +2 -0
- package/lib/typings/common.d.ts +1 -1
- package/lib/typings/swagger.d.ts +2 -2
- package/lib/utils.d.ts +4 -3
- package/lib/utils.js +55 -72
- package/lib/visitors.d.ts +29 -1
- package/lib/visitors.js +21 -8
- package/lib/walk.d.ts +3 -3
- package/lib/walk.js +30 -23
- package/package.json +3 -3
- package/src/__tests__/bundle.test.ts +144 -2
- 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 +19 -4
- package/src/config/__tests__/__snapshots__/config-resolvers.test.ts.snap +32 -2
- package/src/config/__tests__/__snapshots__/config.test.ts.snap +24 -0
- package/src/config/__tests__/config-resolvers.test.ts +82 -0
- package/src/config/__tests__/config.test.ts +11 -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 +13 -1
- package/src/config/builtIn.ts +9 -8
- package/src/config/config-resolvers.ts +92 -21
- package/src/config/config.ts +31 -13
- package/src/config/load.ts +2 -2
- package/src/config/minimal.ts +13 -0
- package/src/config/recommended-strict.ts +14 -1
- package/src/config/recommended.ts +14 -1
- package/src/config/rules.ts +12 -4
- package/src/config/types.ts +34 -5
- package/src/config/utils.ts +28 -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/async3/index.ts +1 -0
- 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 +5 -4
- 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/index.ts +2 -1
- package/src/js-yaml/index.ts +3 -1
- package/src/lint.ts +28 -4
- package/src/logger.ts +2 -2
- package/src/oas-types.ts +41 -22
- 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 +6 -3
- 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 +9 -6
- package/src/rules/async2/no-channel-trailing-slash.ts +2 -2
- package/src/rules/async3/__tests__/channels-kebab-case.test.ts +145 -0
- package/src/rules/async3/__tests__/no-channel-trailing-slash.test.ts +96 -0
- package/src/rules/async3/channels-kebab-case.ts +19 -0
- package/src/rules/async3/index.ts +26 -0
- package/src/rules/async3/no-channel-trailing-slash.ts +16 -0
- 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 +12 -4
- 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 +4 -3
- 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 +8 -6
- 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 +42 -38
- 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/{asyncapi.ts → asyncapi2.ts} +41 -35
- package/src/types/asyncapi3.ts +383 -0
- package/src/types/json-schema-adapter.ts +2 -2
- package/src/types/oas3.ts +4 -4
- package/src/types/oas3_1.ts +5 -4
- package/src/types/redocly-yaml.ts +21 -4
- package/src/typings/arazzo.ts +169 -41
- package/src/typings/asyncapi3.ts +61 -0
- package/src/typings/common.ts +1 -0
- package/src/typings/swagger.ts +2 -2
- package/src/utils.ts +5 -3
- package/src/visitors.ts +58 -1
- package/src/walk.ts +3 -3
- package/tsconfig.tsbuildinfo +1 -1
- package/lib/types/asyncapi.d.ts +0 -2
|
@@ -19,7 +19,7 @@ describe('Oas3 security-defined', () => {
|
|
|
19
19
|
const results = await lintDocument({
|
|
20
20
|
externalRefResolver: new BaseResolver(),
|
|
21
21
|
document,
|
|
22
|
-
config: await makeConfig({ 'security-defined': 'error' }),
|
|
22
|
+
config: await makeConfig({ rules: { 'security-defined': 'error' } }),
|
|
23
23
|
});
|
|
24
24
|
|
|
25
25
|
expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
|
|
@@ -53,7 +53,7 @@ describe('Oas3 security-defined', () => {
|
|
|
53
53
|
const results = await lintDocument({
|
|
54
54
|
externalRefResolver: new BaseResolver(),
|
|
55
55
|
document,
|
|
56
|
-
config: await makeConfig({ 'security-defined': 'error' }),
|
|
56
|
+
config: await makeConfig({ rules: { 'security-defined': 'error' } }),
|
|
57
57
|
});
|
|
58
58
|
|
|
59
59
|
expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`[]`);
|
|
@@ -73,7 +73,7 @@ describe('Oas3 security-defined', () => {
|
|
|
73
73
|
const results = await lintDocument({
|
|
74
74
|
externalRefResolver: new BaseResolver(),
|
|
75
75
|
document,
|
|
76
|
-
config: await makeConfig({ 'security-defined': 'error' }),
|
|
76
|
+
config: await makeConfig({ rules: { 'security-defined': 'error' } }),
|
|
77
77
|
});
|
|
78
78
|
|
|
79
79
|
expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
|
|
@@ -112,7 +112,7 @@ describe('Oas3 security-defined', () => {
|
|
|
112
112
|
const results = await lintDocument({
|
|
113
113
|
externalRefResolver: new BaseResolver(),
|
|
114
114
|
document,
|
|
115
|
-
config: await makeConfig({ 'security-defined': 'error' }),
|
|
115
|
+
config: await makeConfig({ rules: { 'security-defined': 'error' } }),
|
|
116
116
|
});
|
|
117
117
|
|
|
118
118
|
expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
|
|
@@ -167,7 +167,7 @@ describe('Oas3 security-defined', () => {
|
|
|
167
167
|
const results = await lintDocument({
|
|
168
168
|
externalRefResolver: new BaseResolver(),
|
|
169
169
|
document,
|
|
170
|
-
config: await makeConfig({ 'security-defined': 'error' }),
|
|
170
|
+
config: await makeConfig({ rules: { 'security-defined': 'error' } }),
|
|
171
171
|
});
|
|
172
172
|
|
|
173
173
|
expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`[]`);
|
|
@@ -190,7 +190,9 @@ describe('Oas3 security-defined', () => {
|
|
|
190
190
|
externalRefResolver: new BaseResolver(),
|
|
191
191
|
document,
|
|
192
192
|
config: await makeConfig({
|
|
193
|
-
|
|
193
|
+
rules: {
|
|
194
|
+
'security-defined': { exceptions: [{ path: '/excluded' }] },
|
|
195
|
+
},
|
|
194
196
|
}),
|
|
195
197
|
});
|
|
196
198
|
|
|
@@ -217,7 +219,9 @@ describe('Oas3 security-defined', () => {
|
|
|
217
219
|
externalRefResolver: new BaseResolver(),
|
|
218
220
|
document,
|
|
219
221
|
config: await makeConfig({
|
|
220
|
-
|
|
222
|
+
rules: {
|
|
223
|
+
'security-defined': { exceptions: [{ path: '/partially-excluded', methods: ['GET'] }] },
|
|
224
|
+
},
|
|
221
225
|
}),
|
|
222
226
|
});
|
|
223
227
|
|
|
@@ -254,7 +258,9 @@ describe('Oas3 security-defined', () => {
|
|
|
254
258
|
const results = await lintDocument({
|
|
255
259
|
externalRefResolver: new BaseResolver(),
|
|
256
260
|
document,
|
|
257
|
-
config: await makeConfig({
|
|
261
|
+
config: await makeConfig({
|
|
262
|
+
rules: { 'security-defined': { exceptions: [{ path: '/excluded' }] } },
|
|
263
|
+
}),
|
|
258
264
|
});
|
|
259
265
|
|
|
260
266
|
expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
|
|
@@ -33,7 +33,7 @@ describe('Oas3 spec-strict-refs', () => {
|
|
|
33
33
|
const results = await lintDocument({
|
|
34
34
|
externalRefResolver: new BaseResolver(),
|
|
35
35
|
document,
|
|
36
|
-
config: await makeConfig({ 'spec-strict-refs': 'error' }),
|
|
36
|
+
config: await makeConfig({ rules: { 'spec-strict-refs': 'error' } }),
|
|
37
37
|
});
|
|
38
38
|
expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
|
|
39
39
|
[
|
|
@@ -25,7 +25,7 @@ describe('Oas3 spec', () => {
|
|
|
25
25
|
const results = await lintDocument({
|
|
26
26
|
externalRefResolver: new BaseResolver(),
|
|
27
27
|
document,
|
|
28
|
-
config: await makeConfig({ spec: 'error' }),
|
|
28
|
+
config: await makeConfig({ rules: { spec: 'error' } }),
|
|
29
29
|
});
|
|
30
30
|
|
|
31
31
|
expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
|
|
@@ -85,7 +85,7 @@ describe('Oas3 spec', () => {
|
|
|
85
85
|
const results = await lintDocument({
|
|
86
86
|
externalRefResolver: new BaseResolver(),
|
|
87
87
|
document,
|
|
88
|
-
config: await makeConfig({ spec: 'error' }),
|
|
88
|
+
config: await makeConfig({ rules: { spec: 'error' } }),
|
|
89
89
|
});
|
|
90
90
|
|
|
91
91
|
expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
|
|
@@ -157,7 +157,7 @@ describe('Oas3 spec', () => {
|
|
|
157
157
|
const results = await lintDocument({
|
|
158
158
|
externalRefResolver: new BaseResolver(),
|
|
159
159
|
document,
|
|
160
|
-
config: await makeConfig({ spec: 'error' }),
|
|
160
|
+
config: await makeConfig({ rules: { spec: 'error' } }),
|
|
161
161
|
});
|
|
162
162
|
|
|
163
163
|
expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
|
|
@@ -231,7 +231,7 @@ describe('Oas3 spec', () => {
|
|
|
231
231
|
const results = await lintDocument({
|
|
232
232
|
externalRefResolver: new BaseResolver(),
|
|
233
233
|
document,
|
|
234
|
-
config: await makeConfig({ spec: 'error' }),
|
|
234
|
+
config: await makeConfig({ rules: { spec: 'error' } }),
|
|
235
235
|
});
|
|
236
236
|
|
|
237
237
|
expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
|
|
@@ -322,7 +322,7 @@ describe('Oas3 spec', () => {
|
|
|
322
322
|
const results = await lintDocument({
|
|
323
323
|
externalRefResolver: new BaseResolver(),
|
|
324
324
|
document,
|
|
325
|
-
config: await makeConfig({ spec: 'error' }),
|
|
325
|
+
config: await makeConfig({ rules: { spec: 'error' } }),
|
|
326
326
|
});
|
|
327
327
|
|
|
328
328
|
expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
|
|
@@ -384,7 +384,7 @@ describe('Oas3.1 spec', () => {
|
|
|
384
384
|
const results = await lintDocument({
|
|
385
385
|
externalRefResolver: new BaseResolver(),
|
|
386
386
|
document,
|
|
387
|
-
config: await makeConfig({ spec: 'error' }),
|
|
387
|
+
config: await makeConfig({ rules: { spec: 'error' } }),
|
|
388
388
|
});
|
|
389
389
|
|
|
390
390
|
expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
|
|
@@ -432,7 +432,7 @@ describe('Oas3.1 spec', () => {
|
|
|
432
432
|
const results = await lintDocument({
|
|
433
433
|
externalRefResolver: new BaseResolver(),
|
|
434
434
|
document,
|
|
435
|
-
config: await makeConfig({ spec: 'error' }),
|
|
435
|
+
config: await makeConfig({ rules: { spec: 'error' } }),
|
|
436
436
|
});
|
|
437
437
|
|
|
438
438
|
expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
|
|
@@ -486,7 +486,7 @@ describe('Oas3.1 spec', () => {
|
|
|
486
486
|
const results = await lintDocument({
|
|
487
487
|
externalRefResolver: new BaseResolver(),
|
|
488
488
|
document,
|
|
489
|
-
config: await makeConfig({ spec: 'error' }),
|
|
489
|
+
config: await makeConfig({ rules: { spec: 'error' } }),
|
|
490
490
|
});
|
|
491
491
|
|
|
492
492
|
expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
|
|
@@ -557,7 +557,7 @@ describe('Oas3.1 spec', () => {
|
|
|
557
557
|
const results = await lintDocument({
|
|
558
558
|
externalRefResolver: new BaseResolver(),
|
|
559
559
|
document,
|
|
560
|
-
config: await makeConfig({ spec: 'error' }),
|
|
560
|
+
config: await makeConfig({ rules: { spec: 'error' } }),
|
|
561
561
|
});
|
|
562
562
|
|
|
563
563
|
expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
|
|
@@ -632,7 +632,7 @@ describe('Oas3.1 spec', () => {
|
|
|
632
632
|
const results = await lintDocument({
|
|
633
633
|
externalRefResolver: new BaseResolver(),
|
|
634
634
|
document,
|
|
635
|
-
config: await makeConfig({ spec: 'error' }),
|
|
635
|
+
config: await makeConfig({ rules: { spec: 'error' } }),
|
|
636
636
|
});
|
|
637
637
|
|
|
638
638
|
expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
|
|
@@ -19,7 +19,7 @@ describe('Oas3 tag-description', () => {
|
|
|
19
19
|
const results = await lintDocument({
|
|
20
20
|
externalRefResolver: new BaseResolver(),
|
|
21
21
|
document,
|
|
22
|
-
config: await makeConfig({ 'tag-description': 'error' }),
|
|
22
|
+
config: await makeConfig({ rules: { 'tag-description': 'error' } }),
|
|
23
23
|
});
|
|
24
24
|
|
|
25
25
|
expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
|
|
@@ -57,7 +57,7 @@ describe('Oas3 tag-description', () => {
|
|
|
57
57
|
const results = await lintDocument({
|
|
58
58
|
externalRefResolver: new BaseResolver(),
|
|
59
59
|
document,
|
|
60
|
-
config: await makeConfig({ 'tag-description': 'error' }),
|
|
60
|
+
config: await makeConfig({ rules: { 'tag-description': 'error' } }),
|
|
61
61
|
});
|
|
62
62
|
|
|
63
63
|
expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`[]`);
|
|
@@ -19,7 +19,7 @@ describe('Oas3 tags-alphabetical', () => {
|
|
|
19
19
|
const results = await lintDocument({
|
|
20
20
|
externalRefResolver: new BaseResolver(),
|
|
21
21
|
document,
|
|
22
|
-
config: await makeConfig({ 'tags-alphabetical': 'error' }),
|
|
22
|
+
config: await makeConfig({ rules: { 'tags-alphabetical': 'error' } }),
|
|
23
23
|
});
|
|
24
24
|
|
|
25
25
|
expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
|
|
@@ -56,7 +56,7 @@ describe('Oas3 tags-alphabetical', () => {
|
|
|
56
56
|
const results = await lintDocument({
|
|
57
57
|
externalRefResolver: new BaseResolver(),
|
|
58
58
|
document,
|
|
59
|
-
config: await makeConfig({ 'tags-alphabetical': 'error' }),
|
|
59
|
+
config: await makeConfig({ rules: { 'tags-alphabetical': 'error' } }),
|
|
60
60
|
});
|
|
61
61
|
|
|
62
62
|
expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`[]`);
|
|
@@ -77,7 +77,7 @@ describe('Oas3 tags-alphabetical', () => {
|
|
|
77
77
|
const results = await lintDocument({
|
|
78
78
|
externalRefResolver: new BaseResolver(),
|
|
79
79
|
document,
|
|
80
|
-
config: await makeConfig({ 'tags-alphabetical': 'error' }),
|
|
80
|
+
config: await makeConfig({ rules: { 'tags-alphabetical': 'error' } }),
|
|
81
81
|
});
|
|
82
82
|
|
|
83
83
|
expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
|
|
@@ -114,7 +114,9 @@ describe('Oas3 tags-alphabetical', () => {
|
|
|
114
114
|
const results = await lintDocument({
|
|
115
115
|
externalRefResolver: new BaseResolver(),
|
|
116
116
|
document,
|
|
117
|
-
config: await makeConfig({
|
|
117
|
+
config: await makeConfig({
|
|
118
|
+
rules: { 'tags-alphabetical': { severity: 'error', ignoreCase: true } },
|
|
119
|
+
}),
|
|
118
120
|
});
|
|
119
121
|
|
|
120
122
|
expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`[]`);
|
|
@@ -1,13 +1,9 @@
|
|
|
1
|
-
import { AssertionContext, AssertResult, CustomFunction } from 'core/src/config/types';
|
|
2
|
-
import { Location } from '../../../ref-utils';
|
|
3
1
|
import { isPlainObject, isString as runOnValue, isTruthy } from '../../../utils';
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
regexFromString,
|
|
10
|
-
} from './utils';
|
|
2
|
+
import { isOrdered, getIntersectionLength, regexFromString } from './utils';
|
|
3
|
+
|
|
4
|
+
import type { AssertionContext, AssertResult, CustomFunction } from '../../../config/types';
|
|
5
|
+
import type { Location } from '../../../ref-utils';
|
|
6
|
+
import type { OrderOptions, OrderDirection } from './utils';
|
|
11
7
|
|
|
12
8
|
export type AssertionFnContext = AssertionContext & { baseLocation: Location; rawValue?: any };
|
|
13
9
|
|
|
@@ -1,9 +1,16 @@
|
|
|
1
|
-
import { asserts, AssertionFn } from './asserts';
|
|
2
1
|
import { buildSubjectVisitor, buildVisitorObject } from './utils';
|
|
3
|
-
import { Oas2Visitor, Oas3Visitor } from '../../../visitors';
|
|
4
|
-
import { RuleSeverity } from '../../../config';
|
|
5
2
|
import { isString } from '../../../utils';
|
|
6
3
|
|
|
4
|
+
import type { asserts, AssertionFn } from './asserts';
|
|
5
|
+
import type {
|
|
6
|
+
ArazzoVisitor,
|
|
7
|
+
Async2Visitor,
|
|
8
|
+
Async3Visitor,
|
|
9
|
+
Oas2Visitor,
|
|
10
|
+
Oas3Visitor,
|
|
11
|
+
} from '../../../visitors';
|
|
12
|
+
import type { RuleSeverity } from '../../../config';
|
|
13
|
+
|
|
7
14
|
export type AssertionLocators = {
|
|
8
15
|
filterInParentKeys?: (string | number)[];
|
|
9
16
|
filterOutParentKeys?: (string | number)[];
|
|
@@ -28,7 +35,8 @@ export type RawAssertion = AssertionDefinition & {
|
|
|
28
35
|
export type Assertion = RawAssertion & { assertionId: string };
|
|
29
36
|
|
|
30
37
|
export const Assertions = (opts: Record<string, Assertion>) => {
|
|
31
|
-
const visitors: (Oas2Visitor | Oas3Visitor)[] =
|
|
38
|
+
const visitors: (Oas2Visitor | Oas3Visitor | Async2Visitor | Async3Visitor | ArazzoVisitor)[] =
|
|
39
|
+
[];
|
|
32
40
|
|
|
33
41
|
// As 'Assertions' has an array of asserts,
|
|
34
42
|
// that array spreads into an 'opts' object on init rules phase here
|
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
import { asserts, runOnKeysSet, runOnValuesSet
|
|
1
|
+
import { asserts, runOnKeysSet, runOnValuesSet } from './asserts';
|
|
2
2
|
import { colorize } from '../../../logger';
|
|
3
3
|
import { isRef } from '../../../ref-utils';
|
|
4
4
|
import { isTruthy, keysOf, isString } from '../../../utils';
|
|
5
|
+
|
|
6
|
+
import type { UserContext } from 'core/src/walk';
|
|
7
|
+
import type { Asserts } from './asserts';
|
|
5
8
|
import type { AssertionContext, AssertResult } from '../../../config';
|
|
6
9
|
import type { Assertion, AssertionDefinition, AssertionLocators } from '.';
|
|
7
10
|
import type {
|
|
@@ -10,7 +13,6 @@ import type {
|
|
|
10
13
|
SkipFunctionContext,
|
|
11
14
|
VisitFunction,
|
|
12
15
|
} from '../../../visitors';
|
|
13
|
-
import { UserContext } from 'core/src/walk';
|
|
14
16
|
|
|
15
17
|
export type OrderDirection = 'asc' | 'desc';
|
|
16
18
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { Oas3Rule, Oas2Rule } from '../../visitors';
|
|
2
1
|
import { missingRequiredField } from '../utils';
|
|
3
2
|
|
|
3
|
+
import type { Oas3Rule, Oas2Rule } from '../../visitors';
|
|
4
|
+
|
|
4
5
|
export const InfoContact: Oas3Rule | Oas2Rule = () => {
|
|
5
6
|
return {
|
|
6
7
|
Info(info, { report, location }) {
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { detectSpec } from '../../oas-types';
|
|
2
|
+
import { validateDefinedAndNonEmpty, validateOneOfDefinedAndNonEmpty } from '../utils';
|
|
3
|
+
|
|
4
|
+
import type { Oas3Rule, Oas2Rule, Async2Rule, Async3Rule } from '../../visitors';
|
|
5
|
+
|
|
6
|
+
export const InfoLicenseStrict: Oas2Rule | Oas3Rule | Async2Rule | Async3Rule = () => {
|
|
7
|
+
let specVersion: string | undefined;
|
|
8
|
+
return {
|
|
9
|
+
Root: {
|
|
10
|
+
enter(root: any) {
|
|
11
|
+
specVersion = detectSpec(root);
|
|
12
|
+
},
|
|
13
|
+
License: {
|
|
14
|
+
leave(license, ctx) {
|
|
15
|
+
if (specVersion === 'oas3_1') {
|
|
16
|
+
validateOneOfDefinedAndNonEmpty(['url', 'identifier'], license, ctx);
|
|
17
|
+
} else {
|
|
18
|
+
validateDefinedAndNonEmpty('url', license, ctx);
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { Oas3Rule, Oas2Rule } from '../../visitors';
|
|
2
1
|
import { validateDefinedAndNonEmpty } from '../utils';
|
|
3
2
|
|
|
3
|
+
import type { Oas3Rule, Oas2Rule } from '../../visitors';
|
|
4
|
+
|
|
4
5
|
export const InfoLicenseUrl: Oas3Rule | Oas2Rule = () => {
|
|
5
6
|
return {
|
|
6
7
|
License(license, ctx) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Oas3Rule, Oas2Rule } from '../../visitors';
|
|
2
|
-
import { UserContext } from '../../walk';
|
|
3
|
-
import { Oas3Paths } from '../../typings/openapi';
|
|
4
|
-
import { Oas2Paths } from '../../typings/swagger';
|
|
1
|
+
import type { Oas3Rule, Oas2Rule } from '../../visitors';
|
|
2
|
+
import type { UserContext } from '../../walk';
|
|
3
|
+
import type { Oas3Paths } from '../../typings/openapi';
|
|
4
|
+
import type { Oas2Paths } from '../../typings/swagger';
|
|
5
5
|
|
|
6
6
|
export const NoAmbiguousPaths: Oas3Rule | Oas2Rule = () => {
|
|
7
7
|
return {
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { Oas3Rule, Oas2Rule } from '../../visitors';
|
|
2
1
|
import { matchesJsonSchemaType, oasTypeOf } from '../utils';
|
|
3
|
-
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
2
|
+
|
|
3
|
+
import type { Oas3Rule, Oas2Rule } from '../../visitors';
|
|
4
|
+
import type { Oas2Schema } from '../../typings/swagger';
|
|
5
|
+
import type { Oas3Schema } from '../../typings/openapi';
|
|
6
|
+
import type { UserContext } from '../../walk';
|
|
6
7
|
|
|
7
8
|
export const NoEnumTypeMismatch: Oas3Rule | Oas2Rule = () => {
|
|
8
9
|
return {
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { Oas3Rule, Oas2Rule } from '../../visitors';
|
|
2
|
-
import { Oas2PathItem } from '../../typings/swagger';
|
|
3
|
-
import { Oas3PathItem } from '../../typings/openapi';
|
|
4
|
-
import { UserContext } from '../../walk';
|
|
5
1
|
import { isPathParameter, splitCamelCaseIntoWords } from '../../utils';
|
|
6
2
|
|
|
3
|
+
import type { Oas3Rule, Oas2Rule } from '../../visitors';
|
|
4
|
+
import type { Oas2PathItem } from '../../typings/swagger';
|
|
5
|
+
import type { Oas3PathItem } from '../../typings/openapi';
|
|
6
|
+
import type { UserContext } from '../../walk';
|
|
7
|
+
|
|
7
8
|
const httpMethods = ['get', 'head', 'post', 'put', 'patch', 'delete', 'options', 'trace'];
|
|
8
9
|
|
|
9
10
|
export const NoHttpVerbsInPaths: Oas3Rule | Oas2Rule = ({ splitIntoWords }) => {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Oas3Rule, Oas2Rule } from '../../visitors';
|
|
2
|
-
import { UserContext } from '../../walk';
|
|
3
|
-
import { Oas3Paths } from '../../typings/openapi';
|
|
4
|
-
import { Oas2Paths } from '../../typings/swagger';
|
|
1
|
+
import type { Oas3Rule, Oas2Rule } from '../../visitors';
|
|
2
|
+
import type { UserContext } from '../../walk';
|
|
3
|
+
import type { Oas3Paths } from '../../typings/openapi';
|
|
4
|
+
import type { Oas2Paths } from '../../typings/swagger';
|
|
5
5
|
|
|
6
6
|
export const NoIdenticalPaths: Oas3Rule | Oas2Rule = () => {
|
|
7
7
|
return {
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { UserContext } from '../../walk';
|
|
2
|
-
import { Oas3Parameter } from '../../typings/openapi';
|
|
3
1
|
import { getAdditionalPropertiesOption, validateExample } from '../utils';
|
|
4
2
|
|
|
3
|
+
import type { UserContext } from '../../walk';
|
|
4
|
+
import type { Oas3Parameter } from '../../typings/openapi';
|
|
5
|
+
|
|
5
6
|
export const NoInvalidParameterExamples: any = (opts: any) => {
|
|
6
7
|
const allowAdditionalProperties = getAdditionalPropertiesOption(opts) ?? false;
|
|
7
8
|
return {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Oas3Rule, Oas2Rule } from '../../visitors';
|
|
2
|
-
import { UserContext } from '../../walk';
|
|
1
|
+
import type { Oas3Rule, Oas2Rule } from '../../visitors';
|
|
2
|
+
import type { UserContext } from '../../walk';
|
|
3
3
|
|
|
4
4
|
export const NoPathTrailingSlash: Oas3Rule | Oas2Rule = () => {
|
|
5
5
|
return {
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { Oas2Rule, Oas3Rule } from '../../visitors';
|
|
2
|
-
import { Oas3Schema, Oas3_1Schema } from '../../typings/openapi';
|
|
3
|
-
import { Oas2Schema } from 'core/src/typings/swagger';
|
|
4
|
-
import { UserContext } from 'core/src/walk';
|
|
5
1
|
import { isRef } from '../../ref-utils';
|
|
6
2
|
|
|
3
|
+
import type { Oas2Rule, Oas3Rule } from '../../visitors';
|
|
4
|
+
import type { Oas3Schema, Oas3_1Schema } from '../../typings/openapi';
|
|
5
|
+
import type { Oas2Schema } from 'core/src/typings/swagger';
|
|
6
|
+
import type { UserContext } from 'core/src/walk';
|
|
7
|
+
|
|
7
8
|
export const NoRequiredSchemaPropertiesUndefined: Oas3Rule | Oas2Rule = () => {
|
|
8
9
|
return {
|
|
9
10
|
Schema: {
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { Oas3Rule, Oas2Rule } from '../../visitors';
|
|
2
|
-
import { UserContext } from '../../walk';
|
|
3
1
|
import { validateResponseCodes } from '../utils';
|
|
4
2
|
|
|
3
|
+
import type { Oas3Rule, Oas2Rule } from '../../visitors';
|
|
4
|
+
import type { UserContext } from '../../walk';
|
|
5
|
+
|
|
5
6
|
export const Operation2xxResponse: Oas3Rule | Oas2Rule = ({ validateWebhooks }) => {
|
|
6
7
|
return {
|
|
7
8
|
Paths: {
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { Oas3Rule, Oas2Rule } from '../../visitors';
|
|
2
|
-
import { UserContext } from '../../walk';
|
|
3
1
|
import { validateResponseCodes } from '../utils';
|
|
4
2
|
|
|
3
|
+
import type { Oas3Rule, Oas2Rule } from '../../visitors';
|
|
4
|
+
import type { UserContext } from '../../walk';
|
|
5
|
+
|
|
5
6
|
export const Operation4xxResponse: Oas3Rule | Oas2Rule = ({ validateWebhooks }) => {
|
|
6
7
|
return {
|
|
7
8
|
Paths: {
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { Oas3Rule, Oas2Rule } from '../../visitors';
|
|
2
1
|
import { validateDefinedAndNonEmpty } from '../utils';
|
|
3
|
-
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
2
|
+
|
|
3
|
+
import type { Oas3Rule, Oas2Rule } from '../../visitors';
|
|
4
|
+
import type { UserContext } from '../../walk';
|
|
5
|
+
import type { Oas2Operation } from '../../typings/swagger';
|
|
6
|
+
import type { Oas3Operation } from '../../typings/openapi';
|
|
6
7
|
|
|
7
8
|
export const OperationDescription: Oas3Rule | Oas2Rule = () => {
|
|
8
9
|
return {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Oas3Rule, Oas2Rule } from '../../visitors';
|
|
2
|
-
import { Oas2Operation } from '../../typings/swagger';
|
|
3
|
-
import { Oas3Operation } from '../../typings/openapi';
|
|
4
|
-
import { UserContext } from '../../walk';
|
|
1
|
+
import type { Oas3Rule, Oas2Rule } from '../../visitors';
|
|
2
|
+
import type { Oas2Operation } from '../../typings/swagger';
|
|
3
|
+
import type { Oas3Operation } from '../../typings/openapi';
|
|
4
|
+
import type { UserContext } from '../../walk';
|
|
5
5
|
|
|
6
6
|
export const OperationIdUnique: Oas3Rule | Oas2Rule = () => {
|
|
7
7
|
const seenOperations = new Set();
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { Oas3Rule, Oas2Rule } from '../../visitors';
|
|
2
|
-
import { Oas2Operation } from '../../typings/swagger';
|
|
3
|
-
import { Oas3Operation } from '../../typings/openapi';
|
|
4
|
-
import { UserContext } from '../../walk';
|
|
1
|
+
import type { Oas3Rule, Oas2Rule } from '../../visitors';
|
|
2
|
+
import type { Oas2Operation } from '../../typings/swagger';
|
|
3
|
+
import type { Oas3Operation } from '../../typings/openapi';
|
|
4
|
+
import type { UserContext } from '../../walk';
|
|
5
5
|
|
|
6
|
+
// eslint-disable-next-line no-useless-escape
|
|
6
7
|
const validUrlSymbols = /^[A-Za-z0-9-._~:/?#\[\]@!\$&'()*+,;=]*$/;
|
|
7
8
|
|
|
8
9
|
export const OperationIdUrlSafe: Oas3Rule | Oas2Rule = () => {
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { Oas3Rule, Oas2Rule } from '../../visitors';
|
|
2
1
|
import { validateDefinedAndNonEmpty } from '../utils';
|
|
3
|
-
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
2
|
+
|
|
3
|
+
import type { Oas3Rule, Oas2Rule } from '../../visitors';
|
|
4
|
+
import type { UserContext } from '../../walk';
|
|
5
|
+
import type { Oas2Operation } from '../../typings/swagger';
|
|
6
|
+
import type { Oas3Operation } from '../../typings/openapi';
|
|
6
7
|
|
|
7
8
|
export const OperationOperationId: Oas3Rule | Oas2Rule = () => {
|
|
8
9
|
return {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Oas3Rule, Oas2Rule } from '../../visitors';
|
|
2
|
-
import { Oas2Parameter } from '../../typings/swagger';
|
|
3
|
-
import { Oas3Parameter } from '../../typings/openapi';
|
|
4
|
-
import { UserContext } from '../../walk';
|
|
1
|
+
import type { Oas3Rule, Oas2Rule } from '../../visitors';
|
|
2
|
+
import type { Oas2Parameter } from '../../typings/swagger';
|
|
3
|
+
import type { Oas3Parameter } from '../../typings/openapi';
|
|
4
|
+
import type { UserContext } from '../../walk';
|
|
5
5
|
|
|
6
6
|
export const OperationParametersUnique: Oas3Rule | Oas2Rule = () => {
|
|
7
7
|
let seenPathParams: Set<string>;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Oas3Rule, Oas2Rule } from '../../visitors';
|
|
2
|
-
import { Oas2Operation } from '../../typings/swagger';
|
|
3
|
-
import { Oas3Operation } from '../../typings/openapi';
|
|
4
|
-
import { UserContext } from '../../walk';
|
|
1
|
+
import type { Oas3Rule, Oas2Rule } from '../../visitors';
|
|
2
|
+
import type { Oas2Operation } from '../../typings/swagger';
|
|
3
|
+
import type { Oas3Operation } from '../../typings/openapi';
|
|
4
|
+
import type { UserContext } from '../../walk';
|
|
5
5
|
|
|
6
6
|
export const OperationSingularTag: Oas3Rule | Oas2Rule = () => {
|
|
7
7
|
return {
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { Oas3Rule, Oas2Rule } from '../../visitors';
|
|
2
1
|
import { validateDefinedAndNonEmpty } from '../utils';
|
|
3
|
-
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
2
|
+
|
|
3
|
+
import type { Oas3Rule, Oas2Rule } from '../../visitors';
|
|
4
|
+
import type { UserContext } from '../../walk';
|
|
5
|
+
import type { Oas2Operation } from '../../typings/swagger';
|
|
6
|
+
import type { Oas3Operation } from '../../typings/openapi';
|
|
6
7
|
|
|
7
8
|
export const OperationSummary: Oas3Rule | Oas2Rule = () => {
|
|
8
9
|
return {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Oas3Rule, Oas2Rule } from '../../visitors';
|
|
2
|
-
import { Oas2Definition, Oas2Operation } from '../../typings/swagger';
|
|
3
|
-
import { Oas3Definition, Oas3Operation } from '../../typings/openapi';
|
|
4
|
-
import { UserContext } from '../../walk';
|
|
1
|
+
import type { Oas3Rule, Oas2Rule } from '../../visitors';
|
|
2
|
+
import type { Oas2Definition, Oas2Operation } from '../../typings/swagger';
|
|
3
|
+
import type { Oas3Definition, Oas3Operation } from '../../typings/openapi';
|
|
4
|
+
import type { UserContext } from '../../walk';
|
|
5
5
|
|
|
6
6
|
export const OperationTagDefined: Oas3Rule | Oas2Rule = () => {
|
|
7
7
|
let definedTags: Set<string>;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Oas3Rule, Oas2Rule } from '../../visitors';
|
|
2
|
-
import { Oas2Parameter } from '../../typings/swagger';
|
|
3
|
-
import { Oas3Parameter } from '../../typings/openapi';
|
|
4
|
-
import { UserContext } from '../../walk';
|
|
1
|
+
import type { Oas3Rule, Oas2Rule } from '../../visitors';
|
|
2
|
+
import type { Oas2Parameter } from '../../typings/swagger';
|
|
3
|
+
import type { Oas3Parameter } from '../../typings/openapi';
|
|
4
|
+
import type { UserContext } from '../../walk';
|
|
5
5
|
|
|
6
6
|
export const ParameterDescription: Oas3Rule | Oas2Rule = () => {
|
|
7
7
|
return {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Oas3Rule, Oas2Rule } from '../../visitors';
|
|
2
|
-
import { UserContext } from '../../walk';
|
|
1
|
+
import type { Oas3Rule, Oas2Rule } from '../../visitors';
|
|
2
|
+
import type { UserContext } from '../../walk';
|
|
3
3
|
|
|
4
4
|
export const PathDeclarationMustExist: Oas3Rule | Oas2Rule = () => {
|
|
5
5
|
return {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Oas2Rule, Oas3Rule } from '../../visitors';
|
|
2
|
-
import { Oas2PathItem } from '../../typings/swagger';
|
|
3
|
-
import { Oas3PathItem } from '../../typings/openapi';
|
|
4
|
-
import { UserContext } from '../../walk';
|
|
1
|
+
import type { Oas2Rule, Oas3Rule } from '../../visitors';
|
|
2
|
+
import type { Oas2PathItem } from '../../typings/swagger';
|
|
3
|
+
import type { Oas3PathItem } from '../../typings/openapi';
|
|
4
|
+
import type { UserContext } from '../../walk';
|
|
5
5
|
|
|
6
6
|
export const PathExcludesPatterns: Oas3Rule | Oas2Rule = ({ patterns }) => {
|
|
7
7
|
return {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Oas3Rule, Oas2Rule } from '../../visitors';
|
|
2
|
-
import { Oas2PathItem } from '../../typings/swagger';
|
|
3
|
-
import { Oas3PathItem } from '../../typings/openapi';
|
|
4
|
-
import { UserContext } from '../../walk';
|
|
1
|
+
import type { Oas3Rule, Oas2Rule } from '../../visitors';
|
|
2
|
+
import type { Oas2PathItem } from '../../typings/swagger';
|
|
3
|
+
import type { Oas3PathItem } from '../../typings/openapi';
|
|
4
|
+
import type { UserContext } from '../../walk';
|
|
5
5
|
|
|
6
6
|
const defaultOrder = ['get', 'head', 'post', 'put', 'patch', 'delete', 'options', 'trace'];
|
|
7
7
|
|