ibm-openapi-validator
Version:
Configurable and extensible validator/linter for OpenAPI documents
648 lines (646 loc) • 17.2 kB
JavaScript
/**
* Copyright 2024 IBM Corporation.
* SPDX-License-Identifier: Apache2.0
*/
module.exports = {
'ibm-accept-and-return-models': {
coefficient: 3,
denominator: 'operations',
categories: ['usability', 'security', 'robustness', 'evolution'],
},
'ibm-anchored-patterns': {
coefficient: 1,
denominator: 'operations',
categories: ['robustness'],
},
'ibm-api-symmetry': {
coefficient: 2,
denominator: 'operations',
categories: ['usability', 'evolution'],
},
'ibm-array-attributes': {
coefficient: 2,
denominator: 'array-schemas',
categories: ['usability', 'security', 'robustness', 'evolution'],
},
'ibm-avoid-inline-schemas': {
coefficient: 2,
denominator: 'operations',
categories: ['usability', 'evolution'],
},
'ibm-avoid-multiple-types': {
coefficient: 1,
denominator: 'operations',
categories: ['usability', 'robustness'],
},
'ibm-avoid-property-name-collision': {
coefficient: 10,
denominator: 'operations',
categories: ['usability'],
},
'ibm-avoid-repeating-path-parameters': {
coefficient: 2,
denominator: 'operations',
categories: ['usability'],
},
'ibm-binary-schemas': {
coefficient: 1,
denominator: 'binary-schemas',
categories: ['usability'],
},
'ibm-collection-array-property': {
coefficient: 1,
denominator: 'operations',
categories: ['usability'],
},
'ibm-content-contains-schema': {
coefficient: 20,
denominator: 'operations',
categories: ['usability', 'security', 'robustness', 'evolution'],
},
'ibm-content-type-is-specific': {
coefficient: 20,
denominator: 'operations',
categories: ['usability', 'security', 'robustness', 'evolution'],
},
'ibm-define-required-properties': {
coefficient: 10,
denominator: 'operations',
categories: ['usability', 'robustness', 'evolution'],
},
'ibm-discriminator-property': {
coefficient: 1,
denominator: 'operations',
categories: ['usability', 'robustness', 'evolution'],
},
'ibm-dont-require-merge-patch-properties': {
coefficient: 1,
denominator: 'operations',
categories: ['usability'],
},
'ibm-enum-casing-convention': {
coefficient: 3,
denominator: 'operations',
categories: ['usability'],
},
'ibm-error-content-type-is-json': {
coefficient: 3,
denominator: 'operations',
categories: ['usability', 'robustness', 'evolution'],
},
'ibm-error-response-schemas': {
coefficient: 2,
denominator: 'operations',
categories: ['usability', 'robustness', 'evolution'],
},
'ibm-etag-header': {
coefficient: 1,
denominator: 'operations',
categories: ['usability', 'robustness'],
},
'ibm-integer-attributes': {
coefficient: 2,
denominator: 'integer-schemas',
categories: ['usability', 'security', 'robustness', 'evolution'],
},
'ibm-major-version-in-path': {
coefficient: 1,
denominator: 'operations',
categories: ['evolution'],
},
/* 'ibm-no-accept-header': {
'coefficient': 1,
'denominator': 'operations',
'categories': ['],
}, - no impact */
'ibm-no-ambiguous-paths': {
coefficient: 10,
denominator: 'operations',
categories: ['usability', 'robustness', 'evolution'],
},
'ibm-no-array-of-arrays': {
coefficient: 20,
denominator: 'operations',
categories: ['usability', 'evolution'],
},
'ibm-no-array-responses': {
coefficient: 10,
denominator: 'operations',
categories: ['evolution'],
},
/* 'ibm-no-authorization-header': {
'coefficient': 1,
'denominator': 'operations',
'categories': ['],
}, - no impact
'ibm-no-body-for-delete': {
'coefficient': 1,
'denominator': 'operations',
'categories': ['],
}, - deprecated */
'ibm-no-circular-refs': {
coefficient: 1,
denominator: 'operations',
categories: ['usability', 'security'],
},
'ibm-no-consecutive-path-parameter-segments': {
coefficient: 10,
denominator: 'operations',
categories: ['usability'],
},
/* 'ibm-no-content-type-header': {
'coefficient': 1,
'denominator': 'operations',
'categories': ['],
}, - no impact */
'ibm-no-crn-path-parameters': {
coefficient: 2,
denominator: 'operations',
categories: ['usability'],
},
'ibm-no-default-for-required-parameter': {
coefficient: 1,
denominator: 'operations',
categories: ['usability'],
},
/* 'ibm-no-duplicate-description-with-ref-sibling': {
'coefficient': 1,
'denominator': 'operations',
'categories': ['],
}, - no impact */
'ibm-no-if-modified-since-header': {
coefficient: 1,
denominator: 'operations',
categories: ['usability', 'robustness'],
},
'ibm-no-if-unmodified-since-header': {
coefficient: 1,
denominator: 'operations',
categories: ['usability', 'robustness'],
},
'ibm-no-nullable-properties': {
coefficient: 2,
denominator: 'object-schemas',
categories: ['usability', 'robustness'],
},
'ibm-no-operation-requestbody': {
coefficient: 10,
denominator: 'operations',
categories: ['usability', 'robustness'],
},
/*'ibm-no-optional-properties-in-required-body': { - deprecated, in favor of ibm-no-required-properties-in-optional-body
'coefficient': 1,
'denominator': 'operations',
'categories': ['usability', 'robustness'],
},*/
'ibm-no-ref-in-example': {
coefficient: 1,
denominator: 'operations',
categories: ['usability'],
},
'ibm-no-required-properties-in-optional-body': {
coefficient: 1,
denominator: 'operations',
categories: ['usability', 'robustness'],
},
'ibm-no-space-in-example-name': {
coefficient: 1,
denominator: 'operations',
categories: ['usability'],
},
// 'ibm-no-superfluous-allof' - no impact, can leave out
'ibm-no-unsupported-keywords': {
coefficient: 3,
denominator: 'operations',
categories: ['usability'],
},
'ibm-openapi-tags-used': {
coefficient: 1,
denominator: 'operations',
categories: ['usability'],
},
'ibm-operation-responses': {
coefficient: 3,
categories: ['usability', 'security', 'robustness', 'evolution'],
},
'ibm-operation-summary': {
coefficient: 10,
denominator: 'operations',
categories: ['usability', 'robustness'],
},
'ibm-operation-summary-length': {
coefficient: 2,
denominator: 'operations',
categories: ['usability'],
},
'ibm-operationid-casing-convention': {
coefficient: 1,
denominator: 'operations',
categories: ['usability'],
},
'ibm-operationid-naming-convention': {
coefficient: 1,
denominator: 'operations',
categories: ['usability'],
},
'ibm-pagination-style': {
coefficient: 2,
denominator: 'operations',
categories: ['usability', 'robustness'],
},
'ibm-parameter-casing-convention': {
coefficient: 1,
denominator: 'operations',
categories: ['usability'],
},
'ibm-parameter-description': {
coefficient: 2,
denominator: 'operations',
categories: ['usability', 'robustness'],
},
'ibm-parameter-order': {
coefficient: 1,
denominator: 'operations',
categories: ['usability'],
},
'ibm-parameter-schema-or-content': {
coefficient: 10,
denominator: 'operations',
categories: ['usability', 'security', 'robustness', 'evolution'],
},
'ibm-patch-request-content-type': {
coefficient: 2,
denominator: 'operations',
categories: ['usability', 'robustness'],
},
'ibm-path-segment-casing-convention': {
coefficient: 3,
denominator: 'operations',
categories: ['usability'],
},
'ibm-pattern-properties': {
coefficient: 1,
denominator: 'operations',
categories: ['usability'],
},
'ibm-precondition-headers': {
coefficient: 1,
denominator: 'operations',
categories: ['usability', 'robustness'],
},
'ibm-prefer-token-pagination': {
coefficient: 1,
denominator: 'operations',
categories: ['usability', 'robustness', 'evolution'],
},
'ibm-property-attributes': {
coefficient: 1,
denominator: 'operations',
categories: ['usability'],
},
'ibm-property-casing-convention': {
coefficient: 3,
denominator: 'operations',
categories: ['usability'],
},
'ibm-property-consistent-name-and-type': {
coefficient: 1,
denominator: 'operations',
categories: ['usability'],
},
'ibm-property-description': {
coefficient: 25,
denominator: 'schemas',
categories: ['usability', 'robustness'],
},
'ibm-redirect-response-body': {
coefficient: 1,
denominator: 'operations',
categories: ['usability', 'robustness', 'evolution'],
},
'ibm-ref-pattern': {
coefficient: 1,
denominator: 'operations',
categories: ['usability', 'security', 'robustness', 'evolution'],
},
'ibm-request-and-response-content': {
coefficient: 10,
denominator: 'operations',
categories: ['usability', 'security', 'robustness', 'evolution'],
},
'ibm-requestbody-is-object': {
coefficient: 10,
denominator: 'operations',
categories: ['evolution'],
},
/* 'ibm-requestbody-name': {
'coefficient': 1,
'denominator': 'operations',
'categories': ['usability'],
}, - disabled by default */
'ibm-required-array-properties-in-response': {
coefficient: 1,
denominator: 'operations',
categories: ['usability', 'robustness'],
},
'ibm-required-enum-properties-in-response': {
coefficient: 1,
denominator: 'operations',
categories: ['usability', 'robustness'],
},
'ibm-resource-response-consistency': {
coefficient: 3,
denominator: 'operations',
categories: ['usability'],
},
'ibm-response-status-codes': {
coefficient: 1,
denominator: 'operations',
categories: ['usability', 'robustness', 'evolution'],
},
'ibm-schema-casing-convention': {
coefficient: 1,
denominator: 'operations',
categories: ['usability'],
},
'ibm-schema-description': {
coefficient: 1,
denominator: 'operations',
categories: ['usability', 'robustness'],
},
'ibm-schema-keywords': {
coefficient: 1,
denominator: 'operations',
categories: ['usability', 'robustness'],
},
'ibm-schema-naming-convention': {
coefficient: 1,
denominator: 'operations',
categories: ['usability'],
},
/* 'ibm-schema-type': {
'coefficient': 1,
'denominator': 'operations',
'categories': ['usability'],
}, - disabled by default */
'ibm-schema-type-format': {
coefficient: 1,
denominator: 'operations',
categories: ['usability', 'robustness'],
},
/* 'ibm-sdk-operations': {
'coefficient': 1,
'denominator': 'operations',
'categories': ['],
}, - no impact
'ibm-securityscheme-attributes': {
'coefficient': 1,
'denominator': 'operations',
'categories': ['],
}, - no impact
'ibm-securityschemes': {
'coefficient': 1,
'denominator': 'operations',
'categories': ['],
}, - no impact */
'ibm-server-variable-default-value': {
coefficient: 1,
denominator: 'operations',
categories: ['usability'],
},
'ibm-string-attributes': {
coefficient: 2,
denominator: 'string-schemas',
categories: ['usability', 'security', 'robustness', 'evolution'],
},
'ibm-success-response-example': {
coefficient: 1,
denominator: 'operations',
categories: ['usability'],
},
'ibm-summary-sentence-style': {
coefficient: 1,
denominator: 'operations',
categories: ['usability'],
},
// 'ibm-unevaluated-properties' - no impact
'ibm-unique-parameter-request-property-names': {
coefficient: 2,
denominator: 'operations',
categories: ['usability', 'robustness'],
},
'ibm-use-date-based-format': {
coefficient: 1,
denominator: 'schemas',
categories: ['usability'],
},
'ibm-valid-path-segments': {
coefficient: 2,
denominator: 'operations',
categories: ['usability'],
},
'ibm-valid-schema-example': {
coefficient: 3,
denominator: 'schemas',
categories: ['usability'],
},
'ibm-well-defined-dictionaries': {
coefficient: 30,
denominator: 'operations',
categories: ['usability', 'security', 'robustness', 'evolution'],
},
// Begin Spectral's built-in rules...
'operation-success-response': {
coefficient: 3,
denominator: 'operations',
categories: ['usability', 'robustness', 'evolution'],
},
/*'oas2-operation-formData-consume-check': { // declaring no impact
coefficient: 1,
denominator: 'operations',
categories: ['usability'],
},*/
'operation-operationId-unique': {
coefficient: 3,
denominator: 'operations',
categories: ['usability', 'robustness', 'evolution'],
},
'operation-parameters': {
coefficient: 3,
denominator: 'operations',
categories: ['usability', 'evolution'],
},
'operation-tag-defined': {
coefficient: 1,
denominator: 'operations',
categories: ['usability'],
},
'info-contact': {
coefficient: 1,
denominator: 'operations',
categories: ['usability'],
},
'info-description': {
coefficient: 1,
denominator: 'operations',
categories: ['usability'],
},
'no-eval-in-markdown': {
coefficient: 1,
denominator: 'operations',
categories: ['usability'],
},
'no-script-tags-in-markdown': {
coefficient: 1,
denominator: 'operations',
categories: ['usability'],
},
'openapi-tags': {
coefficient: 1,
denominator: 'operations',
categories: ['usability'],
},
'operation-description': {
coefficient: 3,
denominator: 'operations',
categories: ['usability', 'robustness'],
},
'operation-operationId': {
coefficient: 3,
categories: ['usability', 'robustness', 'evolution'],
},
'operation-operationId-valid-in-url': {
coefficient: 1,
denominator: 'operations',
categories: ['usability', 'robustness', 'evolution'],
},
'operation-tags': {
coefficient: 1,
denominator: 'operations',
categories: ['usability'],
},
'path-params': {
coefficient: 3,
denominator: 'operations',
categories: ['usability', 'security', 'robustness', 'evolution'],
},
'path-declarations-must-exist': {
coefficient: 1,
denominator: 'operations',
categories: ['usability', 'security', 'robustness', 'evolution'],
},
'path-keys-no-trailing-slash': {
coefficient: 1,
denominator: 'operations',
categories: ['usability'],
},
'path-not-include-query': {
coefficient: 3,
categories: ['usability', 'robustness', 'evolution'],
},
'no-$ref-siblings': {
coefficient: 1,
denominator: 'operations',
categories: ['usability'],
},
'typed-enum': {
coefficient: 2,
denominator: 'operations',
categories: ['usability', 'security', 'robustness', 'evolution'],
},
/*'oas2-api-host': { // Spectral rules that are currently marked as 'no impact'
coefficient: 1,
denominator: 'operations',
categories: ['usability'],
},
'oas2-api-schemes': {
coefficient: 1,
denominator: 'operations',
categories: ['usability'],
},
'oas2-host-trailing-slash': {
coefficient: 1,
denominator: 'operations',
categories: ['usability'],
},
'oas2-operation-security-defined': {
coefficient: 1,
denominator: 'operations',
categories: ['usability'],
},
'oas2-valid-schema-example': {
coefficient: 1,
denominator: 'operations',
categories: ['usability'],
},
'oas2-valid-media-example': {
coefficient: 1,
denominator: 'operations',
categories: ['usability'],
},
'oas2-anyOf': {
coefficient: 1,
denominator: 'operations',
categories: ['usability'],
},
'oas2-oneOf': {
coefficient: 1,
denominator: 'operations',
categories: ['usability'],
},
'oas2-schema': {
coefficient: 1,
denominator: 'operations',
categories: ['usability'],
},
'oas2-unused-definition': {
coefficient: 1,
denominator: 'operations',
categories: ['usability'],
},*/
'oas3-api-servers': {
coefficient: 1,
denominator: 'operations',
categories: ['usability'],
},
'oas3-examples-value-or-externalValue': {
coefficient: 1,
denominator: 'operations',
categories: ['usability'],
},
'oas3-operation-security-defined': {
coefficient: 1,
denominator: 'operations',
categories: ['usability'],
},
'oas3-server-trailing-slash': {
coefficient: 1,
denominator: 'operations',
categories: ['usability'],
},
'oas3-valid-media-example': {
coefficient: 3,
denominator: 'operations',
categories: ['usability'],
},
'oas3-valid-schema-example': {
coefficient: 3,
denominator: 'schemas',
categories: ['usability'],
},
'oas3-schema': {
coefficient: 3,
categories: ['usability'],
},
'oas3-unused-component': {
coefficient: 1,
denominator: 'operations',
categories: ['usability'],
},
// TODO: consider what 'category' this should really be.
parser: {
coefficient: 100,
denominator: 'operations',
categories: ['usability'],
},
};