'use strict'; var ok = require('assert').ok; var charProps = require('char-props'); const esprima = require('esprima'); function parseExpression(src, builder) { ok(typeof src === 'string', '"src" should be a string expression'); ok(builder, '"builder" is required'); function convert(node) { if (Array.isArray(node)) { let nodes = node; for (let i=0; i= 0) { var srcCharProps = charProps(src); errorIndex--; // Account for extra paren added to start let line = srcCharProps.lineAt(errorIndex)+1; let column = srcCharProps.columnAt(errorIndex)+1; errorMessage += ' [Line ' + line + ', Col: ' + column + ']'; } var wrappedError = new Error('Invalid JavaScript expression: ' + src + ' - ' + errorMessage); wrappedError.index = errorIndex; wrappedError.src = src; wrappedError.code = 'ERR_INVALID_JAVASCRIPT_EXPRESSION'; throw wrappedError; } var converted = convert(jsAST); if (converted == null) { converted = builder.expression(src); } return converted; } module.exports = parseExpression;