summaryrefslogtreecommitdiff
path: root/deps/npm/node_modules/readable-stream/node_modules/inline-process-browser/node_modules/falafel/example/prompt.js
diff options
context:
space:
mode:
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.js49
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);