Added Swagger
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
export const validate2And3ParametersHaveUniqueNameAndInCombinations = () => (system) => {
|
||||
return system.validateSelectors
|
||||
.allParameterArrays()
|
||||
.then(nodes => {
|
||||
return nodes.reduce((acc, node) => {
|
||||
const parameters = node.node || []
|
||||
|
||||
const seen = []
|
||||
|
||||
parameters.forEach((param, i) => {
|
||||
const { name: paramName, in: paramIn } = param
|
||||
|
||||
if(!paramName || !paramIn) {
|
||||
// name or in is missing, so we can't match the param to anything else
|
||||
return
|
||||
}
|
||||
const key = `${paramName}::${paramIn}`
|
||||
if(seen.indexOf(key) > -1) {
|
||||
acc.push({
|
||||
level: "error",
|
||||
message: "Sibling parameters must have unique name + in values",
|
||||
path: [
|
||||
...node.path,
|
||||
(param.__i || i).toString()
|
||||
]
|
||||
})
|
||||
}
|
||||
seen.push(key)
|
||||
})
|
||||
|
||||
return acc
|
||||
}, [])
|
||||
})
|
||||
}
|
||||
|
||||
export const validate2And3PathParameterIsDefinedInPath = () => (system) => {
|
||||
const refArray = []
|
||||
return system.validateSelectors
|
||||
.allParameters()
|
||||
.then(nodes => {
|
||||
return nodes.reduce((acc, node) => {
|
||||
const parameter = node.node || {}
|
||||
const path = node.path
|
||||
const isFromPath = path[0] === "paths" ? true : false
|
||||
const pathString = path[1]
|
||||
const paramName = parameter.name
|
||||
const paramInPath = `{${paramName}}`
|
||||
const ref = parameter.$ref
|
||||
const pathStringIncludesParamInPath = pathString && !pathString.toUpperCase().includes("" + paramInPath.toUpperCase())
|
||||
if (parameter.in === "path") {
|
||||
if (isFromPath && pathStringIncludesParamInPath) {
|
||||
acc.push({
|
||||
message: `Path parameter "${paramName}" must have the corresponding ${paramInPath} segment in the "${pathString}" path`,
|
||||
path: [...node.path, "name"],
|
||||
level: "error"
|
||||
})
|
||||
} else {
|
||||
const paramReference = refArray.find(({ referenceParamName }) => referenceParamName === node.key)
|
||||
if (paramReference && paramReference.pathString && !paramReference.pathString.toUpperCase().includes("" + paramInPath.toUpperCase())) {
|
||||
acc.push({
|
||||
message: `Path parameter "${paramName}" must have the corresponding ${paramInPath} segment in the "${paramReference.pathString}" path`,
|
||||
path: [...paramReference.node.path, "name"],
|
||||
level: "error"
|
||||
})
|
||||
}
|
||||
}
|
||||
} else if (ref !== undefined) {
|
||||
const refStrings = ref.split("/")
|
||||
refArray.push({referenceParamName:refStrings[refStrings.length-1], pathString:pathString, node: node})
|
||||
}
|
||||
|
||||
return acc
|
||||
}, [])
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user