Added Swagger
This commit is contained in:
@@ -0,0 +1,128 @@
|
||||
export const validateOAS3RefsForRequestBodiesReferenceRequestBodyPositions = () => sys => {
|
||||
return sys.validateSelectors
|
||||
.allOAS3RequestBodies()
|
||||
.then(nodes => {
|
||||
return nodes.reduce((acc, node) => {
|
||||
const value = node.node
|
||||
const ref = value.$ref
|
||||
|
||||
if (!ref) {
|
||||
return acc
|
||||
}
|
||||
|
||||
const [refPath = ""] = ref.split("#")
|
||||
const pathArr = refPath.split("/") || []
|
||||
|
||||
// Ignore external references
|
||||
if (ref.startsWith("#/")) {
|
||||
// Local cases
|
||||
if (refPath.endsWith("requestBody") && (refPath.startsWith("/paths") || refPath.startsWith("/components"))){
|
||||
return acc
|
||||
}
|
||||
|
||||
// Starting with #/compontents/schemas is not allowed
|
||||
if (ref.startsWith("#/components/schemas")) {
|
||||
acc.push({
|
||||
level: "error",
|
||||
message: `requestBody $refs cannot point to '#/components/schemas/…', they must point to '#/components/requestBodies/…'`,
|
||||
path: [...node.path, "$ref"]
|
||||
})
|
||||
} else
|
||||
if (ref.startsWith("#/components") && !ref.startsWith("#/components/requestBodies/")) {
|
||||
acc.push({
|
||||
level: "error",
|
||||
message: `requestBody $refs must point to a position where a requestBody can be legally placed`,
|
||||
path: [...node.path, "$ref"]
|
||||
})
|
||||
}
|
||||
|
||||
// Extensions are valid
|
||||
if (ref.startsWith("#/") && pathArr.some(element => element.startsWith("x-"))){
|
||||
return acc
|
||||
}
|
||||
}
|
||||
return acc
|
||||
|
||||
}, [])
|
||||
})
|
||||
}
|
||||
|
||||
export const validateOAS3RequestBodyRefsReferenceAllowableSchemaPositions = () => sys => {
|
||||
return sys.validateSelectors
|
||||
.allOAS3RequestBodySchemas()
|
||||
.then(nodes => {
|
||||
return nodes.reduce((acc, node) => {
|
||||
const value = node.node
|
||||
const ref = value.$ref
|
||||
|
||||
if(!ref) {
|
||||
return acc
|
||||
}
|
||||
|
||||
const [, refPath = ""] = ref.split("#")
|
||||
const pathArr = refPath.split("/") || []
|
||||
const parentRefKey = pathArr.slice(-2)[0]
|
||||
const targetRefKey = pathArr.slice(-1)[0]
|
||||
if(
|
||||
targetRefKey !== "schema"
|
||||
&& parentRefKey !== "schemas"
|
||||
&& ref.startsWith("#/")
|
||||
) {
|
||||
acc.push({
|
||||
level: "error",
|
||||
message: `requestBody schema $refs must point to a position where a Schema Object can be legally placed`,
|
||||
path: [...node.path, "$ref"]
|
||||
})
|
||||
}
|
||||
return acc
|
||||
}, [])
|
||||
})
|
||||
}
|
||||
|
||||
export const validateOAS3ParameterRefsReferenceParameterPositions = () => sys => {
|
||||
return sys.validateSelectors
|
||||
.allParameters()
|
||||
.then(nodes => {
|
||||
return nodes.reduce((acc, node) => {
|
||||
const value = node.node
|
||||
const ref = value.$ref
|
||||
|
||||
if(!ref) {
|
||||
return acc
|
||||
}
|
||||
|
||||
if (ref.startsWith("#/components/headers")) {
|
||||
acc.push({
|
||||
level: "error",
|
||||
message: `OAS3 parameter $refs should point to #/components/parameters/... and not #/components/headers/...`,
|
||||
path: [...node.path, "$ref"]
|
||||
})
|
||||
}
|
||||
return acc
|
||||
}, [])
|
||||
})
|
||||
}
|
||||
|
||||
export const validateOAS3RefsForHeadersReferenceHeadersPositions = () => sys => {
|
||||
return sys.validateSelectors
|
||||
.allHeaders()
|
||||
.then(nodes => {
|
||||
return nodes.reduce((acc, node) => {
|
||||
const value = node.node
|
||||
const ref = value.$ref
|
||||
|
||||
if(!ref) {
|
||||
return acc
|
||||
}
|
||||
|
||||
if (ref.startsWith("#/components/parameters")) {
|
||||
acc.push({
|
||||
level: "error",
|
||||
message: `OAS3 header $refs should point to #/components/headers/... and not #/components/parameters/...`,
|
||||
path: [...node.path, "$ref"]
|
||||
})
|
||||
}
|
||||
return acc
|
||||
}, [])
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user