diff --git a/circle.yml b/circle.yml index 8d639bcb..e24b2a6e 100644 --- a/circle.yml +++ b/circle.yml @@ -99,6 +99,19 @@ workflows: - store_artifacts: path: examples/visual-sudoku/cypress/snapshots + - cypress/run: + name: Visual with Applitools + executor: base-12-16-2 + requires: + - Install + # each example installs "cypress-react-unit-test" as a local dependency (symlink) + install-command: npm install + verify-command: echo 'Already verified' + no-workspace: true + working_directory: examples/visual-testing-with-applitools + command: npm test + store_artifacts: true + - cypress/run: name: Visual with Percy executor: base-12-16-2 @@ -169,6 +182,7 @@ workflows: - Visual Sudoku - Visual with Percy - Visual with Happo + - Visual with Applitools install-command: echo 'Already installed' verify-command: echo 'Already verified' no-workspace: true diff --git a/examples/visual-testing-with-applitools/.gitignore b/examples/visual-testing-with-applitools/.gitignore new file mode 100644 index 00000000..4d29575d --- /dev/null +++ b/examples/visual-testing-with-applitools/.gitignore @@ -0,0 +1,23 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# production +/build + +# misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* diff --git a/examples/visual-testing-with-applitools/.npmrc b/examples/visual-testing-with-applitools/.npmrc new file mode 100644 index 00000000..43c97e71 --- /dev/null +++ b/examples/visual-testing-with-applitools/.npmrc @@ -0,0 +1 @@ +package-lock=false diff --git a/examples/visual-testing-with-applitools/README.md b/examples/visual-testing-with-applitools/README.md new file mode 100644 index 00000000..c935c33e --- /dev/null +++ b/examples/visual-testing-with-applitools/README.md @@ -0,0 +1,13 @@ +# example: visual testing using Applitools + +Shows how to use Applitools to visually check React charts made with [Victory](https://formidable.com/open-source/victory/) library. + +![Screenshot](images/eyes.png) + +See [src/Chart.spec.js](src/Chart.spec.js) + +The `cy.eyes*` commands are ignored during local interactive run. On CI, the `cy.eyes*` send the snapshots to Applitools servers to be analyzed and compared against the baseline images. + +![Test result](images/result.png) + +For more information, see [Applitools tutorial](https://applitools.com/tutorials/cypress.html) diff --git a/examples/visual-testing-with-applitools/cypress.json b/examples/visual-testing-with-applitools/cypress.json new file mode 100644 index 00000000..62cffa5d --- /dev/null +++ b/examples/visual-testing-with-applitools/cypress.json @@ -0,0 +1,12 @@ +{ + "fixturesFolder": false, + "testFiles": "**/*spec.js", + "viewportWidth": 1000, + "viewportHeight": 1000, + "experimentalComponentTesting": true, + "componentFolder": "src", + "video": false, + "env": { + "coverage": false + } +} diff --git a/examples/visual-testing-with-applitools/cypress/integration/cy-spec.js b/examples/visual-testing-with-applitools/cypress/integration/cy-spec.js new file mode 100644 index 00000000..d815fd54 --- /dev/null +++ b/examples/visual-testing-with-applitools/cypress/integration/cy-spec.js @@ -0,0 +1,6 @@ +/// +describe('integration spec', () => { + it('works', () => { + expect(1).to.equal(1) + }) +}) diff --git a/examples/visual-testing-with-applitools/cypress/plugins/index.js b/examples/visual-testing-with-applitools/cypress/plugins/index.js new file mode 100644 index 00000000..50871b69 --- /dev/null +++ b/examples/visual-testing-with-applitools/cypress/plugins/index.js @@ -0,0 +1,8 @@ +const preprocessor = require('../../../../plugins/react-scripts') +module.exports = (on, config) => { + preprocessor(on, config) + // IMPORTANT to return the config object + // with the any changed environment variables + return config +} +require('@applitools/eyes-cypress')(module) diff --git a/examples/visual-testing-with-applitools/cypress/support/index.js b/examples/visual-testing-with-applitools/cypress/support/index.js new file mode 100644 index 00000000..54bd2c85 --- /dev/null +++ b/examples/visual-testing-with-applitools/cypress/support/index.js @@ -0,0 +1,2 @@ +require('cypress-react-unit-test/dist/hooks') +require('@applitools/eyes-cypress/commands') diff --git a/examples/visual-testing-with-applitools/images/eyes.png b/examples/visual-testing-with-applitools/images/eyes.png new file mode 100644 index 00000000..bc7b9cbd Binary files /dev/null and b/examples/visual-testing-with-applitools/images/eyes.png differ diff --git a/examples/visual-testing-with-applitools/images/result.png b/examples/visual-testing-with-applitools/images/result.png new file mode 100644 index 00000000..a91032d4 Binary files /dev/null and b/examples/visual-testing-with-applitools/images/result.png differ diff --git a/examples/visual-testing-with-applitools/package.json b/examples/visual-testing-with-applitools/package.json new file mode 100644 index 00000000..77cec585 --- /dev/null +++ b/examples/visual-testing-with-applitools/package.json @@ -0,0 +1,12 @@ +{ + "name": "example-visual-testing-with-applitools", + "description": "Visual diffing for component testing using Applittols", + "private": true, + "scripts": { + "test": "../../node_modules/.bin/cypress run", + "cy:open": "../../node_modules/.bin/cypress open" + }, + "devDependencies": { + "cypress-react-unit-test": "file:../.." + } +} diff --git a/examples/visual-testing-with-applitools/src/Chart.js b/examples/visual-testing-with-applitools/src/Chart.js new file mode 100644 index 00000000..d3324f86 --- /dev/null +++ b/examples/visual-testing-with-applitools/src/Chart.js @@ -0,0 +1,285 @@ +// @ts-check +import React from 'react' +import { VictoryLabel, VictoryAxis, VictoryLine } from 'victory' + +export class CustomTheme extends React.Component { + render() { + const styles = this.getStyles() + const dataSetOne = this.getDataSetOne() + const dataSetTwo = this.getDataSetTwo() + const tickValues = this.getTickValues() + + return ( + + {/* Create stylistic elements */} + + + + {/* Define labels */} + + + + + + + {/* Add shared independent axis */} + { + if (x.getFullYear() === 2000) { + return x.getFullYear() + } + if (x.getFullYear() % 5 === 0) { + return x + .getFullYear() + .toString() + .slice(2) + } + }} + /> + + {/* + Add the dependent axis for the first data set. + Note that all components plotted against this axis will have the same y domain + */} + + + {/* Red annotation line */} + + + {/* dataset one */} + + + {/* + Add the dependent axis for the second data set. + Note that all components plotted against this axis will have the same y domain + */} + + + {/* dataset two */} + + + + ) + } + + getDataSetOne() { + return [ + { x: new Date(2000, 1, 1), y: 12 }, + { x: new Date(2000, 6, 1), y: 10 }, + { x: new Date(2000, 12, 1), y: 11 }, + { x: new Date(2001, 1, 1), y: 5 }, + { x: new Date(2002, 1, 1), y: 4 }, + { x: new Date(2003, 1, 1), y: 6 }, + { x: new Date(2004, 1, 1), y: 5 }, + { x: new Date(2005, 1, 1), y: 7 }, + { x: new Date(2006, 1, 1), y: 8 }, + { x: new Date(2007, 1, 1), y: 9 }, + { x: new Date(2008, 1, 1), y: -8.5 }, + { x: new Date(2009, 1, 1), y: -9 }, + { x: new Date(2010, 1, 1), y: 5 }, + { x: new Date(2013, 1, 1), y: 1 }, + { x: new Date(2014, 1, 1), y: 2 }, + { x: new Date(2015, 1, 1), y: -5 }, + ] + } + + getDataSetTwo() { + return [ + { x: new Date(2000, 1, 1), y: 5 }, + { x: new Date(2003, 1, 1), y: 6 }, + { x: new Date(2004, 1, 1), y: 4 }, + { x: new Date(2005, 1, 1), y: 10 }, + { x: new Date(2006, 1, 1), y: 12 }, + { x: new Date(2007, 2, 1), y: 48 }, + { x: new Date(2008, 1, 1), y: 19 }, + { x: new Date(2009, 1, 1), y: 31 }, + { x: new Date(2011, 1, 1), y: 49 }, + { x: new Date(2014, 1, 1), y: 40 }, + { x: new Date(2015, 1, 1), y: 21 }, + ] + } + + getTickValues() { + return [ + new Date(1999, 1, 1), + new Date(2000, 1, 1), + new Date(2001, 1, 1), + new Date(2002, 1, 1), + new Date(2003, 1, 1), + new Date(2004, 1, 1), + new Date(2005, 1, 1), + new Date(2006, 1, 1), + new Date(2007, 1, 1), + new Date(2008, 1, 1), + new Date(2009, 1, 1), + new Date(2010, 1, 1), + new Date(2011, 1, 1), + new Date(2012, 1, 1), + new Date(2013, 1, 1), + new Date(2014, 1, 1), + new Date(2015, 1, 1), + new Date(2016, 1, 1), + ] + } + + getStyles() { + const BLUE_COLOR = '#00a3de' + const RED_COLOR = '#7c270b' + + return { + parent: { + background: '#ccdee8', + boxSizing: 'border-box', + display: 'inline', + padding: 0, + fontFamily: "'Fira Sans', sans-serif", + }, + title: { + textAnchor: 'start', + verticalAnchor: 'end', + fill: '#000000', + fontFamily: 'inherit', + fontSize: '18px', + fontWeight: 'bold', + }, + labelNumber: { + textAnchor: 'middle', + fill: '#ffffff', + fontFamily: 'inherit', + fontSize: '14px', + }, + + // INDEPENDENT AXIS + axisYears: { + axis: { stroke: 'black', strokeWidth: 1 }, + ticks: { + size: ({ tick }) => { + const tickSize = tick.getFullYear() % 5 === 0 ? 10 : 5 + return tickSize + }, + stroke: 'black', + strokeWidth: 1, + }, + tickLabels: { + fill: 'black', + fontFamily: 'inherit', + fontSize: 16, + }, + }, + + // DATA SET ONE + axisOne: { + grid: { + stroke: ({ tick }) => (tick === -10 ? 'transparent' : '#ffffff'), + strokeWidth: 2, + }, + axis: { stroke: BLUE_COLOR, strokeWidth: 0 }, + ticks: { strokeWidth: 0 }, + tickLabels: { + fill: BLUE_COLOR, + fontFamily: 'inherit', + fontSize: 16, + }, + }, + labelOne: { + fill: BLUE_COLOR, + fontFamily: 'inherit', + fontSize: 12, + fontStyle: 'italic', + }, + lineOne: { + data: { stroke: BLUE_COLOR, strokeWidth: 4.5 }, + }, + axisOneCustomLabel: { + fill: BLUE_COLOR, + fontFamily: 'inherit', + fontWeight: 300, + fontSize: 21, + }, + + // DATA SET TWO + axisTwo: { + axis: { stroke: RED_COLOR, strokeWidth: 0 }, + tickLabels: { + fill: RED_COLOR, + fontFamily: 'inherit', + fontSize: 16, + }, + }, + labelTwo: { + textAnchor: 'end', + fill: RED_COLOR, + fontFamily: 'inherit', + fontSize: 12, + fontStyle: 'italic', + }, + lineTwo: { + data: { stroke: RED_COLOR, strokeWidth: 4.5 }, + }, + + // HORIZONTAL LINE + lineThree: { + data: { stroke: '#e95f46', strokeWidth: 2 }, + }, + } + } +} diff --git a/examples/visual-testing-with-applitools/src/Chart.spec.js b/examples/visual-testing-with-applitools/src/Chart.spec.js new file mode 100644 index 00000000..21b9a52e --- /dev/null +++ b/examples/visual-testing-with-applitools/src/Chart.spec.js @@ -0,0 +1,29 @@ +/// +import React from 'react' +import { mount } from 'cypress-react-unit-test' +import { CustomTheme } from './Chart' + +describe('Chart', () => { + it('shows the chart', () => { + // Applitools commands like "cy.eyes*" + // https://www.npmjs.com/package/@applitools/eyes-cypress + cy.eyesOpen({ + appName: 'cypress-react-unit-test', + testName: 'Chart example', + browser: [ + { + width: Cypress.config('viewportWidth'), + height: Cypress.config('viewportHeight'), + name: 'firefox', + }, + ], + // ignore "cy.eyes*" commands when using "cypress open" + isDisabled: Cypress.config('isInteractive'), + }) + + mount() + + cy.eyesCheckWindow('Chart') + cy.eyesClose() + }) +}) diff --git a/package-lock.json b/package-lock.json index 91575d14..0ccb2d62 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,6 +4,520 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "@applitools/dom-snapshot": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/@applitools/dom-snapshot/-/dom-snapshot-3.5.2.tgz", + "integrity": "sha512-7N5V0kkkyVGbMZb8b3sNJpHHtQ6W+pLJ6uqgArIvcBn75yfkiA30KmTV4i5pAm1T13MyCukntWXL0znMMN7uJg==", + "dev": true, + "requires": { + "@applitools/functional-commons": "^1.5.4", + "css-tree": "^1.0.0-alpha.39" + }, + "dependencies": { + "css-tree": { + "version": "1.0.0-alpha.39", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.39.tgz", + "integrity": "sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA==", + "dev": true, + "requires": { + "mdn-data": "2.0.6", + "source-map": "^0.6.1" + } + }, + "mdn-data": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.6.tgz", + "integrity": "sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "@applitools/eyes-common": { + "version": "3.24.0", + "resolved": "https://registry.npmjs.org/@applitools/eyes-common/-/eyes-common-3.24.0.tgz", + "integrity": "sha512-uGlw8sK7XaeBNyt9zRq/uVRtHN51X3fFVTj5jDoYByQe3MCioGUIlTqXJBTKVB1FOXQ2X/jnBvddEmimD96i/g==", + "dev": true, + "requires": { + "cosmiconfig": "^6.0.0", + "dateformat": "^3.0.3", + "debug": "^4.1.1", + "deepmerge": "^4.2.2", + "png-async": "^0.9.4", + "stack-trace": "^0.0.10" + } + }, + "@applitools/eyes-cypress": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@applitools/eyes-cypress/-/eyes-cypress-3.11.0.tgz", + "integrity": "sha512-+OcyGWTEFWHbB/h6Qt6JjmZo5P0VOgBA9BHngwMyaIg10MLKx3kxRk5EIiPCyPMOsFGRzdbo9WxddBZBOvF+8Q==", + "dev": true, + "requires": { + "@applitools/dom-snapshot": "3.5.2", + "@applitools/eyes-sdk-core": "10.2.0", + "@applitools/functional-commons": "1.5.4", + "@applitools/visual-grid-client": "14.1.0", + "body-parser": "^1.19.0", + "chalk": "3.0.0", + "cors": "^2.8.5", + "express": "^4.17.1", + "lodash.flatten": "^4.4.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@applitools/eyes-sdk-core": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/@applitools/eyes-sdk-core/-/eyes-sdk-core-10.2.0.tgz", + "integrity": "sha512-5BKR8yN+7iL3NxMKtTYdgcmXFleSYKwBG+uXLrirEVEcfZnay5PlFzVVf8tRtj4Z8PFDO/nzveVZGLkKgEeO/Q==", + "dev": true, + "requires": { + "@applitools/eyes-common": "3.24.0", + "@applitools/isomorphic-fetch": "3.0.0", + "axios": "0.19.2", + "chalk": "3.0.0", + "es6-promise-pool": "2.5.0", + "tunnel": "0.0.6" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "axios": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz", + "integrity": "sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==", + "dev": true, + "requires": { + "follow-redirects": "1.5.10" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@applitools/feature-flags": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@applitools/feature-flags/-/feature-flags-2.1.1.tgz", + "integrity": "sha512-bhzTHOpTmIg1KzI/kcNyDgFeKiHrX+Tjja9MtDwkOBUJ52Ff2A7nH9rm1xWww4yY4Me3yTaG8F6U75X3UdXE5g==", + "dev": true + }, + "@applitools/functional-commons": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@applitools/functional-commons/-/functional-commons-1.5.4.tgz", + "integrity": "sha512-R+p4fliS8j6YlZNSLgsx6cBpjlmZaec67v9PpophPW5vXnOJFVcELnoeO21AVG1kbHu0FeAk025xr99EUTppFw==", + "dev": true + }, + "@applitools/http-commons": { + "version": "2.3.12", + "resolved": "https://registry.npmjs.org/@applitools/http-commons/-/http-commons-2.3.12.tgz", + "integrity": "sha512-8aajoZQLoJPSljvG5AoCdoSpaun7di8lZ5wH83FoWkYAhIqVHmpE3UTMpFcj9us3NjCK7YH6vqRq7LKQe+mMrw==", + "dev": true, + "requires": { + "@applitools/functional-commons": "^1.5.2", + "@applitools/monitoring-commons": "^1.0.15", + "agentkeepalive": "^4.0.2", + "debug": "^4.1.1", + "lodash.merge": "^4.6.2", + "node-fetch": "^2.6.0" + } + }, + "@applitools/isomorphic-fetch": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@applitools/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz", + "integrity": "sha512-7rutaN/2M5wYjOIOTKS/Zuc1Na90fJNEAqvo/jCxt7nSD1kYscHV3aCk9t7RD59gmzLMvUTIxFbjl4RUMV8qfg==", + "dev": true, + "requires": { + "node-fetch": "^2.3.0", + "whatwg-fetch": ">=0.10.0" + } + }, + "@applitools/jsdom": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@applitools/jsdom/-/jsdom-1.0.2.tgz", + "integrity": "sha512-VDnXYjqYn3IFEbvYTxZYyR4vAgnUtN1ovYwEYpe7a9vc9aXZ+UT9S3Gww/yFdTVMHWIoa8PcR32PaL6SmWlVfg==", + "dev": true, + "requires": { + "abab": "^2.0.0", + "acorn": "^7.1.0", + "acorn-globals": "^4.3.2", + "array-equal": "^1.0.0", + "cssom": "^0.4.1", + "cssstyle": "^2.0.0", + "data-urls": "^1.1.0", + "domexception": "^1.0.1", + "escodegen": "^1.11.1", + "html-encoding-sniffer": "^1.0.2", + "nwsapi": "^2.2.0", + "parse5": "5.1.0", + "pn": "^1.1.0", + "request": "^2.88.0", + "request-promise-native": "^1.0.7", + "saxes": "^3.1.9", + "symbol-tree": "^3.2.2", + "tough-cookie": "^3.0.1", + "w3c-hr-time": "^1.0.1", + "w3c-xmlserializer": "^1.1.2", + "webidl-conversions": "^4.0.2", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^7.0.0", + "ws": "^7.0.0", + "xml-name-validator": "^3.0.0" + }, + "dependencies": { + "ajv": { + "version": "6.12.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", + "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "dev": true + }, + "cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "requires": { + "cssom": "~0.3.6" + }, + "dependencies": { + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", + "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==", + "dev": true + }, + "har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "dev": true, + "requires": { + "ajv": "^6.5.5", + "har-schema": "^2.0.0" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true + }, + "parse5": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz", + "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==", + "dev": true + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "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" + }, + "dependencies": { + "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" + } + } + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "tough-cookie": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz", + "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==", + "dev": true, + "requires": { + "ip-regex": "^2.1.0", + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "ws": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.3.0.tgz", + "integrity": "sha512-iFtXzngZVXPGgpTlP1rBqsUK82p9tKqsWRPg5L56egiljujJT3vGAYnHANvFxBieXrTFavhzhxW52jnaWV+w2w==", + "dev": true + } + } + }, + "@applitools/monitoring-commons": { + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/@applitools/monitoring-commons/-/monitoring-commons-1.0.19.tgz", + "integrity": "sha512-rzEOvGoiEF4KnK0PJ9I0btdwnaNlIPLYhjF1vTEG15PoucbbKpix9fYusxWlDG7kMiZya8ZycVPc0woVlNaHRQ==", + "dev": true, + "requires": { + "debug": "^4.1.0" + } + }, + "@applitools/visual-grid-client": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@applitools/visual-grid-client/-/visual-grid-client-14.1.0.tgz", + "integrity": "sha512-ET4i5TiPECaFBV7f64gJGMsokGmWAwMLJM1i8nwK8oLnbHPUR+k2XDulAc4cuFoT5t1LtjkADKl9o8d0Z4ZgkQ==", + "dev": true, + "requires": { + "@applitools/dom-snapshot": "3.5.2", + "@applitools/eyes-sdk-core": "10.2.0", + "@applitools/feature-flags": "2.1.1", + "@applitools/functional-commons": "1.5.4", + "@applitools/http-commons": "2.3.12", + "@applitools/isomorphic-fetch": "3.0.0", + "@applitools/jsdom": "1.0.2", + "chalk": "3.0.0", + "he": "1.2.0", + "lodash.mapvalues": "^4.6.0", + "mime-types": "^2.1.24", + "mkdirp": "^0.5.1", + "postcss-value-parser": "^4.0.2", + "throat": "^5.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", + "dev": true + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "throat": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", + "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", + "dev": true + } + } + }, "@babel/code-frame": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", @@ -5921,6 +6435,17 @@ "debug": "4" } }, + "agentkeepalive": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.1.2.tgz", + "integrity": "sha512-waNHE7tQBBn+2qXucI8HY0o2Y0OBPWldWOWsZwY71JcCm4SvrPnWdceFfB5NIXSqE8Ewq6VR/Qt5b1i69P6KCQ==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "depd": "^1.1.2", + "humanize-ms": "^1.2.1" + } + }, "aggregate-error": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.1.tgz", @@ -10260,6 +10785,102 @@ "type": "^1.0.1" } }, + "d3-array": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz", + "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==", + "dev": true + }, + "d3-collection": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.7.tgz", + "integrity": "sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==", + "dev": true + }, + "d3-color": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.4.1.tgz", + "integrity": "sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q==", + "dev": true + }, + "d3-ease": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-1.0.6.tgz", + "integrity": "sha512-SZ/lVU7LRXafqp7XtIcBdxnWl8yyLpgOmzAk0mWBI9gXNzLDx5ybZgnRbH9dN/yY5tzVBqCQ9avltSnqVwessQ==", + "dev": true + }, + "d3-format": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.4.4.tgz", + "integrity": "sha512-TWks25e7t8/cqctxCmxpUuzZN11QxIA7YrMbram94zMQ0PXjE4LVIMe/f6a4+xxL8HQ3OsAFULOINQi1pE62Aw==", + "dev": true + }, + "d3-interpolate": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.4.0.tgz", + "integrity": "sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA==", + "dev": true, + "requires": { + "d3-color": "1" + } + }, + "d3-path": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", + "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==", + "dev": true + }, + "d3-scale": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-1.0.7.tgz", + "integrity": "sha512-KvU92czp2/qse5tUfGms6Kjig0AhHOwkzXG0+PqIJB3ke0WUv088AHMZI0OssO9NCkXt4RP8yju9rpH8aGB7Lw==", + "dev": true, + "requires": { + "d3-array": "^1.2.0", + "d3-collection": "1", + "d3-color": "1", + "d3-format": "1", + "d3-interpolate": "1", + "d3-time": "1", + "d3-time-format": "2" + } + }, + "d3-shape": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", + "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", + "dev": true, + "requires": { + "d3-path": "1" + } + }, + "d3-time": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.1.0.tgz", + "integrity": "sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA==", + "dev": true + }, + "d3-time-format": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.2.3.tgz", + "integrity": "sha512-RAHNnD8+XvC4Zc4d2A56Uw0yJoM7bsvOlJR33bclxq399Rak/b9bhvu/InjxdWhPtkgU53JJcleJTGkNRnN6IA==", + "dev": true, + "requires": { + "d3-time": "1" + } + }, + "d3-timer": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.10.tgz", + "integrity": "sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw==", + "dev": true + }, + "d3-voronoi": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/d3-voronoi/-/d3-voronoi-1.1.4.tgz", + "integrity": "sha512-dArJ32hchFsrQ8uMiTBLq256MpnZjeuBtdHpaDlYuQyjU0CVzCJl/BVW+SkszaAeH95D/8gxqAhgx0ouAWAfRg==", + "dev": true + }, "damerau-levenshtein": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz", @@ -10708,6 +11329,21 @@ } } }, + "delaunator": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-4.0.1.tgz", + "integrity": "sha512-WNPWi1IRKZfCt/qIDMfERkDp93+iZEmOxN2yy4Jg+Xhv8SLk2UTqqbe1sfiipn0and9QrE914/ihdx82Y/Giag==", + "dev": true + }, + "delaunay-find": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/delaunay-find/-/delaunay-find-0.0.5.tgz", + "integrity": "sha512-7yAJ/wmKWj3SgqjtkGqT/RCwI0HWAo5YnHMoF5nYXD8cdci+YSo23iPmgrZUNOpDxRWN91PqxUvMMr2lKpjr+w==", + "dev": true, + "requires": { + "delaunator": "^4.0.0" + } + }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -15123,6 +15759,15 @@ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==" }, + "humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", + "dev": true, + "requires": { + "ms": "^2.0.0" + } + }, "husky": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/husky/-/husky-3.1.0.tgz", @@ -19477,11 +20122,23 @@ "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", "dev": true }, + "lodash.mapvalues": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", + "integrity": "sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw=", + "dev": true + }, "lodash.memoize": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=" }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, "lodash.once": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", @@ -25611,6 +26268,12 @@ "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", "dev": true }, + "png-async": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/png-async/-/png-async-0.9.4.tgz", + "integrity": "sha512-B//AXX9TkneKfgtOpT1mdUnnhk2BImGD+a98vImsMU8uo1dBeHyW/kM2erWZ/CsYteTPU/xKG+t6T62heHkC3A==", + "dev": true + }, "pngjs": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", @@ -28292,6 +28955,12 @@ "integrity": "sha512-TAv1KJFh3RhqxNvhzxj6LeT5NWklP6rDr2a0jaTfsZ5wSZWHOGeqQyejUp3xxLfPt2UpyJEcVQB/zyPcmonNFA==", "dev": true }, + "react-fast-compare": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-2.0.4.tgz", + "integrity": "sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==", + "dev": true + }, "react-google-maps": { "version": "9.4.5", "resolved": "https://registry.npmjs.org/react-google-maps/-/react-google-maps-9.4.5.tgz", @@ -32954,6 +33623,12 @@ "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", "dev": true }, + "tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "dev": true + }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -33532,6 +34207,367 @@ "extsprintf": "^1.2.0" } }, + "victory": { + "version": "34.3.6", + "resolved": "https://registry.npmjs.org/victory/-/victory-34.3.6.tgz", + "integrity": "sha512-CosMN/Sja/fGg5QKQIad01JsOpM1/hEdZd91jJcXRlT47dTmfhbC5lNgLiEpLMkODKjx9sBv2h2Z9lC4aqv46w==", + "dev": true, + "requires": { + "victory-area": "^34.3.6", + "victory-axis": "^34.3.6", + "victory-bar": "^34.3.6", + "victory-box-plot": "^34.3.6", + "victory-brush-container": "^34.3.6", + "victory-brush-line": "^34.3.6", + "victory-candlestick": "^34.3.6", + "victory-chart": "^34.3.6", + "victory-core": "^34.3.6", + "victory-create-container": "^34.3.6", + "victory-cursor-container": "^34.3.6", + "victory-errorbar": "^34.3.6", + "victory-group": "^34.3.6", + "victory-histogram": "^34.3.6", + "victory-legend": "^34.3.6", + "victory-line": "^34.3.6", + "victory-pie": "^34.3.6", + "victory-polar-axis": "^34.3.6", + "victory-scatter": "^34.3.6", + "victory-selection-container": "^34.3.6", + "victory-shared-events": "^34.3.6", + "victory-stack": "^34.3.6", + "victory-tooltip": "^34.3.6", + "victory-voronoi": "^34.3.6", + "victory-voronoi-container": "^34.3.6", + "victory-zoom-container": "^34.3.6" + } + }, + "victory-area": { + "version": "34.3.6", + "resolved": "https://registry.npmjs.org/victory-area/-/victory-area-34.3.6.tgz", + "integrity": "sha512-FJ03xElmr3zN1f4uN0MympCwhI9AVLJ3oGGBEjoRIcatGv0M/xE1N1kk2klQXLDNveyx5a6lGL6k1njvUrwRGg==", + "dev": true, + "requires": { + "d3-shape": "^1.2.0", + "lodash": "^4.17.15", + "prop-types": "^15.5.8", + "victory-core": "^34.3.6" + } + }, + "victory-axis": { + "version": "34.3.6", + "resolved": "https://registry.npmjs.org/victory-axis/-/victory-axis-34.3.6.tgz", + "integrity": "sha512-GaLEdLWMbppSLUOQ6ykyl3s4MfMoz2ThAH8+muvl9v8bOsW9xwyIWfItiL0D+7tUAD84A6WtKwJdVwNrNh0LQQ==", + "dev": true, + "requires": { + "lodash": "^4.17.15", + "prop-types": "^15.5.8", + "victory-core": "^34.3.6" + } + }, + "victory-bar": { + "version": "34.3.6", + "resolved": "https://registry.npmjs.org/victory-bar/-/victory-bar-34.3.6.tgz", + "integrity": "sha512-fhElzZy8V28f0LRbg7peSVsIMXn5AfbUGDhEkNzdpWFbEPgSyP69HKm6iiOW7MMit5ou73K9Q0HFK4MGCeM2sw==", + "dev": true, + "requires": { + "d3-shape": "^1.2.0", + "lodash": "^4.17.15", + "prop-types": "^15.5.8", + "victory-core": "^34.3.6" + } + }, + "victory-box-plot": { + "version": "34.3.6", + "resolved": "https://registry.npmjs.org/victory-box-plot/-/victory-box-plot-34.3.6.tgz", + "integrity": "sha512-pXKrmk0d7nZcTVE9Uif3DCWiSj9pe8PbtnD7qnIC+n8BDoiMo0wtZDP7qghS9U5MRXeffVX8+SPScYjkyk4fOw==", + "dev": true, + "requires": { + "d3-array": "^1.2.0", + "lodash": "^4.17.15", + "prop-types": "^15.5.8", + "victory-core": "^34.3.6" + } + }, + "victory-brush-container": { + "version": "34.3.6", + "resolved": "https://registry.npmjs.org/victory-brush-container/-/victory-brush-container-34.3.6.tgz", + "integrity": "sha512-V2t3u8tsuKcN82DZuRzVdlbQuQ8XEPdRqw45bjTRHFvq9MZqF+Rx52akXzTJDU6pfvEvP06CZK++ZHOGyAAtcA==", + "dev": true, + "requires": { + "lodash": "^4.17.15", + "prop-types": "^15.5.8", + "react-fast-compare": "^2.0.0", + "victory-core": "^34.3.6" + } + }, + "victory-brush-line": { + "version": "34.3.6", + "resolved": "https://registry.npmjs.org/victory-brush-line/-/victory-brush-line-34.3.6.tgz", + "integrity": "sha512-7F89lbpvwc15QQryg+QCAqNdiYXF/PL8/iTG/a7xv2x/MeY0GKU/DTefKsLKvpFBdBW2m2s3OE3T0m1XmBOw0Q==", + "dev": true, + "requires": { + "lodash": "^4.17.15", + "prop-types": "^15.5.8", + "react-fast-compare": "^2.0.0", + "victory-core": "^34.3.6" + } + }, + "victory-candlestick": { + "version": "34.3.6", + "resolved": "https://registry.npmjs.org/victory-candlestick/-/victory-candlestick-34.3.6.tgz", + "integrity": "sha512-tzKL+zcIe4HEmbMrd3ZPXk/jcDF7Ejm8yZeHKhZEAbHMByGowTat7cPUDfCEQlRb5wa87bsFrxDJefiu8W0Npg==", + "dev": true, + "requires": { + "lodash": "^4.17.15", + "prop-types": "^15.5.8", + "victory-core": "^34.3.6" + } + }, + "victory-chart": { + "version": "34.3.6", + "resolved": "https://registry.npmjs.org/victory-chart/-/victory-chart-34.3.6.tgz", + "integrity": "sha512-6Ti8C7ahqwOqVbhiD2bMIOJD4RsP04irXXwpFkY1yRBC4L4GpVAhWL1eVe6FR98qFUp+Zsvzu1Uvr6KRfCVTEg==", + "dev": true, + "requires": { + "lodash": "^4.17.15", + "prop-types": "^15.5.8", + "react-fast-compare": "^2.0.0", + "victory-axis": "^34.3.6", + "victory-core": "^34.3.6", + "victory-polar-axis": "^34.3.6", + "victory-shared-events": "^34.3.6" + } + }, + "victory-core": { + "version": "34.3.6", + "resolved": "https://registry.npmjs.org/victory-core/-/victory-core-34.3.6.tgz", + "integrity": "sha512-DoUjHdHym0v4z85VFpJFjZ6E5/4VI8aSOouDsD7SjHRVsc5vHdl8mU9/HqERm01h11+hNL4fyNSdPyWKfWPO8g==", + "dev": true, + "requires": { + "d3-ease": "^1.0.0", + "d3-interpolate": "^1.1.1", + "d3-scale": "^1.0.0", + "d3-shape": "^1.2.0", + "d3-timer": "^1.0.0", + "lodash": "^4.17.15", + "prop-types": "^15.5.8", + "react-fast-compare": "^2.0.0" + } + }, + "victory-create-container": { + "version": "34.3.6", + "resolved": "https://registry.npmjs.org/victory-create-container/-/victory-create-container-34.3.6.tgz", + "integrity": "sha512-HUVqaRAlX4ldVKcwfEbNqmlttCD234hN5MrfuemnjTp7D/Xp1DR5sj/d/2R6ceLqMnOeacF9kZky/tcqZSaD9A==", + "dev": true, + "requires": { + "lodash": "^4.17.15", + "victory-brush-container": "^34.3.6", + "victory-core": "^34.3.6", + "victory-cursor-container": "^34.3.6", + "victory-selection-container": "^34.3.6", + "victory-voronoi-container": "^34.3.6", + "victory-zoom-container": "^34.3.6" + } + }, + "victory-cursor-container": { + "version": "34.3.6", + "resolved": "https://registry.npmjs.org/victory-cursor-container/-/victory-cursor-container-34.3.6.tgz", + "integrity": "sha512-3zYWaQZ6MeSdVte0GilrBE5ekg6j533VhywIvNgcK4qZKSC5SOtRaFSGkBUJ2BgmPR87iPLcBSqZpOtZbK7IKQ==", + "dev": true, + "requires": { + "lodash": "^4.17.15", + "prop-types": "^15.5.8", + "victory-core": "^34.3.6" + } + }, + "victory-errorbar": { + "version": "34.3.6", + "resolved": "https://registry.npmjs.org/victory-errorbar/-/victory-errorbar-34.3.6.tgz", + "integrity": "sha512-yokSmPPlN5Drmf8r4lhXuvGR06z0oP+xPVuJIqHO0JV5h4eE1y+TdvEv60qdbgbYYzZAC0OtPurHAf02BybZPg==", + "dev": true, + "requires": { + "lodash": "^4.17.15", + "prop-types": "^15.5.8", + "victory-core": "^34.3.6" + } + }, + "victory-group": { + "version": "34.3.6", + "resolved": "https://registry.npmjs.org/victory-group/-/victory-group-34.3.6.tgz", + "integrity": "sha512-CYtUtZSlxhkSAdig/Y4amCSvDXUuBaw7R4EzYO1gwGdnt8NOyS/nj5dPYdIm7GJ1Bxy/jQC0i+g3Gszq5P0vSQ==", + "dev": true, + "requires": { + "lodash": "^4.17.15", + "prop-types": "^15.5.8", + "react-fast-compare": "^2.0.0", + "victory-core": "^34.3.6", + "victory-shared-events": "^34.3.6" + } + }, + "victory-histogram": { + "version": "34.3.6", + "resolved": "https://registry.npmjs.org/victory-histogram/-/victory-histogram-34.3.6.tgz", + "integrity": "sha512-q4c/Y/zcosSxg41n1J9YYMaJSl/79ih6tDqyqNl1xOs4kVRLxAPBED7qXRhP4+I61CpzK6kLdGTd3iArc5msnQ==", + "dev": true, + "requires": { + "d3-array": "^2.4.0", + "d3-scale": "^1.0.0", + "lodash": "^4.17.15", + "prop-types": "^15.5.8", + "react-fast-compare": "^2.0.0", + "victory-bar": "^34.3.6", + "victory-core": "^34.3.6" + }, + "dependencies": { + "d3-array": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.4.0.tgz", + "integrity": "sha512-KQ41bAF2BMakf/HdKT865ALd4cgND6VcIztVQZUTt0+BH3RWy6ZYnHghVXf6NFjt2ritLr8H1T8LreAAlfiNcw==", + "dev": true + } + } + }, + "victory-legend": { + "version": "34.3.6", + "resolved": "https://registry.npmjs.org/victory-legend/-/victory-legend-34.3.6.tgz", + "integrity": "sha512-QrD96+BBF16n6uPxZNFFKKL0gJW+ASdHywx+12Pei/BfEFSZPOVBvxnJaJP6TXiEN74ISKU7E5N8Z0Tcz/yz3A==", + "dev": true, + "requires": { + "lodash": "^4.17.15", + "prop-types": "^15.5.8", + "victory-core": "^34.3.6" + } + }, + "victory-line": { + "version": "34.3.6", + "resolved": "https://registry.npmjs.org/victory-line/-/victory-line-34.3.6.tgz", + "integrity": "sha512-XQkpq8oBkSKj9wGhUQ8j5pJ8EAmrLKl/31WyPgycpaI1lD/N34YxqrkRY98SkSPbuFs3rnfarAQo1gaRH2vZ7Q==", + "dev": true, + "requires": { + "d3-shape": "^1.2.0", + "lodash": "^4.17.15", + "prop-types": "^15.5.8", + "victory-core": "^34.3.6" + } + }, + "victory-pie": { + "version": "34.3.6", + "resolved": "https://registry.npmjs.org/victory-pie/-/victory-pie-34.3.6.tgz", + "integrity": "sha512-XW7v2yqZuFgZ/NL9+UCwALe+vVEEtii83SYwjVQWxYyYByfqVSVIF+1/z7bhUCqA8H68+WO9CgSZ4EbO8BEVxg==", + "dev": true, + "requires": { + "d3-shape": "^1.0.0", + "lodash": "^4.17.15", + "prop-types": "^15.5.8", + "victory-core": "^34.3.6" + } + }, + "victory-polar-axis": { + "version": "34.3.6", + "resolved": "https://registry.npmjs.org/victory-polar-axis/-/victory-polar-axis-34.3.6.tgz", + "integrity": "sha512-QIZq3m9MpkNW0MTHxXRT62cExmpgYwbZre4t13AqmWgYjIUC8IWp9s3XelcDb4jq8TCBs/SuIbKtybaB2PrWkw==", + "dev": true, + "requires": { + "lodash": "^4.17.15", + "prop-types": "^15.5.8", + "victory-core": "^34.3.6" + } + }, + "victory-scatter": { + "version": "34.3.6", + "resolved": "https://registry.npmjs.org/victory-scatter/-/victory-scatter-34.3.6.tgz", + "integrity": "sha512-PFeDaccsc4jgP2pCMb1O4FfrsZCRMSlvfPnNo459X7jcT9k+m/EWxxRFuOvscOqo3wrEBl4ekI2uevbHHD4tOA==", + "dev": true, + "requires": { + "lodash": "^4.17.15", + "prop-types": "^15.5.8", + "victory-core": "^34.3.6" + } + }, + "victory-selection-container": { + "version": "34.3.6", + "resolved": "https://registry.npmjs.org/victory-selection-container/-/victory-selection-container-34.3.6.tgz", + "integrity": "sha512-B18/qw9myzpLvKDlGECbiD+FxLLkIIa+GPihbwiy4Z5Nfuy+G1sw2QPkarqWBmtjBjej4cC03vViFMmllRiwow==", + "dev": true, + "requires": { + "lodash": "^4.17.15", + "prop-types": "^15.5.8", + "victory-core": "^34.3.6" + } + }, + "victory-shared-events": { + "version": "34.3.6", + "resolved": "https://registry.npmjs.org/victory-shared-events/-/victory-shared-events-34.3.6.tgz", + "integrity": "sha512-qj3ECYNrtO30vO1OgGXMDRn7yMuIGJ/GR2nJADNNS5yhe5YQlfseMXWx+S+uBhYh7lzQRPfkUt/GbUVaCiFRcw==", + "dev": true, + "requires": { + "lodash": "^4.17.15", + "prop-types": "^15.5.8", + "react-fast-compare": "^2.0.0", + "victory-core": "^34.3.6" + } + }, + "victory-stack": { + "version": "34.3.6", + "resolved": "https://registry.npmjs.org/victory-stack/-/victory-stack-34.3.6.tgz", + "integrity": "sha512-rUVLtVJrlNpP23Gq29gQhpe3NeWBBZyQfFqAdC0X2y5NklSZzpEhJ4UfHEh8y0DZBIebLv2mhqahLPN6CjKhmQ==", + "dev": true, + "requires": { + "lodash": "^4.17.15", + "prop-types": "^15.5.8", + "react-fast-compare": "^2.0.0", + "victory-core": "^34.3.6", + "victory-shared-events": "^34.3.6" + } + }, + "victory-tooltip": { + "version": "34.3.6", + "resolved": "https://registry.npmjs.org/victory-tooltip/-/victory-tooltip-34.3.6.tgz", + "integrity": "sha512-BOM4ucgjadO6LzkoGmMX2FY1AKDaZ2HYpSoHXTD6ILx7Yp434Oxq63tLESwNtCGG178WKq2d+t4+p6gNXwYRUw==", + "dev": true, + "requires": { + "lodash": "^4.17.15", + "prop-types": "^15.5.8", + "victory-core": "^34.3.6" + } + }, + "victory-voronoi": { + "version": "34.3.6", + "resolved": "https://registry.npmjs.org/victory-voronoi/-/victory-voronoi-34.3.6.tgz", + "integrity": "sha512-+qxG+4/ZslsoRf3yWL1P6x5eqxtq1TKTEqW7Aznj/q4mdeZ9gXYABoy9XmV91ZzBrqtm5B1PbjXmd0dVpLHLsA==", + "dev": true, + "requires": { + "d3-voronoi": "^1.1.2", + "lodash": "^4.17.15", + "prop-types": "^15.5.8", + "victory-core": "^34.3.6" + } + }, + "victory-voronoi-container": { + "version": "34.3.6", + "resolved": "https://registry.npmjs.org/victory-voronoi-container/-/victory-voronoi-container-34.3.6.tgz", + "integrity": "sha512-W5uBCv0nA/JY8Zl2QPnGfe9J18qB6d6YEInMfkf9wACg9DEBoKJbd9knnaC74TSnHgtK6RJgy1sZKKg5qCKXPQ==", + "dev": true, + "requires": { + "delaunay-find": "0.0.5", + "lodash": "^4.17.15", + "prop-types": "^15.5.8", + "react-fast-compare": "^2.0.0", + "victory-core": "^34.3.6", + "victory-tooltip": "^34.3.6" + } + }, + "victory-zoom-container": { + "version": "34.3.6", + "resolved": "https://registry.npmjs.org/victory-zoom-container/-/victory-zoom-container-34.3.6.tgz", + "integrity": "sha512-NSlrvJGVPHQEihBFM8GKIZG/YZ06Hqabc8tZB/03asjmlHVbaXcZTPVWjvtl43e0weBdXd9GjAVJlK+9RLYczA==", + "dev": true, + "requires": { + "lodash": "^4.17.15", + "prop-types": "^15.5.8", + "victory-core": "^34.3.6" + } + }, "vm-browserify": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", diff --git a/package.json b/package.json index 8b6209ae..5b83fe29 100644 --- a/package.json +++ b/package.json @@ -45,6 +45,7 @@ "author": "Gleb Bahmutov ", "license": "MIT", "devDependencies": { + "@applitools/eyes-cypress": "3.11.0", "@babel/core": "7.4.5", "@babel/plugin-proposal-class-properties": "7.4.4", "@babel/plugin-syntax-dynamic-import": "7.8.3", @@ -100,6 +101,7 @@ "svg-url-loader": "3.0.3", "tailwindcss": "1.4.6", "typescript": "3.9.2", + "victory": "34.3.6", "webpack": "4.33.0", "webpack-cli": "3.3.9" },