12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- var falafel = require('../');
- var vm = require('vm');
- var termExps = [
- 'Identifier',
- 'CallExpression',
- 'BinaryExpression',
- 'UpdateExpression',
- 'UnaryExpression'
- ].reduce(function (acc, key) { acc[key] = true; return acc }, {});
- function terminated (node) {
- for (var p = node; p.parent; p = p.parent) {
- if (termExps[p.type]) return true;
- }
- return false;
- }
- var src = '{"a":[2,~9,prompt(":d")],"b":4,"c":prompt("beep"),"d":6}';
- var offsets = [];
- var output = falafel('(' + src + ')', function (node) {
- var isLeaf = node.parent
- && !terminated(node.parent) && terminated(node)
- ;
-
- if (isLeaf) {
- var s = node.source();
- var prompted = false;
- var res = vm.runInNewContext('(' + s + ')', {
- prompt : function (x) {
- setTimeout(function () {
- node.update(x.toUpperCase());
- }, Math.random() * 50);
- prompted = true;
- }
- });
- if (!prompted) {
- var s_ = JSON.stringify(res);
- node.update(s_);
- }
- }
- });
- setTimeout(function () {
- console.log(src);
- console.log('---');
- console.log(output);
- }, 200);
|