UNPKG

framework-entersol-web

Version:

Framework based on bootstrap 5

40 lines (35 loc) 1.08 kB
import deepMerge from "./deep-merge"; class SchemaManager { _schema; set schema(s) { this._schema = s; } get schema() { return this.resolveRefs(this._schema); } resolveRefs(item) { if (Array.isArray(item)) { return item.map(a => this.resolveRefs(a)); } else if (typeof item === 'object') { let toReturn = {}; if (item.ref) { let ref = item.ref; delete item.ref; toReturn = deepMerge({}, this.resolveRefs(ref), this.resolveRefs(item)); } else { Object.keys(item).forEach(i => { toReturn[i] = this.resolveRefs(item[i]) }); } return toReturn; } else if (typeof item === 'string' && item[0] === '$') { let keys = item.substring(1).split('.'); //Obtiene el contenido de $path.to.element //se podría obtener igual si hagop flatten el objeto let data = keys.reduce((obj, key) => obj[key], this._schema); return this.resolveRefs(data); } else return item; } } const schemaManager = new SchemaManager(); export default schemaManager;