From a5592252c7920ea3acf85b159a5aa3ca2161e495 Mon Sep 17 00:00:00 2001 From: Clement Michaud Date: Fri, 23 Mar 2018 10:13:00 +0100 Subject: [PATCH 1/4] Bump npm dependencies --- client/src/lib/GetPromised.ts | 4 +- client/src/lib/firstfactor/index.ts | 4 +- .../lib/reset-password/reset-password-form.ts | 4 +- .../reset-password/reset-password-request.ts | 2 +- client/src/lib/secondfactor/index.ts | 2 +- package-lock.json | 4218 +++++++++++------ package.json | 62 +- 7 files changed, 2930 insertions(+), 1366 deletions(-) diff --git a/client/src/lib/GetPromised.ts b/client/src/lib/GetPromised.ts index a03036e53..e4f435b5a 100644 --- a/client/src/lib/GetPromised.ts +++ b/client/src/lib/GetPromised.ts @@ -7,8 +7,8 @@ export default function ($: JQueryStatic, url: string, data: Object, fn: any, .done(function (data: any) { resolve(data); }) - .fail(function (err: Error) { - reject(err); + .fail(function (xhr: JQueryXHR, textStatus: string) { + reject(textStatus); }); }); } \ No newline at end of file diff --git a/client/src/lib/firstfactor/index.ts b/client/src/lib/firstfactor/index.ts index 0c5f9828d..93fa2d760 100644 --- a/client/src/lib/firstfactor/index.ts +++ b/client/src/lib/firstfactor/index.ts @@ -13,8 +13,8 @@ export default function (window: Window, $: JQueryStatic, const notifier = new Notifier(".notification", $); function onFormSubmitted() { - const username: string = $(UISelectors.USERNAME_FIELD_ID).val(); - const password: string = $(UISelectors.PASSWORD_FIELD_ID).val(); + const username: string = $(UISelectors.USERNAME_FIELD_ID).val() as string; + const password: string = $(UISelectors.PASSWORD_FIELD_ID).val() as string; $(UISelectors.PASSWORD_FIELD_ID).val(""); const redirectUrl = QueryParametersRetriever.get(Constants.REDIRECT_QUERY_PARAM); diff --git a/client/src/lib/reset-password/reset-password-form.ts b/client/src/lib/reset-password/reset-password-form.ts index 888026f62..b94279cde 100644 --- a/client/src/lib/reset-password/reset-password-form.ts +++ b/client/src/lib/reset-password/reset-password-form.ts @@ -28,8 +28,8 @@ export default function (window: Window, $: JQueryStatic) { } function onFormSubmitted() { - const password1 = $("#password1").val(); - const password2 = $("#password2").val(); + const password1 = $("#password1").val() as string; + const password2 = $("#password2").val() as string; if (!password1 || !password2) { notifier.warning(UserMessages.MISSING_PASSWORD); diff --git a/client/src/lib/reset-password/reset-password-request.ts b/client/src/lib/reset-password/reset-password-request.ts index 426bad34b..846226d75 100644 --- a/client/src/lib/reset-password/reset-password-request.ts +++ b/client/src/lib/reset-password/reset-password-request.ts @@ -29,7 +29,7 @@ export default function (window: Window, $: JQueryStatic) { } function onFormSubmitted() { - const username = $("#username").val(); + const username = $("#username").val() as string; if (!username) { notifier.warning(UserMessages.MISSING_USERNAME); diff --git a/client/src/lib/secondfactor/index.ts b/client/src/lib/secondfactor/index.ts index 93e474db8..bc5eb78f8 100644 --- a/client/src/lib/secondfactor/index.ts +++ b/client/src/lib/secondfactor/index.ts @@ -40,7 +40,7 @@ export default function (window: Window, $: JQueryStatic, u2fApi: U2fApi.U2fApi) } function onTOTPFormSubmitted(): boolean { - const token = $(ClientConstants.TOTP_TOKEN_SELECTOR).val(); + const token = $(ClientConstants.TOTP_TOKEN_SELECTOR).val() as string; TOTPValidator.validate(token, $) .then(onSecondFactorTotpSuccess) .catch(onSecondFactorTotpFailure); diff --git a/package-lock.json b/package-lock.json index 309125062..ef426e506 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,31 +21,32 @@ } }, "@types/bootstrap": { - "version": "3.3.36", - "resolved": "https://registry.npmjs.org/@types/bootstrap/-/bootstrap-3.3.36.tgz", - "integrity": "sha512-Ox4QismJMkIIEx800Potvor1PCFg/VldUkmWBARw33mcJejLfXsRjQowdwr20tOzq73+YxrD40kcHbjWDgOwMA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/bootstrap/-/bootstrap-4.0.1.tgz", + "integrity": "sha512-PReqrCfWh0xYraWpsurgV59w/GfdTZB3T/OZhySCho5SDiss3ycneOb1BCoCoqm84jGxivYbDFZnGu7ORDC8ug==", "dev": true, "requires": { - "@types/jquery": "2.0.48" + "@types/jquery": "3.3.1", + "popper.js": "1.14.1" } }, "@types/bson": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@types/bson/-/bson-1.0.4.tgz", - "integrity": "sha512-/nysVvxwup1WniGHIM31UZXM+6727h4FAa2tZpFSQBooBcl2Bh1N9oQmVVg8QYnjchN/DOGi7UvVN0jpzWL6sw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/bson/-/bson-1.0.7.tgz", + "integrity": "sha512-RehFYAhF6h+dO8112VwjM8zq63Fh9zukvqC3NlWWGfVa+0StuSMu4xwa54M2CRFrNGvgKnqHLTQLC7P20AlMYg==", "dev": true, "requires": { "@types/node": "8.0.46" } }, "@types/connect-redis": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/@types/connect-redis/-/connect-redis-0.0.6.tgz", - "integrity": "sha512-gCToovGUQuQLZXNY1J6SrCcHTyp3Hxbl6u41tltfoBHiDVQyxO/NdKFLi51kOSj783fPNre7GcUrO05dLnUSOw==", + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@types/connect-redis/-/connect-redis-0.0.7.tgz", + "integrity": "sha512-ui1DPnJxqgBhqPj0XTVyPkzffEX9DIGkb2nT2mzZ0OlsKn/u9BvRvKmjpi4Vydf2uw3z/D4UmMH4KMkilySqvw==", "dev": true, "requires": { "@types/express": "4.0.37", - "@types/express-session": "0.0.32", + "@types/express-session": "1.15.8", "@types/redis": "2.6.1" } }, @@ -59,9 +60,9 @@ } }, "@types/cucumber": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/cucumber/-/cucumber-2.0.4.tgz", - "integrity": "sha1-+y/Cy5chVKj+tc66S8aJaGvB+wU=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/cucumber/-/cucumber-4.0.1.tgz", + "integrity": "sha512-3b6lW0Jo+iPCrXRxQbHbwHK+u0x4ehSpQMWPtEBlK2QIU9ZQJ7fGpGK7p03+ejlJ5DEhOtzWm6mX8Y1NLtgyUg==", "dev": true }, "@types/ejs": { @@ -70,6 +71,12 @@ "integrity": "sha1-Ck4Keu7gmUQVSwbOWirGoRj5KwA=", "dev": true }, + "@types/events": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@types/events/-/events-1.2.0.tgz", + "integrity": "sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA==", + "dev": true + }, "@types/express": { "version": "4.0.37", "resolved": "https://registry.npmjs.org/@types/express/-/express-4.0.37.tgz", @@ -90,11 +97,12 @@ } }, "@types/express-session": { - "version": "0.0.32", - "resolved": "https://registry.npmjs.org/@types/express-session/-/express-session-0.0.32.tgz", - "integrity": "sha1-gvnmoCjrYSWkEtuV8OYal9GUXuA=", + "version": "1.15.8", + "resolved": "https://registry.npmjs.org/@types/express-session/-/express-session-1.15.8.tgz", + "integrity": "sha512-Be5N9zul4C/IH1UjRDaVJ46wkG1jsBgJlihBdWlqJWfCaiqvaVmxcyqcLey7omSFGCTIUDgdHqf0vwNjEZOSVA==", "dev": true, "requires": { + "@types/events": "1.2.0", "@types/express": "4.0.37", "@types/node": "8.0.46" } @@ -109,27 +117,29 @@ } }, "@types/jquery": { - "version": "2.0.48", - "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-2.0.48.tgz", - "integrity": "sha512-nNLzUrVjaRV/Ds1eHZLYTd7IZxs38cwwLSaqMJj8OTXY8xNUbxSK69bi9cMLvQ7dm/IBeQ1wHwQ0S1uYa0rd2w==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.3.1.tgz", + "integrity": "sha512-N3h+rzN518yl2xKrW0o6KKdNmWZ+OwG6SoM5TBEQFF0tTv5wXPEsoOuYQ2Kt3/89XbcSZUJLdjiT/2c3BR/ApQ==", "dev": true }, "@types/jsdom": { - "version": "2.0.32", - "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-2.0.32.tgz", - "integrity": "sha512-xaHlMIzlReyciMIWGJBnkEdHngCOEpik2ojt9tJFe7rD+QiObCIcmr9/tAqxn7l1jflQ3wEIkh7+gt4ls5n1Dw==", + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-11.0.4.tgz", + "integrity": "sha512-lthMj4kw7Fzs3LjBhQ0+1faAfDrN9GFJZO5Nf/xO7fppFfxqnnQdNR28n0xMGXsx8fTHOPliE1NTkAW1bVLpYw==", "dev": true, "requires": { - "@types/jquery": "2.0.48", - "@types/node": "8.0.46" + "@types/node": "8.0.46", + "@types/tough-cookie": "2.3.2", + "parse5": "3.0.2" } }, "@types/ldapjs": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/ldapjs/-/ldapjs-1.0.1.tgz", - "integrity": "sha512-ek07eAt9iH1LI8HH/cBG/TS+sh51yTkq0vVCoY8mOj+W7KxcDiDQ6WGqMn9J/ENmeaZez+Z2YkpqTekpaiQfkw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/ldapjs/-/ldapjs-1.0.3.tgz", + "integrity": "sha512-FSj24s1WsFEfOy8taIKp2DokSZfFkjWYZb88AS5eDj3WTocZ+4DnHjhzrXEs048WQ5mfOLJXMOAnc0kSnHh5Lw==", "dev": true, "requires": { + "@types/events": "1.2.0", "@types/node": "8.0.46" } }, @@ -140,9 +150,9 @@ "dev": true }, "@types/mocha": { - "version": "2.2.43", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-2.2.43.tgz", - "integrity": "sha512-xNlAmH+lRJdUMXClMTI9Y0pRqIojdxfm7DHsIxoB2iTzu3fnPmSMEN8SsSx0cdwV36d02PWCWaDUoZPDSln+xw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.0.0.tgz", + "integrity": "sha512-ZS0vBV7Jn5Z/Q4T3VXauEKMDCV8nWOtJJg90OsDylkYJiQwcWtKuLzohWzrthBkerUF7DLMmJcwOPEP0i/AOXw==", "dev": true }, "@types/mockdate": { @@ -152,12 +162,13 @@ "dev": true }, "@types/mongodb": { - "version": "2.2.14", - "resolved": "https://registry.npmjs.org/@types/mongodb/-/mongodb-2.2.14.tgz", - "integrity": "sha512-KCywKYsfsoSMbdol3L5V22cs6mIPmBnUogY5rI+fxvUedp80K2XWigV4d7/5JGCQJr9hc9GS7vj+reltQeR0IA==", + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@types/mongodb/-/mongodb-3.0.9.tgz", + "integrity": "sha512-7UtRc9WWgolGCY5dUMsz6c/gwZunSPNoaOdtCBjSYWzYknSt4gU6deAHFez5T3Mju+WWVHg27D10khsaagtIAg==", "dev": true, "requires": { - "@types/bson": "1.0.4", + "@types/bson": "1.0.7", + "@types/events": "1.2.0", "@types/node": "8.0.46" } }, @@ -174,16 +185,13 @@ "dev": true }, "@types/nodemailer": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@types/nodemailer/-/nodemailer-3.1.4.tgz", - "integrity": "sha512-xWL0t8D0ddcUnzTjluYhn17Y0QgW4qUu7roNu8ZK9oXdBroT7jj10T58CQvH5QgDhRw2iLnXQH179zLG4litYw==", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@types/nodemailer/-/nodemailer-4.6.0.tgz", + "integrity": "sha512-DWG172izmWXfShUm2Lm6nVght5TxDI1cx2cKiGPeu2f66yTnn0QY7WhC9OSybdPoxGu7UbRXNuIkIzB+NE648A==", "dev": true, "requires": { - "@types/node": "8.0.46", - "@types/nodemailer-direct-transport": "1.0.31", - "@types/nodemailer-ses-transport": "3.1.3", - "@types/nodemailer-smtp-transport": "2.7.4", - "aws-sdk": "2.138.0" + "@types/events": "1.2.0", + "@types/node": "8.0.46" } }, "@types/nodemailer-direct-transport": { @@ -192,17 +200,47 @@ "integrity": "sha512-LDFL7X58v4som2QnodajLgltFpCbF4JAqlg/Iy4SNbrnfBraJVU/ySh7gvd22Wc6V6CSpuG3SjZolJfNf7Z3bA==", "dev": true, "requires": { - "@types/nodemailer": "3.1.4" + "@types/nodemailer": "3.1.5" + }, + "dependencies": { + "@types/nodemailer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/@types/nodemailer/-/nodemailer-3.1.5.tgz", + "integrity": "sha512-d8GSTD/5kEf7fsghVEyU9vqRVGu+Hpmf/z+x+7+vXGvbK7kQoorulvuOX4ozPmGsJCq7oBIdHw5gFIRDvSvdag==", + "dev": true, + "requires": { + "@types/node": "8.0.46", + "@types/nodemailer-direct-transport": "1.0.31", + "@types/nodemailer-ses-transport": "3.1.4", + "@types/nodemailer-smtp-transport": "2.7.4", + "aws-sdk": "2.213.1" + } + } } }, "@types/nodemailer-ses-transport": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@types/nodemailer-ses-transport/-/nodemailer-ses-transport-3.1.3.tgz", - "integrity": "sha512-ss880sS2d2fISXjG0g8wuW8Dq1KpfIk6ye+HjddTKBdpxascFymVf5jsCCWB8htyTvTRzQXNL9BnLwRpMXTbCw==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/nodemailer-ses-transport/-/nodemailer-ses-transport-3.1.4.tgz", + "integrity": "sha512-gWoykP57qYQ60YDD0vFPGDYN/Waq+aKI4k2UBrf5nc87+wlg71eAbb4HwDdZeANLR/wdWkAWdUjz1XgGcpUZNA==", "dev": true, "requires": { - "@types/nodemailer": "3.1.4", - "aws-sdk": "2.138.0" + "@types/nodemailer": "3.1.5", + "aws-sdk": "2.213.1" + }, + "dependencies": { + "@types/nodemailer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/@types/nodemailer/-/nodemailer-3.1.5.tgz", + "integrity": "sha512-d8GSTD/5kEf7fsghVEyU9vqRVGu+Hpmf/z+x+7+vXGvbK7kQoorulvuOX4ozPmGsJCq7oBIdHw5gFIRDvSvdag==", + "dev": true, + "requires": { + "@types/node": "8.0.46", + "@types/nodemailer-direct-transport": "1.0.31", + "@types/nodemailer-ses-transport": "3.1.4", + "@types/nodemailer-smtp-transport": "2.7.4", + "aws-sdk": "2.213.1" + } + } } }, "@types/nodemailer-smtp-transport": { @@ -212,7 +250,22 @@ "dev": true, "requires": { "@types/node": "8.0.46", - "@types/nodemailer": "3.1.4" + "@types/nodemailer": "3.1.5" + }, + "dependencies": { + "@types/nodemailer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/@types/nodemailer/-/nodemailer-3.1.5.tgz", + "integrity": "sha512-d8GSTD/5kEf7fsghVEyU9vqRVGu+Hpmf/z+x+7+vXGvbK7kQoorulvuOX4ozPmGsJCq7oBIdHw5gFIRDvSvdag==", + "dev": true, + "requires": { + "@types/node": "8.0.46", + "@types/nodemailer-direct-transport": "1.0.31", + "@types/nodemailer-ses-transport": "3.1.4", + "@types/nodemailer-smtp-transport": "2.7.4", + "aws-sdk": "2.213.1" + } + } } }, "@types/object-path": { @@ -228,9 +281,9 @@ "dev": true }, "@types/query-string": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@types/query-string/-/query-string-4.3.1.tgz", - "integrity": "sha1-WepcddQlgXNwFYeJqk9hl+Wr2Yc=", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/query-string/-/query-string-5.1.0.tgz", + "integrity": "sha512-9/sJK+T04pNq7uwReR0CLxqXj1dhxiTapZ1tIxA0trEsT6FRS0bz09YMcMb7tsVBTm4RJ0NEBYGsAjoEmqoFXg==", "dev": true }, "@types/randomstring": { @@ -285,9 +338,9 @@ } }, "@types/sinon": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-2.3.7.tgz", - "integrity": "sha512-w+LjztaZbgZWgt/y/VMP5BUAWLtSyoIJhXyW279hehLPyubDoBNwvhcj3WaSptcekuKYeTCVxrq60rdLc6ImJA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-4.3.0.tgz", + "integrity": "sha512-rvgY5bK5ZBRJPuJF0vJI+NC2gt+lakobTa8pnDS/oRH2gk/tooeDEel8piZA8Ng6pxq0A5QGzilIFSyashP6jw==", "dev": true }, "@types/tmp": { @@ -296,6 +349,12 @@ "integrity": "sha1-EHPEvIJHVK49EM+riKsCN7qWTk0=", "dev": true }, + "@types/tough-cookie": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-2.3.2.tgz", + "integrity": "sha512-vOVmaruQG5EatOU/jM6yU2uCp3Lz6mK1P5Ztu4iJjfM4SVHU9XYktPUQtKlIXuahqXHdEyUarMrBEwg5Cwu+bA==", + "dev": true + }, "@types/winston": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/@types/winston/-/winston-2.3.6.tgz", @@ -312,9 +371,9 @@ "dev": true }, "JSONStream": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.1.tgz", - "integrity": "sha1-cH92HgHa6eFvG8+TcDt4xwlmV5o=", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz", + "integrity": "sha1-wQI3G27Dp887hHygDCC7D85Mbeo=", "dev": true, "requires": { "jsonparse": "1.3.1", @@ -368,15 +427,32 @@ } } }, - "ajv": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.2.4.tgz", - "integrity": "sha1-Pa+ai2ciEpn9ro2C0RftjmyAJEs=", + "acorn-node": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.3.0.tgz", + "integrity": "sha512-efP54n3d1aLfjL2UMdaXa6DsswwzJeI5rqhbFvXMrKiJ6eJFpf+7R0zN7t8IC+XKn2YOAFAv6xbBNgHUkoHWLw==", + "dev": true, "requires": { - "co": "4.6.0", - "fast-deep-equal": "1.0.0", - "json-schema-traverse": "0.3.1", - "json-stable-stringify": "1.0.1" + "acorn": "5.5.3", + "xtend": "4.0.1" + }, + "dependencies": { + "acorn": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz", + "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==", + "dev": true + } + } + }, + "ajv": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.3.0.tgz", + "integrity": "sha1-FlCkERTvAFdMrBC4Ay2PTBSBLac=", + "requires": { + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" } }, "align-text": { @@ -589,9 +665,9 @@ "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" }, "asn1.js": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.9.2.tgz", - "integrity": "sha512-b/OsSjvWEo8Pi8H0zsDd2P6Uqo2TK2pH8gNLSJtNLM2Db0v2QaAZ0pBQJXVjAn4gBuugeVDr7s63ZogpUIwWDg==", + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", "dev": true, "requires": { "bn.js": "4.11.8", @@ -614,9 +690,9 @@ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" }, "assertion-error-formatter": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/assertion-error-formatter/-/assertion-error-formatter-2.0.0.tgz", - "integrity": "sha1-F6JCicyEQIibVDGObRGH6+4tVJQ=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error-formatter/-/assertion-error-formatter-2.0.1.tgz", + "integrity": "sha512-cjC3jUCh9spkroKue5PDSKH5RFQ/KNuZJhk3GwHYmB/8qqETxLOmMdLH+ohi/VukNzxDlMvIe7zScvLoOdhb6Q==", "dev": true, "requires": { "diff": "3.4.0", @@ -664,14 +740,14 @@ "dev": true }, "aws-sdk": { - "version": "2.138.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.138.0.tgz", - "integrity": "sha1-rLkjEytR+v6KRkqnV/ZdYawwvXc=", + "version": "2.213.1", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.213.1.tgz", + "integrity": "sha1-vL/fH9dDmpSL9TxGvZDJe0pkkls=", "dev": true, "requires": { "buffer": "4.9.1", - "crypto-browserify": "1.0.9", "events": "1.1.1", + "ieee754": "1.1.8", "jmespath": "0.15.0", "querystring": "0.2.0", "sax": "1.2.1", @@ -679,6 +755,66 @@ "uuid": "3.1.0", "xml2js": "0.4.17", "xmlbuilder": "4.2.1" + }, + "dependencies": { + "buffer": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "dev": true, + "requires": { + "base64-js": "1.2.3", + "ieee754": "1.1.8", + "isarray": "1.0.0" + } + }, + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "dev": true + }, + "ieee754": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", + "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=", + "dev": true + }, + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + }, + "url": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", + "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", + "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "xml2js": { + "version": "0.4.17", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.17.tgz", + "integrity": "sha1-F76T6q4/O3eTWceVtBlwWogX6Gg=", + "dev": true, + "requires": { + "sax": "1.2.1", + "xmlbuilder": "4.2.1" + } + }, + "xmlbuilder": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-4.2.1.tgz", + "integrity": "sha1-qlijBBoGb5DqoWwvU4n/GfP0YaU=", + "dev": true, + "requires": { + "lodash": "4.17.4" + } + } } }, "aws-sign2": { @@ -741,7 +877,7 @@ "dev": true, "requires": { "core-js": "2.5.1", - "regenerator-runtime": "0.11.0" + "regenerator-runtime": "0.11.1" } }, "backoff": { @@ -768,9 +904,9 @@ "integrity": "sha1-e0F0wvlESXU7EcJlHAg9qEGnsIQ=" }, "base64-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz", - "integrity": "sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.3.tgz", + "integrity": "sha512-MsAhsUW1GxCdgYSO6tAfZrNapmUKk7mWx/k5mFY/A1gBtkaCaNapTg+FExCw1r9yeaZhqx/xPg43xgTFH6KL5w==", "dev": true }, "bcrypt-pbkdf": { @@ -783,6 +919,12 @@ "tweetnacl": "0.14.5" } }, + "becke-ch--regex--s0-0-v1--base--pl--lib": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/becke-ch--regex--s0-0-v1--base--pl--lib/-/becke-ch--regex--s0-0-v1--base--pl--lib-1.2.0.tgz", + "integrity": "sha1-LnPp0h8sLm9aVFQEVjbwq5PkYTA=", + "dev": true + }, "binary-extensions": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.10.0.tgz", @@ -835,9 +977,9 @@ } }, "bootstrap": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-3.3.7.tgz", - "integrity": "sha1-WjiTlFSfIzMIdaOxUGVldPip63E=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.0.0.tgz", + "integrity": "sha512-gulJE5dGFo6Q61V/whS6VM4WIyrlydXfCgkE+Gxe5hjrJ8rXLLZlALq7zq2RPhOc45PSwQpJkrTnc2KgD6cvmA==", "dev": true }, "brace-expansion": { @@ -867,16 +1009,17 @@ "dev": true }, "browser-pack": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.0.2.tgz", - "integrity": "sha1-+GzWzvT1MAyOY+B6TVEvZfv/RTE=", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.0.4.tgz", + "integrity": "sha512-Q4Rvn7P6ObyWfc4stqLWHtG1MJ8vVtjgT24Zbu+8UTzxYuZouqZsmNRRTFVMY/Ux0eIKv1d+JWzsInTX+fdHPQ==", "dev": true, "requires": { - "JSONStream": "1.3.1", - "combine-source-map": "0.7.2", + "JSONStream": "1.3.2", + "combine-source-map": "0.8.0", "defined": "1.0.0", + "safe-buffer": "5.1.1", "through2": "2.0.3", - "umd": "3.0.1" + "umd": "3.0.3" }, "dependencies": { "through2": { @@ -909,46 +1052,47 @@ } }, "browser-stdout": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", - "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, "browserify": { - "version": "14.5.0", - "resolved": "https://registry.npmjs.org/browserify/-/browserify-14.5.0.tgz", - "integrity": "sha512-gKfOsNQv/toWz+60nSPfYzuwSEdzvV2WdxrVPUbPD/qui44rAkB3t3muNtmmGYHqrG56FGwX9SUEQmzNLAeS7g==", + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/browserify/-/browserify-16.1.1.tgz", + "integrity": "sha512-iSH21jK0+IApV8YHOfmGt1qsGd74oflQ1Ko/28JOkWLFNBngAQfKb6WYIJ9CufH8vycqKX1sYU3y7ZrVhwevAg==", "dev": true, "requires": { - "JSONStream": "1.3.1", + "JSONStream": "1.3.2", "assert": "1.4.1", - "browser-pack": "6.0.2", + "browser-pack": "6.0.4", "browser-resolve": "1.11.2", "browserify-zlib": "0.2.0", - "buffer": "5.0.8", + "buffer": "5.1.0", "cached-path-relative": "1.0.1", - "concat-stream": "1.5.2", + "concat-stream": "1.6.2", "console-browserify": "1.1.0", "constants-browserify": "1.0.0", - "crypto-browserify": "3.11.1", + "crypto-browserify": "3.12.0", "defined": "1.0.0", "deps-sort": "2.0.0", - "domain-browser": "1.1.7", + "domain-browser": "1.2.0", "duplexer2": "0.1.4", - "events": "1.1.1", + "events": "2.0.0", "glob": "7.1.2", "has": "1.0.1", "htmlescape": "1.1.1", "https-browserify": "1.0.0", "inherits": "2.0.3", - "insert-module-globals": "7.0.1", - "labeled-stream-splicer": "2.0.0", - "module-deps": "4.1.1", + "insert-module-globals": "7.0.4", + "labeled-stream-splicer": "2.0.1", + "mkdirp": "0.5.1", + "module-deps": "6.0.0", "os-browserify": "0.3.0", "parents": "1.0.1", "path-browserify": "0.0.0", "process": "0.11.10", - "punycode": "1.3.2", + "punycode": "1.4.1", "querystring-es3": "0.2.1", "read-only-stream": "2.0.0", "readable-stream": "2.3.3", @@ -956,47 +1100,19 @@ "shasum": "1.0.2", "shell-quote": "1.6.1", "stream-browserify": "2.0.1", - "stream-http": "2.7.2", + "stream-http": "2.8.1", "string_decoder": "1.0.3", "subarg": "1.0.0", - "syntax-error": "1.3.0", + "syntax-error": "1.4.0", "through2": "2.0.3", "timers-browserify": "1.4.2", - "tty-browserify": "0.0.0", + "tty-browserify": "0.0.1", "url": "0.11.0", "util": "0.10.3", "vm-browserify": "0.0.4", "xtend": "4.0.1" }, "dependencies": { - "buffer": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.0.8.tgz", - "integrity": "sha512-xXvjQhVNz50v2nPeoOsNqWCLGfiv4ji/gXZM28jnVwdLJxH4mFyqgqCKfaK9zf1KUbG6zTkjLOy7ou+jSMarGA==", - "dev": true, - "requires": { - "base64-js": "1.2.1", - "ieee754": "1.1.8" - } - }, - "crypto-browserify": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.11.1.tgz", - "integrity": "sha512-Na7ZlwCOqoaW5RwUK1WpXws2kv8mNhWdTlzob0UXulk6G9BDbyiJaGTYBIX61Ozn9l1EPPJpICZb4DaOpT9NlQ==", - "dev": true, - "requires": { - "browserify-cipher": "1.0.0", - "browserify-sign": "4.0.4", - "create-ecdh": "4.0.0", - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "diffie-hellman": "5.0.2", - "inherits": "2.0.3", - "pbkdf2": "3.0.14", - "public-encrypt": "4.0.0", - "randombytes": "2.0.5" - } - }, "glob": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", @@ -1020,16 +1136,6 @@ "readable-stream": "2.3.3", "xtend": "4.0.1" } - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dev": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } } } }, @@ -1145,7 +1251,7 @@ "dev": true, "requires": { "bn.js": "4.11.8", - "randombytes": "2.0.5" + "randombytes": "2.0.6" } }, "browserify-sign": { @@ -1173,25 +1279,25 @@ } }, "bson": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/bson/-/bson-1.0.4.tgz", - "integrity": "sha1-k8ENOeqltYQVy8QFLz5T5WKwtyw=" + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/bson/-/bson-1.0.6.tgz", + "integrity": "sha512-D8zmlb46xfuK2gGvKmUjIklQEouN2nQ0LEHHeZ/NoHM2LDiMk2EYzZ5Ntw/Urk+bgMDosOZxaRzXxvhI5TcAVQ==" }, "buffer": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", - "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.1.0.tgz", + "integrity": "sha512-YkIRgwsZwJWTnyQrsBTWefizHh+8GYj3kbL1BTiAQ/9pwpino0G7B2gp5tx/FUBqUlvtxV85KNR3mwfAtv15Yw==", "dev": true, "requires": { - "base64-js": "1.2.1", - "ieee754": "1.1.8", - "isarray": "1.0.0" + "base64-js": "1.2.3", + "ieee754": "1.1.10" } }, - "buffer-shims": { + "buffer-from": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", - "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=" + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.0.0.tgz", + "integrity": "sha512-83apNb8KK0Se60UE1+4Ukbe3HbfELJ6UlI4ldtOGs7So4KD26orJM8hIY9lxdzP+UpItH1Yh/Y8GUvNFWFFRxA==", + "dev": true }, "buffer-xor": { "version": "1.0.3", @@ -1216,21 +1322,10 @@ "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.12.tgz", "integrity": "sha1-8VDw9nSKvdcq6uhPBEA74u8RN5c=", "requires": { - "dtrace-provider": "0.8.5", - "moment": "2.19.1", + "dtrace-provider": "0.8.6", + "moment": "2.21.0", "mv": "2.1.1", - "safe-json-stringify": "1.0.4" - }, - "dependencies": { - "dtrace-provider": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.5.tgz", - "integrity": "sha1-mOu6Ihr6xG4cOf02hY2Pk2dSS5I=", - "optional": true, - "requires": { - "nan": "2.7.0" - } - } + "safe-json-stringify": "1.1.0" } }, "bytes": { @@ -1387,7 +1482,8 @@ "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true }, "code-point-at": { "version": "1.1.0", @@ -1422,9 +1518,9 @@ "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=" }, "combine-source-map": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.7.2.tgz", - "integrity": "sha1-CHAxKFazB6h8xKxIbzqaYq7MwJ4=", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", + "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=", "dev": true, "requires": { "convert-source-map": "1.1.3", @@ -1464,36 +1560,15 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "concat-stream": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz", - "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, "requires": { + "buffer-from": "1.0.0", "inherits": "2.0.3", - "readable-stream": "2.0.6", + "readable-stream": "2.3.3", "typedarray": "0.0.6" - }, - "dependencies": { - "readable-stream": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", - "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "0.10.31", - "util-deprecate": "1.0.2" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - } } }, "connect-redis": { @@ -1613,7 +1688,7 @@ "cipher-base": "1.0.4", "inherits": "2.0.3", "ripemd160": "2.0.1", - "sha.js": "2.4.9" + "sha.js": "2.4.11" } }, "create-hmac": { @@ -1627,7 +1702,7 @@ "inherits": "2.0.3", "ripemd160": "2.0.1", "safe-buffer": "5.1.1", - "sha.js": "2.4.9" + "sha.js": "2.4.11" } }, "cross-spawn": { @@ -1636,7 +1711,7 @@ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "dev": true, "requires": { - "lru-cache": "4.1.1", + "lru-cache": "4.1.2", "shebang-command": "1.2.0", "which": "1.2.14" } @@ -1671,10 +1746,23 @@ } }, "crypto-browserify": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-1.0.9.tgz", - "integrity": "sha1-zFRJaF37hesRyYKKzHy4erW7/MA=", - "dev": true + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "requires": { + "browserify-cipher": "1.0.0", + "browserify-sign": "4.0.4", + "create-ecdh": "4.0.0", + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "diffie-hellman": "5.0.2", + "inherits": "2.0.3", + "pbkdf2": "3.0.14", + "public-encrypt": "4.0.0", + "randombytes": "2.0.6", + "randomfill": "1.0.4" + } }, "cssom": { "version": "0.3.2", @@ -1692,22 +1780,23 @@ } }, "cucumber": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/cucumber/-/cucumber-2.3.1.tgz", - "integrity": "sha1-N5GlH/0MYUYq1X/bjtER1VtRzeM=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cucumber/-/cucumber-4.0.0.tgz", + "integrity": "sha512-MoUISUsbXWBnq6tuJnq4P3NNaXAe5hltUSnfmeWzly4JnfsqZwJZx8yj99kpzIelqbM/o4MWwbJhEbO/JuXuhg==", "dev": true, "requires": { - "assertion-error-formatter": "2.0.0", + "assertion-error-formatter": "2.0.1", "babel-runtime": "6.26.0", "bluebird": "3.5.0", "cli-table": "0.3.1", - "colors": "1.1.2", - "commander": "2.11.0", - "cucumber-expressions": "3.0.0", - "cucumber-tag-expressions": "1.0.1", + "colors": "1.2.1", + "commander": "2.15.1", + "cucumber-expressions": "5.0.13", + "cucumber-tag-expressions": "1.1.1", "duration": "0.2.0", + "escape-string-regexp": "1.0.5", "figures": "2.0.0", - "gherkin": "4.1.3", + "gherkin": "5.0.0", "glob": "7.1.2", "indent-string": "3.2.0", "is-generator": "1.0.3", @@ -1716,24 +1805,24 @@ "mz": "2.7.0", "progress": "2.0.0", "resolve": "1.4.0", - "stack-chain": "1.3.7", + "stack-chain": "2.0.0", "stacktrace-js": "2.0.0", "string-argv": "0.0.2", - "upper-case-first": "1.1.2", + "title-case": "2.1.1", "util-arity": "1.1.0", "verror": "1.10.0" }, "dependencies": { "colors": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.2.1.tgz", + "integrity": "sha512-s8+wktIuDSLffCywiwSxQOMqtPxML11a/dtHE17tMn4B1MSWw/C22EKf7M2KGUBcDaVFEGT+S8N02geDXeuNKg==", "dev": true }, "commander": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", - "integrity": "sha1-FXFS/R56bI2YpbcVzzdt+SgARWM=", + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", "dev": true }, "glob": { @@ -1753,15 +1842,18 @@ } }, "cucumber-expressions": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cucumber-expressions/-/cucumber-expressions-3.0.0.tgz", - "integrity": "sha1-TPQkgT2uOWzJ2rcUuBBLRZvvwyw=", - "dev": true + "version": "5.0.13", + "resolved": "https://registry.npmjs.org/cucumber-expressions/-/cucumber-expressions-5.0.13.tgz", + "integrity": "sha1-8XRZfa5tLwEhKUrC6mVEMknPFYc=", + "dev": true, + "requires": { + "becke-ch--regex--s0-0-v1--base--pl--lib": "1.2.0" + } }, "cucumber-tag-expressions": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cucumber-tag-expressions/-/cucumber-tag-expressions-1.0.1.tgz", - "integrity": "sha1-1tPEMYCgP1+0/JV/4Tgt3OXLmsg=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cucumber-tag-expressions/-/cucumber-tag-expressions-1.1.1.tgz", + "integrity": "sha1-f1x7cACbwrZmWRv+ZIVFeL7e6Fo=", "dev": true }, "currently-unhandled": { @@ -1784,7 +1876,7 @@ "integrity": "sha1-2hhMU10Y2O57oqoim5FACfrhEwk=", "dev": true, "requires": { - "es5-ext": "0.10.35" + "es5-ext": "0.10.41" } }, "dashdash": { @@ -1824,6 +1916,12 @@ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" }, + "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=", + "dev": true + }, "deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", @@ -1877,7 +1975,7 @@ "integrity": "sha1-CRckkC6EZYJg65EHSMzNGvbiH7U=", "dev": true, "requires": { - "JSONStream": "1.3.1", + "JSONStream": "1.3.2", "shasum": "1.0.2", "subarg": "1.0.0", "through2": "2.0.3" @@ -1911,19 +2009,20 @@ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, "detective": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/detective/-/detective-4.5.0.tgz", - "integrity": "sha1-blqMaybmx6JUsca210kNmOyR7dE=", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.1.0.tgz", + "integrity": "sha512-TFHMqfOvxlgrfVzTEkNBSh9SvSNX/HfF4OFI2QFGCyPm02EsyILqnUeb5P6q7JZ3SFNTBL5t2sePRgrN4epUWQ==", "dev": true, "requires": { - "acorn": "4.0.13", - "defined": "1.0.0" + "acorn-node": "1.3.0", + "defined": "1.0.0", + "minimist": "1.2.0" }, "dependencies": { - "acorn": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", - "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true } } @@ -1948,7 +2047,7 @@ "requires": { "bn.js": "4.11.8", "miller-rabin": "4.0.1", - "randombytes": "2.0.5" + "randombytes": "2.0.6" } }, "doctypes": { @@ -1957,9 +2056,9 @@ "integrity": "sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk=" }, "domain-browser": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", - "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", "dev": true }, "domexception": { @@ -1974,9 +2073,9 @@ "integrity": "sha1-ED01J/0xUo9AGIEwyEHv3XgmTlw=" }, "dtrace-provider": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.7.1.tgz", - "integrity": "sha1-wGswjy8Q1dWDiuycVx5dWI3HHQQ=", + "version": "0.8.6", + "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.6.tgz", + "integrity": "sha1-QooiOv4DQl0s1tY0f99AxmkDVj0=", "optional": true, "requires": { "nan": "2.7.0" @@ -2004,7 +2103,7 @@ "dev": true, "requires": { "d": "0.1.1", - "es5-ext": "0.10.35" + "es5-ext": "0.10.41" } }, "eastasianwidth": { @@ -2115,13 +2214,14 @@ } }, "es5-ext": { - "version": "0.10.35", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.35.tgz", - "integrity": "sha1-GO6FjOajxFx9eekcFfzKnsVoSU8=", + "version": "0.10.41", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.41.tgz", + "integrity": "sha512-MYK02wXfwTMie5TEJWPolgOsXEmz7wKCQaGzgmRjZOoV6VLG8I5dSv2bn6AOClXhK64gnSQTQ9W9MKvx87J4gw==", "dev": true, "requires": { "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1" + "es6-symbol": "3.1.1", + "next-tick": "1.0.0" } }, "es6-iterator": { @@ -2131,7 +2231,7 @@ "dev": true, "requires": { "d": "1.0.0", - "es5-ext": "0.10.35", + "es5-ext": "0.10.41", "es6-symbol": "3.1.1" }, "dependencies": { @@ -2141,15 +2241,16 @@ "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", "dev": true, "requires": { - "es5-ext": "0.10.35" + "es5-ext": "0.10.41" } } } }, "es6-promise": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.2.1.tgz", - "integrity": "sha1-7FYjOGgDKQkgcXDDlEjiREndH8Q=" + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.0.2.tgz", + "integrity": "sha1-AQ1YWEI6XxGJeWZfRkhqlcbuK7Y=", + "dev": true }, "es6-symbol": { "version": "3.1.1", @@ -2158,7 +2259,7 @@ "dev": true, "requires": { "d": "1.0.0", - "es5-ext": "0.10.35" + "es5-ext": "0.10.41" }, "dependencies": { "d": { @@ -2167,7 +2268,7 @@ "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", "dev": true, "requires": { - "es5-ext": "0.10.35" + "es5-ext": "0.10.41" } } } @@ -2257,9 +2358,9 @@ "dev": true }, "events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/events/-/events-2.0.0.tgz", + "integrity": "sha512-r/M5YkNg9zwI8QbSf7tsDWWJvO3PGwZXyG7GpFAxtMASnHL2eblFd7iHiGPtyGKKFPZ59S63NeX10Ws6WqGDcg==", "dev": true }, "evp_bytestokey": { @@ -2415,7 +2516,12 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", - "dev": true + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.3", + "typedarray": "0.0.6" + } }, "debug": { "version": "2.2.0", @@ -2430,7 +2536,10 @@ "version": "0.5.0", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz", "integrity": "sha1-HXMHam35hs2TROFecfzAWkyavxI=", - "dev": true + "dev": true, + "requires": { + "minimist": "0.0.8" + } }, "ms": { "version": "0.7.1", @@ -2469,9 +2578,14 @@ } }, "fast-deep-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", - "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" }, "fast-levenshtein": { "version": "2.0.6", @@ -2716,9 +2830,9 @@ } }, "gherkin": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/gherkin/-/gherkin-4.1.3.tgz", - "integrity": "sha1-EWh9uTl235djMSWmsiKKGkv9+iQ=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/gherkin/-/gherkin-5.0.0.tgz", + "integrity": "sha1-lt70EZjsOQgli1Ea909lWidk0qE=", "dev": true }, "glob": { @@ -2826,9 +2940,9 @@ "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" }, "growl": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz", - "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=", + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz", + "integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==", "dev": true }, "grunt": { @@ -2910,6 +3024,12 @@ "watchify": "3.9.0" }, "dependencies": { + "acorn": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz", + "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==", + "dev": true + }, "async": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/async/-/async-2.5.0.tgz", @@ -2919,6 +3039,116 @@ "lodash": "4.17.4" } }, + "browserify": { + "version": "14.5.0", + "resolved": "https://registry.npmjs.org/browserify/-/browserify-14.5.0.tgz", + "integrity": "sha512-gKfOsNQv/toWz+60nSPfYzuwSEdzvV2WdxrVPUbPD/qui44rAkB3t3muNtmmGYHqrG56FGwX9SUEQmzNLAeS7g==", + "dev": true, + "requires": { + "JSONStream": "1.3.2", + "assert": "1.4.1", + "browser-pack": "6.0.4", + "browser-resolve": "1.11.2", + "browserify-zlib": "0.2.0", + "buffer": "5.1.0", + "cached-path-relative": "1.0.1", + "concat-stream": "1.5.2", + "console-browserify": "1.1.0", + "constants-browserify": "1.0.0", + "crypto-browserify": "3.12.0", + "defined": "1.0.0", + "deps-sort": "2.0.0", + "domain-browser": "1.1.7", + "duplexer2": "0.1.4", + "events": "1.1.1", + "glob": "7.1.2", + "has": "1.0.1", + "htmlescape": "1.1.1", + "https-browserify": "1.0.0", + "inherits": "2.0.3", + "insert-module-globals": "7.0.4", + "labeled-stream-splicer": "2.0.1", + "module-deps": "4.1.1", + "os-browserify": "0.3.0", + "parents": "1.0.1", + "path-browserify": "0.0.0", + "process": "0.11.10", + "punycode": "1.4.1", + "querystring-es3": "0.2.1", + "read-only-stream": "2.0.0", + "readable-stream": "2.3.3", + "resolve": "1.4.0", + "shasum": "1.0.2", + "shell-quote": "1.6.1", + "stream-browserify": "2.0.1", + "stream-http": "2.8.1", + "string_decoder": "1.0.3", + "subarg": "1.0.0", + "syntax-error": "1.4.0", + "through2": "2.0.3", + "timers-browserify": "1.4.2", + "tty-browserify": "0.0.1", + "url": "0.11.0", + "util": "0.10.3", + "vm-browserify": "0.0.4", + "xtend": "4.0.1" + } + }, + "concat-stream": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz", + "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.0.6", + "typedarray": "0.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", + "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "0.10.31", + "util-deprecate": "1.0.2" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "detective": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/detective/-/detective-4.7.1.tgz", + "integrity": "sha512-H6PmeeUcZloWtdt4DAkFyzFL94arpHr3NOwwmVILFiy+9Qd4JTxxXrzfyGk/lmct2qVGBwTSwSXagqu2BxmWig==", + "dev": true, + "requires": { + "acorn": "5.5.3", + "defined": "1.0.0" + } + }, + "domain-browser": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", + "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=", + "dev": true + }, + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "dev": true + }, "glob": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", @@ -2932,6 +3162,39 @@ "once": "1.4.0", "path-is-absolute": "1.0.1" } + }, + "module-deps": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-4.1.1.tgz", + "integrity": "sha1-IyFYM/HaE/1gbMuAh7RIUty4If0=", + "dev": true, + "requires": { + "JSONStream": "1.3.2", + "browser-resolve": "1.11.2", + "cached-path-relative": "1.0.1", + "concat-stream": "1.5.2", + "defined": "1.0.0", + "detective": "4.7.1", + "duplexer2": "0.1.4", + "inherits": "2.0.3", + "parents": "1.0.1", + "readable-stream": "2.3.3", + "resolve": "1.4.0", + "stream-combiner2": "1.1.1", + "subarg": "1.0.0", + "through2": "2.0.3", + "xtend": "4.0.1" + } + }, + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true, + "requires": { + "readable-stream": "2.3.3", + "xtend": "4.0.1" + } } } }, @@ -3230,21 +3493,14 @@ } }, "grunt-run": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/grunt-run/-/grunt-run-0.6.0.tgz", - "integrity": "sha1-bcj05ZKgyQD7k9YI1zKGRlAi1kg=", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/grunt-run/-/grunt-run-0.8.0.tgz", + "integrity": "sha512-yW2uTYBGvkDUK6+lWfXObE5gm8Kbjs7RrUh4NFqR0pOZ+YU/fR7rZPgTIn1f6hYpKXc/pCJSgGCtZIipLXVedw==", "dev": true, "requires": { - "lodash": "3.10.1", "strip-ansi": "3.0.1" }, "dependencies": { - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", - "dev": true - }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -3306,8 +3562,22 @@ "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", "dev": true, "requires": { - "ajv": "5.2.4", + "ajv": "5.5.2", "har-schema": "2.0.0" + }, + "dependencies": { + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "dev": true, + "requires": { + "co": "4.6.0", + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" + } + } } }, "has": { @@ -3393,15 +3663,6 @@ "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==", "dev": true }, - "homedir-polyfill": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", - "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", - "dev": true, - "requires": { - "parse-passwd": "1.0.0" - } - }, "hooker": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", @@ -3457,6 +3718,27 @@ "sshpk": "1.13.1" } }, + "httpntlm": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/httpntlm/-/httpntlm-1.6.1.tgz", + "integrity": "sha1-rQFScUOi6Hc8+uapb1hla7UqNLI=", + "requires": { + "httpreq": "0.4.24", + "underscore": "1.7.0" + }, + "dependencies": { + "underscore": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", + "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=" + } + } + }, + "httpreq": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/httpreq/-/httpreq-0.4.24.tgz", + "integrity": "sha1-QzX/2CzZaWaKOUZckprGHWOTYn8=" + }, "https-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", @@ -3469,9 +3751,9 @@ "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" }, "ieee754": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", - "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=", + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.10.tgz", + "integrity": "sha512-byWFX8OyW/qeVxcY21r6Ncxl0ZYHgnf0cPup2h34eHXrCJbOp7IuqnJ4Q0omfyWl6Z++BTI6bByf31pZt7iRLg==", "dev": true }, "immediate": { @@ -3538,14 +3820,14 @@ } }, "insert-module-globals": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.0.1.tgz", - "integrity": "sha1-wDv04BywhtW15azorQr+eInWOMM=", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.0.4.tgz", + "integrity": "sha512-Z/sfx2KOKyHQ3U4X3fnXn4Ms1Opa9pGvEfm8j6xKHE6oVqc1dMwVgBVxmj3yIrMtWTl8HYoy12rkhrR8MYym6A==", "dev": true, "requires": { - "JSONStream": "1.3.1", + "JSONStream": "1.3.2", "combine-source-map": "0.7.2", - "concat-stream": "1.5.2", + "concat-stream": "1.6.2", "is-buffer": "1.1.5", "lexical-scope": "1.2.0", "process": "0.11.10", @@ -3553,6 +3835,24 @@ "xtend": "4.0.1" }, "dependencies": { + "combine-source-map": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.7.2.tgz", + "integrity": "sha1-CHAxKFazB6h8xKxIbzqaYq7MwJ4=", + "dev": true, + "requires": { + "convert-source-map": "1.1.3", + "inline-source-map": "0.6.2", + "lodash.memoize": "3.0.4", + "source-map": "0.5.7" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, "through2": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", @@ -3658,13 +3958,10 @@ } }, "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true }, "is-generator": { "version": "1.0.3", @@ -3766,7 +4063,8 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true }, "isexe": { "version": "2.0.0", @@ -4009,9 +4307,10 @@ "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" }, "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz", + "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=", + "dev": true, "requires": { "jsonify": "0.0.0" } @@ -4022,12 +4321,6 @@ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", "dev": true }, - "json3": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", - "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", - "dev": true - }, "jsonfile": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", @@ -4040,7 +4333,8 @@ "jsonify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true }, "jsonparse": { "version": "1.3.1", @@ -4088,9 +4382,9 @@ } }, "jszip": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.1.4.tgz", - "integrity": "sha1-/DI/5BuxcwNI0g3QIqpNi1fLvPk=", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.1.5.tgz", + "integrity": "sha512-5W8NUaFRFRqTOL7ZDDrx5qWHJyBXy6velVudIzQUSoqAAYqzSh2Z7/m0Rf1QbmQJccegD0r+YZxBjzqoBiEeJQ==", "dev": true, "requires": { "core-js": "2.3.0", @@ -4106,23 +4400,28 @@ "integrity": "sha1-+rg/uwstjchfpjbEudNMdUIMbWU=", "dev": true }, - "es6-promise": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.0.2.tgz", - "integrity": "sha1-AQ1YWEI6XxGJeWZfRkhqlcbuK7Y=", - "dev": true - }, "lie": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", "integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=", - "dev": true + "dev": true, + "requires": { + "immediate": "3.0.6" + } }, "readable-stream": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "0.10.31", + "util-deprecate": "1.0.2" + } }, "string_decoder": { "version": "0.10.31", @@ -4162,20 +4461,20 @@ } }, "labeled-stream-splicer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.0.tgz", - "integrity": "sha1-pS4dE4AkwAuGscDJH2d5GLiuClk=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.1.tgz", + "integrity": "sha512-MC94mHZRvJ3LfykJlTUipBqenZz1pacOZEMhhQ8dMGcDHs0SBE5GbsavUXV7YtP3icBW17W0Zy1I0lfASmo9Pg==", "dev": true, "requires": { "inherits": "2.0.3", - "isarray": "0.0.1", + "isarray": "2.0.4", "stream-splicer": "2.0.0" }, "dependencies": { "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.4.tgz", + "integrity": "sha512-GMxXOiUirWg1xTKRipM0Ek07rX+ubx4nNVElTJdNLYmNO/2YrDkgJGw9CljXn+r4EWiDQg/8lsRdHyg2PJuUaA==", "dev": true } } @@ -4210,16 +4509,16 @@ } }, "ldapjs": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ldapjs/-/ldapjs-1.0.1.tgz", - "integrity": "sha1-NSuBKudLCo6WVJpLiWBg7uG5pUY=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/ldapjs/-/ldapjs-1.0.2.tgz", + "integrity": "sha1-VE/3Ayt7g8aPBwEyjZKXqmlDQPk=", "requires": { "asn1": "0.2.3", "assert-plus": "1.0.0", "backoff": "2.5.0", "bunyan": "1.8.12", "dashdash": "1.14.1", - "dtrace-provider": "0.7.1", + "dtrace-provider": "0.8.6", "ldap-filter": "0.2.2", "once": "1.4.0", "vasync": "1.6.4", @@ -4324,80 +4623,12 @@ "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", "dev": true }, - "lodash._baseassign": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", - "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", - "dev": true, - "requires": { - "lodash._basecopy": "3.0.1", - "lodash.keys": "3.1.2" - } - }, - "lodash._basecopy": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", - "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", - "dev": true - }, - "lodash._basecreate": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz", - "integrity": "sha1-G8ZhYU2qf8MRt9A78WgGoCE8+CE=", - "dev": true - }, - "lodash._getnative": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", - "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", - "dev": true - }, - "lodash._isiterateecall": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", - "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", - "dev": true - }, - "lodash.create": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lodash.create/-/lodash.create-3.1.1.tgz", - "integrity": "sha1-1/KEnw29p+BGgruM1yqwIkYd6+c=", - "dev": true, - "requires": { - "lodash._baseassign": "3.2.0", - "lodash._basecreate": "3.0.3", - "lodash._isiterateecall": "3.0.9" - } - }, "lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", "dev": true }, - "lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", - "dev": true - }, - "lodash.isarray": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", - "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", - "dev": true - }, - "lodash.keys": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", - "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", - "dev": true, - "requires": { - "lodash._getnative": "3.9.1", - "lodash.isarguments": "3.1.0", - "lodash.isarray": "3.0.4" - } - }, "lodash.memoize": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", @@ -4431,10 +4662,16 @@ "signal-exit": "3.0.2" } }, + "lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", + "dev": true + }, "lru-cache": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", - "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.2.tgz", + "integrity": "sha512-wgeVXhrDwAWnIF/yZARsFnMBtdFXOg1b8RIrhilp+0iDYN4mdQcNZElDZ0e4B64BhaxeQ5zN7PMyvu7we1kPeQ==", "dev": true, "requires": { "pseudomap": "1.0.2", @@ -4442,9 +4679,9 @@ } }, "make-error": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.0.tgz", - "integrity": "sha1-Uq06M5zPEM5itAQLcI/nByRLi5Y=", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.4.tgz", + "integrity": "sha512-0Dab5btKVPhibSalc9QGXb559ED7G7iLjFXBaj9Wq8O3vorueR5K5jaE3hkG6ZQINyhA/JgG6Qk4qdFQjsYV6g==", "dev": true }, "map-obj": { @@ -4557,7 +4794,7 @@ "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", "dev": true, "requires": { - "mimic-fn": "1.1.0" + "mimic-fn": "1.2.0" } }, "meow": { @@ -4646,9 +4883,9 @@ } }, "mimic-fn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz", - "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", "dev": true }, "minimalistic-assert": { @@ -4685,53 +4922,48 @@ } }, "mocha": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-3.5.3.tgz", - "integrity": "sha512-/6na001MJWEtYxHOV1WLfsmR4YIynkUEhBwzsb+fk2qmQ3iqsi258l/Q2MWHJMImAcNpZ8DEdYAK72NHoIQ9Eg==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.0.5.tgz", + "integrity": "sha512-3MM3UjZ5p8EJrYpG7s+29HAI9G7sTzKEe4+w37Dg0QP7qL4XGsV+Q2xet2cE37AqdgN1OtYQB6Vl98YiPV3PgA==", "dev": true, "requires": { - "browser-stdout": "1.3.0", - "commander": "2.9.0", - "debug": "2.6.8", - "diff": "3.2.0", + "browser-stdout": "1.3.1", + "commander": "2.11.0", + "debug": "3.1.0", + "diff": "3.5.0", "escape-string-regexp": "1.0.5", - "glob": "7.1.1", - "growl": "1.9.2", + "glob": "7.1.2", + "growl": "1.10.3", "he": "1.1.1", - "json3": "3.3.2", - "lodash.create": "3.1.1", "mkdirp": "0.5.1", - "supports-color": "3.1.2" + "supports-color": "4.4.0" }, "dependencies": { "commander": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", - "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", - "dev": true, - "requires": { - "graceful-readlink": "1.0.1" - } + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", + "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", + "dev": true }, "debug": { - "version": "2.6.8", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", - "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "dev": true, "requires": { "ms": "2.0.0" } }, "diff": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.2.0.tgz", - "integrity": "sha1-yc45Okt8vQsFinJck98pkCeGj/k=", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", "dev": true }, "glob": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", - "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "requires": { "fs.realpath": "1.0.0", @@ -4742,13 +4974,19 @@ "path-is-absolute": "1.0.1" } }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, "supports-color": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz", - "integrity": "sha1-cqJiiU2dQIuVbKBf83su2KbiotU=", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", + "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", "dev": true, "requires": { - "has-flag": "1.0.0" + "has-flag": "2.0.0" } } } @@ -4760,17 +4998,17 @@ "dev": true }, "module-deps": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-4.1.1.tgz", - "integrity": "sha1-IyFYM/HaE/1gbMuAh7RIUty4If0=", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.0.0.tgz", + "integrity": "sha512-BKsMhJJENEM4dTgqq2MDTTHXRHcNUFegoAwlG4HO4VMdUyMcJDKgfgI+MOv6tR5Iv8G3MKZFgsSiyP3ZoosRMw==", "dev": true, "requires": { - "JSONStream": "1.3.1", + "JSONStream": "1.3.2", "browser-resolve": "1.11.2", "cached-path-relative": "1.0.1", - "concat-stream": "1.5.2", + "concat-stream": "1.6.2", "defined": "1.0.0", - "detective": "4.5.0", + "detective": "5.1.0", "duplexer2": "0.1.4", "inherits": "2.0.3", "parents": "1.0.1", @@ -4801,43 +5039,25 @@ "dev": true }, "moment": { - "version": "2.19.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.19.1.tgz", - "integrity": "sha1-VtoaLRy/AdOLfhr8McELz6GSkWc=", + "version": "2.21.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.21.0.tgz", + "integrity": "sha512-TCZ36BjURTeFTM/CwRcViQlfkMvL1/vFISuNLO5GkcVm1+QHfbSiNqZuWeMFjj1/3+uAjXswgRk30j1kkLYJBQ==", "optional": true }, "mongodb": { - "version": "2.2.33", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-2.2.33.tgz", - "integrity": "sha1-tTfEcdNKZlG0jzb9vyl1A0Dgi1A=", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.0.4.tgz", + "integrity": "sha512-90YIIs7A4ko4kCGafxxXj3foexCAlJBC0YLwwIKgSLoE7Vni2IqUMz6HSsZ3zbXOfR1KWtxfnc0RyAMAY/ViLg==", "requires": { - "es6-promise": "3.2.1", - "mongodb-core": "2.1.17", - "readable-stream": "2.2.7" - }, - "dependencies": { - "readable-stream": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.7.tgz", - "integrity": "sha1-BwV6y+JGeyIELTb5jFrVBwVOlbE=", - "requires": { - "buffer-shims": "1.0.0", - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } - } + "mongodb-core": "3.0.4" } }, "mongodb-core": { - "version": "2.1.17", - "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-2.1.17.tgz", - "integrity": "sha1-pBizN6FKFJkPtRC5I97mqBMXPfg=", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.0.4.tgz", + "integrity": "sha512-OTH267FjfwBdEufSnrgd+u8HuLWRuQ6p8DR0XirPl2BdlLEMh4XwjJf1RTlruILp5p2m1w8dDC8rCxibC3W8qQ==", "requires": { - "bson": "1.0.4", + "bson": "1.0.6", "require_optional": "1.0.1" } }, @@ -4896,6 +5116,12 @@ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", + "dev": true + }, "nise": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/nise/-/nise-1.2.0.tgz", @@ -4926,11 +5152,57 @@ } } }, + "no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "dev": true, + "requires": { + "lower-case": "1.1.4" + } + }, "nodemailer": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-4.3.0.tgz", "integrity": "sha512-+/fZUhto12S2xsRGTUQuzCVjV94f4knH+gbbVc3+zxrSWZUIKKBok+JEIcPPQB8ePD0eej2ZU/pT7N+t0DM2vA==" }, + "nodemailer-direct-transport": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/nodemailer-direct-transport/-/nodemailer-direct-transport-3.3.2.tgz", + "integrity": "sha1-6W+vuQNYVglH5WkBfZfmBzilCoY=", + "requires": { + "nodemailer-shared": "1.1.0", + "smtp-connection": "2.12.0" + } + }, + "nodemailer-fetch": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/nodemailer-fetch/-/nodemailer-fetch-1.6.0.tgz", + "integrity": "sha1-ecSQihwPXzdbc/6IjamCj23JY6Q=" + }, + "nodemailer-shared": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/nodemailer-shared/-/nodemailer-shared-1.1.0.tgz", + "integrity": "sha1-z1mU4v0mjQD1zw+nZ6CBae2wfsA=", + "requires": { + "nodemailer-fetch": "1.6.0" + } + }, + "nodemailer-smtp-transport": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/nodemailer-smtp-transport/-/nodemailer-smtp-transport-2.7.4.tgz", + "integrity": "sha1-DYmvAZoUSkgP2OzJmZfZ+DjxNoU=", + "requires": { + "nodemailer-shared": "1.1.0", + "nodemailer-wellknown": "0.1.10", + "smtp-connection": "2.12.0" + } + }, + "nodemailer-wellknown": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/nodemailer-wellknown/-/nodemailer-wellknown-0.1.10.tgz", + "integrity": "sha1-WG24EB2zDLRDjrVGc3pBqtDPE9U=" + }, "nomnom": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.8.1.tgz", @@ -5001,73 +5273,68 @@ "dev": true }, "nyc": { - "version": "10.3.2", - "resolved": "https://registry.npmjs.org/nyc/-/nyc-10.3.2.tgz", - "integrity": "sha1-8n9NkfKp2zbCT1dP9cbv/wIz3kY=", + "version": "11.6.0", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-11.6.0.tgz", + "integrity": "sha512-ZaXCh0wmbk2aSBH2B5hZGGvK2s9aM8DIm2rVY+BG3Fx8tUS+bpJSswUVZqOD1YfCmnYRFSqgYJSr7UeeUcW0jg==", "dev": true, "requires": { "archy": "1.0.0", "arrify": "1.0.1", "caching-transform": "1.0.1", - "convert-source-map": "1.5.0", + "convert-source-map": "1.5.1", "debug-log": "1.0.1", "default-require-extensions": "1.0.0", "find-cache-dir": "0.1.1", - "find-up": "1.1.2", + "find-up": "2.1.0", "foreground-child": "1.5.6", - "glob": "7.1.1", - "istanbul-lib-coverage": "1.1.0", - "istanbul-lib-hook": "1.0.6", - "istanbul-lib-instrument": "1.7.1", - "istanbul-lib-report": "1.1.0", - "istanbul-lib-source-maps": "1.2.0", - "istanbul-reports": "1.1.0", + "glob": "7.1.2", + "istanbul-lib-coverage": "1.2.0", + "istanbul-lib-hook": "1.1.0", + "istanbul-lib-instrument": "1.10.1", + "istanbul-lib-report": "1.1.3", + "istanbul-lib-source-maps": "1.2.3", + "istanbul-reports": "1.3.0", "md5-hex": "1.3.0", - "merge-source-map": "1.0.3", + "merge-source-map": "1.1.0", "micromatch": "2.3.11", "mkdirp": "0.5.1", "resolve-from": "2.0.0", - "rimraf": "2.6.1", + "rimraf": "2.6.2", "signal-exit": "3.0.2", - "spawn-wrap": "1.2.4", - "test-exclude": "4.1.0", - "yargs": "7.1.0", - "yargs-parser": "5.0.0" + "spawn-wrap": "1.4.2", + "test-exclude": "4.2.1", + "yargs": "11.1.0", + "yargs-parser": "8.1.0" }, "dependencies": { "align-text": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "bundled": true, "dev": true, "requires": { - "kind-of": "3.2.0", + "kind-of": "3.2.2", "longest": "1.0.1", "repeat-string": "1.6.1" } }, "amdefine": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "bundled": true, "dev": true }, "ansi-regex": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "bundled": true, "dev": true }, "ansi-styles": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "bundled": true, "dev": true }, "append-transform": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz", - "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=", + "bundled": true, "dev": true, "requires": { "default-require-extensions": "1.0.0" @@ -5075,157 +5342,184 @@ }, "archy": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", + "bundled": true, "dev": true }, "arr-diff": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "bundled": true, "dev": true, "requires": { - "arr-flatten": "1.0.3" + "arr-flatten": "1.1.0" } }, "arr-flatten": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.0.3.tgz", - "integrity": "sha1-onTthawIhJtr14R8RYB0XcUa37E=", + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "bundled": true, "dev": true }, "array-unique": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "bundled": true, "dev": true }, "arrify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "bundled": true, + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "bundled": true, "dev": true }, "async": { "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "bundled": true, + "dev": true + }, + "atob": { + "version": "2.0.3", + "bundled": true, "dev": true }, "babel-code-frame": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.22.0.tgz", - "integrity": "sha1-AnYgvuVnqIwyVhV05/0IAdMxGOQ=", + "version": "6.26.0", + "bundled": true, "dev": true, "requires": { "chalk": "1.1.3", "esutils": "2.0.2", - "js-tokens": "3.0.1" + "js-tokens": "3.0.2" } }, "babel-generator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.24.1.tgz", - "integrity": "sha1-5xX0hsWN7SVknYiJRNUqoHxdlJc=", + "version": "6.26.1", + "bundled": true, "dev": true, "requires": { "babel-messages": "6.23.0", - "babel-runtime": "6.23.0", - "babel-types": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", "detect-indent": "4.0.0", "jsesc": "1.3.0", - "lodash": "4.17.4", - "source-map": "0.5.6", + "lodash": "4.17.5", + "source-map": "0.5.7", "trim-right": "1.0.1" } }, "babel-messages": { "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", - "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "bundled": true, "dev": true, "requires": { - "babel-runtime": "6.23.0" + "babel-runtime": "6.26.0" } }, "babel-runtime": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.23.0.tgz", - "integrity": "sha1-CpSJ8UTecO+zzkMArM2zKeL8VDs=", + "version": "6.26.0", + "bundled": true, "dev": true, "requires": { - "core-js": "2.4.1", - "regenerator-runtime": "0.10.5" + "core-js": "2.5.3", + "regenerator-runtime": "0.11.1" } }, "babel-template": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.24.1.tgz", - "integrity": "sha1-BK5RTx+Ts6JTfyoPYKWkX7gwgzM=", + "version": "6.26.0", + "bundled": true, "dev": true, "requires": { - "babel-runtime": "6.23.0", - "babel-traverse": "6.24.1", - "babel-types": "6.24.1", - "babylon": "6.17.0", - "lodash": "4.17.4" + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "lodash": "4.17.5" } }, "babel-traverse": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.24.1.tgz", - "integrity": "sha1-qzZnP9NW+aCUhlnnszjV/q2zFpU=", + "version": "6.26.0", + "bundled": true, "dev": true, "requires": { - "babel-code-frame": "6.22.0", + "babel-code-frame": "6.26.0", "babel-messages": "6.23.0", - "babel-runtime": "6.23.0", - "babel-types": "6.24.1", - "babylon": "6.17.0", - "debug": "2.6.6", - "globals": "9.17.0", - "invariant": "2.2.2", - "lodash": "4.17.4" + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "debug": "2.6.9", + "globals": "9.18.0", + "invariant": "2.2.3", + "lodash": "4.17.5" } }, "babel-types": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.24.1.tgz", - "integrity": "sha1-oTaHncFbNga9oNkMH8dDBML/CXU=", + "version": "6.26.0", + "bundled": true, "dev": true, "requires": { - "babel-runtime": "6.23.0", + "babel-runtime": "6.26.0", "esutils": "2.0.2", - "lodash": "4.17.4", + "lodash": "4.17.5", "to-fast-properties": "1.0.3" } }, "babylon": { - "version": "6.17.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.17.0.tgz", - "integrity": "sha1-N9qUiHhIi5xOPEA4iT+jMUs/yTI=", + "version": "6.18.0", + "bundled": true, "dev": true }, "balanced-match": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", - "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", + "version": "1.0.0", + "bundled": true, "dev": true }, - "brace-expansion": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.7.tgz", - "integrity": "sha1-Pv/DxQ4ABTH7cg6v+A8K6O8jz1k=", + "base": { + "version": "0.11.2", + "bundled": true, "dev": true, "requires": { - "balanced-match": "0.4.2", + "cache-base": "1.0.1", + "class-utils": "0.3.6", + "component-emitter": "1.2.1", + "define-property": "1.0.0", + "isobject": "3.0.1", + "mixin-deep": "1.3.1", + "pascalcase": "0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "bundled": true, + "dev": true + } + } + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "1.0.0", "concat-map": "0.0.1" } }, "braces": { "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "bundled": true, "dev": true, "requires": { "expand-range": "1.8.2", @@ -5235,14 +5529,35 @@ }, "builtin-modules": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "bundled": true, "dev": true }, + "cache-base": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "collection-visit": "1.0.0", + "component-emitter": "1.2.1", + "get-value": "2.0.6", + "has-value": "1.0.0", + "isobject": "3.0.1", + "set-value": "2.0.0", + "to-object-path": "0.3.0", + "union-value": "1.0.0", + "unset-value": "1.0.0" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "bundled": true, + "dev": true + } + } + }, "caching-transform": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-1.0.1.tgz", - "integrity": "sha1-bb2y8g+Nj7znnz6U6dF0Lc31wKE=", + "bundled": true, "dev": true, "requires": { "md5-hex": "1.3.0", @@ -5252,15 +5567,13 @@ }, "camelcase": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "bundled": true, "dev": true, "optional": true }, "center-align": { "version": "0.1.3", - "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "bundled": true, "dev": true, "optional": true, "requires": { @@ -5270,8 +5583,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "bundled": true, "dev": true, "requires": { "ansi-styles": "2.2.1", @@ -5281,10 +5593,86 @@ "supports-color": "2.0.0" } }, + "class-utils": { + "version": "0.3.6", + "bundled": true, + "dev": true, + "requires": { + "arr-union": "3.1.0", + "define-property": "0.2.5", + "isobject": "3.0.1", + "static-extend": "0.1.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "bundled": true, + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "bundled": true, + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "bundled": true, + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "bundled": true, + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + } + }, + "isobject": { + "version": "3.0.1", + "bundled": true, + "dev": true + }, + "kind-of": { + "version": "5.1.0", + "bundled": true, + "dev": true + } + } + }, "cliui": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "bundled": true, "dev": true, "optional": true, "requires": { @@ -5295,8 +5683,7 @@ "dependencies": { "wordwrap": { "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "bundled": true, "dev": true, "optional": true } @@ -5304,78 +5691,107 @@ }, "code-point-at": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "bundled": true, "dev": true }, + "collection-visit": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "map-visit": "1.0.0", + "object-visit": "1.0.1" + } + }, "commondir": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "bundled": true, + "dev": true + }, + "component-emitter": { + "version": "1.2.1", + "bundled": true, "dev": true }, "concat-map": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "bundled": true, "dev": true }, "convert-source-map": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.0.tgz", - "integrity": "sha1-ms1whRxtXf3ZPZKC5e35SgP/RrU=", + "version": "1.5.1", + "bundled": true, + "dev": true + }, + "copy-descriptor": { + "version": "0.1.1", + "bundled": true, "dev": true }, "core-js": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.4.1.tgz", - "integrity": "sha1-TekR5mew6ukSTjQlS1OupvxhjT4=", + "version": "2.5.3", + "bundled": true, "dev": true }, "cross-spawn": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", - "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", + "bundled": true, "dev": true, "requires": { - "lru-cache": "4.0.2", - "which": "1.2.14" + "lru-cache": "4.1.2", + "which": "1.3.0" } }, "debug": { - "version": "2.6.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.6.tgz", - "integrity": "sha1-qfpvvpykPPHnn3O3XAGJy7fW21o=", + "version": "2.6.9", + "bundled": true, "dev": true, "requires": { - "ms": "0.7.3" + "ms": "2.0.0" } }, "debug-log": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/debug-log/-/debug-log-1.0.1.tgz", - "integrity": "sha1-IwdjLUwEOCuN+KMvcLiVBG1SdF8=", + "bundled": true, "dev": true }, "decamelize": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "bundled": true, + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "bundled": true, "dev": true }, "default-require-extensions": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-1.0.0.tgz", - "integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=", + "bundled": true, "dev": true, "requires": { "strip-bom": "2.0.0" } }, + "define-property": { + "version": "2.0.2", + "bundled": true, + "dev": true, + "requires": { + "is-descriptor": "1.0.2", + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "bundled": true, + "dev": true + } + } + }, "detect-indent": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", - "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "bundled": true, "dev": true, "requires": { "repeating": "2.0.1" @@ -5383,8 +5799,7 @@ }, "error-ex": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", - "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "bundled": true, "dev": true, "requires": { "is-arrayish": "0.2.1" @@ -5392,20 +5807,43 @@ }, "escape-string-regexp": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "bundled": true, "dev": true }, "esutils": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "bundled": true, "dev": true }, + "execa": { + "version": "0.7.0", + "bundled": true, + "dev": true, + "requires": { + "cross-spawn": "5.1.0", + "get-stream": "3.0.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "bundled": true, + "dev": true, + "requires": { + "lru-cache": "4.1.2", + "shebang-command": "1.2.0", + "which": "1.3.0" + } + } + } + }, "expand-brackets": { "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "bundled": true, "dev": true, "requires": { "is-posix-bracket": "0.1.1" @@ -5413,17 +5851,34 @@ }, "expand-range": { "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "bundled": true, "dev": true, "requires": { "fill-range": "2.2.3" } }, + "extend-shallow": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "requires": { + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "is-plain-object": "2.0.4" + } + } + } + }, "extglob": { "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "bundled": true, "dev": true, "requires": { "is-extglob": "1.0.0" @@ -5431,27 +5886,24 @@ }, "filename-regex": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "bundled": true, "dev": true }, "fill-range": { "version": "2.2.3", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", - "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "bundled": true, "dev": true, "requires": { "is-number": "2.1.0", "isobject": "2.1.0", - "randomatic": "1.1.6", + "randomatic": "1.1.7", "repeat-element": "1.1.2", "repeat-string": "1.6.1" } }, "find-cache-dir": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz", - "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=", + "bundled": true, "dev": true, "requires": { "commondir": "1.0.1", @@ -5460,25 +5912,21 @@ } }, "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "version": "2.1.0", + "bundled": true, "dev": true, "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" + "locate-path": "2.0.0" } }, "for-in": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "bundled": true, "dev": true }, "for-own": { "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "bundled": true, "dev": true, "requires": { "for-in": "1.0.2" @@ -5486,44 +5934,57 @@ }, "foreground-child": { "version": "1.5.6", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-1.5.6.tgz", - "integrity": "sha1-T9ca0t/elnibmApcCilZN8svXOk=", + "bundled": true, "dev": true, "requires": { "cross-spawn": "4.0.2", "signal-exit": "3.0.2" } }, + "fragment-cache": { + "version": "0.2.1", + "bundled": true, + "dev": true, + "requires": { + "map-cache": "0.2.2" + } + }, "fs.realpath": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "bundled": true, "dev": true }, "get-caller-file": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", - "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", + "bundled": true, + "dev": true + }, + "get-stream": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "get-value": { + "version": "2.0.6", + "bundled": true, "dev": true }, "glob": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", - "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=", + "version": "7.1.2", + "bundled": true, "dev": true, "requires": { "fs.realpath": "1.0.0", "inflight": "1.0.6", "inherits": "2.0.3", - "minimatch": "3.0.3", + "minimatch": "3.0.4", "once": "1.4.0", "path-is-absolute": "1.0.1" } }, "glob-base": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "bundled": true, "dev": true, "requires": { "glob-parent": "2.0.0", @@ -5532,41 +5993,36 @@ }, "glob-parent": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "bundled": true, "dev": true, "requires": { "is-glob": "2.0.1" } }, "globals": { - "version": "9.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.17.0.tgz", - "integrity": "sha1-DAymltm5u2lNLlRwvTd3fKrVAoY=", + "version": "9.18.0", + "bundled": true, "dev": true }, "graceful-fs": { "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "bundled": true, "dev": true }, "handlebars": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.8.tgz", - "integrity": "sha1-Irh1zT8ObL6jAxTxROgrx6cv9CA=", + "version": "4.0.11", + "bundled": true, "dev": true, "requires": { "async": "1.5.2", "optimist": "0.6.1", "source-map": "0.4.4", - "uglify-js": "2.8.22" + "uglify-js": "2.8.29" }, "dependencies": { "source-map": { "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "bundled": true, "dev": true, "requires": { "amdefine": "1.0.1" @@ -5576,8 +6032,7 @@ }, "has-ansi": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "bundled": true, "dev": true, "requires": { "ansi-regex": "2.1.1" @@ -5585,26 +6040,76 @@ }, "has-flag": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "bundled": true, "dev": true }, + "has-value": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "get-value": "2.0.6", + "has-values": "1.0.0", + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "bundled": true, + "dev": true + } + } + }, + "has-values": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "is-number": "3.0.0", + "kind-of": "4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "bundled": true, + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "bundled": true, + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, "hosted-git-info": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.4.2.tgz", - "integrity": "sha1-AHa59GonBQbduq6lZJaJdGBhKmc=", + "version": "2.6.0", + "bundled": true, "dev": true }, "imurmurhash": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "bundled": true, "dev": true }, "inflight": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "bundled": true, "dev": true, "requires": { "once": "1.4.0", @@ -5613,14 +6118,12 @@ }, "inherits": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "bundled": true, "dev": true }, "invariant": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", - "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", + "version": "2.2.3", + "bundled": true, "dev": true, "requires": { "loose-envify": "1.3.1" @@ -5628,41 +6131,82 @@ }, "invert-kv": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "bundled": true, "dev": true }, + "is-accessor-descriptor": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "6.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "bundled": true, + "dev": true + } + } + }, "is-arrayish": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "bundled": true, "dev": true }, "is-buffer": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz", - "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=", + "version": "1.1.6", + "bundled": true, "dev": true }, "is-builtin-module": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "bundled": true, "dev": true, "requires": { "builtin-modules": "1.1.1" } }, - "is-dotfile": { + "is-data-descriptor": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "6.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "bundled": true, + "dev": true + } + } + }, + "is-descriptor": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.2.tgz", - "integrity": "sha1-LBMjg/ORmfjtwmjKAbmwB9IFzE0=", + "bundled": true, + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "bundled": true, + "dev": true + } + } + }, + "is-dotfile": { + "version": "1.0.3", + "bundled": true, "dev": true }, "is-equal-shallow": { "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "bundled": true, "dev": true, "requires": { "is-primitive": "2.0.0" @@ -5670,38 +6214,30 @@ }, "is-extendable": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "bundled": true, "dev": true }, "is-extglob": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "bundled": true, "dev": true }, "is-finite": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "bundled": true, "dev": true, "requires": { "number-is-nan": "1.0.1" } }, "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } + "version": "2.0.0", + "bundled": true, + "dev": true }, "is-glob": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "bundled": true, "dev": true, "requires": { "is-extglob": "1.0.0" @@ -5709,89 +6245,118 @@ }, "is-number": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "bundled": true, "dev": true, "requires": { - "kind-of": "3.2.0" + "kind-of": "3.2.2" + } + }, + "is-odd": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "is-number": "4.0.0" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "bundled": true, + "dev": true + } + } + }, + "is-plain-object": { + "version": "2.0.4", + "bundled": true, + "dev": true, + "requires": { + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "bundled": true, + "dev": true + } } }, "is-posix-bracket": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "bundled": true, "dev": true }, "is-primitive": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "bundled": true, + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "bundled": true, "dev": true }, "is-utf8": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "bundled": true, + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "bundled": true, "dev": true }, "isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "bundled": true, "dev": true }, "isexe": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "bundled": true, "dev": true }, "isobject": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "bundled": true, "dev": true, "requires": { "isarray": "1.0.0" } }, "istanbul-lib-coverage": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.0.tgz", - "integrity": "sha1-ysoZ3srvNSW11jMdcB8/O3rUhSg=", + "version": "1.2.0", + "bundled": true, "dev": true }, "istanbul-lib-hook": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.0.6.tgz", - "integrity": "sha1-wIZtHoHPLVMZJJUQEx/Bbe5JIx8=", + "version": "1.1.0", + "bundled": true, "dev": true, "requires": { "append-transform": "0.4.0" } }, "istanbul-lib-instrument": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.7.1.tgz", - "integrity": "sha1-Fp4xvGLHeIUamUOd2Zw8wSGE02A=", + "version": "1.10.1", + "bundled": true, "dev": true, "requires": { - "babel-generator": "6.24.1", - "babel-template": "6.24.1", - "babel-traverse": "6.24.1", - "babel-types": "6.24.1", - "babylon": "6.17.0", - "istanbul-lib-coverage": "1.1.0", - "semver": "5.3.0" + "babel-generator": "6.26.1", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "istanbul-lib-coverage": "1.2.0", + "semver": "5.5.0" } }, "istanbul-lib-report": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.0.tgz", - "integrity": "sha1-RExOzKmvqTz1hPVrEPGVv3aMB3A=", + "version": "1.1.3", + "bundled": true, "dev": true, "requires": { - "istanbul-lib-coverage": "1.1.0", + "istanbul-lib-coverage": "1.2.0", "mkdirp": "0.5.1", "path-parse": "1.0.5", "supports-color": "3.2.3" @@ -5799,8 +6364,7 @@ "dependencies": { "supports-color": { "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "bundled": true, "dev": true, "requires": { "has-flag": "1.0.0" @@ -5809,59 +6373,62 @@ } }, "istanbul-lib-source-maps": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.0.tgz", - "integrity": "sha1-jHcG1Jfib+62rz4MKP1bBmlZjQ4=", + "version": "1.2.3", + "bundled": true, "dev": true, "requires": { - "debug": "2.6.6", - "istanbul-lib-coverage": "1.1.0", + "debug": "3.1.0", + "istanbul-lib-coverage": "1.2.0", "mkdirp": "0.5.1", - "rimraf": "2.6.1", - "source-map": "0.5.6" + "rimraf": "2.6.2", + "source-map": "0.5.7" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "bundled": true, + "dev": true, + "requires": { + "ms": "2.0.0" + } + } } }, "istanbul-reports": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.1.0.tgz", - "integrity": "sha1-HvO3lYiSGc+1+tFjZfbOEI1fjGY=", + "version": "1.3.0", + "bundled": true, "dev": true, "requires": { - "handlebars": "4.0.8" + "handlebars": "4.0.11" } }, "js-tokens": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.1.tgz", - "integrity": "sha1-COnxMkhKLEWjCQfp3E1VZ7fxFNc=", + "version": "3.0.2", + "bundled": true, "dev": true }, "jsesc": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", - "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", + "bundled": true, "dev": true }, "kind-of": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.0.tgz", - "integrity": "sha1-tYq+TVwEStM3JqjBUltIz4kb/wc=", + "version": "3.2.2", + "bundled": true, "dev": true, "requires": { - "is-buffer": "1.1.5" + "is-buffer": "1.1.6" } }, "lazy-cache": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "bundled": true, "dev": true, "optional": true }, "lcid": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "bundled": true, "dev": true, "requires": { "invert-kv": "1.0.0" @@ -5869,8 +6436,7 @@ }, "load-json-file": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "bundled": true, "dev": true, "requires": { "graceful-fs": "4.1.11", @@ -5880,41 +6446,65 @@ "strip-bom": "2.0.0" } }, + "locate-path": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "p-locate": "2.0.0", + "path-exists": "3.0.0" + }, + "dependencies": { + "path-exists": { + "version": "3.0.0", + "bundled": true, + "dev": true + } + } + }, "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "version": "4.17.5", + "bundled": true, "dev": true }, "longest": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "bundled": true, "dev": true }, "loose-envify": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", - "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "bundled": true, "dev": true, "requires": { - "js-tokens": "3.0.1" + "js-tokens": "3.0.2" } }, "lru-cache": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.0.2.tgz", - "integrity": "sha1-HRdnnAac2l0ECZGgnbwsDbN35V4=", + "version": "4.1.2", + "bundled": true, "dev": true, "requires": { "pseudomap": "1.0.2", "yallist": "2.1.2" } }, + "map-cache": { + "version": "0.2.2", + "bundled": true, + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "object-visit": "1.0.1" + } + }, "md5-hex": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/md5-hex/-/md5-hex-1.3.0.tgz", - "integrity": "sha1-0sSv6YPENwZiF5uMrRRSGRNQRsQ=", + "bundled": true, "dev": true, "requires": { "md5-o-matic": "0.1.1" @@ -5922,23 +6512,35 @@ }, "md5-o-matic": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/md5-o-matic/-/md5-o-matic-0.1.1.tgz", - "integrity": "sha1-givM1l4RfFFPqxdrJZRdVBAKA8M=", + "bundled": true, "dev": true }, - "merge-source-map": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.3.tgz", - "integrity": "sha1-2hQV8nIqURnbB7FMT5c0EIY6Kr8=", + "mem": { + "version": "1.1.0", + "bundled": true, "dev": true, "requires": { - "source-map": "0.5.6" + "mimic-fn": "1.2.0" + } + }, + "merge-source-map": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "requires": { + "source-map": "0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "bundled": true, + "dev": true + } } }, "micromatch": { "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "bundled": true, "dev": true, "requires": { "arr-diff": "2.0.0", @@ -5949,90 +6551,231 @@ "filename-regex": "2.0.1", "is-extglob": "1.0.0", "is-glob": "2.0.1", - "kind-of": "3.2.0", + "kind-of": "3.2.2", "normalize-path": "2.1.1", "object.omit": "2.0.1", "parse-glob": "3.0.4", - "regex-cache": "0.4.3" + "regex-cache": "0.4.4" } }, + "mimic-fn": { + "version": "1.2.0", + "bundled": true, + "dev": true + }, "minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=", + "version": "3.0.4", + "bundled": true, "dev": true, "requires": { - "brace-expansion": "1.1.7" + "brace-expansion": "1.1.11" } }, "minimist": { "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "bundled": true, "dev": true }, + "mixin-deep": { + "version": "1.3.1", + "bundled": true, + "dev": true, + "requires": { + "for-in": "1.0.2", + "is-extendable": "1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "is-plain-object": "2.0.4" + } + } + } + }, "mkdirp": { "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "bundled": true, "dev": true, "requires": { "minimist": "0.0.8" } }, "ms": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.3.tgz", - "integrity": "sha1-cIFVpeROM/X9D8U+gdDUCpG+H/8=", + "version": "2.0.0", + "bundled": true, "dev": true }, - "normalize-package-data": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.3.8.tgz", - "integrity": "sha1-2Bntoqne29H/pWPqQHHZNngilbs=", + "nanomatch": { + "version": "1.2.9", + "bundled": true, "dev": true, "requires": { - "hosted-git-info": "2.4.2", + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "fragment-cache": "0.2.1", + "is-odd": "2.0.0", + "is-windows": "1.0.2", + "kind-of": "6.0.2", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "bundled": true, + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "bundled": true, + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "bundled": true, + "dev": true + } + } + }, + "normalize-package-data": { + "version": "2.4.0", + "bundled": true, + "dev": true, + "requires": { + "hosted-git-info": "2.6.0", "is-builtin-module": "1.0.0", - "semver": "5.3.0", - "validate-npm-package-license": "3.0.1" + "semver": "5.5.0", + "validate-npm-package-license": "3.0.3" } }, "normalize-path": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "bundled": true, "dev": true, "requires": { - "remove-trailing-separator": "1.0.1" + "remove-trailing-separator": "1.1.0" + } + }, + "npm-run-path": { + "version": "2.0.2", + "bundled": true, + "dev": true, + "requires": { + "path-key": "2.0.1" } }, "number-is-nan": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "bundled": true, "dev": true }, "object-assign": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "bundled": true, "dev": true }, + "object-copy": { + "version": "0.1.0", + "bundled": true, + "dev": true, + "requires": { + "copy-descriptor": "0.1.1", + "define-property": "0.2.5", + "kind-of": "3.2.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "bundled": true, + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "is-descriptor": { + "version": "0.1.6", + "bundled": true, + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "bundled": true, + "dev": true + } + } + } + } + }, + "object-visit": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "bundled": true, + "dev": true + } + } + }, "object.omit": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "bundled": true, "dev": true, "requires": { "for-own": "0.1.5", "is-extendable": "0.1.1" } }, + "object.pick": { + "version": "1.3.0", + "bundled": true, + "dev": true, + "requires": { + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "bundled": true, + "dev": true + } + } + }, "once": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "bundled": true, "dev": true, "requires": { "wrappy": "1.0.2" @@ -6040,8 +6783,7 @@ }, "optimist": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "bundled": true, "dev": true, "requires": { "minimist": "0.0.8", @@ -6050,44 +6792,72 @@ }, "os-homedir": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "bundled": true, "dev": true }, "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "version": "2.1.0", + "bundled": true, "dev": true, "requires": { - "lcid": "1.0.0" + "execa": "0.7.0", + "lcid": "1.0.0", + "mem": "1.1.0" } }, + "p-finally": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "p-limit": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "requires": { + "p-try": "1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "p-limit": "1.2.0" + } + }, + "p-try": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, "parse-glob": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "bundled": true, "dev": true, "requires": { "glob-base": "0.3.0", - "is-dotfile": "1.0.2", + "is-dotfile": "1.0.3", "is-extglob": "1.0.0", "is-glob": "2.0.1" } }, "parse-json": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "bundled": true, "dev": true, "requires": { "error-ex": "1.3.1" } }, + "pascalcase": { + "version": "0.1.1", + "bundled": true, + "dev": true + }, "path-exists": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "bundled": true, "dev": true, "requires": { "pinkie-promise": "2.0.1" @@ -6095,20 +6865,22 @@ }, "path-is-absolute": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "bundled": true, + "dev": true + }, + "path-key": { + "version": "2.0.1", + "bundled": true, "dev": true }, "path-parse": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", - "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", + "bundled": true, "dev": true }, "path-type": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "bundled": true, "dev": true, "requires": { "graceful-fs": "4.1.11", @@ -6118,20 +6890,17 @@ }, "pify": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "bundled": true, "dev": true }, "pinkie": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "bundled": true, "dev": true }, "pinkie-promise": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "bundled": true, "dev": true, "requires": { "pinkie": "2.0.4" @@ -6139,94 +6908,145 @@ }, "pkg-dir": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", - "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", + "bundled": true, "dev": true, "requires": { "find-up": "1.1.2" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "bundled": true, + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + } } }, + "posix-character-classes": { + "version": "0.1.1", + "bundled": true, + "dev": true + }, "preserve": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "bundled": true, "dev": true }, "pseudomap": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "bundled": true, "dev": true }, "randomatic": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.6.tgz", - "integrity": "sha1-EQ3Kv/OX6dz/fAeJzMCkmt8exbs=", + "version": "1.1.7", + "bundled": true, "dev": true, "requires": { - "is-number": "2.1.0", - "kind-of": "3.2.0" + "is-number": "3.0.0", + "kind-of": "4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "bundled": true, + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "bundled": true, + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } } }, "read-pkg": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "bundled": true, "dev": true, "requires": { "load-json-file": "1.1.0", - "normalize-package-data": "2.3.8", + "normalize-package-data": "2.4.0", "path-type": "1.1.0" } }, "read-pkg-up": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "bundled": true, "dev": true, "requires": { "find-up": "1.1.2", "read-pkg": "1.1.0" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "bundled": true, + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + } } }, "regenerator-runtime": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", - "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=", + "version": "0.11.1", + "bundled": true, "dev": true }, "regex-cache": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz", - "integrity": "sha1-mxpsNdTQ3871cRrmUejp09cRQUU=", + "version": "0.4.4", + "bundled": true, "dev": true, "requires": { - "is-equal-shallow": "0.1.3", - "is-primitive": "2.0.0" + "is-equal-shallow": "0.1.3" + } + }, + "regex-not": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "extend-shallow": "3.0.2", + "safe-regex": "1.1.0" } }, "remove-trailing-separator": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.0.1.tgz", - "integrity": "sha1-YV67lq9VlVLUv0BXyENtSGq2PMQ=", + "version": "1.1.0", + "bundled": true, "dev": true }, "repeat-element": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", - "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "bundled": true, "dev": true }, "repeat-string": { "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "bundled": true, "dev": true }, "repeating": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "bundled": true, "dev": true, "requires": { "is-finite": "1.0.2" @@ -6234,26 +7054,32 @@ }, "require-directory": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "bundled": true, "dev": true }, "require-main-filename": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "bundled": true, "dev": true }, "resolve-from": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", - "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=", + "bundled": true, + "dev": true + }, + "resolve-url": { + "version": "0.2.1", + "bundled": true, + "dev": true + }, + "ret": { + "version": "0.1.15", + "bundled": true, "dev": true }, "right-align": { "version": "0.1.3", - "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "bundled": true, "dev": true, "optional": true, "requires": { @@ -6261,102 +7087,360 @@ } }, "rimraf": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", - "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", + "version": "2.6.2", + "bundled": true, "dev": true, "requires": { - "glob": "7.1.1" + "glob": "7.1.2" + } + }, + "safe-regex": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "requires": { + "ret": "0.1.15" } }, "semver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "version": "5.5.0", + "bundled": true, "dev": true }, "set-blocking": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "bundled": true, + "dev": true + }, + "set-value": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "split-string": "3.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "shebang-command": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "requires": { + "shebang-regex": "1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "bundled": true, "dev": true }, "signal-exit": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "bundled": true, "dev": true }, "slide": { "version": "1.1.6", - "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", - "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=", + "bundled": true, "dev": true }, + "snapdragon": { + "version": "0.8.2", + "bundled": true, + "dev": true, + "requires": { + "base": "0.11.2", + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "map-cache": "0.2.2", + "source-map": "0.5.7", + "source-map-resolve": "0.5.1", + "use": "3.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "bundled": true, + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "extend-shallow": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "bundled": true, + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "bundled": true, + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "bundled": true, + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + } + }, + "kind-of": { + "version": "5.1.0", + "bundled": true, + "dev": true + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "requires": { + "define-property": "1.0.0", + "isobject": "3.0.1", + "snapdragon-util": "3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "bundled": true, + "dev": true + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, "source-map": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", - "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", + "version": "0.5.7", + "bundled": true, + "dev": true + }, + "source-map-resolve": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "requires": { + "atob": "2.0.3", + "decode-uri-component": "0.2.0", + "resolve-url": "0.2.1", + "source-map-url": "0.4.0", + "urix": "0.1.0" + } + }, + "source-map-url": { + "version": "0.4.0", + "bundled": true, "dev": true }, "spawn-wrap": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-1.2.4.tgz", - "integrity": "sha1-kg6yEadpwJPuv71bDnpdLmirLkA=", + "version": "1.4.2", + "bundled": true, "dev": true, "requires": { "foreground-child": "1.5.6", "mkdirp": "0.5.1", "os-homedir": "1.0.2", - "rimraf": "2.6.1", - "signal-exit": "2.1.2", - "which": "1.2.14" + "rimraf": "2.6.2", + "signal-exit": "3.0.2", + "which": "1.3.0" + } + }, + "spdx-correct": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "spdx-expression-parse": "3.0.0", + "spdx-license-ids": "3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.1.0", + "bundled": true, + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "spdx-exceptions": "2.1.0", + "spdx-license-ids": "3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "split-string": { + "version": "3.1.0", + "bundled": true, + "dev": true, + "requires": { + "extend-shallow": "3.0.2" + } + }, + "static-extend": { + "version": "0.1.2", + "bundled": true, + "dev": true, + "requires": { + "define-property": "0.2.5", + "object-copy": "0.1.0" }, "dependencies": { - "signal-exit": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-2.1.2.tgz", - "integrity": "sha1-N1h5sfkuvDszRIDQONxUam1VhWQ=", + "define-property": { + "version": "0.2.5", + "bundled": true, + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "bundled": true, + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "bundled": true, + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "bundled": true, + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + } + }, + "kind-of": { + "version": "5.1.0", + "bundled": true, "dev": true } } }, - "spdx-correct": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", - "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", - "dev": true, - "requires": { - "spdx-license-ids": "1.2.2" - } - }, - "spdx-expression-parse": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", - "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", - "dev": true - }, - "spdx-license-ids": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", - "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", - "dev": true - }, "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "version": "2.1.1", + "bundled": true, "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + } } }, "strip-ansi": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "bundled": true, "dev": true, "requires": { "ansi-regex": "2.1.1" @@ -6364,60 +7448,330 @@ }, "strip-bom": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "bundled": true, "dev": true, "requires": { "is-utf8": "0.2.1" } }, + "strip-eof": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, "supports-color": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "bundled": true, "dev": true }, "test-exclude": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-4.1.0.tgz", - "integrity": "sha1-BMpwtzkN04yY1KADoXOAbKeZHJE=", + "version": "4.2.1", + "bundled": true, "dev": true, "requires": { "arrify": "1.0.1", - "micromatch": "2.3.11", + "micromatch": "3.1.9", "object-assign": "4.1.1", "read-pkg-up": "1.0.1", "require-main-filename": "1.0.1" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "bundled": true, + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "bundled": true, + "dev": true + }, + "braces": { + "version": "2.3.1", + "bundled": true, + "dev": true, + "requires": { + "arr-flatten": "1.1.0", + "array-unique": "0.3.2", + "define-property": "1.0.0", + "extend-shallow": "2.0.1", + "fill-range": "4.0.0", + "isobject": "3.0.1", + "kind-of": "6.0.2", + "repeat-element": "1.1.2", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "extend-shallow": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "expand-brackets": { + "version": "2.1.4", + "bundled": true, + "dev": true, + "requires": { + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "posix-character-classes": "0.1.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "bundled": true, + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "extend-shallow": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + }, + "is-descriptor": { + "version": "0.1.6", + "bundled": true, + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + } + }, + "kind-of": { + "version": "5.1.0", + "bundled": true, + "dev": true + } + } + }, + "extglob": { + "version": "2.0.4", + "bundled": true, + "dev": true, + "requires": { + "array-unique": "0.3.2", + "define-property": "1.0.0", + "expand-brackets": "2.1.4", + "extend-shallow": "2.0.1", + "fragment-cache": "0.2.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "extend-shallow": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "bundled": true, + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "bundled": true, + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "bundled": true, + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-number": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "bundled": true, + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "isobject": { + "version": "3.0.1", + "bundled": true, + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "bundled": true, + "dev": true + }, + "micromatch": { + "version": "3.1.9", + "bundled": true, + "dev": true, + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.1", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.2", + "nanomatch": "1.2.9", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + } + } } }, "to-fast-properties": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "bundled": true, "dev": true }, + "to-object-path": { + "version": "0.3.0", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "to-regex": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "requires": { + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "regex-not": "1.0.2", + "safe-regex": "1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "requires": { + "is-number": "3.0.0", + "repeat-string": "1.6.1" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + } + } + }, "trim-right": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "bundled": true, "dev": true }, "uglify-js": { - "version": "2.8.22", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.22.tgz", - "integrity": "sha1-1Uk0d4qNoUkD+imjJvskwKtRoaA=", + "version": "2.8.29", + "bundled": true, "dev": true, "optional": true, "requires": { - "source-map": "0.5.6", + "source-map": "0.5.7", "uglify-to-browserify": "1.0.2", "yargs": "3.10.0" }, "dependencies": { "yargs": { "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "bundled": true, "dev": true, "optional": true, "requires": { @@ -6431,69 +7785,173 @@ }, "uglify-to-browserify": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "bundled": true, "dev": true, "optional": true }, - "validate-npm-package-license": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", - "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", + "union-value": { + "version": "1.0.0", + "bundled": true, "dev": true, "requires": { - "spdx-correct": "1.0.2", - "spdx-expression-parse": "1.0.4" + "arr-union": "3.1.0", + "get-value": "2.0.6", + "is-extendable": "0.1.1", + "set-value": "0.4.3" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + }, + "set-value": { + "version": "0.4.3", + "bundled": true, + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "to-object-path": "0.3.0" + } + } + } + }, + "unset-value": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "has-value": "0.3.1", + "isobject": "3.0.1" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "bundled": true, + "dev": true, + "requires": { + "get-value": "2.0.6", + "has-values": "0.1.4", + "isobject": "2.1.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "bundled": true, + "dev": true + }, + "isobject": { + "version": "3.0.1", + "bundled": true, + "dev": true + } + } + }, + "urix": { + "version": "0.1.0", + "bundled": true, + "dev": true + }, + "use": { + "version": "3.1.0", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "6.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "bundled": true, + "dev": true + } + } + }, + "validate-npm-package-license": { + "version": "3.0.3", + "bundled": true, + "dev": true, + "requires": { + "spdx-correct": "3.0.0", + "spdx-expression-parse": "3.0.0" } }, "which": { - "version": "1.2.14", - "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", - "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", + "version": "1.3.0", + "bundled": true, "dev": true, "requires": { "isexe": "2.0.0" } }, "which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "version": "2.0.0", + "bundled": true, "dev": true }, "window-size": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "bundled": true, "dev": true, "optional": true }, "wordwrap": { "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "bundled": true, "dev": true }, "wrap-ansi": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "bundled": true, "dev": true, "requires": { "string-width": "1.0.2", "strip-ansi": "3.0.1" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + } } }, "wrappy": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "bundled": true, "dev": true }, "write-file-atomic": { "version": "1.3.4", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", - "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=", + "bundled": true, "dev": true, "requires": { "graceful-fs": "4.1.11", @@ -6503,69 +7961,82 @@ }, "y18n": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "bundled": true, "dev": true }, "yallist": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "bundled": true, "dev": true }, "yargs": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", - "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", + "version": "11.1.0", + "bundled": true, "dev": true, "requires": { - "camelcase": "3.0.0", - "cliui": "3.2.0", + "cliui": "4.0.0", "decamelize": "1.2.0", + "find-up": "2.1.0", "get-caller-file": "1.0.2", - "os-locale": "1.4.0", - "read-pkg-up": "1.0.1", + "os-locale": "2.1.0", "require-directory": "2.1.1", "require-main-filename": "1.0.1", "set-blocking": "2.0.0", - "string-width": "1.0.2", - "which-module": "1.0.0", + "string-width": "2.1.1", + "which-module": "2.0.0", "y18n": "3.2.1", - "yargs-parser": "5.0.0" + "yargs-parser": "9.0.2" }, "dependencies": { - "camelcase": { + "ansi-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "bundled": true, + "dev": true + }, + "camelcase": { + "version": "4.1.0", + "bundled": true, "dev": true }, "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "version": "4.0.0", + "bundled": true, "dev": true, "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", + "string-width": "2.1.1", + "strip-ansi": "4.0.0", "wrap-ansi": "2.1.0" } + }, + "strip-ansi": { + "version": "4.0.0", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + }, + "yargs-parser": { + "version": "9.0.2", + "bundled": true, + "dev": true, + "requires": { + "camelcase": "4.1.0" + } } } }, "yargs-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", - "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", + "version": "8.1.0", + "bundled": true, "dev": true, "requires": { - "camelcase": "3.0.0" + "camelcase": "4.1.0" }, "dependencies": { "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "version": "4.1.0", + "bundled": true, "dev": true } } @@ -6695,10 +8166,13 @@ "dev": true }, "p-limit": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.1.0.tgz", - "integrity": "sha1-sH/y2aXYi+yAYDWJWiurZqJ5iLw=", - "dev": true + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz", + "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==", + "dev": true, + "requires": { + "p-try": "1.0.0" + } }, "p-locate": { "version": "2.0.0", @@ -6706,7 +8180,7 @@ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, "requires": { - "p-limit": "1.1.0" + "p-limit": "1.2.0" } }, "p-map": { @@ -6715,6 +8189,12 @@ "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", "dev": true }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, "pad-right": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/pad-right/-/pad-right-0.2.2.tgz", @@ -6745,7 +8225,7 @@ "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", "dev": true, "requires": { - "asn1.js": "4.9.2", + "asn1.js": "4.10.1", "browserify-aes": "1.1.1", "create-hash": "1.1.3", "evp_bytestokey": "1.0.3", @@ -6773,12 +8253,6 @@ "error-ex": "1.3.1" } }, - "parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", - "dev": true - }, "parse5": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.2.tgz", @@ -6878,7 +8352,7 @@ "create-hmac": "1.1.6", "ripemd160": "2.0.1", "safe-buffer": "5.1.1", - "sha.js": "2.4.9" + "sha.js": "2.4.11" } }, "pend": { @@ -6920,6 +8394,12 @@ "integrity": "sha1-HPWjCw2AbNGPiPxBprXUrWFbO6k=", "dev": true }, + "popper.js": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.14.1.tgz", + "integrity": "sha1-uIFeXNpvYvwgQuR2GGSfdYZuZ1M=", + "dev": true + }, "power-assert": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/power-assert/-/power-assert-1.4.4.tgz", @@ -7102,7 +8582,8 @@ "process-nextick-args": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true }, "progress": { "version": "2.0.0", @@ -7128,21 +8609,24 @@ } }, "proxyquire": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/proxyquire/-/proxyquire-1.8.0.tgz", - "integrity": "sha1-AtUUpb7ZhvBMuyCTrxZ0FTX3ntw=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/proxyquire/-/proxyquire-2.0.1.tgz", + "integrity": "sha512-fQr3VQrbdzHrdaDn3XuisVoJlJNDJizHAvUXw9IuXRR8BpV2x0N7LsCxrpJkeKfPbNjiNU/V5vc008cI0TmzzQ==", "dev": true, "requires": { "fill-keys": "1.0.2", "module-not-found-error": "1.0.1", - "resolve": "1.1.7" + "resolve": "1.5.0" }, "dependencies": { "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "dev": true + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz", + "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==", + "dev": true, + "requires": { + "path-parse": "1.0.5" + } } } }, @@ -7162,7 +8646,7 @@ "browserify-rsa": "4.0.1", "create-hash": "1.1.3", "parse-asn1": "5.1.0", - "randombytes": "2.0.5" + "randombytes": "2.0.6" } }, "pug": { @@ -7296,9 +8780,9 @@ "integrity": "sha512-rJlH1lXerCIAtImXBze3dtKq/ykZMA4rpO9FnPcIgsWcxZLOvd8zltaoeOVFyBSSqCkhhJWbEbTMga8UxWUUSA==" }, "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", "dev": true }, "q": { @@ -7313,13 +8797,13 @@ "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" }, "query-string": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", - "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.0.0.tgz", + "integrity": "sha1-i485RHtz6CkNb141gXeSGOkXEUI=", "dev": true, "requires": { - "object-assign": "4.1.1", - "strict-uri-encode": "1.1.0" + "decode-uri-component": "0.2.0", + "strict-uri-encode": "2.0.0" } }, "querystring": { @@ -7381,14 +8865,24 @@ } }, "randombytes": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.5.tgz", - "integrity": "sha512-8T7Zn1AhMsQ/HI1SjcCfT/t4ii3eAqco3yOcSzS4mozsOz69lHLsoMXmF9nZgnFanYscnSlUSgs8uZyKzpE6kg==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", + "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", "dev": true, "requires": { "safe-buffer": "5.1.1" } }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "requires": { + "randombytes": "2.0.6", + "safe-buffer": "5.1.1" + } + }, "randomstring": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/randomstring/-/randomstring-1.1.5.tgz", @@ -7535,9 +9029,9 @@ "integrity": "sha1-Uu0J2srBCPGmMcB+m2mUHnoZUEs=" }, "regenerator-runtime": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz", - "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==", + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", "dev": true }, "regex-cache": { @@ -7703,9 +9197,9 @@ "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" }, "safe-json-stringify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.0.4.tgz", - "integrity": "sha1-gaCY9Efku8P/MxKiQ1IbwGDvWRE=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.1.0.tgz", + "integrity": "sha512-EzBtUaFH9bHYPc69wqjp0efJI/DPNHdFbGE3uIMn4sVbO0zx8vZ8cG4WKxQfOpUOKsQyGBiT2mTqnCw+6nLswA==", "optional": true }, "samsam": { @@ -7721,15 +9215,15 @@ "dev": true }, "selenium-webdriver": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-3.6.0.tgz", - "integrity": "sha512-WH7Aldse+2P5bbFBO4Gle/nuQOdVwpHMTL6raL3uuBj/vPG07k6uzt3aiahu352ONBr5xXh0hDlM3LhtXPOC4Q==", + "version": "4.0.0-alpha.1", + "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.0.0-alpha.1.tgz", + "integrity": "sha512-z88rdjHAv3jmTZ7KSGUkTvo4rGzcDGMq0oXWHNIDK96Gs31JKVdu9+FMtT4KBrVoibg8dUicJDok6GnqqttO5Q==", "dev": true, "requires": { - "jszip": "3.1.4", + "jszip": "3.1.5", "rimraf": "2.6.2", "tmp": "0.0.30", - "xml2js": "0.4.17" + "xml2js": "0.4.19" }, "dependencies": { "glob": { @@ -7827,9 +9321,9 @@ "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" }, "sha.js": { - "version": "2.4.9", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.9.tgz", - "integrity": "sha512-G8zektVqbiPHrylgew9Zg1VRB1L/DtXNUVAM6q4QLy8NE3qtHlFXTf8VLL4k1Yl6c7NMjtZUTdXV+X44nFaT6A==", + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, "requires": { "inherits": "2.0.3", @@ -7843,18 +9337,7 @@ "dev": true, "requires": { "json-stable-stringify": "0.0.1", - "sha.js": "2.4.9" - }, - "dependencies": { - "json-stable-stringify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz", - "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=", - "dev": true, - "requires": { - "jsonify": "0.0.0" - } - } + "sha.js": "2.4.11" } }, "shebang-command": { @@ -7885,22 +9368,22 @@ } }, "should": { - "version": "11.2.1", - "resolved": "https://registry.npmjs.org/should/-/should-11.2.1.tgz", - "integrity": "sha1-kPVRRVUtAc/CAGZuToGKHJZw7aI=", + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/should/-/should-13.2.1.tgz", + "integrity": "sha512-l+/NwEMO+DcstsHEwPHRHzC9j4UOE3VQwJGcMWSsD/vqpqHbnQ+1iSHy64Ihmmjx1uiRPD9pFadTSc3MJtXAgw==", "dev": true, "requires": { - "should-equal": "1.0.1", + "should-equal": "2.0.0", "should-format": "3.0.3", "should-type": "1.4.0", - "should-type-adaptors": "1.0.1", + "should-type-adaptors": "1.1.0", "should-util": "1.0.0" } }, "should-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/should-equal/-/should-equal-1.0.1.tgz", - "integrity": "sha1-C26VFvJgGp+wuy3MNpr6HH4gCvc=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/should-equal/-/should-equal-2.0.0.tgz", + "integrity": "sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA==", "dev": true, "requires": { "should-type": "1.4.0" @@ -7913,7 +9396,7 @@ "dev": true, "requires": { "should-type": "1.4.0", - "should-type-adaptors": "1.0.1" + "should-type-adaptors": "1.1.0" } }, "should-type": { @@ -7923,9 +9406,9 @@ "dev": true }, "should-type-adaptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/should-type-adaptors/-/should-type-adaptors-1.0.1.tgz", - "integrity": "sha1-7+VVPN9oz/ZuXF9RtxLcNRx3vqo=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz", + "integrity": "sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA==", "dev": true, "requires": { "should-type": "1.4.0", @@ -7982,6 +9465,15 @@ } } }, + "smtp-connection": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/smtp-connection/-/smtp-connection-2.12.0.tgz", + "integrity": "sha1-1275EnyyPCJZ7bHoNJwujV4tdME=", + "requires": { + "httpntlm": "1.6.1", + "nodemailer-shared": "1.1.0" + } + }, "sntp": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.0.2.tgz", @@ -8000,18 +9492,18 @@ } }, "source-map-support": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", - "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.4.tgz", + "integrity": "sha512-PETSPG6BjY1AHs2t64vS2aqAgu6dMIMXJULWFBGbh2Gr8nVLbCFDo6i/RMMvviIQ2h1Z8+5gQhVKSn2je9nmdg==", "dev": true, "requires": { - "source-map": "0.5.7" + "source-map": "0.6.1" }, "dependencies": { "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } @@ -8067,9 +9559,9 @@ } }, "stack-chain": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/stack-chain/-/stack-chain-1.3.7.tgz", - "integrity": "sha1-0ZLJ/06moiyUxN1FkXHj8AzqEoU=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/stack-chain/-/stack-chain-2.0.0.tgz", + "integrity": "sha512-GGrHXePi305aW7XQweYZZwiRwR7Js3MWoK/EHzzB9ROdc75nCnjSJVi21rdAGxFl+yCx2L2qdfl5y7NO4lTyqg==", "dev": true }, "stack-generator": { @@ -8153,9 +9645,9 @@ } }, "stream-http": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.7.2.tgz", - "integrity": "sha512-c0yTD2rbQzXtSsFSVhtpvY/vS6u066PcXOX9kBB3mSO76RiUQzL340uJkGBWnlBg4/HZzqiUXtaVA7wcRcJgEw==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.1.tgz", + "integrity": "sha512-cQ0jo17BLca2r0GfRdZKYAGLU6JRoIWxqSOakUMuKOT6MOK7AAlE856L33QuDmAy/eeOrhLee3dZKX0Uadu93A==", "dev": true, "requires": { "builtin-status-codes": "3.0.0", @@ -8176,9 +9668,9 @@ } }, "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=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", + "integrity": "sha1-ucczDHBChi9rFC3CdLvMWGbONUY=", "dev": true }, "string-argv": { @@ -8203,12 +9695,6 @@ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", @@ -8224,6 +9710,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true, "requires": { "safe-buffer": "5.1.1" } @@ -8275,12 +9762,6 @@ "get-stdin": "4.0.1" } }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, "subarg": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", @@ -8311,20 +9792,12 @@ "dev": true }, "syntax-error": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.3.0.tgz", - "integrity": "sha1-HtkmbE1AvnXcVb+bsct3Biu5bKE=", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz", + "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==", "dev": true, "requires": { - "acorn": "4.0.13" - }, - "dependencies": { - "acorn": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", - "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", - "dev": true - } + "acorn-node": "1.3.0" } }, "text-encoding": { @@ -8501,10 +9974,20 @@ } } }, + "title-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/title-case/-/title-case-2.1.1.tgz", + "integrity": "sha1-PhJyFtpY0rxb7PE3q5Ha46fNj6o=", + "dev": true, + "requires": { + "no-case": "2.3.2", + "upper-case": "1.1.3" + } + }, "tmp": { - "version": "0.0.31", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz", - "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=", + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, "requires": { "os-tmpdir": "1.0.2" @@ -8568,47 +10051,45 @@ "dev": true }, "ts-node": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-3.3.0.tgz", - "integrity": "sha1-wTxqMCTjC+EYDdUwOPwgkonUv2k=", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-5.0.1.tgz", + "integrity": "sha512-XK7QmDcNHVmZkVtkiwNDWiERRHPyU8nBqZB1+iv2UhOG0q3RQ9HsZ2CMqISlFbxjrYFGfG2mX7bW4dAyxBVzUw==", "dev": true, "requires": { "arrify": "1.0.1", - "chalk": "2.2.0", + "chalk": "2.3.2", "diff": "3.4.0", - "make-error": "1.3.0", + "make-error": "1.3.4", "minimist": "1.2.0", "mkdirp": "0.5.1", - "source-map-support": "0.4.18", - "tsconfig": "6.0.0", - "v8flags": "3.0.1", + "source-map-support": "0.5.4", "yn": "2.0.0" }, "dependencies": { "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { "color-convert": "1.9.1" } }, "chalk": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.2.0.tgz", - "integrity": "sha512-0BMM/2hG3ZaoPfR6F+h/oWpZtsh3b/s62TjSM6MGCJWEbJDN1acqCXvyhhZsDSVFklpebUoQ5O1kKC7lOzrn9g==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", + "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", "dev": true, "requires": { - "ansi-styles": "3.2.0", + "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" + "supports-color": "5.3.0" } }, "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, "minimist": { @@ -8618,34 +10099,16 @@ "dev": true }, "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", "dev": true, "requires": { - "has-flag": "2.0.0" + "has-flag": "3.0.0" } } } }, - "tsconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-6.0.0.tgz", - "integrity": "sha1-aw6DdgA9evGGT434+J3QBZ/80DI=", - "dev": true, - "requires": { - "strip-bom": "3.0.0", - "strip-json-comments": "2.0.1" - }, - "dependencies": { - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - } - } - }, "tslib": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.8.0.tgz", @@ -8738,9 +10201,9 @@ } }, "tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", + "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", "dev": true }, "tunnel-agent": { @@ -8802,45 +10265,32 @@ "dev": true }, "typescript-json-schema": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/typescript-json-schema/-/typescript-json-schema-0.17.0.tgz", - "integrity": "sha512-0uP3g8OrgNAI7ab7wLF0LKPC2VpxNwV6EmkS/R41vBwUFHmHDZ3jHNo6qUYMU2EEgZ2SwpSQhwWgofxqq9XxOA==", + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/typescript-json-schema/-/typescript-json-schema-0.21.0.tgz", + "integrity": "sha512-zaO5MNtTv4mGaPT+VYsEA14C7ePKpB5WkkADQ4L4tr2GZsJP19OHwHy8XbnGM/MR14cGJ18n8leV7gVgpd6mbw==", "dev": true, "requires": { "glob": "7.1.2", "json-stable-stringify": "1.0.1", - "typescript": "2.5.3", - "yargs": "8.0.2" + "typescript": "2.6.2", + "yargs": "11.0.0" }, "dependencies": { - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.0.0.tgz", + "integrity": "sha512-nY3W5Gu2racvdDk//ELReY+dHjb9PlIcVDFXP72nVIhq2Gy3LuVXYwJoPVudwQnv1shtohpgkdCKT2YaKY0CKw==", "dev": true, "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", + "string-width": "2.1.1", + "strip-ansi": "4.0.0", "wrap-ansi": "2.1.0" - }, - "dependencies": { - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - } } }, "find-up": { @@ -8866,88 +10316,48 @@ "path-is-absolute": "1.0.1" } }, - "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "strip-bom": "3.0.0" - } - }, - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "dev": true, - "requires": { - "pify": "2.3.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "dev": true, - "requires": { - "load-json-file": "2.0.0", - "normalize-package-data": "2.4.0", - "path-type": "2.0.0" - } - }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "dev": true, - "requires": { - "find-up": "2.1.0", - "read-pkg": "2.0.0" + "jsonify": "0.0.0" } }, "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "3.0.0" } }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "typescript": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.6.2.tgz", + "integrity": "sha1-PFtv1/beCRQmkCfwPAlGdY92c6Q=", "dev": true }, "yargs": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", - "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.0.0.tgz", + "integrity": "sha512-Rjp+lMYQOWtgqojx1dEWorjCofi1YN7AoFvYV7b1gx/7dAAeuI4kN5SZiEvr0ZmsZTOpDRcCqrpI10L31tFkBw==", "dev": true, "requires": { - "camelcase": "4.1.0", - "cliui": "3.2.0", + "cliui": "4.0.0", "decamelize": "1.2.0", + "find-up": "2.1.0", "get-caller-file": "1.0.2", "os-locale": "2.1.0", - "read-pkg-up": "2.0.0", "require-directory": "2.1.1", "require-main-filename": "1.0.1", "set-blocking": "2.0.0", "string-width": "2.1.1", "which-module": "2.0.0", "y18n": "3.2.1", - "yargs-parser": "7.0.0" + "yargs-parser": "9.0.2" } } } @@ -9019,9 +10429,9 @@ } }, "umd": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.1.tgz", - "integrity": "sha1-iuVW4RAR9jwllnCKiDclnwGz1g4=", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", + "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==", "dev": true }, "underscore": { @@ -9081,23 +10491,22 @@ "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", "dev": true }, - "upper-case-first": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-1.1.2.tgz", - "integrity": "sha1-XXm+3P8UQZUY/S7bCgUHybaFkRU=", - "dev": true, - "requires": { - "upper-case": "1.1.3" - } - }, "url": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", - "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", "dev": true, "requires": { "punycode": "1.3.2", "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + } } }, "util": { @@ -9126,7 +10535,8 @@ "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true }, "utils-merge": { "version": "1.0.1", @@ -9138,15 +10548,6 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==" }, - "v8flags": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.0.1.tgz", - "integrity": "sha1-3Oj8N5wX2fLJ6e142JzgAFKxt2s=", - "dev": true, - "requires": { - "homedir-polyfill": "1.0.1" - } - }, "validate-npm-package-license": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", @@ -9219,6 +10620,159 @@ "xtend": "4.0.1" }, "dependencies": { + "acorn": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz", + "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==", + "dev": true + }, + "browserify": { + "version": "14.5.0", + "resolved": "https://registry.npmjs.org/browserify/-/browserify-14.5.0.tgz", + "integrity": "sha512-gKfOsNQv/toWz+60nSPfYzuwSEdzvV2WdxrVPUbPD/qui44rAkB3t3muNtmmGYHqrG56FGwX9SUEQmzNLAeS7g==", + "dev": true, + "requires": { + "JSONStream": "1.3.2", + "assert": "1.4.1", + "browser-pack": "6.0.4", + "browser-resolve": "1.11.2", + "browserify-zlib": "0.2.0", + "buffer": "5.1.0", + "cached-path-relative": "1.0.1", + "concat-stream": "1.5.2", + "console-browserify": "1.1.0", + "constants-browserify": "1.0.0", + "crypto-browserify": "3.12.0", + "defined": "1.0.0", + "deps-sort": "2.0.0", + "domain-browser": "1.1.7", + "duplexer2": "0.1.4", + "events": "1.1.1", + "glob": "7.1.2", + "has": "1.0.1", + "htmlescape": "1.1.1", + "https-browserify": "1.0.0", + "inherits": "2.0.3", + "insert-module-globals": "7.0.4", + "labeled-stream-splicer": "2.0.1", + "module-deps": "4.1.1", + "os-browserify": "0.3.0", + "parents": "1.0.1", + "path-browserify": "0.0.0", + "process": "0.11.10", + "punycode": "1.4.1", + "querystring-es3": "0.2.1", + "read-only-stream": "2.0.0", + "readable-stream": "2.3.3", + "resolve": "1.4.0", + "shasum": "1.0.2", + "shell-quote": "1.6.1", + "stream-browserify": "2.0.1", + "stream-http": "2.8.1", + "string_decoder": "1.0.3", + "subarg": "1.0.0", + "syntax-error": "1.4.0", + "through2": "2.0.3", + "timers-browserify": "1.4.2", + "tty-browserify": "0.0.1", + "url": "0.11.0", + "util": "0.10.3", + "vm-browserify": "0.0.4", + "xtend": "4.0.1" + } + }, + "concat-stream": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz", + "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.0.6", + "typedarray": "0.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", + "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "0.10.31", + "util-deprecate": "1.0.2" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "detective": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/detective/-/detective-4.7.1.tgz", + "integrity": "sha512-H6PmeeUcZloWtdt4DAkFyzFL94arpHr3NOwwmVILFiy+9Qd4JTxxXrzfyGk/lmct2qVGBwTSwSXagqu2BxmWig==", + "dev": true, + "requires": { + "acorn": "5.5.3", + "defined": "1.0.0" + } + }, + "domain-browser": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", + "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=", + "dev": true + }, + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "dev": true + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "module-deps": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-4.1.1.tgz", + "integrity": "sha1-IyFYM/HaE/1gbMuAh7RIUty4If0=", + "dev": true, + "requires": { + "JSONStream": "1.3.2", + "browser-resolve": "1.11.2", + "cached-path-relative": "1.0.1", + "concat-stream": "1.5.2", + "defined": "1.0.0", + "detective": "4.7.1", + "duplexer2": "0.1.4", + "inherits": "2.0.3", + "parents": "1.0.1", + "readable-stream": "2.3.3", + "resolve": "1.4.0", + "stream-combiner2": "1.1.1", + "subarg": "1.0.0", + "through2": "2.0.3", + "xtend": "4.0.1" + } + }, "through2": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", @@ -9352,6 +10906,15 @@ "strip-ansi": "3.0.1" }, "dependencies": { + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", @@ -9386,23 +10949,20 @@ "dev": true }, "xml2js": { - "version": "0.4.17", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.17.tgz", - "integrity": "sha1-F76T6q4/O3eTWceVtBlwWogX6Gg=", + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", + "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", "dev": true, "requires": { "sax": "1.2.1", - "xmlbuilder": "4.2.1" + "xmlbuilder": "9.0.7" } }, "xmlbuilder": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-4.2.1.tgz", - "integrity": "sha1-qlijBBoGb5DqoWwvU4n/GfP0YaU=", - "dev": true, - "requires": { - "lodash": "4.17.4" - } + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", + "dev": true }, "xtend": { "version": "4.0.1", @@ -9422,9 +10982,9 @@ "dev": true }, "yamljs": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/yamljs/-/yamljs-0.2.10.tgz", - "integrity": "sha1-SBzHwlynOvWfWR8MluPOVsdXpA8=", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/yamljs/-/yamljs-0.3.0.tgz", + "integrity": "sha512-C/FsVVhht4iPQYXOInoxUM/1ELSf9EsgKH34FofQOp6hwCPrW4vG4w5++TED3xRUo8gD7l0P1J1dLlDYzODsTQ==", "requires": { "argparse": "1.0.9", "glob": "7.1.2" @@ -9457,9 +11017,9 @@ } }, "yargs-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", - "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", + "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", "dev": true, "requires": { "camelcase": "4.1.0" diff --git a/package.json b/package.json index fd019e87d..a8d52fa54 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "title": "Authelia API documentation" }, "dependencies": { - "ajv": "^5.2.3", + "ajv": "^6.3.0", "bluebird": "^3.5.0", "body-parser": "^1.15.2", "connect-redis": "^3.3.0", @@ -32,10 +32,12 @@ "express": "^4.14.0", "express-request-id": "^1.4.0", "express-session": "^1.14.2", - "ldapjs": "^1.0.1", - "mongodb": "^2.2.30", + "ldapjs": "^1.0.2", + "mongodb": "^3.0.4", "nedb": "^1.8.0", "nodemailer": "^4.0.1", + "nodemailer-direct-transport": "^3.3.2", + "nodemailer-smtp-transport": "^2.7.4", "object-path": "^0.11.3", "pug": "^2.0.0-rc.2", "randomstring": "^1.1.5", @@ -43,43 +45,45 @@ "speakeasy": "^2.0.0", "u2f": "^0.1.2", "winston": "^2.3.1", - "yamljs": "^0.2.8" + "yamljs": "^0.3.0" }, "devDependencies": { "@types/bluebird": "^3.5.4", "@types/body-parser": "^1.16.3", - "@types/bootstrap": "^3.3.36", - "@types/connect-redis": "0.0.6", + "@types/bootstrap": "^4.0.1", + "@types/connect-redis": "0.0.7", "@types/cors": "^2.8.1", - "@types/cucumber": "^2.0.1", + "@types/cucumber": "^2.3.1", "@types/ejs": "^2.3.33", "@types/express": "^4.0.35", - "@types/express-session": "0.0.32", - "@types/jquery": "^2.0.45", - "@types/jsdom": "^2.0.30", - "@types/ldapjs": "^1.0.0", - "@types/mocha": "^2.2.41", + "@types/express-session": "1.15.8", + "@types/jquery": "^3.3.1", + "@types/jsdom": "^11.0.4", + "@types/ldapjs": "^1.0.2", + "@types/mocha": "^5.0.0", "@types/mockdate": "^2.0.0", - "@types/mongodb": "^2.2.7", + "@types/mongodb": "^3.0.9", "@types/nedb": "^1.8.3", - "@types/nodemailer": "^3.1.3", + "@types/nodemailer": "^4.6.0", + "@types/nodemailer-direct-transport": "^1.0.31", + "@types/nodemailer-smtp-transport": "^2.7.4", "@types/object-path": "^0.9.28", "@types/proxyquire": "^1.3.27", - "@types/query-string": "^4.3.1", + "@types/query-string": "^5.1.0", "@types/randomstring": "^1.1.5", "@types/redis": "^2.6.0", "@types/request": "^2.0.5", "@types/request-promise": "^4.1.38", "@types/selenium-webdriver": "^3.0.4", - "@types/sinon": "^2.3.7", + "@types/sinon": "^4.3.0", "@types/tmp": "0.0.33", "@types/winston": "^2.3.2", "@types/yamljs": "^0.2.30", "apidoc": "^0.17.6", - "bootstrap": "^3.3.7", - "browserify": "^14.3.0", + "bootstrap": "^4.0.0", + "browserify": "^16.1.1", "chromedriver": "^2.31.0", - "cucumber": "^2.3.1", + "cucumber": "^4.0.0", "grunt": "^1.0.1", "grunt-browserify": "^5.0.0", "grunt-contrib-concat": "^1.0.1", @@ -87,28 +91,28 @@ "grunt-contrib-cssmin": "^2.2.0", "grunt-contrib-watch": "^1.0.0", "grunt-env": "^0.4.4", - "grunt-run": "^0.6.0", + "grunt-run": "^0.8.0", "istanbul": "^0.4.5", "jquery": "^3.2.1", "js-logger": "^1.3.0", "jsdom": "^11.0.0", - "mocha": "^3.4.2", + "mocha": "^5.0.5", "mockdate": "^2.0.1", - "nyc": "^10.3.2", + "nyc": "^11.6.0", "power-assert": "^1.4.4", - "proxyquire": "^1.8.0", - "query-string": "^4.3.4", + "proxyquire": "^2.0.1", + "query-string": "^6.0.0", "readable-stream": "^2.3.3", "request": "^2.83.0", "request-promise": "^4.2.2", - "selenium-webdriver": "^3.5.0", - "should": "^11.1.1", + "selenium-webdriver": "^4.0.0-alpha.1", + "should": "^13.2.1", "sinon": "^4.0.2", - "tmp": "0.0.31", - "ts-node": "^3.3.0", + "tmp": "0.0.33", + "ts-node": "^5.0.1", "tslint": "^5.2.0", "typescript": "^2.3.2", - "typescript-json-schema": "^0.17.0", + "typescript-json-schema": "^0.21.0", "uglify-es": "^3.0.15" }, "nyc": { From 0b2f6ace8385e753623bbd1134edc15b6222eae3 Mon Sep 17 00:00:00 2001 From: Clement Michaud Date: Thu, 29 Mar 2018 00:04:59 +0200 Subject: [PATCH 2/4] Fix unit and integration tests --- Gruntfile.js | 4 +- config.template.yml | 3 +- example/authelia/docker-compose.test.yml | 4 + package-lock.json | 14 +- package.json | 6 +- scripts/run-cucumber.sh | 4 +- server/src/index.ts | 3 +- server/src/lib/ServerVariablesInitializer.ts | 2 +- .../src/lib/configuration/Configuration.d.ts | 1 + .../SessionConfigurationBuilder.ts | 3 +- server/src/lib/configuration/Validator.ts | 15 +- .../lib/connectors/mongo/IMongoConnector.d.ts | 3 +- .../lib/connectors/mongo/MongoConnector.ts | 13 +- server/test/ServerConfiguration.test.ts | 1 + .../test/SessionConfigurationBuilder.test.ts | 6 +- .../connectors/mongo/MongoConnector.test.ts | 8 +- server/types/Dependencies.ts | 3 + test/features/access-control.feature | 72 +++--- test/features/reset-password.feature | 10 +- test/features/resilience.feature | 4 +- test/features/session-timeout.feature | 8 +- .../step_definitions/access-control.ts | 17 ++ test/features/step_definitions/authelia.ts | 76 +++--- .../step_definitions/authentication.ts | 206 +++++++-------- .../step_definitions/forward-headers.ts | 28 +-- test/features/step_definitions/hooks.ts | 234 +++++++++--------- .../step_definitions/notifications.ts | 35 ++- test/features/step_definitions/redirection.ts | 20 +- .../features/step_definitions/registration.ts | 22 +- test/features/step_definitions/regulation.ts | 10 +- .../step_definitions/reset-password.ts | 22 +- test/features/step_definitions/resilience.ts | 10 +- .../features/step_definitions/restrictions.ts | 121 +++++---- .../step_definitions/session-timeout.ts | 10 +- .../step_definitions/single-factor.ts | 62 +++-- test/features/support/world.ts | 8 +- 36 files changed, 518 insertions(+), 550 deletions(-) create mode 100644 test/features/step_definitions/access-control.ts diff --git a/Gruntfile.js b/Gruntfile.js index 200799537..6547588b9 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -180,8 +180,8 @@ module.exports = function (grunt) { grunt.registerTask('compile-server', ['run:lint-server', 'run:compile-server']) grunt.registerTask('compile-client', ['run:lint-client', 'run:compile-client']) - grunt.registerTask('test-server', ['env:env-test-server-unit', 'run:test-server-unit']) - grunt.registerTask('test-client', ['env:env-test-client-unit', 'run:test-client-unit']) + grunt.registerTask('test-server', ['run:test-server-unit']) + grunt.registerTask('test-client', ['run:test-client-unit']) grunt.registerTask('test-unit', ['test-server', 'test-client']); grunt.registerTask('test-int', ['run:test-int']); diff --git a/config.template.yml b/config.template.yml index 5927551cf..7c013519a 100644 --- a/config.template.yml +++ b/config.template.yml @@ -209,7 +209,8 @@ storage: # Settings to connect to mongo server mongo: - url: mongodb://mongo/authelia + url: mongodb://mongo + database: authelia # Configuration of the notification system. # diff --git a/example/authelia/docker-compose.test.yml b/example/authelia/docker-compose.test.yml index 53495d0f1..2d2899a86 100644 --- a/example/authelia/docker-compose.test.yml +++ b/example/authelia/docker-compose.test.yml @@ -3,3 +3,7 @@ services: authelia: volumes: - ./config.test.yml:/etc/authelia/config.yml:ro + - ./dist/server:/usr/src/server + - ./dist/shared:/usr/src/shared + networks: + - example-network diff --git a/package-lock.json b/package-lock.json index ef426e506..7d324c775 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5045,17 +5045,17 @@ "optional": true }, "mongodb": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.0.4.tgz", - "integrity": "sha512-90YIIs7A4ko4kCGafxxXj3foexCAlJBC0YLwwIKgSLoE7Vni2IqUMz6HSsZ3zbXOfR1KWtxfnc0RyAMAY/ViLg==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.0.5.tgz", + "integrity": "sha512-8ioTyyc8tkNwZCTDa1FPWvmpJFfvE484DnugC8KpVrw4AKAE03OOAlORl2yYTNtz3TX4Ab7FRo00vzgexB/67A==", "requires": { - "mongodb-core": "3.0.4" + "mongodb-core": "3.0.5" } }, "mongodb-core": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.0.4.tgz", - "integrity": "sha512-OTH267FjfwBdEufSnrgd+u8HuLWRuQ6p8DR0XirPl2BdlLEMh4XwjJf1RTlruILp5p2m1w8dDC8rCxibC3W8qQ==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.0.5.tgz", + "integrity": "sha512-4A1nx/xAU5d/NPICjiyzVxzNrIdJQQsYRe3xQkV1O638t+fHHfAOLK+SQagqGnu1m0aeSxb1ixp/P0FGSQWIGA==", "requires": { "bson": "1.0.6", "require_optional": "1.0.1" diff --git a/package.json b/package.json index a8d52fa54..dd4b55d6e 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "authelia": "./dist/server/src/index.js" }, "scripts": { - "test": "./node_modules/.bin/grunt unit-tests", + "test": "./node_modules/.bin/grunt test-unit", "cover": "NODE_ENV=test nyc npm t", "serve": "node dist/server/index.js" }, @@ -33,7 +33,7 @@ "express-request-id": "^1.4.0", "express-session": "^1.14.2", "ldapjs": "^1.0.2", - "mongodb": "^3.0.4", + "mongodb": "^3.0.5", "nedb": "^1.8.0", "nodemailer": "^4.0.1", "nodemailer-direct-transport": "^3.3.2", @@ -53,7 +53,7 @@ "@types/bootstrap": "^4.0.1", "@types/connect-redis": "0.0.7", "@types/cors": "^2.8.1", - "@types/cucumber": "^2.3.1", + "@types/cucumber": "^4.0.1", "@types/ejs": "^2.3.33", "@types/express": "^4.0.35", "@types/express-session": "1.15.8", diff --git a/scripts/run-cucumber.sh b/scripts/run-cucumber.sh index af64ff08c..cfd0ed9f0 100755 --- a/scripts/run-cucumber.sh +++ b/scripts/run-cucumber.sh @@ -1,3 +1,5 @@ #!/bin/bash -./node_modules/.bin/cucumber-js --colors --compiler ts:ts-node/register $* +REQ=`for f in test/features/step_definitions/*.ts; do echo "--require $f"; done;` + +./node_modules/.bin/cucumber-js --format-options '{"colorsEnabled": true}' --require-module ts-node/register --require test/features/support/world.ts $REQ $* diff --git a/server/src/index.ts b/server/src/index.ts index 286da1fc2..fcbf4d022 100755 --- a/server/src/index.ts +++ b/server/src/index.ts @@ -20,7 +20,8 @@ const deps: GlobalDependencies = { winston: require("winston"), speakeasy: require("speakeasy"), nedb: require("nedb"), - ConnectRedis: require("connect-redis") + ConnectRedis: require("connect-redis"), + Redis: require("redis") }; const server = new Server(deps); diff --git a/server/src/lib/ServerVariablesInitializer.ts b/server/src/lib/ServerVariablesInitializer.ts index 46c91ff14..9eed50f12 100644 --- a/server/src/lib/ServerVariablesInitializer.ts +++ b/server/src/lib/ServerVariablesInitializer.ts @@ -52,7 +52,7 @@ class UserDataStoreFactory { else if (config.storage.mongo) { const mongoConnectorFactory = new MongoConnectorFactory(); const mongoConnector = mongoConnectorFactory.create(config.storage.mongo.url); - return mongoConnector.connect() + return mongoConnector.connect(config.storage.mongo.database) .then(function (client: IMongoClient) { const collectionFactory = CollectionFactoryFactory.createMongo(client); return BluebirdPromise.resolve(new UserDataStore(collectionFactory)); diff --git a/server/src/lib/configuration/Configuration.d.ts b/server/src/lib/configuration/Configuration.d.ts index fca4547a1..995c47051 100644 --- a/server/src/lib/configuration/Configuration.d.ts +++ b/server/src/lib/configuration/Configuration.d.ts @@ -95,6 +95,7 @@ export interface NotifierConfiguration { export interface MongoStorageConfiguration { url: string; + database: string; } export interface LocalStorageConfiguration { diff --git a/server/src/lib/configuration/SessionConfigurationBuilder.ts b/server/src/lib/configuration/SessionConfigurationBuilder.ts index bee21c764..fa5e4443c 100644 --- a/server/src/lib/configuration/SessionConfigurationBuilder.ts +++ b/server/src/lib/configuration/SessionConfigurationBuilder.ts @@ -2,7 +2,6 @@ import ExpressSession = require("express-session"); import { AppConfiguration } from "./Configuration"; import { GlobalDependencies } from "../../../types/Dependencies"; -import Redis = require("redis"); export class SessionConfigurationBuilder { @@ -23,7 +22,7 @@ export class SessionConfigurationBuilder { let redisOptions; if (configuration.session.redis.host && configuration.session.redis.port) { - const client = Redis.createClient({ + const client = deps.Redis.createClient({ host: configuration.session.redis.host, port: configuration.session.redis.port }); diff --git a/server/src/lib/configuration/Validator.ts b/server/src/lib/configuration/Validator.ts index fecc02c77..307ed2bb2 100644 --- a/server/src/lib/configuration/Validator.ts +++ b/server/src/lib/configuration/Validator.ts @@ -13,7 +13,7 @@ function validateSchema(configuration: UserConfiguration): string[] { allErrors: true, missingRefs: "fail" }); - ajv.addMetaSchema(require("ajv/lib/refs/json-schema-draft-04.json")); + ajv.addMetaSchema(require("ajv/lib/refs/json-schema-draft-06.json")); const valid = ajv.validate(schema, configuration); if (!valid) return ajv.errors.map( @@ -21,14 +21,15 @@ function validateSchema(configuration: UserConfiguration): string[] { return []; } +function diff(a: string[], b: string[]) { + return a.filter(function(i) {return b.indexOf(i) < 0; }); +} + function validateUnknownKeys(path: string, obj: any, knownKeys: string[]) { - const keysSet = new Set(Object.keys(obj)); - const knownKeysSet = new Set(knownKeys); + const keysSet = Object.keys(obj); - const unknownKeysSet = new Set( - [...keysSet].filter(x => !knownKeysSet.has(x))); - - if (unknownKeysSet.size > 0) { + const unknownKeysSet = diff(keysSet, knownKeys); + if (unknownKeysSet.length > 0) { const unknownKeys = Array.from(unknownKeysSet); return unknownKeys.map((k: string) => { return Util.format("data.%s has unknown key '%s'", path, k); }); } diff --git a/server/src/lib/connectors/mongo/IMongoConnector.d.ts b/server/src/lib/connectors/mongo/IMongoConnector.d.ts index 8ec4cda13..d3403f0a9 100644 --- a/server/src/lib/connectors/mongo/IMongoConnector.d.ts +++ b/server/src/lib/connectors/mongo/IMongoConnector.d.ts @@ -2,5 +2,6 @@ import BluebirdPromise = require("bluebird"); import { IMongoClient } from "./IMongoClient"; export interface IMongoConnector { - connect(): BluebirdPromise; + connect(databaseName: string): BluebirdPromise; + close(): BluebirdPromise; } \ No newline at end of file diff --git a/server/src/lib/connectors/mongo/MongoConnector.ts b/server/src/lib/connectors/mongo/MongoConnector.ts index 6f3bcf487..e6a82d4b6 100644 --- a/server/src/lib/connectors/mongo/MongoConnector.ts +++ b/server/src/lib/connectors/mongo/MongoConnector.ts @@ -7,16 +7,25 @@ import { MongoClient } from "./MongoClient"; export class MongoConnector implements IMongoConnector { private url: string; + private client: MongoDB.MongoClient; constructor(url: string) { this.url = url; } - connect(): BluebirdPromise { + connect(databaseName: string): BluebirdPromise { + const that = this; const connectAsync = BluebirdPromise.promisify(MongoDB.MongoClient.connect); return connectAsync(this.url) - .then(function (db: MongoDB.Db) { + .then(function (client: MongoDB.MongoClient) { + that.client = client; + const db = client.db(databaseName); return BluebirdPromise.resolve(new MongoClient(db)); }); } + + close(): BluebirdPromise { + this.client.close(); + return BluebirdPromise.resolve(); + } } \ No newline at end of file diff --git a/server/test/ServerConfiguration.test.ts b/server/test/ServerConfiguration.test.ts index 2b8ac0a87..7cb6bbce1 100644 --- a/server/test/ServerConfiguration.test.ts +++ b/server/test/ServerConfiguration.test.ts @@ -75,6 +75,7 @@ describe("test server configuration", function () { .then(function () { Assert(sessionMock.calledOnce); Assert.equal(sessionMock.getCall(0).args[0].cookie.domain, "example.com"); + server.stop(); }); }); }); diff --git a/server/test/SessionConfigurationBuilder.test.ts b/server/test/SessionConfigurationBuilder.test.ts index 037c90a0d..2d30aa8f9 100644 --- a/server/test/SessionConfigurationBuilder.test.ts +++ b/server/test/SessionConfigurationBuilder.test.ts @@ -141,6 +141,7 @@ describe("test session configuration builder", function () { }; const RedisStoreMock = Sinon.spy(); + const redisClient = Sinon.mock().returns({ on: Sinon.spy() }); const deps: GlobalDependencies = { ConnectRedis: Sinon.stub().returns(RedisStoreMock) as any, @@ -149,7 +150,10 @@ describe("test session configuration builder", function () { session: Sinon.spy() as any, speakeasy: Sinon.spy() as any, u2f: Sinon.spy() as any, - winston: Sinon.spy() as any + winston: Sinon.spy() as any, + Redis: { + createClient: Sinon.mock().returns(redisClient) + } as any }; const options = SessionConfigurationBuilder.build(configuration, deps); diff --git a/server/test/connectors/mongo/MongoConnector.test.ts b/server/test/connectors/mongo/MongoConnector.test.ts index 072bcd83a..8aebaa9b0 100644 --- a/server/test/connectors/mongo/MongoConnector.test.ts +++ b/server/test/connectors/mongo/MongoConnector.test.ts @@ -7,6 +7,7 @@ import { MongoConnector } from "../../../src/lib/connectors/mongo/MongoConnector describe("MongoConnector", function () { let mongoClientConnectStub: Sinon.SinonStub; + describe("create", function () { before(function () { mongoClientConnectStub = Sinon.stub(MongoDB.MongoClient, "connect"); @@ -17,11 +18,12 @@ describe("MongoConnector", function () { }); it("should create a connector", function () { - mongoClientConnectStub.yields(undefined); + const client = { db: Sinon.mock() }; + mongoClientConnectStub.yields(undefined, client); const url = "mongodb://test.url"; const connector = new MongoConnector(url); - return connector.connect() + return connector.connect("database") .then(function (client: IMongoClient) { Assert(client); Assert(mongoClientConnectStub.calledWith(url)); @@ -33,7 +35,7 @@ describe("MongoConnector", function () { const url = "mongodb://test.url"; const connector = new MongoConnector(url); - return connector.connect() + return connector.connect("database") .then(function () { return BluebirdPromise.reject(new Error("It should not be here")); }) .error(function (client: IMongoClient) { Assert(client); diff --git a/server/types/Dependencies.ts b/server/types/Dependencies.ts index 47c5454a5..f20404dbc 100644 --- a/server/types/Dependencies.ts +++ b/server/types/Dependencies.ts @@ -6,6 +6,7 @@ import nedb = require("nedb"); import ldapjs = require("ldapjs"); import u2f = require("u2f"); import RedisSession = require("connect-redis"); +import Redis = require("redis"); export type Speakeasy = typeof speakeasy; export type Winston = typeof winston; @@ -14,11 +15,13 @@ export type Nedb = typeof nedb; export type Ldapjs = typeof ldapjs; export type U2f = typeof u2f; export type ConnectRedis = typeof RedisSession; +export type Redis = typeof Redis; export interface GlobalDependencies { u2f: U2f; ldapjs: Ldapjs; session: Session; + Redis: Redis; ConnectRedis: ConnectRedis; winston: Winston; speakeasy: Speakeasy; diff --git a/test/features/access-control.feature b/test/features/access-control.feature index 197619fad..9b5cb0769 100644 --- a/test/features/access-control.feature +++ b/test/features/access-control.feature @@ -7,20 +7,16 @@ Feature: User has access restricted access to domains And I use "REGISTERED" as TOTP token handle And I click on "Sign in" And I'm redirected to "https://home.example.com:8080/" - Then I have access to: - | url | - | https://public.example.com:8080/secret.html | - | https://dev.example.com:8080/groups/admin/secret.html | - | https://dev.example.com:8080/groups/dev/secret.html | - | https://dev.example.com:8080/users/john/secret.html | - | https://dev.example.com:8080/users/harry/secret.html | - | https://dev.example.com:8080/users/bob/secret.html | - | https://admin.example.com:8080/secret.html | - | https://mx1.mail.example.com:8080/secret.html | - | https://single_factor.example.com:8080/secret.html | - And I have no access to: - | url | - | https://mx2.mail.example.com:8080/secret.html | + Then I have access to "https://public.example.com:8080/secret.html" + And I have access to "https://dev.example.com:8080/groups/admin/secret.html" + And I have access to "https://dev.example.com:8080/groups/dev/secret.html" + And I have access to "https://dev.example.com:8080/users/john/secret.html" + And I have access to "https://dev.example.com:8080/users/harry/secret.html" + And I have access to "https://dev.example.com:8080/users/bob/secret.html" + And I have access to "https://admin.example.com:8080/secret.html" + And I have access to "https://mx1.mail.example.com:8080/secret.html" + And I have access to "https://single_factor.example.com:8080/secret.html" + And I have no access to "https://mx2.mail.example.com:8080/secret.html" @need-registered-user-bob Scenario: User bob has restricted access @@ -29,20 +25,16 @@ Feature: User has access restricted access to domains And I use "REGISTERED" as TOTP token handle And I click on "Sign in" And I'm redirected to "https://home.example.com:8080/" - Then I have access to: - | url | - | https://public.example.com:8080/secret.html | - | https://dev.example.com:8080/groups/dev/secret.html | - | https://dev.example.com:8080/users/bob/secret.html | - | https://mx1.mail.example.com:8080/secret.html | - | https://mx2.mail.example.com:8080/secret.html | - And I have no access to: - | url | - | https://dev.example.com:8080/groups/admin/secret.html | - | https://admin.example.com:8080/secret.html | - | https://dev.example.com:8080/users/john/secret.html | - | https://dev.example.com:8080/users/harry/secret.html | - | https://single_factor.example.com:8080/secret.html | + Then I have access to "https://public.example.com:8080/secret.html" + And I have no access to "https://dev.example.com:8080/groups/admin/secret.html" + And I have access to "https://dev.example.com:8080/groups/dev/secret.html" + And I have no access to "https://dev.example.com:8080/users/john/secret.html" + And I have no access to "https://dev.example.com:8080/users/harry/secret.html" + And I have access to "https://dev.example.com:8080/users/bob/secret.html" + And I have no access to "https://admin.example.com:8080/secret.html" + And I have access to "https://mx1.mail.example.com:8080/secret.html" + And I have no access to "https://single_factor.example.com:8080/secret.html" + And I have access to "https://mx2.mail.example.com:8080/secret.html" @need-registered-user-harry Scenario: User harry has restricted access @@ -51,17 +43,13 @@ Feature: User has access restricted access to domains And I use "REGISTERED" as TOTP token handle And I click on "Sign in" And I'm redirected to "https://home.example.com:8080/" - Then I have access to: - | url | - | https://public.example.com:8080/secret.html | - | https://dev.example.com:8080/users/harry/secret.html | - And I have no access to: - | url | - | https://dev.example.com:8080/groups/dev/secret.html | - | https://dev.example.com:8080/users/bob/secret.html | - | https://dev.example.com:8080/groups/admin/secret.html | - | https://admin.example.com:8080/secret.html | - | https://dev.example.com:8080/users/john/secret.html | - | https://mx1.mail.example.com:8080/secret.html | - | https://mx2.mail.example.com:8080/secret.html | - | https://single_factor.example.com:8080/secret.html | \ No newline at end of file + Then I have access to "https://public.example.com:8080/secret.html" + And I have no access to "https://dev.example.com:8080/groups/admin/secret.html" + And I have no access to "https://dev.example.com:8080/groups/dev/secret.html" + And I have no access to "https://dev.example.com:8080/users/john/secret.html" + And I have access to "https://dev.example.com:8080/users/harry/secret.html" + And I have no access to "https://dev.example.com:8080/users/bob/secret.html" + And I have no access to "https://admin.example.com:8080/secret.html" + And I have no access to "https://mx1.mail.example.com:8080/secret.html" + And I have no access to "https://single_factor.example.com:8080/secret.html" + And I have no access to "https://mx2.mail.example.com:8080/secret.html" diff --git a/test/features/reset-password.feature b/test/features/reset-password.feature index 33cf93b17..d449fad78 100644 --- a/test/features/reset-password.feature +++ b/test/features/reset-password.feature @@ -1,24 +1,24 @@ Feature: User is able to reset his password Scenario: User is redirected to password reset page - Given I'm on https://login.example.com:8080 + Given I'm on "https://login.example.com:8080" When I click on the link "Forgot password?" Then I'm redirected to "https://login.example.com:8080/password-reset/request" Scenario: User get an email with a link to reset password - Given I'm on https://login.example.com:8080/password-reset/request + Given I'm on "https://login.example.com:8080/password-reset/request" When I set field "username" to "james" And I click on "Reset Password" Then I get a notification of type "success" with message "An email has been sent to you. Follow the link to change your password." Scenario: Request password for unexisting user should behave like existing user - Given I'm on https://login.example.com:8080/password-reset/request + Given I'm on "https://login.example.com:8080/password-reset/request" When I set field "username" to "fake_user" And I click on "Reset Password" Then I get a notification of type "success" with message "An email has been sent to you. Follow the link to change your password." Scenario: User resets his password - Given I'm on https://login.example.com:8080/password-reset/request + Given I'm on "https://login.example.com:8080/password-reset/request" And I set field "username" to "james" And I click on "Reset Password" When I click on the link of the email @@ -29,7 +29,7 @@ Feature: User is able to reset his password Scenario: User does not confirm new password - Given I'm on https://login.example.com:8080/password-reset/request + Given I'm on "https://login.example.com:8080/password-reset/request" And I set field "username" to "james" And I click on "Reset Password" When I click on the link of the email diff --git a/test/features/resilience.feature b/test/features/resilience.feature index fb1806326..b252ca66a 100644 --- a/test/features/resilience.feature +++ b/test/features/resilience.feature @@ -3,9 +3,7 @@ Feature: Authelia keeps user sessions despite the application restart @need-authenticated-user-john Scenario: Session is still valid after Authelia restarts When the application restarts - Then I have access to: - | url | - | https://admin.example.com:8080/secret.html | + Then I have access to "https://admin.example.com:8080/secret.html" @need-registered-user-john Scenario: Secrets are stored even when Authelia restarts diff --git a/test/features/session-timeout.feature b/test/features/session-timeout.feature index c9947e5f8..1d31bb9d2 100644 --- a/test/features/session-timeout.feature +++ b/test/features/session-timeout.feature @@ -3,18 +3,14 @@ Feature: Session is closed after a certain amount of time @need-authenticated-user-john Scenario: An authenticated user is disconnected after a certain inactivity period - Given I have access to: - | url | - | https://public.example.com:8080/secret.html | + Given I have access to "https://public.example.com:8080/secret.html" When I sleep for 6 seconds And I visit "https://public.example.com:8080/secret.html" Then I'm redirected to "https://login.example.com:8080/?redirect=https%3A%2F%2Fpublic.example.com%3A8080%2Fsecret.html" @need-authenticated-user-john Scenario: An authenticated user is disconnected after session expiration period - Given I have access to: - | url | - | https://public.example.com:8080/secret.html | + Given I have access to "https://public.example.com:8080/secret.html" When I sleep for 4 seconds And I visit "https://public.example.com:8080/secret.html" And I sleep for 4 seconds diff --git a/test/features/step_definitions/access-control.ts b/test/features/step_definitions/access-control.ts new file mode 100644 index 000000000..674d0edf8 --- /dev/null +++ b/test/features/step_definitions/access-control.ts @@ -0,0 +1,17 @@ +import {Then} from "cucumber"; + +Then("I have access to {string}", function(url: string) { + const that = this; + return this.driver.get(url) + .then(function () { + return that.waitUntilUrlContains(url); + }); +}); + +Then("I have no access to {string}", function(url: string) { + const that = this; + return this.driver.get(url) + .then(function () { + return that.getErrorPage(403); + }); +}); \ No newline at end of file diff --git a/test/features/step_definitions/authelia.ts b/test/features/step_definitions/authelia.ts index da3f9676b..e08fcab76 100644 --- a/test/features/step_definitions/authelia.ts +++ b/test/features/step_definitions/authelia.ts @@ -1,51 +1,45 @@ -import Cucumber = require("cucumber"); +import {Before, When, Then} from "cucumber"; import seleniumWebdriver = require("selenium-webdriver"); import Assert = require("assert"); import Request = require("request-promise"); import Bluebird = require("bluebird"); -Cucumber.defineSupportCode(function ({ Given, When, Then, Before, After }) { - Before(function () { - this.jar = Request.jar(); - }) +When("I query {string}", function (url: string) { + const that = this; + return Request(url, { followRedirect: false }) + .then(function(response) { + console.log(response); + that.response = response; + }) + .catch(function(err: Error) { + that.error = err; + }) +}); - When("I query {stringInDoubleQuotes}", function (url: string) { - const that = this; - return Request(url, { followRedirect: false }) - .then(function(response) { - console.log(response); - that.response = response; - }) - .catch(function(err: Error) { - that.error = err; - }) +Then("I get error code 401", function() { + const that = this; + return new Bluebird(function(resolve, reject) { + if(that.error && that.error.statusCode == 401) { + resolve(); + } + else { + if(that.response) + reject(new Error("No error thrown")); + else if(that.error.statusCode != 401) + reject(new Error("Error code != 401")); + } }); +}); - Then("I get error code 401", function() { - const that = this; - return new Bluebird(function(resolve, reject) { - if(that.error && that.error.statusCode == 401) { - resolve(); - } - else { - if(that.response) - reject(new Error("No error thrown")); - else if(that.error.statusCode != 401) - reject(new Error("Error code != 401")); - } - }); +Then("I get redirected to {string}", function(url: string) { + const that = this; + return new Bluebird(function(resolve, reject) { + if(that.error && that.error.statusCode == 302 + && that.error.message.indexOf(url) > -1) { + resolve(); + } + else { + reject(new Error("Not redirected")); + } }); - - Then("I get redirected to {stringInDoubleQuotes}", function(url: string) { - const that = this; - return new Bluebird(function(resolve, reject) { - if(that.error && that.error.statusCode == 302 - && that.error.message.indexOf(url) > -1) { - resolve(); - } - else { - reject(new Error("Not redirected")); - } - }); - }) }); \ No newline at end of file diff --git a/test/features/step_definitions/authentication.ts b/test/features/step_definitions/authentication.ts index f7d923b8d..ec30573f3 100644 --- a/test/features/step_definitions/authentication.ts +++ b/test/features/step_definitions/authentication.ts @@ -1,4 +1,4 @@ -import Cucumber = require("cucumber"); +import {Given, When, Then, TableDefinition} from "cucumber"; import seleniumWebdriver = require("selenium-webdriver"); import Assert = require("assert"); import Fs = require("fs"); @@ -7,127 +7,93 @@ import CustomWorld = require("../support/world"); import BluebirdPromise = require("bluebird"); import Request = require("request-promise"); -Cucumber.defineSupportCode(function ({ Given, When, Then }) { - When(/^I visit "(https:\/\/[a-zA-Z0-9:%&._\/=?-]+)"$/, function (link: string) { - return this.visit(link); - }); +When(/^I visit "(https:\/\/[a-zA-Z0-9:%&._\/=?-]+)"$/, function (link: string) { + return this.visit(link); +}); - When("I wait for notification to disappear", function () { - const that = this; - const notificationEl = this.driver.findElement(seleniumWebdriver.By.className("notification")); - return this.driver.wait(seleniumWebdriver.until.elementIsVisible(notificationEl), 15000) - .then(function () { - return that.driver.wait(seleniumWebdriver.until.elementIsNotVisible(notificationEl), 15000); - }) - }) - - When("I set field {stringInDoubleQuotes} to {stringInDoubleQuotes}", function (fieldName: string, content: string) { - return this.setFieldTo(fieldName, content); - }); - - When("I clear field {stringInDoubleQuotes}", function (fieldName: string) { - return this.clearField(fieldName); - }); - - When("I click on {stringInDoubleQuotes}", function (text: string) { - return this.clickOnButton(text); - }); - - Given("I login with user {stringInDoubleQuotes} and password {stringInDoubleQuotes}", - function (username: string, password: string) { - return this.loginWithUserPassword(username, password); - }); - - Given("I login with user {stringInDoubleQuotes} and password {stringInDoubleQuotes} \ -and I use TOTP token handle {stringInDoubleQuotes}", - function (username: string, password: string, totpTokenHandle: string) { - const that = this; - return this.loginWithUserPassword(username, password) - .then(function () { - return that.useTotpTokenHandle(totpTokenHandle); - }); - }); - - Given("I register a TOTP secret called {stringInDoubleQuotes}", function (handle: string) { - return this.registerTotpSecret(handle); - }); - - Given("I use {stringInDoubleQuotes} as TOTP token", function (token: string) { - return this.useTotpToken(token); - }); - - Given("I use {stringInDoubleQuotes} as TOTP token handle", function (handle) { - return this.useTotpTokenHandle(handle); - }); - - When("I visit {stringInDoubleQuotes} and get redirected {stringInDoubleQuotes}", - function (url: string, redirectUrl: string) { - const that = this; - return this.driver.get(url) - .then(function () { - return that.driver.wait(seleniumWebdriver.until.urlIs(redirectUrl), 2000); - }); - }); - - Given("I register TOTP and login with user {stringInDoubleQuotes} and password {stringInDoubleQuotes}", - function (username: string, password: string) { - return this.registerTotpAndSignin(username, password); - }); - - function hasAccessToSecret(link: string, that: any) { - return that.driver.get(link) - .then(function () { - return that.waitUntilUrlContains(link); - }); - } - - function hasNoAccessToSecret(link: string, that: any) { - return that.driver.get(link) - .then(function () { - return that.getErrorPage(403); - }); - } - - Then("I have access to:", function (dataTable: Cucumber.TableDefinition) { - const promises: any = []; - for (let i = 0; i < dataTable.rows().length; i++) { - const url = (dataTable.hashes() as any)[i].url; - promises.push(hasAccessToSecret(url, this)); - } - return BluebirdPromise.all(promises); - }); - - Then("I have no access to:", function (dataTable: Cucumber.TableDefinition) { - const promises = []; - for (let i = 0; i < dataTable.rows().length; i++) { - const url = (dataTable.hashes() as any)[i].url; - promises.push(hasNoAccessToSecret(url, this)); - } - return BluebirdPromise.all(promises); - }); - - function endpointReplyWith(context: any, link: string, method: string, - returnCode: number) { - return Request(link, { - method: method +When("I wait for notification to disappear", function () { + const that = this; + const notificationEl = this.driver.findElement(seleniumWebdriver.By.className("notification")); + return this.driver.wait(seleniumWebdriver.until.elementIsVisible(notificationEl), 15000) + .then(function () { + return that.driver.wait(seleniumWebdriver.until.elementIsNotVisible(notificationEl), 15000); }) - .then(function (response: string) { - Assert(response.indexOf("Error " + returnCode) >= 0); - return BluebirdPromise.resolve(); - }, function (response: any) { - Assert.equal(response.statusCode, returnCode); - return BluebirdPromise.resolve(); - }); - } +}) - Then("the following endpoints reply with:", function (dataTable: Cucumber.TableDefinition) { - const promises = []; - for (let i = 0; i < dataTable.rows().length; i++) { - const url: string = (dataTable.hashes() as any)[i].url; - const method: string = (dataTable.hashes() as any)[i].method; - const code: number = (dataTable.hashes() as any)[i].code; - promises.push(endpointReplyWith(this, url, method, code)); - } - return BluebirdPromise.all(promises); +When("I set field {string} to {string}", function (fieldName: string, content: string) { + return this.setFieldTo(fieldName, content); +}); + +When("I clear field {string}", function (fieldName: string) { + return this.clearField(fieldName); +}); + +When("I click on {string}", function (text: string) { + return this.clickOnButton(text); +}); + +Given("I login with user {string} and password {string}", + function (username: string, password: string) { + return this.loginWithUserPassword(username, password); }); + +Given("I login with user {string} and password {string} \ +and I use TOTP token handle {string}", + function (username: string, password: string, totpTokenHandle: string) { + const that = this; + return this.loginWithUserPassword(username, password) + .then(function () { + return that.useTotpTokenHandle(totpTokenHandle); + }); + }); + +Given("I register a TOTP secret called {string}", function (handle: string) { + return this.registerTotpSecret(handle); +}); + +Given("I use {string} as TOTP token", function (token: string) { + return this.useTotpToken(token); +}); + +Given("I use {string} as TOTP token handle", function (handle) { + return this.useTotpTokenHandle(handle); +}); + +When("I visit {string} and get redirected {string}", + function (url: string, redirectUrl: string) { + const that = this; + return this.driver.get(url) + .then(function () { + return that.driver.wait(seleniumWebdriver.until.urlIs(redirectUrl), 2000); + }); + }); + +Given("I register TOTP and login with user {string} and password {string}", + function (username: string, password: string) { + return this.registerTotpAndSignin(username, password); + }); + +function endpointReplyWith(context: any, link: string, method: string, + returnCode: number) { + return Request(link, { + method: method + }) + .then(function (response: string) { + Assert(response.indexOf("Error " + returnCode) >= 0); + return BluebirdPromise.resolve(); + }, function (response: any) { + Assert.equal(response.statusCode, returnCode); + return BluebirdPromise.resolve(); + }); +} + +Then("the following endpoints reply with:", function (dataTable: TableDefinition) { + const promises = []; + for (let i = 0; i < dataTable.rows().length; i++) { + const url: string = (dataTable.hashes() as any)[i].url; + const method: string = (dataTable.hashes() as any)[i].method; + const code: number = (dataTable.hashes() as any)[i].code; + promises.push(endpointReplyWith(this, url, method, code)); + } + return BluebirdPromise.all(promises); }); \ No newline at end of file diff --git a/test/features/step_definitions/forward-headers.ts b/test/features/step_definitions/forward-headers.ts index cc53683a2..cbefd1a79 100644 --- a/test/features/step_definitions/forward-headers.ts +++ b/test/features/step_definitions/forward-headers.ts @@ -1,20 +1,18 @@ -import Cucumber = require("cucumber"); +import {Then} from "cucumber"; import seleniumWebdriver = require("selenium-webdriver"); import CustomWorld = require("../support/world"); import Util = require("util"); import BluebirdPromise = require("bluebird"); -Cucumber.defineSupportCode(function ({ Given, When, Then }) { - Then("I see header {stringInDoubleQuotes} set to {stringInDoubleQuotes}", - { timeout: 5000 }, - function (expectedHeaderName: string, expectedValue: string) { - return this.driver.findElement(seleniumWebdriver.By.tagName("body")).getText() - .then(function (txt: string) { - const expectedLine = Util.format("\"%s\": \"%s\"", expectedHeaderName, expectedValue); - if (txt.indexOf(expectedLine) > 0) - return BluebirdPromise.resolve(); - else - return BluebirdPromise.reject(new Error(Util.format("No such header or with unexpected value."))); - }); - }) -}); \ No newline at end of file +Then("I see header {string} set to {string}", + { timeout: 5000 }, + function (expectedHeaderName: string, expectedValue: string) { + return this.driver.findElement(seleniumWebdriver.By.tagName("body")).getText() + .then(function (txt: string) { + const expectedLine = Util.format("\"%s\": \"%s\"", expectedHeaderName, expectedValue); + if (txt.indexOf(expectedLine) > 0) + return BluebirdPromise.resolve(); + else + return BluebirdPromise.reject(new Error(Util.format("No such header or with unexpected value."))); + }); + }) diff --git a/test/features/step_definitions/hooks.ts b/test/features/step_definitions/hooks.ts index 0123a5666..9e49156f0 100644 --- a/test/features/step_definitions/hooks.ts +++ b/test/features/step_definitions/hooks.ts @@ -1,4 +1,4 @@ -import Cucumber = require("cucumber"); +import {setDefaultTimeout, After, Before} from "cucumber"; import fs = require("fs"); import BluebirdPromise = require("bluebird"); import ChildProcess = require("child_process"); @@ -8,133 +8,137 @@ import { MongoConnector } from "../../../server/src/lib/connectors/mongo/MongoCo import { IMongoClient } from "../../../server/src/lib/connectors/mongo/IMongoClient"; import { TotpHandler } from "../../../server/src/lib/authentication/totp/TotpHandler"; import Speakeasy = require("speakeasy"); +import Request = require("request-promise"); -Cucumber.defineSupportCode(function ({ setDefaultTimeout }) { - setDefaultTimeout(20 * 1000); +setDefaultTimeout(20 * 1000); + +const exec = BluebirdPromise.promisify(ChildProcess.exec); + +Before(function () { + this.jar = Request.jar(); +}) + +After(function () { + return this.driver.quit(); }); -Cucumber.defineSupportCode(function ({ After, Before }) { - const exec = BluebirdPromise.promisify(ChildProcess.exec); +function createRegulationConfiguration(): BluebirdPromise { + return exec("\ + cat config.template.yml | \ + sed 's/find_time: [0-9]\\+/find_time: 15/' | \ + sed 's/ban_time: [0-9]\\+/ban_time: 4/' > config.test.yml \ + "); +} - After(function () { - return this.driver.quit(); +function createInactivityConfiguration(): BluebirdPromise { + return exec("\ + cat config.template.yml | \ + sed 's/expiration: [0-9]\\+/expiration: 10000/' | \ + sed 's/inactivity: [0-9]\\+/inactivity: 5000/' > config.test.yml \ + "); +} + +function createSingleFactorConfiguration(): BluebirdPromise { + return exec("\ + cat config.template.yml | \ + sed 's/default_method: two_factor/default_method: single_factor/' > config.test.yml \ + "); +} + +function createCustomTotpIssuerConfiguration(): BluebirdPromise { + return exec("\ + cat config.template.yml > config.test.yml && \ + echo 'totp:' >> config.test.yml && \ + echo ' issuer: custom.com' >> config.test.yml \ + "); +} + +function declareNeedsConfiguration(tag: string, cb: () => BluebirdPromise) { + Before({ tags: "@needs-" + tag + "-config", timeout: 20 * 1000 }, function () { + return cb() + .then(function () { + return exec("./scripts/example-commit/dc-example.sh -f " + + "./example/authelia/docker-compose.test.yml up -d authelia &&" + + " sleep 1"); + }) }); - function createRegulationConfiguration(): BluebirdPromise { - return exec("\ - cat config.template.yml | \ - sed 's/find_time: [0-9]\\+/find_time: 15/' | \ - sed 's/ban_time: [0-9]\\+/ban_time: 4/' > config.test.yml \ - "); - } - - function createInactivityConfiguration(): BluebirdPromise { - return exec("\ - cat config.template.yml | \ - sed 's/expiration: [0-9]\\+/expiration: 10000/' | \ - sed 's/inactivity: [0-9]\\+/inactivity: 5000/' > config.test.yml \ - "); - } - - function createSingleFactorConfiguration(): BluebirdPromise { - return exec("\ - cat config.template.yml | \ - sed 's/default_method: two_factor/default_method: single_factor/' > config.test.yml \ - "); - } - - function createCustomTotpIssuerConfiguration(): BluebirdPromise { - return exec("\ - cat config.template.yml > config.test.yml && \ - echo 'totp:' >> config.test.yml && \ - echo ' issuer: custom.com' >> config.test.yml \ - "); - } - - function declareNeedsConfiguration(tag: string, cb: () => BluebirdPromise) { - Before({ tags: "@needs-" + tag + "-config", timeout: 20 * 1000 }, function () { - return cb() - .then(function () { - return exec("./scripts/example-commit/dc-example.sh -f " + - "./example/authelia/docker-compose.test.yml up -d authelia &&" + - " sleep 1"); - }) - }); - - After({ tags: "@needs-" + tag + "-config", timeout: 20 * 1000 }, function () { - return exec("rm config.test.yml") - .then(function () { - return exec("./scripts/example-commit/dc-example.sh up -d authelia && sleep 1"); - }); - }); - } - - declareNeedsConfiguration("regulation", createRegulationConfiguration); - declareNeedsConfiguration("inactivity", createInactivityConfiguration); - declareNeedsConfiguration("single_factor", createSingleFactorConfiguration); - declareNeedsConfiguration("totp_issuer", createCustomTotpIssuerConfiguration); - - function registerUser(context: any, username: string) { - let secret: Speakeasy.Key; - const mongoConnector = new MongoConnector("mongodb://localhost:27017/authelia"); - return mongoConnector.connect() - .then(function (mongoClient: IMongoClient) { - const collectionFactory = CollectionFactoryFactory.createMongo(mongoClient); - const userDataStore = new UserDataStore(collectionFactory); - - const generator = new TotpHandler(Speakeasy); - secret = generator.generate("user", "authelia.com"); - return userDataStore.saveTOTPSecret(username, secret); - }) + After({ tags: "@needs-" + tag + "-config", timeout: 20 * 1000 }, function () { + return exec("rm config.test.yml") .then(function () { - context.totpSecrets["REGISTERED"] = secret.base32; + return exec("./scripts/example-commit/dc-example.sh up -d authelia && sleep 1"); }); - } + }); +} - function declareNeedRegisteredUserHooks(username: string) { - Before({ tags: "@need-registered-user-" + username, timeout: 15 * 1000 }, function () { - return registerUser(this, username); +declareNeedsConfiguration("regulation", createRegulationConfiguration); +declareNeedsConfiguration("inactivity", createInactivityConfiguration); +declareNeedsConfiguration("single_factor", createSingleFactorConfiguration); +declareNeedsConfiguration("totp_issuer", createCustomTotpIssuerConfiguration); + +function registerUser(context: any, username: string) { + let secret: Speakeasy.Key; + const mongoConnector = new MongoConnector("mongodb://localhost:27017"); + return mongoConnector.connect("authelia") + .then(function (mongoClient: IMongoClient) { + const collectionFactory = CollectionFactoryFactory.createMongo(mongoClient); + const userDataStore = new UserDataStore(collectionFactory); + + const generator = new TotpHandler(Speakeasy); + secret = generator.generate("user", "authelia.com"); + return userDataStore.saveTOTPSecret(username, secret); + }) + .then(function () { + context.totpSecrets["REGISTERED"] = secret.base32; + return mongoConnector.close(); }); +} - After({ tags: "@need-registered-user-" + username, timeout: 15 * 1000 }, function () { - this.totpSecrets["REGISTERED"] = undefined; +function declareNeedRegisteredUserHooks(username: string) { + Before({ tags: "@need-registered-user-" + username, timeout: 15 * 1000 }, function () { + return registerUser(this, username); + }); + + After({ tags: "@need-registered-user-" + username, timeout: 15 * 1000 }, function () { + this.totpSecrets["REGISTERED"] = undefined; + return BluebirdPromise.resolve(); + }); +} + +function needAuthenticatedUser(context: any, username: string): BluebirdPromise { + return context.visit("https://login.example.com:8080/logout") + .then(function () { + return context.visit("https://login.example.com:8080/"); + }) + .then(function () { + return registerUser(context, username); + }) + .then(function () { + return context.loginWithUserPassword(username, "password"); + }) + .then(function () { + return context.useTotpTokenHandle("REGISTERED"); + }) + .then(function () { + return context.clickOnButton("Sign in"); }); - } +} - function needAuthenticatedUser(context: any, username: string): BluebirdPromise { - return context.visit("https://login.example.com:8080/logout") - .then(function () { - return context.visit("https://login.example.com:8080/"); - }) - .then(function () { - return registerUser(context, username); - }) - .then(function () { - return context.loginWithUserPassword(username, "password"); - }) - .then(function () { - return context.useTotpTokenHandle("REGISTERED"); - }) - .then(function () { - return context.clickOnButton("Sign in"); - }); - } +function declareNeedAuthenticatedUserHooks(username: string) { + Before({ tags: "@need-authenticated-user-" + username, timeout: 15 * 1000 }, function () { + return needAuthenticatedUser(this, username); + }); - function declareNeedAuthenticatedUserHooks(username: string) { - Before({ tags: "@need-authenticated-user-" + username, timeout: 15 * 1000 }, function () { - return needAuthenticatedUser(this, username); - }); + After({ tags: "@need-authenticated-user-" + username, timeout: 15 * 1000 }, function () { + this.totpSecrets["REGISTERED"] = undefined; + return BluebirdPromise.resolve(); + }); +} - After({ tags: "@need-authenticated-user-" + username, timeout: 15 * 1000 }, function () { - this.totpSecrets["REGISTERED"] = undefined; - }); - } +function declareHooksForUser(username: string) { + declareNeedRegisteredUserHooks(username); + declareNeedAuthenticatedUserHooks(username); +} - function declareHooksForUser(username: string) { - declareNeedRegisteredUserHooks(username); - declareNeedAuthenticatedUserHooks(username); - } - - const users = ["harry", "john", "bob", "blackhat"]; - users.forEach(declareHooksForUser); -}); \ No newline at end of file +const users = ["harry", "john", "bob", "blackhat"]; +users.forEach(declareHooksForUser); \ No newline at end of file diff --git a/test/features/step_definitions/notifications.ts b/test/features/step_definitions/notifications.ts index 5da9d06ab..4bb3ef707 100644 --- a/test/features/step_definitions/notifications.ts +++ b/test/features/step_definitions/notifications.ts @@ -1,26 +1,23 @@ -import Cucumber = require("cucumber"); +import {Then} from "cucumber"; import seleniumWebdriver = require("selenium-webdriver"); import Assert = require("assert"); import Fs = require("fs"); import CustomWorld = require("../support/world"); -Cucumber.defineSupportCode(function ({ Given, When, Then }) { - Then("I get a notification of type {stringInDoubleQuotes} with message {stringInDoubleQuotes}", - { timeout: 10 * 1000 }, - function (notificationType: string, notificationMessage: string) { - const that = this; - const notificationEl = this.driver.findElement(seleniumWebdriver.By.className("notification")); - return this.driver.wait(seleniumWebdriver.until.elementIsVisible(notificationEl), 5000) - .then(function () { - return notificationEl.getText(); - }) - .then(function (txt: string) { - Assert.equal(notificationMessage, txt); - return notificationEl.getAttribute("class"); - }) - .then(function (classes: string) { - Assert(classes.indexOf(notificationType) > -1, "Class '" + notificationType + "' not found in notification element."); - return that.driver.sleep(500); - }); +Then("I get a notification of type {string} with message {string}", { timeout: 10 * 1000 }, +function (notificationType: string, notificationMessage: string) { + const that = this; + const notificationEl = this.driver.findElement(seleniumWebdriver.By.className("notification")); + return this.driver.wait(seleniumWebdriver.until.elementIsVisible(notificationEl), 5000) + .then(function () { + return notificationEl.getText(); + }) + .then(function (txt: string) { + Assert.equal(notificationMessage, txt); + return notificationEl.getAttribute("class"); + }) + .then(function (classes: string) { + Assert(classes.indexOf(notificationType) > -1, "Class '" + notificationType + "' not found in notification element."); + return that.driver.sleep(500); }); }); \ No newline at end of file diff --git a/test/features/step_definitions/redirection.ts b/test/features/step_definitions/redirection.ts index 988bc64ee..23797c5ec 100644 --- a/test/features/step_definitions/redirection.ts +++ b/test/features/step_definitions/redirection.ts @@ -1,17 +1,15 @@ -import Cucumber = require("cucumber"); +import {Given, When, Then} from "cucumber"; import seleniumWebdriver = require("selenium-webdriver"); import Assert = require("assert"); -Cucumber.defineSupportCode(function ({ Given, When, Then }) { - Given("I'm on https://{string}", function (link: string) { - return this.driver.get("https://" + link); - }); +Given("I'm on {string}", function (link: string) { + return this.driver.get(link); +}); - When("I click on the link to {string}", function (link: string) { - return this.driver.findElement(seleniumWebdriver.By.linkText(link)).click(); - }); +When("I click on the link to {string}", function (link: string) { + return this.driver.findElement(seleniumWebdriver.By.linkText(link)).click(); +}); - Then("I'm redirected to {stringInDoubleQuotes}", function (link: string) { - return this.waitUntilUrlContains(link); - }); +Then("I'm redirected to {string}", function (link: string) { + return this.waitUntilUrlContains(link); }); \ No newline at end of file diff --git a/test/features/step_definitions/registration.ts b/test/features/step_definitions/registration.ts index beab5c5bb..7e861c542 100644 --- a/test/features/step_definitions/registration.ts +++ b/test/features/step_definitions/registration.ts @@ -1,15 +1,13 @@ -import Cucumber = require("cucumber"); +import {When} from "cucumber"; import seleniumWebdriver = require("selenium-webdriver"); import Assert = require("assert"); -Cucumber.defineSupportCode(function ({ Given, When, Then }) { - When("the otpauth url has label {stringInDoubleQuotes} and issuer \ -{stringInDoubleQuotes}", function (label: string, issuer: string) { - return this.driver.findElement(seleniumWebdriver.By.id("qrcode")) - .getAttribute("title") - .then(function (title: string) { - const re = `^otpauth://totp/${label}\\?secret=[A-Z0-9]+&issuer=${issuer}$`; - Assert(new RegExp(re).test(title)); - }) - }); -}); +When("the otpauth url has label {string} and issuer \ +{string}", function (label: string, issuer: string) { + return this.driver.findElement(seleniumWebdriver.By.id("qrcode")) + .getAttribute("title") + .then(function (title: string) { + const re = `^otpauth://totp/${label}\\?secret=[A-Z0-9]+&issuer=${issuer}$`; + Assert(new RegExp(re).test(title)); + }) + }); diff --git a/test/features/step_definitions/regulation.ts b/test/features/step_definitions/regulation.ts index 12766d492..c2ac46287 100644 --- a/test/features/step_definitions/regulation.ts +++ b/test/features/step_definitions/regulation.ts @@ -1,11 +1,9 @@ -import Cucumber = require("cucumber"); +import {When} from "cucumber"; import seleniumWebdriver = require("selenium-webdriver"); import Assert = require("assert"); import Fs = require("fs"); import CustomWorld = require("../support/world"); -Cucumber.defineSupportCode(function ({ Given, When, Then }) { - When("I wait {number} seconds", { timeout: 10 * 1000 }, function (seconds: number) { - return this.driver.sleep(seconds * 1000); - }); -}); \ No newline at end of file +When("I wait {int} seconds", { timeout: 10 * 1000 }, function (seconds: number) { + return this.driver.sleep(seconds * 1000); +}); diff --git a/test/features/step_definitions/reset-password.ts b/test/features/step_definitions/reset-password.ts index c27f751af..d84c4a308 100644 --- a/test/features/step_definitions/reset-password.ts +++ b/test/features/step_definitions/reset-password.ts @@ -1,18 +1,16 @@ -import Cucumber = require("cucumber"); +import {When} from "cucumber"; import seleniumWebdriver = require("selenium-webdriver"); import Assert = require("assert"); import Fs = require("fs"); -Cucumber.defineSupportCode(function ({ Given, When, Then }) { - When("I click on the link {stringInDoubleQuotes}", function (text: string) { - return this.driver.findElement(seleniumWebdriver.By.linkText(text)).click(); - }); +When("I click on the link {string}", function (text: string) { + return this.driver.findElement(seleniumWebdriver.By.linkText(text)).click(); +}); - When("I click on the link of the email", function () { - const that = this; - return this.retrieveLatestMail() - .then(function (link: string) { - return that.driver.get(link); - }); - }); +When("I click on the link of the email", function () { + const that = this; + return this.retrieveLatestMail() + .then(function (link: string) { + return that.driver.get(link); + }); }); \ No newline at end of file diff --git a/test/features/step_definitions/resilience.ts b/test/features/step_definitions/resilience.ts index 509308416..2032d78a6 100644 --- a/test/features/step_definitions/resilience.ts +++ b/test/features/step_definitions/resilience.ts @@ -1,12 +1,10 @@ -import Cucumber = require("cucumber"); +import {When} from "cucumber"; import seleniumWebdriver = require("selenium-webdriver"); import Assert = require("assert"); import ChildProcess = require("child_process"); import BluebirdPromise = require("bluebird"); -Cucumber.defineSupportCode(function ({ Given, When, Then }) { - When(/^the application restarts$/, {timeout: 15 * 1000}, function () { - const exec = BluebirdPromise.promisify(ChildProcess.exec); - return exec("./scripts/example-commit/dc-example.sh restart authelia && sleep 1"); - }); +When(/^the application restarts$/, {timeout: 15 * 1000}, function () { + const exec = BluebirdPromise.promisify(ChildProcess.exec); + return exec("./scripts/example-commit/dc-example.sh restart authelia && sleep 1"); }); \ No newline at end of file diff --git a/test/features/step_definitions/restrictions.ts b/test/features/step_definitions/restrictions.ts index 028113bb4..cf7eb0c18 100644 --- a/test/features/step_definitions/restrictions.ts +++ b/test/features/step_definitions/restrictions.ts @@ -1,72 +1,69 @@ -import Cucumber = require("cucumber"); +import {Before, When, Then, TableDefinition} from "cucumber"; import seleniumWebdriver = require("selenium-webdriver"); import Assert = require("assert"); import Request = require("request-promise"); import Bluebird = require("bluebird"); -Cucumber.defineSupportCode(function ({ Given, When, Then, Before, After }) { - Before(function () { - this.jar = Request.jar(); - }) +Before(function () { + this.jar = Request.jar(); +}); - Then("I get an error {number}", function (code: number) { - return this.getErrorPage(code); +Then("I get an error {int}", function (code: number) { + return this.getErrorPage(code); +}); + +When("I request {string} with method {string}", + function (url: string, method: string) { + const that = this; }); - When("I request {stringInDoubleQuotes} with method {stringInDoubleQuotes}", - function (url: string, method: string) { - const that = this; - - }) - - function requestAndExpectStatusCode(ctx: any, url: string, method: string, - expectedStatusCode: number) { - return Request(url, { - method: method, - jar: ctx.jar - }) - .then(function (body: string) { - return Bluebird.resolve(parseInt(body.match(/Error ([0-9]{3})/)[1])); - }, function (response: any) { - return Bluebird.resolve(response.statusCode) - }) - .then(function (statusCode: number) { - try { - Assert.equal(statusCode, expectedStatusCode); - } - catch (e) { - console.log(url); - console.log("%s (actual) != %s (expected)", statusCode, - expectedStatusCode); - throw e; - } - }) - } - - Then("I get the following status code when requesting:", - function (dataTable: Cucumber.TableDefinition) { - const promises: Bluebird[] = []; - for (let i = 0; i < dataTable.rows().length; i++) { - const url: string = (dataTable.hashes() as any)[i].url; - const method: string = (dataTable.hashes() as any)[i].method; - const code: number = (dataTable.hashes() as any)[i].code; - promises.push(requestAndExpectStatusCode(this, url, method, code)); - } - return Bluebird.all(promises); - }) - - When("I post {stringInDoubleQuotes} with body:", function (url: string, - dataTable: Cucumber.TableDefinition) { - const body = {}; - for (let i = 0; i < dataTable.rows().length; i++) { - const key = (dataTable.hashes() as any)[i].key; - const value = (dataTable.hashes() as any)[i].value; - body[key] = value; - } - return Request.post(url, { - body: body, - jar: this.jar, - json: true - }); +function requestAndExpectStatusCode(ctx: any, url: string, method: string, + expectedStatusCode: number) { + return Request(url, { + method: method, + jar: ctx.jar }) + .then(function (body: string) { + return Bluebird.resolve(parseInt(body.match(/Error ([0-9]{3})/)[1])); + }, function (response: any) { + return Bluebird.resolve(response.statusCode) + }) + .then(function (statusCode: number) { + try { + Assert.equal(statusCode, expectedStatusCode); + } + catch (e) { + console.log(url); + console.log("%s (actual) != %s (expected)", statusCode, + expectedStatusCode); + throw e; + } + }) +} + +Then("I get the following status code when requesting:", + function (dataTable: TableDefinition) { + const promises: Bluebird[] = []; + for (let i = 0; i < dataTable.rows().length; i++) { + const url: string = (dataTable.hashes() as any)[i].url; + const method: string = (dataTable.hashes() as any)[i].method; + const code: number = (dataTable.hashes() as any)[i].code; + promises.push(requestAndExpectStatusCode(this, url, method, code)); + } + return Bluebird.all(promises); + }) + +When("I post {string} with body:", function (url: string, + dataTable: TableDefinition) { + const body = {}; + for (let i = 0; i < dataTable.rows().length; i++) { + const key = (dataTable.hashes() as any)[i].key; + const value = (dataTable.hashes() as any)[i].value; + body[key] = value; + } + return Request.post(url, { + body: body, + jar: this.jar, + json: true + }); }); \ No newline at end of file diff --git a/test/features/step_definitions/session-timeout.ts b/test/features/step_definitions/session-timeout.ts index 98131274b..bbeb66f7b 100644 --- a/test/features/step_definitions/session-timeout.ts +++ b/test/features/step_definitions/session-timeout.ts @@ -1,8 +1,6 @@ -import Cucumber = require("cucumber"); +import {When} from "cucumber"; import seleniumWebdriver = require("selenium-webdriver"); -Cucumber.defineSupportCode(function ({ Given, When, Then }) { - When("I sleep for {number} seconds", function (seconds: number) { - return this.driver.sleep(seconds * 1000); - }); -}); \ No newline at end of file +When("I sleep for {int} seconds", function (seconds: number) { + return this.driver.sleep(seconds * 1000); +}); diff --git a/test/features/step_definitions/single-factor.ts b/test/features/step_definitions/single-factor.ts index cde0dd90d..222480c70 100644 --- a/test/features/step_definitions/single-factor.ts +++ b/test/features/step_definitions/single-factor.ts @@ -1,39 +1,37 @@ -import Cucumber = require("cucumber"); +import {When, Then} from "cucumber"; import seleniumWebdriver = require("selenium-webdriver"); import Request = require("request-promise"); import BluebirdPromise = require("bluebird"); import Util = require("util"); -Cucumber.defineSupportCode(function ({ Given, When, Then }) { - When("I request {stringInDoubleQuotes} with username {stringInDoubleQuotes}" + - " and password {stringInDoubleQuotes} using basic authentication", - function (url: string, username: string, password: string) { - const that = this; - return Request(url, { - auth: { - username: username, - password: password - }, - resolveWithFullResponse: true - }) - .then(function (response: any) { - that.response = response; - }); - }); - - Then("I receive the secret page", function () { - if (this.response.body.match("This is a very important secret!")) - return BluebirdPromise.resolve(); - return BluebirdPromise.reject(new Error("Secret page not received.")); +When("I request {string} with username {string}" + + " and password {string} using basic authentication", + function (url: string, username: string, password: string) { + const that = this; + return Request(url, { + auth: { + username: username, + password: password + }, + resolveWithFullResponse: true + }) + .then(function (response: any) { + that.response = response; + }); }); - Then("I received header {stringInDoubleQuotes} set to {stringInDoubleQuotes}", - function (expectedHeaderName: string, expectedValue: string) { - const expectedLine = Util.format("\"%s\": \"%s\"", expectedHeaderName, - expectedValue); - if (this.response.body.indexOf(expectedLine) > 0) - return BluebirdPromise.resolve(); - return BluebirdPromise.reject(new Error( - Util.format("No such header or with unexpected value."))); - }) -}); \ No newline at end of file +Then("I receive the secret page", function () { + if (this.response.body.match("This is a very important secret!")) + return BluebirdPromise.resolve(); + return BluebirdPromise.reject(new Error("Secret page not received.")); +}); + +Then("I received header {string} set to {string}", + function (expectedHeaderName: string, expectedValue: string) { + const expectedLine = Util.format("\"%s\": \"%s\"", expectedHeaderName, + expectedValue); + if (this.response.body.indexOf(expectedLine) > 0) + return BluebirdPromise.resolve(); + return BluebirdPromise.reject(new Error( + Util.format("No such header or with unexpected value."))); + }); diff --git a/test/features/support/world.ts b/test/features/support/world.ts index 32f3ce396..c1127dc7f 100644 --- a/test/features/support/world.ts +++ b/test/features/support/world.ts @@ -1,6 +1,6 @@ require("chromedriver"); import seleniumWebdriver = require("selenium-webdriver"); -import Cucumber = require("cucumber"); +import {setWorldConstructor, After} from "cucumber"; import Fs = require("fs"); import Speakeasy = require("speakeasy"); import Assert = require("assert"); @@ -63,7 +63,7 @@ function CustomWorld() { this.waitUntilUrlContains = function (url: string) { const that = this; return this.driver.wait(seleniumWebdriver.until.urlIs(url), 15000) - .then(function () { }, function (err: Error) { + .then(function () {return BluebirdPromise.resolve(); }, function (err: Error) { that.driver.getCurrentUrl() .then(function (current: string) { console.error("====> Error due to: %s (current) != %s (expected)", current, url); @@ -176,6 +176,4 @@ function CustomWorld() { }; } -Cucumber.defineSupportCode(function ({ setWorldConstructor }) { - setWorldConstructor(CustomWorld); -}); +setWorldConstructor(CustomWorld); From ae84b056450e20237b9d45a026b41bc07e7bb31c Mon Sep 17 00:00:00 2001 From: Clement Michaud Date: Thu, 29 Mar 2018 22:48:00 +0200 Subject: [PATCH 3/4] Add changelog to the project --- CHANGELOG.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 000000000..9ccfe00d7 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,19 @@ +Release Notes - Version 3.7.1 +------------------------------- +Configuration change: +* storage.mongo now contains two keys: `url` and `database` + +Release Notes - Version 3.7.0 +------------------------------- +Features: +* Support basic authorization for single factor endpoints +* Add issuer and label in TOTP otp url +* Improve UI of second factor page +* Use SHA512 password encryption algorithm of LDAP +* Improve security of Authelia website +* Support for default redirection url +* Support for session inactivity timeout + +Bugs: +* Fix U2F factor not working in Firefox + From a64462d3da223972ad7fd7fcb9fbe7af90beb049 Mon Sep 17 00:00:00 2001 From: Clement Michaud Date: Thu, 29 Mar 2018 23:20:16 +0200 Subject: [PATCH 4/4] Update chrome driver to fix integration tests --- package-lock.json | 47 ++++++++++++++++------------------------------- package.json | 2 +- 2 files changed, 17 insertions(+), 32 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7d324c775..399fed62b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1419,13 +1419,13 @@ } }, "chromedriver": { - "version": "2.33.2", - "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-2.33.2.tgz", - "integrity": "sha512-etnQeM8Mqiys50ZB4IiuNqeB1WS2/EKFhVXwkPQ1qjzKMMAJUyrLjaRUcoZoHrbjGscnhBrWkRR+p3zcTGMhDg==", + "version": "2.37.0", + "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-2.37.0.tgz", + "integrity": "sha512-Dz3ktXp+9T0ygMIEZX3SNL3grXywi2kC1swiD9cjISlLcoenzhOpsj/R/Gr2hJvrC49aGE2BhSpuUevdGq6J4w==", "dev": true, "requires": { "del": "3.0.0", - "extract-zip": "1.6.5", + "extract-zip": "1.6.6", "kew": "0.7.0", "mkdirp": "0.5.1", "request": "2.83.0" @@ -1952,7 +1952,7 @@ "requires": { "globby": "6.1.0", "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.0", + "is-path-in-cwd": "1.0.1", "p-map": "1.2.0", "pify": "3.0.0", "rimraf": "2.4.5" @@ -2501,13 +2501,13 @@ } }, "extract-zip": { - "version": "1.6.5", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.5.tgz", - "integrity": "sha1-maBnNbbqIOqbcF13ms/8yHz/BEA=", + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.6.tgz", + "integrity": "sha1-EpDt6NINCHK0Kf0/NRyhKOxe+Fw=", "dev": true, "requires": { "concat-stream": "1.6.0", - "debug": "2.2.0", + "debug": "2.6.9", "mkdirp": "0.5.0", "yauzl": "2.4.1" }, @@ -2523,15 +2523,6 @@ "typedarray": "0.0.6" } }, - "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "dev": true, - "requires": { - "ms": "0.7.1" - } - }, "mkdirp": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz", @@ -2540,12 +2531,6 @@ "requires": { "minimist": "0.0.8" } - }, - "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", - "dev": true } } }, @@ -4000,18 +3985,18 @@ "dev": true }, "is-path-in-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", - "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", + "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", "dev": true, "requires": { - "is-path-inside": "1.0.0" + "is-path-inside": "1.0.1" } }, "is-path-inside": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz", - "integrity": "sha1-/AbloWg/vaE95mev9xe7wQpI838=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", "dev": true, "requires": { "path-is-inside": "1.0.2" diff --git a/package.json b/package.json index dd4b55d6e..7fae6ee98 100644 --- a/package.json +++ b/package.json @@ -82,7 +82,7 @@ "apidoc": "^0.17.6", "bootstrap": "^4.0.0", "browserify": "^16.1.1", - "chromedriver": "^2.31.0", + "chromedriver": "^2.37.0", "cucumber": "^4.0.0", "grunt": "^1.0.1", "grunt-browserify": "^5.0.0",