From c0579b432b71d7a4161467f17723cef66ee93c76 Mon Sep 17 00:00:00 2001 From: Robinson Rodriguez Date: Sun, 5 Apr 2020 22:25:35 -0500 Subject: [PATCH] chore: upgrade lab to v15 Signed-off-by: Robinson Rodriguez --- package-lock.json | 652 ++++++++++---------------------- package.json | 2 +- test/config_test.js | 94 ++--- test/driver/base_test.js | 10 +- test/driver/index_test.js | 32 +- test/driver/shadow_test.js | 4 +- test/integration/api_test.js | 18 +- test/integration/create_test.js | 260 +++++-------- test/migration_test.js | 83 ++-- test/migrator_test.js | 6 +- test/util_test.js | 23 +- 11 files changed, 374 insertions(+), 810 deletions(-) diff --git a/package-lock.json b/package-lock.json index ec610ecf..63425de5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -67,14 +67,12 @@ "acorn": { "version": "5.7.4", "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", - "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", - "dev": true + "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==" }, "acorn-jsx": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", - "dev": true, "requires": { "acorn": "^3.0.4" }, @@ -82,8 +80,7 @@ "acorn": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", - "dev": true + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=" } } }, @@ -91,7 +88,6 @@ "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.0.0", @@ -102,44 +98,22 @@ "ajv-keywords": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", - "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", - "dev": true - }, - "align-text": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^3.0.2", - "longest": "^1.0.1", - "repeat-string": "^1.5.2" - } - }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "dev": true + "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=" }, "ansi-escapes": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", - "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==", - "dev": true + "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==" }, "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" }, "ansi-styles": { "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.0" } @@ -164,7 +138,6 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, "requires": { "sprintf-js": "~1.0.2" } @@ -219,7 +192,6 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, "requires": { "chalk": "^1.1.3", "esutils": "^2.0.2", @@ -229,14 +201,12 @@ "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" }, "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, "requires": { "ansi-styles": "^2.2.1", "escape-string-regexp": "^1.0.2", @@ -248,14 +218,12 @@ "js-tokens": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, "requires": { "ansi-regex": "^2.0.0" } @@ -263,8 +231,7 @@ "supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" } } }, @@ -293,14 +260,36 @@ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" }, + "boom": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/boom/-/boom-7.3.0.tgz", + "integrity": "sha512-Swpoyi2t5+GhOEGw8rEsKvTxFLIDiiKoUc2gsoV6Lyr43LHBIzch3k2MvYUs8RTROrIkVJ3Al0TkaOGjnb+B6A==", + "requires": { + "hoek": "6.x.x" + }, + "dependencies": { + "hoek": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-6.1.3.tgz", + "integrity": "sha512-YXXAAhmF9zpQbC7LEcREFtXfGq5K1fmd+4PHkBq8NUqmzW3G+Dq10bI/i0KucLRwss3YYFQ0fSfoxBZYiGUqtQ==" + } + } + }, "bossy": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/bossy/-/bossy-3.0.4.tgz", - "integrity": "sha1-+a6fJugbQaMY9O4Ng2huSlwlB7k=", - "dev": true, + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/bossy/-/bossy-4.0.3.tgz", + "integrity": "sha512-2Hr2cgtwNi/BWIxwvrr3UbwczPV8gqoHUS8Wzuawo+StFNHDlj/7HGlETh1LX6SqMauBCU8lb+lLBuIFpBNuTA==", "requires": { - "hoek": "4.x.x", - "joi": "10.x.x" + "boom": "7.x.x", + "hoek": "6.x.x", + "joi": "14.x.x" + }, + "dependencies": { + "hoek": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-6.1.3.tgz", + "integrity": "sha512-YXXAAhmF9zpQbC7LEcREFtXfGq5K1fmd+4PHkBq8NUqmzW3G+Dq10bI/i0KucLRwss3YYFQ0fSfoxBZYiGUqtQ==" + } } }, "brace-expansion": { @@ -322,8 +311,7 @@ "buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" }, "builtin-modules": { "version": "1.1.1", @@ -335,7 +323,6 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", - "dev": true, "requires": { "callsites": "^0.2.0" }, @@ -343,8 +330,7 @@ "callsites": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", - "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", - "dev": true + "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=" } } }, @@ -365,22 +351,10 @@ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", "dev": true }, - "center-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", - "dev": true, - "optional": true, - "requires": { - "align-text": "^0.1.3", - "lazy-cache": "^1.0.3" - } - }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -402,14 +376,12 @@ "circular-json": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", - "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", - "dev": true + "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==" }, "cli-cursor": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dev": true, "requires": { "restore-cursor": "^2.0.0" } @@ -417,8 +389,7 @@ "cli-width": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", - "dev": true + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" }, "cliui": { "version": "6.0.0", @@ -463,8 +434,7 @@ "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" }, "code": { "version": "4.1.0", @@ -485,7 +455,6 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, "requires": { "color-name": "1.1.3" } @@ -493,8 +462,7 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "colors": { "version": "1.2.1", @@ -510,6 +478,12 @@ "delayed-stream": "~1.0.0" } }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "optional": true + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -519,7 +493,6 @@ "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", @@ -542,8 +515,7 @@ "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "cross-spawn": { "version": "6.0.5", @@ -635,8 +607,7 @@ "deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" }, "delayed-stream": { "version": "1.0.0", @@ -659,14 +630,12 @@ "diff": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==" }, "doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, "requires": { "esutils": "^2.0.2" } @@ -703,8 +672,7 @@ "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=", - "dev": true + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "eslint": { "version": "5.12.0", @@ -822,10 +790,9 @@ } }, "eslint-config-hapi": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-hapi/-/eslint-config-hapi-10.1.0.tgz", - "integrity": "sha512-tAUedyvZla1qKt6jhOx7mj5tYDVCwdSyImpEK7wk/A/atKUjg18aHUK6Q6qWWM6rq21I1F/A8JAhIpkk0SvFMQ==", - "dev": true + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-hapi/-/eslint-config-hapi-11.1.0.tgz", + "integrity": "sha512-fCw0uLgkZLQBqYu/lR5MA6cXB+D4c2EEtzrVmhHbGQq3iRCFSaUEOE/N4Sujd1Qh5jkaUc0/kuB/gdv2upt5aQ==" }, "eslint-config-standard": { "version": "12.0.0", @@ -867,7 +834,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/eslint-plugin-hapi/-/eslint-plugin-hapi-4.1.0.tgz", "integrity": "sha512-z1yUoSWArx6pXaC0FoWRFpqjbHn8QWonJiTVhJmiC14jOAT7FZKdKWCkhM4jQrgrkEK9YEv3p2HuzSf5dtWmuQ==", - "dev": true, "requires": { "hapi-capitalize-modules": "1.x.x", "hapi-for-you": "1.x.x", @@ -985,14 +951,12 @@ "eslint-visitor-keys": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", - "dev": true + "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==" }, "espree": { "version": "3.5.4", "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", - "dev": true, "requires": { "acorn": "^5.5.0", "acorn-jsx": "^3.0.0" @@ -1001,14 +965,12 @@ "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, "esquery": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", - "dev": true, "requires": { "estraverse": "^4.0.0" } @@ -1017,7 +979,6 @@ "version": "4.2.1", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", - "dev": true, "requires": { "estraverse": "^4.1.0" } @@ -1025,14 +986,12 @@ "estraverse": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=" }, "esutils": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" }, "extend": { "version": "3.0.2", @@ -1076,26 +1035,22 @@ "fast-deep-equal": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", - "dev": true + "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=", - "dev": true + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" }, "fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" }, "figures": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "dev": true, "requires": { "escape-string-regexp": "^1.0.5" } @@ -1104,7 +1059,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", - "dev": true, "requires": { "flat-cache": "^1.2.1", "object-assign": "^4.0.1" @@ -1132,8 +1086,7 @@ "find-rc": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/find-rc/-/find-rc-3.0.1.tgz", - "integrity": "sha1-VKQXg3DxC8k3H6jRssKAmir6DM4=", - "dev": true + "integrity": "sha1-VKQXg3DxC8k3H6jRssKAmir6DM4=" }, "find-up": { "version": "1.1.2", @@ -1149,7 +1102,6 @@ "version": "1.3.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", - "dev": true, "requires": { "circular-json": "^0.3.1", "graceful-fs": "^4.1.2", @@ -1197,8 +1149,7 @@ "functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" }, "gauge": { "version": "2.7.4", @@ -1277,67 +1228,44 @@ "globals": { "version": "11.9.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.9.0.tgz", - "integrity": "sha512-5cJVtyXWH8PiJPVLZzzoIizXx944O4OmRro5MWKx5fT4MgcN7OfaMutPeaTdJCCURwbWdhhcCWcKIffPnmTzBg==", - "dev": true + "integrity": "sha512-5cJVtyXWH8PiJPVLZzzoIizXx944O4OmRro5MWKx5fT4MgcN7OfaMutPeaTdJCCURwbWdhhcCWcKIffPnmTzBg==" }, "graceful-fs": { "version": "4.1.15", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true + "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==" }, "handlebars": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz", - "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", - "dev": true, + "version": "4.7.6", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.6.tgz", + "integrity": "sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA==", "requires": { - "async": "^1.4.0", - "optimist": "^0.6.1", - "source-map": "^0.4.4", - "uglify-js": "^2.6" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - }, - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true, - "requires": { - "amdefine": ">=0.0.4" - } - } + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4", + "wordwrap": "^1.0.0" } }, "hapi-capitalize-modules": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/hapi-capitalize-modules/-/hapi-capitalize-modules-1.1.6.tgz", - "integrity": "sha1-eZEXFBXhXmqjIx5k3ac8gUZmUxg=", - "dev": true + "integrity": "sha1-eZEXFBXhXmqjIx5k3ac8gUZmUxg=" }, "hapi-for-you": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/hapi-for-you/-/hapi-for-you-1.0.0.tgz", - "integrity": "sha1-02L77o172pwseAHiB+WlzRoLans=", - "dev": true + "integrity": "sha1-02L77o172pwseAHiB+WlzRoLans=" }, "hapi-no-var": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hapi-no-var/-/hapi-no-var-1.0.1.tgz", - "integrity": "sha512-kk2xyyTzI+eQ/oA1rO4eVdCpYsrPHVERHa6+mTHD08XXFLaAkkaEs6reMg1VyqGh2o5xPt//DO4EhCacLx/cRA==", - "dev": true + "integrity": "sha512-kk2xyyTzI+eQ/oA1rO4eVdCpYsrPHVERHa6+mTHD08XXFLaAkkaEs6reMg1VyqGh2o5xPt//DO4EhCacLx/cRA==" }, "hapi-scope-start": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/hapi-scope-start/-/hapi-scope-start-2.1.1.tgz", - "integrity": "sha1-dJWnJv5yt7yo3izcwdh82M5qtPI=", - "dev": true + "integrity": "sha1-dJWnJv5yt7yo3izcwdh82M5qtPI=" }, "har-schema": { "version": "2.0.0", @@ -1394,7 +1322,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, "requires": { "ansi-regex": "^2.0.0" } @@ -1402,8 +1329,7 @@ "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "has-unicode": { "version": "2.0.1", @@ -1443,7 +1369,6 @@ "version": "0.4.21", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.21.tgz", "integrity": "sha512-En5V9za5mBt2oUA03WGD3TwDv0MKAruqsuxstbMUZaj9W9k/m1CV/9py3l0L5kw9Bln8fdHQmzHSYtvpvTLpKw==", - "dev": true, "requires": { "safer-buffer": "^2.1.0" } @@ -1476,8 +1401,7 @@ "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" }, "inflection": { "version": "1.12.0", @@ -1547,13 +1471,6 @@ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true, - "optional": true - }, "is-builtin-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", @@ -1566,8 +1483,7 @@ "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 + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" }, "is-object": { "version": "1.0.1", @@ -1578,14 +1494,12 @@ "is-promise": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", - "dev": true + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" }, "is-resolvable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", - "dev": true + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" }, "is-typedarray": { "version": "1.0.0", @@ -1596,42 +1510,41 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "isemail": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isemail/-/isemail-2.2.1.tgz", - "integrity": "sha1-A1PT2aYpUQgMJiwqoKQrjqjp4qY=", - "dev": true + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/isemail/-/isemail-3.2.0.tgz", + "integrity": "sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg==", + "requires": { + "punycode": "2.x.x" + } }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, - "items": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/items/-/items-2.1.1.tgz", - "integrity": "sha1-i9FtnIOxlSneWuoyGsqtp4NkoZg=", - "dev": true - }, "joi": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-10.6.0.tgz", - "integrity": "sha512-hBF3LcqyAid+9X/pwg+eXjD2QBZI5eXnBFJYaAkH4SK3mp9QSRiiQnDYlmlz5pccMvnLcJRS4whhDOTCkmsAdQ==", - "dev": true, + "version": "14.3.1", + "resolved": "https://registry.npmjs.org/joi/-/joi-14.3.1.tgz", + "integrity": "sha512-LQDdM+pkOrpAn4Lp+neNIFV3axv1Vna3j38bisbQhETPMANYRbFJFUyOZcOClYvM/hppMhGWuKSFEK9vjrB+bQ==", "requires": { - "hoek": "4.x.x", - "isemail": "2.x.x", - "items": "2.x.x", - "topo": "2.x.x" + "hoek": "6.x.x", + "isemail": "3.x.x", + "topo": "3.x.x" + }, + "dependencies": { + "hoek": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-6.1.3.tgz", + "integrity": "sha512-YXXAAhmF9zpQbC7LEcREFtXfGq5K1fmd+4PHkBq8NUqmzW3G+Dq10bI/i0KucLRwss3YYFQ0fSfoxBZYiGUqtQ==" + } } }, "js-tokens": { @@ -1644,7 +1557,6 @@ "version": "3.13.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -1665,14 +1577,12 @@ "json-schema-traverse": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", - "dev": true + "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=", - "dev": true, "requires": { "jsonify": "~0.0.0" } @@ -1680,20 +1590,17 @@ "json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" }, "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" }, "jsonify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" }, "jsprim": { "version": "1.4.1", @@ -1713,53 +1620,39 @@ "integrity": "sha512-FrLwOgm+iXrPV+5zDU6Jqu4gCRXbWEQg2O3SKONsWE4w7AXFRkryS53bpWdaL9cNol+AmR3AEYz6kn+o0fCPnw==", "dev": true }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - }, "lab": { - "version": "14.3.4", - "resolved": "https://registry.npmjs.org/lab/-/lab-14.3.4.tgz", - "integrity": "sha512-IFnuYVRd6CtnFTFgUbjPCFrrCIked5BvGH/dX+/h+6pi3IrQrK21JsKy/J1CshEm6sMe980+oswtK8lZCusHSA==", - "dev": true, + "version": "15.5.0", + "resolved": "https://registry.npmjs.org/lab/-/lab-15.5.0.tgz", + "integrity": "sha512-BRAhsnX1e1Rdku0OsrLzY0pAguxbRjbvBm/Yh6mPUDgyIN7FM8MHfdESjcIwidGGg3aOZT8oL/wXQ23ukysz+A==", "requires": { - "bossy": "3.x.x", - "code": "4.1.x", + "bossy": "4.x.x", "diff": "3.5.x", "eslint": "4.19.x", - "eslint-config-hapi": "10.x.x", + "eslint-config-hapi": "11.x.x", "eslint-plugin-hapi": "4.x.x", "espree": "3.5.x", "find-rc": "3.0.x", "handlebars": "4.x.x", - "hoek": "4.x.x", - "items": "2.x.x", + "hoek": "5.x.x", "json-stable-stringify": "1.x.x", "json-stringify-safe": "5.x.x", "mkdirp": "0.5.x", "seedrandom": "2.4.x", "source-map": "0.6.x", - "source-map-support": "0.4.x", - "supports-color": "4.4.x" + "source-map-support": "0.5.x", + "supports-color": "4.4.x", + "will-call": "1.x.x" }, "dependencies": { "chardet": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", - "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", - "dev": true + "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=" }, "cross-spawn": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, "requires": { "lru-cache": "^4.0.1", "shebang-command": "^1.2.0", @@ -1770,7 +1663,6 @@ "version": "3.2.6", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, "requires": { "ms": "^2.1.1" } @@ -1779,7 +1671,6 @@ "version": "4.19.1", "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", - "dev": true, "requires": { "ajv": "^5.3.0", "babel-code-frame": "^6.22.0", @@ -1825,7 +1716,6 @@ "version": "3.7.3", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.3.tgz", "integrity": "sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==", - "dev": true, "requires": { "esrecurse": "^4.1.0", "estraverse": "^4.1.1" @@ -1835,7 +1725,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", - "dev": true, "requires": { "chardet": "^0.4.0", "iconv-lite": "^0.4.17", @@ -1845,20 +1734,22 @@ "has-flag": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=" + }, + "hoek": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-5.0.4.tgz", + "integrity": "sha512-Alr4ZQgoMlnere5FZJsIyfIjORBqZll5POhDsF4q64dPuJR6rNxXdDxtHSQq8OXRurhmx+PWYEE8bXRROY8h0w==" }, "ignore": { "version": "3.3.10", "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", - "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", - "dev": true + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==" }, "inquirer": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", - "dev": true, "requires": { "ansi-escapes": "^3.0.0", "chalk": "^2.0.0", @@ -1877,22 +1768,19 @@ } }, "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "regexpp": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", - "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", - "dev": true + "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==" }, "slice-ansi": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", - "dev": true, "requires": { "is-fullwidth-code-point": "^2.0.0" } @@ -1901,7 +1789,6 @@ "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": "^2.0.0" } @@ -1910,7 +1797,6 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", - "dev": true, "requires": { "ajv": "^5.2.3", "ajv-keywords": "^2.1.0", @@ -1922,18 +1808,10 @@ } } }, - "lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", - "dev": true, - "optional": true - }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, "requires": { "prelude-ls": "~1.1.2", "type-check": "~0.3.2" @@ -1972,8 +1850,7 @@ "lodash": { "version": "4.17.15", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" }, "lodash.defaults": { "version": "4.2.0", @@ -1992,18 +1869,10 @@ "integrity": "sha512-hcnW80h3j2lbUfFdMArd5UPA/vxZJ+G8vobd+wg3nVEQA0EigStbYcrG030FJxL6xiDDPEkoMatV9xIh5OecQQ==", "dev": true }, - "longest": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", - "dev": true, - "optional": true - }, "lru-cache": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, "requires": { "pseudomap": "^1.0.2", "yallist": "^2.1.2" @@ -2033,8 +1902,7 @@ "mimic-fn": { "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 + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" }, "minimatch": { "version": "3.0.4", @@ -2045,10 +1913,9 @@ } }, "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, "minipass": { "version": "2.9.0", @@ -2146,8 +2013,7 @@ "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" }, "ncp": { "version": "1.0.1", @@ -2182,6 +2048,11 @@ } } }, + "neo-async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", + "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==" + }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", @@ -2212,8 +2083,7 @@ "no-arrowception": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/no-arrowception/-/no-arrowception-1.0.0.tgz", - "integrity": "sha1-W/PpXrnEG1c4SoBTM9qjtzTuMno=", - "dev": true + "integrity": "sha1-W/PpXrnEG1c4SoBTM9qjtzTuMno=" }, "node-fs": { "version": "0.1.7", @@ -2313,8 +2183,7 @@ "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, "once": { "version": "1.4.0", @@ -2328,26 +2197,14 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, "requires": { "mimic-fn": "^1.0.0" } }, - "optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "dev": true, - "requires": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" - } - }, "optionator": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", - "dev": true, "requires": { "deep-is": "~0.1.3", "fast-levenshtein": "~2.0.4", @@ -2360,8 +2217,7 @@ "wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" } } }, @@ -2374,8 +2230,7 @@ "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" }, "osenv": { "version": "0.1.5", @@ -2454,8 +2309,7 @@ "path-is-inside": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" }, "path-key": { "version": "2.0.1", @@ -2538,26 +2392,22 @@ "pluralize": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", - "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", - "dev": true + "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==" }, "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" }, "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=", - "dev": true + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" }, "progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" }, "prompt": { "version": "1.0.0", @@ -2594,8 +2444,7 @@ "pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" }, "psl": { "version": "1.8.0", @@ -2606,8 +2455,7 @@ "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, "qs": { "version": "6.5.2", @@ -2682,7 +2530,6 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", - "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -2699,13 +2546,6 @@ "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", "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=", - "dev": true, - "optional": true - }, "request": { "version": "2.88.2", "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", @@ -2756,7 +2596,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", - "dev": true, "requires": { "caller-path": "^0.1.0", "resolve-from": "^1.0.0" @@ -2765,8 +2604,7 @@ "resolve-from": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", - "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", - "dev": true + "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=" } } }, @@ -2788,7 +2626,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, "requires": { "onetime": "^2.0.0", "signal-exit": "^3.0.2" @@ -2799,16 +2636,6 @@ "resolved": "https://registry.npmjs.org/revalidator/-/revalidator-0.1.8.tgz", "integrity": "sha1-/s5hv6DBtSoga9axgZgYS91SOjs=" }, - "right-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", - "dev": true, - "optional": true, - "requires": { - "align-text": "^0.1.1" - } - }, "rimraf": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", @@ -2821,7 +2648,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", - "dev": true, "requires": { "is-promise": "^2.1.0" } @@ -2829,14 +2655,12 @@ "rx-lite": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", - "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", - "dev": true + "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=" }, "rx-lite-aggregates": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", - "dev": true, "requires": { "rx-lite": "*" } @@ -2853,14 +2677,12 @@ "safe-buffer": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", - "dev": true + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "sax": { "version": "1.2.4", @@ -2869,10 +2691,9 @@ "dev": true }, "seedrandom": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-2.4.3.tgz", - "integrity": "sha1-JDhQTa0zkXMUv/GKxNeU8W1qrsw=", - "dev": true + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-2.4.4.tgz", + "integrity": "sha512-9A+PDmgm+2du77B5i0Ip2cxOqqHjgNxnBgglxLcX78A2D6c2rTo61z4jnVABpF4cKeDMDG+cmXXvdnqse2VqMA==" }, "semver": { "version": "5.5.0", @@ -2888,7 +2709,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, "requires": { "shebang-regex": "^1.0.0" } @@ -2896,14 +2716,12 @@ "shebang-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" }, "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" }, "sinon": { "version": "7.2.2", @@ -2934,24 +2752,15 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "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==", - "dev": true, + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz", + "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==", "requires": { - "source-map": "^0.5.6" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, "spdx-correct": { @@ -2989,8 +2798,7 @@ "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, "sqlite3": { "version": "4.1.1", @@ -3058,7 +2866,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, "requires": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" @@ -3068,7 +2875,6 @@ "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.0" } @@ -3077,7 +2883,6 @@ "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": "^3.0.0" }, @@ -3085,8 +2890,7 @@ "ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" } } }, @@ -3105,7 +2909,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, "requires": { "has-flag": "^3.0.0" } @@ -3186,31 +2989,34 @@ "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" }, "tmp": { "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" } }, "topo": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/topo/-/topo-2.0.2.tgz", - "integrity": "sha1-zVYVdSU5BXwNwEkaYhw7xvvh0YI=", - "dev": true, + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/topo/-/topo-3.0.3.tgz", + "integrity": "sha512-IgpPtvD4kjrJ7CRA3ov2FhWQADwv+Tdqbsf1ZnPUSAtCJ9e1Z44MmoSGDXGk4IppoZA7jd/QRkNddlLJWlUZsQ==", "requires": { - "hoek": "4.x.x" + "hoek": "6.x.x" + }, + "dependencies": { + "hoek": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-6.1.3.tgz", + "integrity": "sha512-YXXAAhmF9zpQbC7LEcREFtXfGq5K1fmd+4PHkBq8NUqmzW3G+Dq10bI/i0KucLRwss3YYFQ0fSfoxBZYiGUqtQ==" + } } }, "tough-cookie": { @@ -3258,7 +3064,6 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, "requires": { "prelude-ls": "~1.1.2" } @@ -3272,76 +3077,18 @@ "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" }, "uglify-js": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", - "dev": true, + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.8.1.tgz", + "integrity": "sha512-W7KxyzeaQmZvUFbGj4+YFshhVrMBGSg2IbcYAjGWGvx8DHvJMclbTDMpffdxFUGPBHjIytk7KJUR/KUXstUGDw==", "optional": true, "requires": { - "source-map": "~0.5.1", - "uglify-to-browserify": "~1.0.0", - "yargs": "~3.10.0" - }, - "dependencies": { - "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", - "dev": true, - "optional": true - }, - "cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", - "dev": true, - "optional": true, - "requires": { - "center-align": "^0.1.1", - "right-align": "^0.1.1", - "wordwrap": "0.0.2" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "optional": true - }, - "wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", - "dev": true, - "optional": true - }, - "yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "dev": true, - "optional": true, - "requires": { - "camelcase": "^1.0.2", - "cliui": "^2.1.0", - "decamelize": "^1.0.0", - "window-size": "0.1.0" - } - } + "commander": "~2.20.3", + "source-map": "~0.6.1" } }, - "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=", - "dev": true, - "optional": true - }, "uri-js": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", @@ -3362,8 +3109,7 @@ "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "utile": { "version": "0.3.0", @@ -3414,7 +3160,6 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, "requires": { "isexe": "^2.0.0" } @@ -3433,12 +3178,10 @@ "string-width": "^1.0.2 || 2" } }, - "window-size": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", - "dev": true, - "optional": true + "will-call": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/will-call/-/will-call-1.0.1.tgz", + "integrity": "sha512-1hEeV8SfBYhNRc/bNXeQfyUBX8Dl9SCYME3qXh99iZP9wJcnhnlBsoBw8Y0lXVZ3YuPsoxImTzBiol1ouNR/hg==" }, "winston": { "version": "2.1.1", @@ -3472,10 +3215,9 @@ } }, "wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", - "dev": true + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" }, "wrap-ansi": { "version": "6.2.0", @@ -3548,7 +3290,6 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", - "dev": true, "requires": { "mkdirp": "^0.5.1" } @@ -3561,8 +3302,7 @@ "yallist": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" }, "yargs": { "version": "15.3.1", diff --git a/package.json b/package.json index 5205686a..31e913b0 100644 --- a/package.json +++ b/package.json @@ -51,6 +51,7 @@ "dotenv": "^5.0.1", "final-fs": "^1.6.0", "inflection": "^1.10.0", + "lab": "15.x", "mkdirp": "~0.5.0", "parse-database-url": "~0.3.0", "prompt": "^1.0.0", @@ -71,7 +72,6 @@ "eslint-plugin-node": "^8.0.1", "eslint-plugin-promise": "^4.0.1", "eslint-plugin-standard": "^4.0.0", - "lab": "^14.3.1", "proxyquire": "^1.4.0", "rimraf": "^2.6.2", "sinon": "^7.2.2" diff --git a/test/config_test.js b/test/config_test.js index 500b3837..2b7b9c81 100644 --- a/test/config_test.js +++ b/test/config_test.js @@ -12,29 +12,21 @@ lab.experiment('config', function () { var configPath = path.join(__dirname, 'database.json'); var _config = config.load(configPath, 'dev'); - lab.test( - 'should export all environment settings', - - function (done) { - Code.expect(_config.dev).to.exists(); - Code.expect(_config.test).to.exists(); - Code.expect(_config.prod).to.exists(); - done(); - } - ); + lab.test('should export all environment settings', () => { + Code.expect(_config.dev).to.exists(); + Code.expect(_config.test).to.exists(); + Code.expect(_config.prod).to.exists(); + }); lab.test( 'should export a getCurrent function with all current ' + - 'environment settings', - - function (done) { + 'environment settings', () => { var current; Code.expect(_config.getCurrent).to.exists(); current = _config.getCurrent(); Code.expect(current.env).to.equal('dev'); Code.expect(current.settings.driver).to.equal('sqlite3'); Code.expect(current.settings.filename).to.equal(':memory:'); - done(); } ); }); @@ -45,12 +37,11 @@ lab.experiment('config', function () { function () { var configPath = path.join(__dirname, 'database_with_syntax_error.json'); - lab.test('should throw a syntax error', function (done) { + lab.test('should throw a syntax error', async () => { Code.expect( config.load.bind(this, configPath, 'dev'), 'Expected broken file to produce syntax error' ).to.throw(SyntaxError); - done(); }); } ); @@ -63,14 +54,11 @@ lab.experiment('config', function () { var _config = config.load(configPath); lab.test( - 'should load a value from the default env', - - function (done) { + 'should load a value from the default env', () => { var current = _config.getCurrent(); Code.expect(current.env).to.equal('local'); Code.expect(current.settings.driver).to.equal('sqlite3'); Code.expect(current.settings.filename).to.equal(':memory:'); - done(); } ); } @@ -88,13 +76,10 @@ lab.experiment('config', function () { var _config = config.load(configPath); lab.test( - 'should load a value from the env set in NODE_ENV', - - function (done) { + 'should load a value from the env set in NODE_ENV', () => { var current = _config.getCurrent(); Code.expect(current.settings.driver).to.equal('sqlite3'); Code.expect(current.settings.filename).to.equal(':memory:'); - done(); } ); } @@ -109,11 +94,8 @@ lab.experiment('config', function () { var _config = config.load(configPath, 'prod'); lab.test( - 'should load a value from the environments', - - function (done) { + 'should load a value from the environments', () => { Code.expect(_config.prod.username).to.equal('username_from_env'); - done(); } ); } @@ -128,16 +110,13 @@ lab.experiment('config', function () { var _config = config.load(configPath, 'prod'); lab.test( - 'should load a value from the environments', - - function (done) { + 'should load a value from the environments', () => { var current = _config.getCurrent(); Code.expect(current.settings.driver).to.equal('postgres'); Code.expect(current.settings.user).to.equal('uname'); Code.expect(current.settings.password).to.equal('pw'); Code.expect(current.settings.host).to.equal('server.com'); Code.expect(current.settings.database).to.equal('dbname'); - done(); } ); } @@ -148,19 +127,14 @@ lab.experiment('config', function () { var _config = config.loadUrl(databaseUrl, 'dev'); lab.test( - 'should export the settings as the current environment', - - function (done) { + 'should export the settings as the current environment', () => { Code.expect(_config.dev).to.exists(); - done(); } ); lab.test( 'should export a getCurrent function with all current ' + - 'environment settings', - - function (done) { + 'environment settings', () => { var current; Code.expect(_config.getCurrent).to.exists(); current = _config.getCurrent(); @@ -170,7 +144,6 @@ lab.experiment('config', function () { Code.expect(current.settings.password).to.equal('pw'); Code.expect(current.settings.host).to.equal('server.com'); Code.expect(current.settings.database).to.equal('dbname'); - done(); } ); }); @@ -180,14 +153,13 @@ lab.experiment('config', function () { config.load = _configLoad; config.loadUrl = _configLoadUrl; - lab.test('should something', function (done) { + lab.test('should something', () => { Code.expect(config.load.bind(this, configPath, 'dev')).to.not.throw(); - done(); }); }); lab.experiment('loading a url from url property', function () { - lab.test('should export a valid config', function (done) { + lab.test('should export a valid config', () => { var databaseUrl = { dev: { url: 'postgres://uname:pw@server.com/dbname' @@ -204,13 +176,9 @@ lab.experiment('config', function () { Code.expect(current.settings.password).to.equal('pw'); Code.expect(current.settings.host).to.equal('server.com'); Code.expect(current.settings.database).to.equal('dbname'); - - done(); }); - lab.test('should export the value if specified in suboject', function ( - done - ) { + lab.test('should export the value if specified in suboject', () => { var databaseUrl = { dev: { url: { @@ -224,8 +192,6 @@ lab.experiment('config', function () { var current = cfg.getCurrent(); Code.expect(current.env).to.equal('dev'); Code.expect(current.settings.url).to.equal('http://example.com'); - - done(); }); }); @@ -241,16 +207,12 @@ lab.experiment('config', function () { var cfg = config.loadObject(databaseUrl, 'dev'); - lab.test('should export the settings as the current environment', function ( - done - ) { + lab.test('should export the settings as the current environment', () => { Code.expect(cfg.dev).to.exists(); - done(); }); lab.test( - 'should export a getCurrent function with all current environment settings', - function (done) { + 'should export a getCurrent function with all current environment settings', () => { Code.expect(cfg.getCurrent).to.exists(); var current = cfg.getCurrent(); Code.expect(current.env).to.equal('dev'); @@ -262,8 +224,6 @@ lab.experiment('config', function () { Code.expect(current.settings.host).to.equal('server.com'); Code.expect(current.settings.database).to.equal('dbname'); Code.expect(current.settings.ssl).to.equal(true); - - done(); } ); }); @@ -273,7 +233,7 @@ lab.experiment('config', function () { function () { lab.test( 'should export a getCurrent function with all current environment settings', - function (done, cleanup) { + function (flags) { process.env.DATABASE_URL = 'postgres://uname:pw@server.com/dbname'; var databaseUrl = { dev: { @@ -285,10 +245,9 @@ lab.experiment('config', function () { }; var cfg = config.loadObject(databaseUrl, 'dev'); - cleanup(function (next) { + flags.onCleanup = () => { delete process.env.DATABASE_URL; - next(); - }); + }; Code.expect(cfg.getCurrent).to.exists(); var current = cfg.getCurrent(); @@ -301,8 +260,6 @@ lab.experiment('config', function () { Code.expect(current.settings.host).to.equal('server.com'); Code.expect(current.settings.database).to.equal('dbname'); Code.expect(current.settings.ssl).to.equal(true); - - done(); } ); } @@ -311,7 +268,7 @@ lab.experiment('config', function () { lab.experiment( 'loading from an ENV URL within the object and extending it from the ENV', function () { - lab.test('', function (done, cleanup) { + lab.test('', function (flags) { process.env.DATABASE_URL = 'postgres://uname:pw@server.com/dbname?ssl=false&testing=false'; var databaseUrl = { @@ -332,10 +289,9 @@ lab.experiment('config', function () { }; var cfg = config.loadObject(databaseUrl, 'dev'); - cleanup(function (next) { + flags.onCleanup = () => { delete process.env.DATABASE_URL; - next(); - }); + }; Code.expect(cfg.getCurrent).to.exists(); var current = cfg.getCurrent(); @@ -352,8 +308,6 @@ lab.experiment('config', function () { Code.expect(current.settings.testing).to.equal('false'); Code.expect(current.settings.cache).to.equal(false); Code.expect(current.settings.ssl).to.equal(true); - - done(); }); } ); diff --git a/test/driver/base_test.js b/test/driver/base_test.js index 5c6462f1..82d0a159 100644 --- a/test/driver/base_test.js +++ b/test/driver/base_test.js @@ -15,13 +15,12 @@ lab.experiment('base', function () { lab.experiment('default implementation', function () { var base = new Base(internals); - lab.test('inherits from EventEmitter', function (done) { + lab.test('inherits from EventEmitter', () => { Code.expect(base.on).to.be.not.null(); Code.expect(base.emit).to.be.not.null(); - done(); }); - lab.test('throws errors for all API methods', function (done) { + lab.test('throws errors for all API methods', () => { Code.expect(function () { base.createTable(); }).to.throw(Error); @@ -77,15 +76,12 @@ lab.experiment('base', function () { Code.expect(function () { base.runSql(); }).to.throw(Error); - - done(); }); - lab.test('escapes single quotes', function (done) { + lab.test('escapes single quotes', () => { Code.expect("Bill''s Mother''s House").to.equal( base.escape("Bill's Mother's House") ); - done(); }); }); }); diff --git a/test/driver/index_test.js b/test/driver/index_test.js index a5ccc2b8..f57e7a02 100644 --- a/test/driver/index_test.js +++ b/test/driver/index_test.js @@ -14,10 +14,6 @@ var validDbConfigWithTunnel = { } }; -var internals = { - migrationTable: 'migrations' -}; - var indexConnectCallback = function (tunnelStub, driverSpy, callback) { return function (err, db) { if (err) { @@ -31,7 +27,7 @@ var indexConnectCallback = function (tunnelStub, driverSpy, callback) { lab.experiment('index', function () { lab.test('a successful connection with ssh tunnel with expected parameters', - function (done, cleanup) { + function (flags) { // Ensure that require gets a new copy of the module for each test delete require.cache[require.resolve('db-migrate-mysql')]; var driver = require('db-migrate-mysql'); @@ -44,13 +40,13 @@ lab.experiment('index', function () { 'tunnel-ssh': tunnelStub, './mysql': driver }); + // register clean up - cleanup(function (next) { + flags.onCleanup = () => { driverSpy.restore(); delete require.cache[require.resolve('tunnel-ssh')]; delete require.cache[require.resolve('db-migrate-mysql')]; - next(); - }); + }; index.connect( validDbConfigWithTunnel, @@ -85,12 +81,10 @@ lab.experiment('index', function () { Code.expect( driverSpy.withArgs(expectedDbConfig).calledOnce ).to.be.true(); - - done(); } }); - lab.test('a failed connection with ssh tunnel', function (done, cleanup) { + lab.test('a failed connection with ssh tunnel', (flags) => { // Ensure that require gets a new copy of the module for each test delete require.cache[require.resolve('db-migrate-mysql')]; var driver = require('db-migrate-mysql'); @@ -110,12 +104,11 @@ lab.experiment('index', function () { ); // register clean up - cleanup(function (next) { + flags.onCleanup = () => { driverSpy.restore(); delete require.cache[require.resolve('tunnel-ssh')]; delete require.cache[require.resolve('db-migrate-mysql')]; - next(); - }); + }; function validate (err, db, tunnelStub, driverSpy) { Code.expect(err, 'err should be non-null') @@ -127,13 +120,11 @@ lab.experiment('index', function () { .to.be.true(); Code.expect(driverSpy.notCalled, 'driver.connect should not be called') .to.be.true(); - - done(); } }); lab.test('privateKey gets set as expected', - function (done, cleanup) { + function (flags) { // Ensure that require gets a new copy of the module for each test delete require.cache[require.resolve('db-migrate-mysql')]; var driver = require('db-migrate-mysql'); @@ -150,13 +141,12 @@ lab.experiment('index', function () { }); // register clean up - cleanup(function (next) { + flags.onCleanup = () => { driverSpy.restore(); delete require.cache[require.resolve('tunnel-ssh')]; delete require.cache[require.resolve('db-migrate-mysql')]; - next(); - }); + }; validDbConfigWithTunnel.tunnel.privateKeyPath = '/test/key'; @@ -200,8 +190,6 @@ lab.experiment('index', function () { Code.expect( driverSpy.withArgs(expectedDbConfig).calledOnce ).to.be.true(); - - done(); } }); }); diff --git a/test/driver/shadow_test.js b/test/driver/shadow_test.js index 79aa7196..e473025b 100644 --- a/test/driver/shadow_test.js +++ b/test/driver/shadow_test.js @@ -2,12 +2,11 @@ var Code = require('code'); // assertion library var Lab = require('lab'); var lab = exports.lab = Lab.script(); var sinon = require('sinon'); -var Bluebird = require('bluebird'); var shadow = require('../../lib/driver/shadow.js'); lab.experiment('shadow', function () { lab.test('shadow function and original function get called in serial', - function (done) { + function () { var stub = sinon.stub().callsArg(0); var shadowStub = sinon.stub().resolves(); var infected = shadow.infect({ @@ -19,7 +18,6 @@ lab.experiment('shadow', function () { infected.test(function () { Code.expect(shadowStub.calledOnce).to.be.true(); Code.expect(stub.calledOnce).to.be.true(); - done(); }); }); }); diff --git a/test/integration/api_test.js b/test/integration/api_test.js index c1fc6aa5..f7bfe889 100644 --- a/test/integration/api_test.js +++ b/test/integration/api_test.js @@ -7,16 +7,14 @@ var Promise = require('bluebird'); lab.experiment('api', function () { lab.test( - 'force process exit after migrations have been run', - - function (done, onCleanup) { + 'force process exit after migrations have been run', (flags) => { var processExit = process.exit; var argv = process.argv; var called = false; var config = {}; // register cleanup method and start preparing the test - onCleanup(teardown); + flags.onCleanup = teardown; overwriteExit(); var dbmigrate = stubApiInstance( @@ -44,7 +42,6 @@ lab.experiment('api', function () { */ function validate () { Code.expect(called).to.be.true(); - done(); } function upStub (internals) { @@ -75,15 +72,14 @@ lab.experiment('api', function () { }; } - function teardown (next) { + function teardown () { process.exit = processExit; process.argv = argv; - return next(); } } ); - lab.test('should load config from parameter', function (done) { + lab.test('should load config from parameter', () => { var options = { env: 'dev', cwd: process.cwd() + '/test/integration', @@ -107,12 +103,9 @@ lab.experiment('api', function () { delete actual.getCurrent; Code.expect(actual).to.equal(expected); - done(); }); - lab.test('should load commandline options from options parameter', function ( - done - ) { + lab.test('should load commandline options from options parameter', () => { var options = { cmdOptions: { 'migrations-dir': './test' @@ -127,7 +120,6 @@ lab.experiment('api', function () { delete actual.getCurrent; Code.expect(actual).to.equal(expected); - done(); }); lab.test( diff --git a/test/integration/create_test.js b/test/integration/create_test.js index c6a640df..1c620233 100644 --- a/test/integration/create_test.js +++ b/test/integration/create_test.js @@ -6,13 +6,14 @@ const lab = (exports.lab = Lab.script()); const fs = require('fs'); const path = require('path'); const cp = require('child_process'); +const util = require('util'); const dbmUtil = require('db-migrate-shared').util; -const rmdir = require('rimraf'); +const rmdir = util.promisify(require('rimraf')); -function wipeMigrations (callback) { +function wipeMigrations () { const dir = path.join(__dirname, 'migrations'); - rmdir(dir, callback); + return rmdir(dir); } function dbMigrate () { @@ -23,73 +24,61 @@ function dbMigrate () { } lab.experiment('create', function () { - lab.experiment('without a migration directory', function () { + lab.experiment('without a migration directory', () => { let exitCode; - lab.before(function (done) { - wipeMigrations(function (err) { - Code.expect(err).to.be.null(); - const db = dbMigrate('create', 'first migration'); - // db.stderr.on('data', data => console.log(data.toString())); - // db.stdout.on('data', data => console.log(data.toString())); + lab.before(async () => { + await wipeMigrations(); - db.on('exit', function (code) { - exitCode = code; - done(); - }); - }); + const db = dbMigrate('create', 'first migration'); + // db.stderr.on('data', data => console.log(data.toString())); + // db.stdout.on('data', data => console.log(data.toString())); + + const exitCodePromise = new Promise((resolve) => db.on('exit', resolve)); + exitCode = await exitCodePromise; }); - lab.test('does not cause an error', function (done) { + lab.test('does not cause an error', () => { Code.expect(exitCode).to.equal(0); - done(); }); - lab.test('will create a new migration directory', function (done) { + lab.test('will create a new migration directory', () => { const stats = fs.statSync(path.join(__dirname, 'migrations')); Code.expect(stats.isDirectory()).to.be.true(); - done(); }); - lab.test('will create a new migration', function (done) { + lab.test('will create a new migration', () => { const files = fs.readdirSync(path.join(__dirname, 'migrations')); Code.expect(files.length).to.equal(1); const file = files[0]; Code.expect(file).to.match(/first-migration\.js$/); - done(); }); }); lab.experiment( - 'with sql-file option set to true from config file', - function () { + 'with sql-file option set to true from config file', () => { let exitCode; - lab.before(function (done) { + lab.before(async () => { const configOption = path.join( '--config=', __dirname, 'database_with_sql_file.json' ); - wipeMigrations(function (err) { - Code.expect(err).to.not.exist(); - dbMigrate('create', 'second migration', configOption).on( - 'exit', - function (code) { - exitCode = code; - done(); - } - ); + await wipeMigrations(); + const exitCodePromise = new Promise((resolve) => { + dbMigrate('create', 'second migration', configOption) + .on('exit', resolve); }); + exitCode = await exitCodePromise; }); - lab.test('does not cause an error', function (done) { + lab.test('does not cause an error', () => { Code.expect(exitCode).to.equal(0); - done(); }); - lab.test('will create a new migration', function (done) { + lab.test('will create a new migration', () => { const files = fs.readdirSync(path.join(__dirname, 'migrations')); for (let i = 0; i < files.length; i++) { @@ -99,51 +88,42 @@ lab.experiment('create', function () { Code.expect(file).to.match(/second-migration\.js$/); } } - - done(); }); - lab.test('will create a new migration/sqls directory', function (done) { + lab.test('will create a new migration/sqls directory', () => { const stats = fs.statSync(path.join(__dirname, 'migrations/sqls')); Code.expect(stats.isDirectory()).to.be.true(); - done(); }); - lab.test('will create a new migration sql up file', function (done) { + lab.test('will create a new migration sql up file', () => { const files = fs.readdirSync(path.join(__dirname, 'migrations/sqls')); Code.expect(files.length).to.equal(2); const file = files[1]; Code.expect(file).to.match(/second-migration-up\.sql$/); - done(); }); } ); lab.experiment( - 'with sql-file option set to true as a command parameter', - function () { + 'with sql-file option set to true as a command parameter', () => { let exitCode; - lab.before(function (done) { + lab.before(async () => { const configOption = path.join('--sql-file'); - wipeMigrations(function (err) { - Code.expect(err).to.not.exist(); - dbMigrate('create', 'third migration', configOption).on( - 'exit', - function (code) { - exitCode = code; - done(); - } - ); + + await wipeMigrations(); + const exitCodePromise = new Promise((resolve) => { + dbMigrate('create', 'third migration', configOption).on('exit', resolve); }); + + exitCode = await exitCodePromise; }); - lab.test('does not cause an error', function (done) { + lab.test('does not cause an error', () => { Code.expect(exitCode).to.equal(0); - done(); }); - lab.test('will create a new migration', function (done) { + lab.test('will create a new migration', () => { const files = fs.readdirSync(path.join(__dirname, 'migrations')); for (let i = 0; i < files.length; i++) { @@ -153,55 +133,45 @@ lab.experiment('create', function () { Code.expect(file).to.match(/third-migration\.js$/); } } - done(); }); - lab.test('will create a new migration/sqls directory', function (done) { + lab.test('will create a new migration/sqls directory', () => { const stats = fs.statSync(path.join(__dirname, 'migrations/sqls')); Code.expect(stats.isDirectory()).to.be.true(); - done(); }); - lab.test('will create a new migration sql up file', function (done) { + lab.test('will create a new migration sql up file', () => { const files = fs.readdirSync(path.join(__dirname, 'migrations/sqls')); Code.expect(files.length).to.equal(2); const file = files[1]; Code.expect(file).to.match(/third-migration-up\.sql$/); - done(); }); } ); lab.experiment( - 'with coffee-file option set to true from config file', - function () { + 'with coffee-file option set to true from config file', () => { let exitCode; - lab.before(function (done) { + lab.before(async () => { const configOption = path.join( '--config=', __dirname, 'database_with_coffee_file.json' ); - wipeMigrations(function (err) { - Code.expect(err).to.not.exist(); - dbMigrate('create', 'fourth migration', configOption).on( - 'exit', - function (code) { - exitCode = code; - done(); - } - ); + await wipeMigrations(); + const exitCodePromise = new Promise((resolve) => { + dbMigrate('create', 'fourth migration', configOption).on('exit', resolve); }); + exitCode = await exitCodePromise; }); - lab.test('does not cause an error', function (done) { + lab.test('does not cause an error', () => { Code.expect(exitCode).to.equal(0); - done(); }); - lab.test('will create a new coffeescript migration', function (done) { + lab.test('will create a new coffeescript migration', () => { const files = fs.readdirSync(path.join(__dirname, 'migrations')); for (let i = 0; i < files.length; i++) { @@ -211,92 +181,74 @@ lab.experiment('create', function () { Code.expect(file).to.match(/fourth-migration\.coffee$/); } } - - done(); }); } ); lab.experiment( - 'with scoped migration', - function () { - let exitCode; - lab.experiment('without a migration directory', function () { + 'with scoped migration', () => { + lab.experiment('without a migration directory', () => { let exitCode; - lab.before(function (done) { - wipeMigrations(function (err) { - Code.expect(err).to.be.null(); - const configOption = path.join('--sql-file'); - const db = dbMigrate('create', 'test/first migration', configOption); - // db.stderr.on('data', data => console.log(data.toString())); - // db.stdout.on('data', data => console.log(data.toString())); - - db.on('exit', function (code) { - exitCode = code; - done(); - }); - }); + lab.before(async () => { + await wipeMigrations(); + const configOption = path.join('--sql-file'); + const db = dbMigrate('create', 'test/first migration', configOption); + // db.stderr.on('data', data => console.log(data.toString())); + // db.stdout.on('data', data => console.log(data.toString())); + + const exitCodePromise = new Promise((resolve) => db.on('exit', resolve)); + exitCode = await exitCodePromise; }); - lab.test('does not cause an error', function (done) { + lab.test('does not cause an error', () => { Code.expect(exitCode).to.equal(0); - done(); }); - lab.test('will create a new migration directory', function (done) { + lab.test('will create a new migration directory', () => { const stats = fs.statSync(path.join(__dirname, 'migrations/test')); Code.expect(stats.isDirectory()).to.be.true(); - done(); }); - lab.test('will create a new migration', function (done) { + lab.test('will create a new migration', () => { const files = fs.readdirSync(path.join(__dirname, 'migrations/test')); Code.expect(files.length).to.equal(2); const file = files[0]; Code.expect(file).to.match(/first-migration\.js$/); - done(); }); - lab.test('will create a new migration/test/sqls directory', function (done) { + lab.test('will create a new migration/test/sqls directory', () => { const stats = fs.statSync(path.join(__dirname, 'migrations/test/sqls')); Code.expect(stats.isDirectory()).to.be.true(); - done(); }); - lab.test('will create a new migration sql up file', function (done) { + lab.test('will create a new migration sql up file', () => { const files = fs.readdirSync(path.join(__dirname, 'migrations/test/sqls')); Code.expect(files.length).to.equal(2); const file = files[1]; Code.expect(file).to.match(/first-migration-up\.sql$/); - done(); }); }); } ); lab.experiment( - 'with coffee-file option set to true as a command parameter', - function () { + 'with coffee-file option set to true as a command parameter', () => { let exitCode; - lab.before(function (done) { + lab.before(async () => { const configOption = path.join('--coffee-file'); - wipeMigrations(function (err) { - Code.expect(err).to.not.exist(); - dbMigrate('create', 'fifth migration', configOption).on( - 'exit', - function (code) { - exitCode = code; - done(); - } - ); + + await wipeMigrations(); + + const exitCodePromise = new Promise((resolve) => { + dbMigrate('create', 'fifth migration', configOption).on('exit', resolve); }); + exitCode = await exitCodePromise; }); - lab.test('does not cause an error', function (done) { + lab.test('does not cause an error', () => { Code.expect(exitCode).to.equal(0); - done(); }); - lab.test('will create a new coffeescript migration', function (done) { + lab.test('will create a new coffeescript migration', () => { const files = fs.readdirSync(path.join(__dirname, 'migrations')); for (let i = 0; i < files.length; i++) { @@ -306,53 +258,49 @@ lab.experiment('create', function () { Code.expect(file).to.match(/fifth-migration\.coffee$/); } } - done(); }); } ); lab.experiment( - 'with sql-file and a bad migration, causes an exit', - function () { + 'with sql-file and a bad migration, causes an exit', () => { let exitCode; - lab.before(function (done) { + lab.before(async () => { const configOption = path.join('--sql-file'); - wipeMigrations(function (err) { - Code.expect(err).to.not.exist(); - dbMigrate('create', 'sixth migration', configOption).on( - 'exit', - function () { - const files = fs.readdirSync(path.join(__dirname, 'migrations')); - - for (let i = 0; i < files.length; i++) { - const file = files[i]; - const stats = fs.statSync( - path.join(__dirname, 'migrations', file) - ); - - if (stats.isFile() && file.match(/sixth-migration\.js$/)) { - fs.writeFileSync( - path.join(__dirname, 'migrations', file), - 'asdfghij;' - ); - dbMigrate('up').on('exit', function (code) { - exitCode = code; - done(); - }); - } - } + + await wipeMigrations(); + + dbMigrate('create', 'sixth migration', configOption).on('exit', () => { + const files = fs.readdirSync(path.join(__dirname, 'migrations')); + + for (let i = 0; i < files.length; i++) { + const file = files[i]; + const stats = fs.statSync( + path.join(__dirname, 'migrations', file) + ); + + if (stats.isFile() && file.match(/sixth-migration\.js$/)) { + fs.writeFileSync( + path.join(__dirname, 'migrations', file), + 'asdfghij;' + ); } - ); + } + }); + + const codePromise = new Promise((resolve) => { + dbMigrate('up').on('exit', resolve); }); + + exitCode = await codePromise; }); - lab.test('does cause an error', function (done) { + lab.test('does cause an error', () => { Code.expect(exitCode).to.equal(1); - done(); }); - lab.test('did create the new migration', function (done) { + lab.test('did create the new migration', () => { const files = fs.readdirSync(path.join(__dirname, 'migrations')); for (let i = 0; i < files.length; i++) { @@ -362,12 +310,10 @@ lab.experiment('create', function () { Code.expect(file).to.match(/sixth-migration\.js$/); } } - - done(); }); - lab.after(function (done) { - cp.exec('rm -r ' + path.join(__dirname, 'migrations'), done); + lab.after(() => { + cp.exec('rm -r ' + path.join(__dirname, 'migrations')); }); } ); diff --git a/test/migration_test.js b/test/migration_test.js index 2e502a8f..e31cc4ef 100644 --- a/test/migration_test.js +++ b/test/migration_test.js @@ -34,11 +34,11 @@ lab.experiment('migration', function () { }); function asModule () { - lab.test('should create migration', function (done) { + lab.test('should create migration', async () => { const dbmigrate = stubApiInstance(true, {}, {}); dbmigrate.setConfigParam('_', []); - dbmigrate.create('migrationName').then(done); + await dbmigrate.create('migrationName'); }); } @@ -53,42 +53,33 @@ function newMigrationObject () { ); lab.test( - 'should have title set without file extension', - - function (done) { + 'should have title set without file extension', () => { Code.expect(migration.title).to.equal(fileNameNoExtension); - done(); } ); - lab.test('should have date set', function (done) { + lab.test('should have date set', () => { migration.date.setMilliseconds(0); date.setMilliseconds(0); Code.expect(migration.date.getTime()).to.equal(date.getTime()); - done(); }); lab.test( - 'should have name set without file extension', - - function (done) { + 'should have name set without file extension', () => { Code.expect(migration.name).to.equal( dateString + '-' + fileNameNoExtension ); - done(); } ); - lab.test('should have path set', function (done) { + lab.test('should have path set', () => { Code.expect(migration.path).to.equal( dirName + dateString + '-' + fileName ); - done(); }); - lab.test('should have templateType not set', function (done) { + lab.test('should have templateType not set', () => { Code.expect(migration.templateType).to.be.undefined(); - done(); }); } ); @@ -96,31 +87,26 @@ function newMigrationObject () { lab.experiment('with 3 parameters', function () { const migration = new Migration(fileName, dirName, date); - lab.test('should have title set', function (done) { + lab.test('should have title set', () => { Code.expect(migration.title).to.equal(fileName); - done(); }); - lab.test('should have date set with month', function (done) { + lab.test('should have date set with month', () => { Code.expect(migration.date).to.equal(date); - done(); }); - lab.test('should have name set', function (done) { + lab.test('should have name set', () => { Code.expect(migration.name).to.equal(dateString + '-' + fileName); - done(); }); - lab.test('should have path set', function (done) { + lab.test('should have path set', () => { Code.expect(migration.path).to.equal( dirName + dateString + '-' + fileName ); - done(); }); - lab.test('should have templateType not set', function (done) { + lab.test('should have templateType not set', () => { Code.expect(migration.templateType).to.be.undefined(); - done(); }); }); @@ -133,31 +119,26 @@ function newMigrationObject () { internals ); - lab.test('should have title set', function (done) { + lab.test('should have title set', () => { Code.expect(migration.file.title).to.equal(fileName); - done(); }); - lab.test('should have date set', function (done) { + lab.test('should have date set', () => { Code.expect(migration.file.date).to.equal(date); - done(); }); - lab.test('should have name set', function (done) { + lab.test('should have name set', () => { Code.expect(migration.file.name).to.equal(dateString + '-' + fileName); - done(); }); - lab.test('should have path set', function (done) { + lab.test('should have path set', () => { Code.expect(migration.file.path).to.equal( dirName + dateString + '-' + fileName ); - done(); }); - lab.test('should have templateType set', function (done) { + lab.test('should have templateType set', () => { Code.expect(migration.templateType).to.equal(templateType); - done(); }); }); } @@ -170,12 +151,9 @@ function getTemplate () { const migration = new Template(fileName, dirName, date, internals); lab.test( - 'should return default javascript template', - - function (done) { + 'should return default javascript template', () => { const actual = migration.getTemplate(); Code.expect(actual).to.equal(migration.defaultJsTemplate()); - done(); } ); } @@ -192,12 +170,9 @@ function getTemplate () { ); lab.test( - 'should return sql file loader template', - - function (done) { + 'should return sql file loader template', () => { const actual = migration.getTemplate(); Code.expect(actual).to.equal(migration.sqlFileLoaderTemplate()); - done(); } ); }); @@ -212,12 +187,9 @@ function getTemplate () { ); lab.test( - 'should return default sql template', - - function (done) { + 'should return default sql template', () => { const actual = migration.getTemplate(); Code.expect(actual).to.equal(migration.defaultSqlTemplate()); - done(); } ); }); @@ -232,12 +204,9 @@ function getTemplate () { ); lab.test( - 'should return default coffee template', - - function (done) { + 'should return default coffee template', () => { const actual = migration.getTemplate(); Code.expect(actual).to.equal(migration.defaultCoffeeTemplate()); - done(); } ); }); @@ -252,12 +221,9 @@ function getTemplate () { ); lab.test( - 'should return default coffee template', - - function (done) { + 'should return default coffee template', () => { const actual = migration.getTemplate(); Code.expect(actual).to.equal(migration.coffeeSqlFileLoaderTemplate()); - done(); } ); }); @@ -272,12 +238,9 @@ function getTemplate () { ); lab.test( - 'should return default sql template', - - function (done) { + 'should return default sql template', () => { const actual = migration.getTemplate(); Code.expect(actual).to.equal(migration.defaultJsTemplate()); - done(); } ); }); diff --git a/test/migrator_test.js b/test/migrator_test.js index f3493fc1..e885d3df 100644 --- a/test/migrator_test.js +++ b/test/migrator_test.js @@ -6,7 +6,7 @@ const lab = (exports.lab = Lab.script()); lab.experiment('migrators', function () { lab.experiment('check', function () { - lab.test('should return the migrations to be run', function (done) { + lab.test('should return the migrations to be run', () => { const completedMigration = { name: '20180330020329-thisMigrationIsCompleted' }; @@ -23,10 +23,10 @@ lab.experiment('migrators', function () { } } }); - Migrator.prototype.check(null, function (err, res) { + + Migrator.prototype.check(null, function (_err, res) { Code.expect(res.length).to.equal(1); Code.expect(res[0].name).to.equal(uncompletedMigration.name); - done(err, res); }); }); }); diff --git a/test/util_test.js b/test/util_test.js index 3d4b93b7..76763e69 100644 --- a/test/util_test.js +++ b/test/util_test.js @@ -9,47 +9,34 @@ lab.experiment('util', function () { function lpad () { lab.test( - 'should left pad the number of characters to equal the total length', - function (done) { + 'should left pad the number of characters to equal the total length', () => { var actual = util.lpad('prompt', '>', 8); Code.expect(actual).to.equal('>>prompt'); - - done(); } ); lab.test( - 'should apply no left padding if already equal to the total length', - function (done) { + 'should apply no left padding if already equal to the total length', () => { var actual = util.lpad('>>prompt', '>', 8); Code.expect(actual).to.equal('>>prompt'); - - done(); } ); lab.test( 'should apply no left padding if already greater than the total ' + - 'length', - function (done) { + 'length', () => { var actual = util.lpad('>>>prompt', '>', 8); Code.expect(actual).to.equal('>>>prompt'); - - done(); } ); - lab.test('should be apple to pad numbers', function (done) { + lab.test('should be apple to pad numbers', () => { var actual = util.lpad(12, '>', 4); Code.expect(actual).to.equal('>>12'); - - done(); }); - lab.test('should be apple to pad using numbers', function (done) { + lab.test('should be apple to pad using numbers', () => { var actual = util.lpad(12, 0, 4); Code.expect(actual).to.equal('0012'); - - done(); }); }