babel-plugin-add-react-mobx-observer-displayname
Version:
[![version][npm-img]][npm-url] [![license][mit-img]][mit-url] [![size][size-img]][size-url] [![download][download-img]][download-url]
97 lines (87 loc) • 2.34 kB
JavaScript
const isObserver = (path, t) => {
return path.node.callee.name === 'observer';
};
const isConstObserver = (path, t) => {
return (
t.isIdentifier(path.node.callee) &&
path.node.arguments &&
path.node.arguments.length === 1 &&
t.isIdentifier(path.node.arguments[0]) &&
path.node.arguments[0].name
);
};
const isFnObserver = (path, t) => {
const parentNode = path.parentPath.node;
return (
t.isVariableDeclarator(parentNode) && //
t.isIdentifier(path.node.callee) &&
path.node.arguments &&
t.isVariableDeclarator(path.parent) &&
path.parent.id &&
t.isIdentifier(path.parent.id) &&
path.parent.id.name
);
};
const applyConstDisplayname = (path, t, compName) => {
const nearestStatement = path.find(t.isStatement);
if (!nearestStatement) return;
const body = [
t.expressionStatement(
// compName.displayName = 'displayName'
t.assignmentExpression(
'=',
t.memberExpression(t.identifier(compName), t.identifier('displayName')),
t.stringLiteral(compName),
),
),
];
nearestStatement.insertAfter(
t.blockStatement(body),
// ⚠️ Do not check env environment,you can setting babel env
//
// {
// "env": {
// "dev": {
// "presets": ["es2015"],
// "plugins":["x"]
// },
// "prod": {
// "presets": ["es2015"]
// }
// }
// }
//
// t.ifStatement(
// // process.env.NODE_ENV === 'development'
// t.binaryExpression(
// '===',
// t.memberExpression(
// t.memberExpression(t.identifier('process'), t.identifier('env')),
// t.identifier('NODE_ENV'),
// ),
// t.stringLiteral('development'),
// // t.stringLiteral('production'),
// ),
// t.blockStatement(bodys),
// ),
);
};
const applyFnDisplayname = (path, t, compName) => {
path.parentPath.insertAfter(
t.expressionStatement(
// compName.displayName = 'displayName'
t.assignmentExpression(
'=',
t.memberExpression(t.identifier(compName), t.identifier('displayName')),
t.stringLiteral(compName),
),
),
);
};
module.exports = {
isObserver,
isConstObserver,
isFnObserver,
applyConstDisplayname,
applyFnDisplayname,
};