Demo for query storing

Change-Id: I947bcac841992c3f6cfd01ab337c265b0d01cb70
diff --git a/node_modules/source-map-resolve/LICENSE b/node_modules/source-map-resolve/LICENSE
new file mode 100644
index 0000000..2ae9757
--- /dev/null
+++ b/node_modules/source-map-resolve/LICENSE
@@ -0,0 +1,22 @@
+The MIT License (MIT)
+
+Copyright (c) 2014, 2015, 2016, 2017, 2018, 2019 Simon Lydell
+Copyright (c) 2019 ZHAO Jinxiang
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/node_modules/source-map-resolve/changelog.md b/node_modules/source-map-resolve/changelog.md
new file mode 100644
index 0000000..7b3f94b
--- /dev/null
+++ b/node_modules/source-map-resolve/changelog.md
@@ -0,0 +1,108 @@
+### Version 0.5.3 (2019-12-28) ###
+
+- Fixed: base64 encoded source maps now correctly decodes as utf-8. Previously,
+  non-ASCII characters could end up garbled. Thanks to ZHAO Jinxiang
+  (@xiaoxiangmoe)! (Note: This fix does not work in old evironments not
+  supporting both `TextDecoder` and `Uint8Array`.)
+- Improved: Reduced size of the npm package.
+
+### Version 0.5.2 (2018-05-10) ###
+
+- Improved: Updated the version range of `atob` to disallow depending on `2.0.3`
+  which as a [security
+  vulnerability](https://snyk.io/test/npm/atob/2.0.3?severity=high&severity=medium&severity=low).
+
+### Version 0.5.1 (2017-10-21) ###
+
+- Fixed: URLs are now decoded before being passed to `read` in Node.js. This
+  allows reading files with spaces, for example.
+- Fixed: Missing or empty `sources` fields (such as `sources: []`) in source
+  maps are now handled. Previously, such source maps would cause crashes or
+  callbacks never bing called. Now, an empty result is produced:
+
+  ```js
+  sourcesResolved: [],
+  sourcesContent: []
+  ```
+
+### Version 0.5.0 (2016-02-28) ###
+
+- Improved: Errors now have a `sourceMapData` property that contain as much as
+  possible of the intended result of the function up until the error occurred.
+- Changed: `resolveSources` and `resolve`, as well as their `*Sync`
+  alternatives, no longer fail when one single source fails to be fetched.
+  Instead, the `sourcesContent` array in the result object will contain error
+  objects for all failed sources, and strings otherwise. (Backwards-incompatible
+  change.)
+
+### Version 0.4.0 (2015-08-29) ###
+
+- Removed: The `ignoreSourceRoot` option of `resolveSources`. It has been
+  replaced with `sourceRoot: false`. (Backwards-incompatible change.)
+- Added: The `sourceRoot` option of `resolveSources`. It not only allows to
+  ignore the source root, it also lets you replace it.
+- Added: The `parseMapToJSON` method.
+- Added: The `resolve` method now accepts `null, mapUrl, ...` as arguments, in
+  addition to the existing signature, which will read `mapUrl` instead of
+  looking for a sourceMappingURL in the code.
+
+### Version 0.3.1 (2014-08-16) ###
+
+- Improved: Updated the source-map-url dependency to 0.3.0.
+
+
+### Version 0.3.0 (2014-07-02) ###
+
+- Removed: Argument checking. It’s not worth it. (Possibly
+  backwards-incompatible change.)
+- Added: The `sourceRoot` property of source maps may now be ignored, which can
+  be useful when resolving sources outside of the browser.
+- Added: It is now possible to resolve only the URLs of sources, without
+  reading them.
+
+
+### Version 0.2.0 (2014-06-22) ###
+
+- Changed: The result of `resolveSources` is now an object, not an array. The
+  old result array is available in the `sourcesContent` property.
+  (Backwards-incompatible change.)
+- Changed: `sources` has been renamed to `sourcesContent` in the result object
+  of `resolve`. (Backwards-incompatible change.)
+- Added: `resolveSources` now also returns all sources fully resolved, in the
+  `sourcesResolved` property.
+- Added: The result object of `resolve` now contains the `sourcesResolved`
+  property from `resolveSources`.
+
+
+### Version 0.1.4 (2014-06-16) ###
+
+- Fixed: `sourcesContent` was mis-typed as `sourceContents`, which meant that
+  the `sourcesContent` property of source maps never was used when resolving
+  sources.
+
+
+### Version 0.1.3 (2014-05-06) ###
+
+- Only documentation and meta-data changes.
+
+
+### Version 0.1.2 (2014-03-23) ###
+
+- Improved: Source maps starting with `)]}'` are now parsed correctly. The spec
+  allows source maps to start with that character sequence to prevent XSSI
+  attacks.
+
+
+### Version 0.1.1 (2014-03-06) ###
+
+- Improved: Make sourceRoot resolving more sensible.
+
+  A source root such as `/scripts/subdir` is now treated as `/scripts/subdir/`
+  — that is, as a directory called “subdir”, not a file called “subdir”.
+  Pointing to a file as source root does not makes sense.
+
+
+
+### Version 0.1.0 (2014-03-03) ###
+
+- Initial release.
diff --git a/node_modules/source-map-resolve/lib/decode-uri-component.js b/node_modules/source-map-resolve/lib/decode-uri-component.js
new file mode 100644
index 0000000..0739c20
--- /dev/null
+++ b/node_modules/source-map-resolve/lib/decode-uri-component.js
@@ -0,0 +1,8 @@
+var decodeUriComponent = require("decode-uri-component")
+
+function customDecodeUriComponent(string) {
+  // `decodeUriComponent` turns `+` into ` `, but that's not wanted.
+  return decodeUriComponent(string.replace(/\+/g, "%2B"))
+}
+
+module.exports = customDecodeUriComponent
diff --git a/node_modules/source-map-resolve/lib/resolve-url.js b/node_modules/source-map-resolve/lib/resolve-url.js
new file mode 100644
index 0000000..e3a86c4
--- /dev/null
+++ b/node_modules/source-map-resolve/lib/resolve-url.js
@@ -0,0 +1,9 @@
+var url = require("url")
+
+function resolveUrl(/* ...urls */) {
+  return Array.prototype.reduce.call(arguments, function(resolved, nextUrl) {
+    return url.resolve(resolved, nextUrl)
+  })
+}
+
+module.exports = resolveUrl
diff --git a/node_modules/source-map-resolve/lib/source-map-resolve-node.js b/node_modules/source-map-resolve/lib/source-map-resolve-node.js
new file mode 100644
index 0000000..31ec3b2
--- /dev/null
+++ b/node_modules/source-map-resolve/lib/source-map-resolve-node.js
@@ -0,0 +1,342 @@
+var sourceMappingURL   = require("source-map-url")
+
+var resolveUrl         = require("./resolve-url")
+var decodeUriComponent = require("./decode-uri-component")
+var urix               = require("urix")
+var atob               = require("atob")
+
+
+
+function callbackAsync(callback, error, result) {
+  setImmediate(function() { callback(error, result) })
+}
+
+function parseMapToJSON(string, data) {
+  try {
+    return JSON.parse(string.replace(/^\)\]\}'/, ""))
+  } catch (error) {
+    error.sourceMapData = data
+    throw error
+  }
+}
+
+function readSync(read, url, data) {
+  var readUrl = decodeUriComponent(url)
+  try {
+    return String(read(readUrl))
+  } catch (error) {
+    error.sourceMapData = data
+    throw error
+  }
+}
+
+
+
+function resolveSourceMap(code, codeUrl, read, callback) {
+  var mapData
+  try {
+    mapData = resolveSourceMapHelper(code, codeUrl)
+  } catch (error) {
+    return callbackAsync(callback, error)
+  }
+  if (!mapData || mapData.map) {
+    return callbackAsync(callback, null, mapData)
+  }
+  var readUrl = decodeUriComponent(mapData.url)
+  read(readUrl, function(error, result) {
+    if (error) {
+      error.sourceMapData = mapData
+      return callback(error)
+    }
+    mapData.map = String(result)
+    try {
+      mapData.map = parseMapToJSON(mapData.map, mapData)
+    } catch (error) {
+      return callback(error)
+    }
+    callback(null, mapData)
+  })
+}
+
+function resolveSourceMapSync(code, codeUrl, read) {
+  var mapData = resolveSourceMapHelper(code, codeUrl)
+  if (!mapData || mapData.map) {
+    return mapData
+  }
+  mapData.map = readSync(read, mapData.url, mapData)
+  mapData.map = parseMapToJSON(mapData.map, mapData)
+  return mapData
+}
+
+var dataUriRegex = /^data:([^,;]*)(;[^,;]*)*(?:,(.*))?$/
+
+/**
+ * The media type for JSON text is application/json.
+ *
+ * {@link https://tools.ietf.org/html/rfc8259#section-11 | IANA Considerations }
+ *
+ * `text/json` is non-standard media type
+ */
+var jsonMimeTypeRegex = /^(?:application|text)\/json$/
+
+/**
+ * JSON text exchanged between systems that are not part of a closed ecosystem
+ * MUST be encoded using UTF-8.
+ *
+ * {@link https://tools.ietf.org/html/rfc8259#section-8.1 | Character Encoding}
+ */
+var jsonCharacterEncoding = "utf-8"
+
+function base64ToBuf(b64) {
+  var binStr = atob(b64)
+  var len = binStr.length
+  var arr = new Uint8Array(len)
+  for (var i = 0; i < len; i++) {
+    arr[i] = binStr.charCodeAt(i)
+  }
+  return arr
+}
+
+function decodeBase64String(b64) {
+  if (typeof TextDecoder === "undefined" || typeof Uint8Array === "undefined") {
+    return atob(b64)
+  }
+  var buf = base64ToBuf(b64);
+  // Note: `decoder.decode` method will throw a `DOMException` with the
+  // `"EncodingError"` value when an coding error is found.
+  var decoder = new TextDecoder(jsonCharacterEncoding, {fatal: true})
+  return decoder.decode(buf);
+}
+
+function resolveSourceMapHelper(code, codeUrl) {
+  codeUrl = urix(codeUrl)
+
+  var url = sourceMappingURL.getFrom(code)
+  if (!url) {
+    return null
+  }
+
+  var dataUri = url.match(dataUriRegex)
+  if (dataUri) {
+    var mimeType = dataUri[1] || "text/plain"
+    var lastParameter = dataUri[2] || ""
+    var encoded = dataUri[3] || ""
+    var data = {
+      sourceMappingURL: url,
+      url: null,
+      sourcesRelativeTo: codeUrl,
+      map: encoded
+    }
+    if (!jsonMimeTypeRegex.test(mimeType)) {
+      var error = new Error("Unuseful data uri mime type: " + mimeType)
+      error.sourceMapData = data
+      throw error
+    }
+    try {
+      data.map = parseMapToJSON(
+        lastParameter === ";base64" ? decodeBase64String(encoded) : decodeURIComponent(encoded),
+        data
+      )
+    } catch (error) {
+      error.sourceMapData = data
+      throw error
+    }
+    return data
+  }
+
+  var mapUrl = resolveUrl(codeUrl, url)
+  return {
+    sourceMappingURL: url,
+    url: mapUrl,
+    sourcesRelativeTo: mapUrl,
+    map: null
+  }
+}
+
+
+
+function resolveSources(map, mapUrl, read, options, callback) {
+  if (typeof options === "function") {
+    callback = options
+    options = {}
+  }
+  var pending = map.sources ? map.sources.length : 0
+  var result = {
+    sourcesResolved: [],
+    sourcesContent:  []
+  }
+
+  if (pending === 0) {
+    callbackAsync(callback, null, result)
+    return
+  }
+
+  var done = function() {
+    pending--
+    if (pending === 0) {
+      callback(null, result)
+    }
+  }
+
+  resolveSourcesHelper(map, mapUrl, options, function(fullUrl, sourceContent, index) {
+    result.sourcesResolved[index] = fullUrl
+    if (typeof sourceContent === "string") {
+      result.sourcesContent[index] = sourceContent
+      callbackAsync(done, null)
+    } else {
+      var readUrl = decodeUriComponent(fullUrl)
+      read(readUrl, function(error, source) {
+        result.sourcesContent[index] = error ? error : String(source)
+        done()
+      })
+    }
+  })
+}
+
+function resolveSourcesSync(map, mapUrl, read, options) {
+  var result = {
+    sourcesResolved: [],
+    sourcesContent:  []
+  }
+
+  if (!map.sources || map.sources.length === 0) {
+    return result
+  }
+
+  resolveSourcesHelper(map, mapUrl, options, function(fullUrl, sourceContent, index) {
+    result.sourcesResolved[index] = fullUrl
+    if (read !== null) {
+      if (typeof sourceContent === "string") {
+        result.sourcesContent[index] = sourceContent
+      } else {
+        var readUrl = decodeUriComponent(fullUrl)
+        try {
+          result.sourcesContent[index] = String(read(readUrl))
+        } catch (error) {
+          result.sourcesContent[index] = error
+        }
+      }
+    }
+  })
+
+  return result
+}
+
+var endingSlash = /\/?$/
+
+function resolveSourcesHelper(map, mapUrl, options, fn) {
+  options = options || {}
+  mapUrl = urix(mapUrl)
+  var fullUrl
+  var sourceContent
+  var sourceRoot
+  for (var index = 0, len = map.sources.length; index < len; index++) {
+    sourceRoot = null
+    if (typeof options.sourceRoot === "string") {
+      sourceRoot = options.sourceRoot
+    } else if (typeof map.sourceRoot === "string" && options.sourceRoot !== false) {
+      sourceRoot = map.sourceRoot
+    }
+    // If the sourceRoot is the empty string, it is equivalent to not setting
+    // the property at all.
+    if (sourceRoot === null || sourceRoot === '') {
+      fullUrl = resolveUrl(mapUrl, map.sources[index])
+    } else {
+      // Make sure that the sourceRoot ends with a slash, so that `/scripts/subdir` becomes
+      // `/scripts/subdir/<source>`, not `/scripts/<source>`. Pointing to a file as source root
+      // does not make sense.
+      fullUrl = resolveUrl(mapUrl, sourceRoot.replace(endingSlash, "/"), map.sources[index])
+    }
+    sourceContent = (map.sourcesContent || [])[index]
+    fn(fullUrl, sourceContent, index)
+  }
+}
+
+
+
+function resolve(code, codeUrl, read, options, callback) {
+  if (typeof options === "function") {
+    callback = options
+    options = {}
+  }
+  if (code === null) {
+    var mapUrl = codeUrl
+    var data = {
+      sourceMappingURL: null,
+      url: mapUrl,
+      sourcesRelativeTo: mapUrl,
+      map: null
+    }
+    var readUrl = decodeUriComponent(mapUrl)
+    read(readUrl, function(error, result) {
+      if (error) {
+        error.sourceMapData = data
+        return callback(error)
+      }
+      data.map = String(result)
+      try {
+        data.map = parseMapToJSON(data.map, data)
+      } catch (error) {
+        return callback(error)
+      }
+      _resolveSources(data)
+    })
+  } else {
+    resolveSourceMap(code, codeUrl, read, function(error, mapData) {
+      if (error) {
+        return callback(error)
+      }
+      if (!mapData) {
+        return callback(null, null)
+      }
+      _resolveSources(mapData)
+    })
+  }
+
+  function _resolveSources(mapData) {
+    resolveSources(mapData.map, mapData.sourcesRelativeTo, read, options, function(error, result) {
+      if (error) {
+        return callback(error)
+      }
+      mapData.sourcesResolved = result.sourcesResolved
+      mapData.sourcesContent  = result.sourcesContent
+      callback(null, mapData)
+    })
+  }
+}
+
+function resolveSync(code, codeUrl, read, options) {
+  var mapData
+  if (code === null) {
+    var mapUrl = codeUrl
+    mapData = {
+      sourceMappingURL: null,
+      url: mapUrl,
+      sourcesRelativeTo: mapUrl,
+      map: null
+    }
+    mapData.map = readSync(read, mapUrl, mapData)
+    mapData.map = parseMapToJSON(mapData.map, mapData)
+  } else {
+    mapData = resolveSourceMapSync(code, codeUrl, read)
+    if (!mapData) {
+      return null
+    }
+  }
+  var result = resolveSourcesSync(mapData.map, mapData.sourcesRelativeTo, read, options)
+  mapData.sourcesResolved = result.sourcesResolved
+  mapData.sourcesContent  = result.sourcesContent
+  return mapData
+}
+
+
+
+module.exports = {
+  resolveSourceMap:     resolveSourceMap,
+  resolveSourceMapSync: resolveSourceMapSync,
+  resolveSources:       resolveSources,
+  resolveSourcesSync:   resolveSourcesSync,
+  resolve:              resolve,
+  resolveSync:          resolveSync,
+  parseMapToJSON:       parseMapToJSON
+}
diff --git a/node_modules/source-map-resolve/package.json b/node_modules/source-map-resolve/package.json
new file mode 100644
index 0000000..e63f890
--- /dev/null
+++ b/node_modules/source-map-resolve/package.json
@@ -0,0 +1,81 @@
+{
+  "_from": "source-map-resolve@^0.5.0",
+  "_id": "source-map-resolve@0.5.3",
+  "_inBundle": false,
+  "_integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==",
+  "_location": "/source-map-resolve",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "source-map-resolve@^0.5.0",
+    "name": "source-map-resolve",
+    "escapedName": "source-map-resolve",
+    "rawSpec": "^0.5.0",
+    "saveSpec": null,
+    "fetchSpec": "^0.5.0"
+  },
+  "_requiredBy": [
+    "/snapdragon"
+  ],
+  "_resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
+  "_shasum": "190866bece7553e1f8f267a2ee82c606b5509a1a",
+  "_spec": "source-map-resolve@^0.5.0",
+  "_where": "C:\\Users\\marcr\\Desktop\\KorAp\\Git\\Kalamar\\node_modules\\snapdragon",
+  "author": {
+    "name": "Simon Lydell"
+  },
+  "browser": "source-map-resolve.js",
+  "bugs": {
+    "url": "https://github.com/lydell/source-map-resolve/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "atob": "^2.1.2",
+    "decode-uri-component": "^0.2.0",
+    "resolve-url": "^0.2.1",
+    "source-map-url": "^0.4.0",
+    "urix": "^0.1.0"
+  },
+  "deprecated": false,
+  "description": "Resolve the source map and/or sources for a generated file.",
+  "devDependencies": {
+    "Base64": "1.1.0",
+    "jshint": "2.10.3",
+    "setimmediate": "1.0.5",
+    "simple-asyncify": "1.0.0",
+    "tape": "4.12.1"
+  },
+  "files": [
+    "lib",
+    "source-map-resolve.js"
+  ],
+  "homepage": "https://github.com/lydell/source-map-resolve#readme",
+  "keywords": [
+    "source map",
+    "sourcemap",
+    "source",
+    "map",
+    "sourceMappingURL",
+    "resolve",
+    "resolver",
+    "locate",
+    "locator",
+    "find",
+    "finder"
+  ],
+  "license": "MIT",
+  "main": "lib/source-map-resolve-node.js",
+  "name": "source-map-resolve",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/lydell/source-map-resolve.git"
+  },
+  "scripts": {
+    "build": "node generate-source-map-resolve.js",
+    "lint": "jshint lib/ test/",
+    "test": "npm run lint && npm run unit",
+    "unit": "node test/source-map-resolve.js && node test/windows.js"
+  },
+  "version": "0.5.3"
+}
diff --git a/node_modules/source-map-resolve/readme.md b/node_modules/source-map-resolve/readme.md
new file mode 100644
index 0000000..5796ba1
--- /dev/null
+++ b/node_modules/source-map-resolve/readme.md
@@ -0,0 +1,231 @@
+Overview [![Build Status](https://travis-ci.org/lydell/source-map-resolve.svg?branch=master)](https://travis-ci.org/lydell/source-map-resolve)
+========
+
+Resolve the source map and/or sources for a generated file.
+
+```js
+var sourceMapResolve = require("source-map-resolve")
+var sourceMap        = require("source-map")
+
+var code = [
+  "!function(){...}();",
+  "/*# sourceMappingURL=foo.js.map */"
+].join("\n")
+
+sourceMapResolve.resolveSourceMap(code, "/js/foo.js", fs.readFile, function(error, result) {
+  if (error) {
+    return notifyFailure(error)
+  }
+  result
+  // {
+  //   map: {file: "foo.js", mappings: "...", sources: ["/coffee/foo.coffee"], names: []},
+  //   url: "/js/foo.js.map",
+  //   sourcesRelativeTo: "/js/foo.js.map",
+  //   sourceMappingURL: "foo.js.map"
+  // }
+
+  sourceMapResolve.resolveSources(result.map, result.sourcesRelativeTo, fs.readFile, function(error, result) {
+    if (error) {
+      return notifyFailure(error)
+    }
+    result
+    // {
+    //   sourcesResolved: ["/coffee/foo.coffee"],
+    //   sourcesContent: ["<contents of /coffee/foo.coffee>"]
+    // }
+  })
+})
+
+sourceMapResolve.resolve(code, "/js/foo.js", fs.readFile, function(error, result) {
+  if (error) {
+    return notifyFailure(error)
+  }
+  result
+  // {
+  //   map: {file: "foo.js", mappings: "...", sources: ["/coffee/foo.coffee"], names: []},
+  //   url: "/js/foo.js.map",
+  //   sourcesRelativeTo: "/js/foo.js.map",
+  //   sourceMappingURL: "foo.js.map",
+  //   sourcesResolved: ["/coffee/foo.coffee"],
+  //   sourcesContent: ["<contents of /coffee/foo.coffee>"]
+  // }
+  result.map.sourcesContent = result.sourcesContent
+  var map = new sourceMap.sourceMapConsumer(result.map)
+  map.sourceContentFor("/coffee/foo.coffee")
+  // "<contents of /coffee/foo.coffee>"
+})
+```
+
+
+Installation
+============
+
+- `npm install source-map-resolve`
+- `bower install source-map-resolve`
+- `component install lydell/source-map-resolve`
+
+Works with CommonJS, AMD and browser globals, through UMD.
+
+Note: This module requires `setImmediate` and `atob`.
+Use polyfills if needed, such as:
+
+- <https://github.com/NobleJS/setImmediate>
+- <https://github.com/davidchambers/Base64.js>
+
+
+Usage
+=====
+
+### `sourceMapResolve.resolveSourceMap(code, codeUrl, read, callback)` ###
+
+- `code` is a string of code that may or may not contain a sourceMappingURL
+  comment. Such a comment is used to resolve the source map.
+- `codeUrl` is the url to the file containing `code`. If the sourceMappingURL
+  is relative, it is resolved against `codeUrl`.
+- `read(url, callback)` is a function that reads `url` and responds using
+  `callback(error, content)`. In Node.js you might want to use `fs.readFile`,
+  while in the browser you might want to use an asynchronus `XMLHttpRequest`.
+- `callback(error, result)` is a function that is invoked with either an error
+  or `null` and the result.
+
+The result is an object with the following properties:
+
+- `map`: The source map for `code`, as an object (not a string).
+- `url`: The url to the source map. If the source map came from a data uri,
+  this property is `null`, since then there is no url to it.
+- `sourcesRelativeTo`: The url that the sources of the source map are relative
+  to. Since the sources are relative to the source map, and the url to the
+  source map is provided as the `url` property, this property might seem
+  superfluos. However, remember that the `url` property can be `null` if the
+  source map came from a data uri. If so, the sources are relative to the file
+  containing the data uri—`codeUrl`. This property will be identical to the
+  `url` property or `codeUrl`, whichever is appropriate. This way you can
+  conveniently resolve the sources without having to think about where the
+  source map came from.
+- `sourceMappingURL`: The url of the sourceMappingURL comment in `code`.
+
+If `code` contains no sourceMappingURL, the result is `null`.
+
+### `sourceMapResolve.resolveSources(map, mapUrl, read, [options], callback)` ###
+
+- `map` is a source map, as an object (not a string).
+- `mapUrl` is the url to the file containing `map`. Relative sources in the
+  source map, if any, are resolved against `mapUrl`.
+- `read(url, callback)` is a function that reads `url` and responds using
+  `callback(error, content)`. In Node.js you might want to use `fs.readFile`,
+  while in the browser you might want to use an asynchronus `XMLHttpRequest`.
+- `options` is an optional object with any of the following properties:
+  - `sourceRoot`: Override the `sourceRoot` property of the source map, which
+    might only be relevant when resolving sources in the browser. This lets you
+    bypass it when using the module outside of a browser, if needed. Pass a
+    string to replace the `sourceRoot` property with, or `false` to ignore it.
+    Defaults to `undefined`.
+- `callback(error, result)` is a function that is invoked with either an error
+  or `null` and the result.
+
+The result is an object with the following properties:
+
+- `sourcesResolved`: The same as `map.sources`, except all the sources are
+  fully resolved.
+- `sourcesContent`: An array with the contents of all sources in `map.sources`,
+  in the same order as `map.sources`. If getting the contents of a source fails,
+  an error object is put into the array instead.
+
+### `sourceMapResolve.resolve(code, codeUrl, read, [options], callback)` ###
+
+The arguments are identical to `sourceMapResolve.resolveSourceMap`, except that
+you may also provide the same `options` as in `sourceMapResolve.resolveSources`.
+
+This is a convenience method that first resolves the source map and then its
+sources. You could also do this by first calling
+`sourceMapResolve.resolveSourceMap` and then `sourceMapResolve.resolveSources`.
+
+The result is identical to `sourceMapResolve.resolveSourceMap`, with the
+properties from `sourceMapResolve.resolveSources` merged into it.
+
+There is one extra feature available, though. If `code` is `null`, `codeUrl` is
+treated as a url to the source map instead of to `code`, and will be read. This
+is handy if you _sometimes_ get the source map url from the `SourceMap: <url>`
+header (see the [Notes] section). In this case, the `sourceMappingURL` property
+of the result is `null`.
+
+
+[Notes]: #notes
+
+### `sourceMapResolve.*Sync()` ###
+
+There are also sync versions of the three previous functions. They are identical
+to the async versions, except:
+
+- They expect a sync reading function. In Node.js you might want to use
+  `fs.readFileSync`, while in the browser you might want to use a synchronus
+  `XMLHttpRequest`.
+- They throw errors and return the result instead of using a callback.
+
+`sourceMapResolve.resolveSourcesSync` also accepts `null` as the `read`
+parameter. The result is the same as when passing a function as the `read
+parameter`, except that the `sourcesContent` property of the result will be an
+empty array. In other words, the sources aren’t read. You only get the
+`sourcesResolved` property. (This only supported in the synchronus version, since
+there is no point doing it asynchronusly.)
+
+### `sourceMapResolve.parseMapToJSON(string, [data])` ###
+
+The spec says that if a source map (as a string) starts with `)]}'`, it should
+be stripped off. This is to prevent XSSI attacks. This function does that and
+returns the result of `JSON.parse`ing what’s left.
+
+If this function throws `error`, `error.sourceMapData === data`.
+
+### Errors
+
+All errors passed to callbacks or thrown by this module have a `sourceMapData`
+property that contain as much as possible of the intended result of the function
+up until the error occurred.
+
+Note that while the `map` property of result objects always is an object,
+`error.sourceMapData.map` will be a string if parsing that string fails.
+
+
+Note
+====
+
+This module resolves the source map for a given generated file by looking for a
+sourceMappingURL comment. The spec defines yet a way to provide the URL to the
+source map: By sending the `SourceMap: <url>` header along with the generated
+file. Since this module doesn’t retrive the generated code for you (instead
+_you_ give the generated code to the module), it’s up to you to look for such a
+header when you retrieve the file (should the need arise).
+
+
+Development
+===========
+
+Tests
+-----
+
+First off, run `npm install` to install testing modules and browser polyfills.
+
+`npm test` lints the code and runs the test suite in Node.js.
+
+x-package.json5
+---------------
+
+package.json, component.json and bower.json are all generated from
+x-package.json5 by using [`xpkg`]. Only edit x-package.json5, and remember to
+run `xpkg` before commiting!
+
+[`xpkg`]: https://github.com/kof/node-xpkg
+
+Generating the browser version
+------------------------------
+
+source-map-resolve.js is generated from source-map-resolve-node.js and
+source-map-resolve-template.js. Only edit the two latter files, _not_
+source-map-resolve.js! To generate it, run `npm run build`.
+
+
+License
+=======
+
+[MIT](LICENSE).
diff --git a/node_modules/source-map-resolve/source-map-resolve.js b/node_modules/source-map-resolve/source-map-resolve.js
new file mode 100644
index 0000000..282b126
--- /dev/null
+++ b/node_modules/source-map-resolve/source-map-resolve.js
@@ -0,0 +1,348 @@
+// Note: source-map-resolve.js is generated from source-map-resolve-node.js and
+// source-map-resolve-template.js. Only edit the two latter files, _not_
+// source-map-resolve.js!
+
+void (function(root, factory) {
+  if (typeof define === "function" && define.amd) {
+    define(["source-map-url", "resolve-url"], factory)
+  } else if (typeof exports === "object") {
+    var sourceMappingURL = require("source-map-url")
+    var resolveUrl = require("resolve-url")
+    module.exports = factory(sourceMappingURL, resolveUrl)
+  } else {
+    root.sourceMapResolve = factory(root.sourceMappingURL, root.resolveUrl)
+  }
+}(this, function(sourceMappingURL, resolveUrl) {
+
+  function callbackAsync(callback, error, result) {
+    setImmediate(function() { callback(error, result) })
+  }
+
+  function parseMapToJSON(string, data) {
+    try {
+      return JSON.parse(string.replace(/^\)\]\}'/, ""))
+    } catch (error) {
+      error.sourceMapData = data
+      throw error
+    }
+  }
+
+  function readSync(read, url, data) {
+    var readUrl = url
+    try {
+      return String(read(readUrl))
+    } catch (error) {
+      error.sourceMapData = data
+      throw error
+    }
+  }
+
+
+
+  function resolveSourceMap(code, codeUrl, read, callback) {
+    var mapData
+    try {
+      mapData = resolveSourceMapHelper(code, codeUrl)
+    } catch (error) {
+      return callbackAsync(callback, error)
+    }
+    if (!mapData || mapData.map) {
+      return callbackAsync(callback, null, mapData)
+    }
+    var readUrl = mapData.url
+    read(readUrl, function(error, result) {
+      if (error) {
+        error.sourceMapData = mapData
+        return callback(error)
+      }
+      mapData.map = String(result)
+      try {
+        mapData.map = parseMapToJSON(mapData.map, mapData)
+      } catch (error) {
+        return callback(error)
+      }
+      callback(null, mapData)
+    })
+  }
+
+  function resolveSourceMapSync(code, codeUrl, read) {
+    var mapData = resolveSourceMapHelper(code, codeUrl)
+    if (!mapData || mapData.map) {
+      return mapData
+    }
+    mapData.map = readSync(read, mapData.url, mapData)
+    mapData.map = parseMapToJSON(mapData.map, mapData)
+    return mapData
+  }
+
+  var dataUriRegex = /^data:([^,;]*)(;[^,;]*)*(?:,(.*))?$/
+
+  /**
+   * The media type for JSON text is application/json.
+   *
+   * {@link https://tools.ietf.org/html/rfc8259#section-11 | IANA Considerations }
+   *
+   * `text/json` is non-standard media type
+   */
+  var jsonMimeTypeRegex = /^(?:application|text)\/json$/
+
+  /**
+   * JSON text exchanged between systems that are not part of a closed ecosystem
+   * MUST be encoded using UTF-8.
+   *
+   * {@link https://tools.ietf.org/html/rfc8259#section-8.1 | Character Encoding}
+   */
+  var jsonCharacterEncoding = "utf-8"
+
+  function base64ToBuf(b64) {
+    var binStr = atob(b64)
+    var len = binStr.length
+    var arr = new Uint8Array(len)
+    for (var i = 0; i < len; i++) {
+      arr[i] = binStr.charCodeAt(i)
+    }
+    return arr
+  }
+
+  function decodeBase64String(b64) {
+    if (typeof TextDecoder === "undefined" || typeof Uint8Array === "undefined") {
+      return atob(b64)
+    }
+    var buf = base64ToBuf(b64);
+    // Note: `decoder.decode` method will throw a `DOMException` with the
+    // `"EncodingError"` value when an coding error is found.
+    var decoder = new TextDecoder(jsonCharacterEncoding, {fatal: true})
+    return decoder.decode(buf);
+  }
+
+  function resolveSourceMapHelper(code, codeUrl) {
+    var url = sourceMappingURL.getFrom(code)
+    if (!url) {
+      return null
+    }
+
+    var dataUri = url.match(dataUriRegex)
+    if (dataUri) {
+      var mimeType = dataUri[1] || "text/plain"
+      var lastParameter = dataUri[2] || ""
+      var encoded = dataUri[3] || ""
+      var data = {
+        sourceMappingURL: url,
+        url: null,
+        sourcesRelativeTo: codeUrl,
+        map: encoded
+      }
+      if (!jsonMimeTypeRegex.test(mimeType)) {
+        var error = new Error("Unuseful data uri mime type: " + mimeType)
+        error.sourceMapData = data
+        throw error
+      }
+      try {
+        data.map = parseMapToJSON(
+          lastParameter === ";base64" ? decodeBase64String(encoded) : decodeURIComponent(encoded),
+          data
+        )
+      } catch (error) {
+        error.sourceMapData = data
+        throw error
+      }
+      return data
+    }
+
+    var mapUrl = resolveUrl(codeUrl, url)
+    return {
+      sourceMappingURL: url,
+      url: mapUrl,
+      sourcesRelativeTo: mapUrl,
+      map: null
+    }
+  }
+
+
+
+  function resolveSources(map, mapUrl, read, options, callback) {
+    if (typeof options === "function") {
+      callback = options
+      options = {}
+    }
+    var pending = map.sources ? map.sources.length : 0
+    var result = {
+      sourcesResolved: [],
+      sourcesContent:  []
+    }
+
+    if (pending === 0) {
+      callbackAsync(callback, null, result)
+      return
+    }
+
+    var done = function() {
+      pending--
+      if (pending === 0) {
+        callback(null, result)
+      }
+    }
+
+    resolveSourcesHelper(map, mapUrl, options, function(fullUrl, sourceContent, index) {
+      result.sourcesResolved[index] = fullUrl
+      if (typeof sourceContent === "string") {
+        result.sourcesContent[index] = sourceContent
+        callbackAsync(done, null)
+      } else {
+        var readUrl = fullUrl
+        read(readUrl, function(error, source) {
+          result.sourcesContent[index] = error ? error : String(source)
+          done()
+        })
+      }
+    })
+  }
+
+  function resolveSourcesSync(map, mapUrl, read, options) {
+    var result = {
+      sourcesResolved: [],
+      sourcesContent:  []
+    }
+
+    if (!map.sources || map.sources.length === 0) {
+      return result
+    }
+
+    resolveSourcesHelper(map, mapUrl, options, function(fullUrl, sourceContent, index) {
+      result.sourcesResolved[index] = fullUrl
+      if (read !== null) {
+        if (typeof sourceContent === "string") {
+          result.sourcesContent[index] = sourceContent
+        } else {
+          var readUrl = fullUrl
+          try {
+            result.sourcesContent[index] = String(read(readUrl))
+          } catch (error) {
+            result.sourcesContent[index] = error
+          }
+        }
+      }
+    })
+
+    return result
+  }
+
+  var endingSlash = /\/?$/
+
+  function resolveSourcesHelper(map, mapUrl, options, fn) {
+    options = options || {}
+    var fullUrl
+    var sourceContent
+    var sourceRoot
+    for (var index = 0, len = map.sources.length; index < len; index++) {
+      sourceRoot = null
+      if (typeof options.sourceRoot === "string") {
+        sourceRoot = options.sourceRoot
+      } else if (typeof map.sourceRoot === "string" && options.sourceRoot !== false) {
+        sourceRoot = map.sourceRoot
+      }
+      // If the sourceRoot is the empty string, it is equivalent to not setting
+      // the property at all.
+      if (sourceRoot === null || sourceRoot === '') {
+        fullUrl = resolveUrl(mapUrl, map.sources[index])
+      } else {
+        // Make sure that the sourceRoot ends with a slash, so that `/scripts/subdir` becomes
+        // `/scripts/subdir/<source>`, not `/scripts/<source>`. Pointing to a file as source root
+        // does not make sense.
+        fullUrl = resolveUrl(mapUrl, sourceRoot.replace(endingSlash, "/"), map.sources[index])
+      }
+      sourceContent = (map.sourcesContent || [])[index]
+      fn(fullUrl, sourceContent, index)
+    }
+  }
+
+
+
+  function resolve(code, codeUrl, read, options, callback) {
+    if (typeof options === "function") {
+      callback = options
+      options = {}
+    }
+    if (code === null) {
+      var mapUrl = codeUrl
+      var data = {
+        sourceMappingURL: null,
+        url: mapUrl,
+        sourcesRelativeTo: mapUrl,
+        map: null
+      }
+      var readUrl = mapUrl
+      read(readUrl, function(error, result) {
+        if (error) {
+          error.sourceMapData = data
+          return callback(error)
+        }
+        data.map = String(result)
+        try {
+          data.map = parseMapToJSON(data.map, data)
+        } catch (error) {
+          return callback(error)
+        }
+        _resolveSources(data)
+      })
+    } else {
+      resolveSourceMap(code, codeUrl, read, function(error, mapData) {
+        if (error) {
+          return callback(error)
+        }
+        if (!mapData) {
+          return callback(null, null)
+        }
+        _resolveSources(mapData)
+      })
+    }
+
+    function _resolveSources(mapData) {
+      resolveSources(mapData.map, mapData.sourcesRelativeTo, read, options, function(error, result) {
+        if (error) {
+          return callback(error)
+        }
+        mapData.sourcesResolved = result.sourcesResolved
+        mapData.sourcesContent  = result.sourcesContent
+        callback(null, mapData)
+      })
+    }
+  }
+
+  function resolveSync(code, codeUrl, read, options) {
+    var mapData
+    if (code === null) {
+      var mapUrl = codeUrl
+      mapData = {
+        sourceMappingURL: null,
+        url: mapUrl,
+        sourcesRelativeTo: mapUrl,
+        map: null
+      }
+      mapData.map = readSync(read, mapUrl, mapData)
+      mapData.map = parseMapToJSON(mapData.map, mapData)
+    } else {
+      mapData = resolveSourceMapSync(code, codeUrl, read)
+      if (!mapData) {
+        return null
+      }
+    }
+    var result = resolveSourcesSync(mapData.map, mapData.sourcesRelativeTo, read, options)
+    mapData.sourcesResolved = result.sourcesResolved
+    mapData.sourcesContent  = result.sourcesContent
+    return mapData
+  }
+
+
+
+  return {
+    resolveSourceMap:     resolveSourceMap,
+    resolveSourceMapSync: resolveSourceMapSync,
+    resolveSources:       resolveSources,
+    resolveSourcesSync:   resolveSourcesSync,
+    resolve:              resolve,
+    resolveSync:          resolveSync,
+    parseMapToJSON:       parseMapToJSON
+  }
+
+}));