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