Demo for query storing

Change-Id: I947bcac841992c3f6cfd01ab337c265b0d01cb70
diff --git a/node_modules/glob-stream/index.js b/node_modules/glob-stream/index.js
new file mode 100644
index 0000000..dd012f6
--- /dev/null
+++ b/node_modules/glob-stream/index.js
@@ -0,0 +1,94 @@
+'use strict';
+
+var Combine = require('ordered-read-streams');
+var unique = require('unique-stream');
+var pumpify = require('pumpify');
+var isNegatedGlob = require('is-negated-glob');
+var extend = require('extend');
+
+var GlobStream = require('./readable');
+
+function globStream(globs, opt) {
+  if (!opt) {
+    opt = {};
+  }
+
+  var ourOpt = extend({}, opt);
+  var ignore = ourOpt.ignore;
+
+  ourOpt.cwd = typeof ourOpt.cwd === 'string' ? ourOpt.cwd : process.cwd();
+  ourOpt.dot = typeof ourOpt.dot === 'boolean' ? ourOpt.dot : false;
+  ourOpt.silent = typeof ourOpt.silent === 'boolean' ? ourOpt.silent : true;
+  ourOpt.cwdbase = typeof ourOpt.cwdbase === 'boolean' ? ourOpt.cwdbase : false;
+  ourOpt.uniqueBy =  typeof ourOpt.uniqueBy === 'string' ||
+                    typeof ourOpt.uniqueBy === 'function' ? ourOpt.uniqueBy : 'path';
+
+  if (ourOpt.cwdbase) {
+    ourOpt.base = ourOpt.cwd;
+  }
+  // Normalize string `ignore` to array
+  if (typeof ignore === 'string') {
+    ignore = [ignore];
+  }
+  // Ensure `ignore` is an array
+  if (!Array.isArray(ignore)) {
+    ignore = [];
+  }
+
+  // Only one glob no need to aggregate
+  if (!Array.isArray(globs)) {
+    globs = [globs];
+  }
+
+  var positives = [];
+  var negatives = [];
+
+  globs.forEach(sortGlobs);
+
+  function sortGlobs(globString, index) {
+    if (typeof globString !== 'string') {
+      throw new Error('Invalid glob at index ' + index);
+    }
+
+    var glob = isNegatedGlob(globString);
+    var globArray = glob.negated ? negatives : positives;
+
+    globArray.push({
+      index: index,
+      glob: glob.pattern,
+    });
+  }
+
+  if (positives.length === 0) {
+    throw new Error('Missing positive glob');
+  }
+
+  // Create all individual streams
+  var streams = positives.map(streamFromPositive);
+
+  // Then just pipe them to a single unique stream and return it
+  var aggregate = new Combine(streams);
+  var uniqueStream = unique(ourOpt.uniqueBy);
+
+  return pumpify.obj(aggregate, uniqueStream);
+
+  function streamFromPositive(positive) {
+    var negativeGlobs = negatives
+      .filter(indexGreaterThan(positive.index))
+      .map(toGlob)
+      .concat(ignore);
+    return new GlobStream(positive.glob, negativeGlobs, ourOpt);
+  }
+}
+
+function indexGreaterThan(index) {
+  return function(obj) {
+    return obj.index > index;
+  };
+}
+
+function toGlob(obj) {
+  return obj.glob;
+}
+
+module.exports = globStream;