diff options
Diffstat (limited to 'deps/npm/node_modules/readable-stream/node_modules/inline-process-browser/node_modules/falafel/example/prompt.js')
-rw-r--r-- | deps/npm/node_modules/readable-stream/node_modules/inline-process-browser/node_modules/falafel/example/prompt.js | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/deps/npm/node_modules/readable-stream/node_modules/inline-process-browser/node_modules/falafel/example/prompt.js b/deps/npm/node_modules/readable-stream/node_modules/inline-process-browser/node_modules/falafel/example/prompt.js new file mode 100644 index 0000000000..a1062a03f4 --- /dev/null +++ b/deps/npm/node_modules/readable-stream/node_modules/inline-process-browser/node_modules/falafel/example/prompt.js @@ -0,0 +1,49 @@ +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); |