motion
Version:
motion - moving development forward
105 lines (80 loc) • 3.13 kB
JavaScript
exports.__esModule = true;
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
var _libHelpers = require('../lib/helpers');
var _libExtractStatics = require('../lib/extractStatics');
var _libWrapState = require('../lib/wrapState');
var _state = require('../state');
var _state2 = _interopRequireDefault(_state);
exports['default'] = {
enter: function enter(node, parent, scope, file) {
if (node.isStyle) return;
var isStyle =
// $variable = {}
node.left.name && node.left.name.indexOf('$') == 0;
if (!isStyle) return;
if (_state2['default'].currentView) {
var viewMeta = _state2['default'].meta.views[_state2['default'].currentView];
var cleanName = node.left.name.substr(1);
viewMeta.styles[cleanName] = { location: _libHelpers.normalizeLocation(node.loc) };
}
// styles
return _libExtractStatics.extractAndAssign(node, file);
},
exit: function exit(node, parent, scope, file) {
// non-styles
if (node.motionTracked || node.hasSetter || node.hasGetter || node.isStyle) return;
var isBasicAssign = node.operator === "=" || node.operator === "-=" || node.operator === "+=";
if (!isBasicAssign) return;
// module.exports check
if (_libHelpers.t.isMemberExpression(node.left) && node.left.object.name === 'module') {
_libHelpers.options.onExports && _libHelpers.options.onExports(true);
_state2['default'].hasExports = true;
}
// destructures
if (scope.hasOwnBinding('view') && _libHelpers.t.isObjectPattern(node.left)) {
var destructNodes = destructureTrackers(node.left, 'set');
node.motionTracked = true;
return [_libHelpers.t.expressionStatement(node)].concat(destructNodes);
}
var isRender = _libHelpers.hasObjWithProp(node, 'view', 'render');
var id = function id(x) {
return x;
};
var sett = id;
var gett = id;
var added = false;
// view.set
if (!isRender) {
(function () {
var name = undefined,
post = undefined;
if (node.left.object) {
name = _libHelpers.findObjectName(node.left.object);
post = _libHelpers.t.identifier(name);
} else if (_libHelpers.t.isJSXExpressionContainer(node.left)) {
var expression = node.left.expression;
name = expression.object ? _libHelpers.findObjectName(expression.object) : expression.name;
} else {
name = node.left.name;
}
if (_libHelpers.isViewState(name, scope)) {
sett = function (node) {
return _libWrapState.wrapSetter(name, node, scope, post, 'set');
};
added = true;
}
})();
}
// add getter
if (!_libHelpers.options.production && !isRender && _libHelpers.isViewState(node.left.name, scope)) {
gett = function (node) {
return _libWrapState.wrapGetter(node, scope, file);
};
added = true;
}
node = sett(gett(node));
if (added && node) node.motionTracked = 1;
return node;
}
};
module.exports = exports['default'];