UNPKG

class-o-mat-data-object-plugin

Version:

a plugin to allow a class-o-mat instance to output the full tree of its own parameters and any of its children

69 lines (48 loc) 1.38 kB
import Bunyan from 'bunyan'; const log = Bunyan.createLogger({name: "COM-CLI"}); import { Plugin } from 'class-o-mat'; const plugin = new Plugin('classOMatDataObject'); const getData =(minion)=>{ if (Array.isArray(minion)===true) { return minion.map((thisMinion)=>getDataFromMinion(thisMinion)); } if (typeof minion !== 'object') { return null; } if (typeof minion.___isClassOMat !== 'function') { const keys = Object.keys(minion); const data = {}; keys.forEach((key)=>{ data[key]=getDataFromMinion(minion[key]) }); return data; } return getDataFromMinion(minion); } const getDataFromMinion =(minion)=>{ const workingParams = {}; const params = minion._params; const keys = Object.keys(params); keys.forEach((key)=>{ if (key.slice(0, 3) === '___') return; workingParams[key] = params[key]; }); if (typeof minion.___children !== 'function') return workingParams; const children = minion.___children(); const childKeys = Object.keys((children)); if (childKeys.length === 0) return workingParams; childKeys.forEach((key)=>{ workingParams[key] = getData(children[key]); }); return workingParams; } const mixins = { ___data() { return getData(this); }, ___json() { return JSON.stringify(getData(this)); } } plugin.addMixins(mixins); export default plugin;