Demo for query storing
Change-Id: I947bcac841992c3f6cfd01ab337c265b0d01cb70
diff --git a/node_modules/to-through/index.js b/node_modules/to-through/index.js
new file mode 100644
index 0000000..c71a677
--- /dev/null
+++ b/node_modules/to-through/index.js
@@ -0,0 +1,60 @@
+'use strict';
+
+var through = require('through2');
+
+function forward(chunk, enc, cb) {
+ cb(null, chunk);
+}
+
+function toThrough(readable) {
+
+ var opts = {
+ objectMode: readable._readableState.objectMode,
+ highWaterMark: readable._readableState.highWaterMark,
+ };
+
+ function flush(cb) {
+ var self = this;
+
+ readable.on('readable', onReadable);
+ readable.on('end', cb);
+
+ function onReadable() {
+ var chunk;
+ while (chunk = readable.read()) {
+ self.push(chunk);
+ }
+ }
+ }
+
+ var wrapper = through(opts, forward, flush);
+
+ var shouldFlow = true;
+ wrapper.once('pipe', onPipe);
+ wrapper.on('newListener', onListener);
+ readable.on('error', wrapper.emit.bind(wrapper, 'error'));
+
+ function onListener(event) {
+ // Once we've seen the data or readable event, check if we need to flow
+ if (event === 'data' || event === 'readable') {
+ maybeFlow();
+ this.removeListener('newListener', onListener);
+ }
+ }
+
+ function onPipe() {
+ // If the wrapper is piped, disable flow
+ shouldFlow = false;
+ }
+
+ function maybeFlow() {
+ // If we need to flow, end the stream which triggers flush
+ if (shouldFlow) {
+ wrapper.end();
+ }
+ }
+
+ return wrapper;
+}
+
+module.exports = toThrough;