Skip to content

Commit

Permalink
feat: supports binary operator
Browse files Browse the repository at this point in the history
  • Loading branch information
sxzz committed Jun 18, 2022
1 parent 6965dd7 commit 1954e64
Showing 1 changed file with 74 additions and 2 deletions.
76 changes: 74 additions & 2 deletions src/core/convert.ts
Expand Up @@ -23,6 +23,7 @@ import type { Primitive } from './utils'
import type { OptionsResolved } from './options'
import type {
ArrayExpression,
Binary,
Expression,
JSX,
JSXAttribute,
Expand Down Expand Up @@ -234,14 +235,85 @@ function transformJsx(code: string, node: JSX) {
case 'ObjectExpression':
return resolveObjectExpression(node)
case 'BinaryExpression':
// @ts-expect-error
return resolveExpression(node.left) + resolveExpression(node.right)
return resolveBinary(node)

default:
return notSupported(node)
}
}

function resolveBinary(node: Binary) {
const left: any = resolveExpression(node.left)
const right: any = resolveExpression(node.right)
switch (node.operator) {
case '+':
return left + right
case '-':
return left - right
case '*':
return left * right
case '/':
return left / right

// Logical operators
case '&&':
return left && right
case '||':
return left || right
case '??':
return left ?? right

// Comparison operators
case '==':
return left == right
case '!=':
return left != right
case '===':
return left === right
case '!==':
return left !== right

case '>':
return left > right
case '>=':
return left >= right

case '<':
return left < right
case '<=':
return left <= right

// Arithmetic operators
case '%':
return left % right
case '**':
return left ** right

// Bitwise operators
case '&':
return left & right
case '|':
return left | right
case '^':
return left ^ right
case '<<':
return left << right
case '>>':
return left >> right
case '>>>':
return left >>> right

// Relational operators
case 'in':
return left in right
case 'instanceof':
return left instanceof right

default:
notSupported(node)
}
}

function resolveLiteral(node: Literal): EvaluatedValue {
switch (node.type) {
case 'TemplateLiteral':
Expand Down

0 comments on commit 1954e64

Please sign in to comment.