motion
Version:
motion - moving development forward
79 lines (60 loc) • 2.41 kB
JavaScript
exports.__esModule = true;
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
var _state = require('../state');
var _state2 = _interopRequireDefault(_state);
var _libHelpers = require('../lib/helpers');
var _libWrapState = require('../lib/wrapState');
exports['default'] = {
enter: function enter(node, parent, scope) {
if (node.kind == 'prop' && !node._motionPropParsed) {
node.kind = 'const';
node._motionPropParsed = true;
node.declarations.map(function (dec) {
var name = dec.id.name;
dec.init = _libWrapState.wrapPropertyDeclarator(name, dec.init || _libHelpers.t.identifier('undefined'), scope);
return dec;
});
return [node, _libHelpers.propChange(node)];
}
},
exit: function exit(node, parent, scope, file) {
if (node.isStyle || node._motionDeclarationParsed) return;
node._motionDeclarationParsed = true;
// add getter
if (scope.hasOwnBinding('view') && node.kind != 'const' && !node.motionTracked) {
var _ret = (function () {
var destructNodes = [];
node.declarations.map(function (dec) {
if (dec.motionTracked) return dec;
// destructures
if (_libHelpers.t.isObjectPattern(dec.id)) {
destructNodes = destructNodes.concat(_libWrapState.destructureTrackers(dec.id, 'dec'));
return dec;
}
var name = dec.id.name;
_state2['default'].viewState[name] = true;
// avoid wrapping functions
if (_libHelpers.t.isFunctionExpression(dec.init) || _libHelpers.t.isArrowFunctionExpression(dec.init)) return dec;
// avoid wrapping in production
if (_libHelpers.options.production) return dec;
if (!dec.init) {
dec.init = _libWrapState.wrapDeclarator(name, _libHelpers.t.identifier('undefined'), scope);
dec.motionTracked = true;
return dec;
}
dec.init = _libWrapState.wrapDeclarator(name, dec.init, scope);
node.motionTracked = true;
return dec;
});
// add destructure declarations
if (destructNodes.length) {
return {
v: [node].concat(destructNodes)
};
}
})();
if (typeof _ret === 'object') return _ret.v;
}
}
};
module.exports = exports['default'];