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)