Demo for query storing

Change-Id: I947bcac841992c3f6cfd01ab337c265b0d01cb70
diff --git a/node_modules/flagged-respawn/index.js b/node_modules/flagged-respawn/index.js
new file mode 100644
index 0000000..15c1c1f
--- /dev/null
+++ b/node_modules/flagged-respawn/index.js
@@ -0,0 +1,52 @@
+var reorder = require('./lib/reorder');
+var respawn = require('./lib/respawn');
+var remover = require('./lib/remover');
+
+var FORBID_RESPAWNING_FLAG = '--no-respawning';
+
+module.exports = function(flags, argv, forcedFlags, execute) {
+  if (!flags) {
+    throw new Error('You must specify flags to respawn with.');
+  }
+  if (!argv) {
+    throw new Error('You must specify an argv array.');
+  }
+
+  if (typeof forcedFlags === 'function') {
+    execute = forcedFlags;
+    forcedFlags = [];
+  }
+
+  if (typeof forcedFlags === 'string') {
+    forcedFlags = [forcedFlags];
+  }
+
+  if (!Array.isArray(forcedFlags)) {
+    forcedFlags = [];
+  }
+
+  var index = argv.indexOf(FORBID_RESPAWNING_FLAG);
+  if (index >= 0) {
+    argv = argv.slice(0, index).concat(argv.slice(index + 1));
+    argv = remover(flags, argv);
+    execute(true, process, argv);
+    return;
+  }
+
+  var proc = process;
+  var reordered = reorder(flags, argv);
+  var ready = JSON.stringify(argv) === JSON.stringify(reordered);
+
+  if (forcedFlags.length) {
+    reordered = reordered.slice(0, 1)
+      .concat(forcedFlags)
+      .concat(reordered.slice(1));
+    ready = false;
+  }
+
+  if (!ready) {
+    reordered.push(FORBID_RESPAWNING_FLAG);
+    proc = respawn(reordered);
+  }
+  execute(ready, proc, reordered);
+};