diff --git a/.node-version b/.node-version index acd405b1d6..a8759e7438 100644 --- a/.node-version +++ b/.node-version @@ -1 +1 @@ -8.6.0 +8.16.0 \ No newline at end of file diff --git a/.textlintrc b/.textlintrc index 3a66b77781..26986269fa 100644 --- a/.textlintrc +++ b/.textlintrc @@ -15,6 +15,7 @@ ["test runner", "Test Runner"], // Brands and Technologies + ["ansi", "ANSI"], "AppVeyor", "Babel", ["^Blob(?! %)", "Blob"], diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 57b048ef0c..1438ecae1e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -12,6 +12,7 @@ Thanks for taking the time to contribute! :smile: - [Adding Plugins](#adding-plugins) - [Adding Pages](#adding-pages) - [Writing the Changelog](#writing-the-changelog) + - [Translating](#translating) - [Committing Code](#committing-code) - [Linting](#linting) - [Pull Requests](#pull-requests) @@ -103,9 +104,19 @@ To add a page such as a new guide or API documentation: - Link to your new page in the [`sidebar.yml`](/source/_data/sidebar.yml). - Add translations for the sidebar link for each supported language (for English, this is located in [`en.yml`](/themes/cypress/languages/en.yml)). - Build the documentation site locally so that you can visually inspect your new page and the links to it. -- Commit the new file using git - we auto-generate the doc to display within each supported language, this auto-generation depends on the file existing in git. +- **REQUIRED**: Commit the new file using git - we auto-generate the doc to display within each supported language, this auto-generation depends on the file existing in git. - Submit a [pull request](#Pull-Requests) for your change. +### Deleting Pages + +To delete a page: + +- Delete the page from the relevant directory under [`source`](/source). +- Remove the link from the the [`sidebar.yml`](/source/_data/sidebar.yml). +- Remove the translations for the sidebar link for each supported language (for English, this is located in [`en.yml`](/themes/cypress/languages/en.yml)). +- **REQUIRED**: Commit the change using git - we auto-remove the doc within each supported language, this auto-generation depends on the file being deleted in git, the build will not work until this is commited. +- Build the documentation site locally so that you can visually inspect and make sure it was properly deleted. + #### A Worked Example Let's imagine that the Cypress team has just added a new command called `privateState` and you've picked up the task to document it. diff --git a/circle.yml b/circle.yml index 30ee00c53b..b0b04a6549 100644 --- a/circle.yml +++ b/circle.yml @@ -137,6 +137,9 @@ jobs: path: cypress/screenshots - store_artifacts: path: npm-debug.log + # store NPM logs in case there was a problem + - store_artifacts: + path: ~/.npm/_logs "deploy-docs-production": <<: *defaults @@ -150,6 +153,11 @@ jobs: # use script that just deploys without rebuilding the production docs - run: npm run deploy-prebuilt -- --environment production --scrape - run: cat public/build.json + - store_artifacts: + path: npm-debug.log + # store NPM logs in case there was a problem + - store_artifacts: + path: ~/.npm/_logs workflows: version: 2 diff --git a/cy_scripts/deploy.js b/cy_scripts/deploy.js index fd6b127ecf..0f06c37e38 100644 --- a/cy_scripts/deploy.js +++ b/cy_scripts/deploy.js @@ -88,7 +88,8 @@ function deployEnvironmentBranch (env, branch) { checkBranchEnvFolder(branch)(env) debug('uploading to S3 dist folder %s', distDir) - uploadToS3(distDir, env) + + return uploadToS3(distDir, env) .then(() => scrapeDocs(env, branch)) .then(() => { console.log(chalk.yellow('\n==============================\n')) diff --git a/cy_scripts/scrape.js b/cy_scripts/scrape.js index b7a091c1db..c5186021b4 100644 --- a/cy_scripts/scrape.js +++ b/cy_scripts/scrape.js @@ -33,6 +33,14 @@ function checkToken (token) { } function getCircleCredentials () { + // the JSON file should have an object like + // { "token": "abc123..." } + // where the token is your personal API token from CircleCI + // alternatively, put the JSON object into environment variable + // with file shown by filenameToShellVariable(jsonFile) call + // which is something like _circle_credentials_json + // you can load such environment variable quickly from local terminal with + // https://github.com/bahmutov/as-a const jsonFile = path.join('support', '.circle-credentials.json') const config = configFromEnvOrJsonFile(jsonFile) diff --git a/cypress/integration/i18n_spec.js b/cypress/integration/i18n_spec.js index 3669fc10aa..d3d7261b13 100644 --- a/cypress/integration/i18n_spec.js +++ b/cypress/integration/i18n_spec.js @@ -7,6 +7,30 @@ describe('i18n', () => { cy.url().should('contain', 'why-cypress') }) + context('alternate links', () => { + it('provides an alternate link for available English languages', function () { + cy.wrap(this.langValues).each((lang) => { + cy.get(`link[hreflang="${lang}"]`).should(($linkTag) => { + let expectedPath = `${lang}/guides/overview/why-cypress.html` + + if (lang === 'en') { + expectedPath = 'guides/overview/why-cypress.html' + } + + expect($linkTag[0].rel).to.eq('alternate') + expect($linkTag[0].href).to.include(expectedPath) + }) + }) + }) + + it('provides a default', function () { + cy.get('link[hreflang="x-default"]').should(($linkTag) => { + expect($linkTag[0].rel).to.eq('alternate') + expect($linkTag[0].href).to.include('guides/overview/why-cypress.html') + }) + }) + }) + context('language select', () => { it('selects English by default', () => { cy.get('#lang-select').find('option') diff --git a/cypress/integration/main_spec.js b/cypress/integration/main_spec.js index a47ffb94e2..d41236d1a0 100644 --- a/cypress/integration/main_spec.js +++ b/cypress/integration/main_spec.js @@ -9,18 +9,6 @@ describe('Main', () => { cy.server() }) - context('robots.txt', () => { - if (!Cypress.isDevelopment()) { - it('has robots.txt', () => { - cy.request('/robots.txt').its('body') - .should('include', 'Disallow: /ja/') - .and('include', 'Disallow: /zh-cn/') - .and('include', 'Disallow: /pt-br/') - .and('include', 'Disallow: /ru/') - }) - } - }) - context('CSS', () => { beforeEach(() => { cy.visit('/') diff --git a/package-lock.json b/package-lock.json index 94fb12801f..47b54013dd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -767,6 +767,12 @@ "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", "dev": true }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -1063,10 +1069,13 @@ } }, "@hapi/address": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz", - "integrity": "sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==", - "dev": true + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@hapi/address/-/address-4.0.0.tgz", + "integrity": "sha512-GDDpkCdSUfkQCznmWUHh9dDN85BWf/V8TFKQ2JLuHdGB4Yy3YTEGBzZxoBNxfNBEvreSR/o+ZxBBSNNEVzY+lQ==", + "dev": true, + "requires": { + "@hapi/hoek": "^9.0.0" + } }, "@hapi/formula": { "version": "1.2.0", @@ -1075,22 +1084,36 @@ "dev": true }, "@hapi/hoek": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.1.tgz", - "integrity": "sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.0.3.tgz", + "integrity": "sha512-jKtjLLDiH95b002sJVc5c74PE6KKYftuyVdVmsuYId5stTaWcRFqE+5ukZI4gDUKjGn8wv2C3zPn3/nyjEI7gg==", "dev": true }, "@hapi/joi": { - "version": "16.1.8", - "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-16.1.8.tgz", - "integrity": "sha512-wAsVvTPe+FwSrsAurNt5vkg3zo+TblvC5Bb1zMVK6SJzZqw9UrJnexxR+76cpePmtUZKHAPxcQ2Bf7oVHyahhg==", + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-17.1.0.tgz", + "integrity": "sha512-ob67RcPlwRWxBzLCnWvcwx5qbwf88I3ykD7gcJLWOTRfLLgosK7r6aeChz4thA3XRvuBfI0KB1tPVl2EQFlPXw==", "dev": true, "requires": { - "@hapi/address": "^2.1.2", - "@hapi/formula": "^1.2.0", - "@hapi/hoek": "^8.2.4", - "@hapi/pinpoint": "^1.0.2", - "@hapi/topo": "^3.1.3" + "@hapi/address": "^4.0.0", + "@hapi/formula": "^2.0.0", + "@hapi/hoek": "^9.0.0", + "@hapi/pinpoint": "^2.0.0", + "@hapi/topo": "^5.0.0" + }, + "dependencies": { + "@hapi/formula": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@hapi/formula/-/formula-2.0.0.tgz", + "integrity": "sha512-V87P8fv7PI0LH7LiVi8Lkf3x+KCO7pQozXRssAHNXXL9L1K+uyu4XypLXwxqVDKgyQai6qj3/KteNlrqDx4W5A==", + "dev": true + }, + "@hapi/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@hapi/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-vzXR5MY7n4XeIvLpfl3HtE3coZYO4raKXW766R6DZw/6aLqR26iuZ109K7a0NtF2Db0jxqh7xz2AxkUwpUFybw==", + "dev": true + } } }, "@hapi/pinpoint": { @@ -1100,12 +1123,12 @@ "dev": true }, "@hapi/topo": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.6.tgz", - "integrity": "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.0.0.tgz", + "integrity": "sha512-tFJlT47db0kMqVm3H4nQYgn6Pwg10GTZHb1pwmSiv1K4ks6drQOtfEF5ZnPjkvC+y4/bUPHK+bc87QvLcL+WMw==", "dev": true, "requires": { - "@hapi/hoek": "^8.3.0" + "@hapi/hoek": "^9.0.0" } }, "@istanbuljs/load-nyc-config": { @@ -2779,9 +2802,9 @@ } }, "@types/jest": { - "version": "25.1.2", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-25.1.2.tgz", - "integrity": "sha512-EsPIgEsonlXmYV7GzUqcvORsSS9Gqxw/OvkGwHfAdpjduNRxMlhsav0O5Kb0zijc/eXSO/uW6SJt9nwull8AUQ==", + "version": "25.1.4", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-25.1.4.tgz", + "integrity": "sha512-QDDY2uNAhCV7TMCITrxz+MRk1EizcsevzfeS6LykIlq2V1E5oO4wXG8V2ZEd9w7Snxeeagk46YbMgZ8ESHx3sw==", "dev": true, "requires": { "jest-diff": "^25.1.0", @@ -2824,9 +2847,9 @@ "dev": true }, "@types/yargs": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.3.tgz", - "integrity": "sha512-XCMQRK6kfpNBixHLyHUsGmXrpEmFFxzMrcnSXFMziHd8CoNJo8l16FkHyQq4x+xbM7E2XL83/O78OD8u+iZTdQ==", + "version": "15.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.4.tgz", + "integrity": "sha512-9T1auFmbPZoxHz0enUFlUuKRy3it01R+hlggyVUMtnCTQRunsQYifnSGb8hET4Xo8yiC0o0r1paW3ud5+rbURg==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -3719,9 +3742,9 @@ "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" }, "axios": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.1.tgz", - "integrity": "sha512-Yl+7nfreYKaLRvAvjNPkvfjnQHJM1yLBY3zhqAwcJSwR/6ETkanUgylgtIvkvz0xJ+p/vZuNw8X7Hnb7Whsbpw==", + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz", + "integrity": "sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==", "requires": { "follow-redirects": "1.5.10" } @@ -4843,6 +4866,35 @@ } } }, + "cli-table3": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz", + "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==", + "dev": true, + "requires": { + "colors": "^1.1.2", + "object-assign": "^4.1.0", + "string-width": "^2.1.1" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + } + } + }, "cli-truncate": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz", @@ -5324,9 +5376,9 @@ } }, "contentful": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/contentful/-/contentful-7.13.1.tgz", - "integrity": "sha512-wXKyKYGquLQ/PvFQFDyyrA1C19YxO5HgI5vgeQBEO/IoKNVv0dJp41x6WWXwEVf5Q3/8EfVVmhAMT0OeAJJLcQ==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/contentful/-/contentful-7.14.0.tgz", + "integrity": "sha512-edoiQx0AkmNqnGofmLHGVt84k2S8XuPyw2UOct/Oc3HEW0Z66osMJ4M/XA9GeByCCD5ZC7qotseBRyag/1g0iA==", "requires": { "axios": "^0.19.1", "contentful-resolve-response": "^1.1.4", @@ -5564,9 +5616,9 @@ } }, "cypress": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-4.0.2.tgz", - "integrity": "sha512-WRzxOoSd+TxyXKa7Zi9orz3ii5VW7yhhVYstCU+EpOKfPan9x5Ww2Clucmy4H/W0GHUYAo7GYFZRD33ZCSNBQA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-4.2.0.tgz", + "integrity": "sha512-8LdreL91S/QiTCLYLNbIjLL8Ht4fJmu/4HGLxUI20Tc7JSfqEfCmXELrRfuPT0kjosJwJJZacdSji9XSRkPKUw==", "dev": true, "requires": { "@cypress/listr-verbose-renderer": "0.4.1", @@ -5575,13 +5627,14 @@ "arch": "2.1.1", "bluebird": "3.7.2", "cachedir": "2.3.0", - "chalk": "3.0.0", + "chalk": "2.4.2", "check-more-types": "2.24.0", + "cli-table3": "0.5.1", "commander": "4.1.0", "common-tags": "1.8.0", "debug": "4.1.1", "eventemitter2": "4.1.2", - "execa": "3.3.0", + "execa": "1.0.0", "executable": "4.1.1", "extract-zip": "1.6.7", "fs-extra": "8.1.0", @@ -5592,10 +5645,12 @@ "listr": "0.14.3", "lodash": "4.17.15", "log-symbols": "3.0.0", - "minimist": "1.2.0", + "minimist": "1.2.2", "moment": "2.24.0", + "ospath": "1.2.2", + "pretty-bytes": "5.3.0", "ramda": "0.26.1", - "request": "2.88.0", + "request": "github:cypress-io/request#b5af0d1fa47eec97ba980cde90a13e69a2afcd16", "request-progress": "3.0.0", "supports-color": "7.1.0", "tmp": "0.1.0", @@ -5604,6 +5659,28 @@ "yauzl": "2.10.0" }, "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, "ci-info": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", @@ -5617,38 +5694,37 @@ "dev": true }, "cross-spawn": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.1.tgz", - "integrity": "sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg==", + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, "execa": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-3.3.0.tgz", - "integrity": "sha512-j5Vit5WZR/cbHlqU97+qcnw9WHRCIL4V1SVe75VcHcD1JRBdt8fv0zw89b7CQHQdUHTt2VjuhcF5ibAgVOxqpg==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", "dev": true, "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "p-finally": "^2.0.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" } }, "get-stream": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", - "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "dev": true, "requires": { "pump": "^3.0.0" @@ -5677,12 +5753,6 @@ "ci-info": "^2.0.0" } }, - "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true - }, "log-symbols": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", @@ -5690,70 +5760,12 @@ "dev": true, "requires": { "chalk": "^2.4.2" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "onetime": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", - "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "p-finally": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz", - "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-rIqbOrKb8GJmx/5bc2M0QchhUouMXSpd1RTclXsB41JdL+VtnojfaJR+h7F9k18/4kHUsBFgk80Uk+q569vjPA==", "dev": true }, "pump": { @@ -5766,18 +5778,39 @@ "once": "^1.3.1" } }, - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true - }, "ramda": { "version": "0.26.1", "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.26.1.tgz", "integrity": "sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ==", "dev": true }, + "request": { + "version": "github:cypress-io/request#b5af0d1fa47eec97ba980cde90a13e69a2afcd16", + "from": "github:cypress-io/request#b5af0d1fa47eec97ba980cde90a13e69a2afcd16", + "dev": true, + "requires": { + "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.3", + "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.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + } + }, "rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", @@ -5787,21 +5820,6 @@ "glob": "^7.1.3" } }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, "supports-color": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", @@ -5828,6 +5846,16 @@ "rimraf": "^2.6.3" } }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, "url": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", @@ -5836,15 +5864,14 @@ "requires": { "punycode": "1.3.2", "querystring": "0.2.0" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + } } } } @@ -6643,6 +6670,12 @@ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==", "dev": true }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -7558,7 +7591,7 @@ "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", "dev": true, "requires": { - "pump": "3.0.0" + "pump": "^3.0.0" } }, "is-stream": { @@ -7585,7 +7618,7 @@ "integrity": "sha512-Dbl4A/VfiVGLgQv29URL9xshU8XDY1GeLy+fsaZ1AA8JDSfjvr5P5+pzRbWqRSBxk6/DW7MIh8lTM/PaGnP2kg==", "dev": true, "requires": { - "path-key": "3.1.1" + "path-key": "^3.0.0" } }, "onetime": { @@ -7594,7 +7627,7 @@ "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", "dev": true, "requires": { - "mimic-fn": "2.1.0" + "mimic-fn": "^2.1.0" } }, "p-finally": { @@ -7615,8 +7648,8 @@ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, "requires": { - "end-of-stream": "1.4.1", - "once": "1.4.0" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, "shebang-command": { @@ -9742,9 +9775,9 @@ }, "dependencies": { "async": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/async/-/async-3.1.1.tgz", - "integrity": "sha512-X5Dj8hK1pJNC2Wzo2Rcp9FBVdJMGRR/S7V+lH46s8GVFhtbo5O4Le5GECCF/8PISVdkUA6mMPvgz7qTTD1rf1g==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", + "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==", "dev": true } } @@ -10083,7 +10116,7 @@ }, "readable-stream": { "version": "1.0.34", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { @@ -12745,11 +12778,11 @@ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { - "nice-try": "1.0.5", - "path-key": "2.0.1", - "semver": "5.7.0", - "shebang-command": "1.2.0", - "which": "1.3.1" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, "execa": { @@ -12758,13 +12791,13 @@ "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", "dev": true, "requires": { - "cross-spawn": "6.0.5", - "get-stream": "4.1.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" } }, "get-stdin": { @@ -12779,7 +12812,7 @@ "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "dev": true, "requires": { - "pump": "3.0.0" + "pump": "^3.0.0" } }, "parse-json": { @@ -12788,10 +12821,10 @@ "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==", "dev": true, "requires": { - "@babel/code-frame": "7.0.0", - "error-ex": "1.3.2", - "json-parse-better-errors": "1.0.2", - "lines-and-columns": "1.1.6" + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1", + "lines-and-columns": "^1.1.6" } }, "please-upgrade-node": { @@ -12800,7 +12833,7 @@ "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", "dev": true, "requires": { - "semver-compare": "1.0.0" + "semver-compare": "^1.0.0" } }, "pump": { @@ -12809,8 +12842,8 @@ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, "requires": { - "end-of-stream": "1.4.1", - "once": "1.4.0" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, "read-pkg": { @@ -12819,10 +12852,10 @@ "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, "requires": { - "@types/normalize-package-data": "2.4.0", - "normalize-package-data": "2.5.0", - "parse-json": "5.0.0", - "type-fest": "0.6.0" + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" } }, "slash": { @@ -13924,7 +13957,7 @@ "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", "dev": true, "requires": { - "ci-info": "2.0.0" + "ci-info": "^2.0.0" } }, "is-fullwidth-code-point": { @@ -14182,8 +14215,8 @@ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, "requires": { - "end-of-stream": "1.4.1", - "once": "1.4.0" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, "shebang-command": { @@ -15683,7 +15716,7 @@ "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", "dev": true, "requires": { - "ci-info": "2.0.0" + "ci-info": "^2.0.0" } }, "minimist": { @@ -17890,14 +17923,14 @@ } }, "make-empty-github-commit": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/make-empty-github-commit/-/make-empty-github-commit-1.2.0.tgz", - "integrity": "sha512-Rkme2QetJ4+C0eV32wHGW8myhYM12NL0ComCWIJhhr9fgxcHyCBpaC5Ljb2cdsi44ck20IugyUmlzBqoONtrDg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/make-empty-github-commit/-/make-empty-github-commit-1.2.1.tgz", + "integrity": "sha512-lOZ/CPWEDbao3oaLai1bc1+YQcNKW5eTKrOcG+LF3EXkyj0/Xw6W2PIv+4ZtOJRkLAiyLvZ9/Z+pfr8jV5PAPw==", "dev": true, "requires": { "debug": "3.1.0", "github": "11.0.0", - "minimist": "1.2.0", + "minimist": "1.2.5", "parse-github-repo-url": "1.4.1" }, "dependencies": { @@ -18503,9 +18536,9 @@ } }, "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, "minipass": { "version": "2.3.5", @@ -20007,6 +20040,12 @@ "os-tmpdir": "^1.0.0" } }, + "ospath": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", + "integrity": "sha1-EnZjl3Sj+O8lcvf+QoDg6kVQwHs=", + "dev": true + }, "ow": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/ow/-/ow-0.8.0.tgz", @@ -20721,6 +20760,12 @@ "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=" }, + "pretty-bytes": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.3.0.tgz", + "integrity": "sha512-hjGrh+P926p4R4WbaB6OckyRtO0F0/lQBiT+0gnxjV+5kjPBrfVBFCsCLbMqVQeydvIoouYTCmmEURiH3R1Bdg==", + "dev": true + }, "pretty-data": { "version": "0.40.0", "resolved": "https://registry.npmjs.org/pretty-data/-/pretty-data-0.40.0.tgz", @@ -21230,9 +21275,9 @@ } }, "react-is": { - "version": "16.12.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.12.0.tgz", - "integrity": "sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q==", + "version": "16.13.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.0.tgz", + "integrity": "sha512-GFMtL0vHkiBv9HluwNZTggSn/sCyEt9n02aM0dSAjGGyqyNlAyftYm4phPxdvCigG15JreC5biwxCgTAJZ7yAA==", "dev": true }, "read-chunk": { @@ -22889,7 +22934,7 @@ "dependencies": { "commander": { "version": "2.8.1", - "resolved": "http://registry.npmjs.org/commander/-/commander-2.8.1.tgz", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", "requires": { "graceful-readlink": ">= 1.0.0" @@ -23205,9 +23250,9 @@ } }, "sinon-chai": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/sinon-chai/-/sinon-chai-3.4.0.tgz", - "integrity": "sha512-BpVxsjEkGi6XPbDXrgWUe7Cb1ZzIfxKUbu/MmH5RoUnS7AXpKo3aIYIyQUg0FMvlUL05aPt7VZuAdaeQhEnWxg==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/sinon-chai/-/sinon-chai-3.5.0.tgz", + "integrity": "sha512-IifbusYiQBpUxxFJkR3wTU68xzBN0+bxCScEaKMjBvAQERg6FnTTc1F17rseLb1tjmkJ23730AXpFI0c47FgAg==", "dev": true }, "sisteransi": { @@ -23657,7 +23702,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "requires": { "ansi-styles": "^2.2.1", @@ -23721,15 +23766,15 @@ "dev": true }, "start-server-and-test": { - "version": "1.10.8", - "resolved": "https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-1.10.8.tgz", - "integrity": "sha512-5I190MiIHBqmArTnxk9dfHlwO8I35B1hFhuAgv2L/UMDArRCtIXL/QftgNtgfuIz5NQN3yrN0kCsY+zYkX+dUg==", + "version": "1.10.11", + "resolved": "https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-1.10.11.tgz", + "integrity": "sha512-CZilaj293uQWdD4vgOxTOuzlCWxOyBm6bzmH1r6OGLG/q5zcBmGYevLfOimkg0kSn9jLHwYSXLuoKG/DDQJhww==", "dev": true, "requires": { - "bluebird": "3.7.1", + "bluebird": "3.7.2", "check-more-types": "2.24.0", "debug": "4.1.1", - "execa": "4.0.0", + "execa": "3.4.0", "lazy-ass": "1.6.0", "ps-tree": "1.2.0", "wait-on": "4.0.0" @@ -23742,9 +23787,9 @@ "dev": true }, "@hapi/hoek": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.0.tgz", - "integrity": "sha512-7XYT10CZfPsH7j9F1Jmg1+d0ezOux2oM2GfArAzLwWe4mE2Dr3hVjsAL6+TFY49RRJlCdJDMw3nJsLFroTc8Kw==", + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.1.tgz", + "integrity": "sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==", "dev": true }, "@hapi/joi": { @@ -23753,11 +23798,11 @@ "integrity": "sha512-wAsVvTPe+FwSrsAurNt5vkg3zo+TblvC5Bb1zMVK6SJzZqw9UrJnexxR+76cpePmtUZKHAPxcQ2Bf7oVHyahhg==", "dev": true, "requires": { - "@hapi/address": "2.1.4", - "@hapi/formula": "1.2.0", - "@hapi/hoek": "8.5.0", - "@hapi/pinpoint": "1.0.2", - "@hapi/topo": "3.1.6" + "@hapi/address": "^2.1.2", + "@hapi/formula": "^1.2.0", + "@hapi/hoek": "^8.2.4", + "@hapi/pinpoint": "^1.0.2", + "@hapi/topo": "^3.1.3" } }, "@hapi/topo": { @@ -23766,41 +23811,36 @@ "integrity": "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==", "dev": true, "requires": { - "@hapi/hoek": "8.5.0" + "@hapi/hoek": "^8.3.0" } }, - "bluebird": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.1.tgz", - "integrity": "sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg==", - "dev": true - }, "cross-spawn": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.1.tgz", "integrity": "sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg==", "dev": true, "requires": { - "path-key": "3.1.1", - "shebang-command": "2.0.0", - "which": "2.0.2" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" } }, "execa": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.0.0.tgz", - "integrity": "sha512-JbDUxwV3BoT5ZVXQrSVbAiaXhXUkIwvbhPIwZ0N13kX+5yCzOhUNdocxB/UQRuYOHRYYwAxKYwJYc0T4D12pDA==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-3.4.0.tgz", + "integrity": "sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==", "dev": true, "requires": { - "cross-spawn": "7.0.1", - "get-stream": "5.1.0", - "human-signals": "1.1.1", - "is-stream": "2.0.0", - "merge-stream": "2.0.0", - "npm-run-path": "4.0.1", - "onetime": "5.1.0", - "signal-exit": "3.0.2", - "strip-final-newline": "2.0.0" + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "p-finally": "^2.0.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" } }, "get-stream": { @@ -23809,7 +23849,7 @@ "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", "dev": true, "requires": { - "pump": "3.0.0" + "pump": "^3.0.0" } }, "is-stream": { @@ -23836,7 +23876,7 @@ "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "requires": { - "path-key": "3.1.1" + "path-key": "^3.0.0" } }, "onetime": { @@ -23845,9 +23885,15 @@ "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", "dev": true, "requires": { - "mimic-fn": "2.1.0" + "mimic-fn": "^2.1.0" } }, + "p-finally": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz", + "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==", + "dev": true + }, "path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -23860,17 +23906,8 @@ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, "requires": { - "end-of-stream": "1.4.1", - "once": "1.4.0" - } - }, - "rxjs": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz", - "integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==", - "dev": true, - "requires": { - "tslib": "1.9.3" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, "shebang-command": { @@ -23879,7 +23916,7 @@ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "requires": { - "shebang-regex": "3.0.0" + "shebang-regex": "^3.0.0" } }, "shebang-regex": { @@ -23894,12 +23931,12 @@ "integrity": "sha512-QrW3J8LzS5ADPfD9Rx5S6KJck66xkqyiFKQs9jmUTkIhiEOmkzU7WRZc+MjsnmkrgjitS2xQ4bb13hnlQnKBUQ==", "dev": true, "requires": { - "@hapi/joi": "16.1.8", - "lodash": "4.17.15", - "minimist": "1.2.0", - "request": "2.88.0", - "request-promise-native": "1.0.8", - "rxjs": "6.5.4" + "@hapi/joi": "^16.1.8", + "lodash": "^4.17.15", + "minimist": "^1.2.0", + "request": "^2.88.0", + "request-promise-native": "^1.0.8", + "rxjs": "^6.5.4" } }, "which": { @@ -23908,7 +23945,7 @@ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "requires": { - "isexe": "2.0.0" + "isexe": "^2.0.0" } } } @@ -26029,13 +26066,13 @@ }, "minimist": { "version": "0.0.8", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", "dev": true }, "mkdirp": { "version": "0.5.1", - "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "dev": true, "requires": { @@ -26128,12 +26165,12 @@ } }, "wait-on": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-4.0.0.tgz", - "integrity": "sha512-QrW3J8LzS5ADPfD9Rx5S6KJck66xkqyiFKQs9jmUTkIhiEOmkzU7WRZc+MjsnmkrgjitS2xQ4bb13hnlQnKBUQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-4.0.1.tgz", + "integrity": "sha512-x83fmTH2X0KL7vXoGt9aV5x4SMCvO8A/NbwWpaYYh4NJ16d3KSgbHwBy9dVdHj0B30cEhOFRvDob4fnpUmZxvA==", "dev": true, "requires": { - "@hapi/joi": "^16.1.8", + "@hapi/joi": "^17.1.0", "lodash": "^4.17.15", "minimist": "^1.2.0", "request": "^2.88.0", diff --git a/package.json b/package.json index 4aee01039e..b0fc6c8988 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "version": "3.9.0" }, "engines": { - "node": "^8.6.0" + "node": "^12.8.1" }, "license": "MIT", "bugs": "https://github.com/cypress-io/cypress-documentation/issues", @@ -83,7 +83,7 @@ "@cypress/skip-test": "2.5.0", "@keyv/redis": "github:bahmutov/keyv-redis#b64f44cd1d1e87893d989b1469068af8292299d5", "@types/fluent-ffmpeg": "2.1.14", - "@types/jest": "25.1.2", + "@types/jest": "25.1.4", "beeper": "2.0.0", "bluebird": "3.7.2", "chai": "4.2.0", @@ -91,7 +91,7 @@ "cheerio": "1.0.0-rc.3", "coffee-react": "5.0.1", "common-tags": "1.8.0", - "cypress": "4.0.2", + "cypress": "4.2.0", "dependency-check": "3.4.1", "deps-ok": "1.4.1", "eslint": "6.1.0", @@ -112,8 +112,8 @@ "jest": "25.1.0", "keyv": "4.0.0", "lint-staged": "8.2.1", - "make-empty-github-commit": "1.2.0", - "minimist": "1.2.0", + "make-empty-github-commit": "1.2.1", + "minimist": "1.2.5", "nock": "10.0.6", "ora": "3.4.0", "pluralize": "8.0.0", @@ -121,20 +121,20 @@ "ramda": "0.27.0", "request-promise": "4.2.5", "sinon": "8.1.1", - "sinon-chai": "3.4.0", - "start-server-and-test": "1.10.8", + "sinon-chai": "3.5.0", + "start-server-and-test": "1.10.11", "textlint": "11.6.3", "textlint-filter-rule-comments": "1.2.2", "textlint-rule-eslint": "3.2.1", "textlint-rule-terminology": "2.1.3", "utf8": "3.0.0", - "wait-on": "4.0.0", + "wait-on": "4.0.1", "yamljs": "0.3.0" }, "dependencies": { "@contentful/rich-text-html-renderer": "13.4.0", "check-more-types": "2.24.0", - "contentful": "7.13.1", + "contentful": "7.14.0", "debug": "4.1.1", "docsearch.js": "2.6.3", "font-awesome": "4.7.0", diff --git a/robots.txt b/robots.txt deleted file mode 100644 index b81cb5e8d1..0000000000 --- a/robots.txt +++ /dev/null @@ -1,6 +0,0 @@ -User-agent: * -Disallow: /ja/ -Disallow: /zh-cn/ -Disallow: /pt-br/ -Disallow: /ru/ -Disallow: /fonts/ diff --git a/source/_changelogs/3.1.0.md b/source/_changelogs/3.1.0.md index f6df2061e5..a61c56f8da 100644 --- a/source/_changelogs/3.1.0.md +++ b/source/_changelogs/3.1.0.md @@ -29,7 +29,7 @@ - We have added support for more CI providers to automatically detect and show more relevant information in the Dashboard, instead of showing 'Unknown'. Fixes {% issue 2146 %}. - We have added better checks and reliability for detecting runs in Jenkins. Fixes {% issue 1990 %}. - The built in {% url "`cypress-browserify-preprocessor`" https://github.com/cypress-io/cypress-browserify-preprocessor %} was bumped to `1.1.0`. This supports more JavaScript features by default, including async/await, object rest spread, and class properties. Fixes {% issue 2254 %}. -- {% url "`cypress run`" command-line#cypress-run %} now creates a new browser profile per run per browser, but keeps the same browser profile for interactive mode with {% url "`cypress open`" command-line#cypress-open %}. This means you can run Cypress locally over multiple processes and the browser profiles will not conflict with each other. Fixes {% issue 1566 %}. +- {% url "`cypress run`" command-line#cypress-run %} now creates a new browser profile per run per browser, but keeps the same browser profile when run via {% url "`cypress open`" command-line#cypress-open %}. This means you can run Cypress locally over multiple processes and the browser profiles will not conflict with each other. Fixes {% issue 1566 %}. - The Desktop-GUI has been updated to get the new routes provided by the Cypress API for runs. Fixes {% issue 2189 %}. - Cypress now retries multiple times (with a backoff strategy) when communicating with our API fails while recording runs. This will provide better feedback in situations when the API is temporarily unavailable. Fixes {% issue 1590 %}. - When Cypress retries due to an API timeout or failure it now displays a very nice message indicating to you the delay and number of retries left. Fixes {% issue 2280 %}. diff --git a/source/_changelogs/3.4.0.md b/source/_changelogs/3.4.0.md index 93cea6cfaa..01e67a4201 100644 --- a/source/_changelogs/3.4.0.md +++ b/source/_changelogs/3.4.0.md @@ -24,7 +24,7 @@ - Environment variables for Semaphore 2.0 are now captured when recording tests to the Dashboard. Fixes {% issue 4671 %}. - We now capture environment variables set from Concourse CI when recording tests to the Dashboard. Fixes {% issue 4376 %}. - We replaced capturing environment variables from SnapCI (which is no longer available) to instead capture ones set from GoCD when recording tests to the Dashboard. Fixes {% issue 2680 %}. -- The {% url "JSON schema file" https://on.cypress.io/cypress.schema.json %} used for {% url "intelligent code completion" https://on.cypress.io/intelligent-code-completion#Configuration %} for the Cypress configuration file has been updated to match our documentation. +- The {% url "JSON schema file" https://on.cypress.io/cypress.schema.json %} used for {% url "intelligent code completion" IDE-integration#Intelligent-Code-Completion %} for the Cypress configuration file has been updated to match our documentation. **Documentation Changes:** diff --git a/source/_changelogs/3.8.0.md b/source/_changelogs/3.8.0.md index a6b7d761e2..fcf770786f 100644 --- a/source/_changelogs/3.8.0.md +++ b/source/_changelogs/3.8.0.md @@ -17,7 +17,7 @@ - We fixed a regression in {% url "3.5.0" changelog-3-5-0 %} where calling `.type({ force: true })` on hidden inputs would not type the correct characters. Fixes {% issue 5835 %}. - We fixed a regression in {% url "3.5.0" changelog-3-5-0 %} where {% url "`.type()`" type %} was not respecting previous selections if the current value of the input was the same as the key. This also fixed an where {% url "`.type()`" type %} would not respect previous selections in non-selectionRange inputs (like email or number inputs). Fixes {% issue 5703 %}. - During visibility checks, Cypress now properly evaluates a DOM element transformed by `scale(0)` or `rotateY(90deg)` as not visible. Fixes {% issue 723 %}. -- Fixed a bug where the specs list in interactive mode would not refresh when files are changed on disk. Fixes {% issue 5933 %}. +- Fixed a bug where the specs list during `cypress open` would not refresh when files are changed on disk. Fixes {% issue 5933 %}. - `env` configuration option displays properly within the settings panel. Previously, setting env options would incorrectly render `"undefined"` as the value. Fixes {% issue 5859 %}. **Misc:** diff --git a/source/_changelogs/3.8.3.md b/source/_changelogs/3.8.3.md index b8a31d798e..8d94b349cc 100644 --- a/source/_changelogs/3.8.3.md +++ b/source/_changelogs/3.8.3.md @@ -17,7 +17,6 @@ **Dependency Updates:** -- Upgraded `electron` from `7.1.9` to `7.1.10`. Addressed in {% PR 6242 %}. -- Upgraded `electron` from `7.1.7` to `7.1.9`. Addressed in {% PR 6180 %}. +- Upgraded `electron` from `7.1.7` to `7.1.10`. Addressed in {% PR 6180 %} and {% PR 6242 %}. - Upgraded `http-status-codes` from `1.3.2` to `1.4.0`. Addressed in {% PR 6134 %}. - Upgraded `socket.io` and `socket.io-client` from `2.2.0` to `2.3.0`. Addressed in {% PR 6179 %}. diff --git a/source/_changelogs/4.0.0.md b/source/_changelogs/4.0.0.md index 9e7ff77481..d2efa5daf6 100644 --- a/source/_changelogs/4.0.0.md +++ b/source/_changelogs/4.0.0.md @@ -48,7 +48,7 @@ Cypress 4.0.0 includes support for {% url "Mozilla Firefox" https://www.mozilla. - The browser icons in the Test Runner now display as images with the proper branding. Addresses {% issue 6188 %}. - We updated the styling of browser dropdown in the Test Runner to look more like a button. Addresses {% issue 6298 %}. - The timer in the Test Runner now always displays at a consistent length. Addresses {% issue 6168 %}. -- You can print debug information about the memory & CPU usage of Cypress, which can be accessed by enabling the {% url "`cypress:server:util:process_profiler` debug stream" debugging#Log-memory-and-CPU-usage %}. Addresses {% issue 6169 %}. +- You can print debug information about the memory & CPU usage of Cypress, which can be accessed by enabling the {% url "`cypress:server:util:process_profiler` debug stream" troubleshooting#Log-memory-and-CPU-usage %}. Addresses {% issue 6169 %}. - We added types for plugin events. Addresses {% issue 6322 %}. **Dependency Updates** diff --git a/source/_changelogs/4.0.2.md b/source/_changelogs/4.0.2.md index 5e92d5085e..1fd6127485 100644 --- a/source/_changelogs/4.0.2.md +++ b/source/_changelogs/4.0.2.md @@ -4,13 +4,17 @@ **Bugfixes:** -- Fixed a bug where Firefox tests could fail to run on macOS if another instance of Firefox was open. Addresses {% issue 6380 %}. -- Updated `@cypress/browserify-preprocessor` to `2.1.4`, fixing a regression involving non-top-level `require()`s in tests. Addresses {% issue 6403 %}. -- Fixed a bug where re-running a failed workflow in GitHub Actions would not generate a new Dashboard run. Addresses {% issue 6450 %}. -- Fixed incorrect type definitions for `Cypress.isBrowser`. Addresses {% issue 6447 %}. -- Fixed a regression introduced in 4.0.0 where using `.should('contain', ...)` on a `cy.contains()` would produce unexpected results. Addresses {% issue 6384 %}. +- We fixed a bug where tests in Firefox would not open on macOS if another instance of Firefox was open. Fixes {% issue 6380 %}. +- We fixed a regression in {% url "4.0.0" changelog-4-0-0 %} where using `.should('not.contain', ...)` chained after a {% url "`.contains()`" contains %} would produce unexpected results. Fixes {% issue 6384 %}. +- We fixed a regression in {% url "4.0.0" changelog-4-0-0 %} where non-top-level `require()`s in tests no longer worked. Fixes {% issue 6403 %}. +- Re-running a failed workflow in GitHub Actions now properly generates a new Dashboard run. Fixes {% issue 6450 %}. **Misc:** -- Improved the error experience GUI when launching a browser fails. Addresses {% issue 6432 %}. -- Improved the error experience when visiting the Cypress server outside of a Cypress-launched browser. Addresses {% issue 6435 %}. +- We fixed incorrect type definitions for {% url "`Cypress.isBrowser`" isbrowser %}. Addresses {% issue 6447 %}. +- We improved the error experience when launching a browser fails. Addresses {% issue 6432 %}. +- We improved the error experience when visiting the Cypress server outside of a Cypress-launched browser. Addresses {% issue 6435 %}. + +**Dependency Updates** + +- Upgraded `@cypress/browserify-preprocessor` from `2.1.1` to `2.1.4`. Addressed in {% PR 6419 %}. diff --git a/source/_changelogs/4.1.0.md b/source/_changelogs/4.1.0.md new file mode 100644 index 0000000000..83beda40e5 --- /dev/null +++ b/source/_changelogs/4.1.0.md @@ -0,0 +1,34 @@ +# 4.1.0 + +*Released 2/28/2020* + +**Features:** + +- There is a new `cypress info` command to see the locally detected browsers and other information related to Cypress. Addresses {% issue 4540 %}. +- You can now click a 'Try Again' button to recheck if the server at the designated `baseUrl` is running within the warning message during `cypress open`. Addresses {% issue 3284 %}. +- There are "collapse all" and "expand all" links in the Test Runner's "Tests" tab to collapse or expand all folders within the "Integration Tests". Addresses {% issue 6282 %}. +- The plugins file function's {% url "`config`" configuration-api %} argument now includes `projectRoot` (absolute path to the root of the project) and `configFile` (absolute path to the configuration file). Addresses {% issue 5941 %}. + +**Bugfixes:** + +- Fixed a regression in {% url "4.0.2" changelog-4-0-2 %} where Cypress could throw a "Maximum call stack size exceeded" error when transmitting a circular object over the internal WebSocket. Fixes {% issue 6582 %}. +- We fixed an issue where using Chromium-family browsers could cause Cypress to throw a "WebSocket is not open: readyState 3" error under certain conditions. Fixes {% issue 5685 %}. +- We now more thoroughly ensure the parent of an element exists when recursively calling visibility and existence checks in order to prevent some maximum call stack errors. Fixes {% issue 4373 %}. +- We fixed an issue where a maximum call stack error would throw in some circumstances when `xhr.onreadystatechange` is accessed. Fixes {% issue 5864 %}. +- We fixed a regression in {% url "3.5.0" changelog-3-5-0 %} where typing into an iframe with a body element with the contenteditable attribute would throw an error. Fixes {% issue 5930 %}. +- We now set the default window size when running Chrome headlessly to 1280x720. Fixes {% issue 6210 %}. +- We fixed an issue where `cypress install` would not complete on Node.js 8.0.0. Fixes {% issue 6512 %} and {% issue 6568 %}. +- {% url "`cy.clearLocalStorage()`" clearlocalstorage %} now properly accepts the `log` option to disable logging. Fixes {% issue 6342 %}. + +**Misc:** + +- The error messages displayed when rerouting to a non same-origin domain has been updated to more accurately reflect the rules around same-origin policy. Addresses {% issue 6048 %}. +- We fixed an error message that would display the wrong available browser families during validation. Addressed in {% PR 6517 %}. +- We fixed some typos in some of our error messages. Addressed in {% PR 6508 %}. +- We're collecting more environment variables when running Cypress with GitLab CI. Addresses {% issue 6231 %}. +- The typing of `cy.$$` has been updated to distinguish differences between it and `Cypress.$`. {% url "More info here" $#Cypress-vs-cy %} Addresses {% issue 2027 %}. +- We're continuing to make progress in converting our codebase from CoffeeScript to JavaScript. Addresses {% issue 2690 %} in {% PR 6552 %}, {% PR 6523 %}, and {% PR 6545 %}. + +**Dependency Updates** + +- Upgraded `electron` from `7.1.10` to `7.1.13`. Addressed in {% PR 6566 %}. diff --git a/source/_changelogs/4.2.0.md b/source/_changelogs/4.2.0.md new file mode 100644 index 0000000000..7795cee236 --- /dev/null +++ b/source/_changelogs/4.2.0.md @@ -0,0 +1,41 @@ +# 4.2.0 + +*Released 3/16/2020* + +**Features:** + +- Videos can now be recorded when running Electron in `--headed` mode. Addresses {% issue 1767 %}. +- {% url "`cypress cache list`" command-line#cypress-cache-list %} now prints the last time the cached binary was accessed for each version present. Addresses {% issue 6682 %}. + +**Bugfixes:** + +- We fixed a regression in {% url "3.8.3" changelog-3-8-3 %} where HTTPS requests could experience slowdown. Fixes {% issue 6659 %}. +- We now detect some installations of Firefox that were previously undetected. Fixes {% issue 6669 %}. +- We fixed a race condition where an asynchronous error could fail to be caught when running the plugins file process. Fixes {% issue 6570 %}. +- We now more thoroughly ensure the parent of an element exists when recursively calling actionability checks in order to prevent some maximum call stack errors. Fixes {% issue 6707 %}. +- Specfiles containing `&` or `%` characters now correctly run instead of erroring. Fixes {% issue 4210 %}. +- We added support for running tests on Jira plugins even when Jira scripts were not minified. Fixes {% issue 1436 %}. +- We fixed a bug causing specs to hang after rerunning tests during `cypress open` when there was an exception if thrown in an `after` hook. Fixes {% issue 6619 %}. +- {% url "`cypress verify`" command-line#cypress-verify %} no longer incorrectly prints messaging about this being the first time using that Cypress version. Fixes {% issue 6607 %}. +- Screenshots no longer fail to be taken in Electron when Cypress `DEBUG` logs are enabled. Fixes {% issue 6662 %}. + +**Misc:** + +- A warning is now printed when setting the reserved key `CYPRESS_INTERNAL_ENV` to a non-production value. Addresses {% issue 6436 %}. +- When DEBUG logs are printed from `cypress:launcher`, they now print a clearer log during browser detection for easier reading. Addresses {% issue 6700 %}. +- The Test Runner now renders ANSI colors when there is a syntax error in the spec file. Addresses {% issue 6533 %}. +- The Test Runner now has an icon indicating whether the specs list parent folder is collapsed. Addresses {% issue 6277 %}. +- There's better type information for {% url "`.click`" click %}, {% url "`.dblclick`" dblclick %}, and {% url "`.rightclick`" rightclick %} command's `position` argument. Addresses {% issue 6341 %}. +- There's a more robust type signature for {% url "`.its()`" its %} and {% url "`.invoke()`" invoke %}. Addresses {% issue 6431 %}. +- Using {% url "`Cypress.dom.isDetached`" dom#Is-detached %} no longer throws a type error in TypeScript projects. Addresses {% issue 4408 %}. +- Using {% url "`cy.clearLocalStorage({ log:false })`" clearlocalstorage %} no longer throws a type error in TypeScript projects. Addresses {% issue 6615 %}. +- We added types for {% url "`Cypress.sinon`" sinon %}. Addresses {% issue 6720 %}. +- We've added the foundational work required to support experimental features in the Test Runner. Addresses {% issue 6257 %}. + +**Dependency Updates** + +- Upgraded Chrome browser version used during `cypress run` and when selecting Electron browser in `cypress open` from `78` to `80`. Addressed in {% PR 6555 %}. +- Upgraded `electron` from `7.1.13` to `8.1.1`. This bumps the bundled Chromium to 80.0.3987.141 and the bundled Node to 12.13.0. Addressed in {% PR 6555 %}. +- Upgraded `@ffmpeg-installer/ffmpeg` from `1.0.19` to `1.0.20`. Addressed in {% PR 6686 %}. +- Upgraded `minimist` from `1.2.0` to `1.2.2`. Addressed in {% PR 6726 %}. +- Replaced deprecated `request` with `cypress-io/request`. Addressed in {% PR 6679 %}. diff --git a/source/_data/plugins.yml b/source/_data/plugins.yml index 3bcfd54bf6..4c263251d8 100755 --- a/source/_data/plugins.yml +++ b/source/_data/plugins.yml @@ -341,6 +341,11 @@ link: https://github.com/matzeeable/wp-reactjs-starter keywords: [wp, wordpress] + - name: Next Right Now - Next.js Boilerplate + description: Next.js boilerplate with Jest/Cypress and CI/CD pipeline built-in (monorepo, multi-tenants) + link: https://github.com/UnlyEd/next-right-now + keywords: [next.js, react, monorepo, multi-tenants] + - name: Elm Batteries Included description: A project template to learn how Elm, Parcel, Cypress and Netlify work together. link: https://github.com/cedricss/elm-batteries @@ -395,7 +400,7 @@ keywords: [component, vue, vue.js] - name: Visual Testing - description: + description: Visual testing is a great complement to functional testing, read our {% url "full visual testing guide" visual-testing %} plugins: - name: Applitools description: Fast, easy and reliable visual UI testing with Cypress @@ -407,6 +412,11 @@ link: https://docs.percy.io/docs/cypress keywords: [screenshots, visual regression] + - name: Happo + description: Cross-platform, cross-browser screenshot testing for modern user interfaces. + link: https://github.com/happo/happo-cypress + keywords: [screenshots, visual regression] + - name: cypress-plugin-snapshots description: Plugin for snapshot tests in Cypress. Same API as Jest, but with graphical interface for reviewing and approving changes. link: https://github.com/meinaart/cypress-plugin-snapshots diff --git a/source/_data/projects.yml b/source/_data/projects.yml index 4a88c2d4bd..1e10c4b1dd 100644 --- a/source/_data/projects.yml +++ b/source/_data/projects.yml @@ -36,6 +36,17 @@ description: A graphical interactive in-browser GraphQL IDE url: https://github.com/graphql/graphiql/tree/master/packages/graphiql +- name: What Got Done + description: An easy, lightweight tool for sharing your weekly progress reports. + url: https://github.com/mtlynch/whatgotdone - name: React Admin description: A frontend Framework for building B2B applications running in the browser on top of REST/GraphQL APIs, using ES6, React and Material Design url: https://github.com/marmelab/react-admin + +- name: Webiny + description: Serverless CMS (GraphQL + React + Node.js + AWS Lambda) + url: https://github.com/webiny/webiny-js + +- name: Userbase + description: Create secure and private web apps using only static JavaScript, HTML, and CSS. + url: https://github.com/encrypted-dev/userbase diff --git a/source/_data/sidebar.yml b/source/_data/sidebar.yml index ac40c485c7..7a946861a9 100644 --- a/source/_data/sidebar.yml +++ b/source/_data/sidebar.yml @@ -36,7 +36,7 @@ guides: cross-browser-testing: cross-browser-testing.html web-security: web-security.html tooling: - intelligent-code-completion: intelligent-code-completion.html + IDE-integration: IDE-integration.html plugins-guide: plugins-guide.html reporters: reporters.html typescript-support: typescript-support.html @@ -51,6 +51,7 @@ guides: error-messages: error-messages.html bundled-tools: bundled-tools.html trade-offs: trade-offs.html + troubleshooting: troubleshooting.html changelog: changelog.html migration-guide: migration-guide.html roadmap: roadmap.html @@ -151,6 +152,7 @@ api: minimatch: minimatch.html moment: moment.html promise: promise.html + sinon: sinon.html cypress-api: custom-commands: custom-commands.html cookies: cookies.html diff --git a/source/_data/webinars.yml b/source/_data/webinars.yml index b032728781..8c6bdeaf9b 100644 --- a/source/_data/webinars.yml +++ b/source/_data/webinars.yml @@ -1,5 +1,24 @@ +# small links with title and url +# Using this to post subscribe to updates link +small: + - title: "Get notified of upcoming webcasts by subscribing to emails from Cypress" + sourceUrl: https://go.cypress.io/subscribe + - title: "Follow us on Twitter!" + sourceUrl: https://twitter.com/Cypress_io + # large links with thumbnails, links, embedded video large: + - title: "CircleCI and Cypress.io: Easily integrate end to end web application testing" + date: Dec 10, 2018 + author: Cypress & CircleCI with Gleb Bahmutov & Eddie Webb + youtubeId: J-xbNtKgXfY + slides: https://slides.com/bahmutov/circleci-cypress-orb + + - title: "Cypress + Gatsby: Confidently fast web development" + date: Sep 4, 2019 + author: Cypress & Gatsby with Amir Rustamzadeh & Dustin Schau + youtubeId: Tx6Lg9mwcCE + - title: "From Zero to Hero with Cypress: Slido’s journey of creating E2E tests without JS experience" date: Aug 7, 2019 author: Cypress & sli.do with Filip Hric, Lubo Droby, & Steven Yi diff --git a/source/api/commands/hover.md b/source/api/commands/hover.md index a7b58369a2..91b70017ba 100644 --- a/source/api/commands/hover.md +++ b/source/api/commands/hover.md @@ -22,6 +22,12 @@ Oftentimes you can use {% url `.trigger()` trigger %}, {% url `.invoke()` invoke If the hover behavior depends on a JavaScript event like `mouseover`, you can trigger the event to achieve that behavior. +{% note danger %} +Using `.trigger()` will only affect events in JavaScript and will not trigger any effects in CSS. +{% endnote %} + +As a workaround, check out the {% url 'recipe leveraging Chrome remote debugging' recipes#Fundamentals %} to set pseudo classes like `hover`. + ### Simulating `mouseover` event to get popover to display ```javascript diff --git a/source/api/commands/invoke.md b/source/api/commands/invoke.md index ce33b190c7..88a12d75a0 100644 --- a/source/api/commands/invoke.md +++ b/source/api/commands/invoke.md @@ -24,13 +24,13 @@ If you want to get a property that is not a function on the previously yielded s ```javascript cy.wrap({ animate: fn }).invoke('animate') // Invoke the 'animate' function -cy.get('.modal').invoke('show') // Invoke the jQuery 'show' function +cy.get('.modal').invoke('show') // Invoke the jQuery 'show' function ``` **{% fa fa-exclamation-triangle red %} Incorrect Usage** ```javascript -cy.invoke('convert') // Errors, cannot be chained off 'cy' +cy.invoke('convert') // Errors, cannot be chained off 'cy' cy.wrap({ name: 'Jane' }).invoke('name') // Errors, 'name' is not a function ``` @@ -77,11 +77,11 @@ cy.wrap({ foo: fn }).invoke('foo').should('eq', 'bar') // true In the example below, we use `.invoke()` to force a hidden div to be `'display: block'` so we can interact with its children elements. ```javascript -cy.get('div.container').should('be.hidden') // true - +cy.get('div.container').should('be.hidden') // element is hidden .invoke('show') // call jquery method 'show' on the '.container' - .should('be.visible') // true - .find('input').type('Cypress is great') + .should('be.visible') // element is visible now + .find('input') // drill down into a child "input" element + .type('Cypress is great') // and type text ``` ### Use `.invoke('show')` and `.invoke('trigger')` @@ -142,7 +142,7 @@ Our input field ``` -The Cypress Test with `cy.inkoke()` awaiting the promise: +The Cypress Test with `cy.invoke()` awaiting the promise: ```javascript function disableElementAsync (element) { return new Promise((resolve) => { @@ -194,6 +194,30 @@ cy .invoke('val').should('match', /apples/) ``` +## Retries + +`.invoke()` automatically retries invoking the specified method until the returned value satisfies the attached assertions. The example below passes after 1 second. + +```javascript +let message = 'hello' +const english = { + greeting () { + return message + } +} + +setTimeout(() => { + message = 'bye' +}, 1000) + +// initially the english.greeting() returns "hello" failing the assertion. +// .invoke('greeting') tries again and again until after 1 second +// the returned message becomes "bye" and the assertion passes +cy.wrap(english).invoke('greeting').should('equal', 'bye') +``` + +{% imgTag /img/api/invoke/invoke-retries.gif "Invoke retries example" width-600 %} + # Rules ## Requirements {% helper_icon requirements %} diff --git a/source/api/commands/select.md b/source/api/commands/select.md index c664e6732c..01aaec6065 100644 --- a/source/api/commands/select.md +++ b/source/api/commands/select.md @@ -162,4 +162,5 @@ When clicking on `select` within the command log, the console outputs the follow # See also +- Read {% url 'Working with Select elements and Select2 widgets in Cypress' https://www.cypress.io/blog/2020/03/20/working-with-select-elements-and-select2-widgets-in-cypress/ %} - {% url `.click()` click %} diff --git a/source/api/commands/should.md b/source/api/commands/should.md index 6af775df62..c209d14bbc 100644 --- a/source/api/commands/should.md +++ b/source/api/commands/should.md @@ -174,10 +174,9 @@ cy }) ``` -{% note warning %} -Any value returned from a `.should()` callback function will be ignored. The original subject will be yielded to the next command. +**{% fa fa-warning red %} Warning** Any value returned from a `.should()` callback function will be ignored. The original subject will be yielded to the next command. -``` +```js cy .get('p') .should(($p) => { @@ -189,7 +188,6 @@ cy // the argument $p will be the 3 elements, not "foo" }) ``` -{% endnote %} ### Assert class name contains `heading-` @@ -236,9 +234,9 @@ cy.get('.docs-header') }) ``` -### Assert text contents of 3 elements +### Assert text content of 3 elements -Example below first asserts that there are 3 elements, and then checks the text contents of each one. +Example below first asserts that there are 3 elements, and then checks the text content of each one. ```html