diff --git a/src/parser/openapi3/body.js b/src/parser/openapi3/body.js index effd3fb..d5da528 100644 --- a/src/parser/openapi3/body.js +++ b/src/parser/openapi3/body.js @@ -7,7 +7,8 @@ const _ = require('lodash') module.exports = function() { const MAX_DEPTH_LEVEL = 20; - + let seenSchemas = new WeakSet(); + return function get(verb, path, bodyResponse) { if (!_.isObject(global.definition.paths)) { require('../../utils/error.js')('paths is required') @@ -110,6 +111,17 @@ module.exports = function() { } function replaceAllOfs(schema){ + if (!_.isObject(schema)) return schema; + + // Detectar ciclos por identidad + if (seenSchemas.has(schema)) { + return { + type: "string", + description: "Circular schema avoided" + }; + } + seenSchemas.add(schema); + let result = {} for (let i in schema) { if (i === 'allOf' && _.isArray(schema[i])){ diff --git a/src/parser/swagger2/body.js b/src/parser/swagger2/body.js index dc5c1ad..a28544d 100644 --- a/src/parser/swagger2/body.js +++ b/src/parser/swagger2/body.js @@ -5,6 +5,9 @@ const _ = require('lodash'); module.exports = function() { + + let seenSchemas = new WeakSet(); + return function get(verb, path, bodyResponse) { if (!_.isObject(global.definition.paths)) { @@ -38,6 +41,18 @@ module.exports = function() { }; function replaceRefs(schema){ + + if (!_.isObject(schema)) return schema; + + // Detectar ciclos por identidad + if (seenSchemas.has(schema)) { + return { + type: "string", + description: "Circular schema avoided" + }; + } + seenSchemas.add(schema); + let result = {}; for (let i in schema) { if (i === '$ref'){ diff --git a/src/parser/swagger2/pathParameters.js b/src/parser/swagger2/pathParameters.js index e5c5407..6779acd 100644 --- a/src/parser/swagger2/pathParameters.js +++ b/src/parser/swagger2/pathParameters.js @@ -5,6 +5,7 @@ const _ = require('lodash'); module.exports = function() { + let seenSchemas = new WeakSet(); return function get(verb,path){ if (!_.isObject(global.definition.paths)) { @@ -23,6 +24,17 @@ module.exports = function() { } function replaceRefs(schema){ + if (!_.isObject(schema)) return schema; + + // Detectar ciclos por identidad + if (seenSchemas.has(schema)) { + return { + type: "string", + description: "Circular schema avoided" + }; + } + seenSchemas.add(schema); + let result = {}; for (let i in schema) { if (i === '$ref'){ diff --git a/src/swagger2json/index.js b/src/swagger2json/index.js index e33cc2d..5d2e630 100644 --- a/src/swagger2json/index.js +++ b/src/swagger2json/index.js @@ -7,13 +7,22 @@ const _ = require('lodash'); module.exports = function() { return function get(swagger, name, parent,index){ +if (typeof swagger !== 'object' || swagger === null) { + swagger = { type: 'string' }; + } - if (!swagger.type && swagger.properties){ - swagger.type = 'object'; - } else if (swagger.oneOf) { - swagger.type = 'oneOf'; - } else if (swagger.anyOf) { - swagger.type = 'anyOf'; + if (!swagger.type) { + if (swagger.properties) { + swagger.type = 'object'; + } else if (swagger.items) { + swagger.type = 'array'; + } else if (swagger.oneOf) { + swagger.type = 'oneOf'; + } else if (swagger.anyOf) { + swagger.type = 'anyOf'; + } else { + swagger.type = 'string'; + } } let wrongParam = false;