From ccd0edc8393abccc8a687d7526aa0ce8c0861d49 Mon Sep 17 00:00:00 2001 From: Ruben Fiszel Date: Tue, 16 Aug 2022 17:22:16 +0200 Subject: [PATCH] do not overwrite schemaProperty if the typ is the same --- frontend/src/lib/infer.ts | 59 +++++++++++++++++++++------------------ 1 file changed, 32 insertions(+), 27 deletions(-) diff --git a/frontend/src/lib/infer.ts b/frontend/src/lib/infer.ts index 6d67e1c1d0..94d8265e26 100644 --- a/frontend/src/lib/infer.ts +++ b/frontend/src/lib/infer.ts @@ -44,58 +44,63 @@ function argSigToJsonSchemaType( | { list: string | { str: any } | null } | { str: string[] | null } | { object: { key: string, typ: any }[] }, - s: SchemaProperty + oldS: SchemaProperty ): void { - for (const prop of Object.getOwnPropertyNames(s)) { - if (prop != "description") { - delete s[prop] - } - } + + const newS: SchemaProperty = { type: '', description: '' } if (t === 'int') { - s.type = 'integer' + newS.type = 'integer' } else if (t === 'float') { - s.type = 'number' + newS.type = 'number' } else if (t === 'bool') { - s.type = 'boolean' + newS.type = 'boolean' } else if (t === 'email') { - s.type = 'string' - s.format = 'email' + newS.type = 'string' + newS.format = 'email' } else if (t === 'sql') { - s.type = 'string' - s.format = 'sql' + newS.type = 'string' + newS.format = 'sql' } else if (t === 'bytes') { - s.type = 'string' - s.contentEncoding = 'base64' + newS.type = 'string' + newS.contentEncoding = 'base64' } else if (t === 'datetime') { - s.type = 'string' - s.format = 'date-time' + newS.type = 'string' + newS.format = 'date-time' } else if (typeof t !== 'string' && `object` in t) { - s.type = 'object' + newS.type = 'object' if (t.object) { const properties = {} for (const prop of t.object) { properties[prop.key] = {} argSigToJsonSchemaType(prop.typ, properties[prop.key]) } - s.properties = properties + newS.properties = properties } } else if (typeof t !== 'string' && `str` in t) { - s.type = 'string' + newS.type = 'string' if (t.str) { - s.enum = t.str + newS.enum = t.str } } else if (typeof t !== 'string' && `resource` in t) { - s.type = 'object' - s.format = `resource-${t.resource}` + newS.type = 'object' + newS.format = `resource-${t.resource}` } else if (typeof t !== 'string' && `list` in t) { - s.type = 'array' + newS.type = 'array' if (t.list === 'int' || t.list === 'float') { - s.items = { type: 'number' } + newS.items = { type: 'number' } } else if (t.list === 'bytes') { - s.items = { type: 'string', contentEncoding: 'base64' } + newS.items = { type: 'string', contentEncoding: 'base64' } } else { - s.items = { type: 'string' } + newS.items = { type: 'string' } } } + if (oldS.type != newS.type) { + for (const prop of Object.getOwnPropertyNames(newS)) { + if (prop != "description") { + delete oldS[prop] + } + } + } + Object.assign(oldS, newS) }