Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/npm/cli.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRebecca Turner <me@re-becca.org>2017-09-23 22:41:10 +0300
committerRebecca Turner <me@re-becca.org>2017-10-04 10:02:39 +0300
commit85b6947e364a24d39018579300a02a6526839679 (patch)
tree4faf5aca71697b24221eea1110ae6ce74b789065
parent6a1aa06721cbb10644eab47558ca5bcb38df9155 (diff)
query-string@5.0.0
-rw-r--r--node_modules/query-string/index.js206
-rw-r--r--node_modules/query-string/license9
-rw-r--r--node_modules/query-string/node_modules/decode-uri-component/index.js94
-rw-r--r--node_modules/query-string/node_modules/decode-uri-component/license21
-rw-r--r--node_modules/query-string/node_modules/decode-uri-component/package.json69
-rw-r--r--node_modules/query-string/node_modules/decode-uri-component/readme.md70
-rw-r--r--node_modules/query-string/node_modules/object-assign/index.js90
-rw-r--r--node_modules/query-string/node_modules/object-assign/license21
-rw-r--r--node_modules/query-string/node_modules/object-assign/package.json74
-rw-r--r--node_modules/query-string/node_modules/object-assign/readme.md61
-rw-r--r--node_modules/query-string/node_modules/strict-uri-encode/index.js6
-rw-r--r--node_modules/query-string/node_modules/strict-uri-encode/license21
-rw-r--r--node_modules/query-string/node_modules/strict-uri-encode/package.json62
-rw-r--r--node_modules/query-string/node_modules/strict-uri-encode/readme.md40
-rw-r--r--node_modules/query-string/package.json78
-rw-r--r--node_modules/query-string/readme.md186
-rw-r--r--package-lock.json27
-rw-r--r--package.json2
18 files changed, 1137 insertions, 0 deletions
diff --git a/node_modules/query-string/index.js b/node_modules/query-string/index.js
new file mode 100644
index 000000000..37c485377
--- /dev/null
+++ b/node_modules/query-string/index.js
@@ -0,0 +1,206 @@
+'use strict';
+var strictUriEncode = require('strict-uri-encode');
+var objectAssign = require('object-assign');
+var decodeComponent = require('decode-uri-component');
+
+function encoderForArrayFormat(opts) {
+ switch (opts.arrayFormat) {
+ case 'index':
+ return function (key, value, index) {
+ return value === null ? [
+ encode(key, opts),
+ '[',
+ index,
+ ']'
+ ].join('') : [
+ encode(key, opts),
+ '[',
+ encode(index, opts),
+ ']=',
+ encode(value, opts)
+ ].join('');
+ };
+
+ case 'bracket':
+ return function (key, value) {
+ return value === null ? encode(key, opts) : [
+ encode(key, opts),
+ '[]=',
+ encode(value, opts)
+ ].join('');
+ };
+
+ default:
+ return function (key, value) {
+ return value === null ? encode(key, opts) : [
+ encode(key, opts),
+ '=',
+ encode(value, opts)
+ ].join('');
+ };
+ }
+}
+
+function parserForArrayFormat(opts) {
+ var result;
+
+ switch (opts.arrayFormat) {
+ case 'index':
+ return function (key, value, accumulator) {
+ result = /\[(\d*)\]$/.exec(key);
+
+ key = key.replace(/\[\d*\]$/, '');
+
+ if (!result) {
+ accumulator[key] = value;
+ return;
+ }
+
+ if (accumulator[key] === undefined) {
+ accumulator[key] = {};
+ }
+
+ accumulator[key][result[1]] = value;
+ };
+
+ case 'bracket':
+ return function (key, value, accumulator) {
+ result = /(\[\])$/.exec(key);
+ key = key.replace(/\[\]$/, '');
+
+ if (!result) {
+ accumulator[key] = value;
+ return;
+ } else if (accumulator[key] === undefined) {
+ accumulator[key] = [value];
+ return;
+ }
+
+ accumulator[key] = [].concat(accumulator[key], value);
+ };
+
+ default:
+ return function (key, value, accumulator) {
+ if (accumulator[key] === undefined) {
+ accumulator[key] = value;
+ return;
+ }
+
+ accumulator[key] = [].concat(accumulator[key], value);
+ };
+ }
+}
+
+function encode(value, opts) {
+ if (opts.encode) {
+ return opts.strict ? strictUriEncode(value) : encodeURIComponent(value);
+ }
+
+ return value;
+}
+
+function keysSorter(input) {
+ if (Array.isArray(input)) {
+ return input.sort();
+ } else if (typeof input === 'object') {
+ return keysSorter(Object.keys(input)).sort(function (a, b) {
+ return Number(a) - Number(b);
+ }).map(function (key) {
+ return input[key];
+ });
+ }
+
+ return input;
+}
+
+exports.extract = function (str) {
+ return str.split('?')[1] || '';
+};
+
+exports.parse = function (str, opts) {
+ opts = objectAssign({arrayFormat: 'none'}, opts);
+
+ var formatter = parserForArrayFormat(opts);
+
+ // Create an object with no prototype
+ // https://github.com/sindresorhus/query-string/issues/47
+ var ret = Object.create(null);
+
+ if (typeof str !== 'string') {
+ return ret;
+ }
+
+ str = str.trim().replace(/^(\?|#|&)/, '');
+
+ if (!str) {
+ return ret;
+ }
+
+ str.split('&').forEach(function (param) {
+ var parts = param.replace(/\+/g, ' ').split('=');
+ // Firefox (pre 40) decodes `%3D` to `=`
+ // https://github.com/sindresorhus/query-string/pull/37
+ var key = parts.shift();
+ var val = parts.length > 0 ? parts.join('=') : undefined;
+
+ // missing `=` should be `null`:
+ // http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters
+ val = val === undefined ? null : decodeComponent(val);
+
+ formatter(decodeComponent(key), val, ret);
+ });
+
+ return Object.keys(ret).sort().reduce(function (result, key) {
+ var val = ret[key];
+ if (Boolean(val) && typeof val === 'object' && !Array.isArray(val)) {
+ // Sort object keys, not values
+ result[key] = keysSorter(val);
+ } else {
+ result[key] = val;
+ }
+
+ return result;
+ }, Object.create(null));
+};
+
+exports.stringify = function (obj, opts) {
+ var defaults = {
+ encode: true,
+ strict: true,
+ arrayFormat: 'none'
+ };
+
+ opts = objectAssign(defaults, opts);
+
+ var formatter = encoderForArrayFormat(opts);
+
+ return obj ? Object.keys(obj).sort().map(function (key) {
+ var val = obj[key];
+
+ if (val === undefined) {
+ return '';
+ }
+
+ if (val === null) {
+ return encode(key, opts);
+ }
+
+ if (Array.isArray(val)) {
+ var result = [];
+
+ val.slice().forEach(function (val2) {
+ if (val2 === undefined) {
+ return;
+ }
+
+ result.push(formatter(key, val2, result.length));
+ });
+
+ return result.join('&');
+ }
+
+ return encode(key, opts) + '=' + encode(val, opts);
+ }).filter(function (x) {
+ return x.length > 0;
+ }).join('&') : '';
+};
diff --git a/node_modules/query-string/license b/node_modules/query-string/license
new file mode 100644
index 000000000..e7af2f771
--- /dev/null
+++ b/node_modules/query-string/license
@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
+
+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/query-string/node_modules/decode-uri-component/index.js b/node_modules/query-string/node_modules/decode-uri-component/index.js
new file mode 100644
index 000000000..691499b0e
--- /dev/null
+++ b/node_modules/query-string/node_modules/decode-uri-component/index.js
@@ -0,0 +1,94 @@
+'use strict';
+var token = '%[a-f0-9]{2}';
+var singleMatcher = new RegExp(token, 'gi');
+var multiMatcher = new RegExp('(' + token + ')+', 'gi');
+
+function decodeComponents(components, split) {
+ try {
+ // Try to decode the entire string first
+ return decodeURIComponent(components.join(''));
+ } catch (err) {
+ // Do nothing
+ }
+
+ if (components.length === 1) {
+ return components;
+ }
+
+ split = split || 1;
+
+ // Split the array in 2 parts
+ var left = components.slice(0, split);
+ var right = components.slice(split);
+
+ return Array.prototype.concat.call([], decodeComponents(left), decodeComponents(right));
+}
+
+function decode(input) {
+ try {
+ return decodeURIComponent(input);
+ } catch (err) {
+ var tokens = input.match(singleMatcher);
+
+ for (var i = 1; i < tokens.length; i++) {
+ input = decodeComponents(tokens, i).join('');
+
+ tokens = input.match(singleMatcher);
+ }
+
+ return input;
+ }
+}
+
+function customDecodeURIComponent(input) {
+ // Keep track of all the replacements and prefill the map with the `BOM`
+ var replaceMap = {
+ '%FE%FF': '\uFFFD\uFFFD',
+ '%FF%FE': '\uFFFD\uFFFD'
+ };
+
+ var match = multiMatcher.exec(input);
+ while (match) {
+ try {
+ // Decode as big chunks as possible
+ replaceMap[match[0]] = decodeURIComponent(match[0]);
+ } catch (err) {
+ var result = decode(match[0]);
+
+ if (result !== match[0]) {
+ replaceMap[match[0]] = result;
+ }
+ }
+
+ match = multiMatcher.exec(input);
+ }
+
+ // Add `%C2` at the end of the map to make sure it does not replace the combinator before everything else
+ replaceMap['%C2'] = '\uFFFD';
+
+ var entries = Object.keys(replaceMap);
+
+ for (var i = 0; i < entries.length; i++) {
+ // Replace all decoded components
+ var key = entries[i];
+ input = input.replace(new RegExp(key, 'g'), replaceMap[key]);
+ }
+
+ return input;
+}
+
+module.exports = function (encodedURI) {
+ if (typeof encodedURI !== 'string') {
+ throw new TypeError('Expected `encodedURI` to be of type `string`, got `' + typeof encodedURI + '`');
+ }
+
+ try {
+ encodedURI = encodedURI.replace(/\+/g, ' ');
+
+ // Try the built in decoder first
+ return decodeURIComponent(encodedURI);
+ } catch (err) {
+ // Fallback to a more advanced decoder
+ return customDecodeURIComponent(encodedURI);
+ }
+};
diff --git a/node_modules/query-string/node_modules/decode-uri-component/license b/node_modules/query-string/node_modules/decode-uri-component/license
new file mode 100644
index 000000000..78b08554a
--- /dev/null
+++ b/node_modules/query-string/node_modules/decode-uri-component/license
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) Sam Verschueren <sam.verschueren@gmail.com> (github.com/SamVerschueren)
+
+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/query-string/node_modules/decode-uri-component/package.json b/node_modules/query-string/node_modules/decode-uri-component/package.json
new file mode 100644
index 000000000..a5fe214ca
--- /dev/null
+++ b/node_modules/query-string/node_modules/decode-uri-component/package.json
@@ -0,0 +1,69 @@
+{
+ "_from": "decode-uri-component@^0.2.0",
+ "_id": "decode-uri-component@0.2.0",
+ "_inBundle": false,
+ "_integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+ "_location": "/query-string/decode-uri-component",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "range",
+ "registry": true,
+ "raw": "decode-uri-component@^0.2.0",
+ "name": "decode-uri-component",
+ "escapedName": "decode-uri-component",
+ "rawSpec": "^0.2.0",
+ "saveSpec": null,
+ "fetchSpec": "^0.2.0"
+ },
+ "_requiredBy": [
+ "/query-string"
+ ],
+ "_resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "_shasum": "eb3913333458775cb84cd1a1fae062106bb87545",
+ "_spec": "decode-uri-component@^0.2.0",
+ "_where": "/Users/rebecca/code/npm/node_modules/query-string",
+ "author": {
+ "name": "Sam Verschueren",
+ "email": "sam.verschueren@gmail.com",
+ "url": "github.com/SamVerschueren"
+ },
+ "bugs": {
+ "url": "https://github.com/SamVerschueren/decode-uri-component/issues"
+ },
+ "bundleDependencies": false,
+ "deprecated": false,
+ "description": "A better decodeURIComponent",
+ "devDependencies": {
+ "ava": "^0.17.0",
+ "coveralls": "^2.13.1",
+ "nyc": "^10.3.2",
+ "xo": "^0.16.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ },
+ "files": [
+ "index.js"
+ ],
+ "homepage": "https://github.com/SamVerschueren/decode-uri-component#readme",
+ "keywords": [
+ "decode",
+ "uri",
+ "component",
+ "decodeuricomponent",
+ "components",
+ "decoder",
+ "url"
+ ],
+ "license": "MIT",
+ "name": "decode-uri-component",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/SamVerschueren/decode-uri-component.git"
+ },
+ "scripts": {
+ "coveralls": "nyc report --reporter=text-lcov | coveralls",
+ "test": "xo && nyc ava"
+ },
+ "version": "0.2.0"
+}
diff --git a/node_modules/query-string/node_modules/decode-uri-component/readme.md b/node_modules/query-string/node_modules/decode-uri-component/readme.md
new file mode 100644
index 000000000..795c87ff7
--- /dev/null
+++ b/node_modules/query-string/node_modules/decode-uri-component/readme.md
@@ -0,0 +1,70 @@
+# decode-uri-component
+
+[![Build Status](https://travis-ci.org/SamVerschueren/decode-uri-component.svg?branch=master)](https://travis-ci.org/SamVerschueren/decode-uri-component) [![Coverage Status](https://coveralls.io/repos/SamVerschueren/decode-uri-component/badge.svg?branch=master&service=github)](https://coveralls.io/github/SamVerschueren/decode-uri-component?branch=master)
+
+> A better [decodeURIComponent](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent)
+
+
+## Why?
+
+- Decodes `+` to a space.
+- Converts the [BOM](https://en.wikipedia.org/wiki/Byte_order_mark) to a [replacement character](https://en.wikipedia.org/wiki/Specials_(Unicode_block)#Replacement_character) `�`.
+- Does not throw with invalid encoded input.
+- Decodes as much of the string as possible.
+
+
+## Install
+
+```
+$ npm install --save decode-uri-component
+```
+
+
+## Usage
+
+```js
+const decodeUriComponent = require('decode-uri-component');
+
+decodeUriComponent('%25');
+//=> '%'
+
+decodeUriComponent('%');
+//=> '%'
+
+decodeUriComponent('st%C3%A5le');
+//=> 'ståle'
+
+decodeUriComponent('%st%C3%A5le%');
+//=> '%ståle%'
+
+decodeUriComponent('%%7Bst%C3%A5le%7D%');
+//=> '%{ståle}%'
+
+decodeUriComponent('%7B%ab%%7C%de%%7D');
+//=> '{%ab%|%de%}'
+
+decodeUriComponent('%FE%FF');
+//=> '\uFFFD\uFFFD'
+
+decodeUriComponent('%C2');
+//=> '\uFFFD'
+
+decodeUriComponent('%C2%B5');
+//=> 'µ'
+```
+
+
+## API
+
+### decodeUriComponent(encodedURI)
+
+#### encodedURI
+
+Type: `string`
+
+An encoded component of a Uniform Resource Identifier.
+
+
+## License
+
+MIT © [Sam Verschueren](https://github.com/SamVerschueren)
diff --git a/node_modules/query-string/node_modules/object-assign/index.js b/node_modules/query-string/node_modules/object-assign/index.js
new file mode 100644
index 000000000..0930cf889
--- /dev/null
+++ b/node_modules/query-string/node_modules/object-assign/index.js
@@ -0,0 +1,90 @@
+/*
+object-assign
+(c) Sindre Sorhus
+@license MIT
+*/
+
+'use strict';
+/* eslint-disable no-unused-vars */
+var getOwnPropertySymbols = Object.getOwnPropertySymbols;
+var hasOwnProperty = Object.prototype.hasOwnProperty;
+var propIsEnumerable = Object.prototype.propertyIsEnumerable;
+
+function toObject(val) {
+ if (val === null || val === undefined) {
+ throw new TypeError('Object.assign cannot be called with null or undefined');
+ }
+
+ return Object(val);
+}
+
+function shouldUseNative() {
+ try {
+ if (!Object.assign) {
+ return false;
+ }
+
+ // Detect buggy property enumeration order in older V8 versions.
+
+ // https://bugs.chromium.org/p/v8/issues/detail?id=4118
+ var test1 = new String('abc'); // eslint-disable-line no-new-wrappers
+ test1[5] = 'de';
+ if (Object.getOwnPropertyNames(test1)[0] === '5') {
+ return false;
+ }
+
+ // https://bugs.chromium.org/p/v8/issues/detail?id=3056
+ var test2 = {};
+ for (var i = 0; i < 10; i++) {
+ test2['_' + String.fromCharCode(i)] = i;
+ }
+ var order2 = Object.getOwnPropertyNames(test2).map(function (n) {
+ return test2[n];
+ });
+ if (order2.join('') !== '0123456789') {
+ return false;
+ }
+
+ // https://bugs.chromium.org/p/v8/issues/detail?id=3056
+ var test3 = {};
+ 'abcdefghijklmnopqrst'.split('').forEach(function (letter) {
+ test3[letter] = letter;
+ });
+ if (Object.keys(Object.assign({}, test3)).join('') !==
+ 'abcdefghijklmnopqrst') {
+ return false;
+ }
+
+ return true;
+ } catch (err) {
+ // We don't expect any of the above to throw, but better to be safe.
+ return false;
+ }
+}
+
+module.exports = shouldUseNative() ? Object.assign : function (target, source) {
+ var from;
+ var to = toObject(target);
+ var symbols;
+
+ for (var s = 1; s < arguments.length; s++) {
+ from = Object(arguments[s]);
+
+ for (var key in from) {
+ if (hasOwnProperty.call(from, key)) {
+ to[key] = from[key];
+ }
+ }
+
+ if (getOwnPropertySymbols) {
+ symbols = getOwnPropertySymbols(from);
+ for (var i = 0; i < symbols.length; i++) {
+ if (propIsEnumerable.call(from, symbols[i])) {
+ to[symbols[i]] = from[symbols[i]];
+ }
+ }
+ }
+ }
+
+ return to;
+};
diff --git a/node_modules/query-string/node_modules/object-assign/license b/node_modules/query-string/node_modules/object-assign/license
new file mode 100644
index 000000000..654d0bfe9
--- /dev/null
+++ b/node_modules/query-string/node_modules/object-assign/license
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
+
+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/query-string/node_modules/object-assign/package.json b/node_modules/query-string/node_modules/object-assign/package.json
new file mode 100644
index 000000000..80ff3c78c
--- /dev/null
+++ b/node_modules/query-string/node_modules/object-assign/package.json
@@ -0,0 +1,74 @@
+{
+ "_from": "object-assign@^4.1.0",
+ "_id": "object-assign@4.1.1",
+ "_inBundle": false,
+ "_integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "_location": "/query-string/object-assign",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "range",
+ "registry": true,
+ "raw": "object-assign@^4.1.0",
+ "name": "object-assign",
+ "escapedName": "object-assign",
+ "rawSpec": "^4.1.0",
+ "saveSpec": null,
+ "fetchSpec": "^4.1.0"
+ },
+ "_requiredBy": [
+ "/query-string"
+ ],
+ "_resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "_shasum": "2109adc7965887cfc05cbbd442cac8bfbb360863",
+ "_spec": "object-assign@^4.1.0",
+ "_where": "/Users/rebecca/code/npm/node_modules/query-string",
+ "author": {
+ "name": "Sindre Sorhus",
+ "email": "sindresorhus@gmail.com",
+ "url": "sindresorhus.com"
+ },
+ "bugs": {
+ "url": "https://github.com/sindresorhus/object-assign/issues"
+ },
+ "bundleDependencies": false,
+ "deprecated": false,
+ "description": "ES2015 `Object.assign()` ponyfill",
+ "devDependencies": {
+ "ava": "^0.16.0",
+ "lodash": "^4.16.4",
+ "matcha": "^0.7.0",
+ "xo": "^0.16.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "files": [
+ "index.js"
+ ],
+ "homepage": "https://github.com/sindresorhus/object-assign#readme",
+ "keywords": [
+ "object",
+ "assign",
+ "extend",
+ "properties",
+ "es2015",
+ "ecmascript",
+ "harmony",
+ "ponyfill",
+ "prollyfill",
+ "polyfill",
+ "shim",
+ "browser"
+ ],
+ "license": "MIT",
+ "name": "object-assign",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/sindresorhus/object-assign.git"
+ },
+ "scripts": {
+ "bench": "matcha bench.js",
+ "test": "xo && ava"
+ },
+ "version": "4.1.1"
+}
diff --git a/node_modules/query-string/node_modules/object-assign/readme.md b/node_modules/query-string/node_modules/object-assign/readme.md
new file mode 100644
index 000000000..1be09d35c
--- /dev/null
+++ b/node_modules/query-string/node_modules/object-assign/readme.md
@@ -0,0 +1,61 @@
+# object-assign [![Build Status](https://travis-ci.org/sindresorhus/object-assign.svg?branch=master)](https://travis-ci.org/sindresorhus/object-assign)
+
+> ES2015 [`Object.assign()`](http://www.2ality.com/2014/01/object-assign.html) [ponyfill](https://ponyfill.com)
+
+
+## Use the built-in
+
+Node.js 4 and up, as well as every evergreen browser (Chrome, Edge, Firefox, Opera, Safari),
+support `Object.assign()` :tada:. If you target only those environments, then by all
+means, use `Object.assign()` instead of this package.
+
+
+## Install
+
+```
+$ npm install --save object-assign
+```
+
+
+## Usage
+
+```js
+const objectAssign = require('object-assign');
+
+objectAssign({foo: 0}, {bar: 1});
+//=> {foo: 0, bar: 1}
+
+// multiple sources
+objectAssign({foo: 0}, {bar: 1}, {baz: 2});
+//=> {foo: 0, bar: 1, baz: 2}
+
+// overwrites equal keys
+objectAssign({foo: 0}, {foo: 1}, {foo: 2});
+//=> {foo: 2}
+
+// ignores null and undefined sources
+objectAssign({foo: 0}, null, {bar: 1}, undefined);
+//=> {foo: 0, bar: 1}
+```
+
+
+## API
+
+### objectAssign(target, [source, ...])
+
+Assigns enumerable own properties of `source` objects to the `target` object and returns the `target` object. Additional `source` objects will overwrite previous ones.
+
+
+## Resources
+
+- [ES2015 spec - Object.assign](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.assign)
+
+
+## Related
+
+- [deep-assign](https://github.com/sindresorhus/deep-assign) - Recursive `Object.assign()`
+
+
+## License
+
+MIT © [Sindre Sorhus](https://sindresorhus.com)
diff --git a/node_modules/query-string/node_modules/strict-uri-encode/index.js b/node_modules/query-string/node_modules/strict-uri-encode/index.js
new file mode 100644
index 000000000..414de96c5
--- /dev/null
+++ b/node_modules/query-string/node_modules/strict-uri-encode/index.js
@@ -0,0 +1,6 @@
+'use strict';
+module.exports = function (str) {
+ return encodeURIComponent(str).replace(/[!'()*]/g, function (c) {
+ return '%' + c.charCodeAt(0).toString(16).toUpperCase();
+ });
+};
diff --git a/node_modules/query-string/node_modules/strict-uri-encode/license b/node_modules/query-string/node_modules/strict-uri-encode/license
new file mode 100644
index 000000000..e0e915823
--- /dev/null
+++ b/node_modules/query-string/node_modules/strict-uri-encode/license
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) Kevin Mårtensson <kevinmartensson@gmail.com> (github.com/kevva)
+
+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/query-string/node_modules/strict-uri-encode/package.json b/node_modules/query-string/node_modules/strict-uri-encode/package.json
new file mode 100644
index 000000000..344b83ab4
--- /dev/null
+++ b/node_modules/query-string/node_modules/strict-uri-encode/package.json
@@ -0,0 +1,62 @@
+{
+ "_from": "strict-uri-encode@^1.0.0",
+ "_id": "strict-uri-encode@1.1.0",
+ "_inBundle": false,
+ "_integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=",
+ "_location": "/query-string/strict-uri-encode",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "range",
+ "registry": true,
+ "raw": "strict-uri-encode@^1.0.0",
+ "name": "strict-uri-encode",
+ "escapedName": "strict-uri-encode",
+ "rawSpec": "^1.0.0",
+ "saveSpec": null,
+ "fetchSpec": "^1.0.0"
+ },
+ "_requiredBy": [
+ "/query-string"
+ ],
+ "_resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz",
+ "_shasum": "279b225df1d582b1f54e65addd4352e18faa0713",
+ "_spec": "strict-uri-encode@^1.0.0",
+ "_where": "/Users/rebecca/code/npm/node_modules/query-string",
+ "author": {
+ "name": "Kevin Mårtensson",
+ "email": "kevinmartensson@gmail.com",
+ "url": "github.com/kevva"
+ },
+ "bugs": {
+ "url": "https://github.com/kevva/strict-uri-encode/issues"
+ },
+ "bundleDependencies": false,
+ "deprecated": false,
+ "description": "A stricter URI encode adhering to RFC 3986",
+ "devDependencies": {
+ "ava": "^0.0.4"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "files": [
+ "index.js"
+ ],
+ "homepage": "https://github.com/kevva/strict-uri-encode#readme",
+ "keywords": [
+ "component",
+ "encode",
+ "RFC3986",
+ "uri"
+ ],
+ "license": "MIT",
+ "name": "strict-uri-encode",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/kevva/strict-uri-encode.git"
+ },
+ "scripts": {
+ "test": "node test.js"
+ },
+ "version": "1.1.0"
+}
diff --git a/node_modules/query-string/node_modules/strict-uri-encode/readme.md b/node_modules/query-string/node_modules/strict-uri-encode/readme.md
new file mode 100644
index 000000000..2763272de
--- /dev/null
+++ b/node_modules/query-string/node_modules/strict-uri-encode/readme.md
@@ -0,0 +1,40 @@
+# strict-uri-encode [![Build Status](https://travis-ci.org/kevva/strict-uri-encode.svg?branch=master)](https://travis-ci.org/kevva/strict-uri-encode)
+
+> A stricter URI encode adhering to [RFC 3986](http://tools.ietf.org/html/rfc3986)
+
+
+## Install
+
+```
+$ npm install --save strict-uri-encode
+```
+
+
+## Usage
+
+```js
+var strictUriEncode = require('strict-uri-encode');
+
+strictUriEncode('unicorn!foobar')
+//=> 'unicorn%21foobar'
+
+strictUriEncode('unicorn*foobar')
+//=> 'unicorn%2Afoobar'
+```
+
+
+## API
+
+### strictUriEncode(string)
+
+#### string
+
+*Required*
+Type: `string`, `number`
+
+String to URI encode.
+
+
+## License
+
+MIT © [Kevin Mårtensson](http://github.com/kevva)
diff --git a/node_modules/query-string/package.json b/node_modules/query-string/package.json
new file mode 100644
index 000000000..861634e96
--- /dev/null
+++ b/node_modules/query-string/package.json
@@ -0,0 +1,78 @@
+{
+ "_from": "query-string",
+ "_id": "query-string@5.0.0",
+ "_inBundle": false,
+ "_integrity": "sha1-+99wBLTSr/eS+YcZgbeieU9VWUc=",
+ "_location": "/query-string",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "tag",
+ "registry": true,
+ "raw": "query-string",
+ "name": "query-string",
+ "escapedName": "query-string",
+ "rawSpec": "",
+ "saveSpec": null,
+ "fetchSpec": "latest"
+ },
+ "_requiredBy": [
+ "#USER",
+ "/"
+ ],
+ "_resolved": "https://registry.npmjs.org/query-string/-/query-string-5.0.0.tgz",
+ "_shasum": "fbdf7004b4d2aff792f9871981b7a2794f555947",
+ "_spec": "query-string",
+ "_where": "/Users/rebecca/code/npm",
+ "author": {
+ "name": "Sindre Sorhus",
+ "email": "sindresorhus@gmail.com",
+ "url": "sindresorhus.com"
+ },
+ "bugs": {
+ "url": "https://github.com/sindresorhus/query-string/issues"
+ },
+ "bundleDependencies": false,
+ "dependencies": {
+ "decode-uri-component": "^0.2.0",
+ "object-assign": "^4.1.0",
+ "strict-uri-encode": "^1.0.0"
+ },
+ "deprecated": false,
+ "description": "Parse and stringify URL query strings",
+ "devDependencies": {
+ "ava": "^0.17.0",
+ "xo": "^0.16.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "files": [
+ "index.js"
+ ],
+ "homepage": "https://github.com/sindresorhus/query-string#readme",
+ "keywords": [
+ "browser",
+ "querystring",
+ "query",
+ "string",
+ "qs",
+ "param",
+ "parameter",
+ "url",
+ "uri",
+ "parse",
+ "stringify",
+ "encode",
+ "decode"
+ ],
+ "license": "MIT",
+ "name": "query-string",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/sindresorhus/query-string.git"
+ },
+ "scripts": {
+ "test": "xo && ava"
+ },
+ "version": "5.0.0"
+}
diff --git a/node_modules/query-string/readme.md b/node_modules/query-string/readme.md
new file mode 100644
index 000000000..8d2148c9d
--- /dev/null
+++ b/node_modules/query-string/readme.md
@@ -0,0 +1,186 @@
+# query-string [![Build Status](https://travis-ci.org/sindresorhus/query-string.svg?branch=master)](https://travis-ci.org/sindresorhus/query-string)
+
+> Parse and stringify URL [query strings](http://en.wikipedia.org/wiki/Query_string)
+
+---
+
+<p align="center"><b>🔥 Want to strengthen your core JavaScript skills and master ES6?</b><br>I would personally recommend this awesome <a href="https://ES6.io/friend/AWESOME">ES6 course</a> by Wes Bos. You might also like his <a href="https://ReactForBeginners.com/friend/AWESOME">React course</a>.</p>
+
+---
+
+
+## Install
+
+```
+$ npm install query-string
+```
+
+
+## Usage
+
+```js
+const queryString = require('query-string');
+
+console.log(location.search);
+//=> '?foo=bar'
+
+const parsed = queryString.parse(location.search);
+console.log(parsed);
+//=> {foo: 'bar'}
+
+console.log(location.hash);
+//=> '#token=bada55cafe'
+
+const parsedHash = queryString.parse(location.hash);
+console.log(parsedHash);
+//=> {token: 'bada55cafe'}
+
+parsed.foo = 'unicorn';
+parsed.ilike = 'pizza';
+
+const stringified = queryString.stringify(parsed);
+//=> 'foo=unicorn&ilike=pizza'
+
+location.search = stringified;
+// note that `location.search` automatically prepends a question mark
+console.log(location.search);
+//=> '?foo=unicorn&ilike=pizza'
+```
+
+
+## API
+
+### .parse(*string*, *[options]*)
+
+Parse a query string into an object. Leading `?` or `#` are ignored, so you can pass `location.search` or `location.hash` directly.
+
+The returned object is created with [`Object.create(null)`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create) and thus does not have a `prototype`.
+
+URI components are decoded with [`decode-uri-component`](https://github.com/SamVerschueren/decode-uri-component).
+
+#### arrayFormat
+
+Type: `string`<br>
+Default: `'none'`
+
+Supports both `index` for an indexed array representation or `bracket` for a *bracketed* array representation.
+
+- `bracket`: stands for parsing correctly arrays with bracket representation on the query string, such as:
+
+```js
+queryString.parse('foo[]=1&foo[]=2&foo[]=3', {arrayFormat: 'bracket'});
+//=> foo: [1,2,3]
+```
+
+- `index`: stands for parsing taking the index into account, such as:
+
+```js
+queryString.parse('foo[0]=1&foo[1]=2&foo[3]=3', {arrayFormat: 'index'});
+//=> foo: [1,2,3]
+```
+
+- `none`: is the **default** option and removes any bracket representation, such as:
+
+```js
+queryString.parse('foo=1&foo=2&foo=3');
+//=> foo: [1,2,3]
+```
+
+### .stringify(*object*, *[options]*)
+
+Stringify an object into a query string, sorting the keys.
+
+#### strict
+
+Type: `boolean`<br>
+Default: `true`
+
+Strictly encode URI components with [strict-uri-encode](https://github.com/kevva/strict-uri-encode). It uses [encodeURIComponent](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent)
+if set to false. You probably [don't care](https://github.com/sindresorhus/query-string/issues/42) about this option.
+
+#### encode
+
+Type: `boolean`<br>
+Default: `true`
+
+[URL encode](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent) the keys and values.
+
+#### arrayFormat
+
+Type: `string`<br>
+Default: `'none'`
+
+Supports both `index` for an indexed array representation or `bracket` for a *bracketed* array representation.
+
+- `bracket`: stands for parsing correctly arrays with bracket representation on the query string, such as:
+
+```js
+queryString.stringify({foo: [1,2,3]}, {arrayFormat: 'bracket'});
+// => foo[]=1&foo[]=2&foo[]=3
+```
+
+- `index`: stands for parsing taking the index into account, such as:
+
+```js
+queryString.stringify({foo: [1,2,3]}, {arrayFormat: 'index'});
+// => foo[0]=1&foo[1]=2&foo[3]=3
+```
+
+- `none`: is the __default__ option and removes any bracket representation, such as:
+
+```js
+queryString.stringify({foo: [1,2,3]});
+// => foo=1&foo=2&foo=3
+```
+
+### .extract(*string*)
+
+Extract a query string from a URL that can be passed into `.parse()`.
+
+
+## Nesting
+
+This module intentionally doesn't support nesting as it's not spec'd and varies between implementations, which causes a lot of [edge cases](https://github.com/visionmedia/node-querystring/issues).
+
+You're much better off just converting the object to a JSON string:
+
+```js
+queryString.stringify({
+ foo: 'bar',
+ nested: JSON.stringify({
+ unicorn: 'cake'
+ })
+});
+//=> 'foo=bar&nested=%7B%22unicorn%22%3A%22cake%22%7D'
+```
+
+However, there is support for multiple instances of the same key:
+
+```js
+queryString.parse('likes=cake&name=bob&likes=icecream');
+//=> {likes: ['cake', 'icecream'], name: 'bob'}
+
+queryString.stringify({color: ['taupe', 'chartreuse'], id: '515'});
+//=> 'color=chartreuse&color=taupe&id=515'
+```
+
+
+## Falsy values
+
+Sometimes you want to unset a key, or maybe just make it present without assigning a value to it. Here is how falsy values are stringified:
+
+```js
+queryString.stringify({foo: false});
+//=> 'foo=false'
+
+queryString.stringify({foo: null});
+//=> 'foo'
+
+queryString.stringify({foo: undefined});
+//=> ''
+```
+
+
+## License
+
+MIT © [Sindre Sorhus](https://sindresorhus.com)
diff --git a/package-lock.json b/package-lock.json
index 24fbad75c..a76720c8c 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -3015,6 +3015,33 @@
"resolved": "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.11.0.tgz",
"integrity": "sha1-/8bCii/Av7RwUrR+I/T0RqX7254="
},
+ "query-string": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.0.0.tgz",
+ "integrity": "sha1-+99wBLTSr/eS+YcZgbeieU9VWUc=",
+ "requires": {
+ "decode-uri-component": "0.2.0",
+ "object-assign": "4.1.1",
+ "strict-uri-encode": "1.1.0"
+ },
+ "dependencies": {
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU="
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+ },
+ "strict-uri-encode": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz",
+ "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM="
+ }
+ }
+ },
"qw": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/qw/-/qw-1.0.1.tgz",
diff --git a/package.json b/package.json
index 30ed5d6a2..eb6a7c9ef 100644
--- a/package.json
+++ b/package.json
@@ -95,6 +95,7 @@
"path-is-inside": "~1.0.2",
"promise-inflight": "~1.0.1",
"qrcode-terminal": "~0.11.0",
+ "query-string": "~5.0.0",
"qw": "~1.0.1",
"read": "~1.0.7",
"read-cmd-shim": "~1.0.1",
@@ -197,6 +198,7 @@
"pacote",
"path-is-inside",
"promise-inflight",
+ "query-string",
"qrcode-terminal",
"qw",
"read",