From d8a1bb58135235317a3e1b7ac956573ffa191383 Mon Sep 17 00:00:00 2001 From: Luis Enrique Ruiz Cueva Date: Tue, 17 Mar 2020 17:21:00 -0500 Subject: [PATCH 1/2] Fix autogenerated swagger for array type --- lib/swagger/resources.js | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/lib/swagger/resources.js b/lib/swagger/resources.js index 15893fbc..ec1e0fd7 100644 --- a/lib/swagger/resources.js +++ b/lib/swagger/resources.js @@ -68,6 +68,9 @@ swaggerPaths._getResourceDefinition = resourceConfig => { swaggerScheme.type = 'string' swaggerScheme.format = 'date' } + if (swaggerScheme.type === 'array') { + swaggerScheme = mapJoiArray(joiScheme, swaggerScheme) + } attributeShortcut[attribute] = swaggerScheme if ((joiScheme._flags || { }).presence === 'required') { @@ -183,3 +186,29 @@ swaggerPaths._getErrorDefinition = () => ({ } } }) +function mapJoiArray(joiScheme, swaggerScheme) { + const swaggerSchemeResult = Object.assign({}, swaggerScheme) + const items = joiScheme._inner.items + swaggerSchemeResult.items = { type: 'object' } + if (items.length > 0 && items[0]._inner.children) { + items[0]._inner.children.forEach(x => { + let innerSwaggerSchemeResult = {} + const innerJoiScheme = x.schema + if (innerJoiScheme._description) { + innerSwaggerSchemeResult.description = innerJoiScheme._description + } + innerSwaggerSchemeResult.type = innerJoiScheme._type + if (innerSwaggerSchemeResult.type === 'date') { + innerSwaggerSchemeResult.type = 'string' + innerSwaggerSchemeResult.format = 'date' + } + if (innerSwaggerSchemeResult.type === 'array') { + innerSwaggerSchemeResult = mapJoiArray(innerJoiScheme, innerSwaggerSchemeResult) + } + swaggerSchemeResult.items.properties = { ...swaggerSchemeResult.items.properties, [x.key]: innerSwaggerSchemeResult } + }) + } else { + swaggerSchemeResult.items = { type: items[0]._type } + } + return swaggerSchemeResult; +} From ada19a2e05b39b68a89e56e4fb033e03ef55b94d Mon Sep 17 00:00:00 2001 From: Luis Enrique Ruiz Cueva Date: Tue, 17 Mar 2020 18:06:33 -0500 Subject: [PATCH 2/2] fix lint --- lib/swagger/resources.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/swagger/resources.js b/lib/swagger/resources.js index ec1e0fd7..f5a0e5b5 100644 --- a/lib/swagger/resources.js +++ b/lib/swagger/resources.js @@ -186,7 +186,7 @@ swaggerPaths._getErrorDefinition = () => ({ } } }) -function mapJoiArray(joiScheme, swaggerScheme) { +function mapJoiArray (joiScheme, swaggerScheme) { const swaggerSchemeResult = Object.assign({}, swaggerScheme) const items = joiScheme._inner.items swaggerSchemeResult.items = { type: 'object' } @@ -210,5 +210,5 @@ function mapJoiArray(joiScheme, swaggerScheme) { } else { swaggerSchemeResult.items = { type: items[0]._type } } - return swaggerSchemeResult; + return swaggerSchemeResult }