From 713417d3fef5def299ea28d0409280c42e7819f9 Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Mon, 5 Aug 2019 16:32:51 +0200 Subject: [PATCH 01/94] Initial commit --- tests/e2e/README.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 tests/e2e/README.md diff --git a/tests/e2e/README.md b/tests/e2e/README.md new file mode 100644 index 0000000000..c844a7491b --- /dev/null +++ b/tests/e2e/README.md @@ -0,0 +1 @@ +# instantsearch-e2e-tests \ No newline at end of file From 9dadeb6317343268608dad587e4b870d69b4f64c Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Tue, 6 Aug 2019 18:36:49 +0200 Subject: [PATCH 02/94] chore: Add LICENSE --- tests/e2e/LICENSE | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 tests/e2e/LICENSE diff --git a/tests/e2e/LICENSE b/tests/e2e/LICENSE new file mode 100644 index 0000000000..1dedea5321 --- /dev/null +++ b/tests/e2e/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2019-present Algolia, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. From fb6a3e3152b807fb4218fce7caee7b48389c025c Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Tue, 6 Aug 2019 18:37:04 +0200 Subject: [PATCH 03/94] chore: add initial package.json --- tests/e2e/package.json | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 tests/e2e/package.json diff --git a/tests/e2e/package.json b/tests/e2e/package.json new file mode 100644 index 0000000000..4e5c3cbef7 --- /dev/null +++ b/tests/e2e/package.json @@ -0,0 +1,16 @@ +{ + "name": "instantsearch-e2e-tests", + "version": "1.0.0", + "description": "End-2-End test suite for InstantSearch", + "homepage": "https://github.com/algolia/instantsearch-e2e-tests", + "keywords": [ + "algolia", + "instantsearch", + "test", + "webdriverio" + ], + "author": "Algolia ", + "license": "MIT", + "repository": "algolia/instantsearch-e2e-tests", + "sideEffects": false +} From d88e69be5e750569f95e6aee2563fc46a2728eb5 Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Wed, 7 Aug 2019 10:36:27 +0200 Subject: [PATCH 04/94] chore: add gitignore --- tests/e2e/.gitignore | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 tests/e2e/.gitignore diff --git a/tests/e2e/.gitignore b/tests/e2e/.gitignore new file mode 100644 index 0000000000..da4a2ad1f8 --- /dev/null +++ b/tests/e2e/.gitignore @@ -0,0 +1,4 @@ +node_modules/ +npm-debug.log +yarn-error.log +.DS_Store From 62eb38e177f1eaa04291c7324bb5ab67bcd915d9 Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Wed, 7 Aug 2019 10:38:23 +0200 Subject: [PATCH 05/94] chore: add editorconfig --- tests/e2e/.editorconfig | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 tests/e2e/.editorconfig diff --git a/tests/e2e/.editorconfig b/tests/e2e/.editorconfig new file mode 100644 index 0000000000..dd7255e8a4 --- /dev/null +++ b/tests/e2e/.editorconfig @@ -0,0 +1,8 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true From f77c97b76a46333e52c8bfde9561bd9ba27250d4 Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Wed, 7 Aug 2019 10:41:14 +0200 Subject: [PATCH 06/94] chore: add ESLint configuration --- tests/e2e/.eslintignore | 1 + tests/e2e/.eslintrc.js | 35 ++ tests/e2e/.prettierrc | 5 + tests/e2e/package.json | 18 +- tests/e2e/yarn.lock | 1264 +++++++++++++++++++++++++++++++++++++++ 5 files changed, 1322 insertions(+), 1 deletion(-) create mode 100644 tests/e2e/.eslintignore create mode 100644 tests/e2e/.eslintrc.js create mode 100644 tests/e2e/.prettierrc create mode 100644 tests/e2e/yarn.lock diff --git a/tests/e2e/.eslintignore b/tests/e2e/.eslintignore new file mode 100644 index 0000000000..c2658d7d1b --- /dev/null +++ b/tests/e2e/.eslintignore @@ -0,0 +1 @@ +node_modules/ diff --git a/tests/e2e/.eslintrc.js b/tests/e2e/.eslintrc.js new file mode 100644 index 0000000000..b8919d2f33 --- /dev/null +++ b/tests/e2e/.eslintrc.js @@ -0,0 +1,35 @@ +module.exports = { + extends: ['algolia', 'algolia/typescript'], + rules: { + 'no-param-reassign': 0, + 'import/no-extraneous-dependencies': 0, + 'valid-jsdoc': 0, + '@typescript-eslint/no-unused-vars': [ + 'error', + { argsIgnorePattern: '^_', ignoreRestSiblings: true }, + ], + }, + overrides: [ + { + files: ['specs/**/*.spec.ts'], + extends: ['plugin:wdio/recommended'], + plugins: ['wdio'], + env: { + jasmine: true, + }, + }, + { + files: ['**/*.js'], + rules: { + 'import/no-commonjs': 0, + }, + }, + ], + settings: { + 'import/resolver': { + node: { + extensions: ['.js', '.ts'], + }, + }, + }, +}; diff --git a/tests/e2e/.prettierrc b/tests/e2e/.prettierrc new file mode 100644 index 0000000000..833f03b621 --- /dev/null +++ b/tests/e2e/.prettierrc @@ -0,0 +1,5 @@ +{ + "singleQuote": true, + "proseWrap": "never", + "trailingComma": "es5" +} diff --git a/tests/e2e/package.json b/tests/e2e/package.json index 4e5c3cbef7..f586624691 100644 --- a/tests/e2e/package.json +++ b/tests/e2e/package.json @@ -12,5 +12,21 @@ "author": "Algolia ", "license": "MIT", "repository": "algolia/instantsearch-e2e-tests", - "sideEffects": false + "sideEffects": false, + "scripts": { + "lint": "eslint --ext .js,.ts,.tsx .", + "lint:fix": "eslint --ext .js,.ts,.tsx --fix ." + }, + "devDependencies": { + "@typescript-eslint/eslint-plugin": "1.13.0", + "@typescript-eslint/parser": "1.13.0", + "eslint": "6.1.0", + "eslint-config-algolia": "13.4.0", + "eslint-config-prettier": "6.0.0", + "eslint-plugin-import": "2.18.2", + "eslint-plugin-prettier": "3.1.0", + "eslint-plugin-wdio": "5.11.0", + "prettier": "1.18.2", + "typescript": "3.5.3" + } } diff --git a/tests/e2e/yarn.lock b/tests/e2e/yarn.lock new file mode 100644 index 0000000000..bfb6f677d8 --- /dev/null +++ b/tests/e2e/yarn.lock @@ -0,0 +1,1264 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@^7.0.0": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d" + integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw== + dependencies: + "@babel/highlight" "^7.0.0" + +"@babel/highlight@^7.0.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540" + integrity sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ== + dependencies: + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^4.0.0" + +"@types/eslint-visitor-keys@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" + integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag== + +"@types/json-schema@^7.0.3": + version "7.0.3" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.3.tgz#bdfd69d61e464dcc81b25159c270d75a73c1a636" + integrity sha512-Il2DtDVRGDcqjDtE+rF8iqg1CArehSK84HZJCT7AMITlyXRBpuPhqGLDQMowraqqu1coEaimg4ZOqggt6L6L+A== + +"@typescript-eslint/eslint-plugin@1.13.0": + version "1.13.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-1.13.0.tgz#22fed9b16ddfeb402fd7bcde56307820f6ebc49f" + integrity sha512-WQHCozMnuNADiqMtsNzp96FNox5sOVpU8Xt4meaT4em8lOG1SrOv92/mUbEHQVh90sldKSfcOc/I0FOb/14G1g== + dependencies: + "@typescript-eslint/experimental-utils" "1.13.0" + eslint-utils "^1.3.1" + functional-red-black-tree "^1.0.1" + regexpp "^2.0.1" + tsutils "^3.7.0" + +"@typescript-eslint/experimental-utils@1.13.0": + version "1.13.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-1.13.0.tgz#b08c60d780c0067de2fb44b04b432f540138301e" + integrity sha512-zmpS6SyqG4ZF64ffaJ6uah6tWWWgZ8m+c54XXgwFtUv0jNz8aJAVx8chMCvnk7yl6xwn8d+d96+tWp7fXzTuDg== + dependencies: + "@types/json-schema" "^7.0.3" + "@typescript-eslint/typescript-estree" "1.13.0" + eslint-scope "^4.0.0" + +"@typescript-eslint/parser@1.13.0": + version "1.13.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-1.13.0.tgz#61ac7811ea52791c47dc9fd4dd4a184fae9ac355" + integrity sha512-ITMBs52PCPgLb2nGPoeT4iU3HdQZHcPaZVw+7CsFagRJHUhyeTgorEwHXhFf3e7Evzi8oujKNpHc8TONth8AdQ== + dependencies: + "@types/eslint-visitor-keys" "^1.0.0" + "@typescript-eslint/experimental-utils" "1.13.0" + "@typescript-eslint/typescript-estree" "1.13.0" + eslint-visitor-keys "^1.0.0" + +"@typescript-eslint/typescript-estree@1.13.0": + version "1.13.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-1.13.0.tgz#8140f17d0f60c03619798f1d628b8434913dc32e" + integrity sha512-b5rCmd2e6DCC6tCTN9GSUAuxdYwCM/k/2wdjHGrIRGPSJotWMCe/dGpi66u42bhuh8q3QBzqM4TMA1GUUCJvdw== + dependencies: + lodash.unescape "4.0.1" + semver "5.5.0" + +acorn-jsx@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.1.tgz#32a064fd925429216a09b141102bfdd185fae40e" + integrity sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg== + +acorn@^6.0.7: + version "6.2.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.2.1.tgz#3ed8422d6dec09e6121cc7a843ca86a330a86b51" + integrity sha512-JD0xT5FCRDNyjDda3Lrg/IxFscp9q4tiYtxE1/nOzlKCk7hIRuYjhq1kCNkbPjMRMZuFq20HNQn1I9k8Oj0E+Q== + +ajv@^6.10.0, ajv@^6.10.2: + version "6.10.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52" + integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw== + dependencies: + fast-deep-equal "^2.0.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-escapes@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" + integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +array-includes@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d" + integrity sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0= + dependencies: + define-properties "^1.1.2" + es-abstract "^1.7.0" + +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +chalk@^2.0.0, chalk@^2.1.0, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + +cli-cursor@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= + dependencies: + restore-cursor "^2.0.0" + +cli-width@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" + integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +contains-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" + integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= + +cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +debug@^2.6.8, debug@^2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.1" + +deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + +define-properties@^1.1.2, define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +doctrine@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" + integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= + dependencies: + esutils "^2.0.2" + isarray "^1.0.0" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + +error-ex@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.12.0, es-abstract@^1.7.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9" + integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg== + dependencies: + es-to-primitive "^1.2.0" + function-bind "^1.1.1" + has "^1.0.3" + is-callable "^1.1.4" + is-regex "^1.0.4" + object-keys "^1.0.12" + +es-to-primitive@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" + integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +eslint-config-algolia@13.4.0: + version "13.4.0" + resolved "https://registry.yarnpkg.com/eslint-config-algolia/-/eslint-config-algolia-13.4.0.tgz#d622ae33ca6129a712a3880efd6e7c7511f08207" + integrity sha512-dSOlc6/XTvBTVBAfgqKrUpt3ej74yahYw04L6yvE+2q3mwS+/Pnp71L2xDaOhkyZD1VGf7FSoi6qrrJFq5zdhQ== + +eslint-config-prettier@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.0.0.tgz#f429a53bde9fc7660e6353910fd996d6284d3c25" + integrity sha512-vDrcCFE3+2ixNT5H83g28bO/uYAwibJxerXPj+E7op4qzBCsAV36QfvdAyVOoNxKAH2Os/e01T/2x++V0LPukA== + dependencies: + get-stdin "^6.0.0" + +eslint-import-resolver-node@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a" + integrity sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q== + dependencies: + debug "^2.6.9" + resolve "^1.5.0" + +eslint-module-utils@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.4.1.tgz#7b4675875bf96b0dbf1b21977456e5bb1f5e018c" + integrity sha512-H6DOj+ejw7Tesdgbfs4jeS4YMFrT8uI8xwd1gtQqXssaR0EQ26L+2O/w6wkYFy2MymON0fTwHmXBvvfLNZVZEw== + dependencies: + debug "^2.6.8" + pkg-dir "^2.0.0" + +eslint-plugin-import@2.18.2: + version "2.18.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.18.2.tgz#02f1180b90b077b33d447a17a2326ceb400aceb6" + integrity sha512-5ohpsHAiUBRNaBWAF08izwUGlbrJoJJ+W9/TBwsGoR1MnlgfwMIKrFeSjWbt6moabiXW9xNvtFz+97KHRfI4HQ== + dependencies: + array-includes "^3.0.3" + contains-path "^0.1.0" + debug "^2.6.9" + doctrine "1.5.0" + eslint-import-resolver-node "^0.3.2" + eslint-module-utils "^2.4.0" + has "^1.0.3" + minimatch "^3.0.4" + object.values "^1.1.0" + read-pkg-up "^2.0.0" + resolve "^1.11.0" + +eslint-plugin-prettier@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.0.tgz#8695188f95daa93b0dc54b249347ca3b79c4686d" + integrity sha512-XWX2yVuwVNLOUhQijAkXz+rMPPoCr7WFiAl8ig6I7Xn+pPVhDhzg4DxHpmbeb0iqjO9UronEA3Tb09ChnFVHHA== + dependencies: + prettier-linter-helpers "^1.0.0" + +eslint-plugin-wdio@5.11.0: + version "5.11.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-wdio/-/eslint-plugin-wdio-5.11.0.tgz#17440b83224c78d09a8dcdc77cbcbc11e34da463" + integrity sha512-o7VzDo4D7jipbKS+k2e0lsFD8v3Lpm3Iffc59XOLunJlgebGA6lasEhTk8VqJtmlC50P9YxxSnZaQTAMqxw+YA== + +eslint-scope@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" + integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-scope@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9" + integrity sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-utils@^1.3.1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.0.tgz#e2c3c8dba768425f897cf0f9e51fe2e241485d4c" + integrity sha512-7ehnzPaP5IIEh1r1tkjuIrxqhNkzUJa9z3R92tLJdZIVdWaczEhr3EbhGtsMrVxi1KeR8qA7Off6SWc5WNQqyQ== + dependencies: + eslint-visitor-keys "^1.0.0" + +eslint-visitor-keys@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" + integrity sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ== + +eslint@6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.1.0.tgz#06438a4a278b1d84fb107d24eaaa35471986e646" + integrity sha512-QhrbdRD7ofuV09IuE2ySWBz0FyXCq0rriLTZXZqaWSI79CVtHVRdkFuFTViiqzZhkCgfOh9USpriuGN2gIpZDQ== + dependencies: + "@babel/code-frame" "^7.0.0" + ajv "^6.10.0" + chalk "^2.1.0" + cross-spawn "^6.0.5" + debug "^4.0.1" + doctrine "^3.0.0" + eslint-scope "^5.0.0" + eslint-utils "^1.3.1" + eslint-visitor-keys "^1.0.0" + espree "^6.0.0" + esquery "^1.0.1" + esutils "^2.0.2" + file-entry-cache "^5.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^5.0.0" + globals "^11.7.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + inquirer "^6.4.1" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.3.0" + lodash "^4.17.14" + minimatch "^3.0.4" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + optionator "^0.8.2" + progress "^2.0.0" + regexpp "^2.0.1" + semver "^6.1.2" + strip-ansi "^5.2.0" + strip-json-comments "^3.0.1" + table "^5.2.3" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +espree@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-6.0.0.tgz#716fc1f5a245ef5b9a7fdb1d7b0d3f02322e75f6" + integrity sha512-lJvCS6YbCn3ImT3yKkPe0+tJ+mH6ljhGNjHQH9mRtiO6gjhVAOhVXW1yjnwqGwTkK3bGbye+hb00nFNmu0l/1Q== + dependencies: + acorn "^6.0.7" + acorn-jsx "^5.0.0" + eslint-visitor-keys "^1.0.0" + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" + integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA== + dependencies: + estraverse "^4.0.0" + +esrecurse@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" + integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== + dependencies: + estraverse "^4.1.0" + +estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" + integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + +fast-deep-equal@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" + integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= + +fast-diff@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" + integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== + +fast-json-stable-stringify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= + +fast-levenshtein@~2.0.4: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + +figures@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= + dependencies: + escape-string-regexp "^1.0.5" + +file-entry-cache@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" + integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== + dependencies: + flat-cache "^2.0.1" + +find-up@^2.0.0, find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= + dependencies: + locate-path "^2.0.0" + +flat-cache@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" + integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== + dependencies: + flatted "^2.0.0" + rimraf "2.6.3" + write "1.0.3" + +flatted@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08" + integrity sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg== + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + +get-stdin@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" + integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== + +glob-parent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.0.0.tgz#1dc99f0f39b006d3e92c2c284068382f0c20e954" + integrity sha512-Z2RwiujPRGluePM6j699ktJYxmPpJKCfpGA13jz2hmFZC7gKetzrWvg5KN3+OsIFmydGyZ1AVwERCq1w/ZZwRg== + dependencies: + is-glob "^4.0.1" + +glob@^7.1.3: + version "7.1.4" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" + integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^11.7.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +graceful-fs@^4.1.2: + version "4.2.1" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.1.tgz#1c1f0c364882c868f5bff6512146328336a11b1d" + integrity sha512-b9usnbDGnD928gJB3LrCmxoibr3VE4U2SMo5PBuBnokWyDADTqDPXg4YpwKF1trpH+UbGp7QLicO3+aWEy0+mw== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" + integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= + +has@^1.0.1, has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hosted-git-info@^2.1.4: + version "2.8.2" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.2.tgz#a35c3f355ac1249f1093c0c2a542ace8818c171a" + integrity sha512-CyjlXII6LMsPMyUzxpTt8fzh5QwzGqPmQXgY/Jyf4Zfp27t/FvfhwoE/8laaMUcMy816CkWF20I7NeQhwwY88w== + dependencies: + lru-cache "^5.1.1" + +iconv-lite@^0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + +import-fresh@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.1.0.tgz#6d33fa1dcef6df930fae003446f33415af905118" + integrity sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inquirer@^6.4.1: + version "6.5.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.0.tgz#2303317efc9a4ea7ec2e2df6f86569b734accf42" + integrity sha512-scfHejeG/lVZSpvCXpsB4j/wQNPM5JC8kiElOI0OUTwmc1RTpXr4H32/HOlQHcZiYl2z2VElwuCVDRG8vFmbnA== + dependencies: + ansi-escapes "^3.2.0" + chalk "^2.4.2" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^3.0.3" + figures "^2.0.0" + lodash "^4.17.12" + mute-stream "0.0.7" + run-async "^2.2.0" + rxjs "^6.4.0" + string-width "^2.1.0" + strip-ansi "^5.1.0" + through "^2.3.6" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-callable@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" + integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== + +is-date-object@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" + integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-glob@^4.0.0, is-glob@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + +is-promise@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" + integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= + +is-regex@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" + integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE= + dependencies: + has "^1.0.1" + +is-symbol@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" + integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw== + dependencies: + has-symbols "^1.0.0" + +isarray@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.13.1: + version "3.13.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" + integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + +levn@^0.3.0, levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +load-json-file@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + strip-bom "^3.0.0" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +lodash.unescape@4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lodash.unescape/-/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c" + integrity sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw= + +lodash@^4.17.12, lodash@^4.17.14: + version "4.17.15" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" + integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +mimic-fn@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= + +mkdirp@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= + dependencies: + minimist "0.0.8" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +mute-stream@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +normalize-package-data@^2.3.2: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +object-keys@^1.0.12: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.values@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.0.tgz#bf6810ef5da3e5325790eaaa2be213ea84624da9" + integrity sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.12.0" + function-bind "^1.1.1" + has "^1.0.3" + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= + dependencies: + mimic-fn "^1.0.0" + +optionator@^0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" + integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q= + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.4" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + wordwrap "~1.0.0" + +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= + dependencies: + p-limit "^1.1.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= + dependencies: + error-ex "^1.2.0" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +path-type@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= + dependencies: + pify "^2.0.0" + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pkg-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= + dependencies: + find-up "^2.1.0" + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + +prettier-linter-helpers@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" + integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== + dependencies: + fast-diff "^1.1.2" + +prettier@1.18.2: + version "1.18.2" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.18.2.tgz#6823e7c5900017b4bd3acf46fe9ac4b4d7bda9ea" + integrity sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw== + +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +read-pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= + dependencies: + find-up "^2.0.0" + read-pkg "^2.0.0" + +read-pkg@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= + dependencies: + load-json-file "^2.0.0" + normalize-package-data "^2.3.2" + path-type "^2.0.0" + +regexpp@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" + integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve@^1.10.0, resolve@^1.11.0, resolve@^1.5.0: + version "1.12.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6" + integrity sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w== + dependencies: + path-parse "^1.0.6" + +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= + dependencies: + onetime "^2.0.0" + signal-exit "^3.0.2" + +rimraf@2.6.3: + version "2.6.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== + dependencies: + glob "^7.1.3" + +run-async@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" + integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA= + dependencies: + is-promise "^2.1.0" + +rxjs@^6.4.0: + version "6.5.2" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.2.tgz#2e35ce815cd46d84d02a209fb4e5921e051dbec7" + integrity sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg== + dependencies: + tslib "^1.9.0" + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +"semver@2 || 3 || 4 || 5", semver@^5.5.0: + version "5.7.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" + integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== + +semver@5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" + integrity sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA== + +semver@^6.1.2: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +signal-exit@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= + +slice-ansi@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" + integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== + dependencies: + ansi-styles "^3.2.0" + astral-regex "^1.0.0" + is-fullwidth-code-point "^2.0.0" + +spdx-correct@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" + integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" + integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== + +spdx-expression-parse@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" + integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.5" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" + integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +string-width@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string-width@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + +strip-json-comments@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7" + integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw== + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +table@^5.2.3: + version "5.4.5" + resolved "https://registry.yarnpkg.com/table/-/table-5.4.5.tgz#c8f4ea2d8fee08c0027fac27b0ec0a4fe01dfa42" + integrity sha512-oGa2Hl7CQjfoaogtrOHEJroOcYILTx7BZWLGsJIlzoWmB2zmguhNfPJZsWPKYek/MgCxfco54gEi31d1uN2hFA== + dependencies: + ajv "^6.10.2" + lodash "^4.17.14" + slice-ansi "^2.1.0" + string-width "^3.0.0" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + +through@^2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +tslib@^1.8.1, tslib@^1.9.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" + integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== + +tsutils@^3.7.0: + version "3.17.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.0.tgz#c3ccab927a475aa2beef6a3695c2ff76da13cdf8" + integrity sha512-fyveWOtAXfumAxIqkcMHuPaaVyLBKjB8Y00ANZkqh+HITBAQscCbQIHwwBTJdvQq7RykLEbOPcUUnJ16X4NA0g== + dependencies: + tslib "^1.8.1" + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + dependencies: + prelude-ls "~1.1.2" + +typescript@3.5.3: + version "3.5.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.5.3.tgz#c830f657f93f1ea846819e929092f5fe5983e977" + integrity sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g== + +uri-js@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== + dependencies: + punycode "^2.1.0" + +v8-compile-cache@^2.0.3: + version "2.1.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz#e14de37b31a6d194f5690d67efc4e7f6fc6ab30e" + integrity sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g== + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +which@^1.2.9: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +wordwrap@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +write@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" + integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== + dependencies: + mkdirp "^0.5.1" + +yallist@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" + integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A== From c4c5312fb11880dff1f22a0f82a6e164b3c51c3f Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Wed, 7 Aug 2019 11:12:20 +0200 Subject: [PATCH 07/94] chore: add TypeScript configuration --- tests/e2e/package.json | 11 +- tests/e2e/tsconfig.json | 15 + tests/e2e/yarn.lock | 646 +++++++++++++++++++++++++++++++++++++++- 3 files changed, 661 insertions(+), 11 deletions(-) create mode 100644 tests/e2e/tsconfig.json diff --git a/tests/e2e/package.json b/tests/e2e/package.json index f586624691..4bb237f653 100644 --- a/tests/e2e/package.json +++ b/tests/e2e/package.json @@ -15,9 +15,16 @@ "sideEffects": false, "scripts": { "lint": "eslint --ext .js,.ts,.tsx .", - "lint:fix": "eslint --ext .js,.ts,.tsx --fix ." + "lint:fix": "eslint --ext .js,.ts,.tsx --fix .", + "type-check": "tsc", + "type-check:watch": "yarn type-check --watch" + }, + "dependencies": { + "typescript": "^3.5.3" }, "devDependencies": { + "@types/jasmine": "3.3.16", + "@types/node": "12.7.0", "@typescript-eslint/eslint-plugin": "1.13.0", "@typescript-eslint/parser": "1.13.0", "eslint": "6.1.0", @@ -27,6 +34,6 @@ "eslint-plugin-prettier": "3.1.0", "eslint-plugin-wdio": "5.11.0", "prettier": "1.18.2", - "typescript": "3.5.3" + "webdriverio": "5.11.13" } } diff --git a/tests/e2e/tsconfig.json b/tests/e2e/tsconfig.json new file mode 100644 index 0000000000..716bb0e225 --- /dev/null +++ b/tests/e2e/tsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "target": "es2016", + "module": "commonjs", + "moduleResolution": "node", + "noEmit": true, + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "allowSyntheticDefaultImports": true, + "types": ["node", "webdriverio", "jasmine"] + } +} diff --git a/tests/e2e/yarn.lock b/tests/e2e/yarn.lock index bfb6f677d8..6aa7e4b53c 100644 --- a/tests/e2e/yarn.lock +++ b/tests/e2e/yarn.lock @@ -23,11 +23,21 @@ resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag== +"@types/jasmine@3.3.16": + version "3.3.16" + resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-3.3.16.tgz#7c84074f5d7f84da9a14f816ccfb9aeb4da13f27" + integrity sha512-Nveep4zKGby8uIvG2AEUyYOwZS8uVeHK9TgbuWYSawUDDdIgfhCKz28QzamTo//Jk7Ztt9PO3f+vzlB6a4GV1Q== + "@types/json-schema@^7.0.3": version "7.0.3" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.3.tgz#bdfd69d61e464dcc81b25159c270d75a73c1a636" integrity sha512-Il2DtDVRGDcqjDtE+rF8iqg1CArehSK84HZJCT7AMITlyXRBpuPhqGLDQMowraqqu1coEaimg4ZOqggt6L6L+A== +"@types/node@12.7.0": + version "12.7.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.7.0.tgz#545dde2a1a5c27d281cfb8308d6736e0708f5d6c" + integrity sha512-vqcj1MVm2Sla4PpMfYKh1MyDN4D2f/mPIZD7RdAGqEsbE+JxfeqQHHVbRDQ0Nqn8i73gJa1HQ1Pu3+nH4Q0Yiw== + "@typescript-eslint/eslint-plugin@1.13.0": version "1.13.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-1.13.0.tgz#22fed9b16ddfeb402fd7bcde56307820f6ebc49f" @@ -66,6 +76,32 @@ lodash.unescape "4.0.1" semver "5.5.0" +"@wdio/config@^5.11.0": + version "5.11.0" + resolved "https://registry.yarnpkg.com/@wdio/config/-/config-5.11.0.tgz#ed565abac5aed9fad0d9ef331f2dbd197a7727ad" + integrity sha512-FvEQnx7eHHUG3sEJw+vN9NBnnwLvY7b1V74fhbDYoPO0+jHQwz9fjbs2/4IpUi9vz7UPYE2JGiEDQGHcaQUAqg== + dependencies: + "@wdio/logger" "^5.11.0" + deepmerge "^4.0.0" + glob "^7.1.2" + +"@wdio/logger@^5.11.0": + version "5.11.0" + resolved "https://registry.yarnpkg.com/@wdio/logger/-/logger-5.11.0.tgz#1f74698675c54ffb2114fe4ab945b9a0c1663133" + integrity sha512-oxSFt1PGX8DZcQdpURU/0eF/pisI7x84bNegk3taJ1EZ2Bti7/r7OqjMlLc+VDpr19ro1ytg2WNNTl+FD5vWXg== + dependencies: + chalk "^2.3.0" + loglevel "^1.6.0" + loglevel-plugin-prefix "^0.8.4" + strip-ansi "^5.2.0" + +"@wdio/repl@^5.11.0": + version "5.11.0" + resolved "https://registry.yarnpkg.com/@wdio/repl/-/repl-5.11.0.tgz#6f36d4c100c8d2b45c5c8d7a5918b5e5d7dc6a72" + integrity sha512-X7lyvRicOV0nIhRqaDl0Cs2BAd5Ny8zD5/9f9xEpI4T0e/UzixtyMMlAjeJiHLgq9re21xPSqMiBM4Uv8hrxvg== + dependencies: + "@wdio/config" "^5.11.0" + acorn-jsx@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.1.tgz#32a064fd925429216a09b141102bfdd185fae40e" @@ -76,7 +112,7 @@ acorn@^6.0.7: resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.2.1.tgz#3ed8422d6dec09e6121cc7a843ca86a330a86b51" integrity sha512-JD0xT5FCRDNyjDda3Lrg/IxFscp9q4tiYtxE1/nOzlKCk7hIRuYjhq1kCNkbPjMRMZuFq20HNQn1I9k8Oj0E+Q== -ajv@^6.10.0, ajv@^6.10.2: +ajv@^6.10.0, ajv@^6.10.2, ajv@^6.5.5: version "6.10.2" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52" integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw== @@ -108,6 +144,35 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" +archiver-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/archiver-utils/-/archiver-utils-2.1.0.tgz#e8a460e94b693c3e3da182a098ca6285ba9249e2" + integrity sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw== + dependencies: + glob "^7.1.4" + graceful-fs "^4.2.0" + lazystream "^1.0.0" + lodash.defaults "^4.2.0" + lodash.difference "^4.5.0" + lodash.flatten "^4.4.0" + lodash.isplainobject "^4.0.6" + lodash.union "^4.6.0" + normalize-path "^3.0.0" + readable-stream "^2.0.0" + +archiver@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/archiver/-/archiver-3.1.1.tgz#9db7819d4daf60aec10fe86b16cb9258ced66ea0" + integrity sha512-5Hxxcig7gw5Jod/8Gq0OneVgLYET+oNHcxgWItq4TbhOzRLKNAFUb9edAftiMKXvXfCB0vbGrJdZDNq0dWMsxg== + dependencies: + archiver-utils "^2.1.0" + async "^2.6.3" + buffer-crc32 "^0.2.1" + glob "^7.1.4" + readable-stream "^3.4.0" + tar-stream "^2.1.0" + zip-stream "^2.1.2" + argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -123,16 +188,69 @@ array-includes@^3.0.3: define-properties "^1.1.2" es-abstract "^1.7.0" +asn1@~0.2.3: + version "0.2.4" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + astral-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== +async@^2.6.3: + version "2.6.3" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" + integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== + dependencies: + lodash "^4.17.14" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + +aws4@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" + integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== + balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= +base64-js@^1.0.2: + version "1.3.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" + integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + dependencies: + tweetnacl "^0.14.3" + +bl@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-3.0.0.tgz#3611ec00579fd18561754360b21e9f784500ff88" + integrity sha512-EUAyP5UHU5hxF8BPT0LKW8gjYLhq1DQIcneOX/pL/m2Alo+OYDQAJlHq+yseMP50Os2nHXOSic6Ss3vSQeyf4A== + dependencies: + readable-stream "^3.0.1" + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -141,12 +259,30 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +buffer-crc32@^0.2.1, buffer-crc32@^0.2.13: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= + +buffer@^5.1.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.2.1.tgz#dd57fa0f109ac59c602479044dca7b8b3d0b71d6" + integrity sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -chalk@^2.0.0, chalk@^2.1.0, chalk@^2.4.2: +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + +chalk@^2.0.0, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -184,6 +320,23 @@ color-name@1.1.3: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= +combined-stream@^1.0.6, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +compress-commons@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-2.1.1.tgz#9410d9a534cf8435e3fbbb7c6ce48de2dc2f0610" + integrity sha512-eVw6n7CnEMFzc3duyFVrQEuY1BlHR3rYsSztyG32ibGMW722i3C6IizEGMFmfMU+A+fALvBIwxN3czffTcdA+Q== + dependencies: + buffer-crc32 "^0.2.13" + crc32-stream "^3.0.1" + normalize-path "^3.0.0" + readable-stream "^2.3.6" + concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -194,6 +347,26 @@ contains-path@^0.1.0: resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= +core-util-is@1.0.2, core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +crc32-stream@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-3.0.1.tgz#cae6eeed003b0e44d739d279de5ae63b171b4e85" + integrity sha512-mctvpXlbzsvK+6z8kJwSJ5crm7yBwrQMTybJzMw1O4lLGJqjlDCXY2Zw7KheiA6XBEcBmfLx1D88mjRGVJtY9w== + dependencies: + crc "^3.4.4" + readable-stream "^3.4.0" + +crc@^3.4.4: + version "3.8.0" + resolved "https://registry.yarnpkg.com/crc/-/crc-3.8.0.tgz#ad60269c2c856f8c299e2c4cc0de4556914056c6" + integrity sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ== + dependencies: + buffer "^5.1.0" + cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" @@ -205,6 +378,18 @@ cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" +css-value@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/css-value/-/css-value-0.0.1.tgz#5efd6c2eea5ea1fd6b6ac57ec0427b18452424ea" + integrity sha1-Xv1sLupeof1rasV+wEJ7GEUkJOo= + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + dependencies: + assert-plus "^1.0.0" + debug@^2.6.8, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" @@ -224,6 +409,11 @@ deep-is@~0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= +deepmerge@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.0.0.tgz#3e3110ca29205f120d7cb064960a39c3d2087c09" + integrity sha512-YZ1rOP5+kHor4hMAH+HRQnBQHg+wvS1un1hAOuIcxcBy0hzcUf6Jg2a1w65kpoOUnurOfZbERwjI1TfZxNjcww== + define-properties@^1.1.2, define-properties@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" @@ -231,6 +421,11 @@ define-properties@^1.1.2, define-properties@^1.1.3: dependencies: object-keys "^1.0.12" +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + doctrine@1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" @@ -246,11 +441,26 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + emoji-regex@^7.0.1: version "7.0.3" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== +end-of-stream@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" + integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q== + dependencies: + once "^1.4.0" + error-ex@^1.2.0: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" @@ -450,6 +660,11 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + external-editor@^3.0.3: version "3.1.0" resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" @@ -459,6 +674,16 @@ external-editor@^3.0.3: iconv-lite "^0.4.24" tmp "^0.0.33" +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + fast-deep-equal@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" @@ -514,6 +739,25 @@ flatted@^2.0.0: resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08" integrity sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg== +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -534,6 +778,13 @@ get-stdin@^6.0.0: resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + dependencies: + assert-plus "^1.0.0" + glob-parent@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.0.0.tgz#1dc99f0f39b006d3e92c2c284068382f0c20e954" @@ -541,7 +792,7 @@ glob-parent@^5.0.0: dependencies: is-glob "^4.0.1" -glob@^7.1.3: +glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: version "7.1.4" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== @@ -558,11 +809,29 @@ globals@^11.7.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -graceful-fs@^4.1.2: +graceful-fs@^4.1.2, graceful-fs@^4.2.0: version "4.2.1" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.1.tgz#1c1f0c364882c868f5bff6512146328336a11b1d" integrity sha512-b9usnbDGnD928gJB3LrCmxoibr3VE4U2SMo5PBuBnokWyDADTqDPXg4YpwKF1trpH+UbGp7QLicO3+aWEy0+mw== +grapheme-splitter@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" + integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + +har-validator@~5.1.0: + version "5.1.3" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" + integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== + dependencies: + ajv "^6.5.5" + har-schema "^2.0.0" + has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -587,6 +856,15 @@ hosted-git-info@^2.1.4: dependencies: lru-cache "^5.1.1" +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + iconv-lite@^0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" @@ -594,6 +872,11 @@ iconv-lite@^0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" +ieee754@^1.1.4: + version "1.1.13" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" + integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== + ignore@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" @@ -620,7 +903,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2: +inherits@2, inherits@^2.0.3, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -695,7 +978,12 @@ is-symbol@^1.0.2: dependencies: has-symbols "^1.0.0" -isarray@^1.0.0: +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + +isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= @@ -705,6 +993,11 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -718,16 +1011,48 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= + json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +lazystream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4" + integrity sha1-9plf4PggOS9hOWvolGJAe7dxaOQ= + dependencies: + readable-stream "^2.0.5" + levn@^0.3.0, levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" @@ -754,16 +1079,71 @@ locate-path@^2.0.0: p-locate "^2.0.0" path-exists "^3.0.0" +lodash.clonedeep@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= + +lodash.defaults@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" + integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw= + +lodash.difference@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c" + integrity sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw= + +lodash.flatten@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" + integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= + +lodash.isobject@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/lodash.isobject/-/lodash.isobject-3.0.2.tgz#3c8fb8d5b5bf4bf90ae06e14f2a530a4ed935e1d" + integrity sha1-PI+41bW/S/kK4G4U8qUwpO2TXh0= + +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= + +lodash.merge@^4.6.1: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + lodash.unescape@4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/lodash.unescape/-/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c" integrity sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw= +lodash.union@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" + integrity sha1-SLtQiECfFvGCFmZkHETdGqrjzYg= + +lodash.zip@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.zip/-/lodash.zip-4.2.0.tgz#ec6662e4896408ed4ab6c542a3990b72cc080020" + integrity sha1-7GZi5IlkCO1KtsVCo5kLcswIACA= + lodash@^4.17.12, lodash@^4.17.14: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== +loglevel-plugin-prefix@^0.8.4: + version "0.8.4" + resolved "https://registry.yarnpkg.com/loglevel-plugin-prefix/-/loglevel-plugin-prefix-0.8.4.tgz#2fe0e05f1a820317d98d8c123e634c1bd84ff644" + integrity sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g== + +loglevel@^1.6.0: + version "1.6.3" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.3.tgz#77f2eb64be55a404c9fd04ad16d57c1d6d6b1280" + integrity sha512-LoEDv5pgpvWgPF4kNYuIp0qqSJVWak/dML0RY74xlzMZiT9w77teNAwKYKWBTYjlokMirg+o3jBwp+vlLrcfAA== + lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" @@ -771,6 +1151,18 @@ lru-cache@^5.1.1: dependencies: yallist "^3.0.2" +mime-db@1.40.0: + version "1.40.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32" + integrity sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA== + +mime-types@^2.1.12, mime-types@~2.1.19: + version "2.1.24" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81" + integrity sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ== + dependencies: + mime-db "1.40.0" + mimic-fn@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" @@ -830,6 +1222,16 @@ normalize-package-data@^2.3.2: semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" +normalize-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + object-keys@^1.0.12: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" @@ -845,7 +1247,7 @@ object.values@^1.1.0: function-bind "^1.1.1" has "^1.0.3" -once@^1.3.0: +once@^1.3.0, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= @@ -936,6 +1338,11 @@ path-type@^2.0.0: dependencies: pify "^2.0.0" +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + pify@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -965,16 +1372,36 @@ prettier@1.18.2: resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.18.2.tgz#6823e7c5900017b4bd3acf46fe9ac4b4d7bda9ea" integrity sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw== +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + progress@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== +psl@^1.1.24: + version "1.3.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.3.0.tgz#e1ebf6a3b5564fa8376f3da2275da76d875ca1bd" + integrity sha512-avHdspHO+9rQTLbv1RO+MPYeP/SzsCoxofjVnHanETfQhTJrmB0HlDoW+EiN/R+C0BZ+gERab9NY0lPN2TxNag== + +punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + punycode@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== +qs@~6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== + read-pkg-up@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" @@ -992,11 +1419,59 @@ read-pkg@^2.0.0: normalize-package-data "^2.3.2" path-type "^2.0.0" +readable-stream@^2.0.0, readable-stream@^2.0.5, readable-stream@^2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" + integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.0.1, readable-stream@^3.1.1, readable-stream@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc" + integrity sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + regexpp@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== +request@^2.83.0: + version "2.88.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" + integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.0" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.4.3" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" @@ -1009,6 +1484,13 @@ resolve@^1.10.0, resolve@^1.11.0, resolve@^1.5.0: dependencies: path-parse "^1.0.6" +resq@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/resq/-/resq-1.5.0.tgz#a5f238e0c90f4e32ad0bfe3f36f041fae8b90f1d" + integrity sha512-6US6oo2fQ/vgs7wBwqq1w9901Z5VEDgxQH0LrNaN8HcHUZInhtrIt1a0Icysu0vuoK26Bt+SR1dIYeR9+ftMxA== + dependencies: + fast-deep-equal "^2.0.1" + restore-cursor@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" @@ -1017,6 +1499,11 @@ restore-cursor@^2.0.0: onetime "^2.0.0" signal-exit "^3.0.2" +rgb2hex@^0.1.0: + version "0.1.9" + resolved "https://registry.yarnpkg.com/rgb2hex/-/rgb2hex-0.1.9.tgz#5d3e0e14b0177b568e6f0d5b43e34fbfdb670346" + integrity sha512-32iuQzhOjyT+cv9aAFRBJ19JgHwzQwbjUhH3Fj2sWW2EEGAW8fpFrDFP5ndoKDxJaLO06x1hE3kyuIFrUQtybQ== + rimraf@2.6.3: version "2.6.3" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" @@ -1038,7 +1525,17 @@ rxjs@^6.4.0: dependencies: tslib "^1.9.0" -"safer-buffer@>= 2.1.2 < 3": +safe-buffer@^5.0.1, safe-buffer@^5.1.2: + version "5.2.0" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" + integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -1058,6 +1555,13 @@ semver@^6.1.2: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== +serialize-error@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-4.1.0.tgz#63e1e33ede20bcd89d9f0528ea4c15fbf0f2b78a" + integrity sha512-5j9GgyGsP9vV9Uj1S0lDCvlsd+gc2LEPVK7HHHte7IyPwOD4lVQFeaX143gx3U5AnoCi+wbcb3mvaxVysjpxEw== + dependencies: + type-fest "^0.3.0" + shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" @@ -1115,6 +1619,21 @@ sprintf-js@~1.0.2: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= +sshpk@^1.7.0: + version "1.16.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" + integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + string-width@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" @@ -1132,6 +1651,20 @@ string-width@^3.0.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" +string_decoder@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d" + integrity sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w== + dependencies: + safe-buffer "~5.1.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + strip-ansi@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" @@ -1173,6 +1706,17 @@ table@^5.2.3: slice-ansi "^2.1.0" string-width "^3.0.0" +tar-stream@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.1.0.tgz#d1aaa3661f05b38b5acc9b7020efdca5179a2cc3" + integrity sha512-+DAn4Nb4+gz6WZigRzKEZl1QuJVOLtAwwF+WUxy1fJ6X63CaGaUAxJRD2KEn1OMfcbCjySTYpNC6WmfQoIEOdw== + dependencies: + bl "^3.0.0" + end-of-stream "^1.4.1" + fs-constants "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.1.1" + text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" @@ -1190,6 +1734,14 @@ tmp@^0.0.33: dependencies: os-tmpdir "~1.0.2" +tough-cookie@~2.4.3: + version "2.4.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" + integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ== + dependencies: + psl "^1.1.24" + punycode "^1.4.1" + tslib@^1.8.1, tslib@^1.9.0: version "1.10.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" @@ -1202,6 +1754,18 @@ tsutils@^3.7.0: dependencies: tslib "^1.8.1" +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + type-check@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" @@ -1209,7 +1773,12 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" -typescript@3.5.3: +type-fest@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1" + integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ== + +typescript@^3.5.3: version "3.5.3" resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.5.3.tgz#c830f657f93f1ea846819e929092f5fe5983e977" integrity sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g== @@ -1221,6 +1790,16 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +uuid@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" + integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== + v8-compile-cache@^2.0.3: version "2.1.0" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz#e14de37b31a6d194f5690d67efc4e7f6fc6ab30e" @@ -1234,6 +1813,46 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +webdriver@^5.11.13: + version "5.11.13" + resolved "https://registry.yarnpkg.com/webdriver/-/webdriver-5.11.13.tgz#b1b060dded854bfd42fc0c1bdd341acc80586c2a" + integrity sha512-XZho6xW1G+ksPePKWP54k3nzadTf6skPUTPKUVKAdrgbPgHHEwhMEYJhRgZiQ3ZLSOF/IP6ViwsbZg+BYJ+sbA== + dependencies: + "@wdio/config" "^5.11.0" + "@wdio/logger" "^5.11.0" + deepmerge "^4.0.0" + lodash.merge "^4.6.1" + request "^2.83.0" + +webdriverio@5.11.13: + version "5.11.13" + resolved "https://registry.yarnpkg.com/webdriverio/-/webdriverio-5.11.13.tgz#ac56ad395d2906ad53abce78717d287bae54acc0" + integrity sha512-GTH4aNP4GzuxmeF+CLXIEyfYccXV2hANhqw+cQPE3U0qZ0ir3ZTSTLre90gHVJzY6rcgx0QzIMazuUbNB0kVoA== + dependencies: + "@wdio/config" "^5.11.0" + "@wdio/logger" "^5.11.0" + "@wdio/repl" "^5.11.0" + archiver "^3.0.0" + css-value "^0.0.1" + grapheme-splitter "^1.0.2" + lodash.clonedeep "^4.5.0" + lodash.isobject "^3.0.2" + lodash.isplainobject "^4.0.6" + lodash.zip "^4.2.0" + resq "^1.5.0" + rgb2hex "^0.1.0" + serialize-error "^4.1.0" + webdriver "^5.11.13" + which@^1.2.9: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" @@ -1262,3 +1881,12 @@ yallist@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A== + +zip-stream@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-2.1.2.tgz#841efd23214b602ff49c497cba1a85d8b5fbc39c" + integrity sha512-ykebHGa2+uzth/R4HZLkZh3XFJzivhVsjJt8bN3GvBzLaqqrUdRacu+c4QtnUgjkkQfsOuNE1JgLKMCPNmkKgg== + dependencies: + archiver-utils "^2.1.0" + compress-commons "^2.1.1" + readable-stream "^3.4.0" From 570c716de349c20088bb8c98c66d606cd53899d0 Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Wed, 7 Aug 2019 11:34:19 +0200 Subject: [PATCH 08/94] feat(webdriverio): add WebdriverIO local configuration --- tests/e2e/index.js | 3 ++ tests/e2e/package.json | 11 +++++ tests/e2e/wdio.base.conf.js | 85 ++++++++++++++++++++++++++++++++++++ tests/e2e/wdio.local.conf.js | 21 +++++++++ tests/e2e/yarn.lock | 49 +++++++++++++++++++++ 5 files changed, 169 insertions(+) create mode 100644 tests/e2e/index.js create mode 100644 tests/e2e/wdio.base.conf.js create mode 100644 tests/e2e/wdio.local.conf.js diff --git a/tests/e2e/index.js b/tests/e2e/index.js new file mode 100644 index 0000000000..0ac3c475b6 --- /dev/null +++ b/tests/e2e/index.js @@ -0,0 +1,3 @@ +module.exports = { + local: require('./wdio.local.conf'), +}; diff --git a/tests/e2e/package.json b/tests/e2e/package.json index 4bb237f653..6557a7f5a0 100644 --- a/tests/e2e/package.json +++ b/tests/e2e/package.json @@ -3,6 +3,7 @@ "version": "1.0.0", "description": "End-2-End test suite for InstantSearch", "homepage": "https://github.com/algolia/instantsearch-e2e-tests", + "main": "./index.js", "keywords": [ "algolia", "instantsearch", @@ -20,6 +21,7 @@ "type-check:watch": "yarn type-check --watch" }, "dependencies": { + "ts-node": "^8.3.0", "typescript": "^3.5.3" }, "devDependencies": { @@ -35,5 +37,14 @@ "eslint-plugin-wdio": "5.11.0", "prettier": "1.18.2", "webdriverio": "5.11.13" + }, + "peerDependencies": { + "@wdio/cli": "^5.11.13", + "@wdio/jasmine-framework": "^5.11.0", + "@wdio/local-runner": "^5.11.13", + "@wdio/sauce-service": "^5.11.1", + "@wdio/selenium-standalone-service": "^5.11.2", + "@wdio/spec-reporter": "^5.11.7", + "@wdio/static-server-service": "^5.11.0" } } diff --git a/tests/e2e/wdio.base.conf.js b/tests/e2e/wdio.base.conf.js new file mode 100644 index 0000000000..8c735f7bd2 --- /dev/null +++ b/tests/e2e/wdio.base.conf.js @@ -0,0 +1,85 @@ +const path = require('path'); + +module.exports = { + /* + * Use the Static Server Service to start serve demos to run our tests against + * https://webdriver.io/docs/static-server-service.html + * https://github.com/webdriverio/webdriverio/tree/master/packages/wdio-static-server-service + */ + services: ['static-server'], + staticServerFolders: [{ mount: '/', path: './website' }], + staticServerPort: 5000, + /* + * Set the static server, started above, as the base URL + * Will be prepended to the `url` parameter of `browser.url()` calls + * https://webdriver.io/docs/configurationfile.html + * https://webdriver.io/docs/api/browser/url.html + */ + baseUrl: 'http://localhost:5000', + + /* + * Specify Test Files + * Using absolute path to run test files from the package root + * instead of the directory from which `wdio` was called + * https://webdriver.io/docs/configurationfile.html + */ + specs: [path.join(__dirname, 'specs/**/*.spec.ts')], + + /* + * Level of logging verbosity + * Can be: trace, debug, info, warn, error, silent + * https://webdriver.io/docs/options.html#loglevel + */ + logLevel: 'warn', + /* + * Default timeout for all waitForXXX commands + * https://webdriver.io/docs/options.html#waitfortimeout + */ + waitforTimeout: 10000, + /* + * Stop tests on first fail + * https://webdriver.io/docs/options.html#bail + */ + bail: 1, + + /* + * Uses Jasmine as test framework + * Since Jest is not supported by WebdriverIO yet we choose to use the Jasmine framework as it has a very close syntax + * https://webdriver.io/docs/options.html#framework + * https://github.com/webdriverio/webdriverio/tree/master/packages/wdio-jasmine-framework + */ + framework: 'jasmine', + /* + * Specific Jasmine related options + * https://webdriver.io/docs/options.html#mochaopts-jasminenodeopts + * https://github.com/webdriverio/webdriverio/tree/master/packages/wdio-jasmine-framework#configuration + */ + jasmineNodeOpts: { + defaultTimeoutInterval: 60000, + }, + /* + * List of reporters to use + * https://webdriver.io/docs/options.html#reporters + * https://github.com/webdriverio/webdriverio/tree/master/packages/wdio-spec-reporter + */ + reporters: ['spec'], + + /* + * Hooks + * https://webdriver.io/docs/options.html#hooks + */ + + /* + * `before` hook (executed before test execution begins) registering TypeScript to compile our `.ts` files + * https://webdriver.io/docs/typescript.html + */ + before() { + require('ts-node').register({ + files: true, + transpileOnly: true, + // Force `ts-node` to use the config file from the package root + // instead of the directory from which `wdio` was called + project: path.join(__dirname, './tsconfig.json'), + }); + }, +}; diff --git a/tests/e2e/wdio.local.conf.js b/tests/e2e/wdio.local.conf.js new file mode 100644 index 0000000000..f5a19e4304 --- /dev/null +++ b/tests/e2e/wdio.local.conf.js @@ -0,0 +1,21 @@ +const baseConfig = require('./wdio.base.conf'); + +module.exports = { + ...baseConfig, + /* + * Start a Selenium Standalone Service to run our tests on our local machine + * https://webdriver.io/docs/selenium-standalone-service.html + * https://github.com/webdriverio/webdriverio/tree/master/packages/wdio-selenium-standalone-service + */ + services: [...(baseConfig.services || []), 'selenium-standalone'], + /* + * Platforms where we want to run our tests + * Since it will be run on the local machine and we don't know any of its capacity + * then we stay very vague and only target the most common browser + */ + capabilities: [ + { + browserName: 'chrome', + }, + ], +}; diff --git a/tests/e2e/yarn.lock b/tests/e2e/yarn.lock index 6aa7e4b53c..8ade8f4af7 100644 --- a/tests/e2e/yarn.lock +++ b/tests/e2e/yarn.lock @@ -173,6 +173,11 @@ archiver@^3.0.0: tar-stream "^2.1.0" zip-stream "^2.1.2" +arg@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.1.tgz#485f8e7c390ce4c5f78257dbea80d4be11feda4c" + integrity sha512-SlmP3fEA88MBv0PypnXZ8ZfJhwmDeIE3SP71j37AiXQBXYosPV0x6uISAaHYSlSVhmHOVkomen0tbGk6Anlebw== + argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -264,6 +269,11 @@ buffer-crc32@^0.2.1, buffer-crc32@^0.2.13: resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + buffer@^5.1.0: version "5.2.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.2.1.tgz#dd57fa0f109ac59c602479044dca7b8b3d0b71d6" @@ -426,6 +436,11 @@ delayed-stream@~1.0.0: resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= +diff@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.1.tgz#0c667cb467ebbb5cea7f14f135cc2dba7780a8ff" + integrity sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q== + doctrine@1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" @@ -1151,6 +1166,11 @@ lru-cache@^5.1.1: dependencies: yallist "^3.0.2" +make-error@^1.1.1: + version "1.3.5" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.5.tgz#efe4e81f6db28cadd605c70f29c831b58ef776c8" + integrity sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g== + mime-db@1.40.0: version "1.40.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32" @@ -1588,6 +1608,19 @@ slice-ansi@^2.1.0: astral-regex "^1.0.0" is-fullwidth-code-point "^2.0.0" +source-map-support@^0.5.6: + version "0.5.13" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" + integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + spdx-correct@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" @@ -1742,6 +1775,17 @@ tough-cookie@~2.4.3: psl "^1.1.24" punycode "^1.4.1" +ts-node@^8.3.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.3.0.tgz#e4059618411371924a1fb5f3b125915f324efb57" + integrity sha512-dyNS/RqyVTDcmNM4NIBAeDMpsAdaQ+ojdf0GOLqE6nwJOgzEkdRNzJywhDfwnuvB10oa6NLVG1rUJQCpRN7qoQ== + dependencies: + arg "^4.1.0" + diff "^4.0.1" + make-error "^1.1.1" + source-map-support "^0.5.6" + yn "^3.0.0" + tslib@^1.8.1, tslib@^1.9.0: version "1.10.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" @@ -1882,6 +1926,11 @@ yallist@^3.0.2: resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A== +yn@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + zip-stream@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-2.1.2.tgz#841efd23214b602ff49c497cba1a85d8b5fbc39c" From fcfbf491ea3a4e51ab0ad903a8921fc8eeab99da Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Wed, 7 Aug 2019 12:50:08 +0200 Subject: [PATCH 09/94] feat(webdriverio): add WebdriverIO Sauce Labs configuration --- tests/e2e/index.js | 1 + tests/e2e/package.json | 1 + tests/e2e/wdio.saucelabs.conf.js | 71 ++++++++++++++++++++++++++++++++ tests/e2e/yarn.lock | 5 +++ 4 files changed, 78 insertions(+) create mode 100644 tests/e2e/wdio.saucelabs.conf.js diff --git a/tests/e2e/index.js b/tests/e2e/index.js index 0ac3c475b6..73b2c5732e 100644 --- a/tests/e2e/index.js +++ b/tests/e2e/index.js @@ -1,3 +1,4 @@ module.exports = { local: require('./wdio.local.conf'), + saucelabs: require('./wdio.saucelabs.conf'), }; diff --git a/tests/e2e/package.json b/tests/e2e/package.json index 6557a7f5a0..838324b2d9 100644 --- a/tests/e2e/package.json +++ b/tests/e2e/package.json @@ -21,6 +21,7 @@ "type-check:watch": "yarn type-check --watch" }, "dependencies": { + "dotenv": "^8.0.0", "ts-node": "^8.3.0", "typescript": "^3.5.3" }, diff --git a/tests/e2e/wdio.saucelabs.conf.js b/tests/e2e/wdio.saucelabs.conf.js new file mode 100644 index 0000000000..a99dba2ae8 --- /dev/null +++ b/tests/e2e/wdio.saucelabs.conf.js @@ -0,0 +1,71 @@ +require('dotenv').config(); + +const baseConfig = require('./wdio.base.conf'); + +module.exports = { + ...baseConfig, + /* + * Add Sauce Labs integration to WebdriverIO + * https://webdriver.io/docs/sauce-service.html + * https://github.com/webdriverio/webdriverio/tree/master/packages/wdio-sauce-service + */ + services: [...(baseConfig.services || []), 'sauce'], + /* + * Sauce Labs credentials + * Can be set in environement variables or in a `.env` file in + * the directory from which `wdio` was called + */ + user: process.env.SAUCE_USERNAME, + key: process.env.SAUCE_ACCESS_KEY, + /* + * Sauce Connect Proxy + * Open tunnel between Sauce Labs and the machine running our static server + * https://wiki.saucelabs.com/display/DOCS/Sauce+Connect+Proxy + */ + sauceConnect: true, + /* + * Sauce Labs Open Source offer has a maximum of 5 concurrent session + */ + maxInstances: 5, + + /* + * Retry spec files 2 times maximum on fail + * This is usefull is case of a flacky test + * https://webdriver.io/docs/options.html#specfileretries + */ + specFileRetries: 2, + + /* + * Platforms where we want to run our tests + * https://wiki.saucelabs.com/display/DOCS/Platform+Configurator#/ + */ + capabilities: [ + { + browserName: 'chrome', + browserVersion: '76.0', + /* + * Sauce Labs specific options + * https://wiki.saucelabs.com/display/DOCS/Test+Configuration+Options + */ + 'sauce:options': { + screenResolution: '1680x1050', + extendedDebugging: true, + capturePerformance: true, + }, + }, + { + browserName: 'firefox', + browserVersion: '68.0', + /* + * Sauce Labs specific options + * https://wiki.saucelabs.com/display/DOCS/Test+Configuration+Options + */ + 'sauce:options': { + screenResolution: '1680x1050', + // Force Selenium version on Firefox, solves an issue with `setValue` + // https://github.com/webdriverio/webdriverio/issues/3443 + seleniumVersion: '3.11.0', + }, + }, + ], +}; diff --git a/tests/e2e/yarn.lock b/tests/e2e/yarn.lock index 8ade8f4af7..7507ba3886 100644 --- a/tests/e2e/yarn.lock +++ b/tests/e2e/yarn.lock @@ -456,6 +456,11 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" +dotenv@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.0.0.tgz#ed310c165b4e8a97bb745b0a9d99c31bda566440" + integrity sha512-30xVGqjLjiUOArT4+M5q9sYdvuR4riM6yK9wMcas9Vbp6zZa+ocC9dp6QoftuhTPhFAiLK/0C5Ni2nou/Bk8lg== + ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" From 895c503c8e6dc5e0d290f1eec22b532383a6f797 Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Wed, 7 Aug 2019 15:16:55 +0200 Subject: [PATCH 10/94] feat(spec): add spec for search on specific brand and query filtering --- tests/e2e/specs/brand-and-query.spec.ts | 53 +++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 tests/e2e/specs/brand-and-query.spec.ts diff --git a/tests/e2e/specs/brand-and-query.spec.ts b/tests/e2e/specs/brand-and-query.spec.ts new file mode 100644 index 0000000000..12db0861a5 --- /dev/null +++ b/tests/e2e/specs/brand-and-query.spec.ts @@ -0,0 +1,53 @@ +describe('InstantSearch - Search on specific brand and query filtering', () => { + beforeAll(() => { + if (!browser.isMobile) { + browser.maximizeWindow(); + } + }); + + it('navigates to the e-commerce demo', async () => { + await browser.url('examples/e-commerce/'); + }); + + it('selects "Apple" brand in list', async () => { + const brand = await browser.$('.ais-RefinementList-labelText=Apple'); + await brand.click(); + }); + + it('fills search input with "macbook"', async () => { + const searchInput = await browser.$('[type=search]'); + await searchInput.setValue('macbook'); + }); + + it('waits for the results list to be updated (wait for the "macbook" word to be highlighted)', async () => { + await browser.waitUntil( + async () => (await browser.$$('mark=MacBook')).length > 0, + 10000 + ); + }); + + it('must match the expected results', async () => { + const hits = await browser.$$('.hit h1'); + const hitsText = await Promise.all(hits.map(hit => hit.getText())); + + // Compare them to expected titles + expect(hitsText).toEqual([ + 'Apple - MacBook Air® (Latest Model) - 13.3" Display - Intel Core i5 - 8GB Memory - 128GB Flash Storage - Silver', + 'Apple - MacBook Air® (Latest Model) - 13.3" Display - Intel Core i5 - 8GB Memory - 256GB Flash Storage - Silver', + 'Apple - Macbook® (Latest Model) - 12" Display - Intel Core M3 - 8GB Memory - 256GB Flash Storage - Space Gray', + 'Apple - Macbook® (Latest Model) - 12" Display - Intel Core M3 - 8GB Memory - 256GB Flash Storage - Gold', + 'Apple - Macbook® (Latest Model) - 12" Display - Intel Core M3 - 8GB Memory - 256GB Flash Storage - Rose Gold', + 'Apple - Macbook® (Latest Model) - 12" Display - Intel Core M3 - 8GB Memory - 256GB Flash Storage - Silver', + 'Apple - Macbook® (Latest Model) - 12" Display - Intel Core M5 - 8GB Memory - 512GB Flash Storage - Space Gray', + 'Apple - Macbook® (Latest Model) - 12" Display - Intel Core M5 - 8GB Memory - 512GB Flash Storage - Rose Gold', + 'Apple - Macbook® (Latest Model) - 12" Display - Intel Core M5 - 8GB Memory - 512GB Flash Storage - Gold', + 'Apple - Macbook® (Latest Model) - 12" Display - Intel Core M5 - 8GB Memory - 512GB Flash Storage - Silver', + 'Apple - MacBook Pro with Retina display - 13.3" Display - 8GB Memory - 128GB Flash Storage - Silver', + 'Apple - MacBook Pro® - 13" Display - Intel Core i5 - 8 GB Memory - 256GB Flash Storage (latest model) - Space Gray', + 'Apple - MacBook® Pro - 15.4" Display - Intel Core i7 - 16GB Memory - 256GB Flash Storage - Silver', + 'Apple - MacBook Pro® - 13" Display - Intel Core i5 - 8 GB Memory - 256GB Flash Storage (latest model) - Silver', + 'Apple - MacBook® Pro - Intel Core i5 - 13.3" Display - 4GB Memory - 500GB Hard Drive - Silver', + 'Apple - MacBook Pro 13.3" Refurbished Laptop - Intel Core i5 - 4GB Memory - 320GB - Silver', + ]); + }); +}); From a678417cec3a8685d171bd010a5195b371f83cc3 Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Wed, 7 Aug 2019 15:17:29 +0200 Subject: [PATCH 11/94] feat(spec): add spec for search on specific price range --- tests/e2e/specs/price-range.spec.ts | 95 +++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 tests/e2e/specs/price-range.spec.ts diff --git a/tests/e2e/specs/price-range.spec.ts b/tests/e2e/specs/price-range.spec.ts new file mode 100644 index 0000000000..00cc855a5c --- /dev/null +++ b/tests/e2e/specs/price-range.spec.ts @@ -0,0 +1,95 @@ +describe('InstantSearch - Search on specific price range', () => { + let lowerBound: number; + let upperBound: number; + + beforeAll(async () => { + if (!browser.isMobile) { + await browser.maximizeWindow(); + } + }); + + it('navigates to the e-commerce demo', async () => { + await browser.url('examples/e-commerce/'); + }); + + it('drag and drop lower handle to the right', async () => { + const lowerHandle = await browser.$( + '.ais-RangeSlider .rheostat-handle-lower' + ); + + await browser.dragAndDropByOffset(lowerHandle, 54); + + const tooltip = await browser.$( + '.ais-RangeSlider .rheostat-handle-lower .rheostat-tooltip' + ); + lowerBound = Number((await tooltip.getText()).replace(',', '')); + + // There is a difference between steps in browsers so we cannot assert on a strict `lowerBound` value + expect(lowerBound >= 971).toBe(true); + expect(lowerBound <= 981).toBe(true); + }); + + it(`waits for the results list to be updated (wait for all the prices to be > lowerBound)`, async () => { + await browser.waitUntil(async () => { + const hits = await browser.$$('.hit-info-container strong'); + const hitsText = await Promise.all(hits.map(hit => hit.getText())); + return ( + hitsText.filter(text => Number(text.replace(',', '')) < lowerBound) + .length === 0 + ); + }, 10000); + }); + + it('drag and drop upper handle to the left', async () => { + const upperHandle = await browser.$( + '.ais-RangeSlider .rheostat-handle-upper' + ); + + await browser.dragAndDropByOffset(upperHandle, -146); + + const tooltip = await browser.$( + '.ais-RangeSlider .rheostat-handle-upper .rheostat-tooltip' + ); + upperBound = Number((await tooltip.getText()).replace(',', '')); + + // There is a difference between steps in browsers so we cannot assert on a strict `upperBound` value + expect(upperBound >= 1971).toBe(true); + expect(upperBound <= 1981).toBe(true); + }); + + it(`waits for the results list to be updated (wait for all the prices to be < upperBound)`, async () => { + await browser.waitUntil(async () => { + const hits = await browser.$$('.hit-info-container strong'); + const hitsText = await Promise.all(hits.map(hit => hit.getText())); + return ( + hitsText.filter(text => Number(text.replace(',', '')) > upperBound) + .length === 0 + ); + }, 10000); + }); + + it('must match the expected results', async () => { + const hits = await browser.$$('.hit h1'); + const hitsText = await Promise.all(hits.map(hit => hit.getText())); + + // Compare them to expected titles + expect(hitsText).toEqual([ + 'Apple - MacBook Air® (Latest Model) - 13.3" Display - Intel Core i5 - 8GB Memory - 128GB Flash Storage - Silver', + 'Apple - MacBook Pro with Retina display - 13.3" Display - 8GB Memory - 128GB Flash Storage - Silver', + 'Apple - MacBook Air® (Latest Model) - 13.3" Display - Intel Core i5 - 8GB Memory - 256GB Flash Storage - Silver', + 'Sony - 65" Class (64.5" Diag.) - 2160p - Smart - 4K Ultra HD TV with High Dynamic Range - Black', + 'Apple - MacBook Pro® - 13" Display - Intel Core i5 - 8 GB Memory - 256GB Flash Storage (latest model) - Space Gray', + 'Samsung - 65" Class (64.5" Diag.) - LED - 2160p - Smart - 4K Ultra HD TV - with High Dynamic Range - Silver', + 'Sony - 55" Class (54.6" Diag.) - 2160p - Smart - 4K Ultra HD TV with High Dynamic Range - Black', + 'HP - Spectre x360 2-in-1 15.6" 4K Ultra HD Touch-Screen Laptop - Intel Core i7 - 16GB Memory - 256GB Solid State Drive - Natural Silver', + 'Microsoft - Surface Pro 4 - 12.3" - 128GB - Intel Core i5 - Silver', + 'Samsung - 49" Class - (48.5" Diag.) - LED - 2160p - Smart - 4K Ultra HD TV - with High Dynamic Range - Silver', + 'Samsung - 55" Class - (54.6" Diag.) - LED - 2160p - Smart - 4K Ultra HD TV - with High Dynamic Range - Silver', + 'HP - ENVY 17.3" Touch-Screen Laptop - Intel Core i7 - 16GB Memory - 1TB Hard Drive - Natural Silver', + 'HP - Pavilion 27" Touch-Screen All-In-One - Intel Core i7 - 12GB Memory - 1TB Hard Drive - HP finish in turbo silver', + 'Samsung - 65" Class - (64.5" Diag.) - LED - 2160p - Smart - 4K Ultra HD TV with High Dynamic Range - Black', + 'Sony - 55" Class (54.6" diag) - LED - 2160p - Smart - 3D - 4K Ultra HD TV with High Dynamic Range - Black', + 'HP - OMEN 17.3" Laptop - Intel Core i7 - 12GB Memory - NVIDIA GeForce GTX 965M - 1TB HDD + 256GB Solid State Drive - Onyx Black/Twinkle Black', + ]); + }); +}); From ada3e22e2667c1509baa59fe7a515172f10402bb Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Wed, 7 Aug 2019 15:22:54 +0200 Subject: [PATCH 12/94] refactor(helper): move drag'n drop code to dragAndDropByOffset helper --- tests/e2e/.eslintrc.js | 8 ++++ tests/e2e/helpers/dragAndDropByOffset.ts | 52 ++++++++++++++++++++++++ tests/e2e/helpers/index.ts | 1 + tests/e2e/wdio.base.conf.js | 15 ++++--- 4 files changed, 71 insertions(+), 5 deletions(-) create mode 100644 tests/e2e/helpers/dragAndDropByOffset.ts create mode 100644 tests/e2e/helpers/index.ts diff --git a/tests/e2e/.eslintrc.js b/tests/e2e/.eslintrc.js index b8919d2f33..d48bc09844 100644 --- a/tests/e2e/.eslintrc.js +++ b/tests/e2e/.eslintrc.js @@ -18,6 +18,14 @@ module.exports = { jasmine: true, }, }, + { + files: ['helpers/**/*.ts'], + extends: ['plugin:wdio/recommended'], + plugins: ['wdio'], + rules: { + '@typescript-eslint/no-namespace': 0, + }, + }, { files: ['**/*.js'], rules: { diff --git a/tests/e2e/helpers/dragAndDropByOffset.ts b/tests/e2e/helpers/dragAndDropByOffset.ts new file mode 100644 index 0000000000..e1be0875f1 --- /dev/null +++ b/tests/e2e/helpers/dragAndDropByOffset.ts @@ -0,0 +1,52 @@ +declare namespace WebdriverIOAsync { + interface Browser { + dragAndDropByOffset( + source: WebdriverIOAsync.Element, + x: number, + y?: number + ): Promise; + } +} + +browser.addCommand( + 'dragAndDropByOffset', + async ( + source: WebdriverIOAsync.Element, + offsetX: number, + offsetY: number = 0 + ) => { + // Assures us that the source element is in the viewport + // (`dragAndDrop` fails if its not the case) + await source.scrollIntoView(); + + const sourceLocation = await source.getLocation(); + + // WebdriverIO `dragAndDrop` method only works with an existing element as target, + // so we create a dummy element in the document to use as a target + const targetId = await browser.execute( + (browserSourceX, browserSourceY, browserOffsetX, browserOffsetY) => { + const target = document.createElement('div'); + target.id = `tmp-${Math.floor(Math.random() * 1e9)}`; + target.style.position = 'absolute'; + target.style.left = `${browserSourceX + browserOffsetX}px`; + target.style.top = `${browserSourceY + browserOffsetY}px`; + document.body.appendChild(target); + return target.id; + }, + sourceLocation.x, + sourceLocation.y, + offsetX, + offsetY + ); + const target = await browser.$(`#${targetId}`); + + // @ts-ignore: Ignore bad `dragAndDrop` method definition + await source.dragAndDrop(target); + + // Cleaning + await browser.execute( + browserTarget => document.body.removeChild(browserTarget), + target + ); + } +); diff --git a/tests/e2e/helpers/index.ts b/tests/e2e/helpers/index.ts new file mode 100644 index 0000000000..237909f76d --- /dev/null +++ b/tests/e2e/helpers/index.ts @@ -0,0 +1 @@ +import './dragAndDropByOffset'; diff --git a/tests/e2e/wdio.base.conf.js b/tests/e2e/wdio.base.conf.js index 8c735f7bd2..0f33533c68 100644 --- a/tests/e2e/wdio.base.conf.js +++ b/tests/e2e/wdio.base.conf.js @@ -68,12 +68,11 @@ module.exports = { * Hooks * https://webdriver.io/docs/options.html#hooks */ - - /* - * `before` hook (executed before test execution begins) registering TypeScript to compile our `.ts` files - * https://webdriver.io/docs/typescript.html - */ before() { + /* + * Register TypeScript to compile our `.ts` files + * https://webdriver.io/docs/typescript.html + */ require('ts-node').register({ files: true, transpileOnly: true, @@ -81,5 +80,11 @@ module.exports = { // instead of the directory from which `wdio` was called project: path.join(__dirname, './tsconfig.json'), }); + + /* + * Register helpers + * https://webdriver.io/docs/customcommands.html + */ + require('./helpers'); }, }; From bedd34c85f9fbab41861321bfb2de06785c0d628 Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Wed, 7 Aug 2019 16:31:19 +0200 Subject: [PATCH 13/94] chore: add commitizen and conventional-changelog --- tests/e2e/package.json | 9 + tests/e2e/yarn.lock | 1740 +++++++++++++++++++++++++++++++++++++++- 2 files changed, 1720 insertions(+), 29 deletions(-) diff --git a/tests/e2e/package.json b/tests/e2e/package.json index 838324b2d9..9911675cd7 100644 --- a/tests/e2e/package.json +++ b/tests/e2e/package.json @@ -15,6 +15,8 @@ "repository": "algolia/instantsearch-e2e-tests", "sideEffects": false, "scripts": { + "commit": "git-cz", + "version": "conventional-changelog -p angular -i CHANGELOG.md -s", "lint": "eslint --ext .js,.ts,.tsx .", "lint:fix": "eslint --ext .js,.ts,.tsx --fix .", "type-check": "tsc", @@ -30,6 +32,8 @@ "@types/node": "12.7.0", "@typescript-eslint/eslint-plugin": "1.13.0", "@typescript-eslint/parser": "1.13.0", + "conventional-changelog-cli": "2.0.23", + "cz-conventional-changelog": "3.0.2", "eslint": "6.1.0", "eslint-config-algolia": "13.4.0", "eslint-config-prettier": "6.0.0", @@ -47,5 +51,10 @@ "@wdio/selenium-standalone-service": "^5.11.2", "@wdio/spec-reporter": "^5.11.7", "@wdio/static-server-service": "^5.11.0" + }, + "config": { + "commitizen": { + "path": "./node_modules/cz-conventional-changelog" + } } } diff --git a/tests/e2e/yarn.lock b/tests/e2e/yarn.lock index 7507ba3886..0ee0a8c13b 100644 --- a/tests/e2e/yarn.lock +++ b/tests/e2e/yarn.lock @@ -18,6 +18,35 @@ esutils "^2.0.2" js-tokens "^4.0.0" +"@commitlint/execute-rule@^8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@commitlint/execute-rule/-/execute-rule-8.1.0.tgz#e8386bd0836b3dcdd41ebb9d5904bbeb447e4715" + integrity sha512-+vpH3RFuO6ypuCqhP2rSqTjFTQ7ClzXtUvXphpROv9v9+7zH4L+Ex+wZLVkL8Xj2cxefSLn/5Kcqa9XyJTn3kg== + +"@commitlint/load@>6.1.1": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@commitlint/load/-/load-8.1.0.tgz#63b72ae5bb9152b8fa5b17c5428053032a9a49c8" + integrity sha512-ra02Dvmd7Gp1+uFLzTY3yGOpHjPzl5T9wYg/xrtPJNiOWXvQ0Mw7THw+ucd1M5iLUWjvdavv2N87YDRc428wHg== + dependencies: + "@commitlint/execute-rule" "^8.1.0" + "@commitlint/resolve-extends" "^8.1.0" + babel-runtime "^6.23.0" + chalk "2.4.2" + cosmiconfig "^5.2.0" + lodash "4.17.14" + resolve-from "^5.0.0" + +"@commitlint/resolve-extends@^8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@commitlint/resolve-extends/-/resolve-extends-8.1.0.tgz#ed67f2ee484160ac8e0078bae52f172625157472" + integrity sha512-r/y+CeKW72Oa9BUctS1+I/MFCDiI3lfhwfQ65Tpfn6eZ4CuBYKzrCRi++GTHeAFKE3y8q1epJq5Rl/1GBejtBw== + dependencies: + "@types/node" "^12.0.2" + import-fresh "^3.0.0" + lodash "4.17.14" + resolve-from "^5.0.0" + resolve-global "^1.0.0" + "@types/eslint-visitor-keys@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" @@ -33,7 +62,7 @@ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.3.tgz#bdfd69d61e464dcc81b25159c270d75a73c1a636" integrity sha512-Il2DtDVRGDcqjDtE+rF8iqg1CArehSK84HZJCT7AMITlyXRBpuPhqGLDQMowraqqu1coEaimg4ZOqggt6L6L+A== -"@types/node@12.7.0": +"@types/node@12.7.0", "@types/node@^12.0.2": version "12.7.0" resolved "https://registry.yarnpkg.com/@types/node/-/node-12.7.0.tgz#545dde2a1a5c27d281cfb8308d6736e0708f5d6c" integrity sha512-vqcj1MVm2Sla4PpMfYKh1MyDN4D2f/mPIZD7RdAGqEsbE+JxfeqQHHVbRDQ0Nqn8i73gJa1HQ1Pu3+nH4Q0Yiw== @@ -102,6 +131,14 @@ dependencies: "@wdio/config" "^5.11.0" +JSONStream@^1.0.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" + integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + acorn-jsx@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.1.tgz#32a064fd925429216a09b141102bfdd185fae40e" @@ -112,6 +149,11 @@ acorn@^6.0.7: resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.2.1.tgz#3ed8422d6dec09e6121cc7a843ca86a330a86b51" integrity sha512-JD0xT5FCRDNyjDda3Lrg/IxFscp9q4tiYtxE1/nOzlKCk7hIRuYjhq1kCNkbPjMRMZuFq20HNQn1I9k8Oj0E+Q== +add-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa" + integrity sha1-anmQQ3ynNtXhKI25K9MmbV9csqo= + ajv@^6.10.0, ajv@^6.10.2, ajv@^6.5.5: version "6.10.2" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52" @@ -185,6 +227,31 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + +array-find-index@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" + integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= + +array-ify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" + integrity sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4= + array-includes@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d" @@ -193,6 +260,16 @@ array-includes@^3.0.3: define-properties "^1.1.2" es-abstract "^1.7.0" +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + +arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= + asn1@~0.2.3: version "0.2.4" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" @@ -205,6 +282,11 @@ assert-plus@1.0.0, assert-plus@^1.0.0: resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + astral-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" @@ -222,6 +304,11 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= +atob@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" @@ -232,6 +319,14 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== +babel-runtime@^6.23.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" @@ -242,6 +337,19 @@ base64-js@^1.0.2: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + bcrypt-pbkdf@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" @@ -264,6 +372,22 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +braces@^2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + buffer-crc32@^0.2.1, buffer-crc32@^0.2.13: version "0.2.13" resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" @@ -282,17 +406,83 @@ buffer@^5.1.0: base64-js "^1.0.2" ieee754 "^1.1.4" +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +cachedir@2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.2.0.tgz#19afa4305e05d79e417566882e0c8f960f62ff0e" + integrity sha512-VvxA0xhNqIIfg0V9AmJkDg91DaJwryutH5rVEZAhcNi4iJFj9f+QxmAjgK1LT9I8OgToX27fypX6/MeCXVbBjQ== + +caller-callsite@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" + integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= + dependencies: + callsites "^2.0.0" + +caller-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" + integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= + dependencies: + caller-callsite "^2.0.0" + +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= + callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== +camelcase-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" + integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc= + dependencies: + camelcase "^2.0.0" + map-obj "^1.0.0" + +camelcase-keys@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-4.2.0.tgz#a2aa5fb1af688758259c32c141426d78923b9b77" + integrity sha1-oqpfsa9oh1glnDLBQUJteJI7m3c= + dependencies: + camelcase "^4.1.0" + map-obj "^2.0.0" + quick-lru "^1.0.0" + +camelcase@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" + integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= + +camelcase@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= + caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= -chalk@^2.0.0, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.2: +chalk@2.4.2, chalk@^2.0.0, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -306,6 +496,16 @@ chardet@^0.7.0: resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + cli-cursor@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" @@ -318,6 +518,14 @@ cli-width@^2.0.0: resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" @@ -337,6 +545,45 @@ combined-stream@^1.0.6, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" +commander@~2.20.0: + version "2.20.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" + integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== + +commitizen@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/commitizen/-/commitizen-4.0.3.tgz#c19a4213257d0525b85139e2f36db7cc3b4f6dae" + integrity sha512-lxu0F/Iq4dudoFeIl5pY3h3CQJzkmQuh3ygnaOvqhAD8Wu2pYBI17ofqSuPHNsBTEOh1r1AVa9kR4Hp0FAHKcQ== + dependencies: + cachedir "2.2.0" + cz-conventional-changelog "3.0.1" + dedent "0.7.0" + detect-indent "6.0.0" + find-node-modules "2.0.0" + find-root "1.1.0" + fs-extra "8.1.0" + glob "7.1.4" + inquirer "6.5.0" + is-utf8 "^0.2.1" + lodash "4.17.15" + minimist "1.2.0" + shelljs "0.7.6" + strip-bom "4.0.0" + strip-json-comments "3.0.1" + +compare-func@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-1.3.2.tgz#99dd0ba457e1f9bc722b12c08ec33eeab31fa648" + integrity sha1-md0LpFfh+bxyKxLAjsM+6rMfpkg= + dependencies: + array-ify "^1.0.0" + dot-prop "^3.0.0" + +component-emitter@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + compress-commons@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-2.1.1.tgz#9410d9a534cf8435e3fbbb7c6ce48de2dc2f0610" @@ -357,11 +604,191 @@ contains-path@^0.1.0: resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= +conventional-changelog-angular@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.3.tgz#299fdd43df5a1f095283ac16aeedfb0a682ecab0" + integrity sha512-YD1xzH7r9yXQte/HF9JBuEDfvjxxwDGGwZU1+ndanbY0oFgA+Po1T9JDSpPLdP0pZT6MhCAsdvFKC4TJ4MTJTA== + dependencies: + compare-func "^1.3.1" + q "^1.5.1" + +conventional-changelog-atom@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/conventional-changelog-atom/-/conventional-changelog-atom-2.0.1.tgz#dc88ce650ffa9ceace805cbe70f88bfd0cb2c13a" + integrity sha512-9BniJa4gLwL20Sm7HWSNXd0gd9c5qo49gCi8nylLFpqAHhkFTj7NQfROq3f1VpffRtzfTQp4VKU5nxbe2v+eZQ== + dependencies: + q "^1.5.1" + +conventional-changelog-cli@2.0.23: + version "2.0.23" + resolved "https://registry.yarnpkg.com/conventional-changelog-cli/-/conventional-changelog-cli-2.0.23.tgz#3f6b2bb3e1e6a6f520f7fa514fe8fba2d92faab0" + integrity sha512-a/jDZHEUpSHQMAqeDrmrFhz9CKHBKhBGpJyc38BCfNjFA1RKchpq/Qqbo1BZwRLWrW/PX7IGsUicTyhniqUH9g== + dependencies: + add-stream "^1.0.0" + conventional-changelog "^3.1.10" + lodash "^4.14.14" + meow "^4.0.0" + tempfile "^1.1.1" + +conventional-changelog-codemirror@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/conventional-changelog-codemirror/-/conventional-changelog-codemirror-2.0.1.tgz#acc046bc0971460939a0cc2d390e5eafc5eb30da" + integrity sha512-23kT5IZWa+oNoUaDUzVXMYn60MCdOygTA2I+UjnOMiYVhZgmVwNd6ri/yDlmQGXHqbKhNR5NoXdBzSOSGxsgIQ== + dependencies: + q "^1.5.1" + +conventional-changelog-conventionalcommits@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.1.0.tgz#eb7d47a9c5f1a6f9846a649482294e4ac50d7683" + integrity sha512-J3xolGrH8PTxpCqueHOuZtv3Cp73SQOWiBQzlsaugZAZ+hZgcJBonmC+1bQbfGs2neC2S18p2L1Gx+nTEglJTQ== + dependencies: + compare-func "^1.3.1" + q "^1.5.1" + +conventional-changelog-core@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-4.0.0.tgz#a9e83889e43a21b05fa098a507cad475905a0439" + integrity sha512-+bZMeBUdjKxfyX2w6EST9U7zb85wxrGS3IV4H7SqPya44osNQbm3P+vyqfLs6s57FkoEamC93ioDEiguVLWmSQ== + dependencies: + conventional-changelog-writer "^4.0.7" + conventional-commits-parser "^3.0.3" + dateformat "^3.0.0" + get-pkg-repo "^1.0.0" + git-raw-commits "2.0.0" + git-remote-origin-url "^2.0.0" + git-semver-tags "^3.0.0" + lodash "^4.2.1" + normalize-package-data "^2.3.5" + q "^1.5.1" + read-pkg "^3.0.0" + read-pkg-up "^3.0.0" + through2 "^3.0.0" + +conventional-changelog-ember@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/conventional-changelog-ember/-/conventional-changelog-ember-2.0.2.tgz#284ffdea8c83ea8c210b65c5b4eb3e5cc0f4f51a" + integrity sha512-qtZbA3XefO/n6DDmkYywDYi6wDKNNc98MMl2F9PKSaheJ25Trpi3336W8fDlBhq0X+EJRuseceAdKLEMmuX2tg== + dependencies: + q "^1.5.1" + +conventional-changelog-eslint@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/conventional-changelog-eslint/-/conventional-changelog-eslint-3.0.2.tgz#e9eb088cda6be3e58b2de6a5aac63df0277f3cbe" + integrity sha512-Yi7tOnxjZLXlCYBHArbIAm8vZ68QUSygFS7PgumPRiEk+9NPUeucy5Wg9AAyKoBprSV3o6P7Oghh4IZSLtKCvQ== + dependencies: + q "^1.5.1" + +conventional-changelog-express@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/conventional-changelog-express/-/conventional-changelog-express-2.0.1.tgz#fea2231d99a5381b4e6badb0c1c40a41fcacb755" + integrity sha512-G6uCuCaQhLxdb4eEfAIHpcfcJ2+ao3hJkbLrw/jSK/eROeNfnxCJasaWdDAfFkxsbpzvQT4W01iSynU3OoPLIw== + dependencies: + q "^1.5.1" + +conventional-changelog-jquery@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/conventional-changelog-jquery/-/conventional-changelog-jquery-3.0.4.tgz#7eb598467b83db96742178e1e8d68598bffcd7ae" + integrity sha512-IVJGI3MseYoY6eybknnTf9WzeQIKZv7aNTm2KQsiFVJH21bfP2q7XVjfoMibdCg95GmgeFlaygMdeoDDa+ZbEQ== + dependencies: + q "^1.5.1" + +conventional-changelog-jshint@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/conventional-changelog-jshint/-/conventional-changelog-jshint-2.0.1.tgz#11c0e8283abf156a4ff78e89be6fdedf9bd72202" + integrity sha512-kRFJsCOZzPFm2tzRHULWP4tauGMvccOlXYf3zGeuSW4U0mZhk5NsjnRZ7xFWrTFPlCLV+PNmHMuXp5atdoZmEg== + dependencies: + compare-func "^1.3.1" + q "^1.5.1" + +conventional-changelog-preset-loader@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.2.0.tgz#571e2b3d7b53d65587bea9eedf6e37faa5db4fcc" + integrity sha512-zXB+5vF7D5Y3Cb/rJfSyCCvFphCVmF8mFqOdncX3BmjZwAtGAPfYrBcT225udilCKvBbHgyzgxqz2GWDB5xShQ== + +conventional-changelog-writer@^4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-4.0.7.tgz#e4b7d9cbea902394ad671f67108a71fa90c7095f" + integrity sha512-p/wzs9eYaxhFbrmX/mCJNwJuvvHR+j4Fd0SQa2xyAhYed6KBiZ780LvoqUUvsayP4R1DtC27czalGUhKV2oabw== + dependencies: + compare-func "^1.3.1" + conventional-commits-filter "^2.0.2" + dateformat "^3.0.0" + handlebars "^4.1.2" + json-stringify-safe "^5.0.1" + lodash "^4.2.1" + meow "^4.0.0" + semver "^6.0.0" + split "^1.0.0" + through2 "^3.0.0" + +conventional-changelog@^3.1.10: + version "3.1.10" + resolved "https://registry.yarnpkg.com/conventional-changelog/-/conventional-changelog-3.1.10.tgz#889a8daa4b7673a1dc1605746f9ae66546b373c1" + integrity sha512-6RDj31hL39HUkpqvPjRlOxAwJRwur8O2qu9m6R0FBNDGwCJyy4SYH9NfyshozxYSeklrauKRf3oSbyoEZVzu9Q== + dependencies: + conventional-changelog-angular "^5.0.3" + conventional-changelog-atom "^2.0.1" + conventional-changelog-codemirror "^2.0.1" + conventional-changelog-conventionalcommits "^4.1.0" + conventional-changelog-core "^4.0.0" + conventional-changelog-ember "^2.0.2" + conventional-changelog-eslint "^3.0.2" + conventional-changelog-express "^2.0.1" + conventional-changelog-jquery "^3.0.4" + conventional-changelog-jshint "^2.0.1" + conventional-changelog-preset-loader "^2.2.0" + +conventional-commit-types@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/conventional-commit-types/-/conventional-commit-types-2.1.1.tgz#352eb53f56fbc7c1a6c1ba059c2b6670c90b2a8a" + integrity sha512-0Ts+fEdmjqYDOQ1yZ+LNgdSPO335XZw9qC10M7CxtLP3nIMGmeMhmkM8Taffa4+MXN13bRPlp0CtH+QfOzKTzw== + +conventional-commits-filter@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-2.0.2.tgz#f122f89fbcd5bb81e2af2fcac0254d062d1039c1" + integrity sha512-WpGKsMeXfs21m1zIw4s9H5sys2+9JccTzpN6toXtxhpw2VNF2JUXwIakthKBy+LN4DvJm+TzWhxOMWOs1OFCFQ== + dependencies: + lodash.ismatch "^4.4.0" + modify-values "^1.0.0" + +conventional-commits-parser@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.0.3.tgz#c3f972fd4e056aa8b9b4f5f3d0e540da18bf396d" + integrity sha512-KaA/2EeUkO4bKjinNfGUyqPTX/6w9JGshuQRik4r/wJz7rUw3+D3fDG6sZSEqJvKILzKXFQuFkpPLclcsAuZcg== + dependencies: + JSONStream "^1.0.4" + is-text-path "^2.0.0" + lodash "^4.2.1" + meow "^4.0.0" + split2 "^2.0.0" + through2 "^3.0.0" + trim-off-newlines "^1.0.0" + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + +core-js@^2.4.0: + version "2.6.9" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.9.tgz#6b4b214620c834152e179323727fc19741b084f2" + integrity sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A== + core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= +cosmiconfig@^5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" + integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== + dependencies: + import-fresh "^2.0.0" + is-directory "^0.3.1" + js-yaml "^3.13.1" + parse-json "^4.0.0" + crc32-stream@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-3.0.1.tgz#cae6eeed003b0e44d739d279de5ae63b171b4e85" @@ -393,6 +820,49 @@ css-value@^0.0.1: resolved "https://registry.yarnpkg.com/css-value/-/css-value-0.0.1.tgz#5efd6c2eea5ea1fd6b6ac57ec0427b18452424ea" integrity sha1-Xv1sLupeof1rasV+wEJ7GEUkJOo= +currently-unhandled@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" + integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= + dependencies: + array-find-index "^1.0.1" + +cz-conventional-changelog@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/cz-conventional-changelog/-/cz-conventional-changelog-3.0.1.tgz#b1f207ae050355e7ada65aad5c52e9de3d0c8e5b" + integrity sha512-7KASIwB8/ClEyCRvQrCPbN7WkQnUSjSSVNyPM+gDJ0jskLi8h8N2hrdpyeCk7fIqKMRzziqVSOBTB8yyLTMHGQ== + dependencies: + chalk "^2.4.1" + conventional-commit-types "^2.0.0" + lodash.map "^4.5.1" + longest "^2.0.1" + right-pad "^1.0.1" + word-wrap "^1.0.3" + optionalDependencies: + "@commitlint/load" ">6.1.1" + +cz-conventional-changelog@3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/cz-conventional-changelog/-/cz-conventional-changelog-3.0.2.tgz#f6b9a406177ab07f9a3a087e06103a045b376260" + integrity sha512-MPxERbtQyVp0nnpCBiwzKGKmMBSswmCV3Jpef3Axqd5f3c/SOc6VFiSUlclOyZXBn3Xtf4snzt4O15hBTRb2gA== + dependencies: + chalk "^2.4.1" + commitizen "^4.0.3" + conventional-commit-types "^2.0.0" + lodash.map "^4.5.1" + longest "^2.0.1" + right-pad "^1.0.1" + word-wrap "^1.0.3" + optionalDependencies: + "@commitlint/load" ">6.1.1" + +dargs@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/dargs/-/dargs-4.1.0.tgz#03a9dbb4b5c2f139bf14ae53f0b8a2a6a86f4e17" + integrity sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc= + dependencies: + number-is-nan "^1.0.0" + dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" @@ -400,7 +870,12 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" -debug@^2.6.8, debug@^2.6.9: +dateformat@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" + integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== + +debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== @@ -414,6 +889,29 @@ debug@^4.0.1: dependencies: ms "^2.1.1" +decamelize-keys@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" + integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= + dependencies: + decamelize "^1.1.0" + map-obj "^1.0.0" + +decamelize@^1.1.0, decamelize@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + +dedent@0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= + deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" @@ -431,11 +929,43 @@ define-properties@^1.1.2, define-properties@^1.1.3: dependencies: object-keys "^1.0.12" +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= +detect-file@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" + integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= + +detect-indent@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.0.0.tgz#0abd0f549f69fc6659a254fe96786186b6f528fd" + integrity sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA== + diff@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.1.tgz#0c667cb467ebbb5cea7f14f135cc2dba7780a8ff" @@ -456,6 +986,13 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" +dot-prop@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-3.0.0.tgz#1b708af094a49c9a0e7dbcad790aba539dac1177" + integrity sha1-G3CK8JSknJoOfbyteQq6U52sEXc= + dependencies: + is-obj "^1.0.0" + dotenv@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.0.0.tgz#ed310c165b4e8a97bb745b0a9d99c31bda566440" @@ -481,7 +1018,7 @@ end-of-stream@^1.4.1: dependencies: once "^1.4.0" -error-ex@^1.2.0: +error-ex@^1.2.0, error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== @@ -680,6 +1217,41 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +expand-tilde@^2.0.0, expand-tilde@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" + integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI= + dependencies: + homedir-polyfill "^1.0.1" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + extend@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" @@ -694,6 +1266,20 @@ external-editor@^3.0.3: iconv-lite "^0.4.24" tmp "^0.0.33" +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + extsprintf@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" @@ -738,6 +1324,37 @@ file-entry-cache@^5.0.1: dependencies: flat-cache "^2.0.1" +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +find-node-modules@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/find-node-modules/-/find-node-modules-2.0.0.tgz#5db1fb9e668a3d451db3d618cd167cdd59e41b69" + integrity sha512-8MWIBRgJi/WpjjfVXumjPKCtmQ10B+fjx6zmSA+770GMJirLhWIzg8l763rhjl9xaeaHbnxPNRQKq2mgMhr+aw== + dependencies: + findup-sync "^3.0.0" + merge "^1.2.1" + +find-root@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" + integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== + +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + find-up@^2.0.0, find-up@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" @@ -745,6 +1362,16 @@ find-up@^2.0.0, find-up@^2.1.0: dependencies: locate-path "^2.0.0" +findup-sync@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1" + integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg== + dependencies: + detect-file "^1.0.0" + is-glob "^4.0.0" + micromatch "^3.0.4" + resolve-dir "^1.0.1" + flat-cache@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" @@ -759,6 +1386,11 @@ flatted@^2.0.0: resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08" integrity sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg== +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" @@ -773,11 +1405,27 @@ form-data@~2.3.2: combined-stream "^1.0.6" mime-types "^2.1.12" +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + fs-constants@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== +fs-extra@8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -793,11 +1441,32 @@ functional-red-black-tree@^1.0.1: resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= +get-pkg-repo@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz#c73b489c06d80cc5536c2c853f9e05232056972d" + integrity sha1-xztInAbYDMVTbCyFP54FIyBWly0= + dependencies: + hosted-git-info "^2.1.4" + meow "^3.3.0" + normalize-package-data "^2.3.0" + parse-github-repo-url "^1.3.0" + through2 "^2.0.0" + +get-stdin@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" + integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= + get-stdin@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + getpass@^0.1.1: version "0.1.7" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" @@ -805,6 +1474,40 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" +git-raw-commits@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.0.tgz#d92addf74440c14bcc5c83ecce3fb7f8a79118b5" + integrity sha512-w4jFEJFgKXMQJ0H0ikBk2S+4KP2VEjhCvLCNqbNRQC8BgGWgLKNCO7a9K9LI+TVT7Gfoloje502sEnctibffgg== + dependencies: + dargs "^4.0.1" + lodash.template "^4.0.2" + meow "^4.0.0" + split2 "^2.0.0" + through2 "^2.0.0" + +git-remote-origin-url@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz#5282659dae2107145a11126112ad3216ec5fa65f" + integrity sha1-UoJlna4hBxRaERJhEq0yFuxfpl8= + dependencies: + gitconfiglocal "^1.0.0" + pify "^2.3.0" + +git-semver-tags@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-3.0.0.tgz#fe10147824657662c82efd9341f0fa59f74ddcba" + integrity sha512-T4C/gJ9k2Bnxz+PubtcyiMtUUKrC+Nh9Q4zaECcnmVMwJgPhrNyP/Rf+YpdRqsJbCV/+kYrCH24Xg+IeAmbOPg== + dependencies: + meow "^4.0.0" + semver "^6.0.0" + +gitconfiglocal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b" + integrity sha1-QdBF84UaXqiPA/JMocYXgRRGS5s= + dependencies: + ini "^1.3.2" + glob-parent@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.0.0.tgz#1dc99f0f39b006d3e92c2c284068382f0c20e954" @@ -812,7 +1515,7 @@ glob-parent@^5.0.0: dependencies: is-glob "^4.0.1" -glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: +glob@7.1.4, glob@^7.0.0, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: version "7.1.4" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== @@ -824,12 +1527,39 @@ glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" +global-dirs@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" + integrity sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU= + dependencies: + ini "^1.3.4" + +global-modules@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" + integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== + dependencies: + global-prefix "^1.0.1" + is-windows "^1.0.1" + resolve-dir "^1.0.0" + +global-prefix@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" + integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4= + dependencies: + expand-tilde "^2.0.2" + homedir-polyfill "^1.0.1" + ini "^1.3.4" + is-windows "^1.0.1" + which "^1.2.14" + globals@^11.7.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -graceful-fs@^4.1.2, graceful-fs@^4.2.0: +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: version "4.2.1" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.1.tgz#1c1f0c364882c868f5bff6512146328336a11b1d" integrity sha512-b9usnbDGnD928gJB3LrCmxoibr3VE4U2SMo5PBuBnokWyDADTqDPXg4YpwKF1trpH+UbGp7QLicO3+aWEy0+mw== @@ -839,6 +1569,17 @@ grapheme-splitter@^1.0.2: resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== +handlebars@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.1.2.tgz#b6b37c1ced0306b221e094fc7aca3ec23b131b67" + integrity sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw== + dependencies: + neo-async "^2.6.0" + optimist "^0.6.1" + source-map "^0.6.1" + optionalDependencies: + uglify-js "^3.1.4" + har-schema@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" @@ -862,6 +1603,37 @@ has-symbols@^1.0.0: resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + has@^1.0.1, has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" @@ -869,6 +1641,13 @@ has@^1.0.1, has@^1.0.3: dependencies: function-bind "^1.1.1" +homedir-polyfill@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" + integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== + dependencies: + parse-passwd "^1.0.0" + hosted-git-info@^2.1.4: version "2.8.2" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.2.tgz#a35c3f355ac1249f1093c0c2a542ace8818c171a" @@ -902,6 +1681,14 @@ ignore@^4.0.6: resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== +import-fresh@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" + integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= + dependencies: + caller-path "^2.0.0" + resolve-from "^3.0.0" + import-fresh@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.1.0.tgz#6d33fa1dcef6df930fae003446f33415af905118" @@ -915,6 +1702,18 @@ imurmurhash@^0.1.4: resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= +indent-string@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" + integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA= + dependencies: + repeating "^2.0.0" + +indent-string@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" + integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= + inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -928,7 +1727,12 @@ inherits@2, inherits@^2.0.3, inherits@~2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -inquirer@^6.4.1: +ini@^1.3.2, ini@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== + +inquirer@6.5.0, inquirer@^6.4.1: version "6.5.0" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.0.tgz#2303317efc9a4ea7ec2e2df6f86569b734accf42" integrity sha512-scfHejeG/lVZSpvCXpsB4j/wQNPM5JC8kiElOI0OUTwmc1RTpXr4H32/HOlQHcZiYl2z2VElwuCVDRG8vFmbnA== @@ -947,26 +1751,106 @@ inquirer@^6.4.1: strip-ansi "^5.1.0" through "^2.3.6" +interpret@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" + integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw== + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + is-callable@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + is-date-object@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-directory@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" + integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= +is-finite@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" + integrity sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko= + dependencies: + number-is-nan "^1.0.0" + is-fullwidth-code-point@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" @@ -979,7 +1863,31 @@ is-glob@^4.0.0, is-glob@^4.0.1: dependencies: is-extglob "^2.1.1" -is-promise@^2.1.0: +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" + +is-obj@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= + +is-plain-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= + +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-promise@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= @@ -998,12 +1906,29 @@ is-symbol@^1.0.2: dependencies: has-symbols "^1.0.0" +is-text-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-2.0.0.tgz#b2484e2b720a633feb2e85b67dc193ff72c75636" + integrity sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw== + dependencies: + text-extensions "^2.0.0" + is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= -isarray@^1.0.0, isarray@~1.0.0: +is-utf8@^0.2.0, is-utf8@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= + +is-windows@^1.0.1, is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= @@ -1013,6 +1938,18 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" @@ -1036,6 +1973,11 @@ jsbn@~0.1.0: resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= +json-parse-better-errors@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" @@ -1051,11 +1993,23 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= -json-stringify-safe@~5.0.1: +json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + +jsonparse@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= + jsprim@^1.2.2: version "1.4.1" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" @@ -1066,6 +2020,30 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" + integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== + lazystream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4" @@ -1081,6 +2059,17 @@ levn@^0.3.0, levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" +load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + load-json-file@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" @@ -1091,6 +2080,16 @@ load-json-file@^2.0.0: pify "^2.0.0" strip-bom "^3.0.0" +load-json-file@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= + dependencies: + graceful-fs "^4.1.2" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.0.0" + locate-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" @@ -1099,6 +2098,11 @@ locate-path@^2.0.0: p-locate "^2.0.0" path-exists "^3.0.0" +lodash._reinterpolate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" + integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= + lodash.clonedeep@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" @@ -1119,6 +2123,11 @@ lodash.flatten@^4.4.0: resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= +lodash.ismatch@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" + integrity sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc= + lodash.isobject@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/lodash.isobject/-/lodash.isobject-3.0.2.tgz#3c8fb8d5b5bf4bf90ae06e14f2a530a4ed935e1d" @@ -1129,11 +2138,31 @@ lodash.isplainobject@^4.0.6: resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= +lodash.map@^4.5.1: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" + integrity sha1-dx7Hg540c9nEzeKLGTlMNWL09tM= + lodash.merge@^4.6.1: version "4.6.2" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== +lodash.template@^4.0.2: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" + integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A== + dependencies: + lodash._reinterpolate "^3.0.0" + lodash.templatesettings "^4.0.0" + +lodash.templatesettings@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz#e481310f049d3cf6d47e912ad09313b154f0fb33" + integrity sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ== + dependencies: + lodash._reinterpolate "^3.0.0" + lodash.unescape@4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/lodash.unescape/-/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c" @@ -1149,7 +2178,12 @@ lodash.zip@^4.2.0: resolved "https://registry.yarnpkg.com/lodash.zip/-/lodash.zip-4.2.0.tgz#ec6662e4896408ed4ab6c542a3990b72cc080020" integrity sha1-7GZi5IlkCO1KtsVCo5kLcswIACA= -lodash@^4.17.12, lodash@^4.17.14: +lodash@4.17.14: + version "4.17.14" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.14.tgz#9ce487ae66c96254fe20b599f21b6816028078ba" + integrity sha512-mmKYbW3GLuJeX+iGP+Y7Gp1AiGHGbXHCOh/jZmrawMmsE7MS4znI3RL2FsjbqOyMayHInjOeykW7PEajUk1/xw== + +lodash@4.17.15, lodash@^4.14.14, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.2.1: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== @@ -1164,6 +2198,19 @@ loglevel@^1.6.0: resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.3.tgz#77f2eb64be55a404c9fd04ad16d57c1d6d6b1280" integrity sha512-LoEDv5pgpvWgPF4kNYuIp0qqSJVWak/dML0RY74xlzMZiT9w77teNAwKYKWBTYjlokMirg+o3jBwp+vlLrcfAA== +longest@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/longest/-/longest-2.0.1.tgz#781e183296aa94f6d4d916dc335d0d17aefa23f8" + integrity sha1-eB4YMpaqlPbU2RbcM10NF676I/g= + +loud-rejection@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" + integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= + dependencies: + currently-unhandled "^0.4.1" + signal-exit "^3.0.0" + lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" @@ -1176,6 +2223,83 @@ make-error@^1.1.1: resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.5.tgz#efe4e81f6db28cadd605c70f29c831b58ef776c8" integrity sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g== +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + +map-obj@^1.0.0, map-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= + +map-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9" + integrity sha1-plzSkIepJZi4eRJXpSPgISIqwfk= + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + +meow@^3.3.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" + integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs= + dependencies: + camelcase-keys "^2.0.0" + decamelize "^1.1.2" + loud-rejection "^1.0.0" + map-obj "^1.0.1" + minimist "^1.1.3" + normalize-package-data "^2.3.4" + object-assign "^4.0.1" + read-pkg-up "^1.0.1" + redent "^1.0.0" + trim-newlines "^1.0.0" + +meow@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/meow/-/meow-4.0.1.tgz#d48598f6f4b1472f35bf6317a95945ace347f975" + integrity sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A== + dependencies: + camelcase-keys "^4.0.0" + decamelize-keys "^1.0.0" + loud-rejection "^1.0.0" + minimist "^1.1.3" + minimist-options "^3.0.1" + normalize-package-data "^2.3.4" + read-pkg-up "^3.0.0" + redent "^2.0.0" + trim-newlines "^2.0.0" + +merge@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.1.tgz#38bebf80c3220a8a487b6fcfb3941bb11720c145" + integrity sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ== + +micromatch@^3.0.4: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + mime-db@1.40.0: version "1.40.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32" @@ -1200,11 +2324,37 @@ minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" +minimist-options@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-3.0.2.tgz#fba4c8191339e13ecf4d61beb03f070103f3d954" + integrity sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ== + dependencies: + arrify "^1.0.1" + is-plain-obj "^1.1.0" + minimist@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= +minimist@1.2.0, minimist@^1.1.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= + +minimist@~0.0.1: + version "0.0.10" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= + +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + mkdirp@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" @@ -1212,6 +2362,11 @@ mkdirp@^0.5.1: dependencies: minimist "0.0.8" +modify-values@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" + integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -1227,17 +2382,39 @@ mute-stream@0.0.7: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= +neo-async@^2.6.0: + version "2.6.1" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" + integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== + nice-try@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== -normalize-package-data@^2.3.2: +normalize-package-data@^2.3.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.3.5: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== @@ -1252,16 +2429,49 @@ normalize-path@^3.0.0: resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + oauth-sign@~0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== +object-assign@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + object-keys@^1.0.12: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + dependencies: + isobject "^3.0.1" + object.values@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.0.tgz#bf6810ef5da3e5325790eaaa2be213ea84624da9" @@ -1286,6 +2496,14 @@ onetime@^2.0.0: dependencies: mimic-fn "^1.0.0" +optimist@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" + integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= + dependencies: + minimist "~0.0.1" + wordwrap "~0.0.2" + optionator@^0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" @@ -1298,7 +2516,7 @@ optionator@^0.8.2: type-check "~0.3.2" wordwrap "~1.0.0" -os-tmpdir@~1.0.2: +os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= @@ -1329,6 +2547,11 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" +parse-github-repo-url@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz#9e7d8bb252a6cb6ba42595060b7bf6df3dbc1f50" + integrity sha1-nn2LslKmy2ukJZUGC3v23z28H1A= + parse-json@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" @@ -1336,6 +2559,31 @@ parse-json@^2.2.0: dependencies: error-ex "^1.2.0" +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse-passwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" + integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= + dependencies: + pinkie-promise "^2.0.0" + path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" @@ -1356,6 +2604,15 @@ path-parse@^1.0.6: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + path-type@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" @@ -1363,16 +2620,40 @@ path-type@^2.0.0: dependencies: pify "^2.0.0" +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== + dependencies: + pify "^3.0.0" + performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= -pify@^2.0.0: +pify@^2.0.0, pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + pkg-dir@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" @@ -1380,6 +2661,11 @@ pkg-dir@^2.0.0: dependencies: find-up "^2.1.0" +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" @@ -1422,11 +2708,29 @@ punycode@^2.1.0: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== +q@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= + qs@~6.5.2: version "6.5.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== +quick-lru@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" + integrity sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g= + +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + read-pkg-up@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" @@ -1435,6 +2739,23 @@ read-pkg-up@^2.0.0: find-up "^2.0.0" read-pkg "^2.0.0" +read-pkg-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" + integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc= + dependencies: + find-up "^2.0.0" + read-pkg "^3.0.0" + +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + read-pkg@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" @@ -1444,7 +2765,25 @@ read-pkg@^2.0.0: normalize-package-data "^2.3.2" path-type "^2.0.0" -readable-stream@^2.0.0, readable-stream@^2.0.5, readable-stream@^2.3.6: +read-pkg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= + dependencies: + load-json-file "^4.0.0" + normalize-package-data "^2.3.2" + path-type "^3.0.0" + +"readable-stream@2 || 3", readable-stream@^3.0.1, readable-stream@^3.1.1, readable-stream@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc" + integrity sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@^2.0.0, readable-stream@^2.0.5, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== @@ -1457,20 +2796,64 @@ readable-stream@^2.0.0, readable-stream@^2.0.5, readable-stream@^2.3.6: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.0.1, readable-stream@^3.1.1, readable-stream@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc" - integrity sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ== +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" + resolve "^1.1.6" + +redent@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" + integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94= + dependencies: + indent-string "^2.1.0" + strip-indent "^1.0.1" + +redent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-2.0.0.tgz#c1b2007b42d57eb1389079b3c8333639d5e1ccaa" + integrity sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo= + dependencies: + indent-string "^3.0.0" + strip-indent "^2.0.0" + +regenerator-runtime@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" regexpp@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== +repeat-element@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== + +repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= + dependencies: + is-finite "^1.0.0" + request@^2.83.0: version "2.88.0" resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" @@ -1497,12 +2880,42 @@ request@^2.83.0: tunnel-agent "^0.6.0" uuid "^3.3.2" +resolve-dir@^1.0.0, resolve-dir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" + integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M= + dependencies: + expand-tilde "^2.0.0" + global-modules "^1.0.0" + +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha1-six699nWiBvItuZTM17rywoYh0g= + resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== -resolve@^1.10.0, resolve@^1.11.0, resolve@^1.5.0: +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve-global@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/resolve-global/-/resolve-global-1.0.0.tgz#a2a79df4af2ca3f49bf77ef9ddacd322dad19255" + integrity sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw== + dependencies: + global-dirs "^0.1.1" + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + +resolve@^1.1.6, resolve@^1.10.0, resolve@^1.11.0, resolve@^1.5.0: version "1.12.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6" integrity sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w== @@ -1524,11 +2937,21 @@ restore-cursor@^2.0.0: onetime "^2.0.0" signal-exit "^3.0.2" +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + rgb2hex@^0.1.0: version "0.1.9" resolved "https://registry.yarnpkg.com/rgb2hex/-/rgb2hex-0.1.9.tgz#5d3e0e14b0177b568e6f0d5b43e34fbfdb670346" integrity sha512-32iuQzhOjyT+cv9aAFRBJ19JgHwzQwbjUhH3Fj2sWW2EEGAW8fpFrDFP5ndoKDxJaLO06x1hE3kyuIFrUQtybQ== +right-pad@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/right-pad/-/right-pad-1.0.1.tgz#8ca08c2cbb5b55e74dafa96bf7fd1a27d568c8d0" + integrity sha1-jKCMLLtbVedNr6lr9/0aJ9VoyNA= + rimraf@2.6.3: version "2.6.3" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" @@ -1560,6 +2983,13 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" + "safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" @@ -1575,7 +3005,7 @@ semver@5.5.0: resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" integrity sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA== -semver@^6.1.2: +semver@^6.0.0, semver@^6.1.2: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== @@ -1587,6 +3017,16 @@ serialize-error@^4.1.0: dependencies: type-fest "^0.3.0" +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" @@ -1599,7 +3039,16 @@ shebang-regex@^1.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= -signal-exit@^3.0.2: +shelljs@0.7.6: + version "0.7.6" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.6.tgz#379cccfb56b91c8601e4793356eb5382924de9ad" + integrity sha1-N5zM+1a5HIYB5HkzVutTgpJN6a0= + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" + +signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= @@ -1613,6 +3062,47 @@ slice-ansi@^2.1.0: astral-regex "^1.0.0" is-fullwidth-code-point "^2.0.0" +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +source-map-resolve@^0.5.0: + version "0.5.2" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" + integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA== + dependencies: + atob "^2.1.1" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + source-map-support@^0.5.6: version "0.5.13" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" @@ -1621,7 +3111,17 @@ source-map-support@^0.5.6: buffer-from "^1.0.0" source-map "^0.6.0" -source-map@^0.6.0: +source-map-url@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= + +source-map@^0.5.6: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== @@ -1652,6 +3152,27 @@ spdx-license-ids@^3.0.0: resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + +split2@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/split2/-/split2-2.2.0.tgz#186b2575bcf83e85b7d18465756238ee4ee42493" + integrity sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw== + dependencies: + through2 "^2.0.2" + +split@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" + integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== + dependencies: + through "2" + sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -1672,6 +3193,14 @@ sshpk@^1.7.0: safer-buffer "^2.0.2" tweetnacl "~0.14.0" +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + string-width@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" @@ -1717,12 +3246,36 @@ strip-ansi@^5.1.0, strip-ansi@^5.2.0: dependencies: ansi-regex "^4.1.0" +strip-bom@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= + dependencies: + is-utf8 "^0.2.0" + strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= -strip-json-comments@^3.0.1: +strip-indent@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" + integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI= + dependencies: + get-stdin "^4.0.1" + +strip-indent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" + integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= + +strip-json-comments@3.0.1, strip-json-comments@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7" integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw== @@ -1755,12 +3308,40 @@ tar-stream@^2.1.0: inherits "^2.0.3" readable-stream "^3.1.1" +tempfile@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/tempfile/-/tempfile-1.1.1.tgz#5bcc4eaecc4ab2c707d8bc11d99ccc9a2cb287f2" + integrity sha1-W8xOrsxKsscH2LwR2ZzMmiyyh/I= + dependencies: + os-tmpdir "^1.0.0" + uuid "^2.0.1" + +text-extensions@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-2.0.0.tgz#43eabd1b495482fae4a2bf65e5f56c29f69220f6" + integrity sha512-F91ZqLgvi1E0PdvmxMgp+gcf6q8fMH7mhdwWfzXnl1k+GbpQDmi8l7DzLC5JTASKbwpY3TfxajAUzAXcv2NmsQ== + text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= -through@^2.3.6: +through2@^2.0.0, through2@^2.0.2: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +through2@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/through2/-/through2-3.0.1.tgz#39276e713c3302edf9e388dd9c812dd3b825bd5a" + integrity sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww== + dependencies: + readable-stream "2 || 3" + +through@2, "through@>=2.2.7 <3", through@^2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= @@ -1772,6 +3353,31 @@ tmp@^0.0.33: dependencies: os-tmpdir "~1.0.2" +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + tough-cookie@~2.4.3: version "2.4.3" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" @@ -1780,6 +3386,21 @@ tough-cookie@~2.4.3: psl "^1.1.24" punycode "^1.4.1" +trim-newlines@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" + integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= + +trim-newlines@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20" + integrity sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA= + +trim-off-newlines@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3" + integrity sha1-n5up2e+odkw4dpi8v+sshI8RrbM= + ts-node@^8.3.0: version "8.3.0" resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.3.0.tgz#e4059618411371924a1fb5f3b125915f324efb57" @@ -1832,6 +3453,37 @@ typescript@^3.5.3: resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.5.3.tgz#c830f657f93f1ea846819e929092f5fe5983e977" integrity sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g== +uglify-js@^3.1.4: + version "3.6.0" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.6.0.tgz#704681345c53a8b2079fb6cec294b05ead242ff5" + integrity sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg== + dependencies: + commander "~2.20.0" + source-map "~0.6.1" + +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + uri-js@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" @@ -1839,11 +3491,26 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= +uuid@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" + integrity sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho= + uuid@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" @@ -1902,13 +3569,23 @@ webdriverio@5.11.13: serialize-error "^4.1.0" webdriver "^5.11.13" -which@^1.2.9: +which@^1.2.14, which@^1.2.9: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== dependencies: isexe "^2.0.0" +word-wrap@^1.0.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +wordwrap@~0.0.2: + version "0.0.3" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" + integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= + wordwrap@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" @@ -1926,6 +3603,11 @@ write@1.0.3: dependencies: mkdirp "^0.5.1" +xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + yallist@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" From b37da9c48d5f3b1b513036bf04ddcbc1734f3f9e Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Wed, 7 Aug 2019 18:38:48 +0200 Subject: [PATCH 14/94] chore: update README --- tests/e2e/README.md | 90 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 89 insertions(+), 1 deletion(-) diff --git a/tests/e2e/README.md b/tests/e2e/README.md index c844a7491b..35c109718c 100644 --- a/tests/e2e/README.md +++ b/tests/e2e/README.md @@ -1 +1,89 @@ -# instantsearch-e2e-tests \ No newline at end of file +# End-2-End test suite for InstantSearch + +This repository contains the end-2-end test suite for [InstantSearch](https://github.com/algolia/instantsearch.js). + +## Installation + +Install `instantsearch-e2e-tests` and its peedDependencies in your InstantSearch project: + +```bash +yarn add --dev \ +instantsearch-e2e-tests \ +@wdio/cli @wdio/jasmine-framework @wdio/spec-reporter \ +@wdio/static-server-service \ +@wdio/local-runner @wdio/selenium-standalone-service \ +@wdio/sauce-service +``` + +## Running the test suite + +In addition to the test suite this package contains two [WebdriverIO](https://webdriver.io) configurations: + +- `local`: Run the test suite on [Chrome browser](https://google.com/chrome) on your local machine. +- `saucelabs`: Run the test suite on multiple browsers on the [Sauce Labs service](https://saucelabs.com). + +All configurations will run a static web server on your machine on port `5000` to serve the content of the `website` directory in your project, containing the InstantSearch demos to run our tests against. + +### Locally + +To run the test suite locally create a `wdio.local.conf.js` file in your project root and import the `local` configuration. + +```js +const { local } = require('instantsearch-e2e-tests'); + +exports.config = local; +``` + +Then execute the following command to run the test suite. + +```bash +./node_modules/.bin/wdio wdio.local.conf.js +``` + +### On Sauce Labs + +To run the test suite on Sauce Labs create a `wdio.saucelabs.conf.js` file in your project root and import the `saucelabs` configuration. + +```js +const { saucelabs } = require('instantsearch-e2e-tests'); + +exports.config = saucelabs; +``` + +#### Credentials + +You'll need a username and access key to be able to run the test suite on Sauce Labs. You can find them in the User **Profile** > **User Settings** section of your Sauce Labs dashboard. + +`instantsearch-e2-tests` will read the username and access key from the `SAUCE_USERNAME` and `SAUCE_ACCESS_KEY` environment variables respectively. More information about [setting up environment variables for Sauce Labs](https://wiki.saucelabs.com/display/DOCS/Best+Practice%3A+Use+Environment+Variables+for+Authentication+Credentials). + +Alternatively you can store them in a `.env` file at the root of your project, `instantsearch-e2e-tests` will automatically load them using [dotenv](https://github.com/motdotla/dotenv). **But don't forget to add this file to your `.gitignore`.** + +Once your config file created and your credentials set you can execute the following command to run the test suite. + +```bash +./node_modules/.bin/wdio wdio.saucelabs.conf.js +``` + +## Overriding configuration + +The default configuration can easily be overridden if you need to change some project specific settings. + +```js +const { local } = require('instantsearch-e2e-tests'); + +exports.config = { + ...local, + /* + * Run local tests on Firefox instead of Chrome + */ + capabilities: [ + { + browserName: 'firefox', + }, + ], +}; +``` + +# License + +instantsearch-e2-tests is licensed under the [MIT License](http://www.opensource.org/licenses/mit-license.php). From 4898d6d8eaec269310f770dfc19b495a6bef0857 Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Fri, 9 Aug 2019 18:08:07 +0200 Subject: [PATCH 15/94] chore: add files field to package.json --- tests/e2e/package.json | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tests/e2e/package.json b/tests/e2e/package.json index 9911675cd7..a131c83a0f 100644 --- a/tests/e2e/package.json +++ b/tests/e2e/package.json @@ -12,6 +12,14 @@ ], "author": "Algolia ", "license": "MIT", + "files": [ + "index.js", + "wdio.base.conf.js", + "wdio.local.conf.js", + "wdio.saucelabs.conf.js", + "helpers", + "specs" + ], "repository": "algolia/instantsearch-e2e-tests", "sideEffects": false, "scripts": { From 61dce67d9dfa6a91f58064cd3e4a54315b19ed40 Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Mon, 12 Aug 2019 14:00:54 +0200 Subject: [PATCH 16/94] fix(spec): fix stale element reference exceptions --- tests/e2e/helpers/dragAndDropByOffset.ts | 10 ++++++---- tests/e2e/specs/price-range.spec.ts | 16 ++++++---------- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/tests/e2e/helpers/dragAndDropByOffset.ts b/tests/e2e/helpers/dragAndDropByOffset.ts index e1be0875f1..c19513d6fe 100644 --- a/tests/e2e/helpers/dragAndDropByOffset.ts +++ b/tests/e2e/helpers/dragAndDropByOffset.ts @@ -44,9 +44,11 @@ browser.addCommand( await source.dragAndDrop(target); // Cleaning - await browser.execute( - browserTarget => document.body.removeChild(browserTarget), - target - ); + await browser.execute(browserTargetId => { + const el = document.getElementById(browserTargetId); + if (el) { + document.body.removeChild(el); + } + }, targetId); } ); diff --git a/tests/e2e/specs/price-range.spec.ts b/tests/e2e/specs/price-range.spec.ts index 00cc855a5c..7a2393f018 100644 --- a/tests/e2e/specs/price-range.spec.ts +++ b/tests/e2e/specs/price-range.spec.ts @@ -19,14 +19,12 @@ describe('InstantSearch - Search on specific price range', () => { await browser.dragAndDropByOffset(lowerHandle, 54); + // There is a difference between steps in browsers so we cannot assert on a strict value const tooltip = await browser.$( - '.ais-RangeSlider .rheostat-handle-lower .rheostat-tooltip' + '//*[contains(@class, "rheostat-tooltip") and normalize-space() = "971"]|//*[contains(@class, "rheostat-tooltip") and normalize-space() = "981"]' ); - lowerBound = Number((await tooltip.getText()).replace(',', '')); - // There is a difference between steps in browsers so we cannot assert on a strict `lowerBound` value - expect(lowerBound >= 971).toBe(true); - expect(lowerBound <= 981).toBe(true); + lowerBound = Number((await tooltip.getText()).replace(',', '')); }); it(`waits for the results list to be updated (wait for all the prices to be > lowerBound)`, async () => { @@ -47,14 +45,12 @@ describe('InstantSearch - Search on specific price range', () => { await browser.dragAndDropByOffset(upperHandle, -146); + // There is a difference between steps in browsers so we cannot assert on a strict value const tooltip = await browser.$( - '.ais-RangeSlider .rheostat-handle-upper .rheostat-tooltip' + '//*[contains(@class, "rheostat-tooltip") and normalize-space() = "1,971"]|//*[contains(@class, "rheostat-tooltip") and normalize-space() = "1,981"]' ); - upperBound = Number((await tooltip.getText()).replace(',', '')); - // There is a difference between steps in browsers so we cannot assert on a strict `upperBound` value - expect(upperBound >= 1971).toBe(true); - expect(upperBound <= 1981).toBe(true); + upperBound = Number((await tooltip.getText()).replace(',', '')); }); it(`waits for the results list to be updated (wait for all the prices to be < upperBound)`, async () => { From ac26bf2d5fcad6deed53e93afb68c2f8ddbb68cc Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Mon, 12 Aug 2019 15:35:25 +0200 Subject: [PATCH 17/94] fix(typescript): fix TypeScript configuration to transpile tests when in node_modules --- tests/e2e/wdio.base.conf.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tests/e2e/wdio.base.conf.js b/tests/e2e/wdio.base.conf.js index 0f33533c68..a6a991fc7f 100644 --- a/tests/e2e/wdio.base.conf.js +++ b/tests/e2e/wdio.base.conf.js @@ -74,8 +74,12 @@ module.exports = { * https://webdriver.io/docs/typescript.html */ require('ts-node').register({ - files: true, + // Only transpile our files without typechecking them, it makes test + // faster and exempts us from installing type definitions to run them transpileOnly: true, + // Force `ts-node` to compile files in `node_modules` directory + // (ignored by default), since our tests will be stored in it + ignore: [], // Force `ts-node` to use the config file from the package root // instead of the directory from which `wdio` was called project: path.join(__dirname, './tsconfig.json'), From 467564573b37b27af704578eedf2cedf5b3f5833 Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Mon, 12 Aug 2019 17:02:47 +0200 Subject: [PATCH 18/94] docs(readme): update package name in installation instructions --- tests/e2e/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/e2e/README.md b/tests/e2e/README.md index 35c109718c..c45f4872b1 100644 --- a/tests/e2e/README.md +++ b/tests/e2e/README.md @@ -8,7 +8,7 @@ Install `instantsearch-e2e-tests` and its peedDependencies in your InstantSearch ```bash yarn add --dev \ -instantsearch-e2e-tests \ +algolia/instantsearch-e2e-tests \ @wdio/cli @wdio/jasmine-framework @wdio/spec-reporter \ @wdio/static-server-service \ @wdio/local-runner @wdio/selenium-standalone-service \ From dc7d21534b8e1b3f08ad0ed6d10b087ea1cfa18c Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Mon, 12 Aug 2019 17:05:10 +0200 Subject: [PATCH 19/94] chore(release): 1.0.0 --- tests/e2e/CHANGELOG.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 tests/e2e/CHANGELOG.md diff --git a/tests/e2e/CHANGELOG.md b/tests/e2e/CHANGELOG.md new file mode 100644 index 0000000000..da370cc123 --- /dev/null +++ b/tests/e2e/CHANGELOG.md @@ -0,0 +1,18 @@ +# 1.0.0 (2019-08-12) + + +### Bug Fixes + +* **spec:** fix stale element reference exceptions ([e347fc8](https://github.com/algolia/instantsearch-e2e-tests/commit/e347fc8)) +* **typescript:** fix TypeScript configuration to transpile tests when in node_modules ([0d88b76](https://github.com/algolia/instantsearch-e2e-tests/commit/0d88b76)) + + +### Features + +* **spec:** add spec for search on specific brand and query filtering ([39f0ea0](https://github.com/algolia/instantsearch-e2e-tests/commit/39f0ea0)) +* **spec:** add spec for search on specific price range ([5345c09](https://github.com/algolia/instantsearch-e2e-tests/commit/5345c09)) +* **webdriverio:** add WebdriverIO local configuration ([e35cab5](https://github.com/algolia/instantsearch-e2e-tests/commit/e35cab5)) +* **webdriverio:** add WebdriverIO Sauce Labs configuration ([9e044da](https://github.com/algolia/instantsearch-e2e-tests/commit/9e044da)) + + + From 77685c3f5b87bc2f42f7d8024d7a2088a7254792 Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Wed, 14 Aug 2019 18:07:08 +0200 Subject: [PATCH 20/94] fix(spec): wait for the browser to be maximized before running the test on brand an query filtering --- tests/e2e/specs/brand-and-query.spec.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/e2e/specs/brand-and-query.spec.ts b/tests/e2e/specs/brand-and-query.spec.ts index 12db0861a5..aff6f41e2d 100644 --- a/tests/e2e/specs/brand-and-query.spec.ts +++ b/tests/e2e/specs/brand-and-query.spec.ts @@ -1,7 +1,7 @@ describe('InstantSearch - Search on specific brand and query filtering', () => { - beforeAll(() => { + beforeAll(async () => { if (!browser.isMobile) { - browser.maximizeWindow(); + await browser.maximizeWindow(); } }); From f7a7b35114035fa1b684f2cd0f74ea43e9f455e7 Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Wed, 14 Aug 2019 18:09:57 +0200 Subject: [PATCH 21/94] refactor(spec): remove extraneous timeouts --- tests/e2e/specs/brand-and-query.spec.ts | 3 +-- tests/e2e/specs/price-range.spec.ts | 6 +++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/tests/e2e/specs/brand-and-query.spec.ts b/tests/e2e/specs/brand-and-query.spec.ts index aff6f41e2d..7a72718000 100644 --- a/tests/e2e/specs/brand-and-query.spec.ts +++ b/tests/e2e/specs/brand-and-query.spec.ts @@ -21,8 +21,7 @@ describe('InstantSearch - Search on specific brand and query filtering', () => { it('waits for the results list to be updated (wait for the "macbook" word to be highlighted)', async () => { await browser.waitUntil( - async () => (await browser.$$('mark=MacBook')).length > 0, - 10000 + async () => (await browser.$$('mark=MacBook')).length > 0 ); }); diff --git a/tests/e2e/specs/price-range.spec.ts b/tests/e2e/specs/price-range.spec.ts index 7a2393f018..f4d7e30f1c 100644 --- a/tests/e2e/specs/price-range.spec.ts +++ b/tests/e2e/specs/price-range.spec.ts @@ -30,12 +30,12 @@ describe('InstantSearch - Search on specific price range', () => { it(`waits for the results list to be updated (wait for all the prices to be > lowerBound)`, async () => { await browser.waitUntil(async () => { const hits = await browser.$$('.hit-info-container strong'); - const hitsText = await Promise.all(hits.map(hit => hit.getText())); + const hitsText = await browser.getTextFromElements(hits); return ( hitsText.filter(text => Number(text.replace(',', '')) < lowerBound) .length === 0 ); - }, 10000); + }); }); it('drag and drop upper handle to the left', async () => { @@ -61,7 +61,7 @@ describe('InstantSearch - Search on specific price range', () => { hitsText.filter(text => Number(text.replace(',', '')) > upperBound) .length === 0 ); - }, 10000); + }); }); it('must match the expected results', async () => { From 9c3ae7590600bb0f03cf7c5d2209ceae21a2293f Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Wed, 14 Aug 2019 18:15:27 +0200 Subject: [PATCH 22/94] feat(helper): add getTextFromElements helper --- tests/e2e/helpers/getTextFromElements.ts | 17 +++++++++++++++++ tests/e2e/helpers/index.ts | 1 + tests/e2e/specs/brand-and-query.spec.ts | 2 +- tests/e2e/specs/price-range.spec.ts | 4 ++-- 4 files changed, 21 insertions(+), 3 deletions(-) create mode 100644 tests/e2e/helpers/getTextFromElements.ts diff --git a/tests/e2e/helpers/getTextFromElements.ts b/tests/e2e/helpers/getTextFromElements.ts new file mode 100644 index 0000000000..4108ec4eeb --- /dev/null +++ b/tests/e2e/helpers/getTextFromElements.ts @@ -0,0 +1,17 @@ +declare namespace WebdriverIOAsync { + interface Browser { + getTextFromElements( + elements: WebdriverIOAsync.Element[] + ): Promise; + } +} + +browser.addCommand('getTextFromElements', function( + elements: WebdriverIOAsync.Element[] +) { + return browser.execute(function(browserElements) { + return browserElements.map(function(browserElement: Element) { + return browserElement.textContent || ''; + }); + }, elements); +}); diff --git a/tests/e2e/helpers/index.ts b/tests/e2e/helpers/index.ts index 237909f76d..9bd9b77df9 100644 --- a/tests/e2e/helpers/index.ts +++ b/tests/e2e/helpers/index.ts @@ -1 +1,2 @@ import './dragAndDropByOffset'; +import './getTextFromElements'; diff --git a/tests/e2e/specs/brand-and-query.spec.ts b/tests/e2e/specs/brand-and-query.spec.ts index 7a72718000..e503fd9400 100644 --- a/tests/e2e/specs/brand-and-query.spec.ts +++ b/tests/e2e/specs/brand-and-query.spec.ts @@ -27,7 +27,7 @@ describe('InstantSearch - Search on specific brand and query filtering', () => { it('must match the expected results', async () => { const hits = await browser.$$('.hit h1'); - const hitsText = await Promise.all(hits.map(hit => hit.getText())); + const hitsText = await browser.getTextFromElements(hits); // Compare them to expected titles expect(hitsText).toEqual([ diff --git a/tests/e2e/specs/price-range.spec.ts b/tests/e2e/specs/price-range.spec.ts index f4d7e30f1c..1e54182fe1 100644 --- a/tests/e2e/specs/price-range.spec.ts +++ b/tests/e2e/specs/price-range.spec.ts @@ -56,7 +56,7 @@ describe('InstantSearch - Search on specific price range', () => { it(`waits for the results list to be updated (wait for all the prices to be < upperBound)`, async () => { await browser.waitUntil(async () => { const hits = await browser.$$('.hit-info-container strong'); - const hitsText = await Promise.all(hits.map(hit => hit.getText())); + const hitsText = await browser.getTextFromElements(hits); return ( hitsText.filter(text => Number(text.replace(',', '')) > upperBound) .length === 0 @@ -66,7 +66,7 @@ describe('InstantSearch - Search on specific price range', () => { it('must match the expected results', async () => { const hits = await browser.$$('.hit h1'); - const hitsText = await Promise.all(hits.map(hit => hit.getText())); + const hitsText = await browser.getTextFromElements(hits); // Compare them to expected titles expect(hitsText).toEqual([ From c65c14ebef43c927777db9c9a130d4308d781786 Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Wed, 14 Aug 2019 18:17:07 +0200 Subject: [PATCH 23/94] fix(helper): fix dragAndDropByOffset helper Internet Explorer 11 compatibility --- tests/e2e/helpers/dragAndDropByOffset.ts | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/tests/e2e/helpers/dragAndDropByOffset.ts b/tests/e2e/helpers/dragAndDropByOffset.ts index c19513d6fe..a841aa8937 100644 --- a/tests/e2e/helpers/dragAndDropByOffset.ts +++ b/tests/e2e/helpers/dragAndDropByOffset.ts @@ -23,13 +23,14 @@ browser.addCommand( // WebdriverIO `dragAndDrop` method only works with an existing element as target, // so we create a dummy element in the document to use as a target + /* eslint-disable prefer-template */ const targetId = await browser.execute( - (browserSourceX, browserSourceY, browserOffsetX, browserOffsetY) => { + function(browserSourceX, browserSourceY, browserOffsetX, browserOffsetY) { const target = document.createElement('div'); - target.id = `tmp-${Math.floor(Math.random() * 1e9)}`; + target.id = 'tmp-' + Math.floor(Math.random() * 1e9); target.style.position = 'absolute'; - target.style.left = `${browserSourceX + browserOffsetX}px`; - target.style.top = `${browserSourceY + browserOffsetY}px`; + target.style.left = browserSourceX + browserOffsetX + 'px'; + target.style.top = browserSourceY + browserOffsetY + 'px'; document.body.appendChild(target); return target.id; }, @@ -38,13 +39,14 @@ browser.addCommand( offsetX, offsetY ); + /* eslint-enable prefer-template */ const target = await browser.$(`#${targetId}`); // @ts-ignore: Ignore bad `dragAndDrop` method definition await source.dragAndDrop(target); // Cleaning - await browser.execute(browserTargetId => { + await browser.execute(function(browserTargetId) { const el = document.getElementById(browserTargetId); if (el) { document.body.removeChild(el); From 67e6ec23c4cfbebc079c5376dc116fc6a8391e82 Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Wed, 14 Aug 2019 18:20:13 +0200 Subject: [PATCH 24/94] fix(spec): fix Internet Explorer 11 compatibility for test on brand and query filtering --- tests/e2e/specs/brand-and-query.spec.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/tests/e2e/specs/brand-and-query.spec.ts b/tests/e2e/specs/brand-and-query.spec.ts index e503fd9400..05fe19f25f 100644 --- a/tests/e2e/specs/brand-and-query.spec.ts +++ b/tests/e2e/specs/brand-and-query.spec.ts @@ -12,11 +12,23 @@ describe('InstantSearch - Search on specific brand and query filtering', () => { it('selects "Apple" brand in list', async () => { const brand = await browser.$('.ais-RefinementList-labelText=Apple'); await brand.click(); + + // Changing the URL will also change the page element IDs in Internet Explorer + // Not waiting for the URL to be properly updated before continuing can make the tests to fail + await browser.waitUntil(async () => + (await browser.getUrl()).includes('brands=Apple') + ); }); it('fills search input with "macbook"', async () => { const searchInput = await browser.$('[type=search]'); + // In Internet Explorer the input must be focused before updating its value + await searchInput.click(); await searchInput.setValue('macbook'); + + await browser.waitUntil(async () => + (await browser.getUrl()).includes('query=macbook') + ); }); it('waits for the results list to be updated (wait for the "macbook" word to be highlighted)', async () => { From 04265d8ebef215d893e0ce67d657539edaeddc88 Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Wed, 14 Aug 2019 18:22:02 +0200 Subject: [PATCH 25/94] feat(webdriverio): add Internet Explorer 11 to the Sauce Labs configuration --- tests/e2e/wdio.saucelabs.conf.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/tests/e2e/wdio.saucelabs.conf.js b/tests/e2e/wdio.saucelabs.conf.js index a99dba2ae8..5028e3c783 100644 --- a/tests/e2e/wdio.saucelabs.conf.js +++ b/tests/e2e/wdio.saucelabs.conf.js @@ -67,5 +67,21 @@ module.exports = { seleniumVersion: '3.11.0', }, }, + { + browserName: 'internet explorer', + browserVersion: '11.285', + /* + * Sauce Labs specific options + * https://wiki.saucelabs.com/display/DOCS/Test+Configuration+Options + */ + 'sauce:options': { + screenResolution: '1680x1050', + }, + 'se:ieOptions': { + // Required for drag and drop to work + // https://stackoverflow.com/questions/14299392/selenium-webdriver-draganddrop-for-ie9 + requireWindowFocus: true, + }, + }, ], }; From 1dca879437a8c63f2a0f7c9bd96666b30539e373 Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Mon, 19 Aug 2019 11:12:43 +0200 Subject: [PATCH 26/94] chore(release): update release default commit message --- tests/e2e/.yarnrc | 1 + 1 file changed, 1 insertion(+) create mode 100644 tests/e2e/.yarnrc diff --git a/tests/e2e/.yarnrc b/tests/e2e/.yarnrc new file mode 100644 index 0000000000..e5332162b1 --- /dev/null +++ b/tests/e2e/.yarnrc @@ -0,0 +1 @@ +version-git-message "chore(release): %s" From 4c7e7d9a41e80f53c443a069b3aad76e6f024d79 Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Mon, 19 Aug 2019 11:14:11 +0200 Subject: [PATCH 27/94] chore(release): fix release script to commit CHANGELOG file --- tests/e2e/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/e2e/package.json b/tests/e2e/package.json index a131c83a0f..a9cdad5e09 100644 --- a/tests/e2e/package.json +++ b/tests/e2e/package.json @@ -24,7 +24,7 @@ "sideEffects": false, "scripts": { "commit": "git-cz", - "version": "conventional-changelog -p angular -i CHANGELOG.md -s", + "version": "conventional-changelog --preset angular --infile CHANGELOG.md --same-file && git add CHANGELOG.md", "lint": "eslint --ext .js,.ts,.tsx .", "lint:fix": "eslint --ext .js,.ts,.tsx --fix .", "type-check": "tsc", From 32627c98c3aedb42b455c4f0dc17329f68119107 Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Mon, 19 Aug 2019 11:22:32 +0200 Subject: [PATCH 28/94] chore(release): 1.1.0 --- tests/e2e/CHANGELOG.md | 17 +++++++++++++++++ tests/e2e/package.json | 2 +- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/tests/e2e/CHANGELOG.md b/tests/e2e/CHANGELOG.md index da370cc123..4ece1b37a4 100644 --- a/tests/e2e/CHANGELOG.md +++ b/tests/e2e/CHANGELOG.md @@ -1,3 +1,20 @@ +# [1.1.0](https://github.com/algolia/instantsearch-e2e-tests/compare/v1.0.0...v1.1.0) (2019-08-19) + + +### Bug Fixes + +* **helper:** fix dragAndDropByOffset helper Internet Explorer 11 compatibility ([393f27a](https://github.com/algolia/instantsearch-e2e-tests/commit/393f27a)) +* **spec:** fix Internet Explorer 11 compatibility for test on brand and query filtering ([57a0ece](https://github.com/algolia/instantsearch-e2e-tests/commit/57a0ece)) +* **spec:** wait for the browser to be maximized before running the test on brand an query filtering ([5db981e](https://github.com/algolia/instantsearch-e2e-tests/commit/5db981e)) + + +### Features + +* **helper:** add getTextFromElements helper ([5c4ec78](https://github.com/algolia/instantsearch-e2e-tests/commit/5c4ec78)) +* **webdriverio:** add Internet Explorer 11 to the Sauce Labs configuration ([fdc32db](https://github.com/algolia/instantsearch-e2e-tests/commit/fdc32db)) + + + # 1.0.0 (2019-08-12) diff --git a/tests/e2e/package.json b/tests/e2e/package.json index a9cdad5e09..d943a93412 100644 --- a/tests/e2e/package.json +++ b/tests/e2e/package.json @@ -1,6 +1,6 @@ { "name": "instantsearch-e2e-tests", - "version": "1.0.0", + "version": "1.1.0", "description": "End-2-End test suite for InstantSearch", "homepage": "https://github.com/algolia/instantsearch-e2e-tests", "main": "./index.js", From 74ffc16e0dd163773b2f666242d46e1ac0f9b92d Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Mon, 19 Aug 2019 12:54:31 +0200 Subject: [PATCH 29/94] chore(eslint): enable @typescript-eslint/no-floating-promises rule --- tests/e2e/.eslintrc.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/e2e/.eslintrc.js b/tests/e2e/.eslintrc.js index d48bc09844..80ed0f86de 100644 --- a/tests/e2e/.eslintrc.js +++ b/tests/e2e/.eslintrc.js @@ -8,6 +8,10 @@ module.exports = { 'error', { argsIgnorePattern: '^_', ignoreRestSiblings: true }, ], + '@typescript-eslint/no-floating-promises': 'error', + }, + parserOptions: { + project: './tsconfig.json', }, overrides: [ { From 3c6224db15cb2e11ce0b5ceee11a6a928d6f4da9 Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Wed, 21 Aug 2019 13:34:54 +0200 Subject: [PATCH 30/94] fix(webdriverio): fix mount paths for static server so rewritten urls works --- tests/e2e/wdio.base.conf.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/tests/e2e/wdio.base.conf.js b/tests/e2e/wdio.base.conf.js index a6a991fc7f..177ea2288c 100644 --- a/tests/e2e/wdio.base.conf.js +++ b/tests/e2e/wdio.base.conf.js @@ -7,7 +7,16 @@ module.exports = { * https://github.com/webdriverio/webdriverio/tree/master/packages/wdio-static-server-service */ services: ['static-server'], - staticServerFolders: [{ mount: '/', path: './website' }], + staticServerFolders: [ + { + mount: '/', + path: './website', + }, + { + mount: '/examples/e-commerce/*', + path: './website/examples/e-commerce', + }, + ], staticServerPort: 5000, /* * Set the static server, started above, as the base URL From aba705599d3056750f796741a6e7609b4c767b6e Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Wed, 21 Aug 2019 13:37:23 +0200 Subject: [PATCH 31/94] refactor(spec): move browser maximization to webdriverio configuration --- tests/e2e/.eslintrc.js | 2 +- tests/e2e/specs/brand-and-query.spec.ts | 6 ------ tests/e2e/specs/price-range.spec.ts | 6 ------ tests/e2e/wdio.base.conf.js | 6 ++++++ 4 files changed, 7 insertions(+), 13 deletions(-) diff --git a/tests/e2e/.eslintrc.js b/tests/e2e/.eslintrc.js index 80ed0f86de..815efed807 100644 --- a/tests/e2e/.eslintrc.js +++ b/tests/e2e/.eslintrc.js @@ -23,7 +23,7 @@ module.exports = { }, }, { - files: ['helpers/**/*.ts'], + files: ['helpers/**/*.ts', 'wdio.*.conf.js'], extends: ['plugin:wdio/recommended'], plugins: ['wdio'], rules: { diff --git a/tests/e2e/specs/brand-and-query.spec.ts b/tests/e2e/specs/brand-and-query.spec.ts index 05fe19f25f..a45ccc3853 100644 --- a/tests/e2e/specs/brand-and-query.spec.ts +++ b/tests/e2e/specs/brand-and-query.spec.ts @@ -1,10 +1,4 @@ describe('InstantSearch - Search on specific brand and query filtering', () => { - beforeAll(async () => { - if (!browser.isMobile) { - await browser.maximizeWindow(); - } - }); - it('navigates to the e-commerce demo', async () => { await browser.url('examples/e-commerce/'); }); diff --git a/tests/e2e/specs/price-range.spec.ts b/tests/e2e/specs/price-range.spec.ts index 1e54182fe1..afbf690cf2 100644 --- a/tests/e2e/specs/price-range.spec.ts +++ b/tests/e2e/specs/price-range.spec.ts @@ -2,12 +2,6 @@ describe('InstantSearch - Search on specific price range', () => { let lowerBound: number; let upperBound: number; - beforeAll(async () => { - if (!browser.isMobile) { - await browser.maximizeWindow(); - } - }); - it('navigates to the e-commerce demo', async () => { await browser.url('examples/e-commerce/'); }); diff --git a/tests/e2e/wdio.base.conf.js b/tests/e2e/wdio.base.conf.js index 177ea2288c..e9f8beecb2 100644 --- a/tests/e2e/wdio.base.conf.js +++ b/tests/e2e/wdio.base.conf.js @@ -100,4 +100,10 @@ module.exports = { */ require('./helpers'); }, + + async beforeSuite() { + if (!browser.isMobile) { + await browser.maximizeWindow(); + } + }, }; From 2ac9e81edca535869fda310ec09e760e0eb832cd Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Wed, 21 Aug 2019 14:13:12 +0200 Subject: [PATCH 32/94] feat(helper): add waitForElement helper --- tests/e2e/helpers/index.ts | 2 ++ tests/e2e/helpers/waitForElement.ts | 9 +++++++++ tests/e2e/specs/brand-and-query.spec.ts | 4 +--- 3 files changed, 12 insertions(+), 3 deletions(-) create mode 100644 tests/e2e/helpers/waitForElement.ts diff --git a/tests/e2e/helpers/index.ts b/tests/e2e/helpers/index.ts index 9bd9b77df9..f46ed03b5e 100644 --- a/tests/e2e/helpers/index.ts +++ b/tests/e2e/helpers/index.ts @@ -1,2 +1,4 @@ +// Generic import './dragAndDropByOffset'; import './getTextFromElements'; +import './waitForElement'; diff --git a/tests/e2e/helpers/waitForElement.ts b/tests/e2e/helpers/waitForElement.ts new file mode 100644 index 0000000000..4e9dcefc40 --- /dev/null +++ b/tests/e2e/helpers/waitForElement.ts @@ -0,0 +1,9 @@ +declare namespace WebdriverIOAsync { + interface Browser { + waitForElement(selector: string | Function): Promise; + } +} + +browser.addCommand('waitForElement', (selector: string) => + browser.waitUntil(async () => (await browser.$$(selector)).length > 0) +); diff --git a/tests/e2e/specs/brand-and-query.spec.ts b/tests/e2e/specs/brand-and-query.spec.ts index a45ccc3853..37c31358cb 100644 --- a/tests/e2e/specs/brand-and-query.spec.ts +++ b/tests/e2e/specs/brand-and-query.spec.ts @@ -26,9 +26,7 @@ describe('InstantSearch - Search on specific brand and query filtering', () => { }); it('waits for the results list to be updated (wait for the "macbook" word to be highlighted)', async () => { - await browser.waitUntil( - async () => (await browser.$$('mark=MacBook')).length > 0 - ); + await browser.waitForElement('mark=MacBook'); }); it('must match the expected results', async () => { From 47ba7aa5d817a0415b2263f11cc7eca12079a7d8 Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Wed, 21 Aug 2019 14:15:01 +0200 Subject: [PATCH 33/94] feat(helper): add getHitsTitles helper --- tests/e2e/helpers/getHitsTitles.ts | 9 +++++++++ tests/e2e/helpers/index.ts | 3 +++ tests/e2e/specs/brand-and-query.spec.ts | 8 +++----- tests/e2e/specs/price-range.spec.ts | 8 +++----- 4 files changed, 18 insertions(+), 10 deletions(-) create mode 100644 tests/e2e/helpers/getHitsTitles.ts diff --git a/tests/e2e/helpers/getHitsTitles.ts b/tests/e2e/helpers/getHitsTitles.ts new file mode 100644 index 0000000000..a57285185b --- /dev/null +++ b/tests/e2e/helpers/getHitsTitles.ts @@ -0,0 +1,9 @@ +declare namespace WebdriverIOAsync { + interface Browser { + getHitsTitles(): Promise; + } +} + +browser.addCommand('getHitsTitles', async () => + browser.getTextFromElements(await browser.$$('.hit h1')) +); diff --git a/tests/e2e/helpers/index.ts b/tests/e2e/helpers/index.ts index f46ed03b5e..ca4624b8ef 100644 --- a/tests/e2e/helpers/index.ts +++ b/tests/e2e/helpers/index.ts @@ -2,3 +2,6 @@ import './dragAndDropByOffset'; import './getTextFromElements'; import './waitForElement'; + +// Hits +import './getHitsTitles'; diff --git a/tests/e2e/specs/brand-and-query.spec.ts b/tests/e2e/specs/brand-and-query.spec.ts index 37c31358cb..1d6b6a4c8f 100644 --- a/tests/e2e/specs/brand-and-query.spec.ts +++ b/tests/e2e/specs/brand-and-query.spec.ts @@ -29,12 +29,10 @@ describe('InstantSearch - Search on specific brand and query filtering', () => { await browser.waitForElement('mark=MacBook'); }); - it('must match the expected results', async () => { - const hits = await browser.$$('.hit h1'); - const hitsText = await browser.getTextFromElements(hits); + it('must have the expected results', async () => { + const hitsTitles = await browser.getHitsTitles(); - // Compare them to expected titles - expect(hitsText).toEqual([ + expect(hitsTitles).toEqual([ 'Apple - MacBook Air® (Latest Model) - 13.3" Display - Intel Core i5 - 8GB Memory - 128GB Flash Storage - Silver', 'Apple - MacBook Air® (Latest Model) - 13.3" Display - Intel Core i5 - 8GB Memory - 256GB Flash Storage - Silver', 'Apple - Macbook® (Latest Model) - 12" Display - Intel Core M3 - 8GB Memory - 256GB Flash Storage - Space Gray', diff --git a/tests/e2e/specs/price-range.spec.ts b/tests/e2e/specs/price-range.spec.ts index afbf690cf2..6a09a873c3 100644 --- a/tests/e2e/specs/price-range.spec.ts +++ b/tests/e2e/specs/price-range.spec.ts @@ -58,12 +58,10 @@ describe('InstantSearch - Search on specific price range', () => { }); }); - it('must match the expected results', async () => { - const hits = await browser.$$('.hit h1'); - const hitsText = await browser.getTextFromElements(hits); + it('must have the expected results', async () => { + const hitsTitles = await browser.getHitsTitles(); - // Compare them to expected titles - expect(hitsText).toEqual([ + expect(hitsTitles).toEqual([ 'Apple - MacBook Air® (Latest Model) - 13.3" Display - Intel Core i5 - 8GB Memory - 128GB Flash Storage - Silver', 'Apple - MacBook Pro with Retina display - 13.3" Display - 8GB Memory - 128GB Flash Storage - Silver', 'Apple - MacBook Air® (Latest Model) - 13.3" Display - Intel Core i5 - 8GB Memory - 256GB Flash Storage - Silver', From 55e07053c1bbe44204f12186a551bf5718b7afa2 Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Wed, 21 Aug 2019 14:17:01 +0200 Subject: [PATCH 34/94] feat(helper): add setSelectedRefinementListItem helper --- tests/e2e/helpers/index.ts | 3 +++ .../e2e/helpers/setSelectedRefinementListItem.ts | 15 +++++++++++++++ tests/e2e/specs/brand-and-query.spec.ts | 9 +-------- 3 files changed, 19 insertions(+), 8 deletions(-) create mode 100644 tests/e2e/helpers/setSelectedRefinementListItem.ts diff --git a/tests/e2e/helpers/index.ts b/tests/e2e/helpers/index.ts index ca4624b8ef..3b2bdada6b 100644 --- a/tests/e2e/helpers/index.ts +++ b/tests/e2e/helpers/index.ts @@ -3,5 +3,8 @@ import './dragAndDropByOffset'; import './getTextFromElements'; import './waitForElement'; +// RefinementList +import './setSelectedRefinementListItem'; + // Hits import './getHitsTitles'; diff --git a/tests/e2e/helpers/setSelectedRefinementListItem.ts b/tests/e2e/helpers/setSelectedRefinementListItem.ts new file mode 100644 index 0000000000..234404a739 --- /dev/null +++ b/tests/e2e/helpers/setSelectedRefinementListItem.ts @@ -0,0 +1,15 @@ +declare namespace WebdriverIOAsync { + interface Browser { + setSelectedRefinementListItem(label: string): Promise; + } +} + +browser.addCommand('setSelectedRefinementListItem', async (label: string) => { + const oldUrl = await browser.getUrl(); + const item = await browser.$(`.ais-RefinementList-labelText=${label}`); + await item.click(); + + // Changing the URL will also change the page element IDs in Internet Explorer + // Not waiting for the URL to be properly updated before continuing can make the next tests to fail + return browser.waitUntil(async () => (await browser.getUrl()) !== oldUrl); +}); diff --git a/tests/e2e/specs/brand-and-query.spec.ts b/tests/e2e/specs/brand-and-query.spec.ts index 1d6b6a4c8f..c2865a9a90 100644 --- a/tests/e2e/specs/brand-and-query.spec.ts +++ b/tests/e2e/specs/brand-and-query.spec.ts @@ -4,14 +4,7 @@ describe('InstantSearch - Search on specific brand and query filtering', () => { }); it('selects "Apple" brand in list', async () => { - const brand = await browser.$('.ais-RefinementList-labelText=Apple'); - await brand.click(); - - // Changing the URL will also change the page element IDs in Internet Explorer - // Not waiting for the URL to be properly updated before continuing can make the tests to fail - await browser.waitUntil(async () => - (await browser.getUrl()).includes('brands=Apple') - ); + await browser.setSelectedRefinementListItem('Apple'); }); it('fills search input with "macbook"', async () => { From cab5478f513b756363ae1b04fb6580c43704a5ea Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Wed, 21 Aug 2019 14:18:09 +0200 Subject: [PATCH 35/94] feat(helper): add setSearchBoxValue helper --- tests/e2e/helpers/index.ts | 3 +++ tests/e2e/helpers/setSearchBoxValue.ts | 17 +++++++++++++++++ tests/e2e/specs/brand-and-query.spec.ts | 9 +-------- 3 files changed, 21 insertions(+), 8 deletions(-) create mode 100644 tests/e2e/helpers/setSearchBoxValue.ts diff --git a/tests/e2e/helpers/index.ts b/tests/e2e/helpers/index.ts index 3b2bdada6b..900cd0ac94 100644 --- a/tests/e2e/helpers/index.ts +++ b/tests/e2e/helpers/index.ts @@ -6,5 +6,8 @@ import './waitForElement'; // RefinementList import './setSelectedRefinementListItem'; +// SearchBox +import './setSearchBoxValue'; + // Hits import './getHitsTitles'; diff --git a/tests/e2e/helpers/setSearchBoxValue.ts b/tests/e2e/helpers/setSearchBoxValue.ts new file mode 100644 index 0000000000..f1a67661e5 --- /dev/null +++ b/tests/e2e/helpers/setSearchBoxValue.ts @@ -0,0 +1,17 @@ +declare namespace WebdriverIOAsync { + interface Browser { + setSearchBoxValue(value: string): Promise; + } +} + +browser.addCommand('setSearchBoxValue', async (value: string) => { + const oldUrl = await browser.getUrl(); + const searchBox = await browser.$('.ais-SearchBox [type=search]'); + // In Internet Explorer the input must be focused before updating its value + await searchBox.click(); + await searchBox.setValue(value); + + // Changing the URL will also change the page element IDs in Internet Explorer + // Not waiting for the URL to be properly updated before continuing can make the next tests to fail + return browser.waitUntil(async () => (await browser.getUrl()) !== oldUrl); +}); diff --git a/tests/e2e/specs/brand-and-query.spec.ts b/tests/e2e/specs/brand-and-query.spec.ts index c2865a9a90..66d1c37336 100644 --- a/tests/e2e/specs/brand-and-query.spec.ts +++ b/tests/e2e/specs/brand-and-query.spec.ts @@ -8,14 +8,7 @@ describe('InstantSearch - Search on specific brand and query filtering', () => { }); it('fills search input with "macbook"', async () => { - const searchInput = await browser.$('[type=search]'); - // In Internet Explorer the input must be focused before updating its value - await searchInput.click(); - await searchInput.setValue('macbook'); - - await browser.waitUntil(async () => - (await browser.getUrl()).includes('query=macbook') - ); + await browser.setSearchBoxValue('macbook'); }); it('waits for the results list to be updated (wait for the "macbook" word to be highlighted)', async () => { From 24ab14a3b25d3e67f6e40c7d6f6038e381ad58ea Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Wed, 21 Aug 2019 14:27:08 +0200 Subject: [PATCH 36/94] feat(helper): add setRangeSliderLowerBound helper --- tests/e2e/helpers/index.ts | 3 ++ tests/e2e/helpers/setRangeSliderLowerBound.ts | 37 +++++++++++++++++++ tests/e2e/specs/price-range.spec.ts | 13 +------ 3 files changed, 41 insertions(+), 12 deletions(-) create mode 100644 tests/e2e/helpers/setRangeSliderLowerBound.ts diff --git a/tests/e2e/helpers/index.ts b/tests/e2e/helpers/index.ts index 900cd0ac94..5b20e2d716 100644 --- a/tests/e2e/helpers/index.ts +++ b/tests/e2e/helpers/index.ts @@ -11,3 +11,6 @@ import './setSearchBoxValue'; // Hits import './getHitsTitles'; + +// RangeSlider +import './setRangeSliderLowerBound'; diff --git a/tests/e2e/helpers/setRangeSliderLowerBound.ts b/tests/e2e/helpers/setRangeSliderLowerBound.ts new file mode 100644 index 0000000000..6c6c918d3b --- /dev/null +++ b/tests/e2e/helpers/setRangeSliderLowerBound.ts @@ -0,0 +1,37 @@ +declare namespace WebdriverIOAsync { + interface Browser { + setRangeSliderLowerBound(value: number): Promise; + } +} + +browser.addCommand('setRangeSliderLowerBound', async (value: number) => { + const slider = await browser.$('.rheostat-horizontal'); + let lowerHandle = await browser.$('.ais-RangeSlider .rheostat-handle-lower'); + const upperHandle = await browser.$( + '.ais-RangeSlider .rheostat-handle-upper' + ); + const { width: sliderWidth } = await slider.getSize(); + const { x: lowerHandleX } = await lowerHandle.getLocation(); + const { x: sliderX } = await slider.getLocation(); + const lowerHandleMin = Number( + await lowerHandle.getAttribute('aria-valuemin') + ); + const upperHandleMax = Number( + await upperHandle.getAttribute('aria-valuemax') + ); + + // Get the size of a step (in pixels) + const step = sliderWidth / (upperHandleMax - lowerHandleMin); + // Get the horizontal difference between the handle and the slider (can happen if the handle have some margins) + const xDifference = sliderX - lowerHandleX; + // Calculate the final offset + const offset = value * step + xDifference; + + await browser.dragAndDropByOffset(lowerHandle, offset); + + // Depending of the steps calculation there can be a difference between + // the wanted value and the actual value of the slider, so we return + // the actual value in case we need it in the rest of the tests + lowerHandle = await browser.$('.ais-RangeSlider .rheostat-handle-lower'); + return Number(await lowerHandle.getAttribute('aria-valuenow')); +}); diff --git a/tests/e2e/specs/price-range.spec.ts b/tests/e2e/specs/price-range.spec.ts index 6a09a873c3..4aed742897 100644 --- a/tests/e2e/specs/price-range.spec.ts +++ b/tests/e2e/specs/price-range.spec.ts @@ -7,18 +7,7 @@ describe('InstantSearch - Search on specific price range', () => { }); it('drag and drop lower handle to the right', async () => { - const lowerHandle = await browser.$( - '.ais-RangeSlider .rheostat-handle-lower' - ); - - await browser.dragAndDropByOffset(lowerHandle, 54); - - // There is a difference between steps in browsers so we cannot assert on a strict value - const tooltip = await browser.$( - '//*[contains(@class, "rheostat-tooltip") and normalize-space() = "971"]|//*[contains(@class, "rheostat-tooltip") and normalize-space() = "981"]' - ); - - lowerBound = Number((await tooltip.getText()).replace(',', '')); + lowerBound = await browser.setRangeSliderLowerBound(971); }); it(`waits for the results list to be updated (wait for all the prices to be > lowerBound)`, async () => { From bd35db059537df944794ce69acd35d09632d923a Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Wed, 21 Aug 2019 14:30:22 +0200 Subject: [PATCH 37/94] feat(helper): add setRangeSliderUpperBound helper --- tests/e2e/helpers/index.ts | 1 + tests/e2e/helpers/setRangeSliderUpperBound.ts | 37 +++++++++++++++++++ tests/e2e/specs/price-range.spec.ts | 13 +------ 3 files changed, 39 insertions(+), 12 deletions(-) create mode 100644 tests/e2e/helpers/setRangeSliderUpperBound.ts diff --git a/tests/e2e/helpers/index.ts b/tests/e2e/helpers/index.ts index 5b20e2d716..16aa0a11d0 100644 --- a/tests/e2e/helpers/index.ts +++ b/tests/e2e/helpers/index.ts @@ -14,3 +14,4 @@ import './getHitsTitles'; // RangeSlider import './setRangeSliderLowerBound'; +import './setRangeSliderUpperBound'; diff --git a/tests/e2e/helpers/setRangeSliderUpperBound.ts b/tests/e2e/helpers/setRangeSliderUpperBound.ts new file mode 100644 index 0000000000..afdc4c0a7f --- /dev/null +++ b/tests/e2e/helpers/setRangeSliderUpperBound.ts @@ -0,0 +1,37 @@ +declare namespace WebdriverIOAsync { + interface Browser { + setRangeSliderUpperBound(value: number): Promise; + } +} + +browser.addCommand('setRangeSliderUpperBound', async (value: number) => { + const slider = await browser.$('.rheostat-horizontal'); + const lowerHandle = await browser.$( + '.ais-RangeSlider .rheostat-handle-lower' + ); + let upperHandle = await browser.$('.ais-RangeSlider .rheostat-handle-upper'); + const { width: sliderWidth } = await slider.getSize(); + const { x: upperHandleX } = await upperHandle.getLocation(); + const { x: sliderX } = await slider.getLocation(); + const lowerHandleMin = Number( + await lowerHandle.getAttribute('aria-valuemin') + ); + const upperHandleMax = Number( + await upperHandle.getAttribute('aria-valuemax') + ); + + // Get the size of a step (in pixels) + const step = sliderWidth / (upperHandleMax - lowerHandleMin); + // Get the horizontal difference between the handle and the slider (can happen if the handle have some margins) + const xDifference = sliderX + sliderWidth - upperHandleX; + // Calculate the final offset + const offset = (upperHandleMax - value) * step - xDifference; + + await browser.dragAndDropByOffset(upperHandle, -offset); + + // Depending of the steps calculation there can be a difference between + // the wanted value and the actual value of the slider, so we return + // the actual value in case we need it in the rest of the tests + upperHandle = await browser.$('.ais-RangeSlider .rheostat-handle-upper'); + return Number(await upperHandle.getAttribute('aria-valuenow')); +}); diff --git a/tests/e2e/specs/price-range.spec.ts b/tests/e2e/specs/price-range.spec.ts index 4aed742897..94e8ea9b7a 100644 --- a/tests/e2e/specs/price-range.spec.ts +++ b/tests/e2e/specs/price-range.spec.ts @@ -22,18 +22,7 @@ describe('InstantSearch - Search on specific price range', () => { }); it('drag and drop upper handle to the left', async () => { - const upperHandle = await browser.$( - '.ais-RangeSlider .rheostat-handle-upper' - ); - - await browser.dragAndDropByOffset(upperHandle, -146); - - // There is a difference between steps in browsers so we cannot assert on a strict value - const tooltip = await browser.$( - '//*[contains(@class, "rheostat-tooltip") and normalize-space() = "1,971"]|//*[contains(@class, "rheostat-tooltip") and normalize-space() = "1,981"]' - ); - - upperBound = Number((await tooltip.getText()).replace(',', '')); + upperBound = await browser.setRangeSliderUpperBound(1971); }); it(`waits for the results list to be updated (wait for all the prices to be < upperBound)`, async () => { From 4361c539f54f22c3659773211ada17c5a9adfc43 Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Wed, 21 Aug 2019 17:00:11 +0200 Subject: [PATCH 38/94] feat(helper): add getSearchBoxValue helper --- tests/e2e/helpers/getSearchBoxValue.ts | 11 +++++++++++ tests/e2e/helpers/index.ts | 7 ++++--- 2 files changed, 15 insertions(+), 3 deletions(-) create mode 100644 tests/e2e/helpers/getSearchBoxValue.ts diff --git a/tests/e2e/helpers/getSearchBoxValue.ts b/tests/e2e/helpers/getSearchBoxValue.ts new file mode 100644 index 0000000000..af78bbcd3d --- /dev/null +++ b/tests/e2e/helpers/getSearchBoxValue.ts @@ -0,0 +1,11 @@ +declare namespace WebdriverIOAsync { + interface Browser { + getSearchBoxValue(): Promise; + } +} + +browser.addCommand('getSearchBoxValue', async () => { + const searchBox = await browser.$('.ais-SearchBox [type=search]'); + + return searchBox.getValue(); +}); diff --git a/tests/e2e/helpers/index.ts b/tests/e2e/helpers/index.ts index 16aa0a11d0..9b5f87dfaa 100644 --- a/tests/e2e/helpers/index.ts +++ b/tests/e2e/helpers/index.ts @@ -3,15 +3,16 @@ import './dragAndDropByOffset'; import './getTextFromElements'; import './waitForElement'; -// RefinementList -import './setSelectedRefinementListItem'; - // SearchBox +import './getSearchBoxValue'; import './setSearchBoxValue'; // Hits import './getHitsTitles'; +// RefinementList +import './setSelectedRefinementListItem'; + // RangeSlider import './setRangeSliderLowerBound'; import './setRangeSliderUpperBound'; From 92198963ab72a4fcec227f73c9bbc1813ef4ad64 Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Wed, 21 Aug 2019 17:01:53 +0200 Subject: [PATCH 39/94] feat(helper): add getSelectedRefinementListItem helper --- tests/e2e/helpers/getSelectedRefinementListItem.ts | 12 ++++++++++++ tests/e2e/helpers/index.ts | 1 + 2 files changed, 13 insertions(+) create mode 100644 tests/e2e/helpers/getSelectedRefinementListItem.ts diff --git a/tests/e2e/helpers/getSelectedRefinementListItem.ts b/tests/e2e/helpers/getSelectedRefinementListItem.ts new file mode 100644 index 0000000000..670d3fc62b --- /dev/null +++ b/tests/e2e/helpers/getSelectedRefinementListItem.ts @@ -0,0 +1,12 @@ +declare namespace WebdriverIOAsync { + interface Browser { + getSelectedRefinementListItem(): Promise; + } +} + +browser.addCommand('getSelectedRefinementListItem', async () => { + const item = await browser.$( + '.ais-RefinementList-item--selected .ais-RefinementList-labelText' + ); + return await item.getText(); +}); diff --git a/tests/e2e/helpers/index.ts b/tests/e2e/helpers/index.ts index 9b5f87dfaa..751fb47fe9 100644 --- a/tests/e2e/helpers/index.ts +++ b/tests/e2e/helpers/index.ts @@ -11,6 +11,7 @@ import './setSearchBoxValue'; import './getHitsTitles'; // RefinementList +import './getSelectedRefinementListItem'; import './setSelectedRefinementListItem'; // RangeSlider From bf7df150c7dce246a1c7fe3d989043663683a9a2 Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Wed, 21 Aug 2019 17:02:51 +0200 Subject: [PATCH 40/94] feat(helper): add getSelectedHierarchicalMenuItems helper --- .../e2e/helpers/getSelectedHierarchicalMenuItems.ts | 12 ++++++++++++ tests/e2e/helpers/index.ts | 3 +++ 2 files changed, 15 insertions(+) create mode 100644 tests/e2e/helpers/getSelectedHierarchicalMenuItems.ts diff --git a/tests/e2e/helpers/getSelectedHierarchicalMenuItems.ts b/tests/e2e/helpers/getSelectedHierarchicalMenuItems.ts new file mode 100644 index 0000000000..0c69088a0d --- /dev/null +++ b/tests/e2e/helpers/getSelectedHierarchicalMenuItems.ts @@ -0,0 +1,12 @@ +declare namespace WebdriverIOAsync { + interface Browser { + getSelectedHierarchicalMenuItems(): Promise; + } +} + +browser.addCommand('getSelectedHierarchicalMenuItems', async () => { + const items = await browser.$$( + '.ais-HierarchicalMenu-item--selected .ais-HierarchicalMenu-label' + ); + return await browser.getTextFromElements(items); +}); diff --git a/tests/e2e/helpers/index.ts b/tests/e2e/helpers/index.ts index 751fb47fe9..7b6d39a74e 100644 --- a/tests/e2e/helpers/index.ts +++ b/tests/e2e/helpers/index.ts @@ -14,6 +14,9 @@ import './getHitsTitles'; import './getSelectedRefinementListItem'; import './setSelectedRefinementListItem'; +// HierarchicalMenu +import './getSelectedHierarchicalMenuItems'; + // RangeSlider import './setRangeSliderLowerBound'; import './setRangeSliderUpperBound'; From 5987862d6ca1f445e4017f248717b8d7e9f41cd6 Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Wed, 21 Aug 2019 17:03:24 +0200 Subject: [PATCH 41/94] feat(helper): add setSelectedHierarchicalMenuItem helper --- tests/e2e/helpers/index.ts | 1 + .../helpers/setSelectedHierarchicalMenuItem.ts | 15 +++++++++++++++ 2 files changed, 16 insertions(+) create mode 100644 tests/e2e/helpers/setSelectedHierarchicalMenuItem.ts diff --git a/tests/e2e/helpers/index.ts b/tests/e2e/helpers/index.ts index 7b6d39a74e..b1150005cc 100644 --- a/tests/e2e/helpers/index.ts +++ b/tests/e2e/helpers/index.ts @@ -16,6 +16,7 @@ import './setSelectedRefinementListItem'; // HierarchicalMenu import './getSelectedHierarchicalMenuItems'; +import './setSelectedHierarchicalMenuItem'; // RangeSlider import './setRangeSliderLowerBound'; diff --git a/tests/e2e/helpers/setSelectedHierarchicalMenuItem.ts b/tests/e2e/helpers/setSelectedHierarchicalMenuItem.ts new file mode 100644 index 0000000000..efd5c9b6c6 --- /dev/null +++ b/tests/e2e/helpers/setSelectedHierarchicalMenuItem.ts @@ -0,0 +1,15 @@ +declare namespace WebdriverIOAsync { + interface Browser { + setSelectedHierarchicalMenuItem(label: string): Promise; + } +} + +browser.addCommand('setSelectedHierarchicalMenuItem', async (label: string) => { + const oldUrl = await browser.getUrl(); + const item = await browser.$(`.ais-HierarchicalMenu-label=${label}`); + await item.click(); + + // Changing the URL will also change the page element IDs in Internet Explorer + // Not waiting for the URL to be properly updated before continuing can make the next tests to fail + return browser.waitUntil(async () => (await browser.getUrl()) !== oldUrl); +}); From 84b3860de3f73a39708c456742a8004d5c7fd753 Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Wed, 21 Aug 2019 17:03:57 +0200 Subject: [PATCH 42/94] feat(helper): add getRangeSliderLowerBound helper --- tests/e2e/helpers/getRangeSliderLowerBound.ts | 12 ++++++++++++ tests/e2e/helpers/index.ts | 1 + 2 files changed, 13 insertions(+) create mode 100644 tests/e2e/helpers/getRangeSliderLowerBound.ts diff --git a/tests/e2e/helpers/getRangeSliderLowerBound.ts b/tests/e2e/helpers/getRangeSliderLowerBound.ts new file mode 100644 index 0000000000..dc04488726 --- /dev/null +++ b/tests/e2e/helpers/getRangeSliderLowerBound.ts @@ -0,0 +1,12 @@ +declare namespace WebdriverIOAsync { + interface Browser { + getRangeSliderLowerBound(): Promise; + } +} + +browser.addCommand('getRangeSliderLowerBound', async () => { + const lowerHandle = await browser.$( + '.ais-RangeSlider .rheostat-handle-lower' + ); + return Number(await lowerHandle.getAttribute('aria-valuenow')); +}); diff --git a/tests/e2e/helpers/index.ts b/tests/e2e/helpers/index.ts index b1150005cc..29cf2a16fc 100644 --- a/tests/e2e/helpers/index.ts +++ b/tests/e2e/helpers/index.ts @@ -19,5 +19,6 @@ import './getSelectedHierarchicalMenuItems'; import './setSelectedHierarchicalMenuItem'; // RangeSlider +import './getRangeSliderLowerBound'; import './setRangeSliderLowerBound'; import './setRangeSliderUpperBound'; From 151685feeee1ec4f58a4b0f97b058bd466decb7d Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Wed, 21 Aug 2019 17:04:30 +0200 Subject: [PATCH 43/94] feat(helper): add getRangeSliderUpperBound helper --- tests/e2e/helpers/getRangeSliderUpperBound.ts | 12 ++++++++++++ tests/e2e/helpers/index.ts | 1 + 2 files changed, 13 insertions(+) create mode 100644 tests/e2e/helpers/getRangeSliderUpperBound.ts diff --git a/tests/e2e/helpers/getRangeSliderUpperBound.ts b/tests/e2e/helpers/getRangeSliderUpperBound.ts new file mode 100644 index 0000000000..a097c8b156 --- /dev/null +++ b/tests/e2e/helpers/getRangeSliderUpperBound.ts @@ -0,0 +1,12 @@ +declare namespace WebdriverIOAsync { + interface Browser { + getRangeSliderUpperBound(): Promise; + } +} + +browser.addCommand('getRangeSliderUpperBound', async () => { + const upperHandle = await browser.$( + '.ais-RangeSlider .rheostat-handle-upper' + ); + return Number(await upperHandle.getAttribute('aria-valuenow')); +}); diff --git a/tests/e2e/helpers/index.ts b/tests/e2e/helpers/index.ts index 29cf2a16fc..3814af44fe 100644 --- a/tests/e2e/helpers/index.ts +++ b/tests/e2e/helpers/index.ts @@ -21,4 +21,5 @@ import './setSelectedHierarchicalMenuItem'; // RangeSlider import './getRangeSliderLowerBound'; import './setRangeSliderLowerBound'; +import './getRangeSliderUpperBound'; import './setRangeSliderUpperBound'; From 532bad1e2a9520bb2dc06f1744ce79b47cc9ffa9 Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Wed, 21 Aug 2019 17:05:24 +0200 Subject: [PATCH 44/94] feat(helper): add getToggleRefinementStatus helper --- tests/e2e/helpers/getToggleRefinementStatus.ts | 11 +++++++++++ tests/e2e/helpers/index.ts | 3 +++ 2 files changed, 14 insertions(+) create mode 100644 tests/e2e/helpers/getToggleRefinementStatus.ts diff --git a/tests/e2e/helpers/getToggleRefinementStatus.ts b/tests/e2e/helpers/getToggleRefinementStatus.ts new file mode 100644 index 0000000000..a7597983f4 --- /dev/null +++ b/tests/e2e/helpers/getToggleRefinementStatus.ts @@ -0,0 +1,11 @@ +declare namespace WebdriverIOAsync { + interface Browser { + getToggleRefinementStatus(): Promise; + } +} + +browser.addCommand('getToggleRefinementStatus', async () => { + const checkbox = await browser.$('.ais-ToggleRefinement-checkbox'); + + return checkbox.isSelected(); +}); diff --git a/tests/e2e/helpers/index.ts b/tests/e2e/helpers/index.ts index 3814af44fe..d4d06913af 100644 --- a/tests/e2e/helpers/index.ts +++ b/tests/e2e/helpers/index.ts @@ -23,3 +23,6 @@ import './getRangeSliderLowerBound'; import './setRangeSliderLowerBound'; import './getRangeSliderUpperBound'; import './setRangeSliderUpperBound'; + +// ToggleRefinement +import './getToggleRefinementStatus'; From 4fc6e12536bccf75b28c54fb34119d759c88c4a4 Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Wed, 21 Aug 2019 17:05:46 +0200 Subject: [PATCH 45/94] feat(helper): add changeToggleRefinementStatus helper --- tests/e2e/helpers/changeToggleRefinementStatus.ts | 11 +++++++++++ tests/e2e/helpers/index.ts | 1 + 2 files changed, 12 insertions(+) create mode 100644 tests/e2e/helpers/changeToggleRefinementStatus.ts diff --git a/tests/e2e/helpers/changeToggleRefinementStatus.ts b/tests/e2e/helpers/changeToggleRefinementStatus.ts new file mode 100644 index 0000000000..8719a57bcc --- /dev/null +++ b/tests/e2e/helpers/changeToggleRefinementStatus.ts @@ -0,0 +1,11 @@ +declare namespace WebdriverIOAsync { + interface Browser { + changeToggleRefinementStatus(): Promise; + } +} + +browser.addCommand('changeToggleRefinementStatus', async () => { + const checkbox = await browser.$('.ais-ToggleRefinement-checkbox'); + + return checkbox.click(); +}); diff --git a/tests/e2e/helpers/index.ts b/tests/e2e/helpers/index.ts index d4d06913af..8f5eccdad2 100644 --- a/tests/e2e/helpers/index.ts +++ b/tests/e2e/helpers/index.ts @@ -26,3 +26,4 @@ import './setRangeSliderUpperBound'; // ToggleRefinement import './getToggleRefinementStatus'; +import './changeToggleRefinementStatus'; From 088cda687cd62ec11e8aea5568cb392cc509a2b6 Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Wed, 21 Aug 2019 17:06:13 +0200 Subject: [PATCH 46/94] feat(helper): add getRatingMenuValue helper --- tests/e2e/helpers/getRatingMenuValue.ts | 13 +++++++++++++ tests/e2e/helpers/index.ts | 3 +++ 2 files changed, 16 insertions(+) create mode 100644 tests/e2e/helpers/getRatingMenuValue.ts diff --git a/tests/e2e/helpers/getRatingMenuValue.ts b/tests/e2e/helpers/getRatingMenuValue.ts new file mode 100644 index 0000000000..05b8c1391a --- /dev/null +++ b/tests/e2e/helpers/getRatingMenuValue.ts @@ -0,0 +1,13 @@ +declare namespace WebdriverIOAsync { + interface Browser { + getRatingMenuValue(): Promise; + } +} + +browser.addCommand('getRatingMenuValue', async () => { + const rating = await browser.$( + '.ais-RatingMenu-item--selected .ais-RatingMenu-link' + ); + + return rating.getAttribute('aria-label'); +}); diff --git a/tests/e2e/helpers/index.ts b/tests/e2e/helpers/index.ts index 8f5eccdad2..607b4f1bcb 100644 --- a/tests/e2e/helpers/index.ts +++ b/tests/e2e/helpers/index.ts @@ -27,3 +27,6 @@ import './setRangeSliderUpperBound'; // ToggleRefinement import './getToggleRefinementStatus'; import './changeToggleRefinementStatus'; + +// RatingMenu +import './getRatingMenuValue'; From 2a87d12c261e9db52c0ed2e4904307c3f7416d0c Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Wed, 21 Aug 2019 17:06:39 +0200 Subject: [PATCH 47/94] feat(helper): add setRatingMenuValue helper --- tests/e2e/helpers/index.ts | 1 + tests/e2e/helpers/setRatingMenuValue.ts | 15 +++++++++++++++ 2 files changed, 16 insertions(+) create mode 100644 tests/e2e/helpers/setRatingMenuValue.ts diff --git a/tests/e2e/helpers/index.ts b/tests/e2e/helpers/index.ts index 607b4f1bcb..18a2ba02ba 100644 --- a/tests/e2e/helpers/index.ts +++ b/tests/e2e/helpers/index.ts @@ -30,3 +30,4 @@ import './changeToggleRefinementStatus'; // RatingMenu import './getRatingMenuValue'; +import './setRatingMenuValue'; diff --git a/tests/e2e/helpers/setRatingMenuValue.ts b/tests/e2e/helpers/setRatingMenuValue.ts new file mode 100644 index 0000000000..e7fd407d7b --- /dev/null +++ b/tests/e2e/helpers/setRatingMenuValue.ts @@ -0,0 +1,15 @@ +declare namespace WebdriverIOAsync { + interface Browser { + setRatingMenuValue(label: string): Promise; + } +} + +browser.addCommand('setRatingMenuValue', async (label: string) => { + const rating = await browser.$(`.ais-RatingMenu-link[aria-label="${label}"]`); + + await rating.click(); + + return browser.waitForElement( + `.ais-RatingMenu-item--selected .ais-RatingMenu-link[aria-label="${label}"]` + ); +}); From c88757db47b5f604b17dc7d7351a2147e82e8be6 Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Wed, 21 Aug 2019 17:07:18 +0200 Subject: [PATCH 48/94] feat(helper): add clearRefinements helper --- tests/e2e/helpers/clearRefinements.ts | 13 +++++++++++++ tests/e2e/helpers/index.ts | 3 +++ 2 files changed, 16 insertions(+) create mode 100644 tests/e2e/helpers/clearRefinements.ts diff --git a/tests/e2e/helpers/clearRefinements.ts b/tests/e2e/helpers/clearRefinements.ts new file mode 100644 index 0000000000..f2905f0365 --- /dev/null +++ b/tests/e2e/helpers/clearRefinements.ts @@ -0,0 +1,13 @@ +declare namespace WebdriverIOAsync { + interface Browser { + clearRefinements(): Promise; + } +} + +browser.addCommand('clearRefinements', async () => { + const clearButton = await browser.$(`.ais-ClearRefinements-button`); + + await clearButton.click(); + + return browser.waitForElement(`.ais-ClearRefinements-button--disabled`); +}); diff --git a/tests/e2e/helpers/index.ts b/tests/e2e/helpers/index.ts index 18a2ba02ba..4fc23c4ab5 100644 --- a/tests/e2e/helpers/index.ts +++ b/tests/e2e/helpers/index.ts @@ -31,3 +31,6 @@ import './changeToggleRefinementStatus'; // RatingMenu import './getRatingMenuValue'; import './setRatingMenuValue'; + +// ClearRefinements +import './clearRefinements'; From 45272c3c67fd49d89d3a47be051062b966b26c75 Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Wed, 21 Aug 2019 17:07:46 +0200 Subject: [PATCH 49/94] feat(helper): add getPage helper --- tests/e2e/helpers/getPage.ts | 11 +++++++++++ tests/e2e/helpers/index.ts | 3 +++ 2 files changed, 14 insertions(+) create mode 100644 tests/e2e/helpers/getPage.ts diff --git a/tests/e2e/helpers/getPage.ts b/tests/e2e/helpers/getPage.ts new file mode 100644 index 0000000000..446853140b --- /dev/null +++ b/tests/e2e/helpers/getPage.ts @@ -0,0 +1,11 @@ +declare namespace WebdriverIOAsync { + interface Browser { + getPage(): Promise; + } +} + +browser.addCommand('getPage', async () => { + const page = await browser.$('.ais-Pagination-item--selected'); + + return Number(await page.getText()); +}); diff --git a/tests/e2e/helpers/index.ts b/tests/e2e/helpers/index.ts index 4fc23c4ab5..d0733652ac 100644 --- a/tests/e2e/helpers/index.ts +++ b/tests/e2e/helpers/index.ts @@ -34,3 +34,6 @@ import './setRatingMenuValue'; // ClearRefinements import './clearRefinements'; + +// Pagination +import './getPage'; From 88eb3805501093992c3962f8511aa5df9e6d1301 Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Wed, 21 Aug 2019 17:08:07 +0200 Subject: [PATCH 50/94] feat(helper): add setPage helper --- tests/e2e/helpers/index.ts | 1 + tests/e2e/helpers/setPage.ts | 13 +++++++++++++ 2 files changed, 14 insertions(+) create mode 100644 tests/e2e/helpers/setPage.ts diff --git a/tests/e2e/helpers/index.ts b/tests/e2e/helpers/index.ts index d0733652ac..571d3981b4 100644 --- a/tests/e2e/helpers/index.ts +++ b/tests/e2e/helpers/index.ts @@ -37,3 +37,4 @@ import './clearRefinements'; // Pagination import './getPage'; +import './setPage'; diff --git a/tests/e2e/helpers/setPage.ts b/tests/e2e/helpers/setPage.ts new file mode 100644 index 0000000000..9a62b7d4c3 --- /dev/null +++ b/tests/e2e/helpers/setPage.ts @@ -0,0 +1,13 @@ +declare namespace WebdriverIOAsync { + interface Browser { + setPage(number: number): Promise; + } +} + +browser.addCommand('setPage', async (number: number) => { + const page = await browser.$(`.ais-Pagination-link=${number}`); + + await page.click(); + + return browser.waitForElement(`.ais-Pagination-item--selected=${number}`); +}); From 3ff5f5becf1a87c09dc8bc76ea13338559eb8983 Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Wed, 21 Aug 2019 17:08:27 +0200 Subject: [PATCH 51/94] feat(helper): add getHitsPerPage helper --- tests/e2e/helpers/getHitsPerPage.ts | 11 +++++++++++ tests/e2e/helpers/index.ts | 3 +++ 2 files changed, 14 insertions(+) create mode 100644 tests/e2e/helpers/getHitsPerPage.ts diff --git a/tests/e2e/helpers/getHitsPerPage.ts b/tests/e2e/helpers/getHitsPerPage.ts new file mode 100644 index 0000000000..bb2d9e60d3 --- /dev/null +++ b/tests/e2e/helpers/getHitsPerPage.ts @@ -0,0 +1,11 @@ +declare namespace WebdriverIOAsync { + interface Browser { + getHitsPerPage(): Promise; + } +} + +browser.addCommand('getHitsPerPage', async () => { + const hitsPerPage = await browser.$('.ais-HitsPerPage-select'); + + return Number(await hitsPerPage.getValue()); +}); diff --git a/tests/e2e/helpers/index.ts b/tests/e2e/helpers/index.ts index 571d3981b4..97a06afe37 100644 --- a/tests/e2e/helpers/index.ts +++ b/tests/e2e/helpers/index.ts @@ -38,3 +38,6 @@ import './clearRefinements'; // Pagination import './getPage'; import './setPage'; + +// HitsPerPage +import './getHitsPerPage'; From ac75b0aeb3d90f6c3a0db9c117c0eebf8fc73103 Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Wed, 21 Aug 2019 17:08:52 +0200 Subject: [PATCH 52/94] feat(helper): add setHitsPerPage helper --- tests/e2e/helpers/index.ts | 1 + tests/e2e/helpers/setHitsPerPage.ts | 11 +++++++++++ 2 files changed, 12 insertions(+) create mode 100644 tests/e2e/helpers/setHitsPerPage.ts diff --git a/tests/e2e/helpers/index.ts b/tests/e2e/helpers/index.ts index 97a06afe37..eb272c8015 100644 --- a/tests/e2e/helpers/index.ts +++ b/tests/e2e/helpers/index.ts @@ -41,3 +41,4 @@ import './setPage'; // HitsPerPage import './getHitsPerPage'; +import './setHitsPerPage'; diff --git a/tests/e2e/helpers/setHitsPerPage.ts b/tests/e2e/helpers/setHitsPerPage.ts new file mode 100644 index 0000000000..c6ffad2f2f --- /dev/null +++ b/tests/e2e/helpers/setHitsPerPage.ts @@ -0,0 +1,11 @@ +declare namespace WebdriverIOAsync { + interface Browser { + setHitsPerPage(label: string): Promise; + } +} + +browser.addCommand('setHitsPerPage', async (label: string) => { + const hitsPerPage = await browser.$('.ais-HitsPerPage-select'); + + return hitsPerPage.selectByVisibleText(label); +}); From 68978bce61ae1ecbee9c9314ece3cc8f79ac600c Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Wed, 21 Aug 2019 17:09:16 +0200 Subject: [PATCH 53/94] feat(helper): add getSortByValue helper --- tests/e2e/helpers/getSortByValue.ts | 11 +++++++++++ tests/e2e/helpers/index.ts | 3 +++ 2 files changed, 14 insertions(+) create mode 100644 tests/e2e/helpers/getSortByValue.ts diff --git a/tests/e2e/helpers/getSortByValue.ts b/tests/e2e/helpers/getSortByValue.ts new file mode 100644 index 0000000000..f154fc24e7 --- /dev/null +++ b/tests/e2e/helpers/getSortByValue.ts @@ -0,0 +1,11 @@ +declare namespace WebdriverIOAsync { + interface Browser { + getSortByValue(): Promise; + } +} + +browser.addCommand('getSortByValue', async () => { + const sortBy = await browser.$('.ais-SortBy-select'); + + return sortBy.getValue(); +}); diff --git a/tests/e2e/helpers/index.ts b/tests/e2e/helpers/index.ts index eb272c8015..dcf52d19e6 100644 --- a/tests/e2e/helpers/index.ts +++ b/tests/e2e/helpers/index.ts @@ -42,3 +42,6 @@ import './setPage'; // HitsPerPage import './getHitsPerPage'; import './setHitsPerPage'; + +// SortBy +import './getSortByValue'; From 8a145ca048872add52909d2c0e3cb871cca134be Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Wed, 21 Aug 2019 17:09:33 +0200 Subject: [PATCH 54/94] feat(helper): add setSortByValue helper --- tests/e2e/helpers/index.ts | 1 + tests/e2e/helpers/setSortByValue.ts | 11 +++++++++++ 2 files changed, 12 insertions(+) create mode 100644 tests/e2e/helpers/setSortByValue.ts diff --git a/tests/e2e/helpers/index.ts b/tests/e2e/helpers/index.ts index dcf52d19e6..63a84f7965 100644 --- a/tests/e2e/helpers/index.ts +++ b/tests/e2e/helpers/index.ts @@ -45,3 +45,4 @@ import './setHitsPerPage'; // SortBy import './getSortByValue'; +import './setSortByValue'; diff --git a/tests/e2e/helpers/setSortByValue.ts b/tests/e2e/helpers/setSortByValue.ts new file mode 100644 index 0000000000..8d7fe311b0 --- /dev/null +++ b/tests/e2e/helpers/setSortByValue.ts @@ -0,0 +1,11 @@ +declare namespace WebdriverIOAsync { + interface Browser { + setSortByValue(label: string): Promise; + } +} + +browser.addCommand('setSortByValue', async (label: string) => { + const sortBy = await browser.$('.ais-SortBy-select'); + + return sortBy.selectByVisibleText(label); +}); From a70e87f91d881d16a70adbf1b2cb01cbf6655fe1 Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Wed, 21 Aug 2019 18:03:23 +0200 Subject: [PATCH 55/94] feat(helper): add setNextPage helper --- tests/e2e/helpers/index.ts | 1 + tests/e2e/helpers/setNextPage.ts | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) create mode 100644 tests/e2e/helpers/setNextPage.ts diff --git a/tests/e2e/helpers/index.ts b/tests/e2e/helpers/index.ts index 63a84f7965..b05ce2c72b 100644 --- a/tests/e2e/helpers/index.ts +++ b/tests/e2e/helpers/index.ts @@ -38,6 +38,7 @@ import './clearRefinements'; // Pagination import './getPage'; import './setPage'; +import './setNextPage'; // HitsPerPage import './getHitsPerPage'; diff --git a/tests/e2e/helpers/setNextPage.ts b/tests/e2e/helpers/setNextPage.ts new file mode 100644 index 0000000000..93c2376df9 --- /dev/null +++ b/tests/e2e/helpers/setNextPage.ts @@ -0,0 +1,18 @@ +declare namespace WebdriverIOAsync { + interface Browser { + setNextPage(): Promise; + } +} + +browser.addCommand('setNextPage', async () => { + const pageNumber = await browser.getPage(); + const page = await browser.$( + `.ais-Pagination-item--nextPage .ais-Pagination-link` + ); + + await page.click(); + + return browser.waitForElement( + `.ais-Pagination-item--selected=${pageNumber + 1}` + ); +}); From c12f2f1f53b86a877b2bb0a129678c3418e621c0 Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Wed, 21 Aug 2019 18:03:57 +0200 Subject: [PATCH 56/94] feat(helper): add setPreviousPage helper --- tests/e2e/helpers/index.ts | 1 + tests/e2e/helpers/setPreviousPage.ts | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) create mode 100644 tests/e2e/helpers/setPreviousPage.ts diff --git a/tests/e2e/helpers/index.ts b/tests/e2e/helpers/index.ts index b05ce2c72b..b3145cf2b3 100644 --- a/tests/e2e/helpers/index.ts +++ b/tests/e2e/helpers/index.ts @@ -39,6 +39,7 @@ import './clearRefinements'; import './getPage'; import './setPage'; import './setNextPage'; +import './setPreviousPage'; // HitsPerPage import './getHitsPerPage'; diff --git a/tests/e2e/helpers/setPreviousPage.ts b/tests/e2e/helpers/setPreviousPage.ts new file mode 100644 index 0000000000..32ec9b3dfc --- /dev/null +++ b/tests/e2e/helpers/setPreviousPage.ts @@ -0,0 +1,18 @@ +declare namespace WebdriverIOAsync { + interface Browser { + setPreviousPage(): Promise; + } +} + +browser.addCommand('setPreviousPage', async () => { + const pageNumber = await browser.getPage(); + const page = await browser.$( + `.ais-Pagination-item--previousPage .ais-Pagination-link` + ); + + await page.click(); + + return browser.waitForElement( + `.ais-Pagination-item--selected=${pageNumber - 1}` + ); +}); From ad66a737d5cdf6f1378d26a8cad1492ef922b80c Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Fri, 23 Aug 2019 13:29:33 +0200 Subject: [PATCH 57/94] fix(helper): fix getTextFromElements helper to use getText selector Executing the snippet in the browser to get the textContent was faster, but sometimes fail and only return empty strings --- tests/e2e/helpers/getTextFromElements.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/e2e/helpers/getTextFromElements.ts b/tests/e2e/helpers/getTextFromElements.ts index 4108ec4eeb..7d9c2538ae 100644 --- a/tests/e2e/helpers/getTextFromElements.ts +++ b/tests/e2e/helpers/getTextFromElements.ts @@ -6,12 +6,12 @@ declare namespace WebdriverIOAsync { } } -browser.addCommand('getTextFromElements', function( +browser.addCommand('getTextFromElements', async function( elements: WebdriverIOAsync.Element[] ) { - return browser.execute(function(browserElements) { - return browserElements.map(function(browserElement: Element) { - return browserElement.textContent || ''; - }); - }, elements); + const texts = []; + for (const element of elements) { + texts.push(await element.getText()); + } + return texts; }); From 7f144ff392d80f3977e9918f805c22e8d72a1a93 Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Fri, 23 Aug 2019 13:31:17 +0200 Subject: [PATCH 58/94] fix(helper): fix getSelectedHierarchicalMenuItems to wait for the elements Sometimes the menu was not quite ready yet and getSelectedHierarchicalMenuItems was returning an empty array --- tests/e2e/helpers/getSelectedHierarchicalMenuItems.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tests/e2e/helpers/getSelectedHierarchicalMenuItems.ts b/tests/e2e/helpers/getSelectedHierarchicalMenuItems.ts index 0c69088a0d..413f3013c0 100644 --- a/tests/e2e/helpers/getSelectedHierarchicalMenuItems.ts +++ b/tests/e2e/helpers/getSelectedHierarchicalMenuItems.ts @@ -5,8 +5,13 @@ declare namespace WebdriverIOAsync { } browser.addCommand('getSelectedHierarchicalMenuItems', async () => { + await browser.waitForElement( + '.ais-HierarchicalMenu-item--selected .ais-HierarchicalMenu-label' + ); + const items = await browser.$$( '.ais-HierarchicalMenu-item--selected .ais-HierarchicalMenu-label' ); + return await browser.getTextFromElements(items); }); From ceae9c994237c0ada89c0757f12296c584a3e6b8 Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Wed, 4 Sep 2019 12:31:08 +0200 Subject: [PATCH 59/94] docs(contributing): add CONTRIBUTING.md file (algolia/instantsearch-e2e-tests#1) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * docs(contributing): add CONTRIBUTING.md file * Apply suggestions from code review Co-Authored-By: François Chalifour * docs(contributing): fix introduction phrasing * docs(contributing): add links to directories and files * Update CONTRIBUTING.md Co-Authored-By: Haroen Viaene * Apply feedbacks --- tests/e2e/CONTRIBUTING.md | 152 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 152 insertions(+) create mode 100644 tests/e2e/CONTRIBUTING.md diff --git a/tests/e2e/CONTRIBUTING.md b/tests/e2e/CONTRIBUTING.md new file mode 100644 index 0000000000..8cfcf11215 --- /dev/null +++ b/tests/e2e/CONTRIBUTING.md @@ -0,0 +1,152 @@ +# Contributing + +This repository contains the end-to-end (e2e) test suite for [InstantSearch](https://github.com/algolia/instantsearch.js). This test suite is meant to be shared across all InstantSearch flavors, this is why it is stored in a separate repository. + +## Development + +### Requirements + +To run this project, you will need: + +- Node.js >= v8.10.0, use nvm - [install instructions](https://github.com/creationix/nvm#install-script) +- Yarn >= v1.16.0 - [install instructions](https://yarnpkg.com/en/docs/install#alternatives-stable) + +### Installation + +The easiest way to work on the tests is to link them into an InstantSearch project using [`yarn link`](https://yarnpkg.com/en/docs/cli/link). + +First, clone the `instantsearch-e2e-tests` repository, install its dependencies and link it. + +```sh +git clone git@github.com:algolia/instantsearch-e2e-tests.git +cd instantsearch-e2e-tests +yarn +yarn link +``` + +Then, clone the [`instantsearch.js`](https://github.com/algolia/instantsearch.js/) repository (or any other flavor), install its dependencies and link `instantsearch-e2e-tests`. + +```sh +git clone git@github.com:algolia/instantsearch.js +cd instantsearch.js +yarn +yarn link instantsearch-e2e-tests +``` + +You can now run your local end-2-end test suite using the `test:e2e:*` scripts from the InstantSearch project. + +```sh +yarn test:e2e # Run the test suite on Chrome browser on your local machine +yarn test:e2e:saucelabs # Run the test suite on multiple browsers on the Sauce Labs service +``` + +You can also run the tests with [WebdriverIO](https://webdriver.io) options. For example, to run a specific test in watch mode: + +```sh +yarn test:e2e --spec pagination --watch +``` + +See [WebdriverIO CLI documentation](https://webdriver.io/docs/clioptions.html) for all available options. + +### Writing tests + +We use [Webdriverio](https://webdriver.io) and [Jasmine](https://jasmine.github.io) to write the tests. Webdriverio is used to control the browser (navigate, select elements, clicks, etc.) while Jasmine is used to assert the results. + +The tests must be stored in the [`specs`](specs) directory and follow the `*.spec.ts` naming pattern. Each `*.spec.ts` file will be executed in a new WebDriver session and if possible in parallel (to the limit of the `maxInstances` configuration parameter in `wdio.*.conf.js`). + +In general, you should try to test a single feature in one spec file. Try to not have too many or too few tests in one file. However, there is no golden rule about that. + +One spec file represents a scenario to test a behavior from a user point of view. + +Example of scenario: + +1. Load the `examples/e-commerce/` page +2. Click on "Appliances" category +3. Click on rating "4 & up" +4. Check if the result list matches the expected one + +Which can be translated in a spec file to: + +```js +describe('InstantSearch - Search on specific brand and query filtering', () => { + it('navigates to the e-commerce demo', async () => { + await browser.url('examples/e-commerce/'); + }); + + it('selects "Appliances" category', async () => { + await browser.setSelectedHierarchicalMenuItem('Appliances'); + }); + + it('selects "4 & up" rating', async () => { + await browser.setRatingMenuValue('4 & up'); + }); + + it('must have the expected results', async () => { + const hitsTitles = await browser.getHitsTitles(); + + expect(hitsTitles).toEqual([ + 'Nest - Learning Thermostat - 3rd Generation - Stainless Steel', + 'LG - 1.1 Cu. Ft. Mid-Size Microwave - Stainless-Steel', + 'Insignia™ - 2.6 Cu. Ft. Compact Refrigerator - Black', + 'Keurig - K50 Coffeemaker - Black', + 'iRobot - Roomba 650 Vacuuming Robot - Black', + 'Shark - Navigator Lift-Away Deluxe Bagless Upright Vacuum - Blue', + 'LG - 1.5 Cu. Ft. Mid-Size Microwave - Stainless Steel', + 'Insignia™ - 5.0 Cu. Ft. Chest Freezer - White', + 'Samsung - activewash 4.8 Cu. Ft. 11-Cycle High-Efficiency Top-Loading Washer - White', + 'Samsung - 4.8 Cu. Ft. 11-Cycle High-Efficiency Top-Loading Washer - White', + 'LG - 2.0 Cu. Ft. Full-Size Microwave - Stainless Steel', + 'Shark - Rotator Professional Lift-Away HEPA Bagless 2-in-1 Upright Vacuum - Red', + 'LG - 4.5 Cu. Ft. 8-Cycle High-Efficiency Top-Loading Washer - White', + 'Samsung - 4.2 Cu. Ft. 9-Cycle High-Efficiency Steam Front-Loading Washer - Platinum', + 'Panasonic - 1.3 Cu. Ft. Mid-Size Microwave - Stainless steel/black/silver', + 'LG - 2.0 Cu. Ft. Mid-Size Microwave - Black Stainless', + ]); + }); +}); +``` + +General guidelines when writing tests: + +- Each step should be translated as a `it` function, while this is not mandatory it helps to make the scenario more readable and properly [separate each actions in Sauce Labs reports](https://user-images.githubusercontent.com/13209/62311104-56217d80-b48b-11e9-94dc-3c18b9ddc2af.png). +- All actions on the browser are asynchronous, so be sure to always `await` them. **Never run multiple asynchronous commands in parallel as it can confuse some browsers (Internet Explorer)**. +- Use helper functions when possible, for readability but also for maintainability (if one widget is updated, we only have to updates its helpers without touching the tests). [More about Helpers](#helpers). +- Do not make assertions to know if an action was correctly performed in the browser. If an action fails (trying to click on an non-existing element for example) then WebdriverIO will automatically throw and fail the test, so asserting on it ourselves is redundant. +- Only assert what you want to see on the page after an action (Is this checkbox selected? Is the result list correct? etc.) +- You may need to add some additional steps compared to the original scenario, to wait for some elements to update for example (this was not done in the example above for simplicity but you can find some examples [here](https://github.com/algolia/instantsearch-e2e-tests/blob/5a2456b8d63afa684931b0447f00df821b02752b/specs/brand-and-query.spec.ts#L14-L16) or [here](https://github.com/algolia/instantsearch-e2e-tests/blob/5a2456b8d63afa684931b0447f00df821b02752b/specs/price-range.spec.ts#L13-L22)). + +### Helpers + +A library of helpers is available in the [`helpers`](helpers) directory and are grouped by widget in the [`helpers/index.ts`](helpers/index.ts) file. + +These helpers are here to simplify the writing of tests, their readability and their maintenance. You are strongly encouraged to use them in your tests and to contribute to the helpers library. + +You can find more information about helpers in [WebdriverIO documentation](https://webdriver.io/docs/customcommands.html#adding-custom-commands). + +## Release + +This project uses [AngularJS's commit message convention](https://github.com/angular/angular.js/blob/master/DEVELOPERS.md#-git-commit-guidelines) with [Commitizen](http://commitizen.github.io/cz-cli/). + +### Commit current changes + +```sh +yarn commit +``` + +### Release a new version + +```sh +yarn version +``` + +### Updating dependents projects + +This package is not published on the npm registry. To update the test suite in an InstantSearch project, run the following command in it: + +```sh +yarn add -D "algolia/instantsearch-e2e-tests#XXX" +``` + +(`XXX` being the tag for the version you want to install) + +If [Renovate](https://renovatebot.com/) is enabled on your project then it should update it automatically like any other dependency. From 60d293bcd9e640db5eafb4d2a4fdf74a1872664d Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Wed, 4 Sep 2019 14:46:24 +0200 Subject: [PATCH 60/94] feat(spec): add spec for pagination (algolia/instantsearch-e2e-tests#2) --- tests/e2e/specs/pagination.spec.ts | 92 ++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 tests/e2e/specs/pagination.spec.ts diff --git a/tests/e2e/specs/pagination.spec.ts b/tests/e2e/specs/pagination.spec.ts new file mode 100644 index 0000000000..7dc1699681 --- /dev/null +++ b/tests/e2e/specs/pagination.spec.ts @@ -0,0 +1,92 @@ +describe('InstantSearch - Page navigation', () => { + it('navigates to the e-commerce demo', async () => { + await browser.url('examples/e-commerce/'); + }); + + it('navigates to next page', async () => { + await browser.setNextPage(); + }); + + it('must have the expected results for page 2', async () => { + const hitsTitles = await browser.getHitsTitles(); + + expect(hitsTitles).toEqual([ + 'Sony - BDP-S3700 - Streaming Wi-Fi Built-In Blu-ray Player - Black', + 'Insignia™ - 55" Class - (54.6" Diag.) - LED - 1080p - HDTV - Black', + 'HP - 15.6" Laptop - AMD A6-Series - 4GB Memory - 500GB Hard Drive - Black', + 'Nintendo - amiibo Figure (The Legend of Zelda: Breath of the Wild Series Bokoblin)', + 'AT&T GoPhone - Samsung Galaxy Express 3 4G LTE with 8GB Memory Prepaid Cell Phone', + 'Insignia™ - 32" Class - (31.5" Diag.) - LED - 720p - HDTV - Black', + 'Lenovo - 110-15ISK 15.6" Laptop - Intel Core i3 - 4GB Memory - 1TB Hard Drive - Black', + 'Amazon - Echo Dot', + 'Harman/kardon - Onyx Mini Portable Wireless Speaker - Black', + 'Insignia™ - Portable Wireless Speaker - Black', + 'Insignia™ - 92 Bright Multipurpose Paper - White', + 'Apple - MacBook Pro with Retina display - 13.3" Display - 8GB Memory - 128GB Flash Storage - Silver', + 'SanDisk - Ultra Plus 32GB microSDHC Class 10 UHS-1 Memory Card - Gray/Red', + 'Amazon - Fire TV (2015 Model) - Black', + 'GoPro - HERO5 Black 4K Action Camera', + 'Epson - Expression Home XP-430 Small-in-One Wireless All-In-One Printer', + ]); + }); + + it('selects "Appliances" in the category menu', async () => { + await browser.setSelectedHierarchicalMenuItem('Appliances'); + }); + + it('must reset the page to 1', async () => { + const page = await browser.getPage(); + + expect(page).toEqual(1); + }); + + it('must have the expected results for page 1', async () => { + const hitsTitles = await browser.getHitsTitles(); + + expect(hitsTitles).toEqual([ + 'Nest - Learning Thermostat - 3rd Generation - Stainless Steel', + 'LG - 1.1 Cu. Ft. Mid-Size Microwave - Stainless-Steel', + 'Insignia™ - 2.6 Cu. Ft. Compact Refrigerator - Black', + 'Keurig - K50 Coffeemaker - Black', + 'iRobot - Roomba 650 Vacuuming Robot - Black', + 'Shark - Navigator Lift-Away Deluxe Bagless Upright Vacuum - Blue', + 'LG - 1.5 Cu. Ft. Mid-Size Microwave - Stainless Steel', + 'Insignia™ - 5.0 Cu. Ft. Chest Freezer - White', + 'Samsung - activewash 4.8 Cu. Ft. 11-Cycle High-Efficiency Top-Loading Washer - White', + 'Samsung - 4.8 Cu. Ft. 11-Cycle High-Efficiency Top-Loading Washer - White', + 'LG - 2.0 Cu. Ft. Full-Size Microwave - Stainless Steel', + 'Shark - Rotator Professional Lift-Away HEPA Bagless 2-in-1 Upright Vacuum - Red', + 'LG - 4.5 Cu. Ft. 8-Cycle High-Efficiency Top-Loading Washer - White', + 'Samsung - 4.2 Cu. Ft. 9-Cycle High-Efficiency Steam Front-Loading Washer - Platinum', + 'Panasonic - 1.3 Cu. Ft. Mid-Size Microwave - Stainless steel/black/silver', + 'LG - 2.0 Cu. Ft. Mid-Size Microwave - Black Stainless', + ]); + }); + + it('navigates to page 3', async () => { + await browser.setPage(3); + }); + + it('must have the expected results for page 3', async () => { + const hitsTitles = await browser.getHitsTitles(); + + expect(hitsTitles).toEqual([ + 'Keurig - Swiss Miss Milk Chocolate Hot Cocoa K-Cup® Pods (16-Pack)', + 'Samsung - 4.5 Cu. Ft. 14-Cycle Addwash™ High-Efficiency Front-Loading Washer with Steam - Black Stainless', + 'Keurig - Cinnabon Classic Cinnamon Roll K-Cup® Pods (18-Pack) - Multi', + 'Dyson - V8 Absolute Bagless Cordless Stick Vacuum - Multi', + 'Honeywell - 1 Gal. Warm Moisture Humidifier - Black', + 'Ninja - Nutri Ninja 32 Oz. Auto-iQ Blender - Black', + 'Anova - Precision Cooker WiFi', + 'Nespresso - VertuoLine Evoluo Espresso Maker/Coffeemaker - Gray', + 'LG - 0.7 Cu. Ft. Compact Microwave - Stainless-Steel', + 'Samsung - 1.8 Cu. Ft. Over-the-Range Microwave - Stainless Steel', + 'Dyson - V6 Motorhead Bagless Cordless Stick Vacuum - Fuchsia/Iron', + 'LG - 7.4 Cu. Ft. 8-Cycle Electric Dryer - White', + 'Samsung - 7.5 Cu. Ft. 11-Cycle Electric Dryer with Steam - Platinum', + 'ecobee - ecobee3 Programmable Touch-Screen Wi-Fi Thermostat (2nd Generation) - Black/White', + 'LG - Stacking Kit for Most 27" LG Washers and Dryers - Chrome', + 'Magic Bullet - Blender - Silver/Black', + ]); + }); +}); From 61240866330b5914352c42d041c36b562a44a065 Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Wed, 4 Sep 2019 16:23:31 +0200 Subject: [PATCH 61/94] feat(spec): add spec for search on specific category (algolia/instantsearch-e2e-tests#3) --- tests/e2e/specs/category.spec.ts | 63 ++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 tests/e2e/specs/category.spec.ts diff --git a/tests/e2e/specs/category.spec.ts b/tests/e2e/specs/category.spec.ts new file mode 100644 index 0000000000..90da6753eb --- /dev/null +++ b/tests/e2e/specs/category.spec.ts @@ -0,0 +1,63 @@ +describe('InstantSearch - Search on specific category', () => { + it('navigates to the e-commerce demo', async () => { + await browser.url('examples/e-commerce/'); + }); + + it('selects "Appliances" category in list', async () => { + await browser.setSelectedHierarchicalMenuItem('Appliances'); + }); + + it('selects "Small Kitchen Appliances" category in list', async () => { + await browser.setSelectedHierarchicalMenuItem('Small Kitchen Appliances'); + }); + + it('must have the expected results for "Small Kitchen Appliances"', async () => { + const hitsTitles = await browser.getHitsTitles(); + + expect(hitsTitles).toEqual([ + 'Insignia™ - 2.6 Cu. Ft. Compact Refrigerator - Black', + 'Keurig - K50 Coffeemaker - Black', + 'Keurig - K200 Brewer - Black', + 'Frigidaire - 3.3 Cu. Ft. Compact Refrigerator - Stainless Steel', + 'Ninja - Mega Kitchen System 72-Oz. Blender - Black', + 'Ninja - Nutri Ninja Pro 24-Oz. Blender - Black/Silver', + 'Oster - Inspire 2-Slice Wide-Slot Toaster - Black', + 'Keurig - The Original Donut Shop K-Cup® Pods (18-Pack)', + 'Chefman - Express Air Fryer - Black', + 'Oster - 10-Speed Blender - Black', + 'Keurig - Swiss Miss Milk Chocolate Hot Cocoa K-Cup® Pods (16-Pack)', + 'Keurig - Cinnabon Classic Cinnamon Roll K-Cup® Pods (18-Pack) - Multi', + 'Ninja - Nutri Ninja 32 Oz. Auto-iQ Blender - Black', + 'Anova - Precision Cooker WiFi', + 'Nespresso - VertuoLine Evoluo Espresso Maker/Coffeemaker - Gray', + 'Magic Bullet - Blender - Silver/Black', + ]); + }); + + it('unselects "Small Kitchen Appliances" category in list', async () => { + await browser.setSelectedHierarchicalMenuItem('Small Kitchen Appliances'); + }); + + it('must have the expected results for "Appliances"', async () => { + const hitsTitles = await browser.getHitsTitles(); + + expect(hitsTitles).toEqual([ + 'Nest - Learning Thermostat - 3rd Generation - Stainless Steel', + 'LG - 1.1 Cu. Ft. Mid-Size Microwave - Stainless-Steel', + 'Insignia™ - 2.6 Cu. Ft. Compact Refrigerator - Black', + 'Keurig - K50 Coffeemaker - Black', + 'iRobot - Roomba 650 Vacuuming Robot - Black', + 'Shark - Navigator Lift-Away Deluxe Bagless Upright Vacuum - Blue', + 'LG - 1.5 Cu. Ft. Mid-Size Microwave - Stainless Steel', + 'Insignia™ - 5.0 Cu. Ft. Chest Freezer - White', + 'Samsung - activewash 4.8 Cu. Ft. 11-Cycle High-Efficiency Top-Loading Washer - White', + 'Samsung - 4.8 Cu. Ft. 11-Cycle High-Efficiency Top-Loading Washer - White', + 'LG - 2.0 Cu. Ft. Full-Size Microwave - Stainless Steel', + 'Shark - Rotator Professional Lift-Away HEPA Bagless 2-in-1 Upright Vacuum - Red', + 'LG - 4.5 Cu. Ft. 8-Cycle High-Efficiency Top-Loading Washer - White', + 'Samsung - 4.2 Cu. Ft. 9-Cycle High-Efficiency Steam Front-Loading Washer - Platinum', + 'Panasonic - 1.3 Cu. Ft. Mid-Size Microwave - Stainless steel/black/silver', + 'LG - 2.0 Cu. Ft. Mid-Size Microwave - Black Stainless', + ]); + }); +}); From 70709af2e29f8b46f8341e1f5ac62dcc193a2abb Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Fri, 6 Sep 2019 14:06:42 +0200 Subject: [PATCH 62/94] fix(spec): fix price-range spec to match new slider behavior (algolia/instantsearch-e2e-tests#8) --- tests/e2e/specs/price-range.spec.ts | 36 ++++++++++++++--------------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/tests/e2e/specs/price-range.spec.ts b/tests/e2e/specs/price-range.spec.ts index 94e8ea9b7a..8af32195f7 100644 --- a/tests/e2e/specs/price-range.spec.ts +++ b/tests/e2e/specs/price-range.spec.ts @@ -7,7 +7,7 @@ describe('InstantSearch - Search on specific price range', () => { }); it('drag and drop lower handle to the right', async () => { - lowerBound = await browser.setRangeSliderLowerBound(971); + lowerBound = await browser.setRangeSliderLowerBound(30); }); it(`waits for the results list to be updated (wait for all the prices to be > lowerBound)`, async () => { @@ -22,7 +22,7 @@ describe('InstantSearch - Search on specific price range', () => { }); it('drag and drop upper handle to the left', async () => { - upperBound = await browser.setRangeSliderUpperBound(1971); + upperBound = await browser.setRangeSliderUpperBound(70); }); it(`waits for the results list to be updated (wait for all the prices to be < upperBound)`, async () => { @@ -40,22 +40,22 @@ describe('InstantSearch - Search on specific price range', () => { const hitsTitles = await browser.getHitsTitles(); expect(hitsTitles).toEqual([ - 'Apple - MacBook Air® (Latest Model) - 13.3" Display - Intel Core i5 - 8GB Memory - 128GB Flash Storage - Silver', - 'Apple - MacBook Pro with Retina display - 13.3" Display - 8GB Memory - 128GB Flash Storage - Silver', - 'Apple - MacBook Air® (Latest Model) - 13.3" Display - Intel Core i5 - 8GB Memory - 256GB Flash Storage - Silver', - 'Sony - 65" Class (64.5" Diag.) - 2160p - Smart - 4K Ultra HD TV with High Dynamic Range - Black', - 'Apple - MacBook Pro® - 13" Display - Intel Core i5 - 8 GB Memory - 256GB Flash Storage (latest model) - Space Gray', - 'Samsung - 65" Class (64.5" Diag.) - LED - 2160p - Smart - 4K Ultra HD TV - with High Dynamic Range - Silver', - 'Sony - 55" Class (54.6" Diag.) - 2160p - Smart - 4K Ultra HD TV with High Dynamic Range - Black', - 'HP - Spectre x360 2-in-1 15.6" 4K Ultra HD Touch-Screen Laptop - Intel Core i7 - 16GB Memory - 256GB Solid State Drive - Natural Silver', - 'Microsoft - Surface Pro 4 - 12.3" - 128GB - Intel Core i5 - Silver', - 'Samsung - 49" Class - (48.5" Diag.) - LED - 2160p - Smart - 4K Ultra HD TV - with High Dynamic Range - Silver', - 'Samsung - 55" Class - (54.6" Diag.) - LED - 2160p - Smart - 4K Ultra HD TV - with High Dynamic Range - Silver', - 'HP - ENVY 17.3" Touch-Screen Laptop - Intel Core i7 - 16GB Memory - 1TB Hard Drive - Natural Silver', - 'HP - Pavilion 27" Touch-Screen All-In-One - Intel Core i7 - 12GB Memory - 1TB Hard Drive - HP finish in turbo silver', - 'Samsung - 65" Class - (64.5" Diag.) - LED - 2160p - Smart - 4K Ultra HD TV with High Dynamic Range - Black', - 'Sony - 55" Class (54.6" diag) - LED - 2160p - Smart - 3D - 4K Ultra HD TV with High Dynamic Range - Black', - 'HP - OMEN 17.3" Laptop - Intel Core i7 - 12GB Memory - NVIDIA GeForce GTX 965M - 1TB HDD + 256GB Solid State Drive - Onyx Black/Twinkle Black', + 'Amazon - Fire TV Stick with Alexa Voice Remote - Black', + 'Google - Chromecast - Black', + 'Amazon - Echo Dot', + 'LG - Ultra Slim 8x Max. DVD Write Speed External USB DVD±RW/CD-RW Drive - Black', + 'AT&T GoPhone - Samsung Galaxy Express 3 4G LTE with 8GB Memory Prepaid Cell Phone', + 'Amazon - Echo Dot', + 'Insignia™ - Portable Wireless Speaker - Black', + 'SanDisk - Ultra Plus 32GB microSDHC Class 10 UHS-1 Memory Card - Gray/Red', + 'Philips - Hue White and Color Ambiance A19 Add-on Smart LED bulb (3rd Gen) - Multicolor', + 'SanDisk - Ultra Plus 32GB SDHC Class 10 UHS-1 Memory Card - Black/Gray/Red', + 'HP - 61 2-Pack Ink Cartridges - Black/Cyan/Magenta/Yellow', + 'HP - 62 2-Pack Ink Cartridges - Black/Tricolor', + 'SanDisk - Pixtor 32GB microSDHC Class 10 UHS-1 Memory Card - Gray/Red', + 'Amazon - Fire - 7" Tablet - 8GB - Black', + 'HP - 63 2-Pack Ink Cartridges - Black/Cyan/Magenta/Yellow', + 'DigiLand - 7" - Tablet - 16GB', ]); }); }); From 047ab0f5537e1e163bdb0e8396ab15b5329e831d Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Fri, 6 Sep 2019 14:07:05 +0200 Subject: [PATCH 63/94] fix(helper): fix setRangeSliderLowerBound offset calculation (algolia/instantsearch-e2e-tests#7) --- tests/e2e/helpers/setRangeSliderLowerBound.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/e2e/helpers/setRangeSliderLowerBound.ts b/tests/e2e/helpers/setRangeSliderLowerBound.ts index 6c6c918d3b..d362fd2bed 100644 --- a/tests/e2e/helpers/setRangeSliderLowerBound.ts +++ b/tests/e2e/helpers/setRangeSliderLowerBound.ts @@ -25,7 +25,7 @@ browser.addCommand('setRangeSliderLowerBound', async (value: number) => { // Get the horizontal difference between the handle and the slider (can happen if the handle have some margins) const xDifference = sliderX - lowerHandleX; // Calculate the final offset - const offset = value * step + xDifference; + const offset = (value - lowerHandleMin) * step + xDifference; await browser.dragAndDropByOffset(lowerHandle, offset); From 2a313654a38d4645fa6b585b2e0383b55f7366a0 Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Fri, 6 Sep 2019 14:07:25 +0200 Subject: [PATCH 64/94] fix(helper): fix helpers to scroll to elements before attempting to click on it (algolia/instantsearch-e2e-tests#6) --- tests/e2e/helpers/changeToggleRefinementStatus.ts | 2 ++ tests/e2e/helpers/clearRefinements.ts | 2 ++ tests/e2e/helpers/setNextPage.ts | 2 ++ tests/e2e/helpers/setPage.ts | 2 ++ tests/e2e/helpers/setPreviousPage.ts | 2 ++ tests/e2e/helpers/setRatingMenuValue.ts | 2 ++ tests/e2e/helpers/setSearchBoxValue.ts | 2 ++ tests/e2e/helpers/setSelectedHierarchicalMenuItem.ts | 3 +++ tests/e2e/helpers/setSelectedRefinementListItem.ts | 3 +++ 9 files changed, 20 insertions(+) diff --git a/tests/e2e/helpers/changeToggleRefinementStatus.ts b/tests/e2e/helpers/changeToggleRefinementStatus.ts index 8719a57bcc..9b9d57b54c 100644 --- a/tests/e2e/helpers/changeToggleRefinementStatus.ts +++ b/tests/e2e/helpers/changeToggleRefinementStatus.ts @@ -6,6 +6,8 @@ declare namespace WebdriverIOAsync { browser.addCommand('changeToggleRefinementStatus', async () => { const checkbox = await browser.$('.ais-ToggleRefinement-checkbox'); + // Assures us that the element is in the viewport + await checkbox.scrollIntoView(); return checkbox.click(); }); diff --git a/tests/e2e/helpers/clearRefinements.ts b/tests/e2e/helpers/clearRefinements.ts index f2905f0365..14cb0f3a2d 100644 --- a/tests/e2e/helpers/clearRefinements.ts +++ b/tests/e2e/helpers/clearRefinements.ts @@ -6,6 +6,8 @@ declare namespace WebdriverIOAsync { browser.addCommand('clearRefinements', async () => { const clearButton = await browser.$(`.ais-ClearRefinements-button`); + // Assures us that the element is in the viewport + await clearButton.scrollIntoView(); await clearButton.click(); diff --git a/tests/e2e/helpers/setNextPage.ts b/tests/e2e/helpers/setNextPage.ts index 93c2376df9..169687b22c 100644 --- a/tests/e2e/helpers/setNextPage.ts +++ b/tests/e2e/helpers/setNextPage.ts @@ -9,6 +9,8 @@ browser.addCommand('setNextPage', async () => { const page = await browser.$( `.ais-Pagination-item--nextPage .ais-Pagination-link` ); + // Assures us that the element is in the viewport + await page.scrollIntoView(); await page.click(); diff --git a/tests/e2e/helpers/setPage.ts b/tests/e2e/helpers/setPage.ts index 9a62b7d4c3..9efe7c5ae8 100644 --- a/tests/e2e/helpers/setPage.ts +++ b/tests/e2e/helpers/setPage.ts @@ -6,6 +6,8 @@ declare namespace WebdriverIOAsync { browser.addCommand('setPage', async (number: number) => { const page = await browser.$(`.ais-Pagination-link=${number}`); + // Assures us that the element is in the viewport + await page.scrollIntoView(); await page.click(); diff --git a/tests/e2e/helpers/setPreviousPage.ts b/tests/e2e/helpers/setPreviousPage.ts index 32ec9b3dfc..8f692e6a35 100644 --- a/tests/e2e/helpers/setPreviousPage.ts +++ b/tests/e2e/helpers/setPreviousPage.ts @@ -9,6 +9,8 @@ browser.addCommand('setPreviousPage', async () => { const page = await browser.$( `.ais-Pagination-item--previousPage .ais-Pagination-link` ); + // Assures us that the element is in the viewport + await page.scrollIntoView(); await page.click(); diff --git a/tests/e2e/helpers/setRatingMenuValue.ts b/tests/e2e/helpers/setRatingMenuValue.ts index e7fd407d7b..f34d913b46 100644 --- a/tests/e2e/helpers/setRatingMenuValue.ts +++ b/tests/e2e/helpers/setRatingMenuValue.ts @@ -6,6 +6,8 @@ declare namespace WebdriverIOAsync { browser.addCommand('setRatingMenuValue', async (label: string) => { const rating = await browser.$(`.ais-RatingMenu-link[aria-label="${label}"]`); + // Assures us that the element is in the viewport + await rating.scrollIntoView(); await rating.click(); diff --git a/tests/e2e/helpers/setSearchBoxValue.ts b/tests/e2e/helpers/setSearchBoxValue.ts index f1a67661e5..af748f8c9a 100644 --- a/tests/e2e/helpers/setSearchBoxValue.ts +++ b/tests/e2e/helpers/setSearchBoxValue.ts @@ -7,6 +7,8 @@ declare namespace WebdriverIOAsync { browser.addCommand('setSearchBoxValue', async (value: string) => { const oldUrl = await browser.getUrl(); const searchBox = await browser.$('.ais-SearchBox [type=search]'); + // Assures us that the element is in the viewport + await searchBox.scrollIntoView(); // In Internet Explorer the input must be focused before updating its value await searchBox.click(); await searchBox.setValue(value); diff --git a/tests/e2e/helpers/setSelectedHierarchicalMenuItem.ts b/tests/e2e/helpers/setSelectedHierarchicalMenuItem.ts index efd5c9b6c6..9a42225e22 100644 --- a/tests/e2e/helpers/setSelectedHierarchicalMenuItem.ts +++ b/tests/e2e/helpers/setSelectedHierarchicalMenuItem.ts @@ -7,6 +7,9 @@ declare namespace WebdriverIOAsync { browser.addCommand('setSelectedHierarchicalMenuItem', async (label: string) => { const oldUrl = await browser.getUrl(); const item = await browser.$(`.ais-HierarchicalMenu-label=${label}`); + // Assures us that the element is in the viewport + await item.scrollIntoView(); + await item.click(); // Changing the URL will also change the page element IDs in Internet Explorer diff --git a/tests/e2e/helpers/setSelectedRefinementListItem.ts b/tests/e2e/helpers/setSelectedRefinementListItem.ts index 234404a739..eeb4675ef1 100644 --- a/tests/e2e/helpers/setSelectedRefinementListItem.ts +++ b/tests/e2e/helpers/setSelectedRefinementListItem.ts @@ -7,6 +7,9 @@ declare namespace WebdriverIOAsync { browser.addCommand('setSelectedRefinementListItem', async (label: string) => { const oldUrl = await browser.getUrl(); const item = await browser.$(`.ais-RefinementList-labelText=${label}`); + // Assures us that the element is in the viewport + await item.scrollIntoView(); + await item.click(); // Changing the URL will also change the page element IDs in Internet Explorer From 396ded59a8aad0312572166379bdeed610bb1790 Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Fri, 6 Sep 2019 14:21:09 +0200 Subject: [PATCH 65/94] feat(spec): add spec for initializing the state from the route (algolia/instantsearch-e2e-tests#4) --- .../specs/initial-state-from-route.spec.ts | 159 ++++++++++++++++++ 1 file changed, 159 insertions(+) create mode 100644 tests/e2e/specs/initial-state-from-route.spec.ts diff --git a/tests/e2e/specs/initial-state-from-route.spec.ts b/tests/e2e/specs/initial-state-from-route.spec.ts new file mode 100644 index 0000000000..870586f9aa --- /dev/null +++ b/tests/e2e/specs/initial-state-from-route.spec.ts @@ -0,0 +1,159 @@ +import { URL, URLSearchParams } from 'url'; + +describe('InstantSearch - State and route', () => { + describe('read', () => { + it('navigates to the e-commerce demo with refinements set in route', async () => { + const params = new URLSearchParams({ + query: 'mixer', + page: '2', + brands: 'KitchenAid', + rating: '4', + price: '50:350', + free_shipping: 'true', // eslint-disable-line @typescript-eslint/camelcase + sortBy: 'instant_search_price_desc', + hitsPerPage: '32', + }); + await browser.url( + `examples/e-commerce/search/Appliances%2FSmall+Kitchen+Appliances/?${params.toString()}` + ); + }); + + it('must have "mixer" set as initial search box value', async () => { + const searchBoxValue = await browser.getSearchBoxValue(); + + expect(searchBoxValue).toEqual('mixer'); + }); + + it('must have "Appliances" and "Small Kitchen Appliances" items selected in the category menu', async () => { + const items = await browser.getSelectedHierarchicalMenuItems(); + + expect(items).toEqual(['Appliances', 'Small Kitchen Appliances']); + }); + + it('must have "KitchenAid" brand selected in the brands menu', async () => { + const brand = await browser.getSelectedRefinementListItem(); + + expect(brand).toEqual('KitchenAid'); + }); + + it('must have lower price set to $50 and the upper price set to $350 in the price range', async () => { + const lowerPrice = await browser.getRangeSliderLowerBound(); + const upperPrice = await browser.getRangeSliderUpperBound(); + + expect(lowerPrice).toEqual(50); + expect(upperPrice).toEqual(350); + }); + + it('must have free shipping box checked', async () => { + const freeShipping = await browser.getToggleRefinementStatus(); + + expect(freeShipping).toEqual(true); + }); + + it('must have rating "4 & up" selected in the rating menu', async () => { + const rating = await browser.getRatingMenuValue(); + + expect(rating).toEqual('4 & up'); + }); + + it('must have "Price descending" selected in the sort select', async () => { + const sortBy = await browser.getSortByValue(); + + expect(sortBy).toEqual('instant_search_price_desc'); + }); + + it('must have "32 hits per page" selected in the hits per page select', async () => { + const hitsPerPage = await browser.getHitsPerPage(); + + expect(hitsPerPage).toEqual(32); + }); + + it('must have page 2 selected in the pagination', async () => { + const page = await browser.getPage(); + + expect(page).toEqual(2); + }); + + it('must have the expected results', async () => { + const hitsTitles = await browser.getHitsTitles(); + + expect(hitsTitles).toEqual([ + 'KitchenAid - 9-Speed Hand Mixer - Onyx Black', + 'KitchenAid - Attachment Pack with Citrus Juicer for Most KitchenAid Stand Mixers - White', + 'KitchenAid - Ice Cream Maker for Most KitchenAid Stand Mixers - White', + 'KitchenAid - Pasta Sheet Roller for Most KitchenAid Stand Mixers - Silver', + 'KitchenAid - 7-Speed Hand Mixer - Contour Silver', + 'KitchenAid - 7-Speed Hand Mixer - Onyx Black', + 'KitchenAid - 7-Speed Hand Mixer - White', + 'KitchenAid - 5-Quart Glass Mixing Bowl - Frosted Glass', + 'KitchenAid - 3-Speed Hand Mixer - Contour Silver', + 'KitchenAid - 3-Speed Hand Mixer - Onyx Black', + ]); + }); + }); + + describe('write', () => { + it('sets "cooktop" as search box value', async () => { + await browser.setSearchBoxValue('cooktop'); + }); + + it('deselects "KitchenAid" brand in the brands menu', async () => { + await browser.setSelectedRefinementListItem('KitchenAid'); + }); + + it('deselects "Small Kitchen Appliances" items and select "Ranges, Cooktops & Ovens" in the category menu', async () => { + await browser.setSelectedHierarchicalMenuItem('Small Kitchen Appliances'); + await browser.setSelectedHierarchicalMenuItem('Ranges, Cooktops & Ovens'); + }); + + it('selects "Whirlpool" brand in the brands menu', async () => { + await browser.setSelectedRefinementListItem('Whirlpool'); + }); + + it('unchecks free shipping box', async () => { + await browser.changeToggleRefinementStatus(); + }); + + it('selects rating "3 & up" in the rating menu', async () => { + await browser.setRatingMenuValue('3 & up'); + }); + + it('selects "Price ascending" in the sort select', async () => { + await browser.setSortByValue('Price ascending'); + }); + + it('sets lower price to $250 and the upper price to $1250 in the price range', async () => { + await browser.setRangeSliderLowerBound(250); + await browser.setRangeSliderUpperBound(1250); + }); + + it('selects "64 hits per page" in the hits per page select', async () => { + await browser.setHitsPerPage('64 hits per page'); + }); + + it('selects page 2 in the pagination', async () => { + await browser.setPage(2); + }); + + it('must have the expected url', async () => { + await browser.waitUntil(async () => { + const url = await browser.getUrl(); + const { pathname, searchParams } = new URL(url); + + return ( + pathname === + '/examples/e-commerce/search/Appliances%2FRanges%2C+Cooktops+%26+Ovens/' && + searchParams.get('query') === 'cooktop' && + searchParams.get('page') === '2' && + searchParams.get('brands') === 'Whirlpool' && + searchParams.get('rating') === '3' && + /^(24[0-9]|250):(124[0-9]|1250)$/.test( + searchParams.get('price') || '' + ) && + searchParams.get('sortBy') === 'instant_search_price_asc' && + searchParams.get('hitsPerPage') === '64' + ); + }); + }); + }); +}); From 223001f12a0ef79be9514fb65d51cbee75a88662 Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Fri, 6 Sep 2019 15:27:35 +0200 Subject: [PATCH 66/94] refactor(helper): rename helpers to better reflect underlying user interaction (algolia/instantsearch-e2e-tests#5) --- ...efinements.ts => clickClearRefinements.ts} | 4 +-- ...nuItem.ts => clickHierarchicalMenuItem.ts} | 4 +-- .../{setNextPage.ts => clickNextPage.ts} | 6 ++-- .../e2e/helpers/{setPage.ts => clickPage.ts} | 4 +-- ...etPreviousPage.ts => clickPreviousPage.ts} | 6 ++-- ...ingMenuValue.ts => clickRatingMenuItem.ts} | 4 +-- ...ListItem.ts => clickRefinementListItem.ts} | 4 +-- ...mentStatus.ts => clickToggleRefinement.ts} | 4 +-- ...ound.ts => dragRangeSliderLowerBoundTo.ts} | 4 +-- ...ound.ts => dragRangeSliderUpperBoundTo.ts} | 4 +-- .../helpers/{getPage.ts => getCurrentPage.ts} | 4 +-- ...nd.ts => getRangeSliderLowerBoundValue.ts} | 4 +-- ...nd.ts => getRangeSliderUpperBoundValue.ts} | 4 +-- ...uValue.ts => getSelectedRatingMenuItem.ts} | 4 +-- tests/e2e/helpers/index.ts | 28 +++++++++---------- tests/e2e/specs/brand-and-query.spec.ts | 2 +- tests/e2e/specs/category.spec.ts | 6 ++-- .../specs/initial-state-from-route.spec.ts | 26 ++++++++--------- tests/e2e/specs/pagination.spec.ts | 8 +++--- tests/e2e/specs/price-range.spec.ts | 4 +-- 20 files changed, 67 insertions(+), 67 deletions(-) rename tests/e2e/helpers/{clearRefinements.ts => clickClearRefinements.ts} (76%) rename tests/e2e/helpers/{setSelectedHierarchicalMenuItem.ts => clickHierarchicalMenuItem.ts} (78%) rename tests/e2e/helpers/{setNextPage.ts => clickNextPage.ts} (71%) rename tests/e2e/helpers/{setPage.ts => clickPage.ts} (74%) rename tests/e2e/helpers/{setPreviousPage.ts => clickPreviousPage.ts} (71%) rename tests/e2e/helpers/{setRatingMenuValue.ts => clickRatingMenuItem.ts} (75%) rename tests/e2e/helpers/{setSelectedRefinementListItem.ts => clickRefinementListItem.ts} (78%) rename tests/e2e/helpers/{changeToggleRefinementStatus.ts => clickToggleRefinement.ts} (68%) rename tests/e2e/helpers/{setRangeSliderLowerBound.ts => dragRangeSliderLowerBoundTo.ts} (90%) rename tests/e2e/helpers/{setRangeSliderUpperBound.ts => dragRangeSliderUpperBoundTo.ts} (91%) rename tests/e2e/helpers/{getPage.ts => getCurrentPage.ts} (66%) rename tests/e2e/helpers/{getRangeSliderLowerBound.ts => getRangeSliderLowerBoundValue.ts} (65%) rename tests/e2e/helpers/{getRangeSliderUpperBound.ts => getRangeSliderUpperBoundValue.ts} (65%) rename tests/e2e/helpers/{getRatingMenuValue.ts => getSelectedRatingMenuItem.ts} (65%) diff --git a/tests/e2e/helpers/clearRefinements.ts b/tests/e2e/helpers/clickClearRefinements.ts similarity index 76% rename from tests/e2e/helpers/clearRefinements.ts rename to tests/e2e/helpers/clickClearRefinements.ts index 14cb0f3a2d..33d1dec9da 100644 --- a/tests/e2e/helpers/clearRefinements.ts +++ b/tests/e2e/helpers/clickClearRefinements.ts @@ -1,10 +1,10 @@ declare namespace WebdriverIOAsync { interface Browser { - clearRefinements(): Promise; + clickClearRefinements(): Promise; } } -browser.addCommand('clearRefinements', async () => { +browser.addCommand('clickClearRefinements', async () => { const clearButton = await browser.$(`.ais-ClearRefinements-button`); // Assures us that the element is in the viewport await clearButton.scrollIntoView(); diff --git a/tests/e2e/helpers/setSelectedHierarchicalMenuItem.ts b/tests/e2e/helpers/clickHierarchicalMenuItem.ts similarity index 78% rename from tests/e2e/helpers/setSelectedHierarchicalMenuItem.ts rename to tests/e2e/helpers/clickHierarchicalMenuItem.ts index 9a42225e22..cef1f1cdd8 100644 --- a/tests/e2e/helpers/setSelectedHierarchicalMenuItem.ts +++ b/tests/e2e/helpers/clickHierarchicalMenuItem.ts @@ -1,10 +1,10 @@ declare namespace WebdriverIOAsync { interface Browser { - setSelectedHierarchicalMenuItem(label: string): Promise; + clickHierarchicalMenuItem(label: string): Promise; } } -browser.addCommand('setSelectedHierarchicalMenuItem', async (label: string) => { +browser.addCommand('clickHierarchicalMenuItem', async (label: string) => { const oldUrl = await browser.getUrl(); const item = await browser.$(`.ais-HierarchicalMenu-label=${label}`); // Assures us that the element is in the viewport diff --git a/tests/e2e/helpers/setNextPage.ts b/tests/e2e/helpers/clickNextPage.ts similarity index 71% rename from tests/e2e/helpers/setNextPage.ts rename to tests/e2e/helpers/clickNextPage.ts index 169687b22c..8845c49a71 100644 --- a/tests/e2e/helpers/setNextPage.ts +++ b/tests/e2e/helpers/clickNextPage.ts @@ -1,11 +1,11 @@ declare namespace WebdriverIOAsync { interface Browser { - setNextPage(): Promise; + clickNextPage(): Promise; } } -browser.addCommand('setNextPage', async () => { - const pageNumber = await browser.getPage(); +browser.addCommand('clickNextPage', async () => { + const pageNumber = await browser.getCurrentPage(); const page = await browser.$( `.ais-Pagination-item--nextPage .ais-Pagination-link` ); diff --git a/tests/e2e/helpers/setPage.ts b/tests/e2e/helpers/clickPage.ts similarity index 74% rename from tests/e2e/helpers/setPage.ts rename to tests/e2e/helpers/clickPage.ts index 9efe7c5ae8..694afd0eac 100644 --- a/tests/e2e/helpers/setPage.ts +++ b/tests/e2e/helpers/clickPage.ts @@ -1,10 +1,10 @@ declare namespace WebdriverIOAsync { interface Browser { - setPage(number: number): Promise; + clickPage(number: number): Promise; } } -browser.addCommand('setPage', async (number: number) => { +browser.addCommand('clickPage', async (number: number) => { const page = await browser.$(`.ais-Pagination-link=${number}`); // Assures us that the element is in the viewport await page.scrollIntoView(); diff --git a/tests/e2e/helpers/setPreviousPage.ts b/tests/e2e/helpers/clickPreviousPage.ts similarity index 71% rename from tests/e2e/helpers/setPreviousPage.ts rename to tests/e2e/helpers/clickPreviousPage.ts index 8f692e6a35..95b72c4175 100644 --- a/tests/e2e/helpers/setPreviousPage.ts +++ b/tests/e2e/helpers/clickPreviousPage.ts @@ -1,11 +1,11 @@ declare namespace WebdriverIOAsync { interface Browser { - setPreviousPage(): Promise; + clickPreviousPage(): Promise; } } -browser.addCommand('setPreviousPage', async () => { - const pageNumber = await browser.getPage(); +browser.addCommand('clickPreviousPage', async () => { + const pageNumber = await browser.getCurrentPage(); const page = await browser.$( `.ais-Pagination-item--previousPage .ais-Pagination-link` ); diff --git a/tests/e2e/helpers/setRatingMenuValue.ts b/tests/e2e/helpers/clickRatingMenuItem.ts similarity index 75% rename from tests/e2e/helpers/setRatingMenuValue.ts rename to tests/e2e/helpers/clickRatingMenuItem.ts index f34d913b46..e454da399b 100644 --- a/tests/e2e/helpers/setRatingMenuValue.ts +++ b/tests/e2e/helpers/clickRatingMenuItem.ts @@ -1,10 +1,10 @@ declare namespace WebdriverIOAsync { interface Browser { - setRatingMenuValue(label: string): Promise; + clickRatingMenuItem(label: string): Promise; } } -browser.addCommand('setRatingMenuValue', async (label: string) => { +browser.addCommand('clickRatingMenuItem', async (label: string) => { const rating = await browser.$(`.ais-RatingMenu-link[aria-label="${label}"]`); // Assures us that the element is in the viewport await rating.scrollIntoView(); diff --git a/tests/e2e/helpers/setSelectedRefinementListItem.ts b/tests/e2e/helpers/clickRefinementListItem.ts similarity index 78% rename from tests/e2e/helpers/setSelectedRefinementListItem.ts rename to tests/e2e/helpers/clickRefinementListItem.ts index eeb4675ef1..df664d41ad 100644 --- a/tests/e2e/helpers/setSelectedRefinementListItem.ts +++ b/tests/e2e/helpers/clickRefinementListItem.ts @@ -1,10 +1,10 @@ declare namespace WebdriverIOAsync { interface Browser { - setSelectedRefinementListItem(label: string): Promise; + clickRefinementListItem(label: string): Promise; } } -browser.addCommand('setSelectedRefinementListItem', async (label: string) => { +browser.addCommand('clickRefinementListItem', async (label: string) => { const oldUrl = await browser.getUrl(); const item = await browser.$(`.ais-RefinementList-labelText=${label}`); // Assures us that the element is in the viewport diff --git a/tests/e2e/helpers/changeToggleRefinementStatus.ts b/tests/e2e/helpers/clickToggleRefinement.ts similarity index 68% rename from tests/e2e/helpers/changeToggleRefinementStatus.ts rename to tests/e2e/helpers/clickToggleRefinement.ts index 9b9d57b54c..01e7cdfa9a 100644 --- a/tests/e2e/helpers/changeToggleRefinementStatus.ts +++ b/tests/e2e/helpers/clickToggleRefinement.ts @@ -1,10 +1,10 @@ declare namespace WebdriverIOAsync { interface Browser { - changeToggleRefinementStatus(): Promise; + clickToggleRefinement(): Promise; } } -browser.addCommand('changeToggleRefinementStatus', async () => { +browser.addCommand('clickToggleRefinement', async () => { const checkbox = await browser.$('.ais-ToggleRefinement-checkbox'); // Assures us that the element is in the viewport await checkbox.scrollIntoView(); diff --git a/tests/e2e/helpers/setRangeSliderLowerBound.ts b/tests/e2e/helpers/dragRangeSliderLowerBoundTo.ts similarity index 90% rename from tests/e2e/helpers/setRangeSliderLowerBound.ts rename to tests/e2e/helpers/dragRangeSliderLowerBoundTo.ts index d362fd2bed..8b3487d40d 100644 --- a/tests/e2e/helpers/setRangeSliderLowerBound.ts +++ b/tests/e2e/helpers/dragRangeSliderLowerBoundTo.ts @@ -1,10 +1,10 @@ declare namespace WebdriverIOAsync { interface Browser { - setRangeSliderLowerBound(value: number): Promise; + dragRangeSliderLowerBoundTo(value: number): Promise; } } -browser.addCommand('setRangeSliderLowerBound', async (value: number) => { +browser.addCommand('dragRangeSliderLowerBoundTo', async (value: number) => { const slider = await browser.$('.rheostat-horizontal'); let lowerHandle = await browser.$('.ais-RangeSlider .rheostat-handle-lower'); const upperHandle = await browser.$( diff --git a/tests/e2e/helpers/setRangeSliderUpperBound.ts b/tests/e2e/helpers/dragRangeSliderUpperBoundTo.ts similarity index 91% rename from tests/e2e/helpers/setRangeSliderUpperBound.ts rename to tests/e2e/helpers/dragRangeSliderUpperBoundTo.ts index afdc4c0a7f..765964175e 100644 --- a/tests/e2e/helpers/setRangeSliderUpperBound.ts +++ b/tests/e2e/helpers/dragRangeSliderUpperBoundTo.ts @@ -1,10 +1,10 @@ declare namespace WebdriverIOAsync { interface Browser { - setRangeSliderUpperBound(value: number): Promise; + dragRangeSliderUpperBoundTo(value: number): Promise; } } -browser.addCommand('setRangeSliderUpperBound', async (value: number) => { +browser.addCommand('dragRangeSliderUpperBoundTo', async (value: number) => { const slider = await browser.$('.rheostat-horizontal'); const lowerHandle = await browser.$( '.ais-RangeSlider .rheostat-handle-lower' diff --git a/tests/e2e/helpers/getPage.ts b/tests/e2e/helpers/getCurrentPage.ts similarity index 66% rename from tests/e2e/helpers/getPage.ts rename to tests/e2e/helpers/getCurrentPage.ts index 446853140b..e0273b8e29 100644 --- a/tests/e2e/helpers/getPage.ts +++ b/tests/e2e/helpers/getCurrentPage.ts @@ -1,10 +1,10 @@ declare namespace WebdriverIOAsync { interface Browser { - getPage(): Promise; + getCurrentPage(): Promise; } } -browser.addCommand('getPage', async () => { +browser.addCommand('getCurrentPage', async () => { const page = await browser.$('.ais-Pagination-item--selected'); return Number(await page.getText()); diff --git a/tests/e2e/helpers/getRangeSliderLowerBound.ts b/tests/e2e/helpers/getRangeSliderLowerBoundValue.ts similarity index 65% rename from tests/e2e/helpers/getRangeSliderLowerBound.ts rename to tests/e2e/helpers/getRangeSliderLowerBoundValue.ts index dc04488726..20d920b943 100644 --- a/tests/e2e/helpers/getRangeSliderLowerBound.ts +++ b/tests/e2e/helpers/getRangeSliderLowerBoundValue.ts @@ -1,10 +1,10 @@ declare namespace WebdriverIOAsync { interface Browser { - getRangeSliderLowerBound(): Promise; + getRangeSliderLowerBoundValue(): Promise; } } -browser.addCommand('getRangeSliderLowerBound', async () => { +browser.addCommand('getRangeSliderLowerBoundValue', async () => { const lowerHandle = await browser.$( '.ais-RangeSlider .rheostat-handle-lower' ); diff --git a/tests/e2e/helpers/getRangeSliderUpperBound.ts b/tests/e2e/helpers/getRangeSliderUpperBoundValue.ts similarity index 65% rename from tests/e2e/helpers/getRangeSliderUpperBound.ts rename to tests/e2e/helpers/getRangeSliderUpperBoundValue.ts index a097c8b156..202ef47e6e 100644 --- a/tests/e2e/helpers/getRangeSliderUpperBound.ts +++ b/tests/e2e/helpers/getRangeSliderUpperBoundValue.ts @@ -1,10 +1,10 @@ declare namespace WebdriverIOAsync { interface Browser { - getRangeSliderUpperBound(): Promise; + getRangeSliderUpperBoundValue(): Promise; } } -browser.addCommand('getRangeSliderUpperBound', async () => { +browser.addCommand('getRangeSliderUpperBoundValue', async () => { const upperHandle = await browser.$( '.ais-RangeSlider .rheostat-handle-upper' ); diff --git a/tests/e2e/helpers/getRatingMenuValue.ts b/tests/e2e/helpers/getSelectedRatingMenuItem.ts similarity index 65% rename from tests/e2e/helpers/getRatingMenuValue.ts rename to tests/e2e/helpers/getSelectedRatingMenuItem.ts index 05b8c1391a..4fc448cd34 100644 --- a/tests/e2e/helpers/getRatingMenuValue.ts +++ b/tests/e2e/helpers/getSelectedRatingMenuItem.ts @@ -1,10 +1,10 @@ declare namespace WebdriverIOAsync { interface Browser { - getRatingMenuValue(): Promise; + getSelectedRatingMenuItem(): Promise; } } -browser.addCommand('getRatingMenuValue', async () => { +browser.addCommand('getSelectedRatingMenuItem', async () => { const rating = await browser.$( '.ais-RatingMenu-item--selected .ais-RatingMenu-link' ); diff --git a/tests/e2e/helpers/index.ts b/tests/e2e/helpers/index.ts index b3145cf2b3..dee0c098c5 100644 --- a/tests/e2e/helpers/index.ts +++ b/tests/e2e/helpers/index.ts @@ -12,34 +12,34 @@ import './getHitsTitles'; // RefinementList import './getSelectedRefinementListItem'; -import './setSelectedRefinementListItem'; +import './clickRefinementListItem'; // HierarchicalMenu import './getSelectedHierarchicalMenuItems'; -import './setSelectedHierarchicalMenuItem'; +import './clickHierarchicalMenuItem'; // RangeSlider -import './getRangeSliderLowerBound'; -import './setRangeSliderLowerBound'; -import './getRangeSliderUpperBound'; -import './setRangeSliderUpperBound'; +import './getRangeSliderLowerBoundValue'; +import './dragRangeSliderLowerBoundTo'; +import './getRangeSliderUpperBoundValue'; +import './dragRangeSliderUpperBoundTo'; // ToggleRefinement import './getToggleRefinementStatus'; -import './changeToggleRefinementStatus'; +import './clickToggleRefinement'; // RatingMenu -import './getRatingMenuValue'; -import './setRatingMenuValue'; +import './getSelectedRatingMenuItem'; +import './clickRatingMenuItem'; // ClearRefinements -import './clearRefinements'; +import './clickClearRefinements'; // Pagination -import './getPage'; -import './setPage'; -import './setNextPage'; -import './setPreviousPage'; +import './getCurrentPage'; +import './clickPage'; +import './clickNextPage'; +import './clickPreviousPage'; // HitsPerPage import './getHitsPerPage'; diff --git a/tests/e2e/specs/brand-and-query.spec.ts b/tests/e2e/specs/brand-and-query.spec.ts index 66d1c37336..87b5668b52 100644 --- a/tests/e2e/specs/brand-and-query.spec.ts +++ b/tests/e2e/specs/brand-and-query.spec.ts @@ -4,7 +4,7 @@ describe('InstantSearch - Search on specific brand and query filtering', () => { }); it('selects "Apple" brand in list', async () => { - await browser.setSelectedRefinementListItem('Apple'); + await browser.clickRefinementListItem('Apple'); }); it('fills search input with "macbook"', async () => { diff --git a/tests/e2e/specs/category.spec.ts b/tests/e2e/specs/category.spec.ts index 90da6753eb..995fdfa404 100644 --- a/tests/e2e/specs/category.spec.ts +++ b/tests/e2e/specs/category.spec.ts @@ -4,11 +4,11 @@ describe('InstantSearch - Search on specific category', () => { }); it('selects "Appliances" category in list', async () => { - await browser.setSelectedHierarchicalMenuItem('Appliances'); + await browser.clickHierarchicalMenuItem('Appliances'); }); it('selects "Small Kitchen Appliances" category in list', async () => { - await browser.setSelectedHierarchicalMenuItem('Small Kitchen Appliances'); + await browser.clickHierarchicalMenuItem('Small Kitchen Appliances'); }); it('must have the expected results for "Small Kitchen Appliances"', async () => { @@ -35,7 +35,7 @@ describe('InstantSearch - Search on specific category', () => { }); it('unselects "Small Kitchen Appliances" category in list', async () => { - await browser.setSelectedHierarchicalMenuItem('Small Kitchen Appliances'); + await browser.clickHierarchicalMenuItem('Small Kitchen Appliances'); }); it('must have the expected results for "Appliances"', async () => { diff --git a/tests/e2e/specs/initial-state-from-route.spec.ts b/tests/e2e/specs/initial-state-from-route.spec.ts index 870586f9aa..72be6df6f2 100644 --- a/tests/e2e/specs/initial-state-from-route.spec.ts +++ b/tests/e2e/specs/initial-state-from-route.spec.ts @@ -37,8 +37,8 @@ describe('InstantSearch - State and route', () => { }); it('must have lower price set to $50 and the upper price set to $350 in the price range', async () => { - const lowerPrice = await browser.getRangeSliderLowerBound(); - const upperPrice = await browser.getRangeSliderUpperBound(); + const lowerPrice = await browser.getRangeSliderLowerBoundValue(); + const upperPrice = await browser.getRangeSliderUpperBoundValue(); expect(lowerPrice).toEqual(50); expect(upperPrice).toEqual(350); @@ -51,7 +51,7 @@ describe('InstantSearch - State and route', () => { }); it('must have rating "4 & up" selected in the rating menu', async () => { - const rating = await browser.getRatingMenuValue(); + const rating = await browser.getSelectedRatingMenuItem(); expect(rating).toEqual('4 & up'); }); @@ -69,7 +69,7 @@ describe('InstantSearch - State and route', () => { }); it('must have page 2 selected in the pagination', async () => { - const page = await browser.getPage(); + const page = await browser.getCurrentPage(); expect(page).toEqual(2); }); @@ -98,24 +98,24 @@ describe('InstantSearch - State and route', () => { }); it('deselects "KitchenAid" brand in the brands menu', async () => { - await browser.setSelectedRefinementListItem('KitchenAid'); + await browser.clickRefinementListItem('KitchenAid'); }); it('deselects "Small Kitchen Appliances" items and select "Ranges, Cooktops & Ovens" in the category menu', async () => { - await browser.setSelectedHierarchicalMenuItem('Small Kitchen Appliances'); - await browser.setSelectedHierarchicalMenuItem('Ranges, Cooktops & Ovens'); + await browser.clickHierarchicalMenuItem('Small Kitchen Appliances'); + await browser.clickHierarchicalMenuItem('Ranges, Cooktops & Ovens'); }); it('selects "Whirlpool" brand in the brands menu', async () => { - await browser.setSelectedRefinementListItem('Whirlpool'); + await browser.clickRefinementListItem('Whirlpool'); }); it('unchecks free shipping box', async () => { - await browser.changeToggleRefinementStatus(); + await browser.clickToggleRefinement(); }); it('selects rating "3 & up" in the rating menu', async () => { - await browser.setRatingMenuValue('3 & up'); + await browser.clickRatingMenuItem('3 & up'); }); it('selects "Price ascending" in the sort select', async () => { @@ -123,8 +123,8 @@ describe('InstantSearch - State and route', () => { }); it('sets lower price to $250 and the upper price to $1250 in the price range', async () => { - await browser.setRangeSliderLowerBound(250); - await browser.setRangeSliderUpperBound(1250); + await browser.dragRangeSliderLowerBoundTo(250); + await browser.dragRangeSliderUpperBoundTo(1250); }); it('selects "64 hits per page" in the hits per page select', async () => { @@ -132,7 +132,7 @@ describe('InstantSearch - State and route', () => { }); it('selects page 2 in the pagination', async () => { - await browser.setPage(2); + await browser.clickPage(2); }); it('must have the expected url', async () => { diff --git a/tests/e2e/specs/pagination.spec.ts b/tests/e2e/specs/pagination.spec.ts index 7dc1699681..e7a06ab659 100644 --- a/tests/e2e/specs/pagination.spec.ts +++ b/tests/e2e/specs/pagination.spec.ts @@ -4,7 +4,7 @@ describe('InstantSearch - Page navigation', () => { }); it('navigates to next page', async () => { - await browser.setNextPage(); + await browser.clickNextPage(); }); it('must have the expected results for page 2', async () => { @@ -31,11 +31,11 @@ describe('InstantSearch - Page navigation', () => { }); it('selects "Appliances" in the category menu', async () => { - await browser.setSelectedHierarchicalMenuItem('Appliances'); + await browser.clickHierarchicalMenuItem('Appliances'); }); it('must reset the page to 1', async () => { - const page = await browser.getPage(); + const page = await browser.getCurrentPage(); expect(page).toEqual(1); }); @@ -64,7 +64,7 @@ describe('InstantSearch - Page navigation', () => { }); it('navigates to page 3', async () => { - await browser.setPage(3); + await browser.clickPage(3); }); it('must have the expected results for page 3', async () => { diff --git a/tests/e2e/specs/price-range.spec.ts b/tests/e2e/specs/price-range.spec.ts index 8af32195f7..ee6e45b671 100644 --- a/tests/e2e/specs/price-range.spec.ts +++ b/tests/e2e/specs/price-range.spec.ts @@ -7,7 +7,7 @@ describe('InstantSearch - Search on specific price range', () => { }); it('drag and drop lower handle to the right', async () => { - lowerBound = await browser.setRangeSliderLowerBound(30); + lowerBound = await browser.dragRangeSliderLowerBoundTo(30); }); it(`waits for the results list to be updated (wait for all the prices to be > lowerBound)`, async () => { @@ -22,7 +22,7 @@ describe('InstantSearch - Search on specific price range', () => { }); it('drag and drop upper handle to the left', async () => { - upperBound = await browser.setRangeSliderUpperBound(70); + upperBound = await browser.dragRangeSliderUpperBoundTo(70); }); it(`waits for the results list to be updated (wait for all the prices to be < upperBound)`, async () => { From 3c66bcdb586f2603fc2e04ca0343b958234c6078 Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Fri, 6 Sep 2019 15:34:55 +0200 Subject: [PATCH 67/94] chore(release): 1.2.0 --- tests/e2e/CHANGELOG.md | 71 +++++++++++++++++++++++++++++++----------- tests/e2e/package.json | 2 +- 2 files changed, 53 insertions(+), 20 deletions(-) diff --git a/tests/e2e/CHANGELOG.md b/tests/e2e/CHANGELOG.md index 4ece1b37a4..44d7aa6e09 100644 --- a/tests/e2e/CHANGELOG.md +++ b/tests/e2e/CHANGELOG.md @@ -1,35 +1,68 @@ -# [1.1.0](https://github.com/algolia/instantsearch-e2e-tests/compare/v1.0.0...v1.1.0) (2019-08-19) - +# [1.2.0](https://github.com/algolia/instantsearch-e2e-tests/compare/v1.1.0...v1.2.0) (2019-09-06) ### Bug Fixes -* **helper:** fix dragAndDropByOffset helper Internet Explorer 11 compatibility ([393f27a](https://github.com/algolia/instantsearch-e2e-tests/commit/393f27a)) -* **spec:** fix Internet Explorer 11 compatibility for test on brand and query filtering ([57a0ece](https://github.com/algolia/instantsearch-e2e-tests/commit/57a0ece)) -* **spec:** wait for the browser to be maximized before running the test on brand an query filtering ([5db981e](https://github.com/algolia/instantsearch-e2e-tests/commit/5db981e)) - +- **helper:** fix getSelectedHierarchicalMenuItems to wait for the elements ([5a2456b](https://github.com/algolia/instantsearch-e2e-tests/commit/5a2456b)) +- **helper:** fix getTextFromElements helper to use getText selector ([272a7ec](https://github.com/algolia/instantsearch-e2e-tests/commit/272a7ec)) +- **helper:** fix helpers to scroll to elements before attempting to click on it ([#6](https://github.com/algolia/instantsearch-e2e-tests/issues/6)) ([cd87be6](https://github.com/algolia/instantsearch-e2e-tests/commit/cd87be6)) +- **helper:** fix dragRangeSliderLowerBoundTo offset calculation ([#7](https://github.com/algolia/instantsearch-e2e-tests/issues/7)) ([3291000](https://github.com/algolia/instantsearch-e2e-tests/commit/3291000)) +- **spec:** fix price-range spec to match new slider behavior ([#8](https://github.com/algolia/instantsearch-e2e-tests/issues/8)) ([7a566d5](https://github.com/algolia/instantsearch-e2e-tests/commit/7a566d5)) +- **webdriverio:** fix mount paths for static server so rewritten urls works ([2f9490e](https://github.com/algolia/instantsearch-e2e-tests/commit/2f9490e)) ### Features -* **helper:** add getTextFromElements helper ([5c4ec78](https://github.com/algolia/instantsearch-e2e-tests/commit/5c4ec78)) -* **webdriverio:** add Internet Explorer 11 to the Sauce Labs configuration ([fdc32db](https://github.com/algolia/instantsearch-e2e-tests/commit/fdc32db)) - - - -# 1.0.0 (2019-08-12) +- **helper:** add clickToggleRefinement helper ([fa0a0bb](https://github.com/algolia/instantsearch-e2e-tests/commit/fa0a0bb)) +- **helper:** add clickClearRefinements helper ([4c996b0](https://github.com/algolia/instantsearch-e2e-tests/commit/4c996b0)) +- **helper:** add getHitsPerPage helper ([28a6d5f](https://github.com/algolia/instantsearch-e2e-tests/commit/28a6d5f)) +- **helper:** add getHitsTitles helper ([9da7cd9](https://github.com/algolia/instantsearch-e2e-tests/commit/9da7cd9)) +- **helper:** add getCurrentPage helper ([d1e79fc](https://github.com/algolia/instantsearch-e2e-tests/commit/d1e79fc)) +- **helper:** add getRangeSliderLowerBoundValue helper ([cc30634](https://github.com/algolia/instantsearch-e2e-tests/commit/cc30634)) +- **helper:** add getRangeSliderUpperBoundValue helper ([99c336b](https://github.com/algolia/instantsearch-e2e-tests/commit/99c336b)) +- **helper:** add getSelectedRatingMenuItem helper ([1d1dcc6](https://github.com/algolia/instantsearch-e2e-tests/commit/1d1dcc6)) +- **helper:** add getSearchBoxValue helper ([cfd44fb](https://github.com/algolia/instantsearch-e2e-tests/commit/cfd44fb)) +- **helper:** add getSelectedHierarchicalMenuItems helper ([90e0e1c](https://github.com/algolia/instantsearch-e2e-tests/commit/90e0e1c)) +- **helper:** add getSelectedRefinementListItem helper ([278babd](https://github.com/algolia/instantsearch-e2e-tests/commit/278babd)) +- **helper:** add getSortByValue helper ([c71da3c](https://github.com/algolia/instantsearch-e2e-tests/commit/c71da3c)) +- **helper:** add getToggleRefinementStatus helper ([3c8d36d](https://github.com/algolia/instantsearch-e2e-tests/commit/3c8d36d)) +- **helper:** add setHitsPerPage helper ([6f12380](https://github.com/algolia/instantsearch-e2e-tests/commit/6f12380)) +- **helper:** add clickNextPage helper ([6838b66](https://github.com/algolia/instantsearch-e2e-tests/commit/6838b66)) +- **helper:** add clickPage helper ([77b3299](https://github.com/algolia/instantsearch-e2e-tests/commit/77b3299)) +- **helper:** add clickPreviousPage helper ([53eda61](https://github.com/algolia/instantsearch-e2e-tests/commit/53eda61)) +- **helper:** add dragRangeSliderLowerBoundTo helper ([21534d1](https://github.com/algolia/instantsearch-e2e-tests/commit/21534d1)) +- **helper:** add dragRangeSliderUpperBoundTo helper ([a165c05](https://github.com/algolia/instantsearch-e2e-tests/commit/a165c05)) +- **helper:** add clickRatingMenuItem helper ([ce36250](https://github.com/algolia/instantsearch-e2e-tests/commit/ce36250)) +- **helper:** add setSearchBoxValue helper ([5897191](https://github.com/algolia/instantsearch-e2e-tests/commit/5897191)) +- **helper:** add clickHierarchicalMenuItem helper ([6c4b3e2](https://github.com/algolia/instantsearch-e2e-tests/commit/6c4b3e2)) +- **helper:** add clickRefinementListItem helper ([8fe93f2](https://github.com/algolia/instantsearch-e2e-tests/commit/8fe93f2)) +- **helper:** add setSortByValue helper ([57fc5d4](https://github.com/algolia/instantsearch-e2e-tests/commit/57fc5d4)) +- **helper:** add waitForElement helper ([b33b28b](https://github.com/algolia/instantsearch-e2e-tests/commit/b33b28b)) +- **spec:** add spec for initializing the state from the route ([#4](https://github.com/algolia/instantsearch-e2e-tests/issues/4)) ([f92238e](https://github.com/algolia/instantsearch-e2e-tests/commit/f92238e)) +- **spec:** add spec for pagination ([#2](https://github.com/algolia/instantsearch-e2e-tests/issues/2)) ([a75e917](https://github.com/algolia/instantsearch-e2e-tests/commit/a75e917)) +- **spec:** add spec for search on specific category ([#3](https://github.com/algolia/instantsearch-e2e-tests/issues/3)) ([cdd9247](https://github.com/algolia/instantsearch-e2e-tests/commit/cdd9247)) +# [1.1.0](https://github.com/algolia/instantsearch-e2e-tests/compare/v1.0.0...v1.1.0) (2019-08-19) ### Bug Fixes -* **spec:** fix stale element reference exceptions ([e347fc8](https://github.com/algolia/instantsearch-e2e-tests/commit/e347fc8)) -* **typescript:** fix TypeScript configuration to transpile tests when in node_modules ([0d88b76](https://github.com/algolia/instantsearch-e2e-tests/commit/0d88b76)) - +- **helper:** fix dragAndDropByOffset helper Internet Explorer 11 compatibility ([393f27a](https://github.com/algolia/instantsearch-e2e-tests/commit/393f27a)) +- **spec:** fix Internet Explorer 11 compatibility for test on brand and query filtering ([57a0ece](https://github.com/algolia/instantsearch-e2e-tests/commit/57a0ece)) +- **spec:** wait for the browser to be maximized before running the test on brand an query filtering ([5db981e](https://github.com/algolia/instantsearch-e2e-tests/commit/5db981e)) ### Features -* **spec:** add spec for search on specific brand and query filtering ([39f0ea0](https://github.com/algolia/instantsearch-e2e-tests/commit/39f0ea0)) -* **spec:** add spec for search on specific price range ([5345c09](https://github.com/algolia/instantsearch-e2e-tests/commit/5345c09)) -* **webdriverio:** add WebdriverIO local configuration ([e35cab5](https://github.com/algolia/instantsearch-e2e-tests/commit/e35cab5)) -* **webdriverio:** add WebdriverIO Sauce Labs configuration ([9e044da](https://github.com/algolia/instantsearch-e2e-tests/commit/9e044da)) +- **helper:** add getTextFromElements helper ([5c4ec78](https://github.com/algolia/instantsearch-e2e-tests/commit/5c4ec78)) +- **webdriverio:** add Internet Explorer 11 to the Sauce Labs configuration ([fdc32db](https://github.com/algolia/instantsearch-e2e-tests/commit/fdc32db)) +# 1.0.0 (2019-08-12) +### Bug Fixes + +- **spec:** fix stale element reference exceptions ([e347fc8](https://github.com/algolia/instantsearch-e2e-tests/commit/e347fc8)) +- **typescript:** fix TypeScript configuration to transpile tests when in node_modules ([0d88b76](https://github.com/algolia/instantsearch-e2e-tests/commit/0d88b76)) + +### Features +- **spec:** add spec for search on specific brand and query filtering ([39f0ea0](https://github.com/algolia/instantsearch-e2e-tests/commit/39f0ea0)) +- **spec:** add spec for search on specific price range ([5345c09](https://github.com/algolia/instantsearch-e2e-tests/commit/5345c09)) +- **webdriverio:** add WebdriverIO local configuration ([e35cab5](https://github.com/algolia/instantsearch-e2e-tests/commit/e35cab5)) +- **webdriverio:** add WebdriverIO Sauce Labs configuration ([9e044da](https://github.com/algolia/instantsearch-e2e-tests/commit/9e044da)) diff --git a/tests/e2e/package.json b/tests/e2e/package.json index d943a93412..a569de8a67 100644 --- a/tests/e2e/package.json +++ b/tests/e2e/package.json @@ -1,6 +1,6 @@ { "name": "instantsearch-e2e-tests", - "version": "1.1.0", + "version": "1.2.0", "description": "End-2-End test suite for InstantSearch", "homepage": "https://github.com/algolia/instantsearch-e2e-tests", "main": "./index.js", From ae26b407e3a5fa7353559cb203c93af11d1cb8ef Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Wed, 11 Sep 2019 15:30:49 +0200 Subject: [PATCH 68/94] fix(helper): fix helpers to handle RangeSlider in react-instantsearch (algolia/instantsearch-e2e-tests#9) --- tests/e2e/helpers/dragRangeSliderLowerBoundTo.ts | 15 ++++++++++----- tests/e2e/helpers/dragRangeSliderUpperBoundTo.ts | 15 ++++++++++----- .../e2e/helpers/getRangeSliderLowerBoundValue.ts | 5 ++--- .../e2e/helpers/getRangeSliderUpperBoundValue.ts | 5 ++--- 4 files changed, 24 insertions(+), 16 deletions(-) diff --git a/tests/e2e/helpers/dragRangeSliderLowerBoundTo.ts b/tests/e2e/helpers/dragRangeSliderLowerBoundTo.ts index 8b3487d40d..2f7fe8ffed 100644 --- a/tests/e2e/helpers/dragRangeSliderLowerBoundTo.ts +++ b/tests/e2e/helpers/dragRangeSliderLowerBoundTo.ts @@ -5,11 +5,13 @@ declare namespace WebdriverIOAsync { } browser.addCommand('dragRangeSliderLowerBoundTo', async (value: number) => { - const slider = await browser.$('.rheostat-horizontal'); - let lowerHandle = await browser.$('.ais-RangeSlider .rheostat-handle-lower'); - const upperHandle = await browser.$( - '.ais-RangeSlider .rheostat-handle-upper' + const slider = await browser.$('.slider-rail, .rheostat-background'); + + await browser.waitForElement('.slider-handle, .rheostat-handle'); + let [lowerHandle, upperHandle] = await browser.$$( + '.slider-handle, .rheostat-handle' ); + const { width: sliderWidth } = await slider.getSize(); const { x: lowerHandleX } = await lowerHandle.getLocation(); const { x: sliderX } = await slider.getLocation(); @@ -32,6 +34,9 @@ browser.addCommand('dragRangeSliderLowerBoundTo', async (value: number) => { // Depending of the steps calculation there can be a difference between // the wanted value and the actual value of the slider, so we return // the actual value in case we need it in the rest of the tests - lowerHandle = await browser.$('.ais-RangeSlider .rheostat-handle-lower'); + await browser.waitForElement('.slider-handle, .rheostat-handle'); + [lowerHandle, upperHandle] = await browser.$$( + '.slider-handle, .rheostat-handle' + ); return Number(await lowerHandle.getAttribute('aria-valuenow')); }); diff --git a/tests/e2e/helpers/dragRangeSliderUpperBoundTo.ts b/tests/e2e/helpers/dragRangeSliderUpperBoundTo.ts index 765964175e..78b14bbcea 100644 --- a/tests/e2e/helpers/dragRangeSliderUpperBoundTo.ts +++ b/tests/e2e/helpers/dragRangeSliderUpperBoundTo.ts @@ -5,11 +5,13 @@ declare namespace WebdriverIOAsync { } browser.addCommand('dragRangeSliderUpperBoundTo', async (value: number) => { - const slider = await browser.$('.rheostat-horizontal'); - const lowerHandle = await browser.$( - '.ais-RangeSlider .rheostat-handle-lower' + const slider = await browser.$('.slider-rail, .rheostat-background'); + + await browser.waitForElement('.slider-handle, .rheostat-handle'); + let [lowerHandle, upperHandle] = await browser.$$( + '.slider-handle, .rheostat-handle' ); - let upperHandle = await browser.$('.ais-RangeSlider .rheostat-handle-upper'); + const { width: sliderWidth } = await slider.getSize(); const { x: upperHandleX } = await upperHandle.getLocation(); const { x: sliderX } = await slider.getLocation(); @@ -32,6 +34,9 @@ browser.addCommand('dragRangeSliderUpperBoundTo', async (value: number) => { // Depending of the steps calculation there can be a difference between // the wanted value and the actual value of the slider, so we return // the actual value in case we need it in the rest of the tests - upperHandle = await browser.$('.ais-RangeSlider .rheostat-handle-upper'); + await browser.waitForElement('.slider-handle, .rheostat-handle'); + [lowerHandle, upperHandle] = await browser.$$( + '.slider-handle, .rheostat-handle' + ); return Number(await upperHandle.getAttribute('aria-valuenow')); }); diff --git a/tests/e2e/helpers/getRangeSliderLowerBoundValue.ts b/tests/e2e/helpers/getRangeSliderLowerBoundValue.ts index 20d920b943..6bfa7a318b 100644 --- a/tests/e2e/helpers/getRangeSliderLowerBoundValue.ts +++ b/tests/e2e/helpers/getRangeSliderLowerBoundValue.ts @@ -5,8 +5,7 @@ declare namespace WebdriverIOAsync { } browser.addCommand('getRangeSliderLowerBoundValue', async () => { - const lowerHandle = await browser.$( - '.ais-RangeSlider .rheostat-handle-lower' - ); + await browser.waitForElement('.slider-handle, .rheostat-handle'); + const [lowerHandle] = await browser.$$('.slider-handle, .rheostat-handle'); return Number(await lowerHandle.getAttribute('aria-valuenow')); }); diff --git a/tests/e2e/helpers/getRangeSliderUpperBoundValue.ts b/tests/e2e/helpers/getRangeSliderUpperBoundValue.ts index 202ef47e6e..2c4f9a2dff 100644 --- a/tests/e2e/helpers/getRangeSliderUpperBoundValue.ts +++ b/tests/e2e/helpers/getRangeSliderUpperBoundValue.ts @@ -5,8 +5,7 @@ declare namespace WebdriverIOAsync { } browser.addCommand('getRangeSliderUpperBoundValue', async () => { - const upperHandle = await browser.$( - '.ais-RangeSlider .rheostat-handle-upper' - ); + await browser.waitForElement('.slider-handle, .rheostat-handle'); + const [, upperHandle] = await browser.$$('.slider-handle, .rheostat-handle'); return Number(await upperHandle.getAttribute('aria-valuenow')); }); From c2b29a8dc5b42940af276c2f0be5dd2f93e78b05 Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Wed, 11 Sep 2019 16:00:49 +0200 Subject: [PATCH 69/94] chore(release): 1.2.1 --- tests/e2e/CHANGELOG.md | 9 +++++++++ tests/e2e/package.json | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/tests/e2e/CHANGELOG.md b/tests/e2e/CHANGELOG.md index 44d7aa6e09..bfb9e8eba5 100644 --- a/tests/e2e/CHANGELOG.md +++ b/tests/e2e/CHANGELOG.md @@ -1,3 +1,12 @@ +## [1.2.1](https://github.com/algolia/instantsearch-e2e-tests/compare/v1.2.0...v1.2.1) (2019-09-11) + + +### Bug Fixes + +* **helper:** fix helpers to handle RangeSlider in react-instantsearch ([#9](https://github.com/algolia/instantsearch-e2e-tests/issues/9)) ([c2de700](https://github.com/algolia/instantsearch-e2e-tests/commit/c2de700)) + + + # [1.2.0](https://github.com/algolia/instantsearch-e2e-tests/compare/v1.1.0...v1.2.0) (2019-09-06) ### Bug Fixes diff --git a/tests/e2e/package.json b/tests/e2e/package.json index a569de8a67..ceca21fe05 100644 --- a/tests/e2e/package.json +++ b/tests/e2e/package.json @@ -1,6 +1,6 @@ { "name": "instantsearch-e2e-tests", - "version": "1.2.0", + "version": "1.2.1", "description": "End-2-End test suite for InstantSearch", "homepage": "https://github.com/algolia/instantsearch-e2e-tests", "main": "./index.js", From ab22820ef72f648ba1668c459a4e54d0dd71ce2f Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Thu, 12 Sep 2019 18:21:07 +0200 Subject: [PATCH 70/94] fix(spec): fix specs to match fixed slider behavior (algolia/instantsearch-e2e-tests#10) --- .../specs/initial-state-from-route.spec.ts | 2 +- tests/e2e/specs/price-range.spec.ts | 36 +++++++++---------- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/tests/e2e/specs/initial-state-from-route.spec.ts b/tests/e2e/specs/initial-state-from-route.spec.ts index 72be6df6f2..03f87bbedd 100644 --- a/tests/e2e/specs/initial-state-from-route.spec.ts +++ b/tests/e2e/specs/initial-state-from-route.spec.ts @@ -147,7 +147,7 @@ describe('InstantSearch - State and route', () => { searchParams.get('page') === '2' && searchParams.get('brands') === 'Whirlpool' && searchParams.get('rating') === '3' && - /^(24[0-9]|250):(124[0-9]|1250)$/.test( + /^(23[0-9]|24[0-9]|250):(124[0-9]|1250)$/.test( searchParams.get('price') || '' ) && searchParams.get('sortBy') === 'instant_search_price_asc' && diff --git a/tests/e2e/specs/price-range.spec.ts b/tests/e2e/specs/price-range.spec.ts index ee6e45b671..e7349011b7 100644 --- a/tests/e2e/specs/price-range.spec.ts +++ b/tests/e2e/specs/price-range.spec.ts @@ -7,7 +7,7 @@ describe('InstantSearch - Search on specific price range', () => { }); it('drag and drop lower handle to the right', async () => { - lowerBound = await browser.dragRangeSliderLowerBoundTo(30); + lowerBound = await browser.dragRangeSliderLowerBoundTo(971); }); it(`waits for the results list to be updated (wait for all the prices to be > lowerBound)`, async () => { @@ -22,7 +22,7 @@ describe('InstantSearch - Search on specific price range', () => { }); it('drag and drop upper handle to the left', async () => { - upperBound = await browser.dragRangeSliderUpperBoundTo(70); + upperBound = await browser.dragRangeSliderUpperBoundTo(1971); }); it(`waits for the results list to be updated (wait for all the prices to be < upperBound)`, async () => { @@ -40,22 +40,22 @@ describe('InstantSearch - Search on specific price range', () => { const hitsTitles = await browser.getHitsTitles(); expect(hitsTitles).toEqual([ - 'Amazon - Fire TV Stick with Alexa Voice Remote - Black', - 'Google - Chromecast - Black', - 'Amazon - Echo Dot', - 'LG - Ultra Slim 8x Max. DVD Write Speed External USB DVD±RW/CD-RW Drive - Black', - 'AT&T GoPhone - Samsung Galaxy Express 3 4G LTE with 8GB Memory Prepaid Cell Phone', - 'Amazon - Echo Dot', - 'Insignia™ - Portable Wireless Speaker - Black', - 'SanDisk - Ultra Plus 32GB microSDHC Class 10 UHS-1 Memory Card - Gray/Red', - 'Philips - Hue White and Color Ambiance A19 Add-on Smart LED bulb (3rd Gen) - Multicolor', - 'SanDisk - Ultra Plus 32GB SDHC Class 10 UHS-1 Memory Card - Black/Gray/Red', - 'HP - 61 2-Pack Ink Cartridges - Black/Cyan/Magenta/Yellow', - 'HP - 62 2-Pack Ink Cartridges - Black/Tricolor', - 'SanDisk - Pixtor 32GB microSDHC Class 10 UHS-1 Memory Card - Gray/Red', - 'Amazon - Fire - 7" Tablet - 8GB - Black', - 'HP - 63 2-Pack Ink Cartridges - Black/Cyan/Magenta/Yellow', - 'DigiLand - 7" - Tablet - 16GB', + 'Apple - MacBook Air® (Latest Model) - 13.3" Display - Intel Core i5 - 8GB Memory - 128GB Flash Storage - Silver', + 'Apple - MacBook Pro with Retina display - 13.3" Display - 8GB Memory - 128GB Flash Storage - Silver', + 'Apple - MacBook Air® (Latest Model) - 13.3" Display - Intel Core i5 - 8GB Memory - 256GB Flash Storage - Silver', + 'Sony - 65" Class (64.5" Diag.) - 2160p - Smart - 4K Ultra HD TV with High Dynamic Range - Black', + 'Apple - MacBook Pro® - 13" Display - Intel Core i5 - 8 GB Memory - 256GB Flash Storage (latest model) - Space Gray', + 'Samsung - 65" Class (64.5" Diag.) - LED - 2160p - Smart - 4K Ultra HD TV - with High Dynamic Range - Silver', + 'Sony - 55" Class (54.6" Diag.) - 2160p - Smart - 4K Ultra HD TV with High Dynamic Range - Black', + 'HP - Spectre x360 2-in-1 15.6" 4K Ultra HD Touch-Screen Laptop - Intel Core i7 - 16GB Memory - 256GB Solid State Drive - Natural Silver', + 'Microsoft - Surface Pro 4 - 12.3" - 128GB - Intel Core i5 - Silver', + 'Samsung - 49" Class - (48.5" Diag.) - LED - 2160p - Smart - 4K Ultra HD TV - with High Dynamic Range - Silver', + 'Samsung - 55" Class - (54.6" Diag.) - LED - 2160p - Smart - 4K Ultra HD TV - with High Dynamic Range - Silver', + 'HP - ENVY 17.3" Touch-Screen Laptop - Intel Core i7 - 16GB Memory - 1TB Hard Drive - Natural Silver', + 'HP - Pavilion 27" Touch-Screen All-In-One - Intel Core i7 - 12GB Memory - 1TB Hard Drive - HP finish in turbo silver', + 'Samsung - 65" Class - (64.5" Diag.) - LED - 2160p - Smart - 4K Ultra HD TV with High Dynamic Range - Black', + 'Sony - 55" Class (54.6" diag) - LED - 2160p - Smart - 3D - 4K Ultra HD TV with High Dynamic Range - Black', + 'HP - OMEN 17.3" Laptop - Intel Core i7 - 12GB Memory - NVIDIA GeForce GTX 965M - 1TB HDD + 256GB Solid State Drive - Onyx Black/Twinkle Black', ]); }); }); From fa644c05887cfa0d83f747f3da1f480fd124231c Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Thu, 12 Sep 2019 18:23:11 +0200 Subject: [PATCH 71/94] chore(release): 1.2.2 --- tests/e2e/CHANGELOG.md | 9 +++++++++ tests/e2e/package.json | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/tests/e2e/CHANGELOG.md b/tests/e2e/CHANGELOG.md index bfb9e8eba5..eaae3c8aec 100644 --- a/tests/e2e/CHANGELOG.md +++ b/tests/e2e/CHANGELOG.md @@ -1,3 +1,12 @@ +## [1.2.2](https://github.com/algolia/instantsearch-e2e-tests/compare/v1.2.1...v1.2.2) (2019-09-12) + + +### Bug Fixes + +* **spec:** fix specs to match fixed slider behavior ([#10](https://github.com/algolia/instantsearch-e2e-tests/issues/10)) ([d7bce97](https://github.com/algolia/instantsearch-e2e-tests/commit/d7bce97)) + + + ## [1.2.1](https://github.com/algolia/instantsearch-e2e-tests/compare/v1.2.0...v1.2.1) (2019-09-11) diff --git a/tests/e2e/package.json b/tests/e2e/package.json index ceca21fe05..220b0d1196 100644 --- a/tests/e2e/package.json +++ b/tests/e2e/package.json @@ -1,6 +1,6 @@ { "name": "instantsearch-e2e-tests", - "version": "1.2.1", + "version": "1.2.2", "description": "End-2-End test suite for InstantSearch", "homepage": "https://github.com/algolia/instantsearch-e2e-tests", "main": "./index.js", From 541a20818fe71a9d0a4e0e5c9a39137258d4314b Mon Sep 17 00:00:00 2001 From: Samuel Vaillant Date: Thu, 26 Sep 2019 20:29:56 +0200 Subject: [PATCH 72/94] docs(README): peedDependencies -> peerDependencies (algolia/instantsearch-e2e-tests#11) --- tests/e2e/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/e2e/README.md b/tests/e2e/README.md index c45f4872b1..bc92a9ed9f 100644 --- a/tests/e2e/README.md +++ b/tests/e2e/README.md @@ -4,7 +4,7 @@ This repository contains the end-2-end test suite for [InstantSearch](https://gi ## Installation -Install `instantsearch-e2e-tests` and its peedDependencies in your InstantSearch project: +Install `instantsearch-e2e-tests` and its peerDependencies in your InstantSearch project: ```bash yarn add --dev \ From 2bc94e61297143f05f8959c0415ad9e56dff399e Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Mon, 14 Oct 2019 15:21:27 +0200 Subject: [PATCH 73/94] fix(helper): fix helpers to handle RangeSlider in vue-instantsearch (algolia/instantsearch-e2e-tests#12) --- .../helpers/dragRangeSliderLowerBoundTo.ts | 19 +++++++++++-------- .../helpers/dragRangeSliderUpperBoundTo.ts | 19 +++++++++++-------- .../helpers/getRangeSliderLowerBoundValue.ts | 8 +++++--- .../helpers/getRangeSliderUpperBoundValue.ts | 8 +++++--- tests/e2e/helpers/selectors.ts | 18 ++++++++++++++++++ 5 files changed, 50 insertions(+), 22 deletions(-) create mode 100644 tests/e2e/helpers/selectors.ts diff --git a/tests/e2e/helpers/dragRangeSliderLowerBoundTo.ts b/tests/e2e/helpers/dragRangeSliderLowerBoundTo.ts index 2f7fe8ffed..1d730c3521 100644 --- a/tests/e2e/helpers/dragRangeSliderLowerBoundTo.ts +++ b/tests/e2e/helpers/dragRangeSliderLowerBoundTo.ts @@ -1,15 +1,20 @@ -declare namespace WebdriverIOAsync { +import { + RANGE_SLIDER_RAIL_SELECTOR, + RANGE_SLIDER_HANDLE_SELECTOR, +} from './selectors'; + +declare module 'webdriverio' { interface Browser { dragRangeSliderLowerBoundTo(value: number): Promise; } } browser.addCommand('dragRangeSliderLowerBoundTo', async (value: number) => { - const slider = await browser.$('.slider-rail, .rheostat-background'); + const slider = await browser.$(RANGE_SLIDER_RAIL_SELECTOR); - await browser.waitForElement('.slider-handle, .rheostat-handle'); + await browser.waitForElement(RANGE_SLIDER_HANDLE_SELECTOR); let [lowerHandle, upperHandle] = await browser.$$( - '.slider-handle, .rheostat-handle' + RANGE_SLIDER_HANDLE_SELECTOR ); const { width: sliderWidth } = await slider.getSize(); @@ -34,9 +39,7 @@ browser.addCommand('dragRangeSliderLowerBoundTo', async (value: number) => { // Depending of the steps calculation there can be a difference between // the wanted value and the actual value of the slider, so we return // the actual value in case we need it in the rest of the tests - await browser.waitForElement('.slider-handle, .rheostat-handle'); - [lowerHandle, upperHandle] = await browser.$$( - '.slider-handle, .rheostat-handle' - ); + await browser.waitForElement(RANGE_SLIDER_HANDLE_SELECTOR); + [lowerHandle, upperHandle] = await browser.$$(RANGE_SLIDER_HANDLE_SELECTOR); return Number(await lowerHandle.getAttribute('aria-valuenow')); }); diff --git a/tests/e2e/helpers/dragRangeSliderUpperBoundTo.ts b/tests/e2e/helpers/dragRangeSliderUpperBoundTo.ts index 78b14bbcea..58d8775537 100644 --- a/tests/e2e/helpers/dragRangeSliderUpperBoundTo.ts +++ b/tests/e2e/helpers/dragRangeSliderUpperBoundTo.ts @@ -1,15 +1,20 @@ -declare namespace WebdriverIOAsync { +import { + RANGE_SLIDER_RAIL_SELECTOR, + RANGE_SLIDER_HANDLE_SELECTOR, +} from './selectors'; + +declare module 'webdriverio' { interface Browser { dragRangeSliderUpperBoundTo(value: number): Promise; } } browser.addCommand('dragRangeSliderUpperBoundTo', async (value: number) => { - const slider = await browser.$('.slider-rail, .rheostat-background'); + const slider = await browser.$(RANGE_SLIDER_RAIL_SELECTOR); - await browser.waitForElement('.slider-handle, .rheostat-handle'); + await browser.waitForElement(RANGE_SLIDER_HANDLE_SELECTOR); let [lowerHandle, upperHandle] = await browser.$$( - '.slider-handle, .rheostat-handle' + RANGE_SLIDER_HANDLE_SELECTOR ); const { width: sliderWidth } = await slider.getSize(); @@ -34,9 +39,7 @@ browser.addCommand('dragRangeSliderUpperBoundTo', async (value: number) => { // Depending of the steps calculation there can be a difference between // the wanted value and the actual value of the slider, so we return // the actual value in case we need it in the rest of the tests - await browser.waitForElement('.slider-handle, .rheostat-handle'); - [lowerHandle, upperHandle] = await browser.$$( - '.slider-handle, .rheostat-handle' - ); + await browser.waitForElement(RANGE_SLIDER_HANDLE_SELECTOR); + [lowerHandle, upperHandle] = await browser.$$(RANGE_SLIDER_HANDLE_SELECTOR); return Number(await upperHandle.getAttribute('aria-valuenow')); }); diff --git a/tests/e2e/helpers/getRangeSliderLowerBoundValue.ts b/tests/e2e/helpers/getRangeSliderLowerBoundValue.ts index 6bfa7a318b..b1fa92d808 100644 --- a/tests/e2e/helpers/getRangeSliderLowerBoundValue.ts +++ b/tests/e2e/helpers/getRangeSliderLowerBoundValue.ts @@ -1,11 +1,13 @@ -declare namespace WebdriverIOAsync { +import { RANGE_SLIDER_HANDLE_SELECTOR } from './selectors'; + +declare module 'webdriverio' { interface Browser { getRangeSliderLowerBoundValue(): Promise; } } browser.addCommand('getRangeSliderLowerBoundValue', async () => { - await browser.waitForElement('.slider-handle, .rheostat-handle'); - const [lowerHandle] = await browser.$$('.slider-handle, .rheostat-handle'); + await browser.waitForElement(RANGE_SLIDER_HANDLE_SELECTOR); + const [lowerHandle] = await browser.$$(RANGE_SLIDER_HANDLE_SELECTOR); return Number(await lowerHandle.getAttribute('aria-valuenow')); }); diff --git a/tests/e2e/helpers/getRangeSliderUpperBoundValue.ts b/tests/e2e/helpers/getRangeSliderUpperBoundValue.ts index 2c4f9a2dff..bd765e2706 100644 --- a/tests/e2e/helpers/getRangeSliderUpperBoundValue.ts +++ b/tests/e2e/helpers/getRangeSliderUpperBoundValue.ts @@ -1,11 +1,13 @@ -declare namespace WebdriverIOAsync { +import { RANGE_SLIDER_HANDLE_SELECTOR } from './selectors'; + +declare module 'webdriverio' { interface Browser { getRangeSliderUpperBoundValue(): Promise; } } browser.addCommand('getRangeSliderUpperBoundValue', async () => { - await browser.waitForElement('.slider-handle, .rheostat-handle'); - const [, upperHandle] = await browser.$$('.slider-handle, .rheostat-handle'); + await browser.waitForElement(RANGE_SLIDER_HANDLE_SELECTOR); + const [, upperHandle] = await browser.$$(RANGE_SLIDER_HANDLE_SELECTOR); return Number(await upperHandle.getAttribute('aria-valuenow')); }); diff --git a/tests/e2e/helpers/selectors.ts b/tests/e2e/helpers/selectors.ts new file mode 100644 index 0000000000..3ab6d64e18 --- /dev/null +++ b/tests/e2e/helpers/selectors.ts @@ -0,0 +1,18 @@ +// RangeSlider +const RANGE_SLIDER_VANILLA_RAIL = '.rheostat-background'; +const RANGE_SLIDER_REACT_RAIL = '.slider-rail'; +const RANGE_SLIDER_VUE_RAIL = '.vue-slider-rail'; +export const RANGE_SLIDER_RAIL_SELECTOR = [ + RANGE_SLIDER_VANILLA_RAIL, + RANGE_SLIDER_REACT_RAIL, + RANGE_SLIDER_VUE_RAIL, +].join(', '); + +const RANGE_SLIDER_VANILLA_HANDLE = '.rheostat-handle'; +const RANGE_SLIDER_REACT_HANDLE = '.slider-handle'; +const RANGE_SLIDER_VUE_HANDLE = '.vue-slider-dot-handle'; +export const RANGE_SLIDER_HANDLE_SELECTOR = [ + RANGE_SLIDER_VANILLA_HANDLE, + RANGE_SLIDER_REACT_HANDLE, + RANGE_SLIDER_VUE_HANDLE, +].join(', '); From 6bbb563f87427803ca23170b0aedc6545383525c Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Mon, 14 Oct 2019 15:26:16 +0200 Subject: [PATCH 74/94] chore(release): 1.2.3 --- tests/e2e/CHANGELOG.md | 9 +++++++++ tests/e2e/package.json | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/tests/e2e/CHANGELOG.md b/tests/e2e/CHANGELOG.md index eaae3c8aec..63c58f6f94 100644 --- a/tests/e2e/CHANGELOG.md +++ b/tests/e2e/CHANGELOG.md @@ -1,3 +1,12 @@ +## [1.2.3](https://github.com/algolia/instantsearch-e2e-tests/compare/v1.2.2...v1.2.3) (2019-10-14) + + +### Bug Fixes + +* **helper:** fix helpers to handle RangeSlider in vue-instantsearch ([#12](https://github.com/algolia/instantsearch-e2e-tests/issues/12)) ([143a59b](https://github.com/algolia/instantsearch-e2e-tests/commit/143a59b)) + + + ## [1.2.2](https://github.com/algolia/instantsearch-e2e-tests/compare/v1.2.1...v1.2.2) (2019-09-12) diff --git a/tests/e2e/package.json b/tests/e2e/package.json index 220b0d1196..3b4537a9ca 100644 --- a/tests/e2e/package.json +++ b/tests/e2e/package.json @@ -1,6 +1,6 @@ { "name": "instantsearch-e2e-tests", - "version": "1.2.2", + "version": "1.2.3", "description": "End-2-End test suite for InstantSearch", "homepage": "https://github.com/algolia/instantsearch-e2e-tests", "main": "./index.js", From c517af1711cd7bcd3a2c83db2f90047e3481d0fa Mon Sep 17 00:00:00 2001 From: Youcef Mammar Date: Tue, 26 Nov 2019 12:27:51 +0100 Subject: [PATCH 75/94] fix(setSearchBoxValue): reset searchbox before editing (algolia/instantsearch-e2e-tests#15) * fix(setSearchBoxValue): reset searchbox before editing In React and Preact the CLEAR selenium instruction does not fire any event, and therefore does not update the component's internal state (see this job for example: https://app.saucelabs.com/tests/4518f96fdfd447e998786d0ff463658a#54) It is equivalent to `input.value = ''`. There are multiple sources reporting a similar behaviour (see https://github.com/SeleniumHQ/selenium/issues/6741) Since this change: https://github.com/algolia/instantsearch.js/pull/4202 ```jsx ``` instead of ```jsx ``` Since binding the input value to a `state.query` (rather than a `props.query`), it appears the click we use to focus on the searchbox re-syncs `input.value` with `state.query`. --- tests/e2e/helpers/setSearchBoxValue.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tests/e2e/helpers/setSearchBoxValue.ts b/tests/e2e/helpers/setSearchBoxValue.ts index af748f8c9a..a575b651c0 100644 --- a/tests/e2e/helpers/setSearchBoxValue.ts +++ b/tests/e2e/helpers/setSearchBoxValue.ts @@ -7,8 +7,17 @@ declare namespace WebdriverIOAsync { browser.addCommand('setSearchBoxValue', async (value: string) => { const oldUrl = await browser.getUrl(); const searchBox = await browser.$('.ais-SearchBox [type=search]'); + const resetButton = await browser.$('.ais-SearchBox [type=reset]'); + // Assures us that the element is in the viewport await searchBox.scrollIntoView(); + + // Click the reset button to clear the input + if (await resetButton.isDisplayed()) { + // The reset button is invisible when nothing to reset + await resetButton.click(); + } + // In Internet Explorer the input must be focused before updating its value await searchBox.click(); await searchBox.setValue(value); From 5de26a91e0df223420f683512106eccbba2baaa0 Mon Sep 17 00:00:00 2001 From: Youcef Mammar Date: Tue, 26 Nov 2019 12:29:56 +0100 Subject: [PATCH 76/94] chore(release): 1.2.4 --- tests/e2e/CHANGELOG.md | 9 +++++++++ tests/e2e/package.json | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/tests/e2e/CHANGELOG.md b/tests/e2e/CHANGELOG.md index 63c58f6f94..5e18cfcc8d 100644 --- a/tests/e2e/CHANGELOG.md +++ b/tests/e2e/CHANGELOG.md @@ -1,3 +1,12 @@ +## [1.2.4](https://github.com/algolia/instantsearch-e2e-tests/compare/v1.2.3...v1.2.4) (2019-11-26) + + +### Bug Fixes + +* **setSearchBoxValue:** reset searchbox before editing ([#15](https://github.com/algolia/instantsearch-e2e-tests/issues/15)) ([b52ea34](https://github.com/algolia/instantsearch-e2e-tests/commit/b52ea3468594c86168b155bb0fcab1230ff86672)), closes [/app.saucelabs.com/tests/4518f96fdfd447e998786d0ff463658a#54](https://github.com//app.saucelabs.com/tests/4518f96fdfd447e998786d0ff463658a/issues/54) + + + ## [1.2.3](https://github.com/algolia/instantsearch-e2e-tests/compare/v1.2.2...v1.2.3) (2019-10-14) diff --git a/tests/e2e/package.json b/tests/e2e/package.json index 3b4537a9ca..c26cedee4b 100644 --- a/tests/e2e/package.json +++ b/tests/e2e/package.json @@ -1,6 +1,6 @@ { "name": "instantsearch-e2e-tests", - "version": "1.2.3", + "version": "1.2.4", "description": "End-2-End test suite for InstantSearch", "homepage": "https://github.com/algolia/instantsearch-e2e-tests", "main": "./index.js", From 2c4d0a83c21a32d48fafc53624ca28aa1558d8ea Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 18 Dec 2019 12:00:47 +0100 Subject: [PATCH 77/94] chore(deps): bump eslint-utils from 1.4.0 to 1.4.3 (algolia/instantsearch-e2e-tests#14) Bumps [eslint-utils](https://github.com/mysticatea/eslint-utils) from 1.4.0 to 1.4.3. - [Release notes](https://github.com/mysticatea/eslint-utils/releases) - [Commits](https://github.com/mysticatea/eslint-utils/compare/v1.4.0...v1.4.3) Signed-off-by: dependabot[bot] --- tests/e2e/yarn.lock | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/tests/e2e/yarn.lock b/tests/e2e/yarn.lock index 0ee0a8c13b..5d91bc2724 100644 --- a/tests/e2e/yarn.lock +++ b/tests/e2e/yarn.lock @@ -1125,16 +1125,16 @@ eslint-scope@^5.0.0: estraverse "^4.1.1" eslint-utils@^1.3.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.0.tgz#e2c3c8dba768425f897cf0f9e51fe2e241485d4c" - integrity sha512-7ehnzPaP5IIEh1r1tkjuIrxqhNkzUJa9z3R92tLJdZIVdWaczEhr3EbhGtsMrVxi1KeR8qA7Off6SWc5WNQqyQ== + version "1.4.3" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" + integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== dependencies: - eslint-visitor-keys "^1.0.0" + eslint-visitor-keys "^1.1.0" -eslint-visitor-keys@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" - integrity sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ== +eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2" + integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A== eslint@6.1.0: version "6.1.0" From c06932f9e87aa7fd9ea08c79725edea80c6716f9 Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Mon, 6 Jan 2020 14:52:47 +0100 Subject: [PATCH 78/94] test: add commands to run all test suite on InstantSearch (algolia/instantsearch-e2e-tests#13) --- tests/e2e/.circleci/config.yml | 46 ++++++++++++++++++++++++++ tests/e2e/.eslintignore | 1 + tests/e2e/.gitignore | 2 ++ tests/e2e/package.json | 3 ++ tests/e2e/tests/instantsearch.js.sh | 15 +++++++++ tests/e2e/tests/react-instantsearch.sh | 15 +++++++++ tests/e2e/tests/vue-instantsearch.sh | 15 +++++++++ tests/e2e/tsconfig.json | 3 +- 8 files changed, 99 insertions(+), 1 deletion(-) create mode 100644 tests/e2e/.circleci/config.yml create mode 100755 tests/e2e/tests/instantsearch.js.sh create mode 100755 tests/e2e/tests/react-instantsearch.sh create mode 100755 tests/e2e/tests/vue-instantsearch.sh diff --git a/tests/e2e/.circleci/config.yml b/tests/e2e/.circleci/config.yml new file mode 100644 index 0000000000..db83de4ddb --- /dev/null +++ b/tests/e2e/.circleci/config.yml @@ -0,0 +1,46 @@ +aliases: + - &install_yarn_version + name: Install specific Yarn version + command: | + curl -o- -L https://yarnpkg.com/install.sh | bash -s -- --version 1.13.0 + echo 'export PATH="$HOME/.yarn/bin:$HOME/.config/yarn/global/node_modules/.bin:$PATH"' >> $BASH_ENV + + - &restore_yarn_cache + name: Restore Yarn cache + keys: + - yarn-{{ .Branch }}-packages-{{ checksum "yarn.lock" }} + + - &save_yarn_cache + name: Save Yarn cache + key: yarn-{{ .Branch }}-packages-{{ checksum "yarn.lock" }} + paths: + - ~/.cache/yarn + + - &run_yarn_install + name: Install dependencies + command: yarn install + +defaults: &defaults + working_directory: ~/instantsearch-e2-tests + docker: + - image: circleci/node:10.16.3@sha256:6ab62742cec4a68e75e7cac063f6549bae0bcfd0541700df7fde54765eed4ad2 + +version: 2 +jobs: + test: + <<: *defaults + steps: + - checkout + - run: *install_yarn_version + - restore_cache: *restore_yarn_cache + - run: *run_yarn_install + - save_cache: *save_yarn_cache + - run: + name: Test specs + command: yarn test:saucelabs + +workflows: + version: 2 + ci: + jobs: + - test diff --git a/tests/e2e/.eslintignore b/tests/e2e/.eslintignore index c2658d7d1b..7b132aa64e 100644 --- a/tests/e2e/.eslintignore +++ b/tests/e2e/.eslintignore @@ -1 +1,2 @@ node_modules/ +tests/ diff --git a/tests/e2e/.gitignore b/tests/e2e/.gitignore index da4a2ad1f8..b926b69f68 100644 --- a/tests/e2e/.gitignore +++ b/tests/e2e/.gitignore @@ -2,3 +2,5 @@ node_modules/ npm-debug.log yarn-error.log .DS_Store +tests/* +!tests/*.sh diff --git a/tests/e2e/package.json b/tests/e2e/package.json index c26cedee4b..45755b4c59 100644 --- a/tests/e2e/package.json +++ b/tests/e2e/package.json @@ -25,6 +25,9 @@ "scripts": { "commit": "git-cz", "version": "conventional-changelog --preset angular --infile CHANGELOG.md --same-file && git add CHANGELOG.md", + "test": "yarn test:local", + "test:local": "yarn link && cd tests && ./instantsearch.js.sh && ./react-instantsearch.sh && ./vue-instantsearch.sh", + "test:saucelabs": "SAUCELABS=1 yarn test:local", "lint": "eslint --ext .js,.ts,.tsx .", "lint:fix": "eslint --ext .js,.ts,.tsx --fix .", "type-check": "tsc", diff --git a/tests/e2e/tests/instantsearch.js.sh b/tests/e2e/tests/instantsearch.js.sh new file mode 100755 index 0000000000..9bcafc80fe --- /dev/null +++ b/tests/e2e/tests/instantsearch.js.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash + +set -e + +rm -rf instantsearch.js +git clone git@github.com:algolia/instantsearch.js.git --branch develop --depth=1 +cd instantsearch.js +yarn --ignore-engines +yarn link instantsearch-e2e-tests +yarn run website:build +if [ "$SAUCELABS" ]; then + yarn run test:e2e:saucelabs +else + yarn run test:e2e +fi diff --git a/tests/e2e/tests/react-instantsearch.sh b/tests/e2e/tests/react-instantsearch.sh new file mode 100755 index 0000000000..90c6f14aba --- /dev/null +++ b/tests/e2e/tests/react-instantsearch.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash + +set -e + +rm -rf react-instantsearch +git clone git@github.com:algolia/react-instantsearch.git --branch master --depth=1 +cd react-instantsearch +yarn --ignore-engines +yarn link instantsearch-e2e-tests +yarn run website:build +if [ "$SAUCELABS" ]; then + yarn run test:e2e:saucelabs +else + yarn run test:e2e +fi diff --git a/tests/e2e/tests/vue-instantsearch.sh b/tests/e2e/tests/vue-instantsearch.sh new file mode 100755 index 0000000000..f39368ad10 --- /dev/null +++ b/tests/e2e/tests/vue-instantsearch.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash + +set -e + +rm -rf vue-instantsearch +git clone git@github.com:algolia/vue-instantsearch.git --branch master --depth=1 +cd vue-instantsearch +yarn --ignore-engines +yarn link instantsearch-e2e-tests +yarn run examples:build +if [ "$SAUCELABS" ]; then + yarn run test:e2e:saucelabs +else + yarn run test:e2e +fi diff --git a/tests/e2e/tsconfig.json b/tests/e2e/tsconfig.json index 716bb0e225..161c2986c6 100644 --- a/tests/e2e/tsconfig.json +++ b/tests/e2e/tsconfig.json @@ -11,5 +11,6 @@ "noFallthroughCasesInSwitch": true, "allowSyntheticDefaultImports": true, "types": ["node", "webdriverio", "jasmine"] - } + }, + "exclude": ["node_modules", "tests"] } From f4883eb681e0aae4a23f81686372df5c2c0e28aa Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Mon, 6 Jan 2020 15:17:24 +0100 Subject: [PATCH 79/94] feat(webdriverio): add retry for Sauce Connect tunnel (algolia/instantsearch-e2e-tests#17) --- tests/e2e/wdio.saucelabs.conf.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/tests/e2e/wdio.saucelabs.conf.js b/tests/e2e/wdio.saucelabs.conf.js index 5028e3c783..901e9e7db3 100644 --- a/tests/e2e/wdio.saucelabs.conf.js +++ b/tests/e2e/wdio.saucelabs.conf.js @@ -23,6 +23,20 @@ module.exports = { * https://wiki.saucelabs.com/display/DOCS/Sauce+Connect+Proxy */ sauceConnect: true, + /* + * Apply Sauce Connect options + * https://webdriver.io/docs/sauce-service.html#sauceconnectopts + */ + sauceConnectOpts: { + /* + * Retry to establish a tunnel 2 times maximum on fail + * This is useful to prevent premature test failure if we have difficulties to open the tunnel + * (can happen if there are already multiple tunnels opened on SauceLabs) + * https://github.com/bermi/sauce-connect-launcher#advanced-usage + */ + connectRetries: 2, + connectRetryTimeout: 10000, + }, /* * Sauce Labs Open Source offer has a maximum of 5 concurrent session */ From 78c2df549ba21baff92e3dc2cdcb337ea967be74 Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Wed, 15 Jan 2020 10:58:18 +0100 Subject: [PATCH 80/94] feat(spec): add custom error messages for timeouts (algolia/instantsearch-e2e-tests#18) --- .../e2e/helpers/clickHierarchicalMenuItem.ts | 6 ++- tests/e2e/helpers/clickRefinementListItem.ts | 6 ++- tests/e2e/helpers/setSearchBoxValue.ts | 6 ++- tests/e2e/helpers/waitForElement.ts | 6 ++- .../specs/initial-state-from-route.spec.ts | 40 ++++++++++--------- tests/e2e/specs/price-range.spec.ts | 40 +++++++++++-------- 6 files changed, 66 insertions(+), 38 deletions(-) diff --git a/tests/e2e/helpers/clickHierarchicalMenuItem.ts b/tests/e2e/helpers/clickHierarchicalMenuItem.ts index cef1f1cdd8..eaeb67c82e 100644 --- a/tests/e2e/helpers/clickHierarchicalMenuItem.ts +++ b/tests/e2e/helpers/clickHierarchicalMenuItem.ts @@ -14,5 +14,9 @@ browser.addCommand('clickHierarchicalMenuItem', async (label: string) => { // Changing the URL will also change the page element IDs in Internet Explorer // Not waiting for the URL to be properly updated before continuing can make the next tests to fail - return browser.waitUntil(async () => (await browser.getUrl()) !== oldUrl); + return browser.waitUntil( + async () => (await browser.getUrl()) !== oldUrl, + undefined, + `URL was not updated after click on "${label}" in hierarchical menu` + ); }); diff --git a/tests/e2e/helpers/clickRefinementListItem.ts b/tests/e2e/helpers/clickRefinementListItem.ts index df664d41ad..cd54c9678e 100644 --- a/tests/e2e/helpers/clickRefinementListItem.ts +++ b/tests/e2e/helpers/clickRefinementListItem.ts @@ -14,5 +14,9 @@ browser.addCommand('clickRefinementListItem', async (label: string) => { // Changing the URL will also change the page element IDs in Internet Explorer // Not waiting for the URL to be properly updated before continuing can make the next tests to fail - return browser.waitUntil(async () => (await browser.getUrl()) !== oldUrl); + return browser.waitUntil( + async () => (await browser.getUrl()) !== oldUrl, + undefined, + `URL was not updated after click on "${label}" in refinement list` + ); }); diff --git a/tests/e2e/helpers/setSearchBoxValue.ts b/tests/e2e/helpers/setSearchBoxValue.ts index a575b651c0..c9ed47e1e4 100644 --- a/tests/e2e/helpers/setSearchBoxValue.ts +++ b/tests/e2e/helpers/setSearchBoxValue.ts @@ -24,5 +24,9 @@ browser.addCommand('setSearchBoxValue', async (value: string) => { // Changing the URL will also change the page element IDs in Internet Explorer // Not waiting for the URL to be properly updated before continuing can make the next tests to fail - return browser.waitUntil(async () => (await browser.getUrl()) !== oldUrl); + return browser.waitUntil( + async () => (await browser.getUrl()) !== oldUrl, + undefined, + `URL was not updated after setting searchbox value to "${value}"` + ); }); diff --git a/tests/e2e/helpers/waitForElement.ts b/tests/e2e/helpers/waitForElement.ts index 4e9dcefc40..ce5d1b23b3 100644 --- a/tests/e2e/helpers/waitForElement.ts +++ b/tests/e2e/helpers/waitForElement.ts @@ -5,5 +5,9 @@ declare namespace WebdriverIOAsync { } browser.addCommand('waitForElement', (selector: string) => - browser.waitUntil(async () => (await browser.$$(selector)).length > 0) + browser.waitUntil( + async () => (await browser.$$(selector)).length > 0, + undefined, + `Element matching selector "${selector}" wasn't found` + ) ); diff --git a/tests/e2e/specs/initial-state-from-route.spec.ts b/tests/e2e/specs/initial-state-from-route.spec.ts index 03f87bbedd..37e31facb0 100644 --- a/tests/e2e/specs/initial-state-from-route.spec.ts +++ b/tests/e2e/specs/initial-state-from-route.spec.ts @@ -136,24 +136,28 @@ describe('InstantSearch - State and route', () => { }); it('must have the expected url', async () => { - await browser.waitUntil(async () => { - const url = await browser.getUrl(); - const { pathname, searchParams } = new URL(url); - - return ( - pathname === - '/examples/e-commerce/search/Appliances%2FRanges%2C+Cooktops+%26+Ovens/' && - searchParams.get('query') === 'cooktop' && - searchParams.get('page') === '2' && - searchParams.get('brands') === 'Whirlpool' && - searchParams.get('rating') === '3' && - /^(23[0-9]|24[0-9]|250):(124[0-9]|1250)$/.test( - searchParams.get('price') || '' - ) && - searchParams.get('sortBy') === 'instant_search_price_asc' && - searchParams.get('hitsPerPage') === '64' - ); - }); + await browser.waitUntil( + async () => { + const url = await browser.getUrl(); + const { pathname, searchParams } = new URL(url); + + return ( + pathname === + '/examples/e-commerce/search/Appliances%2FRanges%2C+Cooktops+%26+Ovens/' && + searchParams.get('query') === 'cooktop' && + searchParams.get('page') === '2' && + searchParams.get('brands') === 'Whirlpool' && + searchParams.get('rating') === '3' && + /^(23[0-9]|24[0-9]|250):(124[0-9]|1250)$/.test( + searchParams.get('price') || '' + ) && + searchParams.get('sortBy') === 'instant_search_price_asc' && + searchParams.get('hitsPerPage') === '64' + ); + }, + undefined, + 'URL does not have expected parameters' + ); }); }); }); diff --git a/tests/e2e/specs/price-range.spec.ts b/tests/e2e/specs/price-range.spec.ts index e7349011b7..cc64d10427 100644 --- a/tests/e2e/specs/price-range.spec.ts +++ b/tests/e2e/specs/price-range.spec.ts @@ -11,14 +11,18 @@ describe('InstantSearch - Search on specific price range', () => { }); it(`waits for the results list to be updated (wait for all the prices to be > lowerBound)`, async () => { - await browser.waitUntil(async () => { - const hits = await browser.$$('.hit-info-container strong'); - const hitsText = await browser.getTextFromElements(hits); - return ( - hitsText.filter(text => Number(text.replace(',', '')) < lowerBound) - .length === 0 - ); - }); + await browser.waitUntil( + async () => { + const hits = await browser.$$('.hit-info-container strong'); + const hitsText = await browser.getTextFromElements(hits); + return ( + hitsText.filter(text => Number(text.replace(',', '')) < lowerBound) + .length === 0 + ); + }, + undefined, + `Results list was not updated to display only hits with prices > ${lowerBound}` + ); }); it('drag and drop upper handle to the left', async () => { @@ -26,14 +30,18 @@ describe('InstantSearch - Search on specific price range', () => { }); it(`waits for the results list to be updated (wait for all the prices to be < upperBound)`, async () => { - await browser.waitUntil(async () => { - const hits = await browser.$$('.hit-info-container strong'); - const hitsText = await browser.getTextFromElements(hits); - return ( - hitsText.filter(text => Number(text.replace(',', '')) > upperBound) - .length === 0 - ); - }); + await browser.waitUntil( + async () => { + const hits = await browser.$$('.hit-info-container strong'); + const hitsText = await browser.getTextFromElements(hits); + return ( + hitsText.filter(text => Number(text.replace(',', '')) > upperBound) + .length === 0 + ); + }, + undefined, + `Results list was not updated to display only hits with prices < ${upperBound}` + ); }); it('must have the expected results', async () => { From 1e7c9df2946afa4413fd7d73401c12e6cd52a76c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Chalifour?= Date: Wed, 22 Jan 2020 11:05:50 +0100 Subject: [PATCH 81/94] fix(test): change InstantSearch.js test branch to `master` (algolia/instantsearch-e2e-tests#19) --- tests/e2e/tests/instantsearch.js.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/e2e/tests/instantsearch.js.sh b/tests/e2e/tests/instantsearch.js.sh index 9bcafc80fe..30b57e5519 100755 --- a/tests/e2e/tests/instantsearch.js.sh +++ b/tests/e2e/tests/instantsearch.js.sh @@ -3,7 +3,7 @@ set -e rm -rf instantsearch.js -git clone git@github.com:algolia/instantsearch.js.git --branch develop --depth=1 +git clone git@github.com:algolia/instantsearch.js.git --branch master --depth=1 cd instantsearch.js yarn --ignore-engines yarn link instantsearch-e2e-tests From db4f073c25e65d0e7808dcb3a09474efa586ed1a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 5 Feb 2020 13:24:53 +0100 Subject: [PATCH 82/94] chore(deps): bump handlebars from 4.1.2 to 4.5.3 (algolia/instantsearch-e2e-tests#16) Bumps [handlebars](https://github.com/wycats/handlebars.js) from 4.1.2 to 4.5.3. - [Release notes](https://github.com/wycats/handlebars.js/releases) - [Changelog](https://github.com/wycats/handlebars.js/blob/master/release-notes.md) - [Commits](https://github.com/wycats/handlebars.js/compare/v4.1.2...v4.5.3) Signed-off-by: dependabot[bot] --- tests/e2e/yarn.lock | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/tests/e2e/yarn.lock b/tests/e2e/yarn.lock index 5d91bc2724..9aad397ea9 100644 --- a/tests/e2e/yarn.lock +++ b/tests/e2e/yarn.lock @@ -545,10 +545,10 @@ combined-stream@^1.0.6, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" -commander@~2.20.0: - version "2.20.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" - integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== +commander@~2.20.3: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== commitizen@^4.0.3: version "4.0.3" @@ -1570,9 +1570,9 @@ grapheme-splitter@^1.0.2: integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== handlebars@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.1.2.tgz#b6b37c1ced0306b221e094fc7aca3ec23b131b67" - integrity sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw== + version "4.5.3" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.5.3.tgz#5cf75bd8714f7605713511a56be7c349becb0482" + integrity sha512-3yPecJoJHK/4c6aZhSvxOyG4vJKDshV36VHp0iVCDVh7o9w2vwi3NSnL2MMPj3YdduqaBcu7cGbggJQM0br9xA== dependencies: neo-async "^2.6.0" optimist "^0.6.1" @@ -3454,11 +3454,11 @@ typescript@^3.5.3: integrity sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g== uglify-js@^3.1.4: - version "3.6.0" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.6.0.tgz#704681345c53a8b2079fb6cec294b05ead242ff5" - integrity sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg== + version "3.7.3" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.7.3.tgz#f918fce9182f466d5140f24bb0ff35c2d32dcc6a" + integrity sha512-7tINm46/3puUA4hCkKYo4Xdts+JDaVC9ZPRcG8Xw9R4nhO/gZgUM3TENq8IF4Vatk8qCig4MzP/c8G4u2BkVQg== dependencies: - commander "~2.20.0" + commander "~2.20.3" source-map "~0.6.1" union-value@^1.0.0: From 66824125ef913852c1340b5f69e8bbed647304ae Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Mon, 6 Apr 2020 18:33:13 +0200 Subject: [PATCH 83/94] fix(spec): improve specs reliability to minimize flakyness (algolia/instantsearch-e2e-tests#21) * Remove debugging and performance flags on Chrome on SauceLabs. This was making the tests longer to run and therefore getting an higher chance to timeout. * Update helpers to always wait for the URL to be updated. This way we always wait for all changes to be done before running the next command. * Replace the `getTextFromElements` helper by `getTextFromSelector` This helper is way more performant since all operations are made in the browser. It removes a lot of back and forth between the runner and the browser, minimizing the risk of errors. * Round elements coordinates when doing a drag and drop From my tests it improves drag and drop precision on Internet Explorer. There is still some flackyness on drag and drop, but I did not find way to completely solve it. --- tests/e2e/helpers/clickClearRefinements.ts | 13 +++++++++++-- tests/e2e/helpers/clickHierarchicalMenuItem.ts | 6 +++--- tests/e2e/helpers/clickNextPage.ts | 13 +++++++++++-- tests/e2e/helpers/clickPage.ts | 13 +++++++++++-- tests/e2e/helpers/clickPreviousPage.ts | 13 +++++++++++-- tests/e2e/helpers/clickRatingMenuItem.ts | 13 +++++++++++-- tests/e2e/helpers/clickRefinementListItem.ts | 6 +++--- tests/e2e/helpers/clickToggleRefinement.ts | 13 +++++++++++-- tests/e2e/helpers/dragAndDropByOffset.ts | 8 ++++---- .../e2e/helpers/dragRangeSliderLowerBoundTo.ts | 12 +++++++++++- .../e2e/helpers/dragRangeSliderUpperBoundTo.ts | 12 +++++++++++- tests/e2e/helpers/getHitsTitles.ts | 4 ++-- .../helpers/getSelectedHierarchicalMenuItems.ts | 4 +--- tests/e2e/helpers/getTextFromElements.ts | 17 ----------------- tests/e2e/helpers/getTextFromSelector.ts | 15 +++++++++++++++ tests/e2e/helpers/index.ts | 2 +- tests/e2e/helpers/setHitsPerPage.ts | 13 +++++++++++-- tests/e2e/helpers/setSearchBoxValue.ts | 6 +++--- tests/e2e/helpers/setSortByValue.ts | 13 +++++++++++-- tests/e2e/specs/price-range.spec.ts | 10 ++++++---- tests/e2e/wdio.saucelabs.conf.js | 2 -- 21 files changed, 148 insertions(+), 60 deletions(-) delete mode 100644 tests/e2e/helpers/getTextFromElements.ts create mode 100644 tests/e2e/helpers/getTextFromSelector.ts diff --git a/tests/e2e/helpers/clickClearRefinements.ts b/tests/e2e/helpers/clickClearRefinements.ts index 33d1dec9da..bba8e26d9c 100644 --- a/tests/e2e/helpers/clickClearRefinements.ts +++ b/tests/e2e/helpers/clickClearRefinements.ts @@ -1,15 +1,24 @@ declare namespace WebdriverIOAsync { interface Browser { - clickClearRefinements(): Promise; + clickClearRefinements(): Promise; } } browser.addCommand('clickClearRefinements', async () => { + const oldUrl = await browser.getUrl(); const clearButton = await browser.$(`.ais-ClearRefinements-button`); // Assures us that the element is in the viewport await clearButton.scrollIntoView(); await clearButton.click(); - return browser.waitForElement(`.ais-ClearRefinements-button--disabled`); + await browser.waitForElement(`.ais-ClearRefinements-button--disabled`); + + // Changing the URL will also change the page element IDs in Internet Explorer + // Not waiting for the URL to be properly updated before continuing can make the next tests fail + await browser.waitUntil( + async () => (await browser.getUrl()) !== oldUrl, + undefined, + `URL was not updated after clearing the refinements` + ); }); diff --git a/tests/e2e/helpers/clickHierarchicalMenuItem.ts b/tests/e2e/helpers/clickHierarchicalMenuItem.ts index eaeb67c82e..2b03be0415 100644 --- a/tests/e2e/helpers/clickHierarchicalMenuItem.ts +++ b/tests/e2e/helpers/clickHierarchicalMenuItem.ts @@ -1,6 +1,6 @@ declare namespace WebdriverIOAsync { interface Browser { - clickHierarchicalMenuItem(label: string): Promise; + clickHierarchicalMenuItem(label: string): Promise; } } @@ -13,8 +13,8 @@ browser.addCommand('clickHierarchicalMenuItem', async (label: string) => { await item.click(); // Changing the URL will also change the page element IDs in Internet Explorer - // Not waiting for the URL to be properly updated before continuing can make the next tests to fail - return browser.waitUntil( + // Not waiting for the URL to be properly updated before continuing can make the next tests fail + await browser.waitUntil( async () => (await browser.getUrl()) !== oldUrl, undefined, `URL was not updated after click on "${label}" in hierarchical menu` diff --git a/tests/e2e/helpers/clickNextPage.ts b/tests/e2e/helpers/clickNextPage.ts index 8845c49a71..a7b3f54fb9 100644 --- a/tests/e2e/helpers/clickNextPage.ts +++ b/tests/e2e/helpers/clickNextPage.ts @@ -1,10 +1,11 @@ declare namespace WebdriverIOAsync { interface Browser { - clickNextPage(): Promise; + clickNextPage(): Promise; } } browser.addCommand('clickNextPage', async () => { + const oldUrl = await browser.getUrl(); const pageNumber = await browser.getCurrentPage(); const page = await browser.$( `.ais-Pagination-item--nextPage .ais-Pagination-link` @@ -14,7 +15,15 @@ browser.addCommand('clickNextPage', async () => { await page.click(); - return browser.waitForElement( + await browser.waitForElement( `.ais-Pagination-item--selected=${pageNumber + 1}` ); + + // Changing the URL will also change the page element IDs in Internet Explorer + // Not waiting for the URL to be properly updated before continuing can make the next tests fail + await browser.waitUntil( + async () => (await browser.getUrl()) !== oldUrl, + undefined, + `URL was not updated after navigating to the next page` + ); }); diff --git a/tests/e2e/helpers/clickPage.ts b/tests/e2e/helpers/clickPage.ts index 694afd0eac..fe26237fbc 100644 --- a/tests/e2e/helpers/clickPage.ts +++ b/tests/e2e/helpers/clickPage.ts @@ -1,15 +1,24 @@ declare namespace WebdriverIOAsync { interface Browser { - clickPage(number: number): Promise; + clickPage(number: number): Promise; } } browser.addCommand('clickPage', async (number: number) => { + const oldUrl = await browser.getUrl(); const page = await browser.$(`.ais-Pagination-link=${number}`); // Assures us that the element is in the viewport await page.scrollIntoView(); await page.click(); - return browser.waitForElement(`.ais-Pagination-item--selected=${number}`); + await browser.waitForElement(`.ais-Pagination-item--selected=${number}`); + + // Changing the URL will also change the page element IDs in Internet Explorer + // Not waiting for the URL to be properly updated before continuing can make the next tests fail + await browser.waitUntil( + async () => (await browser.getUrl()) !== oldUrl, + undefined, + `URL was not updated after navigating to the page "${number}"` + ); }); diff --git a/tests/e2e/helpers/clickPreviousPage.ts b/tests/e2e/helpers/clickPreviousPage.ts index 95b72c4175..e8fb89b77a 100644 --- a/tests/e2e/helpers/clickPreviousPage.ts +++ b/tests/e2e/helpers/clickPreviousPage.ts @@ -1,10 +1,11 @@ declare namespace WebdriverIOAsync { interface Browser { - clickPreviousPage(): Promise; + clickPreviousPage(): Promise; } } browser.addCommand('clickPreviousPage', async () => { + const oldUrl = await browser.getUrl(); const pageNumber = await browser.getCurrentPage(); const page = await browser.$( `.ais-Pagination-item--previousPage .ais-Pagination-link` @@ -14,7 +15,15 @@ browser.addCommand('clickPreviousPage', async () => { await page.click(); - return browser.waitForElement( + await browser.waitForElement( `.ais-Pagination-item--selected=${pageNumber - 1}` ); + + // Changing the URL will also change the page element IDs in Internet Explorer + // Not waiting for the URL to be properly updated before continuing can make the next tests fail + await browser.waitUntil( + async () => (await browser.getUrl()) !== oldUrl, + undefined, + `URL was not updated after navigating to the previous page` + ); }); diff --git a/tests/e2e/helpers/clickRatingMenuItem.ts b/tests/e2e/helpers/clickRatingMenuItem.ts index e454da399b..03f90622a7 100644 --- a/tests/e2e/helpers/clickRatingMenuItem.ts +++ b/tests/e2e/helpers/clickRatingMenuItem.ts @@ -1,17 +1,26 @@ declare namespace WebdriverIOAsync { interface Browser { - clickRatingMenuItem(label: string): Promise; + clickRatingMenuItem(label: string): Promise; } } browser.addCommand('clickRatingMenuItem', async (label: string) => { + const oldUrl = await browser.getUrl(); const rating = await browser.$(`.ais-RatingMenu-link[aria-label="${label}"]`); // Assures us that the element is in the viewport await rating.scrollIntoView(); await rating.click(); - return browser.waitForElement( + await browser.waitForElement( `.ais-RatingMenu-item--selected .ais-RatingMenu-link[aria-label="${label}"]` ); + + // Changing the URL will also change the page element IDs in Internet Explorer + // Not waiting for the URL to be properly updated before continuing can make the next tests fail + await browser.waitUntil( + async () => (await browser.getUrl()) !== oldUrl, + undefined, + `URL was not updated after click on "${label}" in rating menu` + ); }); diff --git a/tests/e2e/helpers/clickRefinementListItem.ts b/tests/e2e/helpers/clickRefinementListItem.ts index cd54c9678e..8a284bb3f7 100644 --- a/tests/e2e/helpers/clickRefinementListItem.ts +++ b/tests/e2e/helpers/clickRefinementListItem.ts @@ -1,6 +1,6 @@ declare namespace WebdriverIOAsync { interface Browser { - clickRefinementListItem(label: string): Promise; + clickRefinementListItem(label: string): Promise; } } @@ -13,8 +13,8 @@ browser.addCommand('clickRefinementListItem', async (label: string) => { await item.click(); // Changing the URL will also change the page element IDs in Internet Explorer - // Not waiting for the URL to be properly updated before continuing can make the next tests to fail - return browser.waitUntil( + // Not waiting for the URL to be properly updated before continuing can make the next tests fail + await browser.waitUntil( async () => (await browser.getUrl()) !== oldUrl, undefined, `URL was not updated after click on "${label}" in refinement list` diff --git a/tests/e2e/helpers/clickToggleRefinement.ts b/tests/e2e/helpers/clickToggleRefinement.ts index 01e7cdfa9a..5b207303e8 100644 --- a/tests/e2e/helpers/clickToggleRefinement.ts +++ b/tests/e2e/helpers/clickToggleRefinement.ts @@ -1,13 +1,22 @@ declare namespace WebdriverIOAsync { interface Browser { - clickToggleRefinement(): Promise; + clickToggleRefinement(): Promise; } } browser.addCommand('clickToggleRefinement', async () => { + const oldUrl = await browser.getUrl(); const checkbox = await browser.$('.ais-ToggleRefinement-checkbox'); // Assures us that the element is in the viewport await checkbox.scrollIntoView(); - return checkbox.click(); + await checkbox.click(); + + // Changing the URL will also change the page element IDs in Internet Explorer + // Not waiting for the URL to be properly updated before continuing can make the next tests fail + await browser.waitUntil( + async () => (await browser.getUrl()) !== oldUrl, + undefined, + `URL was not updated after click toggle refinement` + ); }); diff --git a/tests/e2e/helpers/dragAndDropByOffset.ts b/tests/e2e/helpers/dragAndDropByOffset.ts index a841aa8937..d3ab68439a 100644 --- a/tests/e2e/helpers/dragAndDropByOffset.ts +++ b/tests/e2e/helpers/dragAndDropByOffset.ts @@ -34,10 +34,10 @@ browser.addCommand( document.body.appendChild(target); return target.id; }, - sourceLocation.x, - sourceLocation.y, - offsetX, - offsetY + Math.round(sourceLocation.x), + Math.round(sourceLocation.y), + Math.round(offsetX), + Math.round(offsetY) ); /* eslint-enable prefer-template */ const target = await browser.$(`#${targetId}`); diff --git a/tests/e2e/helpers/dragRangeSliderLowerBoundTo.ts b/tests/e2e/helpers/dragRangeSliderLowerBoundTo.ts index 1d730c3521..2fd311b3b5 100644 --- a/tests/e2e/helpers/dragRangeSliderLowerBoundTo.ts +++ b/tests/e2e/helpers/dragRangeSliderLowerBoundTo.ts @@ -10,6 +10,7 @@ declare module 'webdriverio' { } browser.addCommand('dragRangeSliderLowerBoundTo', async (value: number) => { + const oldUrl = await browser.getUrl(); const slider = await browser.$(RANGE_SLIDER_RAIL_SELECTOR); await browser.waitForElement(RANGE_SLIDER_HANDLE_SELECTOR); @@ -36,10 +37,19 @@ browser.addCommand('dragRangeSliderLowerBoundTo', async (value: number) => { await browser.dragAndDropByOffset(lowerHandle, offset); + await browser.waitForElement(RANGE_SLIDER_HANDLE_SELECTOR); + + // Changing the URL will also change the page element IDs in Internet Explorer + // Not waiting for the URL to be properly updated before continuing can make the next tests fail + await browser.waitUntil( + async () => (await browser.getUrl()) !== oldUrl, + undefined, + `URL was not updated after dragging the range slider lower bound` + ); + // Depending of the steps calculation there can be a difference between // the wanted value and the actual value of the slider, so we return // the actual value in case we need it in the rest of the tests - await browser.waitForElement(RANGE_SLIDER_HANDLE_SELECTOR); [lowerHandle, upperHandle] = await browser.$$(RANGE_SLIDER_HANDLE_SELECTOR); return Number(await lowerHandle.getAttribute('aria-valuenow')); }); diff --git a/tests/e2e/helpers/dragRangeSliderUpperBoundTo.ts b/tests/e2e/helpers/dragRangeSliderUpperBoundTo.ts index 58d8775537..498845e864 100644 --- a/tests/e2e/helpers/dragRangeSliderUpperBoundTo.ts +++ b/tests/e2e/helpers/dragRangeSliderUpperBoundTo.ts @@ -10,6 +10,7 @@ declare module 'webdriverio' { } browser.addCommand('dragRangeSliderUpperBoundTo', async (value: number) => { + const oldUrl = await browser.getUrl(); const slider = await browser.$(RANGE_SLIDER_RAIL_SELECTOR); await browser.waitForElement(RANGE_SLIDER_HANDLE_SELECTOR); @@ -36,10 +37,19 @@ browser.addCommand('dragRangeSliderUpperBoundTo', async (value: number) => { await browser.dragAndDropByOffset(upperHandle, -offset); + await browser.waitForElement(RANGE_SLIDER_HANDLE_SELECTOR); + + // Changing the URL will also change the page element IDs in Internet Explorer + // Not waiting for the URL to be properly updated before continuing can make the next tests fail + await browser.waitUntil( + async () => (await browser.getUrl()) !== oldUrl, + undefined, + `URL was not updated after dragging the range slider upper bound` + ); + // Depending of the steps calculation there can be a difference between // the wanted value and the actual value of the slider, so we return // the actual value in case we need it in the rest of the tests - await browser.waitForElement(RANGE_SLIDER_HANDLE_SELECTOR); [lowerHandle, upperHandle] = await browser.$$(RANGE_SLIDER_HANDLE_SELECTOR); return Number(await upperHandle.getAttribute('aria-valuenow')); }); diff --git a/tests/e2e/helpers/getHitsTitles.ts b/tests/e2e/helpers/getHitsTitles.ts index a57285185b..9f3deafc08 100644 --- a/tests/e2e/helpers/getHitsTitles.ts +++ b/tests/e2e/helpers/getHitsTitles.ts @@ -4,6 +4,6 @@ declare namespace WebdriverIOAsync { } } -browser.addCommand('getHitsTitles', async () => - browser.getTextFromElements(await browser.$$('.hit h1')) +browser.addCommand('getHitsTitles', () => + browser.getTextFromSelector('.hit h1') ); diff --git a/tests/e2e/helpers/getSelectedHierarchicalMenuItems.ts b/tests/e2e/helpers/getSelectedHierarchicalMenuItems.ts index 413f3013c0..33f4909e00 100644 --- a/tests/e2e/helpers/getSelectedHierarchicalMenuItems.ts +++ b/tests/e2e/helpers/getSelectedHierarchicalMenuItems.ts @@ -9,9 +9,7 @@ browser.addCommand('getSelectedHierarchicalMenuItems', async () => { '.ais-HierarchicalMenu-item--selected .ais-HierarchicalMenu-label' ); - const items = await browser.$$( + return await browser.getTextFromSelector( '.ais-HierarchicalMenu-item--selected .ais-HierarchicalMenu-label' ); - - return await browser.getTextFromElements(items); }); diff --git a/tests/e2e/helpers/getTextFromElements.ts b/tests/e2e/helpers/getTextFromElements.ts deleted file mode 100644 index 7d9c2538ae..0000000000 --- a/tests/e2e/helpers/getTextFromElements.ts +++ /dev/null @@ -1,17 +0,0 @@ -declare namespace WebdriverIOAsync { - interface Browser { - getTextFromElements( - elements: WebdriverIOAsync.Element[] - ): Promise; - } -} - -browser.addCommand('getTextFromElements', async function( - elements: WebdriverIOAsync.Element[] -) { - const texts = []; - for (const element of elements) { - texts.push(await element.getText()); - } - return texts; -}); diff --git a/tests/e2e/helpers/getTextFromSelector.ts b/tests/e2e/helpers/getTextFromSelector.ts new file mode 100644 index 0000000000..20bd01fed8 --- /dev/null +++ b/tests/e2e/helpers/getTextFromSelector.ts @@ -0,0 +1,15 @@ +declare namespace WebdriverIOAsync { + interface Browser { + getTextFromSelector(selector: string): Promise; + } +} + +browser.addCommand('getTextFromSelector', (selector: string) => { + return browser.execute(function(browserSelector) { + const elements = document.querySelectorAll(browserSelector); + + return Array.prototype.slice.call(elements).map(function(el) { + return el.innerText; + }); + }, selector); +}); diff --git a/tests/e2e/helpers/index.ts b/tests/e2e/helpers/index.ts index dee0c098c5..59dd6e3efe 100644 --- a/tests/e2e/helpers/index.ts +++ b/tests/e2e/helpers/index.ts @@ -1,6 +1,6 @@ // Generic import './dragAndDropByOffset'; -import './getTextFromElements'; +import './getTextFromSelector'; import './waitForElement'; // SearchBox diff --git a/tests/e2e/helpers/setHitsPerPage.ts b/tests/e2e/helpers/setHitsPerPage.ts index c6ffad2f2f..515c684531 100644 --- a/tests/e2e/helpers/setHitsPerPage.ts +++ b/tests/e2e/helpers/setHitsPerPage.ts @@ -1,11 +1,20 @@ declare namespace WebdriverIOAsync { interface Browser { - setHitsPerPage(label: string): Promise; + setHitsPerPage(label: string): Promise; } } browser.addCommand('setHitsPerPage', async (label: string) => { + const oldUrl = await browser.getUrl(); const hitsPerPage = await browser.$('.ais-HitsPerPage-select'); - return hitsPerPage.selectByVisibleText(label); + await hitsPerPage.selectByVisibleText(label); + + // Changing the URL will also change the page element IDs in Internet Explorer + // Not waiting for the URL to be properly updated before continuing can make the next tests fail + await browser.waitUntil( + async () => (await browser.getUrl()) !== oldUrl, + undefined, + `URL was not updated after setting hits per page to "${label}"` + ); }); diff --git a/tests/e2e/helpers/setSearchBoxValue.ts b/tests/e2e/helpers/setSearchBoxValue.ts index c9ed47e1e4..c6da62a812 100644 --- a/tests/e2e/helpers/setSearchBoxValue.ts +++ b/tests/e2e/helpers/setSearchBoxValue.ts @@ -1,6 +1,6 @@ declare namespace WebdriverIOAsync { interface Browser { - setSearchBoxValue(value: string): Promise; + setSearchBoxValue(value: string): Promise; } } @@ -23,8 +23,8 @@ browser.addCommand('setSearchBoxValue', async (value: string) => { await searchBox.setValue(value); // Changing the URL will also change the page element IDs in Internet Explorer - // Not waiting for the URL to be properly updated before continuing can make the next tests to fail - return browser.waitUntil( + // Not waiting for the URL to be properly updated before continuing can make the next tests fail + await browser.waitUntil( async () => (await browser.getUrl()) !== oldUrl, undefined, `URL was not updated after setting searchbox value to "${value}"` diff --git a/tests/e2e/helpers/setSortByValue.ts b/tests/e2e/helpers/setSortByValue.ts index 8d7fe311b0..61be61cc15 100644 --- a/tests/e2e/helpers/setSortByValue.ts +++ b/tests/e2e/helpers/setSortByValue.ts @@ -1,11 +1,20 @@ declare namespace WebdriverIOAsync { interface Browser { - setSortByValue(label: string): Promise; + setSortByValue(label: string): Promise; } } browser.addCommand('setSortByValue', async (label: string) => { + const oldUrl = await browser.getUrl(); const sortBy = await browser.$('.ais-SortBy-select'); - return sortBy.selectByVisibleText(label); + await sortBy.selectByVisibleText(label); + + // Changing the URL will also change the page element IDs in Internet Explorer + // Not waiting for the URL to be properly updated before continuing can make the next tests fail + await browser.waitUntil( + async () => (await browser.getUrl()) !== oldUrl, + undefined, + `URL was not updated after setting sort by to "${label}"` + ); }); diff --git a/tests/e2e/specs/price-range.spec.ts b/tests/e2e/specs/price-range.spec.ts index cc64d10427..48d39f8fd3 100644 --- a/tests/e2e/specs/price-range.spec.ts +++ b/tests/e2e/specs/price-range.spec.ts @@ -13,8 +13,9 @@ describe('InstantSearch - Search on specific price range', () => { it(`waits for the results list to be updated (wait for all the prices to be > lowerBound)`, async () => { await browser.waitUntil( async () => { - const hits = await browser.$$('.hit-info-container strong'); - const hitsText = await browser.getTextFromElements(hits); + const hitsText = await browser.getTextFromSelector( + '.hit-info-container strong' + ); return ( hitsText.filter(text => Number(text.replace(',', '')) < lowerBound) .length === 0 @@ -32,8 +33,9 @@ describe('InstantSearch - Search on specific price range', () => { it(`waits for the results list to be updated (wait for all the prices to be < upperBound)`, async () => { await browser.waitUntil( async () => { - const hits = await browser.$$('.hit-info-container strong'); - const hitsText = await browser.getTextFromElements(hits); + const hitsText = await browser.getTextFromSelector( + '.hit-info-container strong' + ); return ( hitsText.filter(text => Number(text.replace(',', '')) > upperBound) .length === 0 diff --git a/tests/e2e/wdio.saucelabs.conf.js b/tests/e2e/wdio.saucelabs.conf.js index 901e9e7db3..472690835a 100644 --- a/tests/e2e/wdio.saucelabs.conf.js +++ b/tests/e2e/wdio.saucelabs.conf.js @@ -63,8 +63,6 @@ module.exports = { */ 'sauce:options': { screenResolution: '1680x1050', - extendedDebugging: true, - capturePerformance: true, }, }, { From 60f5f7f1990c665a32fd39db6e3729d338abf065 Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Fri, 17 Apr 2020 15:54:54 +0200 Subject: [PATCH 84/94] chore(release): 1.3.0 --- tests/e2e/CHANGELOG.md | 16 ++++++++++++++++ tests/e2e/package.json | 2 +- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/tests/e2e/CHANGELOG.md b/tests/e2e/CHANGELOG.md index 5e18cfcc8d..304146fbf2 100644 --- a/tests/e2e/CHANGELOG.md +++ b/tests/e2e/CHANGELOG.md @@ -1,3 +1,19 @@ +# [1.3.0](https://github.com/algolia/instantsearch-e2e-tests/compare/v1.2.4...v1.3.0) (2020-04-17) + + +### Bug Fixes + +* **spec:** improve specs reliability to minimize flackyness ([#21](https://github.com/algolia/instantsearch-e2e-tests/issues/21)) ([44bae68](https://github.com/algolia/instantsearch-e2e-tests/commit/44bae68)) +* **test:** change InstantSearch.js test branch to `master` ([#19](https://github.com/algolia/instantsearch-e2e-tests/issues/19)) ([1c34d8d](https://github.com/algolia/instantsearch-e2e-tests/commit/1c34d8d)) + + +### Features + +* **spec:** add custom error messages for timeouts ([#18](https://github.com/algolia/instantsearch-e2e-tests/issues/18)) ([617a22d](https://github.com/algolia/instantsearch-e2e-tests/commit/617a22d)) +* **webdriverio:** add retry for Sauce Connect tunnel ([#17](https://github.com/algolia/instantsearch-e2e-tests/issues/17)) ([9e398c2](https://github.com/algolia/instantsearch-e2e-tests/commit/9e398c2)) + + + ## [1.2.4](https://github.com/algolia/instantsearch-e2e-tests/compare/v1.2.3...v1.2.4) (2019-11-26) diff --git a/tests/e2e/package.json b/tests/e2e/package.json index 45755b4c59..d05a3e3089 100644 --- a/tests/e2e/package.json +++ b/tests/e2e/package.json @@ -1,6 +1,6 @@ { "name": "instantsearch-e2e-tests", - "version": "1.2.4", + "version": "1.3.0", "description": "End-2-End test suite for InstantSearch", "homepage": "https://github.com/algolia/instantsearch-e2e-tests", "main": "./index.js", From 04c5d67730a2927ff3a390bb2a3b834ef62413da Mon Sep 17 00:00:00 2001 From: Dhaya <154633+dhayab@users.noreply.github.com> Date: Mon, 17 Jan 2022 15:13:31 +0100 Subject: [PATCH 85/94] feat: generate junit test reports by default with saucelabs (algolia/instantsearch-e2e-tests#29) BREAKING CHANGE: tested projects now require `@wdio/junit-reporter`. --- tests/e2e/.circleci/config.yml | 2 +- tests/e2e/README.md | 15 +++++++- tests/e2e/package.json | 1 + tests/e2e/wdio.saucelabs.conf.js | 21 +++++++++++ tests/e2e/yarn.lock | 61 +++++++++++++++++++++++++++++++- 5 files changed, 97 insertions(+), 3 deletions(-) diff --git a/tests/e2e/.circleci/config.yml b/tests/e2e/.circleci/config.yml index db83de4ddb..f575c0ce92 100644 --- a/tests/e2e/.circleci/config.yml +++ b/tests/e2e/.circleci/config.yml @@ -23,7 +23,7 @@ aliases: defaults: &defaults working_directory: ~/instantsearch-e2-tests docker: - - image: circleci/node:10.16.3@sha256:6ab62742cec4a68e75e7cac063f6549bae0bcfd0541700df7fde54765eed4ad2 + - image: cimg/node:10.24 version: 2 jobs: diff --git a/tests/e2e/README.md b/tests/e2e/README.md index bc92a9ed9f..4693028841 100644 --- a/tests/e2e/README.md +++ b/tests/e2e/README.md @@ -10,7 +10,7 @@ Install `instantsearch-e2e-tests` and its peerDependencies in your InstantSearch yarn add --dev \ algolia/instantsearch-e2e-tests \ @wdio/cli @wdio/jasmine-framework @wdio/spec-reporter \ -@wdio/static-server-service \ +@wdio/junit-reporter @wdio/static-server-service \ @wdio/local-runner @wdio/selenium-standalone-service \ @wdio/sauce-service ``` @@ -84,6 +84,19 @@ exports.config = { }; ``` +## Sending reports to CircleCI + +CircleCI can [read JUnit XML test metadata files](https://circleci.com/docs/2.0/collect-test-data/) to provide insights on the stability of the test suite. To enable this feature, you can the following key to your e2e job in **.circleci/config.yml**: + +```yaml + test_e2e: + # ... + steps: + # ... + - store_test_results: + path: junit/wdio +``` + # License instantsearch-e2-tests is licensed under the [MIT License](http://www.opensource.org/licenses/mit-license.php). diff --git a/tests/e2e/package.json b/tests/e2e/package.json index d05a3e3089..e7c889806a 100644 --- a/tests/e2e/package.json +++ b/tests/e2e/package.json @@ -57,6 +57,7 @@ "peerDependencies": { "@wdio/cli": "^5.11.13", "@wdio/jasmine-framework": "^5.11.0", + "@wdio/junit-reporter": "^5.11.7", "@wdio/local-runner": "^5.11.13", "@wdio/sauce-service": "^5.11.1", "@wdio/selenium-standalone-service": "^5.11.2", diff --git a/tests/e2e/wdio.saucelabs.conf.js b/tests/e2e/wdio.saucelabs.conf.js index 472690835a..7e50ad4e77 100644 --- a/tests/e2e/wdio.saucelabs.conf.js +++ b/tests/e2e/wdio.saucelabs.conf.js @@ -4,6 +4,27 @@ const baseConfig = require('./wdio.base.conf'); module.exports = { ...baseConfig, + /* + * List of reporters to use + * https://webdriver.io/docs/options.html#reporters + * https://github.com/webdriverio/webdriverio/tree/master/packages/wdio-spec-reporter + */ + reporters: [ + 'spec', + [ + 'junit', + { + outputDir: `${__dirname}/junit/wdio`, + outputFileFormat({ + cid, + capabilities: { browserName, browserVersion }, + }) { + return `results-${cid}.${browserName}-${browserVersion}.xml`; + }, + addFileAttribute: true, + }, + ], + ], /* * Add Sauce Labs integration to WebdriverIO * https://webdriver.io/docs/sauce-service.html diff --git a/tests/e2e/yarn.lock b/tests/e2e/yarn.lock index 9aad397ea9..c34755aba0 100644 --- a/tests/e2e/yarn.lock +++ b/tests/e2e/yarn.lock @@ -114,6 +114,16 @@ deepmerge "^4.0.0" glob "^7.1.2" +"@wdio/junit-reporter@^5.11.7": + version "5.22.4" + resolved "https://registry.yarnpkg.com/@wdio/junit-reporter/-/junit-reporter-5.22.4.tgz#218cba336fe69e88949c54de56967a7daf372286" + integrity sha512-qXuFMeBjPthOPDOCNLglOdpLMzjaGrMS5yeatrcH9dG8HDGnCnvDdpIUBTedor5M4Edr5FBMYKeUd0JifGPbqw== + dependencies: + "@wdio/reporter" "5.22.4" + json-stringify-safe "^5.0.1" + junit-report-builder "^1.3.0" + validator "^13.0.0" + "@wdio/logger@^5.11.0": version "5.11.0" resolved "https://registry.yarnpkg.com/@wdio/logger/-/logger-5.11.0.tgz#1f74698675c54ffb2114fe4ab945b9a0c1663133" @@ -131,6 +141,13 @@ dependencies: "@wdio/config" "^5.11.0" +"@wdio/reporter@5.22.4": + version "5.22.4" + resolved "https://registry.yarnpkg.com/@wdio/reporter/-/reporter-5.22.4.tgz#d0ae86980e694e56604fd3f745c55e58335eceef" + integrity sha512-y/HIKGJHsKXroWWH1B7upynoYmFMuAwJs3LEVwdnpiJIBF4DxzIrRGCY/SSA6U1a/+cRTdI5m1+vA1gcFxcmwQ== + dependencies: + fs-extra "^8.0.1" + JSONStream@^1.0.4: version "1.3.5" resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" @@ -870,6 +887,11 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" +date-format@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/date-format/-/date-format-0.0.2.tgz#fafd448f72115ef1e2b739155ae92f2be6c28dd1" + integrity sha1-+v1Ej3IRXvHitzkVWukvK+bCjdE= + dateformat@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" @@ -1417,7 +1439,7 @@ fs-constants@^1.0.0: resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== -fs-extra@8.1.0: +fs-extra@8.1.0, fs-extra@^8.0.1: version "8.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== @@ -2020,6 +2042,16 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" +junit-report-builder@^1.3.0: + version "1.3.3" + resolved "https://registry.yarnpkg.com/junit-report-builder/-/junit-report-builder-1.3.3.tgz#a848e9ef1b1664b855d1abf8766c39f0a9c5ff33" + integrity sha512-75bwaXjP/3ogyzOSkkcshXGG7z74edkJjgTZlJGAyzxlOHaguexM3VLG6JyD9ZBF8mlpgsUPB1sIWU4LISgeJw== + dependencies: + date-format "0.0.2" + lodash "^4.17.15" + mkdirp "^0.5.0" + xmlbuilder "^10.0.0" + kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" @@ -2188,6 +2220,11 @@ lodash@4.17.15, lodash@^4.14.14, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.2.1 resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== +lodash@^4.17.15: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + loglevel-plugin-prefix@^0.8.4: version "0.8.4" resolved "https://registry.yarnpkg.com/loglevel-plugin-prefix/-/loglevel-plugin-prefix-0.8.4.tgz#2fe0e05f1a820317d98d8c123e634c1bd84ff644" @@ -2342,6 +2379,11 @@ minimist@1.2.0, minimist@^1.1.3: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= +minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + minimist@~0.0.1: version "0.0.10" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" @@ -2355,6 +2397,13 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" +mkdirp@^0.5.0: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + mkdirp@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" @@ -3529,6 +3578,11 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" +validator@^13.0.0: + version "13.7.0" + resolved "https://registry.yarnpkg.com/validator/-/validator-13.7.0.tgz#4f9658ba13ba8f3d82ee881d3516489ea85c0857" + integrity sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw== + verror@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" @@ -3603,6 +3657,11 @@ write@1.0.3: dependencies: mkdirp "^0.5.1" +xmlbuilder@^10.0.0: + version "10.1.1" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-10.1.1.tgz#8cae6688cc9b38d850b7c8d3c0a4161dcaf475b0" + integrity sha512-OyzrcFLL/nb6fMGHbiRDuPup9ljBycsdCypwuyg5AAHvyWzGfChJpCXMG88AGTIMFhGZ9RccFN1e6lhg3hkwKg== + xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" From 2d889a325eabd685db1ded5c6f7a052a5e1147d2 Mon Sep 17 00:00:00 2001 From: Dhaya <154633+dhayab@users.noreply.github.com> Date: Mon, 17 Jan 2022 16:28:10 +0100 Subject: [PATCH 86/94] chore: fix typo and formatting issue in readme (algolia/instantsearch-e2e-tests#31) --- tests/e2e/.circleci/config.yml | 2 +- tests/e2e/README.md | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/tests/e2e/.circleci/config.yml b/tests/e2e/.circleci/config.yml index f575c0ce92..1eef2af393 100644 --- a/tests/e2e/.circleci/config.yml +++ b/tests/e2e/.circleci/config.yml @@ -21,7 +21,7 @@ aliases: command: yarn install defaults: &defaults - working_directory: ~/instantsearch-e2-tests + working_directory: ~/instantsearch-e2e-tests docker: - image: cimg/node:10.24 diff --git a/tests/e2e/README.md b/tests/e2e/README.md index 4693028841..3dee3f1fd3 100644 --- a/tests/e2e/README.md +++ b/tests/e2e/README.md @@ -54,7 +54,7 @@ exports.config = saucelabs; You'll need a username and access key to be able to run the test suite on Sauce Labs. You can find them in the User **Profile** > **User Settings** section of your Sauce Labs dashboard. -`instantsearch-e2-tests` will read the username and access key from the `SAUCE_USERNAME` and `SAUCE_ACCESS_KEY` environment variables respectively. More information about [setting up environment variables for Sauce Labs](https://wiki.saucelabs.com/display/DOCS/Best+Practice%3A+Use+Environment+Variables+for+Authentication+Credentials). +`instantsearch-e2e-tests` will read the username and access key from the `SAUCE_USERNAME` and `SAUCE_ACCESS_KEY` environment variables respectively. More information about [setting up environment variables for Sauce Labs](https://wiki.saucelabs.com/display/DOCS/Best+Practice%3A+Use+Environment+Variables+for+Authentication+Credentials). Alternatively you can store them in a `.env` file at the root of your project, `instantsearch-e2e-tests` will automatically load them using [dotenv](https://github.com/motdotla/dotenv). **But don't forget to add this file to your `.gitignore`.** @@ -86,17 +86,17 @@ exports.config = { ## Sending reports to CircleCI -CircleCI can [read JUnit XML test metadata files](https://circleci.com/docs/2.0/collect-test-data/) to provide insights on the stability of the test suite. To enable this feature, you can the following key to your e2e job in **.circleci/config.yml**: +CircleCI can [read JUnit XML test metadata files](https://circleci.com/docs/2.0/collect-test-data/) to provide insights on the stability of the test suite. To enable this feature, you can add the following key to your e2e job in **.circleci/config.yml**: ```yaml test_e2e: - # ... - steps: - # ... - - store_test_results: - path: junit/wdio + # ... + steps: + # ... + - store_test_results: + path: junit/wdio ``` # License -instantsearch-e2-tests is licensed under the [MIT License](http://www.opensource.org/licenses/mit-license.php). +instantsearch-e2e-tests is licensed under the [MIT License](http://www.opensource.org/licenses/mit-license.php). From 37088497d12cfcb45d9b38dead18beea220b821e Mon Sep 17 00:00:00 2001 From: Dhaya <154633+dhayab@users.noreply.github.com> Date: Mon, 17 Jan 2022 16:32:20 +0100 Subject: [PATCH 87/94] chore(release): 2.0.0 --- tests/e2e/CHANGELOG.md | 14 ++++++++++++++ tests/e2e/package.json | 2 +- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/tests/e2e/CHANGELOG.md b/tests/e2e/CHANGELOG.md index 304146fbf2..8eae6866bd 100644 --- a/tests/e2e/CHANGELOG.md +++ b/tests/e2e/CHANGELOG.md @@ -1,3 +1,17 @@ +# [2.0.0](https://github.com/algolia/instantsearch-e2e-tests/compare/v1.3.0...v2.0.0) (2022-01-17) + + +### Features + +* generate junit test reports by default with saucelabs ([#29](https://github.com/algolia/instantsearch-e2e-tests/issues/29)) ([5f2c0b3](https://github.com/algolia/instantsearch-e2e-tests/commit/5f2c0b3)) + + +### BREAKING CHANGES + +* tested projects now require `@wdio/junit-reporter`. + + + # [1.3.0](https://github.com/algolia/instantsearch-e2e-tests/compare/v1.2.4...v1.3.0) (2020-04-17) diff --git a/tests/e2e/package.json b/tests/e2e/package.json index e7c889806a..9108b07a65 100644 --- a/tests/e2e/package.json +++ b/tests/e2e/package.json @@ -1,6 +1,6 @@ { "name": "instantsearch-e2e-tests", - "version": "1.3.0", + "version": "2.0.0", "description": "End-2-End test suite for InstantSearch", "homepage": "https://github.com/algolia/instantsearch-e2e-tests", "main": "./index.js", From 54b3e8c395900ac52bf44c99179deda57290d79d Mon Sep 17 00:00:00 2001 From: Dhaya <154633+dhayab@users.noreply.github.com> Date: Tue, 18 Jan 2022 10:22:29 +0100 Subject: [PATCH 88/94] fix: correctly output junit report in target repository (algolia/instantsearch-e2e-tests#32) --- tests/e2e/wdio.saucelabs.conf.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/e2e/wdio.saucelabs.conf.js b/tests/e2e/wdio.saucelabs.conf.js index 7e50ad4e77..283a36ded7 100644 --- a/tests/e2e/wdio.saucelabs.conf.js +++ b/tests/e2e/wdio.saucelabs.conf.js @@ -14,7 +14,7 @@ module.exports = { [ 'junit', { - outputDir: `${__dirname}/junit/wdio`, + outputDir: `${process.cwd()}/junit/wdio`, outputFileFormat({ cid, capabilities: { browserName, browserVersion }, From 85bbc29a39e98ff1700931f7c76be6e99492f667 Mon Sep 17 00:00:00 2001 From: Dhaya <154633+dhayab@users.noreply.github.com> Date: Tue, 18 Jan 2022 10:23:06 +0100 Subject: [PATCH 89/94] chore(release): 2.0.1 --- tests/e2e/CHANGELOG.md | 9 +++++++++ tests/e2e/package.json | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/tests/e2e/CHANGELOG.md b/tests/e2e/CHANGELOG.md index 8eae6866bd..500ef1dbac 100644 --- a/tests/e2e/CHANGELOG.md +++ b/tests/e2e/CHANGELOG.md @@ -1,3 +1,12 @@ +## [2.0.1](https://github.com/algolia/instantsearch-e2e-tests/compare/v2.0.0...v2.0.1) (2022-01-18) + + +### Bug Fixes + +* correctly output junit report in target repository ([#32](https://github.com/algolia/instantsearch-e2e-tests/issues/32)) ([d3e9e1b](https://github.com/algolia/instantsearch-e2e-tests/commit/d3e9e1b)) + + + # [2.0.0](https://github.com/algolia/instantsearch-e2e-tests/compare/v1.3.0...v2.0.0) (2022-01-17) diff --git a/tests/e2e/package.json b/tests/e2e/package.json index 9108b07a65..f3214e2f62 100644 --- a/tests/e2e/package.json +++ b/tests/e2e/package.json @@ -1,6 +1,6 @@ { "name": "instantsearch-e2e-tests", - "version": "2.0.0", + "version": "2.0.1", "description": "End-2-End test suite for InstantSearch", "homepage": "https://github.com/algolia/instantsearch-e2e-tests", "main": "./index.js", From d088d9e3f64506e3a8fd22b9c1bbf8f5629ea62e Mon Sep 17 00:00:00 2001 From: Dhaya <154633+dhayab@users.noreply.github.com> Date: Thu, 3 Feb 2022 17:07:37 +0100 Subject: [PATCH 90/94] fix(spec): reduce flakiness related to range slider manipulation (algolia/instantsearch-e2e-tests#33) --- .../specs/initial-state-from-route.spec.ts | 14 +++++++---- tests/e2e/specs/price-range.spec.ts | 23 ------------------- 2 files changed, 9 insertions(+), 28 deletions(-) diff --git a/tests/e2e/specs/initial-state-from-route.spec.ts b/tests/e2e/specs/initial-state-from-route.spec.ts index 37e31facb0..36e91420a4 100644 --- a/tests/e2e/specs/initial-state-from-route.spec.ts +++ b/tests/e2e/specs/initial-state-from-route.spec.ts @@ -93,6 +93,8 @@ describe('InstantSearch - State and route', () => { }); describe('write', () => { + const priceBounds = { lower: 0, upper: 0 }; + it('sets "cooktop" as search box value', async () => { await browser.setSearchBoxValue('cooktop'); }); @@ -123,8 +125,11 @@ describe('InstantSearch - State and route', () => { }); it('sets lower price to $250 and the upper price to $1250 in the price range', async () => { - await browser.dragRangeSliderLowerBoundTo(250); - await browser.dragRangeSliderUpperBoundTo(1250); + // Depending of the steps calculation there can be a difference between + // the wanted value and the actual value of the slider, so we store + // the actual value to use it in for subsequent tests + priceBounds.lower = await browser.dragRangeSliderLowerBoundTo(250); + priceBounds.upper = await browser.dragRangeSliderUpperBoundTo(1250); }); it('selects "64 hits per page" in the hits per page select', async () => { @@ -148,9 +153,8 @@ describe('InstantSearch - State and route', () => { searchParams.get('page') === '2' && searchParams.get('brands') === 'Whirlpool' && searchParams.get('rating') === '3' && - /^(23[0-9]|24[0-9]|250):(124[0-9]|1250)$/.test( - searchParams.get('price') || '' - ) && + searchParams.get('price') === + `${priceBounds.lower}:${priceBounds.upper}` && searchParams.get('sortBy') === 'instant_search_price_asc' && searchParams.get('hitsPerPage') === '64' ); diff --git a/tests/e2e/specs/price-range.spec.ts b/tests/e2e/specs/price-range.spec.ts index 48d39f8fd3..8360158676 100644 --- a/tests/e2e/specs/price-range.spec.ts +++ b/tests/e2e/specs/price-range.spec.ts @@ -45,27 +45,4 @@ describe('InstantSearch - Search on specific price range', () => { `Results list was not updated to display only hits with prices < ${upperBound}` ); }); - - it('must have the expected results', async () => { - const hitsTitles = await browser.getHitsTitles(); - - expect(hitsTitles).toEqual([ - 'Apple - MacBook Air® (Latest Model) - 13.3" Display - Intel Core i5 - 8GB Memory - 128GB Flash Storage - Silver', - 'Apple - MacBook Pro with Retina display - 13.3" Display - 8GB Memory - 128GB Flash Storage - Silver', - 'Apple - MacBook Air® (Latest Model) - 13.3" Display - Intel Core i5 - 8GB Memory - 256GB Flash Storage - Silver', - 'Sony - 65" Class (64.5" Diag.) - 2160p - Smart - 4K Ultra HD TV with High Dynamic Range - Black', - 'Apple - MacBook Pro® - 13" Display - Intel Core i5 - 8 GB Memory - 256GB Flash Storage (latest model) - Space Gray', - 'Samsung - 65" Class (64.5" Diag.) - LED - 2160p - Smart - 4K Ultra HD TV - with High Dynamic Range - Silver', - 'Sony - 55" Class (54.6" Diag.) - 2160p - Smart - 4K Ultra HD TV with High Dynamic Range - Black', - 'HP - Spectre x360 2-in-1 15.6" 4K Ultra HD Touch-Screen Laptop - Intel Core i7 - 16GB Memory - 256GB Solid State Drive - Natural Silver', - 'Microsoft - Surface Pro 4 - 12.3" - 128GB - Intel Core i5 - Silver', - 'Samsung - 49" Class - (48.5" Diag.) - LED - 2160p - Smart - 4K Ultra HD TV - with High Dynamic Range - Silver', - 'Samsung - 55" Class - (54.6" Diag.) - LED - 2160p - Smart - 4K Ultra HD TV - with High Dynamic Range - Silver', - 'HP - ENVY 17.3" Touch-Screen Laptop - Intel Core i7 - 16GB Memory - 1TB Hard Drive - Natural Silver', - 'HP - Pavilion 27" Touch-Screen All-In-One - Intel Core i7 - 12GB Memory - 1TB Hard Drive - HP finish in turbo silver', - 'Samsung - 65" Class - (64.5" Diag.) - LED - 2160p - Smart - 4K Ultra HD TV with High Dynamic Range - Black', - 'Sony - 55" Class (54.6" diag) - LED - 2160p - Smart - 3D - 4K Ultra HD TV with High Dynamic Range - Black', - 'HP - OMEN 17.3" Laptop - Intel Core i7 - 12GB Memory - NVIDIA GeForce GTX 965M - 1TB HDD + 256GB Solid State Drive - Onyx Black/Twinkle Black', - ]); - }); }); From dd904fb71fcf24c5a95dbcf19af3d1d64fb78dc5 Mon Sep 17 00:00:00 2001 From: Dhaya <154633+dhayab@users.noreply.github.com> Date: Thu, 3 Feb 2022 17:08:36 +0100 Subject: [PATCH 91/94] chore(release): 2.0.2 --- tests/e2e/CHANGELOG.md | 9 +++++++++ tests/e2e/package.json | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/tests/e2e/CHANGELOG.md b/tests/e2e/CHANGELOG.md index 500ef1dbac..3b10b7b73b 100644 --- a/tests/e2e/CHANGELOG.md +++ b/tests/e2e/CHANGELOG.md @@ -1,3 +1,12 @@ +## [2.0.2](https://github.com/algolia/instantsearch-e2e-tests/compare/v2.0.1...v2.0.2) (2022-02-03) + + +### Bug Fixes + +* **spec:** reduce flakiness related to range slider manipulation ([#33](https://github.com/algolia/instantsearch-e2e-tests/issues/33)) ([a008f38](https://github.com/algolia/instantsearch-e2e-tests/commit/a008f38)) + + + ## [2.0.1](https://github.com/algolia/instantsearch-e2e-tests/compare/v2.0.0...v2.0.1) (2022-01-18) diff --git a/tests/e2e/package.json b/tests/e2e/package.json index f3214e2f62..9cc66b2286 100644 --- a/tests/e2e/package.json +++ b/tests/e2e/package.json @@ -1,6 +1,6 @@ { "name": "instantsearch-e2e-tests", - "version": "2.0.1", + "version": "2.0.2", "description": "End-2-End test suite for InstantSearch", "homepage": "https://github.com/algolia/instantsearch-e2e-tests", "main": "./index.js", From 66c23a0fc154a178a536b5ed8084e3014d880945 Mon Sep 17 00:00:00 2001 From: Haroen Viaene Date: Tue, 15 Nov 2022 15:27:22 +0100 Subject: [PATCH 92/94] feat(tests): migrate for monorepo - wrap tests in "flavor" factory - remove ci setup (doesn't work with old URL anymore) BREAKING CHANGE: this requires the url to be /examples/js/e-commerce instead of /examples/e-commerce. This means that until the package is in the monorepo, its tests wouldn't pass. After the main monorepo PR is merged, this repo will move inside and will no longer be published. --- tests/e2e/.circleci/config.yml | 4 +- tests/e2e/.eslintrc.js | 2 +- tests/e2e/all-flavors.spec.ts | 16 ++ tests/e2e/flavors.js | 3 + tests/e2e/package.json | 3 - tests/e2e/specs/brand-and-query.spec.ts | 72 ++--- tests/e2e/specs/category.spec.ts | 118 ++++---- .../specs/initial-state-from-route.spec.ts | 266 +++++++++--------- tests/e2e/specs/pagination.spec.ts | 164 +++++------ tests/e2e/specs/price-range.spec.ts | 88 +++--- tests/e2e/tests/instantsearch.js.sh | 15 - tests/e2e/tests/react-instantsearch.sh | 15 - tests/e2e/tests/vue-instantsearch.sh | 15 - tests/e2e/tsconfig.json | 12 +- tests/e2e/wdio.base.conf.js | 11 +- tests/e2e/yarn.lock | 61 +--- 16 files changed, 403 insertions(+), 462 deletions(-) create mode 100644 tests/e2e/all-flavors.spec.ts create mode 100644 tests/e2e/flavors.js delete mode 100755 tests/e2e/tests/instantsearch.js.sh delete mode 100755 tests/e2e/tests/react-instantsearch.sh delete mode 100755 tests/e2e/tests/vue-instantsearch.sh diff --git a/tests/e2e/.circleci/config.yml b/tests/e2e/.circleci/config.yml index 1eef2af393..d41c71115c 100644 --- a/tests/e2e/.circleci/config.yml +++ b/tests/e2e/.circleci/config.yml @@ -36,8 +36,8 @@ jobs: - run: *run_yarn_install - save_cache: *save_yarn_cache - run: - name: Test specs - command: yarn test:saucelabs + name: Lint + command: yarn lint workflows: version: 2 diff --git a/tests/e2e/.eslintrc.js b/tests/e2e/.eslintrc.js index 815efed807..0cb28bd1fa 100644 --- a/tests/e2e/.eslintrc.js +++ b/tests/e2e/.eslintrc.js @@ -15,7 +15,7 @@ module.exports = { }, overrides: [ { - files: ['specs/**/*.spec.ts'], + files: ['specs/**/*.spec.ts', 'all-flavors.spec.ts'], extends: ['plugin:wdio/recommended'], plugins: ['wdio'], env: { diff --git a/tests/e2e/all-flavors.spec.ts b/tests/e2e/all-flavors.spec.ts new file mode 100644 index 0000000000..a00d436001 --- /dev/null +++ b/tests/e2e/all-flavors.spec.ts @@ -0,0 +1,16 @@ +import { brandAndQuery } from './specs/brand-and-query.spec'; +import { category } from './specs/category.spec'; +import { initialStateFromRoute } from './specs/initial-state-from-route.spec'; +import { pagination } from './specs/pagination.spec'; +import { priceRange } from './specs/price-range.spec'; +import { flavors } from './flavors'; + +flavors.forEach(flavor => { + describe(flavor, () => { + brandAndQuery(flavor); + category(flavor); + initialStateFromRoute(flavor); + pagination(flavor); + priceRange(flavor); + }); +}); diff --git a/tests/e2e/flavors.js b/tests/e2e/flavors.js new file mode 100644 index 0000000000..e411293ff2 --- /dev/null +++ b/tests/e2e/flavors.js @@ -0,0 +1,3 @@ +module.exports = { + flavors: ['js'], +}; diff --git a/tests/e2e/package.json b/tests/e2e/package.json index 9cc66b2286..d36ec25887 100644 --- a/tests/e2e/package.json +++ b/tests/e2e/package.json @@ -25,9 +25,6 @@ "scripts": { "commit": "git-cz", "version": "conventional-changelog --preset angular --infile CHANGELOG.md --same-file && git add CHANGELOG.md", - "test": "yarn test:local", - "test:local": "yarn link && cd tests && ./instantsearch.js.sh && ./react-instantsearch.sh && ./vue-instantsearch.sh", - "test:saucelabs": "SAUCELABS=1 yarn test:local", "lint": "eslint --ext .js,.ts,.tsx .", "lint:fix": "eslint --ext .js,.ts,.tsx --fix .", "type-check": "tsc", diff --git a/tests/e2e/specs/brand-and-query.spec.ts b/tests/e2e/specs/brand-and-query.spec.ts index 87b5668b52..578758264a 100644 --- a/tests/e2e/specs/brand-and-query.spec.ts +++ b/tests/e2e/specs/brand-and-query.spec.ts @@ -1,40 +1,44 @@ -describe('InstantSearch - Search on specific brand and query filtering', () => { - it('navigates to the e-commerce demo', async () => { - await browser.url('examples/e-commerce/'); - }); +export function brandAndQuery(flavor: string) { + const root = `examples/${flavor}/e-commerce/`; - it('selects "Apple" brand in list', async () => { - await browser.clickRefinementListItem('Apple'); - }); + describe('Search on specific brand and query filtering', () => { + it('navigates to the e-commerce demo', async () => { + await browser.url(root); + }); - it('fills search input with "macbook"', async () => { - await browser.setSearchBoxValue('macbook'); - }); + it('selects "Apple" brand in list', async () => { + await browser.clickRefinementListItem('Apple'); + }); - it('waits for the results list to be updated (wait for the "macbook" word to be highlighted)', async () => { - await browser.waitForElement('mark=MacBook'); - }); + it('fills search input with "macbook"', async () => { + await browser.setSearchBoxValue('macbook'); + }); + + it('waits for the results list to be updated (wait for the "macbook" word to be highlighted)', async () => { + await browser.waitForElement('mark=MacBook'); + }); - it('must have the expected results', async () => { - const hitsTitles = await browser.getHitsTitles(); + it('must have the expected results', async () => { + const hitsTitles = await browser.getHitsTitles(); - expect(hitsTitles).toEqual([ - 'Apple - MacBook Air® (Latest Model) - 13.3" Display - Intel Core i5 - 8GB Memory - 128GB Flash Storage - Silver', - 'Apple - MacBook Air® (Latest Model) - 13.3" Display - Intel Core i5 - 8GB Memory - 256GB Flash Storage - Silver', - 'Apple - Macbook® (Latest Model) - 12" Display - Intel Core M3 - 8GB Memory - 256GB Flash Storage - Space Gray', - 'Apple - Macbook® (Latest Model) - 12" Display - Intel Core M3 - 8GB Memory - 256GB Flash Storage - Gold', - 'Apple - Macbook® (Latest Model) - 12" Display - Intel Core M3 - 8GB Memory - 256GB Flash Storage - Rose Gold', - 'Apple - Macbook® (Latest Model) - 12" Display - Intel Core M3 - 8GB Memory - 256GB Flash Storage - Silver', - 'Apple - Macbook® (Latest Model) - 12" Display - Intel Core M5 - 8GB Memory - 512GB Flash Storage - Space Gray', - 'Apple - Macbook® (Latest Model) - 12" Display - Intel Core M5 - 8GB Memory - 512GB Flash Storage - Rose Gold', - 'Apple - Macbook® (Latest Model) - 12" Display - Intel Core M5 - 8GB Memory - 512GB Flash Storage - Gold', - 'Apple - Macbook® (Latest Model) - 12" Display - Intel Core M5 - 8GB Memory - 512GB Flash Storage - Silver', - 'Apple - MacBook Pro with Retina display - 13.3" Display - 8GB Memory - 128GB Flash Storage - Silver', - 'Apple - MacBook Pro® - 13" Display - Intel Core i5 - 8 GB Memory - 256GB Flash Storage (latest model) - Space Gray', - 'Apple - MacBook® Pro - 15.4" Display - Intel Core i7 - 16GB Memory - 256GB Flash Storage - Silver', - 'Apple - MacBook Pro® - 13" Display - Intel Core i5 - 8 GB Memory - 256GB Flash Storage (latest model) - Silver', - 'Apple - MacBook® Pro - Intel Core i5 - 13.3" Display - 4GB Memory - 500GB Hard Drive - Silver', - 'Apple - MacBook Pro 13.3" Refurbished Laptop - Intel Core i5 - 4GB Memory - 320GB - Silver', - ]); + expect(hitsTitles).toEqual([ + 'Apple - MacBook Air® (Latest Model) - 13.3" Display - Intel Core i5 - 8GB Memory - 128GB Flash Storage - Silver', + 'Apple - MacBook Air® (Latest Model) - 13.3" Display - Intel Core i5 - 8GB Memory - 256GB Flash Storage - Silver', + 'Apple - Macbook® (Latest Model) - 12" Display - Intel Core M3 - 8GB Memory - 256GB Flash Storage - Space Gray', + 'Apple - Macbook® (Latest Model) - 12" Display - Intel Core M3 - 8GB Memory - 256GB Flash Storage - Gold', + 'Apple - Macbook® (Latest Model) - 12" Display - Intel Core M3 - 8GB Memory - 256GB Flash Storage - Rose Gold', + 'Apple - Macbook® (Latest Model) - 12" Display - Intel Core M3 - 8GB Memory - 256GB Flash Storage - Silver', + 'Apple - Macbook® (Latest Model) - 12" Display - Intel Core M5 - 8GB Memory - 512GB Flash Storage - Space Gray', + 'Apple - Macbook® (Latest Model) - 12" Display - Intel Core M5 - 8GB Memory - 512GB Flash Storage - Rose Gold', + 'Apple - Macbook® (Latest Model) - 12" Display - Intel Core M5 - 8GB Memory - 512GB Flash Storage - Gold', + 'Apple - Macbook® (Latest Model) - 12" Display - Intel Core M5 - 8GB Memory - 512GB Flash Storage - Silver', + 'Apple - MacBook Pro with Retina display - 13.3" Display - 8GB Memory - 128GB Flash Storage - Silver', + 'Apple - MacBook Pro® - 13" Display - Intel Core i5 - 8 GB Memory - 256GB Flash Storage (latest model) - Space Gray', + 'Apple - MacBook® Pro - 15.4" Display - Intel Core i7 - 16GB Memory - 256GB Flash Storage - Silver', + 'Apple - MacBook Pro® - 13" Display - Intel Core i5 - 8 GB Memory - 256GB Flash Storage (latest model) - Silver', + 'Apple - MacBook® Pro - Intel Core i5 - 13.3" Display - 4GB Memory - 500GB Hard Drive - Silver', + 'Apple - MacBook Pro 13.3" Refurbished Laptop - Intel Core i5 - 4GB Memory - 320GB - Silver', + ]); + }); }); -}); +} diff --git a/tests/e2e/specs/category.spec.ts b/tests/e2e/specs/category.spec.ts index 995fdfa404..057ef3a5db 100644 --- a/tests/e2e/specs/category.spec.ts +++ b/tests/e2e/specs/category.spec.ts @@ -1,63 +1,67 @@ -describe('InstantSearch - Search on specific category', () => { - it('navigates to the e-commerce demo', async () => { - await browser.url('examples/e-commerce/'); - }); +export function category(flavor: string) { + const root = `examples/${flavor}/e-commerce/`; - it('selects "Appliances" category in list', async () => { - await browser.clickHierarchicalMenuItem('Appliances'); - }); + describe('Search on specific category', () => { + it('navigates to the e-commerce demo', async () => { + await browser.url(root); + }); - it('selects "Small Kitchen Appliances" category in list', async () => { - await browser.clickHierarchicalMenuItem('Small Kitchen Appliances'); - }); + it('selects "Appliances" category in list', async () => { + await browser.clickHierarchicalMenuItem('Appliances'); + }); - it('must have the expected results for "Small Kitchen Appliances"', async () => { - const hitsTitles = await browser.getHitsTitles(); - - expect(hitsTitles).toEqual([ - 'Insignia™ - 2.6 Cu. Ft. Compact Refrigerator - Black', - 'Keurig - K50 Coffeemaker - Black', - 'Keurig - K200 Brewer - Black', - 'Frigidaire - 3.3 Cu. Ft. Compact Refrigerator - Stainless Steel', - 'Ninja - Mega Kitchen System 72-Oz. Blender - Black', - 'Ninja - Nutri Ninja Pro 24-Oz. Blender - Black/Silver', - 'Oster - Inspire 2-Slice Wide-Slot Toaster - Black', - 'Keurig - The Original Donut Shop K-Cup® Pods (18-Pack)', - 'Chefman - Express Air Fryer - Black', - 'Oster - 10-Speed Blender - Black', - 'Keurig - Swiss Miss Milk Chocolate Hot Cocoa K-Cup® Pods (16-Pack)', - 'Keurig - Cinnabon Classic Cinnamon Roll K-Cup® Pods (18-Pack) - Multi', - 'Ninja - Nutri Ninja 32 Oz. Auto-iQ Blender - Black', - 'Anova - Precision Cooker WiFi', - 'Nespresso - VertuoLine Evoluo Espresso Maker/Coffeemaker - Gray', - 'Magic Bullet - Blender - Silver/Black', - ]); - }); + it('selects "Small Kitchen Appliances" category in list', async () => { + await browser.clickHierarchicalMenuItem('Small Kitchen Appliances'); + }); - it('unselects "Small Kitchen Appliances" category in list', async () => { - await browser.clickHierarchicalMenuItem('Small Kitchen Appliances'); - }); + it('must have the expected results for "Small Kitchen Appliances"', async () => { + const hitsTitles = await browser.getHitsTitles(); + + expect(hitsTitles).toEqual([ + 'Insignia™ - 2.6 Cu. Ft. Compact Refrigerator - Black', + 'Keurig - K50 Coffeemaker - Black', + 'Keurig - K200 Brewer - Black', + 'Frigidaire - 3.3 Cu. Ft. Compact Refrigerator - Stainless Steel', + 'Ninja - Mega Kitchen System 72-Oz. Blender - Black', + 'Ninja - Nutri Ninja Pro 24-Oz. Blender - Black/Silver', + 'Oster - Inspire 2-Slice Wide-Slot Toaster - Black', + 'Keurig - The Original Donut Shop K-Cup® Pods (18-Pack)', + 'Chefman - Express Air Fryer - Black', + 'Oster - 10-Speed Blender - Black', + 'Keurig - Swiss Miss Milk Chocolate Hot Cocoa K-Cup® Pods (16-Pack)', + 'Keurig - Cinnabon Classic Cinnamon Roll K-Cup® Pods (18-Pack) - Multi', + 'Ninja - Nutri Ninja 32 Oz. Auto-iQ Blender - Black', + 'Anova - Precision Cooker WiFi', + 'Nespresso - VertuoLine Evoluo Espresso Maker/Coffeemaker - Gray', + 'Magic Bullet - Blender - Silver/Black', + ]); + }); + + it('unselects "Small Kitchen Appliances" category in list', async () => { + await browser.clickHierarchicalMenuItem('Small Kitchen Appliances'); + }); + + it('must have the expected results for "Appliances"', async () => { + const hitsTitles = await browser.getHitsTitles(); - it('must have the expected results for "Appliances"', async () => { - const hitsTitles = await browser.getHitsTitles(); - - expect(hitsTitles).toEqual([ - 'Nest - Learning Thermostat - 3rd Generation - Stainless Steel', - 'LG - 1.1 Cu. Ft. Mid-Size Microwave - Stainless-Steel', - 'Insignia™ - 2.6 Cu. Ft. Compact Refrigerator - Black', - 'Keurig - K50 Coffeemaker - Black', - 'iRobot - Roomba 650 Vacuuming Robot - Black', - 'Shark - Navigator Lift-Away Deluxe Bagless Upright Vacuum - Blue', - 'LG - 1.5 Cu. Ft. Mid-Size Microwave - Stainless Steel', - 'Insignia™ - 5.0 Cu. Ft. Chest Freezer - White', - 'Samsung - activewash 4.8 Cu. Ft. 11-Cycle High-Efficiency Top-Loading Washer - White', - 'Samsung - 4.8 Cu. Ft. 11-Cycle High-Efficiency Top-Loading Washer - White', - 'LG - 2.0 Cu. Ft. Full-Size Microwave - Stainless Steel', - 'Shark - Rotator Professional Lift-Away HEPA Bagless 2-in-1 Upright Vacuum - Red', - 'LG - 4.5 Cu. Ft. 8-Cycle High-Efficiency Top-Loading Washer - White', - 'Samsung - 4.2 Cu. Ft. 9-Cycle High-Efficiency Steam Front-Loading Washer - Platinum', - 'Panasonic - 1.3 Cu. Ft. Mid-Size Microwave - Stainless steel/black/silver', - 'LG - 2.0 Cu. Ft. Mid-Size Microwave - Black Stainless', - ]); + expect(hitsTitles).toEqual([ + 'Nest - Learning Thermostat - 3rd Generation - Stainless Steel', + 'LG - 1.1 Cu. Ft. Mid-Size Microwave - Stainless-Steel', + 'Insignia™ - 2.6 Cu. Ft. Compact Refrigerator - Black', + 'Keurig - K50 Coffeemaker - Black', + 'iRobot - Roomba 650 Vacuuming Robot - Black', + 'Shark - Navigator Lift-Away Deluxe Bagless Upright Vacuum - Blue', + 'LG - 1.5 Cu. Ft. Mid-Size Microwave - Stainless Steel', + 'Insignia™ - 5.0 Cu. Ft. Chest Freezer - White', + 'Samsung - activewash 4.8 Cu. Ft. 11-Cycle High-Efficiency Top-Loading Washer - White', + 'Samsung - 4.8 Cu. Ft. 11-Cycle High-Efficiency Top-Loading Washer - White', + 'LG - 2.0 Cu. Ft. Full-Size Microwave - Stainless Steel', + 'Shark - Rotator Professional Lift-Away HEPA Bagless 2-in-1 Upright Vacuum - Red', + 'LG - 4.5 Cu. Ft. 8-Cycle High-Efficiency Top-Loading Washer - White', + 'Samsung - 4.2 Cu. Ft. 9-Cycle High-Efficiency Steam Front-Loading Washer - Platinum', + 'Panasonic - 1.3 Cu. Ft. Mid-Size Microwave - Stainless steel/black/silver', + 'LG - 2.0 Cu. Ft. Mid-Size Microwave - Black Stainless', + ]); + }); }); -}); +} diff --git a/tests/e2e/specs/initial-state-from-route.spec.ts b/tests/e2e/specs/initial-state-from-route.spec.ts index 36e91420a4..5a457eb779 100644 --- a/tests/e2e/specs/initial-state-from-route.spec.ts +++ b/tests/e2e/specs/initial-state-from-route.spec.ts @@ -1,167 +1,171 @@ import { URL, URLSearchParams } from 'url'; -describe('InstantSearch - State and route', () => { - describe('read', () => { - it('navigates to the e-commerce demo with refinements set in route', async () => { - const params = new URLSearchParams({ - query: 'mixer', - page: '2', - brands: 'KitchenAid', - rating: '4', - price: '50:350', - free_shipping: 'true', // eslint-disable-line @typescript-eslint/camelcase - sortBy: 'instant_search_price_desc', - hitsPerPage: '32', - }); - await browser.url( - `examples/e-commerce/search/Appliances%2FSmall+Kitchen+Appliances/?${params.toString()}` - ); - }); +export function initialStateFromRoute(flavor: string) { + const root = `examples/${flavor}/e-commerce/`; + + describe('State and route', () => { + describe('read', () => { + it('navigates to the e-commerce demo with refinements set in route', async () => { + const params = new URLSearchParams({ + query: 'mixer', + page: '2', + brands: 'KitchenAid', + rating: '4', + price: '50:350', + free_shipping: 'true', // eslint-disable-line @typescript-eslint/camelcase + sortBy: 'instant_search_price_desc', + hitsPerPage: '32', + }); + await browser.url( + `${root}search/Appliances%2FSmall+Kitchen+Appliances/?${params.toString()}` + ); + }); - it('must have "mixer" set as initial search box value', async () => { - const searchBoxValue = await browser.getSearchBoxValue(); + it('must have "mixer" set as initial search box value', async () => { + const searchBoxValue = await browser.getSearchBoxValue(); - expect(searchBoxValue).toEqual('mixer'); - }); + expect(searchBoxValue).toEqual('mixer'); + }); - it('must have "Appliances" and "Small Kitchen Appliances" items selected in the category menu', async () => { - const items = await browser.getSelectedHierarchicalMenuItems(); + it('must have "Appliances" and "Small Kitchen Appliances" items selected in the category menu', async () => { + const items = await browser.getSelectedHierarchicalMenuItems(); - expect(items).toEqual(['Appliances', 'Small Kitchen Appliances']); - }); + expect(items).toEqual(['Appliances', 'Small Kitchen Appliances']); + }); - it('must have "KitchenAid" brand selected in the brands menu', async () => { - const brand = await browser.getSelectedRefinementListItem(); + it('must have "KitchenAid" brand selected in the brands menu', async () => { + const brand = await browser.getSelectedRefinementListItem(); - expect(brand).toEqual('KitchenAid'); - }); + expect(brand).toEqual('KitchenAid'); + }); - it('must have lower price set to $50 and the upper price set to $350 in the price range', async () => { - const lowerPrice = await browser.getRangeSliderLowerBoundValue(); - const upperPrice = await browser.getRangeSliderUpperBoundValue(); + it('must have lower price set to $50 and the upper price set to $350 in the price range', async () => { + const lowerPrice = await browser.getRangeSliderLowerBoundValue(); + const upperPrice = await browser.getRangeSliderUpperBoundValue(); - expect(lowerPrice).toEqual(50); - expect(upperPrice).toEqual(350); - }); + expect(lowerPrice).toEqual(50); + expect(upperPrice).toEqual(350); + }); - it('must have free shipping box checked', async () => { - const freeShipping = await browser.getToggleRefinementStatus(); + it('must have free shipping box checked', async () => { + const freeShipping = await browser.getToggleRefinementStatus(); - expect(freeShipping).toEqual(true); - }); + expect(freeShipping).toEqual(true); + }); - it('must have rating "4 & up" selected in the rating menu', async () => { - const rating = await browser.getSelectedRatingMenuItem(); + it('must have rating "4 & up" selected in the rating menu', async () => { + const rating = await browser.getSelectedRatingMenuItem(); - expect(rating).toEqual('4 & up'); - }); + expect(rating).toEqual('4 & up'); + }); - it('must have "Price descending" selected in the sort select', async () => { - const sortBy = await browser.getSortByValue(); + it('must have "Price descending" selected in the sort select', async () => { + const sortBy = await browser.getSortByValue(); - expect(sortBy).toEqual('instant_search_price_desc'); - }); + expect(sortBy).toEqual('instant_search_price_desc'); + }); - it('must have "32 hits per page" selected in the hits per page select', async () => { - const hitsPerPage = await browser.getHitsPerPage(); + it('must have "32 hits per page" selected in the hits per page select', async () => { + const hitsPerPage = await browser.getHitsPerPage(); - expect(hitsPerPage).toEqual(32); - }); + expect(hitsPerPage).toEqual(32); + }); - it('must have page 2 selected in the pagination', async () => { - const page = await browser.getCurrentPage(); + it('must have page 2 selected in the pagination', async () => { + const page = await browser.getCurrentPage(); - expect(page).toEqual(2); - }); + expect(page).toEqual(2); + }); - it('must have the expected results', async () => { - const hitsTitles = await browser.getHitsTitles(); - - expect(hitsTitles).toEqual([ - 'KitchenAid - 9-Speed Hand Mixer - Onyx Black', - 'KitchenAid - Attachment Pack with Citrus Juicer for Most KitchenAid Stand Mixers - White', - 'KitchenAid - Ice Cream Maker for Most KitchenAid Stand Mixers - White', - 'KitchenAid - Pasta Sheet Roller for Most KitchenAid Stand Mixers - Silver', - 'KitchenAid - 7-Speed Hand Mixer - Contour Silver', - 'KitchenAid - 7-Speed Hand Mixer - Onyx Black', - 'KitchenAid - 7-Speed Hand Mixer - White', - 'KitchenAid - 5-Quart Glass Mixing Bowl - Frosted Glass', - 'KitchenAid - 3-Speed Hand Mixer - Contour Silver', - 'KitchenAid - 3-Speed Hand Mixer - Onyx Black', - ]); + it('must have the expected results', async () => { + const hitsTitles = await browser.getHitsTitles(); + + expect(hitsTitles).toEqual([ + 'KitchenAid - 9-Speed Hand Mixer - Onyx Black', + 'KitchenAid - Attachment Pack with Citrus Juicer for Most KitchenAid Stand Mixers - White', + 'KitchenAid - Ice Cream Maker for Most KitchenAid Stand Mixers - White', + 'KitchenAid - Pasta Sheet Roller for Most KitchenAid Stand Mixers - Silver', + 'KitchenAid - 7-Speed Hand Mixer - Contour Silver', + 'KitchenAid - 7-Speed Hand Mixer - Onyx Black', + 'KitchenAid - 7-Speed Hand Mixer - White', + 'KitchenAid - 5-Quart Glass Mixing Bowl - Frosted Glass', + 'KitchenAid - 3-Speed Hand Mixer - Contour Silver', + 'KitchenAid - 3-Speed Hand Mixer - Onyx Black', + ]); + }); }); - }); - describe('write', () => { - const priceBounds = { lower: 0, upper: 0 }; + describe('write', () => { + const priceBounds = { lower: 0, upper: 0 }; - it('sets "cooktop" as search box value', async () => { - await browser.setSearchBoxValue('cooktop'); - }); + it('sets "cooktop" as search box value', async () => { + await browser.setSearchBoxValue('cooktop'); + }); - it('deselects "KitchenAid" brand in the brands menu', async () => { - await browser.clickRefinementListItem('KitchenAid'); - }); + it('deselects "KitchenAid" brand in the brands menu', async () => { + await browser.clickRefinementListItem('KitchenAid'); + }); - it('deselects "Small Kitchen Appliances" items and select "Ranges, Cooktops & Ovens" in the category menu', async () => { - await browser.clickHierarchicalMenuItem('Small Kitchen Appliances'); - await browser.clickHierarchicalMenuItem('Ranges, Cooktops & Ovens'); - }); + it('deselects "Small Kitchen Appliances" items and select "Ranges, Cooktops & Ovens" in the category menu', async () => { + await browser.clickHierarchicalMenuItem('Small Kitchen Appliances'); + await browser.clickHierarchicalMenuItem('Ranges, Cooktops & Ovens'); + }); - it('selects "Whirlpool" brand in the brands menu', async () => { - await browser.clickRefinementListItem('Whirlpool'); - }); + it('selects "Whirlpool" brand in the brands menu', async () => { + await browser.clickRefinementListItem('Whirlpool'); + }); - it('unchecks free shipping box', async () => { - await browser.clickToggleRefinement(); - }); + it('unchecks free shipping box', async () => { + await browser.clickToggleRefinement(); + }); - it('selects rating "3 & up" in the rating menu', async () => { - await browser.clickRatingMenuItem('3 & up'); - }); + it('selects rating "3 & up" in the rating menu', async () => { + await browser.clickRatingMenuItem('3 & up'); + }); - it('selects "Price ascending" in the sort select', async () => { - await browser.setSortByValue('Price ascending'); - }); + it('selects "Price ascending" in the sort select', async () => { + await browser.setSortByValue('Price ascending'); + }); - it('sets lower price to $250 and the upper price to $1250 in the price range', async () => { - // Depending of the steps calculation there can be a difference between - // the wanted value and the actual value of the slider, so we store - // the actual value to use it in for subsequent tests - priceBounds.lower = await browser.dragRangeSliderLowerBoundTo(250); - priceBounds.upper = await browser.dragRangeSliderUpperBoundTo(1250); - }); + it('sets lower price to $250 and the upper price to $1250 in the price range', async () => { + // Depending of the steps calculation there can be a difference between + // the wanted value and the actual value of the slider, so we store + // the actual value to use it in for subsequent tests + priceBounds.lower = await browser.dragRangeSliderLowerBoundTo(250); + priceBounds.upper = await browser.dragRangeSliderUpperBoundTo(1250); + }); - it('selects "64 hits per page" in the hits per page select', async () => { - await browser.setHitsPerPage('64 hits per page'); - }); + it('selects "64 hits per page" in the hits per page select', async () => { + await browser.setHitsPerPage('64 hits per page'); + }); - it('selects page 2 in the pagination', async () => { - await browser.clickPage(2); - }); + it('selects page 2 in the pagination', async () => { + await browser.clickPage(2); + }); - it('must have the expected url', async () => { - await browser.waitUntil( - async () => { - const url = await browser.getUrl(); - const { pathname, searchParams } = new URL(url); - - return ( - pathname === - '/examples/e-commerce/search/Appliances%2FRanges%2C+Cooktops+%26+Ovens/' && - searchParams.get('query') === 'cooktop' && - searchParams.get('page') === '2' && - searchParams.get('brands') === 'Whirlpool' && - searchParams.get('rating') === '3' && - searchParams.get('price') === - `${priceBounds.lower}:${priceBounds.upper}` && - searchParams.get('sortBy') === 'instant_search_price_asc' && - searchParams.get('hitsPerPage') === '64' - ); - }, - undefined, - 'URL does not have expected parameters' - ); + it('must have the expected url', async () => { + await browser.waitUntil( + async () => { + const url = await browser.getUrl(); + const { pathname, searchParams } = new URL(url); + + return ( + pathname === + `/${root}search/Appliances%2FRanges%2C+Cooktops+%26+Ovens/` && + searchParams.get('query') === 'cooktop' && + searchParams.get('page') === '2' && + searchParams.get('brands') === 'Whirlpool' && + searchParams.get('rating') === '3' && + searchParams.get('price') === + `${priceBounds.lower}:${priceBounds.upper}` && + searchParams.get('sortBy') === 'instant_search_price_asc' && + searchParams.get('hitsPerPage') === '64' + ); + }, + undefined, + 'URL does not have expected parameters' + ); + }); }); }); -}); +} diff --git a/tests/e2e/specs/pagination.spec.ts b/tests/e2e/specs/pagination.spec.ts index e7a06ab659..0895c62604 100644 --- a/tests/e2e/specs/pagination.spec.ts +++ b/tests/e2e/specs/pagination.spec.ts @@ -1,92 +1,96 @@ -describe('InstantSearch - Page navigation', () => { - it('navigates to the e-commerce demo', async () => { - await browser.url('examples/e-commerce/'); - }); +export function pagination(flavor: string) { + const root = `examples/${flavor}/e-commerce/`; - it('navigates to next page', async () => { - await browser.clickNextPage(); - }); + describe('Page navigation', () => { + it('navigates to the e-commerce demo', async () => { + await browser.url(root); + }); - it('must have the expected results for page 2', async () => { - const hitsTitles = await browser.getHitsTitles(); + it('navigates to next page', async () => { + await browser.clickNextPage(); + }); - expect(hitsTitles).toEqual([ - 'Sony - BDP-S3700 - Streaming Wi-Fi Built-In Blu-ray Player - Black', - 'Insignia™ - 55" Class - (54.6" Diag.) - LED - 1080p - HDTV - Black', - 'HP - 15.6" Laptop - AMD A6-Series - 4GB Memory - 500GB Hard Drive - Black', - 'Nintendo - amiibo Figure (The Legend of Zelda: Breath of the Wild Series Bokoblin)', - 'AT&T GoPhone - Samsung Galaxy Express 3 4G LTE with 8GB Memory Prepaid Cell Phone', - 'Insignia™ - 32" Class - (31.5" Diag.) - LED - 720p - HDTV - Black', - 'Lenovo - 110-15ISK 15.6" Laptop - Intel Core i3 - 4GB Memory - 1TB Hard Drive - Black', - 'Amazon - Echo Dot', - 'Harman/kardon - Onyx Mini Portable Wireless Speaker - Black', - 'Insignia™ - Portable Wireless Speaker - Black', - 'Insignia™ - 92 Bright Multipurpose Paper - White', - 'Apple - MacBook Pro with Retina display - 13.3" Display - 8GB Memory - 128GB Flash Storage - Silver', - 'SanDisk - Ultra Plus 32GB microSDHC Class 10 UHS-1 Memory Card - Gray/Red', - 'Amazon - Fire TV (2015 Model) - Black', - 'GoPro - HERO5 Black 4K Action Camera', - 'Epson - Expression Home XP-430 Small-in-One Wireless All-In-One Printer', - ]); - }); + it('must have the expected results for page 2', async () => { + const hitsTitles = await browser.getHitsTitles(); - it('selects "Appliances" in the category menu', async () => { - await browser.clickHierarchicalMenuItem('Appliances'); - }); + expect(hitsTitles).toEqual([ + 'Sony - BDP-S3700 - Streaming Wi-Fi Built-In Blu-ray Player - Black', + 'Insignia™ - 55" Class - (54.6" Diag.) - LED - 1080p - HDTV - Black', + 'HP - 15.6" Laptop - AMD A6-Series - 4GB Memory - 500GB Hard Drive - Black', + 'Nintendo - amiibo Figure (The Legend of Zelda: Breath of the Wild Series Bokoblin)', + 'AT&T GoPhone - Samsung Galaxy Express 3 4G LTE with 8GB Memory Prepaid Cell Phone', + 'Insignia™ - 32" Class - (31.5" Diag.) - LED - 720p - HDTV - Black', + 'Lenovo - 110-15ISK 15.6" Laptop - Intel Core i3 - 4GB Memory - 1TB Hard Drive - Black', + 'Amazon - Echo Dot', + 'Harman/kardon - Onyx Mini Portable Wireless Speaker - Black', + 'Insignia™ - Portable Wireless Speaker - Black', + 'Insignia™ - 92 Bright Multipurpose Paper - White', + 'Apple - MacBook Pro with Retina display - 13.3" Display - 8GB Memory - 128GB Flash Storage - Silver', + 'SanDisk - Ultra Plus 32GB microSDHC Class 10 UHS-1 Memory Card - Gray/Red', + 'Amazon - Fire TV (2015 Model) - Black', + 'GoPro - HERO5 Black 4K Action Camera', + 'Epson - Expression Home XP-430 Small-in-One Wireless All-In-One Printer', + ]); + }); - it('must reset the page to 1', async () => { - const page = await browser.getCurrentPage(); + it('selects "Appliances" in the category menu', async () => { + await browser.clickHierarchicalMenuItem('Appliances'); + }); - expect(page).toEqual(1); - }); + it('must reset the page to 1', async () => { + const page = await browser.getCurrentPage(); - it('must have the expected results for page 1', async () => { - const hitsTitles = await browser.getHitsTitles(); + expect(page).toEqual(1); + }); - expect(hitsTitles).toEqual([ - 'Nest - Learning Thermostat - 3rd Generation - Stainless Steel', - 'LG - 1.1 Cu. Ft. Mid-Size Microwave - Stainless-Steel', - 'Insignia™ - 2.6 Cu. Ft. Compact Refrigerator - Black', - 'Keurig - K50 Coffeemaker - Black', - 'iRobot - Roomba 650 Vacuuming Robot - Black', - 'Shark - Navigator Lift-Away Deluxe Bagless Upright Vacuum - Blue', - 'LG - 1.5 Cu. Ft. Mid-Size Microwave - Stainless Steel', - 'Insignia™ - 5.0 Cu. Ft. Chest Freezer - White', - 'Samsung - activewash 4.8 Cu. Ft. 11-Cycle High-Efficiency Top-Loading Washer - White', - 'Samsung - 4.8 Cu. Ft. 11-Cycle High-Efficiency Top-Loading Washer - White', - 'LG - 2.0 Cu. Ft. Full-Size Microwave - Stainless Steel', - 'Shark - Rotator Professional Lift-Away HEPA Bagless 2-in-1 Upright Vacuum - Red', - 'LG - 4.5 Cu. Ft. 8-Cycle High-Efficiency Top-Loading Washer - White', - 'Samsung - 4.2 Cu. Ft. 9-Cycle High-Efficiency Steam Front-Loading Washer - Platinum', - 'Panasonic - 1.3 Cu. Ft. Mid-Size Microwave - Stainless steel/black/silver', - 'LG - 2.0 Cu. Ft. Mid-Size Microwave - Black Stainless', - ]); - }); + it('must have the expected results for page 1', async () => { + const hitsTitles = await browser.getHitsTitles(); - it('navigates to page 3', async () => { - await browser.clickPage(3); - }); + expect(hitsTitles).toEqual([ + 'Nest - Learning Thermostat - 3rd Generation - Stainless Steel', + 'LG - 1.1 Cu. Ft. Mid-Size Microwave - Stainless-Steel', + 'Insignia™ - 2.6 Cu. Ft. Compact Refrigerator - Black', + 'Keurig - K50 Coffeemaker - Black', + 'iRobot - Roomba 650 Vacuuming Robot - Black', + 'Shark - Navigator Lift-Away Deluxe Bagless Upright Vacuum - Blue', + 'LG - 1.5 Cu. Ft. Mid-Size Microwave - Stainless Steel', + 'Insignia™ - 5.0 Cu. Ft. Chest Freezer - White', + 'Samsung - activewash 4.8 Cu. Ft. 11-Cycle High-Efficiency Top-Loading Washer - White', + 'Samsung - 4.8 Cu. Ft. 11-Cycle High-Efficiency Top-Loading Washer - White', + 'LG - 2.0 Cu. Ft. Full-Size Microwave - Stainless Steel', + 'Shark - Rotator Professional Lift-Away HEPA Bagless 2-in-1 Upright Vacuum - Red', + 'LG - 4.5 Cu. Ft. 8-Cycle High-Efficiency Top-Loading Washer - White', + 'Samsung - 4.2 Cu. Ft. 9-Cycle High-Efficiency Steam Front-Loading Washer - Platinum', + 'Panasonic - 1.3 Cu. Ft. Mid-Size Microwave - Stainless steel/black/silver', + 'LG - 2.0 Cu. Ft. Mid-Size Microwave - Black Stainless', + ]); + }); + + it('navigates to page 3', async () => { + await browser.clickPage(3); + }); - it('must have the expected results for page 3', async () => { - const hitsTitles = await browser.getHitsTitles(); + it('must have the expected results for page 3', async () => { + const hitsTitles = await browser.getHitsTitles(); - expect(hitsTitles).toEqual([ - 'Keurig - Swiss Miss Milk Chocolate Hot Cocoa K-Cup® Pods (16-Pack)', - 'Samsung - 4.5 Cu. Ft. 14-Cycle Addwash™ High-Efficiency Front-Loading Washer with Steam - Black Stainless', - 'Keurig - Cinnabon Classic Cinnamon Roll K-Cup® Pods (18-Pack) - Multi', - 'Dyson - V8 Absolute Bagless Cordless Stick Vacuum - Multi', - 'Honeywell - 1 Gal. Warm Moisture Humidifier - Black', - 'Ninja - Nutri Ninja 32 Oz. Auto-iQ Blender - Black', - 'Anova - Precision Cooker WiFi', - 'Nespresso - VertuoLine Evoluo Espresso Maker/Coffeemaker - Gray', - 'LG - 0.7 Cu. Ft. Compact Microwave - Stainless-Steel', - 'Samsung - 1.8 Cu. Ft. Over-the-Range Microwave - Stainless Steel', - 'Dyson - V6 Motorhead Bagless Cordless Stick Vacuum - Fuchsia/Iron', - 'LG - 7.4 Cu. Ft. 8-Cycle Electric Dryer - White', - 'Samsung - 7.5 Cu. Ft. 11-Cycle Electric Dryer with Steam - Platinum', - 'ecobee - ecobee3 Programmable Touch-Screen Wi-Fi Thermostat (2nd Generation) - Black/White', - 'LG - Stacking Kit for Most 27" LG Washers and Dryers - Chrome', - 'Magic Bullet - Blender - Silver/Black', - ]); + expect(hitsTitles).toEqual([ + 'Keurig - Swiss Miss Milk Chocolate Hot Cocoa K-Cup® Pods (16-Pack)', + 'Samsung - 4.5 Cu. Ft. 14-Cycle Addwash™ High-Efficiency Front-Loading Washer with Steam - Black Stainless', + 'Keurig - Cinnabon Classic Cinnamon Roll K-Cup® Pods (18-Pack) - Multi', + 'Dyson - V8 Absolute Bagless Cordless Stick Vacuum - Multi', + 'Honeywell - 1 Gal. Warm Moisture Humidifier - Black', + 'Ninja - Nutri Ninja 32 Oz. Auto-iQ Blender - Black', + 'Anova - Precision Cooker WiFi', + 'Nespresso - VertuoLine Evoluo Espresso Maker/Coffeemaker - Gray', + 'LG - 0.7 Cu. Ft. Compact Microwave - Stainless-Steel', + 'Samsung - 1.8 Cu. Ft. Over-the-Range Microwave - Stainless Steel', + 'Dyson - V6 Motorhead Bagless Cordless Stick Vacuum - Fuchsia/Iron', + 'LG - 7.4 Cu. Ft. 8-Cycle Electric Dryer - White', + 'Samsung - 7.5 Cu. Ft. 11-Cycle Electric Dryer with Steam - Platinum', + 'ecobee - ecobee3 Programmable Touch-Screen Wi-Fi Thermostat (2nd Generation) - Black/White', + 'LG - Stacking Kit for Most 27" LG Washers and Dryers - Chrome', + 'Magic Bullet - Blender - Silver/Black', + ]); + }); }); -}); +} diff --git a/tests/e2e/specs/price-range.spec.ts b/tests/e2e/specs/price-range.spec.ts index 8360158676..3fd7723016 100644 --- a/tests/e2e/specs/price-range.spec.ts +++ b/tests/e2e/specs/price-range.spec.ts @@ -1,48 +1,52 @@ -describe('InstantSearch - Search on specific price range', () => { - let lowerBound: number; - let upperBound: number; +export function priceRange(flavor: string) { + const root = `examples/${flavor}/e-commerce/`; - it('navigates to the e-commerce demo', async () => { - await browser.url('examples/e-commerce/'); - }); + describe('Search on specific price range', () => { + let lowerBound: number; + let upperBound: number; - it('drag and drop lower handle to the right', async () => { - lowerBound = await browser.dragRangeSliderLowerBoundTo(971); - }); + it('navigates to the e-commerce demo', async () => { + await browser.url(root); + }); - it(`waits for the results list to be updated (wait for all the prices to be > lowerBound)`, async () => { - await browser.waitUntil( - async () => { - const hitsText = await browser.getTextFromSelector( - '.hit-info-container strong' - ); - return ( - hitsText.filter(text => Number(text.replace(',', '')) < lowerBound) - .length === 0 - ); - }, - undefined, - `Results list was not updated to display only hits with prices > ${lowerBound}` - ); - }); + it('drag and drop lower handle to the right', async () => { + lowerBound = await browser.dragRangeSliderLowerBoundTo(971); + }); - it('drag and drop upper handle to the left', async () => { - upperBound = await browser.dragRangeSliderUpperBoundTo(1971); - }); + it(`waits for the results list to be updated (wait for all the prices to be > lowerBound)`, async () => { + await browser.waitUntil( + async () => { + const hitsText = await browser.getTextFromSelector( + '.hit-info-container strong' + ); + return ( + hitsText.filter(text => Number(text.replace(',', '')) < lowerBound) + .length === 0 + ); + }, + undefined, + `Results list was not updated to display only hits with prices > ${lowerBound}` + ); + }); + + it('drag and drop upper handle to the left', async () => { + upperBound = await browser.dragRangeSliderUpperBoundTo(1971); + }); - it(`waits for the results list to be updated (wait for all the prices to be < upperBound)`, async () => { - await browser.waitUntil( - async () => { - const hitsText = await browser.getTextFromSelector( - '.hit-info-container strong' - ); - return ( - hitsText.filter(text => Number(text.replace(',', '')) > upperBound) - .length === 0 - ); - }, - undefined, - `Results list was not updated to display only hits with prices < ${upperBound}` - ); + it(`waits for the results list to be updated (wait for all the prices to be < upperBound)`, async () => { + await browser.waitUntil( + async () => { + const hitsText = await browser.getTextFromSelector( + '.hit-info-container strong' + ); + return ( + hitsText.filter(text => Number(text.replace(',', '')) > upperBound) + .length === 0 + ); + }, + undefined, + `Results list was not updated to display only hits with prices < ${upperBound}` + ); + }); }); -}); +} diff --git a/tests/e2e/tests/instantsearch.js.sh b/tests/e2e/tests/instantsearch.js.sh deleted file mode 100755 index 30b57e5519..0000000000 --- a/tests/e2e/tests/instantsearch.js.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env bash - -set -e - -rm -rf instantsearch.js -git clone git@github.com:algolia/instantsearch.js.git --branch master --depth=1 -cd instantsearch.js -yarn --ignore-engines -yarn link instantsearch-e2e-tests -yarn run website:build -if [ "$SAUCELABS" ]; then - yarn run test:e2e:saucelabs -else - yarn run test:e2e -fi diff --git a/tests/e2e/tests/react-instantsearch.sh b/tests/e2e/tests/react-instantsearch.sh deleted file mode 100755 index 90c6f14aba..0000000000 --- a/tests/e2e/tests/react-instantsearch.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env bash - -set -e - -rm -rf react-instantsearch -git clone git@github.com:algolia/react-instantsearch.git --branch master --depth=1 -cd react-instantsearch -yarn --ignore-engines -yarn link instantsearch-e2e-tests -yarn run website:build -if [ "$SAUCELABS" ]; then - yarn run test:e2e:saucelabs -else - yarn run test:e2e -fi diff --git a/tests/e2e/tests/vue-instantsearch.sh b/tests/e2e/tests/vue-instantsearch.sh deleted file mode 100755 index f39368ad10..0000000000 --- a/tests/e2e/tests/vue-instantsearch.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env bash - -set -e - -rm -rf vue-instantsearch -git clone git@github.com:algolia/vue-instantsearch.git --branch master --depth=1 -cd vue-instantsearch -yarn --ignore-engines -yarn link instantsearch-e2e-tests -yarn run examples:build -if [ "$SAUCELABS" ]; then - yarn run test:e2e:saucelabs -else - yarn run test:e2e -fi diff --git a/tests/e2e/tsconfig.json b/tests/e2e/tsconfig.json index 161c2986c6..079658b3fa 100644 --- a/tests/e2e/tsconfig.json +++ b/tests/e2e/tsconfig.json @@ -10,7 +10,15 @@ "noImplicitReturns": true, "noFallthroughCasesInSwitch": true, "allowSyntheticDefaultImports": true, - "types": ["node", "webdriverio", "jasmine"] + "types": ["node", "webdriverio", "jasmine"], + "allowJs": true, + "checkJs": true, }, - "exclude": ["node_modules", "tests"] + "exclude": ["node_modules"], + "include": [ + "./*.ts", + "./*.js", + "./specs/**/*.ts", + "./helpers/**/*.ts" + ] } diff --git a/tests/e2e/wdio.base.conf.js b/tests/e2e/wdio.base.conf.js index e9f8beecb2..1763fb1cea 100644 --- a/tests/e2e/wdio.base.conf.js +++ b/tests/e2e/wdio.base.conf.js @@ -1,4 +1,5 @@ const path = require('path'); +const { flavors } = require('./flavors'); module.exports = { /* @@ -12,10 +13,10 @@ module.exports = { mount: '/', path: './website', }, - { - mount: '/examples/e-commerce/*', - path: './website/examples/e-commerce', - }, + ...flavors.map(flavor => ({ + mount: `/examples/${flavor}/e-commerce/*`, + path: `./website/examples/${flavor}/e-commerce`, + })), ], staticServerPort: 5000, /* @@ -32,7 +33,7 @@ module.exports = { * instead of the directory from which `wdio` was called * https://webdriver.io/docs/configurationfile.html */ - specs: [path.join(__dirname, 'specs/**/*.spec.ts')], + specs: [path.join(__dirname, 'all-flavors.spec.ts')], /* * Level of logging verbosity diff --git a/tests/e2e/yarn.lock b/tests/e2e/yarn.lock index c34755aba0..9aad397ea9 100644 --- a/tests/e2e/yarn.lock +++ b/tests/e2e/yarn.lock @@ -114,16 +114,6 @@ deepmerge "^4.0.0" glob "^7.1.2" -"@wdio/junit-reporter@^5.11.7": - version "5.22.4" - resolved "https://registry.yarnpkg.com/@wdio/junit-reporter/-/junit-reporter-5.22.4.tgz#218cba336fe69e88949c54de56967a7daf372286" - integrity sha512-qXuFMeBjPthOPDOCNLglOdpLMzjaGrMS5yeatrcH9dG8HDGnCnvDdpIUBTedor5M4Edr5FBMYKeUd0JifGPbqw== - dependencies: - "@wdio/reporter" "5.22.4" - json-stringify-safe "^5.0.1" - junit-report-builder "^1.3.0" - validator "^13.0.0" - "@wdio/logger@^5.11.0": version "5.11.0" resolved "https://registry.yarnpkg.com/@wdio/logger/-/logger-5.11.0.tgz#1f74698675c54ffb2114fe4ab945b9a0c1663133" @@ -141,13 +131,6 @@ dependencies: "@wdio/config" "^5.11.0" -"@wdio/reporter@5.22.4": - version "5.22.4" - resolved "https://registry.yarnpkg.com/@wdio/reporter/-/reporter-5.22.4.tgz#d0ae86980e694e56604fd3f745c55e58335eceef" - integrity sha512-y/HIKGJHsKXroWWH1B7upynoYmFMuAwJs3LEVwdnpiJIBF4DxzIrRGCY/SSA6U1a/+cRTdI5m1+vA1gcFxcmwQ== - dependencies: - fs-extra "^8.0.1" - JSONStream@^1.0.4: version "1.3.5" resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" @@ -887,11 +870,6 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" -date-format@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/date-format/-/date-format-0.0.2.tgz#fafd448f72115ef1e2b739155ae92f2be6c28dd1" - integrity sha1-+v1Ej3IRXvHitzkVWukvK+bCjdE= - dateformat@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" @@ -1439,7 +1417,7 @@ fs-constants@^1.0.0: resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== -fs-extra@8.1.0, fs-extra@^8.0.1: +fs-extra@8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== @@ -2042,16 +2020,6 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" -junit-report-builder@^1.3.0: - version "1.3.3" - resolved "https://registry.yarnpkg.com/junit-report-builder/-/junit-report-builder-1.3.3.tgz#a848e9ef1b1664b855d1abf8766c39f0a9c5ff33" - integrity sha512-75bwaXjP/3ogyzOSkkcshXGG7z74edkJjgTZlJGAyzxlOHaguexM3VLG6JyD9ZBF8mlpgsUPB1sIWU4LISgeJw== - dependencies: - date-format "0.0.2" - lodash "^4.17.15" - mkdirp "^0.5.0" - xmlbuilder "^10.0.0" - kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" @@ -2220,11 +2188,6 @@ lodash@4.17.15, lodash@^4.14.14, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.2.1 resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== -lodash@^4.17.15: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - loglevel-plugin-prefix@^0.8.4: version "0.8.4" resolved "https://registry.yarnpkg.com/loglevel-plugin-prefix/-/loglevel-plugin-prefix-0.8.4.tgz#2fe0e05f1a820317d98d8c123e634c1bd84ff644" @@ -2379,11 +2342,6 @@ minimist@1.2.0, minimist@^1.1.3: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= -minimist@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== - minimist@~0.0.1: version "0.0.10" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" @@ -2397,13 +2355,6 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@^0.5.0: - version "0.5.5" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== - dependencies: - minimist "^1.2.5" - mkdirp@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" @@ -3578,11 +3529,6 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" -validator@^13.0.0: - version "13.7.0" - resolved "https://registry.yarnpkg.com/validator/-/validator-13.7.0.tgz#4f9658ba13ba8f3d82ee881d3516489ea85c0857" - integrity sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw== - verror@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" @@ -3657,11 +3603,6 @@ write@1.0.3: dependencies: mkdirp "^0.5.1" -xmlbuilder@^10.0.0: - version "10.1.1" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-10.1.1.tgz#8cae6688cc9b38d850b7c8d3c0a4161dcaf475b0" - integrity sha512-OyzrcFLL/nb6fMGHbiRDuPup9ljBycsdCypwuyg5AAHvyWzGfChJpCXMG88AGTIMFhGZ9RccFN1e6lhg3hkwKg== - xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" From 7c0d464c8e3330da981bcb667003c0e1eb90bb13 Mon Sep 17 00:00:00 2001 From: Haroen Viaene Date: Wed, 23 Nov 2022 15:34:36 +0100 Subject: [PATCH 93/94] refactor(e2e): changes for inclusion in monorepo Co-Authored-By: Sarah Dayan --- .circleci/config.yml | 2 +- .eslintrc.js | 44 + CONTRIBUTING.md | 18 + jest.config.js | 1 + package.json | 12 +- packages/instantsearch.js/package.json | 2 - scripts/wdio/local.conf.js | 7 +- scripts/wdio/saucelabs.conf.js | 6 +- tests/e2e/.circleci/config.yml | 46 - tests/e2e/.editorconfig | 8 - tests/e2e/.eslintignore | 2 - tests/e2e/.eslintrc.js | 47 - tests/e2e/.prettierrc | 5 - tests/e2e/.yarnrc | 1 - tests/e2e/CHANGELOG.md | 7 + tests/e2e/CONTRIBUTING.md | 61 +- tests/e2e/LICENSE | 21 - tests/e2e/README.md | 25 +- tests/e2e/all-flavors.spec.ts | 25 +- tests/e2e/helpers/dragAndDropByOffset.ts | 9 +- tests/e2e/helpers/getTextFromSelector.ts | 4 +- tests/e2e/helpers/waitForElement.ts | 2 +- tests/e2e/package.json | 70 +- tests/e2e/specs/brand-and-query.spec.ts | 4 +- tests/e2e/specs/category.spec.ts | 4 +- .../specs/initial-state-from-route.spec.ts | 6 +- tests/e2e/specs/pagination.spec.ts | 4 +- tests/e2e/specs/price-range.spec.ts | 14 +- tests/e2e/wdio.base.conf.js | 2 +- tests/e2e/wdio.saucelabs.conf.js | 3 + tests/e2e/yarn.lock | 3628 ----------------- tsconfig.json | 1 + tsconfig.v3.json | 3 +- yarn.lock | 27 +- 34 files changed, 164 insertions(+), 3957 deletions(-) delete mode 100644 tests/e2e/.circleci/config.yml delete mode 100644 tests/e2e/.editorconfig delete mode 100644 tests/e2e/.eslintignore delete mode 100644 tests/e2e/.eslintrc.js delete mode 100644 tests/e2e/.prettierrc delete mode 100644 tests/e2e/.yarnrc delete mode 100644 tests/e2e/LICENSE delete mode 100644 tests/e2e/yarn.lock diff --git a/.circleci/config.yml b/.circleci/config.yml index bc7a19492b..e27bfcf35e 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -175,7 +175,7 @@ jobs: - *restore_yarn_cache - *run_yarn_install - run: - name: End-2-End tests + name: End-to-end tests command: yarn run test:e2e:saucelabs - store_test_results: path: junit/wdio/ diff --git a/.eslintrc.js b/.eslintrc.js index 3d4b825f80..9fd033e610 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -115,6 +115,50 @@ module.exports = { ], }, }, + { + files: ['tests/e2e/**/*'], + parserOptions: { + project: 'tests/e2e/tsconfig.json', + }, + rules: { + 'valid-jsdoc': 'off', + '@typescript-eslint/no-unused-vars': [ + 'error', + { + argsIgnorePattern: '^_', + varsIgnorePattern: 'WebdriverIOAsync', + ignoreRestSiblings: true, + }, + ], + '@typescript-eslint/no-floating-promises': 'error', + }, + }, + { + files: [ + 'tests/e2e/specs/**/*.spec.ts', + 'tests/e2e/all-flavors.spec.ts', + 'tests/e2e/helpers/**/*.ts', + 'tests/e2e/wdio.*.conf.js', + ], + extends: ['plugin:wdio/recommended'], + plugins: ['wdio'], + env: { + jasmine: true, + }, + rules: { + // we are exporting test "factories", so we need to allow export + 'jest/no-export': 0, + // we use jasmine + 'jest/expect-expect': 0, + '@typescript-eslint/no-namespace': 0, + }, + }, + { + files: ['tests/e2e/**/*.js'], + rules: { + 'import/no-commonjs': 0, + }, + }, ], settings: { react: { diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c1d65f0fd3..eae79e7cd4 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -171,6 +171,24 @@ To run the test continuously based on what you changed (useful when developing o yarn test --watch ``` +### End-to-end tests + +End-to-end tests are defined by the [tests/e2e](./tests/e2e/README.md) project. + +To run them locally: + +```sh +yarn test:e2e:local +``` + +To run them on saucelabs, with credentials as `SAUCE_USERNAME` and `SAUCE_ACCESS_KEY` environment variable: + +```sh +yarn test:e2e:saucelabs +``` + +More info, including how to write the tests, can be found in its [CONTRIBUTING](./tests/e2e/CONTRIBUTING.md) and [README](./tests/e2e/README.md) files. + ### Type checks Type checks ensure code is correctly typed both for code quality and TypeScript compatibility. diff --git a/jest.config.js b/jest.config.js index 7504f1f845..cd0bf4b0d4 100644 --- a/jest.config.js +++ b/jest.config.js @@ -10,6 +10,7 @@ const config = { testPathIgnorePatterns: [ '/packages/*/node_modules/', '/packages/*/dist*', + '/tests/e2e/*', ], watchPathIgnorePatterns: [ '/packages/*/cjs', diff --git a/package.json b/package.json index c12645ecfe..4bfb8a3aec 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "website:examples": "lerna run website:examples", "lint": "eslint --ext .js,.ts,.tsx .", "lint:fix": "eslint --ext .js,.ts,.tsx --fix .", - "type-check": "tsc", + "type-check": "tsc && lerna run type-check", "type-check:v3": "tsc --project tsconfig.v3.json", "test": "jest", "test:size": "bundlesize", @@ -46,14 +46,6 @@ "@types/storybook__addon-actions": "3.4.2", "@typescript-eslint/eslint-plugin": "5.38.1", "@typescript-eslint/parser": "4.15.1", - "@wdio/cli": "5.16.9", - "@wdio/jasmine-framework": "5.16.5", - "@wdio/junit-reporter": "5.16.11", - "@wdio/local-runner": "5.16.9", - "@wdio/sauce-service": "5.16.5", - "@wdio/selenium-standalone-service": "5.16.5", - "@wdio/spec-reporter": "5.16.5", - "@wdio/static-server-service": "5.16.5", "algoliasearch": "4.11.0", "algoliasearch-v3": "npm:algoliasearch@3.35.0", "babel-eslint": "10.0.3", @@ -76,7 +68,7 @@ "eslint-plugin-prettier": "3.4.0", "eslint-plugin-react": "7.18.0", "eslint-plugin-react-hooks": "2.3.0", - "instantsearch-e2e-tests": "algolia/instantsearch-e2e-tests#feat/monorepo", + "eslint-plugin-wdio": "5.11.0", "jest": "27.1.0", "jest-diff": "27.1.0", "jest-environment-jsdom": "27.1.0", diff --git a/packages/instantsearch.js/package.json b/packages/instantsearch.js/package.json index f633a661ee..66bf2bd6ee 100644 --- a/packages/instantsearch.js/package.json +++ b/packages/instantsearch.js/package.json @@ -50,8 +50,6 @@ "build:types": "scripts/typescript/extract.js", "storybook": "start-storybook --quiet --port 6006 --ci --static-dir .storybook/static", "storybook:build": "build-storybook --quiet --output-dir ../../website/stories/js --static-dir .storybook/static", - "type-check": "tsc", - "type-check:v3": "tsc --project tsconfig.v3.json", "test": "jest", "test:exports": "node test/module/is-es-module.mjs", "version": "./scripts/version/update-version.js" diff --git a/scripts/wdio/local.conf.js b/scripts/wdio/local.conf.js index 6b8d262c9c..048b79a85e 100644 --- a/scripts/wdio/local.conf.js +++ b/scripts/wdio/local.conf.js @@ -1,5 +1,6 @@ /* eslint-disable import/no-commonjs */ -const { local } = require('instantsearch-e2e-tests'); - -exports.config = local; +exports.config = { + ...require('@instantsearch/e2e-tests').local, + // you can override the default options if needed here +}; diff --git a/scripts/wdio/saucelabs.conf.js b/scripts/wdio/saucelabs.conf.js index 52f6f759da..f1dbe12ef6 100644 --- a/scripts/wdio/saucelabs.conf.js +++ b/scripts/wdio/saucelabs.conf.js @@ -1,5 +1,5 @@ /* eslint-disable import/no-commonjs */ -const { saucelabs } = require('instantsearch-e2e-tests'); - -exports.config = saucelabs; +exports.config = { + ...require('@instantsearch/e2e-tests').saucelabs, +}; diff --git a/tests/e2e/.circleci/config.yml b/tests/e2e/.circleci/config.yml deleted file mode 100644 index d41c71115c..0000000000 --- a/tests/e2e/.circleci/config.yml +++ /dev/null @@ -1,46 +0,0 @@ -aliases: - - &install_yarn_version - name: Install specific Yarn version - command: | - curl -o- -L https://yarnpkg.com/install.sh | bash -s -- --version 1.13.0 - echo 'export PATH="$HOME/.yarn/bin:$HOME/.config/yarn/global/node_modules/.bin:$PATH"' >> $BASH_ENV - - - &restore_yarn_cache - name: Restore Yarn cache - keys: - - yarn-{{ .Branch }}-packages-{{ checksum "yarn.lock" }} - - - &save_yarn_cache - name: Save Yarn cache - key: yarn-{{ .Branch }}-packages-{{ checksum "yarn.lock" }} - paths: - - ~/.cache/yarn - - - &run_yarn_install - name: Install dependencies - command: yarn install - -defaults: &defaults - working_directory: ~/instantsearch-e2e-tests - docker: - - image: cimg/node:10.24 - -version: 2 -jobs: - test: - <<: *defaults - steps: - - checkout - - run: *install_yarn_version - - restore_cache: *restore_yarn_cache - - run: *run_yarn_install - - save_cache: *save_yarn_cache - - run: - name: Lint - command: yarn lint - -workflows: - version: 2 - ci: - jobs: - - test diff --git a/tests/e2e/.editorconfig b/tests/e2e/.editorconfig deleted file mode 100644 index dd7255e8a4..0000000000 --- a/tests/e2e/.editorconfig +++ /dev/null @@ -1,8 +0,0 @@ -root = true - -[*] -indent_style = space -indent_size = 2 -end_of_line = lf -insert_final_newline = true -trim_trailing_whitespace = true diff --git a/tests/e2e/.eslintignore b/tests/e2e/.eslintignore deleted file mode 100644 index 7b132aa64e..0000000000 --- a/tests/e2e/.eslintignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules/ -tests/ diff --git a/tests/e2e/.eslintrc.js b/tests/e2e/.eslintrc.js deleted file mode 100644 index 0cb28bd1fa..0000000000 --- a/tests/e2e/.eslintrc.js +++ /dev/null @@ -1,47 +0,0 @@ -module.exports = { - extends: ['algolia', 'algolia/typescript'], - rules: { - 'no-param-reassign': 0, - 'import/no-extraneous-dependencies': 0, - 'valid-jsdoc': 0, - '@typescript-eslint/no-unused-vars': [ - 'error', - { argsIgnorePattern: '^_', ignoreRestSiblings: true }, - ], - '@typescript-eslint/no-floating-promises': 'error', - }, - parserOptions: { - project: './tsconfig.json', - }, - overrides: [ - { - files: ['specs/**/*.spec.ts', 'all-flavors.spec.ts'], - extends: ['plugin:wdio/recommended'], - plugins: ['wdio'], - env: { - jasmine: true, - }, - }, - { - files: ['helpers/**/*.ts', 'wdio.*.conf.js'], - extends: ['plugin:wdio/recommended'], - plugins: ['wdio'], - rules: { - '@typescript-eslint/no-namespace': 0, - }, - }, - { - files: ['**/*.js'], - rules: { - 'import/no-commonjs': 0, - }, - }, - ], - settings: { - 'import/resolver': { - node: { - extensions: ['.js', '.ts'], - }, - }, - }, -}; diff --git a/tests/e2e/.prettierrc b/tests/e2e/.prettierrc deleted file mode 100644 index 833f03b621..0000000000 --- a/tests/e2e/.prettierrc +++ /dev/null @@ -1,5 +0,0 @@ -{ - "singleQuote": true, - "proseWrap": "never", - "trailingComma": "es5" -} diff --git a/tests/e2e/.yarnrc b/tests/e2e/.yarnrc deleted file mode 100644 index e5332162b1..0000000000 --- a/tests/e2e/.yarnrc +++ /dev/null @@ -1 +0,0 @@ -version-git-message "chore(release): %s" diff --git a/tests/e2e/CHANGELOG.md b/tests/e2e/CHANGELOG.md index 3b10b7b73b..855a33e916 100644 --- a/tests/e2e/CHANGELOG.md +++ b/tests/e2e/CHANGELOG.md @@ -1,3 +1,10 @@ +## [3.0.0](https://github.com/algolia/instantsearch-e2e-tests/compare/v2.0.1...v2.0.2) (2022-11-23) + + +### Features + +* **tests:** migrate to the InstantSearch monorepo ([#38](https://github.com/algolia/instantsearch-e2e-tests/issues/38)) + ## [2.0.2](https://github.com/algolia/instantsearch-e2e-tests/compare/v2.0.1...v2.0.2) (2022-02-03) diff --git a/tests/e2e/CONTRIBUTING.md b/tests/e2e/CONTRIBUTING.md index 8cfcf11215..1951814db2 100644 --- a/tests/e2e/CONTRIBUTING.md +++ b/tests/e2e/CONTRIBUTING.md @@ -1,39 +1,12 @@ # Contributing -This repository contains the end-to-end (e2e) test suite for [InstantSearch](https://github.com/algolia/instantsearch.js). This test suite is meant to be shared across all InstantSearch flavors, this is why it is stored in a separate repository. +This repository contains the end-to-end (e2e) test suite for InstantSearch. This test suite is meant to be shared across all InstantSearch flavors, this is why it is stored in the monorepo. ## Development -### Requirements - -To run this project, you will need: - -- Node.js >= v8.10.0, use nvm - [install instructions](https://github.com/creationix/nvm#install-script) -- Yarn >= v1.16.0 - [install instructions](https://yarnpkg.com/en/docs/install#alternatives-stable) - ### Installation -The easiest way to work on the tests is to link them into an InstantSearch project using [`yarn link`](https://yarnpkg.com/en/docs/cli/link). - -First, clone the `instantsearch-e2e-tests` repository, install its dependencies and link it. - -```sh -git clone git@github.com:algolia/instantsearch-e2e-tests.git -cd instantsearch-e2e-tests -yarn -yarn link -``` - -Then, clone the [`instantsearch.js`](https://github.com/algolia/instantsearch.js/) repository (or any other flavor), install its dependencies and link `instantsearch-e2e-tests`. - -```sh -git clone git@github.com:algolia/instantsearch.js -cd instantsearch.js -yarn -yarn link instantsearch-e2e-tests -``` - -You can now run your local end-2-end test suite using the `test:e2e:*` scripts from the InstantSearch project. +Running the tests ```sh yarn test:e2e # Run the test suite on Chrome browser on your local machine @@ -60,7 +33,7 @@ One spec file represents a scenario to test a behavior from a user point of view Example of scenario: -1. Load the `examples/e-commerce/` page +1. Load the `examples/js/e-commerce/` page 2. Click on "Appliances" category 3. Click on rating "4 & up" 4. Check if the result list matches the expected one @@ -122,31 +95,3 @@ A library of helpers is available in the [`helpers`](helpers) directory and are These helpers are here to simplify the writing of tests, their readability and their maintenance. You are strongly encouraged to use them in your tests and to contribute to the helpers library. You can find more information about helpers in [WebdriverIO documentation](https://webdriver.io/docs/customcommands.html#adding-custom-commands). - -## Release - -This project uses [AngularJS's commit message convention](https://github.com/angular/angular.js/blob/master/DEVELOPERS.md#-git-commit-guidelines) with [Commitizen](http://commitizen.github.io/cz-cli/). - -### Commit current changes - -```sh -yarn commit -``` - -### Release a new version - -```sh -yarn version -``` - -### Updating dependents projects - -This package is not published on the npm registry. To update the test suite in an InstantSearch project, run the following command in it: - -```sh -yarn add -D "algolia/instantsearch-e2e-tests#XXX" -``` - -(`XXX` being the tag for the version you want to install) - -If [Renovate](https://renovatebot.com/) is enabled on your project then it should update it automatically like any other dependency. diff --git a/tests/e2e/LICENSE b/tests/e2e/LICENSE deleted file mode 100644 index 1dedea5321..0000000000 --- a/tests/e2e/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2019-present Algolia, Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/tests/e2e/README.md b/tests/e2e/README.md index 3dee3f1fd3..793992df93 100644 --- a/tests/e2e/README.md +++ b/tests/e2e/README.md @@ -1,26 +1,17 @@ -# End-2-End test suite for InstantSearch +# End-to-end test suite for InstantSearch -This repository contains the end-2-end test suite for [InstantSearch](https://github.com/algolia/instantsearch.js). +This package contains the end-to-end test suite for all InstantSearch flavors. ## Installation -Install `instantsearch-e2e-tests` and its peerDependencies in your InstantSearch project: - -```bash -yarn add --dev \ -algolia/instantsearch-e2e-tests \ -@wdio/cli @wdio/jasmine-framework @wdio/spec-reporter \ -@wdio/junit-reporter @wdio/static-server-service \ -@wdio/local-runner @wdio/selenium-standalone-service \ -@wdio/sauce-service -``` +The workspace automatically links the dependencies when you run `yarn` at the root of the monorepo. ## Running the test suite -In addition to the test suite this package contains two [WebdriverIO](https://webdriver.io) configurations: +In addition to the test suite, this package contains two [WebdriverIO](https://webdriver.io) configurations: -- `local`: Run the test suite on [Chrome browser](https://google.com/chrome) on your local machine. -- `saucelabs`: Run the test suite on multiple browsers on the [Sauce Labs service](https://saucelabs.com). +- `local`: run the test suite on [Chrome browser](https://google.com/chrome) on your local machine. +- `saucelabs`: run the test suite on multiple browsers on the [Sauce Labs service](https://saucelabs.com). All configurations will run a static web server on your machine on port `5000` to serve the content of the `website` directory in your project, containing the InstantSearch demos to run our tests against. @@ -96,7 +87,3 @@ CircleCI can [read JUnit XML test metadata files](https://circleci.com/docs/2.0/ - store_test_results: path: junit/wdio ``` - -# License - -instantsearch-e2e-tests is licensed under the [MIT License](http://www.opensource.org/licenses/mit-license.php). diff --git a/tests/e2e/all-flavors.spec.ts b/tests/e2e/all-flavors.spec.ts index a00d436001..fc3ffdc747 100644 --- a/tests/e2e/all-flavors.spec.ts +++ b/tests/e2e/all-flavors.spec.ts @@ -1,16 +1,17 @@ -import { brandAndQuery } from './specs/brand-and-query.spec'; -import { category } from './specs/category.spec'; -import { initialStateFromRoute } from './specs/initial-state-from-route.spec'; -import { pagination } from './specs/pagination.spec'; -import { priceRange } from './specs/price-range.spec'; +import { createBrandAndQueryTestSuite } from './specs/brand-and-query.spec'; +import { createCategoryTestSuite } from './specs/category.spec'; +import { createInitialStateFromRouteTestSuite } from './specs/initial-state-from-route.spec'; +import { createPaginationTestSuite } from './specs/pagination.spec'; +import { createPriceRangeTestSuite } from './specs/price-range.spec'; + import { flavors } from './flavors'; -flavors.forEach(flavor => { - describe(flavor, () => { - brandAndQuery(flavor); - category(flavor); - initialStateFromRoute(flavor); - pagination(flavor); - priceRange(flavor); +flavors.forEach((flavor) => { + describe(`${flavor}`, () => { + createBrandAndQueryTestSuite(flavor); + createCategoryTestSuite(flavor); + createInitialStateFromRouteTestSuite(flavor); + createPaginationTestSuite(flavor); + createPriceRangeTestSuite(flavor); }); }); diff --git a/tests/e2e/helpers/dragAndDropByOffset.ts b/tests/e2e/helpers/dragAndDropByOffset.ts index d3ab68439a..69c821c327 100644 --- a/tests/e2e/helpers/dragAndDropByOffset.ts +++ b/tests/e2e/helpers/dragAndDropByOffset.ts @@ -25,7 +25,12 @@ browser.addCommand( // so we create a dummy element in the document to use as a target /* eslint-disable prefer-template */ const targetId = await browser.execute( - function(browserSourceX, browserSourceY, browserOffsetX, browserOffsetY) { + function ( + browserSourceX, + browserSourceY, + browserOffsetX, + browserOffsetY + ) { const target = document.createElement('div'); target.id = 'tmp-' + Math.floor(Math.random() * 1e9); target.style.position = 'absolute'; @@ -46,7 +51,7 @@ browser.addCommand( await source.dragAndDrop(target); // Cleaning - await browser.execute(function(browserTargetId) { + await browser.execute(function (browserTargetId) { const el = document.getElementById(browserTargetId); if (el) { document.body.removeChild(el); diff --git a/tests/e2e/helpers/getTextFromSelector.ts b/tests/e2e/helpers/getTextFromSelector.ts index 20bd01fed8..fa795ff630 100644 --- a/tests/e2e/helpers/getTextFromSelector.ts +++ b/tests/e2e/helpers/getTextFromSelector.ts @@ -5,10 +5,10 @@ declare namespace WebdriverIOAsync { } browser.addCommand('getTextFromSelector', (selector: string) => { - return browser.execute(function(browserSelector) { + return browser.execute(function (browserSelector) { const elements = document.querySelectorAll(browserSelector); - return Array.prototype.slice.call(elements).map(function(el) { + return Array.prototype.slice.call(elements).map(function (el) { return el.innerText; }); }, selector); diff --git a/tests/e2e/helpers/waitForElement.ts b/tests/e2e/helpers/waitForElement.ts index ce5d1b23b3..47ce53d1db 100644 --- a/tests/e2e/helpers/waitForElement.ts +++ b/tests/e2e/helpers/waitForElement.ts @@ -1,6 +1,6 @@ declare namespace WebdriverIOAsync { interface Browser { - waitForElement(selector: string | Function): Promise; + waitForElement(selector: string): Promise; } } diff --git a/tests/e2e/package.json b/tests/e2e/package.json index d36ec25887..2b7239a658 100644 --- a/tests/e2e/package.json +++ b/tests/e2e/package.json @@ -1,9 +1,8 @@ { - "name": "instantsearch-e2e-tests", - "version": "2.0.2", - "description": "End-2-End test suite for InstantSearch", - "homepage": "https://github.com/algolia/instantsearch-e2e-tests", - "main": "./index.js", + "name": "@instantsearch/e2e-tests", + "private": true, + "version": "3.0.0", + "description": "End-to-end test suite for InstantSearch", "keywords": [ "algolia", "instantsearch", @@ -11,59 +10,22 @@ "webdriverio" ], "author": "Algolia ", - "license": "MIT", - "files": [ - "index.js", - "wdio.base.conf.js", - "wdio.local.conf.js", - "wdio.saucelabs.conf.js", - "helpers", - "specs" - ], - "repository": "algolia/instantsearch-e2e-tests", "sideEffects": false, "scripts": { - "commit": "git-cz", - "version": "conventional-changelog --preset angular --infile CHANGELOG.md --same-file && git add CHANGELOG.md", - "lint": "eslint --ext .js,.ts,.tsx .", - "lint:fix": "eslint --ext .js,.ts,.tsx --fix .", - "type-check": "tsc", - "type-check:watch": "yarn type-check --watch" + "type-check": "tsc" }, "dependencies": { - "dotenv": "^8.0.0", - "ts-node": "^8.3.0", - "typescript": "^3.5.3" - }, - "devDependencies": { "@types/jasmine": "3.3.16", - "@types/node": "12.7.0", - "@typescript-eslint/eslint-plugin": "1.13.0", - "@typescript-eslint/parser": "1.13.0", - "conventional-changelog-cli": "2.0.23", - "cz-conventional-changelog": "3.0.2", - "eslint": "6.1.0", - "eslint-config-algolia": "13.4.0", - "eslint-config-prettier": "6.0.0", - "eslint-plugin-import": "2.18.2", - "eslint-plugin-prettier": "3.1.0", - "eslint-plugin-wdio": "5.11.0", - "prettier": "1.18.2", - "webdriverio": "5.11.13" - }, - "peerDependencies": { - "@wdio/cli": "^5.11.13", - "@wdio/jasmine-framework": "^5.11.0", - "@wdio/junit-reporter": "^5.11.7", - "@wdio/local-runner": "^5.11.13", - "@wdio/sauce-service": "^5.11.1", - "@wdio/selenium-standalone-service": "^5.11.2", - "@wdio/spec-reporter": "^5.11.7", - "@wdio/static-server-service": "^5.11.0" - }, - "config": { - "commitizen": { - "path": "./node_modules/cz-conventional-changelog" - } + "@wdio/cli": "5.16.9", + "@wdio/jasmine-framework": "5.16.5", + "@wdio/junit-reporter": "5.16.11", + "@wdio/local-runner": "5.16.9", + "@wdio/sauce-service": "5.16.5", + "@wdio/selenium-standalone-service": "5.16.5", + "@wdio/spec-reporter": "5.16.5", + "@wdio/static-server-service": "5.16.5", + "dotenv": "8.2.0", + "ts-node": "8.4.1", + "webdriverio": "5.16.9" } } diff --git a/tests/e2e/specs/brand-and-query.spec.ts b/tests/e2e/specs/brand-and-query.spec.ts index 578758264a..6642bf9355 100644 --- a/tests/e2e/specs/brand-and-query.spec.ts +++ b/tests/e2e/specs/brand-and-query.spec.ts @@ -1,7 +1,7 @@ -export function brandAndQuery(flavor: string) { +export function createBrandAndQueryTestSuite(flavor: string) { const root = `examples/${flavor}/e-commerce/`; - describe('Search on specific brand and query filtering', () => { + describe('search on specific brand and query filtering', () => { it('navigates to the e-commerce demo', async () => { await browser.url(root); }); diff --git a/tests/e2e/specs/category.spec.ts b/tests/e2e/specs/category.spec.ts index 057ef3a5db..4cd88fae64 100644 --- a/tests/e2e/specs/category.spec.ts +++ b/tests/e2e/specs/category.spec.ts @@ -1,7 +1,7 @@ -export function category(flavor: string) { +export function createCategoryTestSuite(flavor: string) { const root = `examples/${flavor}/e-commerce/`; - describe('Search on specific category', () => { + describe('search on specific category', () => { it('navigates to the e-commerce demo', async () => { await browser.url(root); }); diff --git a/tests/e2e/specs/initial-state-from-route.spec.ts b/tests/e2e/specs/initial-state-from-route.spec.ts index 5a457eb779..9bec5853aa 100644 --- a/tests/e2e/specs/initial-state-from-route.spec.ts +++ b/tests/e2e/specs/initial-state-from-route.spec.ts @@ -1,9 +1,9 @@ import { URL, URLSearchParams } from 'url'; -export function initialStateFromRoute(flavor: string) { +export function createInitialStateFromRouteTestSuite(flavor: string) { const root = `examples/${flavor}/e-commerce/`; - describe('State and route', () => { + describe('state and route', () => { describe('read', () => { it('navigates to the e-commerce demo with refinements set in route', async () => { const params = new URLSearchParams({ @@ -12,7 +12,7 @@ export function initialStateFromRoute(flavor: string) { brands: 'KitchenAid', rating: '4', price: '50:350', - free_shipping: 'true', // eslint-disable-line @typescript-eslint/camelcase + free_shipping: 'true', sortBy: 'instant_search_price_desc', hitsPerPage: '32', }); diff --git a/tests/e2e/specs/pagination.spec.ts b/tests/e2e/specs/pagination.spec.ts index 0895c62604..8d8beb8c54 100644 --- a/tests/e2e/specs/pagination.spec.ts +++ b/tests/e2e/specs/pagination.spec.ts @@ -1,7 +1,7 @@ -export function pagination(flavor: string) { +export function createPaginationTestSuite(flavor: string) { const root = `examples/${flavor}/e-commerce/`; - describe('Page navigation', () => { + describe('page navigation', () => { it('navigates to the e-commerce demo', async () => { await browser.url(root); }); diff --git a/tests/e2e/specs/price-range.spec.ts b/tests/e2e/specs/price-range.spec.ts index 3fd7723016..0c4dc45ae8 100644 --- a/tests/e2e/specs/price-range.spec.ts +++ b/tests/e2e/specs/price-range.spec.ts @@ -1,7 +1,7 @@ -export function priceRange(flavor: string) { +export function createPriceRangeTestSuite(flavor: string) { const root = `examples/${flavor}/e-commerce/`; - describe('Search on specific price range', () => { + describe('search on specific price range', () => { let lowerBound: number; let upperBound: number; @@ -20,8 +20,9 @@ export function priceRange(flavor: string) { '.hit-info-container strong' ); return ( - hitsText.filter(text => Number(text.replace(',', '')) < lowerBound) - .length === 0 + hitsText.filter( + (text) => Number(text.replace(',', '')) < lowerBound + ).length === 0 ); }, undefined, @@ -40,8 +41,9 @@ export function priceRange(flavor: string) { '.hit-info-container strong' ); return ( - hitsText.filter(text => Number(text.replace(',', '')) > upperBound) - .length === 0 + hitsText.filter( + (text) => Number(text.replace(',', '')) > upperBound + ).length === 0 ); }, undefined, diff --git a/tests/e2e/wdio.base.conf.js b/tests/e2e/wdio.base.conf.js index 1763fb1cea..882ffe756d 100644 --- a/tests/e2e/wdio.base.conf.js +++ b/tests/e2e/wdio.base.conf.js @@ -13,7 +13,7 @@ module.exports = { mount: '/', path: './website', }, - ...flavors.map(flavor => ({ + ...flavors.map((flavor) => ({ mount: `/examples/${flavor}/e-commerce/*`, path: `./website/examples/${flavor}/e-commerce`, })), diff --git a/tests/e2e/wdio.saucelabs.conf.js b/tests/e2e/wdio.saucelabs.conf.js index 283a36ded7..903af8d390 100644 --- a/tests/e2e/wdio.saucelabs.conf.js +++ b/tests/e2e/wdio.saucelabs.conf.js @@ -15,6 +15,9 @@ module.exports = { 'junit', { outputDir: `${process.cwd()}/junit/wdio`, + /** + * @param {{ cid: string; capabilities: { browserName: string; browserVersion: string; }; }} opts + */ outputFileFormat({ cid, capabilities: { browserName, browserVersion }, diff --git a/tests/e2e/yarn.lock b/tests/e2e/yarn.lock deleted file mode 100644 index 9aad397ea9..0000000000 --- a/tests/e2e/yarn.lock +++ /dev/null @@ -1,3628 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@babel/code-frame@^7.0.0": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d" - integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw== - dependencies: - "@babel/highlight" "^7.0.0" - -"@babel/highlight@^7.0.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540" - integrity sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ== - dependencies: - chalk "^2.0.0" - esutils "^2.0.2" - js-tokens "^4.0.0" - -"@commitlint/execute-rule@^8.1.0": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@commitlint/execute-rule/-/execute-rule-8.1.0.tgz#e8386bd0836b3dcdd41ebb9d5904bbeb447e4715" - integrity sha512-+vpH3RFuO6ypuCqhP2rSqTjFTQ7ClzXtUvXphpROv9v9+7zH4L+Ex+wZLVkL8Xj2cxefSLn/5Kcqa9XyJTn3kg== - -"@commitlint/load@>6.1.1": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@commitlint/load/-/load-8.1.0.tgz#63b72ae5bb9152b8fa5b17c5428053032a9a49c8" - integrity sha512-ra02Dvmd7Gp1+uFLzTY3yGOpHjPzl5T9wYg/xrtPJNiOWXvQ0Mw7THw+ucd1M5iLUWjvdavv2N87YDRc428wHg== - dependencies: - "@commitlint/execute-rule" "^8.1.0" - "@commitlint/resolve-extends" "^8.1.0" - babel-runtime "^6.23.0" - chalk "2.4.2" - cosmiconfig "^5.2.0" - lodash "4.17.14" - resolve-from "^5.0.0" - -"@commitlint/resolve-extends@^8.1.0": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@commitlint/resolve-extends/-/resolve-extends-8.1.0.tgz#ed67f2ee484160ac8e0078bae52f172625157472" - integrity sha512-r/y+CeKW72Oa9BUctS1+I/MFCDiI3lfhwfQ65Tpfn6eZ4CuBYKzrCRi++GTHeAFKE3y8q1epJq5Rl/1GBejtBw== - dependencies: - "@types/node" "^12.0.2" - import-fresh "^3.0.0" - lodash "4.17.14" - resolve-from "^5.0.0" - resolve-global "^1.0.0" - -"@types/eslint-visitor-keys@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" - integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag== - -"@types/jasmine@3.3.16": - version "3.3.16" - resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-3.3.16.tgz#7c84074f5d7f84da9a14f816ccfb9aeb4da13f27" - integrity sha512-Nveep4zKGby8uIvG2AEUyYOwZS8uVeHK9TgbuWYSawUDDdIgfhCKz28QzamTo//Jk7Ztt9PO3f+vzlB6a4GV1Q== - -"@types/json-schema@^7.0.3": - version "7.0.3" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.3.tgz#bdfd69d61e464dcc81b25159c270d75a73c1a636" - integrity sha512-Il2DtDVRGDcqjDtE+rF8iqg1CArehSK84HZJCT7AMITlyXRBpuPhqGLDQMowraqqu1coEaimg4ZOqggt6L6L+A== - -"@types/node@12.7.0", "@types/node@^12.0.2": - version "12.7.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.7.0.tgz#545dde2a1a5c27d281cfb8308d6736e0708f5d6c" - integrity sha512-vqcj1MVm2Sla4PpMfYKh1MyDN4D2f/mPIZD7RdAGqEsbE+JxfeqQHHVbRDQ0Nqn8i73gJa1HQ1Pu3+nH4Q0Yiw== - -"@typescript-eslint/eslint-plugin@1.13.0": - version "1.13.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-1.13.0.tgz#22fed9b16ddfeb402fd7bcde56307820f6ebc49f" - integrity sha512-WQHCozMnuNADiqMtsNzp96FNox5sOVpU8Xt4meaT4em8lOG1SrOv92/mUbEHQVh90sldKSfcOc/I0FOb/14G1g== - dependencies: - "@typescript-eslint/experimental-utils" "1.13.0" - eslint-utils "^1.3.1" - functional-red-black-tree "^1.0.1" - regexpp "^2.0.1" - tsutils "^3.7.0" - -"@typescript-eslint/experimental-utils@1.13.0": - version "1.13.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-1.13.0.tgz#b08c60d780c0067de2fb44b04b432f540138301e" - integrity sha512-zmpS6SyqG4ZF64ffaJ6uah6tWWWgZ8m+c54XXgwFtUv0jNz8aJAVx8chMCvnk7yl6xwn8d+d96+tWp7fXzTuDg== - dependencies: - "@types/json-schema" "^7.0.3" - "@typescript-eslint/typescript-estree" "1.13.0" - eslint-scope "^4.0.0" - -"@typescript-eslint/parser@1.13.0": - version "1.13.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-1.13.0.tgz#61ac7811ea52791c47dc9fd4dd4a184fae9ac355" - integrity sha512-ITMBs52PCPgLb2nGPoeT4iU3HdQZHcPaZVw+7CsFagRJHUhyeTgorEwHXhFf3e7Evzi8oujKNpHc8TONth8AdQ== - dependencies: - "@types/eslint-visitor-keys" "^1.0.0" - "@typescript-eslint/experimental-utils" "1.13.0" - "@typescript-eslint/typescript-estree" "1.13.0" - eslint-visitor-keys "^1.0.0" - -"@typescript-eslint/typescript-estree@1.13.0": - version "1.13.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-1.13.0.tgz#8140f17d0f60c03619798f1d628b8434913dc32e" - integrity sha512-b5rCmd2e6DCC6tCTN9GSUAuxdYwCM/k/2wdjHGrIRGPSJotWMCe/dGpi66u42bhuh8q3QBzqM4TMA1GUUCJvdw== - dependencies: - lodash.unescape "4.0.1" - semver "5.5.0" - -"@wdio/config@^5.11.0": - version "5.11.0" - resolved "https://registry.yarnpkg.com/@wdio/config/-/config-5.11.0.tgz#ed565abac5aed9fad0d9ef331f2dbd197a7727ad" - integrity sha512-FvEQnx7eHHUG3sEJw+vN9NBnnwLvY7b1V74fhbDYoPO0+jHQwz9fjbs2/4IpUi9vz7UPYE2JGiEDQGHcaQUAqg== - dependencies: - "@wdio/logger" "^5.11.0" - deepmerge "^4.0.0" - glob "^7.1.2" - -"@wdio/logger@^5.11.0": - version "5.11.0" - resolved "https://registry.yarnpkg.com/@wdio/logger/-/logger-5.11.0.tgz#1f74698675c54ffb2114fe4ab945b9a0c1663133" - integrity sha512-oxSFt1PGX8DZcQdpURU/0eF/pisI7x84bNegk3taJ1EZ2Bti7/r7OqjMlLc+VDpr19ro1ytg2WNNTl+FD5vWXg== - dependencies: - chalk "^2.3.0" - loglevel "^1.6.0" - loglevel-plugin-prefix "^0.8.4" - strip-ansi "^5.2.0" - -"@wdio/repl@^5.11.0": - version "5.11.0" - resolved "https://registry.yarnpkg.com/@wdio/repl/-/repl-5.11.0.tgz#6f36d4c100c8d2b45c5c8d7a5918b5e5d7dc6a72" - integrity sha512-X7lyvRicOV0nIhRqaDl0Cs2BAd5Ny8zD5/9f9xEpI4T0e/UzixtyMMlAjeJiHLgq9re21xPSqMiBM4Uv8hrxvg== - dependencies: - "@wdio/config" "^5.11.0" - -JSONStream@^1.0.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" - integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== - dependencies: - jsonparse "^1.2.0" - through ">=2.2.7 <3" - -acorn-jsx@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.1.tgz#32a064fd925429216a09b141102bfdd185fae40e" - integrity sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg== - -acorn@^6.0.7: - version "6.2.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.2.1.tgz#3ed8422d6dec09e6121cc7a843ca86a330a86b51" - integrity sha512-JD0xT5FCRDNyjDda3Lrg/IxFscp9q4tiYtxE1/nOzlKCk7hIRuYjhq1kCNkbPjMRMZuFq20HNQn1I9k8Oj0E+Q== - -add-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa" - integrity sha1-anmQQ3ynNtXhKI25K9MmbV9csqo= - -ajv@^6.10.0, ajv@^6.10.2, ajv@^6.5.5: - version "6.10.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52" - integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw== - dependencies: - fast-deep-equal "^2.0.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ansi-escapes@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" - integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== - -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= - -ansi-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" - integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== - -ansi-styles@^3.2.0, ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -archiver-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/archiver-utils/-/archiver-utils-2.1.0.tgz#e8a460e94b693c3e3da182a098ca6285ba9249e2" - integrity sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw== - dependencies: - glob "^7.1.4" - graceful-fs "^4.2.0" - lazystream "^1.0.0" - lodash.defaults "^4.2.0" - lodash.difference "^4.5.0" - lodash.flatten "^4.4.0" - lodash.isplainobject "^4.0.6" - lodash.union "^4.6.0" - normalize-path "^3.0.0" - readable-stream "^2.0.0" - -archiver@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/archiver/-/archiver-3.1.1.tgz#9db7819d4daf60aec10fe86b16cb9258ced66ea0" - integrity sha512-5Hxxcig7gw5Jod/8Gq0OneVgLYET+oNHcxgWItq4TbhOzRLKNAFUb9edAftiMKXvXfCB0vbGrJdZDNq0dWMsxg== - dependencies: - archiver-utils "^2.1.0" - async "^2.6.3" - buffer-crc32 "^0.2.1" - glob "^7.1.4" - readable-stream "^3.4.0" - tar-stream "^2.1.0" - zip-stream "^2.1.2" - -arg@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.1.tgz#485f8e7c390ce4c5f78257dbea80d4be11feda4c" - integrity sha512-SlmP3fEA88MBv0PypnXZ8ZfJhwmDeIE3SP71j37AiXQBXYosPV0x6uISAaHYSlSVhmHOVkomen0tbGk6Anlebw== - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= - -arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== - -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= - -array-find-index@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" - integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= - -array-ify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" - integrity sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4= - -array-includes@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d" - integrity sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0= - dependencies: - define-properties "^1.1.2" - es-abstract "^1.7.0" - -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= - -arrify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= - -asn1@~0.2.3: - version "0.2.4" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" - integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== - dependencies: - safer-buffer "~2.1.0" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= - -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= - -astral-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" - integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== - -async@^2.6.3: - version "2.6.3" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" - integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== - dependencies: - lodash "^4.17.14" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= - -atob@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= - -aws4@^1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" - integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== - -babel-runtime@^6.23.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" - integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= - dependencies: - core-js "^2.4.0" - regenerator-runtime "^0.11.0" - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= - -base64-js@^1.0.2: - version "1.3.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" - integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== - -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= - dependencies: - tweetnacl "^0.14.3" - -bl@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-3.0.0.tgz#3611ec00579fd18561754360b21e9f784500ff88" - integrity sha512-EUAyP5UHU5hxF8BPT0LKW8gjYLhq1DQIcneOX/pL/m2Alo+OYDQAJlHq+yseMP50Os2nHXOSic6Ss3vSQeyf4A== - dependencies: - readable-stream "^3.0.1" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== - dependencies: - arr-flatten "^1.1.0" - array-unique "^0.3.2" - extend-shallow "^2.0.1" - fill-range "^4.0.0" - isobject "^3.0.1" - repeat-element "^1.1.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" - -buffer-crc32@^0.2.1, buffer-crc32@^0.2.13: - version "0.2.13" - resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" - integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= - -buffer-from@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" - integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== - -buffer@^5.1.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.2.1.tgz#dd57fa0f109ac59c602479044dca7b8b3d0b71d6" - integrity sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg== - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" - -cachedir@2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.2.0.tgz#19afa4305e05d79e417566882e0c8f960f62ff0e" - integrity sha512-VvxA0xhNqIIfg0V9AmJkDg91DaJwryutH5rVEZAhcNi4iJFj9f+QxmAjgK1LT9I8OgToX27fypX6/MeCXVbBjQ== - -caller-callsite@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" - integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= - dependencies: - callsites "^2.0.0" - -caller-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" - integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= - dependencies: - caller-callsite "^2.0.0" - -callsites@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" - integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camelcase-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" - integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc= - dependencies: - camelcase "^2.0.0" - map-obj "^1.0.0" - -camelcase-keys@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-4.2.0.tgz#a2aa5fb1af688758259c32c141426d78923b9b77" - integrity sha1-oqpfsa9oh1glnDLBQUJteJI7m3c= - dependencies: - camelcase "^4.1.0" - map-obj "^2.0.0" - quick-lru "^1.0.0" - -camelcase@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" - integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= - -camelcase@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" - integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= - -chalk@2.4.2, chalk@^2.0.0, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== - -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" - -cli-cursor@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= - dependencies: - restore-cursor "^2.0.0" - -cli-width@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" - integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= - -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= - -combined-stream@^1.0.6, combined-stream@~1.0.6: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -commander@~2.20.3: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -commitizen@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/commitizen/-/commitizen-4.0.3.tgz#c19a4213257d0525b85139e2f36db7cc3b4f6dae" - integrity sha512-lxu0F/Iq4dudoFeIl5pY3h3CQJzkmQuh3ygnaOvqhAD8Wu2pYBI17ofqSuPHNsBTEOh1r1AVa9kR4Hp0FAHKcQ== - dependencies: - cachedir "2.2.0" - cz-conventional-changelog "3.0.1" - dedent "0.7.0" - detect-indent "6.0.0" - find-node-modules "2.0.0" - find-root "1.1.0" - fs-extra "8.1.0" - glob "7.1.4" - inquirer "6.5.0" - is-utf8 "^0.2.1" - lodash "4.17.15" - minimist "1.2.0" - shelljs "0.7.6" - strip-bom "4.0.0" - strip-json-comments "3.0.1" - -compare-func@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-1.3.2.tgz#99dd0ba457e1f9bc722b12c08ec33eeab31fa648" - integrity sha1-md0LpFfh+bxyKxLAjsM+6rMfpkg= - dependencies: - array-ify "^1.0.0" - dot-prop "^3.0.0" - -component-emitter@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" - integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== - -compress-commons@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-2.1.1.tgz#9410d9a534cf8435e3fbbb7c6ce48de2dc2f0610" - integrity sha512-eVw6n7CnEMFzc3duyFVrQEuY1BlHR3rYsSztyG32ibGMW722i3C6IizEGMFmfMU+A+fALvBIwxN3czffTcdA+Q== - dependencies: - buffer-crc32 "^0.2.13" - crc32-stream "^3.0.1" - normalize-path "^3.0.0" - readable-stream "^2.3.6" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -contains-path@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" - integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= - -conventional-changelog-angular@^5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.3.tgz#299fdd43df5a1f095283ac16aeedfb0a682ecab0" - integrity sha512-YD1xzH7r9yXQte/HF9JBuEDfvjxxwDGGwZU1+ndanbY0oFgA+Po1T9JDSpPLdP0pZT6MhCAsdvFKC4TJ4MTJTA== - dependencies: - compare-func "^1.3.1" - q "^1.5.1" - -conventional-changelog-atom@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/conventional-changelog-atom/-/conventional-changelog-atom-2.0.1.tgz#dc88ce650ffa9ceace805cbe70f88bfd0cb2c13a" - integrity sha512-9BniJa4gLwL20Sm7HWSNXd0gd9c5qo49gCi8nylLFpqAHhkFTj7NQfROq3f1VpffRtzfTQp4VKU5nxbe2v+eZQ== - dependencies: - q "^1.5.1" - -conventional-changelog-cli@2.0.23: - version "2.0.23" - resolved "https://registry.yarnpkg.com/conventional-changelog-cli/-/conventional-changelog-cli-2.0.23.tgz#3f6b2bb3e1e6a6f520f7fa514fe8fba2d92faab0" - integrity sha512-a/jDZHEUpSHQMAqeDrmrFhz9CKHBKhBGpJyc38BCfNjFA1RKchpq/Qqbo1BZwRLWrW/PX7IGsUicTyhniqUH9g== - dependencies: - add-stream "^1.0.0" - conventional-changelog "^3.1.10" - lodash "^4.14.14" - meow "^4.0.0" - tempfile "^1.1.1" - -conventional-changelog-codemirror@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/conventional-changelog-codemirror/-/conventional-changelog-codemirror-2.0.1.tgz#acc046bc0971460939a0cc2d390e5eafc5eb30da" - integrity sha512-23kT5IZWa+oNoUaDUzVXMYn60MCdOygTA2I+UjnOMiYVhZgmVwNd6ri/yDlmQGXHqbKhNR5NoXdBzSOSGxsgIQ== - dependencies: - q "^1.5.1" - -conventional-changelog-conventionalcommits@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.1.0.tgz#eb7d47a9c5f1a6f9846a649482294e4ac50d7683" - integrity sha512-J3xolGrH8PTxpCqueHOuZtv3Cp73SQOWiBQzlsaugZAZ+hZgcJBonmC+1bQbfGs2neC2S18p2L1Gx+nTEglJTQ== - dependencies: - compare-func "^1.3.1" - q "^1.5.1" - -conventional-changelog-core@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-4.0.0.tgz#a9e83889e43a21b05fa098a507cad475905a0439" - integrity sha512-+bZMeBUdjKxfyX2w6EST9U7zb85wxrGS3IV4H7SqPya44osNQbm3P+vyqfLs6s57FkoEamC93ioDEiguVLWmSQ== - dependencies: - conventional-changelog-writer "^4.0.7" - conventional-commits-parser "^3.0.3" - dateformat "^3.0.0" - get-pkg-repo "^1.0.0" - git-raw-commits "2.0.0" - git-remote-origin-url "^2.0.0" - git-semver-tags "^3.0.0" - lodash "^4.2.1" - normalize-package-data "^2.3.5" - q "^1.5.1" - read-pkg "^3.0.0" - read-pkg-up "^3.0.0" - through2 "^3.0.0" - -conventional-changelog-ember@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/conventional-changelog-ember/-/conventional-changelog-ember-2.0.2.tgz#284ffdea8c83ea8c210b65c5b4eb3e5cc0f4f51a" - integrity sha512-qtZbA3XefO/n6DDmkYywDYi6wDKNNc98MMl2F9PKSaheJ25Trpi3336W8fDlBhq0X+EJRuseceAdKLEMmuX2tg== - dependencies: - q "^1.5.1" - -conventional-changelog-eslint@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/conventional-changelog-eslint/-/conventional-changelog-eslint-3.0.2.tgz#e9eb088cda6be3e58b2de6a5aac63df0277f3cbe" - integrity sha512-Yi7tOnxjZLXlCYBHArbIAm8vZ68QUSygFS7PgumPRiEk+9NPUeucy5Wg9AAyKoBprSV3o6P7Oghh4IZSLtKCvQ== - dependencies: - q "^1.5.1" - -conventional-changelog-express@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/conventional-changelog-express/-/conventional-changelog-express-2.0.1.tgz#fea2231d99a5381b4e6badb0c1c40a41fcacb755" - integrity sha512-G6uCuCaQhLxdb4eEfAIHpcfcJ2+ao3hJkbLrw/jSK/eROeNfnxCJasaWdDAfFkxsbpzvQT4W01iSynU3OoPLIw== - dependencies: - q "^1.5.1" - -conventional-changelog-jquery@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/conventional-changelog-jquery/-/conventional-changelog-jquery-3.0.4.tgz#7eb598467b83db96742178e1e8d68598bffcd7ae" - integrity sha512-IVJGI3MseYoY6eybknnTf9WzeQIKZv7aNTm2KQsiFVJH21bfP2q7XVjfoMibdCg95GmgeFlaygMdeoDDa+ZbEQ== - dependencies: - q "^1.5.1" - -conventional-changelog-jshint@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/conventional-changelog-jshint/-/conventional-changelog-jshint-2.0.1.tgz#11c0e8283abf156a4ff78e89be6fdedf9bd72202" - integrity sha512-kRFJsCOZzPFm2tzRHULWP4tauGMvccOlXYf3zGeuSW4U0mZhk5NsjnRZ7xFWrTFPlCLV+PNmHMuXp5atdoZmEg== - dependencies: - compare-func "^1.3.1" - q "^1.5.1" - -conventional-changelog-preset-loader@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.2.0.tgz#571e2b3d7b53d65587bea9eedf6e37faa5db4fcc" - integrity sha512-zXB+5vF7D5Y3Cb/rJfSyCCvFphCVmF8mFqOdncX3BmjZwAtGAPfYrBcT225udilCKvBbHgyzgxqz2GWDB5xShQ== - -conventional-changelog-writer@^4.0.7: - version "4.0.7" - resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-4.0.7.tgz#e4b7d9cbea902394ad671f67108a71fa90c7095f" - integrity sha512-p/wzs9eYaxhFbrmX/mCJNwJuvvHR+j4Fd0SQa2xyAhYed6KBiZ780LvoqUUvsayP4R1DtC27czalGUhKV2oabw== - dependencies: - compare-func "^1.3.1" - conventional-commits-filter "^2.0.2" - dateformat "^3.0.0" - handlebars "^4.1.2" - json-stringify-safe "^5.0.1" - lodash "^4.2.1" - meow "^4.0.0" - semver "^6.0.0" - split "^1.0.0" - through2 "^3.0.0" - -conventional-changelog@^3.1.10: - version "3.1.10" - resolved "https://registry.yarnpkg.com/conventional-changelog/-/conventional-changelog-3.1.10.tgz#889a8daa4b7673a1dc1605746f9ae66546b373c1" - integrity sha512-6RDj31hL39HUkpqvPjRlOxAwJRwur8O2qu9m6R0FBNDGwCJyy4SYH9NfyshozxYSeklrauKRf3oSbyoEZVzu9Q== - dependencies: - conventional-changelog-angular "^5.0.3" - conventional-changelog-atom "^2.0.1" - conventional-changelog-codemirror "^2.0.1" - conventional-changelog-conventionalcommits "^4.1.0" - conventional-changelog-core "^4.0.0" - conventional-changelog-ember "^2.0.2" - conventional-changelog-eslint "^3.0.2" - conventional-changelog-express "^2.0.1" - conventional-changelog-jquery "^3.0.4" - conventional-changelog-jshint "^2.0.1" - conventional-changelog-preset-loader "^2.2.0" - -conventional-commit-types@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/conventional-commit-types/-/conventional-commit-types-2.1.1.tgz#352eb53f56fbc7c1a6c1ba059c2b6670c90b2a8a" - integrity sha512-0Ts+fEdmjqYDOQ1yZ+LNgdSPO335XZw9qC10M7CxtLP3nIMGmeMhmkM8Taffa4+MXN13bRPlp0CtH+QfOzKTzw== - -conventional-commits-filter@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-2.0.2.tgz#f122f89fbcd5bb81e2af2fcac0254d062d1039c1" - integrity sha512-WpGKsMeXfs21m1zIw4s9H5sys2+9JccTzpN6toXtxhpw2VNF2JUXwIakthKBy+LN4DvJm+TzWhxOMWOs1OFCFQ== - dependencies: - lodash.ismatch "^4.4.0" - modify-values "^1.0.0" - -conventional-commits-parser@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.0.3.tgz#c3f972fd4e056aa8b9b4f5f3d0e540da18bf396d" - integrity sha512-KaA/2EeUkO4bKjinNfGUyqPTX/6w9JGshuQRik4r/wJz7rUw3+D3fDG6sZSEqJvKILzKXFQuFkpPLclcsAuZcg== - dependencies: - JSONStream "^1.0.4" - is-text-path "^2.0.0" - lodash "^4.2.1" - meow "^4.0.0" - split2 "^2.0.0" - through2 "^3.0.0" - trim-off-newlines "^1.0.0" - -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= - -core-js@^2.4.0: - version "2.6.9" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.9.tgz#6b4b214620c834152e179323727fc19741b084f2" - integrity sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A== - -core-util-is@1.0.2, core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= - -cosmiconfig@^5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" - integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== - dependencies: - import-fresh "^2.0.0" - is-directory "^0.3.1" - js-yaml "^3.13.1" - parse-json "^4.0.0" - -crc32-stream@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-3.0.1.tgz#cae6eeed003b0e44d739d279de5ae63b171b4e85" - integrity sha512-mctvpXlbzsvK+6z8kJwSJ5crm7yBwrQMTybJzMw1O4lLGJqjlDCXY2Zw7KheiA6XBEcBmfLx1D88mjRGVJtY9w== - dependencies: - crc "^3.4.4" - readable-stream "^3.4.0" - -crc@^3.4.4: - version "3.8.0" - resolved "https://registry.yarnpkg.com/crc/-/crc-3.8.0.tgz#ad60269c2c856f8c299e2c4cc0de4556914056c6" - integrity sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ== - dependencies: - buffer "^5.1.0" - -cross-spawn@^6.0.5: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - -css-value@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/css-value/-/css-value-0.0.1.tgz#5efd6c2eea5ea1fd6b6ac57ec0427b18452424ea" - integrity sha1-Xv1sLupeof1rasV+wEJ7GEUkJOo= - -currently-unhandled@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" - integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= - dependencies: - array-find-index "^1.0.1" - -cz-conventional-changelog@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/cz-conventional-changelog/-/cz-conventional-changelog-3.0.1.tgz#b1f207ae050355e7ada65aad5c52e9de3d0c8e5b" - integrity sha512-7KASIwB8/ClEyCRvQrCPbN7WkQnUSjSSVNyPM+gDJ0jskLi8h8N2hrdpyeCk7fIqKMRzziqVSOBTB8yyLTMHGQ== - dependencies: - chalk "^2.4.1" - conventional-commit-types "^2.0.0" - lodash.map "^4.5.1" - longest "^2.0.1" - right-pad "^1.0.1" - word-wrap "^1.0.3" - optionalDependencies: - "@commitlint/load" ">6.1.1" - -cz-conventional-changelog@3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/cz-conventional-changelog/-/cz-conventional-changelog-3.0.2.tgz#f6b9a406177ab07f9a3a087e06103a045b376260" - integrity sha512-MPxERbtQyVp0nnpCBiwzKGKmMBSswmCV3Jpef3Axqd5f3c/SOc6VFiSUlclOyZXBn3Xtf4snzt4O15hBTRb2gA== - dependencies: - chalk "^2.4.1" - commitizen "^4.0.3" - conventional-commit-types "^2.0.0" - lodash.map "^4.5.1" - longest "^2.0.1" - right-pad "^1.0.1" - word-wrap "^1.0.3" - optionalDependencies: - "@commitlint/load" ">6.1.1" - -dargs@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/dargs/-/dargs-4.1.0.tgz#03a9dbb4b5c2f139bf14ae53f0b8a2a6a86f4e17" - integrity sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc= - dependencies: - number-is-nan "^1.0.0" - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= - dependencies: - assert-plus "^1.0.0" - -dateformat@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" - integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== - -debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@^4.0.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" - integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== - dependencies: - ms "^2.1.1" - -decamelize-keys@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" - integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= - dependencies: - decamelize "^1.1.0" - map-obj "^1.0.0" - -decamelize@^1.1.0, decamelize@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= - -decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= - -dedent@0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" - integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= - -deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= - -deepmerge@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.0.0.tgz#3e3110ca29205f120d7cb064960a39c3d2087c09" - integrity sha512-YZ1rOP5+kHor4hMAH+HRQnBQHg+wvS1un1hAOuIcxcBy0hzcUf6Jg2a1w65kpoOUnurOfZbERwjI1TfZxNjcww== - -define-properties@^1.1.2, define-properties@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== - dependencies: - object-keys "^1.0.12" - -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= - dependencies: - is-descriptor "^0.1.0" - -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= - -detect-file@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" - integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= - -detect-indent@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.0.0.tgz#0abd0f549f69fc6659a254fe96786186b6f528fd" - integrity sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA== - -diff@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.1.tgz#0c667cb467ebbb5cea7f14f135cc2dba7780a8ff" - integrity sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q== - -doctrine@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" - integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= - dependencies: - esutils "^2.0.2" - isarray "^1.0.0" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -dot-prop@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-3.0.0.tgz#1b708af094a49c9a0e7dbcad790aba539dac1177" - integrity sha1-G3CK8JSknJoOfbyteQq6U52sEXc= - dependencies: - is-obj "^1.0.0" - -dotenv@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.0.0.tgz#ed310c165b4e8a97bb745b0a9d99c31bda566440" - integrity sha512-30xVGqjLjiUOArT4+M5q9sYdvuR4riM6yK9wMcas9Vbp6zZa+ocC9dp6QoftuhTPhFAiLK/0C5Ni2nou/Bk8lg== - -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== - -end-of-stream@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" - integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q== - dependencies: - once "^1.4.0" - -error-ex@^1.2.0, error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -es-abstract@^1.12.0, es-abstract@^1.7.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9" - integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg== - dependencies: - es-to-primitive "^1.2.0" - function-bind "^1.1.1" - has "^1.0.3" - is-callable "^1.1.4" - is-regex "^1.0.4" - object-keys "^1.0.12" - -es-to-primitive@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" - integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - -eslint-config-algolia@13.4.0: - version "13.4.0" - resolved "https://registry.yarnpkg.com/eslint-config-algolia/-/eslint-config-algolia-13.4.0.tgz#d622ae33ca6129a712a3880efd6e7c7511f08207" - integrity sha512-dSOlc6/XTvBTVBAfgqKrUpt3ej74yahYw04L6yvE+2q3mwS+/Pnp71L2xDaOhkyZD1VGf7FSoi6qrrJFq5zdhQ== - -eslint-config-prettier@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.0.0.tgz#f429a53bde9fc7660e6353910fd996d6284d3c25" - integrity sha512-vDrcCFE3+2ixNT5H83g28bO/uYAwibJxerXPj+E7op4qzBCsAV36QfvdAyVOoNxKAH2Os/e01T/2x++V0LPukA== - dependencies: - get-stdin "^6.0.0" - -eslint-import-resolver-node@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a" - integrity sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q== - dependencies: - debug "^2.6.9" - resolve "^1.5.0" - -eslint-module-utils@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.4.1.tgz#7b4675875bf96b0dbf1b21977456e5bb1f5e018c" - integrity sha512-H6DOj+ejw7Tesdgbfs4jeS4YMFrT8uI8xwd1gtQqXssaR0EQ26L+2O/w6wkYFy2MymON0fTwHmXBvvfLNZVZEw== - dependencies: - debug "^2.6.8" - pkg-dir "^2.0.0" - -eslint-plugin-import@2.18.2: - version "2.18.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.18.2.tgz#02f1180b90b077b33d447a17a2326ceb400aceb6" - integrity sha512-5ohpsHAiUBRNaBWAF08izwUGlbrJoJJ+W9/TBwsGoR1MnlgfwMIKrFeSjWbt6moabiXW9xNvtFz+97KHRfI4HQ== - dependencies: - array-includes "^3.0.3" - contains-path "^0.1.0" - debug "^2.6.9" - doctrine "1.5.0" - eslint-import-resolver-node "^0.3.2" - eslint-module-utils "^2.4.0" - has "^1.0.3" - minimatch "^3.0.4" - object.values "^1.1.0" - read-pkg-up "^2.0.0" - resolve "^1.11.0" - -eslint-plugin-prettier@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.0.tgz#8695188f95daa93b0dc54b249347ca3b79c4686d" - integrity sha512-XWX2yVuwVNLOUhQijAkXz+rMPPoCr7WFiAl8ig6I7Xn+pPVhDhzg4DxHpmbeb0iqjO9UronEA3Tb09ChnFVHHA== - dependencies: - prettier-linter-helpers "^1.0.0" - -eslint-plugin-wdio@5.11.0: - version "5.11.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-wdio/-/eslint-plugin-wdio-5.11.0.tgz#17440b83224c78d09a8dcdc77cbcbc11e34da463" - integrity sha512-o7VzDo4D7jipbKS+k2e0lsFD8v3Lpm3Iffc59XOLunJlgebGA6lasEhTk8VqJtmlC50P9YxxSnZaQTAMqxw+YA== - -eslint-scope@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" - integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - -eslint-scope@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9" - integrity sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw== - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - -eslint-utils@^1.3.1: - version "1.4.3" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" - integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== - dependencies: - eslint-visitor-keys "^1.1.0" - -eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2" - integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A== - -eslint@6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.1.0.tgz#06438a4a278b1d84fb107d24eaaa35471986e646" - integrity sha512-QhrbdRD7ofuV09IuE2ySWBz0FyXCq0rriLTZXZqaWSI79CVtHVRdkFuFTViiqzZhkCgfOh9USpriuGN2gIpZDQ== - dependencies: - "@babel/code-frame" "^7.0.0" - ajv "^6.10.0" - chalk "^2.1.0" - cross-spawn "^6.0.5" - debug "^4.0.1" - doctrine "^3.0.0" - eslint-scope "^5.0.0" - eslint-utils "^1.3.1" - eslint-visitor-keys "^1.0.0" - espree "^6.0.0" - esquery "^1.0.1" - esutils "^2.0.2" - file-entry-cache "^5.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^5.0.0" - globals "^11.7.0" - ignore "^4.0.6" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - inquirer "^6.4.1" - is-glob "^4.0.0" - js-yaml "^3.13.1" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.3.0" - lodash "^4.17.14" - minimatch "^3.0.4" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - optionator "^0.8.2" - progress "^2.0.0" - regexpp "^2.0.1" - semver "^6.1.2" - strip-ansi "^5.2.0" - strip-json-comments "^3.0.1" - table "^5.2.3" - text-table "^0.2.0" - v8-compile-cache "^2.0.3" - -espree@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-6.0.0.tgz#716fc1f5a245ef5b9a7fdb1d7b0d3f02322e75f6" - integrity sha512-lJvCS6YbCn3ImT3yKkPe0+tJ+mH6ljhGNjHQH9mRtiO6gjhVAOhVXW1yjnwqGwTkK3bGbye+hb00nFNmu0l/1Q== - dependencies: - acorn "^6.0.7" - acorn-jsx "^5.0.0" - eslint-visitor-keys "^1.0.0" - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esquery@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" - integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA== - dependencies: - estraverse "^4.0.0" - -esrecurse@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" - integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== - dependencies: - estraverse "^4.1.0" - -estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" - integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -expand-tilde@^2.0.0, expand-tilde@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" - integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI= - dependencies: - homedir-polyfill "^1.0.1" - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - -extend@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= - -extsprintf@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= - -fast-deep-equal@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" - integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= - -fast-diff@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" - integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== - -fast-json-stable-stringify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" - integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= - -fast-levenshtein@~2.0.4: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= - -figures@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" - integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= - dependencies: - escape-string-regexp "^1.0.5" - -file-entry-cache@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" - integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== - dependencies: - flat-cache "^2.0.1" - -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - -find-node-modules@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/find-node-modules/-/find-node-modules-2.0.0.tgz#5db1fb9e668a3d451db3d618cd167cdd59e41b69" - integrity sha512-8MWIBRgJi/WpjjfVXumjPKCtmQ10B+fjx6zmSA+770GMJirLhWIzg8l763rhjl9xaeaHbnxPNRQKq2mgMhr+aw== - dependencies: - findup-sync "^3.0.0" - merge "^1.2.1" - -find-root@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" - integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== - -find-up@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" - integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= - dependencies: - path-exists "^2.0.0" - pinkie-promise "^2.0.0" - -find-up@^2.0.0, find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= - dependencies: - locate-path "^2.0.0" - -findup-sync@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1" - integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg== - dependencies: - detect-file "^1.0.0" - is-glob "^4.0.0" - micromatch "^3.0.4" - resolve-dir "^1.0.1" - -flat-cache@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" - integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== - dependencies: - flatted "^2.0.0" - rimraf "2.6.3" - write "1.0.3" - -flatted@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08" - integrity sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg== - -for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= - -form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= - dependencies: - map-cache "^0.2.2" - -fs-constants@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" - integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== - -fs-extra@8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" - integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= - -get-pkg-repo@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz#c73b489c06d80cc5536c2c853f9e05232056972d" - integrity sha1-xztInAbYDMVTbCyFP54FIyBWly0= - dependencies: - hosted-git-info "^2.1.4" - meow "^3.3.0" - normalize-package-data "^2.3.0" - parse-github-repo-url "^1.3.0" - through2 "^2.0.0" - -get-stdin@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" - integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= - -get-stdin@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" - integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== - -get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= - dependencies: - assert-plus "^1.0.0" - -git-raw-commits@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.0.tgz#d92addf74440c14bcc5c83ecce3fb7f8a79118b5" - integrity sha512-w4jFEJFgKXMQJ0H0ikBk2S+4KP2VEjhCvLCNqbNRQC8BgGWgLKNCO7a9K9LI+TVT7Gfoloje502sEnctibffgg== - dependencies: - dargs "^4.0.1" - lodash.template "^4.0.2" - meow "^4.0.0" - split2 "^2.0.0" - through2 "^2.0.0" - -git-remote-origin-url@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz#5282659dae2107145a11126112ad3216ec5fa65f" - integrity sha1-UoJlna4hBxRaERJhEq0yFuxfpl8= - dependencies: - gitconfiglocal "^1.0.0" - pify "^2.3.0" - -git-semver-tags@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-3.0.0.tgz#fe10147824657662c82efd9341f0fa59f74ddcba" - integrity sha512-T4C/gJ9k2Bnxz+PubtcyiMtUUKrC+Nh9Q4zaECcnmVMwJgPhrNyP/Rf+YpdRqsJbCV/+kYrCH24Xg+IeAmbOPg== - dependencies: - meow "^4.0.0" - semver "^6.0.0" - -gitconfiglocal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b" - integrity sha1-QdBF84UaXqiPA/JMocYXgRRGS5s= - dependencies: - ini "^1.3.2" - -glob-parent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.0.0.tgz#1dc99f0f39b006d3e92c2c284068382f0c20e954" - integrity sha512-Z2RwiujPRGluePM6j699ktJYxmPpJKCfpGA13jz2hmFZC7gKetzrWvg5KN3+OsIFmydGyZ1AVwERCq1w/ZZwRg== - dependencies: - is-glob "^4.0.1" - -glob@7.1.4, glob@^7.0.0, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: - version "7.1.4" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" - integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -global-dirs@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" - integrity sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU= - dependencies: - ini "^1.3.4" - -global-modules@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" - integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== - dependencies: - global-prefix "^1.0.1" - is-windows "^1.0.1" - resolve-dir "^1.0.0" - -global-prefix@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" - integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4= - dependencies: - expand-tilde "^2.0.2" - homedir-polyfill "^1.0.1" - ini "^1.3.4" - is-windows "^1.0.1" - which "^1.2.14" - -globals@^11.7.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.1.tgz#1c1f0c364882c868f5bff6512146328336a11b1d" - integrity sha512-b9usnbDGnD928gJB3LrCmxoibr3VE4U2SMo5PBuBnokWyDADTqDPXg4YpwKF1trpH+UbGp7QLicO3+aWEy0+mw== - -grapheme-splitter@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" - integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== - -handlebars@^4.1.2: - version "4.5.3" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.5.3.tgz#5cf75bd8714f7605713511a56be7c349becb0482" - integrity sha512-3yPecJoJHK/4c6aZhSvxOyG4vJKDshV36VHp0iVCDVh7o9w2vwi3NSnL2MMPj3YdduqaBcu7cGbggJQM0br9xA== - dependencies: - neo-async "^2.6.0" - optimist "^0.6.1" - source-map "^0.6.1" - optionalDependencies: - uglify-js "^3.1.4" - -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= - -har-validator@~5.1.0: - version "5.1.3" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" - integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== - dependencies: - ajv "^6.5.5" - har-schema "^2.0.0" - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= - -has-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" - integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= - -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= - -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -has@^1.0.1, has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -homedir-polyfill@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" - integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== - dependencies: - parse-passwd "^1.0.0" - -hosted-git-info@^2.1.4: - version "2.8.2" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.2.tgz#a35c3f355ac1249f1093c0c2a542ace8818c171a" - integrity sha512-CyjlXII6LMsPMyUzxpTt8fzh5QwzGqPmQXgY/Jyf4Zfp27t/FvfhwoE/8laaMUcMy816CkWF20I7NeQhwwY88w== - dependencies: - lru-cache "^5.1.1" - -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -iconv-lite@^0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -ieee754@^1.1.4: - version "1.1.13" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" - integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== - -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== - -import-fresh@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" - integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= - dependencies: - caller-path "^2.0.0" - resolve-from "^3.0.0" - -import-fresh@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.1.0.tgz#6d33fa1dcef6df930fae003446f33415af905118" - integrity sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= - -indent-string@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" - integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA= - dependencies: - repeating "^2.0.0" - -indent-string@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" - integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@^2.0.3, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -ini@^1.3.2, ini@^1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" - integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== - -inquirer@6.5.0, inquirer@^6.4.1: - version "6.5.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.0.tgz#2303317efc9a4ea7ec2e2df6f86569b734accf42" - integrity sha512-scfHejeG/lVZSpvCXpsB4j/wQNPM5JC8kiElOI0OUTwmc1RTpXr4H32/HOlQHcZiYl2z2VElwuCVDRG8vFmbnA== - dependencies: - ansi-escapes "^3.2.0" - chalk "^2.4.2" - cli-cursor "^2.1.0" - cli-width "^2.0.0" - external-editor "^3.0.3" - figures "^2.0.0" - lodash "^4.17.12" - mute-stream "0.0.7" - run-async "^2.2.0" - rxjs "^6.4.0" - string-width "^2.1.0" - strip-ansi "^5.1.0" - through "^2.3.6" - -interpret@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" - integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw== - -is-accessor-descriptor@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== - dependencies: - kind-of "^6.0.0" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= - -is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - -is-callable@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" - integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== - -is-data-descriptor@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= - dependencies: - kind-of "^3.0.2" - -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== - dependencies: - kind-of "^6.0.0" - -is-date-object@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" - integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= - -is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== - dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== - dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" - -is-directory@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" - integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= - -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= - -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== - dependencies: - is-plain-object "^2.0.4" - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= - -is-finite@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" - integrity sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko= - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= - -is-glob@^4.0.0, is-glob@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== - dependencies: - is-extglob "^2.1.1" - -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= - dependencies: - kind-of "^3.0.2" - -is-obj@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= - -is-plain-obj@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= - -is-plain-object@^2.0.3, is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - -is-promise@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" - integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= - -is-regex@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" - integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE= - dependencies: - has "^1.0.1" - -is-symbol@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" - integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw== - dependencies: - has-symbols "^1.0.0" - -is-text-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-2.0.0.tgz#b2484e2b720a633feb2e85b67dc193ff72c75636" - integrity sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw== - dependencies: - text-extensions "^2.0.0" - -is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= - -is-utf8@^0.2.0, is-utf8@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" - integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= - -is-windows@^1.0.1, is-windows@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== - -isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= - -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= - -js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@^3.13.1: - version "3.13.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" - integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= - -json-parse-better-errors@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= - -json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= - -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= - optionalDependencies: - graceful-fs "^4.1.6" - -jsonparse@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" - integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= - -jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.2.3" - verror "1.10.0" - -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= - dependencies: - is-buffer "^1.1.5" - -kind-of@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== - -kind-of@^6.0.0, kind-of@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" - integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== - -lazystream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4" - integrity sha1-9plf4PggOS9hOWvolGJAe7dxaOQ= - dependencies: - readable-stream "^2.0.5" - -levn@^0.3.0, levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - -load-json-file@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" - integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - pinkie-promise "^2.0.0" - strip-bom "^2.0.0" - -load-json-file@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" - integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - strip-bom "^3.0.0" - -load-json-file@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" - integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= - dependencies: - graceful-fs "^4.1.2" - parse-json "^4.0.0" - pify "^3.0.0" - strip-bom "^3.0.0" - -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - -lodash._reinterpolate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" - integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= - -lodash.clonedeep@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= - -lodash.defaults@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" - integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw= - -lodash.difference@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c" - integrity sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw= - -lodash.flatten@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" - integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= - -lodash.ismatch@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" - integrity sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc= - -lodash.isobject@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/lodash.isobject/-/lodash.isobject-3.0.2.tgz#3c8fb8d5b5bf4bf90ae06e14f2a530a4ed935e1d" - integrity sha1-PI+41bW/S/kK4G4U8qUwpO2TXh0= - -lodash.isplainobject@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" - integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= - -lodash.map@^4.5.1: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" - integrity sha1-dx7Hg540c9nEzeKLGTlMNWL09tM= - -lodash.merge@^4.6.1: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash.template@^4.0.2: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" - integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A== - dependencies: - lodash._reinterpolate "^3.0.0" - lodash.templatesettings "^4.0.0" - -lodash.templatesettings@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz#e481310f049d3cf6d47e912ad09313b154f0fb33" - integrity sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ== - dependencies: - lodash._reinterpolate "^3.0.0" - -lodash.unescape@4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/lodash.unescape/-/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c" - integrity sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw= - -lodash.union@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" - integrity sha1-SLtQiECfFvGCFmZkHETdGqrjzYg= - -lodash.zip@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.zip/-/lodash.zip-4.2.0.tgz#ec6662e4896408ed4ab6c542a3990b72cc080020" - integrity sha1-7GZi5IlkCO1KtsVCo5kLcswIACA= - -lodash@4.17.14: - version "4.17.14" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.14.tgz#9ce487ae66c96254fe20b599f21b6816028078ba" - integrity sha512-mmKYbW3GLuJeX+iGP+Y7Gp1AiGHGbXHCOh/jZmrawMmsE7MS4znI3RL2FsjbqOyMayHInjOeykW7PEajUk1/xw== - -lodash@4.17.15, lodash@^4.14.14, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.2.1: - version "4.17.15" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" - integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== - -loglevel-plugin-prefix@^0.8.4: - version "0.8.4" - resolved "https://registry.yarnpkg.com/loglevel-plugin-prefix/-/loglevel-plugin-prefix-0.8.4.tgz#2fe0e05f1a820317d98d8c123e634c1bd84ff644" - integrity sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g== - -loglevel@^1.6.0: - version "1.6.3" - resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.3.tgz#77f2eb64be55a404c9fd04ad16d57c1d6d6b1280" - integrity sha512-LoEDv5pgpvWgPF4kNYuIp0qqSJVWak/dML0RY74xlzMZiT9w77teNAwKYKWBTYjlokMirg+o3jBwp+vlLrcfAA== - -longest@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/longest/-/longest-2.0.1.tgz#781e183296aa94f6d4d916dc335d0d17aefa23f8" - integrity sha1-eB4YMpaqlPbU2RbcM10NF676I/g= - -loud-rejection@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" - integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= - dependencies: - currently-unhandled "^0.4.1" - signal-exit "^3.0.0" - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - -make-error@^1.1.1: - version "1.3.5" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.5.tgz#efe4e81f6db28cadd605c70f29c831b58ef776c8" - integrity sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g== - -map-cache@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= - -map-obj@^1.0.0, map-obj@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" - integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= - -map-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9" - integrity sha1-plzSkIepJZi4eRJXpSPgISIqwfk= - -map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= - dependencies: - object-visit "^1.0.0" - -meow@^3.3.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" - integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs= - dependencies: - camelcase-keys "^2.0.0" - decamelize "^1.1.2" - loud-rejection "^1.0.0" - map-obj "^1.0.1" - minimist "^1.1.3" - normalize-package-data "^2.3.4" - object-assign "^4.0.1" - read-pkg-up "^1.0.1" - redent "^1.0.0" - trim-newlines "^1.0.0" - -meow@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/meow/-/meow-4.0.1.tgz#d48598f6f4b1472f35bf6317a95945ace347f975" - integrity sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A== - dependencies: - camelcase-keys "^4.0.0" - decamelize-keys "^1.0.0" - loud-rejection "^1.0.0" - minimist "^1.1.3" - minimist-options "^3.0.1" - normalize-package-data "^2.3.4" - read-pkg-up "^3.0.0" - redent "^2.0.0" - trim-newlines "^2.0.0" - -merge@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.1.tgz#38bebf80c3220a8a487b6fcfb3941bb11720c145" - integrity sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ== - -micromatch@^3.0.4: - version "3.1.10" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" - -mime-db@1.40.0: - version "1.40.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32" - integrity sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA== - -mime-types@^2.1.12, mime-types@~2.1.19: - version "2.1.24" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81" - integrity sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ== - dependencies: - mime-db "1.40.0" - -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== - -minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -minimist-options@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-3.0.2.tgz#fba4c8191339e13ecf4d61beb03f070103f3d954" - integrity sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ== - dependencies: - arrify "^1.0.1" - is-plain-obj "^1.1.0" - -minimist@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= - -minimist@1.2.0, minimist@^1.1.3: - version "1.2.0" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" - integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= - -minimist@~0.0.1: - version "0.0.10" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" - integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= - -mixin-deep@^1.2.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" - integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - -mkdirp@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= - dependencies: - minimist "0.0.8" - -modify-values@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" - integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= - -ms@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -mute-stream@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" - integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= - -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= - -neo-async@^2.6.0: - version "2.6.1" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" - integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== - -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - -normalize-package-data@^2.3.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.3.5: - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= - -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== - -object-assign@^4.0.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= - -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - -object-keys@^1.0.12: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= - dependencies: - isobject "^3.0.0" - -object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= - dependencies: - isobject "^3.0.1" - -object.values@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.0.tgz#bf6810ef5da3e5325790eaaa2be213ea84624da9" - integrity sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.12.0" - function-bind "^1.1.1" - has "^1.0.3" - -once@^1.3.0, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" - -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= - dependencies: - mimic-fn "^1.0.0" - -optimist@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" - integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= - dependencies: - minimist "~0.0.1" - wordwrap "~0.0.2" - -optionator@^0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" - integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q= - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.4" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - wordwrap "~1.0.0" - -os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= - -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - dependencies: - p-try "^1.0.0" - -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= - dependencies: - p-limit "^1.1.0" - -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parse-github-repo-url@^1.3.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz#9e7d8bb252a6cb6ba42595060b7bf6df3dbc1f50" - integrity sha1-nn2LslKmy2ukJZUGC3v23z28H1A= - -parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= - dependencies: - error-ex "^1.2.0" - -parse-json@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= - dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - -parse-passwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" - integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= - -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= - -path-exists@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" - integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= - dependencies: - pinkie-promise "^2.0.0" - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - -path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= - -path-parse@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" - integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== - -path-type@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" - integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= - dependencies: - graceful-fs "^4.1.2" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -path-type@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" - integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= - dependencies: - pify "^2.0.0" - -path-type@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" - integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== - dependencies: - pify "^3.0.0" - -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= - -pify@^2.0.0, pify@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= - -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= - -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= - -pkg-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" - integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= - dependencies: - find-up "^2.1.0" - -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= - -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= - -prettier-linter-helpers@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" - integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== - dependencies: - fast-diff "^1.1.2" - -prettier@1.18.2: - version "1.18.2" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.18.2.tgz#6823e7c5900017b4bd3acf46fe9ac4b4d7bda9ea" - integrity sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw== - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - -psl@^1.1.24: - version "1.3.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.3.0.tgz#e1ebf6a3b5564fa8376f3da2275da76d875ca1bd" - integrity sha512-avHdspHO+9rQTLbv1RO+MPYeP/SzsCoxofjVnHanETfQhTJrmB0HlDoW+EiN/R+C0BZ+gERab9NY0lPN2TxNag== - -punycode@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= - -punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -q@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= - -qs@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" - integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== - -quick-lru@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" - integrity sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g= - -read-pkg-up@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" - integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= - dependencies: - find-up "^1.0.0" - read-pkg "^1.0.0" - -read-pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" - integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= - dependencies: - find-up "^2.0.0" - read-pkg "^2.0.0" - -read-pkg-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" - integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc= - dependencies: - find-up "^2.0.0" - read-pkg "^3.0.0" - -read-pkg@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" - integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= - dependencies: - load-json-file "^1.0.0" - normalize-package-data "^2.3.2" - path-type "^1.0.0" - -read-pkg@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" - integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= - dependencies: - load-json-file "^2.0.0" - normalize-package-data "^2.3.2" - path-type "^2.0.0" - -read-pkg@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" - integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= - dependencies: - load-json-file "^4.0.0" - normalize-package-data "^2.3.2" - path-type "^3.0.0" - -"readable-stream@2 || 3", readable-stream@^3.0.1, readable-stream@^3.1.1, readable-stream@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc" - integrity sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readable-stream@^2.0.0, readable-stream@^2.0.5, readable-stream@^2.3.6, readable-stream@~2.3.6: - version "2.3.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" - integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -rechoir@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" - integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= - dependencies: - resolve "^1.1.6" - -redent@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" - integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94= - dependencies: - indent-string "^2.1.0" - strip-indent "^1.0.1" - -redent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-2.0.0.tgz#c1b2007b42d57eb1389079b3c8333639d5e1ccaa" - integrity sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo= - dependencies: - indent-string "^3.0.0" - strip-indent "^2.0.0" - -regenerator-runtime@^0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" - integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== - -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - -regexpp@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" - integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== - -repeat-element@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" - integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== - -repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= - -repeating@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" - integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= - dependencies: - is-finite "^1.0.0" - -request@^2.83.0: - version "2.88.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" - integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.0" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.4.3" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - -resolve-dir@^1.0.0, resolve-dir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" - integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M= - dependencies: - expand-tilde "^2.0.0" - global-modules "^1.0.0" - -resolve-from@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - integrity sha1-six699nWiBvItuZTM17rywoYh0g= - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - -resolve-global@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/resolve-global/-/resolve-global-1.0.0.tgz#a2a79df4af2ca3f49bf77ef9ddacd322dad19255" - integrity sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw== - dependencies: - global-dirs "^0.1.1" - -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= - -resolve@^1.1.6, resolve@^1.10.0, resolve@^1.11.0, resolve@^1.5.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6" - integrity sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w== - dependencies: - path-parse "^1.0.6" - -resq@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/resq/-/resq-1.5.0.tgz#a5f238e0c90f4e32ad0bfe3f36f041fae8b90f1d" - integrity sha512-6US6oo2fQ/vgs7wBwqq1w9901Z5VEDgxQH0LrNaN8HcHUZInhtrIt1a0Icysu0vuoK26Bt+SR1dIYeR9+ftMxA== - dependencies: - fast-deep-equal "^2.0.1" - -restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" - integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= - dependencies: - onetime "^2.0.0" - signal-exit "^3.0.2" - -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== - -rgb2hex@^0.1.0: - version "0.1.9" - resolved "https://registry.yarnpkg.com/rgb2hex/-/rgb2hex-0.1.9.tgz#5d3e0e14b0177b568e6f0d5b43e34fbfdb670346" - integrity sha512-32iuQzhOjyT+cv9aAFRBJ19JgHwzQwbjUhH3Fj2sWW2EEGAW8fpFrDFP5ndoKDxJaLO06x1hE3kyuIFrUQtybQ== - -right-pad@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/right-pad/-/right-pad-1.0.1.tgz#8ca08c2cbb5b55e74dafa96bf7fd1a27d568c8d0" - integrity sha1-jKCMLLtbVedNr6lr9/0aJ9VoyNA= - -rimraf@2.6.3: - version "2.6.3" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" - integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== - dependencies: - glob "^7.1.3" - -run-async@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" - integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA= - dependencies: - is-promise "^2.1.0" - -rxjs@^6.4.0: - version "6.5.2" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.2.tgz#2e35ce815cd46d84d02a209fb4e5921e051dbec7" - integrity sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg== - dependencies: - tslib "^1.9.0" - -safe-buffer@^5.0.1, safe-buffer@^5.1.2: - version "5.2.0" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" - integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== - -safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= - dependencies: - ret "~0.1.10" - -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -"semver@2 || 3 || 4 || 5", semver@^5.5.0: - version "5.7.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" - integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== - -semver@5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" - integrity sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA== - -semver@^6.0.0, semver@^6.1.2: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -serialize-error@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-4.1.0.tgz#63e1e33ede20bcd89d9f0528ea4c15fbf0f2b78a" - integrity sha512-5j9GgyGsP9vV9Uj1S0lDCvlsd+gc2LEPVK7HHHte7IyPwOD4lVQFeaX143gx3U5AnoCi+wbcb3mvaxVysjpxEw== - dependencies: - type-fest "^0.3.0" - -set-value@^2.0.0, set-value@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" - integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= - dependencies: - shebang-regex "^1.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= - -shelljs@0.7.6: - version "0.7.6" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.6.tgz#379cccfb56b91c8601e4793356eb5382924de9ad" - integrity sha1-N5zM+1a5HIYB5HkzVutTgpJN6a0= - dependencies: - glob "^7.0.0" - interpret "^1.0.0" - rechoir "^0.6.2" - -signal-exit@^3.0.0, signal-exit@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" - integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= - -slice-ansi@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" - integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== - dependencies: - ansi-styles "^3.2.0" - astral-regex "^1.0.0" - is-fullwidth-code-point "^2.0.0" - -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - -source-map-resolve@^0.5.0: - version "0.5.2" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" - integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA== - dependencies: - atob "^2.1.1" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" - -source-map-support@^0.5.6: - version "0.5.13" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" - integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map-url@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" - integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= - -source-map@^0.5.6: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= - -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -spdx-correct@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" - integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" - integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== - -spdx-expression-parse@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" - integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.5" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" - integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== - -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== - dependencies: - extend-shallow "^3.0.0" - -split2@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/split2/-/split2-2.2.0.tgz#186b2575bcf83e85b7d18465756238ee4ee42493" - integrity sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw== - dependencies: - through2 "^2.0.2" - -split@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" - integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== - dependencies: - through "2" - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - -sshpk@^1.7.0: - version "1.16.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" - integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - -string-width@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string-width@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" - -string_decoder@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d" - integrity sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w== - dependencies: - safe-buffer "~5.1.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= - dependencies: - ansi-regex "^3.0.0" - -strip-ansi@^5.1.0, strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - -strip-bom@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" - integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== - -strip-bom@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" - integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= - dependencies: - is-utf8 "^0.2.0" - -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= - -strip-indent@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" - integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI= - dependencies: - get-stdin "^4.0.1" - -strip-indent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" - integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= - -strip-json-comments@3.0.1, strip-json-comments@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7" - integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw== - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -table@^5.2.3: - version "5.4.5" - resolved "https://registry.yarnpkg.com/table/-/table-5.4.5.tgz#c8f4ea2d8fee08c0027fac27b0ec0a4fe01dfa42" - integrity sha512-oGa2Hl7CQjfoaogtrOHEJroOcYILTx7BZWLGsJIlzoWmB2zmguhNfPJZsWPKYek/MgCxfco54gEi31d1uN2hFA== - dependencies: - ajv "^6.10.2" - lodash "^4.17.14" - slice-ansi "^2.1.0" - string-width "^3.0.0" - -tar-stream@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.1.0.tgz#d1aaa3661f05b38b5acc9b7020efdca5179a2cc3" - integrity sha512-+DAn4Nb4+gz6WZigRzKEZl1QuJVOLtAwwF+WUxy1fJ6X63CaGaUAxJRD2KEn1OMfcbCjySTYpNC6WmfQoIEOdw== - dependencies: - bl "^3.0.0" - end-of-stream "^1.4.1" - fs-constants "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.1.1" - -tempfile@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/tempfile/-/tempfile-1.1.1.tgz#5bcc4eaecc4ab2c707d8bc11d99ccc9a2cb287f2" - integrity sha1-W8xOrsxKsscH2LwR2ZzMmiyyh/I= - dependencies: - os-tmpdir "^1.0.0" - uuid "^2.0.1" - -text-extensions@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-2.0.0.tgz#43eabd1b495482fae4a2bf65e5f56c29f69220f6" - integrity sha512-F91ZqLgvi1E0PdvmxMgp+gcf6q8fMH7mhdwWfzXnl1k+GbpQDmi8l7DzLC5JTASKbwpY3TfxajAUzAXcv2NmsQ== - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= - -through2@^2.0.0, through2@^2.0.2: - version "2.0.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" - integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== - dependencies: - readable-stream "~2.3.6" - xtend "~4.0.1" - -through2@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/through2/-/through2-3.0.1.tgz#39276e713c3302edf9e388dd9c812dd3b825bd5a" - integrity sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww== - dependencies: - readable-stream "2 || 3" - -through@2, "through@>=2.2.7 <3", through@^2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= - -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - -to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= - dependencies: - kind-of "^3.0.2" - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - -to-regex@^3.0.1, to-regex@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - -tough-cookie@~2.4.3: - version "2.4.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" - integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ== - dependencies: - psl "^1.1.24" - punycode "^1.4.1" - -trim-newlines@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" - integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= - -trim-newlines@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20" - integrity sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA= - -trim-off-newlines@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3" - integrity sha1-n5up2e+odkw4dpi8v+sshI8RrbM= - -ts-node@^8.3.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.3.0.tgz#e4059618411371924a1fb5f3b125915f324efb57" - integrity sha512-dyNS/RqyVTDcmNM4NIBAeDMpsAdaQ+ojdf0GOLqE6nwJOgzEkdRNzJywhDfwnuvB10oa6NLVG1rUJQCpRN7qoQ== - dependencies: - arg "^4.1.0" - diff "^4.0.1" - make-error "^1.1.1" - source-map-support "^0.5.6" - yn "^3.0.0" - -tslib@^1.8.1, tslib@^1.9.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" - integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== - -tsutils@^3.7.0: - version "3.17.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.0.tgz#c3ccab927a475aa2beef6a3695c2ff76da13cdf8" - integrity sha512-fyveWOtAXfumAxIqkcMHuPaaVyLBKjB8Y00ANZkqh+HITBAQscCbQIHwwBTJdvQq7RykLEbOPcUUnJ16X4NA0g== - dependencies: - tslib "^1.8.1" - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= - dependencies: - safe-buffer "^5.0.1" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= - -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= - dependencies: - prelude-ls "~1.1.2" - -type-fest@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1" - integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ== - -typescript@^3.5.3: - version "3.5.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.5.3.tgz#c830f657f93f1ea846819e929092f5fe5983e977" - integrity sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g== - -uglify-js@^3.1.4: - version "3.7.3" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.7.3.tgz#f918fce9182f466d5140f24bb0ff35c2d32dcc6a" - integrity sha512-7tINm46/3puUA4hCkKYo4Xdts+JDaVC9ZPRcG8Xw9R4nhO/gZgUM3TENq8IF4Vatk8qCig4MzP/c8G4u2BkVQg== - dependencies: - commander "~2.20.3" - source-map "~0.6.1" - -union-value@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" - integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^2.0.1" - -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - -uri-js@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" - integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== - dependencies: - punycode "^2.1.0" - -urix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= - -use@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== - -util-deprecate@^1.0.1, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= - -uuid@^2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" - integrity sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho= - -uuid@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" - integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== - -v8-compile-cache@^2.0.3: - version "2.1.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz#e14de37b31a6d194f5690d67efc4e7f6fc6ab30e" - integrity sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g== - -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -webdriver@^5.11.13: - version "5.11.13" - resolved "https://registry.yarnpkg.com/webdriver/-/webdriver-5.11.13.tgz#b1b060dded854bfd42fc0c1bdd341acc80586c2a" - integrity sha512-XZho6xW1G+ksPePKWP54k3nzadTf6skPUTPKUVKAdrgbPgHHEwhMEYJhRgZiQ3ZLSOF/IP6ViwsbZg+BYJ+sbA== - dependencies: - "@wdio/config" "^5.11.0" - "@wdio/logger" "^5.11.0" - deepmerge "^4.0.0" - lodash.merge "^4.6.1" - request "^2.83.0" - -webdriverio@5.11.13: - version "5.11.13" - resolved "https://registry.yarnpkg.com/webdriverio/-/webdriverio-5.11.13.tgz#ac56ad395d2906ad53abce78717d287bae54acc0" - integrity sha512-GTH4aNP4GzuxmeF+CLXIEyfYccXV2hANhqw+cQPE3U0qZ0ir3ZTSTLre90gHVJzY6rcgx0QzIMazuUbNB0kVoA== - dependencies: - "@wdio/config" "^5.11.0" - "@wdio/logger" "^5.11.0" - "@wdio/repl" "^5.11.0" - archiver "^3.0.0" - css-value "^0.0.1" - grapheme-splitter "^1.0.2" - lodash.clonedeep "^4.5.0" - lodash.isobject "^3.0.2" - lodash.isplainobject "^4.0.6" - lodash.zip "^4.2.0" - resq "^1.5.0" - rgb2hex "^0.1.0" - serialize-error "^4.1.0" - webdriver "^5.11.13" - -which@^1.2.14, which@^1.2.9: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -word-wrap@^1.0.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== - -wordwrap@~0.0.2: - version "0.0.3" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" - integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= - -wordwrap@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -write@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" - integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== - dependencies: - mkdirp "^0.5.1" - -xtend@~4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -yallist@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" - integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A== - -yn@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" - integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== - -zip-stream@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-2.1.2.tgz#841efd23214b602ff49c497cba1a85d8b5fbc39c" - integrity sha512-ykebHGa2+uzth/R4HZLkZh3XFJzivhVsjJt8bN3GvBzLaqqrUdRacu+c4QtnUgjkkQfsOuNE1JgLKMCPNmkKgg== - dependencies: - archiver-utils "^2.1.0" - compress-commons "^2.1.1" - readable-stream "^3.4.0" diff --git a/tsconfig.json b/tsconfig.json index 9b9ea19c7c..54a508c93f 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -19,5 +19,6 @@ "exclude": [ "examples", "**/es", + "tests/e2e", ] } diff --git a/tsconfig.v3.json b/tsconfig.v3.json index 1bcd842bf5..93d0be1f0b 100644 --- a/tsconfig.v3.json +++ b/tsconfig.v3.json @@ -16,6 +16,7 @@ "packages/instantsearch.js/src/connectors/dynamic-widgets/__tests__/connectDynamicWidgets-test.ts", "packages/instantsearch.js/src/connectors/hierarchical-menu/__tests__/connectHierarchicalMenu-test.ts", "packages/instantsearch.js/src/connectors/menu/__tests__/connectMenu-test.ts", - "packages/instantsearch.js/src/connectors/refinement-list/__tests__/connectRefinementList-test.ts" + "packages/instantsearch.js/src/connectors/refinement-list/__tests__/connectRefinementList-test.ts", + "tests/e2e", ] } diff --git a/yarn.lock b/yarn.lock index 8ca0846194..4f952aa5a0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4335,6 +4335,11 @@ dependencies: "@types/istanbul-lib-report" "*" +"@types/jasmine@3.3.16": + version "3.3.16" + resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-3.3.16.tgz#7c84074f5d7f84da9a14f816ccfb9aeb4da13f27" + integrity sha512-Nveep4zKGby8uIvG2AEUyYOwZS8uVeHK9TgbuWYSawUDDdIgfhCKz28QzamTo//Jk7Ztt9PO3f+vzlB6a4GV1Q== + "@types/jest@*": version "29.1.0" resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.1.0.tgz#9cfbe1b0d4408f9732aaf37447460f10f2c71ce6" @@ -8556,7 +8561,7 @@ dotenv@^7.0.0: resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-7.0.0.tgz#a2be3cd52736673206e8a85fb5210eea29628e7c" integrity sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g== -dotenv@^8.0.0, dotenv@^8.1.0, dotenv@^8.2.0: +dotenv@8.2.0, dotenv@^8.0.0, dotenv@^8.1.0, dotenv@^8.2.0: version "8.2.0" resolved "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== @@ -9044,6 +9049,11 @@ eslint-plugin-react@7.18.0: prop-types "^15.7.2" resolve "^1.14.2" +eslint-plugin-wdio@5.11.0: + version "5.11.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-wdio/-/eslint-plugin-wdio-5.11.0.tgz#17440b83224c78d09a8dcdc77cbcbc11e34da463" + integrity sha512-o7VzDo4D7jipbKS+k2e0lsFD8v3Lpm3Iffc59XOLunJlgebGA6lasEhTk8VqJtmlC50P9YxxSnZaQTAMqxw+YA== + eslint-scope@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" @@ -11111,14 +11121,6 @@ insert-css@^2.0.0: resolved "https://registry.yarnpkg.com/insert-css/-/insert-css-2.0.0.tgz#eb5d1097b7542f4c79ea3060d3aee07d053880f4" integrity sha1-610Ql7dUL0x56jBg067gfQU4gPQ= -instantsearch-e2e-tests@algolia/instantsearch-e2e-tests#feat/monorepo: - version "2.0.2" - resolved "https://codeload.github.com/algolia/instantsearch-e2e-tests/tar.gz/907312acad5d057070b7480e8b3a287f3c0b83f8" - dependencies: - dotenv "^8.0.0" - ts-node "^8.3.0" - typescript "^3.5.3" - internal-slot@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.2.tgz#9c2e9fb3cd8e5e4256c6f45fe310067fcfa378a3" @@ -18094,7 +18096,7 @@ ts-dedent@^1.1.0: resolved "https://registry.yarnpkg.com/ts-dedent/-/ts-dedent-1.1.0.tgz#67983940793183dc7c7f820acb66ba02cdc33c6e" integrity sha512-CVCvDwMBWZKjDxpN3mU/Dx1v3k+sJgE8nrhXcC9vRopRfoa7vVzilNvHEAUi5jQnmFHpnxDx5jZdI1TpG8ny2g== -ts-node@^8.3.0: +ts-node@8.4.1: version "8.4.1" resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.4.1.tgz#270b0dba16e8723c9fa4f9b4775d3810fd994b4f" integrity sha512-5LpRN+mTiCs7lI5EtbXmF/HfMeCjzt7DH9CZwtkr6SywStrNQC723wG+aOWFiLNn7zT3kD/RnFqi3ZUfr4l5Qw== @@ -18248,11 +18250,6 @@ typescript@4.3.5, typescript@~4.3.2: resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.8.4.tgz#c464abca159669597be5f96b8943500b238e60e6" integrity sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ== -typescript@^3.5.3: - version "3.9.7" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.7.tgz#98d600a5ebdc38f40cb277522f12dc800e9e25fa" - integrity sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw== - ua-parser-js@^0.7.18: version "0.7.20" resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.20.tgz#7527178b82f6a62a0f243d1f94fd30e3e3c21098" From 2931f8fdea0e2cbde06a3013780d076f5bfdb48d Mon Sep 17 00:00:00 2001 From: Haroen Viaene Date: Thu, 24 Nov 2022 14:24:46 +0100 Subject: [PATCH 94/94] docs(contributing): change wording Co-Authored-By: Sarah Dayan --- CONTRIBUTING.md | 10 ++-- tests/e2e/CONTRIBUTING.md | 104 ++++++++++++++++++++------------------ 2 files changed, 61 insertions(+), 53 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index eae79e7cd4..0186ec51d2 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -173,7 +173,7 @@ yarn test --watch ### End-to-end tests -End-to-end tests are defined by the [tests/e2e](./tests/e2e/README.md) project. +End-to-end tests are defined in [tests/e2e](./tests/e2e/README.md). To run them locally: @@ -181,13 +181,15 @@ To run them locally: yarn test:e2e:local ``` -To run them on saucelabs, with credentials as `SAUCE_USERNAME` and `SAUCE_ACCESS_KEY` environment variable: - +To run them on Sauce Labs: ```sh yarn test:e2e:saucelabs ``` -More info, including how to write the tests, can be found in its [CONTRIBUTING](./tests/e2e/CONTRIBUTING.md) and [README](./tests/e2e/README.md) files. +> **Note** +>Make sure to set up Sauce Labs credentials with the `SAUCE_USERNAME` and `SAUCE_ACCESS_KEY` environment variables. + +For more info, including how to write end-to-end tests, check the `tests/e2e` [CONTRIBUTING](./tests/e2e/CONTRIBUTING.md) and [README](./tests/e2e/README.md) files. ### Type checks diff --git a/tests/e2e/CONTRIBUTING.md b/tests/e2e/CONTRIBUTING.md index 1951814db2..98ac135754 100644 --- a/tests/e2e/CONTRIBUTING.md +++ b/tests/e2e/CONTRIBUTING.md @@ -1,6 +1,8 @@ # Contributing -This repository contains the end-to-end (e2e) test suite for InstantSearch. This test suite is meant to be shared across all InstantSearch flavors, this is why it is stored in the monorepo. +This repository contains the end-to-end (e2e) test suite for InstantSearch. + +This test suite is meant to be shared across all InstantSearch flavors, which is why it lives in the monorepo. ## Development @@ -23,70 +25,74 @@ See [WebdriverIO CLI documentation](https://webdriver.io/docs/clioptions.html) f ### Writing tests -We use [Webdriverio](https://webdriver.io) and [Jasmine](https://jasmine.github.io) to write the tests. Webdriverio is used to control the browser (navigate, select elements, clicks, etc.) while Jasmine is used to assert the results. +We use [WebdriverIO](https://webdriver.io) and [Jasmine](https://jasmine.github.io) to write the tests. WebdriverIO controls the browser (navigate, select elements, click, etc.) while Jasmine is used to make assertions. -The tests must be stored in the [`specs`](specs) directory and follow the `*.spec.ts` naming pattern. Each `*.spec.ts` file will be executed in a new WebDriver session and if possible in parallel (to the limit of the `maxInstances` configuration parameter in `wdio.*.conf.js`). +All tests must go in the [`specs`](specs) directory and follow the `*.spec.ts` naming pattern. Each `*.spec.ts` file runs in a separate WebdriverIO session, and in parallel (to the limit of the `maxInstances` configuration parameter in `wdio.*.conf.js`). -In general, you should try to test a single feature in one spec file. Try to not have too many or too few tests in one file. However, there is no golden rule about that. +The general rule is to test a single feature in one spec file—for example, pagination. If your test suite has a lot less or a lot more tests than the existing ones, you might have incorrectly scoped the feature you're trying to cover. -One spec file represents a scenario to test a behavior from a user point of view. +Each spec file represents a end-to-end scenario which tests a behavior from a user's point of view. -Example of scenario: +For example: 1. Load the `examples/js/e-commerce/` page -2. Click on "Appliances" category +2. Click on the "Appliances" category 3. Click on rating "4 & up" -4. Check if the result list matches the expected one +4. Assert whether or not the returned hits match the expected ones -Which can be translated in a spec file to: +This user scenario translates to the following spec: ```js -describe('InstantSearch - Search on specific brand and query filtering', () => { - it('navigates to the e-commerce demo', async () => { - await browser.url('examples/e-commerce/'); - }); - - it('selects "Appliances" category', async () => { - await browser.setSelectedHierarchicalMenuItem('Appliances'); - }); - - it('selects "4 & up" rating', async () => { - await browser.setRatingMenuValue('4 & up'); - }); - - it('must have the expected results', async () => { - const hitsTitles = await browser.getHitsTitles(); - - expect(hitsTitles).toEqual([ - 'Nest - Learning Thermostat - 3rd Generation - Stainless Steel', - 'LG - 1.1 Cu. Ft. Mid-Size Microwave - Stainless-Steel', - 'Insignia™ - 2.6 Cu. Ft. Compact Refrigerator - Black', - 'Keurig - K50 Coffeemaker - Black', - 'iRobot - Roomba 650 Vacuuming Robot - Black', - 'Shark - Navigator Lift-Away Deluxe Bagless Upright Vacuum - Blue', - 'LG - 1.5 Cu. Ft. Mid-Size Microwave - Stainless Steel', - 'Insignia™ - 5.0 Cu. Ft. Chest Freezer - White', - 'Samsung - activewash 4.8 Cu. Ft. 11-Cycle High-Efficiency Top-Loading Washer - White', - 'Samsung - 4.8 Cu. Ft. 11-Cycle High-Efficiency Top-Loading Washer - White', - 'LG - 2.0 Cu. Ft. Full-Size Microwave - Stainless Steel', - 'Shark - Rotator Professional Lift-Away HEPA Bagless 2-in-1 Upright Vacuum - Red', - 'LG - 4.5 Cu. Ft. 8-Cycle High-Efficiency Top-Loading Washer - White', - 'Samsung - 4.2 Cu. Ft. 9-Cycle High-Efficiency Steam Front-Loading Washer - Platinum', - 'Panasonic - 1.3 Cu. Ft. Mid-Size Microwave - Stainless steel/black/silver', - 'LG - 2.0 Cu. Ft. Mid-Size Microwave - Black Stainless', - ]); +function createBrandAndQueryFilteringTestSuite(flavor: string) { + const root = `examples/${flavor}/e-commerce/`; + + describe('search on a specific category', () => { + it('navigates to the e-commerce demo', async () => { + await browser.url(root); + }); + + it('selects "Appliances" category', async () => { + await browser.setSelectedHierarchicalMenuItem('Appliances'); + }); + + it('selects "4 & up" rating', async () => { + await browser.setRatingMenuValue('4 & up'); + }); + + it('must have the expected results', async () => { + const hitsTitles = await browser.getHitsTitles(); + + expect(hitsTitles).toEqual([ + 'Nest - Learning Thermostat - 3rd Generation - Stainless Steel', + 'LG - 1.1 Cu. Ft. Mid-Size Microwave - Stainless-Steel', + 'Insignia™ - 2.6 Cu. Ft. Compact Refrigerator - Black', + 'Keurig - K50 Coffeemaker - Black', + 'iRobot - Roomba 650 Vacuuming Robot - Black', + 'Shark - Navigator Lift-Away Deluxe Bagless Upright Vacuum - Blue', + 'LG - 1.5 Cu. Ft. Mid-Size Microwave - Stainless Steel', + 'Insignia™ - 5.0 Cu. Ft. Chest Freezer - White', + 'Samsung - activewash 4.8 Cu. Ft. 11-Cycle High-Efficiency Top-Loading Washer - White', + 'Samsung - 4.8 Cu. Ft. 11-Cycle High-Efficiency Top-Loading Washer - White', + 'LG - 2.0 Cu. Ft. Full-Size Microwave - Stainless Steel', + 'Shark - Rotator Professional Lift-Away HEPA Bagless 2-in-1 Upright Vacuum - Red', + 'LG - 4.5 Cu. Ft. 8-Cycle High-Efficiency Top-Loading Washer - White', + 'Samsung - 4.2 Cu. Ft. 9-Cycle High-Efficiency Steam Front-Loading Washer - Platinum', + 'Panasonic - 1.3 Cu. Ft. Mid-Size Microwave - Stainless steel/black/silver', + 'LG - 2.0 Cu. Ft. Mid-Size Microwave - Black Stainless', + ]); + }); }); -}); +} ``` -General guidelines when writing tests: +Here are some general guidelines when writing end-to-end tests: -- Each step should be translated as a `it` function, while this is not mandatory it helps to make the scenario more readable and properly [separate each actions in Sauce Labs reports](https://user-images.githubusercontent.com/13209/62311104-56217d80-b48b-11e9-94dc-3c18b9ddc2af.png). +- Each separate step should be in its own `it` function. This isn't a hard rule, but it helps make the scenario more readable and properly [separate each action in Sauce Labs reports](https://user-images.githubusercontent.com/13209/62311104-56217d80-b48b-11e9-94dc-3c18b9ddc2af.png). - All actions on the browser are asynchronous, so be sure to always `await` them. **Never run multiple asynchronous commands in parallel as it can confuse some browsers (Internet Explorer)**. -- Use helper functions when possible, for readability but also for maintainability (if one widget is updated, we only have to updates its helpers without touching the tests). [More about Helpers](#helpers). -- Do not make assertions to know if an action was correctly performed in the browser. If an action fails (trying to click on an non-existing element for example) then WebdriverIO will automatically throw and fail the test, so asserting on it ourselves is redundant. +- Use [helper](#helpers) functions whenever possible, for readability but also for maintainability—if one widget is updated, we only have to updates its helpers without touching the tests. +- Only assert what you want to see on the page after an action—for example, is the checkbox selected, is the result list correct, etc. - Only assert what you want to see on the page after an action (Is this checkbox selected? Is the result list correct? etc.) -- You may need to add some additional steps compared to the original scenario, to wait for some elements to update for example (this was not done in the example above for simplicity but you can find some examples [here](https://github.com/algolia/instantsearch-e2e-tests/blob/5a2456b8d63afa684931b0447f00df821b02752b/specs/brand-and-query.spec.ts#L14-L16) or [here](https://github.com/algolia/instantsearch-e2e-tests/blob/5a2456b8d63afa684931b0447f00df821b02752b/specs/price-range.spec.ts#L13-L22)). +- You may need to add some additional steps compared to the original scenario, to wait for some elements to update for example (this was not done in the example above for simplicity but you can find some examples [here](./specs/brand-and-query.spec.ts#L17-19) or [here](./specs/price-range.spec.ts#L16-32)). ### Helpers