babel-preset-muse
Version:
73 lines (62 loc) • 1.91 kB
JavaScript
function objValueStr2AST(objValueStr, t) {
const values = objValueStr.split('.');
if (values.length === 1)
return t.identifier(values[0]);
return t.memberExpression(
objValueStr2AST(values.slice(0, values.length - 1).join('.'), t),
objValueStr2AST(values[values.length - 1], t)
)
}
function objPropStr2AST(key, value, t) {
key = key.split('.');
return t.objectProperty(
t.identifier(key[0]),
key2ObjCall(key, value, t)
);
function key2ObjCall(key, value, t, index) {
!index && (index = 0);
if (key.length - 1 <= index)
return objValueStr2AST(value, t);
return t.callExpression(
t.memberExpression(
t.identifier('Object'),
t.identifier('assign')
),
[
t.objectExpression([]),
objValueStr2AST(indexKey2Str(index + 1, key), t),
t.objectExpression([
t.objectProperty(
t.identifier(key[index + 1]),
key2ObjCall(key, t, index + 1)
)
])
]
);
function indexKey2Str(index, key) {
const str = ['_state'];
for (let i = 0; i < index; i++) str.push(key[i]);
return str.join('.')
}
}
}
function objExpression2Str(expression) {
let objStr;
switch (expression.object.type) {
case 'MemberExpression':
objStr = objExpression2Str(expression.object);
break;
case 'Identifier':
objStr = expression.object.name;
break;
case 'ThisExpression':
objStr = 'this';
break;
}
return objStr + '.' + expression.property.name;
}
module.exports = {
objValueStr2AST,
objPropStr2AST,
objExpression2Str
};