'use strict'; var ok = require('assert').ok; const esprima = require('esprima'); function parseExpression(src, builder, isExpression) { 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) { if (isExpression) { errorIndex--; // Account for extra paren added to start } errorMessage += ': '; errorMessage += src + '\n'+ new Array(errorMessage.length + errorIndex + 1).join(" ") + '^'; } var wrappedError = new Error(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;