{"version":3,"sources":["../../src/parse/parse.ts"],"sourcesContent":["import {\n  isNumber,\n  isConstant,\n  isVariable,\n  isOperator,\n  isNamedFunction,\n  isLeftParenthesis,\n  isRightParenthesis,\n} from \"../queries\";\n\nimport { ASTNode } from \"./node\";\nimport type { ConstantToken, OperatorToken, Token } from \"../types\";\nimport { last } from \"../tokenize/utils\";\n\nconst addOperandNode = (nodes: ASTNode[], token: ConstantToken) => {\n  const node = new ASTNode(token);\n\n  nodes.push(node);\n};\n\nconst addOperatorNode = (nodes: ASTNode[], token: OperatorToken) => {\n  const node = new ASTNode(token);\n\n  if (token.args && token.args > 1) {\n    node.setRight(nodes.pop()!);\n  }\n\n  node.setLeft(nodes.pop()!);\n\n  nodes.push(node);\n};\n\nexport const parse = (tokens: Token[]) => {\n  const ops: Token[] = [];\n  const nodes: ASTNode[] = [];\n\n  tokens.forEach((token) => {\n    if (isNumber(token) || isVariable(token) || isConstant(token)) {\n      addOperandNode(nodes, token as ConstantToken);\n    }\n\n    if (isLeftParenthesis(token)) {\n      ops.push(token);\n    }\n\n    if (isRightParenthesis(token)) {\n      while (last(ops) && !isLeftParenthesis(last(ops))) {\n        addOperatorNode(nodes, ops.pop()! as OperatorToken);\n      }\n\n      ops.pop();\n    }\n\n    if (isOperator(token) || isNamedFunction(token)) {\n      while (\n        last(ops) &&\n        last<OperatorToken>(ops as OperatorToken[]).precedence >=\n          (token as OperatorToken).precedence &&\n        !isLeftParenthesis(token)\n      ) {\n        addOperatorNode(nodes, ops.pop()! as OperatorToken);\n      }\n\n      ops.push(token);\n    }\n  });\n\n  while (ops.length > 0) {\n    addOperatorNode(nodes, ops.pop()! as OperatorToken);\n  }\n\n  return nodes.pop();\n};\n"],"mappings":";;;;;;;;;;;;;;;;;AAcA,IAAM,iBAAiB,CAAC,OAAkB,UAAyB;AACjE,QAAM,OAAO,IAAI,QAAQ,KAAK;AAE9B,QAAM,KAAK,IAAI;AACjB;AAEA,IAAM,kBAAkB,CAAC,OAAkB,UAAyB;AAClE,QAAM,OAAO,IAAI,QAAQ,KAAK;AAE9B,MAAI,MAAM,QAAQ,MAAM,OAAO,GAAG;AAChC,SAAK,SAAS,MAAM,IAAI,CAAE;AAAA,EAC5B;AAEA,OAAK,QAAQ,MAAM,IAAI,CAAE;AAEzB,QAAM,KAAK,IAAI;AACjB;AAEO,IAAM,QAAQ,CAAC,WAAoB;AACxC,QAAM,MAAe,CAAC;AACtB,QAAM,QAAmB,CAAC;AAE1B,SAAO,QAAQ,CAAC,UAAU;AACxB,QAAI,SAAS,KAAK,KAAK,WAAW,KAAK,KAAK,WAAW,KAAK,GAAG;AAC7D,qBAAe,OAAO,KAAsB;AAAA,IAC9C;AAEA,QAAI,kBAAkB,KAAK,GAAG;AAC5B,UAAI,KAAK,KAAK;AAAA,IAChB;AAEA,QAAI,mBAAmB,KAAK,GAAG;AAC7B,aAAO,KAAK,GAAG,KAAK,CAAC,kBAAkB,KAAK,GAAG,CAAC,GAAG;AACjD,wBAAgB,OAAO,IAAI,IAAI,CAAmB;AAAA,MACpD;AAEA,UAAI,IAAI;AAAA,IACV;AAEA,QAAI,WAAW,KAAK,KAAK,gBAAgB,KAAK,GAAG;AAC/C,aACE,KAAK,GAAG,KACR,KAAoB,GAAsB,EAAE,cACzC,MAAwB,cAC3B,CAAC,kBAAkB,KAAK,GACxB;AACA,wBAAgB,OAAO,IAAI,IAAI,CAAmB;AAAA,MACpD;AAEA,UAAI,KAAK,KAAK;AAAA,IAChB;AAAA,EACF,CAAC;AAED,SAAO,IAAI,SAAS,GAAG;AACrB,oBAAgB,OAAO,IAAI,IAAI,CAAmB;AAAA,EACpD;AAEA,SAAO,MAAM,IAAI;AACnB;","names":[]}