| 1 | const determineType = require("./determineType"); |
| 2 | |
| 3 | function findFields(coll, currentKey, first, fields) { |
| 4 | let newFields = fields; |
| 5 | if (!coll) return newFields; |
| 6 | |
| 7 | Object.keys(coll).map((field) => { |
| 8 | const data = coll[field]; |
| 9 | let newKey = field; |
| 10 | if (currentKey) { |
| 11 | newKey = `${currentKey}.${field}`; |
| 12 | if (first) { |
| 13 | newKey = `root.${currentKey}[].${field}`; |
| 14 | } |
| 15 | newFields.push({ |
| 16 | field: newKey, |
| 17 | value: coll[field], |
| 18 | type: determineType(coll[field]), |
| 19 | }); |
| 20 | } else { |
| 21 | if (first) newKey = `root[].${newKey}`; |
| 22 | newFields.push({ |
| 23 | field: newKey, |
| 24 | value: coll[field], |
| 25 | type: determineType(coll[field]), |
| 26 | }); |
| 27 | } |
| 28 | |
| 29 | if (data !== null && typeof data === "object" && !(data instanceof Array)) { |
| 30 | newFields = findFields(coll[field], newKey, false, newFields); |
| 31 | } |
| 32 | |
| 33 | return field; |
| 34 | }); |
| 35 | |
| 36 | return newFields; |
| 37 | } |
| 38 | |
| 39 | export default function init(collection) { |
| 40 | let fields = []; |