@redocly/openapi-core 1.0.0-beta.98 → 1.0.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -6
- package/lib/benchmark/benches/lint-with-top-level-rule-report.bench.js +0 -1
- package/lib/benchmark/benches/recommended-oas3.bench.js +1 -1
- package/lib/benchmark/benches/resolve-with-no-external.bench.js +1 -1
- package/lib/benchmark/utils.d.ts +2 -2
- package/lib/benchmark/utils.js +2 -2
- package/lib/bundle.d.ts +12 -15
- package/lib/bundle.js +38 -15
- package/lib/config/all.d.ts +2 -2
- package/lib/config/all.js +17 -6
- package/lib/config/builtIn.d.ts +2 -2
- package/lib/config/builtIn.js +2 -2
- package/lib/config/config-resolvers.d.ts +5 -5
- package/lib/config/config-resolvers.js +121 -66
- package/lib/config/config.d.ts +12 -18
- package/lib/config/config.js +42 -26
- package/lib/config/load.d.ts +16 -3
- package/lib/config/load.js +36 -14
- package/lib/config/minimal.d.ts +2 -2
- package/lib/config/minimal.js +10 -6
- package/lib/config/recommended.d.ts +2 -2
- package/lib/config/recommended.js +10 -6
- package/lib/config/rules.d.ts +7 -4
- package/lib/config/rules.js +5 -4
- package/lib/config/types.d.ts +72 -23
- package/lib/config/types.js +13 -0
- package/lib/config/utils.d.ts +6 -5
- package/lib/config/utils.js +110 -32
- package/lib/decorators/common/filters/filter-helper.d.ts +3 -0
- package/lib/decorators/common/filters/filter-helper.js +67 -0
- package/lib/decorators/common/filters/filter-in.d.ts +2 -0
- package/lib/decorators/common/filters/filter-in.js +17 -0
- package/lib/decorators/common/filters/filter-out.d.ts +2 -0
- package/lib/decorators/common/filters/filter-out.js +17 -0
- package/lib/decorators/common/info-override.d.ts +2 -0
- package/lib/decorators/common/info-override.js +28 -0
- package/lib/decorators/common/media-type-examples-override.d.ts +2 -0
- package/lib/decorators/common/media-type-examples-override.js +53 -0
- package/lib/decorators/common/registry-dependencies.js +2 -2
- package/lib/decorators/common/remove-x-internal.js +2 -2
- package/lib/decorators/oas2/index.d.ts +3 -0
- package/lib/decorators/oas2/index.js +7 -1
- package/lib/decorators/oas3/index.d.ts +4 -0
- package/lib/decorators/oas3/index.js +9 -1
- package/lib/env.d.ts +3 -0
- package/lib/env.js +8 -0
- package/lib/format/codeframes.js +16 -10
- package/lib/format/format.d.ts +1 -1
- package/lib/format/format.js +64 -32
- package/lib/index.d.ts +6 -6
- package/lib/index.js +7 -2
- package/lib/js-yaml/index.js +2 -6
- package/lib/lint.d.ts +4 -2
- package/lib/lint.js +36 -11
- package/lib/logger.d.ts +10 -0
- package/lib/logger.js +31 -0
- package/lib/output.d.ts +3 -0
- package/lib/output.js +9 -0
- package/lib/redocly/index.js +10 -9
- package/lib/redocly/registry-api-types.d.ts +28 -28
- package/lib/redocly/registry-api.d.ts +3 -3
- package/lib/redocly/registry-api.js +10 -2
- package/lib/ref-utils.d.ts +1 -0
- package/lib/ref-utils.js +8 -2
- package/lib/resolve.d.ts +1 -1
- package/lib/resolve.js +33 -3
- package/lib/rules/ajv.d.ts +2 -2
- package/lib/rules/ajv.js +12 -12
- package/lib/rules/common/assertions/asserts.d.ts +29 -4
- package/lib/rules/common/assertions/asserts.js +227 -97
- package/lib/rules/common/assertions/index.d.ts +27 -2
- package/lib/rules/common/assertions/index.js +9 -37
- package/lib/rules/common/assertions/utils.d.ts +16 -8
- package/lib/rules/common/assertions/utils.js +160 -76
- package/lib/rules/common/info-license-url.d.ts +1 -1
- package/lib/rules/common/info-license-url.js +5 -10
- package/lib/rules/common/info-license.d.ts +2 -0
- package/lib/rules/common/info-license.js +17 -0
- package/lib/rules/common/no-ambiguous-paths.js +1 -1
- package/lib/rules/common/no-enum-type-mismatch.js +1 -3
- package/lib/rules/common/no-identical-paths.js +4 -4
- package/lib/rules/common/no-invalid-parameter-examples.js +3 -3
- package/lib/rules/common/no-invalid-schema-examples.js +3 -3
- package/lib/rules/common/operation-2xx-response.js +15 -9
- package/lib/rules/common/operation-4xx-response.js +15 -9
- package/lib/rules/common/operation-operationId.js +2 -2
- package/lib/rules/common/operation-tag-defined.js +1 -1
- package/lib/rules/common/path-not-include-query.js +2 -2
- package/lib/rules/common/path-params-defined.js +7 -2
- package/lib/rules/common/paths-kebab-case.js +4 -1
- package/lib/rules/common/required-string-property-missing-min-length.d.ts +2 -0
- package/lib/rules/common/required-string-property-missing-min-length.js +37 -0
- package/lib/rules/common/response-contains-header.d.ts +2 -0
- package/lib/rules/common/response-contains-header.js +29 -0
- package/lib/rules/common/scalar-property-missing-example.d.ts +2 -0
- package/lib/rules/common/scalar-property-missing-example.js +42 -0
- package/lib/rules/common/security-defined.d.ts +2 -0
- package/lib/rules/common/{operation-security-defined.js → security-defined.js} +25 -6
- package/lib/rules/common/spec-strict-refs.d.ts +2 -0
- package/lib/rules/common/spec-strict-refs.js +30 -0
- package/lib/rules/common/spec.js +41 -18
- package/lib/rules/common/tags-alphabetical.js +1 -1
- package/lib/rules/oas2/index.d.ts +6 -2
- package/lib/rules/oas2/index.js +16 -8
- package/lib/rules/oas2/remove-unused-components.js +6 -6
- package/lib/rules/oas2/request-mime-type.d.ts +1 -1
- package/lib/rules/oas2/request-mime-type.js +1 -1
- package/lib/rules/oas2/response-contains-property.d.ts +2 -0
- package/lib/rules/oas2/response-contains-property.js +38 -0
- package/lib/rules/oas2/response-mime-type.d.ts +1 -1
- package/lib/rules/oas2/response-mime-type.js +1 -1
- package/lib/rules/oas3/component-name-unique.d.ts +2 -0
- package/lib/rules/oas3/component-name-unique.js +124 -0
- package/lib/rules/oas3/index.js +24 -10
- package/lib/rules/oas3/no-empty-servers.js +2 -2
- package/lib/rules/oas3/no-invalid-media-type-examples.js +2 -2
- package/lib/rules/oas3/no-server-variables-empty-enum.d.ts +2 -0
- package/lib/rules/oas3/{no-servers-empty-enum.js → no-server-variables-empty-enum.js} +5 -5
- package/lib/rules/oas3/no-unused-components.js +2 -2
- package/lib/rules/oas3/operation-4xx-problem-details-rfc7807.d.ts +5 -0
- package/lib/rules/oas3/operation-4xx-problem-details-rfc7807.js +36 -0
- package/lib/rules/oas3/remove-unused-components.js +6 -6
- package/lib/rules/oas3/request-mime-type.d.ts +1 -1
- package/lib/rules/oas3/request-mime-type.js +1 -1
- package/lib/rules/oas3/response-contains-property.d.ts +2 -0
- package/lib/rules/oas3/response-contains-property.js +40 -0
- package/lib/rules/oas3/response-mime-type.d.ts +1 -1
- package/lib/rules/oas3/response-mime-type.js +1 -1
- package/lib/rules/oas3/spec-components-invalid-map-name.d.ts +2 -0
- package/lib/rules/oas3/spec-components-invalid-map-name.js +62 -0
- package/lib/rules/other/stats.d.ts +2 -2
- package/lib/rules/other/stats.js +45 -16
- package/lib/rules/utils.d.ts +5 -2
- package/lib/rules/utils.js +54 -6
- package/lib/types/config-external-schemas.d.ts +2193 -0
- package/lib/types/config-external-schemas.js +805 -0
- package/lib/types/index.d.ts +3 -2
- package/lib/types/index.js +9 -1
- package/lib/types/oas2.js +91 -15
- package/lib/types/oas3.js +139 -49
- package/lib/types/oas3_1.js +32 -26
- package/lib/types/redocly-yaml.js +414 -58
- package/lib/typings/openapi.d.ts +3 -2
- package/lib/utils.d.ts +15 -3
- package/lib/utils.js +73 -7
- package/lib/visitors.d.ts +20 -16
- package/lib/visitors.js +28 -3
- package/lib/walk.d.ts +11 -19
- package/lib/walk.js +74 -53
- package/package.json +5 -6
- package/__tests__/__snapshots__/bundle.test.ts.snap +0 -229
- package/__tests__/bundle.test.ts +0 -132
- package/__tests__/codeframes.test.ts +0 -531
- package/__tests__/fixtures/extension.js +0 -24
- package/__tests__/fixtures/refs/definitions.yaml +0 -3
- package/__tests__/fixtures/refs/examples.yaml +0 -8
- package/__tests__/fixtures/refs/external-request-body.yaml +0 -13
- package/__tests__/fixtures/refs/externalref.yaml +0 -35
- package/__tests__/fixtures/refs/hosted.yaml +0 -35
- package/__tests__/fixtures/refs/openapi-with-external-refs-conflicting-names.yaml +0 -21
- package/__tests__/fixtures/refs/openapi-with-external-refs.yaml +0 -33
- package/__tests__/fixtures/refs/param-b.yaml +0 -1
- package/__tests__/fixtures/refs/param-c.yaml +0 -1
- package/__tests__/fixtures/refs/rename.yaml +0 -1
- package/__tests__/fixtures/refs/requestBody.yaml +0 -9
- package/__tests__/fixtures/refs/schema-a.yaml +0 -1
- package/__tests__/fixtures/refs/simple.yaml +0 -1
- package/__tests__/fixtures/refs/vendor.schema.yaml +0 -20
- package/__tests__/fixtures/resolve/External.yaml +0 -10
- package/__tests__/fixtures/resolve/External2.yaml +0 -4
- package/__tests__/fixtures/resolve/description.md +0 -3
- package/__tests__/fixtures/resolve/externalInfo.yaml +0 -4
- package/__tests__/fixtures/resolve/externalLicense.yaml +0 -1
- package/__tests__/fixtures/resolve/openapi-with-back.yaml +0 -13
- package/__tests__/fixtures/resolve/openapi-with-md-description.yaml +0 -5
- package/__tests__/fixtures/resolve/openapi.yaml +0 -28
- package/__tests__/fixtures/resolve/schemas/type-a.yaml +0 -10
- package/__tests__/fixtures/resolve/schemas/type-b.yaml +0 -6
- package/__tests__/fixtures/resolve/transitive/a.yaml +0 -1
- package/__tests__/fixtures/resolve/transitive/components.yaml +0 -5
- package/__tests__/fixtures/resolve/transitive/schemas.yaml +0 -3
- package/__tests__/lint.test.ts +0 -17
- package/__tests__/login.test.ts +0 -17
- package/__tests__/normalizeVisitors.test.ts +0 -151
- package/__tests__/ref-utils.test.ts +0 -120
- package/__tests__/resolve-http.test.ts +0 -77
- package/__tests__/resolve.test.ts +0 -405
- package/__tests__/utils.ts +0 -86
- package/__tests__/walk.test.ts +0 -1485
- package/lib/rules/common/info-description.d.ts +0 -2
- package/lib/rules/common/info-description.js +0 -12
- package/lib/rules/common/license-url.d.ts +0 -2
- package/lib/rules/common/license-url.js +0 -12
- package/lib/rules/common/operation-security-defined.d.ts +0 -2
- package/lib/rules/oas3/no-servers-empty-enum.d.ts +0 -2
- package/src/__tests__/js-yaml.test.ts +0 -71
- package/src/__tests__/lint.test.ts +0 -182
- package/src/__tests__/utils.test.ts +0 -74
- package/src/benchmark/benches/lint-with-many-rules.bench.ts +0 -35
- package/src/benchmark/benches/lint-with-nested-rule.bench.ts +0 -39
- package/src/benchmark/benches/lint-with-no-rules.bench.ts +0 -20
- package/src/benchmark/benches/lint-with-top-level-rule-report.bench.ts +0 -36
- package/src/benchmark/benches/lint-with-top-level-rule.bench.ts +0 -32
- package/src/benchmark/benches/rebilly.yaml +0 -32267
- package/src/benchmark/benches/recommended-oas3.bench.ts +0 -22
- package/src/benchmark/benches/resolve-with-no-external.bench.ts +0 -23
- package/src/benchmark/benchmark.js +0 -307
- package/src/benchmark/colors.js +0 -29
- package/src/benchmark/fork.js +0 -83
- package/src/benchmark/utils.ts +0 -36
- package/src/bundle.ts +0 -371
- package/src/config/__tests__/__snapshots__/config-resolvers.test.ts.snap +0 -157
- package/src/config/__tests__/config-resolvers.test.ts +0 -429
- package/src/config/__tests__/config.test.ts +0 -244
- package/src/config/__tests__/fixtures/plugin-config.yaml +0 -3
- package/src/config/__tests__/fixtures/plugin.js +0 -56
- package/src/config/__tests__/fixtures/resolve-config/api/nested-config.yaml +0 -12
- package/src/config/__tests__/fixtures/resolve-config/api/plugin.js +0 -67
- package/src/config/__tests__/fixtures/resolve-config/local-config-with-circular.yaml +0 -8
- package/src/config/__tests__/fixtures/resolve-config/local-config-with-file.yaml +0 -19
- package/src/config/__tests__/fixtures/resolve-config/local-config.yaml +0 -10
- package/src/config/__tests__/fixtures/resolve-config/plugin.js +0 -66
- package/src/config/__tests__/fixtures/resolve-remote-configs/nested-remote-config.yaml +0 -4
- package/src/config/__tests__/fixtures/resolve-remote-configs/remote-config.yaml +0 -5
- package/src/config/__tests__/load.test.ts +0 -83
- package/src/config/__tests__/resolve-plugins.test.ts +0 -27
- package/src/config/all.ts +0 -65
- package/src/config/builtIn.ts +0 -37
- package/src/config/config-resolvers.ts +0 -359
- package/src/config/config.ts +0 -312
- package/src/config/index.ts +0 -7
- package/src/config/load.ts +0 -84
- package/src/config/minimal.ts +0 -58
- package/src/config/recommended.ts +0 -58
- package/src/config/rules.ts +0 -46
- package/src/config/types.ts +0 -168
- package/src/config/utils.ts +0 -208
- package/src/decorators/__tests__/remove-x-internal.test.ts +0 -316
- package/src/decorators/common/info-description-override.ts +0 -24
- package/src/decorators/common/operation-description-override.ts +0 -30
- package/src/decorators/common/registry-dependencies.ts +0 -25
- package/src/decorators/common/remove-x-internal.ts +0 -59
- package/src/decorators/common/tag-description-override.ts +0 -25
- package/src/decorators/oas2/index.ts +0 -14
- package/src/decorators/oas3/index.ts +0 -14
- package/src/format/codeframes.ts +0 -210
- package/src/format/format.ts +0 -339
- package/src/index.ts +0 -68
- package/src/js-yaml/index.ts +0 -18
- package/src/lint.ts +0 -125
- package/src/oas-types.ts +0 -62
- package/src/redocly/__tests__/redocly-client.test.ts +0 -140
- package/src/redocly/index.ts +0 -182
- package/src/redocly/redocly-client-types.ts +0 -10
- package/src/redocly/registry-api-types.ts +0 -32
- package/src/redocly/registry-api.ts +0 -134
- package/src/ref-utils.ts +0 -79
- package/src/resolve.ts +0 -378
- package/src/rules/__tests__/fixtures/invalid-yaml.yaml +0 -1
- package/src/rules/__tests__/fixtures/ref.yaml +0 -1
- package/src/rules/__tests__/no-unresolved-refs.test.ts +0 -168
- package/src/rules/ajv.ts +0 -103
- package/src/rules/common/__tests__/info-description.test.ts +0 -102
- package/src/rules/common/__tests__/info-license.test.ts +0 -62
- package/src/rules/common/__tests__/license-url.test.ts +0 -63
- package/src/rules/common/__tests__/no-ambiguous-paths.test.ts +0 -96
- package/src/rules/common/__tests__/no-enum-type-mismatch.test.ts +0 -209
- package/src/rules/common/__tests__/no-identical-paths.test.ts +0 -58
- package/src/rules/common/__tests__/no-path-trailing-slash.test.ts +0 -85
- package/src/rules/common/__tests__/operation-2xx-response.test.ts +0 -91
- package/src/rules/common/__tests__/operation-4xx-response.test.ts +0 -107
- package/src/rules/common/__tests__/operation-operationId-unique.test.ts +0 -76
- package/src/rules/common/__tests__/operation-operationId-url-safe.test.ts +0 -45
- package/src/rules/common/__tests__/operation-parameters-unique.test.ts +0 -167
- package/src/rules/common/__tests__/operation-security-defined.test.ts +0 -69
- package/src/rules/common/__tests__/operation-singular-tag.test.ts +0 -72
- package/src/rules/common/__tests__/path-http-verbs-order.test.ts +0 -95
- package/src/rules/common/__tests__/path-not-include-query.test.ts +0 -64
- package/src/rules/common/__tests__/path-params-defined.test.ts +0 -133
- package/src/rules/common/__tests__/paths-kebab-case.test.ts +0 -108
- package/src/rules/common/__tests__/spec.test.ts +0 -62
- package/src/rules/common/__tests__/tag-description.test.ts +0 -65
- package/src/rules/common/__tests__/tags-alphabetical.test.ts +0 -64
- package/src/rules/common/assertions/__tests__/asserts.test.ts +0 -231
- package/src/rules/common/assertions/__tests__/index.test.ts +0 -65
- package/src/rules/common/assertions/__tests__/utils.test.ts +0 -89
- package/src/rules/common/assertions/asserts.ts +0 -137
- package/src/rules/common/assertions/index.ts +0 -75
- package/src/rules/common/assertions/utils.ts +0 -167
- package/src/rules/common/info-contact.ts +0 -15
- package/src/rules/common/info-description.ts +0 -10
- package/src/rules/common/info-license-url.ts +0 -15
- package/src/rules/common/license-url.ts +0 -10
- package/src/rules/common/no-ambiguous-paths.ts +0 -50
- package/src/rules/common/no-enum-type-mismatch.ts +0 -49
- package/src/rules/common/no-http-verbs-in-paths.ts +0 -36
- package/src/rules/common/no-identical-paths.ts +0 -24
- package/src/rules/common/no-invalid-parameter-examples.ts +0 -36
- package/src/rules/common/no-invalid-schema-examples.ts +0 -27
- package/src/rules/common/no-path-trailing-slash.ts +0 -15
- package/src/rules/common/operation-2xx-response.ts +0 -16
- package/src/rules/common/operation-4xx-response.ts +0 -17
- package/src/rules/common/operation-description.ts +0 -13
- package/src/rules/common/operation-operationId-unique.ts +0 -21
- package/src/rules/common/operation-operationId-url-safe.ts +0 -19
- package/src/rules/common/operation-operationId.ts +0 -17
- package/src/rules/common/operation-parameters-unique.ts +0 -48
- package/src/rules/common/operation-security-defined.ts +0 -45
- package/src/rules/common/operation-singular-tag.ts +0 -17
- package/src/rules/common/operation-summary.ts +0 -13
- package/src/rules/common/operation-tag-defined.ts +0 -26
- package/src/rules/common/parameter-description.ts +0 -22
- package/src/rules/common/path-declaration-must-exist.ts +0 -15
- package/src/rules/common/path-excludes-patterns.ts +0 -23
- package/src/rules/common/path-http-verbs-order.ts +0 -30
- package/src/rules/common/path-not-include-query.ts +0 -17
- package/src/rules/common/path-params-defined.ts +0 -58
- package/src/rules/common/path-segment-plural.ts +0 -31
- package/src/rules/common/paths-kebab-case.ts +0 -16
- package/src/rules/common/spec.ts +0 -143
- package/src/rules/common/tag-description.ts +0 -10
- package/src/rules/common/tags-alphabetical.ts +0 -20
- package/src/rules/no-unresolved-refs.ts +0 -51
- package/src/rules/oas2/__tests__/boolean-parameter-prefixes.test.ts +0 -110
- package/src/rules/oas2/__tests__/spec/fixtures/description.md +0 -1
- package/src/rules/oas2/__tests__/spec/info.test.ts +0 -355
- package/src/rules/oas2/__tests__/spec/operation.test.ts +0 -123
- package/src/rules/oas2/__tests__/spec/paths.test.ts +0 -245
- package/src/rules/oas2/__tests__/spec/referenceableScalars.test.ts +0 -31
- package/src/rules/oas2/__tests__/spec/utils.ts +0 -32
- package/src/rules/oas2/boolean-parameter-prefixes.ts +0 -26
- package/src/rules/oas2/index.ts +0 -83
- package/src/rules/oas2/remove-unused-components.ts +0 -76
- package/src/rules/oas2/request-mime-type.ts +0 -17
- package/src/rules/oas2/response-mime-type.ts +0 -17
- package/src/rules/oas3/__tests__/boolean-parameter-prefixes.test.ts +0 -111
- package/src/rules/oas3/__tests__/fixtures/common.yaml +0 -11
- package/src/rules/oas3/__tests__/no-empty-enum-servers.com.test.ts +0 -205
- package/src/rules/oas3/__tests__/no-example-value-and-externalValue.test.ts +0 -65
- package/src/rules/oas3/__tests__/no-invalid-media-type-examples.test.ts +0 -392
- package/src/rules/oas3/__tests__/no-server-example.com.test.ts +0 -60
- package/src/rules/oas3/__tests__/no-server-trailing-slash.test.ts +0 -79
- package/src/rules/oas3/__tests__/no-unused-components.test.ts +0 -131
- package/src/rules/oas3/__tests__/spec/callbacks.test.ts +0 -41
- package/src/rules/oas3/__tests__/spec/fixtures/description.md +0 -1
- package/src/rules/oas3/__tests__/spec/info.test.ts +0 -391
- package/src/rules/oas3/__tests__/spec/operation.test.ts +0 -253
- package/src/rules/oas3/__tests__/spec/paths.test.ts +0 -284
- package/src/rules/oas3/__tests__/spec/referenceableScalars.test.ts +0 -77
- package/src/rules/oas3/__tests__/spec/servers.test.ts +0 -499
- package/src/rules/oas3/__tests__/spec/spec.test.ts +0 -288
- package/src/rules/oas3/__tests__/spec/utils.ts +0 -32
- package/src/rules/oas3/boolean-parameter-prefixes.ts +0 -28
- package/src/rules/oas3/index.ts +0 -99
- package/src/rules/oas3/no-empty-servers.ts +0 -22
- package/src/rules/oas3/no-example-value-and-externalValue.ts +0 -14
- package/src/rules/oas3/no-invalid-media-type-examples.ts +0 -41
- package/src/rules/oas3/no-server-example.com.ts +0 -14
- package/src/rules/oas3/no-server-trailing-slash.ts +0 -15
- package/src/rules/oas3/no-servers-empty-enum.ts +0 -67
- package/src/rules/oas3/no-undefined-server-variable.ts +0 -30
- package/src/rules/oas3/no-unused-components.ts +0 -75
- package/src/rules/oas3/remove-unused-components.ts +0 -84
- package/src/rules/oas3/request-mime-type.ts +0 -31
- package/src/rules/oas3/response-mime-type.ts +0 -31
- package/src/rules/other/stats.ts +0 -44
- package/src/rules/utils.ts +0 -123
- package/src/types/index.ts +0 -138
- package/src/types/oas2.ts +0 -397
- package/src/types/oas3.ts +0 -506
- package/src/types/oas3_1.ts +0 -251
- package/src/types/redocly-yaml.ts +0 -637
- package/src/typings/common.ts +0 -9
- package/src/typings/openapi.ts +0 -297
- package/src/typings/swagger.ts +0 -236
- package/src/utils.ts +0 -190
- package/src/visitors.ts +0 -448
- package/src/walk.ts +0 -416
- package/tsconfig.json +0 -8
- package/tsconfig.tsbuildinfo +0 -1
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.PathNotIncludeQuery = void 0;
|
|
4
4
|
const PathNotIncludeQuery = () => {
|
|
5
5
|
return {
|
|
6
|
-
|
|
6
|
+
Paths: {
|
|
7
7
|
PathItem(_operation, { report, key }) {
|
|
8
8
|
if (key.toString().includes('?')) {
|
|
9
9
|
report({
|
|
@@ -12,7 +12,7 @@ const PathNotIncludeQuery = () => {
|
|
|
12
12
|
});
|
|
13
13
|
}
|
|
14
14
|
},
|
|
15
|
-
}
|
|
15
|
+
},
|
|
16
16
|
};
|
|
17
17
|
};
|
|
18
18
|
exports.PathNotIncludeQuery = PathNotIncludeQuery;
|
|
@@ -6,6 +6,7 @@ const PathParamsDefined = () => {
|
|
|
6
6
|
let pathTemplateParams;
|
|
7
7
|
let definedPathParams;
|
|
8
8
|
let currentPath;
|
|
9
|
+
let definedOperationParams;
|
|
9
10
|
return {
|
|
10
11
|
PathItem: {
|
|
11
12
|
enter(_, { key }) {
|
|
@@ -25,9 +26,13 @@ const PathParamsDefined = () => {
|
|
|
25
26
|
}
|
|
26
27
|
},
|
|
27
28
|
Operation: {
|
|
29
|
+
enter() {
|
|
30
|
+
definedOperationParams = new Set();
|
|
31
|
+
},
|
|
28
32
|
leave(_op, { report, location }) {
|
|
29
33
|
for (const templateParam of Array.from(pathTemplateParams.keys())) {
|
|
30
|
-
if (!
|
|
34
|
+
if (!definedOperationParams.has(templateParam) &&
|
|
35
|
+
!definedPathParams.has(templateParam)) {
|
|
31
36
|
report({
|
|
32
37
|
message: `The operation does not define the path parameter \`{${templateParam}}\` expected by path \`${currentPath}\`.`,
|
|
33
38
|
location: location.child(['parameters']).key(), // report on operation
|
|
@@ -37,7 +42,7 @@ const PathParamsDefined = () => {
|
|
|
37
42
|
},
|
|
38
43
|
Parameter(parameter, { report, location }) {
|
|
39
44
|
if (parameter.in === 'path' && parameter.name) {
|
|
40
|
-
|
|
45
|
+
definedOperationParams.add(parameter.name);
|
|
41
46
|
if (!pathTemplateParams.has(parameter.name)) {
|
|
42
47
|
report({
|
|
43
48
|
message: `Path parameter \`${parameter.name}\` is not used in the path \`${currentPath}\`.`,
|
|
@@ -4,7 +4,10 @@ exports.PathsKebabCase = void 0;
|
|
|
4
4
|
const PathsKebabCase = () => {
|
|
5
5
|
return {
|
|
6
6
|
PathItem(_path, { report, key }) {
|
|
7
|
-
const segments = key
|
|
7
|
+
const segments = key
|
|
8
|
+
.substr(1)
|
|
9
|
+
.split('/')
|
|
10
|
+
.filter((s) => s !== ''); // filter out empty segments
|
|
8
11
|
if (!segments.every((segment) => /^{.+}$/.test(segment) || /^[a-z0-9-.]+$/.test(segment))) {
|
|
9
12
|
report({
|
|
10
13
|
message: `\`${key}\` does not use kebab-case.`,
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RequiredStringPropertyMissingMinLength = void 0;
|
|
4
|
+
const RequiredStringPropertyMissingMinLength = () => {
|
|
5
|
+
let skipSchemaProperties;
|
|
6
|
+
let requiredPropertiesSet;
|
|
7
|
+
return {
|
|
8
|
+
Schema: {
|
|
9
|
+
enter(schema) {
|
|
10
|
+
if (!(schema === null || schema === void 0 ? void 0 : schema.required)) {
|
|
11
|
+
skipSchemaProperties = true;
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
requiredPropertiesSet = new Set(schema.required);
|
|
15
|
+
skipSchemaProperties = false;
|
|
16
|
+
},
|
|
17
|
+
SchemaProperties: {
|
|
18
|
+
skip() {
|
|
19
|
+
return skipSchemaProperties;
|
|
20
|
+
},
|
|
21
|
+
Schema: {
|
|
22
|
+
enter(schema, { key, location, report }) {
|
|
23
|
+
if (requiredPropertiesSet.has(key) && schema.type === 'string') {
|
|
24
|
+
if (!(schema === null || schema === void 0 ? void 0 : schema.minLength)) {
|
|
25
|
+
report({
|
|
26
|
+
message: 'Property minLength is required.',
|
|
27
|
+
location: location.key(),
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
exports.RequiredStringPropertyMissingMinLength = RequiredStringPropertyMissingMinLength;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ResponseContainsHeader = void 0;
|
|
4
|
+
const utils_1 = require("../../utils");
|
|
5
|
+
const ResponseContainsHeader = (options) => {
|
|
6
|
+
const names = options.names || {};
|
|
7
|
+
return {
|
|
8
|
+
Operation: {
|
|
9
|
+
Response: {
|
|
10
|
+
enter: (response, { report, location, key }) => {
|
|
11
|
+
const expectedHeaders = names[key] ||
|
|
12
|
+
names[utils_1.getMatchingStatusCodeRange(key)] ||
|
|
13
|
+
names[utils_1.getMatchingStatusCodeRange(key).toLowerCase()] ||
|
|
14
|
+
[];
|
|
15
|
+
for (const expectedHeader of expectedHeaders) {
|
|
16
|
+
if (!(response === null || response === void 0 ? void 0 : response.headers) ||
|
|
17
|
+
!Object.keys(response === null || response === void 0 ? void 0 : response.headers).some((header) => header.toLowerCase() === expectedHeader.toLowerCase())) {
|
|
18
|
+
report({
|
|
19
|
+
message: `Response object must contain a "${expectedHeader}" header.`,
|
|
20
|
+
location: location.child('headers').key(),
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
exports.ResponseContainsHeader = ResponseContainsHeader;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ScalarPropertyMissingExample = void 0;
|
|
4
|
+
const oas_types_1 = require("../../oas-types");
|
|
5
|
+
const SCALAR_TYPES = ['string', 'integer', 'number', 'boolean', 'null'];
|
|
6
|
+
const ScalarPropertyMissingExample = () => {
|
|
7
|
+
return {
|
|
8
|
+
SchemaProperties(properties, { report, location, oasVersion, resolve }) {
|
|
9
|
+
for (const propName of Object.keys(properties)) {
|
|
10
|
+
const propSchema = resolve(properties[propName]).node;
|
|
11
|
+
if (!propSchema || !isScalarSchema(propSchema)) {
|
|
12
|
+
continue;
|
|
13
|
+
}
|
|
14
|
+
if (propSchema.example === undefined &&
|
|
15
|
+
propSchema.examples === undefined) {
|
|
16
|
+
report({
|
|
17
|
+
message: `Scalar property should have "example"${oasVersion === oas_types_1.OasVersion.Version3_1 ? ' or "examples"' : ''} defined.`,
|
|
18
|
+
location: location.child(propName).key(),
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
exports.ScalarPropertyMissingExample = ScalarPropertyMissingExample;
|
|
26
|
+
function isScalarSchema(schema) {
|
|
27
|
+
if (!schema.type) {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
if (schema.allOf || schema.anyOf || schema.oneOf) {
|
|
31
|
+
// Skip allOf/oneOf/anyOf as it's complicated to validate it right now.
|
|
32
|
+
// We need core support for checking contrstrains through those keywords.
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
if (schema.format === 'binary') {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
if (Array.isArray(schema.type)) {
|
|
39
|
+
return schema.type.every((t) => SCALAR_TYPES.includes(t));
|
|
40
|
+
}
|
|
41
|
+
return SCALAR_TYPES.includes(schema.type);
|
|
42
|
+
}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
const
|
|
5
|
-
|
|
3
|
+
exports.SecurityDefined = void 0;
|
|
4
|
+
const SecurityDefined = () => {
|
|
5
|
+
const referencedSchemes = new Map();
|
|
6
|
+
const operationsWithoutSecurity = [];
|
|
7
|
+
let eachOperationHasSecurity = true;
|
|
6
8
|
return {
|
|
7
|
-
|
|
8
|
-
leave(
|
|
9
|
+
Root: {
|
|
10
|
+
leave(root, { report }) {
|
|
9
11
|
for (const [name, scheme] of referencedSchemes.entries()) {
|
|
10
12
|
if (scheme.defined)
|
|
11
13
|
continue;
|
|
@@ -16,6 +18,17 @@ const OperationSecurityDefined = () => {
|
|
|
16
18
|
});
|
|
17
19
|
}
|
|
18
20
|
}
|
|
21
|
+
if (root.security || eachOperationHasSecurity) {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
for (const operationLocation of operationsWithoutSecurity) {
|
|
26
|
+
report({
|
|
27
|
+
message: `Every operation should have security defined on it or on the root level.`,
|
|
28
|
+
location: operationLocation.key(),
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
}
|
|
19
32
|
},
|
|
20
33
|
},
|
|
21
34
|
SecurityScheme(_securityScheme, { key }) {
|
|
@@ -33,6 +46,12 @@ const OperationSecurityDefined = () => {
|
|
|
33
46
|
}
|
|
34
47
|
}
|
|
35
48
|
},
|
|
49
|
+
Operation(operation, { location }) {
|
|
50
|
+
if (!(operation === null || operation === void 0 ? void 0 : operation.security)) {
|
|
51
|
+
eachOperationHasSecurity = false;
|
|
52
|
+
operationsWithoutSecurity.push(location);
|
|
53
|
+
}
|
|
54
|
+
},
|
|
36
55
|
};
|
|
37
56
|
};
|
|
38
|
-
exports.
|
|
57
|
+
exports.SecurityDefined = SecurityDefined;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SpecStrictRefs = void 0;
|
|
4
|
+
const ref_utils_1 = require("../../ref-utils");
|
|
5
|
+
const SpecStrictRefs = () => {
|
|
6
|
+
const nodesToSkip = [
|
|
7
|
+
'Schema',
|
|
8
|
+
'Response',
|
|
9
|
+
'Parameter',
|
|
10
|
+
'RequestBody',
|
|
11
|
+
'Example',
|
|
12
|
+
'Header',
|
|
13
|
+
'SecurityScheme',
|
|
14
|
+
'Link',
|
|
15
|
+
'Callback',
|
|
16
|
+
'PathItem',
|
|
17
|
+
];
|
|
18
|
+
return {
|
|
19
|
+
any(_node, { report, rawNode, rawLocation, type }) {
|
|
20
|
+
const shouldCheck = !nodesToSkip.includes(type.name);
|
|
21
|
+
if (shouldCheck && ref_utils_1.isRef(rawNode)) {
|
|
22
|
+
report({
|
|
23
|
+
message: 'Field $ref is not expected here.',
|
|
24
|
+
location: rawLocation.child('$ref').key(),
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
exports.SpecStrictRefs = SpecStrictRefs;
|
package/lib/rules/common/spec.js
CHANGED
|
@@ -7,30 +7,37 @@ const ref_utils_1 = require("../../ref-utils");
|
|
|
7
7
|
const utils_2 = require("../../utils");
|
|
8
8
|
const OasSpec = () => {
|
|
9
9
|
return {
|
|
10
|
-
any(node, { report, type, location, key, resolve, ignoreNextVisitorsOnNode }) {
|
|
11
|
-
var _a, _b, _c, _d;
|
|
10
|
+
any(node, { report, type, location, rawLocation, key, resolve, ignoreNextVisitorsOnNode }) {
|
|
11
|
+
var _a, _b, _c, _d, _e, _f;
|
|
12
12
|
const nodeType = utils_1.oasTypeOf(node);
|
|
13
|
+
const refLocation = rawLocation !== location ? rawLocation : undefined;
|
|
13
14
|
if (type.items) {
|
|
14
15
|
if (nodeType !== 'array') {
|
|
15
16
|
report({
|
|
16
17
|
message: `Expected type \`${type.name}\` (array) but got \`${nodeType}\``,
|
|
18
|
+
from: refLocation,
|
|
17
19
|
});
|
|
18
20
|
ignoreNextVisitorsOnNode();
|
|
19
21
|
}
|
|
20
22
|
return;
|
|
21
23
|
}
|
|
22
24
|
else if (nodeType !== 'object') {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
25
|
+
if (type !== types_1.SpecExtension) {
|
|
26
|
+
// do not validate unknown extensions structure
|
|
27
|
+
report({
|
|
28
|
+
message: `Expected type \`${type.name}\` (object) but got \`${nodeType}\``,
|
|
29
|
+
from: refLocation,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
26
32
|
ignoreNextVisitorsOnNode();
|
|
27
33
|
return;
|
|
28
34
|
}
|
|
29
35
|
const required = typeof type.required === 'function' ? type.required(node, key) : type.required;
|
|
30
|
-
for (
|
|
36
|
+
for (const propName of required || []) {
|
|
31
37
|
if (!node.hasOwnProperty(propName)) {
|
|
32
38
|
report({
|
|
33
39
|
message: `The field \`${propName}\` must be present on this level.`,
|
|
40
|
+
from: refLocation,
|
|
34
41
|
location: [{ reportOnKey: true }],
|
|
35
42
|
});
|
|
36
43
|
}
|
|
@@ -45,14 +52,15 @@ const OasSpec = () => {
|
|
|
45
52
|
}
|
|
46
53
|
report({
|
|
47
54
|
message: `The field \`${propName}\` is not allowed here.`,
|
|
48
|
-
|
|
55
|
+
from: refLocation,
|
|
56
|
+
location: location.child([propName]).key(),
|
|
49
57
|
});
|
|
50
58
|
}
|
|
51
59
|
}
|
|
52
60
|
const requiredOneOf = type.requiredOneOf || null;
|
|
53
61
|
if (requiredOneOf) {
|
|
54
62
|
let hasProperty = false;
|
|
55
|
-
for (
|
|
63
|
+
for (const propName of requiredOneOf || []) {
|
|
56
64
|
if (node.hasOwnProperty(propName)) {
|
|
57
65
|
hasProperty = true;
|
|
58
66
|
}
|
|
@@ -60,6 +68,7 @@ const OasSpec = () => {
|
|
|
60
68
|
if (!hasProperty)
|
|
61
69
|
report({
|
|
62
70
|
message: `Must contain at least one of the following fields: ${(_b = type.requiredOneOf) === null || _b === void 0 ? void 0 : _b.join(', ')}.`,
|
|
71
|
+
from: refLocation,
|
|
63
72
|
location: [{ reportOnKey: true }],
|
|
64
73
|
});
|
|
65
74
|
}
|
|
@@ -82,6 +91,7 @@ const OasSpec = () => {
|
|
|
82
91
|
report({
|
|
83
92
|
message: `Property \`${propName}\` is not expected here.`,
|
|
84
93
|
suggest: utils_1.getSuggest(propName, Object.keys(type.properties)),
|
|
94
|
+
from: refLocation,
|
|
85
95
|
location: propLocation.key(),
|
|
86
96
|
});
|
|
87
97
|
continue;
|
|
@@ -92,30 +102,36 @@ const OasSpec = () => {
|
|
|
92
102
|
if (propSchema.resolvable !== false && ref_utils_1.isRef(propValue)) {
|
|
93
103
|
propValue = resolve(propValue).node;
|
|
94
104
|
}
|
|
95
|
-
if (propSchema.enum) {
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
.map((i) => `"${i}"`)
|
|
101
|
-
.join(', ')}.`,
|
|
102
|
-
suggest: utils_1.getSuggest(propValue, propSchema.enum),
|
|
105
|
+
if (propSchema.items && ((_c = propSchema.items) === null || _c === void 0 ? void 0 : _c.enum) && Array.isArray(propValue)) {
|
|
106
|
+
for (let i = 0; i < propValue.length; i++) {
|
|
107
|
+
utils_1.validateSchemaEnumType((_d = propSchema.items) === null || _d === void 0 ? void 0 : _d.enum, propValue[i], propName, refLocation, {
|
|
108
|
+
report,
|
|
109
|
+
location: location.child([propName, i]),
|
|
103
110
|
});
|
|
104
111
|
}
|
|
105
112
|
}
|
|
113
|
+
if (propSchema.enum) {
|
|
114
|
+
utils_1.validateSchemaEnumType(propSchema.enum, propValue, propName, refLocation, {
|
|
115
|
+
report,
|
|
116
|
+
location: location.child([propName]),
|
|
117
|
+
});
|
|
118
|
+
}
|
|
106
119
|
else if (propSchema.type && !utils_1.matchesJsonSchemaType(propValue, propSchema.type, false)) {
|
|
107
120
|
report({
|
|
108
121
|
message: `Expected type \`${propSchema.type}\` but got \`${propValueType}\`.`,
|
|
122
|
+
from: refLocation,
|
|
109
123
|
location: propLocation,
|
|
110
124
|
});
|
|
125
|
+
ignoreNextVisitorsOnNode();
|
|
111
126
|
}
|
|
112
|
-
else if (propValueType === 'array' && ((
|
|
113
|
-
const itemsType = (
|
|
127
|
+
else if (propValueType === 'array' && ((_e = propSchema.items) === null || _e === void 0 ? void 0 : _e.type)) {
|
|
128
|
+
const itemsType = (_f = propSchema.items) === null || _f === void 0 ? void 0 : _f.type;
|
|
114
129
|
for (let i = 0; i < propValue.length; i++) {
|
|
115
130
|
const item = propValue[i];
|
|
116
131
|
if (!utils_1.matchesJsonSchemaType(item, itemsType, false)) {
|
|
117
132
|
report({
|
|
118
133
|
message: `Expected type \`${itemsType}\` but got \`${utils_1.oasTypeOf(item)}\`.`,
|
|
134
|
+
from: refLocation,
|
|
119
135
|
location: propLocation.child([i]),
|
|
120
136
|
});
|
|
121
137
|
}
|
|
@@ -125,10 +141,17 @@ const OasSpec = () => {
|
|
|
125
141
|
if (propSchema.minimum > node[propName]) {
|
|
126
142
|
report({
|
|
127
143
|
message: `The value of the ${propName} field must be greater than or equal to ${propSchema.minimum}`,
|
|
144
|
+
from: refLocation,
|
|
128
145
|
location: location.child([propName]),
|
|
129
146
|
});
|
|
130
147
|
}
|
|
131
148
|
}
|
|
149
|
+
if (propName === 'nullable' && !node.type) {
|
|
150
|
+
report({
|
|
151
|
+
message: 'The `type` field must be defined when the `nullable` field is used.',
|
|
152
|
+
location: location.child([propName]),
|
|
153
|
+
});
|
|
154
|
+
}
|
|
132
155
|
}
|
|
133
156
|
},
|
|
134
157
|
};
|
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.TagsAlphabetical = void 0;
|
|
4
4
|
const TagsAlphabetical = () => {
|
|
5
5
|
return {
|
|
6
|
-
|
|
6
|
+
Root(root, { report, location }) {
|
|
7
7
|
if (!root.tags)
|
|
8
8
|
return;
|
|
9
9
|
for (let i = 0; i < root.tags.length - 1; i++) {
|
|
@@ -3,7 +3,6 @@ export declare const rules: {
|
|
|
3
3
|
spec: Oas2Rule;
|
|
4
4
|
'no-invalid-schema-examples': any;
|
|
5
5
|
'no-invalid-parameter-examples': any;
|
|
6
|
-
'info-description': Oas2Rule;
|
|
7
6
|
'info-contact': Oas2Rule;
|
|
8
7
|
'info-license': Oas2Rule;
|
|
9
8
|
'info-license-url': Oas2Rule;
|
|
@@ -29,7 +28,7 @@ export declare const rules: {
|
|
|
29
28
|
'path-params-defined': Oas2Rule;
|
|
30
29
|
'parameter-description': Oas2Rule;
|
|
31
30
|
'operation-singular-tag': Oas2Rule;
|
|
32
|
-
'
|
|
31
|
+
'security-defined': Oas2Rule;
|
|
33
32
|
'no-unresolved-refs': Oas2Rule;
|
|
34
33
|
'no-identical-paths': Oas2Rule;
|
|
35
34
|
'no-ambiguous-paths': Oas2Rule;
|
|
@@ -39,5 +38,10 @@ export declare const rules: {
|
|
|
39
38
|
'request-mime-type': Oas2Rule;
|
|
40
39
|
'response-mime-type': Oas2Rule;
|
|
41
40
|
'path-segment-plural': Oas2Rule;
|
|
41
|
+
'response-contains-header': Oas2Rule;
|
|
42
|
+
'response-contains-property': Oas2Rule;
|
|
43
|
+
'scalar-property-missing-example': import("../../visitors").Oas3Rule | Oas2Rule;
|
|
44
|
+
'required-string-property-missing-min-length': import("../../visitors").Oas3Rule;
|
|
45
|
+
'spec-strict-refs': import("../../visitors").Oas3Rule | Oas2Rule;
|
|
42
46
|
};
|
|
43
47
|
export declare const preprocessors: {};
|
package/lib/rules/oas2/index.js
CHANGED
|
@@ -4,10 +4,9 @@ exports.preprocessors = exports.rules = void 0;
|
|
|
4
4
|
const spec_1 = require("../common/spec");
|
|
5
5
|
const no_invalid_schema_examples_1 = require("../common/no-invalid-schema-examples");
|
|
6
6
|
const no_invalid_parameter_examples_1 = require("../common/no-invalid-parameter-examples");
|
|
7
|
-
const info_description_1 = require("../common/info-description");
|
|
8
7
|
const info_contact_1 = require("../common/info-contact");
|
|
8
|
+
const info_license_1 = require("../common/info-license");
|
|
9
9
|
const info_license_url_1 = require("../common/info-license-url");
|
|
10
|
-
const license_url_1 = require("../common/license-url");
|
|
11
10
|
const boolean_parameter_prefixes_1 = require("./boolean-parameter-prefixes");
|
|
12
11
|
const tag_description_1 = require("../common/tag-description");
|
|
13
12
|
const tags_alphabetical_1 = require("../common/tags-alphabetical");
|
|
@@ -27,7 +26,7 @@ const operation_description_1 = require("../common/operation-description");
|
|
|
27
26
|
const path_not_include_query_1 = require("../common/path-not-include-query");
|
|
28
27
|
const parameter_description_1 = require("../common/parameter-description");
|
|
29
28
|
const operation_singular_tag_1 = require("../common/operation-singular-tag");
|
|
30
|
-
const
|
|
29
|
+
const security_defined_1 = require("../common/security-defined");
|
|
31
30
|
const no_unresolved_refs_1 = require("../no-unresolved-refs");
|
|
32
31
|
const path_http_verbs_order_1 = require("../common/path-http-verbs-order");
|
|
33
32
|
const no_identical_paths_1 = require("../common/no-identical-paths");
|
|
@@ -39,14 +38,18 @@ const path_excludes_patterns_1 = require("../common/path-excludes-patterns");
|
|
|
39
38
|
const request_mime_type_1 = require("./request-mime-type");
|
|
40
39
|
const response_mime_type_1 = require("./response-mime-type");
|
|
41
40
|
const path_segment_plural_1 = require("../common/path-segment-plural");
|
|
41
|
+
const response_contains_header_1 = require("../common/response-contains-header");
|
|
42
|
+
const response_contains_property_1 = require("./response-contains-property");
|
|
43
|
+
const scalar_property_missing_example_1 = require("../common/scalar-property-missing-example");
|
|
44
|
+
const required_string_property_missing_min_length_1 = require("../common/required-string-property-missing-min-length");
|
|
45
|
+
const spec_strict_refs_1 = require("../common/spec-strict-refs");
|
|
42
46
|
exports.rules = {
|
|
43
47
|
spec: spec_1.OasSpec,
|
|
44
48
|
'no-invalid-schema-examples': no_invalid_schema_examples_1.NoInvalidSchemaExamples,
|
|
45
49
|
'no-invalid-parameter-examples': no_invalid_parameter_examples_1.NoInvalidParameterExamples,
|
|
46
|
-
'info-description': info_description_1.InfoDescription,
|
|
47
50
|
'info-contact': info_contact_1.InfoContact,
|
|
48
|
-
'info-license':
|
|
49
|
-
'info-license-url':
|
|
51
|
+
'info-license': info_license_1.InfoLicense,
|
|
52
|
+
'info-license-url': info_license_url_1.InfoLicenseUrl,
|
|
50
53
|
'tag-description': tag_description_1.TagDescription,
|
|
51
54
|
'tags-alphabetical': tags_alphabetical_1.TagsAlphabetical,
|
|
52
55
|
'paths-kebab-case': paths_kebab_case_1.PathsKebabCase,
|
|
@@ -55,7 +58,7 @@ exports.rules = {
|
|
|
55
58
|
'no-path-trailing-slash': no_path_trailing_slash_1.NoPathTrailingSlash,
|
|
56
59
|
'operation-2xx-response': operation_2xx_response_1.Operation2xxResponse,
|
|
57
60
|
'operation-4xx-response': operation_4xx_response_1.Operation4xxResponse,
|
|
58
|
-
|
|
61
|
+
assertions: assertions_1.Assertions,
|
|
59
62
|
'operation-operationId-unique': operation_operationId_unique_1.OperationIdUnique,
|
|
60
63
|
'operation-parameters-unique': operation_parameters_unique_1.OperationParametersUnique,
|
|
61
64
|
'path-parameters-defined': path_params_defined_1.PathParamsDefined,
|
|
@@ -69,7 +72,7 @@ exports.rules = {
|
|
|
69
72
|
'path-params-defined': path_params_defined_1.PathParamsDefined,
|
|
70
73
|
'parameter-description': parameter_description_1.ParameterDescription,
|
|
71
74
|
'operation-singular-tag': operation_singular_tag_1.OperationSingularTag,
|
|
72
|
-
'
|
|
75
|
+
'security-defined': security_defined_1.SecurityDefined,
|
|
73
76
|
'no-unresolved-refs': no_unresolved_refs_1.NoUnresolvedRefs,
|
|
74
77
|
'no-identical-paths': no_identical_paths_1.NoIdenticalPaths,
|
|
75
78
|
'no-ambiguous-paths': no_ambiguous_paths_1.NoAmbiguousPaths,
|
|
@@ -79,5 +82,10 @@ exports.rules = {
|
|
|
79
82
|
'request-mime-type': request_mime_type_1.RequestMimeType,
|
|
80
83
|
'response-mime-type': response_mime_type_1.ResponseMimeType,
|
|
81
84
|
'path-segment-plural': path_segment_plural_1.PathSegmentPlural,
|
|
85
|
+
'response-contains-header': response_contains_header_1.ResponseContainsHeader,
|
|
86
|
+
'response-contains-property': response_contains_property_1.ResponseContainsProperty,
|
|
87
|
+
'scalar-property-missing-example': scalar_property_missing_example_1.ScalarPropertyMissingExample,
|
|
88
|
+
'required-string-property-missing-min-length': required_string_property_missing_min_length_1.RequiredStringPropertyMissingMinLength,
|
|
89
|
+
'spec-strict-refs': spec_strict_refs_1.SpecStrictRefs,
|
|
82
90
|
};
|
|
83
91
|
exports.preprocessors = {};
|
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.RemoveUnusedComponents = void 0;
|
|
4
4
|
const utils_1 = require("../../utils");
|
|
5
5
|
const RemoveUnusedComponents = () => {
|
|
6
|
-
|
|
6
|
+
const components = new Map();
|
|
7
7
|
function registerComponent(location, componentType, name) {
|
|
8
8
|
var _a;
|
|
9
9
|
components.set(location.absolutePointer, {
|
|
@@ -24,14 +24,14 @@ const RemoveUnusedComponents = () => {
|
|
|
24
24
|
name: key.toString(),
|
|
25
25
|
});
|
|
26
26
|
}
|
|
27
|
-
}
|
|
27
|
+
},
|
|
28
28
|
},
|
|
29
|
-
|
|
29
|
+
Root: {
|
|
30
30
|
leave(root, ctx) {
|
|
31
31
|
const data = ctx.getVisitorData();
|
|
32
32
|
data.removedCount = 0;
|
|
33
|
-
|
|
34
|
-
components.forEach(usageInfo => {
|
|
33
|
+
const rootComponents = new Set();
|
|
34
|
+
components.forEach((usageInfo) => {
|
|
35
35
|
const { used, name, componentType } = usageInfo;
|
|
36
36
|
if (!used && componentType) {
|
|
37
37
|
rootComponents.add(componentType);
|
|
@@ -67,7 +67,7 @@ const RemoveUnusedComponents = () => {
|
|
|
67
67
|
SecurityScheme(_securityScheme, { location, key }) {
|
|
68
68
|
registerComponent(location, 'securityDefinitions', key.toString());
|
|
69
69
|
},
|
|
70
|
-
}
|
|
70
|
+
},
|
|
71
71
|
};
|
|
72
72
|
};
|
|
73
73
|
exports.RemoveUnusedComponents = RemoveUnusedComponents;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { Oas2Rule } from '../../visitors';
|
|
1
|
+
import type { Oas2Rule } from '../../visitors';
|
|
2
2
|
export declare const RequestMimeType: Oas2Rule;
|
|
@@ -4,7 +4,7 @@ exports.RequestMimeType = void 0;
|
|
|
4
4
|
const utils_1 = require("../../utils");
|
|
5
5
|
const RequestMimeType = ({ allowedValues }) => {
|
|
6
6
|
return {
|
|
7
|
-
|
|
7
|
+
Root(root, ctx) {
|
|
8
8
|
utils_1.validateMimeType({ type: 'consumes', value: root }, ctx, allowedValues);
|
|
9
9
|
},
|
|
10
10
|
Operation: {
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ResponseContainsProperty = void 0;
|
|
4
|
+
const utils_1 = require("../../utils");
|
|
5
|
+
const ResponseContainsProperty = (options) => {
|
|
6
|
+
const names = options.names || {};
|
|
7
|
+
let key;
|
|
8
|
+
return {
|
|
9
|
+
Operation: {
|
|
10
|
+
Response: {
|
|
11
|
+
skip: (_response, key) => {
|
|
12
|
+
return `${key}` === '204';
|
|
13
|
+
},
|
|
14
|
+
enter: (_response, ctx) => {
|
|
15
|
+
key = ctx.key;
|
|
16
|
+
},
|
|
17
|
+
Schema(schema, { report, location }) {
|
|
18
|
+
var _a;
|
|
19
|
+
if (schema.type !== 'object')
|
|
20
|
+
return;
|
|
21
|
+
const expectedProperties = names[key] ||
|
|
22
|
+
names[utils_1.getMatchingStatusCodeRange(key)] ||
|
|
23
|
+
names[utils_1.getMatchingStatusCodeRange(key).toLowerCase()] ||
|
|
24
|
+
[];
|
|
25
|
+
for (const expectedProperty of expectedProperties) {
|
|
26
|
+
if (!((_a = schema.properties) === null || _a === void 0 ? void 0 : _a[expectedProperty])) {
|
|
27
|
+
report({
|
|
28
|
+
message: `Response object must contain a top-level "${expectedProperty}" property.`,
|
|
29
|
+
location: location.child('properties').key(),
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
exports.ResponseContainsProperty = ResponseContainsProperty;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { Oas2Rule } from '../../visitors';
|
|
1
|
+
import type { Oas2Rule } from '../../visitors';
|
|
2
2
|
export declare const ResponseMimeType: Oas2Rule;
|
|
@@ -4,7 +4,7 @@ exports.ResponseMimeType = void 0;
|
|
|
4
4
|
const utils_1 = require("../../utils");
|
|
5
5
|
const ResponseMimeType = ({ allowedValues }) => {
|
|
6
6
|
return {
|
|
7
|
-
|
|
7
|
+
Root(root, ctx) {
|
|
8
8
|
utils_1.validateMimeType({ type: 'produces', value: root }, ctx, allowedValues);
|
|
9
9
|
},
|
|
10
10
|
Operation: {
|