{"_id":"static-eval2","_rev":"1-9e45ac48021df906048d87a7e2aa00bd","name":"static-eval2","dist-tags":{"latest":"2.0.1"},"versions":{"2.0.1":{"name":"static-eval2","version":"2.0.1","description":"evaluate statically-analyzable expressions","main":"index.js","dependencies":{"escodegen":"^1.8.1"},"devDependencies":{"esprima":"^2.7.3","tape":"^4.6.0"},"scripts":{"test":"tape test/*.js"},"testling":{"files":"test/*.js","browsers":["ie/8..latest","ff/latest","chrome/latest","opera/latest","safari/latest"]},"repository":{"type":"git","url":"git://github.com/goto-bus-stop/static-eval.git"},"homepage":"https://github.com/goto-bus-stop/static-eval","keywords":["static","eval","expression","esprima","ast","abstract","syntax","tree","analysis"],"author":{"name":"James Halliday","email":"mail@substack.net","url":"http://substack.net"},"license":"MIT","gitHead":"19ee7ab4e4b1f74a67322b23d0222e4a574fa049","bugs":{"url":"https://github.com/goto-bus-stop/static-eval/issues"},"_id":"static-eval2@2.0.1","_nodeVersion":"11.9.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-WtlMWiobkeCU9tVELHp8+QjTNeAQAqS9/hBHjVKywELbtZqMh3nfSGP8BUVH81/F6rqFLBkjXDJX37t0ym+mqA==","shasum":"a241d9c3ad1d08ac8598ca28bc0ef408ec76e4a0","tarball":"https://registry.npmjs.org/static-eval2/-/static-eval2-2.0.1.tgz","fileCount":10,"unpackedSize":14060,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcZtG9CRA9TVsSAnZWagAAA58QAIIk8bkVuy7B3ItJNWSB\nfzyr5ac1bEuZvOVP9IrkqBE8ozVbG2lIo05Sm2KsGPgbpyUo8GVHVT8C0cFz\nZXZrPDqNJo52Czd5lJ5V3351dwpgP4+g27amXjjGdHZj41t8e6NL5CrLDZSU\n7MFW8S09Ykr1gvXqWodYYxWJ7aicVW4axWU9jrVperzIjd6YhtdO7oWHhhjR\nfQK8ZvlF9eoj7sysev+a2BQ2Qm7ftyMKuBYmsobchsOla83AqY/39+iEvbZL\n5/Nh27zcT1ZNPkS0RIMxNOMt4VMK1zgnuWjZPuN9+b75FsNcDW4R5TuksZPB\nHTajy1LuVD/hd7FeDkk34Qzp7FnwK6aRM+JUWqncm5IdBGxYx8g6J1oNXmVE\nQPwZaipb+eewW+M9htm8q8Nk2Et+4gVdgZ6ZlbiNRLKFtBCk99n3BR4jHvxN\nP9SyureLkQrTm2qApUBo91mSCV/0aqIGhYzkRtPuLMWRFJsaCsJ6xyktoEhP\nf87RXlKDIvPlVrGgj45Zs4SKXNBieMr5QTWo3K2EEyLnqMIA5dwY58XUAoax\nQXnDh8q6zZIn94VZve0ysI25+H80EifLXHwII37yo+pXTBrmlx8X68JD0edR\nbeHKOa4L7LNqkh9yllESyTjI0RHovxepRZZXFXvWKCfe77a7IwLrO+FkJW/c\nBHpN\r\n=JaMT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBdrQHEQt0OgzGPXG9carBY5+/+MlYxGqPuxsOdpyH2NAiBSwGiig+ABWS/T0nr177D96YC/xGFDXgm/UU1UYd7G9Q=="}]},"maintainers":[{"name":"goto-bus-stop","email":"renee@kooi.me"}],"_npmUser":{"name":"goto-bus-stop","email":"renee@kooi.me"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/static-eval2_2.0.1_1550242237277_0.1054566740440317"},"_hasShrinkwrap":false}},"time":{"created":"2019-02-15T14:50:37.276Z","2.0.1":"2019-02-15T14:50:37.514Z","modified":"2022-05-18T16:23:12.322Z"},"maintainers":[{"name":"goto-bus-stop","email":"renee@kooi.me"}],"description":"evaluate statically-analyzable expressions","homepage":"https://github.com/goto-bus-stop/static-eval","keywords":["static","eval","expression","esprima","ast","abstract","syntax","tree","analysis"],"repository":{"type":"git","url":"git://github.com/goto-bus-stop/static-eval.git"},"author":{"name":"James Halliday","email":"mail@substack.net","url":"http://substack.net"},"bugs":{"url":"https://github.com/goto-bus-stop/static-eval/issues"},"license":"MIT","readme":"# static-eval\n\nevaluate statically-analyzable expressions\n\n[![testling badge](https://ci.testling.com/substack/static-eval.png)](https://ci.testling.com/substack/static-eval)\n\n[![build status](https://secure.travis-ci.org/substack/static-eval.png)](http://travis-ci.org/substack/static-eval)\n\n# example\n\n``` js\nvar evaluate = require('static-eval');\nvar parse = require('esprima').parse;\n\nvar src = process.argv[2];\nvar ast = parse(src).body[0].expression;\n\nconsole.log(evaluate(ast));\n```\n\nIf you stick to simple expressions, the result is statically analyzable:\n\n```\n$ node '7*8+9'\n65\n$ node eval.js '[1,2,3+4*5-(5*11)]'\n[ 1, 2, -32 ]\n```\n\nbut if you use statements, undeclared identifiers, or syntax, the result is no\nlonger statically analyzable and `evaluate()` returns `undefined`:\n\n```\n$ node eval.js '1+2+3*n'\nundefined\n$ node eval.js 'x=5; x*2'\nundefined\n$ node eval.js '5-4*3'\n-7\n```\n\nYou can also declare variables and functions to use in the static evaluation:\n\n``` js\nvar evaluate = require('static-eval');\nvar parse = require('esprima').parse;\n\nvar src = '[1,2,3+4*10+n,foo(3+5),obj[\"\"+\"x\"].y]';\nvar ast = parse(src).body[0].expression;\n\nconsole.log(evaluate(ast, {\n    n: 6,\n    foo: function (x) { return x * 100 },\n    obj: { x: { y: 555 } }\n}));\n```\n\n# methods\n\n``` js\nvar evaluate = require('static-eval');\n```\n\n## evaluate(ast, vars={})\n\nEvaluate the [esprima](https://npmjs.org/package/esprima)-parsed abstract syntax\ntree object `ast` with an optional collection of variables `vars` to use in the\nstatic expression resolution.\n\nIf the expression contained in `ast` can't be statically resolved, `evaluate()`\nreturns undefined.\n\n# install\n\nWith [npm](https://npmjs.org) do:\n\n```\nnpm install static-eval\n```\n\n# license\n\nMIT\n","readmeFilename":"readme.markdown"}