mirror of https://github.com/Budibase/budibase.git
5 changed files with 86 additions and 72 deletions
@ -0,0 +1,56 @@ |
|||
import { FIELDS } from "constants/backend" |
|||
|
|||
function baseConversion(type) { |
|||
if (type === "string") { |
|||
return { |
|||
type: FIELDS.STRING.type, |
|||
} |
|||
} else if (type === "boolean") { |
|||
return { |
|||
type: FIELDS.BOOLEAN.type, |
|||
} |
|||
} else if (type === "number") { |
|||
return { |
|||
type: FIELDS.NUMBER.type, |
|||
} |
|||
} |
|||
} |
|||
|
|||
function recurse(schemaLevel = {}, objectLevel) { |
|||
if (!objectLevel) { |
|||
return null |
|||
} |
|||
const baseType = typeof objectLevel |
|||
if (baseType !== "object") { |
|||
return baseConversion(baseType) |
|||
} |
|||
for (let [key, value] of Object.entries(objectLevel)) { |
|||
const type = typeof value |
|||
// check array first, since arrays are objects
|
|||
if (Array.isArray(value)) { |
|||
const schema = recurse(schemaLevel[key], value[0]) |
|||
if (schema) { |
|||
schemaLevel[key] = { |
|||
type: FIELDS.ARRAY.type, |
|||
schema, |
|||
} |
|||
} |
|||
} else if (type === "object") { |
|||
const schema = recurse(schemaLevel[key], objectLevel[key]) |
|||
if (schema) { |
|||
schemaLevel[key] = schema |
|||
} |
|||
} else { |
|||
schemaLevel[key] = baseConversion(type) |
|||
} |
|||
} |
|||
if (!schemaLevel.type) { |
|||
return { type: FIELDS.JSON.type, schema: schemaLevel } |
|||
} else { |
|||
return schemaLevel |
|||
} |
|||
} |
|||
|
|||
export function generate(object) { |
|||
return recurse({}, object).schema |
|||
} |
|||
Loading…
Reference in new issue