Demo for query storing

Change-Id: I947bcac841992c3f6cfd01ab337c265b0d01cb70
diff --git a/node_modules/isurl/index.js b/node_modules/isurl/index.js
new file mode 100644
index 0000000..70ed1d7
--- /dev/null
+++ b/node_modules/isurl/index.js
@@ -0,0 +1,58 @@
+"use strict";
+const hasToStringTag = require("has-to-string-tag-x");
+const isObject = require("is-object");
+
+const toString = Object.prototype.toString;
+const urlClass = "[object URL]";
+
+const hash = "hash";
+const host = "host";
+const hostname = "hostname";
+const href = "href";
+const password = "password";
+const pathname = "pathname";
+const port = "port";
+const protocol = "protocol";
+const search = "search";
+const username = "username";
+
+
+
+const isURL = (url, supportIncomplete/*=false*/) =>
+{
+	if (!isObject(url)) return false;
+
+	// Native implementation in older browsers
+	if (!hasToStringTag && toString.call(url) === urlClass) return true;
+
+	if (!(href     in url)) return false;
+	if (!(protocol in url)) return false;
+	if (!(username in url)) return false;
+	if (!(password in url)) return false;
+	if (!(hostname in url)) return false;
+	if (!(port     in url)) return false;
+	if (!(host     in url)) return false;
+	if (!(pathname in url)) return false;
+	if (!(search   in url)) return false;
+	if (!(hash     in url)) return false;
+
+	if (supportIncomplete !== true)
+	{
+		if (!isObject(url.searchParams)) return false;
+
+		// TODO :: write a separate isURLSearchParams ?
+	}
+
+	return true;
+}
+
+
+
+isURL.lenient = url =>
+{
+	return isURL(url, true);
+};
+
+
+
+module.exports = isURL;