From a67a558eecdb036236ac38da87ddce9f5ad37142 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9e=20Kooi?= Date: Mon, 16 Jul 2018 14:56:01 +0200 Subject: [PATCH] Working test MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add tests for thumbnail:* events. Show build output Try adding a non image file? fixes Add -b flags to local acceptance tests fix hanging thumbnail test Add a corrupt image revoke Require passing integration tests extended debugging? Try more browser versions it helps to pick a browser that's available sort stuff in .travis.yml and add whitespace for easier navigation [REVERT BEFORE MERGE] only run acceptance tests on this pr make sure lerna publishes stuff to local do git tag version during integration test update lerna fix install / bootstrap execution order ? --no-ci dont do npm ls because it errors with lerna set a git branch name blehbleh ughhhhhhhhhhhh onerror? no onerror i guess onerror 2 Revert "onerror 2" This reverts commit 64d88551fa1cd337b27e25d16a604dd781a15b43. onerror 3 more debug data disable browsers that work fix syntax for older browsers thumbnails suite check different edge versions abc use addeventlistener for error, which is different from onerror no clue skip thumb test in edge or whatever Re enable other browsers. re enable tasks fix edge skip this one was intentionally disabled Remove debug leftovers edge → supportschoosefile :ready → :all-generated --- .travis.yml | 37 +- bin/endtoend-build-ci | 17 +- bin/endtoend-build-tests | 2 +- package-lock.json | 1541 +++++++++++++---- package.json | 4 +- .../@uppy/thumbnail-generator/src/index.js | 37 +- .../thumbnail-generator/src/index.test.js | 87 +- test/endtoend/thumbnails/main.js | 21 +- test/endtoend/thumbnails/test.js | 60 +- test/endtoend/utils.js | 4 +- test/endtoend/wdio.local.conf.js | 22 +- test/endtoend/wdio.remote.conf.js | 14 +- test/resources/invalid.png | Bin 0 -> 96232 bytes website/src/docs/contributing.md | 3 + 14 files changed, 1455 insertions(+), 394 deletions(-) create mode 100644 test/resources/invalid.png diff --git a/.travis.yml b/.travis.yml index c6305c4bf..077d57ec8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,28 @@ language: node_js node_js: - 8.11.4 + +before_install: + - nvm install-latest-npm + +install: + - npm install + - npm run bootstrap -- --no-ci + +script: + - npm run build + - npm run test + - 'if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then npm run test:acceptance; fi' + - npm run uploadcdn + +cache: + apt: true + directories: + - ~/.npm + +services: + - docker + addons: apt: sources: @@ -12,19 +34,7 @@ addons: secure: nAMJ/d1fm9urTYsQ+1uqj6Jjf71J8rzwYBSZbTDAeUEZzAdvGc0a9H3PYWM4pnUDPo5s1c9MMetXi2XNdUbXgMKHbEnePZ2mJamqFtXMmpG8pgFmMqj+btMd7Yybt070tRsn4Vy0uBSi2H/en7F3j+grABJV+SAXqWkSB7CU1fZaN/u0DpoGBNj1ZNwkYCIhpLueYJTPRWBOodMAarXuFv5+7KFOKuZM3tF/JjsMNSSaDgTkz13BZnbX6vNPxGJJNJcyJGSaXrVW8hh1Zmvnk/XdiLy+vt7Wz1wz3A9ebiFDuydo5AAkxrLFsCJ5nGEqLg3bkr6NaTRpbM84ZT3i1FQMTdKP6OHHqwAeBscB6BkyhZhzvsFtl2YRBNK9mA3OtOYvBmTkFkNqvrPQlfu7cFtyG5+AUfSCiTTgS/vWIwoqSVAXaOEqN8Fp54ecUdkzCTttl3gXteZzNLRYvyQcFpoJb6E+dS8qAW0OFOteiwKVuPCh3nGUzBP13bRo1i9UAX7ZCTlpjinkxE8ryzbToo6ZcVQMBAkKhaw/x8GzOtfm5rgYMeQzGEoBJNfr7qqfs7JMxAIEMYjrTL9PXVOp/R8F3FdsqbV70jSyfsxMSMkwSWFRmVslG8+Djy8P3LnckGy1FEbMHnH8GZHZg+hbBzN8Be1/1fV0oRRAr939WRc= access_key: secure: OY3oWwiJghfty9wSPVvlhirvFGxPHDdIRuVkzAv6j7C/hj2BWYAP/UHrwdQ9XiYisHi/B5mGeyRVlrAf0MNGrG84rTDUbTWZbmktfuxl7A+Y6c0czk+s4SdhOiANG5b3tFl5wKq8h7uhrWH5/jWoKQ2Fz1VDCqxTvvZQbo41jSBhi7TBia626hxEePzdaiuw6HhGFZtfaoVs/FX30ylz8WDNrBjwCynjxsT52BaQrVvgEhuyzlOpI69YkZBPOq4fc3KiZ2YR43gLTx8K+sYCE9yJxdg1xT/UAawEhmedU83nyBZVo4rr7+03AixIxtI28MUCfBMlcsGwBxcKEKY/IWcp9UkPCq6+zALQoncV478tP21eYvlmxSFhYCrv+WEQlN+BcNjr4OJlmmFDbCVaF7r9qLeQPImU0+9iJU3OjrW7lpfLxORpGDEr2Nx6awKkIJCxNyK9weefeNo6Fz3V1kkyZ/7yWFeniJnRUCbahrB2XgzxIE+W307s1Qs4fm6JK7hVLTtG4fBzjChmAyGIzu744ws9WqmjvkC9D7OfnuXqanv/VcBFqPiudInerv7NL8FketUC+fxe/7XJfcxdaDGBjk8Kq7zXDohGRGymUXEoMDNJsKkMMlaKzdf7tgqdhsRJoH9NCVqrDXuG5al0UtrDP5RS7qfoxUunJmNFhlg= -cache: - apt: true - directories: - - ~/.npm -before_install: -- nvm install-latest-npm -services: - - docker -script: -- npm run build -- npm run test -- '{ if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then npm run test:acceptance; fi } || true' -- npm run uploadcdn + env: global: - CXX=g++-4.8 @@ -50,6 +60,7 @@ env: - secure: V6qVB6vHAuSt1YPgzYpknLglnxbYJM5bsjAjQi78zZQSqrrWCMBgp5Q+Sq7Ad8nycgnPl8W8VpMnUIBqZcK4ciCW+vJBtZ7fBJLIEGMEk8+c8az8JePFcBRiaEicZPvZFuIHPteaAy6jK1GRVpjSjJi3NYEMpcDUs2aTM2bIpX0ks2WjUqTXiK8EvIaK2LTOgSBvyGUOiHwwTkom+PyD50t7jP98g+9Pn7GPwtWaUo1K8UpLArwR2fZ/nm0F2DU6ohz7o2t4LATFXuZhbOCj7O9vh+CmBf+/0C7giT3K23LbckDSK8CNTCDC2bsv8zDo5ZZtgdOvdatOD+VlsbAMkmUzzDgQ3410arZ8g1LVQw8eJwu1H+etcAinYf4r+Tr7s3dTBliMX70/IpjZrkHR9uXEi4LelBNYn6TKdLTW3lfVWkiFs/HPu4SoAmu1+sxSvwxVDDLeexQmb2fwp0r2tDKZ3eRfpQXLPACBaORnGW6ki9qXo8PBdaElxPbpzEWzAfT3F6zRjebpow+cdFBQrAga7/LrOrXerZxH2ekRWKgXzuhw7ERwVFrVN4/NlmDJXo+rm4na7n7CxY/QpZcdpthksDO9KYCqmn5dqMqFGislRvRe7PqIti8gC4pSdeUhDKsIh9OEgVNjCczvnA8rMRQ5aNmFx6wspmrBvO7qRLM= - secure: rVsiFPA9TvH/d2wkP8+1i5QGUuYw0q2BUAUdxyxO9hQcG/nRiHXtQfLbTRZHKwvqf0vyV6J1pJqLlVN4JO/bPhAvk55KAQJWl8UqyaeZiEN9KMcTr3fJuNFlBj4ciYiZ3BWwakblsiaGCjKMRdjki58a9f8XL2rcM8R6ccndjkTMYnBKaopSsAgouI8D5n74wQz6lODUayGOlbwlGLfGtPYplUfSLK4wghC+jgWsNjJySqJhfgYS0JCZc10Qw+FI2BoU4SZ4+P0L0YPIC9zV/cUW4qDT11N/oUgwfjZbPWfM9A/xn/d7sgDH+SpeoGdYler/lvxojj6L2mD/wAh8/lg1E6nL2aKgExE3z+fd2XV8L0osB/sulB7/Exrezg/mVejAx2IkWVHi4VEJmcTV+3WeEvTFOM3fID8dOVf+GUv+hcHdZMxS/hfj3keKCYG1P5ameMJO8FehRqhetNYnr6FTyrK+S+xitaZ/nXrTbHItPS0pZ4XA6CFs5uzMBPeDnk5/D7paPyrE/k2HAc1WmA6g37OyzYIMEV1laBz8IG0qMqg6JJmr09P/Iwrim5Ex2fAssT9Yr1WuOE2gWoF0A3XuVXQHVf4tJT6x/WDKChmbX588a47AvBgkFyoXLRilUYlET2tWnEpVxUovsbJXqvHwTXWMLO9riRjjeInbpvA= - secure: eq5hOqRBN2R7YO2dYdn5OjZc/zLLYYDZcCpCu/K/8fU4HYWTqxrBntjv8T0sZ5qdlAs3IniEfXxemz9V3zwvxR+vh2bGuYr2Xo7RRa2TIDuw+KUPZogrVxhXHPKfyJqstxy+dee2+pWhGkAP7caiu49eyqlboBMkzgpO/xcdehEWYRY5jPgvnlH+QRZ3GADKs1JEeltHDiZ6rYA7nj5Tyx9UoLgv4Av9UXdC29we7dLFTkVfCHE//7wfZW9+/IbxthA4qMjQOFaBrmagN5yweDg87iPTqNMth7FjzOavdUgQ2TW6d10VDEhLIZh36gLGreViKMDCEWKMQ8f/mv05Ao8+DXyXgxIn56II8lhUp5ukQ27ZWixfEKFx2lynJWRZE0pWwf8ec1+bXLQiBOE181Cl4nUT/TbFWzvV6yA+cMiQKe4y59bC4nhkK3IYgpR5kfCFOT+1tFknQ4hNJNacWwUmaDFMxYJaXEtRUn5jJa7eGRYSCrmnymbnzZ6w3Q3nQGNvNxpbBIXX/pzs0VDVTxSlgN4gA+n2jeCyjgVVrMQ/HoAS4uwm1cx89AttW+TANppg1PqWhhrJYuVEZSnvV8PM6R7rbvlS5tluezQj41YklgjsSopH7//+dbGGDNbrTTLic4J9PJR3yEtlAMdOCi53iT0R0Dt5X2WBv2QT5Eg= + notifications: slack: secure: L3iQQE8sZ0ik1Z26gPoNMiIam9EOEwYhraHCY60Jk/wmfH6SW/727yKXpgcb/yayx37rUZplvoO7H8e05ISxTJKSepEeqbBUIBQs48S8hr+FHk0VPtpP4HGxqaITRLm+mI1coPRvfISxzrB8d240oup6muhC9Ws4/LXi6v8miyIOs2zoYmGxd56TrUeON3UYlKt6dMava0V4bugARzrafN/tfyI9ccqbHzQLBspQvBI61DzZ5I2vnWpkjfWgIHz9Fl4VzXHqMXwjuTUEu8ibA12b3dHZiJEAoqeb9Oj9QcLPbstPLhlNTZZaOrfiFtwLctI2rFh37slDpAfk5idv3ycxcoG5rbCxgyg5i6dpQqrqHxnyglgHg2/nZ+YA5okeS7nJJNtU/4S6AFRWOUUWMVVY0VBEV+8w+uurl0PDy80RUY3uyK64qAgQ8U0M81/Ys1oyWyn78TqHcbby7V2Ws5I9Yakrq8D+mdfsWYCio8F6LXHSwJ0mt2FanJtdDvpPk9sAwsXZN0n8xhELt5TiRp3bzVIQ0IPUgF54dTG9/zWRvC1P4TFaFU/2fg73ZEUC5aWJoFMnLSZjbZvp5gwpCVd0MjSBk80nF9dHYcavIgJ0wMGI3BMb8Nn6+T11Gw/ycr7OGU4NMkj7i8vSFgKF74piWZyiNW8orkMN6XZgM+o= diff --git a/bin/endtoend-build-ci b/bin/endtoend-build-ci index 24b554b68..37022b714 100755 --- a/bin/endtoend-build-ci +++ b/bin/endtoend-build-ci @@ -39,15 +39,22 @@ npm run build # https://github.com/facebook/create-react-app/pull/4626 (cd && npm-auth-to-token -u user -p password -e user@example.com -r "$VERDACCIO_REGISTRY") +git checkout -b endtoend-test-build +# HACK this thing changes all the time for some reason on CI +# so I'll just ignore it… +git checkout -- package-lock.json + # Simulate a publish of everything, to the local registry, # without changing things in git -# Use --cd-version to skip version prompts -lerna publish --yes \ +lerna version prerelease --yes \ + --exact \ --force-publish \ - --registry="$VERDACCIO_REGISTRY" \ --npm-client=npm \ - --no-git-tag-version --no-push \ - --canary + --no-push +lerna publish from-git --yes \ + --registry="$VERDACCIO_REGISTRY" \ + --no-verify-access \ + --npm-client=npm # revert version changes git checkout -- packages/*/package.json packages/@uppy/*/package.json diff --git a/bin/endtoend-build-tests b/bin/endtoend-build-tests index 42090b56b..4b19b2838 100755 --- a/bin/endtoend-build-tests +++ b/bin/endtoend-build-tests @@ -26,5 +26,5 @@ done # Speeecial tests that need custom builds. pushd "${__root}/test/endtoend/create-react-app" npm install - npm run build > /dev/null + npm run build popd diff --git a/package-lock.json b/package-lock.json index d12a53ecc..175b5a12c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,58 +25,59 @@ } }, "@lerna/add": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@lerna/add/-/add-3.0.6.tgz", - "integrity": "sha512-lxvpGxhXY4b5c5GSHSc8egOEla5K3t7FQsWWnIBsXghpvwdgjuXUMV+CMtwIurfMwbGw0XYdjWFsTvAZf1bIKw==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/@lerna/add/-/add-3.3.2.tgz", + "integrity": "sha512-nKRRRKb4wt/GAywi8P++NY1TUiyhMs2g2KHSb41I4/qiCFQnTj2zkeshPyNmtBGjKzFXnOqrmc/8Wa2vmHHZVg==", "dev": true, "requires": { - "@lerna/bootstrap": "^3.0.6", - "@lerna/command": "^3.0.6", - "@lerna/filter-options": "^3.0.5", + "@lerna/bootstrap": "^3.3.2", + "@lerna/command": "^3.3.0", + "@lerna/filter-options": "^3.3.2", + "@lerna/npm-conf": "^3.0.0", "@lerna/validation-error": "^3.0.0", "dedent": "^0.7.0", "npm-package-arg": "^6.0.0", "p-map": "^1.2.0", - "package-json": "^4.0.1", + "pacote": "^9.1.0", "semver": "^5.5.0" }, "dependencies": { "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz", + "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==", "dev": true } } }, "@lerna/batch-packages": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@lerna/batch-packages/-/batch-packages-3.0.0.tgz", - "integrity": "sha512-0tN9oNykfIhdFaxEEHxF1S8K7wJdRjzGmbMhrirNogk7I2sLP82aoKH4rLCAdwidX5OvDhzlyQM0MC86T7Lazg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@lerna/batch-packages/-/batch-packages-3.1.2.tgz", + "integrity": "sha512-HAkpptrYeUVlBYbLScXgeCgk6BsNVXxDd53HVWgzzTWpXV4MHpbpeKrByyt7viXlNhW0w73jJbipb/QlFsHIhQ==", "dev": true, "requires": { - "@lerna/package-graph": "^3.0.0", + "@lerna/package-graph": "^3.1.2", "@lerna/validation-error": "^3.0.0", "npmlog": "^4.1.2" } }, "@lerna/bootstrap": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@lerna/bootstrap/-/bootstrap-3.0.6.tgz", - "integrity": "sha512-LIMqGfydSpftdKa/Z7r0dJCY8Qdq5xKdWM83r5QAUHKBIRLwSZwGNTTpGCfdMkfI6xpXa4vGO2J5crU+vM7now==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/@lerna/bootstrap/-/bootstrap-3.3.2.tgz", + "integrity": "sha512-f0/FZ6iCXHNpHoUiM3wfmiJebHetrquP9mdNT7t//2iTGm1nz8iuKSLhfu9APazDXtqo3aDFx7JvuYKMg+GiXQ==", "dev": true, "requires": { - "@lerna/batch-packages": "^3.0.0", - "@lerna/command": "^3.0.6", - "@lerna/filter-options": "^3.0.5", - "@lerna/has-npm-version": "^3.0.4", + "@lerna/batch-packages": "^3.1.2", + "@lerna/command": "^3.3.0", + "@lerna/filter-options": "^3.3.2", + "@lerna/has-npm-version": "^3.3.0", "@lerna/npm-conf": "^3.0.0", - "@lerna/npm-install": "^3.0.0", - "@lerna/rimraf-dir": "^3.0.0", - "@lerna/run-lifecycle": "^3.0.0", + "@lerna/npm-install": "^3.3.0", + "@lerna/rimraf-dir": "^3.3.0", + "@lerna/run-lifecycle": "^3.3.1", "@lerna/run-parallel-batches": "^3.0.0", - "@lerna/symlink-binary": "^3.0.0", - "@lerna/symlink-dependencies": "^3.0.0", + "@lerna/symlink-binary": "^3.3.0", + "@lerna/symlink-dependencies": "^3.3.0", "@lerna/validation-error": "^3.0.0", "dedent": "^0.7.0", "get-port": "^3.2.0", @@ -92,35 +93,45 @@ }, "dependencies": { "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz", + "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==", "dev": true } } }, "@lerna/changed": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@lerna/changed/-/changed-3.0.6.tgz", - "integrity": "sha512-WJWpkJ3N0eoJnw9MEXWS7wZ7mAq1d0I90envaYiMIHmebqgeMjFEKiErY4NntXkpn1VOjbvLp8O3qaILt7T6cg==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/@lerna/changed/-/changed-3.3.2.tgz", + "integrity": "sha512-wLH6RzYPQAryrsJakc9I3k0aFWE/cJyWoUD8dQy186jxwtLgeQdVc0+NegNyab7MIPi7Hsv9A3hx6lM1rPH94A==", "dev": true, "requires": { - "@lerna/collect-updates": "^3.0.5", - "@lerna/command": "^3.0.6", + "@lerna/collect-updates": "^3.3.2", + "@lerna/command": "^3.3.0", "@lerna/listable": "^3.0.0", "@lerna/output": "^3.0.0", - "@lerna/version": "^3.0.6" + "@lerna/version": "^3.3.2" + } + }, + "@lerna/check-working-tree": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@lerna/check-working-tree/-/check-working-tree-3.3.0.tgz", + "integrity": "sha512-oeEP1dNhiiKUaO0pmcIi73YXJpaD0n5JczNctvVNZ8fGZmrALZtEnmC28o6Z7JgQaqq5nd2kO7xbnjoitrC51g==", + "dev": true, + "requires": { + "@lerna/describe-ref": "^3.3.0", + "@lerna/validation-error": "^3.0.0" } }, "@lerna/child-process": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@lerna/child-process/-/child-process-3.0.0.tgz", - "integrity": "sha512-8vHRDkpGhzSaMsXgyXVgY80mUSC5WSkDmhWWA3bnB/n5FBK1gK8EKQUpHTk14SckwvUgEJzBd35gR5/XKGOgmQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@lerna/child-process/-/child-process-3.3.0.tgz", + "integrity": "sha512-q2d/OPlNX/cBXB6Iz1932RFzOmOHq6ZzPjqebkINNaTojHWuuRpvJJY4Uz3NGpJ3kEtPDvBemkZqUBTSO5wb1g==", "dev": true, "requires": { "chalk": "^2.3.1", - "execa": "^0.10.0", - "strong-log-transformer": "^1.0.6" + "execa": "^1.0.0", + "strong-log-transformer": "^2.0.0" }, "dependencies": { "cross-spawn": { @@ -137,13 +148,13 @@ } }, "execa": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", - "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", "dev": true, "requires": { "cross-spawn": "^6.0.0", - "get-stream": "^3.0.0", + "get-stream": "^4.0.0", "is-stream": "^1.1.0", "npm-run-path": "^2.0.0", "p-finally": "^1.0.0", @@ -151,52 +162,46 @@ "strip-eof": "^1.0.0" } }, + "get-stream": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.0.0.tgz", + "integrity": "sha512-FneLKMENeOR7wOK0/ZXCh+lwqtnPwkeunJjRN28LPqzGvNAhYvrTAhXv6xDm4vsJ0M7lcRbIYHQudKsSy2RtSQ==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz", + "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==", "dev": true } } }, "@lerna/clean": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@lerna/clean/-/clean-3.0.6.tgz", - "integrity": "sha512-Ur7MSg4TGFPqc5PgX9ncvlXvgWxaJuRQI6wFR7eXXZ6og3RwwAM8jBa8MJefbeH+GqU2JX9soW4O56JY1mMvGw==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/@lerna/clean/-/clean-3.3.2.tgz", + "integrity": "sha512-mvqusgSp2ou5SGqQgTEoTvGJpGfH4+L6XSeN+Ims+eNFGXuMazmKCf+rz2PZBMFufaHJ/Os+JF0vPCcWI1Fzqg==", "dev": true, "requires": { - "@lerna/command": "^3.0.6", - "@lerna/filter-options": "^3.0.5", - "@lerna/prompt": "^3.0.0", - "@lerna/rimraf-dir": "^3.0.0", + "@lerna/command": "^3.3.0", + "@lerna/filter-options": "^3.3.2", + "@lerna/prompt": "^3.3.1", + "@lerna/rimraf-dir": "^3.3.0", "p-map": "^1.2.0", "p-map-series": "^1.0.0", "p-waterfall": "^1.0.0" } }, "@lerna/cli": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@lerna/cli/-/cli-3.0.6.tgz", - "integrity": "sha512-MZ0d5RCkcVh1wA9tAOVy3GSmML3HshzQxmcNXKdWn0UAqVaV8chYu9ZhwDLQSTc6O5sC/wzCo1wMgFZLq17TQg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@lerna/cli/-/cli-3.2.0.tgz", + "integrity": "sha512-JdbLyTxHqxUlrkI+Ke+ltXbtyA+MPu9zR6kg/n8Fl6uaez/2fZWtReXzYi8MgLxfUFa7+1OHWJv4eAMZlByJ+Q==", "dev": true, "requires": { - "@lerna/add": "^3.0.6", - "@lerna/bootstrap": "^3.0.6", - "@lerna/changed": "^3.0.6", - "@lerna/clean": "^3.0.6", - "@lerna/create": "^3.0.6", - "@lerna/diff": "^3.0.6", - "@lerna/exec": "^3.0.6", - "@lerna/global-options": "^3.0.5", - "@lerna/import": "^3.0.6", - "@lerna/init": "^3.0.6", - "@lerna/link": "^3.0.6", - "@lerna/list": "^3.0.6", - "@lerna/publish": "^3.0.6", - "@lerna/run": "^3.0.6", - "@lerna/version": "^3.0.6", + "@lerna/global-options": "^3.1.3", "dedent": "^0.7.0", - "is-ci": "^1.0.10", "npmlog": "^4.1.2", "yargs": "^12.0.1" }, @@ -224,6 +229,19 @@ "wrap-ansi": "^2.0.0" } }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, "decamelize": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-2.0.0.tgz", @@ -233,6 +251,21 @@ "xregexp": "4.0.0" } }, + "execa": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", + "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, "find-up": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", @@ -242,12 +275,27 @@ "locate-path": "^3.0.0" } }, + "invert-kv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", + "dev": true + }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true }, + "lcid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "dev": true, + "requires": { + "invert-kv": "^2.0.0" + } + }, "locate-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", @@ -258,15 +306,26 @@ "path-exists": "^3.0.0" } }, - "os-locale": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", - "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "mem": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.0.0.tgz", + "integrity": "sha512-WQxG/5xYc3tMbYLXoXPm81ET2WDULiU5FxbuIoNbJqLOOI8zehXFdZuiUEgfdrU2mVB1pxBZUGlYORSrpuJreA==", "dev": true, "requires": { - "execa": "^0.7.0", - "lcid": "^1.0.0", - "mem": "^1.1.0" + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^1.0.0", + "p-is-promise": "^1.1.0" + } + }, + "os-locale": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.0.1.tgz", + "integrity": "sha512-7g5e7dmXPtzcP4bgsZ8ixDVqA7oWYuEz4lOSujeWyliPai4gfVDiFIcwBg3aGCPnmSGfzOKTK3ccPn0CKv3DBw==", + "dev": true, + "requires": { + "execa": "^0.10.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" } }, "p-limit": { @@ -287,6 +346,12 @@ "p-limit": "^2.0.0" } }, + "semver": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz", + "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==", + "dev": true + }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", @@ -319,16 +384,16 @@ "dev": true }, "yargs": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.1.tgz", - "integrity": "sha512-B0vRAp1hRX4jgIOWFtjfNjd9OA9RWYZ6tqGA9/I/IrTMsxmKvtWy+ersM+jzpQqbC3YfLzeABPdeTgcJ9eu1qQ==", + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.2.tgz", + "integrity": "sha512-e7SkEx6N6SIZ5c5H22RTZae61qtn3PYUE8JYbBFlK9sYmh3DMQ6E5ygtaG/2BW0JZi4WGgTR2IV5ChqlqrDGVQ==", "dev": true, "requires": { "cliui": "^4.0.0", "decamelize": "^2.0.0", "find-up": "^3.0.0", "get-caller-file": "^1.0.1", - "os-locale": "^2.0.0", + "os-locale": "^3.0.0", "require-directory": "^2.1.1", "require-main-filename": "^1.0.1", "set-blocking": "^2.0.0", @@ -350,32 +415,32 @@ } }, "@lerna/collect-updates": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@lerna/collect-updates/-/collect-updates-3.0.5.tgz", - "integrity": "sha512-k/EwxJfdD79lTgEZzi+o9t7uYftoAVVYhf1MC62DGjsy0jKChWQyFhttUUwLuhYR/yc9lZlaL6EeguFKn2bcaQ==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/@lerna/collect-updates/-/collect-updates-3.3.2.tgz", + "integrity": "sha512-9WyBJI2S5sYgEZEScu525Lbi6nknNrdBKop35sCDIC9y6AIGvH6Dr5tkTd+Kg3n1dE+kHwW/xjERkx3+h7th3w==", "dev": true, "requires": { - "@lerna/child-process": "^3.0.0", + "@lerna/child-process": "^3.3.0", + "@lerna/describe-ref": "^3.3.0", "minimatch": "^3.0.4", "npmlog": "^4.1.2", "slash": "^1.0.0" } }, "@lerna/command": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@lerna/command/-/command-3.0.6.tgz", - "integrity": "sha512-igXhueUpxdR01LdIp5GtVEJh+YUhnIO3Tm1T/nL0s93Fih7N1vdbT1aJOLsF99MhP0MeaIHLChqCcgCc+i19jg==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@lerna/command/-/command-3.3.0.tgz", + "integrity": "sha512-NTOkLEKlWcBLHSvUr9tzVpV7RJ4GROLeOuZ6RfztGOW/31JPSwVVBD2kPifEXNZunldOx5GVWukR+7+NpAWhsg==", "dev": true, "requires": { - "@lerna/child-process": "^3.0.0", - "@lerna/collect-updates": "^3.0.5", - "@lerna/filter-packages": "^3.0.0", - "@lerna/package-graph": "^3.0.0", + "@lerna/child-process": "^3.3.0", + "@lerna/package-graph": "^3.1.2", "@lerna/project": "^3.0.0", "@lerna/validation-error": "^3.0.0", "@lerna/write-log-file": "^3.0.0", "dedent": "^0.7.0", - "execa": "^0.10.0", + "execa": "^1.0.0", + "is-ci": "^1.0.10", "lodash": "^4.17.5", "npmlog": "^4.1.2" }, @@ -394,13 +459,13 @@ } }, "execa": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", - "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", "dev": true, "requires": { "cross-spawn": "^6.0.0", - "get-stream": "^3.0.0", + "get-stream": "^4.0.0", "is-stream": "^1.1.0", "npm-run-path": "^2.0.0", "p-finally": "^1.0.0", @@ -408,18 +473,27 @@ "strip-eof": "^1.0.0" } }, + "get-stream": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.0.0.tgz", + "integrity": "sha512-FneLKMENeOR7wOK0/ZXCh+lwqtnPwkeunJjRN28LPqzGvNAhYvrTAhXv6xDm4vsJ0M7lcRbIYHQudKsSy2RtSQ==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz", + "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==", "dev": true } } }, "@lerna/conventional-commits": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@lerna/conventional-commits/-/conventional-commits-3.0.2.tgz", - "integrity": "sha512-Cxd1eWXn3usADKXIUvYmTERx2+1N7oJD4Whz+FVu8kTfufsfTO7fYOan1RVkg86ukZbNDyS+iOxZ8DJ2JspS9g==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@lerna/conventional-commits/-/conventional-commits-3.3.0.tgz", + "integrity": "sha512-nUFardc5G4jG5LI/Jlw0kblzlRLJ08ut6uJjHXTnUE/QJuKYaqBZm6goGG8OSxp/WltklndkQUOtThyZpefviA==", "dev": true, "requires": { "@lerna/validation-error": "^3.0.0", @@ -427,34 +501,43 @@ "conventional-changelog-core": "^2.0.5", "conventional-recommended-bump": "^2.0.6", "dedent": "^0.7.0", - "fs-extra": "^6.0.1", - "get-stream": "^3.0.0", + "fs-extra": "^7.0.0", + "get-stream": "^4.0.0", "npm-package-arg": "^6.0.0", "npmlog": "^4.1.2", "semver": "^5.5.0" }, "dependencies": { + "get-stream": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.0.0.tgz", + "integrity": "sha512-FneLKMENeOR7wOK0/ZXCh+lwqtnPwkeunJjRN28LPqzGvNAhYvrTAhXv6xDm4vsJ0M7lcRbIYHQudKsSy2RtSQ==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz", + "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==", "dev": true } } }, "@lerna/create": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@lerna/create/-/create-3.0.6.tgz", - "integrity": "sha512-y/3Tfj6il2/Ua73N5fkkxnmQN6FZ3nr/3oyZe12ygt8q0L2p+GA39ehZxUQEjVcfSvEj6+Kcjjq8xRb3v6OKjQ==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@lerna/create/-/create-3.3.1.tgz", + "integrity": "sha512-4VASkTLvN66euTcWMPN2vIzEoP07hgutx7V70CXSOc+DiWV8S22z0PjXATi2yli83TC/Qj4gHYtU2futQrdY1A==", "dev": true, "requires": { - "@lerna/child-process": "^3.0.0", - "@lerna/command": "^3.0.6", + "@lerna/child-process": "^3.3.0", + "@lerna/command": "^3.3.0", "@lerna/npm-conf": "^3.0.0", "@lerna/validation-error": "^3.0.0", "camelcase": "^4.1.0", "dedent": "^0.7.0", - "fs-extra": "^6.0.1", + "fs-extra": "^7.0.0", "globby": "^8.0.1", "init-package-json": "^1.10.3", "npm-package-arg": "^6.0.0", @@ -463,7 +546,7 @@ "slash": "^1.0.0", "validate-npm-package-license": "^3.0.3", "validate-npm-package-name": "^3.0.0", - "whatwg-url": "^6.5.0" + "whatwg-url": "^7.0.0" }, "dependencies": { "camelcase": { @@ -494,9 +577,9 @@ "dev": true }, "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz", + "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==", "dev": true }, "spdx-correct": { @@ -520,9 +603,9 @@ } }, "spdx-license-ids": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", - "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.1.tgz", + "integrity": "sha512-TfOfPcYGBB5sDuPn3deByxPhmfegAhpDYKSOXZQN81Oyrrif8ZCodOLzK3AesELnCx03kikhyDwh0pfvvQvF8w==", "dev": true }, "validate-npm-package-license": { @@ -534,52 +617,75 @@ "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" } + }, + "whatwg-url": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.0.0.tgz", + "integrity": "sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } } } }, "@lerna/create-symlink": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@lerna/create-symlink/-/create-symlink-3.0.0.tgz", - "integrity": "sha512-Q9qAzGGqQtVzHWrCz+Md4SH0tW99DrgFJ68cnFqilOO6H3Y/y/H0gwHICqM9YxRwLs6GJdkzoqJATFShM7PKJA==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@lerna/create-symlink/-/create-symlink-3.3.0.tgz", + "integrity": "sha512-0lb88Nnq1c/GG+fwybuReOnw3+ah4dB81PuWwWwuqUNPE0n50qUf/M/7FfSb5JEh/93fcdbZI0La8t3iysNW1w==", "dev": true, "requires": { "cmd-shim": "^2.0.2", - "fs-extra": "^6.0.1", + "fs-extra": "^7.0.0", + "npmlog": "^4.1.2" + } + }, + "@lerna/describe-ref": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@lerna/describe-ref/-/describe-ref-3.3.0.tgz", + "integrity": "sha512-4t7M4OupnYMSPNLrLUau8qkS+dgLEi4w+DkRkV0+A+KNYga1W0jVgNLPIIsxta7OHfodPkCNAqZCzNCw/dmAwA==", + "dev": true, + "requires": { + "@lerna/child-process": "^3.3.0", "npmlog": "^4.1.2" } }, "@lerna/diff": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@lerna/diff/-/diff-3.0.6.tgz", - "integrity": "sha512-u8/+TbAohJLq75eAfV3OjJ2MCNb2wChQB6bCktswovraMFvHtUP9neX3zzq3JkAkMZgX+b/7vG15B4toWrF+ow==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@lerna/diff/-/diff-3.3.0.tgz", + "integrity": "sha512-sIoMjsm3NVxvmt6ofx8Uu/2fxgldQqLl0zmC9X1xW00j831o5hBffx1EoKj9CnmaEvoSP6j/KFjxy2RWjebCIg==", "dev": true, "requires": { - "@lerna/child-process": "^3.0.0", - "@lerna/command": "^3.0.6", + "@lerna/child-process": "^3.3.0", + "@lerna/command": "^3.3.0", "@lerna/validation-error": "^3.0.0", "npmlog": "^4.1.2" } }, "@lerna/exec": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@lerna/exec/-/exec-3.0.6.tgz", - "integrity": "sha512-HCs2SAdz76LiPFzA00c8DT5VZr0/yyAR66OLXwZ9cNZMXnFrdQ5lm3W512AEj6yanZMs9MyrNIGIV2mRzssLrw==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/@lerna/exec/-/exec-3.3.2.tgz", + "integrity": "sha512-mN6vGxNir7JOGvWLwKr3DW3LNy1ecCo2ziZj5rO9Mw5Rew3carUu1XLmhF/4judtsvXViUY+rvGIcqHe0vvb+w==", "dev": true, "requires": { - "@lerna/batch-packages": "^3.0.0", - "@lerna/child-process": "^3.0.0", - "@lerna/command": "^3.0.6", - "@lerna/filter-options": "^3.0.5", + "@lerna/batch-packages": "^3.1.2", + "@lerna/child-process": "^3.3.0", + "@lerna/command": "^3.3.0", + "@lerna/filter-options": "^3.3.2", "@lerna/run-parallel-batches": "^3.0.0", "@lerna/validation-error": "^3.0.0" } }, "@lerna/filter-options": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@lerna/filter-options/-/filter-options-3.0.5.tgz", - "integrity": "sha512-yQZrzIDRE3ze62iESMNgbU5eBNb6LPZLJOX0n0MHgpR/7pSLbvJMt8i54GLxm1grCa5O+vgP2DNjcKU17c5eTQ==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/@lerna/filter-options/-/filter-options-3.3.2.tgz", + "integrity": "sha512-0WHqdDgAnt5WKoByi1q+lFw8HWt5tEKP2DnLlGqWv3YFwVF5DsPRlO7xbzjY9sJgvyJtZcnkMtccdBPFhGGyIQ==", "dev": true, "requires": { + "@lerna/collect-updates": "^3.3.2", + "@lerna/filter-packages": "^3.0.0", "dedent": "^0.7.0" } }, @@ -604,78 +710,78 @@ } }, "@lerna/global-options": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@lerna/global-options/-/global-options-3.0.5.tgz", - "integrity": "sha512-GC4JFYT9rTZO0k1nBJ0X1pgOFAtu6xxWQ8XMRbboX6uHFn5h6pvS7X7uMLaWRF4k2izVxnCq3Bx8FXNZlmY3Tg==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@lerna/global-options/-/global-options-3.1.3.tgz", + "integrity": "sha512-LVeZU/Zgc0XkHdGMRYn+EmHfDmmYNwYRv3ta59iCVFXLVp7FRFWF7oB1ss/WRa9x/pYU0o6L8as/5DomLUGASA==", "dev": true }, "@lerna/has-npm-version": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@lerna/has-npm-version/-/has-npm-version-3.0.4.tgz", - "integrity": "sha512-RisEWZBROi8corPb/PUIQqT+xGPLeriJ/n6VCeO6GROCO1fyYBX7kgFmVpFOytufWFkI04qBgLaUs+CEc8Yspg==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@lerna/has-npm-version/-/has-npm-version-3.3.0.tgz", + "integrity": "sha512-GX7omRep1eBRZHgjZLRw3MpBJSdA5gPZFz95P7rxhpvsiG384Tdrr/cKFMhm0A09yq27Tk/nuYTaZIj7HsVE6g==", "dev": true, "requires": { - "@lerna/child-process": "^3.0.0", + "@lerna/child-process": "^3.3.0", "semver": "^5.5.0" }, "dependencies": { "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz", + "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==", "dev": true } } }, "@lerna/import": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@lerna/import/-/import-3.0.6.tgz", - "integrity": "sha512-F0VW+xHFLN/rQlk65c9FhL/CoBd4j3QwGj8mmYFUcVDoYX1v9/mWBPi90TCGD3CiURTX8Q3PAdeuvoT74Uw41w==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@lerna/import/-/import-3.3.1.tgz", + "integrity": "sha512-2OzTQDkYKbBPpyP2iOI1sWfcvMjNLjjHjmREq/uOWJaSIk5J3Ukt71OPpcOHh4V2CBOlXidCcO+Hyb4FVIy8fw==", "dev": true, "requires": { - "@lerna/child-process": "^3.0.0", - "@lerna/command": "^3.0.6", - "@lerna/prompt": "^3.0.0", + "@lerna/child-process": "^3.3.0", + "@lerna/command": "^3.3.0", + "@lerna/prompt": "^3.3.1", "@lerna/validation-error": "^3.0.0", "dedent": "^0.7.0", - "fs-extra": "^6.0.1", + "fs-extra": "^7.0.0", "p-map-series": "^1.0.0" } }, "@lerna/init": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@lerna/init/-/init-3.0.6.tgz", - "integrity": "sha512-Bb/cVxTykWhbdhKsKUzqFuUUX9QTc9pPIQg/chElfXt9L1EzjNH71ew0YBCPUDu+2/PCi3HbVehZuDjddcqgKw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@lerna/init/-/init-3.3.0.tgz", + "integrity": "sha512-HvgRLkIG6nDIeAO6ix5sUVIVV+W9UMk2rSSmFT66CDOefRi7S028amiyYnFUK1QkIAaUbVUyOnYaErtbJwICuw==", "dev": true, "requires": { - "@lerna/child-process": "^3.0.0", - "@lerna/command": "^3.0.6", - "fs-extra": "^6.0.1", + "@lerna/child-process": "^3.3.0", + "@lerna/command": "^3.3.0", + "fs-extra": "^7.0.0", "p-map": "^1.2.0", "write-json-file": "^2.3.0" } }, "@lerna/link": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@lerna/link/-/link-3.0.6.tgz", - "integrity": "sha512-njvFGqfIuGOYj2o8QULd7eIkF5e+c1hkskhlXvdCV3dPb6WYiwSd9hO6m7fnppuGNh8NXeiLDPohE0dnyfFQ5Q==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@lerna/link/-/link-3.3.0.tgz", + "integrity": "sha512-8CeXzGL7okrsVXsy2sHXI2KuBaczw3cblAnA2+FJPUqSKMPNbUTRzeU3bOlCjYtK0LbxC4ngENJTL3jJ8RaYQQ==", "dev": true, "requires": { - "@lerna/command": "^3.0.6", - "@lerna/package-graph": "^3.0.0", - "@lerna/symlink-dependencies": "^3.0.0", + "@lerna/command": "^3.3.0", + "@lerna/package-graph": "^3.1.2", + "@lerna/symlink-dependencies": "^3.3.0", "p-map": "^1.2.0", "slash": "^1.0.0" } }, "@lerna/list": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@lerna/list/-/list-3.0.6.tgz", - "integrity": "sha512-jggWworRP2i/mb+AhgUMvNK3DjTe2I+BH3nQ1eENiyOnfj3ghf2If3Q7FsJ6KXSN5N6BBsfiKlfz6Y2F6AR/Hw==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/@lerna/list/-/list-3.3.2.tgz", + "integrity": "sha512-XXEVy7w+i/xx8NeJmGirw4upEoEF9OfD6XPLjISNQc24VgQV+frXdVJ02QcP7Y/PkY1rdIVrOjvo3ipKVLUxaQ==", "dev": true, "requires": { - "@lerna/command": "^3.0.6", - "@lerna/filter-options": "^3.0.5", + "@lerna/command": "^3.3.0", + "@lerna/filter-options": "^3.3.2", "@lerna/listable": "^3.0.0", "@lerna/output": "^3.0.0" } @@ -721,25 +827,25 @@ } }, "@lerna/npm-dist-tag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@lerna/npm-dist-tag/-/npm-dist-tag-3.0.0.tgz", - "integrity": "sha512-ZOcfcsNJlCoVHvLOROdCTvqD3keG3TJ78Cu8sALsz8n0kEz2ga7tNy5wbQ67SGyY7+jq4YiBv5BwXjV+56Sv+A==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@lerna/npm-dist-tag/-/npm-dist-tag-3.3.0.tgz", + "integrity": "sha512-EtZJXzh3w5tqXEev+EBBPrWKWWn0WgJfxm4FihfS9VgyaAW8udIVZHGkIQ3f+tBtupcAzA9Q8cQNUkGF2efwmA==", "dev": true, "requires": { - "@lerna/child-process": "^3.0.0", + "@lerna/child-process": "^3.3.0", "@lerna/get-npm-exec-opts": "^3.0.0", "npmlog": "^4.1.2" } }, "@lerna/npm-install": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@lerna/npm-install/-/npm-install-3.0.0.tgz", - "integrity": "sha512-e0sspVUfzEKhqsRIxzWqZ/uMBHzZSzOa4HCeORErEZu+dmDoI145XYhqvCVn7EvbAb407FV2H9GVeoP0JeG8GQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@lerna/npm-install/-/npm-install-3.3.0.tgz", + "integrity": "sha512-WoVvKdS8ltROTGSNQwo6NDq0YKnjwhvTG4li1okcN/eHKOS3tL9bxbgPx7No0wOq5DKBpdeS9KhAfee6LFAZ5g==", "dev": true, "requires": { - "@lerna/child-process": "^3.0.0", + "@lerna/child-process": "^3.3.0", "@lerna/get-npm-exec-opts": "^3.0.0", - "fs-extra": "^6.0.1", + "fs-extra": "^7.0.0", "npm-package-arg": "^6.0.0", "npmlog": "^4.1.2", "signal-exit": "^3.0.2", @@ -747,27 +853,27 @@ } }, "@lerna/npm-publish": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@lerna/npm-publish/-/npm-publish-3.0.6.tgz", - "integrity": "sha512-PlvKr958TowEOOe2yNtmUi/Ot42TS/edlmA7rj+XtDUR51AN3RB9G6b25TElyrnDksj1ayb3mOF7I2uf1gbyOw==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@lerna/npm-publish/-/npm-publish-3.3.1.tgz", + "integrity": "sha512-bVTlWIcBL6Zpyzqvr9C7rxXYcoPw+l7IPz5eqQDNREj1R39Wj18OWB2KTJq8l7LIX7Wf4C2A1uT5hJaEf9BuvA==", "dev": true, "requires": { - "@lerna/child-process": "^3.0.0", + "@lerna/child-process": "^3.3.0", "@lerna/get-npm-exec-opts": "^3.0.0", - "@lerna/has-npm-version": "^3.0.4", + "@lerna/has-npm-version": "^3.3.0", "@lerna/log-packed": "^3.0.4", - "fs-extra": "^6.0.1", + "fs-extra": "^7.0.0", "npmlog": "^4.1.2", "p-map": "^1.2.0" } }, "@lerna/npm-run-script": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@lerna/npm-run-script/-/npm-run-script-3.0.0.tgz", - "integrity": "sha512-Y1H4Myer1S7an33FDK0eqyR+95PujUePC/xJZKq/H50SaQNwBw7KMlxXxy6kXVEcQhmvQsER4Bw3msgqwwGYIw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@lerna/npm-run-script/-/npm-run-script-3.3.0.tgz", + "integrity": "sha512-YqDguWZzp4jIomaE4aWMUP7MIAJAFvRAf6ziQLpqwoQskfWLqK5mW0CcszT1oLjhfb3cY3MMfSTFaqwbdKmICg==", "dev": true, "requires": { - "@lerna/child-process": "^3.0.0", + "@lerna/child-process": "^3.3.0", "@lerna/get-npm-exec-opts": "^3.0.0", "npmlog": "^4.1.2" } @@ -792,19 +898,20 @@ } }, "@lerna/package-graph": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@lerna/package-graph/-/package-graph-3.0.0.tgz", - "integrity": "sha512-kD9ezB7UT2I0BbVv3+ZYfR/t/Z+z6RJmaI/OkvEaZ3bAcAqQRV4zTDdh2Xeiead+UwsA38xf7Z6pDEMWzswLVg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@lerna/package-graph/-/package-graph-3.1.2.tgz", + "integrity": "sha512-9wIWb49I1IJmyjPdEVZQ13IAi9biGfH/OZHOC04U2zXGA0GLiY+B3CAx6FQvqkZ8xEGfqzmXnv3LvZ0bQfc1aQ==", "dev": true, "requires": { + "@lerna/validation-error": "^3.0.0", "npm-package-arg": "^6.0.0", "semver": "^5.5.0" }, "dependencies": { "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz", + "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==", "dev": true } } @@ -939,12 +1046,12 @@ } }, "@lerna/prompt": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@lerna/prompt/-/prompt-3.0.0.tgz", - "integrity": "sha512-EzvNexDTh//GlpOz68zRo16NdOIqWqiiXMs9tIxpELQubH+kUGKvBSiBrZ2Zyrfd8pQhIf+8qARtkCG+G7wzQQ==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@lerna/prompt/-/prompt-3.3.1.tgz", + "integrity": "sha512-eJhofrUCUaItMIH6et8kI7YqHfhjWqGZoTsE+40NRCfAraOMWx+pDzfRfeoAl3qeRAH2HhNj1bkYn70FbUOxuQ==", "dev": true, "requires": { - "inquirer": "^5.1.0", + "inquirer": "^6.2.0", "npmlog": "^4.1.2" }, "dependencies": { @@ -970,13 +1077,13 @@ } }, "external-editor": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", - "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", + "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", "dev": true, "requires": { - "chardet": "^0.4.0", - "iconv-lite": "^0.4.17", + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", "tmp": "^0.0.33" } }, @@ -989,22 +1096,31 @@ "escape-string-regexp": "^1.0.5" } }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, "inquirer": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-5.2.0.tgz", - "integrity": "sha512-E9BmnJbAKLPGonz0HeWHtbKf+EeSP93paWO3ZYoUpq/aowXvYGjjCSuashhXPpzbArIjBbji39THkxTz9ZeEUQ==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.0.tgz", + "integrity": "sha512-QIEQG4YyQ2UYZGDC4srMZ7BjHOmNk1lR2JQj5UknBapklm6WHA+VVH7N+sUdX3A7NeCfGF8o4X1S3Ao7nAcIeg==", "dev": true, "requires": { "ansi-escapes": "^3.0.0", "chalk": "^2.0.0", "cli-cursor": "^2.1.0", "cli-width": "^2.0.0", - "external-editor": "^2.1.0", + "external-editor": "^3.0.0", "figures": "^2.0.0", - "lodash": "^4.3.0", + "lodash": "^4.17.10", "mute-stream": "0.0.7", "run-async": "^2.2.0", - "rxjs": "^5.5.2", + "rxjs": "^6.1.0", "string-width": "^2.1.0", "strip-ansi": "^4.0.0", "through": "^2.3.6" @@ -1050,6 +1166,15 @@ "is-promise": "^2.1.0" } }, + "rxjs": { + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", + "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", @@ -1072,59 +1197,65 @@ } }, "@lerna/publish": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@lerna/publish/-/publish-3.0.6.tgz", - "integrity": "sha512-eOOZWYWVL6eD6S0y+fTIzk6aD2+doVqUVlCdAKGs7h01teyw6SrTIUtsHShGTBk7Dr5aKbWFA0SOHOI4svYfGg==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@lerna/publish/-/publish-3.4.0.tgz", + "integrity": "sha512-wcqWDKbkDjyj6F9Mw4/LL2CtpCN61RazNKxYm+fyJ20P2zfcAwLEwxttA6ZWIO8xUiLXkCTFIhwOulHyAPAq3w==", "dev": true, "requires": { - "@lerna/batch-packages": "^3.0.0", - "@lerna/child-process": "^3.0.0", - "@lerna/collect-updates": "^3.0.5", - "@lerna/command": "^3.0.6", + "@lerna/batch-packages": "^3.1.2", + "@lerna/check-working-tree": "^3.3.0", + "@lerna/child-process": "^3.3.0", + "@lerna/collect-updates": "^3.3.2", + "@lerna/command": "^3.3.0", + "@lerna/describe-ref": "^3.3.0", "@lerna/get-npm-exec-opts": "^3.0.0", - "@lerna/npm-dist-tag": "^3.0.0", - "@lerna/npm-publish": "^3.0.6", + "@lerna/npm-conf": "^3.0.0", + "@lerna/npm-dist-tag": "^3.3.0", + "@lerna/npm-publish": "^3.3.1", "@lerna/output": "^3.0.0", - "@lerna/prompt": "^3.0.0", - "@lerna/run-lifecycle": "^3.0.0", + "@lerna/prompt": "^3.3.1", + "@lerna/run-lifecycle": "^3.3.1", "@lerna/run-parallel-batches": "^3.0.0", "@lerna/validation-error": "^3.0.0", - "@lerna/version": "^3.0.6", - "fs-extra": "^6.0.1", + "@lerna/version": "^3.3.2", + "fs-extra": "^7.0.0", + "libnpmaccess": "^3.0.0", "npm-package-arg": "^6.0.0", + "npm-registry-fetch": "^3.8.0", "npmlog": "^4.1.2", "p-finally": "^1.0.0", "p-map": "^1.2.0", + "p-pipe": "^1.2.0", "p-reduce": "^1.0.0", "semver": "^5.5.0" }, "dependencies": { "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz", + "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==", "dev": true } } }, "@lerna/resolve-symlink": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@lerna/resolve-symlink/-/resolve-symlink-3.0.0.tgz", - "integrity": "sha512-MqjW9e+QVXts5IK5dk1XnYx7JKb+g+tQkOnnpAxYWHjahf3rGJ7Ru8maWh8KoPE+nIHAekk4WcjpiA9nLKvkFQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@lerna/resolve-symlink/-/resolve-symlink-3.3.0.tgz", + "integrity": "sha512-KmoPDcFJ2aOK2inYHbrsiO9SodedUj0L1JDvDgirVNIjMUaQe2Q6Vi4Gh+VCJcyB27JtfHioV9R2NxU72Pk2hg==", "dev": true, "requires": { - "fs-extra": "^6.0.1", + "fs-extra": "^7.0.0", "npmlog": "^4.1.2", "read-cmd-shim": "^1.0.1" } }, "@lerna/rimraf-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@lerna/rimraf-dir/-/rimraf-dir-3.0.0.tgz", - "integrity": "sha512-epvh/RGWSOYdrNgrizMcRq9VyCHkeY0LpIE4074r4ouKdYNhBT0LlpT0yMLvQgQKJkKRlqcfhJHvZeGHhXQyGg==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@lerna/rimraf-dir/-/rimraf-dir-3.3.0.tgz", + "integrity": "sha512-vSqOcZ4kZduiSprbt+y40qziyN3VKYh+ygiCdnbBbsaxpdKB6CfrSMUtrLhVFrqUfBHIZRzHIzgjTdtQex1KLw==", "dev": true, "requires": { - "@lerna/child-process": "^3.0.0", + "@lerna/child-process": "^3.3.0", "npmlog": "^4.1.2", "path-exists": "^3.0.0", "rimraf": "^2.6.2" @@ -1142,15 +1273,15 @@ } }, "@lerna/run": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@lerna/run/-/run-3.0.6.tgz", - "integrity": "sha512-3KFr07ZGcxYPBKzcM+8ku02IOhkfT/XH64T8fXInpGQU2bMFEA4fsSH5wlSyB/ZL2ZTwIH8lLyatW4q7ygi2+Q==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/@lerna/run/-/run-3.3.2.tgz", + "integrity": "sha512-cruwRGZZWnQ5I0M+AqcoT3Xpq2wj3135iVw4n59/Op6dZu50sMFXZNLiTTTZ15k8rTKjydcccJMdPSpTHbH7/A==", "dev": true, "requires": { - "@lerna/batch-packages": "^3.0.0", - "@lerna/command": "^3.0.6", - "@lerna/filter-options": "^3.0.5", - "@lerna/npm-run-script": "^3.0.0", + "@lerna/batch-packages": "^3.1.2", + "@lerna/command": "^3.3.0", + "@lerna/filter-options": "^3.3.2", + "@lerna/npm-run-script": "^3.3.0", "@lerna/output": "^3.0.0", "@lerna/run-parallel-batches": "^3.0.0", "@lerna/validation-error": "^3.0.0", @@ -1158,9 +1289,9 @@ } }, "@lerna/run-lifecycle": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@lerna/run-lifecycle/-/run-lifecycle-3.0.0.tgz", - "integrity": "sha512-kfq6eC5mCreTk7GusZyvF0/BfU9FDEt8JaUgzNKLrK1Sj6z2RO8uSpFsUlj+7OuV4wo0I+rdTdJOAFoW8C0GZw==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@lerna/run-lifecycle/-/run-lifecycle-3.3.1.tgz", + "integrity": "sha512-xy4K3amlXk0LjSa5d3VqmrW9SsxMyvI7lw2dHDMb5PqjjcjMQgb6+nFbycwyJMhCP8u7MwQIZ4hFYF9XYbWSzQ==", "dev": true, "requires": { "@lerna/npm-conf": "^3.0.0", @@ -1179,14 +1310,14 @@ } }, "@lerna/symlink-binary": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@lerna/symlink-binary/-/symlink-binary-3.0.0.tgz", - "integrity": "sha512-ElV1ij0ZiOw5j1bZqg9K+q+dV/DJVvMZxP+oj3vsP4SgnG3EdWxBIbE7TCZHbLZtF0LNJsrquGCkdqk17svx/w==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@lerna/symlink-binary/-/symlink-binary-3.3.0.tgz", + "integrity": "sha512-zRo6CimhvH/VJqCFl9T4IC6syjpWyQIxEfO2sBhrapEcfwjtwbhoGgKwucsvt4rIpFazCw63jQ/AXMT27KUIHg==", "dev": true, "requires": { - "@lerna/create-symlink": "^3.0.0", + "@lerna/create-symlink": "^3.3.0", "@lerna/package": "^3.0.0", - "fs-extra": "^6.0.1", + "fs-extra": "^7.0.0", "p-map": "^1.2.0", "read-pkg": "^3.0.0" }, @@ -1248,15 +1379,15 @@ } }, "@lerna/symlink-dependencies": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@lerna/symlink-dependencies/-/symlink-dependencies-3.0.0.tgz", - "integrity": "sha512-INPlVkuGbneQ2gKf/pe3FlvcSXOk+KbZShQsrcvvYhIjK/td1g6ToMGLhml7lNmQxL90YiAqo23Q8nwIh0HAIA==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@lerna/symlink-dependencies/-/symlink-dependencies-3.3.0.tgz", + "integrity": "sha512-IRngSNCmuD5uBKVv23tHMvr7Mplti0lKHilFKcvhbvhAfu6m/Vclxhkfs/uLyHzG+DeRpl/9o86SQET3h4XDhg==", "dev": true, "requires": { - "@lerna/create-symlink": "^3.0.0", - "@lerna/resolve-symlink": "^3.0.0", - "@lerna/symlink-binary": "^3.0.0", - "fs-extra": "^6.0.1", + "@lerna/create-symlink": "^3.3.0", + "@lerna/resolve-symlink": "^3.3.0", + "@lerna/symlink-binary": "^3.3.0", + "fs-extra": "^7.0.0", "p-finally": "^1.0.0", "p-map": "^1.2.0", "p-map-series": "^1.0.0" @@ -1272,24 +1403,27 @@ } }, "@lerna/version": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@lerna/version/-/version-3.0.6.tgz", - "integrity": "sha512-4vO3ZqLl8/Sl3cN0SMYEH1vV8VTw8iwK8HMb6vFXcI/7QbMAOgjzvKwLjxoKHyY6mIbCoYRzqtUttk8pwjNNIw==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/@lerna/version/-/version-3.3.2.tgz", + "integrity": "sha512-2MHP6mA1f0t3UdzqPpfgAhsT1L64HOedlJxrQUoHrkou/G25Od4wjmKr9OZ0Oc4CLDbXD/sYEmE/9fZi1GGgKg==", "dev": true, "requires": { - "@lerna/child-process": "^3.0.0", - "@lerna/collect-updates": "^3.0.5", - "@lerna/command": "^3.0.6", - "@lerna/conventional-commits": "^3.0.2", + "@lerna/batch-packages": "^3.1.2", + "@lerna/check-working-tree": "^3.3.0", + "@lerna/child-process": "^3.3.0", + "@lerna/collect-updates": "^3.3.2", + "@lerna/command": "^3.3.0", + "@lerna/conventional-commits": "^3.3.0", "@lerna/output": "^3.0.0", - "@lerna/prompt": "^3.0.0", - "@lerna/run-lifecycle": "^3.0.0", + "@lerna/prompt": "^3.3.1", + "@lerna/run-lifecycle": "^3.3.1", "@lerna/validation-error": "^3.0.0", "chalk": "^2.3.1", "dedent": "^0.7.0", "minimatch": "^3.0.4", "npmlog": "^4.1.2", "p-map": "^1.2.0", + "p-pipe": "^1.2.0", "p-reduce": "^1.0.0", "p-waterfall": "^1.0.0", "semver": "^5.5.0", @@ -1298,9 +1432,9 @@ }, "dependencies": { "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz", + "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==", "dev": true } } @@ -1326,9 +1460,9 @@ } }, "@nodelib/fs.stat": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.0.tgz", - "integrity": "sha512-LAQ1d4OPfSJ/BMbI2DuizmYrrkD9JMaTdi2hQTlI53lQ4kRQPyZQRS4CYQ7O66bnBBnP/oYdRxbk++X0xuFU6A==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.2.tgz", + "integrity": "sha512-yprFYuno9FtNsSHVlSWd+nRlmGoAbqbeCwOryP6sC/zoCjhpArcRMYp19EvpSUSizJAlsXEwJv+wcWS9XaXdMw==", "dev": true }, "@purest/config": { @@ -1794,6 +1928,15 @@ "es6-promisify": "^5.0.0" } }, + "agentkeepalive": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-3.5.1.tgz", + "integrity": "sha512-Cte/sTY9/XcygXjJ0q58v//SnEQ7ViWExKyJpLJlLqomDbQyMLh6Is4KuWJ/wmxzhiwkGRple7Gqv1zf6Syz5w==", + "dev": true, + "requires": { + "humanize-ms": "^1.2.1" + } + }, "ajv": { "version": "4.11.8", "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", @@ -2306,9 +2449,9 @@ } }, "aws-sdk": { - "version": "2.318.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.318.0.tgz", - "integrity": "sha512-w2XT+DOKOczoRaB9R0cRCZSwHkw4JfngMlUKeRhMbzOvW9orOZB2SeMgz+Pz1jKU3VSJDMpvB/Z3P68nvDxb8Q==", + "version": "2.323.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.323.0.tgz", + "integrity": "sha512-w30M8oTXQBd0P8nJeh/vb5Jha1dQ0WGtr8NN6AwDIL/FNBWwdhQ5DWBd8pXbeoXh/uaAhRq9em9ZKxxb1Kmu6Q==", "requires": { "buffer": "4.9.1", "events": "1.1.1", @@ -3954,6 +4097,12 @@ "inherits": "~2.0.0" } }, + "bluebird": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.2.tgz", + "integrity": "sha512-dhHTWMI7kMx5whMQntl7Vr9C6BvV10lFXDAasnqnrMYhXVCzzk6IO9Fo2L75jXHT07WrOngL1WDXOp+yYS91Yg==", + "dev": true + }, "bn.js": { "version": "4.11.8", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", @@ -4771,6 +4920,64 @@ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" }, + "cacache": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.2.0.tgz", + "integrity": "sha512-IFWl6lfK6wSeYCHUXh+N1lY72UDrpyrYQJNIVQf48paDuWbv5RbAtJYf/4gUQFObTCHZwdZ5sI8Iw7nqwP6nlQ==", + "dev": true, + "requires": { + "bluebird": "^3.5.1", + "chownr": "^1.0.1", + "figgy-pudding": "^3.1.0", + "glob": "^7.1.2", + "graceful-fs": "^4.1.11", + "lru-cache": "^4.1.3", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.2", + "ssri": "^6.0.0", + "unique-filename": "^1.1.0", + "y18n": "^4.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", + "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "dev": true, + "requires": { + "glob": "^7.0.5" + } + }, + "ssri": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", + "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true + } + } + }, "cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", @@ -4894,9 +5101,9 @@ } }, "capture-stack-trace": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz", - "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", + "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==" }, "caseless": { "version": "0.12.0", @@ -4971,9 +5178,9 @@ } }, "chardet": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", - "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, "check-error": { @@ -5013,6 +5220,12 @@ "readdirp": "^2.0.0" } }, + "chownr": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", + "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", + "dev": true + }, "ci-info": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.1.1.tgz", @@ -5475,9 +5688,9 @@ } }, "config-chain": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.11.tgz", - "integrity": "sha1-q6CXR9++TD5w52am5BWG4YWfxvI=", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", + "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", "dev": true, "requires": { "ini": "^1.3.4", @@ -5785,9 +5998,9 @@ } }, "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz", + "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==", "dev": true }, "split": { @@ -6222,6 +6435,20 @@ "keygrip": "~1.0.2" } }, + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + } + }, "copy-descriptor": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", @@ -6625,6 +6852,12 @@ "array-find-index": "^1.0.1" } }, + "cyclist": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", + "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", + "dev": true + }, "d": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", @@ -7698,6 +7931,12 @@ } } }, + "err-code": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-1.1.2.tgz", + "integrity": "sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA=", + "dev": true + }, "error-ex": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", @@ -9499,6 +9738,12 @@ "integrity": "sha512-HfVRxhYG7C8Jl9FqtrlElMR2z/8YiLQVDKf67MLY25Ic+ILx3ecmklfT1v3u+7P5/4vEFjuxaAFXhr2/Afwk5g==", "dev": true }, + "figgy-pudding": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", + "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==", + "dev": true + }, "figures": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", @@ -9641,6 +9886,16 @@ "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz", "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=" }, + "flush-write-stream": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz", + "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.4" + } + }, "follow-redirects": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.2.tgz", @@ -9764,9 +10019,9 @@ "dev": true }, "fs-extra": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-6.0.1.tgz", - "integrity": "sha512-GnyIkKhhzXZUWFCaJzvyDLEEgDkPfb4/TPvJCJVuS8MWZgoSsErf++QpiAlDnKFcqhRlm+tIOcencCjyJE6ZCA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.0.tgz", + "integrity": "sha512-EglNDLRpmaTWiD/qraZn6HREAEAHJcJOmxNEYwq6xeMKnVMAy3GUcFB+wXt2C6k4CNvB/mP1y/U3dzvKKj5OtQ==", "dev": true, "requires": { "graceful-fs": "^4.1.2", @@ -9785,6 +10040,27 @@ } } }, + "fs-minipass": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", + "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", + "dev": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -10402,6 +10678,12 @@ "is-property": "^1.0.0" } }, + "genfun": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/genfun/-/genfun-4.0.1.tgz", + "integrity": "sha1-7RAEHy5KfxsKOEZtF6XD4n3x38E=", + "dev": true + }, "get-assigned-identifiers": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", @@ -10793,9 +11075,9 @@ } }, "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz", + "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==", "dev": true }, "strip-bom": { @@ -10944,7 +11226,7 @@ }, "got": { "version": "6.7.1", - "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", + "resolved": "http://registry.npmjs.org/got/-/got-6.7.1.tgz", "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", "requires": { "create-error-class": "^3.0.0", @@ -11409,6 +11691,12 @@ "readable-stream": "^2.0.2" } }, + "http-cache-semantics": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", + "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", + "dev": true + }, "http-errors": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", @@ -11439,6 +11727,27 @@ "requires-port": "1.x.x" } }, + "http-proxy-agent": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", + "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", + "dev": true, + "requires": { + "agent-base": "4", + "debug": "3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, "http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", @@ -11477,6 +11786,15 @@ } } }, + "humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", + "dev": true, + "requires": { + "ms": "^2.0.0" + } + }, "iconv-lite": { "version": "0.4.17", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.17.tgz", @@ -11503,6 +11821,12 @@ "resolved": "https://registry.npmjs.org/ienoopen/-/ienoopen-1.0.0.tgz", "integrity": "sha1-NGpCj0dKrI9QzzeE6i0PFvYr2ms=" }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "dev": true + }, "ignore": { "version": "3.3.5", "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.5.tgz", @@ -11514,6 +11838,15 @@ "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=" }, + "ignore-walk": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", + "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", + "dev": true, + "requires": { + "minimatch": "^3.0.4" + } + }, "immutable": { "version": "3.8.2", "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", @@ -11744,6 +12077,12 @@ "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", "dev": true }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, "ipaddr.js": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.5.2.tgz", @@ -13376,12 +13715,26 @@ "dev": true }, "lerna": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/lerna/-/lerna-3.0.6.tgz", - "integrity": "sha512-kFFZeh182OVnMrXntZEdVJ5Sm/mCD3YEjMpU8JGfgqTUnE7tvV3aIXiPFJj9/5hR6K/GJE5Ud8Vp8cukSVZELQ==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/lerna/-/lerna-3.4.0.tgz", + "integrity": "sha512-RCLm0gMi8PESEF8PzMxo35foA2NGGC/NKnKiUmJyRrhLybOIUfVPdPStSAWCjW1c+DYCgLZCbxu57/KWt4ZWZA==", "dev": true, "requires": { - "@lerna/cli": "^3.0.6", + "@lerna/add": "^3.3.2", + "@lerna/bootstrap": "^3.3.2", + "@lerna/changed": "^3.3.2", + "@lerna/clean": "^3.3.2", + "@lerna/cli": "^3.2.0", + "@lerna/create": "^3.3.1", + "@lerna/diff": "^3.3.0", + "@lerna/exec": "^3.3.2", + "@lerna/import": "^3.3.1", + "@lerna/init": "^3.3.0", + "@lerna/link": "^3.3.0", + "@lerna/list": "^3.3.2", + "@lerna/publish": "^3.4.0", + "@lerna/run": "^3.3.2", + "@lerna/version": "^3.3.2", "import-local": "^1.0.0", "npmlog": "^4.1.2" } @@ -13402,6 +13755,35 @@ "type-check": "~0.3.2" } }, + "libnpmaccess": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-3.0.0.tgz", + "integrity": "sha512-SiE4AZAzMpD7pmmXHfgD7rof8QIQGoKaeyAS8exgx2CKA6tzRTbRljq1xM4Tgj8/tIg+KBJPJWkR0ifqKT3irQ==", + "dev": true, + "requires": { + "aproba": "^2.0.0", + "get-stream": "^4.0.0", + "npm-package-arg": "^6.1.0", + "npm-registry-fetch": "^3.8.0" + }, + "dependencies": { + "aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true + }, + "get-stream": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.0.0.tgz", + "integrity": "sha512-FneLKMENeOR7wOK0/ZXCh+lwqtnPwkeunJjRN28LPqzGvNAhYvrTAhXv6xDm4vsJ0M7lcRbIYHQudKsSy2RtSQ==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + } + } + }, "limiter": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.3.tgz", @@ -14032,6 +14414,46 @@ } } }, + "make-fetch-happen": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-4.0.1.tgz", + "integrity": "sha512-7R5ivfy9ilRJ1EMKIOziwrns9fGeAD4bAha8EB7BIiBBLHm2KeTUGCrICFt2rbHfzheTLynv50GnNTK1zDTrcQ==", + "dev": true, + "requires": { + "agentkeepalive": "^3.4.1", + "cacache": "^11.0.1", + "http-cache-semantics": "^3.8.1", + "http-proxy-agent": "^2.1.0", + "https-proxy-agent": "^2.2.1", + "lru-cache": "^4.1.2", + "mississippi": "^3.0.0", + "node-fetch-npm": "^2.0.2", + "promise-retry": "^1.1.1", + "socks-proxy-agent": "^4.0.0", + "ssri": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", + "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "ssri": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", + "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1" + } + } + } + }, "makeerror": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", @@ -14041,6 +14463,15 @@ "tmpl": "1.0.x" } }, + "map-age-cleaner": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.2.tgz", + "integrity": "sha512-UN1dNocxQq44IhJyMI4TU8phc2m9BddacHRPRjKGLYaF0jqd3xLz0jS0skpAU9WgYyoR4gHtUpzytNBS385FWQ==", + "dev": true, + "requires": { + "p-defer": "^1.0.0" + } + }, "map-async": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/map-async/-/map-async-0.1.1.tgz", @@ -14336,6 +14767,68 @@ "is-plain-obj": "^1.1.0" } }, + "minipass": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.4.tgz", + "integrity": "sha512-mlouk1OHlaUE8Odt1drMtG1bAJA4ZA6B/ehysgV0LUIrDHdKgo1KorZq3pK0b/7Z7LJIQ12MNM6aC+Tn6lUZ5w==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "yallist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz", + "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=", + "dev": true + } + } + }, + "minizlib": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.1.0.tgz", + "integrity": "sha512-4T6Ur/GctZ27nHfpt9THOdRZNgyJ9FZchYO1ceg5S8Q3DNLCKYy44nCZzgCJgcvx2UM8czmqak5BCxJMrq37lA==", + "dev": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "dev": true, + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + }, + "dependencies": { + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + } + } + }, "mixin-deep": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", @@ -14542,6 +15035,20 @@ } } }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + } + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -14839,6 +15346,25 @@ "is-stream": "^1.0.1" } }, + "node-fetch-npm": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-fetch-npm/-/node-fetch-npm-2.0.2.tgz", + "integrity": "sha512-nJIxm1QmAj4v3nfCvEeCrYSoVwXyxLnaPBK5W1W5DGEJwjlKuC2VEUycGw5oxk+4zZahRrB84PUJJgEmhFTDFw==", + "dev": true, + "requires": { + "encoding": "^0.1.11", + "json-parse-better-errors": "^1.0.0", + "safe-buffer": "^5.1.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, "node-gyp": { "version": "3.8.0", "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz", @@ -15549,6 +16075,12 @@ "npm-registry-client": "^8.3.0" } }, + "npm-bundled": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.5.tgz", + "integrity": "sha512-m/e6jgWu8/v5niCUKQi9qQl8QdeEduFA96xHDDzFGqly0OOjI7c+60KM/2sppfnUU9JJagf+zs+yGhqSOFj71g==", + "dev": true + }, "npm-install-package": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/npm-install-package/-/npm-install-package-2.1.0.tgz", @@ -15624,6 +16156,16 @@ } } }, + "npm-packlist": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.1.11.tgz", + "integrity": "sha512-CxKlZ24urLkJk+9kCm48RTQ7L4hsmgSVzEk0TLGPzzyuFxD7VNgy5Sl24tOLMzQv773a/NeJ1ce1DKeacqffEA==", + "dev": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, "npm-path": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/npm-path/-/npm-path-2.0.4.tgz", @@ -15633,6 +16175,24 @@ "which": "^1.2.10" } }, + "npm-pick-manifest": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-2.1.0.tgz", + "integrity": "sha512-q9zLP8cTr8xKPmMZN3naxp1k/NxVFsjxN6uWuO1tiw9gxg7wZWQ/b5UTfzD0ANw2q1lQxdLKTeCCksq+bPSgbQ==", + "dev": true, + "requires": { + "npm-package-arg": "^6.0.0", + "semver": "^5.4.1" + }, + "dependencies": { + "semver": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz", + "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==", + "dev": true + } + } + }, "npm-registry-client": { "version": "8.5.1", "resolved": "https://registry.npmjs.org/npm-registry-client/-/npm-registry-client-8.5.1.tgz", @@ -15661,6 +16221,42 @@ } } }, + "npm-registry-fetch": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-3.8.0.tgz", + "integrity": "sha512-hrw8UMD+Nob3Kl3h8Z/YjmKamb1gf7D1ZZch2otrIXM3uFLB5vjEY6DhMlq80z/zZet6eETLbOXcuQudCB3Zpw==", + "dev": true, + "requires": { + "JSONStream": "^1.3.4", + "bluebird": "^3.5.1", + "figgy-pudding": "^3.4.1", + "lru-cache": "^4.1.3", + "make-fetch-happen": "^4.0.1", + "npm-package-arg": "^6.1.0" + }, + "dependencies": { + "JSONStream": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.4.tgz", + "integrity": "sha512-Y7vfi3I5oMOYIr+WxV8NZxDSwcbNgzdKYsTNInmycOq9bUYwGg9ryu57Wg5NLmCjqdFPNUmpMBo3kSJN9tCbXg==", + "dev": true, + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } + }, + "lru-cache": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", + "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + } + } + }, "npm-run-all": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.3.tgz", @@ -16534,11 +17130,23 @@ "object-assign": "^4.1.0" } }, + "p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", + "dev": true + }, "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" }, + "p-is-promise": { + "version": "1.1.0", + "resolved": "http://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", + "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", + "dev": true + }, "p-limit": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.1.0.tgz", @@ -16569,6 +17177,12 @@ "p-reduce": "^1.0.0" } }, + "p-pipe": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-1.2.0.tgz", + "integrity": "sha1-SxoROZoRUgpneQ7loMHViB1r7+k=", + "dev": true + }, "p-reduce": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", @@ -16602,9 +17216,130 @@ }, "dependencies": { "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz", + "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==" + } + } + }, + "pacote": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-9.1.0.tgz", + "integrity": "sha512-AFXaSWhOtQf3jHqEvg+ZYH/dfT8TKq6TKspJ4qEFwVVuh5aGvMIk6SNF8vqfzz+cBceDIs9drOcpBbrPai7i+g==", + "dev": true, + "requires": { + "bluebird": "^3.5.1", + "cacache": "^11.0.2", + "figgy-pudding": "^3.2.1", + "get-stream": "^3.0.0", + "glob": "^7.1.2", + "lru-cache": "^4.1.3", + "make-fetch-happen": "^4.0.1", + "minimatch": "^3.0.4", + "minipass": "^2.3.3", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "normalize-package-data": "^2.4.0", + "npm-package-arg": "^6.1.0", + "npm-packlist": "^1.1.10", + "npm-pick-manifest": "^2.1.0", + "npm-registry-fetch": "^3.0.0", + "osenv": "^0.1.5", + "promise-inflight": "^1.0.1", + "promise-retry": "^1.1.1", + "protoduck": "^5.0.0", + "rimraf": "^2.6.2", + "safe-buffer": "^5.1.2", + "semver": "^5.5.0", + "ssri": "^6.0.0", + "tar": "^4.4.3", + "unique-filename": "^1.1.0", + "which": "^1.3.0" + }, + "dependencies": { + "lru-cache": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", + "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "is-builtin-module": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "dev": true, + "requires": { + "glob": "^7.0.5" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "semver": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz", + "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==", + "dev": true + }, + "ssri": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", + "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "tar": { + "version": "4.4.6", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.6.tgz", + "integrity": "sha512-tMkTnh9EdzxyfW+6GK6fCahagXsnYk6kE6S9Gr9pjVdys769+laCTbodXDhPAjzVtEBazRgP0gYqOjnk9dQzLg==", + "dev": true, + "requires": { + "chownr": "^1.0.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.3", + "minizlib": "^1.1.0", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.2" + }, + "dependencies": { + "yallist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz", + "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=", + "dev": true + } + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } } } }, @@ -16614,6 +17349,17 @@ "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==", "dev": true }, + "parallel-transform": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", + "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", + "dev": true, + "requires": { + "cyclist": "~0.2.2", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, "parents": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", @@ -18455,6 +19201,22 @@ "asap": "~2.0.3" } }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, + "promise-retry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-1.1.1.tgz", + "integrity": "sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0=", + "dev": true, + "requires": { + "err-code": "^1.0.0", + "retry": "^0.10.0" + } + }, "prompts": { "version": "0.1.14", "resolved": "https://registry.npmjs.org/prompts/-/prompts-0.1.14.tgz", @@ -18495,6 +19257,15 @@ "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", "dev": true }, + "protoduck": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/protoduck/-/protoduck-5.0.0.tgz", + "integrity": "sha512-agsGWD8/RZrS4ga6v82Fxb0RHIS2RZnbsSue6A9/MBRhB/jcqOANAMNrqM9900b8duj+Gx+T/JMy5IowDoO/hQ==", + "dev": true, + "requires": { + "genfun": "^4.0.1" + } + }, "proxy-addr": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.2.tgz", @@ -18545,6 +19316,59 @@ "randombytes": "^2.0.1" } }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + }, + "dependencies": { + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + } + } + }, + "pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dev": true, + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + }, + "dependencies": { + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, "punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", @@ -18745,7 +19569,7 @@ "dependencies": { "minimist": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" } } @@ -19579,6 +20403,15 @@ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==" }, + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "dev": true, + "requires": { + "aproba": "^1.1.1" + } + }, "rx": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", @@ -20370,6 +21203,12 @@ "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=", "dev": true }, + "smart-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.0.1.tgz", + "integrity": "sha512-RFqinRVJVcCAL9Uh1oVqE6FZkqsyLiVOYEZ20TqIOjuX7iFVJ+zsbs4RIghnw/pTs7mZvt8ZHhvm1ZUrR4fykg==", + "dev": true + }, "snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", @@ -20670,6 +21509,26 @@ } } }, + "socks": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.2.1.tgz", + "integrity": "sha512-0GabKw7n9mI46vcNrVfs0o6XzWzjVa3h6GaSo2UPxtWAROXUWavfJWh1M4PR5tnE0dcnQXZIDFP4yrAysLze/w==", + "dev": true, + "requires": { + "ip": "^1.1.5", + "smart-buffer": "^4.0.1" + } + }, + "socks-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-4.0.1.tgz", + "integrity": "sha512-Kezx6/VBguXOsEe5oU3lXYyKMi4+gva72TwJ7pQY5JfqUx2nMk7NXA6z/mpNqIlfQjWYVfeuNvQjexiTaTn6Nw==", + "dev": true, + "requires": { + "agent-base": "~4.2.0", + "socks": "~2.2.0" + } + }, "sort-keys": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", @@ -20920,6 +21779,27 @@ "readable-stream": "^2.0.2" } }, + "stream-each": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", + "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + }, + "dependencies": { + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + } + } + }, "stream-http": { "version": "2.8.3", "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", @@ -21171,22 +22051,21 @@ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" }, "strong-log-transformer": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-1.0.6.tgz", - "integrity": "sha1-9/uTdYpppXEUAYEnfuoMLrEwH6M=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.0.0.tgz", + "integrity": "sha512-FQmNqAXJgOX8ygOcvPLlGWBNT41mvNJ9ALoYf0GTwVt9t30mGTqpmp/oJx5gLcu52DXK10kS7dVWhx8aPXDTlg==", "dev": true, "requires": { "byline": "^5.0.0", "duplexer": "^0.1.1", - "minimist": "^0.1.0", - "moment": "^2.6.0", + "minimist": "^1.2.0", "through": "^2.3.4" }, "dependencies": { "minimist": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.1.0.tgz", - "integrity": "sha1-md9lelJXTCHJBXSX33QnkLK0wN4=", + "version": "1.2.0", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true } } @@ -21854,9 +22733,9 @@ } }, "text-extensions": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.7.0.tgz", - "integrity": "sha512-AKXZeDq230UaSzaO5s3qQUZOaC7iKbzq0jOFL614R7d9R593HLqAOL0cYoqLdkNrjBSOdmoQI06yigq1TSBXAg==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.8.0.tgz", + "integrity": "sha512-mVzjRxuWnDKs/qH1rbOJEVHLlSX9kty9lpi7lMvLgU9S74mQ8/Ozg9UPcKxShh0qG2NZ+NyPOPpcZU4C1Eld9A==", "dev": true }, "text-table": { @@ -22162,6 +23041,12 @@ "integrity": "sha1-OTvnMKlEb9Hq1tpZoBQwjzbCics=", "dev": true }, + "tslib": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", + "dev": true + }, "tty-browserify": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", @@ -22478,6 +23363,24 @@ "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", "dev": true }, + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dev": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.1.tgz", + "integrity": "sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, "unique-string": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", diff --git a/package.json b/package.json index a5f2ada2d..a596a8dfb 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,7 @@ "isomorphic-fetch": "2.2.1", "jest": "^23.5.0", "json3": "^3.3.2", - "lerna": "^3.0.6", + "lerna": "^3.4.0", "lint-staged": "^6.1.1", "minify-stream": "^1.2.0", "mkdirp": "0.5.1", @@ -126,7 +126,7 @@ "web:update:frontpage:code:sample": "cd website && ./node_modules/.bin/hexo generate && cp -f public/frontpage-code-sample.html ./themes/uppy/layout/partials/frontpage-code-sample.html", "web": "npm-run-all web:clean web:build", "uploadcdn": "bin/upload-to-cdn.sh", - "prepare": "lerna bootstrap --hoist", + "bootstrap": "lerna bootstrap --hoist", "contributors": "githubcontrib --owner transloadit --repo uppy --cols 6 $([ \"${GITHUB_TOKEN:-}\" == \"\" ] && echo \"\" || echo \"--authToken ${GITHUB_TOKEN}\") --showlogin true --sortOrder desc", "contributors:save": "replace-x -m '[\\s\\S]+' \"\n## Contributors\n\n$(npm run --silent contributors)\n\" README.md" }, diff --git a/packages/@uppy/thumbnail-generator/src/index.js b/packages/@uppy/thumbnail-generator/src/index.js index b022ffe30..69969489b 100644 --- a/packages/@uppy/thumbnail-generator/src/index.js +++ b/packages/@uppy/thumbnail-generator/src/index.js @@ -20,7 +20,10 @@ module.exports = class ThumbnailGenerator extends Plugin { thumbnailWidth: 200 } - this.opts = Object.assign({}, defaultOptions, opts) + this.opts = { + ...defaultOptions, + ...opts + } this.addToQueue = this.addToQueue.bind(this) this.onRestored = this.onRestored.bind(this) @@ -35,21 +38,20 @@ module.exports = class ThumbnailGenerator extends Plugin { */ createThumbnail (file, targetWidth) { const originalUrl = URL.createObjectURL(file.data) - const revoke = () => URL.revokeObjectURL(originalUrl) + const onload = new Promise((resolve, reject) => { const image = new Image() image.src = originalUrl - image.onload = () => { + image.addEventListener('load', () => { + URL.revokeObjectURL(originalUrl) resolve(image) - } - image.onerror = () => { - // The onerror event is totally useless unfortunately, as far as I know - reject(new Error('Could not create thumbnail')) - } + }) + image.addEventListener('error', (event) => { + URL.revokeObjectURL(originalUrl) + reject(event.error || new Error('Could not create thumbnail')) + }) }) - onload.then(revoke, revoke) - return onload .then(image => { const targetHeight = this.getProportionalHeight(image, targetWidth) @@ -155,9 +157,7 @@ module.exports = class ThumbnailGenerator extends Plugin { * Set the preview URL for a file. */ setPreviewURL (fileID, preview) { - this.uppy.setFileState(fileID, { - preview: preview - }) + this.uppy.setFileState(fileID, { preview }) } addToQueue (item) { @@ -176,7 +176,8 @@ module.exports = class ThumbnailGenerator extends Plugin { .then(() => this.processQueue()) } else { this.queueProcessing = false - this.uppy.emit('thumbnail:ready') + this.uppy.log('[ThumbnailGenerator] Emptied thumbnail queue') + this.uppy.emit('thumbnail:all-generated') } } @@ -185,11 +186,13 @@ module.exports = class ThumbnailGenerator extends Plugin { return this.createThumbnail(file, this.opts.thumbnailWidth) .then(preview => { this.setPreviewURL(file.id, preview) - this.uppy.emit('thumbnail:generated', file, preview) + this.uppy.log(`[ThumbnailGenerator] Generated thumbnail for ${file.id}`) + this.uppy.emit('thumbnail:generated', this.uppy.getFile(file.id), preview) }) .catch(err => { - console.warn(err.stack || err.message) - this.uppy.emit('thumbnail:error', file, err) + this.uppy.log(`[ThumbnailGenerator] Failed thumbnail for ${file.id}`) + this.uppy.log(err, 'warning') + this.uppy.emit('thumbnail:error', this.uppy.getFile(file.id), err) }) } return Promise.resolve() diff --git a/packages/@uppy/thumbnail-generator/src/index.test.js b/packages/@uppy/thumbnail-generator/src/index.test.js index 59ea50464..c76ba6f48 100644 --- a/packages/@uppy/thumbnail-generator/src/index.test.js +++ b/packages/@uppy/thumbnail-generator/src/index.test.js @@ -4,25 +4,34 @@ const emitter = require('namespace-emitter') const delay = duration => new Promise(resolve => setTimeout(resolve, duration)) +function MockCore () { + const core = emitter() + const files = {} + core.mockFile = (id, f) => { files[id] = f } + core.getFile = (id) => files[id] + core.log = () => null + return core +} + describe('uploader/ThumbnailGeneratorPlugin', () => { it('should initialise successfully', () => { - const plugin = new ThumbnailGeneratorPlugin(null, {}) + const plugin = new ThumbnailGeneratorPlugin(new MockCore(), {}) expect(plugin instanceof Plugin).toEqual(true) }) it('should accept the thumbnailWidth option and override the default', () => { - const plugin1 = new ThumbnailGeneratorPlugin(null) // eslint-disable-line no-new + const plugin1 = new ThumbnailGeneratorPlugin(new MockCore()) // eslint-disable-line no-new expect(plugin1.opts.thumbnailWidth).toEqual(200) - const plugin2 = new ThumbnailGeneratorPlugin(null, { thumbnailWidth: 100 }) // eslint-disable-line no-new + const plugin2 = new ThumbnailGeneratorPlugin(new MockCore(), { thumbnailWidth: 100 }) // eslint-disable-line no-new expect(plugin2.opts.thumbnailWidth).toEqual(100) }) describe('install', () => { it('should subscribe to uppy file-added event', () => { - const core = { + const core = Object.assign(new MockCore(), { on: jest.fn() - } + }) const plugin = new ThumbnailGeneratorPlugin(core) plugin.addToQueue = jest.fn() @@ -35,10 +44,10 @@ describe('uploader/ThumbnailGeneratorPlugin', () => { describe('uninstall', () => { it('should unsubscribe from uppy file-added event', () => { - const core = { + const core = Object.assign(new MockCore(), { on: jest.fn(), off: jest.fn() - } + }) const plugin = new ThumbnailGeneratorPlugin(core) plugin.addToQueue = jest.fn() @@ -55,7 +64,7 @@ describe('uploader/ThumbnailGeneratorPlugin', () => { describe('queue', () => { it('should add a new file to the queue and start processing the queue when queueProcessing is false', () => { - const core = {} + const core = new MockCore() const plugin = new ThumbnailGeneratorPlugin(core) plugin.processQueue = jest.fn() @@ -73,7 +82,7 @@ describe('uploader/ThumbnailGeneratorPlugin', () => { }) it('should process items in the queue one by one', () => { - const core = {} + const core = new MockCore() const plugin = new ThumbnailGeneratorPlugin(core) plugin.requestThumbnail = jest.fn(() => delay(100)) @@ -106,9 +115,47 @@ describe('uploader/ThumbnailGeneratorPlugin', () => { }) }) + describe('events', () => { + const core = new MockCore() + const plugin = new ThumbnailGeneratorPlugin(core) + plugin.createThumbnail = jest.fn((file) => delay(100).then(() => `blob:${file.id}.png`)) + plugin.setPreviewURL = jest.fn() + + function add (file) { + core.mockFile(file.id, file) + plugin.addToQueue(file) + } + + it('should emit thumbnail:generated when a thumbnail was generated', () => new Promise((resolve, reject) => { + const expected = ['bar', 'bar2', 'bar3'] + core.on('thumbnail:generated', (file, preview) => { + try { + expect(file.id).toBe(expected.shift()) + expect(preview).toBe(`blob:${file.id}.png`) + } catch (err) { + return reject(err) + } + if (expected.length === 0) resolve() + }) + add({ id: 'bar', type: 'image/png' }) + add({ id: 'bar2', type: 'image/png' }) + add({ id: 'bar3', type: 'image/png' }) + })) + + it('should emit thumbnail:all-generated when all thumbnails were generated', () => { + return new Promise((resolve) => { + core.on('thumbnail:all-generated', resolve) + add({ id: 'bar4', type: 'image/png' }) + add({ id: 'bar5', type: 'image/png' }) + }).then(() => { + expect(plugin.queue).toHaveLength(0) + }) + }) + }) + describe('requestThumbnail', () => { it('should call createThumbnail if it is a supported filetype', () => { - const core = {} + const core = new MockCore() const plugin = new ThumbnailGeneratorPlugin(core) plugin.createThumbnail = jest @@ -127,7 +174,7 @@ describe('uploader/ThumbnailGeneratorPlugin', () => { }) it('should not call createThumbnail if it is not a supported filetype', () => { - const core = {} + const core = new MockCore() const plugin = new ThumbnailGeneratorPlugin(core) plugin.createThumbnail = jest @@ -142,7 +189,7 @@ describe('uploader/ThumbnailGeneratorPlugin', () => { }) it('should not call createThumbnail if the file is remote', () => { - const core = {} + const core = new MockCore() const plugin = new ThumbnailGeneratorPlugin(core) plugin.createThumbnail = jest @@ -157,7 +204,7 @@ describe('uploader/ThumbnailGeneratorPlugin', () => { }) it('should call setPreviewURL with the thumbnail image', () => { - const core = {} + const core = new MockCore() const plugin = new ThumbnailGeneratorPlugin(core) plugin.createThumbnail = jest @@ -199,7 +246,7 @@ describe('uploader/ThumbnailGeneratorPlugin', () => { describe('getProportionalHeight', () => { it('should calculate the resized height based on the specified width of the image whilst keeping aspect ratio', () => { - const core = {} + const core = new MockCore() const plugin = new ThumbnailGeneratorPlugin(core) expect( plugin.getProportionalHeight({ width: 200, height: 100 }, 50) @@ -215,7 +262,7 @@ describe('uploader/ThumbnailGeneratorPlugin', () => { describe('canvasToBlob', () => { it('should use canvas.toBlob if available', () => { - const core = {} + const core = new MockCore() const plugin = new ThumbnailGeneratorPlugin(core) const canvas = { toBlob: jest.fn() @@ -242,7 +289,7 @@ describe('uploader/ThumbnailGeneratorPlugin', () => { }) xit('should scale down the image by the specified number of steps', () => { - const core = {} + const core = new MockCore() const plugin = new ThumbnailGeneratorPlugin(core) const image = { width: 1000, @@ -299,7 +346,7 @@ describe('uploader/ThumbnailGeneratorPlugin', () => { describe('resizeImage', () => { it('should return a canvas with the resized image on it', () => { - const core = {} + const core = new MockCore() const plugin = new ThumbnailGeneratorPlugin(core) const image = { width: 1000, @@ -324,7 +371,7 @@ describe('uploader/ThumbnailGeneratorPlugin', () => { }) it('should upsize if original image is smaller than target size', () => { - const core = {} + const core = new MockCore() const plugin = new ThumbnailGeneratorPlugin(core) const image = { width: 100, @@ -356,7 +403,7 @@ describe('uploader/ThumbnailGeneratorPlugin', () => { b: { preview: 'blob:def' }, c: { preview: 'blob:xyz', isRestored: true } } - const core = Object.assign(emitter(), { + const core = Object.assign(new MockCore(), { getState () { return { files } }, @@ -380,7 +427,7 @@ describe('uploader/ThumbnailGeneratorPlugin', () => { const files = { a: { preview: 'http://abc', isRestored: true } } - const core = Object.assign(emitter(), { + const core = Object.assign(new MockCore(), { getState () { return { files } }, diff --git a/test/endtoend/thumbnails/main.js b/test/endtoend/thumbnails/main.js index 7c9d128f0..9ccfd3429 100644 --- a/test/endtoend/thumbnails/main.js +++ b/test/endtoend/thumbnails/main.js @@ -1,3 +1,4 @@ +/* eslint-disable */ require('es6-promise/auto') require('whatwg-fetch') const Uppy = require('@uppy/core') @@ -13,10 +14,26 @@ const uppyThumbnails = Uppy({ uppyThumbnails.use(ThumbnailGenerator, {}) uppyThumbnails.use(FileInput, { target: '#uppyThumbnails', pretty: false }) -uppyThumbnails.on('thumbnail:generated', (file) => { +uppyThumbnails.on('file-added', (file) => { + const el = document.createElement('p') + el.className = 'file-name' + el.textContent = file.name + document.body.appendChild(el) +}) + +// Dump errors to the screen so saucelabs shows them in screenshots. +uppyThumbnails.on('thumbnail:error', (file, err) => { + const el = document.createElement('pre') + el.style = 'font: 14pt monospace; background: red; color: white' + el.textContent = `Error: ${err.stack}` + document.body.appendChild(el) +}) + +uppyThumbnails.on('thumbnail:generated', (file, preview) => { const img = new Image() img.src = file.preview + img.className = 'file-preview' + img.style.display = 'block' document.body.appendChild(img) }) -window.ready = new Promise((resolve) => uppyThumbnails.on('thumbnail:ready', resolve)) diff --git a/test/endtoend/thumbnails/test.js b/test/endtoend/thumbnails/test.js index ddd46029c..0fa2245b1 100644 --- a/test/endtoend/thumbnails/test.js +++ b/test/endtoend/thumbnails/test.js @@ -1,4 +1,4 @@ -/* global browser, expect, $ */ +/* global browser, expect, $, $$ */ const path = require('path') const fs = require('fs') const { selectFakeFile, supportsChooseFile } = require('../utils') @@ -8,21 +8,39 @@ const testURL = 'http://localhost:4567/thumbnails' const images = [ path.join(__dirname, '../../resources/image.jpg'), path.join(__dirname, '../../resources/baboon.png'), - path.join(__dirname, '../../resources/kodim23.png') + path.join(__dirname, '../../resources/kodim23.png'), + path.join(__dirname, '../../resources/invalid.png') +] +const notImages = [ + { type: 'text/javascript', file: __filename } ] -describe.only('ThumbnailGenerator', () => { +describe('ThumbnailGenerator', () => { beforeEach(() => { browser.url(testURL) }) - it('should generate thumbnails for images', () => { + it('should generate thumbnails for images', function () { + // FIXME why isn't the selectFakeFile alternative below working? + if (!supportsChooseFile()) { + return this.skip() + } + $('#uppyThumbnails .uppy-FileInput-input').waitForExist() + browser.execute(/* must be valid ES5 for IE */ function () { + window.thumbnailsReady = new Promise(function (resolve) { + window.uppyThumbnails.on('thumbnail:all-generated', resolve) + }) + }) + if (supportsChooseFile()) { for (const img of images) { browser.chooseFile('#uppyThumbnails .uppy-FileInput-input', img) } + for (const { file } of notImages) { + browser.chooseFile('#uppyThumbnails .uppy-FileInput-input', file) + } } else { for (const img of images) { browser.execute( @@ -33,8 +51,40 @@ describe.only('ThumbnailGenerator', () => { fs.readFileSync(img, 'base64') // b64 ) } + for (const { type, file } of notImages) { + browser.execute( + selectFakeFile, + 'uppyThumbnails', + path.basename(file), // name + type, // type + fs.readFileSync(file, 'base64') // b64 + ) + } } - browser.pause(20 * 1000) + browser.executeAsync(/* must be valid ES5 for IE */ function (done) { + window.thumbnailsReady.then(done) + }) + + // const names = $$('p.file-name') + const previews = $$('img.file-preview') + + // Names should all be listed before previews--indicates that previews were generated asynchronously. + /* Nevermind this, chooseFile() doesn't accept multiple files so they are added one by one and the thumbnails + * have finished generating by the time we add the next. + const nys = names.map((el) => el.getLocation('y')) + const pys = previews.map((el) => el.getLocation('y')) + for (const ny of nys) { + for (const py of pys) { + expect(ny).to.be.below(py, 'names should be listed before previews') + } + } + */ + + expect(previews).to.have.lengthOf(3) // ex. the invalid image + for (const p of previews) { + expect(p.getAttribute('src')).to.match(/^blob:/) + expect(p.getElementSize('width')).to.equal(200) + } }) }) diff --git a/test/endtoend/utils.js b/test/endtoend/utils.js index 828c11129..0c2cc840b 100644 --- a/test/endtoend/utils.js +++ b/test/endtoend/utils.js @@ -2,11 +2,13 @@ const path = require('path') const { spawn } = require('child_process') +// This function must be valid ES5, because it is run in the browser +// and IE10/IE11 do not support new syntax features function selectFakeFile (uppyID, name, type, b64) { if (!b64) b64 = 'PHN2ZyB2aWV3Qm94PSIwIDAgMTIwIDEyMCI+CiAgPGNpcmNsZSBjeD0iNjAiIGN5PSI2MCIgcj0iNTAiLz4KPC9zdmc+Cg==' var blob = new Blob( - [`data:image/svg+xml;base64,${b64}`], + ['data:image/svg+xml;base64,' + b64], { type: type || 'image/svg+xml' } ) window[uppyID].addFile({ diff --git a/test/endtoend/wdio.local.conf.js b/test/endtoend/wdio.local.conf.js index ee166832e..14054189d 100644 --- a/test/endtoend/wdio.local.conf.js +++ b/test/endtoend/wdio.local.conf.js @@ -1,12 +1,24 @@ const base = require('./wdio.base.conf') const { CompanionService } = require('./utils') +// Use "npm run test:acceptance:local -- -b chrome" to test in chrome +// "npm run test:acceptance:local -- -b firefox -b chrome" to test in FF and chrome +let prevIsDashB = false +const capabilities = [] +process.argv.forEach((arg) => { + if (prevIsDashB) { + capabilities.push({ browserName: arg }) + } + prevIsDashB = arg === '-b' +}) + +// default to testing in firefox +if (capabilities.length === 0) { + capabilities.push({ browserName: 'firefox' }) +} + exports.config = Object.assign(base.config, { - capabilities: [ - { browserName: 'firefox' } - // { browserName: 'MicrosoftEdge', version: '14.14393', platform: 'Windows 10' }, - // { browserName: 'safari', version: '11.0', platform: 'macOS 10.12' } - ], + capabilities, // If you only want to run your tests until a specific amount of tests have failed use // bail (default is 0 - don't bail, run all tests). diff --git a/test/endtoend/wdio.remote.conf.js b/test/endtoend/wdio.remote.conf.js index baf4111d9..26cbbc603 100644 --- a/test/endtoend/wdio.remote.conf.js +++ b/test/endtoend/wdio.remote.conf.js @@ -2,18 +2,24 @@ const base = require('./wdio.base.conf') const { CompanionService } = require('./utils') function createCapability (capability) { - return Object.assign({ + return { 'tunnel-identifier': process.env.TRAVIS_JOB_NUMBER, - build: process.env.TRAVIS_BUILD_NUMBER - }, capability) + build: process.env.TRAVIS_BUILD_NUMBER, + extendedDebugging: true, + ...capability + } } exports.config = Object.assign(base.config, { capabilities: [ { browserName: 'firefox', version: '38.0', platform: 'Linux' }, + { browserName: 'firefox', version: '61.0', platform: 'Windows 10' }, { browserName: 'internet explorer', version: '10.0', platform: 'Windows 7' }, + { browserName: 'internet explorer', version: '11.0', platform: 'Windows 7' }, { browserName: 'chrome', version: '50.0', platform: 'Windows 7' }, - { browserName: 'MicrosoftEdge', version: '14.14393', platform: 'Windows 10' }, + { browserName: 'chrome', version: '69.0', platform: 'Windows 10' }, + { browserName: 'MicrosoftEdge', version: '14', platform: 'Windows 10' }, + { browserName: 'MicrosoftEdge', version: '17', platform: 'Windows 10' }, // { browserName: 'safari', version: '11.0', platform: 'macOS 10.12' }, { browserName: 'safari', version: '10.0', platformName: 'iOS', platformVersion: '10.0', deviceOrientation: 'portrait', deviceName: 'iPhone 6 Simulator', appiumVersion: '1.7.1' }, { browserName: 'chrome', platformName: 'Android', platformVersion: '6.0', deviceOrientation: 'portrait', deviceName: 'Android Emulator', appiumVersion: '1.7.1' } diff --git a/test/resources/invalid.png b/test/resources/invalid.png new file mode 100644 index 0000000000000000000000000000000000000000..6c288100ac7e1e2ec23ed17c55ef8ca96801882d GIT binary patch literal 96232 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