d2-ui
Version:
76 lines (69 loc) • 1.93 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = extractValueFromBinaryExpression;
var _index = require('./index');
var _index2 = _interopRequireDefault(_index);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* Extractor function for a BinaryExpression type value node.
* A binary expression has a left and right side separated by an operator
* such as `a + b`.
*
* @param - value - AST Value object with type `BinaryExpression`
* @returns - The extracted value converted to correct type.
*/
function extractValueFromBinaryExpression(value) {
var operator = value.operator;
var left = value.left;
var right = value.right;
var leftVal = (0, _index2.default)(left);
var rightVal = (0, _index2.default)(right);
switch (operator) {
case '==':
return leftVal == rightVal;
case '!=':
return leftVal != rightVal;
case '===':
return leftVal === rightVal;
case '!==':
return leftVal !== rightVal;
case '<':
return leftVal < rightVal;
case '<=':
return leftVal <= rightVal;
case '>':
return leftVal > rightVal;
case '>=':
return leftVal >= rightVal;
case '<<':
return leftVal << rightVal;
case '>>':
return leftVal >> rightVal;
case '>>>':
return leftVal >>> rightVal;
case '+':
return leftVal + rightVal;
case '-':
return leftVal - rightVal;
case '*':
return leftVal * rightVal;
case '/':
return leftVal / rightVal;
case '%':
return leftVal % rightVal;
case '|':
return leftVal | rightVal;
case '^':
return leftVal ^ rightVal;
case '&':
return leftVal & rightVal;
case 'in':
return leftVal in rightVal;
case 'instanceof':
return leftVal instanceof rightVal;
default:
return undefined;
}
}