Demo for query storing

Change-Id: I947bcac841992c3f6cfd01ab337c265b0d01cb70
diff --git a/node_modules/bin-build/index.js b/node_modules/bin-build/index.js
new file mode 100644
index 0000000..525968a
--- /dev/null
+++ b/node_modules/bin-build/index.js
@@ -0,0 +1,43 @@
+'use strict';
+const decompress = require('decompress');
+const download = require('download');
+const execa = require('execa');
+const pMapSeries = require('p-map-series');
+const tempfile = require('tempfile');
+
+const exec = (cmd, cwd) => pMapSeries(cmd, x => execa.shell(x, {cwd}));
+
+exports.directory = (dir, cmd) => {
+	if (typeof dir !== 'string') {
+		return Promise.reject(new TypeError(`Expected a \`string\`, got \`${typeof dir}\``));
+	}
+
+	return exec(cmd, dir);
+};
+
+exports.file = (file, cmd, opts) => {
+	opts = Object.assign({strip: 1}, opts);
+
+	if (typeof file !== 'string') {
+		return Promise.reject(new TypeError(`Expected a \`string\`, got \`${typeof file}\``));
+	}
+
+	const tmp = tempfile();
+
+	return decompress(file, tmp, opts).then(() => exec(cmd, tmp));
+};
+
+exports.url = (url, cmd, opts) => {
+	opts = Object.assign({
+		extract: true,
+		strip: 1
+	}, opts);
+
+	if (typeof url !== 'string') {
+		return Promise.reject(new TypeError(`Expected a \`string\`, got \`${typeof url}\``));
+	}
+
+	const tmp = tempfile();
+
+	return download(url, tmp, opts).then(() => exec(cmd, tmp));
+};