46 lines
840 B
JavaScript
46 lines
840 B
JavaScript
|
'use strict';
|
||
|
|
||
|
var acorn = require('acorn');
|
||
|
var objectAssign = require('object-assign');
|
||
|
|
||
|
module.exports = isExpression;
|
||
|
|
||
|
var DEFAULT_OPTIONS = {
|
||
|
throw: false,
|
||
|
strict: false,
|
||
|
lineComment: false
|
||
|
};
|
||
|
|
||
|
function isExpression(src, options) {
|
||
|
options = objectAssign({}, DEFAULT_OPTIONS, options);
|
||
|
|
||
|
try {
|
||
|
var parser = new acorn.Parser(options, src, 0);
|
||
|
|
||
|
if (options.strict) {
|
||
|
parser.strict = true;
|
||
|
}
|
||
|
|
||
|
if (!options.lineComment) {
|
||
|
parser.skipLineComment = function (startSkip) {
|
||
|
this.raise(this.pos, 'Line comments not allowed in an expression');
|
||
|
};
|
||
|
}
|
||
|
|
||
|
parser.nextToken();
|
||
|
parser.parseExpression();
|
||
|
|
||
|
if (parser.type !== acorn.tokTypes.eof) {
|
||
|
parser.unexpected();
|
||
|
}
|
||
|
} catch (ex) {
|
||
|
if (!options.throw) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
throw ex;
|
||
|
}
|
||
|
|
||
|
return true;
|
||
|
}
|