Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions tools/spectral/ipa/rulesets/IPA-104.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -112,13 +112,13 @@ rules:
##### Configuration
This rule includes two configuration options:
- `methodName`: The verb to be used in the OperationIds
- `ignorePluralizationList`: Words that are allowed to maintain their assumed plurality (e.g., "Fts")
- `ignoreSingularizationList`: Words that are allowed to maintain their assumed plurality (e.g., "Fts")
message: '{{error}} https://mdb.link/mongodb-atlas-openapi-validation#xgen-IPA-104-valid-operation-id'
severity: warn
given: '#GetOperationObject'
then:
function: 'IPA104ValidOperationID'
functionOptions:
methodName: 'get'
ignorePluralizationList:
ignoreSingularizationList:
- 'Fts'
4 changes: 2 additions & 2 deletions tools/spectral/ipa/rulesets/IPA-105.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -92,13 +92,13 @@ rules:
##### Configuration
This rule includes two configuration options:
- `methodName`: The verb to be used in the OperationIds
- `ignorePluralizationList`: Words that are allowed to maintain their assumed plurality (e.g., "Fts")
- `ignoreSingularizationList`: Words that are allowed to maintain their assumed plurality (e.g., "Fts")
message: '{{error}} https://mdb.link/mongodb-atlas-openapi-validation#xgen-IPA-105-valid-operation-id'
severity: warn
given: '#GetOperationObject'
then:
function: 'IPA105ValidOperationID'
functionOptions:
methodName: 'list'
ignorePluralizationList:
ignoreSingularizationList:
- 'Fts'
4 changes: 2 additions & 2 deletions tools/spectral/ipa/rulesets/IPA-106.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -126,13 +126,13 @@ rules:
##### Configuration
This rule includes two configuration options:
- `methodName`: The verb to be used in the OperationIds
- `ignorePluralizationList`: Words that are allowed to maintain their assumed plurality (e.g., "Fts")
- `ignoreSingularizationList`: Words that are allowed to maintain their assumed plurality (e.g., "Fts")
message: '{{error}} https://mdb.link/mongodb-atlas-openapi-validation#xgen-IPA-106-valid-operation-id'
severity: warn
given: '#CreateOperationObject'
then:
function: 'IPA106ValidOperationID'
functionOptions:
methodName: 'create'
ignorePluralizationList:
ignoreSingularizationList:
- 'Fts'
4 changes: 2 additions & 2 deletions tools/spectral/ipa/rulesets/IPA-107.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -127,13 +127,13 @@ rules:
##### Configuration
This rule includes two configuration options:
- `methodName`: The verb to be used in the OperationIds
- `ignorePluralizationList`: Words that are allowed to maintain their assumed plurality (e.g., "Fts")
- `ignoreSingularizationList`: Words that are allowed to maintain their assumed plurality (e.g., "Fts")
message: '{{error}} https://mdb.link/mongodb-atlas-openapi-validation#xgen-IPA-107-valid-operation-id'
severity: warn
given: '#UpdateOperationObject'
then:
function: 'IPA107ValidOperationID'
functionOptions:
methodName: 'update'
ignorePluralizationList:
ignoreSingularizationList:
- 'Fts'
4 changes: 2 additions & 2 deletions tools/spectral/ipa/rulesets/IPA-108.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -67,15 +67,15 @@ rules:
##### Configuration
This rule includes two configuration options:
- `methodName`: The verb to be used in the OperationIds
- `ignorePluralizationList`: Words that are allowed to maintain their assumed plurality (e.g., "Fts")
- `ignoreSingularizationList`: Words that are allowed to maintain their assumed plurality (e.g., "Fts")
message: '{{error}} https://mdb.link/mongodb-atlas-openapi-validation#xgen-IPA-108-valid-operation-id'
severity: warn
given: '#DeleteOperationObject'
then:
function: 'IPA108ValidOperationID'
functionOptions:
methodName: 'delete'
ignorePluralizationList:
ignoreSingularizationList:
- 'Fts'

functions:
Expand Down
4 changes: 2 additions & 2 deletions tools/spectral/ipa/rulesets/IPA-109.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -77,12 +77,12 @@ rules:

##### Configuration
This rule includes one configuration options:
- `ignorePluralizationList`: Words that are allowed to maintain their assumed plurality (e.g., "Fts")
- `ignoreSingularizationList`: Words that are allowed to maintain their assumed plurality (e.g., "Fts")
message: '{{error}} https://mdb.link/mongodb-atlas-openapi-validation#xgen-IPA-109-valid-operation-id'
severity: warn
given: '#OperationObject'
then:
function: 'IPA109ValidOperationID'
functionOptions:
ignorePluralizationList:
ignoreSingularizationList:
- 'Fts'
12 changes: 6 additions & 6 deletions tools/spectral/ipa/rulesets/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@ Rule checks for the following conditions:
##### Configuration
This rule includes two configuration options:
- `methodName`: The verb to be used in the OperationIds
- `ignorePluralizationList`: Words that are allowed to maintain their assumed plurality (e.g., "Fts")
- `ignoreSingularizationList`: Words that are allowed to maintain their assumed plurality (e.g., "Fts")



Expand Down Expand Up @@ -229,7 +229,7 @@ Rule checks for the following conditions:
##### Configuration
This rule includes two configuration options:
- `methodName`: The verb to be used in the OperationIds
- `ignorePluralizationList`: Words that are allowed to maintain their assumed plurality (e.g., "Fts")
- `ignoreSingularizationList`: Words that are allowed to maintain their assumed plurality (e.g., "Fts")



Expand Down Expand Up @@ -325,7 +325,7 @@ Rule checks for the following conditions:
##### Configuration
This rule includes two configuration options:
- `methodName`: The verb to be used in the OperationIds
- `ignorePluralizationList`: Words that are allowed to maintain their assumed plurality (e.g., "Fts")
- `ignoreSingularizationList`: Words that are allowed to maintain their assumed plurality (e.g., "Fts")



Expand Down Expand Up @@ -413,7 +413,7 @@ Rule checks for the following conditions:
##### Configuration
This rule includes two configuration options:
- `methodName`: The verb to be used in the OperationIds
- `ignorePluralizationList`: Words that are allowed to maintain their assumed plurality (e.g., "Fts")
- `ignoreSingularizationList`: Words that are allowed to maintain their assumed plurality (e.g., "Fts")



Expand Down Expand Up @@ -472,7 +472,7 @@ Rule checks for the following conditions:
##### Configuration
This rule includes two configuration options:
- `methodName`: The verb to be used in the OperationIds
- `ignorePluralizationList`: Words that are allowed to maintain their assumed plurality (e.g., "Fts")
- `ignoreSingularizationList`: Words that are allowed to maintain their assumed plurality (e.g., "Fts")



Expand Down Expand Up @@ -536,7 +536,7 @@ Rule checks for the following conditions:

##### Configuration
This rule includes one configuration options:
- `ignorePluralizationList`: Words that are allowed to maintain their assumed plurality (e.g., "Fts")
- `ignoreSingularizationList`: Words that are allowed to maintain their assumed plurality (e.g., "Fts")



Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { hasCustomMethodOverride, hasMethodVerbOverride, VERB_OVERRIDE_EXTENSION
import { isInvalidGetMethod } from './utils/methodLogic.js';
import { validateOperationIdAndReturnErrors } from './utils/validations/validateOperationIdAndReturnErrors.js';

export default (input, { methodName, ignorePluralizationList }, { path, documentInventory, rule }) => {
export default (input, { methodName, ignoreSingularizationList }, { path, documentInventory, rule }) => {
const ruleName = rule.name;
const resourcePath = path[1];
const oas = documentInventory.resolved;
Expand All @@ -22,7 +22,7 @@ export default (input, { methodName, ignorePluralizationList }, { path, document
if (hasMethodVerbOverride(input, methodName)) {
methodName = input[VERB_OVERRIDE_EXTENSION].verb;
}
const errors = validateOperationIdAndReturnErrors(methodName, resourcePath, input, path, ignorePluralizationList);
const errors = validateOperationIdAndReturnErrors(methodName, resourcePath, input, path, ignoreSingularizationList);

return evaluateAndCollectAdoptionStatus(errors, ruleName, input, path);
} catch (e) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { isInvalidListMethod } from './utils/methodLogic.js';
import { hasCustomMethodOverride, hasMethodVerbOverride, VERB_OVERRIDE_EXTENSION } from './utils/extensions.js';
import { validateOperationIdAndReturnErrors } from './utils/validations/validateOperationIdAndReturnErrors.js';

export default (input, { methodName, ignorePluralizationList }, { path, documentInventory, rule }) => {
export default (input, { methodName, ignoreSingularizationList }, { path, documentInventory, rule }) => {
const ruleName = rule.name;
const resourcePath = path[1];
const oas = documentInventory.resolved;
Expand All @@ -23,7 +23,7 @@ export default (input, { methodName, ignorePluralizationList }, { path, document
}

try {
const errors = validateOperationIdAndReturnErrors(methodName, resourcePath, input, path, ignorePluralizationList);
const errors = validateOperationIdAndReturnErrors(methodName, resourcePath, input, path, ignoreSingularizationList);
return evaluateAndCollectAdoptionStatus(errors, ruleName, input, path);
} catch (e) {
return handleInternalError(ruleName, path, e);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { isCustomMethodIdentifier } from './utils/resourceEvaluation.js';
import { hasCustomMethodOverride, hasMethodVerbOverride, VERB_OVERRIDE_EXTENSION } from './utils/extensions.js';
import { validateOperationIdAndReturnErrors } from './utils/validations/validateOperationIdAndReturnErrors.js';

export default (input, { methodName, ignorePluralizationList }, { path, rule }) => {
export default (input, { methodName, ignoreSingularizationList }, { path, rule }) => {
const ruleName = rule.name;
const resourcePath = path[1];

Expand All @@ -16,7 +16,7 @@ export default (input, { methodName, ignorePluralizationList }, { path, rule })
}

try {
const errors = validateOperationIdAndReturnErrors(methodName, resourcePath, input, path, ignorePluralizationList);
const errors = validateOperationIdAndReturnErrors(methodName, resourcePath, input, path, ignoreSingularizationList);
return evaluateAndCollectAdoptionStatus(errors, ruleName, input, path);
} catch (e) {
return handleInternalError(ruleName, path, e);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { isCustomMethodIdentifier } from './utils/resourceEvaluation.js';
import { hasCustomMethodOverride, hasMethodVerbOverride, VERB_OVERRIDE_EXTENSION } from './utils/extensions.js';
import { validateOperationIdAndReturnErrors } from './utils/validations/validateOperationIdAndReturnErrors.js';

export default (input, { methodName, ignorePluralizationList }, { path, rule }) => {
export default (input, { methodName, ignoreSingularizationList }, { path, rule }) => {
const ruleName = rule.name;
const resourcePath = path[1];

Expand All @@ -16,7 +16,7 @@ export default (input, { methodName, ignorePluralizationList }, { path, rule })
}

try {
const errors = validateOperationIdAndReturnErrors(methodName, resourcePath, input, path, ignorePluralizationList);
const errors = validateOperationIdAndReturnErrors(methodName, resourcePath, input, path, ignoreSingularizationList);
return evaluateAndCollectAdoptionStatus(errors, ruleName, input, path);
} catch (e) {
return handleInternalError(ruleName, path, e);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { isCustomMethodIdentifier } from './utils/resourceEvaluation.js';
import { hasCustomMethodOverride, hasMethodVerbOverride, VERB_OVERRIDE_EXTENSION } from './utils/extensions.js';
import { validateOperationIdAndReturnErrors } from './utils/validations/validateOperationIdAndReturnErrors.js';

export default (input, { methodName, ignorePluralizationList }, { path, rule }) => {
export default (input, { methodName, ignoreSingularizationList }, { path, rule }) => {
const ruleName = rule.name;
const resourcePath = path[1];

Expand All @@ -16,7 +16,7 @@ export default (input, { methodName, ignorePluralizationList }, { path, rule })
}

try {
const errors = validateOperationIdAndReturnErrors(methodName, resourcePath, input, path, ignorePluralizationList);
const errors = validateOperationIdAndReturnErrors(methodName, resourcePath, input, path, ignoreSingularizationList);
return evaluateAndCollectAdoptionStatus(errors, ruleName, input, path);
} catch (e) {
return handleInternalError(ruleName, path, e);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { getCustomMethodName, isCustomMethodIdentifier, stripCustomMethodName }
import { hasCustomMethodOverride, hasVerbOverride, VERB_OVERRIDE_EXTENSION } from './utils/extensions.js';
import { validateOperationIdAndReturnErrors } from './utils/validations/validateOperationIdAndReturnErrors.js';

export default (input, { ignorePluralizationList }, { path, rule }) => {
export default (input, { ignoreSingularizationList }, { path, rule }) => {
const ruleName = rule.name;
const resourcePath = path[1];

Expand All @@ -27,7 +27,7 @@ export default (input, { ignorePluralizationList }, { path, rule }) => {
return;
}

const errors = validateOperationIdAndReturnErrors(methodName, endpointUrl, input, path, ignorePluralizationList);
const errors = validateOperationIdAndReturnErrors(methodName, endpointUrl, input, path, ignoreSingularizationList);
return evaluateAndCollectAdoptionStatus(errors, ruleName, input, path);
} catch (e) {
return handleInternalError(ruleName, path, e);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,9 @@ export const CAMEL_CASE_WITH_ABBREVIATIONS = /[A-Z]+(?![a-z0-9])|[A-Z]*[a-z0-9]+
*
* @param method the standard method name (create, update, get etc.), custom method name, or empty string (only for legacy custom methods)
* @param path the path for the endpoint
* @param ignoreSingularizationList a list of nouns to ignore when singularizing resource names
*/
export function generateOperationID(method, path, ignorePluralizationList = []) {
export function generateOperationID(method, path, ignoreSingularizationList = []) {
if (!path) {
return method;
}
Expand Down Expand Up @@ -40,7 +41,7 @@ export function generateOperationID(method, path, ignorePluralizationList = [])

let opID = verb;
for (let i = 0; i < nouns.length - 1; i++) {
opID += upperCamelCase(singularize(nouns[i], ignorePluralizationList));
opID += upperCamelCase(singularize(nouns[i], ignoreSingularizationList));
}

// singularize final noun, dependent on resource identifier - leave custom nouns alone
Expand All @@ -49,7 +50,7 @@ export function generateOperationID(method, path, ignorePluralizationList = [])
!camelCaseCustomMethod) ||
verb === 'create'
) {
nouns[nouns.length - 1] = singularize(nouns[nouns.length - 1], ignorePluralizationList);
nouns[nouns.length - 1] = singularize(nouns[nouns.length - 1], ignoreSingularizationList);
}

opID += upperCamelCase(nouns.pop());
Expand Down Expand Up @@ -93,8 +94,8 @@ function capitalize(val) {
return String(val).charAt(0).toUpperCase() + String(val).slice(1);
}

function singularize(noun, ignorePluralizationList = []) {
if (!ignorePluralizationList.includes(noun)) {
function singularize(noun, ignoreSingularizationList = []) {
if (!ignoreSingularizationList.includes(noun)) {
return inflection.singularize(noun);
}
return noun;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,18 +19,18 @@ const TOO_LONG_OP_ID_ERROR_MESSAGE =
* @param resourcePath the resource path for the endpoint (e.g. '/users', '/users/{userId}', etc.). For custom methods, this is the path without the custom method name.
* @param operationObject the operation object to validate, which should contain the operationId and optionally the x-xgen-operation-id-override extension.
* @param path the path to the operation object being evaluated, used for error reporting with Spectral.
* @param ignorePluralizationList an array of nouns to ignore when singularizing resource names.
* @param ignoreSingularizationList an array of nouns to ignore when singularizing resource names.
* @returns {[{path: string[], message: string}]} an array of error objects, each containing a path and a message, or an empty array if no errors are found.
*/
export function validateOperationIdAndReturnErrors(
methodName,
resourcePath,
operationObject,
path,
ignorePluralizationList
ignoreSingularizationList
) {
const operationId = operationObject.operationId;
const expectedOperationId = generateOperationID(methodName, resourcePath, ignorePluralizationList);
const expectedOperationId = generateOperationID(methodName, resourcePath, ignoreSingularizationList);

const operationIdPath = path.concat(['operationId']);

Expand Down
Loading