123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- 'use strict';
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = extractValueFromBinaryExpression;
- /**
- * 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) {
- // eslint-disable-next-line global-require
- var getValue = require('./index.js').default;
- var operator = value.operator,
- left = value.left,
- right = value.right;
- var leftVal = getValue(left);
- var rightVal = getValue(right);
- switch (operator) {
- case '==':
- return leftVal == rightVal; // eslint-disable-line
- case '!=':
- return leftVal != rightVal; // eslint-disable-line
- 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; // eslint-disable-line no-bitwise
- case '>>':
- return leftVal >> rightVal; // eslint-disable-line no-bitwise
- case '>>>':
- return leftVal >>> rightVal; // eslint-disable-line no-bitwise
- case '+':
- return leftVal + rightVal;
- case '-':
- return leftVal - rightVal;
- case '*':
- return leftVal * rightVal;
- case '/':
- return leftVal / rightVal;
- case '%':
- return leftVal % rightVal;
- case '|':
- return leftVal | rightVal; // eslint-disable-line no-bitwise
- case '^':
- return leftVal ^ rightVal; // eslint-disable-line no-bitwise
- case '&':
- return leftVal & rightVal; // eslint-disable-line no-bitwise
- case 'in':
- try {
- return leftVal in rightVal;
- } catch (err) {
- return false;
- }
- case 'instanceof':
- if (typeof rightVal !== 'function') {
- return false;
- }
- return leftVal instanceof rightVal;
- default:
- return undefined;
- }
- }
|