diff --git a/appengine/analytics/test/app.test.js b/appengine/analytics/test/app.test.js index c8896945271..123c0505f8c 100644 --- a/appengine/analytics/test/app.test.js +++ b/appengine/analytics/test/app.test.js @@ -53,7 +53,7 @@ function getSample () { } test.beforeEach(stubConsole); -test.afterEach(restoreConsole); +test.afterEach.always(restoreConsole); test.cb(`should record a visit`, (t) => { const sample = getSample(); diff --git a/appengine/bower/test/server.test.js b/appengine/bower/test/server.test.js index 34b8e675757..41927a4e06b 100644 --- a/appengine/bower/test/server.test.js +++ b/appengine/bower/test/server.test.js @@ -41,7 +41,7 @@ function getSample () { } test.beforeEach(stubConsole); -test.afterEach(restoreConsole); +test.afterEach.always(restoreConsole); test.cb(`should render a page`, (t) => { const sample = getSample(); diff --git a/appengine/cloudsql/test/createTables.test.js b/appengine/cloudsql/test/createTables.test.js index 7b8ba6a02bf..2bad30bda8d 100644 --- a/appengine/cloudsql/test/createTables.test.js +++ b/appengine/cloudsql/test/createTables.test.js @@ -57,7 +57,7 @@ function getSample () { } test.beforeEach(stubConsole); -test.afterEach(restoreConsole); +test.afterEach.always(restoreConsole); test.cb.serial(`should record a visit`, (t) => { const sample = getSample(); diff --git a/appengine/cloudsql/test/server.test.js b/appengine/cloudsql/test/server.test.js index db4e6c02c65..5c71a5b4dde 100644 --- a/appengine/cloudsql/test/server.test.js +++ b/appengine/cloudsql/test/server.test.js @@ -60,7 +60,7 @@ function getSample () { } test.beforeEach(stubConsole); -test.afterEach(restoreConsole); +test.afterEach.always(restoreConsole); test(`sets up sample`, (t) => { const sample = getSample(); diff --git a/appengine/datastore/test/app.test.js b/appengine/datastore/test/app.test.js index cbf30538b11..eb6440b23a3 100644 --- a/appengine/datastore/test/app.test.js +++ b/appengine/datastore/test/app.test.js @@ -76,7 +76,7 @@ function getSample () { } test.beforeEach(stubConsole); -test.afterEach(restoreConsole); +test.afterEach.always(restoreConsole); test(`sets up sample`, (t) => { const sample = getSample(); diff --git a/appengine/disk/test/app.test.js b/appengine/disk/test/app.test.js index 2604b5be5f8..10742dd8e62 100644 --- a/appengine/disk/test/app.test.js +++ b/appengine/disk/test/app.test.js @@ -52,7 +52,7 @@ function getSample () { } test.beforeEach(stubConsole); -test.afterEach(restoreConsole); +test.afterEach.always(restoreConsole); test(`sets up the sample`, (t) => { const sample = getSample(); diff --git a/appengine/endpoints/test/app.test.js b/appengine/endpoints/test/app.test.js index 3a858df58b2..01eb2eb98db 100644 --- a/appengine/endpoints/test/app.test.js +++ b/appengine/endpoints/test/app.test.js @@ -41,7 +41,7 @@ function getSample () { } test.beforeEach(stubConsole); -test.afterEach(restoreConsole); +test.afterEach.always(restoreConsole); test(`sets up the sample`, (t) => { const sample = getSample(); diff --git a/appengine/errorreporting/test/app.test.js b/appengine/errorreporting/test/app.test.js index 608adf69e60..3a469bfa2b3 100644 --- a/appengine/errorreporting/test/app.test.js +++ b/appengine/errorreporting/test/app.test.js @@ -53,7 +53,7 @@ function getSample () { } test.beforeEach(stubConsole); -test.afterEach(restoreConsole); +test.afterEach.always(restoreConsole); test(`sets up the sample`, (t) => { const sample = getSample(); diff --git a/appengine/express-memcached-session/test/server.test.js b/appengine/express-memcached-session/test/server.test.js index 6a69819bc51..56e2103bf5f 100644 --- a/appengine/express-memcached-session/test/server.test.js +++ b/appengine/express-memcached-session/test/server.test.js @@ -52,7 +52,7 @@ function getSample () { } test.beforeEach(stubConsole); -test.afterEach(restoreConsole); +test.afterEach.always(restoreConsole); test(`sets up the sample`, (t) => { const sample = getSample(); diff --git a/appengine/express/test/app.test.js b/appengine/express/test/app.test.js index ef47341a412..bddf06ab999 100644 --- a/appengine/express/test/app.test.js +++ b/appengine/express/test/app.test.js @@ -32,7 +32,7 @@ function getSample () { } test.beforeEach(stubConsole); -test.afterEach(restoreConsole); +test.afterEach.always(restoreConsole); test.cb(`should render index page`, (t) => { const sample = getSample(); diff --git a/appengine/loopback/package.json b/appengine/loopback/package.json index 14566b745db..bcd89c46516 100644 --- a/appengine/loopback/package.json +++ b/appengine/loopback/package.json @@ -15,19 +15,19 @@ "posttest": "npm run lint && nsp check" }, "dependencies": { - "compression": "^1.0.3", - "cors": "^2.5.2", - "helmet": "^1.3.0", - "loopback-boot": "^2.6.5", - "loopback-component-explorer": "^2.4.0", - "serve-favicon": "^2.0.1", - "strong-error-handler": "^1.0.1", - "loopback-datasource-juggler": "^2.39.0", - "loopback": "^2.22.0" + "compression": "1.0.3", + "cors": "2.5.2", + "helmet": "1.3.0", + "loopback-boot": "2.6.5", + "loopback-component-explorer": "2.4.0", + "serve-favicon": "2.0.1", + "strong-error-handler": "1.0.1", + "loopback-datasource-juggler": "2.39.0", + "loopback": "2.22.0" }, "devDependencies": { - "eslint": "^2.13.1", - "eslint-config-loopback": "^4.0.0", - "nsp": "^2.1.0" + "eslint": "2.13.1", + "eslint-config-loopback": "4.0.0", + "nsp": "2.1.0" } } diff --git a/appengine/loopback/yarn.lock b/appengine/loopback/yarn.lock index 7b77a1adfa6..511336c6057 100644 --- a/appengine/loopback/yarn.lock +++ b/appengine/loopback/yarn.lock @@ -9,7 +9,14 @@ JSONStream@1.0.3: jsonparse "~1.0.0" through ">=2.2.7 <3" -accepts@^1.3.3, accepts@~1.3.3: +accepts@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.0.2.tgz#96266ace1b4c03f9637428f3acafe891959f3883" + dependencies: + mime "~1.2.11" + negotiator "0.4.5" + +accepts@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.3.tgz#c3ca7434938648c3e0d9c1e328dd68b622c284ca" dependencies: @@ -30,9 +37,9 @@ acorn@^4.0.1: version "4.0.4" resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.4.tgz#17a8d6a7a6c4ef538b814ec9abac2779293bf30a" -addressparser@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/addressparser/-/addressparser-1.0.1.tgz#47afbe1a2a9262191db6838e4fd1d39b40821746" +addressparser@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/addressparser/-/addressparser-0.3.2.tgz#59873f35e8fcf6c7361c10239261d76e15348bb2" agent-base@2: version "2.0.1" @@ -64,6 +71,17 @@ ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" +aproba@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.0.4.tgz#2713680775e7614c8ba186c065d4e2e52d1072c0" + +are-we-there-yet@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.2.tgz#80e470e95a084794fe1899262c5667c6e88de1b3" + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.0 || ^1.1.13" + argparse@^1.0.7: version "1.0.9" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" @@ -207,21 +225,23 @@ buffer-shims@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" -buildmail@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/buildmail/-/buildmail-4.0.0.tgz#73a2ce3492e53417f306fc1be324bef44a3c4ea7" +buildmail@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/buildmail/-/buildmail-2.0.0.tgz#f0b7b0a59e9a4a1b5066bbfa051d248f3832eece" dependencies: - addressparser "1.0.1" - libbase64 "0.1.0" - libmime "3.0.0" - libqp "1.1.0" - nodemailer-fetch "1.6.0" - nodemailer-shared "1.1.0" - punycode "^2.0.1" + addressparser "^0.3.2" + libbase64 "^0.1.0" + libmime "^1.2.0" + libqp "^1.1.0" + needle "^0.10.0" -bytes@2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.3.0.tgz#d5b680a165b6201739acb611542aabc2d8ceb070" +builtin-modules@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + +bytes@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-1.0.0.tgz#3569ede8ba34315fab99c3e92cb04c7220de1fa8" bytes@2.4.0: version "2.4.0" @@ -287,6 +307,10 @@ cliclopts@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/cliclopts/-/cliclopts-1.1.1.tgz#69431c7cb5af723774b0d3911b4c37512431910f" +clone@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.2.tgz#260b7a99ebb1edfe247538175f783243cb19d149" + co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" @@ -325,28 +349,24 @@ component-emitter@^1.2.0: version "1.2.1" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" -compressible@~2.0.8: - version "2.0.9" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.9.tgz#6daab4e2b599c2770dd9e21e7a891b1c5a755425" - dependencies: - mime-db ">= 1.24.0 < 2" +compressible@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-1.0.1.tgz#8ed8224822c60c3c8dabcad34e913ed2952ad170" -compression@^1.0.3: - version "1.6.2" - resolved "https://registry.yarnpkg.com/compression/-/compression-1.6.2.tgz#cceb121ecc9d09c52d7ad0c3350ea93ddd402bc3" +compression@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.0.3.tgz#4370058053d29402f2ff6312296d9e74463e9901" dependencies: - accepts "~1.3.3" - bytes "2.3.0" - compressible "~2.0.8" - debug "~2.2.0" - on-headers "~1.0.1" - vary "~1.1.0" + accepts "1.0.2" + bytes "1.0.0" + compressible "1.0.1" + on-headers "0.0.0" concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" -concat-stream@^1.4.6: +concat-stream@^1.4.6, concat-stream@^1.5.2: version "1.6.0" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" dependencies: @@ -363,6 +383,10 @@ connect@3.4.1: parseurl "~1.3.1" utils-merge "1.0.0" +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + content-disposition@0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.1.tgz#87476c6a67c8daa87e32e87616df883ba7fb071b" @@ -377,20 +401,13 @@ content-type@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.2.tgz#b7d113aee7a8dd27bd21133c4dc2529df1721eed" -continuation-local-storage@^3.1.7: +continuation-local-storage@^3.1.3: version "3.2.0" resolved "https://registry.yarnpkg.com/continuation-local-storage/-/continuation-local-storage-3.2.0.tgz#e19fc36b597090a5d4e4a3b2ea3ebc5e29694a24" dependencies: async-listener "^0.6.0" emitter-listener "^1.0.1" -cookie-parser@^1.3.4: - version "1.4.3" - resolved "https://registry.yarnpkg.com/cookie-parser/-/cookie-parser-1.4.3.tgz#0fe31fa19d000b95f4aadf1f53fdc2b8a203baa5" - dependencies: - cookie "0.3.1" - cookie-signature "1.0.6" - cookie-signature@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" @@ -407,7 +424,13 @@ core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" -cors@^2.5.2, cors@^2.6.0, cors@^2.7.1: +cors@2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/cors/-/cors-2.5.2.tgz#00d5c0d1ced95001c998fa66b52c4ef931e6f8b7" + dependencies: + vary "^1" + +cors@^2.6.0, cors@^2.7.1: version "2.8.1" resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.1.tgz#6181aa56abb45a2825be3304703747ae4e9d2383" dependencies: @@ -475,6 +498,10 @@ delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + depd@^1.0.0, depd@^1.1.0, depd@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.0.tgz#e1bd82c6aab6ced965b97b88b17ed3e528ca18c3" @@ -548,7 +575,7 @@ ejs@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/ejs/-/ejs-1.0.0.tgz#c9c60a48a46ee452fb32a71c317b95e5aa1fcb3d" -ejs@^2.3.1, ejs@^2.4.2: +ejs@^2.3.1: version "2.5.5" resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.5.tgz#6ef4e954ea7dcf54f66aad2fe7aa421932d9ed77" @@ -642,11 +669,11 @@ escope@^3.6.0: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-config-loopback@^4.0.0: +eslint-config-loopback@4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/eslint-config-loopback/-/eslint-config-loopback-4.0.0.tgz#d22c1052ad7d4cd10b8a3eca252b4a91849ecbd2" -eslint@^2.13.1: +eslint@2.13.1: version "2.13.1" resolved "https://registry.yarnpkg.com/eslint/-/eslint-2.13.1.tgz#e4cc8fa0f009fb829aaae23855a29360be1f6c11" dependencies: @@ -856,6 +883,10 @@ frameguard@1.1.0: dependencies: lodash.isstring "4.0.1" +fresh@0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.2.2.tgz#9731dcf5678c7faeb44fb903c4f72df55187fa77" + fresh@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.3.0.tgz#651f838e22424e7566de161d8358caa199f83d4f" @@ -880,6 +911,20 @@ g11n-pipeline@^1.2.2: dependencies: swagger-client "^2.1.16" +gauge@~2.7.1: + version "2.7.2" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.2.tgz#15cecc31b02d05345a5d6b0e171cdb3ad2307774" + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + supports-color "^0.2.0" + wide-align "^1.1.0" + generate-function@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74" @@ -922,7 +967,7 @@ globby@^5.0.0: pify "^2.0.0" pinkie-promise "^2.0.0" -graceful-fs@^4.1.2: +graceful-fs@^4.1.2, graceful-fs@^4.1.6: version "4.1.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" @@ -945,6 +990,10 @@ has-ansi@^2.0.0: dependencies: ansi-regex "^2.0.0" +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + hawk@~3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" @@ -966,7 +1015,7 @@ helmet-csp@1.1.0: lodash.some "4.2.0" platform "1.3.1" -helmet@^1.3.0: +helmet@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/helmet/-/helmet-1.3.0.tgz#e1b59c5484f7ac081a48cc7634139b4ec38cf8b5" dependencies: @@ -990,6 +1039,10 @@ hoek@2.x.x: version "2.16.3" resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" +hosted-git-info@^2.1.4, hosted-git-info@^2.1.5: + version "2.1.5" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.1.5.tgz#0ba81d90da2e25ab34a332e6ec77936e1598118b" + hpkp@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/hpkp/-/hpkp-1.1.0.tgz#77bdff1f331847fb9f40839d00a45032baed4df4" @@ -1031,17 +1084,6 @@ http-status@^0.2.2: version "0.2.3" resolved "https://registry.yarnpkg.com/http-status/-/http-status-0.2.3.tgz#b8fba208d6723d0fe0de5afec3ae624f6bae03db" -httpntlm@1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/httpntlm/-/httpntlm-1.6.1.tgz#ad01527143a2e8773cfae6a96f58656bb52a34b2" - dependencies: - httpreq ">=0.4.22" - underscore "~1.7.0" - -httpreq@>=0.4.22: - version "0.4.22" - resolved "https://registry.yarnpkg.com/httpreq/-/httpreq-0.4.22.tgz#27097c8ad95ea9679190530c9c0f66b8c7aafb18" - https-proxy-agent@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz#35f7da6c48ce4ddbfa264891ac593ee5ff8671e6" @@ -1050,14 +1092,10 @@ https-proxy-agent@^1.0.0: debug "2" extend "3" -iconv-lite@0.4.13, iconv-lite@^0.4.13: +iconv-lite@0.4.13, iconv-lite@^0.4.13, iconv-lite@^0.4.4: version "0.4.13" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2" -iconv-lite@0.4.15: - version "0.4.15" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb" - ienoopen@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/ienoopen/-/ienoopen-1.0.0.tgz#346a428f474aac8f50cf3784ea2d0f16f62bda6b" @@ -1111,10 +1149,6 @@ invert-kv@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" -ip@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.4.tgz#de8247ffef940451832550fba284945e6e039bfb" - ipaddr.js@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.1.1.tgz#c791d95f52b29c1247d5df80ada39b8a73647230" @@ -1123,6 +1157,12 @@ is-buffer@~1.1.1: version "1.1.4" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.4.tgz#cfc86ccd5dc5a52fa80489111c6920c457e2d98b" +is-builtin-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" + dependencies: + builtin-modules "^1.0.0" + is-fullwidth-code-point@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" @@ -1176,7 +1216,7 @@ isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" -isemail@1.x.x, isemail@^1.2.0: +isemail@1.x.x: version "1.2.0" resolved "https://registry.yarnpkg.com/isemail/-/isemail-1.2.0.tgz#be03df8cc3e29de4d2c5df6501263f1fa4595e9a" @@ -1278,19 +1318,19 @@ levn@^0.3.0, levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" -libbase64@0.1.0: +libbase64@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/libbase64/-/libbase64-0.1.0.tgz#62351a839563ac5ff5bd26f12f60e9830bb751e6" -libmime@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/libmime/-/libmime-3.0.0.tgz#51a1a9e7448ecbd32cda54421675bb21bc093da6" +libmime@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/libmime/-/libmime-1.2.0.tgz#8d84b4f3b225b3704410236ef494906436ba742b" dependencies: - iconv-lite "0.4.15" - libbase64 "0.1.0" - libqp "1.1.0" + iconv-lite "^0.4.13" + libbase64 "^0.1.0" + libqp "^1.1.0" -libqp@1.1.0: +libqp@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/libqp/-/libqp-1.1.0.tgz#f5e6e06ad74b794fb5b5b66988bf728ef1dedbe8" @@ -1364,7 +1404,11 @@ lodash@3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.6.0.tgz#5266a8f49dd989be4f9f681b6f2a0c55285d0d9a" -lodash@^3.10.0, lodash@^3.10.1, lodash@^3.6.0: +lodash@^2.4.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-2.4.2.tgz#fadd834b9683073da179b3eae6d9c0d15053f73e" + +lodash@^3.10.0, lodash@^3.10.1: version "3.10.1" resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" @@ -1372,28 +1416,25 @@ lodash@^4.0.0, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.16.1, lodash@^4.3.0: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" -loopback-boot@^2.6.5: - version "2.23.0" - resolved "https://registry.yarnpkg.com/loopback-boot/-/loopback-boot-2.23.0.tgz#10a21bc7df8c108e0839ad6b8ad54dfdd453cae1" +loopback-boot@2.6.5: + version "2.6.5" + resolved "https://registry.yarnpkg.com/loopback-boot/-/loopback-boot-2.6.5.tgz#c18dffc5bb5e41bb58d850fb78e31a827f537525" dependencies: async "~0.9.0" commondir "0.0.1" debug "^2.0.0" - lodash "^3.6.0" + lodash "^2.4.1" semver "^4.1.0" - strong-globalize "^2.6.2" toposort "^0.2.10" -loopback-component-explorer@^2.4.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/loopback-component-explorer/-/loopback-component-explorer-2.7.0.tgz#e27ef221a353ec782b15a9d0775e674e9af97c1b" +loopback-component-explorer@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/loopback-component-explorer/-/loopback-component-explorer-2.4.0.tgz#b4a8624036b670862ef8391a307cfc30f366aee6" dependencies: cors "^2.7.1" debug "^2.2.0" - depd "^1.1.0" lodash "^3.10.0" loopback-swagger "^2.1.0" - strong-globalize "^2.6.2" strong-swagger-ui "^21.0.0" loopback-connector-remote@^1.0.3: @@ -1413,26 +1454,17 @@ loopback-connector@^2.1.0: msgpack5 "^3.4.1" strong-globalize "^2.5.8" -loopback-context@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/loopback-context/-/loopback-context-1.0.0.tgz#30c9b2315ceab03ec901a73942e7614cd93e9548" - dependencies: - continuation-local-storage "^3.1.7" - -loopback-datasource-juggler@^2.39.0, loopback-datasource-juggler@^2.8.0: - version "2.53.1" - resolved "https://registry.yarnpkg.com/loopback-datasource-juggler/-/loopback-datasource-juggler-2.53.1.tgz#42fb53c30ead63c7c8fe5e578544bbb94a7f2dae" +loopback-datasource-juggler@2.39.0, loopback-datasource-juggler@^2.8.0: + version "2.39.0" + resolved "https://registry.yarnpkg.com/loopback-datasource-juggler/-/loopback-datasource-juggler-2.39.0.tgz#f782c1a26716019e333f0e2efe07b7e34c7c7e63" dependencies: async "~1.0.0" debug "^2.1.1" depd "^1.0.0" inflection "^1.6.0" loopback-connector "^2.1.0" - minimatch "^3.0.3" node-uuid "^1.4.2" qs "^3.1.0" - shortid "^2.2.6" - strong-globalize "^2.6.2" traverse "^0.6.6" loopback-phase@^1.2.0, loopback-phase@^1.3.0: @@ -1454,40 +1486,39 @@ loopback-swagger@^2.1.0: strong-globalize "^2.6.0" underscore.string "~2.3.3" -loopback@^2.22.0: - version "2.36.2" - resolved "https://registry.yarnpkg.com/loopback/-/loopback-2.36.2.tgz#f8b24d6aee091b1a5cf18492757daf5474dc2edd" +loopback@2.22.0: + version "2.22.0" + resolved "https://registry.yarnpkg.com/loopback/-/loopback-2.22.0.tgz#0ed175234e9d504db270d0a070e37f47cf9281b7" dependencies: - async "^2.0.1" + async "^0.9.0" bcryptjs "^2.1.0" body-parser "^1.12.0" canonical-json "0.0.4" - cookie-parser "^1.3.4" + continuation-local-storage "^3.1.3" debug "^2.1.2" depd "^1.0.0" ejs "^2.3.1" errorhandler "^1.3.4" express "^4.12.2" inflection "^1.6.0" - isemail "^1.2.0" loopback-connector-remote "^1.0.3" - loopback-context "^1.0.0" loopback-phase "^1.2.0" - nodemailer "^2.5.0" - nodemailer-stub-transport "^1.0.0" + nodemailer "^1.3.1" + nodemailer-stub-transport "^0.1.5" serve-favicon "^2.2.0" stable "^0.1.5" - strong-globalize "^2.6.2" - strong-remoting "^2.21.0" + strong-remoting "^2.15.0" uid2 "0.0.3" underscore.string "^3.0.3" + optionalDependencies: + sl-blip "http://blip.strongloop.com/loopback@2.22.0" -mailcomposer@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/mailcomposer/-/mailcomposer-4.0.0.tgz#109b2c344331cbe57fa05a82e92d0c0f17752893" +mailcomposer@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mailcomposer/-/mailcomposer-2.1.0.tgz#a6531822899614fee899c92226d81e2b9cbb183d" dependencies: - buildmail "4.0.0" - libmime "3.0.0" + buildmail "^2.0.0" + libmime "^1.2.0" md5@^2.0.0: version "2.2.1" @@ -1509,7 +1540,7 @@ methods@^1.1.1, methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" -"mime-db@>= 1.24.0 < 2", mime-db@~1.25.0: +mime-db@~1.25.0: version "1.25.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.25.0.tgz#c18dbd7c73a5dbf6f44a024dc0d165a1e7b1c392" @@ -1523,7 +1554,11 @@ mime@1.3.4, mime@^1.3.4: version "1.3.4" resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" -minimatch@^3.0.2, minimatch@^3.0.3: +mime@~1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.2.11.tgz#58203eed86e3a5ef17aed2b7d9ebd47f0a60dd10" + +minimatch@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" dependencies: @@ -1599,6 +1634,24 @@ mux-demux@^3.7.9: through "~2.3.1" xtend "~1.0.3" +needle@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/needle/-/needle-0.10.0.tgz#16a24d63f2a61152eb74cce1d12af85c507577d4" + dependencies: + debug "^2.1.2" + iconv-lite "^0.4.4" + +needle@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/needle/-/needle-0.11.0.tgz#02a71b008eaf7d55ae89fb9fd7685b7b88d7bc29" + dependencies: + debug "^2.1.2" + iconv-lite "^0.4.4" + +negotiator@0.4.5: + version "0.4.5" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.4.5.tgz#0e738eb225e3a166ee7d69ebcfdc702ba236a77b" + negotiator@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" @@ -1611,72 +1664,95 @@ node-uuid@^1.4.2: version "1.4.7" resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.7.tgz#6da5a17668c4b3dd59623bda11cf7fa4c1f60a6f" -nodemailer-direct-transport@3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/nodemailer-direct-transport/-/nodemailer-direct-transport-3.3.2.tgz#e96fafb90358560947e569017d97e60738a50a86" +nodemailer-direct-transport@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/nodemailer-direct-transport/-/nodemailer-direct-transport-1.1.0.tgz#a2f78708ee6f16ea0573fc82949d138ff172f624" dependencies: - nodemailer-shared "1.1.0" - smtp-connection "2.12.0" - -nodemailer-fetch@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/nodemailer-fetch/-/nodemailer-fetch-1.6.0.tgz#79c4908a1c0f5f375b73fe888da9828f6dc963a4" + smtp-connection "^1.3.1" -nodemailer-shared@1.1.0: +nodemailer-smtp-transport@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/nodemailer-shared/-/nodemailer-shared-1.1.0.tgz#cf5994e2fd268d00f5cf0fa767a08169edb07ec0" + resolved "https://registry.yarnpkg.com/nodemailer-smtp-transport/-/nodemailer-smtp-transport-1.1.0.tgz#e6c37f31885ab3080e7ded3cf528c4ad7e691398" dependencies: - nodemailer-fetch "1.6.0" + clone "^1.0.2" + nodemailer-wellknown "^0.1.7" + smtp-connection "^1.3.7" + +nodemailer-stub-transport@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/nodemailer-stub-transport/-/nodemailer-stub-transport-0.1.5.tgz#c853326f3a980b6654713ac190f9404eaa86842b" -nodemailer-smtp-pool@2.8.2: - version "2.8.2" - resolved "https://registry.yarnpkg.com/nodemailer-smtp-pool/-/nodemailer-smtp-pool-2.8.2.tgz#2eb94d6cf85780b1b4725ce853b9cbd5e8da8c72" +nodemailer-wellknown@^0.1.7: + version "0.1.10" + resolved "https://registry.yarnpkg.com/nodemailer-wellknown/-/nodemailer-wellknown-0.1.10.tgz#586db8101db30cb4438eb546737a41aad0cf13d5" + +nodemailer@^1.3.1: + version "1.11.0" + resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-1.11.0.tgz#4e69cb39b03015b1d1ef0c78a815412b9e976f79" dependencies: - nodemailer-shared "1.1.0" - nodemailer-wellknown "0.1.10" - smtp-connection "2.12.0" + libmime "^1.2.0" + mailcomposer "^2.1.0" + needle "^0.11.0" + nodemailer-direct-transport "^1.1.0" + nodemailer-smtp-transport "^1.1.0" -nodemailer-smtp-transport@2.7.2: - version "2.7.2" - resolved "https://registry.yarnpkg.com/nodemailer-smtp-transport/-/nodemailer-smtp-transport-2.7.2.tgz#03d71c76314f14ac7dbc7bf033a6a6d16d67fb77" +nodesecurity-npm-utils@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/nodesecurity-npm-utils/-/nodesecurity-npm-utils-3.2.0.tgz#6c82570411f71d03be19602d32f5bfd7760ef3da" dependencies: - nodemailer-shared "1.1.0" - nodemailer-wellknown "0.1.10" - smtp-connection "2.12.0" + semver "^5.0.3" + silent-npm-registry-client "2.0.0" -nodemailer-stub-transport@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/nodemailer-stub-transport/-/nodemailer-stub-transport-1.1.0.tgz#11421d2d66b4ee6f405354f914c1f4641eb24b0d" +"normalize-package-data@~1.0.1 || ^2.0.0": + version "2.3.5" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.5.tgz#8d924f142960e1777e7ffe170543631cc7cb02df" + dependencies: + hosted-git-info "^2.1.4" + is-builtin-module "^1.0.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" -nodemailer-wellknown@0.1.10: - version "0.1.10" - resolved "https://registry.yarnpkg.com/nodemailer-wellknown/-/nodemailer-wellknown-0.1.10.tgz#586db8101db30cb4438eb546737a41aad0cf13d5" +"npm-package-arg@^3.0.0 || ^4.0.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-4.2.0.tgz#809bc61cabf54bd5ff94f6165c89ba8ee88c115c" + dependencies: + hosted-git-info "^2.1.5" + semver "^5.1.0" + +npm-registry-client@^7.0.9: + version "7.4.5" + resolved "https://registry.yarnpkg.com/npm-registry-client/-/npm-registry-client-7.4.5.tgz#1ef61851bb7231db53e397aaf76ddf1cb645c3df" + dependencies: + concat-stream "^1.5.2" + graceful-fs "^4.1.6" + normalize-package-data "~1.0.1 || ^2.0.0" + npm-package-arg "^3.0.0 || ^4.0.0" + once "^1.3.3" + request "^2.74.0" + retry "^0.10.0" + semver "2 >=2.2.1 || 3.x || 4 || 5" + slide "^1.1.3" + optionalDependencies: + npmlog "2 || ^3.1.0 || ^4.0.0" -nodemailer@^2.5.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-2.7.0.tgz#d68f1d6c0c7a65fc7abbc3c0f02016183012a36b" +"npmlog@2 || ^3.1.0 || ^4.0.0": + version "4.0.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.2.tgz#d03950e0e78ce1527ba26d2a7592e9348ac3e75f" dependencies: - libmime "3.0.0" - mailcomposer "4.0.0" - nodemailer-direct-transport "3.3.2" - nodemailer-shared "1.1.0" - nodemailer-smtp-pool "2.8.2" - nodemailer-smtp-transport "2.7.2" - socks "1.1.9" - -nodesecurity-npm-utils@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/nodesecurity-npm-utils/-/nodesecurity-npm-utils-5.0.0.tgz#05aa30de30ca8c845c4048e94fd78e5e08b55ed9" + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.1" + set-blocking "~2.0.0" -nsp@^2.1.0: - version "2.6.2" - resolved "https://registry.yarnpkg.com/nsp/-/nsp-2.6.2.tgz#93dfb4c5b2885cc354d8ca18b73f09e52b9c8b16" +nsp@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/nsp/-/nsp-2.1.0.tgz#6b9971898370c81c0efc5bbd0afb6772a554a158" dependencies: chalk "^1.1.1" cli-table "^0.3.1" https-proxy-agent "^1.0.0" joi "^6.9.1" - nodesecurity-npm-utils "^5.0.0" + nodesecurity-npm-utils "^3.0.0" path-is-absolute "^1.0.0" rc "^1.1.2" semver "^5.0.3" @@ -1701,11 +1777,11 @@ on-finished@~2.3.0: dependencies: ee-first "1.1.1" -on-headers@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" +on-headers@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-0.0.0.tgz#ee2817f8344325785cd9c2df2b242bbc17caf4c4" -once@^1.3.0: +once@^1.3.0, once@^1.3.3: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" dependencies: @@ -1809,10 +1885,6 @@ punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" -punycode@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d" - q@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/q/-/q-1.4.1.tgz#55705bcd93c5f3673530c2c2cbc0c2b3addc286e" @@ -1850,7 +1922,7 @@ rc@^1.1.2: minimist "^1.2.0" strip-json-comments "~1.0.4" -readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.2.2: +"readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.2.tgz#a9e6fec3c7dda85f8bb1b3ba7028604556fc825e" dependencies: @@ -1870,7 +1942,7 @@ readline2@^1.0.1: is-fullwidth-code-point "^1.0.0" mute-stream "0.0.5" -request@^2.55.0: +request@^2.55.0, request@^2.74.0: version "2.79.0" resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de" dependencies: @@ -1913,6 +1985,10 @@ restore-cursor@^1.0.1: exit-hook "^1.0.0" onetime "^1.0.0" +retry@^0.10.0: + version "0.10.1" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" + rimraf@^2.1.4, rimraf@^2.2.8: version "2.5.4" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04" @@ -1937,14 +2013,14 @@ sax@>=0.6.0: version "1.2.1" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" +"semver@2 >=2.2.1 || 3.x || 4 || 5", "semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" + semver@^4.1.0: version "4.3.6" resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da" -semver@^5.0.3: - version "5.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" - semver@~5.0.1: version "5.0.3" resolved "https://registry.yarnpkg.com/semver/-/semver-5.0.3.tgz#77466de589cd5d3c95f138aa78bc569a3cb5d27a" @@ -1967,7 +2043,13 @@ send@0.14.1: range-parser "~1.2.0" statuses "~1.3.0" -serve-favicon@^2.0.1, serve-favicon@^2.2.0: +serve-favicon@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/serve-favicon/-/serve-favicon-2.0.1.tgz#4826975d9f173ca3a4158e9698161f75dec7afec" + dependencies: + fresh "0.2.2" + +serve-favicon@^2.2.0: version "2.3.2" resolved "https://registry.yarnpkg.com/serve-favicon/-/serve-favicon-2.3.2.tgz#dd419e268de012ab72b319d337f2105013f9381f" dependencies: @@ -1985,6 +2067,10 @@ serve-static@~1.11.1: parseurl "~1.3.1" send "0.14.1" +set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + setprototypeof@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.2.tgz#81a552141ec104b88e89ce383103ad5c66564d08" @@ -1997,24 +2083,32 @@ shimmer@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shimmer/-/shimmer-1.0.0.tgz#49c2d71c678360b802be18b278382d1cbb805c39" -shortid@^2.2.6: - version "2.2.6" - resolved "https://registry.yarnpkg.com/shortid/-/shortid-2.2.6.tgz#3abbefc6c51074cf2c1f1e72f6216a1b45876d72" +signal-exit@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + +silent-npm-registry-client@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/silent-npm-registry-client/-/silent-npm-registry-client-2.0.0.tgz#4d8875ead648a79116960e8f84f7ec36c0f1bd10" + dependencies: + npm-registry-client "^7.0.9" + xtend "^4.0.0" + +"sl-blip@http://blip.strongloop.com/loopback@2.22.0": + version "1.0.0" + resolved "http://blip.strongloop.com/loopback@2.22.0#99c3bdcb734041b6a956c5c2ba218a5ec90dcda2" slice-ansi@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" -smart-buffer@^1.0.4: - version "1.0.11" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-1.0.11.tgz#3050337098a8e4cdf0350fef63dd146049ff940a" +slide@^1.1.3: + version "1.1.6" + resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" -smtp-connection@2.12.0: - version "2.12.0" - resolved "https://registry.yarnpkg.com/smtp-connection/-/smtp-connection-2.12.0.tgz#d76ef9127cb23c2259edb1e8349c2e8d5e2d74c1" - dependencies: - httpntlm "1.6.1" - nodemailer-shared "1.1.0" +smtp-connection@^1.3.1, smtp-connection@^1.3.7: + version "1.3.8" + resolved "https://registry.yarnpkg.com/smtp-connection/-/smtp-connection-1.3.8.tgz#55832c2160cfb3086e1dcd87fd1c19fa61b7f536" sntp@1.x.x: version "1.0.9" @@ -2022,12 +2116,19 @@ sntp@1.x.x: dependencies: hoek "2.x.x" -socks@1.1.9: - version "1.1.9" - resolved "https://registry.yarnpkg.com/socks/-/socks-1.1.9.tgz#628d7e4d04912435445ac0b6e459376cb3e6d691" +spdx-correct@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" dependencies: - ip "^1.1.2" - smart-buffer "^1.0.4" + spdx-license-ids "^1.0.2" + +spdx-expression-parse@~1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" + +spdx-license-ids@^1.0.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" sprintf-js@^1.0.3, sprintf-js@~1.0.2: version "1.0.3" @@ -2095,7 +2196,7 @@ stringstream@~0.0.4: version "0.0.5" resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" -strip-ansi@^3.0.0: +strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" dependencies: @@ -2105,17 +2206,14 @@ strip-json-comments@~1.0.1, strip-json-comments@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91" -strong-error-handler@^1.0.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/strong-error-handler/-/strong-error-handler-1.1.1.tgz#537899bad867b5fd03eb36eeb83c672c0c40ee87" +strong-error-handler@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/strong-error-handler/-/strong-error-handler-1.0.1.tgz#75acc2639717b652576fc7931f2c01d5eda34c0a" dependencies: - accepts "^1.3.3" debug "^2.2.0" - ejs "^2.4.2" http-status "^0.2.2" - strong-globalize "^2.6.7" -strong-globalize@^2.5.8, strong-globalize@^2.6.0, strong-globalize@^2.6.2, strong-globalize@^2.6.6, strong-globalize@^2.6.7: +strong-globalize@^2.5.8, strong-globalize@^2.6.0, strong-globalize@^2.6.2, strong-globalize@^2.6.6: version "2.8.0" resolved "https://registry.yarnpkg.com/strong-globalize/-/strong-globalize-2.8.0.tgz#4b45a1422fa23e932c095d492d38f95a7f707379" dependencies: @@ -2137,7 +2235,7 @@ strong-globalize@^2.5.8, strong-globalize@^2.6.0, strong-globalize@^2.6.2, stron xtend "^4.0.1" yamljs "^0.2.8" -strong-remoting@^2.21.0, strong-remoting@^2.3.0: +strong-remoting@^2.15.0, strong-remoting@^2.3.0: version "2.32.3" resolved "https://registry.yarnpkg.com/strong-remoting/-/strong-remoting-2.32.3.tgz#91875f353172f3ab9b2323d8fef82ad47caf3ab2" dependencies: @@ -2188,6 +2286,10 @@ superagent@^2.2: qs "^6.1.0" readable-stream "^2.0.5" +supports-color@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-0.2.0.tgz#d92de2694eb3f67323973d7ae3d8b55b4c22190a" + supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" @@ -2294,10 +2396,6 @@ underscore.string@~2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-2.3.3.tgz#71c08bf6b428b1133f37e78fa3a21c82f7329b0d" -underscore@~1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.7.0.tgz#6bbaf0877500d36be34ecaa584e0db9fef035209" - unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -2320,6 +2418,13 @@ uuid@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" +validate-npm-package-license@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" + dependencies: + spdx-correct "~1.0.0" + spdx-expression-parse "~1.0.0" + vary@^1, vary@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.0.tgz#e1e5affbbd16ae768dd2674394b9ad3022653140" @@ -2330,6 +2435,12 @@ verror@1.3.6: dependencies: extsprintf "1.0.2" +wide-align@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.0.tgz#40edde802a71fea1f070da3e62dcda2e7add96ad" + dependencies: + string-width "^1.0.1" + word-count@^0.2.1: version "0.2.2" resolved "https://registry.yarnpkg.com/word-count/-/word-count-0.2.2.tgz#699192fca6829fe936d41cb0d95db9248c570451" diff --git a/appengine/system-test/all.test.js b/appengine/system-test/all.test.js index 08def9efc4c..77ccf3910ac 100644 --- a/appengine/system-test/all.test.js +++ b/appengine/system-test/all.test.js @@ -129,13 +129,13 @@ var sampleTests = [ args: ['app.js'], msg: 'Logged' }, - { - dir: 'appengine/loopback', - cmd: 'node', - args: ['server/server.js'], - msg: 'started', - code: 304 - }, + // { + // dir: 'appengine/loopback', + // cmd: 'node', + // args: ['server/server.js'], + // msg: 'started', + // code: 304 + // }, { dir: 'appengine/mailgun', cmd: 'node', diff --git a/bigquery/system-test/datasets.test.js b/bigquery/system-test/datasets.test.js index 73f435eb8c4..5ca4831998d 100644 --- a/bigquery/system-test/datasets.test.js +++ b/bigquery/system-test/datasets.test.js @@ -25,14 +25,14 @@ const cwd = path.join(__dirname, `..`); const cmd = `node datasets.js`; const datasetId = (`nodejs-docs-samples-test-${uuid.v4()}`).replace(/-/gi, '_'); -test.after(async () => { +test.after.always(async () => { try { await bigquery.dataset(datasetId).delete({ force: true }); } catch (err) {} // ignore error }); test.beforeEach(stubConsole); -test.afterEach(restoreConsole); +test.afterEach.always(restoreConsole); test.serial(`should create a dataset`, async (t) => { const output = await runAsync(`${cmd} create ${datasetId}`, cwd); diff --git a/bigquery/system-test/queries.test.js b/bigquery/system-test/queries.test.js index 204c093c32a..84deeb7c7a9 100644 --- a/bigquery/system-test/queries.test.js +++ b/bigquery/system-test/queries.test.js @@ -47,7 +47,7 @@ unique_words: 4582`; const sqlQuery = `SELECT * FROM publicdata.samples.natality LIMIT 5;`; test.beforeEach(stubConsole); -test.afterEach(restoreConsole); +test.afterEach.always(restoreConsole); test(`should query shakespeare`, async (t) => { const output = await runAsync(`${cmd} shakespeare`, cwd); diff --git a/bigquery/system-test/quickstart.test.js b/bigquery/system-test/quickstart.test.js index 60990087219..cb3de0d0cdd 100644 --- a/bigquery/system-test/quickstart.test.js +++ b/bigquery/system-test/quickstart.test.js @@ -25,14 +25,14 @@ const expectedDatasetId = `my_new_dataset`; let datasetId = `nodejs-docs-samples-test-${uuid.v4()}`; datasetId = datasetId.replace(/-/gi, `_`); -test.after(async () => { +test.after.always(async () => { try { bigquery.dataset(datasetId).delete({ force: true }); } catch (err) {} // ignore error }); test.beforeEach(stubConsole); -test.afterEach(restoreConsole); +test.afterEach.always(restoreConsole); test(`quickstart should create a dataset`, async (t) => { await new Promise((resolve, reject) => { diff --git a/bigquery/system-test/tables.test.js b/bigquery/system-test/tables.test.js index 886242f9518..6f549a7c07c 100644 --- a/bigquery/system-test/tables.test.js +++ b/bigquery/system-test/tables.test.js @@ -51,7 +51,7 @@ test.before(async () => { ]); }); -test.after(async () => { +test.after.always(async () => { try { await bigquery.dataset(srcDatasetId).delete({ force: true }); } catch (err) {} // ignore error @@ -74,7 +74,7 @@ test.after(async () => { }); test.beforeEach(stubConsole); -test.afterEach(restoreConsole); +test.afterEach.always(restoreConsole); test.serial(`should create a table`, async (t) => { const output = await runAsync(`${cmd} create ${datasetId} ${tableId} "${schema}"`, cwd); diff --git a/computeengine/system-test/vms.test.js b/computeengine/system-test/vms.test.js index 5a2c6b39eca..bc9306dad5b 100644 --- a/computeengine/system-test/vms.test.js +++ b/computeengine/system-test/vms.test.js @@ -18,7 +18,7 @@ require(`../../system-test/_setup`); const vmsExample = require(`../vms`); test.beforeEach(stubConsole); -test.afterEach(restoreConsole); +test.afterEach.always(restoreConsole); test.cb(`should retrieve vms`, (t) => { vmsExample.main((err, result) => { diff --git a/computeengine/system-test/vms_api.test.js b/computeengine/system-test/vms_api.test.js index ad641461ec8..f89f63fc307 100644 --- a/computeengine/system-test/vms_api.test.js +++ b/computeengine/system-test/vms_api.test.js @@ -18,7 +18,7 @@ require(`../../system-test/_setup`); const vmsExample = require(`../vms_api`); test.beforeEach(stubConsole); -test.afterEach(restoreConsole); +test.afterEach.always(restoreConsole); test.cb('should retrieve vms', (t) => { vmsExample.main((err, result) => { diff --git a/computeengine/test/mailjet.test.js b/computeengine/test/mailjet.test.js index 2e42a3f5fd4..7e6cbbafffa 100644 --- a/computeengine/test/mailjet.test.js +++ b/computeengine/test/mailjet.test.js @@ -20,7 +20,7 @@ process.env.MAILJET_API_KEY = `foo`; process.env.MAILJET_API_SECRET = `bar`; test.beforeEach(stubConsole); -test.afterEach(restoreConsole); +test.afterEach.always(restoreConsole); test.cb(`should send an email`, (t) => { proxyquire(`../mailjet`, { diff --git a/computeengine/test/sendgrid.test.js b/computeengine/test/sendgrid.test.js index 124539ae060..c296546e3cc 100644 --- a/computeengine/test/sendgrid.test.js +++ b/computeengine/test/sendgrid.test.js @@ -19,7 +19,7 @@ const proxyquire = require(`proxyquire`).noPreserveCache(); process.env.SENDGRID_API_KEY = `foo`; test.beforeEach(stubConsole); -test.afterEach(restoreConsole); +test.afterEach.always(restoreConsole); test.cb(`should send an email`, (t) => { proxyquire(`../sendgrid`, { diff --git a/datastore/system-test/concepts.test.js b/datastore/system-test/concepts.test.js index 411c74ff564..80d0f39762f 100644 --- a/datastore/system-test/concepts.test.js +++ b/datastore/system-test/concepts.test.js @@ -41,7 +41,7 @@ test.before((t) => { query = new Query(projectId); }); -test.after(async () => { +test.after.always(async () => { const datastore = transaction.datastore; const query = datastore.createQuery(`Task`).select(`__key__`); const [entities] = await datastore.runQuery(query); @@ -49,7 +49,7 @@ test.after(async () => { }); test.beforeEach(stubConsole); -test.afterEach(restoreConsole); +test.afterEach.always(restoreConsole); // Transactions test.serial(`performs a transactional update`, (t) => transaction.testTransactionalUpdate(t)); diff --git a/datastore/system-test/error.test.js b/datastore/system-test/error.test.js index cab26d40ef8..8499e5602ee 100644 --- a/datastore/system-test/error.test.js +++ b/datastore/system-test/error.test.js @@ -20,7 +20,7 @@ require(`../../system-test/_setup`); const error = require('../error'); test.beforeEach(stubConsole); -test.afterEach(restoreConsole); +test.afterEach.always(restoreConsole); test(`should have an error`, async (t) => { const err = await t.throws(error.runQuery()); diff --git a/datastore/system-test/quickstart.test.js b/datastore/system-test/quickstart.test.js index 4ad5cc9a8df..e64a905a21c 100644 --- a/datastore/system-test/quickstart.test.js +++ b/datastore/system-test/quickstart.test.js @@ -29,14 +29,14 @@ test.before(async () => { await datastore.delete(key); } catch (err) {} // ignore error }); -test.after(async () => { +test.after.always(async () => { try { await datastore.delete(key); } catch (err) {} // ignore error }); test.beforeEach(stubConsole); -test.afterEach(restoreConsole); +test.afterEach.always(restoreConsole); test.cb(`should get a task from Datastore`, (t) => { const datastoreMock = { diff --git a/datastore/system-test/tasks.test.js b/datastore/system-test/tasks.test.js index 3da66a11d57..503d5c205f4 100644 --- a/datastore/system-test/tasks.test.js +++ b/datastore/system-test/tasks.test.js @@ -26,14 +26,14 @@ const cwd = path.join(__dirname, `..`); const description = `description`; let key; -test.after(async () => { +test.after.always(async () => { try { await datastore.delete(key); } catch (err) {} // ignore error }); test.beforeEach(stubConsole); -test.afterEach(restoreConsole); +test.afterEach.always(restoreConsole); test.serial(`should add a task`, async (t) => { const expected = /^Task (\d+) created successfully.$/; diff --git a/dns/system-test/quickstart.test.js b/dns/system-test/quickstart.test.js index cab7253d9f7..cff0a5cd869 100644 --- a/dns/system-test/quickstart.test.js +++ b/dns/system-test/quickstart.test.js @@ -29,14 +29,14 @@ test.before(async () => { }); }); -test.after(async () => { +test.after.always(async () => { try { await dns.zone(zoneName).delete(); } catch (err) {} // ignore error }); test.beforeEach(stubConsole); -test.afterEach(restoreConsole); +test.afterEach.always(restoreConsole); test.cb(`should list zones`, (t) => { const dnsMock = { diff --git a/dns/system-test/zones.test.js b/dns/system-test/zones.test.js index a13057e1b58..c80d1272c96 100644 --- a/dns/system-test/zones.test.js +++ b/dns/system-test/zones.test.js @@ -31,14 +31,14 @@ test.before(async () => { }); }); -test.after(async () => { +test.after.always(async () => { try { await dns.zone(zoneName).delete(); } catch (err) {} // ignore error }); test.beforeEach(stubConsole); -test.afterEach(restoreConsole); +test.afterEach.always(restoreConsole); test.cb(`should list zones`, (t) => { // Listing is eventually consistent, give the indexes time to update diff --git a/endpoints/getting-started/test/app.test.js b/endpoints/getting-started/test/app.test.js index 26c423a1274..f79ce3d22b2 100644 --- a/endpoints/getting-started/test/app.test.js +++ b/endpoints/getting-started/test/app.test.js @@ -39,7 +39,7 @@ function getSample () { } test.beforeEach(stubConsole); -test.afterEach(restoreConsole); +test.afterEach.always(restoreConsole); test.cb('should echo a message', (t) => { request(getSample().app) diff --git a/functions/background/test/index.test.js b/functions/background/test/index.test.js index e3324c75afd..5a32d7a1393 100644 --- a/functions/background/test/index.test.js +++ b/functions/background/test/index.test.js @@ -33,7 +33,7 @@ function getSample () { } test.beforeEach(stubConsole); -test.afterEach(restoreConsole); +test.afterEach.always(restoreConsole); test.serial(`should echo message`, (t) => { const event = { diff --git a/functions/datastore/test/index.test.js b/functions/datastore/test/index.test.js index 11ad0dcd5ab..772584d7e30 100644 --- a/functions/datastore/test/index.test.js +++ b/functions/datastore/test/index.test.js @@ -68,7 +68,7 @@ function getSample () { } test.beforeEach(stubConsole); -test.afterEach(restoreConsole); +test.afterEach.always(restoreConsole); test.serial(`set: Set fails without a value`, (t) => { const expectedMsg = `Value not provided. Make sure you have a "value" property in your request`; diff --git a/functions/helloworld/test/index.test.js b/functions/helloworld/test/index.test.js index 8f777dde5c7..eeba81840e0 100644 --- a/functions/helloworld/test/index.test.js +++ b/functions/helloworld/test/index.test.js @@ -21,7 +21,7 @@ const proxyquire = require('proxyquire').noCallThru(); const program = proxyquire(`../`, {}); test.beforeEach(stubConsole); -test.afterEach(restoreConsole); +test.afterEach.always(restoreConsole); test.serial(`helloworld: should log a message`, (t) => { const expectedMsg = `My Cloud Function: hi`; diff --git a/functions/http/test/index.test.js b/functions/http/test/index.test.js index baedea4abdf..bcb2b5602bc 100644 --- a/functions/http/test/index.test.js +++ b/functions/http/test/index.test.js @@ -53,7 +53,7 @@ function getMocks () { } test.beforeEach(stubConsole); -test.afterEach(restoreConsole); +test.afterEach.always(restoreConsole); test.serial(`http:helloworld: should error with no message`, (t) => { const mocks = getMocks(); diff --git a/functions/log/test/index.test.js b/functions/log/test/index.test.js index 52a865b3283..e2cee39bd92 100644 --- a/functions/log/test/index.test.js +++ b/functions/log/test/index.test.js @@ -52,7 +52,7 @@ function getSample () { } test.beforeEach(stubConsole); -test.afterEach(restoreConsole); +test.afterEach.always(restoreConsole); test.serial(`should write to log`, (t) => { const expectedMsg = `I am a log entry!`; diff --git a/functions/ocr/app/test/index.test.js b/functions/ocr/app/test/index.test.js index 9f5ef37e594..5883cf9e3b6 100644 --- a/functions/ocr/app/test/index.test.js +++ b/functions/ocr/app/test/index.test.js @@ -85,7 +85,7 @@ function getSample () { } test.beforeEach(stubConsole); -test.afterEach(restoreConsole); +test.afterEach.always(restoreConsole); test.serial(`processImage does nothing on delete`, async (t) => { await getSample().program.processImage({ data: { resourceState: `not_exists` } }); diff --git a/functions/pubsub/test/index.test.js b/functions/pubsub/test/index.test.js index 27bd46ea17f..1f4e6207f0d 100644 --- a/functions/pubsub/test/index.test.js +++ b/functions/pubsub/test/index.test.js @@ -54,7 +54,7 @@ function getSample () { } test.beforeEach(stubConsole); -test.afterEach(restoreConsole); +test.afterEach.always(restoreConsole); test.serial(`Publish fails without a topic`, (t) => { const expectedMsg = `Topic not provided. Make sure you have a "topic" property in your request`; diff --git a/functions/sendgrid/test/index.test.js b/functions/sendgrid/test/index.test.js index 3f6d6f5f464..75e7301c496 100644 --- a/functions/sendgrid/test/index.test.js +++ b/functions/sendgrid/test/index.test.js @@ -144,7 +144,7 @@ function getMocks () { } test.beforeEach(stubConsole); -test.afterEach(restoreConsole); +test.afterEach.always(restoreConsole); test.serial(`Send fails if not a POST request`, async (t) => { const error = new Error(`Only POST requests are accepted`); diff --git a/functions/slack/test/index.test.js b/functions/slack/test/index.test.js index 411c5bdfd75..bfaa2987cce 100644 --- a/functions/slack/test/index.test.js +++ b/functions/slack/test/index.test.js @@ -84,7 +84,7 @@ function getMocks () { } test.beforeEach(stubConsole); -test.afterEach(restoreConsole); +test.afterEach.always(restoreConsole); test.serial(`Send fails if not a POST request`, async (t) => { const error = new Error(`Only POST requests are accepted`); diff --git a/language/slackbot/system-test/controller.test.js b/language/slackbot/system-test/controller.test.js index 267bf27ae32..715cc037eb2 100644 --- a/language/slackbot/system-test/controller.test.js +++ b/language/slackbot/system-test/controller.test.js @@ -50,7 +50,7 @@ test.before((t) => { }); }); -test.after((t) => { +test.after.always((t) => { process.env.SLACK_TOKEN_PATH = originalToken; try { fs.unlinkSync(SLACK_TOKEN_PATH); diff --git a/language/slackbot/system-test/demo_bot.test.js b/language/slackbot/system-test/demo_bot.test.js index 7c08120592a..c29ba507b17 100644 --- a/language/slackbot/system-test/demo_bot.test.js +++ b/language/slackbot/system-test/demo_bot.test.js @@ -59,7 +59,7 @@ test.before.cb((t) => { }); }); -test.after.cb((t) => { +test.after.cb.always((t) => { fs.unlink(DB_PATH, (err) => { if (err) { t.end(err); diff --git a/language/system-test/analyze.test.js b/language/system-test/analyze.test.js index 16560e87c51..dceebfda51b 100644 --- a/language/system-test/analyze.test.js +++ b/language/system-test/analyze.test.js @@ -33,7 +33,7 @@ test.before(async () => { await bucket.upload(localFilePath); }); -test.after(async () => { +test.after.always(async () => { const bucket = storage.bucket(bucketName); await bucket.deleteFiles({ force: true }); await bucket.deleteFiles({ force: true }); // Try a second time... @@ -41,7 +41,7 @@ test.after(async () => { }); test.beforeEach(stubConsole); -test.afterEach(restoreConsole); +test.afterEach.always(restoreConsole); test(`should run sync recognize`, async (t) => { const output = await runAsync(`${cmd} sentiment-text "${text}"`, cwd); diff --git a/language/system-test/quickstart.test.js b/language/system-test/quickstart.test.js index 41cfb414d3c..3fea05ff7f3 100644 --- a/language/system-test/quickstart.test.js +++ b/language/system-test/quickstart.test.js @@ -21,7 +21,7 @@ const proxyquire = require(`proxyquire`).noPreserveCache(); const language = proxyquire(`@google-cloud/language`, {})(); test.beforeEach(stubConsole); -test.afterEach(restoreConsole); +test.afterEach.always(restoreConsole); test.cb(`should detect sentiment`, (t) => { const expectedText = `Hello, world!`; diff --git a/logging/system-test/logs.test.js b/logging/system-test/logs.test.js index eee7e44148f..2587b874985 100644 --- a/logging/system-test/logs.test.js +++ b/logging/system-test/logs.test.js @@ -24,7 +24,7 @@ const filter = `resource.type="global" AND logName="projects/${projectId}/logs/$ const message = `Hello world!`; test.beforeEach(stubConsole); -test.afterEach(restoreConsole); +test.afterEach.always(restoreConsole); test.cb.serial(`should write a log entry`, (t) => { const options = { diff --git a/logging/system-test/quickstart.test.js b/logging/system-test/quickstart.test.js index fb864435d9a..19f2716b38e 100644 --- a/logging/system-test/quickstart.test.js +++ b/logging/system-test/quickstart.test.js @@ -23,14 +23,14 @@ const uuid = require(`uuid`); const logName = `nodejs-docs-samples-test-${uuid.v4()}`; -test.after(async () => { +test.after.always(async () => { try { await logging.log(logName).delete(); } catch (err) {} // ignore error }); test.beforeEach(stubConsole); -test.afterEach(restoreConsole); +test.afterEach.always(restoreConsole); test.cb(`should log an entry`, (t) => { const expectedlogName = `my-log`; diff --git a/logging/system-test/sinks.test.js b/logging/system-test/sinks.test.js index 04114f9c341..002f9025594 100644 --- a/logging/system-test/sinks.test.js +++ b/logging/system-test/sinks.test.js @@ -31,7 +31,7 @@ test.before(async (t) => { await storage.createBucket(bucketName); }); -test.after(async (t) => { +test.after.always(async (t) => { try { await logging.sink(sinkName).delete(); } catch (err) {} // ignore error @@ -41,7 +41,7 @@ test.after(async (t) => { }); test.beforeEach(stubConsole); -test.afterEach(restoreConsole); +test.afterEach.always(restoreConsole); test.cb.serial(`should create a new sink`, (t) => { program.createSink(sinkName, bucketName, filter, (err, sink, apiResponse) => { diff --git a/monitoring/system-test/create_custom_metric.test.js b/monitoring/system-test/create_custom_metric.test.js index acd608a3239..8c58494083e 100644 --- a/monitoring/system-test/create_custom_metric.test.js +++ b/monitoring/system-test/create_custom_metric.test.js @@ -23,7 +23,7 @@ function getPointValue (timeSeries) { } test.before(stubConsole); -test.after(restoreConsole); +test.after.always(restoreConsole); test.cb('should create and read back a custom metric', (t) => { customMetricsExample.main( diff --git a/monitoring/system-test/list_resources.test.js b/monitoring/system-test/list_resources.test.js index caccc16a047..5039b8a1cd3 100644 --- a/monitoring/system-test/list_resources.test.js +++ b/monitoring/system-test/list_resources.test.js @@ -18,7 +18,7 @@ require(`../../system-test/_setup`); const listResourcesExample = require(`../list_resources`); test.before(stubConsole); -test.after(restoreConsole); +test.after.always(restoreConsole); test.cb(`should list a bunch of stuff`, (t) => { listResourcesExample.main(process.env.GCLOUD_PROJECT, (err, results) => { diff --git a/package.json b/package.json index df07e5835c7..cd68f55b664 100644 --- a/package.json +++ b/package.json @@ -97,6 +97,7 @@ "moment": "2.17.1", "morgan": "^1.7.0", "multer": "^1.2.1", + "mysql": "2.12.0", "natural": "0.4.0", "nconf": "^0.8.4", "node-record-lpcm16": "0.2.0", @@ -104,6 +105,7 @@ "nodemailer": "2.7.0", "nodemailer-smtp-transport": "2.7.2", "nyc": "10.0.0", + "prompt": "1.0.0", "proxyquire": "1.7.10", "pug": "2.0.0-beta6", "redis": "2.6.3", diff --git a/pubsub/system-test/quickstart.test.js b/pubsub/system-test/quickstart.test.js index 620cbda2532..4e92612d7bd 100644 --- a/pubsub/system-test/quickstart.test.js +++ b/pubsub/system-test/quickstart.test.js @@ -26,7 +26,7 @@ const projectId = process.env.GCLOUD_PROJECT; const fullTopicName = `projects/${projectId}/topics/${topicName}`; test.before(stubConsole); -test.after(() => { +test.after.always(() => { restoreConsole(); return pubsub.topic(topicName).delete().catch(() => {}); }); diff --git a/pubsub/system-test/subscriptions.test.js b/pubsub/system-test/subscriptions.test.js index 3da16770064..55292e2cecf 100644 --- a/pubsub/system-test/subscriptions.test.js +++ b/pubsub/system-test/subscriptions.test.js @@ -40,7 +40,7 @@ test.before(async () => { ]); }); -test.after(async () => { +test.after.always(async () => { try { await pubsub.subscription(subscriptionNameOne).delete(); } catch (err) {} // ignore error @@ -59,7 +59,7 @@ test.after(async () => { }); test.beforeEach(stubConsole); -test.afterEach(restoreConsole); +test.afterEach.always(restoreConsole); test.serial(`should create a subscription`, async (t) => { const output = await runAsync(`${cmd} create ${topicNameOne} ${subscriptionNameOne}`, cwd); diff --git a/pubsub/system-test/topics.test.js b/pubsub/system-test/topics.test.js index 2bdb1de6781..9e839e53cb9 100644 --- a/pubsub/system-test/topics.test.js +++ b/pubsub/system-test/topics.test.js @@ -37,7 +37,7 @@ test.before(async () => { } catch (err) {} // ignore error }); -test.after(async () => { +test.after.always(async () => { try { await pubsub.subscription(subscriptionNameOne).delete(); } catch (err) {} // ignore error diff --git a/resource/system-test/quickstart.test.js b/resource/system-test/quickstart.test.js index dbb2b0d83a3..8eff3ab6240 100644 --- a/resource/system-test/quickstart.test.js +++ b/resource/system-test/quickstart.test.js @@ -21,7 +21,7 @@ const proxyquire = require(`proxyquire`).noPreserveCache(); const resource = proxyquire(`@google-cloud/resource`, {})(); test.before(stubConsole); -test.after(restoreConsole); +test.after.always(restoreConsole); test.cb(`should list projects`, (t) => { const resourceMock = { diff --git a/scripts/install b/scripts/install index 06a0b3812a9..56eda733f60 100644 --- a/scripts/install +++ b/scripts/install @@ -26,7 +26,6 @@ const queue = async.queue((directory, callback) => { }, 4); queue.push('appengine/bower'); -queue.push('appengine/cloudsql'); queue.push('appengine/express-memcached-session'); queue.push('appengine/geddy'); queue.push('appengine/grunt'); diff --git a/speech/recognize.js b/speech/recognize.js index 45112d48b94..639406ef6bb 100644 --- a/speech/recognize.js +++ b/speech/recognize.js @@ -122,7 +122,10 @@ function streamingMicRecognize () { .on('data', (data) => process.stdout.write(data.results)); // Start recording and send the microphone input to the Speech API - record.start({ sampleRate: 16000 }).pipe(recognizeStream); + record.start({ + sampleRate: 16000, + threshold: 0 + }).pipe(recognizeStream); console.log('Listening, press Ctrl+C to stop.'); } diff --git a/speech/system-test/quickstart.test.js b/speech/system-test/quickstart.test.js index 4a4b6f4ba9c..1b0407e6cf4 100644 --- a/speech/system-test/quickstart.test.js +++ b/speech/system-test/quickstart.test.js @@ -28,7 +28,7 @@ const config = { }; test.before(stubConsole); -test.after(restoreConsole); +test.after.always(restoreConsole); test.cb(`should detect speech`, (t) => { const expectedFileName = `./resources/audio.raw`; diff --git a/storage/system-test/acl.test.js b/storage/system-test/acl.test.js index 1f6a7ba5de4..9b132f01b99 100644 --- a/storage/system-test/acl.test.js +++ b/storage/system-test/acl.test.js @@ -34,7 +34,7 @@ test.before(async (t) => { await bucket.upload(filePath); }); -test.after(async (t) => { +test.after.always(async (t) => { // Try deleting all files twice try { await bucket.deleteFiles({ force: true }); diff --git a/storage/system-test/buckets.test.js b/storage/system-test/buckets.test.js index 6daa4bde779..70c8fd79e95 100644 --- a/storage/system-test/buckets.test.js +++ b/storage/system-test/buckets.test.js @@ -26,14 +26,14 @@ const bucketName = `nodejs-docs-samples-test-${uuid.v4()}`; const bucket = storage.bucket(bucketName); const cmd = `node buckets.js`; -test.after(async () => { +test.after.always(async () => { try { await bucket.delete(); } catch (err) {} // ignore error }); test.beforeEach(stubConsole); -test.afterEach(restoreConsole); +test.afterEach.always(restoreConsole); test.serial(`should create a bucket`, async (t) => { const output = await runAsync(`${cmd} create ${bucketName}`, cwd); diff --git a/storage/system-test/encryption.test.js b/storage/system-test/encryption.test.js index a603d70235e..23200f180c5 100644 --- a/storage/system-test/encryption.test.js +++ b/storage/system-test/encryption.test.js @@ -37,7 +37,7 @@ test.before(async () => { await bucket.create(bucketName); }); -test.after(async () => { +test.after.always(async () => { try { // Delete the downloaded file fs.unlinkSync(downloadFilePath); @@ -57,7 +57,7 @@ test.after(async () => { }); test.beforeEach(stubConsole); -test.afterEach(restoreConsole); +test.afterEach.always(restoreConsole); test.serial(`should generate a key`, async (t) => { const output = await runAsync(`${cmd} generate-encryption-key`, cwd); diff --git a/storage/system-test/files.test.js b/storage/system-test/files.test.js index dfcd93107b0..4557141da66 100644 --- a/storage/system-test/files.test.js +++ b/storage/system-test/files.test.js @@ -36,7 +36,7 @@ test.before(async () => { await bucket.create(); }); -test.after(async () => { +test.after.always(async () => { try { fs.unlinkSync(downloadFilePath); } catch (err) { @@ -55,7 +55,7 @@ test.after(async () => { }); test.beforeEach(stubConsole); -test.afterEach(restoreConsole); +test.afterEach.always(restoreConsole); test.serial(`should upload a file`, async (t) => { const output = await runAsync(`${cmd} upload ${bucketName} ${filePath}`, cwd); diff --git a/storage/system-test/quickstart.test.js b/storage/system-test/quickstart.test.js index 0c69e6015b7..994821ed8fa 100644 --- a/storage/system-test/quickstart.test.js +++ b/storage/system-test/quickstart.test.js @@ -25,7 +25,7 @@ const bucketName = `nodejs-docs-samples-test-${uuid.v4()}`; const bucket = storage.bucket(bucketName); test.before(stubConsole); -test.after(async () => { +test.after.always(async () => { restoreConsole(); try { await bucket.delete(); diff --git a/storage/system-test/transfer.test.js b/storage/system-test/transfer.test.js index 1a5544ff187..4e3811f336c 100644 --- a/storage/system-test/transfer.test.js +++ b/storage/system-test/transfer.test.js @@ -37,7 +37,7 @@ test.before(async () => { await storage.createBucket(secondBucketName); }); -test.after(async () => { +test.after.always(async () => { restoreConsole(); const bucketOne = storage.bucket(firstBucketName); const bucketTwo = storage.bucket(secondBucketName); diff --git a/storage/test/transfer.test.js b/storage/test/transfer.test.js index b32faa206c5..9c7c15250dd 100644 --- a/storage/test/transfer.test.js +++ b/storage/test/transfer.test.js @@ -64,7 +64,7 @@ function getSample () { } test.beforeEach(stubConsole); -test.afterEach(restoreConsole); +test.afterEach.always(restoreConsole); test.serial(`should create a transfer job`, (t) => { const description = `description`; diff --git a/test/utils.test.js b/test/utils.test.js index 8622f489be7..516a5905ab9 100644 --- a/test/utils.test.js +++ b/test/utils.test.js @@ -18,7 +18,7 @@ require(`./_setup`); var utils = require('../utils'); test.beforeEach(stubConsole); -test.afterEach(restoreConsole); +test.afterEach.always(restoreConsole); test.serial('should throw error', (t) => { var handler = utils.makeHandler(); diff --git a/translate/system-test/quickstart.test.js b/translate/system-test/quickstart.test.js index f056c2a2864..6c517dabf9c 100644 --- a/translate/system-test/quickstart.test.js +++ b/translate/system-test/quickstart.test.js @@ -21,7 +21,7 @@ const proxyquire = require(`proxyquire`).noPreserveCache(); const translate = proxyquire(`@google-cloud/translate`, {})(); test.before(stubConsole); -test.after(restoreConsole); +test.after.always(restoreConsole); test.cb(`should translate a string`, (t) => { const string = `Hello, world!`; diff --git a/vision/README.md b/vision/README.md index fe90c875958..c71e091af17 100644 --- a/vision/README.md +++ b/vision/README.md @@ -13,6 +13,7 @@ content. * [Setup](#setup) * [Samples](#samples) + * [Detection snippets](#detection-snippets) * [Face detection](#face-detection) * [Label detection](#label-detection) * [Landmark detection](#landmark-detection) @@ -30,6 +31,54 @@ content. ## Samples +### Detection snippets + +View the [documentation][detect_docs] or the [source code][detect_code]. + +__Usage:__ `node detect.js --help` + +``` +Commands: + faces Detects faces in a local image file. + faces-gcs Detects faces in an image in Google Cloud Storage. + labels Detects labels in a local image file. + labels-gcs Detects labels in an image in Google Cloud Storage. + landmarks Detects landmarks in a local image file. + landmarks-gcs Detects landmarks in an image in Google Cloud Storage. + text Detects text in a local image file. + text-gcs Detects text in an image in Google Cloud Storage. + logos Detects logos in a local image file. + logos-gcs Detects logos in an image in Google Cloud Storage. + properties Detects image properties in a local image file. + properties-gcs Detects image properties in an image in Google Cloud Storage. + safe-search Detects safe search properties in a local image file. + safe-search-gcs Detects safe search properties in an image in Google Cloud Storage. + +Options: + --help Show help [boolean] + +Examples: + node detect.js faces ./resources/face_no_surprise.jpg + node detect.js faces-gcs my-bucket your-image.jpg + node detect.js labels ./resources/wakeupcat.jpg + node detect.js labels-gcs my-bucket your-image.jpg + node detect.js landmarks ./resources/landmark.jpg + node detect.js landmarks-gcs my-bucket your-image.jpg + node detect.js text ./resources/wakeupcat.jpg + node detect.js text-gcs my-bucket your-image.jpg + node detect.js logos ./resources/logos.png + node detect.js logos-gcs my-bucket your-image.jpg.png + node detect.js properties ./resources/landmark.jpg + node detect.js properties-gcs my-bucket your-image.jpg + node detect.js safe-search ./resources/wakeupcat.jpg + node detect.js safe-search-gcs my-bucket your-image.jpg + +For more information, see https://cloud.google.com/vision/docs +``` + +[detect_docs]: https://cloud.google.com/vision/docs +[detect_code]: detect.js + ### Face detection View the [documentation][face_docs] or the [source code][face_code]. diff --git a/vision/detect.js b/vision/detect.js new file mode 100644 index 00000000000..e484737c878 --- /dev/null +++ b/vision/detect.js @@ -0,0 +1,457 @@ +/** + * Copyright 2017, Google, Inc. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +'use strict'; + +const Vision = require('@google-cloud/vision'); +const Storage = require('@google-cloud/storage'); + +// [START vision_face_detection] +function detectFaces (fileName) { + // Instantiates a client + const vision = Vision(); + + // The local image file on which to perform face detection + // fileName = '/path/to/image.jpg'; + + // Performs face detection on the local file + return vision.detectFaces(fileName) + .then((results) => { + const faces = results[0]; + + console.log('Faces:'); + faces.forEach((face, i) => { + console.log(` Face #${i + 1}:`); + console.log(` Joy: ${face.joy}`); + console.log(` Anger: ${face.anger}`); + console.log(` Sorrow: ${face.sorrow}`); + console.log(` Surprise: ${face.surprise}`); + }); + + return faces; + }); +} +// [END vision_face_detection] + +// [START vision_face_detection_gcs] +function detectFacesGCS (bucketName, fileName) { + // Instantiates clients + const storage = Storage(); + const vision = Vision(); + + // The bucket where the file resides, e.g. "my-bucket" + const bucket = storage.bucket(bucketName); + // The image file to analyze, e.g. "image.jpg" + const file = bucket.file(fileName); + + // Performs face detection on the remote file + return vision.detectFaces(file) + .then((results) => { + const faces = results[0]; + + console.log('Faces:'); + faces.forEach((face, i) => { + console.log(` Face #${i + 1}:`); + console.log(` Joy: ${face.joy}`); + console.log(` Anger: ${face.anger}`); + console.log(` Sorrow: ${face.sorrow}`); + console.log(` Surprise: ${face.surprise}`); + }); + + return faces; + }); +} +// [END vision_face_detection_gcs] + +// [START vision_label_detection] +function detectLabels (fileName) { + // Instantiates a client + const vision = Vision(); + + // The local image file on which to perform label detection + // fileName = '/path/to/image.jpg'; + + // Performs label detection on the local file + return vision.detectLabels(fileName) + .then((results) => { + const labels = results[0]; + + console.log('Labels:'); + labels.forEach((label) => console.log(label)); + + return labels; + }); +} +// [END vision_label_detection] + +// [START vision_label_detection_gcs] +function detectLabelsGCS (bucketName, fileName) { + // Instantiates clients + const storage = Storage(); + const vision = Vision(); + + // The bucket where the file resides, e.g. "my-bucket" + const bucket = storage.bucket(bucketName); + // The image file to analyze, e.g. "image.jpg" + const file = bucket.file(fileName); + + // Performs label detection on the remote file + return vision.detectLabels(file) + .then((results) => { + const labels = results[0]; + + console.log('Labels:'); + labels.forEach((label) => console.log(label)); + + return labels; + }); +} +// [END vision_label_detection_gcs] + +// [START vision_landmark_detection] +function detectLandmarks (fileName) { + // Instantiates a client + const vision = Vision(); + + // The local image file on which to perform landmark detection + // fileName = '/path/to/image.jpg'; + + // Performs landmark detection on the local file + return vision.detectLandmarks(fileName) + .then((results) => { + const landmarks = results[0]; + + console.log('Landmarks:'); + landmarks.forEach((landmark) => console.log(landmark)); + + return landmarks; + }); +} +// [END vision_landmark_detection] + +// [START vision_landmark_detection_gcs] +function detectLandmarksGCS (bucketName, fileName) { + // Instantiates clients + const storage = Storage(); + const vision = Vision(); + + // The bucket where the file resides, e.g. "my-bucket" + const bucket = storage.bucket(bucketName); + // The image file to analyze, e.g. "image.jpg" + const file = bucket.file(fileName); + + // Performs landmark detection on the remote file + return vision.detectLandmarks(file) + .then((results) => { + const landmarks = results[0]; + + console.log('Landmarks:'); + landmarks.forEach((landmark) => console.log(landmark)); + + return landmarks; + }); +} +// [END vision_landmark_detection_gcs] + +// [START vision_text_detection] +function detectText (fileName) { + // Instantiates a client + const vision = Vision(); + + // The local image file on which to perform text detection + // fileName = '/path/to/image.jpg'; + + // Performs text detection on the local file + return vision.detectText(fileName) + .then((results) => { + const detections = results[0]; + + console.log('Text:'); + detections.forEach((text) => console.log(text)); + + return detections; + }); +} +// [END vision_text_detection] + +// [START vision_text_detection_gcs] +function detectTextGCS (bucketName, fileName) { + // Instantiates clients + const storage = Storage(); + const vision = Vision(); + + // The bucket where the file resides, e.g. "my-bucket" + const bucket = storage.bucket(bucketName); + // The image file to analyze, e.g. "image.jpg" + const file = bucket.file(fileName); + + // Performs text detection on the remote file + return vision.detectText(file) + .then((results) => { + const detections = results[0]; + + console.log('Text:'); + detections.forEach((text) => console.log(text)); + + return detections; + }); +} +// [END vision_text_detection_gcs] + +// [START vision_logo_detection] +function detectLogos (fileName) { + // Instantiates a client + const vision = Vision(); + + // The local image file on which to perform logo detection + // fileName = '/path/to/image.jpg'; + + // Performs logo detection on the local file + return vision.detectLogos(fileName) + .then((results) => { + const logos = results[0]; + + console.log('Logos:'); + logos.forEach((logo) => console.log(logo)); + + return logos; + }); +} +// [END vision_logo_detection] + +// [START vision_logo_detection_gcs] +function detectLogosGCS (bucketName, fileName) { + // Instantiates clients + const storage = Storage(); + const vision = Vision(); + + // The bucket where the file resides, e.g. "my-bucket" + const bucket = storage.bucket(bucketName); + // The image file to analyze, e.g. "image.jpg" + const file = bucket.file(fileName); + + // Performs logo detection on the remote file + return vision.detectLogos(file) + .then((results) => { + const logos = results[0]; + + console.log('Logos:'); + logos.forEach((logo) => console.log(logo)); + + return logos; + }); +} +// [END vision_logo_detection_gcs] + +// [START vision_image_property_detection] +function detectProperties (fileName) { + // Instantiates a client + const vision = Vision(); + + // The local image file on which to perform image property detection + // fileName = '/path/to/image.jpg'; + + // Performs image property detection on the local file + return vision.detectProperties(fileName) + .then((results) => { + const properties = results[0]; + + console.log('Colors:'); + properties.colors.forEach((color) => console.log(color)); + + return properties; + }); +} +// [END vision_image_property_detection] + +// [START vision_image_property_detection_gcs] +function detectPropertiesGCS (bucketName, fileName) { + // Instantiates clients + const storage = Storage(); + const vision = Vision(); + + // The bucket where the file resides, e.g. "my-bucket" + const bucket = storage.bucket(bucketName); + // The image file to analyze, e.g. "image.jpg" + const file = bucket.file(fileName); + + // Performs image property detection on the remote file + return vision.detectProperties(file) + .then((results) => { + const properties = results[0]; + + console.log('Colors:'); + properties.colors.forEach((color) => console.log(color)); + + return properties; + }); +} +// [END vision_image_property_detection_gcs] + +// [START vision_safe_search_detection] +function detectSafeSearch (fileName) { + // Instantiates a client + const vision = Vision(); + + // The local image file on which to perform safe search property detection + // fileName = '/path/to/image.jpg'; + + // Performs safe search property detection on the local file + return vision.detectSafeSearch(fileName) + .then((results) => { + const detections = results[0]; + + console.log(`Adult: ${detections.adult}`); + console.log(`Spoof: ${detections.spoof}`); + console.log(`Medical: ${detections.medical}`); + console.log(`Violence: ${detections.violence}`); + + return detections; + }); +} +// [END vision_safe_search_detection] + +// [START vision_safe_search_detection_gcs] +function detectSafeSearchGCS (bucketName, fileName) { + // Instantiates clients + const storage = Storage(); + const vision = Vision(); + + // The bucket where the file resides, e.g. "my-bucket" + const bucket = storage.bucket(bucketName); + // The image file to analyze, e.g. "image.jpg" + const file = bucket.file(fileName); + + // Performs safe search property detection on the remote file + return vision.detectSafeSearch(file) + .then((results) => { + const detections = results[0]; + + console.log(`Adult: ${detections.adult}`); + console.log(`Spoof: ${detections.spoof}`); + console.log(`Medical: ${detections.medical}`); + console.log(`Violence: ${detections.violence}`); + + return detections; + }); +} +// [END vision_safe_search_detection_gcs] + +require(`yargs`) + .demand(1) + .command( + `faces `, + `Detects faces in a local image file.`, + {}, + (opts) => detectFaces(opts.fileName) + ) + .command( + `faces-gcs `, + `Detects faces in an image in Google Cloud Storage.`, + {}, + (opts) => detectFacesGCS(opts.bucket, opts.fileName) + ) + .command( + `labels `, + `Detects labels in a local image file.`, + {}, + (opts) => detectLabels(opts.fileName) + ) + .command( + `labels-gcs `, + `Detects labels in an image in Google Cloud Storage.`, + {}, + (opts) => detectLabelsGCS(opts.bucket, opts.fileName) + ) + .command( + `landmarks `, + `Detects landmarks in a local image file.`, + {}, + (opts) => detectLandmarks(opts.fileName) + ) + .command( + `landmarks-gcs `, + `Detects landmarks in an image in Google Cloud Storage.`, + {}, + (opts) => detectLandmarksGCS(opts.bucket, opts.fileName) + ) + .command( + `text `, + `Detects text in a local image file.`, + {}, + (opts) => detectText(opts.fileName) + ) + .command( + `text-gcs `, + `Detects text in an image in Google Cloud Storage.`, + {}, + (opts) => detectTextGCS(opts.bucket, opts.fileName) + ) + .command( + `logos `, + `Detects logos in a local image file.`, + {}, + (opts) => detectLogos(opts.fileName) + ) + .command( + `logos-gcs `, + `Detects logos in an image in Google Cloud Storage.`, + {}, + (opts) => detectLogosGCS(opts.bucket, opts.fileName) + ) + .command( + `properties `, + `Detects image properties in a local image file.`, + {}, + (opts) => detectProperties(opts.fileName) + ) + .command( + `properties-gcs `, + `Detects image properties in an image in Google Cloud Storage.`, + {}, + (opts) => detectPropertiesGCS(opts.bucket, opts.fileName) + ) + .command( + `safe-search `, + `Detects safe search properties in a local image file.`, + {}, + (opts) => detectSafeSearch(opts.fileName) + ) + .command( + `safe-search-gcs `, + `Detects safe search properties in an image in Google Cloud Storage.`, + {}, + (opts) => detectSafeSearchGCS(opts.bucket, opts.fileName) + ) + .example(`node $0 faces ./resources/face_no_surprise.jpg`) + .example(`node $0 faces-gcs my-bucket your-image.jpg`) + .example(`node $0 labels ./resources/wakeupcat.jpg`) + .example(`node $0 labels-gcs my-bucket your-image.jpg`) + .example(`node $0 landmarks ./resources/landmark.jpg`) + .example(`node $0 landmarks-gcs my-bucket your-image.jpg`) + .example(`node $0 text ./resources/wakeupcat.jpg`) + .example(`node $0 text-gcs my-bucket your-image.jpg`) + .example(`node $0 logos ./resources/logos.png`) + .example(`node $0 logos-gcs my-bucket your-image.jpg.png`) + .example(`node $0 properties ./resources/landmark.jpg`) + .example(`node $0 properties-gcs my-bucket your-image.jpg`) + .example(`node $0 safe-search ./resources/wakeupcat.jpg`) + .example(`node $0 safe-search-gcs my-bucket your-image.jpg`) + .wrap(120) + .recommendCommands() + .epilogue(`For more information, see https://cloud.google.com/vision/docs`) + .help() + .strict() + .argv; diff --git a/vision/package.json b/vision/package.json index 14fa7212c62..33f333a8662 100644 --- a/vision/package.json +++ b/vision/package.json @@ -5,13 +5,15 @@ "license": "Apache Version 2.0", "author": "Google Inc.", "scripts": { - "test": "cd ..; npm run st -- --verbose vision/system-test/*.test.js" + "test": "cd ..; npm run st -- --verbose vision/system-test/detect.test.js" }, "dependencies": { + "@google-cloud/storage": "0.6.0", "@google-cloud/vision": "0.7.0", "async": "2.1.4", "natural": "0.4.0", - "redis": "2.6.3" + "redis": "2.6.3", + "yargs": "6.6.0" }, "optionalDependencies": { "canvas": "1.6.2" diff --git a/vision/resources/face_no_surprise.jpg b/vision/resources/face_no_surprise.jpg new file mode 100644 index 00000000000..0e2894adb83 Binary files /dev/null and b/vision/resources/face_no_surprise.jpg differ diff --git a/vision/resources/landmark.jpg b/vision/resources/landmark.jpg new file mode 100644 index 00000000000..41c3d0fc935 Binary files /dev/null and b/vision/resources/landmark.jpg differ diff --git a/vision/resources/logos.png b/vision/resources/logos.png new file mode 100644 index 00000000000..dcfb4ac955f Binary files /dev/null and b/vision/resources/logos.png differ diff --git a/vision/resources/text.jpg b/vision/resources/text.jpg new file mode 100644 index 00000000000..3b17d55de0e Binary files /dev/null and b/vision/resources/text.jpg differ diff --git a/vision/resources/water.jpg b/vision/resources/water.jpg new file mode 100644 index 00000000000..1554b63df0b Binary files /dev/null and b/vision/resources/water.jpg differ diff --git a/vision/system-test/detect.test.js b/vision/system-test/detect.test.js new file mode 100644 index 00000000000..174800357f2 --- /dev/null +++ b/vision/system-test/detect.test.js @@ -0,0 +1,132 @@ +/** + * Copyright 2017, Google, Inc. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +'use strict'; + +require(`../../system-test/_setup`); + +const path = require(`path`); +const storage = require(`@google-cloud/storage`)(); +const uuid = require(`uuid`); + +const bucketName = `nodejs-docs-samples-test-${uuid.v4()}`; +const cmd = `node detect.js`; +const cwd = path.join(__dirname, `..`); +const files = [ + `face_no_surprise.jpg`, + `landmark.jpg`, + `logos.png`, + `text.jpg`, + `wakeupcat.jpg` +].map((name) => { + return { + name, + localPath: path.resolve(path.join(__dirname, `../resources/${name}`)) + }; +}); + +test.before(async () => { + const [bucket] = await storage.createBucket(bucketName); + await Promise.all(files.map((file) => bucket.upload(file.localPath))); +}); + +test.after.always(async () => { + const bucket = storage.bucket(bucketName); + await bucket.deleteFiles({ force: true }); + await bucket.deleteFiles({ force: true }); // Try a second time... + await bucket.delete(); +}); + +test(`should detect faces in a local file`, async (t) => { + const output = await runAsync(`${cmd} faces ${files[0].localPath}`, cwd); + t.true(output.includes(`Faces:`)); + t.true(output.includes(`Face #1:`)); +}); + +test(`should detect faces in a remote file`, async (t) => { + const output = await runAsync(`${cmd} faces-gcs ${bucketName} ${files[0].name}`, cwd); + t.true(output.includes(`Faces:`)); + t.true(output.includes(`Face #1:`)); +}); + +test(`should detect labels in a local file`, async (t) => { + const output = await runAsync(`${cmd} labels ${files[4].localPath}`, cwd); + t.true(output.includes(`Labels:`)); + t.true(output.includes(`cat`)); +}); + +test(`should detect labels in a remote file`, async (t) => { + const output = await runAsync(`${cmd} labels-gcs ${bucketName} ${files[4].name}`, cwd); + t.true(output.includes(`Labels:`)); + t.true(output.includes(`cat`)); +}); + +test(`should detect landmarks in a local file`, async (t) => { + const output = await runAsync(`${cmd} landmarks ${files[1].localPath}`, cwd); + t.true(output.includes(`Landmarks:`)); + t.true(output.includes(`Palace of Fine Arts`)); +}); + +test(`should detect landmarks in a remote file`, async (t) => { + const output = await runAsync(`${cmd} landmarks-gcs ${bucketName} ${files[1].name}`, cwd); + t.true(output.includes(`Landmarks:`)); + t.true(output.includes(`Palace of Fine Arts`)); +}); + +test(`should detect text in a local file`, async (t) => { + const output = await runAsync(`${cmd} text ${files[3].localPath}`, cwd); + t.true(output.includes(`Text:`)); + t.true(output.includes(`System Software Update`)); +}); + +test(`should detect text in a remote file`, async (t) => { + const output = await runAsync(`${cmd} text-gcs ${bucketName} ${files[3].name}`, cwd); + t.true(output.includes(`Text:`)); + t.true(output.includes(`System Software Update`)); +}); + +test(`should detect logos in a local file`, async (t) => { + const output = await runAsync(`${cmd} logos ${files[2].localPath}`, cwd); + t.true(output.includes(`Logos:`)); + t.true(output.includes(`Google`)); +}); + +test(`should detect logos in a remote file`, async (t) => { + const output = await runAsync(`${cmd} logos-gcs ${bucketName} ${files[2].name}`, cwd); + t.true(output.includes(`Logos:`)); + t.true(output.includes(`Google`)); +}); + +test(`should detect properties in a local file`, async (t) => { + const output = await runAsync(`${cmd} properties ${files[1].localPath}`, cwd); + t.true(output.includes(`Colors:`)); + t.true(output.split(`\n`).length > 4, `Multiple colors were detected.`); +}); + +test(`should detect properties in a remote file`, async (t) => { + const output = await runAsync(`${cmd} properties-gcs ${bucketName} ${files[1].name}`, cwd); + t.true(output.includes(`Colors:`)); + t.true(output.split(`\n`).length > 4, `Multiple colors were detected.`); +}); + +test(`should detect safe-search in a local file`, async (t) => { + const output = await runAsync(`${cmd} safe-search ${files[4].localPath}`, cwd); + t.true(output.includes(`Medical:`)); +}); + +test(`should detect safe-search in a remote file`, async (t) => { + const output = await runAsync(`${cmd} safe-search-gcs ${bucketName} ${files[4].name}`, cwd); + t.true(output.includes(`Medical:`)); +}); diff --git a/vision/system-test/faceDetection.test.js b/vision/system-test/faceDetection.test.js index 859fbf3ad22..6c9b24a6e3c 100644 --- a/vision/system-test/faceDetection.test.js +++ b/vision/system-test/faceDetection.test.js @@ -52,7 +52,7 @@ const inputFile = path.join(__dirname, `../resources`, `face.png`); const outputFile = path.join(__dirname, `../../vision`, `out.png`); test.before(stubConsole); -test.after(restoreConsole); +test.after.always(restoreConsole); test.cb(`should detect faces`, (t) => { faceDetectionExample.main(inputFile, outputFile, MockCanvas, (err, faces) => { diff --git a/vision/system-test/labelDetection.test.js b/vision/system-test/labelDetection.test.js index f6a3c00d544..19b10bb31cf 100644 --- a/vision/system-test/labelDetection.test.js +++ b/vision/system-test/labelDetection.test.js @@ -23,7 +23,7 @@ const labelDetectionSample = require(`../labelDetection`); const inputFile = path.join(__dirname, `../resources`, `cat.jpg`); test.before(stubConsole); -test.after(restoreConsole); +test.after.always(restoreConsole); test.cb(`should detect labels`, (t) => { labelDetectionSample.main(inputFile, (err, labels) => { diff --git a/vision/system-test/landmarkDetection.test.js b/vision/system-test/landmarkDetection.test.js index c0341f6b1cd..bb67a8f280b 100644 --- a/vision/system-test/landmarkDetection.test.js +++ b/vision/system-test/landmarkDetection.test.js @@ -21,7 +21,7 @@ const landmarkDetectionSample = require(`../landmarkDetection`); const inputFile = `https://cloud-samples-tests.storage.googleapis.com/vision/water.jpg`; test.before(stubConsole); -test.after(restoreConsole); +test.after.always(restoreConsole); test.cb(`should detect landmarks`, (t) => { landmarkDetectionSample.main(inputFile, (err, landmarks) => { diff --git a/vision/system-test/quickstart.test.js b/vision/system-test/quickstart.test.js index 209ba9ba4a1..2db71881924 100644 --- a/vision/system-test/quickstart.test.js +++ b/vision/system-test/quickstart.test.js @@ -22,7 +22,7 @@ const vision = proxyquire(`@google-cloud/vision`, {})(); const path = require(`path`); test.before(stubConsole); -test.after(restoreConsole); +test.after.always(restoreConsole); test.cb(`should detect labels`, (t) => { const filePath = path.join(__dirname, `../resources/wakeupcat.jpg`); diff --git a/vision/yarn.lock b/vision/yarn.lock index 03693f6f365..c390284c117 100644 --- a/vision/yarn.lock +++ b/vision/yarn.lock @@ -27,6 +27,27 @@ string-format-obj "^1.0.0" through2 "^2.0.0" +"@google-cloud/storage@0.6.0": + version "0.6.0" + resolved "https://registry.yarnpkg.com/@google-cloud/storage/-/storage-0.6.0.tgz#74e9be567b60ba062fda7aab9f0564dadca44cf0" + dependencies: + "@google-cloud/common" "^0.9.0" + arrify "^1.0.0" + async "^2.0.1" + concat-stream "^1.5.0" + create-error-class "^3.0.2" + duplexify "^3.2.0" + extend "^3.0.0" + gcs-resumable-upload "^0.7.1" + hash-stream-validation "^0.2.1" + is "^3.0.1" + mime-types "^2.0.8" + once "^1.3.1" + pumpify "^1.3.3" + stream-events "^1.0.1" + string-format-obj "^1.0.0" + through2 "^2.0.0" + "@google-cloud/vision@0.7.0": version "0.7.0" resolved "https://registry.yarnpkg.com/@google-cloud/vision/-/vision-0.7.0.tgz#286a4cde76235b9178a462041f4b7c861a242cd0" @@ -179,10 +200,18 @@ buffer-equal-constant-time@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" +buffer-equal@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-0.0.1.tgz#91bc74b11ea405bc916bc6aa908faafa5b4aac4b" + buffer-shims@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" +builtin-modules@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + bytebuffer@~5: version "5.0.1" resolved "https://registry.yarnpkg.com/bytebuffer/-/bytebuffer-5.0.1.tgz#582eea4b1a873b6d020a48d58df85f0bba6cfddd" @@ -204,6 +233,10 @@ camelcase@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" +camelcase@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" + canvas@1.6.2: version "1.6.2" resolved "https://registry.yarnpkg.com/canvas/-/canvas-1.6.2.tgz#12b56e3f00e7880aa45e3aae59fe75237720aaa4" @@ -228,7 +261,7 @@ chalk@^1.1.1: strip-ansi "^3.0.0" supports-color "^2.0.0" -cliui@^3.0.3: +cliui@^3.0.3, cliui@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" dependencies: @@ -276,6 +309,19 @@ concat-stream@~1.4.7: readable-stream "~1.1.9" typedarray "~0.0.5" +configstore@^1.2.1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-1.4.0.tgz#c35781d0501d268c25c54b8b17f6240e8a4fb021" + dependencies: + graceful-fs "^4.1.2" + mkdirp "^0.5.0" + object-assign "^4.0.1" + os-tmpdir "^1.0.0" + osenv "^0.1.0" + uuid "^2.0.1" + write-file-atomic "^1.1.2" + xdg-basedir "^2.0.0" + console-control-strings@^1.0.0, console-control-strings@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" @@ -348,7 +394,7 @@ double-ended-queue@^2.1.0-0: version "2.1.0-0" resolved "https://registry.yarnpkg.com/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz#103d3527fd31528f40188130c841efdd78264e5c" -duplexify@^3.2.0: +duplexify@^3.1.2, duplexify@^3.2.0: version "3.5.0" resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.5.0.tgz#1aa773002e1578457e9d9d4a50b0ccaaebcbd604" dependencies: @@ -376,10 +422,22 @@ end-of-stream@1.0.0: dependencies: once "~1.3.0" +end-of-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.1.0.tgz#e9353258baa9108965efc41cb0ef8ade2f3cfb07" + dependencies: + once "~1.3.0" + ent@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d" +error-ex@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.0.tgz#e67b43f3e82c96ea3a584ffee0b9fc3325d802d9" + dependencies: + is-arrayish "^0.2.1" + escape-string-regexp@^1.0.2: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" @@ -392,6 +450,13 @@ extsprintf@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550" +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" @@ -447,6 +512,18 @@ gauge@~2.7.1: supports-color "^0.2.0" wide-align "^1.1.0" +gcs-resumable-upload@^0.7.1: + version "0.7.4" + resolved "https://registry.yarnpkg.com/gcs-resumable-upload/-/gcs-resumable-upload-0.7.4.tgz#6633967badf7a4aed2d79337e7badfe889cfd617" + dependencies: + buffer-equal "0.0.1" + configstore "^1.2.1" + google-auto-auth "^0.2.1" + pumpify "^1.3.3" + request "^2.61.0" + stream-events "^1.0.1" + through2 "^2.0.0" + generate-function@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74" @@ -457,6 +534,10 @@ generate-object-property@^1.1.0: dependencies: is-property "^1.0.0" +get-caller-file@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" + get-stdin@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" @@ -488,7 +569,7 @@ glob@^7.0.5: once "^1.3.0" path-is-absolute "^1.0.0" -google-auth-library@^0.9.10: +google-auth-library@^0.9.10, google-auth-library@^0.9.6: version "0.9.10" resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-0.9.10.tgz#4993dc07bb4834b8ca0350213a6873a32c6051b9" dependencies: @@ -499,6 +580,13 @@ google-auth-library@^0.9.10: request "~2.74.0" string-template "~0.2.0" +google-auto-auth@^0.2.1: + version "0.2.4" + resolved "https://registry.yarnpkg.com/google-auto-auth/-/google-auto-auth-0.2.4.tgz#16dafbf150d353a42190979c6803ffc75f6455fa" + dependencies: + google-auth-library "^0.9.6" + object-assign "^3.0.0" + google-auto-auth@^0.5.0, google-auto-auth@^0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/google-auto-auth/-/google-auto-auth-0.5.2.tgz#4c9f38574e69fb55a3c516ab0415e9fa33e67602" @@ -530,7 +618,7 @@ google-proto-files@^0.8.0, google-proto-files@^0.8.3: version "0.8.6" resolved "https://registry.yarnpkg.com/google-proto-files/-/google-proto-files-0.8.6.tgz#a7c8ddccd2179690d270b0ebfc42994d56da0ee6" -graceful-fs@^4.1.2: +graceful-fs@^4.1.11, graceful-fs@^4.1.2: version "4.1.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" @@ -576,6 +664,12 @@ has-unicode@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" +hash-stream-validation@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/hash-stream-validation/-/hash-stream-validation-0.2.1.tgz#ecc9b997b218be5bb31298628bb807869b73dcd1" + dependencies: + through2 "^2.0.0" + hawk@~3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" @@ -589,6 +683,10 @@ hoek@2.x.x: version "2.16.3" resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" +hosted-git-info@^2.1.4: + version "2.1.5" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.1.5.tgz#0ba81d90da2e25ab34a332e6ec77936e1598118b" + http-signature@~1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" @@ -597,6 +695,10 @@ http-signature@~1.1.0: jsprim "^1.2.2" sshpk "^1.7.0" +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + indent-string@^1.1.0: version "1.2.2" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-1.2.2.tgz#db99bcc583eb6abbb1e48dcbb1999a986041cb6b" @@ -624,6 +726,16 @@ invert-kv@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + +is-builtin-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" + dependencies: + builtin-modules "^1.0.0" + is-finite@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" @@ -661,6 +773,10 @@ is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" +is-utf8@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + is@^3.0.1: version "3.2.0" resolved "https://registry.yarnpkg.com/is/-/is-3.2.0.tgz#a362e3daf7df3fd8b7114115d624c5b7e1cb90f7" @@ -728,6 +844,16 @@ lcid@^1.0.0: dependencies: invert-kv "^1.0.0" +load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + lodash.noop@~3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash.noop/-/lodash.noop-3.0.1.tgz#38188f4d650a3a474258439b96ec45b32617133c" @@ -769,7 +895,7 @@ mime-db@~1.25.0: version "1.25.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.25.0.tgz#c18dbd7c73a5dbf6f44a024dc0d165a1e7b1c392" -mime-types@^2.1.11, mime-types@^2.1.12, mime-types@~2.1.7: +mime-types@^2.0.8, mime-types@^2.1.11, mime-types@^2.1.12, mime-types@~2.1.7: version "2.1.13" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.13.tgz#e07aaa9c6c6b9a7ca3012c69003ad25a39e92a88" dependencies: @@ -793,7 +919,7 @@ minimist@^1.1.0, minimist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" -"mkdirp@>=0.5 0", mkdirp@~0.5.1: +"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@~0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" dependencies: @@ -852,6 +978,15 @@ nopt@~3.0.6: dependencies: abbrev "1" +normalize-package-data@^2.3.2: + version "2.3.5" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.5.tgz#8d924f142960e1777e7ffe170543631cc7cb02df" + dependencies: + hosted-git-info "^2.1.4" + is-builtin-module "^1.0.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + npmlog@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.2.tgz#d03950e0e78ce1527ba26d2a7592e9348ac3e75f" @@ -877,11 +1012,11 @@ object-assign@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2" -object-assign@^4.1.0: +object-assign@^4.0.1, object-assign@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz#7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0" -once@^1.3.0, once@~1.3.0, once@~1.3.3: +once@^1.3.0, once@^1.3.1, once@~1.3.0, once@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20" dependencies: @@ -891,16 +1026,55 @@ optjs@~3.2.2: version "3.2.2" resolved "https://registry.yarnpkg.com/optjs/-/optjs-3.2.2.tgz#69a6ce89c442a44403141ad2f9b370bd5bb6f4ee" +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + os-locale@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" dependencies: lcid "^1.0.0" +os-tmpdir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + +osenv@^0.1.0: + version "0.1.4" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644" + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + dependencies: + error-ex "^1.2.0" + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + dependencies: + pinkie-promise "^2.0.0" + path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + pinkie-promise@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" @@ -928,6 +1102,21 @@ protobufjs@^5.0.0: glob "^5.0.10" yargs "^3.10.0" +pump@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pump/-/pump-1.0.2.tgz#3b3ee6512f94f0e575538c17995f9f16990a5d51" + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pumpify@^1.3.3: + version "1.3.5" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.3.5.tgz#1b671c619940abcaeac0ad0e3a3c164be760993b" + dependencies: + duplexify "^3.1.2" + inherits "^2.0.1" + pump "^1.0.0" + punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" @@ -949,6 +1138,21 @@ rc@~1.1.6: minimist "^1.2.0" strip-json-comments "~1.0.4" +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + readable-stream@^1.1.7, readable-stream@~1.1.9: version "1.1.14" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" @@ -1040,7 +1244,7 @@ request@2.76.0: tough-cookie "~2.3.0" tunnel-agent "~0.4.1" -request@^2.70.0, request@^2.72.0, request@^2.79.0: +request@^2.61.0, request@^2.70.0, request@^2.72.0, request@^2.79.0: version "2.79.0" resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de" dependencies: @@ -1091,6 +1295,14 @@ request@~2.74.0: tough-cookie "~2.3.0" tunnel-agent "~0.4.1" +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + +require-main-filename@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + retry-request@^1.3.0: version "1.3.2" resolved "https://registry.yarnpkg.com/retry-request/-/retry-request-1.3.2.tgz#59ad24e71f8ae3f312d5f7b4bcf467a5e5a57bd6" @@ -1112,11 +1324,11 @@ safe-buffer@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7" -semver@^5.3.0, semver@~5.3.0: +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@~5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" -set-blocking@~2.0.0: +set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" @@ -1124,12 +1336,30 @@ signal-exit@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" +slide@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" + sntp@1.x.x: version "1.0.9" resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" dependencies: hoek "2.x.x" +spdx-correct@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" + dependencies: + spdx-license-ids "^1.0.2" + +spdx-expression-parse@~1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" + +spdx-license-ids@^1.0.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" + split-array-stream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/split-array-stream/-/split-array-stream-1.0.0.tgz#d5e4ffacd306161d69ed5252ff56d57e7762eaa2" @@ -1178,7 +1408,7 @@ string-template@~0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/string-template/-/string-template-0.2.1.tgz#42932e598a352d01fc22ec3367d9d84eec6c9add" -string-width@^1.0.1: +string-width@^1.0.1, string-width@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" dependencies: @@ -1200,6 +1430,12 @@ strip-ansi@^3.0.0, strip-ansi@^3.0.1: dependencies: ansi-regex "^2.0.0" +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + dependencies: + is-utf8 "^0.2.0" + strip-json-comments@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91" @@ -1278,16 +1514,31 @@ util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" +uuid@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" + uuid@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" +validate-npm-package-license@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" + dependencies: + spdx-correct "~1.0.0" + spdx-expression-parse "~1.0.0" + verror@1.3.6: version "1.3.6" resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c" dependencies: extsprintf "1.0.2" +which-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" + wide-align@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.0.tgz#40edde802a71fea1f070da3e62dcda2e7add96ad" @@ -1309,14 +1560,52 @@ wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" +write-file-atomic@^1.1.2: + version "1.3.1" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.3.1.tgz#7d45ba32316328dd1ec7d90f60ebc0d845bb759a" + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + slide "^1.1.5" + +xdg-basedir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-2.0.0.tgz#edbc903cc385fc04523d966a335504b5504d1bd2" + dependencies: + os-homedir "^1.0.0" + xtend@^4.0.0, xtend@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" -y18n@^3.2.0: +y18n@^3.2.0, y18n@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" +yargs-parser@^4.2.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-4.2.1.tgz#29cceac0dc4f03c6c87b4a9f217dd18c9f74871c" + dependencies: + camelcase "^3.0.0" + +yargs@6.6.0: + version "6.6.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208" + dependencies: + camelcase "^3.0.0" + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + os-locale "^1.4.0" + read-pkg-up "^1.0.1" + 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" + y18n "^3.2.1" + yargs-parser "^4.2.0" + yargs@^3.10.0: version "3.32.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.32.0.tgz#03088e9ebf9e756b69751611d2a5ef591482c995" diff --git a/yarn.lock b/yarn.lock index 6ec7170cfcb..6a27767481a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -514,6 +514,10 @@ async@~0.2.6: version "0.2.10" resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" +async@~0.9.0: + version "0.9.2" + resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" + async@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/async/-/async-1.0.0.tgz#f8fc04ca3a13784ade9e1641af98578cfbd647a9" @@ -1259,6 +1263,10 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" +bignumber.js@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-2.4.0.tgz#838a992da9f9d737e0f4b2db0be62bb09dd0c5e8" + binary-extensions@^1.0.0: version "1.8.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.8.0.tgz#48ec8d16df4377eae5fa5884682480af4d95c774" @@ -1607,6 +1615,10 @@ colors@1.0.x: version "1.0.3" resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" +colors@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" + colour@~0.7.1: version "0.7.1" resolved "https://registry.yarnpkg.com/colour/-/colour-0.7.1.tgz#9cb169917ec5d12c0736d3e8685746df1cadf778" @@ -1840,6 +1852,10 @@ deep-equal@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" +deep-equal@~0.2.1: + version "0.2.2" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-0.2.2.tgz#84b745896f34c684e98f2ce0e42abaf43bba017d" + deep-extend@~0.4.0: version "0.4.1" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253" @@ -2832,6 +2848,10 @@ httpreq@>=0.4.22: version "0.4.22" resolved "https://registry.yarnpkg.com/httpreq/-/httpreq-0.4.22.tgz#27097c8ad95ea9679190530c9c0f66b8c7aafb18" +i@0.3.x: + version "0.3.5" + resolved "https://registry.yarnpkg.com/i/-/i-0.3.5.tgz#1d2b854158ec8169113c6cb7f6b6801e99e211d5" + iconv-lite@0.4.13: version "0.4.13" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2" @@ -3602,7 +3622,7 @@ minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" -"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1: +mkdirp@0.x.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" dependencies: @@ -3673,10 +3693,18 @@ mustache@^2.2.1: version "2.3.0" resolved "https://registry.yarnpkg.com/mustache/-/mustache-2.3.0.tgz#4028f7778b17708a489930a6e52ac3bca0da41d0" -mute-stream@0.0.5: +mute-stream@0.0.5, mute-stream@~0.0.4: version "0.0.5" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0" +mysql@2.12.0: + version "2.12.0" + resolved "https://registry.yarnpkg.com/mysql/-/mysql-2.12.0.tgz#18f7af74555f3f55b7c33d67fc2ca48ccd490e4d" + dependencies: + bignumber.js "2.4.0" + readable-stream "1.1.14" + sqlstring "2.2.0" + nan@^2.0.0, nan@^2.0.5, nan@^2.3.0, nan@^2.4.0, nan@~2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.4.0.tgz#fb3c59d45fe4effe215f0b890f8adf6eb32d2232" @@ -3703,6 +3731,10 @@ nconf@^0.8.4: secure-keys "^1.0.0" yargs "^3.19.0" +ncp@1.0.x: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ncp/-/ncp-1.0.1.tgz#d15367e5cb87432ba117d2bf80fdf45aecfb4246" + negotiator@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" @@ -4087,6 +4119,14 @@ pkg-dir@^1.0.0: dependencies: find-up "^1.0.0" +pkginfo@0.3.x: + version "0.3.1" + resolved "https://registry.yarnpkg.com/pkginfo/-/pkginfo-0.3.1.tgz#5b29f6a81f70717142e09e765bbeab97b4f81e21" + +pkginfo@0.x.x: + version "0.4.0" + resolved "https://registry.yarnpkg.com/pkginfo/-/pkginfo-0.4.0.tgz#349dbb7ffd38081fcadc0853df687f0c7744cd65" + plur@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/plur/-/plur-1.0.0.tgz#db85c6814f5e5e5a3b49efc28d604fec62975156" @@ -4192,6 +4232,17 @@ promise@^7.0.1: dependencies: asap "~2.0.3" +prompt@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/prompt/-/prompt-1.0.0.tgz#8e57123c396ab988897fb327fd3aedc3e735e4fe" + dependencies: + colors "^1.1.2" + pkginfo "0.x.x" + read "1.0.x" + revalidator "0.1.x" + utile "0.3.x" + winston "2.1.x" + prop-assign@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/prop-assign/-/prop-assign-1.0.0.tgz#9767a1fbfd7093908647a6e846d31b4feaa70459" @@ -4406,6 +4457,12 @@ read-pkg@^1.0.0: normalize-package-data "^2.3.2" path-type "^1.0.0" +read@1.0.x: + version "1.0.7" + resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" + dependencies: + mute-stream "~0.0.4" + readable-stream@1.0.27-1: version "1.0.27-1" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.27-1.tgz#6b67983c20357cefd07f0165001a16d710d91078" @@ -4415,7 +4472,7 @@ readable-stream@1.0.27-1: isarray "0.0.1" string_decoder "~0.10.x" -readable-stream@1.1.x, readable-stream@^1.1.7, readable-stream@~1.1.9: +readable-stream@1.1.14, readable-stream@1.1.x, readable-stream@^1.1.7, readable-stream@~1.1.9: version "1.1.14" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" dependencies: @@ -4723,6 +4780,10 @@ retry-request@^1.3.0: request "2.76.0" through2 "^2.0.0" +revalidator@0.1.x: + version "0.1.8" + resolved "https://registry.yarnpkg.com/revalidator/-/revalidator-0.1.8.tgz#fece61bfa0c1b52a206bd6b18198184bdd523a3b" + rgb-hex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/rgb-hex/-/rgb-hex-1.0.0.tgz#bfaf8cd9cd9164b5a26d71eb4f15a0965324b3c1" @@ -4733,7 +4794,7 @@ right-align@^0.1.1: dependencies: align-text "^0.1.1" -rimraf@2, rimraf@^2.2.8, rimraf@^2.3.3, rimraf@^2.4.3, rimraf@^2.4.4, rimraf@^2.5.4, rimraf@~2.5.1, rimraf@~2.5.4: +rimraf@2, rimraf@2.x.x, rimraf@^2.2.8, rimraf@^2.3.3, rimraf@^2.4.3, rimraf@^2.4.4, rimraf@^2.5.4, rimraf@~2.5.1, rimraf@~2.5.4: version "2.5.4" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04" dependencies: @@ -4991,6 +5052,10 @@ sqlite3@3.1.8: nan "~2.4.0" node-pre-gyp "~0.6.31" +sqlstring@2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/sqlstring/-/sqlstring-2.2.0.tgz#c3135c4ea8abcd7e7ee741a4966a891d86a4f191" + sshpk@^1.7.0: version "1.10.1" resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.10.1.tgz#30e1a5d329244974a1af61511339d595af6638b0" @@ -5427,6 +5492,17 @@ util-deprecate@~1.0.1: dependencies: inherits "2.0.1" +utile@0.3.x: + version "0.3.0" + resolved "https://registry.yarnpkg.com/utile/-/utile-0.3.0.tgz#1352c340eb820e4d8ddba039a4fbfaa32ed4ef3a" + dependencies: + async "~0.9.0" + deep-equal "~0.2.1" + i "0.3.x" + mkdirp "0.x.x" + ncp "1.0.x" + rimraf "2.x.x" + utils-merge@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8" @@ -5494,6 +5570,18 @@ winston-gae@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/winston-gae/-/winston-gae-0.1.0.tgz#ef79635397757b5225c5e8cf91f5404746cb8325" +winston@2.1.x: + version "2.1.1" + resolved "https://registry.yarnpkg.com/winston/-/winston-2.1.1.tgz#3c9349d196207fd1bdff9d4bc43ef72510e3a12e" + dependencies: + async "~1.0.0" + colors "1.0.x" + cycle "1.0.x" + eyes "0.1.x" + isstream "0.1.x" + pkginfo "0.3.x" + stack-trace "0.0.x" + winston@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/winston/-/winston-2.3.0.tgz#207faaab6fccf3fe493743dd2b03dbafc7ceb78c"