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
JavaScript
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;