diff --git a/.circleci/config.yml b/.circleci/config.yml
index b06735da..7589e3c9 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -1,6 +1,6 @@
version: 2
jobs:
- build:
+ test:
docker:
- image: circleci/node:lts
working_directory: ~/repo
@@ -14,14 +14,15 @@ jobs:
paths:
- node_modules
key: v1-dependencies-{{ checksum "yarn.lock" }}
- - run: cd giraffe && yarn run lint
- - run: cd giraffe && yarn run typecheck
- - run: cd giraffe && yarn run test --collectCoverage
- - run: cd giraffe && yarn run build
- - run: cd stories && yarn run lint
- - run: cd stories && yarn run typecheck
+ - run: yarn lint
+ - run: yarn --cwd giraffe test --collectCoverage
+ - run: yarn --cwd giraffe build
+ # todo: stories-test runs lint too (lint runs two multiple times)
+ - run: yarn --cwd stories test
- store_artifacts:
path: giraffe/coverage
+ - store_artifacts:
+ path: stories/cypress/snapshots/**/__diff_output__
# See: https://github.com/influxdata/giraffe/issues/129
# - run:
# name: chromatic
@@ -34,3 +35,26 @@ jobs:
# else \
# yarn run chromatic -- --auto-accept-changes
# fi
+ update-snapshots:
+ docker:
+ - image: circleci/node:lts
+ working_directory: ~/repo
+ steps:
+ - checkout
+ - restore_cache:
+ keys:
+ - v1-dependencies-{{ checksum "yarn.lock" }}
+ - run: yarn install --frozen-lockfile
+ - run: yarn --cwd stories cy:update
+
+
+workflows:
+ version: 2
+ test:
+ jobs:
+ - test
+ - update-snapshots:
+ type: approval
+ requires:
+ - test
+
diff --git a/.gitignore b/.gitignore
index 1889071e..8eec7a47 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,3 +8,7 @@ dist
.env
.vscode
coverage
+
+__diff_output__
+videos
+screenshots
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index e131514e..28d8fd8f 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -61,3 +61,7 @@ Then from the root of the repo, run the publish script:
InfluxData takes security and our user's trust very seriously.
If you believe you have found a security issue in any of our open source projects, please responsibly disclose it by contacting security@influxdata.com.
More details about security vulnerability reporting, including our GPG key, [can be found here](https://www.influxdata.com/how-to-report-security-vulnerabilities/).
+
+## Cypress
+
+ - TODO
diff --git a/giraffe/package.json b/giraffe/package.json
index 893415bc..0d95ffb9 100644
--- a/giraffe/package.json
+++ b/giraffe/package.json
@@ -6,14 +6,17 @@
"license": "MIT",
"scripts": {
"build": "rm -rf dist && NODE_ENV=production webpack --config webpack.config.js",
- "lint": "eslint '{src,../stories/src}/**/*.{ts,tsx}'",
- "prettier": "prettier --config ../.prettierrc.json --check '{src,../stories/src}/**/*.{ts,tsx}'",
- "prettier:fix": "prettier --config ../.prettierrc.json --write '{src,../stories/src}/**/*.{ts,tsx}'",
+ "lint": "run-s typecheck eslint prettier",
+ "lint:fix": "run-s typecheck eslint:fix prettier:fix",
+ "typecheck": "tsc --noEmit --pretty",
+ "eslint": "eslint \"{,../stories}/{src,cypress}/**/*.{ts,tsx}\"",
+ "eslint:fix": "eslint \"{,../stories}/{src,cypress}/**/*.{ts,tsx}\" --fix",
+ "prettier": "prettier --config ../.prettierrc.json --check \"{,../stories}/{src,cypress}/**/*.{ts,tsx}\"",
+ "prettier:fix": "prettier --config ../.prettierrc.json --write \"{,../stories}/{src,cypress}/**/*.{ts,tsx}\"",
"publish": "echo 'To publish giraffe, run ./publish $version'",
"start": "webpack --config webpack.config.js --watch --progress",
"test": "jest --collectCoverage --maxWorkers=2",
- "test:watch": "jest --collectCoverage --watch --verbose false",
- "typecheck": "tsc --noEmit --pretty"
+ "test:watch": "jest --collectCoverage --watch --verbose false"
},
"keywords": [
"band",
diff --git a/package.json b/package.json
index 6bfbf0ba..21024d86 100644
--- a/package.json
+++ b/package.json
@@ -2,9 +2,13 @@
"private": true,
"workspaces": ["giraffe", "stories"],
"scripts": {
- "lint": "eslint '{giraffe,stories}/src/**/*.{ts,tsx}'",
- "prettier": "prettier --config .prettierrc.json --check '{giraffe,stories}/**/*.{ts,tsx}'",
- "prettier:fix": "prettier --config .prettierrc.json --write '{giraffe,stories}/**/*.{ts,tsx}'",
- "publish": "echo 'To publish giraffe, run ./giraffe/publish $version'"
+ "lint": "run-s typecheck eslint prettier",
+ "lint:fix": "run-s typecheck eslint:fix prettier:fix",
+ "typecheck": "tsc --noEmit --pretty",
+ "eslint": "eslint \"{giraffe,stories}/{src,cypress}/**/*.{ts,tsx}\"",
+ "eslint:fix": "eslint \"{giraffe,stories}/{src,cypress}/**/*.{ts,tsx}\" --fix",
+ "prettier": "prettier --config .prettierrc.json --check \"{giraffe,stories}/{src,cypress}/**/*.{ts,tsx}\"",
+ "prettier:fix": "prettier --config .prettierrc.json --write \"{giraffe,stories}/{src,cypress}/**/*.{ts,tsx}\"",
+ "publish": "echo \"To publish giraffe, run ./giraffe/publish $version\""
}
}
diff --git a/stories/cypress.json b/stories/cypress.json
new file mode 100644
index 00000000..40812548
--- /dev/null
+++ b/stories/cypress.json
@@ -0,0 +1,4 @@
+{
+ "$schema": "https://on.cypress.io/cypress.schema.json",
+ "baseUrl": "http://localhost:50000/?path=/story/"
+}
\ No newline at end of file
diff --git a/stories/cypress/index.d.ts b/stories/cypress/index.d.ts
new file mode 100644
index 00000000..67c65552
--- /dev/null
+++ b/stories/cypress/index.d.ts
@@ -0,0 +1,29 @@
+/* eslint @typescript-eslint/no-unused-vars: "off" */
+import 'jest'
+
+import {
+ getByTestID,
+ getByInputName,
+ getByInputValue,
+ getByTitle,
+ getByTestIDSubStr,
+ visitTest,
+ snapshotComponent,
+ inputKnobs,
+} from './support/commands'
+
+declare global {
+ namespace Cypress {
+ interface Chainable {
+
+ getByTestID: typeof getByTestID
+ getByInputName: typeof getByInputName
+ getByInputValue: typeof getByInputValue
+ getByTitle: typeof getByTitle
+ getByTestIDSubStr: typeof getByTestIDSubStr
+ visitTest: typeof visitTest
+ snapshotComponent: typeof snapshotComponent
+ inputKnobs: typeof inputKnobs
+ }
+ }
+}
diff --git a/stories/cypress/integration/test.test.ts b/stories/cypress/integration/test.test.ts
new file mode 100644
index 00000000..2bcf818d
--- /dev/null
+++ b/stories/cypress/integration/test.test.ts
@@ -0,0 +1,62 @@
+
+describe('testing test', () => {
+ it('should make Gauge snapshot', () => {
+ cy.visitTest('Gauge', 'Gauge')
+ cy.inputKnobs('Fixed data', true, 'boolean')
+ })
+
+ it('should make snapshot of gauge', () => {
+ cy.visitTest('Gauge', 'Gauge')
+ cy.inputKnobs('Fixed data', true, 'boolean')
+ cy.inputKnobs('Gauge Lines', 12, 'number')
+ cy.wait(4000)
+ cy.inputKnobs('Ticks between lines', 3, 'number')
+
+ cy.snapshotComponent('gauge-test-3-ticks-between-lines-12-gauge-lines')
+
+ cy.inputKnobs('Gauge Min', 10, 'number')
+
+ cy.inputKnobs('Prefix', 'haf ', 'text')
+ cy.wait(2000)
+
+ cy.snapshotComponent('gauge-test-Haf-prefix-10-gauge-min')
+ })
+
+ it('should make snapshot of gauge', () => {
+ cy.visitTest('Gauge', 'Gauge')
+ cy.inputKnobs('Fixed data', true, 'boolean')
+
+ cy.inputKnobs('Ticks between lines', 3, 'number')
+
+ cy.snapshotComponent('gauge-test-3-ticks-between-lines')
+ cy.wait(2000)
+
+ cy.inputKnobs('Gauge Max', 23, 'number')
+ cy.inputKnobs('Suffix', 'HKS', 'text')
+ cy.wait(2000)
+ cy.inputKnobs('Suffix', 'halsper ', 'text')
+
+ cy.snapshotComponent('gauge-test-suffix-prefix-type')
+
+
+ })
+
+ it('should make snapchot of gauge', () => {
+ cy.visitTest('Gauge', 'Gauge')
+ cy.inputKnobs('Fixed data', true, 'boolean')
+
+ cy.inputKnobs('Decimal Places', 1, 'number')
+ cy.wait(3000)
+
+ cy.inputKnobs('Gauge Lines', 1, 'number')
+ cy.inputKnobs('Ticks between lines', 39, 'number')
+
+ cy.inputKnobs('TickPrefix', 'kdfakdhj', 'text')
+ cy.snapshotComponent('gauge-test-tick-prefix')
+
+ cy.inputKnobs('TickPrefix', ' ', 'text')
+ cy.inputKnobs('TickSuffix', 'kdkdhj', 'text')
+ cy.snapshotComponent('gaure-test-ticksSuffix')
+ }
+ )
+})
\ No newline at end of file
diff --git a/stories/cypress/plugins/index.js b/stories/cypress/plugins/index.js
new file mode 100644
index 00000000..1625c0d0
--- /dev/null
+++ b/stories/cypress/plugins/index.js
@@ -0,0 +1,24 @@
+///
+// ***********************************************************
+// This example plugins/index.js can be used to load plugins
+//
+// You can change the location of this file or turn off loading
+// the plugins file with the 'pluginsFile' configuration option.
+//
+// You can read more here:
+// https://on.cypress.io/plugins-guide
+// ***********************************************************
+
+// This function is called when a project is opened or re-opened (e.g. due to
+// the project's config changing)
+
+const {addMatchImageSnapshotPlugin} = require('cypress-image-snapshot/plugin')
+
+/**
+ * @type {Cypress.PluginConfig}
+ */
+module.exports = (on, config) => {
+ // `on` is used to hook into various events Cypress emits
+ // `config` is the resolved Cypress config
+ addMatchImageSnapshotPlugin(on, config)
+}
diff --git a/stories/cypress/snapshots/test.test.ts/gauge-test-1.snap.png b/stories/cypress/snapshots/test.test.ts/gauge-test-1.snap.png
new file mode 100644
index 00000000..b7322ed7
Binary files /dev/null and b/stories/cypress/snapshots/test.test.ts/gauge-test-1.snap.png differ
diff --git a/stories/cypress/support/commands.ts b/stories/cypress/support/commands.ts
new file mode 100644
index 00000000..a92ae24f
--- /dev/null
+++ b/stories/cypress/support/commands.ts
@@ -0,0 +1,139 @@
+import {addMatchImageSnapshotCommand} from 'cypress-image-snapshot/command'
+import {Options as ImageSnapshotOptions} from 'cypress-image-snapshot'
+
+addMatchImageSnapshotCommand()
+
+// DOM node getters
+export const getByTestID = (
+ dataTest: string,
+ options?: Partial<
+ Cypress.Loggable & Cypress.Timeoutable & Cypress.Withinable & Cypress.Shadow
+ >
+): Cypress.Chainable => {
+ return cy.get(`[data-testid="${dataTest}"]`, options)
+}
+
+export const getByTestIDSubStr = (dataTest: string): Cypress.Chainable => {
+ return cy.get(`[data-testid*="${dataTest}"]`)
+}
+
+export const getByInputName = (name: string): Cypress.Chainable => {
+ return cy.get(`input[name=${name}]`)
+}
+
+export const getByInputValue = (value: string): Cypress.Chainable => {
+ return cy.get(`input[value='${value}']`)
+}
+
+export const getByTitle = (name: string): Cypress.Chainable => {
+ return cy.get(`[title="${name}"]`)
+}
+
+/**
+ * name is tab group name, storiname is tab name.
+ */
+export const visitTest = (name: string, storyname: string) => {
+ /** format string to stories url format */
+ const f = (str: string) =>
+ str
+ .replace(/ /g, '-')
+ .replace(/:/g, '')
+ .toLowerCase()
+ cy.visit(`${f(name)}--${f(storyname)}`)
+}
+
+// todo: replace waitings with reasonable checks(of iframe)
+/**
+ * check snapshot of component with existing
+ */
+export const snapshotComponent = (
+ snapshotName: string,
+ options: ImageSnapshotOptions = {}
+) => {
+ // cy.get("iframe").its("0.contentDocument").should('exist')
+ // .its('body').should('not.be.undefined')
+ // .its(`p[content*='placeholder for']`).contains
+
+ // enter full screen component
+ cy.wait(1_000)
+ // todo: better selector for zoom button
+ cy.get('.css-pvky73 > span > button').click()
+
+ cy.wait(1_000)
+ cy.matchImageSnapshot(snapshotName, options)
+
+ // exit full screen component
+ cy.get('.css-pvky73 > span > button').click()
+ cy.wait(1_000)
+}
+
+export const inputKnobs: {
+ (label: string, value: string): void
+ (label: string, value: string, type: 'text'): void
+ (label: string, value: string, type: 'select'): void
+ (label: string, value: number, type: 'number'): void
+ (label: string, value: boolean, type: 'boolean'): void
+} = (
+ label: string,
+ value: number | string | boolean,
+ type: 'range' | 'select' | 'number' | 'text' | 'boolean' = 'text'
+) => {
+ const escapeSpaces = (str: string) => str.replace(/ /, '\\ ')
+ const selector = `#${escapeSpaces(label)}, [name='${label}']`
+ switch (type) {
+ case 'text':
+ const valueStr = value as string
+ cy.get(selector)
+ .clear({force: true})
+ .type(valueStr, {force: true})
+ break
+ case 'number':
+ cy.get(selector)
+ .clear({force: true})
+ .type((value as number).toString(), {force: true})
+ break
+ case 'select':
+ cy.get(selector).select(value as string)
+ break
+ case 'boolean':
+ cy.get(selector + ' input')[value ? 'check' : 'uncheck']()
+ break
+ case 'range':
+ throw new Error(`Input knobs of type ${type} not implemented`)
+ // todo: input - range
+ // cy.get(`[name='${escapeSpaces(label)}']`)
+ // // .then(x => {
+ // // x.first().trigger("change", {value})
+ // // })
+ // // .invoke('val', value)
+ // // .invoke('attr', 'value', value)
+ // // .trigger('input', { force: true, data: value })
+ // // .trigger('change', { force: true, value })
+ // // .invoke('mouseup')
+ // // .trigger('blur')
+ // // .type(100)
+ // // .trigger('mousedown', { which: 1 })
+ // // .trigger('mousemove', { clientX: 0, clientY: 100 })
+ // // .trigger('mouseup', {force: true})
+ // cy.wait(1000)
+ // break
+ default:
+ throw new Error(`Input knobs of type ${type} not implemented`)
+ }
+}
+
+/* eslint-disable */
+
+// getters
+Cypress.Commands.add('getByTestID', getByTestID)
+Cypress.Commands.add('getByInputName', getByInputName)
+Cypress.Commands.add('getByInputValue', getByInputValue)
+Cypress.Commands.add('getByTitle', getByTitle)
+Cypress.Commands.add('getByTestIDSubStr', getByTestIDSubStr)
+
+// storybook helpers
+Cypress.Commands.add('visitTest', visitTest)
+Cypress.Commands.add('snapshotComponent', snapshotComponent)
+Cypress.Commands.add('inputKnobs', inputKnobs)
+
+/* eslint-enable */
diff --git a/stories/cypress/support/index.js b/stories/cypress/support/index.js
new file mode 100644
index 00000000..811b152d
--- /dev/null
+++ b/stories/cypress/support/index.js
@@ -0,0 +1,30 @@
+// ***********************************************************
+// This example support/index.js is processed and
+// loaded automatically before your test files.
+//
+// This is a great place to put global configuration and
+// behavior that modifies Cypress.
+//
+// You can change the location of this file or turn off
+// automatically serving support files with the
+// 'supportFile' configuration option.
+//
+// You can read more here:
+// https://on.cypress.io/configuration
+// ***********************************************************
+
+// Import commands.js using ES2015 syntax:
+import './commands'
+
+// Alternatively you can use CommonJS syntax:
+// require('./commands')
+
+const resizeObserverLoopErrRe = /> ResizeObserver loop limit exceeded/
+
+Cypress.on('uncaught:exception', err => {
+ if (resizeObserverLoopErrRe.test(err.message)) {
+ // returning false here prevents Cypress from
+ // failing the test
+ return false
+ }
+})
diff --git a/stories/cypress/tsconfig.json b/stories/cypress/tsconfig.json
new file mode 100644
index 00000000..bbb2c160
--- /dev/null
+++ b/stories/cypress/tsconfig.json
@@ -0,0 +1,13 @@
+{
+ "compilerOptions": {
+ "strict": true,
+ "baseUrl": "../node_modules",
+ "target": "es5",
+ "lib": ["es2017", "dom"],
+ "types": ["cypress", "mocha", "node"],
+ "jsx": "react",
+ "allowSyntheticDefaultImports": true,
+ "resolveJsonModule": true
+ },
+ "include": ["**/*.ts","../../node_modules/cypress"]
+}
diff --git a/stories/package.json b/stories/package.json
index b6f60ed1..5c771a60 100644
--- a/stories/package.json
+++ b/stories/package.json
@@ -3,14 +3,23 @@
"version": "1.0.0",
"license": "MIT",
"scripts": {
- "lint": "eslint '{src,../giraffe/src}/**/*.{ts,tsx}'",
- "prettier": "prettier --config ../.prettierrc.json --check '{src,../giraffe/src}/**/*.{ts,tsx}'",
- "prettier:fix": "prettier --config ../.prettierrc.json --write '{src,../giraffe/src}/**/*.{ts,tsx}'",
+ "test": "npm-run-all lint --parallel -r start:ci cy:ci",
+ "lint": "run-s typecheck eslint prettier",
+ "lint:fix": "run-s typecheck eslint:fix prettier:fix",
"typecheck": "tsc --noEmit --pretty",
+ "eslint": "eslint \"{,../giraffe}/{src,cypress}/**/*.{ts,tsx}\"",
+ "eslint:fix": "eslint \"{,../giraffe}/{src,cypress}/**/*.{ts,tsx}\" --fix",
+ "prettier": "prettier --config ../.prettierrc.json --check \"{,../giraffe}/{src,cypress}/**/*.{ts,tsx}\"",
+ "prettier:fix": "prettier --config ../.prettierrc.json --write \"{,../giraffe}/{src,cypress}/**/*.{ts,tsx}\"",
"start": "yarn -s run prettier:fix && yarn -s run storybook",
+ "start:ci": "yarn storybook --ci",
"storybook": "start-storybook -p 50000",
"publish": "storybook-to-ghpages --out=.out",
- "chromatic": "chromatic test"
+ "chromatic": "chromatic test",
+ "cy": "cypress open --env failOnSnapshotDiff=false",
+ "cy:ci": "wait-on http://localhost:50000/ && cypress run",
+ "cy:update": "cypress run --env updateSnapshots=true",
+ "cy:gen-diff": "cypress run --env failOnSnapshotDiff=false"
},
"devDependencies": {
"@babel/core": "^7.4.3",
@@ -18,6 +27,7 @@
"@storybook/core": "5",
"@storybook/react": "^5.0.10",
"@storybook/storybook-deployer": "^2.8.1",
+ "@types/cypress-image-snapshot": "^3.1.5",
"@types/memoize-one": "^4.1.1",
"@types/node-sass": "^4.11.0",
"@types/react": "^16.8.3",
@@ -26,8 +36,11 @@
"@typescript-eslint/eslint-plugin": "^1.5.0",
"@typescript-eslint/parser": "^1.5.0",
"babel-loader": "^8.0.5",
+ "cross-env": "^7.0.3",
"css-loader": "^3.6.0",
"css-modules-typescript-loader": "4.0.0",
+ "cypress": "^6.5.0",
+ "cypress-image-snapshot": "^4.0.1",
"eslint": "^5.15.3",
"eslint-config-prettier": "^5.0.0",
"eslint-plugin-prettier": "^3.0.1",
@@ -35,7 +48,9 @@
"file-loader": "^3.0.1",
"intl-dateformat": "^0.1.1",
"memoize-one": "^5.0.2",
+ "npm-run-all": "^4.1.5",
"prettier": "^1.19.1",
+ "process": "^0.11.10",
"react-virtualized-auto-sizer": "^1.0.2",
"resolve-url-loader": "^3.0.1",
"sass": "^1.22.7",
@@ -44,6 +59,7 @@
"ts-loader": "^6.0.4",
"typescript": "3.8.3",
"version-bump-prompt": "^5.0.0",
+ "wait-on": "^5.2.1",
"webpack": "^4.35.3"
},
"dependencies": {
@@ -53,4 +69,4 @@
"react-dev-utils": "11.0.1",
"react-dom": "^16.9.0"
}
-}
+}
\ No newline at end of file
diff --git a/stories/src/annotation.stories.tsx b/stories/src/annotation.stories.tsx
index 542ea71d..74a4dece 100644
--- a/stories/src/annotation.stories.tsx
+++ b/stories/src/annotation.stories.tsx
@@ -22,12 +22,12 @@ import {
annotationPinKnob,
} from './helpers'
-import {annotationsTable, matchAnnotationsToTable} from './data/annotation'
+import {matchAnnotationsToTable, getAnnotationsTable} from './data/annotation'
storiesOf('Annotations', module)
.addDecorator(withKnobs)
.add('Annotations: mark at every point', () => {
- const table = annotationsTable
+ const table = getAnnotationsTable(boolean('Fixed data', false))
const includeLineLayer = boolean('Line Layer', false)
const annotationColor = text('Annotation color string', 'green')
const annotationDimension = select(
@@ -145,7 +145,7 @@ storiesOf('Annotations', module)
)
})
.add('Annotations: overridden double click behavior', () => {
- const table = annotationsTable
+ const table = getAnnotationsTable(boolean('Fixed data', false))
const includeLineLayer = boolean('Line Layer', false)
const annotationColor = text('Annotation color string', 'green')
const annotationDimension = select(
@@ -280,7 +280,7 @@ storiesOf('Annotations', module)
)
})
.add('Annotations: selectable marks', () => {
- const table = annotationsTable
+ const table = getAnnotationsTable(boolean('Fixed data', false))
const includeLineLayer = boolean('Line Layer', true)
const annotationColor = text('Annotation color string', 'green')
const annotationDimension = select(
@@ -415,7 +415,7 @@ storiesOf('Annotations', module)
)
})
.add('Annotations: add your own marks', () => {
- const table = annotationsTable
+ const table = getAnnotationsTable(boolean('Fixed data', false))
const includeLineLayer = boolean('Line Layer', true)
const annotationColor = text('Annotation color string', 'green')
const annotationDimension = select(
diff --git a/stories/src/customLayer.stories.tsx b/stories/src/customLayer.stories.tsx
index 4d3bd8af..c3eca75e 100644
--- a/stories/src/customLayer.stories.tsx
+++ b/stories/src/customLayer.stories.tsx
@@ -27,7 +27,7 @@ import {
} from './helpers'
import {CPU} from './data/cpu'
-import {singleStatTable} from './data/singleStatLayer'
+import {getSingleStatTable} from './data/singleStatLayer'
storiesOf('Custom Layer', module)
.addDecorator(withKnobs)
@@ -68,6 +68,8 @@ storiesOf('Custom Layer', module)
)
})
.add('Single Stat', () => {
+ const fixed = boolean('Fixed data', false)
+ const singleStatTable = getSingleStatTable(fixed)
const decimalPlaces = Number(text('Decimal Places', '4'))
const textOpacity = number('Single Stat Opacity', 1, {
range: true,
@@ -123,6 +125,8 @@ storiesOf('Custom Layer', module)
)
})
.add('Single Stat on top of Line Layer', () => {
+ const fixed = boolean('Fixed data', false)
+ const singleStatTable = getSingleStatTable(fixed)
const includeSingleStatLayer = boolean('Single Stat', true)
const decimalPlaces = Number(text('Decimal Places', '2'))
const textOpacity = number('Single Stat Opacity', 1, {
diff --git a/stories/src/data/annotation.ts b/stories/src/data/annotation.ts
index 63dba6fa..fda38f09 100644
--- a/stories/src/data/annotation.ts
+++ b/stories/src/data/annotation.ts
@@ -5,32 +5,31 @@ import {
Table,
} from '../../../giraffe/src/types'
import {newTable} from '../../../giraffe/src'
+import {getRandomOrFixed, nowOrFixed} from './utils'
-const now = Date.now()
const numberOfRecords = 20
const recordsPerLine = 20
const maxValue = 10
-const TIME_COL = []
-const VALUE_COL = []
-const CPU_COL = []
-
const DEFAULT_COLOR = 'green'
-function getRandomNumber(max) {
- return Math.random() * Math.floor(max)
-}
-for (let i = 0; i < numberOfRecords; i += 1) {
- VALUE_COL.push(getRandomNumber(maxValue))
- CPU_COL.push(`cpu${Math.floor(i / recordsPerLine)}`)
- TIME_COL.push(now + (i % recordsPerLine) * 1000 * 60)
+export const getAnnotationsTable = (fixed: boolean) => {
+ const TIME_COL = []
+ const VALUE_COL = []
+ const CPU_COL = []
+
+ for (let i = 0; i < numberOfRecords; i += 1) {
+ VALUE_COL.push(getRandomOrFixed(fixed, i, maxValue))
+ CPU_COL.push(`cpu${Math.floor(i / recordsPerLine)}`)
+ TIME_COL.push(nowOrFixed(fixed) + (i % recordsPerLine) * 1000 * 60)
+ }
+
+ return newTable(numberOfRecords)
+ .addColumn('_time', 'dateTime:RFC3339', 'time', TIME_COL)
+ .addColumn('_value', 'system', 'number', VALUE_COL)
+ .addColumn('cpu', 'string', 'string', CPU_COL)
}
-export const annotationsTable = newTable(numberOfRecords)
- .addColumn('_time', 'dateTime:RFC3339', 'time', TIME_COL)
- .addColumn('_value', 'system', 'number', VALUE_COL)
- .addColumn('cpu', 'string', 'string', CPU_COL)
-
interface SampleAnnotationsCreatorOptions {
color: string
dimension: AnnotationDimension
diff --git a/stories/src/data/bandLayer.ts b/stories/src/data/bandLayer.ts
index d6165b53..ce8eab58 100644
--- a/stories/src/data/bandLayer.ts
+++ b/stories/src/data/bandLayer.ts
@@ -1,33 +1,32 @@
import {newTable} from '../../../giraffe/src'
+import {getRandomOrFixed, nowOrFixed} from './utils'
-const now = Date.now()
const numberOfRecords = 40
const recordsPerLine = 20
const maxValue = 100
-const TIME_COL = []
-const VALUE_COL = []
-const CPU_COL = []
-const FIELD_COL = []
-const MEASUREMENT_COL = []
-
const fieldName = 'usage_system'
const measurementName = 'cpu'
-function getRandomNumber(max) {
- return Math.random() * Math.floor(max)
-}
-for (let i = 0; i < numberOfRecords; i += 1) {
- FIELD_COL.push(fieldName)
- MEASUREMENT_COL.push(measurementName)
- VALUE_COL.push(getRandomNumber(maxValue))
- CPU_COL.push(`cpu${Math.floor(i / recordsPerLine)}`)
- TIME_COL.push(now + (i % recordsPerLine) * 1000 * 60)
-}
+export const getBandTable = (fixed: boolean) => {
+ const TIME_COL = []
+ const VALUE_COL = []
+ const CPU_COL = []
+ const FIELD_COL = []
+ const MEASUREMENT_COL = []
-export const bandTable = newTable(numberOfRecords)
- .addColumn('_field', 'string', 'string', FIELD_COL)
- .addColumn('_measurement', 'string', 'string', MEASUREMENT_COL)
- .addColumn('_time', 'dateTime:RFC3339', 'time', TIME_COL)
- .addColumn('_value', 'system', 'number', VALUE_COL)
- .addColumn('cpu', 'string', 'string', CPU_COL)
+ for (let i = 0; i < numberOfRecords; i += 1) {
+ FIELD_COL.push(fieldName)
+ MEASUREMENT_COL.push(measurementName)
+ VALUE_COL.push(getRandomOrFixed(fixed, i, maxValue))
+ CPU_COL.push(`cpu${Math.floor(i / recordsPerLine)}`)
+ TIME_COL.push(nowOrFixed(fixed) + (i % recordsPerLine) * 1000 * 60)
+ }
+
+ return newTable(numberOfRecords)
+ .addColumn('_field', 'string', 'string', FIELD_COL)
+ .addColumn('_measurement', 'string', 'string', MEASUREMENT_COL)
+ .addColumn('_time', 'dateTime:RFC3339', 'time', TIME_COL)
+ .addColumn('_value', 'system', 'number', VALUE_COL)
+ .addColumn('cpu', 'string', 'string', CPU_COL)
+}
diff --git a/stories/src/data/gaugeLayer.ts b/stories/src/data/gaugeLayer.ts
index f69f1cde..03414a15 100644
--- a/stories/src/data/gaugeLayer.ts
+++ b/stories/src/data/gaugeLayer.ts
@@ -1,30 +1,23 @@
-import {newTable, Table} from '../../../giraffe/src'
-import memoizeOne from 'memoize-one'
+import {newTable} from '../../../giraffe/src'
+import {getRandomOrFixed, nowOrFixed} from './utils'
-const now = Date.now()
const numberOfRecords = 20
const recordsPerLine = 20
-let TIME_COL: Array
-let VALUE_COL: Array
+export const getGaugeTable = (
+ fixed: boolean,
+ minValue: number,
+ maxValue: number
+) => {
+ const TIME_COL: Array = []
+ const VALUE_COL: Array = []
-function getRandomNumber(min: number, max: number) {
- return Math.random() * (max - min) + min
-}
-const createColumns = (minValue: number, maxValue: number) => {
- TIME_COL = []
- VALUE_COL = []
for (let i = 0; i < numberOfRecords; i += 1) {
- VALUE_COL.push(getRandomNumber(minValue, maxValue))
- TIME_COL.push(now + (i % recordsPerLine) * 1000 * 60)
+ VALUE_COL.push(getRandomOrFixed(fixed, i, minValue, maxValue))
+ TIME_COL.push(nowOrFixed(fixed) + (i % recordsPerLine) * 1000 * 60)
}
-}
-export const gaugeTable = memoizeOne(
- (minValue: number, maxValue: number): Table => {
- createColumns(minValue, maxValue)
- return newTable(numberOfRecords)
- .addColumn('_time', 'dateTime:RFC3339', 'time', TIME_COL)
- .addColumn('_value', 'system', 'number', VALUE_COL)
- }
-)
+ return newTable(numberOfRecords)
+ .addColumn('_time', 'dateTime:RFC3339', 'time', TIME_COL)
+ .addColumn('_value', 'system', 'number', VALUE_COL)
+}
diff --git a/stories/src/data/geoLayer.ts b/stories/src/data/geoLayer.ts
index aa6530f4..3a4d1271 100644
--- a/stories/src/data/geoLayer.ts
+++ b/stories/src/data/geoLayer.ts
@@ -1,46 +1,35 @@
import {newTable, Table} from '../../../giraffe/src'
import memoizeOne from 'memoize-one'
+import {getRandomOrFixed, nowOrFixed} from './utils'
-const now = Date.now()
-
-function getRandomNumber(center: number, spread: number) {
- return center + (0.5 - Math.random()) * spread * 2
-}
-
-const createDataColumns = (numberOfRecords: number) => {
+export const getGeoTable = (fixed: boolean, numberOfRecords = 200) => {
const TIME_COL = []
const VALUE1_COL = []
const VALUE2_COL = []
const LAT_COL = []
const LON_COL = []
for (let i = 0; i < numberOfRecords; i += 1) {
- VALUE1_COL.push(getRandomNumber(3.5, 3.5))
- VALUE2_COL.push(getRandomNumber(50, 30))
- LAT_COL.push(getRandomNumber(40, 3))
- LON_COL.push(getRandomNumber(-78, 3))
- TIME_COL.push(now + i * 1000 * 60)
+ VALUE1_COL.push(getRandomOrFixed(fixed, i, 0, 7))
+ VALUE2_COL.push(getRandomOrFixed(fixed, i, 20, 80))
+ LAT_COL.push(getRandomOrFixed(fixed, i, 37, 43))
+ LON_COL.push(getRandomOrFixed(fixed, i, -81, -75))
+ TIME_COL.push(nowOrFixed(fixed) + i * 1000 * 60)
}
- return {TIME_COL, VALUE1_COL, VALUE2_COL, LAT_COL, LON_COL}
-}
-export const geoTable = memoizeOne(
- (numberOfRecords = 200): Table => {
- const columns = createDataColumns(numberOfRecords)
- return newTable(numberOfRecords)
- .addColumn('_time', 'dateTime:RFC3339', 'time', columns.TIME_COL)
- .addColumn('magnitude', 'double', 'number', columns.VALUE1_COL)
- .addColumn('duration', 'double', 'number', columns.VALUE2_COL)
- .addColumn('lat', 'double', 'number', columns.LAT_COL)
- .addColumn('lon', 'double', 'number', columns.LON_COL)
- }
-)
+ return newTable(numberOfRecords)
+ .addColumn('_time', 'dateTime:RFC3339', 'time', TIME_COL)
+ .addColumn('magnitude', 'double', 'number', VALUE1_COL)
+ .addColumn('duration', 'double', 'number', VALUE2_COL)
+ .addColumn('lat', 'double', 'number', LAT_COL)
+ .addColumn('lon', 'double', 'number', LON_COL)
+}
-const addTrack = (data, startLat: number, startLon: number) => {
+const addTrack = (fixed: boolean, data, startLat: number, startLon: number) => {
const tid = Math.floor(Math.random() * 1000)
let lat = startLat,
lon = startLon
for (let i = 0; i < 10; i++) {
- const time = now + i * 1000 * 60
+ const time = nowOrFixed(fixed) + i * 1000 * 60
lat += Math.random() * 1.5
lon += Math.random() * 1.5
data.push({time, lat, lon, tid})
@@ -48,10 +37,10 @@ const addTrack = (data, startLat: number, startLon: number) => {
}
export const geoTracks = memoizeOne(
- (lon: number, lat: number, count = 1): Table => {
+ (fixed: boolean, lon: number, lat: number, count = 1): Table => {
const data = []
for (let i = 0; i < count; i++) {
- addTrack(data, lat - 4, lon - 6)
+ addTrack(fixed, data, lat - 4, lon - 6)
}
return newTable(data.length)
.addColumn(
diff --git a/stories/src/data/randomTable.ts b/stories/src/data/randomTable.ts
index 6adf6f55..bcf70c12 100644
--- a/stories/src/data/randomTable.ts
+++ b/stories/src/data/randomTable.ts
@@ -1,17 +1,14 @@
import {newTable} from '../../../giraffe/src/utils/newTable'
import memoizeOne from 'memoize-one'
+import {getRandomOrFixed, nowOrFixed} from './utils'
-const now = Date.now()
const defaultNumberOfRecords = 80
const defaultRecordsPerLine = 20
-function getRandomNumber(max) {
- return Math.random() * Math.floor(max) - max / 2
-}
-
export const getRandomTable = memoizeOne(
(
- maxValue: number,
+ fixed: boolean,
+ maxValue: number = 200,
numberOfRecords: number = defaultNumberOfRecords,
recordsPerLine: number = defaultRecordsPerLine
) => {
@@ -20,9 +17,9 @@ export const getRandomTable = memoizeOne(
const cpuColumn = []
for (let i = 0; i < numberOfRecords; i += 1) {
- valueColumn.push(getRandomNumber(maxValue))
+ valueColumn.push(getRandomOrFixed(fixed, i, maxValue))
cpuColumn.push(`cpu${Math.floor(i / recordsPerLine)}`)
- timeColumn.push(now + (i % recordsPerLine) * 1000 * 60)
+ timeColumn.push(nowOrFixed(fixed) + (i % recordsPerLine) * 1000 * 60)
}
return newTable(numberOfRecords)
diff --git a/stories/src/data/singleStatLayer.ts b/stories/src/data/singleStatLayer.ts
index 3418f4f8..2a7a6a2f 100644
--- a/stories/src/data/singleStatLayer.ts
+++ b/stories/src/data/singleStatLayer.ts
@@ -1,24 +1,23 @@
import {newTable} from '../../../giraffe/src'
+import {getRandomOrFixed, nowOrFixed} from './utils'
-const now = Date.now()
const numberOfRecords = 20
const recordsPerLine = 20
const maxValue = 10
-const TIME_COL = []
-const VALUE_COL = []
-const CPU_COL = []
+export const getSingleStatTable = (fixed: boolean) => {
+ const TIME_COL = []
+ const VALUE_COL = []
+ const CPU_COL = []
-function getRandomNumber(max) {
- return Math.random() * Math.floor(max)
-}
-for (let i = 0; i < numberOfRecords; i += 1) {
- VALUE_COL.push(getRandomNumber(maxValue))
- CPU_COL.push(`cpu${Math.floor(i / recordsPerLine)}`)
- TIME_COL.push(now + (i % recordsPerLine) * 1000 * 60)
-}
+ for (let i = 0; i < numberOfRecords; i += 1) {
+ VALUE_COL.push(getRandomOrFixed(fixed, i, maxValue))
+ CPU_COL.push(`cpu${Math.floor(i / recordsPerLine)}`)
+ TIME_COL.push(nowOrFixed(fixed) + (i % recordsPerLine) * 1000 * 60)
+ }
-export const singleStatTable = newTable(numberOfRecords)
- .addColumn('_time', 'dateTime:RFC3339', 'time', TIME_COL)
- .addColumn('_value', 'system', 'number', VALUE_COL)
- .addColumn('cpu', 'string', 'string', CPU_COL)
+ return newTable(numberOfRecords)
+ .addColumn('_time', 'dateTime:RFC3339', 'time', TIME_COL)
+ .addColumn('_value', 'system', 'number', VALUE_COL)
+ .addColumn('cpu', 'string', 'string', CPU_COL)
+}
diff --git a/stories/src/data/stackedLineLayer.ts b/stories/src/data/stackedLineLayer.ts
index 9b9a8be8..3ab50374 100644
--- a/stories/src/data/stackedLineLayer.ts
+++ b/stories/src/data/stackedLineLayer.ts
@@ -1,6 +1,6 @@
import {newTable} from '../../../giraffe/src'
+import {getRandomOrFixed, nowOrFixed} from './utils'
-const now = Date.now()
const numberOfRecords = 80
const recordsPerLine = 20
const maxValue = 100
@@ -35,49 +35,49 @@ const alphabet = [
'z',
]
-const TIME_COL = []
-const VALUE_COL = []
-const CPU_COL = []
-const TEST_COL_A = []
-const TEST_COL_B = []
-const TEST_COL_C = []
-const TEST_COL_D = []
-
-function getRandomNumber(max) {
- return Math.random() * Math.floor(max)
-}
-
-function getRandomAlphabetChar() {
- const index = Math.floor(Math.random() * (alphabet.length - 1))
- return alphabet[index]
-}
+function getRandomString(fixed: boolean, i: number) {
+ function getRandomAlphabetChar(ii: number) {
+ const index = Math.floor(
+ getRandomOrFixed(fixed, ii + i, alphabet.length - 1)
+ )
+ return alphabet[index]
+ }
-function getRandomString() {
- const stringLength = getRandomNumber(maxStringLength)
+ const stringLength = getRandomOrFixed(fixed, i, maxStringLength)
let randomString = ''
for (let i = 0; i <= stringLength; i++) {
- randomString += getRandomAlphabetChar()
+ randomString += getRandomAlphabetChar(i)
}
return randomString
}
-for (let i = 0; i < numberOfRecords; i += 1) {
- VALUE_COL.push(getRandomNumber(maxValue))
- CPU_COL.push(`cpu${Math.floor(i / recordsPerLine)}`)
- TIME_COL.push(now + (i % recordsPerLine) * 1000 * 60)
- TEST_COL_A.push(getRandomString())
- TEST_COL_B.push(getRandomString())
- TEST_COL_C.push(getRandomString())
- TEST_COL_D.push(getRandomString())
-}
+export const getStackedLineTable = (fixed: boolean) => {
+ const TIME_COL = []
+ const VALUE_COL = []
+ const CPU_COL = []
+ const TEST_COL_A = []
+ const TEST_COL_B = []
+ const TEST_COL_C = []
+ const TEST_COL_D = []
+
+ for (let i = 0; i < numberOfRecords; i += 1) {
+ VALUE_COL.push(getRandomOrFixed(fixed, i, maxValue))
+ CPU_COL.push(`cpu${Math.floor(i / recordsPerLine)}`)
+ TIME_COL.push(nowOrFixed(fixed) + (i % recordsPerLine) * 1000 * 60)
+ TEST_COL_A.push(getRandomString(fixed, i * 4 + 0))
+ TEST_COL_B.push(getRandomString(fixed, i * 4 + 1))
+ TEST_COL_C.push(getRandomString(fixed, i * 4 + 2))
+ TEST_COL_D.push(getRandomString(fixed, i * 4 + 3))
+ }
-export const stackedLineTable = newTable(numberOfRecords)
- .addColumn('_time', 'dateTime:RFC3339', 'time', TIME_COL)
- .addColumn('_value', 'system', 'number', VALUE_COL)
- .addColumn('cpu', 'string', 'string', CPU_COL)
- .addColumn('test_col_a', 'string', 'string', TEST_COL_A)
- .addColumn('test_col_b', 'string', 'string', TEST_COL_B)
- .addColumn('test_col_c', 'string', 'string', TEST_COL_C)
- .addColumn('test_col_d', 'string', 'string', TEST_COL_D)
+ return newTable(numberOfRecords)
+ .addColumn('_time', 'dateTime:RFC3339', 'time', TIME_COL)
+ .addColumn('_value', 'system', 'number', VALUE_COL)
+ .addColumn('cpu', 'string', 'string', CPU_COL)
+ .addColumn('test_col_a', 'string', 'string', TEST_COL_A)
+ .addColumn('test_col_b', 'string', 'string', TEST_COL_B)
+ .addColumn('test_col_c', 'string', 'string', TEST_COL_C)
+ .addColumn('test_col_d', 'string', 'string', TEST_COL_D)
+}
diff --git a/stories/src/data/utils.ts b/stories/src/data/utils.ts
new file mode 100644
index 00000000..f5d62f15
--- /dev/null
+++ b/stories/src/data/utils.ts
@@ -0,0 +1,20 @@
+// utilities for fixing data sources of stories for regression testing
+
+export const getRandomOrFixed: {
+ (fixed: boolean, index: number, minValue: number, maxValue: number): number
+ (fixed: boolean, index: number, maxValue: number): number
+} = (fixed: boolean, index: number, minValue: number, maxValue?: number) => {
+ if (maxValue === undefined) {
+ return getRandomOrFixed(fixed, index, 0, minValue)
+ }
+
+ if (fixed) {
+ return ((Math.sin(index) + 1) / 2) * (maxValue - minValue) + minValue
+ } else {
+ return Math.random() * (maxValue - minValue) + minValue
+ }
+}
+
+export const nowOrFixed = (fixed: boolean) => {
+ return fixed ? 0 : Date.now()
+}
diff --git a/stories/src/gauge.stories.tsx b/stories/src/gauge.stories.tsx
index 73c65016..1a5a721f 100644
--- a/stories/src/gauge.stories.tsx
+++ b/stories/src/gauge.stories.tsx
@@ -1,15 +1,16 @@
import * as React from 'react'
import {storiesOf} from '@storybook/react'
-import {withKnobs, number, text} from '@storybook/addon-knobs'
+import {withKnobs, number, text, boolean} from '@storybook/addon-knobs'
import {Config, Plot, GaugeTheme} from '../../giraffe/src'
import {DEFAULT_GAUGE_COLORS} from '../../giraffe/src'
import {PlotContainer} from './helpers'
-import {gaugeTable} from './data/gaugeLayer'
+import {getGaugeTable} from './data/gaugeLayer'
storiesOf('Gauge', module)
.addDecorator(withKnobs)
.add('Gauge', () => {
+ const fixed = boolean('Fixed data', false)
const decimalPlaces = Number(text('Decimal Places', '4'))
const lineCount = Number(text('Gauge Lines', '6'))
const smallLineCount = Number(text('Ticks between lines', '10'))
@@ -37,7 +38,7 @@ storiesOf('Gauge', module)
max: 200,
step: 1,
})
- const gaugeMin = Number(text('Gauge Min', '0'))
+ const gaugeMin = number('Gauge Min', 0)
const gaugeMax = Number(text('Gauge Max', '100'))
const prefix = text('Prefix', '')
const suffix = text('Suffix', '')
@@ -45,7 +46,7 @@ storiesOf('Gauge', module)
const tickSuffix = text('TickSuffix', '')
const config: Config = {
- table: gaugeTable(gaugeMin, gaugeMax),
+ table: getGaugeTable(fixed, gaugeMin, gaugeMax),
layers: [
{
type: 'gauge',
diff --git a/stories/src/geo.stories.tsx b/stories/src/geo.stories.tsx
index 9d280ceb..12069741 100644
--- a/stories/src/geo.stories.tsx
+++ b/stories/src/geo.stories.tsx
@@ -3,7 +3,7 @@ import {storiesOf} from '@storybook/react'
import {Config, Plot} from '../../giraffe/src'
import {PlotContainer} from './helpers'
-import {geoTable, geoTracks} from './data/geoLayer'
+import {getGeoTable, geoTracks} from './data/geoLayer'
import {
boolean,
color,
@@ -53,6 +53,7 @@ const genericKnobs = () => {
}
const buildCircleMapStory = tileServerConfiguration => () => {
+ const fixed = boolean('Fixed data', false)
const numberOfRecords = number('Circle count', 26, {
range: true,
min: 0,
@@ -61,7 +62,7 @@ const buildCircleMapStory = tileServerConfiguration => () => {
})
const {allowPanAndZoom, latitude, longitude, zoom} = genericKnobs()
const config: Config = {
- table: geoTable(numberOfRecords),
+ table: getGeoTable(fixed, numberOfRecords),
showAxes: false,
layers: [
{
@@ -99,6 +100,7 @@ const buildCircleMapStory = tileServerConfiguration => () => {
geo.add('Circle Markers', buildCircleMapStory(osmTileServerConfiguration))
geo.add('Map Markers Static', () => {
+ const fixed = boolean('Fixed data', false)
const numberOfRecords = number('Marker count', 20, {
range: true,
min: 0,
@@ -107,7 +109,7 @@ geo.add('Map Markers Static', () => {
})
const {allowPanAndZoom, latitude, longitude, zoom} = genericKnobs()
const config: Config = {
- table: geoTable(numberOfRecords),
+ table: getGeoTable(fixed, numberOfRecords),
showAxes: false,
layers: [
{
@@ -182,6 +184,7 @@ geo.add('Map Markers Custom CSV', () => {
})
geo.add('Marker Clustering', () => {
+ const fixed = boolean('Fixed data', false)
const {allowPanAndZoom, latitude, longitude, zoom} = genericKnobs()
const maxClusterRadius = number('Maximum Cluster Radius', 50, {
range: true,
@@ -201,7 +204,7 @@ geo.add('Marker Clustering', () => {
ClusterAggregation.mean
)
const config: Config = {
- table: geoTable(200),
+ table: getGeoTable(fixed, 200),
showAxes: false,
layers: [
{
@@ -256,6 +259,7 @@ const heatmapKnobs = () => {
}
geo.add('Heatmap', () => {
+ const fixed = boolean('Fixed data', false)
const numberOfPoints = number('Data point count', 200, {
range: true,
min: 0,
@@ -265,7 +269,7 @@ geo.add('Heatmap', () => {
const {allowPanAndZoom, latitude, longitude, zoom} = genericKnobs()
const {radius, blur} = heatmapKnobs()
const config: Config = {
- table: geoTable(numberOfPoints),
+ table: getGeoTable(fixed, numberOfPoints),
showAxes: false,
layers: [
{
@@ -333,6 +337,7 @@ const trackKnobs = () => {
}
geo.add('Tracks', () => {
+ const fixed = boolean('Fixed data', false)
const numberOfTracks = number('Track count', 3, {
range: true,
min: 0,
@@ -350,7 +355,7 @@ geo.add('Tracks', () => {
endStopMarkerRadius,
} = trackKnobs()
const config: Config = {
- table: geoTracks(-74, 40, numberOfTracks),
+ table: geoTracks(fixed, -74, 40, numberOfTracks),
showAxes: false,
layers: [
{
@@ -388,6 +393,7 @@ geo.add('Tracks', () => {
})
geo.add('Layering visualizations', () => {
+ const fixed = boolean('Fixed data', false)
const {allowPanAndZoom, latitude, longitude, zoom} = genericKnobs()
const {
speed,
@@ -398,7 +404,7 @@ geo.add('Layering visualizations', () => {
endStopMarkerRadius,
} = trackKnobs()
const config: Config = {
- table: geoTracks(-74, 40),
+ table: geoTracks(fixed, -74, 40),
showAxes: false,
layers: [
{
diff --git a/stories/src/index.stories.tsx b/stories/src/index.stories.tsx
index 7dd651e1..c0640e16 100644
--- a/stories/src/index.stories.tsx
+++ b/stories/src/index.stories.tsx
@@ -3,7 +3,7 @@ import {storiesOf} from '@storybook/react'
import {withKnobs, number, select, boolean, text} from '@storybook/addon-knobs'
import {Config, Plot, MAGMA, timeFormatter} from '../../giraffe/src'
-import {stackedLineTable} from './data/stackedLineLayer'
+import {getStackedLineTable} from './data/stackedLineLayer'
import {
PlotContainer,
@@ -27,7 +27,8 @@ import {
storiesOf('XY Plot', module)
.addDecorator(withKnobs)
.add('Stacked Line Layer', () => {
- const table = tableKnob(stackedLineTable)
+ const baseTable = getStackedLineTable(boolean('Fixed data', false))
+ const table = tableKnob(baseTable)
const colors = colorSchemeKnob()
const legendFont = legendFontKnob()
const tickFont = tickFontKnob()
diff --git a/stories/src/linegraph.stories.tsx b/stories/src/linegraph.stories.tsx
index b1282fb5..f9c6e0b6 100644
--- a/stories/src/linegraph.stories.tsx
+++ b/stories/src/linegraph.stories.tsx
@@ -25,12 +25,10 @@ import {
import {tooltipFalsyValues} from './data/fluxCSV'
-const maxValue = Math.random() * Math.floor(200)
-
storiesOf('Line Graph', module)
.addDecorator(withKnobs)
.add('User defined ticks', () => {
- let table = getRandomTable(maxValue)
+ let table = getRandomTable(boolean('Fixed data', false))
const xTickStart = number('xTickStart', new Date().getTime())
const xTickStep = number('xTickStep', 200_000)
const xTotalTicks = number('xTotalTicks', 5)
diff --git a/stories/src/utilities.stories.tsx b/stories/src/utilities.stories.tsx
index c280f69e..0142f75a 100644
--- a/stories/src/utilities.stories.tsx
+++ b/stories/src/utilities.stories.tsx
@@ -10,7 +10,7 @@ import {
fromFlux,
timeFormatter,
} from '../../giraffe/src'
-import {stackedLineTable} from './data/stackedLineLayer'
+import {getStackedLineTable} from './data/stackedLineLayer'
import {PlotEnv} from '../../giraffe/src/utils/PlotEnv'
@@ -51,7 +51,8 @@ import {
storiesOf('Utilities', module)
.addDecorator(withKnobs)
.add('Screenshot A Stacked Line Layer', () => {
- const table = tableKnob(stackedLineTable)
+ const baseTable = getStackedLineTable(boolean('fixed data', false))
+ const table = tableKnob(baseTable)
const colors = colorSchemeKnob()
const legendFont = legendFontKnob()
const tickFont = tickFontKnob()
diff --git a/tsconfig.json b/tsconfig.json
index 5e85b2af..68f07d65 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -2,7 +2,15 @@
"compilerOptions": {
"target": "es5",
"module": "es2015",
- "lib": ["es5", "es2015", "es2016", "es2017", "es2018", "esnext", "dom"],
+ "lib": [
+ "es5",
+ "es2015",
+ "es2016",
+ "es2017",
+ "es2018",
+ "esnext",
+ "dom"
+ ],
"sourceMap": true,
"allowJs": false,
"jsx": "react",
@@ -16,5 +24,8 @@
"strictNullChecks": false,
"downlevelIteration": true,
"skipLibCheck": true
- }
+ },
+ "exclude": [
+ "./stories/cypress"
+ ]
}
diff --git a/yarn.lock b/yarn.lock
index cb33fed4..6a07f0c7 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1272,6 +1272,50 @@
exec-sh "^0.3.2"
minimist "^1.2.0"
+"@cypress/listr-verbose-renderer@^0.4.1":
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/@cypress/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz#a77492f4b11dcc7c446a34b3e28721afd33c642a"
+ integrity sha1-p3SS9LEdzHxEajSz4ochr9M8ZCo=
+ dependencies:
+ chalk "^1.1.3"
+ cli-cursor "^1.0.2"
+ date-fns "^1.27.2"
+ figures "^1.7.0"
+
+"@cypress/request@^2.88.5":
+ version "2.88.5"
+ resolved "https://registry.yarnpkg.com/@cypress/request/-/request-2.88.5.tgz#8d7ecd17b53a849cfd5ab06d5abe7d84976375d7"
+ integrity sha512-TzEC1XMi1hJkywWpRfD2clreTa/Z+lOrXDCxxBTBPEcY5azdPi56A6Xw+O4tWJnaJH3iIE7G5aDXZC6JgRZLcA==
+ dependencies:
+ aws-sign2 "~0.7.0"
+ aws4 "^1.8.0"
+ caseless "~0.12.0"
+ combined-stream "~1.0.6"
+ extend "~3.0.2"
+ forever-agent "~0.6.1"
+ form-data "~2.3.2"
+ har-validator "~5.1.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"
+
+"@cypress/xvfb@^1.2.4":
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/@cypress/xvfb/-/xvfb-1.2.4.tgz#2daf42e8275b39f4aa53c14214e557bd14e7748a"
+ integrity sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==
+ dependencies:
+ debug "^3.1.0"
+ lodash.once "^4.1.1"
+
"@discoveryjs/json-ext@^0.5.0":
version "0.5.2"
resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.2.tgz#8f03a22a04de437254e8ce8cc84ba39689288752"
@@ -1425,6 +1469,18 @@
resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.2.tgz#63985d3d8b02530e0869962f4da09142ee8e200e"
integrity sha512-n/VQ4mbfr81aqkx/XmVicOLjviMuy02eenSdJY33SVA7S2J42EU0P1H0mOogfYedb3wXA0d/LVtBrgTSm04WEA==
+"@hapi/hoek@^9.0.0":
+ version "9.1.1"
+ resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.1.1.tgz#9daf5745156fd84b8e9889a2dc721f0c58e894aa"
+ integrity sha512-CAEbWH7OIur6jEOzaai83jq3FmKmv4PmX1JYfs9IrYcGEVI/lyL1EXJGCj7eFVJ0bg5QR8LMxBlEtA+xKiLpFw==
+
+"@hapi/topo@^5.0.0":
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-5.0.0.tgz#c19af8577fa393a06e9c77b60995af959be721e7"
+ integrity sha512-tFJlT47db0kMqVm3H4nQYgn6Pwg10GTZHb1pwmSiv1K4ks6drQOtfEF5ZnPjkvC+y4/bUPHK+bc87QvLcL+WMw==
+ dependencies:
+ "@hapi/hoek" "^9.0.0"
+
"@icons/material@^0.2.4":
version "0.2.4"
resolved "https://registry.yarnpkg.com/@icons/material/-/material-0.2.4.tgz#e90c9f71768b3736e76d7dd6783fc6c2afa88bc8"
@@ -1778,6 +1834,23 @@
dependencies:
any-observable "^0.3.0"
+"@sideway/address@^4.1.0":
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.1.tgz#9e321e74310963fdf8eebfbee09c7bd69972de4d"
+ integrity sha512-+I5aaQr3m0OAmMr7RQ3fR9zx55sejEYR2BFJaxL+zT3VM2611X0SHvPWIbAUBZVTn/YzYKbV8gJ2oT/QELknfQ==
+ dependencies:
+ "@hapi/hoek" "^9.0.0"
+
+"@sideway/formula@^3.0.0":
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.0.tgz#fe158aee32e6bd5de85044be615bc08478a0a13c"
+ integrity sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==
+
+"@sideway/pinpoint@^2.0.0":
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df"
+ integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==
+
"@sindresorhus/is@^0.7.0":
version "0.7.0"
resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd"
@@ -2294,6 +2367,11 @@
dependencies:
"@babel/types" "^7.3.0"
+"@types/cypress-image-snapshot@^3.1.5":
+ version "3.1.5"
+ resolved "https://registry.yarnpkg.com/@types/cypress-image-snapshot/-/cypress-image-snapshot-3.1.5.tgz#03d5b8e089e96a493da31bdb9aef16f34c0000c1"
+ integrity sha512-PoYmfojdRxrAi5kXi60NKSw3f9tmP7wGtyoRpMMcV4rlEOUzpyO6zmE9G0Z42u7i9erlyrwLVqFpbsN+uLq1Kg==
+
"@types/d3-array@^2.0.0":
version "2.0.0"
resolved "https://registry.yarnpkg.com/@types/d3-array/-/d3-array-2.0.0.tgz#a0d63a296a2d8435a9ec59393dcac746c6174a96"
@@ -2487,6 +2565,11 @@
resolved "https://registry.yarnpkg.com/@types/node/-/node-12.0.10.tgz#51babf9c7deadd5343620055fc8aff7995c8b031"
integrity sha512-LcsGbPomWsad6wmMNv7nBLw7YYYyfdYcz6xryKYQhx89c3XXan+8Q6AJ43G5XDIaklaVkK3mE4fCb0SBvMiPSQ==
+"@types/node@12.12.50":
+ version "12.12.50"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.50.tgz#e9b2e85fafc15f2a8aa8fdd41091b983da5fd6ee"
+ integrity sha512-5ImO01Fb8YsEOYpV+aeyGYztcYcjGsBvN4D7G5r1ef2cuQOpymjWNQi5V0rKHE6PC2ru3HkoUr/Br2/8GUA84w==
+
"@types/node@>= 8":
version "14.14.20"
resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.20.tgz#f7974863edd21d1f8a494a73e8e2b3658615c340"
@@ -2527,6 +2610,16 @@
"@types/prop-types" "*"
csstype "^2.2.0"
+"@types/sinonjs__fake-timers@^6.0.1":
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-6.0.2.tgz#3a84cf5ec3249439015e14049bd3161419bf9eae"
+ integrity sha512-dIPoZ3g5gcx9zZEszaxLSVTvMReD3xxyyDnQUjA6IYDG9Ba2AV0otMPs+77sG9ojB4Qr2N2Vk5RnKeuA0X/0bg==
+
+"@types/sizzle@^2.3.2":
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.2.tgz#a811b8c18e2babab7d542b3365887ae2e4d9de47"
+ integrity sha512-7EJYyKTL7tFR8+gDbB6Wwz/arpGa0Mywk1TJbNzKzHtzbwVmY4HR9WqS5VV7dsBUKQmPNr192jHr/VpBluj/hg==
+
"@types/source-list-map@*":
version "0.1.2"
resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9"
@@ -3203,6 +3296,13 @@ ansi-escapes@^3.0.0, ansi-escapes@^3.2.0:
resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b"
integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==
+ansi-escapes@^4.1.0:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61"
+ integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==
+ dependencies:
+ type-fest "^0.11.0"
+
ansi-escapes@^4.2.1:
version "4.3.0"
resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.0.tgz#a4ce2b33d6b214b7950d8595c212f12ac9cc569d"
@@ -3275,6 +3375,13 @@ anymatch@^3.0.3, anymatch@~3.1.1:
normalize-path "^3.0.0"
picomatch "^2.0.4"
+app-path@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/app-path/-/app-path-3.2.0.tgz#06d426e0c988885264e0aa0a766dfa2723491633"
+ integrity sha512-PQPaKXi64FZuofJkrtaO3I5RZESm9Yjv7tkeJaDz4EZMeBBfGtr5MyQ3m5AC7F0HVrISBLatPxAAAgvbe418fQ==
+ dependencies:
+ execa "^1.0.0"
+
app-root-dir@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/app-root-dir/-/app-root-dir-1.0.2.tgz#38187ec2dea7577fff033ffcb12172692ff6e118"
@@ -3285,6 +3392,11 @@ aproba@^1.0.3, aproba@^1.1.1:
resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
+arch@^2.1.2:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/arch/-/arch-2.2.0.tgz#1bc47818f305764f23ab3306b0bfc086c5a29d11"
+ integrity sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==
+
are-we-there-yet@~1.1.2:
version "1.1.5"
resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21"
@@ -3501,6 +3613,11 @@ async@^2.1.4:
dependencies:
lodash "^4.17.11"
+async@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/async/-/async-3.2.0.tgz#b3a2685c5ebb641d3de02d161002c60fc9f85720"
+ integrity sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==
+
asynckit@^0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
@@ -3561,6 +3678,13 @@ axios@0.19.0:
follow-redirects "1.5.10"
is-buffer "^2.0.2"
+axios@^0.21.1:
+ version "0.21.1"
+ resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.1.tgz#22563481962f4d6bde9a76d516ef0e5d3c09b2b8"
+ integrity sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==
+ dependencies:
+ follow-redirects "^1.10.0"
+
babel-code-frame@^6.22.0:
version "6.26.0"
resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
@@ -3973,6 +4097,11 @@ base64-js@^1.0.2:
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3"
integrity sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==
+base64-js@^1.2.3:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
+ integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
+
base@^0.11.1:
version "0.11.2"
resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
@@ -4013,6 +4142,11 @@ binary-extensions@^2.0.0:
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9"
integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==
+blob-util@2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/blob-util/-/blob-util-2.0.2.tgz#3b4e3c281111bb7f11128518006cdc60b403a1eb"
+ integrity sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==
+
block-stream@*:
version "0.0.9"
resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a"
@@ -4025,6 +4159,11 @@ bluebird@^3.3.5, bluebird@^3.5.5:
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.5.tgz#a8d0afd73251effbbd5fe384a77d73003c17a71f"
integrity sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==
+bluebird@^3.7.2:
+ version "3.7.2"
+ resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
+ integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
+
bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0:
version "4.11.9"
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828"
@@ -4223,6 +4362,11 @@ bser@^2.0.0:
dependencies:
node-int64 "^0.4.0"
+buffer-crc32@~0.2.3:
+ version "0.2.13"
+ resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
+ integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=
+
buffer-from@1.x, buffer-from@^1.0.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
@@ -4300,6 +4444,11 @@ cacheable-request@^2.1.1:
normalize-url "2.0.1"
responselike "1.0.2"
+cachedir@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.3.0.tgz#0c75892a052198f0b21c7c1804d8331edfcae0e8"
+ integrity sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==
+
call-me-maybe@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b"
@@ -4518,6 +4667,11 @@ check-error@^1.0.2:
resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82"
integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=
+check-more-types@^2.24.0:
+ version "2.24.0"
+ resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.24.0.tgz#1420ffb10fd444dcfc79b43891bbfffd32a84600"
+ integrity sha1-FCD/sQ/URNz8ebQ4kbv//TKoRgA=
+
"chokidar@>=2.0.0 <4.0.0":
version "3.4.0"
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.0.tgz#b30611423ce376357c765b9b8f904b9fba3c0be8"
@@ -4655,6 +4809,13 @@ cli-boxes@^2.2.0:
resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.0.tgz#538ecae8f9c6ca508e3c3c95b453fe93cb4c168d"
integrity sha512-gpaBrMAizVEANOpfZp/EEUixTXDyGt7DFzdK5hU+UbWt/J0lB0w20ncZj59Z9a93xHb9u12zF5BS6i9RKbtg4w==
+cli-cursor@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987"
+ integrity sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=
+ dependencies:
+ restore-cursor "^1.0.1"
+
cli-cursor@^2.0.0, cli-cursor@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
@@ -4679,6 +4840,16 @@ cli-table3@0.5.1:
optionalDependencies:
colors "^1.1.2"
+cli-table3@~0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.0.tgz#b7b1bc65ca8e7b5cef9124e13dc2b21e2ce4faee"
+ integrity sha512-gnB85c3MGC7Nm9I/FkiasNBOKjOiO1RNuXXarQms37q4QMpWdlbBgD/VnOStA2faG1dpXMv31RFApjX1/QdgWQ==
+ dependencies:
+ object-assign "^4.1.0"
+ string-width "^4.2.0"
+ optionalDependencies:
+ colors "^1.1.2"
+
cli-truncate@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574"
@@ -4868,6 +5039,11 @@ commander@^2.20.0:
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
+commander@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae"
+ integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==
+
commander@^7.0.0:
version "7.1.0"
resolved "https://registry.yarnpkg.com/commander/-/commander-7.1.0.tgz#f2eaecf131f10e36e07d894698226e36ae0eb5ff"
@@ -4905,7 +5081,7 @@ concat-map@0.0.1:
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
-concat-stream@^1.5.0:
+concat-stream@^1.5.0, concat-stream@^1.6.2:
version "1.6.2"
resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==
@@ -5114,6 +5290,13 @@ create-react-context@^0.2.1:
fbjs "^0.8.0"
gud "^1.0.0"
+cross-env@^7.0.3:
+ version "7.0.3"
+ resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf"
+ integrity sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==
+ dependencies:
+ cross-spawn "^7.0.1"
+
cross-spawn@6.0.5, cross-spawn@^6.0.0, cross-spawn@^6.0.5:
version "6.0.5"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
@@ -5125,7 +5308,7 @@ cross-spawn@6.0.5, cross-spawn@^6.0.0, cross-spawn@^6.0.5:
shebang-command "^1.2.0"
which "^1.2.9"
-cross-spawn@7.0.3, cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3:
+cross-spawn@7.0.3, cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3:
version "7.0.3"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
@@ -5350,6 +5533,64 @@ cyclist@~0.2.2:
resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640"
integrity sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=
+cypress-image-snapshot@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/cypress-image-snapshot/-/cypress-image-snapshot-4.0.1.tgz#59084e713a8d03500c8e053ad7a76f3f18609648"
+ integrity sha512-PBpnhX/XItlx3/DAk5ozsXQHUi72exybBNH5Mpqj1DVmjq+S5Jd9WE5CRa4q5q0zuMZb2V2VpXHth6MjFpgj9Q==
+ dependencies:
+ chalk "^2.4.1"
+ fs-extra "^7.0.1"
+ glob "^7.1.3"
+ jest-image-snapshot "4.2.0"
+ pkg-dir "^3.0.0"
+ term-img "^4.0.0"
+
+cypress@^6.5.0:
+ version "6.6.0"
+ resolved "https://registry.yarnpkg.com/cypress/-/cypress-6.6.0.tgz#659c64cdb06e51b6be18fdac39d8f192deb54fa0"
+ integrity sha512-+Xx3Zn653LJHUsCb9h1Keql2jlazbr1ROmbY6DFJMmXKLgXP4ez9cE403W93JNGRbZK0Tng3R/oP8mvd9XAPVg==
+ dependencies:
+ "@cypress/listr-verbose-renderer" "^0.4.1"
+ "@cypress/request" "^2.88.5"
+ "@cypress/xvfb" "^1.2.4"
+ "@types/node" "12.12.50"
+ "@types/sinonjs__fake-timers" "^6.0.1"
+ "@types/sizzle" "^2.3.2"
+ arch "^2.1.2"
+ blob-util "2.0.2"
+ bluebird "^3.7.2"
+ cachedir "^2.3.0"
+ chalk "^4.1.0"
+ check-more-types "^2.24.0"
+ cli-table3 "~0.6.0"
+ commander "^5.1.0"
+ common-tags "^1.8.0"
+ dayjs "^1.9.3"
+ debug "4.3.2"
+ eventemitter2 "^6.4.2"
+ execa "^4.0.2"
+ executable "^4.1.1"
+ extract-zip "^1.7.0"
+ fs-extra "^9.0.1"
+ getos "^3.2.1"
+ is-ci "^2.0.0"
+ is-installed-globally "^0.3.2"
+ lazy-ass "^1.6.0"
+ listr "^0.14.3"
+ lodash "^4.17.19"
+ log-symbols "^4.0.0"
+ minimist "^1.2.5"
+ moment "^2.29.1"
+ ospath "^1.2.2"
+ pretty-bytes "^5.4.1"
+ ramda "~0.27.1"
+ request-progress "^3.0.0"
+ supports-color "^7.2.0"
+ tmp "~0.2.1"
+ untildify "^4.0.0"
+ url "^0.11.0"
+ yauzl "^2.10.0"
+
"d3-array@^1.2.0 || 2", d3-array@^2.0.3:
version "2.2.0"
resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-2.2.0.tgz#a9e966b8f8d78f0888d98db1fb840fc8da8ac5c7"
@@ -5460,7 +5701,12 @@ date-now@^0.1.4:
resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b"
integrity sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=
-debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0:
+dayjs@^1.9.3:
+ version "1.10.4"
+ resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.10.4.tgz#8e544a9b8683f61783f570980a8a80eaf54ab1e2"
+ integrity sha512-RI/Hh4kqRc1UKLOAf/T5zdMMX5DQIlDxwUe3wSyMMnEbGunnpENCdbUgM+dW7kXidZqCttBrmw7BhN4TMddkCw==
+
+debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.9:
version "2.6.9"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
@@ -5474,6 +5720,13 @@ debug@3.2.6, debug@^3.2.5, debug@^3.2.6:
dependencies:
ms "^2.1.1"
+debug@4.3.2:
+ version "4.3.2"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b"
+ integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==
+ dependencies:
+ ms "2.1.2"
+
debug@=3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
@@ -5481,7 +5734,7 @@ debug@=3.1.0:
dependencies:
ms "2.0.0"
-debug@^3.0.1:
+debug@^3.0.1, debug@^3.1.0:
version "3.2.7"
resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
@@ -6402,6 +6655,11 @@ etag@~1.8.1:
resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=
+eventemitter2@^6.4.2:
+ version "6.4.4"
+ resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.4.tgz#aa96e8275c4dbeb017a5d0e03780c65612a1202b"
+ integrity sha512-HLU3NDY6wARrLCEwyGKRBvuWYyvW6mHYv72SJJAH3iJN3a6eVUvkjFkcxah1bcTgGVBBrFdIopBJPhCQFMLyXw==
+
eventemitter3@^3.1.0:
version "3.1.2"
resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7"
@@ -6463,7 +6721,7 @@ execa@^1.0.0:
signal-exit "^3.0.0"
strip-eof "^1.0.0"
-execa@^4.0.0:
+execa@^4.0.0, execa@^4.0.2:
version "4.1.0"
resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a"
integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==
@@ -6493,6 +6751,18 @@ execa@^5.0.0:
signal-exit "^3.0.3"
strip-final-newline "^2.0.0"
+executable@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/executable/-/executable-4.1.1.tgz#41532bff361d3e57af4d763b70582db18f5d133c"
+ integrity sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==
+ dependencies:
+ pify "^2.2.0"
+
+exit-hook@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8"
+ integrity sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=
+
exit@^0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c"
@@ -6609,6 +6879,16 @@ extglob@^2.0.4:
snapdragon "^0.8.1"
to-regex "^3.0.1"
+extract-zip@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.7.0.tgz#556cc3ae9df7f452c493a0cfb51cc30277940927"
+ integrity sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==
+ dependencies:
+ concat-stream "^1.6.2"
+ debug "^2.6.9"
+ mkdirp "^0.5.4"
+ yauzl "^2.10.0"
+
extsprintf@1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
@@ -6729,6 +7009,13 @@ fbjs@^0.8.0, fbjs@^0.8.1:
setimmediate "^1.0.5"
ua-parser-js "^0.7.18"
+fd-slicer@~1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e"
+ integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=
+ dependencies:
+ pend "~1.2.0"
+
figgy-pudding@^3.5.1:
version "3.5.1"
resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790"
@@ -6929,6 +7216,11 @@ follow-redirects@1.5.10:
dependencies:
debug "=3.1.0"
+follow-redirects@^1.10.0:
+ version "1.13.3"
+ resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.3.tgz#e5598ad50174c1bc4e872301e82ac2cd97f90267"
+ integrity sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA==
+
for-in@^0.1.3:
version "0.1.8"
resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.8.tgz#d8773908e31256109952b1fdb9b3fa867d2775e1"
@@ -7028,6 +7320,15 @@ fs-extra@^0.30.0:
path-is-absolute "^1.0.0"
rimraf "^2.2.8"
+fs-extra@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9"
+ integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==
+ dependencies:
+ graceful-fs "^4.1.2"
+ jsonfile "^4.0.0"
+ universalify "^0.1.0"
+
fs-extra@^8.0.1:
version "8.0.1"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.0.1.tgz#90294081f978b1f182f347a440a209154344285b"
@@ -7047,6 +7348,16 @@ fs-extra@^9.0.0:
jsonfile "^6.0.1"
universalify "^1.0.0"
+fs-extra@^9.0.1:
+ version "9.1.0"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d"
+ integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==
+ dependencies:
+ at-least-node "^1.0.0"
+ graceful-fs "^4.2.0"
+ jsonfile "^6.0.1"
+ universalify "^2.0.0"
+
fs-minipass@^1.2.5:
version "1.2.6"
resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.6.tgz#2c5cc30ded81282bfe8a0d7c7c1853ddeb102c07"
@@ -7172,6 +7483,11 @@ get-stdin@^4.0.1:
resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=
+get-stdin@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398"
+ integrity sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=
+
get-stdin@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b"
@@ -7206,6 +7522,13 @@ get-value@^2.0.3, get-value@^2.0.6:
resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=
+getos@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/getos/-/getos-3.2.1.tgz#0134d1f4e00eb46144c5a9c0ac4dc087cbb27dc5"
+ integrity sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==
+ dependencies:
+ async "^3.2.0"
+
getpass@^0.1.1:
version "0.1.7"
resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
@@ -7297,6 +7620,13 @@ glob@^7.0.3, glob@^7.1.6, glob@~7.1.1:
once "^1.3.0"
path-is-absolute "^1.0.0"
+global-dirs@^2.0.1:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-2.1.0.tgz#e9046a49c806ff04d6c1825e196c8f0091e8df4d"
+ integrity sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==
+ dependencies:
+ ini "1.3.7"
+
global-modules@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780"
@@ -7390,6 +7720,11 @@ globule@^1.0.0:
lodash "~4.17.10"
minimatch "~3.0.2"
+glur@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/glur/-/glur-1.1.2.tgz#f20ea36db103bfc292343921f1f91e83c3467689"
+ integrity sha1-8g6jbbEDv8KSNDkh8fkeg8NGdok=
+
good-listener@^1.2.2:
version "1.2.2"
resolved "https://registry.yarnpkg.com/good-listener/-/good-listener-1.2.2.tgz#d53b30cdf9313dffb7dc9a0d477096aa6d145c50"
@@ -7911,7 +8246,7 @@ inherits@2.0.3:
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
-ini@^1.3.5, ini@~1.3.0:
+ini@1.3.7, ini@^1.3.5, ini@~1.3.0:
version "1.3.7"
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84"
integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==
@@ -8235,6 +8570,14 @@ is-hexadecimal@^1.0.0:
resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.3.tgz#e8a426a69b6d31470d3a33a47bb825cda02506ee"
integrity sha512-zxQ9//Q3D/34poZf8fiy3m3XVpbQc7ren15iKqrTtLPwkPD/t3Scy9Imp63FujULGxuK0ZlCwoo5xNpktFgbOA==
+is-installed-globally@^0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.3.2.tgz#fd3efa79ee670d1187233182d5b0a1dd00313141"
+ integrity sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==
+ dependencies:
+ global-dirs "^2.0.1"
+ is-path-inside "^3.0.1"
+
is-number@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
@@ -8259,6 +8602,11 @@ is-observable@^1.1.0:
dependencies:
symbol-observable "^1.1.0"
+is-path-inside@^3.0.1:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.2.tgz#f5220fc82a3e233757291dddc9c5877f2a1f3017"
+ integrity sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==
+
is-plain-obj@^1.0.0, is-plain-obj@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
@@ -8455,6 +8803,14 @@ isurl@^1.0.0-alpha5:
has-to-string-tag-x "^1.2.0"
is-object "^1.0.1"
+iterm2-version@^4.1.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/iterm2-version/-/iterm2-version-4.2.0.tgz#b78069f747f34a772bc7dc17bda5bd9ed5e09633"
+ integrity sha512-IoiNVk4SMPu6uTcK+1nA5QaHNok2BMDLjSl5UomrOixe5g4GkylhPwuiGdw00ysSCrXAKNMfFTu+u/Lk5f6OLQ==
+ dependencies:
+ app-path "^3.2.0"
+ plist "^3.0.1"
+
java-properties@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/java-properties/-/java-properties-1.0.2.tgz#ccd1fa73907438a5b5c38982269d0e771fe78211"
@@ -8610,6 +8966,21 @@ jest-haste-map@^26.6.2:
optionalDependencies:
fsevents "^2.1.2"
+jest-image-snapshot@4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/jest-image-snapshot/-/jest-image-snapshot-4.2.0.tgz#559d7ade69e9918517269cef184261c80029a69e"
+ integrity sha512-6aAqv2wtfOgxiJeBayBCqHo1zX+A12SUNNzo7rIxiXh6W6xYVu8QyHWkada8HeRi+QUTHddp0O0Xa6kmQr+xbQ==
+ dependencies:
+ chalk "^1.1.3"
+ get-stdin "^5.0.1"
+ glur "^1.1.2"
+ lodash "^4.17.4"
+ mkdirp "^0.5.1"
+ pixelmatch "^5.1.0"
+ pngjs "^3.4.0"
+ rimraf "^2.6.2"
+ ssim.js "^3.1.1"
+
jest-jasmine2@^26.6.3:
version "26.6.3"
resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz#adc3cf915deacb5212c93b9f3547cd12958f2edd"
@@ -8884,6 +9255,17 @@ jest@^26.6.3:
import-local "^3.0.2"
jest-cli "^26.6.3"
+joi@^17.3.0:
+ version "17.4.0"
+ resolved "https://registry.yarnpkg.com/joi/-/joi-17.4.0.tgz#b5c2277c8519e016316e49ababd41a1908d9ef20"
+ integrity sha512-F4WiW2xaV6wc1jxete70Rw4V/VuMd6IN+a5ilZsxG4uYtUXWu2kq9W5P2dz30e7Gmw8RCbY/u/uk+dMPma9tAg==
+ dependencies:
+ "@hapi/hoek" "^9.0.0"
+ "@hapi/topo" "^5.0.0"
+ "@sideway/address" "^4.1.0"
+ "@sideway/formula" "^3.0.0"
+ "@sideway/pinpoint" "^2.0.0"
+
js-base64@^2.1.8:
version "2.6.3"
resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.6.3.tgz#7afdb9b57aa7717e15d370b66e8f36a9cb835dc3"
@@ -9148,6 +9530,11 @@ klona@^2.0.4:
resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.4.tgz#7bb1e3affb0cb8624547ef7e8f6708ea2e39dfc0"
integrity sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==
+lazy-ass@^1.6.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513"
+ integrity sha1-eZllXoZGwX8In90YfRUNMyTVRRM=
+
lazy-cache@^0.2.3:
version "0.2.7"
resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-0.2.7.tgz#7feddf2dcb6edb77d11ef1d117ab5ffdf0ab1b65"
@@ -9265,7 +9652,7 @@ listr-verbose-renderer@^0.5.0:
date-fns "^1.27.2"
figures "^2.0.0"
-listr@0.14.3:
+listr@0.14.3, listr@^0.14.3:
version "0.14.3"
resolved "https://registry.yarnpkg.com/listr/-/listr-0.14.3.tgz#2fea909604e434be464c50bddba0d496928fa586"
integrity sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==
@@ -9500,6 +9887,11 @@ lodash.min@^4.0.0:
resolved "https://registry.yarnpkg.com/lodash.min/-/lodash.min-4.0.1.tgz#4ac1b9a8baf8b6d28a690d716512510cfc14708c"
integrity sha1-SsG5qLr4ttKKaQ1xZRJRDPwUcIw=
+lodash.once@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac"
+ integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=
+
lodash.pairs@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/lodash.pairs/-/lodash.pairs-3.0.1.tgz#bbe08d5786eeeaa09a15c91ebf0dcb7d2be326a9"
@@ -9552,6 +9944,11 @@ lodash@^4.0.0, lodash@^4.0.1, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15,
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b"
integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==
+lodash@^4.17.20, lodash@^4.17.4:
+ version "4.17.21"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
+ integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
+
log-symbols@2.2.0, log-symbols@^2.1.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a"
@@ -9573,6 +9970,13 @@ log-symbols@^3.0.0:
dependencies:
chalk "^2.4.2"
+log-symbols@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.0.0.tgz#69b3cc46d20f448eccdb75ea1fa733d9e821c920"
+ integrity sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==
+ dependencies:
+ chalk "^4.0.0"
+
log-update@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/log-update/-/log-update-2.3.0.tgz#88328fd7d1ce7938b29283746f0b1bc126b24708"
@@ -10101,7 +10505,7 @@ mkdirp@1.x:
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
-"mkdirp@>=0.5 0":
+"mkdirp@>=0.5 0", mkdirp@^0.5.4:
version "0.5.5"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
@@ -10137,7 +10541,7 @@ mocha@^6.1.4:
yargs-parser "13.0.0"
yargs-unparser "1.5.0"
-moment@^2.18.1:
+moment@^2.18.1, moment@^2.29.1:
version "2.29.1"
resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.1.tgz#b2be769fa31940be9eeea6469c075e35006fa3d3"
integrity sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==
@@ -10727,6 +11131,11 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0:
dependencies:
wrappy "1"
+onetime@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789"
+ integrity sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=
+
onetime@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4"
@@ -10847,6 +11256,11 @@ osenv@0, osenv@^0.1.4:
os-homedir "^1.0.0"
os-tmpdir "^1.0.0"
+ospath@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/ospath/-/ospath-1.2.2.tgz#1276639774a3f8ef2572f7fe4280e0ea4550c07b"
+ integrity sha1-EnZjl3Sj+O8lcvf+QoDg6kVQwHs=
+
p-cancelable@^0.4.0:
version "0.4.1"
resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.4.1.tgz#35f363d67d52081c8d9585e37bcceb7e0bbcb2a0"
@@ -11171,6 +11585,11 @@ pbkdf2@^3.0.3:
safe-buffer "^5.0.1"
sha.js "^2.4.8"
+pend@~1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
+ integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA=
+
performance-now@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
@@ -11191,7 +11610,7 @@ pidtree@^0.3.0:
resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.3.0.tgz#f6fada10fccc9f99bf50e90d0b23d72c9ebc2e6b"
integrity sha512-9CT4NFlDcosssyg8KVFltgokyKZIFjoBxw8CTGy+5F38Y1eQWrt8tRayiUOXE+zVKQnYu5BR8JjCtvK3BcnBhg==
-pify@^2.0.0:
+pify@^2.0.0, pify@^2.2.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw=
@@ -11225,6 +11644,13 @@ pirates@^4.0.1:
dependencies:
node-modules-regexp "^1.0.0"
+pixelmatch@^5.1.0:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/pixelmatch/-/pixelmatch-5.2.1.tgz#9e4e4f4aa59648208a31310306a5bed5522b0d65"
+ integrity sha512-WjcAdYSnKrrdDdqTcVEY7aB7UhhwjYQKYhHiBXdJef0MOaQeYpUdQ+iVyBLa5YBKS8MPVPPMX7rpOByISLpeEQ==
+ dependencies:
+ pngjs "^4.0.1"
+
pkg-dir@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3"
@@ -11253,11 +11679,30 @@ pkg-up@3.1.0, pkg-up@^3.1.0:
dependencies:
find-up "^3.0.0"
+plist@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/plist/-/plist-3.0.1.tgz#a9b931d17c304e8912ef0ba3bdd6182baf2e1f8c"
+ integrity sha512-GpgvHHocGRyQm74b6FWEZZVRroHKE1I0/BTjAmySaohK+cUn+hZpbqXkc3KWgW3gQYkqcQej35FohcT0FRlkRQ==
+ dependencies:
+ base64-js "^1.2.3"
+ xmlbuilder "^9.0.7"
+ xmldom "0.1.x"
+
pluralize@^8.0.0:
version "8.0.0"
resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1"
integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==
+pngjs@^3.4.0:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-3.4.0.tgz#99ca7d725965fb655814eaf65f38f12bbdbf555f"
+ integrity sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==
+
+pngjs@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-4.0.1.tgz#f803869bb2fc1bfe1bf99aa4ec21c108117cfdbe"
+ integrity sha512-rf5+2/ioHeQxR6IxuYNYGFytUyG3lma/WW1nsmjeHlWwtb2aByla6dkVc8pmJ9nplzkTA0q2xx7mMWrOTqT4Gg==
+
pnp-webpack-plugin@1.4.3:
version "1.4.3"
resolved "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.4.3.tgz#0a100b63f4a1d09cee6ee55a87393b69f03ab5c7"
@@ -11502,6 +11947,11 @@ prettier@^1.19.1:
resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb"
integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==
+pretty-bytes@^5.4.1:
+ version "5.6.0"
+ resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb"
+ integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==
+
pretty-error@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3"
@@ -11771,6 +12221,11 @@ ramda@^0.21.0:
resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.21.0.tgz#a001abedb3ff61077d4ff1d577d44de77e8d0a35"
integrity sha1-oAGr7bP/YQd9T/HVd9RN536NCjU=
+ramda@~0.27.1:
+ version "0.27.1"
+ resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.27.1.tgz#66fc2df3ef873874ffc2da6aa8984658abacf5c9"
+ integrity sha512-PgIdVpn5y5Yns8vqb8FzBUEYn98V3xcPgawAkkgj0YJ0qDsnHCiNmZYfOGMgOvoB0eWFLpYbhxUR3mxfDIMvpw==
+
randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
@@ -12500,6 +12955,13 @@ replace-ext@1.0.0:
resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb"
integrity sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=
+request-progress@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/request-progress/-/request-progress-3.0.0.tgz#4ca754081c7fec63f505e4faa825aa06cd669dbe"
+ integrity sha1-TKdUCBx/7GP1BeT6qCWqBs1mnb4=
+ dependencies:
+ throttleit "^1.0.0"
+
request-promise-core@1.1.4:
version "1.1.4"
resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f"
@@ -12673,6 +13135,14 @@ responselike@1.0.2:
dependencies:
lowercase-keys "^1.0.0"
+restore-cursor@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541"
+ integrity sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=
+ dependencies:
+ exit-hook "^1.0.0"
+ onetime "^1.0.0"
+
restore-cursor@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
@@ -12717,7 +13187,7 @@ rework@1.0.1:
convert-source-map "^0.3.3"
css "^2.0.0"
-rimraf@2:
+rimraf@2, rimraf@^2.6.2:
version "2.7.1"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
@@ -12789,6 +13259,13 @@ rxjs@^6.4.0:
dependencies:
tslib "^1.9.0"
+rxjs@^6.6.3:
+ version "6.6.6"
+ resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.6.tgz#14d8417aa5a07c5e633995b525e1e3c0dec03b70"
+ integrity sha512-/oTwee4N4iWzAMAL9xdGKjkEHmIwupR3oXbQjCKywF1BeFohswF3vZdogbmEF6pZkOsXTzWkrZszrWpQTByYVg==
+ dependencies:
+ tslib "^1.9.0"
+
s2-geometry@^1.2.10:
version "1.2.10"
resolved "https://registry.yarnpkg.com/s2-geometry/-/s2-geometry-1.2.10.tgz#c6ff22f3eccafd0eea491b60b44c141b9887acab"
@@ -13435,6 +13912,11 @@ sshpk@^1.7.0:
safer-buffer "^2.0.2"
tweetnacl "~0.14.0"
+ssim.js@^3.1.1:
+ version "3.5.0"
+ resolved "https://registry.yarnpkg.com/ssim.js/-/ssim.js-3.5.0.tgz#d7276b9ee99b57a5ff0db34035f02f35197e62df"
+ integrity sha512-Aj6Jl2z6oDmgYFFbQqK7fght19bXdOxY7Tj03nF+03M9gCBAjeIiO8/PlEGMfKDwYpw4q6iBqVq2YuREorGg/g==
+
ssri@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8"
@@ -13772,7 +14254,7 @@ supports-color@^6.1.0:
dependencies:
has-flag "^3.0.0"
-supports-color@^7.0.0, supports-color@^7.1.0:
+supports-color@^7.0.0, supports-color@^7.1.0, supports-color@^7.2.0:
version "7.2.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
@@ -13879,6 +14361,14 @@ telejson@^2.2.1:
lodash.get "^4.4.2"
memoizerific "^1.11.3"
+term-img@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/term-img/-/term-img-4.1.0.tgz#5b170961f7aa20b2f3b22deb8ad504beb963a8a5"
+ integrity sha512-DFpBhaF5j+2f7kheKFc1ajsAUUDGOaNPpKPtiIMxlbfud6mvfFZuWGnTRpaujUa5J7yl6cIw/h6nyr4mSsENPg==
+ dependencies:
+ ansi-escapes "^4.1.0"
+ iterm2-version "^4.1.0"
+
term-size@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69"
@@ -13959,6 +14449,11 @@ throat@^5.0.0:
resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b"
integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==
+throttleit@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.0.tgz#9e785836daf46743145a5984b6268d828528ac6c"
+ integrity sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw=
+
through2@^2.0.0, through2@~2.0.3:
version "2.0.5"
resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd"
@@ -14008,7 +14503,7 @@ tmp@^0.0.33:
dependencies:
os-tmpdir "~1.0.2"
-tmp@^0.2.0:
+tmp@^0.2.0, tmp@~0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14"
integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==
@@ -14234,6 +14729,11 @@ type-detect@4.0.8, type-detect@^4.0.0, type-detect@^4.0.5, type-detect@^4.0.8:
resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c"
integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==
+type-fest@^0.11.0:
+ version "0.11.0"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1"
+ integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==
+
type-fest@^0.18.0:
version "0.18.1"
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f"
@@ -14433,6 +14933,11 @@ unset-value@^1.0.0:
has-value "^0.3.1"
isobject "^3.0.0"
+untildify@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b"
+ integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==
+
upath@^1.1.1:
version "1.1.2"
resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.2.tgz#3db658600edaeeccbe6db5e684d67ee8c2acd068"
@@ -14659,6 +15164,17 @@ w3c-xmlserializer@^2.0.0:
dependencies:
xml-name-validator "^3.0.0"
+wait-on@^5.2.1:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/wait-on/-/wait-on-5.2.1.tgz#05b66fcb4d7f5da01537f03e7cf96e8836422996"
+ integrity sha512-H2F986kNWMU9hKlI9l/ppO6tN8ZSJd35yBljMLa1/vjzWP++Qh6aXyt77/u7ySJFZQqBtQxnvm/xgG48AObXcw==
+ dependencies:
+ axios "^0.21.1"
+ joi "^17.3.0"
+ lodash "^4.17.20"
+ minimist "^1.2.5"
+ rxjs "^6.6.3"
+
walker@^1.0.7, walker@~1.0.5:
version "1.0.7"
resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb"
@@ -15060,11 +15576,21 @@ xmlbuilder@^10.0.0:
resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-10.1.1.tgz#8cae6688cc9b38d850b7c8d3c0a4161dcaf475b0"
integrity sha512-OyzrcFLL/nb6fMGHbiRDuPup9ljBycsdCypwuyg5AAHvyWzGfChJpCXMG88AGTIMFhGZ9RccFN1e6lhg3hkwKg==
+xmlbuilder@^9.0.7:
+ version "9.0.7"
+ resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d"
+ integrity sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=
+
xmlchars@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb"
integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==
+xmldom@0.1.x:
+ version "0.1.31"
+ resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.31.tgz#b76c9a1bd9f0a9737e5a72dc37231cf38375e2ff"
+ integrity sha512-yS2uJflVQs6n+CyjHoaBmVSqIDevTAWrzMmjG1Gc7h1qQ7uVozNhEPJAwZXWyGQ/Gafo3fCwrcaokezLPupVyQ==
+
xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
@@ -15250,6 +15776,14 @@ yarn-or-npm@^3.0.1:
cross-spawn "^6.0.5"
pkg-dir "^4.2.0"
+yauzl@^2.10.0:
+ version "2.10.0"
+ resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9"
+ integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=
+ dependencies:
+ buffer-crc32 "~0.2.3"
+ fd-slicer "~1.1.0"
+
yocto-queue@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"