48 lines
1.5 KiB
JavaScript
48 lines
1.5 KiB
JavaScript
// import libraries
|
|
const protobuf = require("protobufjs")
|
|
const getStdin = require('get-stdin')
|
|
|
|
// import messages
|
|
const root = protobuf.Root.fromJSON(require("./bundle.json"))
|
|
const Request = root.lookupType("gnostic.plugin.v1.Request")
|
|
const Response = root.lookupType("gnostic.plugin.v1.Response")
|
|
const Document = root.lookupType("openapi.v2.Document")
|
|
|
|
getStdin.buffer().then(buffer => {
|
|
const request = Request.decode(buffer)
|
|
messages = []
|
|
for (var j in request.models) {
|
|
const m = request.models[j]
|
|
if (m.type_url == "openapi.v2.Document") {
|
|
const openapi2 = Document.decode(m.value)
|
|
const paths = openapi2.paths.path
|
|
for (var i in paths) {
|
|
const path = paths[i]
|
|
//console.error('path %s\n\n', path.name)
|
|
const getOperation = path.value.get
|
|
if (getOperation && getOperation.operationId == "") {
|
|
messages.push({level:3, code:"NOOPERATIONID", text:"No operation id.", keys:["paths", path.name, "get"]})
|
|
}
|
|
const postOperation = path.value.post
|
|
if (postOperation && postOperation.operationId == "") {
|
|
messages.push({level:3, code:"NOOPERATIONID", text:"No operation id.", keys:["paths", path.name, "post"]})
|
|
}
|
|
//console.error('get %s\n\n', JSON.stringify(getOperation))
|
|
}
|
|
}
|
|
}
|
|
|
|
const payload = {
|
|
messages: messages
|
|
}
|
|
|
|
// Verify the payload if necessary (i.e. when possibly incomplete or invalid)
|
|
const errMsg = Response.verify(payload)
|
|
if (errMsg)
|
|
throw Error(errMsg)
|
|
|
|
const message = Response.create(payload)
|
|
process.stdout.write(Response.encode(message).finish())
|
|
|
|
}).catch(err => console.error(err))
|