compressing a object for definProperties
by Gerald Gillespie
JavaScript
const a = { a1 : 'A1' }, b = {}, c = { c1 : 'C1'}
const loadedModules = [a, b, c];
const moduleDefn = {
'N': {
'currentRecord': 'N/currentRecord'
},
'U': {
'myown': 'MYOWN',
'myother' : 'myother'
},
'proxy': 'proxy'
}
function staticParseModules(moduleDefinition, loadedModules) {
const localModuleList = loadedModules;
let parsedModules = []; //will be an array of array
let i = 0;
for (let [key, value] of Object.entries(moduleDefinition)) {
let newPropDefn
if (typeof value === 'string') {
newPropDefn = staticMakeProps([
[key, localModuleList.shift()]
]);
parsedModules.push(newPropDefn); // how to get the modules to be the module here
} else {
newPropDefn = staticParseModules(value, localModuleList);
parsedModules = [...newPropDefn, ...parsedModules]
}
}
return parsedModules;
} //function
function staticMakeProps(entries) {
const props = [];
if (!Array.isArray && typeof simpleObject === 'object')
entries = Object.entries
for (let [prop, value] of entries) {
let obj = {};
obj[prop] = {
value: value,
enumerable: true, //default
writable: false //default
}
props.push(obj);
}
return props;
} //static
const result = staticParseModules(moduleDefn, loadedModules);
console.log(result);
const that = {};
function staticDoProps(that, propsArray) {
if (that.initialized)
return;
Object.defineProperties(that, Object.assign({}, ...propsArray));
} //static function
result.forEach(propsection => {
staticDoProps(that, propsection)
})
console.log(that)