You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
45 lines
840 B
45 lines
840 B
'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; |
|
}
|
|
|