| // 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)) |